@neowhale/storefront 0.2.43 → 0.2.45

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.
@@ -0,0 +1,669 @@
1
+ interface PixelConfig {
2
+ provider: string;
3
+ pixel_id: string;
4
+ measurement_id?: string;
5
+ }
6
+ interface StorefrontConfig {
7
+ object: 'storefront_config';
8
+ pixels: PixelConfig[];
9
+ theme?: Record<string, unknown>;
10
+ }
11
+
12
+ interface PricingTier {
13
+ id: string;
14
+ unit: string;
15
+ label: string;
16
+ quantity: number;
17
+ sort_order: number;
18
+ default_price: number;
19
+ }
20
+ interface ProductVariation {
21
+ id: string;
22
+ product_id: string;
23
+ name: string;
24
+ sku: string | null;
25
+ price: number;
26
+ stock_quantity: number;
27
+ attributes: Record<string, string>;
28
+ }
29
+ interface Product {
30
+ id: string;
31
+ name: string;
32
+ slug: string;
33
+ sku: string | null;
34
+ description: string | null;
35
+ status: string;
36
+ type: string;
37
+ primary_category_id: string;
38
+ featured_image: string | null;
39
+ image_gallery: string[];
40
+ pricing_data: PricingTier[] | {
41
+ mode?: string;
42
+ tiers?: PricingTier[];
43
+ } | null;
44
+ custom_fields: Record<string, string | null>;
45
+ stock_quantity?: number;
46
+ }
47
+ interface Category {
48
+ id: string;
49
+ name: string;
50
+ slug: string;
51
+ parent_id: string | null;
52
+ description: string | null;
53
+ image_url: string | null;
54
+ sort_order: number;
55
+ product_count?: number;
56
+ }
57
+ interface CategoryTreeNode extends Category {
58
+ children: CategoryTreeNode[];
59
+ }
60
+ interface Review {
61
+ id: string;
62
+ product_id: string;
63
+ customer_id: string | null;
64
+ customer_name: string | null;
65
+ rating: number;
66
+ title: string | null;
67
+ body: string | null;
68
+ status: string;
69
+ created_at: string;
70
+ updated_at: string;
71
+ }
72
+ interface ReviewSummary {
73
+ average_rating: number;
74
+ total_reviews: number;
75
+ rating_distribution: Record<string, number>;
76
+ }
77
+ interface WishlistItem {
78
+ id: string;
79
+ product_id: string;
80
+ product: Product | null;
81
+ added_at: string;
82
+ }
83
+ interface LoyaltyAccount {
84
+ customer_id: string;
85
+ points_balance: number;
86
+ tier: string;
87
+ lifetime_points: number;
88
+ redemption_mode?: 'cash' | 'rewards_only';
89
+ }
90
+ interface LoyaltyReward {
91
+ id: string;
92
+ name: string;
93
+ description: string | null;
94
+ points_cost: number;
95
+ reward_type: string;
96
+ is_active: boolean;
97
+ reward_category?: string;
98
+ reward_product_tier?: string;
99
+ }
100
+ interface LoyaltyTransaction {
101
+ id: string;
102
+ customer_id: string;
103
+ points: number;
104
+ type: string;
105
+ description: string | null;
106
+ created_at: string;
107
+ order_id: string | null;
108
+ }
109
+ interface ShippingMethod {
110
+ id: string;
111
+ name: string;
112
+ description: string | null;
113
+ carrier: string | null;
114
+ estimated_days_min: number | null;
115
+ estimated_days_max: number | null;
116
+ is_active: boolean;
117
+ }
118
+ interface ShippingRate {
119
+ method_id: string;
120
+ method_name: string;
121
+ carrier: string | null;
122
+ rate: number;
123
+ estimated_days_min: number | null;
124
+ estimated_days_max: number | null;
125
+ }
126
+ interface DealValidation {
127
+ valid: boolean;
128
+ code: string;
129
+ deal_id?: string;
130
+ name?: string;
131
+ discount_type: string | null;
132
+ discount_value: number | null;
133
+ apply_to?: string;
134
+ badge_text?: string | null;
135
+ message: string | null;
136
+ }
137
+ /** @deprecated Use DealValidation instead */
138
+ type CouponValidation = DealValidation;
139
+ interface CheckoutSession {
140
+ id: string;
141
+ cart_id: string;
142
+ status: string;
143
+ customer_email: string | null;
144
+ shipping_address: Address | null;
145
+ billing_address: Address | null;
146
+ shipping_method_id: string | null;
147
+ coupon_code: string | null;
148
+ subtotal: number;
149
+ tax_amount: number;
150
+ shipping_amount: number;
151
+ discount_amount: number;
152
+ total: number;
153
+ created_at: string;
154
+ expires_at: string;
155
+ }
156
+ interface Recommendation {
157
+ product: Product;
158
+ score: number;
159
+ reason: string;
160
+ }
161
+ interface CartItem {
162
+ id: string;
163
+ product_id: string;
164
+ product_name: string;
165
+ image_url: string | null;
166
+ quantity: number;
167
+ unit_price: number;
168
+ tier_label: string | null;
169
+ line_total: number;
170
+ }
171
+ interface TaxBreakdown {
172
+ name: string;
173
+ rate: number;
174
+ type: string;
175
+ rate_decimal: number;
176
+ }
177
+ interface Cart {
178
+ id: string;
179
+ items: CartItem[];
180
+ item_count: number;
181
+ subtotal: number;
182
+ tax_rate: number;
183
+ tax_amount: number;
184
+ total: number;
185
+ tax_breakdown: TaxBreakdown[];
186
+ discount_amount: number;
187
+ customer_email: string | null;
188
+ }
189
+ interface Order {
190
+ id: string;
191
+ order_number: string;
192
+ status: string;
193
+ total_amount: number;
194
+ subtotal: number;
195
+ tax_amount: number;
196
+ discount_amount: number;
197
+ item_count?: number;
198
+ created_at: string;
199
+ payment_status?: string;
200
+ fulfillment_status?: string;
201
+ items?: OrderItem[];
202
+ }
203
+ interface OrderItem {
204
+ id: string;
205
+ product_name: string;
206
+ quantity: number;
207
+ unit_price?: number;
208
+ cost_per_unit?: number;
209
+ line_total: number;
210
+ }
211
+ interface Customer {
212
+ id: string;
213
+ first_name: string;
214
+ last_name: string;
215
+ email: string | null;
216
+ phone: string | null;
217
+ loyalty_points: number;
218
+ loyalty_tier: string;
219
+ total_spent: number;
220
+ total_orders: number;
221
+ lifetime_value?: number;
222
+ street_address?: string | null;
223
+ city?: string | null;
224
+ state?: string | null;
225
+ postal_code?: string | null;
226
+ date_of_birth?: string | null;
227
+ created_at?: string;
228
+ is_staff?: boolean;
229
+ email_consent?: boolean;
230
+ sms_consent?: boolean;
231
+ }
232
+ interface Address {
233
+ firstName: string;
234
+ lastName: string;
235
+ address: string;
236
+ city: string;
237
+ state: string;
238
+ zip: string;
239
+ country: string;
240
+ }
241
+ interface PaymentData {
242
+ payment_method: 'card' | 'cash';
243
+ opaque_data?: {
244
+ dataDescriptor: string;
245
+ dataValue: string;
246
+ };
247
+ billTo?: Address;
248
+ shipTo?: Address;
249
+ }
250
+ interface CustomerAnalytics {
251
+ customer_id: string;
252
+ customer_name: string;
253
+ total_orders: number;
254
+ lifetime_revenue: number;
255
+ avg_order_value: number;
256
+ ltv_tier: string;
257
+ rfm_segment: string;
258
+ churn_risk: string;
259
+ last_order_date: string;
260
+ recency_days: number;
261
+ }
262
+ interface Location {
263
+ id: string;
264
+ name: string;
265
+ address?: string;
266
+ city?: string;
267
+ state?: string;
268
+ zip?: string;
269
+ phone?: string;
270
+ is_active?: boolean;
271
+ }
272
+ interface SendCodeResponse {
273
+ sent: boolean;
274
+ }
275
+ interface VerifyCodeResponse {
276
+ object: string;
277
+ token_hash: string;
278
+ needs_profile: boolean;
279
+ customer: Customer | null;
280
+ }
281
+ interface StorefrontSession {
282
+ id: string;
283
+ store_id: string;
284
+ customer_id?: string;
285
+ started_at: string;
286
+ last_active_at: string;
287
+ latitude?: number;
288
+ longitude?: number;
289
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
290
+ geolocation_accuracy?: number;
291
+ }
292
+ interface ListResponse<T> {
293
+ object: 'list';
294
+ data: T[];
295
+ has_more: boolean;
296
+ cursors?: {
297
+ before?: string;
298
+ after?: string;
299
+ };
300
+ url?: string;
301
+ }
302
+ interface WhaleStorefrontConfig {
303
+ /** Store UUID */
304
+ storeId: string;
305
+ /** API key (wk_live_... or wk_test_...) */
306
+ apiKey: string;
307
+ /** Gateway base URL. Defaults to https://whale-gateway.fly.dev */
308
+ gatewayUrl?: string;
309
+ /** Client-side proxy path. Defaults to /api/gw */
310
+ proxyPath?: string;
311
+ /** Media signing secret for image/video proxy */
312
+ mediaSigningSecret?: string;
313
+ /** Supabase host for media URL detection */
314
+ supabaseHost?: string;
315
+ /** localStorage key prefix. Defaults to "whale" */
316
+ storagePrefix?: string;
317
+ /** Analytics session TTL in ms. Defaults to 30 minutes */
318
+ sessionTtl?: number;
319
+ /** Enable debug logging */
320
+ debug?: boolean;
321
+ /**
322
+ * Master toggle for all tracking (analytics, pixels, behavioral).
323
+ * When false every tracking call is a no-op.
324
+ * Defaults to true; can also be set via NEXT_PUBLIC_TRACKING_ENABLED env var.
325
+ */
326
+ trackingEnabled?: boolean;
327
+ /**
328
+ * Fraction of sessions that record full behavioral replays (0 – 1).
329
+ * 0 = never, 1 = every session. Defaults to 0.1 (10 %).
330
+ * Can also be set via NEXT_PUBLIC_RECORDING_RATE env var.
331
+ */
332
+ recordingRate?: number;
333
+ }
334
+ type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search' | 'lead' | 'cta_click';
335
+ interface QRLandingPage {
336
+ title: string | null;
337
+ description: string | null;
338
+ image_url: string | null;
339
+ cta_text: string | null;
340
+ cta_url: string | null;
341
+ background_color: string | null;
342
+ text_color: string | null;
343
+ layout: string | null;
344
+ theme: string | null;
345
+ video_url: string | null;
346
+ gallery_urls: string[] | null;
347
+ }
348
+ interface QRLandingStore {
349
+ id: string;
350
+ name: string;
351
+ logo_url: string | null;
352
+ banner_url: string | null;
353
+ tagline: string | null;
354
+ brand_colors: Record<string, string> | null;
355
+ theme: Record<string, unknown> | null;
356
+ }
357
+ interface QRLandingData {
358
+ object: 'qr_landing_page';
359
+ qr_code: {
360
+ id: string;
361
+ code: string;
362
+ name: string;
363
+ type: string;
364
+ destination_url: string;
365
+ landing_page: QRLandingPage;
366
+ brand_color: string | null;
367
+ logo_url: string | null;
368
+ campaign_name: string | null;
369
+ tags: string[] | null;
370
+ };
371
+ store: QRLandingStore | null;
372
+ product: Record<string, unknown> | null;
373
+ coa: {
374
+ url: string;
375
+ viewer_url?: string | null;
376
+ document_name: string;
377
+ } | null;
378
+ landing_page: LandingPageConfig | null;
379
+ }
380
+ interface LandingSection {
381
+ id: string;
382
+ type: 'hero' | 'collage_hero' | 'text' | 'image' | 'video' | 'gallery' | 'cta' | 'stats' | 'product_card' | 'coa_viewer' | 'social_links' | 'divider' | 'lead_capture' | 'testimonials' | 'value_stack' | 'faq' | 'trust_badges' | 'countdown' | 'custom';
383
+ content: Record<string, unknown>;
384
+ order: number;
385
+ config?: Record<string, unknown>;
386
+ }
387
+ interface LandingPageConfig {
388
+ id: string;
389
+ slug: string;
390
+ name: string;
391
+ status: string;
392
+ layout: string;
393
+ theme: string;
394
+ sections: LandingSection[];
395
+ background_color: string | null;
396
+ text_color: string | null;
397
+ accent_color: string | null;
398
+ font_family: string | null;
399
+ custom_css: string | null;
400
+ page_title: string | null;
401
+ og_title: string | null;
402
+ og_description: string | null;
403
+ og_image_url: string | null;
404
+ total_views: number;
405
+ unique_views: number;
406
+ }
407
+ interface LandingPageRenderData {
408
+ object: 'landing_page';
409
+ landing_page: LandingPageConfig;
410
+ store: QRLandingStore | null;
411
+ product: Record<string, unknown> | null;
412
+ coa: {
413
+ url: string;
414
+ viewer_url?: string | null;
415
+ document_name: string;
416
+ } | null;
417
+ }
418
+ interface ReferralEnrollment {
419
+ object: 'referral_enrollment';
420
+ affiliate_id: string;
421
+ referral_code: string;
422
+ share_url: string;
423
+ qr_code_id: string;
424
+ wallet_pass_id: string;
425
+ }
426
+ interface ReferralStatus {
427
+ object: 'referral_status';
428
+ enrolled: boolean;
429
+ referral_code: string | null;
430
+ share_url: string | null;
431
+ total_referrals: number;
432
+ pending_referrals: number;
433
+ points_earned: number;
434
+ wallet_pass_id: string | null;
435
+ referred_by: {
436
+ affiliate_id: string;
437
+ referral_code: string;
438
+ referrer_name: string;
439
+ } | null;
440
+ }
441
+
442
+ /**
443
+ * Extended query methods and static utilities for WhaleClient.
444
+ * Extracted from client.ts to keep the core under 300 lines.
445
+ */
446
+
447
+ /**
448
+ * Base64url-encode a URL string (works in both Node and browser).
449
+ */
450
+ declare function encodeBase64Url(url: string): string;
451
+ /**
452
+ * Quad-FNV (128-bit) media signing — matches gateway's media-signature.ts.
453
+ */
454
+ declare function signMedia(signingSecret: string, encodedUrl: string, w: string, q: string, f: string): string;
455
+
456
+ declare class WhaleClient {
457
+ readonly storeId: string;
458
+ readonly apiKey: string;
459
+ readonly gatewayUrl: string;
460
+ readonly proxyPath: string;
461
+ private _sessionToken;
462
+ constructor(config: WhaleStorefrontConfig);
463
+ setSessionToken(token: string | null): void;
464
+ getSessionToken(): string | null;
465
+ private get baseUrl();
466
+ private request;
467
+ listProducts(params?: {
468
+ limit?: number;
469
+ starting_after?: string;
470
+ status?: string;
471
+ }): Promise<ListResponse<Product>>;
472
+ getProduct(id: string): Promise<Product>;
473
+ getAllProducts(options?: {
474
+ status?: string;
475
+ maxPages?: number;
476
+ revalidate?: number;
477
+ filter?: (product: Product) => boolean;
478
+ }): Promise<Product[]>;
479
+ createCart(customerEmail?: string): Promise<Cart>;
480
+ getCart(cartId: string): Promise<Cart>;
481
+ addToCart(cartId: string, productId: string, quantity: number, options?: {
482
+ tier?: string;
483
+ unitPrice?: number;
484
+ }): Promise<CartItem>;
485
+ updateCartItem(cartId: string, itemId: string, quantity: number): Promise<Cart>;
486
+ removeCartItem(cartId: string, itemId: string): Promise<void>;
487
+ checkout(cartId: string, customerEmail?: string, payment?: PaymentData, referralCode?: string): Promise<Order>;
488
+ findCustomer(query: string): Promise<Customer[]>;
489
+ getCustomer(id: string): Promise<Customer>;
490
+ createCustomer(data: {
491
+ first_name: string;
492
+ last_name: string;
493
+ email: string;
494
+ phone?: string;
495
+ }): Promise<Customer>;
496
+ updateProfile(customerId: string, data: {
497
+ first_name: string;
498
+ last_name: string;
499
+ phone?: string;
500
+ date_of_birth?: string;
501
+ }): Promise<Customer>;
502
+ listOrders(params?: {
503
+ customer_id?: string;
504
+ limit?: number;
505
+ starting_after?: string;
506
+ }): Promise<ListResponse<Order>>;
507
+ getOrder(id: string): Promise<Order>;
508
+ getCustomerOrders(customerId: string): Promise<Order[]>;
509
+ sendCode(email: string): Promise<SendCodeResponse>;
510
+ verifyCode(email: string, code: string): Promise<VerifyCodeResponse>;
511
+ getCustomerAnalytics(customerId: string, customerName?: string): Promise<CustomerAnalytics | null>;
512
+ listLocations(): Promise<ListResponse<Location>>;
513
+ getCOAEmbedUrl(productId: string): string;
514
+ fetchStorefrontConfig(): Promise<StorefrontConfig>;
515
+ /** Fetch QR landing page data (public, no auth needed). */
516
+ fetchQRLandingData(code: string): Promise<QRLandingData>;
517
+ /** Fetch landing page data by slug (public, no auth needed). */
518
+ fetchLandingPage(slug: string): Promise<LandingPageRenderData>;
519
+ createSession(params: {
520
+ visitor_id?: string;
521
+ user_agent?: string;
522
+ referrer?: string;
523
+ page_url?: string;
524
+ device?: string;
525
+ utm_source?: string;
526
+ utm_medium?: string;
527
+ utm_campaign?: string;
528
+ utm_content?: string;
529
+ utm_term?: string;
530
+ gclid?: string;
531
+ fbclid?: string;
532
+ latitude?: number;
533
+ longitude?: number;
534
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
535
+ geolocation_accuracy?: number;
536
+ }): Promise<StorefrontSession>;
537
+ updateSession(sessionId: string, params: {
538
+ last_active_at?: string;
539
+ customer_id?: string;
540
+ customer_first_name?: string;
541
+ customer_last_name?: string;
542
+ cart_id?: string;
543
+ cart_item_count?: number;
544
+ cart_total?: number;
545
+ order_id?: string;
546
+ fingerprint_id?: string;
547
+ status?: string;
548
+ current_page?: string;
549
+ latitude?: number;
550
+ longitude?: number;
551
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
552
+ geolocation_accuracy?: number;
553
+ }): Promise<StorefrontSession>;
554
+ trackEvent(params: {
555
+ session_id: string;
556
+ event_type: EventType;
557
+ event_data?: Record<string, unknown>;
558
+ visitor_id?: string;
559
+ }): Promise<void>;
560
+ createCheckoutSession(params: {
561
+ cart_id: string;
562
+ customer_email?: string;
563
+ shipping_address?: Address;
564
+ billing_address?: Address;
565
+ shipping_method_id?: string;
566
+ coupon_code?: string;
567
+ referral_code?: string;
568
+ loyalty_reward_id?: string;
569
+ selected_product_id?: string;
570
+ visitor_id?: string;
571
+ session_id?: string;
572
+ }): Promise<CheckoutSession>;
573
+ getCheckoutSession(sessionId: string): Promise<CheckoutSession>;
574
+ updateCheckoutSession(sessionId: string, params: {
575
+ customer_email?: string;
576
+ shipping_address?: Address;
577
+ billing_address?: Address;
578
+ shipping_method_id?: string;
579
+ coupon_code?: string;
580
+ }): Promise<CheckoutSession>;
581
+ completeCheckout(sessionId: string, payment?: PaymentData, opts?: {
582
+ loyalty_reward_id?: string;
583
+ selected_product_id?: string;
584
+ }): Promise<Order>;
585
+ searchProducts(params: {
586
+ query: string;
587
+ category_id?: string;
588
+ min_price?: number;
589
+ max_price?: number;
590
+ sort_by?: string;
591
+ sort_order?: 'asc' | 'desc';
592
+ limit?: number;
593
+ starting_after?: string;
594
+ }): Promise<ListResponse<Product>>;
595
+ listCategories(): Promise<ListResponse<Category>>;
596
+ getCategory(id: string): Promise<Category>;
597
+ getLoyaltyAccount(customerId: string): Promise<LoyaltyAccount>;
598
+ listLoyaltyRewards(): Promise<ListResponse<LoyaltyReward>>;
599
+ listLoyaltyTransactions(customerId: string, params?: {
600
+ limit?: number;
601
+ starting_after?: string;
602
+ }): Promise<ListResponse<LoyaltyTransaction>>;
603
+ listLoyaltyProducts(params: {
604
+ category: string;
605
+ location_id: string;
606
+ tier?: string;
607
+ }): Promise<ListResponse<Product>>;
608
+ redeemLoyaltyReward(customerId: string, rewardId: string): Promise<{
609
+ success: boolean;
610
+ points_remaining: number;
611
+ }>;
612
+ listProductReviews(productId: string, params?: {
613
+ limit?: number;
614
+ starting_after?: string;
615
+ sort_by?: 'created_at' | 'rating';
616
+ sort_order?: 'asc' | 'desc';
617
+ }): Promise<ListResponse<Review> & {
618
+ summary?: ReviewSummary;
619
+ }>;
620
+ submitReview(productId: string, data: {
621
+ rating: number;
622
+ title?: string;
623
+ body?: string;
624
+ customer_name?: string;
625
+ }): Promise<Review>;
626
+ listWishlistItems(customerId: string): Promise<ListResponse<WishlistItem>>;
627
+ addWishlistItem(customerId: string, productId: string): Promise<WishlistItem>;
628
+ removeWishlistItem(customerId: string, productId: string): Promise<void>;
629
+ getRecommendations(params?: {
630
+ product_id?: string;
631
+ customer_id?: string;
632
+ limit?: number;
633
+ type?: 'similar' | 'frequently_bought_together' | 'personalized';
634
+ }): Promise<{
635
+ data: Recommendation[];
636
+ }>;
637
+ getLocation(id: string): Promise<Location>;
638
+ listShippingMethods(): Promise<ListResponse<ShippingMethod>>;
639
+ calculateShippingRates(params: {
640
+ cart_id: string;
641
+ shipping_address: Address;
642
+ }): Promise<{
643
+ data: ShippingRate[];
644
+ }>;
645
+ validateDeal(code: string, params?: {
646
+ cart_id?: string;
647
+ }): Promise<DealValidation>;
648
+ applyDeal(cartId: string, code: string): Promise<Cart>;
649
+ removeDeal(cartId: string): Promise<Cart>;
650
+ /** @deprecated Use validateDeal instead */
651
+ validateCoupon(code: string, params?: {
652
+ cart_id?: string;
653
+ }): Promise<DealValidation>;
654
+ /** @deprecated Use applyDeal instead */
655
+ applyCoupon(cartId: string, code: string): Promise<Cart>;
656
+ /** @deprecated Use removeDeal instead */
657
+ removeCoupon(cartId: string): Promise<Cart>;
658
+ enrollReferral(customerId: string): Promise<ReferralEnrollment>;
659
+ getReferralStatus(customerId: string): Promise<ReferralStatus>;
660
+ attributeReferral(customerId: string, referralCode: string): Promise<{
661
+ success: boolean;
662
+ affiliate_id?: string;
663
+ error?: string;
664
+ }>;
665
+ static encodeBase64Url: typeof encodeBase64Url;
666
+ static signMedia: typeof signMedia;
667
+ }
668
+
669
+ export { type Address as A, type StorefrontSession as B, type Cart as C, type DealValidation as D, type EventType as E, type WhaleStorefrontConfig as F, type WishlistItem as G, type ReferralStatus as H, type ReferralEnrollment as I, type LandingPageConfig as L, type Order as O, type PaymentData as P, type QRLandingData as Q, type Recommendation as R, type SendCodeResponse as S, type TaxBreakdown as T, type VerifyCodeResponse as V, WhaleClient as W, type CartItem as a, type Category as b, type CategoryTreeNode as c, type CheckoutSession as d, type CouponValidation as e, type Customer as f, type CustomerAnalytics as g, type LandingPageRenderData as h, type LandingSection as i, type ListResponse as j, type Location as k, type LoyaltyAccount as l, type LoyaltyReward as m, type LoyaltyTransaction as n, type OrderItem as o, type PixelConfig as p, type PricingTier as q, type Product as r, type ProductVariation as s, type QRLandingPage as t, type QRLandingStore as u, type Review as v, type ReviewSummary as w, type ShippingMethod as x, type ShippingRate as y, type StorefrontConfig as z };