@replohq/sdk 0.1.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/LICENSE +11 -0
- package/_vendor/replo-utils/lib/crypto.d.ts +30 -0
- package/_vendor/replo-utils/lib/errors.d.ts +83 -0
- package/_vendor/replo-utils/lib/json.d.ts +6 -0
- package/_vendor/replo-utils/lib/json.mjs +43 -0
- package/_vendor/replo-utils/lib/misc.d.ts +145 -0
- package/_vendor/replo-utils/lib/object.d.ts +31 -0
- package/_vendor/schemas/errors.d.ts +459 -0
- package/_vendor/schemas/generated/consent.d.ts +55 -0
- package/_vendor/schemas/generated/errors.d.ts +61 -0
- package/_vendor/schemas/loaderKeys.d.ts +1 -0
- package/_vendor/schemas/loaderKeys.mjs +27 -0
- package/_vendor/schemas/money.d.ts +60 -0
- package/_vendor/schemas/money.mjs +2051 -0
- package/analytics/analytics-provider.d.ts +16 -0
- package/analytics/analytics-provider.js +113 -0
- package/analytics/analytics-provider.js.map +7 -0
- package/analytics/analytics-sink.d.ts +26 -0
- package/analytics/analytics-sink.js +1 -0
- package/analytics/analytics-sink.js.map +7 -0
- package/analytics/get-analytics-sinks.d.ts +27 -0
- package/analytics/get-analytics-sinks.js +52 -0
- package/analytics/get-analytics-sinks.js.map +7 -0
- package/analytics/hooks/use-product-viewed-analytics.d.ts +23 -0
- package/analytics/hooks/use-product-viewed-analytics.js +34 -0
- package/analytics/hooks/use-product-viewed-analytics.js.map +7 -0
- package/analytics/replo-first-party-pixel.d.ts +12 -0
- package/analytics/replo-first-party-pixel.js +31 -0
- package/analytics/replo-first-party-pixel.js.map +7 -0
- package/analytics/replo-pixel-script.d.ts +13 -0
- package/analytics/replo-pixel-script.js +30 -0
- package/analytics/replo-pixel-script.js.map +7 -0
- package/analytics/sinks/ga4-sink.d.ts +15 -0
- package/analytics/sinks/ga4-sink.js +60 -0
- package/analytics/sinks/ga4-sink.js.map +7 -0
- package/analytics/sinks/meta-sink.d.ts +14 -0
- package/analytics/sinks/meta-sink.js +56 -0
- package/analytics/sinks/meta-sink.js.map +7 -0
- package/analytics/sinks/pinterest-sink.d.ts +14 -0
- package/analytics/sinks/pinterest-sink.js +76 -0
- package/analytics/sinks/pinterest-sink.js.map +7 -0
- package/analytics/sinks/reddit-sink.d.ts +14 -0
- package/analytics/sinks/reddit-sink.js +80 -0
- package/analytics/sinks/reddit-sink.js.map +7 -0
- package/analytics/sinks/replo-sink.d.ts +14 -0
- package/analytics/sinks/replo-sink.js +57 -0
- package/analytics/sinks/replo-sink.js.map +7 -0
- package/analytics/sinks/snapchat-sink.d.ts +14 -0
- package/analytics/sinks/snapchat-sink.js +67 -0
- package/analytics/sinks/snapchat-sink.js.map +7 -0
- package/analytics/sinks/tiktok-sink.d.ts +14 -0
- package/analytics/sinks/tiktok-sink.js +79 -0
- package/analytics/sinks/tiktok-sink.js.map +7 -0
- package/analytics/sinks/window-sink.d.ts +18 -0
- package/analytics/sinks/window-sink.js +46 -0
- package/analytics/sinks/window-sink.js.map +7 -0
- package/analytics/utils/analytics-utils.d.ts +7 -0
- package/analytics/utils/analytics-utils.js +130 -0
- package/analytics/utils/analytics-utils.js.map +7 -0
- package/analytics/utils/navigation-tracker.d.ts +16 -0
- package/analytics/utils/navigation-tracker.js +44 -0
- package/analytics/utils/navigation-tracker.js.map +7 -0
- package/analytics/utils/shopify-funnel-gate.d.ts +8 -0
- package/analytics/utils/shopify-funnel-gate.js +22 -0
- package/analytics/utils/shopify-funnel-gate.js.map +7 -0
- package/cart/buy-now-action.d.ts +21 -0
- package/cart/buy-now-action.js +104 -0
- package/cart/buy-now-action.js.map +7 -0
- package/cart/cart-actions.d.ts +63 -0
- package/cart/cart-actions.js +90 -0
- package/cart/cart-actions.js.map +7 -0
- package/cart/cart-loader.d.ts +9 -0
- package/cart/cart-loader.js +11 -0
- package/cart/cart-loader.js.map +7 -0
- package/cart/cart-provider.d.ts +85 -0
- package/cart/cart-provider.js +372 -0
- package/cart/cart-provider.js.map +7 -0
- package/cart/cart-schema.d.ts +74 -0
- package/cart/cart-schema.js +69 -0
- package/cart/cart-schema.js.map +7 -0
- package/cart/cart-types.d.ts +132 -0
- package/cart/cart-types.js +8 -0
- package/cart/cart-types.js.map +7 -0
- package/cart/gateways/cart-constants.d.ts +1 -0
- package/cart/gateways/cart-constants.js +5 -0
- package/cart/gateways/cart-constants.js.map +7 -0
- package/cart/gateways/cart-gateway.d.ts +10 -0
- package/cart/gateways/cart-gateway.js +19 -0
- package/cart/gateways/cart-gateway.js.map +7 -0
- package/cart/gateways/cookie-cart-gateway.d.ts +28 -0
- package/cart/gateways/cookie-cart-gateway.js +109 -0
- package/cart/gateways/cookie-cart-gateway.js.map +7 -0
- package/cart/gateways/default-cart-gateway.d.ts +19 -0
- package/cart/gateways/default-cart-gateway.js +30 -0
- package/cart/gateways/default-cart-gateway.js.map +7 -0
- package/cart/gateways/resolver-cart-gateway.d.ts +2 -0
- package/cart/gateways/resolver-cart-gateway.js +109 -0
- package/cart/gateways/resolver-cart-gateway.js.map +7 -0
- package/cart/gateways/stripe-cart-gateway.d.ts +19 -0
- package/cart/gateways/stripe-cart-gateway.js +28 -0
- package/cart/gateways/stripe-cart-gateway.js.map +7 -0
- package/cart/hooks/use-add-to-cart.d.ts +63 -0
- package/cart/hooks/use-add-to-cart.js +124 -0
- package/cart/hooks/use-add-to-cart.js.map +7 -0
- package/cart/hooks/use-buy-now.d.ts +49 -0
- package/cart/hooks/use-buy-now.js +62 -0
- package/cart/hooks/use-buy-now.js.map +7 -0
- package/cart/utils/cart-utils.d.ts +43 -0
- package/cart/utils/cart-utils.js +46 -0
- package/cart/utils/cart-utils.js.map +7 -0
- package/cart/utils/cookie-cart-persistence.d.ts +55 -0
- package/cart/utils/cookie-cart-persistence.js +166 -0
- package/cart/utils/cookie-cart-persistence.js.map +7 -0
- package/cart/utils/variant-to-cart-line.d.ts +74 -0
- package/cart/utils/variant-to-cart-line.js +162 -0
- package/cart/utils/variant-to-cart-line.js.map +7 -0
- package/chunk-UJCSKKID.mjs +27 -0
- package/consent/consent-action.d.ts +9 -0
- package/consent/consent-action.js +25 -0
- package/consent/consent-action.js.map +7 -0
- package/consent/consent-actions.d.ts +28 -0
- package/consent/consent-actions.js +36 -0
- package/consent/consent-actions.js.map +7 -0
- package/consent/consent-store.d.ts +69 -0
- package/consent/consent-store.js +194 -0
- package/consent/consent-store.js.map +7 -0
- package/consent/cookie.d.ts +36 -0
- package/consent/cookie.js +82 -0
- package/consent/cookie.js.map +7 -0
- package/consent/replo-scripts.d.ts +23 -0
- package/consent/replo-scripts.js +102 -0
- package/consent/replo-scripts.js.map +7 -0
- package/consent/script-registration-store.d.ts +25 -0
- package/consent/script-registration-store.js +61 -0
- package/consent/script-registration-store.js.map +7 -0
- package/consent/script-snippets.d.ts +24 -0
- package/consent/script-snippets.js +122 -0
- package/consent/script-snippets.js.map +7 -0
- package/consent/types.d.ts +34 -0
- package/consent/types.js +1 -0
- package/consent/types.js.map +7 -0
- package/consent/window-api.d.ts +41 -0
- package/consent/window-api.js +73 -0
- package/consent/window-api.js.map +7 -0
- package/env.d.ts +9 -0
- package/env.js +42 -0
- package/env.js.map +7 -0
- package/gateways/canopy-api.d.ts +83 -0
- package/gateways/canopy-api.js +197 -0
- package/gateways/canopy-api.js.map +7 -0
- package/hooks/use-client-value.d.ts +10 -0
- package/hooks/use-client-value.js +12 -0
- package/hooks/use-client-value.js.map +7 -0
- package/hooks/use-formatted-price.d.ts +15 -0
- package/hooks/use-formatted-price.js +20 -0
- package/hooks/use-formatted-price.js.map +7 -0
- package/lib/canopy-error.d.ts +25 -0
- package/lib/canopy-error.js +24 -0
- package/lib/canopy-error.js.map +7 -0
- package/lib/get-query-client.d.ts +2 -0
- package/lib/get-query-client.js +34 -0
- package/lib/get-query-client.js.map +7 -0
- package/lib/integration-utils.d.ts +2 -0
- package/lib/integration-utils.js +9 -0
- package/lib/integration-utils.js.map +7 -0
- package/lib/shopify-utils.d.ts +10 -0
- package/lib/shopify-utils.js +7 -0
- package/lib/shopify-utils.js.map +7 -0
- package/lib/url-utils.d.ts +4 -0
- package/lib/url-utils.js +8 -0
- package/lib/url-utils.js.map +7 -0
- package/loaders/collection-loader.d.ts +11 -0
- package/loaders/collection-loader.js +55 -0
- package/loaders/collection-loader.js.map +7 -0
- package/loaders/collection-products-loader.d.ts +12 -0
- package/loaders/collection-products-loader.js +58 -0
- package/loaders/collection-products-loader.js.map +7 -0
- package/loaders/contentful-entries-loader.d.ts +17 -0
- package/loaders/contentful-entries-loader.js +78 -0
- package/loaders/contentful-entries-loader.js.map +7 -0
- package/loaders/contentful-entry-loader.d.ts +14 -0
- package/loaders/contentful-entry-loader.js +60 -0
- package/loaders/contentful-entry-loader.js.map +7 -0
- package/loaders/invoke-loader-action.d.ts +11 -0
- package/loaders/invoke-loader-action.js +14 -0
- package/loaders/invoke-loader-action.js.map +7 -0
- package/loaders/invoke-loader-server.d.ts +18 -0
- package/loaders/invoke-loader-server.js +40 -0
- package/loaders/invoke-loader-server.js.map +7 -0
- package/loaders/invoke-loader.d.ts +16 -0
- package/loaders/invoke-loader.js +37 -0
- package/loaders/invoke-loader.js.map +7 -0
- package/loaders/levanta-product-loader.d.ts +11 -0
- package/loaders/levanta-product-loader.js +53 -0
- package/loaders/levanta-product-loader.js.map +7 -0
- package/loaders/loader-error-boundary.d.ts +25 -0
- package/loaders/loader-error-boundary.js +24 -0
- package/loaders/loader-error-boundary.js.map +7 -0
- package/loaders/loader-keys.d.ts +34 -0
- package/loaders/loader-keys.js +26 -0
- package/loaders/loader-keys.js.map +7 -0
- package/loaders/loader-schemas.d.ts +946 -0
- package/loaders/loader-schemas.js +353 -0
- package/loaders/loader-schemas.js.map +7 -0
- package/loaders/metaobject-loader.d.ts +12 -0
- package/loaders/metaobject-loader.js +54 -0
- package/loaders/metaobject-loader.js.map +7 -0
- package/loaders/metaobjects-loader.d.ts +14 -0
- package/loaders/metaobjects-loader.js +60 -0
- package/loaders/metaobjects-loader.js.map +7 -0
- package/loaders/okendo-review-aggregate-loader.d.ts +17 -0
- package/loaders/okendo-review-aggregate-loader.js +56 -0
- package/loaders/okendo-review-aggregate-loader.js.map +7 -0
- package/loaders/okendo-reviews-loader.d.ts +23 -0
- package/loaders/okendo-reviews-loader.js +54 -0
- package/loaders/okendo-reviews-loader.js.map +7 -0
- package/loaders/prefetch-loaders.d.ts +33 -0
- package/loaders/prefetch-loaders.js +46 -0
- package/loaders/prefetch-loaders.js.map +7 -0
- package/loaders/preview-placeholder.d.ts +25 -0
- package/loaders/preview-placeholder.js +222 -0
- package/loaders/preview-placeholder.js.map +7 -0
- package/loaders/product-loader-args.d.ts +21 -0
- package/loaders/product-loader-args.js +17 -0
- package/loaders/product-loader-args.js.map +7 -0
- package/loaders/product-loader.d.ts +10 -0
- package/loaders/product-loader.js +52 -0
- package/loaders/product-loader.js.map +7 -0
- package/loaders/rebuy-recommendations-loader.d.ts +165 -0
- package/loaders/rebuy-recommendations-loader.js +57 -0
- package/loaders/rebuy-recommendations-loader.js.map +7 -0
- package/loaders/reviews-io-review-aggregate-loader.d.ts +12 -0
- package/loaders/reviews-io-review-aggregate-loader.js +43 -0
- package/loaders/reviews-io-review-aggregate-loader.js.map +7 -0
- package/loaders/reviews-io-reviews-loader.d.ts +14 -0
- package/loaders/reviews-io-reviews-loader.js +65 -0
- package/loaders/reviews-io-reviews-loader.js.map +7 -0
- package/loaders/smile-earning-rules-loader.d.ts +19 -0
- package/loaders/smile-earning-rules-loader.js +44 -0
- package/loaders/smile-earning-rules-loader.js.map +7 -0
- package/loaders/smile-rewards-loader.d.ts +19 -0
- package/loaders/smile-rewards-loader.js +44 -0
- package/loaders/smile-rewards-loader.js.map +7 -0
- package/loaders/smile-vip-tiers-loader.d.ts +18 -0
- package/loaders/smile-vip-tiers-loader.js +43 -0
- package/loaders/smile-vip-tiers-loader.js.map +7 -0
- package/loaders/statsig-experiment-loader.d.ts +20 -0
- package/loaders/statsig-experiment-loader.js +81 -0
- package/loaders/statsig-experiment-loader.js.map +7 -0
- package/loaders/yotpo-review-aggregate-loader.d.ts +12 -0
- package/loaders/yotpo-review-aggregate-loader.js +50 -0
- package/loaders/yotpo-review-aggregate-loader.js.map +7 -0
- package/loaders/yotpo-reviews-loader.d.ts +14 -0
- package/loaders/yotpo-reviews-loader.js +65 -0
- package/loaders/yotpo-reviews-loader.js.map +7 -0
- package/money.d.ts +9 -0
- package/money.js +13 -0
- package/money.js.map +7 -0
- package/next/config.d.ts +4 -0
- package/next/config.js +91 -0
- package/next/config.js.map +7 -0
- package/next/image-loader.d.ts +2 -0
- package/next/image-loader.js +52 -0
- package/next/image-loader.js.map +7 -0
- package/next/open-next.d.ts +2 -0
- package/next/open-next.js +24 -0
- package/next/open-next.js.map +7 -0
- package/orders/order-status-schema.d.ts +161 -0
- package/orders/order-status-schema.js +83 -0
- package/orders/order-status-schema.js.map +7 -0
- package/orders/order-status.d.ts +11 -0
- package/orders/order-status.js +41 -0
- package/orders/order-status.js.map +7 -0
- package/package.json +216 -0
- package/providers/query-provider.d.ts +1 -0
- package/providers/query-provider.js +12 -0
- package/providers/query-provider.js.map +7 -0
- package/providers/replo-provider.d.ts +1 -0
- package/providers/replo-provider.js +22 -0
- package/providers/replo-provider.js.map +7 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types for cart data structures. Use these types when working with cart data, but don't import from this module directly in components - use the cart hooks instead.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import type { SellingPlanGroup } from "../loaders/loader-schemas";
|
|
6
|
+
export interface Image {
|
|
7
|
+
url: string;
|
|
8
|
+
altText: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface CartLineMerchandise {
|
|
11
|
+
id: string;
|
|
12
|
+
product: {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
sellingPlanGroups?: SellingPlanGroup[];
|
|
16
|
+
};
|
|
17
|
+
title: string;
|
|
18
|
+
/** Integer minor units (Stripe convention): 1999 = $19.99 USD */
|
|
19
|
+
price: number;
|
|
20
|
+
compareAtPrice?: number | null;
|
|
21
|
+
image: Image | null;
|
|
22
|
+
selectedOptions: {
|
|
23
|
+
name: string;
|
|
24
|
+
value: string;
|
|
25
|
+
}[];
|
|
26
|
+
}
|
|
27
|
+
export interface CartLineAttribute {
|
|
28
|
+
key: string;
|
|
29
|
+
value: string | number | boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Replo attribution property added to cart/buy-now line items for order attribution in Shopify. */
|
|
32
|
+
export declare const REPLO_ATTRIBUTION_PROPERTY: CartLineAttribute;
|
|
33
|
+
export interface SellingPlanPriceAdjustment {
|
|
34
|
+
compareAtPrice: {
|
|
35
|
+
amount: number;
|
|
36
|
+
currencyCode: string;
|
|
37
|
+
};
|
|
38
|
+
perDeliveryPrice: {
|
|
39
|
+
amount: number;
|
|
40
|
+
currencyCode: string;
|
|
41
|
+
};
|
|
42
|
+
price: {
|
|
43
|
+
amount: number;
|
|
44
|
+
currencyCode: string;
|
|
45
|
+
};
|
|
46
|
+
unitPrice: {
|
|
47
|
+
amount: number;
|
|
48
|
+
currencyCode: string;
|
|
49
|
+
} | null;
|
|
50
|
+
}
|
|
51
|
+
export interface SellingPlanAllocation {
|
|
52
|
+
sellingPlan: {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
description: string | null;
|
|
56
|
+
};
|
|
57
|
+
priceAdjustments: SellingPlanPriceAdjustment[];
|
|
58
|
+
checkoutChargeAmount: {
|
|
59
|
+
amount: number;
|
|
60
|
+
currencyCode: string;
|
|
61
|
+
};
|
|
62
|
+
remainingBalanceChargeAmount: {
|
|
63
|
+
amount: number;
|
|
64
|
+
currencyCode: string;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface CartLine {
|
|
68
|
+
id: string;
|
|
69
|
+
quantity: number;
|
|
70
|
+
/**
|
|
71
|
+
* Null when this is an optimistic line whose merchandise couldn't be
|
|
72
|
+
* resolved from the query cache or passed explicitly. Consumers should
|
|
73
|
+
* render a skeleton/loading state in that case; the line is replaced
|
|
74
|
+
* with real merchandise once the server roundtrip lands.
|
|
75
|
+
*/
|
|
76
|
+
merchandise: CartLineMerchandise | null;
|
|
77
|
+
attributes: CartLineAttribute[];
|
|
78
|
+
sellingPlanAllocation?: SellingPlanAllocation | null;
|
|
79
|
+
}
|
|
80
|
+
export interface CartCost {
|
|
81
|
+
/** Integer minor units (Stripe convention) in currencyCode */
|
|
82
|
+
subtotalAmount: number;
|
|
83
|
+
totalAmount: number;
|
|
84
|
+
currencyCode: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Represents a discount code applied to a cart.
|
|
88
|
+
*/
|
|
89
|
+
export interface CartDiscountCode {
|
|
90
|
+
/** The discount code string */
|
|
91
|
+
code: string;
|
|
92
|
+
/**
|
|
93
|
+
* Whether the discount code is applicable to the current cart.
|
|
94
|
+
* A code may not be applicable due to:
|
|
95
|
+
* - Cart contents not meeting product/collection eligibility
|
|
96
|
+
* - Minimum purchase amount not met
|
|
97
|
+
* - Code expired or usage limits reached
|
|
98
|
+
* - Customer restrictions
|
|
99
|
+
* - Conflicting discount rules
|
|
100
|
+
*/
|
|
101
|
+
applicable: boolean;
|
|
102
|
+
}
|
|
103
|
+
export interface Cart {
|
|
104
|
+
id: string;
|
|
105
|
+
lines: CartLine[];
|
|
106
|
+
cost: CartCost;
|
|
107
|
+
checkoutUrl?: string;
|
|
108
|
+
discountCodes?: CartDiscountCode[];
|
|
109
|
+
}
|
|
110
|
+
export interface CartLinePayload {
|
|
111
|
+
id: string;
|
|
112
|
+
quantity: number;
|
|
113
|
+
merchandise?: CartLineMerchandise;
|
|
114
|
+
properties?: CartLineAttribute[];
|
|
115
|
+
sellingPlanId?: string | null;
|
|
116
|
+
}
|
|
117
|
+
export interface AddToCartPayload {
|
|
118
|
+
lines: CartLinePayload[];
|
|
119
|
+
cartId: string;
|
|
120
|
+
}
|
|
121
|
+
export interface UpdateCartLineItemPayload {
|
|
122
|
+
line: CartLinePayload;
|
|
123
|
+
cartId: string;
|
|
124
|
+
}
|
|
125
|
+
export interface RemoveFromCartPayload {
|
|
126
|
+
lineIds: string[];
|
|
127
|
+
cartId: string;
|
|
128
|
+
}
|
|
129
|
+
export interface UpdateCartDiscountCodesPayload {
|
|
130
|
+
cartId: string;
|
|
131
|
+
discountCodes: string[];
|
|
132
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../cart/cart-types.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * TypeScript types for cart data structures. Use these types when working with cart data, but don't import from this module directly in components - use the cart hooks instead.\n * @module\n */\n\nimport type { SellingPlanGroup } from \"../loaders/loader-schemas\";\n\nexport interface Image {\n url: string;\n altText: string | null;\n}\n\nexport interface CartLineMerchandise {\n id: string;\n product: {\n id: string;\n title: string;\n sellingPlanGroups?: SellingPlanGroup[];\n };\n title: string;\n /** Integer minor units (Stripe convention): 1999 = $19.99 USD */\n price: number;\n compareAtPrice?: number | null;\n image: Image | null;\n selectedOptions: {\n name: string;\n value: string;\n }[];\n}\n\nexport interface CartLineAttribute {\n key: string;\n value: string | number | boolean;\n}\n\n/** Replo attribution property added to cart/buy-now line items for order attribution in Shopify. */\nexport const REPLO_ATTRIBUTION_PROPERTY: CartLineAttribute = {\n key: \"_replo\",\n value: \"true\",\n};\n\nexport interface SellingPlanPriceAdjustment {\n compareAtPrice: {\n amount: number;\n currencyCode: string;\n };\n perDeliveryPrice: {\n amount: number;\n currencyCode: string;\n };\n price: {\n amount: number;\n currencyCode: string;\n };\n unitPrice: {\n amount: number;\n currencyCode: string;\n } | null;\n}\n\nexport interface SellingPlanAllocation {\n sellingPlan: {\n id: string;\n name: string;\n description: string | null;\n };\n priceAdjustments: SellingPlanPriceAdjustment[];\n checkoutChargeAmount: {\n amount: number;\n currencyCode: string;\n };\n remainingBalanceChargeAmount: {\n amount: number;\n currencyCode: string;\n };\n}\n\nexport interface CartLine {\n id: string;\n quantity: number;\n /**\n * Null when this is an optimistic line whose merchandise couldn't be\n * resolved from the query cache or passed explicitly. Consumers should\n * render a skeleton/loading state in that case; the line is replaced\n * with real merchandise once the server roundtrip lands.\n */\n merchandise: CartLineMerchandise | null;\n attributes: CartLineAttribute[];\n sellingPlanAllocation?: SellingPlanAllocation | null;\n}\n\nexport interface CartCost {\n /** Integer minor units (Stripe convention) in currencyCode */\n subtotalAmount: number;\n totalAmount: number;\n currencyCode: string;\n}\n\n/**\n * Represents a discount code applied to a cart.\n */\nexport interface CartDiscountCode {\n /** The discount code string */\n code: string;\n /**\n * Whether the discount code is applicable to the current cart.\n * A code may not be applicable due to:\n * - Cart contents not meeting product/collection eligibility\n * - Minimum purchase amount not met\n * - Code expired or usage limits reached\n * - Customer restrictions\n * - Conflicting discount rules\n */\n applicable: boolean;\n}\n\nexport interface Cart {\n id: string;\n lines: CartLine[];\n cost: CartCost;\n checkoutUrl?: string;\n discountCodes?: CartDiscountCode[];\n}\n\nexport interface CartLinePayload {\n id: string;\n quantity: number;\n merchandise?: CartLineMerchandise;\n properties?: CartLineAttribute[];\n sellingPlanId?: string | null;\n}\n\nexport interface AddToCartPayload {\n lines: CartLinePayload[];\n cartId: string;\n}\n\nexport interface UpdateCartLineItemPayload {\n line: CartLinePayload;\n cartId: string;\n}\n\nexport interface RemoveFromCartPayload {\n lineIds: string[];\n cartId: string;\n}\n\nexport interface UpdateCartDiscountCodesPayload {\n cartId: string;\n discountCodes: string[];\n}\n"],
|
|
5
|
+
"mappings": "AAoCO,MAAM,6BAAgD;AAAA,EAC3D,KAAK;AAAA,EACL,OAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const REPLO_CART_COOKIE_NAME = "replo_cart_v2";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/cart-constants.ts"],
|
|
4
|
+
"sourcesContent": ["// NOTE (Max, 2026-07-21): the cookie holds the native Replo cart \u2014 the Stripe and\n// default gateways both use it, so the checkout provider is incidental to the name.\n// NOTE (Max, 2026-07-31): the `_v2` suffix retires cookies written before the\n// integer-minor-units flip (REPL-30044). A pre-flip cookie holds decimal\n// major-unit prices; reading it under the new SDK would reinterpret 19.99 as 19\n// minor units. The persisted cart carries no schema version, so the name is the\n// version \u2014 a bumped name abandons stale carts (they expire in 30d) instead of\n// silently rescaling them.\nexport const REPLO_CART_COOKIE_NAME = \"replo_cart_v2\";\n"],
|
|
5
|
+
"mappings": "AAQO,MAAM,yBAAyB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AddToCartPayload, Cart, CartLinePayload, RemoveFromCartPayload, UpdateCartDiscountCodesPayload, UpdateCartLineItemPayload } from "../cart-types";
|
|
2
|
+
export interface CartGateway {
|
|
3
|
+
getCart(cartId: string): Promise<Cart | null>;
|
|
4
|
+
createCart(lines?: CartLinePayload[], discountCodes?: string[]): Promise<Cart | null>;
|
|
5
|
+
addToCart(cartPayload: AddToCartPayload): Promise<Cart | null>;
|
|
6
|
+
updateCartLineItem(cartPayload: UpdateCartLineItemPayload): Promise<Cart | null>;
|
|
7
|
+
removeCartLineItems(cartPayload: RemoveFromCartPayload): Promise<Cart | null>;
|
|
8
|
+
updateCartDiscountCodes(cartPayload: UpdateCartDiscountCodesPayload): Promise<Cart | null>;
|
|
9
|
+
}
|
|
10
|
+
export declare function getCartGateway(): Promise<CartGateway>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { getCheckoutProvider } from "../../lib/integration-utils";
|
|
3
|
+
import { createDefaultCartGateway } from "./default-cart-gateway";
|
|
4
|
+
import { createResolverCartGateway } from "./resolver-cart-gateway";
|
|
5
|
+
import { createStripeCartGateway } from "./stripe-cart-gateway";
|
|
6
|
+
async function getCartGateway() {
|
|
7
|
+
const checkoutProvider = await getCheckoutProvider();
|
|
8
|
+
if (checkoutProvider === "stripe") {
|
|
9
|
+
return await createStripeCartGateway();
|
|
10
|
+
} else if (checkoutProvider === "shopify") {
|
|
11
|
+
return await createResolverCartGateway();
|
|
12
|
+
} else {
|
|
13
|
+
return await createDefaultCartGateway();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
getCartGateway
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=cart-gateway.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/cart-gateway.ts"],
|
|
4
|
+
"sourcesContent": ["\"use server\";\n\nimport type {\n AddToCartPayload,\n Cart,\n CartLinePayload,\n RemoveFromCartPayload,\n UpdateCartDiscountCodesPayload,\n UpdateCartLineItemPayload,\n} from \"../cart-types\";\n\nimport { getCheckoutProvider } from \"../../lib/integration-utils\";\nimport { createDefaultCartGateway } from \"./default-cart-gateway\";\nimport { createResolverCartGateway } from \"./resolver-cart-gateway\";\nimport { createStripeCartGateway } from \"./stripe-cart-gateway\";\n\nexport interface CartGateway {\n getCart(cartId: string): Promise<Cart | null>;\n createCart(\n lines?: CartLinePayload[],\n discountCodes?: string[],\n ): Promise<Cart | null>;\n addToCart(cartPayload: AddToCartPayload): Promise<Cart | null>;\n updateCartLineItem(\n cartPayload: UpdateCartLineItemPayload,\n ): Promise<Cart | null>;\n removeCartLineItems(cartPayload: RemoveFromCartPayload): Promise<Cart | null>;\n updateCartDiscountCodes(\n cartPayload: UpdateCartDiscountCodesPayload,\n ): Promise<Cart | null>;\n}\n\nexport async function getCartGateway(): Promise<CartGateway> {\n const checkoutProvider = await getCheckoutProvider();\n\n if (checkoutProvider === \"stripe\") {\n return await createStripeCartGateway();\n } else if (checkoutProvider === \"shopify\") {\n return await createResolverCartGateway();\n } else {\n return await createDefaultCartGateway();\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA,SAAS,2BAA2B;AACpC,SAAS,gCAAgC;AACzC,SAAS,iCAAiC;AAC1C,SAAS,+BAA+B;AAkBxC,eAAsB,iBAAuC;AAC3D,QAAM,mBAAmB,MAAM,oBAAoB;AAEnD,MAAI,qBAAqB,UAAU;AACjC,WAAO,MAAM,wBAAwB;AAAA,EACvC,WAAW,qBAAqB,WAAW;AACzC,WAAO,MAAM,0BAA0B;AAAA,EACzC,OAAO;AACL,WAAO,MAAM,yBAAyB;AAAA,EACxC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AddToCartPayload, Cart, CartLinePayload, RemoveFromCartPayload, UpdateCartDiscountCodesPayload, UpdateCartLineItemPayload } from "../cart-types";
|
|
2
|
+
import type { LineMergeFn } from "../utils/cookie-cart-persistence";
|
|
3
|
+
import type { CartGateway } from "./cart-gateway";
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for cookie-based cart gateways
|
|
6
|
+
*/
|
|
7
|
+
interface CookieCartConfig {
|
|
8
|
+
cookieName: string;
|
|
9
|
+
lineMergeFn: LineMergeFn;
|
|
10
|
+
lineIdGenerator: () => string;
|
|
11
|
+
cartIdGenerator: () => string;
|
|
12
|
+
gatewayName: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Abstract base class for cookie-based cart gateways.
|
|
16
|
+
* Provides common error handling, logging, and cart operations.
|
|
17
|
+
* Subclasses must provide gateway-specific configuration.
|
|
18
|
+
*/
|
|
19
|
+
export declare abstract class CookieBasedCartGateway implements CartGateway {
|
|
20
|
+
protected abstract readonly config: CookieCartConfig;
|
|
21
|
+
getCart(cartId: string): Promise<Cart | null>;
|
|
22
|
+
createCart(lines?: CartLinePayload[], _discountCodes?: string[]): Promise<Cart | null>;
|
|
23
|
+
addToCart(cartPayload: AddToCartPayload): Promise<Cart | null>;
|
|
24
|
+
updateCartLineItem(cartPayload: UpdateCartLineItemPayload): Promise<Cart | null>;
|
|
25
|
+
removeCartLineItems(cartPayload: RemoveFromCartPayload): Promise<Cart | null>;
|
|
26
|
+
updateCartDiscountCodes(cartPayload: UpdateCartDiscountCodesPayload): Promise<Cart | null>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addToCartWithPersistence,
|
|
3
|
+
createCartWithPersistence,
|
|
4
|
+
loadCartFromCookie,
|
|
5
|
+
removeCartLineItemsWithPersistence,
|
|
6
|
+
updateCartLineItemWithPersistence
|
|
7
|
+
} from "../utils/cookie-cart-persistence";
|
|
8
|
+
class CookieBasedCartGateway {
|
|
9
|
+
async getCart(cartId) {
|
|
10
|
+
try {
|
|
11
|
+
const cart = await loadCartFromCookie(this.config.cookieName);
|
|
12
|
+
return cart?.id === cartId ? cart : null;
|
|
13
|
+
} catch (error) {
|
|
14
|
+
console.warn(
|
|
15
|
+
`${this.config.gatewayName} cart ${cartId} not found, could not fetch cart:`,
|
|
16
|
+
error
|
|
17
|
+
);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async createCart(lines, _discountCodes) {
|
|
22
|
+
try {
|
|
23
|
+
const cart = await createCartWithPersistence({
|
|
24
|
+
cookieName: this.config.cookieName,
|
|
25
|
+
lines,
|
|
26
|
+
lineIdGenerator: this.config.lineIdGenerator,
|
|
27
|
+
cartIdGenerator: this.config.cartIdGenerator
|
|
28
|
+
});
|
|
29
|
+
return cart;
|
|
30
|
+
} catch (createCartError) {
|
|
31
|
+
console.warn(
|
|
32
|
+
`Failed to create ${this.config.gatewayName} cart${lines?.length ? " with lines" : ""}:`,
|
|
33
|
+
createCartError
|
|
34
|
+
);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async addToCart(cartPayload) {
|
|
39
|
+
try {
|
|
40
|
+
const cartData = await addToCartWithPersistence(cartPayload, {
|
|
41
|
+
cookieName: this.config.cookieName,
|
|
42
|
+
mergeFn: this.config.lineMergeFn,
|
|
43
|
+
lineIdGenerator: this.config.lineIdGenerator
|
|
44
|
+
});
|
|
45
|
+
return cartData;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
console.warn(`Failed to add items to ${this.config.gatewayName} cart:`, {
|
|
48
|
+
error: error instanceof Error ? error.message : String(error),
|
|
49
|
+
cartId: cartPayload.cartId,
|
|
50
|
+
itemCount: cartPayload.lines.length
|
|
51
|
+
});
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async updateCartLineItem(cartPayload) {
|
|
56
|
+
try {
|
|
57
|
+
const cartData = await updateCartLineItemWithPersistence(
|
|
58
|
+
cartPayload,
|
|
59
|
+
this.config.cookieName
|
|
60
|
+
);
|
|
61
|
+
return cartData;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.warn(
|
|
64
|
+
`Failed to update ${this.config.gatewayName} cart line item:`,
|
|
65
|
+
{
|
|
66
|
+
error: error instanceof Error ? error.message : String(error),
|
|
67
|
+
cartId: cartPayload.cartId,
|
|
68
|
+
lineId: cartPayload.line.id,
|
|
69
|
+
quantity: cartPayload.line.quantity
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async removeCartLineItems(cartPayload) {
|
|
76
|
+
try {
|
|
77
|
+
const cartData = await removeCartLineItemsWithPersistence(
|
|
78
|
+
cartPayload,
|
|
79
|
+
this.config.cookieName
|
|
80
|
+
);
|
|
81
|
+
return cartData;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.warn(
|
|
84
|
+
`Failed to remove ${this.config.gatewayName} cart line items:`,
|
|
85
|
+
{
|
|
86
|
+
error: error instanceof Error ? error.message : String(error),
|
|
87
|
+
cartId: cartPayload.cartId,
|
|
88
|
+
lineIds: cartPayload.lineIds
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async updateCartDiscountCodes(cartPayload) {
|
|
95
|
+
console.warn(
|
|
96
|
+
`${this.config.gatewayName} cart gateway does not yet support discount codes`
|
|
97
|
+
);
|
|
98
|
+
try {
|
|
99
|
+
return await this.getCart(cartPayload.cartId);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.warn("Failed to fetch cart for discount code update:", error);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
CookieBasedCartGateway
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=cookie-cart-gateway.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/cookie-cart-gateway.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n AddToCartPayload,\n Cart,\n CartLinePayload,\n RemoveFromCartPayload,\n UpdateCartDiscountCodesPayload,\n UpdateCartLineItemPayload,\n} from \"../cart-types\";\nimport type { LineMergeFn } from \"../utils/cookie-cart-persistence\";\nimport type { CartGateway } from \"./cart-gateway\";\n\nimport {\n addToCartWithPersistence,\n createCartWithPersistence,\n loadCartFromCookie,\n removeCartLineItemsWithPersistence,\n updateCartLineItemWithPersistence,\n} from \"../utils/cookie-cart-persistence\";\n\n/**\n * Configuration for cookie-based cart gateways\n */\ninterface CookieCartConfig {\n cookieName: string;\n lineMergeFn: LineMergeFn;\n lineIdGenerator: () => string;\n cartIdGenerator: () => string;\n gatewayName: string; // For logging (e.g., \"Stripe\", \"Default\")\n}\n\n/**\n * Abstract base class for cookie-based cart gateways.\n * Provides common error handling, logging, and cart operations.\n * Subclasses must provide gateway-specific configuration.\n */\nexport abstract class CookieBasedCartGateway implements CartGateway {\n protected abstract readonly config: CookieCartConfig;\n\n async getCart(cartId: string): Promise<Cart | null> {\n try {\n const cart = await loadCartFromCookie(this.config.cookieName);\n return cart?.id === cartId ? cart : null;\n } catch (error) {\n console.warn(\n `${this.config.gatewayName} cart ${cartId} not found, could not fetch cart:`,\n error,\n );\n return null;\n }\n }\n\n async createCart(\n lines?: CartLinePayload[],\n _discountCodes?: string[],\n ): Promise<Cart | null> {\n try {\n const cart = await createCartWithPersistence({\n cookieName: this.config.cookieName,\n lines,\n lineIdGenerator: this.config.lineIdGenerator,\n cartIdGenerator: this.config.cartIdGenerator,\n });\n return cart;\n } catch (createCartError) {\n console.warn(\n `Failed to create ${this.config.gatewayName} cart${lines?.length ? \" with lines\" : \"\"}:`,\n createCartError,\n );\n return null;\n }\n }\n\n async addToCart(cartPayload: AddToCartPayload): Promise<Cart | null> {\n try {\n const cartData = await addToCartWithPersistence(cartPayload, {\n cookieName: this.config.cookieName,\n mergeFn: this.config.lineMergeFn,\n lineIdGenerator: this.config.lineIdGenerator,\n });\n return cartData;\n } catch (error) {\n console.warn(`Failed to add items to ${this.config.gatewayName} cart:`, {\n error: error instanceof Error ? error.message : String(error),\n cartId: cartPayload.cartId,\n itemCount: cartPayload.lines.length,\n });\n return null;\n }\n }\n\n async updateCartLineItem(\n cartPayload: UpdateCartLineItemPayload,\n ): Promise<Cart | null> {\n try {\n const cartData = await updateCartLineItemWithPersistence(\n cartPayload,\n this.config.cookieName,\n );\n return cartData;\n } catch (error) {\n console.warn(\n `Failed to update ${this.config.gatewayName} cart line item:`,\n {\n error: error instanceof Error ? error.message : String(error),\n cartId: cartPayload.cartId,\n lineId: cartPayload.line.id,\n quantity: cartPayload.line.quantity,\n },\n );\n return null;\n }\n }\n\n async removeCartLineItems(\n cartPayload: RemoveFromCartPayload,\n ): Promise<Cart | null> {\n try {\n const cartData = await removeCartLineItemsWithPersistence(\n cartPayload,\n this.config.cookieName,\n );\n return cartData;\n } catch (error) {\n console.warn(\n `Failed to remove ${this.config.gatewayName} cart line items:`,\n {\n error: error instanceof Error ? error.message : String(error),\n cartId: cartPayload.cartId,\n lineIds: cartPayload.lineIds,\n },\n );\n return null;\n }\n }\n\n async updateCartDiscountCodes(\n cartPayload: UpdateCartDiscountCodesPayload,\n ): Promise<Cart | null> {\n console.warn(\n `${this.config.gatewayName} cart gateway does not yet support discount codes`,\n );\n // Return existing cart without changes\n try {\n return await this.getCart(cartPayload.cartId);\n } catch (error) {\n console.warn(\"Failed to fetch cart for discount code update:\", error);\n return null;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBA,MAAe,uBAA8C;AAAA,EAGlE,MAAM,QAAQ,QAAsC;AAClD,QAAI;AACF,YAAM,OAAO,MAAM,mBAAmB,KAAK,OAAO,UAAU;AAC5D,aAAO,MAAM,OAAO,SAAS,OAAO;AAAA,IACtC,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,GAAG,KAAK,OAAO,WAAW,SAAS,MAAM;AAAA,QACzC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,OACA,gBACsB;AACtB,QAAI;AACF,YAAM,OAAO,MAAM,0BAA0B;AAAA,QAC3C,YAAY,KAAK,OAAO;AAAA,QACxB;AAAA,QACA,iBAAiB,KAAK,OAAO;AAAA,QAC7B,iBAAiB,KAAK,OAAO;AAAA,MAC/B,CAAC;AACD,aAAO;AAAA,IACT,SAAS,iBAAiB;AACxB,cAAQ;AAAA,QACN,oBAAoB,KAAK,OAAO,WAAW,QAAQ,OAAO,SAAS,gBAAgB,EAAE;AAAA,QACrF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,aAAqD;AACnE,QAAI;AACF,YAAM,WAAW,MAAM,yBAAyB,aAAa;AAAA,QAC3D,YAAY,KAAK,OAAO;AAAA,QACxB,SAAS,KAAK,OAAO;AAAA,QACrB,iBAAiB,KAAK,OAAO;AAAA,MAC/B,CAAC;AACD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,0BAA0B,KAAK,OAAO,WAAW,UAAU;AAAA,QACtE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D,QAAQ,YAAY;AAAA,QACpB,WAAW,YAAY,MAAM;AAAA,MAC/B,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACsB;AACtB,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA,KAAK,OAAO;AAAA,MACd;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,oBAAoB,KAAK,OAAO,WAAW;AAAA,QAC3C;AAAA,UACE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC5D,QAAQ,YAAY;AAAA,UACpB,QAAQ,YAAY,KAAK;AAAA,UACzB,UAAU,YAAY,KAAK;AAAA,QAC7B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACsB;AACtB,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA,KAAK,OAAO;AAAA,MACd;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,oBAAoB,KAAK,OAAO,WAAW;AAAA,QAC3C;AAAA,UACE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC5D,QAAQ,YAAY;AAAA,UACpB,SAAS,YAAY;AAAA,QACvB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACsB;AACtB,YAAQ;AAAA,MACN,GAAG,KAAK,OAAO,WAAW;AAAA,IAC5B;AAEA,QAAI;AACF,aAAO,MAAM,KAAK,QAAQ,YAAY,MAAM;AAAA,IAC9C,SAAS,OAAO;AACd,cAAQ,KAAK,kDAAkD,KAAK;AACpE,aAAO;AAAA,IACT;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CartLine, CartLinePayload } from "../cart-types";
|
|
2
|
+
import { CookieBasedCartGateway } from "./cookie-cart-gateway";
|
|
3
|
+
/**
|
|
4
|
+
* Merges lines by merchandise ID and selling plan
|
|
5
|
+
*/
|
|
6
|
+
declare function defaultLineMergeFn(existingLines: CartLine[], newLine: CartLinePayload): number;
|
|
7
|
+
declare function defaultLineIdGenerator(): string;
|
|
8
|
+
declare function defaultCartIdGenerator(): string;
|
|
9
|
+
declare class DefaultCartGateway extends CookieBasedCartGateway {
|
|
10
|
+
protected readonly config: {
|
|
11
|
+
cookieName: string;
|
|
12
|
+
lineMergeFn: typeof defaultLineMergeFn;
|
|
13
|
+
lineIdGenerator: typeof defaultLineIdGenerator;
|
|
14
|
+
cartIdGenerator: typeof defaultCartIdGenerator;
|
|
15
|
+
gatewayName: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function createDefaultCartGateway(): Promise<DefaultCartGateway>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { CookieBasedCartGateway } from "./cookie-cart-gateway";
|
|
3
|
+
const DEFAULT_CART_COOKIE_NAME = "replo_default_cart_v2";
|
|
4
|
+
function defaultLineMergeFn(existingLines, newLine) {
|
|
5
|
+
return existingLines.findIndex((line) => {
|
|
6
|
+
return line.merchandise?.id === newLine.id && (newLine.sellingPlanId ?? null) === (line.sellingPlanAllocation?.sellingPlan.id ?? null);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function defaultLineIdGenerator() {
|
|
10
|
+
return crypto.randomUUID();
|
|
11
|
+
}
|
|
12
|
+
function defaultCartIdGenerator() {
|
|
13
|
+
return crypto.randomUUID();
|
|
14
|
+
}
|
|
15
|
+
class DefaultCartGateway extends CookieBasedCartGateway {
|
|
16
|
+
config = {
|
|
17
|
+
cookieName: DEFAULT_CART_COOKIE_NAME,
|
|
18
|
+
lineMergeFn: defaultLineMergeFn,
|
|
19
|
+
lineIdGenerator: defaultLineIdGenerator,
|
|
20
|
+
cartIdGenerator: defaultCartIdGenerator,
|
|
21
|
+
gatewayName: "Default"
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function createDefaultCartGateway() {
|
|
25
|
+
return new DefaultCartGateway();
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
createDefaultCartGateway
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=default-cart-gateway.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/default-cart-gateway.ts"],
|
|
4
|
+
"sourcesContent": ["\"use server\";\n\nimport type { CartLine, CartLinePayload } from \"../cart-types\";\n\nimport { CookieBasedCartGateway } from \"./cookie-cart-gateway\";\n\n// NOTE (Max, 2026-07-31): `_v2` retires pre-integer-minor-units cookies\n// (REPL-30044) \u2014 see REPLO_CART_COOKIE_NAME in cart-constants.ts.\nconst DEFAULT_CART_COOKIE_NAME = \"replo_default_cart_v2\";\n\n/**\n * Merges lines by merchandise ID and selling plan\n */\nfunction defaultLineMergeFn(\n existingLines: CartLine[],\n newLine: CartLinePayload,\n): number {\n return existingLines.findIndex((line) => {\n return (\n line.merchandise?.id === newLine.id &&\n (newLine.sellingPlanId ?? null) ===\n (line.sellingPlanAllocation?.sellingPlan.id ?? null)\n );\n });\n}\n\nfunction defaultLineIdGenerator(): string {\n return crypto.randomUUID();\n}\n\nfunction defaultCartIdGenerator(): string {\n return crypto.randomUUID();\n}\n\nclass DefaultCartGateway extends CookieBasedCartGateway {\n protected readonly config = {\n cookieName: DEFAULT_CART_COOKIE_NAME,\n lineMergeFn: defaultLineMergeFn,\n lineIdGenerator: defaultLineIdGenerator,\n cartIdGenerator: defaultCartIdGenerator,\n gatewayName: \"Default\",\n };\n}\n\nexport async function createDefaultCartGateway(): Promise<DefaultCartGateway> {\n return new DefaultCartGateway();\n}\n"],
|
|
5
|
+
"mappings": ";AAIA,SAAS,8BAA8B;AAIvC,MAAM,2BAA2B;AAKjC,SAAS,mBACP,eACA,SACQ;AACR,SAAO,cAAc,UAAU,CAAC,SAAS;AACvC,WACE,KAAK,aAAa,OAAO,QAAQ,OAChC,QAAQ,iBAAiB,WACvB,KAAK,uBAAuB,YAAY,MAAM;AAAA,EAErD,CAAC;AACH;AAEA,SAAS,yBAAiC;AACxC,SAAO,OAAO,WAAW;AAC3B;AAEA,SAAS,yBAAiC;AACxC,SAAO,OAAO,WAAW;AAC3B;AAEA,MAAM,2BAA2B,uBAAuB;AAAA,EACnC,SAAS;AAAA,IAC1B,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AACF;AAEA,eAAsB,2BAAwD;AAC5E,SAAO,IAAI,mBAAmB;AAChC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { getCanopyApiGateway } from "../../gateways/canopy-api";
|
|
3
|
+
class ResolverCartGateway {
|
|
4
|
+
// Returns the gateway's wire-parsed Cart where the client Cart is expected.
|
|
5
|
+
// Safe because client = wire + widenings only — enforced by the widening
|
|
6
|
+
// assertions in cart-schema.spec.ts.
|
|
7
|
+
async getCart(cartId) {
|
|
8
|
+
try {
|
|
9
|
+
const gateway = await getCanopyApiGateway();
|
|
10
|
+
return await gateway.cartGet({ cartId });
|
|
11
|
+
} catch (error) {
|
|
12
|
+
console.warn(`Cart ${cartId} not found via canopy-api:`, error);
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async createCart(lines, discountCodes) {
|
|
17
|
+
try {
|
|
18
|
+
const gateway = await getCanopyApiGateway();
|
|
19
|
+
return await gateway.cartCreate({
|
|
20
|
+
lines: lines?.map((line) => ({
|
|
21
|
+
merchandiseId: line.id,
|
|
22
|
+
quantity: line.quantity,
|
|
23
|
+
attributes: line.properties?.map((prop) => ({
|
|
24
|
+
key: prop.key,
|
|
25
|
+
value: String(prop.value)
|
|
26
|
+
})),
|
|
27
|
+
sellingPlanId: line.sellingPlanId
|
|
28
|
+
})),
|
|
29
|
+
discountCodes
|
|
30
|
+
});
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.warn("Failed to create cart via canopy-api:", error);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async addToCart(cartPayload) {
|
|
37
|
+
try {
|
|
38
|
+
const gateway = await getCanopyApiGateway();
|
|
39
|
+
return await gateway.cartAddLines({
|
|
40
|
+
cartId: cartPayload.cartId,
|
|
41
|
+
lines: cartPayload.lines.map((line) => ({
|
|
42
|
+
merchandiseId: line.id,
|
|
43
|
+
quantity: line.quantity,
|
|
44
|
+
attributes: line.properties?.map((prop) => ({
|
|
45
|
+
key: prop.key,
|
|
46
|
+
value: String(prop.value)
|
|
47
|
+
})),
|
|
48
|
+
sellingPlanId: line.sellingPlanId
|
|
49
|
+
}))
|
|
50
|
+
});
|
|
51
|
+
} catch (error) {
|
|
52
|
+
console.warn("Failed to add to cart via canopy-api:", error);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async updateCartLineItem(cartPayload) {
|
|
57
|
+
try {
|
|
58
|
+
const gateway = await getCanopyApiGateway();
|
|
59
|
+
return await gateway.cartUpdateLines({
|
|
60
|
+
cartId: cartPayload.cartId,
|
|
61
|
+
lines: [
|
|
62
|
+
{
|
|
63
|
+
lineId: cartPayload.line.id,
|
|
64
|
+
quantity: cartPayload.line.quantity,
|
|
65
|
+
attributes: cartPayload.line.properties?.map((prop) => ({
|
|
66
|
+
key: prop.key,
|
|
67
|
+
value: String(prop.value)
|
|
68
|
+
})),
|
|
69
|
+
sellingPlanId: cartPayload.line.sellingPlanId
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
});
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.warn("Failed to update cart line via canopy-api:", error);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async removeCartLineItems(cartPayload) {
|
|
79
|
+
try {
|
|
80
|
+
const gateway = await getCanopyApiGateway();
|
|
81
|
+
return await gateway.cartRemoveLines({
|
|
82
|
+
cartId: cartPayload.cartId,
|
|
83
|
+
lineIds: cartPayload.lineIds
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.warn("Failed to remove cart lines via canopy-api:", error);
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async updateCartDiscountCodes(cartPayload) {
|
|
91
|
+
try {
|
|
92
|
+
const gateway = await getCanopyApiGateway();
|
|
93
|
+
return await gateway.cartUpdateDiscountCodes({
|
|
94
|
+
cartId: cartPayload.cartId,
|
|
95
|
+
discountCodes: cartPayload.discountCodes
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
console.warn("Failed to update discount codes via canopy-api:", error);
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function createResolverCartGateway() {
|
|
104
|
+
return new ResolverCartGateway();
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
createResolverCartGateway
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=resolver-cart-gateway.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/resolver-cart-gateway.ts"],
|
|
4
|
+
"sourcesContent": ["\"use server\";\n\nimport type {\n AddToCartPayload,\n Cart,\n CartLinePayload,\n RemoveFromCartPayload,\n UpdateCartDiscountCodesPayload,\n UpdateCartLineItemPayload,\n} from \"../cart-types\";\nimport type { CartGateway } from \"./cart-gateway\";\n\nimport { getCanopyApiGateway } from \"../../gateways/canopy-api\";\n\n/**\n * @author Ryan\n * CartGateway that delegates all mutations to the canopy-api's cart\n * endpoints. Used for \"externalCart\" integrations (Shopify). canopy-api\n * handles credential resolution and upstream API calls.\n */\nclass ResolverCartGateway implements CartGateway {\n // Returns the gateway's wire-parsed Cart where the client Cart is expected.\n // Safe because client = wire + widenings only \u2014 enforced by the widening\n // assertions in cart-schema.spec.ts.\n async getCart(cartId: string): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartGet({ cartId });\n } catch (error) {\n console.warn(`Cart ${cartId} not found via canopy-api:`, error);\n return null;\n }\n }\n\n async createCart(\n lines?: CartLinePayload[],\n discountCodes?: string[],\n ): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartCreate({\n lines: lines?.map((line) => ({\n merchandiseId: line.id,\n quantity: line.quantity,\n attributes: line.properties?.map((prop) => ({\n key: prop.key,\n value: String(prop.value),\n })),\n sellingPlanId: line.sellingPlanId,\n })),\n discountCodes,\n });\n } catch (error) {\n console.warn(\"Failed to create cart via canopy-api:\", error);\n return null;\n }\n }\n\n async addToCart(cartPayload: AddToCartPayload): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartAddLines({\n cartId: cartPayload.cartId,\n lines: cartPayload.lines.map((line) => ({\n merchandiseId: line.id,\n quantity: line.quantity,\n attributes: line.properties?.map((prop) => ({\n key: prop.key,\n value: String(prop.value),\n })),\n sellingPlanId: line.sellingPlanId,\n })),\n });\n } catch (error) {\n console.warn(\"Failed to add to cart via canopy-api:\", error);\n return null;\n }\n }\n\n async updateCartLineItem(\n cartPayload: UpdateCartLineItemPayload,\n ): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartUpdateLines({\n cartId: cartPayload.cartId,\n lines: [\n {\n lineId: cartPayload.line.id,\n quantity: cartPayload.line.quantity,\n attributes: cartPayload.line.properties?.map((prop) => ({\n key: prop.key,\n value: String(prop.value),\n })),\n sellingPlanId: cartPayload.line.sellingPlanId,\n },\n ],\n });\n } catch (error) {\n console.warn(\"Failed to update cart line via canopy-api:\", error);\n return null;\n }\n }\n\n async removeCartLineItems(\n cartPayload: RemoveFromCartPayload,\n ): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartRemoveLines({\n cartId: cartPayload.cartId,\n lineIds: cartPayload.lineIds,\n });\n } catch (error) {\n console.warn(\"Failed to remove cart lines via canopy-api:\", error);\n return null;\n }\n }\n\n async updateCartDiscountCodes(\n cartPayload: UpdateCartDiscountCodesPayload,\n ): Promise<Cart | null> {\n try {\n const gateway = await getCanopyApiGateway();\n return await gateway.cartUpdateDiscountCodes({\n cartId: cartPayload.cartId,\n discountCodes: cartPayload.discountCodes,\n });\n } catch (error) {\n console.warn(\"Failed to update discount codes via canopy-api:\", error);\n return null;\n }\n }\n}\n\nexport async function createResolverCartGateway(): Promise<CartGateway> {\n return new ResolverCartGateway();\n}\n"],
|
|
5
|
+
"mappings": ";AAYA,SAAS,2BAA2B;AAQpC,MAAM,oBAA2C;AAAA;AAAA;AAAA;AAAA,EAI/C,MAAM,QAAQ,QAAsC;AAClD,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,QAAQ,EAAE,OAAO,CAAC;AAAA,IACzC,SAAS,OAAO;AACd,cAAQ,KAAK,QAAQ,MAAM,8BAA8B,KAAK;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,OACA,eACsB;AACtB,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,WAAW;AAAA,QAC9B,OAAO,OAAO,IAAI,CAAC,UAAU;AAAA,UAC3B,eAAe,KAAK;AAAA,UACpB,UAAU,KAAK;AAAA,UACf,YAAY,KAAK,YAAY,IAAI,CAAC,UAAU;AAAA,YAC1C,KAAK,KAAK;AAAA,YACV,OAAO,OAAO,KAAK,KAAK;AAAA,UAC1B,EAAE;AAAA,UACF,eAAe,KAAK;AAAA,QACtB,EAAE;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK,yCAAyC,KAAK;AAC3D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,aAAqD;AACnE,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,aAAa;AAAA,QAChC,QAAQ,YAAY;AAAA,QACpB,OAAO,YAAY,MAAM,IAAI,CAAC,UAAU;AAAA,UACtC,eAAe,KAAK;AAAA,UACpB,UAAU,KAAK;AAAA,UACf,YAAY,KAAK,YAAY,IAAI,CAAC,UAAU;AAAA,YAC1C,KAAK,KAAK;AAAA,YACV,OAAO,OAAO,KAAK,KAAK;AAAA,UAC1B,EAAE;AAAA,UACF,eAAe,KAAK;AAAA,QACtB,EAAE;AAAA,MACJ,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK,yCAAyC,KAAK;AAC3D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACsB;AACtB,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,gBAAgB;AAAA,QACnC,QAAQ,YAAY;AAAA,QACpB,OAAO;AAAA,UACL;AAAA,YACE,QAAQ,YAAY,KAAK;AAAA,YACzB,UAAU,YAAY,KAAK;AAAA,YAC3B,YAAY,YAAY,KAAK,YAAY,IAAI,CAAC,UAAU;AAAA,cACtD,KAAK,KAAK;AAAA,cACV,OAAO,OAAO,KAAK,KAAK;AAAA,YAC1B,EAAE;AAAA,YACF,eAAe,YAAY,KAAK;AAAA,UAClC;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK,8CAA8C,KAAK;AAChE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACsB;AACtB,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,gBAAgB;AAAA,QACnC,QAAQ,YAAY;AAAA,QACpB,SAAS,YAAY;AAAA,MACvB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK,+CAA+C,KAAK;AACjE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACsB;AACtB,QAAI;AACF,YAAM,UAAU,MAAM,oBAAoB;AAC1C,aAAO,MAAM,QAAQ,wBAAwB;AAAA,QAC3C,QAAQ,YAAY;AAAA,QACpB,eAAe,YAAY;AAAA,MAC7B,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK,mDAAmD,KAAK;AACrE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,4BAAkD;AACtE,SAAO,IAAI,oBAAoB;AACjC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CartLine, CartLinePayload } from "../cart-types";
|
|
2
|
+
import { CookieBasedCartGateway } from "./cookie-cart-gateway";
|
|
3
|
+
/**
|
|
4
|
+
* Merges lines by merchandise ID only (unlike default which also checks selling plan)
|
|
5
|
+
*/
|
|
6
|
+
declare function stripeLineMergeFn(existingLines: CartLine[], newLine: CartLinePayload): number;
|
|
7
|
+
declare function stripeLineIdGenerator(): string;
|
|
8
|
+
declare function stripeCartIdGenerator(): string;
|
|
9
|
+
declare class StripeCartGateway extends CookieBasedCartGateway {
|
|
10
|
+
protected readonly config: {
|
|
11
|
+
cookieName: string;
|
|
12
|
+
lineMergeFn: typeof stripeLineMergeFn;
|
|
13
|
+
lineIdGenerator: typeof stripeLineIdGenerator;
|
|
14
|
+
cartIdGenerator: typeof stripeCartIdGenerator;
|
|
15
|
+
gatewayName: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function createStripeCartGateway(): Promise<StripeCartGateway>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { REPLO_CART_COOKIE_NAME } from "./cart-constants";
|
|
3
|
+
import { CookieBasedCartGateway } from "./cookie-cart-gateway";
|
|
4
|
+
function stripeLineMergeFn(existingLines, newLine) {
|
|
5
|
+
return existingLines.findIndex((line) => line.merchandise?.id === newLine.id);
|
|
6
|
+
}
|
|
7
|
+
function stripeLineIdGenerator() {
|
|
8
|
+
return crypto.randomUUID();
|
|
9
|
+
}
|
|
10
|
+
function stripeCartIdGenerator() {
|
|
11
|
+
return crypto.randomUUID();
|
|
12
|
+
}
|
|
13
|
+
class StripeCartGateway extends CookieBasedCartGateway {
|
|
14
|
+
config = {
|
|
15
|
+
cookieName: REPLO_CART_COOKIE_NAME,
|
|
16
|
+
lineMergeFn: stripeLineMergeFn,
|
|
17
|
+
lineIdGenerator: stripeLineIdGenerator,
|
|
18
|
+
cartIdGenerator: stripeCartIdGenerator,
|
|
19
|
+
gatewayName: "Stripe"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function createStripeCartGateway() {
|
|
23
|
+
return new StripeCartGateway();
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
createStripeCartGateway
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=stripe-cart-gateway.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../cart/gateways/stripe-cart-gateway.ts"],
|
|
4
|
+
"sourcesContent": ["\"use server\";\n\nimport type { CartLine, CartLinePayload } from \"../cart-types\";\n\nimport { REPLO_CART_COOKIE_NAME } from \"./cart-constants\";\nimport { CookieBasedCartGateway } from \"./cookie-cart-gateway\";\n\n/**\n * Merges lines by merchandise ID only (unlike default which also checks selling plan)\n */\nfunction stripeLineMergeFn(\n existingLines: CartLine[],\n newLine: CartLinePayload,\n): number {\n return existingLines.findIndex((line) => line.merchandise?.id === newLine.id);\n}\n\nfunction stripeLineIdGenerator(): string {\n return crypto.randomUUID();\n}\n\nfunction stripeCartIdGenerator(): string {\n return crypto.randomUUID();\n}\n\nclass StripeCartGateway extends CookieBasedCartGateway {\n protected readonly config = {\n cookieName: REPLO_CART_COOKIE_NAME,\n lineMergeFn: stripeLineMergeFn,\n lineIdGenerator: stripeLineIdGenerator,\n cartIdGenerator: stripeCartIdGenerator,\n gatewayName: \"Stripe\",\n };\n}\n\nexport async function createStripeCartGateway(): Promise<StripeCartGateway> {\n return new StripeCartGateway();\n}\n"],
|
|
5
|
+
"mappings": ";AAIA,SAAS,8BAA8B;AACvC,SAAS,8BAA8B;AAKvC,SAAS,kBACP,eACA,SACQ;AACR,SAAO,cAAc,UAAU,CAAC,SAAS,KAAK,aAAa,OAAO,QAAQ,EAAE;AAC9E;AAEA,SAAS,wBAAgC;AACvC,SAAO,OAAO,WAAW;AAC3B;AAEA,SAAS,wBAAgC;AACvC,SAAO,OAAO,WAAW;AAC3B;AAEA,MAAM,0BAA0B,uBAAuB;AAAA,EAClC,SAAS;AAAA,IAC1B,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AACF;AAEA,eAAsB,0BAAsD;AAC1E,SAAO,IAAI,kBAAkB;AAC/B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|