{"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","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","session_duration_minutes","crypto_wallet_address","crypto_wallet_type","signature","retryCallback","retryWithCaptchaAndDFP","omitUser","authenticateStart","siwe_params","isLoggedIn","getSession","uri","window","location","origin","endpoint","requestBody","fetchSDK"],"mappings":";;AAgBA,MAAMA,sBAAAA,GAAuBC,OAAAA,CAAQC,OAAO,CAAC;IAC3CC,4BAAAA,EAA8B;AAChC,CAAA,CAAA;AAEO,MAAMC,0BAAAA,CAAAA;;;;;;;IAGXC,YAAAA;IAIA,WAAA,CACUC,cAA8B,EAC9BC,iBAAiC,EACjCC,oBAAyE,EACjF,gBAAQC,GAAsD,IAAMR,OAAAA,CAAQC,OAAO,CAACQ,SAAAA,CAAU,EACtFC,gBAA2C,EAC3CC,OAAAA,GAAyBZ,sBAAoB,CACrD;aANQM,cAAAA,GAAAA,cAAAA;aACAC,iBAAAA,GAAAA,iBAAAA;aACAC,oBAAAA,GAAAA,oBAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;aACAE,gBAAAA,GAAAA,gBAAAA;aACAC,OAAAA,GAAAA,OAAAA;QAER,IAAI,CAACP,YAAY,GAAG,IAAI,CAACG,oBAAoB,CAACK,iBAAiB,CAC7D,OACEC,OAAAA,GAAAA;YASA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACL,gBAAgB,CAACM,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACX,iBAAiB,CAACY,iBAAiB,CAEzD;gBACAC,GAAAA,EAAK,8BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJC,oBAAAA,wBAAAA,EAA0BT,QAAQS,wBAAwB;AAC1DC,oBAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,oBAAAA,kBAAAA,EAAoBX,QAAQW,kBAAkB;AAC9CC,oBAAAA,SAAAA,EAAWZ,QAAQY,SAAS;AAC5BV,oBAAAA,aAAAA;AACAD,oBAAAA;AACF,iBAAA;AACAY,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASX,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;AAEJ,IAAA;IAEA,MAAMY,iBAAAA,CACJhB,OAA6C,EACG;QAKhD,IAAIA,OAAAA,CAAQiB,WAAW,EAAE;AAYzB,QAAA,MAAMC,aAAa,CAAC,CAAC,IAAI,CAACxB,oBAAoB,CAACyB,UAAU,EAAA;AACzD,QAAA,MAAMjB,aAAAA,GAAgB,MAAM,IAAI,CAACP,gBAAgB,EAAA;AACjD,QAAA,MAAM,EAAEN,4BAA4B,EAAE,GAAG,MAAM,IAAI,CAACS,OAAO;AAE3D,QAAA,MAAMU,IAAAA,GAA6C;AACjDE,YAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,YAAAA,kBAAAA,EAAoBX,QAAQW;AAC9B,SAAA;AACA,QAAA,IAAItB,4BAAAA,IAAgCW,OAAAA,CAAQW,kBAAkB,IAAI,UAAA,EAAY;AAC5EH,YAAAA,IAAAA,CAAKS,WAAW,GAAG;AAAE,gBAAA,GAAGjB,QAAQiB,WAAW;AAAEG,gBAAAA,GAAAA,EAAKpB,QAAQiB,WAAW,EAAEG,OAAOC,MAAAA,CAAOC,QAAQ,CAACC;AAAO,aAAA;AACvG,QAAA;QAEA,MAAMC,QAAAA,GAAWN,aACb,8CAAA,GACA,4CAAA;AAEJ,QAAA,MAAMO,WAAAA,GAAc;AAClB,YAAA,GAAGjB,IAAI;AACPN,YAAAA;AACF,SAAA;AACA,QAAA,OAAO,IAAI,CAACT,iBAAiB,CAACiC,QAAQ,CAAwC;YAC5EpB,GAAAA,EAAKkB,QAAAA;YACLjB,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMiB;AACR,SAAA,CAAA;AACF,IAAA;AACF;;;;"}