@shoppexio/storefront 1.0.58 → 1.0.60

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 +103 -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} +71 -62
  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 +1857 -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 -32
  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 -148
  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 -766
  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, CustomerPortalAffiliateStatsWire, 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,97 +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 HeadlessCustomerAffiliateStats = CustomerPortalAffiliateStatsWire;
52
- export type HeadlessCustomerAffiliateLink = CustomerPortalAffiliateCreateLinkWire;
53
- export type HeadlessCustomerTicket = CustomerPortalSupportTicketDetailWire;
54
- export type HeadlessCustomerTicketCreateResult = CustomerPortalSupportCreateWire;
55
- export type HeadlessCustomerLicenseReset = CustomerPortalLicenseResetWire;
56
- export type HeadlessCustomerLicenseRenewal = CustomerPortalLicenseRenewalWire;
57
- export type HeadlessCustomerWalletTopupQuote = CustomerPortalWalletTopupQuoteWire;
58
- export type HeadlessCustomerWalletTopup = CustomerPortalWalletTopupResultWire;
59
- export type HeadlessCustomerSubscriptionBillingHistory = CustomerPortalSubscriptionBillingHistoryWire;
60
- export type HeadlessCustomerSubscriptionCancel = CustomerPortalSubscriptionCancelWire;
61
- export type HeadlessCustomerSubscriptionStatus = CustomerPortalSubscriptionStatusWire;
62
- export type HeadlessCustomerLoyalty = CustomerLoyaltyWire;
63
- export type HeadlessCustomerLoyaltyRedeem = CustomerLoyaltyRedeemWire;
64
- export type HeadlessCustomerWarranties = CustomerWarrantyListWire;
65
- export type HeadlessCustomerWarrantyClaim = CustomerWarrantyClaimWire;
66
- export type HeadlessCustomerReplacementEligibility = CustomerReplacementEligibilityWire;
67
- export type HeadlessCustomerReplacementRequest = CustomerReplacementRequestWire;
68
- export type HeadlessCustomerReseller = CustomerResellerSummaryWire;
69
- export type HeadlessCustomerResellerEnrollment = CustomerResellerEnrollmentWire;
70
- export type HeadlessCustomerResellerCatalog = CustomerResellerCatalogWire;
71
- export type HeadlessCustomerResellerQuote = CustomerResellerQuoteWire;
72
- export type HeadlessCustomerResellerOrders = CustomerResellerOrdersWire;
73
- export type HeadlessCustomerResellerOrder = CustomerResellerOrderWire;
74
- export type HeadlessCustomerResellerWallet = CustomerResellerWalletWire;
75
- export type HeadlessCustomerResellerApiKeys = CustomerResellerApiKeysWire;
76
- export type HeadlessCustomerResellerTopup = CustomerResellerTopupWire;
77
- 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 {
78
87
  title?: string;
79
88
  message: string;
80
89
  invoiceId?: string;
81
90
  }
