@shoppexio/storefront 1.0.57 → 1.0.59

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.
Files changed (99) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/LICENSE +21 -0
  3. package/README.md +96 -180
  4. package/dist/chunk-ZVOFFURI.js +15364 -0
  5. package/dist/chunk-ZVOFFURI.js.map +1 -0
  6. package/dist/customer.cjs +16013 -1
  7. package/dist/customer.cjs.map +1 -1
  8. package/dist/{headless-customer.d.ts → customer.d.cts} +74 -61
  9. package/dist/customer.d.ts +336 -10
  10. package/dist/customer.js +726 -2
  11. package/dist/customer.js.map +1 -1
  12. package/dist/index.cjs +21533 -0
  13. package/dist/index.cjs.map +1 -0
  14. package/dist/index.d.cts +1979 -0
  15. package/dist/index.d.ts +1859 -49
  16. package/dist/index.js +6139 -0
  17. package/dist/index.js.map +1 -0
  18. package/package.json +18 -37
  19. package/dist/core/attribution.d.ts +0 -26
  20. package/dist/core/attribution.d.ts.map +0 -1
  21. package/dist/core/cache.d.ts +0 -26
  22. package/dist/core/cache.d.ts.map +0 -1
  23. package/dist/core/client.d.ts +0 -18
  24. package/dist/core/client.d.ts.map +0 -1
  25. package/dist/core/config.d.ts +0 -10
  26. package/dist/core/config.d.ts.map +0 -1
  27. package/dist/core/endpoint.d.ts +0 -2
  28. package/dist/core/endpoint.d.ts.map +0 -1
  29. package/dist/core/errors.d.ts +0 -34
  30. package/dist/core/errors.d.ts.map +0 -1
  31. package/dist/core/telemetry.d.ts +0 -20
  32. package/dist/core/telemetry.d.ts.map +0 -1
  33. package/dist/core/typed-client.d.ts +0 -15
  34. package/dist/core/typed-client.d.ts.map +0 -1
  35. package/dist/customer.d.ts.map +0 -1
  36. package/dist/headless-customer.d.ts.map +0 -1
  37. package/dist/index.d.ts.map +0 -1
  38. package/dist/modules/affiliates.d.ts +0 -15
  39. package/dist/modules/affiliates.d.ts.map +0 -1
  40. package/dist/modules/analytics.d.ts +0 -2
  41. package/dist/modules/analytics.d.ts.map +0 -1
  42. package/dist/modules/cart.d.ts +0 -62
  43. package/dist/modules/cart.d.ts.map +0 -1
  44. package/dist/modules/checkout.d.ts +0 -133
  45. package/dist/modules/checkout.d.ts.map +0 -1
  46. package/dist/modules/coupons.d.ts +0 -3
  47. package/dist/modules/coupons.d.ts.map +0 -1
  48. package/dist/modules/customer.d.ts +0 -147
  49. package/dist/modules/customer.d.ts.map +0 -1
  50. package/dist/modules/invoices.d.ts +0 -6
  51. package/dist/modules/invoices.d.ts.map +0 -1
  52. package/dist/modules/navigation.d.ts +0 -20
  53. package/dist/modules/navigation.d.ts.map +0 -1
  54. package/dist/modules/pages.d.ts +0 -10
  55. package/dist/modules/pages.d.ts.map +0 -1
  56. package/dist/modules/presence.d.ts +0 -12
  57. package/dist/modules/presence.d.ts.map +0 -1
  58. package/dist/modules/products.d.ts +0 -16
  59. package/dist/modules/products.d.ts.map +0 -1
  60. package/dist/modules/reviews.d.ts +0 -4
  61. package/dist/modules/reviews.d.ts.map +0 -1
  62. package/dist/modules/search.d.ts +0 -10
  63. package/dist/modules/search.d.ts.map +0 -1
  64. package/dist/modules/store.d.ts +0 -11
  65. package/dist/modules/store.d.ts.map +0 -1
  66. package/dist/modules/theme.d.ts +0 -27
  67. package/dist/modules/theme.d.ts.map +0 -1
  68. package/dist/shoppex.esm.js +0 -3
  69. package/dist/shoppex.esm.js.map +0 -1
  70. package/dist/shoppex.umd.js +0 -2
  71. package/dist/shoppex.umd.js.map +0 -1
  72. package/dist/types/api.d.ts +0 -757
  73. package/dist/types/api.d.ts.map +0 -1
  74. package/dist/types/cart.d.ts +0 -239
  75. package/dist/types/cart.d.ts.map +0 -1
  76. package/dist/types/config.d.ts +0 -18
  77. package/dist/types/config.d.ts.map +0 -1
  78. package/dist/types/index.d.ts +0 -7
  79. package/dist/types/index.d.ts.map +0 -1
  80. package/dist/types/theme-config.d.ts +0 -109
  81. package/dist/types/theme-config.d.ts.map +0 -1
  82. package/dist/utils/cart-line-id.d.ts +0 -5
  83. package/dist/utils/cart-line-id.d.ts.map +0 -1
  84. package/dist/utils/format.d.ts +0 -6
  85. package/dist/utils/format.d.ts.map +0 -1
  86. package/dist/utils/requested-currency.d.ts +0 -3
  87. package/dist/utils/requested-currency.d.ts.map +0 -1
  88. package/dist/utils/storage.d.ts +0 -10
  89. package/dist/utils/storage.d.ts.map +0 -1
  90. package/dist/utils/storefront-catalog.d.ts +0 -5
  91. package/dist/utils/storefront-catalog.d.ts.map +0 -1
  92. package/dist/utils/storefront-contact.d.ts +0 -32
  93. package/dist/utils/storefront-contact.d.ts.map +0 -1
  94. package/dist/utils/storefront-custom-fields.d.ts +0 -13
  95. package/dist/utils/storefront-custom-fields.d.ts.map +0 -1
  96. package/dist/utils/storefront-search.d.ts +0 -22
  97. package/dist/utils/storefront-search.d.ts.map +0 -1
  98. package/dist/utils/storefront-stock.d.ts +0 -14
  99. package/dist/utils/storefront-stock.d.ts.map +0 -1
