@rechargeapps/storefront-client 2.7.1 → 2.9.0
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/cjs/api/auth.js +11 -2
- package/dist/cjs/api/auth.js.map +1 -1
- package/dist/cjs/api/bundleData.js +1 -1
- package/dist/cjs/api/order.js +3 -2
- package/dist/cjs/api/order.js.map +1 -1
- package/dist/cjs/utils/bundleData.js +2 -1
- package/dist/cjs/utils/bundleData.js.map +1 -1
- package/dist/cjs/utils/request.js +44 -33
- package/dist/cjs/utils/request.js.map +1 -1
- package/dist/esm/api/auth.js +11 -2
- package/dist/esm/api/auth.js.map +1 -1
- package/dist/esm/api/bundleData.js +1 -1
- package/dist/esm/api/order.js +3 -2
- package/dist/esm/api/order.js.map +1 -1
- package/dist/esm/utils/bundleData.js +2 -1
- package/dist/esm/utils/bundleData.js.map +1 -1
- package/dist/esm/utils/request.js +44 -33
- package/dist/esm/utils/request.js.map +1 -1
- package/dist/index.d.ts +1534 -1515
- package/dist/umd/recharge-client.min.js +2 -2
- package/package.json +1 -1
|
@@ -154,7 +154,8 @@ function mapOnlineStoreToPublicBundleData(bundleData) {
|
|
|
154
154
|
show_product_variants: bundleSettings.show_product_variants,
|
|
155
155
|
product_details_modal_enabled: bundleSettings.product_details_modal_enabled,
|
|
156
156
|
show_variants_as_individual_products: bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,
|
|
157
|
-
post_add_to_cart_behavior: bundleSettings.addToCartBehavior
|
|
157
|
+
post_add_to_cart_behavior: bundleSettings.addToCartBehavior,
|
|
158
|
+
cross_sells_default_purchase_type: bundleData.bundle_settings.layout_settings.crossSells.defaultPurchaseType ?? null
|
|
158
159
|
},
|
|
159
160
|
variants: bundleData.bundle_settings.variants.filter(({ enabled }) => enabled).map((item, index) => {
|
|
160
161
|
const variant = variantsLookup[String(item.external_variant_id)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n cross_sells_default_purchase_type:\n bundleData.bundle_settings.layout_settings.crossSells.defaultPurchaseType ?? null,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,31 @@ function stringifyQuery(obj) {
|
|
|
9
9
|
return Object.entries(obj).filter(([, value]) => value !== void 0 && !(Array.isArray(value) && value.length === 0)).map(([key, value]) => `${key}=${Array.isArray(value) ? value.map(encode).join(",") : encode(value)}`).join("&");
|
|
10
10
|
}
|
|
11
11
|
const RESERVED_QUERY_KEYS = /* @__PURE__ */ new Set(["shop_url"]);
|
|
12
|
+
const sessionRetryStates = /* @__PURE__ */ new WeakMap();
|
|
13
|
+
let sessionRetryGeneration = 0;
|
|
14
|
+
function getSessionRetryState(retryFn) {
|
|
15
|
+
let state = sessionRetryStates.get(retryFn);
|
|
16
|
+
if (!state) {
|
|
17
|
+
state = {};
|
|
18
|
+
sessionRetryStates.set(retryFn, state);
|
|
19
|
+
}
|
|
20
|
+
return state;
|
|
21
|
+
}
|
|
22
|
+
function getRetrySession(retryFn, failedToken, sentAtGeneration) {
|
|
23
|
+
const state = getSessionRetryState(retryFn);
|
|
24
|
+
if (state.inFlight) return state.inFlight;
|
|
25
|
+
if (state.latest && state.latest.generation > sentAtGeneration) return Promise.resolve(state.latest.session);
|
|
26
|
+
state.inFlight = retryFn().then((session) => {
|
|
27
|
+
if (session && session.apiToken !== failedToken) {
|
|
28
|
+
sessionRetryGeneration += 1;
|
|
29
|
+
state.latest = { session, generation: sessionRetryGeneration };
|
|
30
|
+
}
|
|
31
|
+
return session;
|
|
32
|
+
}).finally(() => {
|
|
33
|
+
state.inFlight = void 0;
|
|
34
|
+
});
|
|
35
|
+
return state.inFlight;
|
|
36
|
+
}
|
|
12
37
|
function getInternalSession(session, fnName) {
|
|
13
38
|
return {
|
|
14
39
|
...session,
|
|
@@ -37,6 +62,7 @@ async function rechargeApiRequest(method, url, { id, query, data, headers } = {}
|
|
|
37
62
|
if (!token) {
|
|
38
63
|
throw new Error("No API token defined on session.");
|
|
39
64
|
}
|
|
65
|
+
const sentAtGeneration = sessionRetryGeneration;
|
|
40
66
|
const rechargeBaseUrl = RECHARGE_API_URL(environment, environmentUri);
|
|
41
67
|
const reqHeaders = {
|
|
42
68
|
"X-Recharge-Access-Token": token,
|
|
@@ -44,7 +70,7 @@ async function rechargeApiRequest(method, url, { id, query, data, headers } = {}
|
|
|
44
70
|
"X-Recharge-Sdk-Fn": session.internalFnCall,
|
|
45
71
|
...appName ? { "X-Recharge-Sdk-App-Name": appName } : {},
|
|
46
72
|
...appVersion ? { "X-Recharge-Sdk-App-Version": appVersion } : {},
|
|
47
|
-
"X-Recharge-Sdk-Version": "2.
|
|
73
|
+
"X-Recharge-Sdk-Version": "2.9.0",
|
|
48
74
|
"X-Request-Id": session.internalRequestId,
|
|
49
75
|
...session.tmp_fn_identifier ? { "X-Recharge-Sdk-Fn-Identifier": session.tmp_fn_identifier } : {},
|
|
50
76
|
...headers ? headers : {}
|
|
@@ -58,38 +84,23 @@ async function rechargeApiRequest(method, url, { id, query, data, headers } = {}
|
|
|
58
84
|
try {
|
|
59
85
|
return await request(method, `${rechargeBaseUrl}${url}`, { id, query: localQuery, data, headers: reqHeaders });
|
|
60
86
|
} catch (error) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (session2) {
|
|
79
|
-
return request(method, `${rechargeBaseUrl}${url}`, {
|
|
80
|
-
id,
|
|
81
|
-
query: localQuery,
|
|
82
|
-
data,
|
|
83
|
-
headers: {
|
|
84
|
-
...reqHeaders,
|
|
85
|
-
"X-Recharge-Access-Token": session2.apiToken
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
throw error;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
throw error;
|
|
87
|
+
const retryFnsByStatus = {
|
|
88
|
+
401: loginRetryFn,
|
|
89
|
+
423: __unstable_twoFactorRetryFn
|
|
90
|
+
};
|
|
91
|
+
const retryFn = error instanceof RechargeRequestError && error.status ? retryFnsByStatus[error.status] : void 0;
|
|
92
|
+
if (!retryFn) throw error;
|
|
93
|
+
const retrySession = await getRetrySession(retryFn, token, sentAtGeneration);
|
|
94
|
+
if (!retrySession) throw error;
|
|
95
|
+
return request(method, `${rechargeBaseUrl}${url}`, {
|
|
96
|
+
id,
|
|
97
|
+
query: localQuery,
|
|
98
|
+
data,
|
|
99
|
+
headers: {
|
|
100
|
+
...reqHeaders,
|
|
101
|
+
"X-Recharge-Access-Token": retrySession.apiToken
|
|
102
|
+
}
|
|
103
|
+
});
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
106
|
async function shopifyAppProxyRequest(method, url, requestOptions = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sources":["../../../src/utils/request.ts"],"sourcesContent":["import { nanoid } from './id';\n\nimport { Method, RequestHeaders, RequestOptions, InternalSession, Session } from '../types';\nimport { getOptions } from './options';\nimport { RECHARGE_API_URL, RECHARGE_CDN_URL, SHOPIFY_APP_PROXY_URL } from '../constants/api';\nimport { RechargeRequestError } from './error';\nimport { encodePathSegment } from './url';\n\n/**\n * Converts a query object into a URL-encoded query string using the following rules:\n * - Arrays are serialized as comma-separated values: `a=1,2` (not `a[0]=1&a[1]=2`)\n * - Only the values are URL-encoded; keys are not encoded\n * - Properties with `undefined` values or empty arrays are omitted from the result\n *\n * Reference: qs\n */\nfunction stringifyQuery(obj: Record<string, unknown>): string {\n const encode = (value: unknown) => encodeURIComponent(value === null ? '' : String(value));\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined && !(Array.isArray(value) && value.length === 0))\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.map(encode).join(',') : encode(value)}`)\n .join('&');\n}\n\nconst RESERVED_QUERY_KEYS = new Set(['shop_url']);\n\n/** @internal */\nexport function getInternalSession(session: Session | InternalSession, fnName: string): InternalSession {\n return {\n ...session,\n internalFnCall: (session as InternalSession).internalFnCall ?? fnName,\n internalRequestId: (session as InternalSession).internalRequestId ?? nanoid(),\n };\n}\n\nexport async function cdnRequest<T>(method: Method, url: string, requestOptions: RequestOptions = {}): Promise<T> {\n const opts = getOptions();\n return request(method, `${RECHARGE_CDN_URL(opts.environment)}/store/${opts.storeIdentifier}${url}`, requestOptions);\n}\n\nexport async function rechargeApiRequest<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {},\n session: InternalSession\n): Promise<T> {\n const {\n environment,\n environmentUri,\n storeIdentifier,\n loginRetryFn,\n __unstable_twoFactorRetryFn,\n appName,\n appVersion,\n } = getOptions();\n if (!storeIdentifier) {\n throw new Error('InitRecharge has not been called and/or no store identifier has been defined.');\n }\n const token = session.apiToken;\n if (!token) {\n throw new Error('No API token defined on session.');\n }\n const rechargeBaseUrl = RECHARGE_API_URL(environment, environmentUri);\n const reqHeaders: RequestHeaders = {\n 'X-Recharge-Access-Token': token,\n 'X-Recharge-Version': '2021-11',\n 'X-Recharge-Sdk-Fn': session.internalFnCall,\n ...(appName ? { 'X-Recharge-Sdk-App-Name': appName } : {}),\n ...(appVersion ? { 'X-Recharge-Sdk-App-Version': appVersion } : {}),\n 'X-Recharge-Sdk-Version': '__SDK_VERSION__',\n 'X-Request-Id': session.internalRequestId,\n ...(session.tmp_fn_identifier ? { 'X-Recharge-Sdk-Fn-Identifier': session.tmp_fn_identifier } : {}),\n ...(headers ? headers : {}),\n };\n\n const callerQuery = query as Record<string, unknown> | undefined;\n const sanitizedCallerQuery = callerQuery\n ? Object.fromEntries(Object.entries(callerQuery).filter(([k]) => !RESERVED_QUERY_KEYS.has(k)))\n : undefined;\n\n const localQuery = {\n ...sanitizedCallerQuery,\n shop_url: storeIdentifier,\n };\n\n try {\n // await to catch any errors\n return await request<T>(method, `${rechargeBaseUrl}${url}`, { id, query: localQuery, data, headers: reqHeaders });\n } catch (error: unknown) {\n if (loginRetryFn && error instanceof RechargeRequestError && error.status === 401) {\n // call loginRetryFn and retry request on 401\n return loginRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n } else if (__unstable_twoFactorRetryFn && error instanceof RechargeRequestError && error.status === 423) {\n // trigger two-factor authentication flow and retry request on 423\n return __unstable_twoFactorRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n }\n throw error;\n }\n}\n\nexport async function shopifyAppProxyRequest<T>(\n method: Method,\n url: string,\n requestOptions: RequestOptions = {}\n): Promise<T> {\n return request(method, `${SHOPIFY_APP_PROXY_URL}${url}`, requestOptions);\n}\n\nexport async function request<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {}\n): Promise<T> {\n let reqUrl = url.trim();\n\n if (id) {\n // Encode the id as a single opaque path segment. Without this, an id\n // containing `../` or `?` could traverse to a different API route or\n // smuggle query params (H1-3884884 / SEC-4002).\n reqUrl = [reqUrl, encodePathSegment(id)].join('/');\n }\n\n if (query) {\n let exQuery;\n [reqUrl, exQuery] = reqUrl.split('?');\n const fullQuery = [exQuery, stringifyQuery(query as Record<string, unknown>)].join('&').replace(/^&/, '');\n reqUrl = `${reqUrl}${fullQuery ? `?${fullQuery}` : ''}`;\n }\n\n let reqBody;\n if (data && method !== 'get') {\n reqBody = JSON.stringify(data);\n }\n\n const reqHeaders: RequestHeaders = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Recharge-App': 'storefront-client',\n ...(headers ? headers : {}),\n };\n\n const response = await fetch(reqUrl, {\n method,\n headers: reqHeaders,\n body: reqBody,\n });\n\n let result;\n try {\n result = await response.json();\n } catch (e) {\n // If we get here, it means we were a no content response.\n }\n\n if (!response.ok) {\n if (response.status === 502 || response.status === 504) {\n throw new RechargeRequestError('A gateway error occurred while making the request', response.status);\n } else if (result && result.error) {\n throw new RechargeRequestError(result.error, response.status);\n } else if (result && result.errors) {\n throw new RechargeRequestError(JSON.stringify(result.errors), response.status);\n } else {\n throw new RechargeRequestError('A connection error occurred while making the request');\n }\n }\n\n return result as T;\n}\n"],"names":["session"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"request.js","sources":["../../../src/utils/request.ts"],"sourcesContent":["import { nanoid } from './id';\n\nimport { Method, RequestHeaders, RequestOptions, InternalSession, Session } from '../types';\nimport { getOptions } from './options';\nimport { RECHARGE_API_URL, RECHARGE_CDN_URL, SHOPIFY_APP_PROXY_URL } from '../constants/api';\nimport { RechargeRequestError } from './error';\nimport { encodePathSegment } from './url';\n\n/**\n * Converts a query object into a URL-encoded query string using the following rules:\n * - Arrays are serialized as comma-separated values: `a=1,2` (not `a[0]=1&a[1]=2`)\n * - Only the values are URL-encoded; keys are not encoded\n * - Properties with `undefined` values or empty arrays are omitted from the result\n *\n * Reference: qs\n */\nfunction stringifyQuery(obj: Record<string, unknown>): string {\n const encode = (value: unknown) => encodeURIComponent(value === null ? '' : String(value));\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined && !(Array.isArray(value) && value.length === 0))\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.map(encode).join(',') : encode(value)}`)\n .join('&');\n}\n\nconst RESERVED_QUERY_KEYS = new Set(['shop_url']);\n\ntype SessionRetryFn = () => Promise<Session | undefined>;\n\ninterface SessionRetryState {\n inFlight?: Promise<Session | undefined>;\n latest?: { session: Session; generation: number };\n}\n\nconst sessionRetryStates = new WeakMap<SessionRetryFn, SessionRetryState>();\nlet sessionRetryGeneration = 0;\n\nfunction getSessionRetryState(retryFn: SessionRetryFn): SessionRetryState {\n let state = sessionRetryStates.get(retryFn);\n if (!state) {\n state = {};\n sessionRetryStates.set(retryFn, state);\n }\n return state;\n}\n\n/**\n * Gets a fresh session for a failed request. Concurrent failures share one `retryFn` call. A request sent before an\n * earlier call returned a new session retries with that session instead of calling `retryFn` again; a request sent\n * after it always calls `retryFn`, so the app still decides (for example, after the customer logs out).\n */\nfunction getRetrySession(\n retryFn: SessionRetryFn,\n failedToken: string,\n sentAtGeneration: number\n): Promise<Session | undefined> {\n const state = getSessionRetryState(retryFn);\n if (state.inFlight) return state.inFlight;\n if (state.latest && state.latest.generation > sentAtGeneration) return Promise.resolve(state.latest.session);\n\n state.inFlight = retryFn()\n .then(session => {\n if (session && session.apiToken !== failedToken) {\n sessionRetryGeneration += 1;\n state.latest = { session, generation: sessionRetryGeneration };\n }\n return session;\n })\n .finally(() => {\n state.inFlight = undefined;\n });\n return state.inFlight;\n}\n\n/** @internal */\nexport function getInternalSession(session: Session | InternalSession, fnName: string): InternalSession {\n return {\n ...session,\n internalFnCall: (session as InternalSession).internalFnCall ?? fnName,\n internalRequestId: (session as InternalSession).internalRequestId ?? nanoid(),\n };\n}\n\nexport async function cdnRequest<T>(method: Method, url: string, requestOptions: RequestOptions = {}): Promise<T> {\n const opts = getOptions();\n return request(method, `${RECHARGE_CDN_URL(opts.environment)}/store/${opts.storeIdentifier}${url}`, requestOptions);\n}\n\nexport async function rechargeApiRequest<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {},\n session: InternalSession\n): Promise<T> {\n const {\n environment,\n environmentUri,\n storeIdentifier,\n loginRetryFn,\n __unstable_twoFactorRetryFn,\n appName,\n appVersion,\n } = getOptions();\n if (!storeIdentifier) {\n throw new Error('InitRecharge has not been called and/or no store identifier has been defined.');\n }\n const token = session.apiToken;\n if (!token) {\n throw new Error('No API token defined on session.');\n }\n const sentAtGeneration = sessionRetryGeneration;\n const rechargeBaseUrl = RECHARGE_API_URL(environment, environmentUri);\n const reqHeaders: RequestHeaders = {\n 'X-Recharge-Access-Token': token,\n 'X-Recharge-Version': '2021-11',\n 'X-Recharge-Sdk-Fn': session.internalFnCall,\n ...(appName ? { 'X-Recharge-Sdk-App-Name': appName } : {}),\n ...(appVersion ? { 'X-Recharge-Sdk-App-Version': appVersion } : {}),\n 'X-Recharge-Sdk-Version': '__SDK_VERSION__',\n 'X-Request-Id': session.internalRequestId,\n ...(session.tmp_fn_identifier ? { 'X-Recharge-Sdk-Fn-Identifier': session.tmp_fn_identifier } : {}),\n ...(headers ? headers : {}),\n };\n\n const callerQuery = query as Record<string, unknown> | undefined;\n const sanitizedCallerQuery = callerQuery\n ? Object.fromEntries(Object.entries(callerQuery).filter(([k]) => !RESERVED_QUERY_KEYS.has(k)))\n : undefined;\n\n const localQuery = {\n ...sanitizedCallerQuery,\n shop_url: storeIdentifier,\n };\n\n try {\n // await to catch any errors\n return await request<T>(method, `${rechargeBaseUrl}${url}`, { id, query: localQuery, data, headers: reqHeaders });\n } catch (error: unknown) {\n const retryFnsByStatus: Partial<Record<number, SessionRetryFn>> = {\n 401: loginRetryFn,\n 423: __unstable_twoFactorRetryFn,\n };\n const retryFn = error instanceof RechargeRequestError && error.status ? retryFnsByStatus[error.status] : undefined;\n if (!retryFn) throw error;\n\n const retrySession = await getRetrySession(retryFn, token, sentAtGeneration);\n if (!retrySession) throw error;\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': retrySession.apiToken,\n },\n });\n }\n}\n\nexport async function shopifyAppProxyRequest<T>(\n method: Method,\n url: string,\n requestOptions: RequestOptions = {}\n): Promise<T> {\n return request(method, `${SHOPIFY_APP_PROXY_URL}${url}`, requestOptions);\n}\n\nexport async function request<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {}\n): Promise<T> {\n let reqUrl = url.trim();\n\n if (id) {\n // Encode the id as a single opaque path segment. Without this, an id\n // containing `../` or `?` could traverse to a different API route or\n // smuggle query params (H1-3884884 / SEC-4002).\n reqUrl = [reqUrl, encodePathSegment(id)].join('/');\n }\n\n if (query) {\n let exQuery;\n [reqUrl, exQuery] = reqUrl.split('?');\n const fullQuery = [exQuery, stringifyQuery(query as Record<string, unknown>)].join('&').replace(/^&/, '');\n reqUrl = `${reqUrl}${fullQuery ? `?${fullQuery}` : ''}`;\n }\n\n let reqBody;\n if (data && method !== 'get') {\n reqBody = JSON.stringify(data);\n }\n\n const reqHeaders: RequestHeaders = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Recharge-App': 'storefront-client',\n ...(headers ? headers : {}),\n };\n\n const response = await fetch(reqUrl, {\n method,\n headers: reqHeaders,\n body: reqBody,\n });\n\n let result;\n try {\n result = await response.json();\n } catch (e) {\n // If we get here, it means we were a no content response.\n }\n\n if (!response.ok) {\n if (response.status === 502 || response.status === 504) {\n throw new RechargeRequestError('A gateway error occurred while making the request', response.status);\n } else if (result && result.error) {\n throw new RechargeRequestError(result.error, response.status);\n } else if (result && result.errors) {\n throw new RechargeRequestError(JSON.stringify(result.errors), response.status);\n } else {\n throw new RechargeRequestError('A connection error occurred while making the request');\n }\n }\n\n return result as T;\n}\n"],"names":[],"mappings":"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"}
|