UNPKG

@kilterset/auth0-actions-testing

Version:

Test and develop Auth0 Actions or Okta CIC Actions locally.

188 lines (167 loc) 4.73 kB
import Auth0, { MultifactorEnableOptions, PromptState } from "../../types"; import { cache as mockCache } from "./cache"; import { user as mockUser } from "../user"; import { request as mockRequest } from "../request"; import { accessTokenMock } from "./access-token"; import { accessMock } from "./access"; import { authenticationMock, FactorList } from "./authentication"; import { idTokenMock } from "./id-token"; import { multifactorMock } from "./multifactor"; import { promptMock } from "./prompt"; import { redirectMock } from "./redirect"; import { userMock } from "./user"; import { samlResponseMock } from "./saml-response"; import { validationMock } from "./validation"; import { rulesMock } from "./rules"; export interface PostLoginOptions { user?: Auth0.User; cache?: Record<string, string>; executedRules?: string[]; now?: ConstructorParameters<typeof Date>[0]; request?: Auth0.Request; } type SamlAttributeValue = | string | number | boolean | null | Array<string | number | boolean>; interface SamlResponseState { attributes: Record<string, SamlAttributeValue>; createUpnClaim: boolean; passthroughClaimsWithNoMapping: boolean; mapUnknownClaimsAsIs: boolean; mapIdentities: boolean; signResponse: boolean; lifetimeInSeconds: number; nameIdentifierFormat: string; nameIdentifierProbes: string[]; authnContextClassRef: string; includeAttributeNameFormat: boolean; typedAttributes: boolean; audience: string; recipient: string; destination: string; cert?: string; encryptionCert?: string; encryptionPublicKey?: string; key?: string; signingCert?: string; } export interface PostLoginState { user: Auth0.User; cache: Auth0.API.Cache; access: { denied: false } | { denied: { reason: string } }; accessToken: { claims: Record<string, unknown>; scopes: string[]; }; authentication: { primaryUserId: string; challenge: FactorList | false; enrollment: FactorList | false; newlyRecordedMethods: string[]; }; idToken: { claims: Record<string, unknown>; }; prompt: { rendered: PromptState | null }; multifactor: { enabled: | false | { provider: string; options?: MultifactorEnableOptions; }; }; samlResponse: SamlResponseState; validation: { error: { code: string; message: string } | null; }; redirect: { url: URL; queryParams: Record<string, string> } | null; } export function postLogin({ user, request, cache, executedRules: optionallyExecutedRules, now: nowValue, }: PostLoginOptions = {}) { const userValue = user ?? mockUser(); const executedRules = optionallyExecutedRules ?? []; const requestValue = request ?? mockRequest(); const now = new Date(nowValue || Date.now()); const apiCache = mockCache(cache); const access = accessMock("PostLogin"); const accessToken = accessTokenMock("PostLogin"); const authentication = authenticationMock("PostLogin", { userId: userValue.user_id, }); const idToken = idTokenMock("PostLogin"); const multifactor = multifactorMock("PostLogin"); const prompt = promptMock("PostLogin"); const redirect = redirectMock("PostLogin", { now, request: requestValue, user: userValue, }); const userApiMock = userMock("PostLogin", { user: userValue }); const samlResponse = samlResponseMock("PostLogin"); const validation = validationMock("PostLogin"); const rules = rulesMock("PostLogin", { executedRules }); const state: PostLoginState = { user: userApiMock.state, access: access.state, accessToken: accessToken.state, authentication: authentication.state, cache: apiCache, idToken: idToken.state, multifactor: multifactor.state, prompt: prompt.state, samlResponse: samlResponse.state, validation: validation.state, get redirect() { return redirect.state.target; }, }; const api: Auth0.API.PostLogin = { get access() { return access.build(api); }, get accessToken() { return accessToken.build(api); }, get authentication() { return authentication.build(api); }, cache: apiCache, get idToken() { return idToken.build(api); }, get multifactor() { return multifactor.build(api); }, get prompt() { return prompt.build(api); }, get redirect() { return redirect.build(api); }, get rules() { return rules.build(api); }, get samlResponse() { return samlResponse.build(api); }, get user() { return userApiMock.build(api); }, get validation() { return validation.build(api); }, }; return { implementation: api, state, }; }