82
- export interface HeadlessCustomerOrderReviewInput {
91
+ interface HeadlessCustomerOrderReviewInput {
83
92
  score: 1 | 3 | 5;
84
93
  message: string;
85
94
  }
86
- export interface HeadlessCustomerAffiliateLinkInput {
95
+ interface HeadlessCustomerAffiliateLinkInput {
87
96
  code: string;
88
97
  label: string;
89
98
  requestedRevenuePercent?: number | null;
90
99
  requestedCustomerDiscountPercent?: number | null;
91
100
  }
92
- export interface HeadlessCustomerSubscriptionCancelOptions {
101
+ interface HeadlessCustomerSubscriptionCancelOptions {
93
102
  cancelAtPeriodEnd?: boolean;
94
103
  reason?: string | null;
95
104
  }
96
- export interface HeadlessCustomerEmailPreferencesPatch {
105
+ interface HeadlessCustomerEmailPreferencesPatch {
97
106
  globalUnsubscribed?: boolean;
98
107
  listSubscriptions?: Array<{
99
108
  listId: string;
100
109
  subscribed: boolean;
101
110
  }>;
102
111
  }
103
- export interface HeadlessCustomerNotificationPreferencesPatch {
112
+ interface HeadlessCustomerNotificationPreferencesPatch {
104
113
  orderCreatedEmails?: boolean;
105
114
  orderCompletedEmails?: boolean;
106
115
  paymentIssueEmails?: boolean;
107
116
  }
108
- export interface HeadlessCustomerReplacementOptions {
117
+ interface HeadlessCustomerReplacementOptions {
109
118
  lineItemId?: string | null;
110
119
  reason: string;
111
120
  idempotencyKey?: string;
112
121
  }
113
- export interface HeadlessCustomerResellerCatalogQuery {
122
+ interface HeadlessCustomerResellerCatalogQuery {
114
123
  search?: string;
115
124
  page?: number;
116
125
  perPage?: number;
117
126
  }
118
- export interface HeadlessCustomerResellerOrdersQuery {
127
+ interface HeadlessCustomerResellerOrdersQuery {
119
128
  page?: number;
120
129
  perPage?: number;
121
130
  }
122
- export interface HeadlessCustomerResellerOrderItem {
131
+ interface HeadlessCustomerResellerOrderItem {
123
132
  productId: string;
124
133
  variantId?: string;
125
134
  quantity: number;
126
135
  }
127
136
  /** Public DTOs mirror the producer-owned schemas imported above. Passing each
128
137
  * schema into `request<T>` makes TypeScript reject drift in required fields. */
129
- export interface HeadlessCustomerMe {
138
+ interface HeadlessCustomerMe {
130
139
  customer: {
131
140
  id: string | null;
132
141
  email: string;
@@ -147,7 +156,7 @@ export interface HeadlessCustomerMe {
147
156
  };
148
157
  };
149
158
  }
150
- export interface HeadlessCustomerOrderSummary {
159
+ interface HeadlessCustomerOrderSummary {
151
160
  uniqid: string;
152
161
  status: string;
153
162
  total: string;
@@ -164,7 +173,7 @@ export interface HeadlessCustomerOrderSummary {
164
173
  } | null;
165
174
  }>;
166
175
  }
167
- export interface HeadlessCustomerOrders {
176
+ interface HeadlessCustomerOrders {
168
177
  invoices: HeadlessCustomerOrderSummary[];
169
178
  pagination: {
170
179
  page: number;
@@ -173,7 +182,7 @@ export interface HeadlessCustomerOrders {
173
182
  has_more: boolean;
174
183
  };
175
184
  }
176
- export interface HeadlessCustomerPayment {
185
+ interface HeadlessCustomerPayment {
177
186
  gateway: string;
178
187
  displayName: string | null;
179
188
  cryptoGateway?: string | null;
@@ -181,7 +190,7 @@ export interface HeadlessCustomerPayment {
181
190
  cryptoAddress: string | null;
182
191
  apmMethod: string | null;
183
192
  }
184
- export interface HeadlessCustomerOrder {
193
+ interface HeadlessCustomerOrder {
185
194
  id: string;
186
195
  uniqid: string;
187
196
  status: string;
@@ -241,12 +250,12 @@ export interface HeadlessCustomerOrder {
241
250
  currentPayment: HeadlessCustomerPayment | null;
242
251
  payments: HeadlessCustomerPayment[];
243
252
  }
244
- export declare class HeadlessCustomerError extends Error {
253
+ declare class HeadlessCustomerError extends Error {
245
254
  readonly status: number;
246
255
  readonly code?: string | null | undefined;
247
256
  constructor(status: number, message: string, code?: string | null | undefined);
248
257
  }
249
- export declare class HeadlessCustomerClient {
258
+ declare class HeadlessCustomerClient {
250
259
  private readonly base;
251
260
  private readonly shop;
252
261
  private readonly publishableKey;
@@ -325,6 +334,6 @@ export declare class HeadlessCustomerClient {
325
334
  resellerApiKeys(): Promise<HeadlessCustomerResellerApiKeys>;
326
335
  logout(): Promise<void>;
327
336
  }
328
- export declare function createCustomerClient(config: HeadlessCustomerClientConfig): HeadlessCustomerClient;
329
- export {};
330
- //# 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 };