{"version":3,"file":"HeadlessB2BSSOClient.mjs","sources":["../../../../../../../../core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.ts"],"sourcesContent":["import { IB2BSubscriptionService, IDFPProtectedAuthProvider, INetworkClient, IPKCEManager } from '../..';\nimport {\n  B2BSSOCreateExternalConnectionOptions,\n  B2BSSOCreateExternalConnectionResponse,\n  B2BSSODeleteConnectionResponse,\n  B2BSSODiscoverConnectionsResponse,\n  B2BSSOGetConnectionsResponse,\n  B2BSSOOIDCCreateConnectionOptions,\n  B2BSSOOIDCCreateConnectionResponse,\n  B2BSSOOIDCUpdateConnectionOptions,\n  B2BSSOOIDCUpdateConnectionResponse,\n  B2BSSOSAMLCreateConnectionOptions,\n  B2BSSOSAMLCreateConnectionResponse,\n  B2BSSOSAMLDeleteEncryptionPrivateKeyOptions,\n  B2BSSOSAMLDeleteEncryptionPrivateKeyResponse,\n  B2BSSOSAMLDeleteVerificationCertificateOptions,\n  B2BSSOSAMLDeleteVerificationCertificateResponse,\n  B2BSSOSAMLUpdateConnectionByURLOptions,\n  B2BSSOSAMLUpdateConnectionByURLResponse,\n  B2BSSOSAMLUpdateConnectionOptions,\n  B2BSSOSAMLUpdateConnectionResponse,\n  B2BSSOUpdateExternalConnectionOptions,\n  B2BSSOUpdateExternalConnectionResponse,\n  IHeadlessB2BSSOClient,\n  SSOAuthenticateOptions,\n  SSOAuthenticateResponse,\n  SSOStartOptions,\n} from '../../public';\nimport { StytchProjectConfigurationInput } from '../../public/typeConfig';\nimport { isTestPublicToken, logger } from '../../utils';\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n  pkceRequiredForSso: boolean;\n}>;\ntype Config = {\n  publicToken: string;\n  testAPIURL: string;\n  liveAPIURL: string;\n};\n\nexport class HeadlessB2BSSOClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n  implements IHeadlessB2BSSOClient<TProjectConfiguration>\n{\n  authenticate: (options: SSOAuthenticateOptions) => Promise<SSOAuthenticateResponse<TProjectConfiguration>>;\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: SSOAuthenticateOptions) => {\n      validateInDev('stytch.sso.authenticate', options, {\n        sso_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 SSO flow.\\n' +\n            'Consider using stytch.sso.start() to add PKCE to your SSO 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\n      const resp = await this._networkClient.retriableFetchSDK<SSOAuthenticateResponse<TProjectConfiguration>>({\n        url: '/b2b/sso/authenticate',\n        method: 'POST',\n        body: {\n          pkce_code_verifier: keyPair?.code_verifier,\n          ...options,\n          dfp_telemetry_id,\n          captcha_token,\n          intermediate_session_token: this._subscriptionService.getIntermediateSessionToken() || undefined,\n        },\n        retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n      });\n\n      this._pkceManager.clearPKPair();\n\n      return resp;\n    });\n  }\n\n  protected async getBaseApiUrl() {\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  async start({\n    connection_id,\n    login_redirect_url,\n    signup_redirect_url,\n    provider_params,\n  }: SSOStartOptions): Promise<void> {\n    const { pkceRequiredForSso } = await this._dynamicConfig;\n    const baseURL = await this.getBaseApiUrl();\n\n    const startUrl = new URL(`${baseURL}/v1/public/sso/start`);\n    startUrl.searchParams.set('public_token', this._config.publicToken);\n    startUrl.searchParams.set('connection_id', connection_id);\n\n    if (provider_params) {\n      validateInDev('stytch.sso.start', { provider_params }, { provider_params: 'optionalObject' });\n      for (const key in provider_params) {\n        startUrl.searchParams.set('provider_' + key, provider_params[key]);\n      }\n    }\n\n    if (pkceRequiredForSso) {\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  // Public so it can be mocked in tests\n  navigate(url: URL) {\n    window.location.href = url.toString();\n  }\n\n  async getConnections(): Promise<B2BSSOGetConnectionsResponse> {\n    return await this._networkClient.fetchSDK<B2BSSOGetConnectionsResponse>({\n      url: '/b2b/sso',\n      method: 'GET',\n    });\n  }\n\n  async discoverConnections(emailAddress: string): Promise<B2BSSODiscoverConnectionsResponse> {\n    return await this._networkClient.fetchSDK<B2BSSODiscoverConnectionsResponse>({\n      url: `/b2b/sso/discovery/connections?email_address=${encodeURIComponent(emailAddress)}`,\n      method: 'GET',\n    });\n  }\n\n  async deleteConnection(connectionId: string): Promise<B2BSSODeleteConnectionResponse> {\n    return this._networkClient.fetchSDK<B2BSSODeleteConnectionResponse>({\n      url: `/b2b/sso/${connectionId}`,\n      method: 'DELETE',\n    });\n  }\n\n  saml = {\n    createConnection: async (data: B2BSSOSAMLCreateConnectionOptions): Promise<B2BSSOSAMLCreateConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOSAMLCreateConnectionResponse>({\n        url: '/b2b/sso/saml',\n        method: 'POST',\n        body: data,\n      });\n    },\n    updateConnection: async (data: B2BSSOSAMLUpdateConnectionOptions): Promise<B2BSSOSAMLUpdateConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOSAMLUpdateConnectionResponse>({\n        url: `/b2b/sso/saml/${data.connection_id}`,\n        method: 'PUT',\n        body: data,\n      });\n    },\n    updateConnectionByURL: async (\n      data: B2BSSOSAMLUpdateConnectionByURLOptions,\n    ): Promise<B2BSSOSAMLUpdateConnectionByURLResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOSAMLUpdateConnectionResponse>({\n        url: `/b2b/sso/saml/${data.connection_id}/url`,\n        method: 'PUT',\n        body: data,\n      });\n    },\n    deleteVerificationCertificate: async (\n      data: B2BSSOSAMLDeleteVerificationCertificateOptions,\n    ): Promise<B2BSSOSAMLDeleteVerificationCertificateResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOSAMLDeleteVerificationCertificateResponse>({\n        url: `/b2b/sso/saml/${data.connection_id}/verification_certificates/${data.certificate_id}`,\n        method: 'DELETE',\n      });\n    },\n    deleteEncryptionPrivateKey: async (\n      data: B2BSSOSAMLDeleteEncryptionPrivateKeyOptions,\n    ): Promise<B2BSSOSAMLDeleteEncryptionPrivateKeyResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOSAMLDeleteEncryptionPrivateKeyResponse>({\n        url: `/b2b/sso/saml/${data.connection_id}/encryption_private_key/${data.private_key_id}`,\n        method: 'DELETE',\n      });\n    },\n  };\n\n  oidc = {\n    createConnection: async (data: B2BSSOOIDCCreateConnectionOptions): Promise<B2BSSOOIDCCreateConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOOIDCCreateConnectionResponse>({\n        url: '/b2b/sso/oidc',\n        method: 'POST',\n        body: data,\n      });\n    },\n    updateConnection: async (data: B2BSSOOIDCUpdateConnectionOptions): Promise<B2BSSOOIDCUpdateConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOOIDCUpdateConnectionResponse>({\n        url: `/b2b/sso/oidc/${data.connection_id}`,\n        method: 'PUT',\n        body: data,\n      });\n    },\n  };\n\n  external = {\n    createConnection: async (\n      data: B2BSSOCreateExternalConnectionOptions,\n    ): Promise<B2BSSOCreateExternalConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOCreateExternalConnectionResponse>({\n        url: '/b2b/sso/external',\n        method: 'POST',\n        body: data,\n      });\n    },\n    updateConnection: async (\n      data: B2BSSOUpdateExternalConnectionOptions,\n    ): Promise<B2BSSOUpdateExternalConnectionResponse> => {\n      return await this._networkClient.fetchSDK<B2BSSOUpdateExternalConnectionResponse>({\n        url: `/b2b/sso/external/${data.connection_id}`,\n        method: 'PUT',\n        body: data,\n      });\n    },\n  };\n}\n"],"names":["HeadlessB2BSSOClient","authenticate","_dynamicConfig","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","withUpdateSession","options","validateInDev","sso_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","getBaseApiUrl","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","start","connection_id","login_redirect_url","signup_redirect_url","provider_params","pkceRequiredForSso","baseURL","startUrl","URL","searchParams","set","key","startPKCETransaction","code_challenge","navigate","window","location","href","toString","getConnections","fetchSDK","discoverConnections","emailAddress","encodeURIComponent","deleteConnection","connectionId","saml","createConnection","data","updateConnection","updateConnectionByURL","deleteVerificationCertificate","certificate_id","deleteEncryptionPrivateKey","private_key_id","oidc","external"],"mappings":"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"}