First steps towards the SAS partnership * otp flow now pretends to do the linking * Update LinkAccountForm header * Update redirect times * Clean up comments * Set maxAge on sas cookies * make all SAS routes protected * Merge remote-tracking branch 'refs/remotes/origin/feature/sas-login' into feature/sas-login * Require auth for sas link flow * Fix resend otp * Add error support to OneTimePasswordForm * Add Sentry to SAS error boundary * Move SAS_REQUEST_OTP_STATE_STORAGE_COOKIE_NAME * Add missing translations * Merge branch 'master' of bitbucket.org:scandic-swap/web into feature/sas-login * Merge branch 'feature/sas-login' of bitbucket.org:scandic-swap/web into feature/sas-login * Add TooManyCodesError component * Refactor GenericError to support new errors * Add FailedAttemptsError * remove removed component <VWOScript/> * Merge branch 'feature/sas-login' of bitbucket.org:scandic-swap/web into feature/sas-login * remove local cookie-bot reference * Fix sas campaign logo scaling * feature toggle the SAS stuff * Merge branch 'feature/sas-login' of bitbucket.org:scandic-swap/web into feature/sas-login * fix: use env vars for SAS endpoints Approved-by: Linus Flood
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export type VerifyOtpResponseError = "OTP_EXPIRED" | "WRONG_OTP" | "UNKNOWN"
|
|
|
|
const VerifyOtpGeneralError = z.enum(["AUTH_TOKEN_NOT_FOUND", "UNKNOWN"])
|
|
export type VerifyOtpGeneralError = z.infer<typeof VerifyOtpGeneralError>
|
|
|
|
export type VerifyOtpError = {
|
|
errorCode: VerifyOtpResponseError | VerifyOtpGeneralError
|
|
}
|
|
export function parseSASVerifyOtpError(
|
|
error: SasOtpVerifyError | {}
|
|
): VerifyOtpError {
|
|
const parseResult = sasOtpVerifyErrorSchema.safeParse(error)
|
|
if (!parseResult.success) {
|
|
const generalErrorResult = VerifyOtpGeneralError.safeParse(error)
|
|
if (!generalErrorResult.success) {
|
|
return {
|
|
errorCode: "UNKNOWN",
|
|
}
|
|
}
|
|
|
|
return {
|
|
errorCode: generalErrorResult.data,
|
|
}
|
|
}
|
|
|
|
return {
|
|
errorCode: getErrorCodeByNumber(parseResult.data.errorCode),
|
|
}
|
|
}
|
|
|
|
const SAS_VERIFY_OTP_ERROR_CODES: {
|
|
[key in Exclude<VerifyOtpResponseError, "UNKNOWN">]: number
|
|
} = {
|
|
OTP_EXPIRED: 1,
|
|
WRONG_OTP: 2,
|
|
}
|
|
|
|
const getErrorCodeByNumber = (number: number): VerifyOtpResponseError => {
|
|
const v =
|
|
Object.entries(SAS_VERIFY_OTP_ERROR_CODES).find(
|
|
([_, value]) => value === number
|
|
)?.[0] ?? "UNKNOWN"
|
|
|
|
return v as VerifyOtpResponseError
|
|
}
|
|
|
|
const sasOtpVerifyErrorSchema = z.object({
|
|
status: z.string(),
|
|
otpExpiration: z.string().datetime(),
|
|
error: z.string(),
|
|
errorCode: z.number(),
|
|
databaseUUID: z.string().uuid(),
|
|
})
|
|
|
|
export type SasOtpVerifyError = z.infer<typeof sasOtpVerifyErrorSchema>
|