// @ts-nocheck import type { BaseRequest, BaseResponse } from "../../framework"; import OverrideableBuilder from "supertokens-js-override"; import { GeneralErrorResponse, JSONObject, UserContext } from "../../types"; import { User } from "../../user"; import { SessionContainer } from "../session"; import { SessionContainerInterface } from "../session/types"; import Recipe from "./recipe"; import { TenantConfig } from "../multitenancy/types"; import RecipeUserId from "../../recipeUserId"; export type MFARequirementList = ({ oneOf: string[]; } | { allOfInAnyOrder: string[]; } | string)[]; export type MFAClaimValue = { c: Record; v: boolean; }; export type TypeInput = { firstFactors?: string[]; override?: { functions?: (originalImplementation: RecipeInterface, builder: OverrideableBuilder) => RecipeInterface; apis?: (originalImplementation: APIInterface, builder: OverrideableBuilder) => APIInterface; }; }; export type TypeNormalisedInput = { firstFactors?: string[]; override: { functions: (originalImplementation: RecipeInterface, builder: OverrideableBuilder) => RecipeInterface; apis: (originalImplementation: APIInterface, builder: OverrideableBuilder) => APIInterface; }; }; export type RecipeInterface = { assertAllowedToSetupFactorElseThrowInvalidClaimError: (input: { session: SessionContainer; factorId: string; mfaRequirementsForAuth: Promise; factorsSetUpForUser: Promise; userContext: UserContext; }) => Promise; getMFARequirementsForAuth: (input: { tenantId: string; accessTokenPayload: JSONObject; completedFactors: MFAClaimValue["c"]; user: Promise; factorsSetUpForUser: Promise; requiredSecondaryFactorsForUser: Promise; requiredSecondaryFactorsForTenant: Promise; userContext: UserContext; }) => Promise | MFARequirementList; markFactorAsCompleteInSession: (input: { session: SessionContainerInterface; factorId: string; userContext: UserContext; }) => Promise; getFactorsSetupForUser: (input: { user: User; userContext: UserContext; }) => Promise; getRequiredSecondaryFactorsForUser: (input: { userId: string; userContext: UserContext; }) => Promise; addToRequiredSecondaryFactorsForUser: (input: { userId: string; factorId: string; userContext: UserContext; }) => Promise; removeFromRequiredSecondaryFactorsForUser: (input: { userId: string; factorId: string; userContext: UserContext; }) => Promise; }; export type APIOptions = { recipeImplementation: RecipeInterface; recipeInstance: Recipe; config: TypeNormalisedInput; recipeId: string; isInServerlessEnv: boolean; req: BaseRequest; res: BaseResponse; }; export type APIInterface = { resyncSessionAndFetchMFAInfoPUT: undefined | ((input: { options: APIOptions; session: SessionContainerInterface; userContext: UserContext; }) => Promise<{ status: "OK"; factors: { next: string[]; alreadySetup: string[]; allowedToSetup: string[]; }; emails: Record; phoneNumbers: Record; } | GeneralErrorResponse>); }; export type GetFactorsSetupForUserFromOtherRecipesFunc = (user: User, userContext: UserContext) => Promise; export type GetAllAvailableSecondaryFactorIdsFromOtherRecipesFunc = (tenantConfig: TenantConfig) => string[]; export type GetEmailsForFactorFromOtherRecipesFunc = (user: User, sessionRecipeUserId: RecipeUserId) => { status: "OK"; factorIdToEmailsMap: Record; } | { status: "UNKNOWN_SESSION_RECIPE_USER_ID"; }; export type GetPhoneNumbersForFactorsFromOtherRecipesFunc = (user: User, sessionRecipeUserId: RecipeUserId) => { status: "OK"; factorIdToPhoneNumberMap: Record; } | { status: "UNKNOWN_SESSION_RECIPE_USER_ID"; }; export declare const FactorIds: { EMAILPASSWORD: string; WEBAUTHN: string; OTP_EMAIL: string; OTP_PHONE: string; LINK_EMAIL: string; LINK_PHONE: string; THIRDPARTY: string; TOTP: string; };