111 lines
2.7 KiB
TypeScript
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,
|
|
);
|