import type { OidcSpaUtils } from "./types"; import type { Oidc as Oidc_core } from "../core"; import type { ZodSchemaLike } from "../tools/ZodSchemaLike"; import { createOidcSpaUtils } from "./createOidcSpaUtils"; export type OidcSpaUtilsBuilder< AutoLogin extends boolean = false, DecodedIdToken extends Record = Oidc_core.Tokens.DecodedIdToken_OidcCoreSpec, ExcludedMethod extends | "withAutoLogin" | "withExpectedDecodedIdTokenShape" | "withAccessTokenValidation" | "createUtils" = never > = Omit< { withAutoLogin: () => OidcSpaUtilsBuilder; withExpectedDecodedIdTokenShape: >(params: { decodedIdTokenSchema: ZodSchemaLike< Oidc_core.Tokens.DecodedIdToken_OidcCoreSpec, DecodedIdToken >; decodedIdToken_mock?: NoInfer; }) => OidcSpaUtilsBuilder< AutoLogin, DecodedIdToken, ExcludedMethod | "withExpectedDecodedIdTokenShape" >; createUtils: () => OidcSpaUtils; }, ExcludedMethod >; function createOidcSpaUtilsBuilder< AutoLogin extends boolean = false, DecodedIdToken extends Record = Oidc_core.Tokens.DecodedIdToken_OidcCoreSpec >(params: { autoLogin: AutoLogin; decodedIdTokenSchema: | ZodSchemaLike | undefined; decodedIdToken_mock: DecodedIdToken | undefined; }): OidcSpaUtilsBuilder { return { withAutoLogin: () => createOidcSpaUtilsBuilder({ autoLogin: true, decodedIdTokenSchema: params.decodedIdTokenSchema, decodedIdToken_mock: params.decodedIdToken_mock }), withExpectedDecodedIdTokenShape: ({ decodedIdTokenSchema, decodedIdToken_mock }) => createOidcSpaUtilsBuilder({ autoLogin: params.autoLogin, decodedIdTokenSchema, decodedIdToken_mock: decodedIdToken_mock }), createUtils: () => createOidcSpaUtils({ autoLogin: params.autoLogin, decodedIdTokenSchema: params.decodedIdTokenSchema, decodedIdToken_mock: params.decodedIdToken_mock }) }; } export const oidcSpaUtilsBuilder = createOidcSpaUtilsBuilder({ autoLogin: false, decodedIdToken_mock: undefined, decodedIdTokenSchema: undefined });