{"version":3,"file":"BootstrapDataManager.mjs","sources":["../../../../../../web/src/BootstrapDataManager.ts"],"sourcesContent":["import { BootstrapData, DFPProtectedAuthMode, INetworkClient, logger, RBACPolicyRaw, Vertical } from '@stytch/core';\n\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport interface IBootstrapData {\n  getSync: () => BootstrapData;\n  getAsync: () => Promise<BootstrapData>;\n}\n\ninterface RawBootstrapData {\n  request_id: string;\n  project_name: string;\n  status_code: number;\n  disable_sdk_watermark: boolean;\n  cname_domain: string | null;\n  email_domains: string[];\n  captcha_settings: BootstrapData['captchaSettings'];\n  pkce_required_for_email_magic_links: boolean;\n  pkce_required_for_password_resets: boolean;\n  pkce_required_for_oauth: boolean;\n  pkce_required_for_sso: boolean;\n  slug_pattern: string | null;\n  create_organization_enabled: boolean;\n  password_config: { luds_complexity: number; luds_minimum_count: number } | null;\n  dfp_protected_auth_enabled?: boolean;\n  dfp_protected_auth_mode?: DFPProtectedAuthMode;\n  rbac_policy?: RBACPolicyRaw;\n  siwe_required_for_crypto_wallets: boolean;\n  vertical: Vertical;\n}\n\nconst BOOTSTRAP_CACHE_KEY = 'bootstrap';\nconst DEFAULT_BOOTSTRAP = (): BootstrapData => ({\n  displayWatermark: false,\n  projectName: null,\n  cnameDomain: null,\n  emailDomains: ['stytch.com'],\n  captchaSettings: { enabled: false },\n  pkceRequiredForEmailMagicLinks: false,\n  pkceRequiredForPasswordResets: false,\n  pkceRequiredForOAuth: false,\n  pkceRequiredForSso: false,\n  slugPattern: null,\n  createOrganizationEnabled: false,\n  passwordConfig: null,\n  runDFPProtectedAuth: false,\n  rbacPolicy: null,\n  siweRequiredForCryptoWallets: false,\n  vertical: null,\n});\n\nexport class BootstrapDataManager implements IBootstrapData {\n  private readonly _bootstrapDataPromise: Promise<BootstrapData>;\n\n  constructor(\n    private _publicToken: string,\n    private _networkClient: INetworkClient,\n    private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n  ) {\n    // TODO: Push the async version of this into @stytch/core\n    // for RN to use, have getSync throw a NotImplementedError\n    // and inherit it to create a sync one here?\n    this._bootstrapDataPromise = this._networkClient\n      .fetchSDK<RawBootstrapData>({\n        url: `/projects/bootstrap/${this._publicToken}`,\n        method: 'GET',\n      })\n      .then(BootstrapDataManager.mapBootstrapData)\n      .then((data) => {\n        this._dataLayer.setItem(BOOTSTRAP_CACHE_KEY, JSON.stringify(data));\n        return data;\n      })\n      .catch((error: unknown) => {\n        logger.error(error);\n        return DEFAULT_BOOTSTRAP();\n      });\n  }\n\n  static mapBootstrapData(response: RawBootstrapData): BootstrapData {\n    const passwordConfig =\n      response.password_config !== null\n        ? {\n            ludsComplexity: response.password_config.luds_complexity,\n            ludsMinimumCount: response.password_config.luds_minimum_count,\n          }\n        : null;\n\n    return {\n      projectName: response.project_name,\n      displayWatermark: !response.disable_sdk_watermark,\n      captchaSettings: response.captcha_settings,\n      cnameDomain: response.cname_domain,\n      emailDomains: response.email_domains,\n\n      pkceRequiredForEmailMagicLinks: response.pkce_required_for_email_magic_links,\n      pkceRequiredForPasswordResets: response.pkce_required_for_password_resets,\n      pkceRequiredForOAuth: response.pkce_required_for_oauth,\n      pkceRequiredForSso: response.pkce_required_for_sso,\n      slugPattern: response.slug_pattern,\n      createOrganizationEnabled: response.create_organization_enabled,\n      passwordConfig,\n      runDFPProtectedAuth: response.dfp_protected_auth_enabled ?? false,\n      dfpProtectedAuthMode: response.dfp_protected_auth_mode,\n      rbacPolicy: response.rbac_policy ?? null,\n      siweRequiredForCryptoWallets: response.siwe_required_for_crypto_wallets,\n      vertical: response.vertical,\n    };\n  }\n\n  getSync(): BootstrapData {\n    const cached = this._dataLayer.getItem(BOOTSTRAP_CACHE_KEY);\n    if (cached === null) {\n      return DEFAULT_BOOTSTRAP();\n    }\n    try {\n      return JSON.parse(cached) as BootstrapData;\n    } catch {\n      return DEFAULT_BOOTSTRAP();\n    }\n  }\n\n  getAsync(): Promise<BootstrapData> {\n    return this._bootstrapDataPromise;\n  }\n}\n"],"names":["BOOTSTRAP_CACHE_KEY","DEFAULT_BOOTSTRAP","displayWatermark","projectName","cnameDomain","emailDomains","captchaSettings","enabled","pkceRequiredForEmailMagicLinks","pkceRequiredForPasswordResets","pkceRequiredForOAuth","pkceRequiredForSso","slugPattern","createOrganizationEnabled","passwordConfig","runDFPProtectedAuth","rbacPolicy","siweRequiredForCryptoWallets","vertical","BootstrapDataManager","_bootstrapDataPromise","_publicToken","_networkClient","_dataLayer","fetchSDK","url","method","then","mapBootstrapData","data","setItem","JSON","stringify","catch","error","logger","response","password_config","ludsComplexity","luds_complexity","ludsMinimumCount","luds_minimum_count","project_name","disable_sdk_watermark","captcha_settings","cname_domain","email_domains","pkce_required_for_email_magic_links","pkce_required_for_password_resets","pkce_required_for_oauth","pkce_required_for_sso","slug_pattern","create_organization_enabled","dfp_protected_auth_enabled","dfpProtectedAuthMode","dfp_protected_auth_mode","rbac_policy","siwe_required_for_crypto_wallets","getSync","cached","getItem","parse","getAsync"],"mappings":"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"}