{"version":3,"file":"HeadlessTOTPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessTOTPClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n  IHeadlessTOTPClient,\n  StytchProjectConfigurationInput,\n  TOTPAuthenticateOptions,\n  TOTPAuthenticateResponse,\n  TOTPCreateOptions,\n  TOTPCreateResponse,\n  TOTPRecoverOptions,\n  TOTPRecoverResponse,\n  TOTPRecoveryCodesResponse,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessTOTPClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n  implements IHeadlessTOTPClient<TProjectConfiguration>\n{\n  authenticate: (options: TOTPAuthenticateOptions) => Promise<TOTPAuthenticateResponse<TProjectConfiguration>>;\n\n  recover: (options: TOTPRecoverOptions) => Promise<TOTPRecoverResponse<TProjectConfiguration>>;\n\n  constructor(\n    private _networkClient: INetworkClient,\n    private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n    private dfpProtectedAuth: IDFPProtectedAuthProvider,\n  ) {\n    this.authenticate = this._subscriptionService.withUpdateSession(\n      async (options: TOTPAuthenticateOptions): Promise<TOTPAuthenticateResponse<TProjectConfiguration>> => {\n        validateInDev('stytch.totps.authenticate', options, {\n          session_duration_minutes: 'number',\n          totp_code: 'string',\n        });\n\n        const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n        const resp = await this._networkClient.retriableFetchSDK<\n          WithUser<TOTPAuthenticateResponse<TProjectConfiguration>>\n        >({\n          url: '/totps/authenticate',\n          method: 'POST',\n          body: {\n            session_duration_minutes: options.session_duration_minutes,\n            totp_code: options.totp_code,\n            captcha_token,\n            dfp_telemetry_id,\n          },\n          retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n        });\n\n        return omitUser(resp);\n      },\n    );\n\n    this.recover = this._subscriptionService.withUpdateSession(\n      async (options: TOTPRecoverOptions): Promise<TOTPRecoverResponse<TProjectConfiguration>> => {\n        validateInDev('stytch.totps.recover', options, {\n          session_duration_minutes: 'number',\n          recovery_code: 'string',\n        });\n        const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n        const resp = await this._networkClient.retriableFetchSDK<WithUser<TOTPRecoverResponse<TProjectConfiguration>>>({\n          url: '/totps/recover',\n          method: 'POST',\n          body: {\n            session_duration_minutes: options.session_duration_minutes,\n            recovery_code: options.recovery_code,\n            captcha_token,\n            dfp_telemetry_id,\n          },\n          retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n        });\n\n        return omitUser(resp);\n      },\n    );\n  }\n\n  async create(options: TOTPCreateOptions): Promise<TOTPCreateResponse> {\n    validateInDev('stytch.totps.create', options, {\n      expiration_minutes: 'number',\n    });\n\n    const resp = await this._networkClient.fetchSDK<WithUser<TOTPCreateResponse>>({\n      url: '/totps',\n      method: 'POST',\n      body: {\n        expiration_minutes: options.expiration_minutes,\n      },\n    });\n\n    this._subscriptionService.updateUser(resp.__user);\n\n    return omitUser(resp);\n  }\n\n  async recoveryCodes(): Promise<TOTPRecoveryCodesResponse> {\n    return this._networkClient.fetchSDK<TOTPRecoveryCodesResponse>({\n      url: '/totps/recovery_codes',\n      method: 'POST',\n    });\n  }\n}\n"],"names":["HeadlessTOTPClient","authenticate","recover","_networkClient","_subscriptionService","dfpProtectedAuth","withUpdateSession","options","validateInDev","session_duration_minutes","totp_code","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","recovery_code","create","expiration_minutes","fetchSDK","updateUser","__user","recoveryCodes"],"mappings":"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"}