40 lines
888 B
TypeScript
40 lines
888 B
TypeScript
import { t } from "elysia";
|
|
|
|
export const errorCodes = [
|
|
"INVALID_QUERY_PARAMS",
|
|
"UNKNOWN_ERROR",
|
|
"INVALID_PAYLOAD",
|
|
"MALFORMED_SLOT",
|
|
"INVALID_HEADER",
|
|
"BODY_TOO_LARGE",
|
|
"UNAUTHORIZED",
|
|
"INVALID_CREDENTIALS",
|
|
"ENTITY_NOT_FOUND",
|
|
"SERVER_ERROR",
|
|
"RATE_LIMIT_EXCEEDED",
|
|
"ENTITY_EXISTS",
|
|
"THIRD_PARTY_ERROR"
|
|
];
|
|
|
|
function generateErrorCodeRegex(strings: string[]): string {
|
|
if (strings.length === 0) {
|
|
return "(?!)";
|
|
}
|
|
|
|
const escapedStrings = strings.map((str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
|
|
|
return `^(${escapedStrings.join("|")})$`;
|
|
}
|
|
|
|
export const ErrorResponseSchema = t.Object({
|
|
code: t.String({ pattern: generateErrorCodeRegex(errorCodes) }),
|
|
message: t.String(),
|
|
errors: t.Array(t.String()),
|
|
i18n: t.Optional(
|
|
t.Object({
|
|
key: t.String(),
|
|
values: t.Optional(t.Record(t.String(), t.Union([t.String(), t.Number(), t.Date()])))
|
|
})
|
|
)
|
|
});
|