@@ -1,5 +1,14 @@
1
- import { CustomerLoyaltyRedeemWire, CustomerLoyaltyWire, CustomerPortalAffiliateSummaryWire, CustomerPortalAffiliateCreateLinkWire, CustomerPortalAvatarWire, CustomerPortalDashboardWire, CustomerPortalEmailPreferencesUpdateWire, CustomerPortalEmailPreferencesWire, CustomerPortalFavoriteMutationWire, CustomerPortalFavoritesWire, CustomerPortalLicenseResetWire, CustomerPortalLicenseRenewalWire, CustomerPortalNotificationPreferencesWire, CustomerPortalOrderReviewWire, CustomerPortalProfileUpdateWire, CustomerPortalSubscriptionBillingHistoryWire, CustomerPortalSubscriptionCancelWire, CustomerPortalSubscriptionStatusWire, CustomerPortalSupportCreateWire, CustomerPortalSupportTicketDetailWire, CustomerPortalWalletTopupQuoteWire, CustomerPortalWalletTopupResultWire, CustomerReplacementEligibilityWire, CustomerReplacementRequestWire, CustomerResellerApiKeysWire, CustomerResellerCatalogWire, CustomerResellerEnrollmentWire, CustomerResellerOrderWire, CustomerResellerOrdersWire, CustomerResellerQuoteWire, CustomerResellerSummaryWire, CustomerResellerTopupWire, CustomerResellerWalletWire, CustomerWarrantyClaimWire, CustomerWarrantyListWire } from '@shoppex/contracts/customer-portal-wire';
2
- export interface HeadlessCustomerClientConfig {
1
+ import { CustomerPortalAffiliateSummaryWire, CustomerPortalAffiliateCreateLinkWire, CustomerPortalAffiliateStatsWire, CustomerPortalAvatarWire, CustomerPortalDashboardWire, CustomerPortalProfileUpdateWire, CustomerPortalEmailPreferencesWire, CustomerPortalEmailPreferencesUpdateWire, CustomerPortalNotificationPreferencesWire, CustomerPortalOrderReviewWire, CustomerReplacementEligibilityWire, CustomerReplacementRequestWire, CustomerPortalLicenseResetWire, CustomerPortalLicenseRenewalWire, CustomerPortalWalletTopupQuoteWire, CustomerPortalWalletTopupResultWire, CustomerPortalSubscriptionBillingHistoryWire, CustomerPortalSubscriptionCancelWire, CustomerPortalSubscriptionStatusWire, CustomerLoyaltyWire, CustomerLoyaltyRedeemWire, CustomerWarrantyListWire, CustomerWarrantyClaimWire, CustomerPortalFavoritesWire, CustomerPortalFavoriteMutationWire, CustomerPortalSupportCreateWire, CustomerPortalSupportTicketDetailWire, CustomerResellerSummaryWire, CustomerResellerEnrollmentWire, CustomerResellerCatalogWire, CustomerResellerQuoteWire, CustomerResellerOrdersWire, CustomerResellerOrderWire, CustomerResellerWalletWire, CustomerResellerTopupWire, CustomerResellerApiKeysWire } from '@shoppex/contracts/customer-portal-wire';
2
+
3
+ /**
4
+ * Browser client for a customer account hosted outside Shoppex.
5
+ *
6
+ * The publishable key identifies the merchant and the dashboard origin
7
+ * allowlist authorizes the browser origin. OTP verification returns a separate
8
+ * short-lived `hcs_` token; the SDK never exposes Shoppex's BetterAuth token.
9
+ */
10
+
11
+ interface HeadlessCustomerClientConfig {
3
12
  /** Shop slug or Shoppex storefront domain. */
4
13
  shop: string;
5
14
  /** Existing Headless Checkout publishable key (`pk_live_` / `pk_test_`). */
@@ -13,21 +22,21 @@ export interface HeadlessCustomerClientConfig {
13
22
  /** Optional persistent storage override. Defaults to browser localStorage. */
14
23
  persistentStorage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
15
24
  }
16
- export interface HeadlessCustomerSession {
25
+ interface HeadlessCustomerSession {
17
26
  accessToken: string;
18
27
  expiresAt: string;
19
28
  }
20
- export interface HeadlessCustomerVerifyOptions {
29
+ interface HeadlessCustomerVerifyOptions {
21
30
  /** Persist the customer session across browser restarts for up to 30 days. */
22
31
  rememberMe?: boolean;
23
32
  }
24
- export interface HeadlessCustomerOrdersQuery {
33
+ interface HeadlessCustomerOrdersQuery {
25
34
  page?: number;
26
35
  limit?: number;
27
36
  status?: string;
28
37
  search?: string;
29
38
  }
30
- export interface HeadlessCustomerDownload {
39
+ interface HeadlessCustomerDownload {
31
40
  blob: Blob;
32
41
  filename: string | null;
33
42
  contentType: string | null;
@@ -36,96 +45,97 @@ type HeadlessCustomerDashboardDeliverable = CustomerPortalDashboardWire['deliver
36
45
  /** Pass this value with `invoice_uniqid` to `customer.download()`. */
37
46
  downloadIndex?: number | null;
38
47
  };
39
- export type HeadlessCustomerDashboard = Omit<CustomerPortalDashboardWire, 'deliverables'> & {
48
+ type HeadlessCustomerDashboard = Omit<CustomerPortalDashboardWire, 'deliverables'> & {
40
49
  deliverables: HeadlessCustomerDashboardDeliverable[];
41
50
  };
42
- export type HeadlessCustomerProfileUpdate = CustomerPortalProfileUpdateWire;
43
- export type HeadlessCustomerAvatar = CustomerPortalAvatarWire;
44
- export type HeadlessCustomerEmailPreferences = CustomerPortalEmailPreferencesWire;
45
- export type HeadlessCustomerEmailPreferencesUpdate = CustomerPortalEmailPreferencesUpdateWire;
46
- export type HeadlessCustomerNotificationPreferences = CustomerPortalNotificationPreferencesWire;
47
- export type HeadlessCustomerOrderReview = CustomerPortalOrderReviewWire;
48
- export type HeadlessCustomerFavorites = CustomerPortalFavoritesWire;
49
- export type HeadlessCustomerFavoriteMutation = CustomerPortalFavoriteMutationWire;
50
- export type HeadlessCustomerAffiliate = CustomerPortalAffiliateSummaryWire;
51
- export type HeadlessCustomerAffiliateLink = CustomerPortalAffiliateCreateLinkWire;
52
- export type HeadlessCustomerTicket = CustomerPortalSupportTicketDetailWire;
53
- export type HeadlessCustomerTicketCreateResult = CustomerPortalSupportCreateWire;
54
- export type HeadlessCustomerLicenseReset = CustomerPortalLicenseResetWire;
55
- export type HeadlessCustomerLicenseRenewal = CustomerPortalLicenseRenewalWire;
56
- export type HeadlessCustomerWalletTopupQuote = CustomerPortalWalletTopupQuoteWire;
57
- export type HeadlessCustomerWalletTopup = CustomerPortalWalletTopupResultWire;
58
- export type HeadlessCustomerSubscriptionBillingHistory = CustomerPortalSubscriptionBillingHistoryWire;
59
- export type HeadlessCustomerSubscriptionCancel = CustomerPortalSubscriptionCancelWire;
60
- export type HeadlessCustomerSubscriptionStatus = CustomerPortalSubscriptionStatusWire;
61
- export type HeadlessCustomerLoyalty = CustomerLoyaltyWire;
62
- export type HeadlessCustomerLoyaltyRedeem = CustomerLoyaltyRedeemWire;
63
- export type HeadlessCustomerWarranties = CustomerWarrantyListWire;
64
- export type HeadlessCustomerWarrantyClaim = CustomerWarrantyClaimWire;
65
- export type HeadlessCustomerReplacementEligibility = CustomerReplacementEligibilityWire;
66
- export type HeadlessCustomerReplacementRequest = CustomerReplacementRequestWire;
67
- export type HeadlessCustomerReseller = CustomerResellerSummaryWire;
68
- export type HeadlessCustomerResellerEnrollment = CustomerResellerEnrollmentWire;
69
- export type HeadlessCustomerResellerCatalog = CustomerResellerCatalogWire;
70
- export type HeadlessCustomerResellerQuote = CustomerResellerQuoteWire;
71
- export type HeadlessCustomerResellerOrders = CustomerResellerOrdersWire;
72
- export type HeadlessCustomerResellerOrder = CustomerResellerOrderWire;
73
- export type HeadlessCustomerResellerWallet = CustomerResellerWalletWire;
74
- export type HeadlessCustomerResellerApiKeys = CustomerResellerApiKeysWire;
75
- export type HeadlessCustomerResellerTopup = CustomerResellerTopupWire;
76
- export interface HeadlessCustomerTicketInput {
51
+ type HeadlessCustomerProfileUpdate = CustomerPortalProfileUpdateWire;
52
+ type HeadlessCustomerAvatar = CustomerPortalAvatarWire;
53
+ type HeadlessCustomerEmailPreferences = CustomerPortalEmailPreferencesWire;
54
+ type HeadlessCustomerEmailPreferencesUpdate = CustomerPortalEmailPreferencesUpdateWire;
55
+ type HeadlessCustomerNotificationPreferences = CustomerPortalNotificationPreferencesWire;
56
+ type HeadlessCustomerOrderReview = CustomerPortalOrderReviewWire;
57
+ type HeadlessCustomerFavorites = CustomerPortalFavoritesWire;
58
+ type HeadlessCustomerFavoriteMutation = CustomerPortalFavoriteMutationWire;
59
+ type HeadlessCustomerAffiliate = CustomerPortalAffiliateSummaryWire;
60
+ type HeadlessCustomerAffiliateStats = CustomerPortalAffiliateStatsWire;
61
+ type HeadlessCustomerAffiliateLink = CustomerPortalAffiliateCreateLinkWire;
62
+ type HeadlessCustomerTicket = CustomerPortalSupportTicketDetailWire;
63
+ type HeadlessCustomerTicketCreateResult = CustomerPortalSupportCreateWire;
64
+ type HeadlessCustomerLicenseReset = CustomerPortalLicenseResetWire;
65
+ type HeadlessCustomerLicenseRenewal = CustomerPortalLicenseRenewalWire;
66
+ type HeadlessCustomerWalletTopupQuote = CustomerPortalWalletTopupQuoteWire;
67
+ type HeadlessCustomerWalletTopup = CustomerPortalWalletTopupResultWire;
68
+ type HeadlessCustomerSubscriptionBillingHistory = CustomerPortalSubscriptionBillingHistoryWire;
69
+ type HeadlessCustomerSubscriptionCancel = CustomerPortalSubscriptionCancelWire;
70
+ type HeadlessCustomerSubscriptionStatus = CustomerPortalSubscriptionStatusWire;
71
+ type HeadlessCustomerLoyalty = CustomerLoyaltyWire;
72
+ type HeadlessCustomerLoyaltyRedeem = CustomerLoyaltyRedeemWire;
73
+ type HeadlessCustomerWarranties = CustomerWarrantyListWire;
74
+ type HeadlessCustomerWarrantyClaim = CustomerWarrantyClaimWire;
75
+ type HeadlessCustomerReplacementEligibility = CustomerReplacementEligibilityWire;
76
+ type HeadlessCustomerReplacementRequest = CustomerReplacementRequestWire;
77
+ type HeadlessCustomerReseller = CustomerResellerSummaryWire;
78
+ type HeadlessCustomerResellerEnrollment = CustomerResellerEnrollmentWire;
79
+ type HeadlessCustomerResellerCatalog = CustomerResellerCatalogWire;
80
+ type HeadlessCustomerResellerQuote = CustomerResellerQuoteWire;
81
+ type HeadlessCustomerResellerOrders = CustomerResellerOrdersWire;
82
+ type HeadlessCustomerResellerOrder = CustomerResellerOrderWire;
83
+ type HeadlessCustomerResellerWallet = CustomerResellerWalletWire;
84
+ type HeadlessCustomerResellerApiKeys = CustomerResellerApiKeysWire;
85
+ type HeadlessCustomerResellerTopup = CustomerResellerTopupWire;
86
+ interface HeadlessCustomerTicketInput {
77
87
  title?: string;
78
88
  message: string;
79
89
  invoiceId?: string;
80
90
  }
81
- export interface HeadlessCustomerOrderReviewInput {
91
+ interface HeadlessCustomerOrderReviewInput {
82
92
  score: 1 | 3 | 5;
83
93
  message: string;
84
94
  }
85
- export interface HeadlessCustomerAffiliateLinkInput {
95
+ interface HeadlessCustomerAffiliateLinkInput {
86
96
  code: string;
87
97
  label: string;
88
98
  requestedRevenuePercent?: number | null;
89
99
  requestedCustomerDiscountPercent?: number | null;
90
100
  }
91
- export interface HeadlessCustomerSubscriptionCancelOptions {
101
+ interface HeadlessCustomerSubscriptionCancelOptions {
92
102
  cancelAtPeriodEnd?: boolean;
93
103
  reason?: string | null;
94
104
  }
95
- export interface HeadlessCustomerEmailPreferencesPatch {
105
+ interface HeadlessCustomerEmailPreferencesPatch {
96
106
  globalUnsubscribed?: boolean;
97
107
  listSubscriptions?: Array<{
98
108
  listId: string;
99
109
  subscribed: boolean;
100
110
  }>;
101
111
  }
102
- export interface HeadlessCustomerNotificationPreferencesPatch {
112
+ interface HeadlessCustomerNotificationPreferencesPatch {
103
113
  orderCreatedEmails?: boolean;
104
114
  orderCompletedEmails?: boolean;
105
115
  paymentIssueEmails?: boolean;
106
116
  }
107
- export interface HeadlessCustomerReplacementOptions {
117
+ interface HeadlessCustomerReplacementOptions {
108
118
  lineItemId?: string | null;
109
119
  reason: string;
110
120
  idempotencyKey?: string;
111
121
  }
112
- export interface HeadlessCustomerResellerCatalogQuery {
122
+ interface HeadlessCustomerResellerCatalogQuery {
113
123
  search?: string;
114
124
  page?: number;
115
125
  perPage?: number;
116
126
  }
117
- export interface HeadlessCustomerResellerOrdersQuery {
127
+ interface HeadlessCustomerResellerOrdersQuery {
118
128
  page?: number;
119
129
  perPage?: number;
120
130
  }
121
- export interface HeadlessCustomerResellerOrderItem {
131
+ interface HeadlessCustomerResellerOrderItem {
122
132
  productId: string;
123
133
  variantId?: string;
124
134
  quantity: number;
125
135
  }
126
136
  /** Public DTOs mirror the producer-owned schemas imported above. Passing each
127
137
  * schema into `request<T>` makes TypeScript reject drift in required fields. */
128
- export interface HeadlessCustomerMe {
138
+ interface HeadlessCustomerMe {
129
139
  customer: {
130
140
  id: string | null;
131
141
  email: string;
@@ -146,7 +156,7 @@ export interface HeadlessCustomerMe {
146
156
  };
147
157
  };
148
158
  }
149
- export interface HeadlessCustomerOrderSummary {
159
+ interface HeadlessCustomerOrderSummary {
150
160
  uniqid: string;
151
161
  status: string;
152
162
  total: string;
@@ -163,7 +173,7 @@ export interface HeadlessCustomerOrderSummary {
163
173
  } | null;
164
174
  }>;
165
175
  }
166
- export interface HeadlessCustomerOrders {
176
+ interface HeadlessCustomerOrders {
167
177
  invoices: HeadlessCustomerOrderSummary[];
168
178
  pagination: {
169
179
  page: number;
@@ -172,7 +182,7 @@ export interface HeadlessCustomerOrders {
172
182
  has_more: boolean;
173
183
  };
174
184
  }
175
- export interface HeadlessCustomerPayment {
185
+ interface HeadlessCustomerPayment {
176
186
  gateway: string;
177
187
  displayName: string | null;
178
188
  cryptoGateway?: string | null;
@@ -180,7 +190,7 @@ export interface HeadlessCustomerPayment {
180
190
  cryptoAddress: string | null;
181
191
  apmMethod: string | null;
182
192
  }
183
- export interface HeadlessCustomerOrder {
193
+ interface HeadlessCustomerOrder {
184
194
  id: string;
185
195
  uniqid: string;
186
196
  status: string;
@@ -240,12 +250,12 @@ export interface HeadlessCustomerOrder {
240
250
  currentPayment: HeadlessCustomerPayment | null;
241
251
  payments: HeadlessCustomerPayment[];
242
252
  }
243
- export declare class HeadlessCustomerError extends Error {
253
+ declare class HeadlessCustomerError extends Error {
244
254
  readonly status: number;
245
255
  readonly code?: string | null | undefined;
246
256
  constructor(status: number, message: string, code?: string | null | undefined);
247
257
  }
248
- export declare class HeadlessCustomerClient {
258
+ declare class HeadlessCustomerClient {
249
259
  private readonly base;
250
260
  private readonly shop;
251
261
  private readonly publishableKey;
@@ -303,6 +313,9 @@ export declare class HeadlessCustomerClient {
303
313
  addFavorite(productId: string): Promise<HeadlessCustomerFavoriteMutation>;
304
314
  removeFavorite(productId: string): Promise<HeadlessCustomerFavoriteMutation>;
305
315
  affiliate(): Promise<HeadlessCustomerAffiliate>;
316
+ affiliateStats(input?: {
317
+ days?: number;
318
+ }): Promise<HeadlessCustomerAffiliateStats>;
306
319
  createAffiliateLink(input: HeadlessCustomerAffiliateLinkInput): Promise<HeadlessCustomerAffiliateLink>;
307
320
  createTicket(input: HeadlessCustomerTicketInput): Promise<HeadlessCustomerTicketCreateResult>;
308
321
  ticket(ticketId: string): Promise<HeadlessCustomerTicket>;
@@ -321,6 +334,6 @@ export declare class HeadlessCustomerClient {
321
334
  resellerApiKeys(): Promise<HeadlessCustomerResellerApiKeys>;
322
335
  logout(): Promise<void>;
323
336
  }
324
- export declare function createCustomerClient(config: HeadlessCustomerClientConfig): HeadlessCustomerClient;
325
- export {};
326
- //# sourceMappingURL=headless-customer.d.ts.map
337
+ declare function createCustomerClient(config: HeadlessCustomerClientConfig): HeadlessCustomerClient;
338
+
339
+ export { type HeadlessCustomerAffiliate, type HeadlessCustomerAffiliateLink, type HeadlessCustomerAffiliateLinkInput, type HeadlessCustomerAffiliateStats, type HeadlessCustomerAvatar, HeadlessCustomerClient, type HeadlessCustomerClientConfig, type HeadlessCustomerDashboard, type HeadlessCustomerDownload, type HeadlessCustomerEmailPreferences, type HeadlessCustomerEmailPreferencesPatch, type HeadlessCustomerEmailPreferencesUpdate, HeadlessCustomerError, type HeadlessCustomerFavoriteMutation, type HeadlessCustomerFavorites, type HeadlessCustomerLicenseRenewal, type HeadlessCustomerLicenseReset, type HeadlessCustomerLoyalty, type HeadlessCustomerLoyaltyRedeem, type HeadlessCustomerMe, type HeadlessCustomerNotificationPreferences, type HeadlessCustomerNotificationPreferencesPatch, type HeadlessCustomerOrder, type HeadlessCustomerOrderReview, type HeadlessCustomerOrderReviewInput, type HeadlessCustomerOrderSummary, type HeadlessCustomerOrders, type HeadlessCustomerOrdersQuery, type HeadlessCustomerPayment, type HeadlessCustomerProfileUpdate, type HeadlessCustomerReplacementEligibility, type HeadlessCustomerReplacementOptions, type HeadlessCustomerReplacementRequest, type HeadlessCustomerReseller, type HeadlessCustomerResellerApiKeys, type HeadlessCustomerResellerCatalog, type HeadlessCustomerResellerCatalogQuery, type HeadlessCustomerResellerEnrollment, type HeadlessCustomerResellerOrder, type HeadlessCustomerResellerOrderItem, type HeadlessCustomerResellerOrders, type HeadlessCustomerResellerOrdersQuery, type HeadlessCustomerResellerQuote, type HeadlessCustomerResellerTopup, type HeadlessCustomerResellerWallet, type HeadlessCustomerSession, type HeadlessCustomerSubscriptionBillingHistory, type HeadlessCustomerSubscriptionCancel, type HeadlessCustomerSubscriptionCancelOptions, type HeadlessCustomerSubscriptionStatus, type HeadlessCustomerTicket, type HeadlessCustomerTicketCreateResult, type HeadlessCustomerTicketInput, type HeadlessCustomerVerifyOptions, type HeadlessCustomerWalletTopup, type HeadlessCustomerWalletTopupQuote, type HeadlessCustomerWarranties, type HeadlessCustomerWarrantyClaim, createCustomerClient };
@@ -1,13 +1,339 @@
1
+ import { CustomerPortalAffiliateSummaryWire, CustomerPortalAffiliateCreateLinkWire, CustomerPortalAffiliateStatsWire, CustomerPortalAvatarWire, CustomerPortalDashboardWire, CustomerPortalProfileUpdateWire, CustomerPortalEmailPreferencesWire, CustomerPortalEmailPreferencesUpdateWire, CustomerPortalNotificationPreferencesWire, CustomerPortalOrderReviewWire, CustomerReplacementEligibilityWire, CustomerReplacementRequestWire, CustomerPortalLicenseResetWire, CustomerPortalLicenseRenewalWire, CustomerPortalWalletTopupQuoteWire, CustomerPortalWalletTopupResultWire, CustomerPortalSubscriptionBillingHistoryWire, CustomerPortalSubscriptionCancelWire, CustomerPortalSubscriptionStatusWire, CustomerLoyaltyWire, CustomerLoyaltyRedeemWire, CustomerWarrantyListWire, CustomerWarrantyClaimWire, CustomerPortalFavoritesWire, CustomerPortalFavoriteMutationWire, CustomerPortalSupportCreateWire, CustomerPortalSupportTicketDetailWire, CustomerResellerSummaryWire, CustomerResellerEnrollmentWire, CustomerResellerCatalogWire, CustomerResellerQuoteWire, CustomerResellerOrdersWire, CustomerResellerOrderWire, CustomerResellerWalletWire, CustomerResellerTopupWire, CustomerResellerApiKeysWire } from '@shoppex/contracts/customer-portal-wire';
2
+
1
3
  /**
2
- * Public subpath entry for `@shoppexio/storefront/customer`.
4
+ * Browser client for a customer account hosted outside Shoppex.
3
5
  *
4
- * This package (`packages/sdk`) is the source of the published
5
- * `@shoppexio/storefront` tarball (scripts/release/
6
- * publish-internal-theme-runtime-packages.mjs, PACKAGE_CONFIG.sdk), so the
7
- * documented customer-account import has to be exported HERE.
8
- * `packages/storefront/src/customer.ts` mirrors the same surface for the
9
- * standalone storefront-js repo.
6
+ * The publishable key identifies the merchant and the dashboard origin
7
+ * allowlist authorizes the browser origin. OTP verification returns a separate
8
+ * short-lived `hcs_` token; the SDK never exposes Shoppex's BetterAuth token.
10
9
  */
11
- export { createCustomerClient, HeadlessCustomerClient, HeadlessCustomerError, } from './headless-customer.js';
12
- export type * from './headless-customer.js';
13
- //# sourceMappingURL=customer.d.ts.map
10
+
11
+ interface HeadlessCustomerClientConfig {
12
+ /** Shop slug or Shoppex storefront domain. */
13
+ shop: string;
14
+ /** Existing Headless Checkout publishable key (`pk_live_` / `pk_test_`). */
15
+ publishableKey: string;
16
+ /** API origin override. Defaults to https://api.shoppex.io. */
17
+ apiBaseUrl?: string;
18
+ /** Optional fetch override for tests or compatible runtimes. */
19
+ fetchImpl?: typeof fetch;
20
+ /** Optional session storage override. Defaults to browser sessionStorage. */
21
+ storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
22
+ /** Optional persistent storage override. Defaults to browser localStorage. */
23
+ persistentStorage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
24
+ }
25
+ interface HeadlessCustomerSession {
26
+ accessToken: string;
27
+ expiresAt: string;
28
+ }
29
+ interface HeadlessCustomerVerifyOptions {
30
+ /** Persist the customer session across browser restarts for up to 30 days. */
31
+ rememberMe?: boolean;
32
+ }
33
+ interface HeadlessCustomerOrdersQuery {
34
+ page?: number;
35
+ limit?: number;
36
+ status?: string;
37
+ search?: string;
38
+ }
39
+ interface HeadlessCustomerDownload {
40
+ blob: Blob;
41
+ filename: string | null;
42
+ contentType: string | null;
43
+ }
44
+ type HeadlessCustomerDashboardDeliverable = CustomerPortalDashboardWire['deliverables'][number] & {
45
+ /** Pass this value with `invoice_uniqid` to `customer.download()`. */
46
+ downloadIndex?: number | null;
47
+ };
48
+ type HeadlessCustomerDashboard = Omit<CustomerPortalDashboardWire, 'deliverables'> & {
49
+ deliverables: HeadlessCustomerDashboardDeliverable[];
50
+ };
51
+ type HeadlessCustomerProfileUpdate = CustomerPortalProfileUpdateWire;
52
+ type HeadlessCustomerAvatar = CustomerPortalAvatarWire;
53
+ type HeadlessCustomerEmailPreferences = CustomerPortalEmailPreferencesWire;
54
+ type HeadlessCustomerEmailPreferencesUpdate = CustomerPortalEmailPreferencesUpdateWire;
55
+ type HeadlessCustomerNotificationPreferences = CustomerPortalNotificationPreferencesWire;
56
+ type HeadlessCustomerOrderReview = CustomerPortalOrderReviewWire;
57
+ type HeadlessCustomerFavorites = CustomerPortalFavoritesWire;
58
+ type HeadlessCustomerFavoriteMutation = CustomerPortalFavoriteMutationWire;
59
+ type HeadlessCustomerAffiliate = CustomerPortalAffiliateSummaryWire;
60
+ type HeadlessCustomerAffiliateStats = CustomerPortalAffiliateStatsWire;
61
+ type HeadlessCustomerAffiliateLink = CustomerPortalAffiliateCreateLinkWire;
62
+ type HeadlessCustomerTicket = CustomerPortalSupportTicketDetailWire;
63
+ type HeadlessCustomerTicketCreateResult = CustomerPortalSupportCreateWire;
64
+ type HeadlessCustomerLicenseReset = CustomerPortalLicenseResetWire;
65
+ type HeadlessCustomerLicenseRenewal = CustomerPortalLicenseRenewalWire;
66
+ type HeadlessCustomerWalletTopupQuote = CustomerPortalWalletTopupQuoteWire;
67
+ type HeadlessCustomerWalletTopup = CustomerPortalWalletTopupResultWire;
68
+ type HeadlessCustomerSubscriptionBillingHistory = CustomerPortalSubscriptionBillingHistoryWire;
69
+ type HeadlessCustomerSubscriptionCancel = CustomerPortalSubscriptionCancelWire;
70
+ type HeadlessCustomerSubscriptionStatus = CustomerPortalSubscriptionStatusWire;
71
+ type HeadlessCustomerLoyalty = CustomerLoyaltyWire;
72
+ type HeadlessCustomerLoyaltyRedeem = CustomerLoyaltyRedeemWire;
73
+ type HeadlessCustomerWarranties = CustomerWarrantyListWire;
74
+ type HeadlessCustomerWarrantyClaim = CustomerWarrantyClaimWire;
75
+ type HeadlessCustomerReplacementEligibility = CustomerReplacementEligibilityWire;
76
+ type HeadlessCustomerReplacementRequest = CustomerReplacementRequestWire;
77
+ type HeadlessCustomerReseller = CustomerResellerSummaryWire;
78
+ type HeadlessCustomerResellerEnrollment = CustomerResellerEnrollmentWire;
79
+ type HeadlessCustomerResellerCatalog = CustomerResellerCatalogWire;
80
+ type HeadlessCustomerResellerQuote = CustomerResellerQuoteWire;
81
+ type HeadlessCustomerResellerOrders = CustomerResellerOrdersWire;
82
+ type HeadlessCustomerResellerOrder = CustomerResellerOrderWire;
83
+ type HeadlessCustomerResellerWallet = CustomerResellerWalletWire;
84
+ type HeadlessCustomerResellerApiKeys = CustomerResellerApiKeysWire;
85
+ type HeadlessCustomerResellerTopup = CustomerResellerTopupWire;
86
+ interface HeadlessCustomerTicketInput {
87
+ title?: string;
88
+ message: string;
89
+ invoiceId?: string;
90
+ }
91
+ interface HeadlessCustomerOrderReviewInput {
92
+ score: 1 | 3 | 5;
93
+ message: string;
94
+ }
95
+ interface HeadlessCustomerAffiliateLinkInput {
96
+ code: string;
97
+ label: string;
98
+ requestedRevenuePercent?: number | null;
99
+ requestedCustomerDiscountPercent?: number | null;
100
+ }
101
+ interface HeadlessCustomerSubscriptionCancelOptions {
102
+ cancelAtPeriodEnd?: boolean;
103
+ reason?: string | null;
104
+ }
105
+ interface HeadlessCustomerEmailPreferencesPatch {
106
+ globalUnsubscribed?: boolean;
107
+ listSubscriptions?: Array<{
108
+ listId: string;
109
+ subscribed: boolean;
110
+ }>;
111
+ }
112
+ interface HeadlessCustomerNotificationPreferencesPatch {
113
+ orderCreatedEmails?: boolean;
114
+ orderCompletedEmails?: boolean;
115
+ paymentIssueEmails?: boolean;
116
+ }
117
+ interface HeadlessCustomerReplacementOptions {
118
+ lineItemId?: string | null;
119
+ reason: string;
120
+ idempotencyKey?: string;
121
+ }
122
+ interface HeadlessCustomerResellerCatalogQuery {
123
+ search?: string;
124
+ page?: number;
125
+ perPage?: number;
126
+ }
127
+ interface HeadlessCustomerResellerOrdersQuery {
128
+ page?: number;
129
+ perPage?: number;
130
+ }
131
+ interface HeadlessCustomerResellerOrderItem {
132
+ productId: string;
133
+ variantId?: string;
134
+ quantity: number;
135
+ }
136
+ /** Public DTOs mirror the producer-owned schemas imported above. Passing each
137
+ * schema into `request<T>` makes TypeScript reject drift in required fields. */
138
+ interface HeadlessCustomerMe {
139
+ customer: {
140
+ id: string | null;
141
+ email: string;
142
+ name: string;
143
+ avatar_url: string | null;
144
+ joined_at: string | null;
145
+ };
146
+ shop: {
147
+ id: string;
148
+ slug: string;
149
+ name: string;
150
+ currency: string;
151
+ branding: {
152
+ logo_url: string | null;
153
+ primary_color: string;
154
+ secondary_color: string;
155
+ accent_color: string;
156
+ };
157
+ };
158
+ }
159
+ interface HeadlessCustomerOrderSummary {
160
+ uniqid: string;
161
+ status: string;
162
+ total: string;
163
+ totalDisplay: string | null;
164
+ currency: string;
165
+ createdAt: string;
166
+ lineItems: Array<{
167
+ productTitle: string | null;
168
+ quantity: number;
169
+ product: {
170
+ attachment_imageId: {
171
+ cloudflareImageId: string | null;
172
+ } | null;
173
+ } | null;
174
+ }>;
175
+ }
176
+ interface HeadlessCustomerOrders {
177
+ invoices: HeadlessCustomerOrderSummary[];
178
+ pagination: {
179
+ page: number;
180
+ limit: number;
181
+ total: number;
182
+ has_more: boolean;
183
+ };
184
+ }
185
+ interface HeadlessCustomerPayment {
186
+ gateway: string;
187
+ displayName: string | null;
188
+ cryptoGateway?: string | null;
189
+ blockchain: string | null;
190
+ cryptoAddress: string | null;
191
+ apmMethod: string | null;
192
+ }
193
+ interface HeadlessCustomerOrder {
194
+ id: string;
195
+ uniqid: string;
196
+ status: string;
197
+ statusDetails: string | null;
198
+ total: string;
199
+ totalDisplay: string | null;
200
+ subtotal: string;
201
+ discount: string;
202
+ discountDisplay: string | null;
203
+ tax: string;
204
+ taxPercentage: string;
205
+ currency: string;
206
+ createdAt: string;
207
+ updatedAt: string;
208
+ gatewayUpdatedAt: string | null;
209
+ customFields: Record<string, unknown> | null;
210
+ balancePaidAmount: string;
211
+ currentPaymentAttemptId: string | null;
212
+ lineItems: Array<{
213
+ id: string;
214
+ productTitle: string;
215
+ productType: string;
216
+ variantTitle: string | null;
217
+ unitPrice: string;
218
+ quantity: number;
219
+ total: string;
220
+ deliveryText: string | null;
221
+ deliverySummary: {
222
+ codes: string[];
223
+ links: Array<{
224
+ label: string;
225
+ value: string;
226
+ /** External URL for non-Shoppex links. Portal-only download URLs are removed. */
227
+ href?: string | null;
228
+ /** Pass this value to `customer.download(orderId, downloadIndex)`. */
229
+ downloadIndex?: number | null;
230
+ }>;
231
+ notes: string[];
232
+ serials: Array<{
233
+ value: string;
234
+ is_replacement: boolean;
235
+ is_replaced: boolean;
236
+ }>;
237
+ } | null;
238
+ deliveredAt: string | null;
239
+ deliveryStatus: 'PENDING' | 'AWAITING_FULFILLMENT' | 'DELIVERED' | 'FAILED';
240
+ customFields: Record<string, unknown> | null;
241
+ product: {
242
+ uniqid: string;
243
+ slug: string | null;
244
+ serviceText: string | null;
245
+ attachment_imageId: {
246
+ cloudflareImageId: string | null;
247
+ } | null;
248
+ } | null;
249
+ }>;
250
+ currentPayment: HeadlessCustomerPayment | null;
251
+ payments: HeadlessCustomerPayment[];
252
+ }
253
+ declare class HeadlessCustomerError extends Error {
254
+ readonly status: number;
255
+ readonly code?: string | null | undefined;
256
+ constructor(status: number, message: string, code?: string | null | undefined);
257
+ }
258
+ declare class HeadlessCustomerClient {
259
+ private readonly base;
260
+ private readonly shop;
261
+ private readonly publishableKey;
262
+ private readonly fetchImpl;
263
+ private readonly storage;
264
+ private readonly persistentStorage;
265
+ private readonly storageKey;
266
+ private memorySession;
267
+ constructor(config: HeadlessCustomerClientConfig);
268
+ getSession(): HeadlessCustomerSession | null;
269
+ clearSession(): void;
270
+ private saveSession;
271
+ private url;
272
+ private request;
273
+ private requestFile;
274
+ requestOtp(email: string): Promise<{
275
+ requested: boolean;
276
+ }>;
277
+ verifyOtp(email: string, otp: string, options?: HeadlessCustomerVerifyOptions): Promise<HeadlessCustomerSession>;
278
+ me(): Promise<HeadlessCustomerMe>;
279
+ dashboard(): Promise<HeadlessCustomerDashboard>;
280
+ updateProfile(input: {
281
+ name: string;
282
+ }): Promise<HeadlessCustomerProfileUpdate>;
283
+ updateAvatar(file: File): Promise<HeadlessCustomerAvatar>;
284
+ removeAvatar(): Promise<HeadlessCustomerAvatar>;
285
+ emailPreferences(): Promise<HeadlessCustomerEmailPreferences>;
286
+ updateEmailPreferences(patch: HeadlessCustomerEmailPreferencesPatch): Promise<HeadlessCustomerEmailPreferencesUpdate>;
287
+ notificationPreferences(): Promise<HeadlessCustomerNotificationPreferences>;
288
+ updateNotificationPreferences(patch: HeadlessCustomerNotificationPreferencesPatch): Promise<HeadlessCustomerNotificationPreferences>;
289
+ orders(options?: HeadlessCustomerOrdersQuery): Promise<HeadlessCustomerOrders>;
290
+ order(id: string): Promise<HeadlessCustomerOrder>;
291
+ orderReview(orderId: string): Promise<HeadlessCustomerOrderReview>;
292
+ submitOrderReview(orderId: string, input: HeadlessCustomerOrderReviewInput): Promise<HeadlessCustomerOrderReview>;
293
+ invoicePdf(orderId: string): Promise<HeadlessCustomerDownload>;
294
+ replacementEligibility(orderId: string, lineItemId?: string): Promise<HeadlessCustomerReplacementEligibility>;
295
+ requestReplacement(orderId: string, options: HeadlessCustomerReplacementOptions): Promise<HeadlessCustomerReplacementRequest>;
296
+ download(orderId: string, fileIndex: number): Promise<HeadlessCustomerDownload>;
297
+ resetLicenseHwid(licenseId: string): Promise<HeadlessCustomerLicenseReset>;
298
+ renewLicense(licenseId: string): Promise<HeadlessCustomerLicenseRenewal>;
299
+ walletTopupQuote(): Promise<HeadlessCustomerWalletTopupQuote>;
300
+ createWalletTopup(amount: string): Promise<HeadlessCustomerWalletTopup>;
301
+ subscriptionBillingHistory(subscriptionId: string): Promise<HeadlessCustomerSubscriptionBillingHistory>;
302
+ cancelSubscription(subscriptionId: string, options?: HeadlessCustomerSubscriptionCancelOptions): Promise<HeadlessCustomerSubscriptionCancel>;
303
+ pauseSubscription(subscriptionId: string): Promise<HeadlessCustomerSubscriptionStatus>;
304
+ resumeSubscription(subscriptionId: string): Promise<HeadlessCustomerSubscriptionStatus>;
305
+ loyalty(): Promise<HeadlessCustomerLoyalty>;
306
+ redeemLoyaltyPoints(input: {
307
+ points: number;
308
+ idempotencyKey: string;
309
+ }): Promise<HeadlessCustomerLoyaltyRedeem>;
310
+ warranties(invoiceId?: string): Promise<HeadlessCustomerWarranties>;
311
+ claimWarranty(warrantyId: string, message?: string): Promise<HeadlessCustomerWarrantyClaim>;
312
+ favorites(): Promise<HeadlessCustomerFavorites>;
313
+ addFavorite(productId: string): Promise<HeadlessCustomerFavoriteMutation>;
314
+ removeFavorite(productId: string): Promise<HeadlessCustomerFavoriteMutation>;
315
+ affiliate(): Promise<HeadlessCustomerAffiliate>;
316
+ affiliateStats(input?: {
317
+ days?: number;
318
+ }): Promise<HeadlessCustomerAffiliateStats>;
319
+ createAffiliateLink(input: HeadlessCustomerAffiliateLinkInput): Promise<HeadlessCustomerAffiliateLink>;
320
+ createTicket(input: HeadlessCustomerTicketInput): Promise<HeadlessCustomerTicketCreateResult>;
321
+ ticket(ticketId: string): Promise<HeadlessCustomerTicket>;
322
+ replyToTicket(ticketId: string, message: string): Promise<void>;
323
+ reseller(): Promise<HeadlessCustomerReseller>;
324
+ applyForReseller(note?: string): Promise<HeadlessCustomerResellerEnrollment>;
325
+ enrollAsReseller(): Promise<HeadlessCustomerResellerEnrollment>;
326
+ acceptResellerInvite(token: string): Promise<HeadlessCustomerResellerEnrollment>;
327
+ resellerCatalog(options?: HeadlessCustomerResellerCatalogQuery): Promise<HeadlessCustomerResellerCatalog>;
328
+ quoteResellerOrder(items: HeadlessCustomerResellerOrderItem[]): Promise<HeadlessCustomerResellerQuote>;
329
+ resellerOrders(options?: HeadlessCustomerResellerOrdersQuery): Promise<HeadlessCustomerResellerOrders>;
330
+ resellerOrder(orderId: string): Promise<HeadlessCustomerResellerOrder>;
331
+ resellerWallet(): Promise<HeadlessCustomerResellerWallet>;
332
+ resellerTopupQuote(): Promise<HeadlessCustomerWalletTopupQuote>;
333
+ createResellerTopup(amount: string): Promise<HeadlessCustomerResellerTopup>;
334
+ resellerApiKeys(): Promise<HeadlessCustomerResellerApiKeys>;
335
+ logout(): Promise<void>;
336
+ }
337
+ declare function createCustomerClient(config: HeadlessCustomerClientConfig): HeadlessCustomerClient;
338
+
339
+ export { type HeadlessCustomerAffiliate, type HeadlessCustomerAffiliateLink, type HeadlessCustomerAffiliateLinkInput, type HeadlessCustomerAffiliateStats, type HeadlessCustomerAvatar, HeadlessCustomerClient, type HeadlessCustomerClientConfig, type HeadlessCustomerDashboard, type HeadlessCustomerDownload, type HeadlessCustomerEmailPreferences, type HeadlessCustomerEmailPreferencesPatch, type HeadlessCustomerEmailPreferencesUpdate, HeadlessCustomerError, type HeadlessCustomerFavoriteMutation, type HeadlessCustomerFavorites, type HeadlessCustomerLicenseRenewal, type HeadlessCustomerLicenseReset, type HeadlessCustomerLoyalty, type HeadlessCustomerLoyaltyRedeem, type HeadlessCustomerMe, type HeadlessCustomerNotificationPreferences, type HeadlessCustomerNotificationPreferencesPatch, type HeadlessCustomerOrder, type HeadlessCustomerOrderReview, type HeadlessCustomerOrderReviewInput, type HeadlessCustomerOrderSummary, type HeadlessCustomerOrders, type HeadlessCustomerOrdersQuery, type HeadlessCustomerPayment, type HeadlessCustomerProfileUpdate, type HeadlessCustomerReplacementEligibility, type HeadlessCustomerReplacementOptions, type HeadlessCustomerReplacementRequest, type HeadlessCustomerReseller, type HeadlessCustomerResellerApiKeys, type HeadlessCustomerResellerCatalog, type HeadlessCustomerResellerCatalogQuery, type HeadlessCustomerResellerEnrollment, type HeadlessCustomerResellerOrder, type HeadlessCustomerResellerOrderItem, type HeadlessCustomerResellerOrders, type HeadlessCustomerResellerOrdersQuery, type HeadlessCustomerResellerQuote, type HeadlessCustomerResellerTopup, type HeadlessCustomerResellerWallet, type HeadlessCustomerSession, type HeadlessCustomerSubscriptionBillingHistory, type HeadlessCustomerSubscriptionCancel, type HeadlessCustomerSubscriptionCancelOptions, type HeadlessCustomerSubscriptionStatus, type HeadlessCustomerTicket, type HeadlessCustomerTicketCreateResult, type HeadlessCustomerTicketInput, type HeadlessCustomerVerifyOptions, type HeadlessCustomerWalletTopup, type HeadlessCustomerWalletTopupQuote, type HeadlessCustomerWarranties, type HeadlessCustomerWarrantyClaim, createCustomerClient };