{"version":3,"sources":["../src/index.ts","../src/getMfeConfig.ts"],"sourcesContent":["export {\n  type DefaultMfeConfig,\n  getMfeConfig,\n  hasValidLinks,\n  type MfeConfigs,\n  type MfeConfigWithLinks,\n} from \"./getMfeConfig\"\n","import { jwtDecode } from \"@commercelayer/js-auth\"\nimport { merge } from \"merge-anything\"\nimport type { SetRequired } from \"type-fest\"\nimport type { ValidConfigForOrganizationsInCommerceLayer } from \"./schema/types\"\n\n/**\n * Represents a type that can be null or undefined, making it optional in use.\n * @template T The type that is being made nullable.\n */\ntype NullableType<T> = T | null | undefined\n\n/**\n * Params used by the getConfig function\n */\ninterface ConfigParams {\n  /**\n   * Language code (e.g., 'en', 'fr') used to dynamically replace the `:lang` placeholder in URLs.\n   */\n  lang?: NullableType<string>\n  /**\n   * Organization slug used to replace the `:slug` placeholder in URLs.\n   */\n  slug?: NullableType<string>\n  /**\n   * Access token string used to replace the `:access_token` placeholder in URLs.\n   */\n  accessToken?: NullableType<string>\n  /**\n   * Unique identifier for an order used to replace the `:order_id` placeholder in URLs.\n   */\n  orderId?: NullableType<string>\n  /**\n   * Order token string used to replace the `:token` placeholder in URLs.\n   */\n  token?: NullableType<string>\n  /**\n   * Unique identifier for an SKU list used to replace the `:sku_list_id` placeholder in URLs.\n   */\n  skuListId?: NullableType<string>\n  /**\n   * Unique identifier for an SKU used to replace the `:sku_id` placeholder in URLs.\n   */\n  skuId?: NullableType<string>\n  /**\n   * Type used for the identity, which can be used to replace a `:identity_type` placeholder in URLs.\n   */\n  identityType?: NullableType<\"login\" | \"signup\">\n  /**\n   * Client ID used for authentication, which can be used to replace a `:client_id` placeholder in URLs.\n   */\n  clientId?: NullableType<string>\n  /**\n   * For the identity, it is the market used for the login process (e.g. a private market).\n   */\n  scope?: NullableType<string>\n  /**\n   * For the identity, it is the default scope used by the app to obtain the organization settings needed to customize the UI (name, logo, colors, etc.).\n   */\n  publicScope?: NullableType<string>\n  /**\n   * Return URL after certain actions, which can be used to replace a `:return_url` placeholder in URLs.\n   */\n  returnUrl?: NullableType<string>\n  /**\n   * URL to the reset password page, which can be used to replace a `:reset_password_url` placeholder in URLs.\n   */\n  resetPasswordUrl?: NullableType<string>\n}\n\ninterface GetMfeConfigProps {\n  /**\n   * `config` attribute of the organization\n   */\n  jsonConfig?: { mfe?: MfeConfigs } | null\n  /**\n   *  Market identifier for fetching specific configuration overrides. (`market:id:hashid`)\n   */\n  market?: string\n  /**\n   * Parameters for replacing URL placeholders.\n   */\n  params?: ConfigParams\n}\n\nexport type MfeConfigs = NonNullable<\n  ValidConfigForOrganizationsInCommerceLayer[\"mfe\"]\n>\n\nexport type DefaultMfeConfig = NonNullable<\n  NonNullable<ValidConfigForOrganizationsInCommerceLayer[\"mfe\"]>[\"default\"]\n>\n\n/**\n * Retrieves and merges the default organization configuration with market-specific overrides based on the provided market identifier.\n * Placeholder values in the configuration URLs can be replaced with actual values from the `params`.\n *\n * @param jsonConfig The complete configuration object of the organization.\n * @param market The market identifier used to get market-specific configuration overrides.\n * @param params The object containing replacement values for URL placeholders, such as language and access token.\n * @returns The merged configuration object for the specified market, or null if no configuration is found.\n */\nexport function getMfeConfig({\n  jsonConfig,\n  market,\n  params,\n}: GetMfeConfigProps): DefaultMfeConfig | null {\n  const defaultConfig = merge(\n    getDefaults({ params }),\n    jsonConfig?.mfe?.default ?? {},\n  )\n\n  const overrideConfig = market != null ? (jsonConfig?.mfe?.[market] ?? {}) : {}\n\n  // Replace placeholders in all string values within the object\n  function replacePlaceholders(config: DefaultMfeConfig): DefaultMfeConfig {\n    const replacedConfig = JSON.stringify(config)\n      .replace(/:lang/g, params?.lang ?? \":lang\")\n      .replace(/:slug/g, params?.slug ?? \":slug\")\n      .replace(/:token/g, params?.token ?? \":token\")\n      .replace(/:access_token/g, params?.accessToken ?? \":access_token\")\n      .replace(/:order_id/g, params?.orderId ?? \":order_id\")\n      .replace(/:sku_list_id/g, params?.skuListId ?? \":sku_list_id\")\n      .replace(/:sku_id/g, params?.skuId ?? \":sku_id\")\n      .replace(/:identity_type/g, params?.identityType ?? \":identity_type\")\n      .replace(/:client_id/g, params?.clientId ?? \":client_id\")\n      .replace(/:scope/g, params?.scope ?? \":scope\")\n      .replace(/:public_scope/g, params?.publicScope ?? \":public_scope\")\n      .replace(/:return_url/g, params?.returnUrl ?? \":return_url\")\n      .replace(\n        /:reset_password_url/g,\n        params?.resetPasswordUrl ?? \":reset_password_url\",\n      )\n\n    return JSON.parse(replacedConfig)\n  }\n\n  const mergedConfig: DefaultMfeConfig = merge(\n    JSON.parse(JSON.stringify(defaultConfig)),\n    overrideConfig,\n  )\n\n  if (Object.keys(mergedConfig).length === 0) {\n    return null\n  }\n\n  return replacePlaceholders(mergedConfig)\n}\n\n/**\n * Provides default MFE configuration.\n */\nfunction getDefaults({ params }: GetMfeConfigProps): DefaultMfeConfig {\n  if (params?.accessToken == null) {\n    return {}\n  }\n\n  try {\n    const jwt = jwtDecode(params.accessToken)\n    const slug =\n      params.slug ??\n      (\"organization\" in jwt.payload ? jwt.payload.organization.slug : null)\n\n    if (slug == null) {\n      return {}\n    }\n\n    const domainPrefix = jwt.payload.iss.endsWith(\"commercelayer.co\")\n      ? \".stg\"\n      : \"\"\n\n    const appEndpoint = `https://${slug}${domainPrefix}.commercelayer.app`\n\n    const defaultConfig: DefaultMfeConfig = {\n      links: {\n        cart: `${appEndpoint}/cart/:order_id?accessToken=:access_token`,\n        checkout: `${appEndpoint}/checkout/:order_id?accessToken=:access_token`,\n        my_account: `${appEndpoint}/my-account?${[\n          \"accessToken=:access_token\",\n          params.returnUrl != null ? \"returnUrl=:return_url\" : null,\n        ]\n          .filter((part) => part != null)\n          .join(\"&\")}`,\n        identity: `${appEndpoint}/identity/:identity_type?${[\n          \"clientId=:client_id\",\n          \"scope=:scope\",\n          params.publicScope != null ? \"publicScope=:public_scope\" : null,\n          params.lang != null ? \"lang=:lang\" : null,\n          params.returnUrl != null ? \"returnUrl=:return_url\" : null,\n          params.resetPasswordUrl != null\n            ? \"resetPasswordUrl=:reset_password_url\"\n            : null,\n        ]\n          .filter((part) => part != null)\n          .join(\"&\")}`,\n        microstore:\n          params.skuListId != null\n            ? `${appEndpoint}/microstore/list/:sku_list_id?accessToken=:access_token`\n            : `${appEndpoint}/microstore/sku/:sku_id?accessToken=:access_token`,\n      },\n    }\n\n    return defaultConfig\n  } catch (_error) {\n    console.log(_error)\n    return {}\n  }\n}\n\nexport function hasValidLinks(\n  config: ReturnType<typeof getMfeConfig>,\n): config is MfeConfigWithLinks {\n  return (\n    config != null &&\n    config.links != null &&\n    config.links.cart != null &&\n    config.links.checkout != null &&\n    config.links.identity != null &&\n    config.links.my_account != null\n  )\n}\n\nexport type MfeConfigWithLinks = Omit<DefaultMfeConfig, \"links\"> & {\n  links: SetRequired<\n    NonNullable<DefaultMfeConfig[\"links\"]>,\n    \"cart\" | \"checkout\" | \"identity\" | \"my_account\"\n  >\n}\n"],"mappings":"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","names":["index_exports","__export","getMfeConfig","hasValidLinks","__toCommonJS","import_js_auth","import_merge_anything","getMfeConfig","jsonConfig","market","params","_a","_b","_c","_d","defaultConfig","getDefaults","overrideConfig","replacePlaceholders","config","_e","_f","_g","_h","_i","_j","_k","_l","_m","replacedConfig","mergedConfig","jwt","slug","domainPrefix","appEndpoint","part","_error","hasValidLinks"]}