UNPKG

@commercelayer/organization-config

Version:

Organization config utils for extracting config by market

316 lines (312 loc) 9.07 kB
import { SetRequired } from 'type-fest'; /** * This file was automatically generated by json-schema-to-typescript. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run json-schema-to-typescript to regenerate this file. */ type Url = string; /** * Don't show promo code. */ type HidePromoCode = boolean; /** * The international 2-letter country code as defined by the ISO 3166-1 standard. */ type CountryCode = string; /** * List of billing countries by identifier and label. */ type StateCountry = { value: CountryCode; /** * Name of the country. */ label: string; }[]; /** * List of shipping countries by identifier and label. */ type StateCountry1 = { value: CountryCode; /** * Name of the country. */ label: string; }[]; /** * List of shipping countries by identifier and label. * * This interface was referenced by `undefined`'s JSON-Schema definition * via the `patternProperty` "^.*$". */ type StateCountry2 = { value: CountryCode; /** * Name of the country. */ label: string; }[]; /** * List of shipping countries by identifier and label. * * This interface was referenced by `undefined`'s JSON-Schema definition * via the `patternProperty` "^.*$". */ type StateCountry3 = { value: CountryCode; /** * Name of the country. */ label: string; }[]; /** * Enable this option if you want to hide item codes. */ type HideItemCodes = boolean; /** * Payload to use when using the config field of the Organization on CommerceLayer. */ interface ValidConfigForOrganizationsInCommerceLayer { mfe?: { default?: MfeConfig; [k: string]: MfeConfig | undefined; }; /** * Default settings for apps. */ apps?: { /** * Customers app settings. */ customers?: { /** * Enable reset password flow for customers. */ enable_reset_password?: boolean; }; /** * Orders app settings. */ orders?: { /** * Enable this option to allow external price. */ external_price?: boolean; }; }; /** * Organization API behavior settings. */ api?: { auth?: { /** * Allow JWT bearer token to see guest orders. */ guest_orders?: boolean; }; /** * Stream pusher configuration. */ stream?: { /** * Where streaming is enabled: none, live, test or both. */ scope?: "none" | "live" | "test" | "both"; }; }; [k: string]: unknown; } /** * Default settings for links and checkout. * * This interface was referenced by `undefined`'s JSON-Schema definition * via the `patternProperty` "^market:id:[a-zA-Z0-9]*$$". */ interface MfeConfig { /** * Links for specific micro frontends. */ links?: { cart?: Url; checkout?: Url; identity?: Url; microstore?: Url; my_account?: Url; }; /** * Settings for the Checkout micro front end. */ checkout?: { /** * Billing details not required for processing. */ optional_billing_info?: boolean; hide_promo_code?: HidePromoCode; /** * Company name not required for processing. */ optional_company_name?: boolean; /** * Show notes. */ show_notes?: boolean; thankyou_page?: Url; billing_countries?: StateCountry; shipping_countries?: StateCountry1; default_country?: CountryCode; /** * List of states by country with identifier and label. */ billing_states?: { [k: string]: StateCountry2; }; /** * List of states by country with identifier and label. */ shipping_states?: { [k: string]: StateCountry3; }; hide_item_codes?: HideItemCodes; }; /** * Checkout internal links settings. */ urls?: { privacy?: Url; terms?: Url; }; /** * Default language setting. */ language?: string; /** * Cart settings. */ cart?: { hide_item_codes?: HideItemCodes; hide_promo_code?: HidePromoCode; }; /** * Microstore settings. */ microstore?: { hide_item_codes?: HideItemCodes; }; /** * My Account settings. */ my_account?: { hide_item_codes?: HideItemCodes; /** * Enable this option if you want to hide returns. */ hide_returns?: boolean; /** * Enable this option if you want to hide subscriptions. */ hide_subscriptions?: boolean; /** * Don't show the wallet. */ hide_wallet?: boolean; /** * Don't show the logout. */ hide_logout?: boolean; }; } /** * Represents a type that can be null or undefined, making it optional in use. * @template T The type that is being made nullable. */ type NullableType<T> = T | null | undefined; /** * Params used by the getConfig function */ interface ConfigParams { /** * Language code (e.g., 'en', 'fr') used to dynamically replace the `:lang` placeholder in URLs. */ lang?: NullableType<string>; /** * Organization slug used to replace the `:slug` placeholder in URLs. */ slug?: NullableType<string>; /** * Access token string used to replace the `:access_token` placeholder in URLs. */ accessToken?: NullableType<string>; /** * Unique identifier for an order used to replace the `:order_id` placeholder in URLs. */ orderId?: NullableType<string>; /** * Order token string used to replace the `:token` placeholder in URLs. */ token?: NullableType<string>; /** * Unique identifier for an SKU list used to replace the `:sku_list_id` placeholder in URLs. */ skuListId?: NullableType<string>; /** * Unique identifier for an SKU used to replace the `:sku_id` placeholder in URLs. */ skuId?: NullableType<string>; /** * Type used for the identity, which can be used to replace a `:identity_type` placeholder in URLs. */ identityType?: NullableType<"login" | "signup">; /** * Client ID used for authentication, which can be used to replace a `:client_id` placeholder in URLs. */ clientId?: NullableType<string>; /** * For the identity, it is the market used for the login process (e.g. a private market). */ scope?: NullableType<string>; /** * 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.). */ publicScope?: NullableType<string>; /** * Return URL after certain actions, which can be used to replace a `:return_url` placeholder in URLs. */ returnUrl?: NullableType<string>; /** * URL to the reset password page, which can be used to replace a `:reset_password_url` placeholder in URLs. */ resetPasswordUrl?: NullableType<string>; } interface GetMfeConfigProps { /** * `config` attribute of the organization */ jsonConfig?: { mfe?: MfeConfigs; } | null; /** * Market identifier for fetching specific configuration overrides. (`market:id:hashid`) */ market?: string; /** * Parameters for replacing URL placeholders. */ params?: ConfigParams; } type MfeConfigs = NonNullable<ValidConfigForOrganizationsInCommerceLayer["mfe"]>; type DefaultMfeConfig = NonNullable<NonNullable<ValidConfigForOrganizationsInCommerceLayer["mfe"]>["default"]>; /** * Retrieves and merges the default organization configuration with market-specific overrides based on the provided market identifier. * Placeholder values in the configuration URLs can be replaced with actual values from the `params`. * * @param jsonConfig The complete configuration object of the organization. * @param market The market identifier used to get market-specific configuration overrides. * @param params The object containing replacement values for URL placeholders, such as language and access token. * @returns The merged configuration object for the specified market, or null if no configuration is found. */ declare function getMfeConfig({ jsonConfig, market, params, }: GetMfeConfigProps): DefaultMfeConfig | null; declare function hasValidLinks(config: ReturnType<typeof getMfeConfig>): config is MfeConfigWithLinks; type MfeConfigWithLinks = Omit<DefaultMfeConfig, "links"> & { links: SetRequired<NonNullable<DefaultMfeConfig["links"]>, "cart" | "checkout" | "identity" | "my_account">; }; export { type DefaultMfeConfig, type MfeConfigWithLinks, type MfeConfigs, getMfeConfig, hasValidLinks };