Keyborg/server/api.ts
2025-02-14 02:37:30 +03:00

111 lines
2.7 KiB
TypeScript

import { Api } from "@src/lib/apiValidator.ts";
import { createValidationError, z } from "@shared/utils/validator.ts";
import {
adminPasswordAlreadySetErrorSchema,
adminPasswordNotSetErrorSchema,
commandExecutionErrorSchema,
failedToParseRequestAsJSONErrorSchema,
invalidPasswordErrorSchema,
passwordsMustMatchErrorSchema,
queryExecutionErrorSchema,
requestValidationErrorSchema,
tooManyRequestsErrorSchema,
unauthorizedErrorSchema,
usbipUnknownErrorSchema,
} from "@src/lib/errors.ts";
const loginApiSchema = {
req: z.obj({
password: z.string(),
}),
res: z.result(
z.void(),
z.union([
adminPasswordNotSetErrorSchema,
queryExecutionErrorSchema,
failedToParseRequestAsJSONErrorSchema,
requestValidationErrorSchema,
tooManyRequestsErrorSchema,
invalidPasswordErrorSchema,
]),
),
};
export const loginApi = new Api("/login", "POST", loginApiSchema);
const passwordSetupApiSchema = {
req: z.obj({
password: z.string().min(
10,
"Password must be at least 10 characters long",
).regex(
/^[a-zA-Z0-9]+$/,
"Password must consist of lower or upper case latin letters and numbers",
),
passwordRepeat: z.string(),
}).addCheck((v) => {
if (v.passwordRepeat !== v.password) {
return createValidationError(v, {
kind: "general",
msg: "Passwords must match",
});
}
}),
res: z.result(
z.void(),
z.union([
passwordsMustMatchErrorSchema,
adminPasswordAlreadySetErrorSchema,
queryExecutionErrorSchema,
failedToParseRequestAsJSONErrorSchema,
requestValidationErrorSchema,
tooManyRequestsErrorSchema,
]),
),
};
export const passwordSetupApi = new Api(
"/setup",
"POST",
passwordSetupApiSchema,
);
const updateDevicesApiSchema = {
req: z.void(),
res: z.result(
z.void(),
z.union([
queryExecutionErrorSchema,
tooManyRequestsErrorSchema,
unauthorizedErrorSchema,
commandExecutionErrorSchema,
usbipUnknownErrorSchema,
]),
),
};
export const updateDevicesApi = new Api(
"/api/updateDevices",
"POST",
updateDevicesApiSchema,
);
const versionApiSchema = {
req: z.void(),
res: z.result(
z.obj({
app: z.literal("Keyborg"),
version: z.string(),
}),
z.union([
tooManyRequestsErrorSchema,
]),
),
};
export const versionApi = new Api(
"/version",
"POST",
versionApiSchema,
);