import { AuthMethod } from "anastasis-core"; import { h, VNode } from "preact"; import postalIcon from "../../../assets/icons/auth_method/postal.svg"; import questionIcon from "../../../assets/icons/auth_method/question.svg"; import smsIcon from "../../../assets/icons/auth_method/sms.svg"; import videoIcon from "../../../assets/icons/auth_method/video.svg"; import { AuthMethodEmailSetup as EmailSetup } from "./AuthMethodEmailSetup"; import { AuthMethodEmailSolve as EmailSolve } from "./AuthMethodEmailSolve"; import { AuthMethodIbanSetup as IbanSetup } from "./AuthMethodIbanSetup"; import { AuthMethodPostSetup as PostalSetup } from "./AuthMethodPostSetup"; import { AuthMethodQuestionSetup as QuestionSetup } from "./AuthMethodQuestionSetup"; import { AuthMethodSmsSetup as SmsSetup } from "./AuthMethodSmsSetup"; import { AuthMethodTotpSetup as TotpSetup } from "./AuthMethodTotpSetup"; import { AuthMethodVideoSetup as VideoSetup } from "./AuthMethodVideoSetup"; import { AuthMethodIbanSolve as IbanSolve } from "./AuthMethodIbanSolve"; import { AuthMethodPostSolve as PostalSolve } from "./AuthMethodPostSolve"; import { AuthMethodQuestionSolve as QuestionSolve } from "./AuthMethodQuestionSolve"; import { AuthMethodSmsSolve as SmsSolve } from "./AuthMethodSmsSolve"; import { AuthMethodTotpSolve as TotpSolve } from "./AuthMethodTotpSolve"; import { AuthMethodVideoSolve as VideoSolve } from "./AuthMethodVideoSolve"; export type AuthMethodWithRemove = AuthMethod & { remove: () => void }; export interface AuthMethodSetupProps { method: string; addAuthMethod: (x: any) => void; configured: AuthMethodWithRemove[]; cancel: () => void; } export interface AuthMethodSolveProps { id: string; } interface AuthMethodConfiguration { icon: VNode; label: string; setup: (props: AuthMethodSetupProps) => VNode; solve: (props: AuthMethodSolveProps) => VNode; skip?: boolean; } // export type KnownAuthMethods = "sms" | "email" | "post" | "question" | "video" | "totp" | "iban"; const ALL_METHODS = [ "sms", "email", "post", "question", "video", "totp", "iban", ] as const; export type KnownAuthMethods = typeof ALL_METHODS[number]; export function isKnownAuthMethods(value: string): value is KnownAuthMethods { return ALL_METHODS.includes(value as KnownAuthMethods); } type KnowMethodConfig = { [name in KnownAuthMethods]: AuthMethodConfiguration; }; export const authMethods: KnowMethodConfig = { question: { icon: , label: "Question", setup: QuestionSetup, solve: QuestionSolve, }, sms: { icon: , label: "SMS", setup: SmsSetup, solve: SmsSolve, }, email: { icon: , label: "Email", setup: EmailSetup, solve: EmailSolve, }, iban: { icon: , label: "IBAN", setup: IbanSetup, solve: IbanSolve, }, post: { icon: , label: "Physical mail", setup: PostalSetup, solve: PostalSolve, }, totp: { icon: , label: "TOTP", setup: TotpSetup, solve: TotpSolve, }, video: { icon: , label: "Video", setup: VideoSetup, solve: VideoSolve, skip: true, }, };