{"version":3,"file":"HeadlessCryptoWalletClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessCryptoWalletClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n  CryptoWalletAuthenticateOptions,\n  CryptoWalletAuthenticateResponse,\n  CryptoWalletAuthenticateStartOptions,\n  CryptoWalletAuthenticateStartResponse,\n  IHeadlessCryptoWalletClient,\n  StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n  siweRequiredForCryptoWallets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n  siweRequiredForCryptoWallets: false,\n});\n\nexport class HeadlessCryptoWalletClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n  implements IHeadlessCryptoWalletClient<TProjectConfiguration>\n{\n  authenticate: (\n    options: CryptoWalletAuthenticateOptions,\n  ) => Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>>;\n\n  constructor(\n    private _networkClient: INetworkClient,\n    private _apiNetworkClient: INetworkClient,\n    private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n    private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n    private dfpProtectedAuth: IDFPProtectedAuthProvider,\n    private _config: DynamicConfig = DefaultDynamicConfig,\n  ) {\n    this.authenticate = this._subscriptionService.withUpdateSession(\n      async (\n        options: CryptoWalletAuthenticateOptions,\n      ): Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>> => {\n        validateInDev('stytch.cryptoWallets.authenticate', options, {\n          signature: 'string',\n          crypto_wallet_address: 'string',\n          crypto_wallet_type: 'string',\n          session_duration_minutes: 'number',\n        });\n\n        const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n        const resp = await this._apiNetworkClient.retriableFetchSDK<\n          WithUser<CryptoWalletAuthenticateResponse<TProjectConfiguration>>\n        >({\n          url: '/crypto_wallets/authenticate',\n          method: 'POST',\n          body: {\n            session_duration_minutes: options.session_duration_minutes,\n            crypto_wallet_address: options.crypto_wallet_address,\n            crypto_wallet_type: options.crypto_wallet_type,\n            signature: options.signature,\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 authenticateStart(\n    options: CryptoWalletAuthenticateStartOptions,\n  ): Promise<CryptoWalletAuthenticateStartResponse> {\n    validateInDev('stytch.cryptoWallets.authenticateStart', options, {\n      crypto_wallet_address: 'string',\n      crypto_wallet_type: 'string',\n    });\n    if (options.siwe_params) {\n      validateInDev('stytch.cryptoWallets.authenticateStart', options.siwe_params, {\n        uri: 'optionalString',\n        chain_id: 'optionalString',\n        issued_at: 'optionalString',\n        statement: 'optionalString',\n        not_before: 'optionalString',\n        message_request_id: 'optionalString',\n        resources: 'optionalStringArray',\n      });\n    }\n\n    const isLoggedIn = !!this._subscriptionService.getSession();\n    const captcha_token = await this.executeRecaptcha();\n    const { siweRequiredForCryptoWallets } = await this._config;\n\n    const body: CryptoWalletAuthenticateStartOptions = {\n      crypto_wallet_address: options.crypto_wallet_address,\n      crypto_wallet_type: options.crypto_wallet_type,\n    };\n    if (siweRequiredForCryptoWallets && options.crypto_wallet_type == 'ethereum') {\n      body.siwe_params = { ...options.siwe_params, uri: options.siwe_params?.uri || window.location.origin };\n    }\n\n    const endpoint = isLoggedIn\n      ? '/crypto_wallets/authenticate/start/secondary'\n      : '/crypto_wallets/authenticate/start/primary';\n\n    const requestBody = {\n      ...body,\n      captcha_token,\n    };\n    return this._apiNetworkClient.fetchSDK<CryptoWalletAuthenticateStartResponse>({\n      url: endpoint,\n      method: 'POST',\n      body: requestBody,\n    });\n  }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","siweRequiredForCryptoWallets","HeadlessCryptoWalletClient","authenticate","_networkClient","_apiNetworkClient","_subscriptionService","executeRecaptcha","undefined","dfpProtectedAuth","_config","withUpdateSession","options","validateInDev","signature","crypto_wallet_address","crypto_wallet_type","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","authenticateStart","siwe_params","uri","chain_id","issued_at","statement","not_before","message_request_id","resources","isLoggedIn","getSession","window","location","origin","endpoint","requestBody","fetchSDK"],"mappings":"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"}