@wix/pricing-plans-site-api 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -232,7 +232,7 @@ async function loadPublicPlan(planId) {
|
|
|
232
232
|
const { items } = await plansV3.queryPlans().eq("_id", planId).eq("visibility", "PUBLIC").limit(1).find();
|
|
233
233
|
return items[0];
|
|
234
234
|
}
|
|
235
|
-
async function createCheckoutUrl(planId, pricingVariantId) {
|
|
235
|
+
async function createCheckoutUrl(planId, pricingVariantId, membersOnly = false) {
|
|
236
236
|
const cart = await cartV2.createCart({
|
|
237
237
|
cart: { source: { channelType: "WEB" } },
|
|
238
238
|
catalogItems: [{
|
|
@@ -244,7 +244,7 @@ async function createCheckoutUrl(planId, pricingVariantId) {
|
|
|
244
244
|
type: "PLAN",
|
|
245
245
|
planOptions: {
|
|
246
246
|
pricingVariantId,
|
|
247
|
-
membersOnly
|
|
247
|
+
membersOnly
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
}
|
|
@@ -385,7 +385,7 @@ function createBuilderSiteApi({ navigateTo, ...context }) {
|
|
|
385
385
|
...options,
|
|
386
386
|
pricingVariantId: purchase.pricingVariantId
|
|
387
387
|
}), "plan page");
|
|
388
|
-
return navigateToPage(navigateTo, withSuccessUrl(context, await createCheckoutUrl(options.planId, purchase.pricingVariantId), options.thankYouPage?.navigation), "checkout");
|
|
388
|
+
return navigateToPage(navigateTo, withSuccessUrl(context, await createCheckoutUrl(options.planId, purchase.pricingVariantId, Boolean(returnUrl(context, options.thankYouPage?.navigation))), options.thankYouPage?.navigation), "checkout");
|
|
389
389
|
}
|
|
390
390
|
};
|
|
391
391
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["englishMessages"],"sources":["../src/pricing-details/format-price.ts","../src/assets/locale/messages_en.dev.json","../src/pricing-details/messages.ts","../src/pricing-details/translate.ts","../src/pricing-details/variant-labels.ts","../src/pricing-details/pricing-details.ts","../src/use-pricing-plans-pricing-details.ts","../src/constants.ts","../src/builder/checkout.ts","../src/builder/plan-purchase.ts","../src/url.ts","../src/app-pages.ts","../src/builder/return-url.ts","../src/builder/checkout-query.ts","../src/builder/plan-page-url.ts","../src/builder/pricing-page-url.ts","../src/builder/success-url.ts","../src/adapters/navigate-to-page.ts","../src/adapters/builder.ts","../src/legacy/pages.ts","../src/legacy/pricing-page-url.ts","../src/adapters/legacy-ooi.ts","../src/adapters/not-installed.ts","../src/create-site-api.ts","../src/public-api-caller.ts","../src/use-pricing-plans-site-api.ts"],"sourcesContent":["export function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string,\n trimTrailingZeroes = false,\n): string {\n if (!amount || !currency) {\n return amount ?? '';\n }\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n trailingZeroDisplay: trimTrailingZeroes ? 'stripIfInteger' : 'auto',\n }).format(Number(amount));\n } catch {\n return amount;\n }\n}\n","","import englishMessages from '../assets/locale/messages_en.dev.json';\n\nexport type Messages = Readonly<Record<string, string>>;\n\ntype MessageFiles = Record<string, () => Promise<{ default: Messages }>>;\n\nexport const ENGLISH_MESSAGES: Messages = englishMessages;\n\nconst MESSAGE_FILES: MessageFiles = import.meta.glob<{ default: Messages }>([\n '../assets/locale/messages_*.json',\n '!../assets/locale/messages_*.dev.json',\n '!../assets/locale/messages_en.json',\n]);\n\n// Behind import.meta.env.DEV, so the production build of the consumer app leaves them out.\nconst DEV_MESSAGE_FILES: MessageFiles = import.meta.env?.DEV\n ? import.meta.glob<{ default: Messages }>([\n '../assets/locale/messages_*.dev.json',\n '!../assets/locale/messages_en.dev.json',\n ])\n : {};\n\nconst loadedMessages = new Map<string, Promise<Messages>>();\n\nconst messagesFile = (language: string) => `../assets/locale/messages_${language}.json`;\n\nconst devMessagesFile = (language: string) => `../assets/locale/messages_${language}.dev.json`;\n\nexport function messageFileLanguages(language: string): string[] {\n const [baseLanguage] = language.split(/[-_]/);\n\n return baseLanguage && baseLanguage !== language ? [language, baseLanguage] : [language];\n}\n\nconst loadFile = async (load: MessageFiles[string] | undefined): Promise<Messages> =>\n load ? (await load()).default : {};\n\nexport function loadMessages(language: string): Promise<Messages> {\n const fileLanguage = messageFileLanguages(language).find(\n (candidate) =>\n MESSAGE_FILES[messagesFile(candidate)] || DEV_MESSAGE_FILES[devMessagesFile(candidate)],\n );\n\n if (!fileLanguage) {\n return Promise.resolve(ENGLISH_MESSAGES);\n }\n\n const loaded = loadedMessages.get(fileLanguage);\n\n if (loaded) {\n return loaded;\n }\n\n const loading = Promise.all([\n loadFile(MESSAGE_FILES[messagesFile(fileLanguage)]),\n loadFile(DEV_MESSAGE_FILES[devMessagesFile(fileLanguage)]),\n ]).then(\n ([messages, devMessages]) => ({ ...messages, ...devMessages }),\n () => {\n loadedMessages.delete(fileLanguage);\n\n return ENGLISH_MESSAGES;\n },\n );\n\n loadedMessages.set(fileLanguage, loading);\n\n return loading;\n}\n","import type { I18n, InitI18n } from '../types';\nimport { ENGLISH_MESSAGES, loadMessages } from './messages';\n\nexport type Translate = (key: string, values?: Record<string, number>) => string;\n\nconst translations = new WeakMap<InitI18n, Map<string, Promise<Translate>>>();\n\nconst initialized = (i18n: I18n) =>\n i18n.isInitialized\n ? Promise.resolve()\n : new Promise<void>((resolve) => {\n i18n.on('initialized', () => resolve());\n });\n\nasync function buildTranslate(initI18n: InitI18n, language: string): Promise<Translate> {\n const messages = await loadMessages(language);\n const i18n = initI18n({ locale: language, messages: { ...ENGLISH_MESSAGES, ...messages } });\n\n await initialized(i18n);\n\n if (!i18n.modules?.i18nFormat) {\n throw new Error(\n 'Pricing texts need an i18next instance with ICU messages, such as initI18n of @wix/fed-cli-i18next.',\n );\n }\n\n // Typed loosely in I18n, so the overloaded t of every i18next version matches it.\n const t = i18n.t.bind(i18n) as unknown as (\n key: string,\n values?: Record<string, number>,\n ) => unknown;\n\n return (key, values) => String(t(key, values));\n}\n\nexport function createTranslate(initI18n: InitI18n, language: string): Promise<Translate> {\n const languages = translations.get(initI18n) ?? new Map<string, Promise<Translate>>();\n\n translations.set(initI18n, languages);\n\n const existing = languages.get(language);\n\n if (existing) {\n return existing;\n }\n\n const building = buildTranslate(initI18n, language);\n\n languages.set(language, building);\n building.catch(() => languages.delete(language));\n\n return building;\n}\n","import type { plansV3 } from '@wix/pricing-plans';\nimport type { FormattedAdditionalFee } from '../types';\nimport { formatPrice } from './format-price';\nimport type { Translate } from './translate';\n\ntype PricingVariant = plansV3.PricingVariant;\n\nconst CYCLE_KEYS: Record<string, string> = {\n DAY: 'pp.period-recurrency.every-day-plural',\n WEEK: 'pp.period-recurrency.every-week-plural',\n MONTH: 'pp.period-recurrency.every-month-plural',\n YEAR: 'pp.period-recurrency.every-year-plural',\n};\n\nconst DURATION_KEYS: Record<string, string> = {\n DAY: 'pp.plan-validity.valid-for-days-v2',\n WEEK: 'pp.plan-validity.valid-for-weeks-v2',\n MONTH: 'pp.plan-validity.valid-for-months-v2',\n YEAR: 'pp.plan-validity.valid-for-years-v2',\n};\n\nconst isUnlimitedVariant = (variant: PricingVariant) =>\n variant.billingTerms?.endType === 'UNTIL_CANCELLED';\n\nconst getCycleDuration = (variant: PricingVariant) =>\n parseInt(variant.billingTerms?.billingCycle?.count ?? '1', 10);\n\nfunction isRecurringVariant(variant: PricingVariant) {\n const terms = variant.billingTerms;\n\n if (!terms?.billingCycle) {\n return false;\n }\n\n if (terms.endType === 'CYCLES_COMPLETED') {\n return terms.cyclesCompletedDetails?.billingCycleCount !== '1';\n }\n\n return true;\n}\n\nexport const hasFreeTrialDays = (variant: PricingVariant) => Boolean(variant.freeTrialDays);\n\nexport function getCycleLabel(variant: PricingVariant, t: Translate): string {\n const key = CYCLE_KEYS[variant.billingTerms?.billingCycle?.period ?? ''];\n\n if (!isRecurringVariant(variant) || !key) {\n return '';\n }\n\n return t(key, { count: getCycleDuration(variant) });\n}\n\nexport function getDurationLabel(variant: PricingVariant, t: Translate): string {\n if (isUnlimitedVariant(variant)) {\n return t('pp.plan-validity.valid-unlimited');\n }\n\n const key = DURATION_KEYS[variant.billingTerms?.billingCycle?.period ?? ''];\n const cycleDuration = getCycleDuration(variant);\n const cycleCount = parseInt(\n variant.billingTerms?.cyclesCompletedDetails?.billingCycleCount ?? '',\n 10,\n );\n\n if (!key || !cycleDuration || !cycleCount) {\n return '';\n }\n\n return t(key, { amount: cycleDuration * cycleCount });\n}\n\nexport function getFreeTrialLabel(variant: PricingVariant, t: Translate): string {\n if (!variant.freeTrialDays) {\n return '';\n }\n\n return t(isUnlimitedVariant(variant) ? 'pp.free-trial-days-unlimited' : 'pp.free-trial-days', {\n count: variant.freeTrialDays,\n });\n}\n\nexport function getAdditionalFees(\n variant: PricingVariant,\n currency: string | undefined,\n locale: string,\n trimTrailingZeroes?: boolean,\n): FormattedAdditionalFee[] {\n return (variant.fees ?? [])\n .filter((fee) => Boolean(fee.fixedAmountOptions?.amount))\n .map((fee) => ({\n name: fee.name ?? '',\n amount: formatPrice(fee.fixedAmountOptions?.amount, currency, locale, trimTrailingZeroes),\n }));\n}\n","import type { plansV3 } from '@wix/pricing-plans';\nimport type {\n GetTranslatedPricingDetailsOptions,\n PricingDetailsApi,\n PricingDetailsOptions,\n TranslatedPricingDetails,\n} from '../types';\nimport { formatPrice } from './format-price';\nimport { createTranslate } from './translate';\nimport type { Translate } from './translate';\nimport {\n getAdditionalFees,\n getCycleLabel,\n getDurationLabel,\n getFreeTrialLabel,\n hasFreeTrialDays,\n} from './variant-labels';\n\nconst EMPTY_PRICING_DETAILS: TranslatedPricingDetails = {\n price: '',\n cycle: '',\n duration: '',\n freeTrial: '',\n additionalFees: [],\n};\n\nfunction getVariantPricingDetails(\n plan: plansV3.Plan,\n variant: plansV3.PricingVariant,\n t: Translate,\n locale: string,\n options?: GetTranslatedPricingDetailsOptions,\n): TranslatedPricingDetails {\n const amount = plan.currency ? variant.pricingStrategies?.[0]?.flatRate?.amount : undefined;\n\n return {\n price: formatPrice(amount, plan.currency, locale, options?.trimTrailingZeroes),\n cycle: getCycleLabel(variant, t),\n duration: getDurationLabel(variant, t),\n freeTrial: getFreeTrialLabel(variant, t),\n additionalFees: getAdditionalFees(variant, plan.currency, locale, options?.trimTrailingZeroes),\n };\n}\n\nfunction getPlanPricingDetails(\n plan: plansV3.Plan,\n t: Translate,\n locale: string,\n options?: GetTranslatedPricingDetailsOptions,\n): TranslatedPricingDetails {\n const variants = plan.pricingVariants ?? [];\n const [firstVariant] = variants;\n\n if (!firstVariant) {\n return EMPTY_PRICING_DETAILS;\n }\n\n const firstVariantDetails = getVariantPricingDetails(plan, firstVariant, t, locale, options);\n\n if (variants.length === 1) {\n return firstVariantDetails;\n }\n\n // A free trial can be set per variant through the API, so the plan shows one when any variant has it.\n const freeTrialVariant = variants.find(hasFreeTrialDays);\n\n return {\n ...firstVariantDetails,\n price: t('pp.pricing-details.multiple-prices'),\n cycle: '',\n freeTrial: freeTrialVariant ? getFreeTrialLabel(freeTrialVariant, t) : '',\n };\n}\n\nexport function createPricingDetailsApi({\n initI18n,\n language,\n}: PricingDetailsOptions): PricingDetailsApi {\n return {\n getTranslatedPricingDetails: async (plan, options) =>\n getPlanPricingDetails(plan, await createTranslate(initI18n, language), language, options),\n getTranslatedPricingDetailsPerVariant: async (plan, options) => {\n const t = await createTranslate(initI18n, language);\n\n return (plan.pricingVariants ?? []).map((variant) => {\n const [categoryId] = variant.categoryIds ?? [];\n\n return {\n ...getVariantPricingDetails(plan, variant, t, language, options),\n pricingVariantId: variant._id ?? '',\n categoryName: categoryId ? options?.variantCategoryNameById?.[categoryId] : undefined,\n };\n });\n },\n };\n}\n","import { useMemo } from 'react';\nimport { createPricingDetailsApi } from './pricing-details/pricing-details';\nimport type { PricingDetailsApi, PricingDetailsOptions } from './types';\n\n/**\n * Pricing texts of Pricing Plans plans, like the legacy `getTranslatedPricingDetails` and\n * `getTranslatedPricingDetailsPerVariant`.\n *\n * The texts are translated with an i18next instance the hook builds with the app's `initI18n`, so\n * the i18next runtime stays with the app and the app's own instance isn't changed. Its instances\n * have to format ICU messages, like the ones `initI18n` of `@wix/fed-cli-i18next` creates.\n *\n * The texts depend only on the plan, so the hook works with both apps and on sites without Pricing\n * Plans, and needs no `serviceDependencies`.\n *\n * @param options The app's i18next factory, and the language of the texts.\n *\n * @example\n * const { getTranslatedPricingDetails } = usePricingPlansPricingDetails({\n * initI18n,\n * language: essentialsI18n.getLanguage(),\n * });\n *\n * const { price, cycle } = await getTranslatedPricingDetails(plan);\n */\nexport function usePricingPlansPricingDetails({\n initI18n,\n language,\n}: PricingDetailsOptions): PricingDetailsApi {\n return useMemo(() => createPricingDetailsApi({ initI18n, language }), [initI18n, language]);\n}\n","export const PRICING_PLANS_APP_ID = '1522827f-c56c-a5c9-2ac9-00f9e6ae12d3';\n","import { cartV2 } from '@wix/ecom';\nimport { plansV3 } from '@wix/pricing-plans';\nimport { PRICING_PLANS_APP_ID } from '../constants';\n\nexport async function loadPublicPlan(planId: string): Promise<plansV3.Plan | undefined> {\n const { items } = await plansV3\n .queryPlans()\n .eq('_id', planId)\n .eq('visibility', 'PUBLIC')\n .limit(1)\n .find();\n\n return items[0];\n}\n\nexport async function createCheckoutUrl(planId: string, pricingVariantId: string): Promise<string> {\n const cart = await cartV2.createCart({\n cart: { source: { channelType: 'WEB' } },\n catalogItems: [\n {\n quantity: 1,\n catalogReference: {\n appId: PRICING_PLANS_APP_ID,\n catalogItemId: planId,\n options: { type: 'PLAN', planOptions: { pricingVariantId, membersOnly: false } },\n },\n },\n ],\n });\n\n if (!cart?._id) {\n throw new Error('Cart creation did not return an ID');\n }\n\n const { checkoutUrl } = await cartV2.getCheckoutUrl(cart._id);\n\n if (!checkoutUrl) {\n throw new Error('Checkout URL was not returned');\n }\n\n return checkoutUrl;\n}\n","import type { plansV3 } from '@wix/pricing-plans';\n\nexport type PlanPurchase = {\n pricingVariantId: string;\n requiresCustomization: boolean;\n};\n\nexport function planPurchase(\n plan: plansV3.Plan | undefined,\n pricingVariantId?: string,\n): PlanPurchase | undefined {\n if (!plan) return;\n\n const variants = (plan.pricingVariants ?? []).filter(\n (variant): variant is plansV3.PricingVariant & { _id: string } =>\n Boolean(variant._id) && variant.visible !== false,\n );\n // Like the legacy app, a hidden or unknown pricingVariantId falls back to the first visible variant.\n const variant = variants.find(({ _id }) => _id === pricingVariantId) ?? variants[0];\n\n if (!variant) return;\n\n const requiresStartDate = plan.startDateSettings\n ? plan.startDateSettings.type === 'DATE_RANGE'\n : variant.billingTerms?.startType === 'CUSTOM';\n\n return {\n pricingVariantId: variant._id,\n requiresCustomization: Boolean(plan.formId) || requiresStartDate,\n };\n}\n","export function siteHref(siteUrl: string, path: string): string {\n return `${siteUrl.replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n}\n\nexport function withQuery(url: string, query: URLSearchParams): string {\n const search = query.toString();\n\n return search ? `${url}?${search}` : url;\n}\n\nexport function queryOf(entries: Array<[string, string | undefined]>): URLSearchParams {\n return new URLSearchParams(\n entries.filter((entry): entry is [string, string] => Boolean(entry[1])),\n );\n}\n\nexport function encodePricingVariants(pricingVariantsByPlanId: Record<string, string[]>): string {\n return Object.entries(pricingVariantsByPlanId)\n .filter(([, pricingVariantIds]) => pricingVariantIds.length)\n .map(([planId, pricingVariantIds]) => [planId, ...pricingVariantIds].join(':'))\n .join(',');\n}\n","import { PRICING_PLANS_APP_ID } from './constants';\nimport type { Page, Pages, UrlContext } from './types';\nimport { siteHref } from './url';\n\nexport function findAppPage(pages: Pages, appPageId: string): Page | undefined {\n const candidates = Object.values(pages).filter(\n (page) => !page.popup && page.appPageId === appPageId,\n );\n const unowned = candidates.filter((page) => !page.appDefinitionId);\n\n return (\n candidates.find((page) => page.appDefinitionId === PRICING_PLANS_APP_ID) ??\n (unowned.length === 1 ? unowned[0] : undefined)\n );\n}\n\nexport function appPageUrl(context: UrlContext, appPageId: string): string | undefined {\n const path = findAppPage(context.pages, appPageId)\n ? context.sectionUrl(PRICING_PLANS_APP_ID, appPageId)\n : undefined;\n\n return path ? siteHref(context.siteUrl, path) : undefined;\n}\n","import type { NavigationPolicy, UrlContext } from '../types';\nimport { siteHref, withQuery } from '../url';\n\nexport function returnUrl(\n { pages, siteUrl, sectionUrl }: UrlContext,\n navigation: NavigationPolicy | undefined,\n): string | undefined {\n if (!navigation) return;\n\n switch (navigation.type) {\n case 'url':\n return onSiteUrl(siteUrl, navigation.url);\n case 'page': {\n const page = pages[navigation.pageId];\n\n return page && siteHref(siteUrl, page.path);\n }\n case 'section': {\n const { appDefinitionId, sectionId, state, queryParams, discardRouterPageSuffix } =\n navigation.options;\n const path = sectionUrl(appDefinitionId, sectionId, discardRouterPageSuffix);\n\n if (!path) return;\n\n const url = siteHref(siteUrl, state ? `${path.replace(/\\/$/, '')}/${state}` : path);\n\n return queryParams\n ? withQuery(url, new URLSearchParams({ appSectionParams: JSON.stringify(queryParams) }))\n : url;\n }\n }\n}\n\n// Matches the targets the Thank You page accepts as `returnUrl`; it sends any other to the homepage.\nfunction onSiteUrl(siteUrl: string, url: string): string | undefined {\n try {\n const site = new URL(siteUrl.endsWith('/') ? siteUrl : `${siteUrl}/`);\n const target = new URL(url.startsWith('/') ? siteHref(siteUrl, url) : url, site);\n const basePath = site.pathname.replace(/\\/$/, '');\n\n if (\n target.origin === site.origin &&\n !target.username &&\n !target.password &&\n (target.protocol === 'https:' || target.protocol === 'http:') &&\n (target.pathname === basePath || target.pathname.startsWith(`${basePath}/`))\n ) {\n return target.href;\n }\n } catch {\n return;\n }\n}\n","import type { CheckoutOptions, UrlContext } from '../types';\nimport { returnUrl } from './return-url';\n\nexport function checkoutQueryEntries(\n context: UrlContext,\n checkout: CheckoutOptions = {},\n): Array<[string, string | undefined]> {\n return [\n ['minStartDate', checkout.minStartDate],\n ['maxStartDate', checkout.maxStartDate],\n ['returnUrl', returnUrl(context, checkout.thankYouPage?.navigation)],\n ];\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPlanPageOptions, UrlContext } from '../types';\nimport { queryOf, withQuery } from '../url';\nimport { checkoutQueryEntries } from './checkout-query';\n\nexport const BUILDER_PLAN_PAGE_ID = 'plan-customization-page';\n\nexport function builderPlanPageUrl(\n context: UrlContext,\n { planId, pricingVariantId, ...checkout }: NavigateToPlanPageOptions,\n): string | undefined {\n const url = appPageUrl(context, BUILDER_PLAN_PAGE_ID);\n\n if (!url) return;\n\n return withQuery(\n `${url.replace(/\\/+$/, '')}/${encodeURIComponent(planId)}`,\n queryOf([['pricingVariantId', pricingVariantId], ...checkoutQueryEntries(context, checkout)]),\n );\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPricingPageOptions, UrlContext } from '../types';\nimport { encodePricingVariants, queryOf, withQuery } from '../url';\nimport { checkoutQueryEntries } from './checkout-query';\n\nexport const BUILDER_PRICING_PAGE_ID = 'plans-page';\n\nexport function builderPricingPageUrl(\n context: UrlContext,\n { planIds, pricingVariantsByPlanId, checkout }: NavigateToPricingPageOptions,\n): string | undefined {\n const url = appPageUrl(context, BUILDER_PRICING_PAGE_ID);\n\n if (!url) return;\n\n const pricingVariants = pricingVariantsByPlanId && encodePricingVariants(pricingVariantsByPlanId);\n\n return withQuery(\n url,\n queryOf([\n pricingVariants ? ['pricingVariants', pricingVariants] : ['planIds', planIds?.join(',')],\n ...checkoutQueryEntries(context, checkout),\n ]),\n );\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigationPolicy, UrlContext } from '../types';\nimport { returnUrl } from './return-url';\n\nexport const BUILDER_THANK_YOU_PAGE_ID = 'thank-you-page';\n\nexport function withSuccessUrl(\n context: UrlContext,\n checkoutUrl: string,\n navigation: NavigationPolicy | undefined,\n): string {\n const thankYouPage = appPageUrl(context, BUILDER_THANK_YOU_PAGE_ID);\n const target = returnUrl(context, navigation);\n\n if (!thankYouPage || !target) {\n return checkoutUrl;\n }\n\n const successUrl = new URL(thankYouPage);\n const url = new URL(checkoutUrl);\n\n successUrl.searchParams.set('returnUrl', target);\n url.searchParams.set('successUrl', successUrl.href);\n\n return url.href;\n}\n","import type { SiteApiContext } from '../types';\n\nexport async function navigateToPage(\n navigateTo: SiteApiContext['navigateTo'],\n href: string | undefined,\n pageName: string,\n): Promise<void> {\n if (!href) {\n throw new Error(`Cannot navigate to ${pageName}, because it is not available on the site.`);\n }\n\n if (!(await navigateTo(href))) {\n throw new Error(`Navigation to ${pageName} failed.`);\n }\n}\n\nexport async function getPageUrl(href: string | undefined, pageName: string): Promise<string> {\n if (!href) {\n throw new Error(`Cannot get ${pageName} URL, because it is not available on the site.`);\n }\n\n return href;\n}\n","import { createCheckoutUrl, loadPublicPlan } from '../builder/checkout';\nimport { planPurchase } from '../builder/plan-purchase';\nimport { builderPlanPageUrl } from '../builder/plan-page-url';\nimport { builderPricingPageUrl } from '../builder/pricing-page-url';\nimport { withSuccessUrl } from '../builder/success-url';\nimport type { SiteApiContext, PricingPlansSiteApi } from '../types';\nimport { getPageUrl, navigateToPage } from './navigate-to-page';\n\nexport function createBuilderSiteApi({\n navigateTo,\n ...context\n}: SiteApiContext): PricingPlansSiteApi {\n return {\n navigateToPricingPage: (options = {}) =>\n navigateToPage(navigateTo, builderPricingPageUrl(context, options), 'pricing page'),\n getPricingPageUrl: (options = {}) =>\n getPageUrl(builderPricingPageUrl(context, options), 'pricing page'),\n navigateToPlanPage: async (options) => {\n const purchase = planPurchase(await loadPublicPlan(options.planId), options.pricingVariantId);\n\n if (!purchase) {\n throw new Error('Plan is not available for online purchase.');\n }\n\n if (purchase.requiresCustomization) {\n return navigateToPage(\n navigateTo,\n builderPlanPageUrl(context, { ...options, pricingVariantId: purchase.pricingVariantId }),\n 'plan page',\n );\n }\n\n const checkoutUrl = await createCheckoutUrl(options.planId, purchase.pricingVariantId);\n\n return navigateToPage(\n navigateTo,\n withSuccessUrl(context, checkoutUrl, options.thankYouPage?.navigation),\n 'checkout',\n );\n },\n };\n}\n","import { findAppPage } from '../app-pages';\nimport type { Page, Pages } from '../types';\n\nexport const LEGACY_PRICING_PAGE_ID = 'membership_plan_picker_tpa';\n\nexport function findLegacyPricingPage(pages: Pages): Page | undefined {\n return findAppPage(pages, LEGACY_PRICING_PAGE_ID);\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPricingPageOptions, UrlContext } from '../types';\nimport { encodePricingVariants, queryOf, withQuery } from '../url';\nimport { LEGACY_PRICING_PAGE_ID } from './pages';\n\nexport function legacyPricingPageUrl(\n context: UrlContext,\n options: NavigateToPricingPageOptions,\n): string | undefined {\n const url = appPageUrl(context, LEGACY_PRICING_PAGE_ID);\n\n return url && withQuery(url, pricingPageQuery(options));\n}\n\nfunction pricingPageQuery({\n planIds,\n pricingVariantsByPlanId,\n title,\n subtitle,\n biOptions,\n checkout,\n}: NavigateToPricingPageOptions): URLSearchParams {\n const { content, navigation } = checkout?.thankYouPage ?? {};\n const pricingVariants = pricingVariantsByPlanId && encodePricingVariants(pricingVariantsByPlanId);\n\n return queryOf([\n ['destination', navigation?.type === 'url' ? navigation.url : undefined],\n ['page', navigation?.type === 'page' ? navigation.pageId : undefined],\n ['section', navigation?.type === 'section' ? encodeBase64Url(navigation.options) : undefined],\n ['referral', biOptions?.referralInfo],\n ['referralId', biOptions?.referralId],\n ['maxStartDate', checkout?.maxStartDate],\n ['minStartDate', checkout?.minStartDate],\n ['thankYouTitle', content?.title],\n ['thankYouMessage', content?.message],\n ['thankYouCTA', content?.cta],\n pricingVariants ? ['pricingVariants', pricingVariants] : ['planIds', planIds?.join(',')],\n ['title', title],\n ['subtitle', subtitle],\n ]);\n}\n\nfunction encodeBase64Url(input: unknown): string {\n const bytes = encodeURIComponent(JSON.stringify(input)).replace(/%[0-9A-F]{2}/g, (percent) =>\n String.fromCharCode(parseInt(percent.slice(1), 16)),\n );\n\n return btoa(bytes).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","import { legacyPricingPageUrl } from '../legacy/pricing-page-url';\nimport type { SiteApiContext, PricingPlansSiteApi } from '../types';\nimport { getPageUrl, navigateToPage } from './navigate-to-page';\n\nexport function createLegacyOoiSiteApi({\n navigateTo,\n callPublicApi,\n ...context\n}: SiteApiContext): PricingPlansSiteApi {\n return {\n navigateToPricingPage: (options = {}) =>\n navigateToPage(navigateTo, legacyPricingPageUrl(context, options), 'pricing page'),\n getPricingPageUrl: (options = {}) =>\n getPageUrl(legacyPricingPageUrl(context, options), 'pricing page'),\n navigateToPlanPage: async (options) => {\n await callPublicApi('navigateToPlanPage', [options]);\n },\n };\n}\n","import type { PricingPlansSiteApi } from '../types';\n\nconst notInstalled = () => Promise.reject(new Error('Pricing Plans is not installed on the site.'));\n\nexport function createNotInstalledSiteApi(): PricingPlansSiteApi {\n return {\n navigateToPricingPage: notInstalled,\n getPricingPageUrl: notInstalled,\n navigateToPlanPage: notInstalled,\n };\n}\n","import { createBuilderSiteApi } from './adapters/builder';\nimport { createLegacyOoiSiteApi } from './adapters/legacy-ooi';\nimport { createNotInstalledSiteApi } from './adapters/not-installed';\nimport { findAppPage } from './app-pages';\nimport { BUILDER_PLAN_PAGE_ID } from './builder/plan-page-url';\nimport { BUILDER_PRICING_PAGE_ID } from './builder/pricing-page-url';\nimport { BUILDER_THANK_YOU_PAGE_ID } from './builder/success-url';\nimport { PRICING_PLANS_APP_ID } from './constants';\nimport { findLegacyPricingPage } from './legacy/pages';\nimport type { SiteApiContext, PricingPlansSiteApi } from './types';\n\nconst BUILDER_PAGE_IDS = [BUILDER_PRICING_PAGE_ID, BUILDER_PLAN_PAGE_ID, BUILDER_THANK_YOU_PAGE_ID];\n\nexport function createSiteApi(context: SiteApiContext): PricingPlansSiteApi {\n if (findLegacyPricingPage(context.pages)) {\n return createLegacyOoiSiteApi(context);\n }\n\n if (\n Object.values(context.pages).some((page) => page.appDefinitionId === PRICING_PLANS_APP_ID) ||\n BUILDER_PAGE_IDS.some((appPageId) => findAppPage(context.pages, appPageId))\n ) {\n return createBuilderSiteApi(context);\n }\n\n return createNotInstalledSiteApi();\n}\n","import { defineService } from '@wix/services-definitions';\n\ntype PublicApiCaller = {\n callPublicApi(\n appDefinitionId: string,\n methodPath: string | string[],\n args?: unknown[],\n ): Promise<unknown>;\n};\n\nexport const PublicApiCallerDefinition = defineService<PublicApiCaller>(\n '@wix/site-service-public-api-caller',\n);\n","import { usePages } from '@wix/react-component-utils';\nimport { useGetService, useService } from '@wix/services-manager-react';\nimport { RouterDefinition } from '@wix/site-service-router/definition';\nimport { UrlDefinition } from '@wix/site-service-url/definition';\nimport { useMemo } from 'react';\nimport { PRICING_PLANS_APP_ID } from './constants';\nimport { createSiteApi } from './create-site-api';\nimport { PublicApiCallerDefinition } from './public-api-caller';\nimport type { PricingPlansSiteApi } from './types';\n\n/**\n * Navigation to Pricing Plans pages that works with both versions of the Pricing Plans app: the\n * legacy app (OOI) and the Builder app. The hook detects which one the site runs and uses its\n * pages, so the calls are the same for both.\n *\n * Calling the hook is safe on any site. When Pricing Plans isn't installed on the site, every method\n * it returns rejects with the error `Pricing Plans is not installed on the site.` and doesn't\n * navigate. The hook treats Pricing Plans as installed when the site has at least one Pricing Plans\n * page.\n *\n * Use it inside a site component or context provider, and list these services in the extension's\n * `serviceDependencies`: `@wix/site-service-pages`, `@wix/site-service-url`,\n * `@wix/site-service-router` and `@wix/site-service-public-api-caller`.\n *\n * @example\n * const { navigateToPlanPage } = usePricingPlansSiteApi();\n *\n * <button onClick={() => navigateToPlanPage({ planId })}>Buy plan</button>\n */\nexport function usePricingPlansSiteApi(): PricingPlansSiteApi {\n const pages = usePages();\n const url = useService(UrlDefinition);\n const getService = useGetService();\n\n return useMemo(\n () =>\n createSiteApi({\n pages,\n siteUrl: url.siteUrl,\n sectionUrl: (appDefinitionId, sectionId, discardRouterPageSuffix) =>\n url.appSectionRelativeUrl(appDefinitionId, sectionId, discardRouterPageSuffix),\n navigateTo: (href) => getService(RouterDefinition).navigateTo({ href }),\n callPublicApi: (methodPath, args) =>\n getService(PublicApiCallerDefinition).callPublicApi(\n PRICING_PLANS_APP_ID,\n methodPath,\n args,\n ),\n }),\n [pages, url, getService],\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["englishMessages"],"sources":["../src/pricing-details/format-price.ts","../src/assets/locale/messages_en.dev.json","../src/pricing-details/messages.ts","../src/pricing-details/translate.ts","../src/pricing-details/variant-labels.ts","../src/pricing-details/pricing-details.ts","../src/use-pricing-plans-pricing-details.ts","../src/constants.ts","../src/builder/checkout.ts","../src/builder/plan-purchase.ts","../src/url.ts","../src/app-pages.ts","../src/builder/return-url.ts","../src/builder/checkout-query.ts","../src/builder/plan-page-url.ts","../src/builder/pricing-page-url.ts","../src/builder/success-url.ts","../src/adapters/navigate-to-page.ts","../src/adapters/builder.ts","../src/legacy/pages.ts","../src/legacy/pricing-page-url.ts","../src/adapters/legacy-ooi.ts","../src/adapters/not-installed.ts","../src/create-site-api.ts","../src/public-api-caller.ts","../src/use-pricing-plans-site-api.ts"],"sourcesContent":["export function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string,\n trimTrailingZeroes = false,\n): string {\n if (!amount || !currency) {\n return amount ?? '';\n }\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n trailingZeroDisplay: trimTrailingZeroes ? 'stripIfInteger' : 'auto',\n }).format(Number(amount));\n } catch {\n return amount;\n }\n}\n","","import englishMessages from '../assets/locale/messages_en.dev.json';\n\nexport type Messages = Readonly<Record<string, string>>;\n\ntype MessageFiles = Record<string, () => Promise<{ default: Messages }>>;\n\nexport const ENGLISH_MESSAGES: Messages = englishMessages;\n\nconst MESSAGE_FILES: MessageFiles = import.meta.glob<{ default: Messages }>([\n '../assets/locale/messages_*.json',\n '!../assets/locale/messages_*.dev.json',\n '!../assets/locale/messages_en.json',\n]);\n\n// Behind import.meta.env.DEV, so the production build of the consumer app leaves them out.\nconst DEV_MESSAGE_FILES: MessageFiles = import.meta.env?.DEV\n ? import.meta.glob<{ default: Messages }>([\n '../assets/locale/messages_*.dev.json',\n '!../assets/locale/messages_en.dev.json',\n ])\n : {};\n\nconst loadedMessages = new Map<string, Promise<Messages>>();\n\nconst messagesFile = (language: string) => `../assets/locale/messages_${language}.json`;\n\nconst devMessagesFile = (language: string) => `../assets/locale/messages_${language}.dev.json`;\n\nexport function messageFileLanguages(language: string): string[] {\n const [baseLanguage] = language.split(/[-_]/);\n\n return baseLanguage && baseLanguage !== language ? [language, baseLanguage] : [language];\n}\n\nconst loadFile = async (load: MessageFiles[string] | undefined): Promise<Messages> =>\n load ? (await load()).default : {};\n\nexport function loadMessages(language: string): Promise<Messages> {\n const fileLanguage = messageFileLanguages(language).find(\n (candidate) =>\n MESSAGE_FILES[messagesFile(candidate)] || DEV_MESSAGE_FILES[devMessagesFile(candidate)],\n );\n\n if (!fileLanguage) {\n return Promise.resolve(ENGLISH_MESSAGES);\n }\n\n const loaded = loadedMessages.get(fileLanguage);\n\n if (loaded) {\n return loaded;\n }\n\n const loading = Promise.all([\n loadFile(MESSAGE_FILES[messagesFile(fileLanguage)]),\n loadFile(DEV_MESSAGE_FILES[devMessagesFile(fileLanguage)]),\n ]).then(\n ([messages, devMessages]) => ({ ...messages, ...devMessages }),\n () => {\n loadedMessages.delete(fileLanguage);\n\n return ENGLISH_MESSAGES;\n },\n );\n\n loadedMessages.set(fileLanguage, loading);\n\n return loading;\n}\n","import type { I18n, InitI18n } from '../types';\nimport { ENGLISH_MESSAGES, loadMessages } from './messages';\n\nexport type Translate = (key: string, values?: Record<string, number>) => string;\n\nconst translations = new WeakMap<InitI18n, Map<string, Promise<Translate>>>();\n\nconst initialized = (i18n: I18n) =>\n i18n.isInitialized\n ? Promise.resolve()\n : new Promise<void>((resolve) => {\n i18n.on('initialized', () => resolve());\n });\n\nasync function buildTranslate(initI18n: InitI18n, language: string): Promise<Translate> {\n const messages = await loadMessages(language);\n const i18n = initI18n({ locale: language, messages: { ...ENGLISH_MESSAGES, ...messages } });\n\n await initialized(i18n);\n\n if (!i18n.modules?.i18nFormat) {\n throw new Error(\n 'Pricing texts need an i18next instance with ICU messages, such as initI18n of @wix/fed-cli-i18next.',\n );\n }\n\n // Typed loosely in I18n, so the overloaded t of every i18next version matches it.\n const t = i18n.t.bind(i18n) as unknown as (\n key: string,\n values?: Record<string, number>,\n ) => unknown;\n\n return (key, values) => String(t(key, values));\n}\n\nexport function createTranslate(initI18n: InitI18n, language: string): Promise<Translate> {\n const languages = translations.get(initI18n) ?? new Map<string, Promise<Translate>>();\n\n translations.set(initI18n, languages);\n\n const existing = languages.get(language);\n\n if (existing) {\n return existing;\n }\n\n const building = buildTranslate(initI18n, language);\n\n languages.set(language, building);\n building.catch(() => languages.delete(language));\n\n return building;\n}\n","import type { plansV3 } from '@wix/pricing-plans';\nimport type { FormattedAdditionalFee } from '../types';\nimport { formatPrice } from './format-price';\nimport type { Translate } from './translate';\n\ntype PricingVariant = plansV3.PricingVariant;\n\nconst CYCLE_KEYS: Record<string, string> = {\n DAY: 'pp.period-recurrency.every-day-plural',\n WEEK: 'pp.period-recurrency.every-week-plural',\n MONTH: 'pp.period-recurrency.every-month-plural',\n YEAR: 'pp.period-recurrency.every-year-plural',\n};\n\nconst DURATION_KEYS: Record<string, string> = {\n DAY: 'pp.plan-validity.valid-for-days-v2',\n WEEK: 'pp.plan-validity.valid-for-weeks-v2',\n MONTH: 'pp.plan-validity.valid-for-months-v2',\n YEAR: 'pp.plan-validity.valid-for-years-v2',\n};\n\nconst isUnlimitedVariant = (variant: PricingVariant) =>\n variant.billingTerms?.endType === 'UNTIL_CANCELLED';\n\nconst getCycleDuration = (variant: PricingVariant) =>\n parseInt(variant.billingTerms?.billingCycle?.count ?? '1', 10);\n\nfunction isRecurringVariant(variant: PricingVariant) {\n const terms = variant.billingTerms;\n\n if (!terms?.billingCycle) {\n return false;\n }\n\n if (terms.endType === 'CYCLES_COMPLETED') {\n return terms.cyclesCompletedDetails?.billingCycleCount !== '1';\n }\n\n return true;\n}\n\nexport const hasFreeTrialDays = (variant: PricingVariant) => Boolean(variant.freeTrialDays);\n\nexport function getCycleLabel(variant: PricingVariant, t: Translate): string {\n const key = CYCLE_KEYS[variant.billingTerms?.billingCycle?.period ?? ''];\n\n if (!isRecurringVariant(variant) || !key) {\n return '';\n }\n\n return t(key, { count: getCycleDuration(variant) });\n}\n\nexport function getDurationLabel(variant: PricingVariant, t: Translate): string {\n if (isUnlimitedVariant(variant)) {\n return t('pp.plan-validity.valid-unlimited');\n }\n\n const key = DURATION_KEYS[variant.billingTerms?.billingCycle?.period ?? ''];\n const cycleDuration = getCycleDuration(variant);\n const cycleCount = parseInt(\n variant.billingTerms?.cyclesCompletedDetails?.billingCycleCount ?? '',\n 10,\n );\n\n if (!key || !cycleDuration || !cycleCount) {\n return '';\n }\n\n return t(key, { amount: cycleDuration * cycleCount });\n}\n\nexport function getFreeTrialLabel(variant: PricingVariant, t: Translate): string {\n if (!variant.freeTrialDays) {\n return '';\n }\n\n return t(isUnlimitedVariant(variant) ? 'pp.free-trial-days-unlimited' : 'pp.free-trial-days', {\n count: variant.freeTrialDays,\n });\n}\n\nexport function getAdditionalFees(\n variant: PricingVariant,\n currency: string | undefined,\n locale: string,\n trimTrailingZeroes?: boolean,\n): FormattedAdditionalFee[] {\n return (variant.fees ?? [])\n .filter((fee) => Boolean(fee.fixedAmountOptions?.amount))\n .map((fee) => ({\n name: fee.name ?? '',\n amount: formatPrice(fee.fixedAmountOptions?.amount, currency, locale, trimTrailingZeroes),\n }));\n}\n","import type { plansV3 } from '@wix/pricing-plans';\nimport type {\n GetTranslatedPricingDetailsOptions,\n PricingDetailsApi,\n PricingDetailsOptions,\n TranslatedPricingDetails,\n} from '../types';\nimport { formatPrice } from './format-price';\nimport { createTranslate } from './translate';\nimport type { Translate } from './translate';\nimport {\n getAdditionalFees,\n getCycleLabel,\n getDurationLabel,\n getFreeTrialLabel,\n hasFreeTrialDays,\n} from './variant-labels';\n\nconst EMPTY_PRICING_DETAILS: TranslatedPricingDetails = {\n price: '',\n cycle: '',\n duration: '',\n freeTrial: '',\n additionalFees: [],\n};\n\nfunction getVariantPricingDetails(\n plan: plansV3.Plan,\n variant: plansV3.PricingVariant,\n t: Translate,\n locale: string,\n options?: GetTranslatedPricingDetailsOptions,\n): TranslatedPricingDetails {\n const amount = plan.currency ? variant.pricingStrategies?.[0]?.flatRate?.amount : undefined;\n\n return {\n price: formatPrice(amount, plan.currency, locale, options?.trimTrailingZeroes),\n cycle: getCycleLabel(variant, t),\n duration: getDurationLabel(variant, t),\n freeTrial: getFreeTrialLabel(variant, t),\n additionalFees: getAdditionalFees(variant, plan.currency, locale, options?.trimTrailingZeroes),\n };\n}\n\nfunction getPlanPricingDetails(\n plan: plansV3.Plan,\n t: Translate,\n locale: string,\n options?: GetTranslatedPricingDetailsOptions,\n): TranslatedPricingDetails {\n const variants = plan.pricingVariants ?? [];\n const [firstVariant] = variants;\n\n if (!firstVariant) {\n return EMPTY_PRICING_DETAILS;\n }\n\n const firstVariantDetails = getVariantPricingDetails(plan, firstVariant, t, locale, options);\n\n if (variants.length === 1) {\n return firstVariantDetails;\n }\n\n // A free trial can be set per variant through the API, so the plan shows one when any variant has it.\n const freeTrialVariant = variants.find(hasFreeTrialDays);\n\n return {\n ...firstVariantDetails,\n price: t('pp.pricing-details.multiple-prices'),\n cycle: '',\n freeTrial: freeTrialVariant ? getFreeTrialLabel(freeTrialVariant, t) : '',\n };\n}\n\nexport function createPricingDetailsApi({\n initI18n,\n language,\n}: PricingDetailsOptions): PricingDetailsApi {\n return {\n getTranslatedPricingDetails: async (plan, options) =>\n getPlanPricingDetails(plan, await createTranslate(initI18n, language), language, options),\n getTranslatedPricingDetailsPerVariant: async (plan, options) => {\n const t = await createTranslate(initI18n, language);\n\n return (plan.pricingVariants ?? []).map((variant) => {\n const [categoryId] = variant.categoryIds ?? [];\n\n return {\n ...getVariantPricingDetails(plan, variant, t, language, options),\n pricingVariantId: variant._id ?? '',\n categoryName: categoryId ? options?.variantCategoryNameById?.[categoryId] : undefined,\n };\n });\n },\n };\n}\n","import { useMemo } from 'react';\nimport { createPricingDetailsApi } from './pricing-details/pricing-details';\nimport type { PricingDetailsApi, PricingDetailsOptions } from './types';\n\n/**\n * Pricing texts of Pricing Plans plans, like the legacy `getTranslatedPricingDetails` and\n * `getTranslatedPricingDetailsPerVariant`.\n *\n * The texts are translated with an i18next instance the hook builds with the app's `initI18n`, so\n * the i18next runtime stays with the app and the app's own instance isn't changed. Its instances\n * have to format ICU messages, like the ones `initI18n` of `@wix/fed-cli-i18next` creates.\n *\n * The texts depend only on the plan, so the hook works with both apps and on sites without Pricing\n * Plans, and needs no `serviceDependencies`.\n *\n * @param options The app's i18next factory, and the language of the texts.\n *\n * @example\n * const { getTranslatedPricingDetails } = usePricingPlansPricingDetails({\n * initI18n,\n * language: essentialsI18n.getLanguage(),\n * });\n *\n * const { price, cycle } = await getTranslatedPricingDetails(plan);\n */\nexport function usePricingPlansPricingDetails({\n initI18n,\n language,\n}: PricingDetailsOptions): PricingDetailsApi {\n return useMemo(() => createPricingDetailsApi({ initI18n, language }), [initI18n, language]);\n}\n","export const PRICING_PLANS_APP_ID = '1522827f-c56c-a5c9-2ac9-00f9e6ae12d3';\n","import { cartV2 } from '@wix/ecom';\nimport { plansV3 } from '@wix/pricing-plans';\nimport { PRICING_PLANS_APP_ID } from '../constants';\n\nexport async function loadPublicPlan(planId: string): Promise<plansV3.Plan | undefined> {\n const { items } = await plansV3\n .queryPlans()\n .eq('_id', planId)\n .eq('visibility', 'PUBLIC')\n .limit(1)\n .find();\n\n return items[0];\n}\n\nexport async function createCheckoutUrl(\n planId: string,\n pricingVariantId: string,\n membersOnly = false,\n): Promise<string> {\n const cart = await cartV2.createCart({\n cart: { source: { channelType: 'WEB' } },\n catalogItems: [\n {\n quantity: 1,\n catalogReference: {\n appId: PRICING_PLANS_APP_ID,\n catalogItemId: planId,\n options: { type: 'PLAN', planOptions: { pricingVariantId, membersOnly } },\n },\n },\n ],\n });\n\n if (!cart?._id) {\n throw new Error('Cart creation did not return an ID');\n }\n\n const { checkoutUrl } = await cartV2.getCheckoutUrl(cart._id);\n\n if (!checkoutUrl) {\n throw new Error('Checkout URL was not returned');\n }\n\n return checkoutUrl;\n}\n","import type { plansV3 } from '@wix/pricing-plans';\n\nexport type PlanPurchase = {\n pricingVariantId: string;\n requiresCustomization: boolean;\n};\n\nexport function planPurchase(\n plan: plansV3.Plan | undefined,\n pricingVariantId?: string,\n): PlanPurchase | undefined {\n if (!plan) return;\n\n const variants = (plan.pricingVariants ?? []).filter(\n (variant): variant is plansV3.PricingVariant & { _id: string } =>\n Boolean(variant._id) && variant.visible !== false,\n );\n // Like the legacy app, a hidden or unknown pricingVariantId falls back to the first visible variant.\n const variant = variants.find(({ _id }) => _id === pricingVariantId) ?? variants[0];\n\n if (!variant) return;\n\n const requiresStartDate = plan.startDateSettings\n ? plan.startDateSettings.type === 'DATE_RANGE'\n : variant.billingTerms?.startType === 'CUSTOM';\n\n return {\n pricingVariantId: variant._id,\n requiresCustomization: Boolean(plan.formId) || requiresStartDate,\n };\n}\n","export function siteHref(siteUrl: string, path: string): string {\n return `${siteUrl.replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n}\n\nexport function withQuery(url: string, query: URLSearchParams): string {\n const search = query.toString();\n\n return search ? `${url}?${search}` : url;\n}\n\nexport function queryOf(entries: Array<[string, string | undefined]>): URLSearchParams {\n return new URLSearchParams(\n entries.filter((entry): entry is [string, string] => Boolean(entry[1])),\n );\n}\n\nexport function encodePricingVariants(pricingVariantsByPlanId: Record<string, string[]>): string {\n return Object.entries(pricingVariantsByPlanId)\n .filter(([, pricingVariantIds]) => pricingVariantIds.length)\n .map(([planId, pricingVariantIds]) => [planId, ...pricingVariantIds].join(':'))\n .join(',');\n}\n","import { PRICING_PLANS_APP_ID } from './constants';\nimport type { Page, Pages, UrlContext } from './types';\nimport { siteHref } from './url';\n\nexport function findAppPage(pages: Pages, appPageId: string): Page | undefined {\n const candidates = Object.values(pages).filter(\n (page) => !page.popup && page.appPageId === appPageId,\n );\n const unowned = candidates.filter((page) => !page.appDefinitionId);\n\n return (\n candidates.find((page) => page.appDefinitionId === PRICING_PLANS_APP_ID) ??\n (unowned.length === 1 ? unowned[0] : undefined)\n );\n}\n\nexport function appPageUrl(context: UrlContext, appPageId: string): string | undefined {\n const path = findAppPage(context.pages, appPageId)\n ? context.sectionUrl(PRICING_PLANS_APP_ID, appPageId)\n : undefined;\n\n return path ? siteHref(context.siteUrl, path) : undefined;\n}\n","import type { NavigationPolicy, UrlContext } from '../types';\nimport { siteHref, withQuery } from '../url';\n\nexport function returnUrl(\n { pages, siteUrl, sectionUrl }: UrlContext,\n navigation: NavigationPolicy | undefined,\n): string | undefined {\n if (!navigation) return;\n\n switch (navigation.type) {\n case 'url':\n return onSiteUrl(siteUrl, navigation.url);\n case 'page': {\n const page = pages[navigation.pageId];\n\n return page && siteHref(siteUrl, page.path);\n }\n case 'section': {\n const { appDefinitionId, sectionId, state, queryParams, discardRouterPageSuffix } =\n navigation.options;\n const path = sectionUrl(appDefinitionId, sectionId, discardRouterPageSuffix);\n\n if (!path) return;\n\n const url = siteHref(siteUrl, state ? `${path.replace(/\\/$/, '')}/${state}` : path);\n\n return queryParams\n ? withQuery(url, new URLSearchParams({ appSectionParams: JSON.stringify(queryParams) }))\n : url;\n }\n }\n}\n\n// Matches the targets the Thank You page accepts as `returnUrl`; it sends any other to the homepage.\nfunction onSiteUrl(siteUrl: string, url: string): string | undefined {\n try {\n const site = new URL(siteUrl.endsWith('/') ? siteUrl : `${siteUrl}/`);\n const target = new URL(url.startsWith('/') ? siteHref(siteUrl, url) : url, site);\n const basePath = site.pathname.replace(/\\/$/, '');\n\n if (\n target.origin === site.origin &&\n !target.username &&\n !target.password &&\n (target.protocol === 'https:' || target.protocol === 'http:') &&\n (target.pathname === basePath || target.pathname.startsWith(`${basePath}/`))\n ) {\n return target.href;\n }\n } catch {\n return;\n }\n}\n","import type { CheckoutOptions, UrlContext } from '../types';\nimport { returnUrl } from './return-url';\n\nexport function checkoutQueryEntries(\n context: UrlContext,\n checkout: CheckoutOptions = {},\n): Array<[string, string | undefined]> {\n return [\n ['minStartDate', checkout.minStartDate],\n ['maxStartDate', checkout.maxStartDate],\n ['returnUrl', returnUrl(context, checkout.thankYouPage?.navigation)],\n ];\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPlanPageOptions, UrlContext } from '../types';\nimport { queryOf, withQuery } from '../url';\nimport { checkoutQueryEntries } from './checkout-query';\n\nexport const BUILDER_PLAN_PAGE_ID = 'plan-customization-page';\n\nexport function builderPlanPageUrl(\n context: UrlContext,\n { planId, pricingVariantId, ...checkout }: NavigateToPlanPageOptions,\n): string | undefined {\n const url = appPageUrl(context, BUILDER_PLAN_PAGE_ID);\n\n if (!url) return;\n\n return withQuery(\n `${url.replace(/\\/+$/, '')}/${encodeURIComponent(planId)}`,\n queryOf([['pricingVariantId', pricingVariantId], ...checkoutQueryEntries(context, checkout)]),\n );\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPricingPageOptions, UrlContext } from '../types';\nimport { encodePricingVariants, queryOf, withQuery } from '../url';\nimport { checkoutQueryEntries } from './checkout-query';\n\nexport const BUILDER_PRICING_PAGE_ID = 'plans-page';\n\nexport function builderPricingPageUrl(\n context: UrlContext,\n { planIds, pricingVariantsByPlanId, checkout }: NavigateToPricingPageOptions,\n): string | undefined {\n const url = appPageUrl(context, BUILDER_PRICING_PAGE_ID);\n\n if (!url) return;\n\n const pricingVariants = pricingVariantsByPlanId && encodePricingVariants(pricingVariantsByPlanId);\n\n return withQuery(\n url,\n queryOf([\n pricingVariants ? ['pricingVariants', pricingVariants] : ['planIds', planIds?.join(',')],\n ...checkoutQueryEntries(context, checkout),\n ]),\n );\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigationPolicy, UrlContext } from '../types';\nimport { returnUrl } from './return-url';\n\nexport const BUILDER_THANK_YOU_PAGE_ID = 'thank-you-page';\n\nexport function withSuccessUrl(\n context: UrlContext,\n checkoutUrl: string,\n navigation: NavigationPolicy | undefined,\n): string {\n const thankYouPage = appPageUrl(context, BUILDER_THANK_YOU_PAGE_ID);\n const target = returnUrl(context, navigation);\n\n if (!thankYouPage || !target) {\n return checkoutUrl;\n }\n\n const successUrl = new URL(thankYouPage);\n const url = new URL(checkoutUrl);\n\n successUrl.searchParams.set('returnUrl', target);\n url.searchParams.set('successUrl', successUrl.href);\n\n return url.href;\n}\n","import type { SiteApiContext } from '../types';\n\nexport async function navigateToPage(\n navigateTo: SiteApiContext['navigateTo'],\n href: string | undefined,\n pageName: string,\n): Promise<void> {\n if (!href) {\n throw new Error(`Cannot navigate to ${pageName}, because it is not available on the site.`);\n }\n\n if (!(await navigateTo(href))) {\n throw new Error(`Navigation to ${pageName} failed.`);\n }\n}\n\nexport async function getPageUrl(href: string | undefined, pageName: string): Promise<string> {\n if (!href) {\n throw new Error(`Cannot get ${pageName} URL, because it is not available on the site.`);\n }\n\n return href;\n}\n","import { createCheckoutUrl, loadPublicPlan } from '../builder/checkout';\nimport { planPurchase } from '../builder/plan-purchase';\nimport { builderPlanPageUrl } from '../builder/plan-page-url';\nimport { builderPricingPageUrl } from '../builder/pricing-page-url';\nimport { returnUrl } from '../builder/return-url';\nimport { withSuccessUrl } from '../builder/success-url';\nimport type { SiteApiContext, PricingPlansSiteApi } from '../types';\nimport { getPageUrl, navigateToPage } from './navigate-to-page';\n\nexport function createBuilderSiteApi({\n navigateTo,\n ...context\n}: SiteApiContext): PricingPlansSiteApi {\n return {\n navigateToPricingPage: (options = {}) =>\n navigateToPage(navigateTo, builderPricingPageUrl(context, options), 'pricing page'),\n getPricingPageUrl: (options = {}) =>\n getPageUrl(builderPricingPageUrl(context, options), 'pricing page'),\n navigateToPlanPage: async (options) => {\n const purchase = planPurchase(await loadPublicPlan(options.planId), options.pricingVariantId);\n\n if (!purchase) {\n throw new Error('Plan is not available for online purchase.');\n }\n\n if (purchase.requiresCustomization) {\n return navigateToPage(\n navigateTo,\n builderPlanPageUrl(context, { ...options, pricingVariantId: purchase.pricingVariantId }),\n 'plan page',\n );\n }\n\n const checkoutUrl = await createCheckoutUrl(\n options.planId,\n purchase.pricingVariantId,\n Boolean(returnUrl(context, options.thankYouPage?.navigation)),\n );\n\n return navigateToPage(\n navigateTo,\n withSuccessUrl(context, checkoutUrl, options.thankYouPage?.navigation),\n 'checkout',\n );\n },\n };\n}\n","import { findAppPage } from '../app-pages';\nimport type { Page, Pages } from '../types';\n\nexport const LEGACY_PRICING_PAGE_ID = 'membership_plan_picker_tpa';\n\nexport function findLegacyPricingPage(pages: Pages): Page | undefined {\n return findAppPage(pages, LEGACY_PRICING_PAGE_ID);\n}\n","import { appPageUrl } from '../app-pages';\nimport type { NavigateToPricingPageOptions, UrlContext } from '../types';\nimport { encodePricingVariants, queryOf, withQuery } from '../url';\nimport { LEGACY_PRICING_PAGE_ID } from './pages';\n\nexport function legacyPricingPageUrl(\n context: UrlContext,\n options: NavigateToPricingPageOptions,\n): string | undefined {\n const url = appPageUrl(context, LEGACY_PRICING_PAGE_ID);\n\n return url && withQuery(url, pricingPageQuery(options));\n}\n\nfunction pricingPageQuery({\n planIds,\n pricingVariantsByPlanId,\n title,\n subtitle,\n biOptions,\n checkout,\n}: NavigateToPricingPageOptions): URLSearchParams {\n const { content, navigation } = checkout?.thankYouPage ?? {};\n const pricingVariants = pricingVariantsByPlanId && encodePricingVariants(pricingVariantsByPlanId);\n\n return queryOf([\n ['destination', navigation?.type === 'url' ? navigation.url : undefined],\n ['page', navigation?.type === 'page' ? navigation.pageId : undefined],\n ['section', navigation?.type === 'section' ? encodeBase64Url(navigation.options) : undefined],\n ['referral', biOptions?.referralInfo],\n ['referralId', biOptions?.referralId],\n ['maxStartDate', checkout?.maxStartDate],\n ['minStartDate', checkout?.minStartDate],\n ['thankYouTitle', content?.title],\n ['thankYouMessage', content?.message],\n ['thankYouCTA', content?.cta],\n pricingVariants ? ['pricingVariants', pricingVariants] : ['planIds', planIds?.join(',')],\n ['title', title],\n ['subtitle', subtitle],\n ]);\n}\n\nfunction encodeBase64Url(input: unknown): string {\n const bytes = encodeURIComponent(JSON.stringify(input)).replace(/%[0-9A-F]{2}/g, (percent) =>\n String.fromCharCode(parseInt(percent.slice(1), 16)),\n );\n\n return btoa(bytes).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","import { legacyPricingPageUrl } from '../legacy/pricing-page-url';\nimport type { SiteApiContext, PricingPlansSiteApi } from '../types';\nimport { getPageUrl, navigateToPage } from './navigate-to-page';\n\nexport function createLegacyOoiSiteApi({\n navigateTo,\n callPublicApi,\n ...context\n}: SiteApiContext): PricingPlansSiteApi {\n return {\n navigateToPricingPage: (options = {}) =>\n navigateToPage(navigateTo, legacyPricingPageUrl(context, options), 'pricing page'),\n getPricingPageUrl: (options = {}) =>\n getPageUrl(legacyPricingPageUrl(context, options), 'pricing page'),\n navigateToPlanPage: async (options) => {\n await callPublicApi('navigateToPlanPage', [options]);\n },\n };\n}\n","import type { PricingPlansSiteApi } from '../types';\n\nconst notInstalled = () => Promise.reject(new Error('Pricing Plans is not installed on the site.'));\n\nexport function createNotInstalledSiteApi(): PricingPlansSiteApi {\n return {\n navigateToPricingPage: notInstalled,\n getPricingPageUrl: notInstalled,\n navigateToPlanPage: notInstalled,\n };\n}\n","import { createBuilderSiteApi } from './adapters/builder';\nimport { createLegacyOoiSiteApi } from './adapters/legacy-ooi';\nimport { createNotInstalledSiteApi } from './adapters/not-installed';\nimport { findAppPage } from './app-pages';\nimport { BUILDER_PLAN_PAGE_ID } from './builder/plan-page-url';\nimport { BUILDER_PRICING_PAGE_ID } from './builder/pricing-page-url';\nimport { BUILDER_THANK_YOU_PAGE_ID } from './builder/success-url';\nimport { PRICING_PLANS_APP_ID } from './constants';\nimport { findLegacyPricingPage } from './legacy/pages';\nimport type { SiteApiContext, PricingPlansSiteApi } from './types';\n\nconst BUILDER_PAGE_IDS = [BUILDER_PRICING_PAGE_ID, BUILDER_PLAN_PAGE_ID, BUILDER_THANK_YOU_PAGE_ID];\n\nexport function createSiteApi(context: SiteApiContext): PricingPlansSiteApi {\n if (findLegacyPricingPage(context.pages)) {\n return createLegacyOoiSiteApi(context);\n }\n\n if (\n Object.values(context.pages).some((page) => page.appDefinitionId === PRICING_PLANS_APP_ID) ||\n BUILDER_PAGE_IDS.some((appPageId) => findAppPage(context.pages, appPageId))\n ) {\n return createBuilderSiteApi(context);\n }\n\n return createNotInstalledSiteApi();\n}\n","import { defineService } from '@wix/services-definitions';\n\ntype PublicApiCaller = {\n callPublicApi(\n appDefinitionId: string,\n methodPath: string | string[],\n args?: unknown[],\n ): Promise<unknown>;\n};\n\nexport const PublicApiCallerDefinition = defineService<PublicApiCaller>(\n '@wix/site-service-public-api-caller',\n);\n","import { usePages } from '@wix/react-component-utils';\nimport { useGetService, useService } from '@wix/services-manager-react';\nimport { RouterDefinition } from '@wix/site-service-router/definition';\nimport { UrlDefinition } from '@wix/site-service-url/definition';\nimport { useMemo } from 'react';\nimport { PRICING_PLANS_APP_ID } from './constants';\nimport { createSiteApi } from './create-site-api';\nimport { PublicApiCallerDefinition } from './public-api-caller';\nimport type { PricingPlansSiteApi } from './types';\n\n/**\n * Navigation to Pricing Plans pages that works with both versions of the Pricing Plans app: the\n * legacy app (OOI) and the Builder app. The hook detects which one the site runs and uses its\n * pages, so the calls are the same for both.\n *\n * Calling the hook is safe on any site. When Pricing Plans isn't installed on the site, every method\n * it returns rejects with the error `Pricing Plans is not installed on the site.` and doesn't\n * navigate. The hook treats Pricing Plans as installed when the site has at least one Pricing Plans\n * page.\n *\n * Use it inside a site component or context provider, and list these services in the extension's\n * `serviceDependencies`: `@wix/site-service-pages`, `@wix/site-service-url`,\n * `@wix/site-service-router` and `@wix/site-service-public-api-caller`.\n *\n * @example\n * const { navigateToPlanPage } = usePricingPlansSiteApi();\n *\n * <button onClick={() => navigateToPlanPage({ planId })}>Buy plan</button>\n */\nexport function usePricingPlansSiteApi(): PricingPlansSiteApi {\n const pages = usePages();\n const url = useService(UrlDefinition);\n const getService = useGetService();\n\n return useMemo(\n () =>\n createSiteApi({\n pages,\n siteUrl: url.siteUrl,\n sectionUrl: (appDefinitionId, sectionId, discardRouterPageSuffix) =>\n url.appSectionRelativeUrl(appDefinitionId, sectionId, discardRouterPageSuffix),\n navigateTo: (href) => getService(RouterDefinition).navigateTo({ href }),\n callPublicApi: (methodPath, args) =>\n getService(PublicApiCallerDefinition).callPublicApi(\n PRICING_PLANS_APP_ID,\n methodPath,\n args,\n ),\n }),\n [pages, url, getService],\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/pricing-plans-site-api",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
]
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
|
-
"falconPackageHash": "
|
|
69
|
+
"falconPackageHash": "41b286bb03dba0afa07cac4b82f9c665b2b953909b37fb0b77c4caef"
|
|
70
70
|
}
|