{"version":3,"file":"HeadlessB2BOAuthClient.mjs","sources":["../../../../../../../../core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.ts"],"sourcesContent":["import { IB2BSubscriptionService, IDFPProtectedAuthProvider, INetworkClient, IPKCEManager } from '../..';\nimport {\n  B2BOAuthAuthenticateOptions,\n  B2BOAuthAuthenticateResponse,\n  B2BOAuthDiscoveryAuthenticateResponse,\n  B2BOAuthDiscoveryStartOptions,\n  IHeadlessB2BOAuthClient,\n  OAuthDiscoveryAuthenticateOptions,\n  OAuthStartOptions,\n} from '../../public/b2b/oauth';\nimport { B2BOAuthProviders } from '../../public/b2b/ui';\nimport { StytchProjectConfigurationInput } from '../../public/typeConfig';\nimport { isTestPublicToken, logger } from '../../utils';\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n  cnameDomain: null | string;\n  pkceRequiredForOAuth: boolean;\n}>;\ntype Config = {\n  publicToken: string;\n  testAPIURL: string;\n  liveAPIURL: string;\n};\n\nexport class HeadlessB2BOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n  implements IHeadlessB2BOAuthClient<TProjectConfiguration>\n{\n  authenticate: (options: B2BOAuthAuthenticateOptions) => Promise<B2BOAuthAuthenticateResponse<TProjectConfiguration>>;\n\n  discovery: {\n    authenticate: (\n      data: OAuthDiscoveryAuthenticateOptions,\n    ) => Promise<B2BOAuthDiscoveryAuthenticateResponse<TProjectConfiguration>>;\n  };\n\n  google: {\n    start: (options: OAuthStartOptions) => Promise<void>;\n    discovery: {\n      start: (options: B2BOAuthDiscoveryStartOptions) => Promise<void>;\n    };\n  };\n\n  microsoft: {\n    start: (options: OAuthStartOptions) => Promise<void>;\n    discovery: {\n      start: (options: B2BOAuthDiscoveryStartOptions) => Promise<void>;\n    };\n  };\n\n  hubspot: {\n    start: (options: OAuthStartOptions) => Promise<void>;\n    discovery: {\n      start: (options: B2BOAuthDiscoveryStartOptions) => Promise<void>;\n    };\n  };\n\n  slack: {\n    start: (options: OAuthStartOptions) => Promise<void>;\n    discovery: {\n      start: (options: B2BOAuthDiscoveryStartOptions) => Promise<void>;\n    };\n  };\n\n  github: {\n    start: (options: OAuthStartOptions) => Promise<void>;\n    discovery: {\n      start: (options: B2BOAuthDiscoveryStartOptions) => Promise<void>;\n    };\n  };\n\n  constructor(\n    protected _networkClient: INetworkClient,\n    protected _subscriptionService: IB2BSubscriptionService<TProjectConfiguration>,\n    protected _pkceManager: IPKCEManager,\n    protected _dynamicConfig: DynamicConfig,\n    protected _config: Config,\n    protected dfpProtectedAuth: IDFPProtectedAuthProvider,\n  ) {\n    this.authenticate = this._subscriptionService.withUpdateSession(async (options: B2BOAuthAuthenticateOptions) => {\n      validateInDev('stytch.oauth.authenticate', options, {\n        oauth_token: 'string',\n        session_duration_minutes: 'number',\n        locale: 'optionalString',\n      });\n\n      const keyPair = await this._pkceManager.getPKPair();\n\n      if (!keyPair) {\n        logger.warn(\n          'No code verifier found in local storage for OAuth flow.\\n' +\n            'Consider using stytch.oauth.$provider.start() to add PKCE to your OAuth flows for added security.\\n' +\n            'See https://stytch.com/docs/oauth#guides_pkce for more information.',\n        );\n      }\n\n      const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n      const resp = await this._networkClient.retriableFetchSDK<B2BOAuthAuthenticateResponse<TProjectConfiguration>>({\n        url: '/b2b/oauth/authenticate',\n        method: 'POST',\n        body: {\n          pkce_code_verifier: keyPair?.code_verifier,\n          dfp_telemetry_id,\n          captcha_token,\n          intermediate_session_token: (await this._subscriptionService.getIntermediateSessionToken()) || undefined,\n          ...options,\n        },\n        retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n      });\n\n      this._pkceManager.clearPKPair();\n\n      return resp;\n    });\n\n    this.discovery = {\n      authenticate: this._subscriptionService.withUpdateSession(\n        async (\n          data: OAuthDiscoveryAuthenticateOptions,\n        ): Promise<B2BOAuthDiscoveryAuthenticateResponse<TProjectConfiguration>> => {\n          validateInDev('stytch.oauth.discovery.authenticate', data, {\n            discovery_oauth_token: 'string',\n          });\n\n          const pkPair = await this._pkceManager.getPKPair();\n\n          const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n          const requestBody = {\n            pkce_code_verifier: pkPair?.code_verifier,\n            dfp_telemetry_id,\n            captcha_token,\n            ...data,\n          };\n          const resp = await this._networkClient.retriableFetchSDK<\n            B2BOAuthDiscoveryAuthenticateResponse<TProjectConfiguration>\n          >({\n            url: '/b2b/oauth/discovery/authenticate',\n            body: requestBody,\n            method: 'POST',\n            retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n          });\n\n          this._pkceManager.clearPKPair();\n\n          return resp;\n        },\n      ),\n    };\n\n    this.google = {\n      start: this.startOAuthFlow(B2BOAuthProviders.Google),\n      discovery: {\n        start: this.startDiscoveryOAuthFlow(B2BOAuthProviders.Google),\n      },\n    };\n\n    this.microsoft = {\n      start: this.startOAuthFlow(B2BOAuthProviders.Microsoft),\n      discovery: {\n        start: this.startDiscoveryOAuthFlow(B2BOAuthProviders.Microsoft),\n      },\n    };\n\n    this.hubspot = {\n      start: this.startOAuthFlow(B2BOAuthProviders.HubSpot),\n      discovery: {\n        start: this.startDiscoveryOAuthFlow(B2BOAuthProviders.HubSpot),\n      },\n    };\n\n    this.slack = {\n      start: this.startOAuthFlow(B2BOAuthProviders.Slack),\n      discovery: {\n        start: this.startDiscoveryOAuthFlow(B2BOAuthProviders.Slack),\n      },\n    };\n\n    this.github = {\n      start: this.startOAuthFlow(B2BOAuthProviders.GitHub),\n      discovery: {\n        start: this.startDiscoveryOAuthFlow(B2BOAuthProviders.GitHub),\n      },\n    };\n  }\n\n  protected async getBaseApiUrl() {\n    const { cnameDomain } = await this._dynamicConfig;\n    if (cnameDomain) {\n      // The API returns cname domains without a protocol - assume HTTPS\n      return `https://${cnameDomain}`;\n    }\n    // Our TestAPIURL and LiveAPIURL should have the HTTPS protocol already attached\n    // Don't add it twice!\n    if (isTestPublicToken(this._config.publicToken)) {\n      return this._config.testAPIURL;\n    }\n    return this._config.liveAPIURL;\n  }\n\n  protected startOAuthFlow(providerType: B2BOAuthProviders) {\n    return async (options: OAuthStartOptions): Promise<void> => {\n      const {\n        organization_id,\n        organization_slug,\n        login_redirect_url,\n        signup_redirect_url,\n        custom_scopes,\n        provider_params,\n      } = options;\n      const { pkceRequiredForOAuth } = await this._dynamicConfig;\n      const baseURL = await this.getBaseApiUrl();\n\n      const startUrl = new URL(`${baseURL}/v1/b2b/public/oauth/${providerType}/start`);\n      startUrl.searchParams.set('public_token', this._config.publicToken);\n      if (organization_id && organization_id != '') {\n        startUrl.searchParams.set('organization_id', organization_id);\n      }\n\n      if (organization_slug && organization_slug != '') {\n        startUrl.searchParams.set('slug', organization_slug);\n      }\n\n      if (custom_scopes) {\n        validateInDev(\n          'startOAuthFlow',\n          { custom_scopes },\n          {\n            custom_scopes: 'stringArray',\n          },\n        );\n        startUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n      }\n      if (provider_params) {\n        validateInDev(\n          'startOAuthFlow',\n          { provider_params },\n          {\n            provider_params: 'optionalObject',\n          },\n        );\n        for (const key in provider_params) {\n          startUrl.searchParams.set('provider_' + key, provider_params[key]);\n        }\n      }\n\n      if (pkceRequiredForOAuth) {\n        const keyPair = await this._pkceManager.startPKCETransaction();\n        startUrl.searchParams.set('pkce_code_challenge', keyPair.code_challenge);\n      } else {\n        this._pkceManager.clearPKPair();\n      }\n\n      if (login_redirect_url) startUrl.searchParams.set('login_redirect_url', login_redirect_url);\n      if (signup_redirect_url) startUrl.searchParams.set('signup_redirect_url', signup_redirect_url);\n\n      this.navigate(startUrl);\n    };\n  }\n\n  protected startDiscoveryOAuthFlow(providerType: B2BOAuthProviders) {\n    return async (options: B2BOAuthDiscoveryStartOptions): Promise<void> => {\n      const { discovery_redirect_url, custom_scopes, provider_params } = options;\n      const { pkceRequiredForOAuth } = await this._dynamicConfig;\n      const baseURL = await this.getBaseApiUrl();\n\n      const startUrl = new URL(`${baseURL}/v1/b2b/public/oauth/${providerType}/discovery/start`);\n      startUrl.searchParams.set('public_token', this._config.publicToken);\n      if (custom_scopes) {\n        validateInDev(\n          'startOAuthFlow',\n          { custom_scopes },\n          {\n            custom_scopes: 'stringArray',\n          },\n        );\n        startUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n      }\n      if (provider_params) {\n        validateInDev(\n          'startOAuthFlow',\n          { provider_params },\n          {\n            provider_params: 'optionalObject',\n          },\n        );\n        for (const key in provider_params) {\n          startUrl.searchParams.set('provider_' + key, provider_params[key]);\n        }\n      }\n\n      if (pkceRequiredForOAuth) {\n        const keyPair = await this._pkceManager.startPKCETransaction();\n        startUrl.searchParams.set('pkce_code_challenge', keyPair.code_challenge);\n      } else {\n        this._pkceManager.clearPKPair();\n      }\n\n      if (discovery_redirect_url) {\n        startUrl.searchParams.set('discovery_redirect_url', discovery_redirect_url);\n      }\n\n      this.navigate(startUrl);\n    };\n  }\n\n  // Public so it can be mocked in tests\n  navigate(url: URL) {\n    window.location.href = url.toString();\n  }\n}\n"],"names":["HeadlessB2BOAuthClient","authenticate","discovery","google","microsoft","hubspot","slack","github","_dynamicConfig","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","withUpdateSession","options","validateInDev","oauth_token","session_duration_minutes","locale","keyPair","getPKPair","logger","warn","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","pkce_code_verifier","code_verifier","intermediate_session_token","getIntermediateSessionToken","undefined","retryCallback","retryWithCaptchaAndDFP","clearPKPair","data","discovery_oauth_token","pkPair","requestBody","start","startOAuthFlow","B2BOAuthProviders","Google","startDiscoveryOAuthFlow","Microsoft","HubSpot","Slack","GitHub","getBaseApiUrl","cnameDomain","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","providerType","organization_id","organization_slug","login_redirect_url","signup_redirect_url","custom_scopes","provider_params","pkceRequiredForOAuth","baseURL","startUrl","URL","searchParams","set","join","key","startPKCETransaction","code_challenge","navigate","discovery_redirect_url","window","location","href","toString"],"mappings":"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"}