Feat/LOY-158 signup with existing email error handling * feat(LOY-158): Add handling for email conflict during signup - Implement specific error handling for email conflict in signup form - Add localized error message for existing email accounts across language dictionaries - Introduce new error type `conflictError` in trpc error handling * fix(LOY-158): revert translation changes * fix(LOY-158): Correct Finnish translation for cancellation message Approved-by: Christian Andolf
86 lines
1.8 KiB
TypeScript
86 lines
1.8 KiB
TypeScript
import { TRPCError } from "@trpc/server"
|
|
|
|
export function unauthorizedError(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: `Unauthorized`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export function forbiddenError(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "FORBIDDEN",
|
|
message: `Forbidden`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export function conflictError(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "CONFLICT",
|
|
message: `Conflict`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export function badRequestError(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: `Bad request`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export function notFound(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "NOT_FOUND",
|
|
message: `Not found`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export function internalServerError(cause?: unknown) {
|
|
return new TRPCError({
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
message: `Internal Server Error`,
|
|
cause,
|
|
})
|
|
}
|
|
|
|
export const SESSION_EXPIRED = "SESSION_EXPIRED"
|
|
export class SessionExpiredError extends Error {}
|
|
export function sessionExpiredError() {
|
|
return new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: SESSION_EXPIRED,
|
|
cause: new SessionExpiredError(SESSION_EXPIRED),
|
|
})
|
|
}
|
|
|
|
export const PUBLIC_UNAUTHORIZED = "PUBLIC_UNAUTHORIZED"
|
|
export class PublicUnauthorizedError extends Error {}
|
|
export function publicUnauthorizedError() {
|
|
return new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: PUBLIC_UNAUTHORIZED,
|
|
cause: new PublicUnauthorizedError(PUBLIC_UNAUTHORIZED),
|
|
})
|
|
}
|
|
|
|
export function serverErrorByStatus(status: number, cause?: unknown) {
|
|
switch (status) {
|
|
case 401:
|
|
return unauthorizedError(cause)
|
|
case 403:
|
|
return forbiddenError(cause)
|
|
case 404:
|
|
return notFound(cause)
|
|
case 409:
|
|
return conflictError(cause)
|
|
case 500:
|
|
default:
|
|
return internalServerError(cause)
|
|
}
|
|
}
|