import type { OidcSpaUtils } from "./types"; import type { ZodSchemaLike } from "../tools/ZodSchemaLike"; import { createOidcSpaUtils } from "./createOidcSpaUtils"; import type { DecodedAccessToken_RFC9068 } from "./types"; export type OidcSpaUtilsBuilder< DecodedAccessToken extends Record = DecodedAccessToken_RFC9068, ExcludedMethod extends "withExpectedDecodedAccessTokenShape" | "createUtils" = never > = Omit< { withExpectedDecodedAccessTokenShape: < DecodedAccessToken extends Record >(params: { decodedAccessTokenSchema: ZodSchemaLike; }) => OidcSpaUtilsBuilder< DecodedAccessToken, ExcludedMethod | "withExpectedDecodedAccessTokenShape" >; createUtils: () => OidcSpaUtils; }, ExcludedMethod >; function createOidcSpaUtilsBuilder< DecodedAccessToken extends Record = DecodedAccessToken_RFC9068 >(params: { decodedAccessTokenSchema: ZodSchemaLike | undefined; }): OidcSpaUtilsBuilder { return { withExpectedDecodedAccessTokenShape: ({ decodedAccessTokenSchema }) => createOidcSpaUtilsBuilder({ decodedAccessTokenSchema }), createUtils: () => createOidcSpaUtils({ decodedAccessTokenSchema: params.decodedAccessTokenSchema }) }; } export const oidcSpaUtilsBuilder = createOidcSpaUtilsBuilder({ decodedAccessTokenSchema: undefined });