@tiledev/sdk-shopify 0.9.1 → 0.10.1

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 (146) hide show
  1. package/README.md +653 -50
  2. package/dist/alertSettings.d.ts.map +1 -1
  3. package/dist/alertSettings.js +2 -0
  4. package/dist/alertSettings.js.map +1 -1
  5. package/dist/attribution.d.ts +21 -0
  6. package/dist/attribution.d.ts.map +1 -1
  7. package/dist/attribution.js +17 -0
  8. package/dist/attribution.js.map +1 -1
  9. package/dist/auth/pkce.d.ts +30 -0
  10. package/dist/auth/pkce.d.ts.map +1 -0
  11. package/dist/auth/pkce.js +128 -0
  12. package/dist/auth/pkce.js.map +1 -0
  13. package/dist/auth/session.d.ts +118 -0
  14. package/dist/auth/session.d.ts.map +1 -0
  15. package/dist/auth/session.js +896 -0
  16. package/dist/auth/session.js.map +1 -0
  17. package/dist/auth/storeCredit.d.ts +64 -0
  18. package/dist/auth/storeCredit.d.ts.map +1 -0
  19. package/dist/auth/storeCredit.js +274 -0
  20. package/dist/auth/storeCredit.js.map +1 -0
  21. package/dist/cart.d.ts +25 -1
  22. package/dist/cart.d.ts.map +1 -1
  23. package/dist/cart.js +95 -2
  24. package/dist/cart.js.map +1 -1
  25. package/dist/cartPolicy.js +4 -4
  26. package/dist/checkout.d.ts +123 -0
  27. package/dist/checkout.d.ts.map +1 -0
  28. package/dist/checkout.js +205 -0
  29. package/dist/checkout.js.map +1 -0
  30. package/dist/customer.d.ts.map +1 -1
  31. package/dist/customer.js +8 -0
  32. package/dist/customer.js.map +1 -1
  33. package/dist/index.d.ts +12 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +74 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/messages.d.ts.map +1 -1
  38. package/dist/messages.js +2 -0
  39. package/dist/messages.js.map +1 -1
  40. package/dist/money.d.ts +16 -0
  41. package/dist/money.d.ts.map +1 -1
  42. package/dist/money.js +55 -0
  43. package/dist/money.js.map +1 -1
  44. package/dist/orders.d.ts +99 -0
  45. package/dist/orders.d.ts.map +1 -0
  46. package/dist/orders.js +439 -0
  47. package/dist/orders.js.map +1 -0
  48. package/dist/productPage.d.ts +100 -0
  49. package/dist/productPage.d.ts.map +1 -0
  50. package/dist/productPage.js +298 -0
  51. package/dist/productPage.js.map +1 -0
  52. package/dist/productStore.d.ts +1 -1
  53. package/dist/productStore.d.ts.map +1 -1
  54. package/dist/productStore.js +63 -5
  55. package/dist/productStore.js.map +1 -1
  56. package/dist/products.d.ts.map +1 -1
  57. package/dist/products.js +15 -3
  58. package/dist/products.js.map +1 -1
  59. package/dist/purchaseRules.d.ts +74 -0
  60. package/dist/purchaseRules.d.ts.map +1 -0
  61. package/dist/purchaseRules.js +73 -0
  62. package/dist/purchaseRules.js.map +1 -0
  63. package/dist/queries.d.ts +15 -13
  64. package/dist/queries.d.ts.map +1 -1
  65. package/dist/queries.js +43 -7
  66. package/dist/queries.js.map +1 -1
  67. package/dist/react/ShopifyProvider.d.ts +167 -25
  68. package/dist/react/ShopifyProvider.d.ts.map +1 -1
  69. package/dist/react/ShopifyProvider.js +352 -207
  70. package/dist/react/ShopifyProvider.js.map +1 -1
  71. package/dist/react/appForeground.d.ts +6 -0
  72. package/dist/react/appForeground.d.ts.map +1 -0
  73. package/dist/react/appForeground.js +19 -0
  74. package/dist/react/appForeground.js.map +1 -0
  75. package/dist/react/appForeground.native.d.ts +2 -0
  76. package/dist/react/appForeground.native.d.ts.map +1 -0
  77. package/dist/react/appForeground.native.js +23 -0
  78. package/dist/react/appForeground.native.js.map +1 -0
  79. package/dist/react/index.d.ts +7 -1
  80. package/dist/react/index.d.ts.map +1 -1
  81. package/dist/react/index.js +23 -1
  82. package/dist/react/index.js.map +1 -1
  83. package/dist/react/tileCreditClient.d.ts +4 -0
  84. package/dist/react/tileCreditClient.d.ts.map +1 -0
  85. package/dist/react/tileCreditClient.js +27 -0
  86. package/dist/react/tileCreditClient.js.map +1 -0
  87. package/dist/react/useAppDiscountCode.d.ts +19 -0
  88. package/dist/react/useAppDiscountCode.d.ts.map +1 -0
  89. package/dist/react/useAppDiscountCode.js +44 -0
  90. package/dist/react/useAppDiscountCode.js.map +1 -0
  91. package/dist/react/useCartStoreCredit.d.ts +25 -0
  92. package/dist/react/useCartStoreCredit.d.ts.map +1 -0
  93. package/dist/react/useCartStoreCredit.js +292 -0
  94. package/dist/react/useCartStoreCredit.js.map +1 -0
  95. package/dist/react/useOrders.d.ts +104 -0
  96. package/dist/react/useOrders.d.ts.map +1 -0
  97. package/dist/react/useOrders.js +287 -0
  98. package/dist/react/useOrders.js.map +1 -0
  99. package/dist/react/useProduct.d.ts.map +1 -1
  100. package/dist/react/useProduct.js +1 -9
  101. package/dist/react/useProduct.js.map +1 -1
  102. package/dist/react/useProductFeed.d.ts.map +1 -1
  103. package/dist/react/useProductFeed.js +33 -5
  104. package/dist/react/useProductFeed.js.map +1 -1
  105. package/dist/react/useProductPage.d.ts +148 -0
  106. package/dist/react/useProductPage.d.ts.map +1 -0
  107. package/dist/react/useProductPage.js +178 -0
  108. package/dist/react/useProductPage.js.map +1 -0
  109. package/dist/react/useProductRecommendations.d.ts +27 -0
  110. package/dist/react/useProductRecommendations.d.ts.map +1 -0
  111. package/dist/react/useProductRecommendations.js +76 -0
  112. package/dist/react/useProductRecommendations.js.map +1 -0
  113. package/dist/react/useStoreCredit.d.ts +58 -0
  114. package/dist/react/useStoreCredit.d.ts.map +1 -0
  115. package/dist/react/useStoreCredit.js +209 -0
  116. package/dist/react/useStoreCredit.js.map +1 -0
  117. package/dist/react/useTileCredit.d.ts +4 -3
  118. package/dist/react/useTileCredit.d.ts.map +1 -1
  119. package/dist/react/useTileCredit.js +63 -55
  120. package/dist/react/useTileCredit.js.map +1 -1
  121. package/dist/shopify.d.ts.map +1 -1
  122. package/dist/shopify.js +2 -0
  123. package/dist/shopify.js.map +1 -1
  124. package/dist/storedList.d.ts +27 -0
  125. package/dist/storedList.d.ts.map +1 -0
  126. package/dist/storedList.js +152 -0
  127. package/dist/storedList.js.map +1 -0
  128. package/dist/tileCredit.d.ts +25 -10
  129. package/dist/tileCredit.d.ts.map +1 -1
  130. package/dist/tileCredit.js +97 -45
  131. package/dist/tileCredit.js.map +1 -1
  132. package/dist/types.d.ts +407 -34
  133. package/dist/types.d.ts.map +1 -1
  134. package/dist/types.js +1 -2
  135. package/dist/types.js.map +1 -1
  136. package/dist/variants.d.ts.map +1 -1
  137. package/dist/variants.js +4 -3
  138. package/dist/variants.js.map +1 -1
  139. package/dist/waitlist.d.ts +4 -0
  140. package/dist/waitlist.d.ts.map +1 -0
  141. package/dist/waitlist.js +213 -0
  142. package/dist/waitlist.js.map +1 -0
  143. package/dist/wishlist.d.ts.map +1 -1
  144. package/dist/wishlist.js +70 -47
  145. package/dist/wishlist.js.map +1 -1
  146. package/package.json +2 -2
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useStoreCredit = useStoreCredit;
4
+ exports.useStoreCreditHistory = useStoreCreditHistory;
5
+ /**
6
+ * The signed-in shopper's store credit, from the source the app chose on `ShopifyProvider`
7
+ * (`storeCredit.source`): Shopify's own store credit, or the Tile Credit wallet. One hook either
8
+ * way, so an account screen shows a balance without knowing where it comes from.
9
+ *
10
+ * Putting credit on the cart is `useCartStoreCredit`; Shopify store credit is spent at Shopify's
11
+ * checkout. `useStoreCreditHistory`, below, reads the lines behind the balance.
12
+ */
13
+ const react_1 = require("react");
14
+ const client_1 = require("../client");
15
+ const storeCredit_1 = require("../auth/storeCredit");
16
+ const tileCredit_1 = require("../tileCredit");
17
+ const ShopifyProvider_1 = require("./ShopifyProvider");
18
+ const tileCreditClient_1 = require("./tileCreditClient");
19
+ const useOrders_1 = require("./useOrders");
20
+ function useStoreCredit() {
21
+ var _a, _b, _c;
22
+ const { storeCredit } = (0, ShopifyProvider_1.useShopify)();
23
+ const customer = (0, ShopifyProvider_1.useCustomer)();
24
+ const source = (_a = storeCredit === null || storeCredit === void 0 ? void 0 : storeCredit.source) !== null && _a !== void 0 ? _a : null;
25
+ const available = source !== null && customer.loggedIn && (source === 'tile' || customer.sessionKind === 'shopify');
26
+ const [balance, setBalance] = (0, react_1.useState)(null);
27
+ const [loading, setLoading] = (0, react_1.useState)(false);
28
+ const [error, setError] = (0, react_1.useState)(null);
29
+ // Read through refs so `refresh` keeps one identity across renders.
30
+ const customerRef = (0, react_1.useRef)(customer);
31
+ customerRef.current = customer;
32
+ const baseUrl = (storeCredit === null || storeCredit === void 0 ? void 0 : storeCredit.tileCreditBaseUrl) || tileCredit_1.DEFAULT_TILE_CREDIT_BASE_URL;
33
+ const request = (0, react_1.useRef)(0);
34
+ const refresh = (0, react_1.useCallback)(async () => {
35
+ var _a, _b, _c, _d;
36
+ const id = ++request.current;
37
+ if (!available) {
38
+ setBalance(null);
39
+ setError(null);
40
+ return;
41
+ }
42
+ setLoading(true);
43
+ setError(null);
44
+ try {
45
+ let next;
46
+ if (source === 'shopify') {
47
+ const data = await customerRef.current.request(storeCredit_1.STORE_CREDIT_QUERY);
48
+ next = (0, storeCredit_1.sumStoreCredit)((_b = (_a = data.customer) === null || _a === void 0 ? void 0 : _a.storeCreditAccounts.nodes) !== null && _b !== void 0 ? _b : [], (_c = (0, client_1.getCurrencyCode)()) !== null && _c !== void 0 ? _c : '');
49
+ }
50
+ else {
51
+ const wallet = await (0, tileCreditClient_1.tileCreditClientFor)(customerRef.current, baseUrl).getWallet();
52
+ next = { amount: (0, tileCredit_1.centsToMoney)(wallet.balanceCents), currencyCode: (_d = (0, client_1.getCurrencyCode)()) !== null && _d !== void 0 ? _d : '' };
53
+ }
54
+ if (id === request.current)
55
+ setBalance(next);
56
+ }
57
+ catch (e) {
58
+ if (id === request.current)
59
+ setError(e instanceof Error ? e : new Error(String(e)));
60
+ }
61
+ finally {
62
+ if (id === request.current)
63
+ setLoading(false);
64
+ }
65
+ }, [available, source, baseUrl]);
66
+ // Loads when it becomes readable, and again for a different shopper.
67
+ const customerId = (_c = (_b = customer.customer) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : null;
68
+ (0, react_1.useEffect)(() => {
69
+ void refresh();
70
+ }, [refresh, customerId]);
71
+ return (0, react_1.useMemo)(() => ({ source, available, balance: available ? balance : null, loading, error, refresh }), [source, available, balance, loading, error, refresh]);
72
+ }
73
+ const emptyHistory = (owner) => ({
74
+ owner, entries: [], cursor: null, answered: false, loadingMore: false, error: null,
75
+ });
76
+ /** The lines shown so far and a next page, in date order, each line once. */
77
+ function withPage(entries, page) {
78
+ const seen = new Set(entries.map((entry) => entry.id));
79
+ const merged = [...entries, ...page.filter((entry) => !seen.has(entry.id))];
80
+ // Already in order from one source; Shopify's accounts in several currencies can interleave.
81
+ return merged.sort((a, b) => (Date.parse(b.createdAt) || 0) - (Date.parse(a.createdAt) || 0));
82
+ }
83
+ const asError = (error) => (error instanceof Error ? error : new Error(String(error)));
84
+ /**
85
+ * The history behind the balance, from the same source as `useStoreCredit`, newest first, a page at a
86
+ * time:
87
+ * - `tile`: Tile Credit's ledger (`/public/me/ledger`), with the same service, token and shop as the
88
+ * balance. Either sign-in.
89
+ * - `shopify`: the Customer Account API's store-credit transactions, for a Shopify sign-in only.
90
+ *
91
+ * Signed out, or with no source, it is empty with no error and reads nothing. Loads when it becomes
92
+ * readable, and starts over for another shopper.
93
+ */
94
+ function useStoreCreditHistory(options = {}) {
95
+ var _a, _b;
96
+ const { storeCredit } = (0, ShopifyProvider_1.useShopify)();
97
+ const customer = (0, ShopifyProvider_1.useCustomer)();
98
+ const source = (_a = storeCredit === null || storeCredit === void 0 ? void 0 : storeCredit.source) !== null && _a !== void 0 ? _a : null;
99
+ const available = source !== null && customer.loggedIn && (source === 'tile' || customer.sessionKind === 'shopify');
100
+ const baseUrl = (storeCredit === null || storeCredit === void 0 ? void 0 : storeCredit.tileCreditBaseUrl) || tileCredit_1.DEFAULT_TILE_CREDIT_BASE_URL;
101
+ const shopper = (0, useOrders_1.useShopper)(customer);
102
+ // Whose history is held, and from where: anything else starts from nothing.
103
+ const owner = available && shopper ? `${shopper}|${source}|${baseUrl}` : null;
104
+ const customerRef = (0, react_1.useRef)(customer);
105
+ customerRef.current = customer;
106
+ const ownerRef = (0, react_1.useRef)(owner);
107
+ ownerRef.current = owner;
108
+ const pageSizeRef = (0, react_1.useRef)(storeCredit_1.STORE_CREDIT_HISTORY_PAGE_SIZE);
109
+ pageSizeRef.current = Math.max(1, Math.floor((_b = options.pageSize) !== null && _b !== void 0 ? _b : storeCredit_1.STORE_CREDIT_HISTORY_PAGE_SIZE)) || storeCredit_1.STORE_CREDIT_HISTORY_PAGE_SIZE;
110
+ const [stored, setStored] = (0, react_1.useState)(() => emptyHistory(owner));
111
+ // Another shopper's lines never show, not even for the render before the effect below clears them.
112
+ const shown = stored.owner === owner ? stored : emptyHistory(owner);
113
+ const shownRef = (0, react_1.useRef)(shown);
114
+ shownRef.current = shown;
115
+ const firstPage = (0, react_1.useRef)(null);
116
+ const nextPage = (0, react_1.useRef)(null);
117
+ const update = (0, react_1.useCallback)((forOwner, change) => {
118
+ setStored((state) => (state.owner === forOwner ? { ...state, ...change(state) } : state));
119
+ }, []);
120
+ /** The source for this shopper now. Tile Credit's client reads a fresh token for each request. */
121
+ const historySource = (0, react_1.useCallback)(async () => {
122
+ var _a;
123
+ const now = customerRef.current;
124
+ const currency = (_a = (0, client_1.getCurrencyCode)()) !== null && _a !== void 0 ? _a : '';
125
+ if (source === 'shopify')
126
+ return (0, storeCredit_1.shopifyStoreCreditHistory)(now.request, currency);
127
+ return (0, storeCredit_1.tileCreditHistory)((0, tileCreditClient_1.tileCreditClientFor)(now, baseUrl), currency);
128
+ }, [source, baseUrl]);
129
+ const refresh = (0, react_1.useCallback)(() => {
130
+ const forOwner = ownerRef.current;
131
+ if (!forOwner)
132
+ return Promise.resolve();
133
+ const running = firstPage.current;
134
+ if ((running === null || running === void 0 ? void 0 : running.owner) === forOwner)
135
+ return running.done;
136
+ // The list starts over, so a next page still on its way would land on the wrong list.
137
+ nextPage.current = null;
138
+ const flight = { owner: forOwner, done: Promise.resolve() };
139
+ flight.done = (async () => {
140
+ try {
141
+ const page = await (await historySource()).page(pageSizeRef.current, null);
142
+ update(forOwner, () => ({
143
+ entries: withPage([], page.entries), cursor: page.nextCursor, answered: true, loadingMore: false, error: null,
144
+ }));
145
+ }
146
+ catch (error) {
147
+ update(forOwner, () => ({ answered: true, loadingMore: false, error: asError(error) }));
148
+ }
149
+ finally {
150
+ if (firstPage.current === flight)
151
+ firstPage.current = null;
152
+ }
153
+ })();
154
+ firstPage.current = flight;
155
+ return flight.done;
156
+ }, [historySource, update]);
157
+ const loadMore = (0, react_1.useCallback)(() => {
158
+ var _a, _b;
159
+ const forOwner = ownerRef.current;
160
+ const now = shownRef.current;
161
+ if (!forOwner || !now.answered || !now.cursor)
162
+ return;
163
+ if (((_a = firstPage.current) === null || _a === void 0 ? void 0 : _a.owner) === forOwner || ((_b = nextPage.current) === null || _b === void 0 ? void 0 : _b.owner) === forOwner)
164
+ return;
165
+ const flight = { owner: forOwner };
166
+ nextPage.current = flight;
167
+ const cursor = now.cursor;
168
+ update(forOwner, () => ({ loadingMore: true }));
169
+ void (async () => {
170
+ try {
171
+ const page = await (await historySource()).page(pageSizeRef.current, cursor);
172
+ if (nextPage.current !== flight)
173
+ return;
174
+ update(forOwner, (state) => ({
175
+ entries: withPage(state.entries, page.entries), cursor: page.nextCursor, loadingMore: false, error: null,
176
+ }));
177
+ }
178
+ catch (error) {
179
+ if (nextPage.current !== flight)
180
+ return;
181
+ update(forOwner, () => ({ loadingMore: false, error: asError(error) }));
182
+ }
183
+ finally {
184
+ if (nextPage.current === flight)
185
+ nextPage.current = null;
186
+ }
187
+ })();
188
+ }, [historySource, update]);
189
+ // A new shopper (or none) starts from nothing; signed out, nothing is read.
190
+ (0, react_1.useEffect)(() => {
191
+ setStored((state) => (state.owner === owner ? state : emptyHistory(owner)));
192
+ if (owner)
193
+ void refresh();
194
+ }, [owner, refresh]);
195
+ const restoring = customer.restoring && owner === null;
196
+ const loading = restoring || (owner !== null && !shown.answered);
197
+ return (0, react_1.useMemo)(() => ({
198
+ source,
199
+ available,
200
+ entries: shown.entries,
201
+ loading,
202
+ loadingMore: shown.loadingMore,
203
+ hasMore: !!shown.cursor,
204
+ error: shown.error,
205
+ loadMore,
206
+ refresh,
207
+ }), [source, available, shown.entries, loading, shown.loadingMore, shown.cursor, shown.error, loadMore, refresh]);
208
+ }
209
+ //# sourceMappingURL=useStoreCredit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStoreCredit.js","sourceRoot":"","sources":["../../src/react/useStoreCredit.ts"],"names":[],"mappings":"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"}
@@ -17,17 +17,18 @@ export interface UseTileCreditState {
17
17
  loading: boolean;
18
18
  error: Error | null;
19
19
  refresh: () => Promise<void>;
20
- /** Redeem N cents and apply to the current cart (from `useCart`).
21
- * Throws if no cart is loaded yet. */
20
+ /** Redeem N cents and add the card to the current cart (from `useCart`).
21
+ * Throws if no cart is loaded yet, or `TileCreditError('cart_refused')` when the card didn't go on. */
22
22
  redeemAndApply: (amountCents: number, opts?: {
23
23
  idempotencyKey?: string;
24
24
  reason?: string;
25
+ /** No longer used: the provider sets the cart's country (its `config.country`, else the shop's). */
25
26
  countryFallback?: string;
26
27
  }) => Promise<{
27
28
  redeemed: TileCreditRedeemResult;
28
29
  cart: Cart;
29
30
  }>;
30
- /** Remove one or more applied gift cards from the current cart. */
31
+ /** Remove one or more applied gift cards from the current cart, by `AppliedGiftCard.id`. */
31
32
  removeAppliedGiftCards: (appliedGiftCardIds: string[]) => Promise<Cart>;
32
33
  }
33
34
  export declare function useTileCredit(opts: UseTileCreditOptions): UseTileCreditState;
@@ -1 +1 @@
1
- {"version":3,"file":"useTileCredit.d.ts","sourceRoot":"","sources":["../../src/react/useTileCredit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,IAAI,EACJ,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC;6DACyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B;2CACuC;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,sBAAsB,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAChE,mEAAmE;IACnE,sBAAsB,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAuF5E"}
1
+ {"version":3,"file":"useTileCredit.d.ts","sourceRoot":"","sources":["../../src/react/useTileCredit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,IAAI,EACJ,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC;6DACyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B;4GACwG;IACxG,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oGAAoG;QACpG,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,sBAAsB,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAChE,4FAA4F;IAC5F,sBAAsB,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAUD,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAmF5E"}
@@ -2,95 +2,103 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useTileCredit = useTileCredit;
4
4
  /**
5
- * useTileCredit — customer wallet + redeem hook.
5
+ * useTileCredit — customer wallet + redeem hook, for a caller that holds the token itself.
6
6
  *
7
- * The hook keeps the client wired to the ShopifyProvider's cart so
8
- * `redeemAndApply(amountCents)` mints a gift card AND applies it in one
9
- * call. It re-configures the underlying client whenever the customer
10
- * access token changes (rebuild the client on logout / new customer;
11
- * the token is baked in for the lifetime of the instance).
7
+ * @deprecated For the cart use `useCartStoreCredit()`, and for a balance `useStoreCredit()`: both read
8
+ * the provider's session (the token fresh for every request, renewed once on a 401) and need no token
9
+ * passed in. Kept for existing callers.
10
+ *
11
+ * Fixed 2026-10-05:
12
+ * - **Another shopper's wallet never shows.** What was read is held with the token it was read for, and
13
+ * a new token reads again; it used to keep shopper A's wallet for shopper B (re-reading only when
14
+ * the token went from none to some).
15
+ * - `redeemAndApply` adds the card through the provider's cart queue (`useCart().addGiftCardCodes`),
16
+ * keeping the cart's other gift cards and its buyer; it used to replace both. `removeAppliedGiftCards`
17
+ * goes through the queue too.
12
18
  */
13
19
  const react_1 = require("react");
14
20
  const shopify_1 = require("../shopify");
15
21
  const tileCredit_1 = require("../tileCredit");
22
+ const types_1 = require("../types");
16
23
  const ShopifyProvider_1 = require("./ShopifyProvider");
17
24
  function useTileCredit(opts) {
18
25
  const { baseUrl = tileCredit_1.DEFAULT_TILE_CREDIT_BASE_URL, customerAccessToken, shopDomain, autoLoad = true } = opts;
19
26
  const cartState = (0, ShopifyProvider_1.useCart)();
20
- const [wallet, setWallet] = (0, react_1.useState)(null);
21
- const [config, setConfig] = (0, react_1.useState)(null);
22
- const [loading, setLoading] = (0, react_1.useState)(false);
23
- const [error, setError] = (0, react_1.useState)(null);
24
- const [configured, setConfigured] = (0, react_1.useState)(false);
25
- // (Re)configure the client whenever the token / domain / baseUrl changes.
26
- (0, react_1.useEffect)(() => {
27
- if (!customerAccessToken) {
28
- setConfigured(false);
29
- setWallet(null);
30
- return;
31
- }
32
- shopify_1.shopify.tileCredit.configure({ baseUrl, customerAccessToken, shopDomain });
33
- setConfigured(true);
34
- }, [baseUrl, customerAccessToken, shopDomain]);
27
+ const token = customerAccessToken || null;
28
+ const [read, setRead] = (0, react_1.useState)({ token: null, wallet: null, config: null, error: null });
29
+ const [loadingFor, setLoadingFor] = (0, react_1.useState)(null);
30
+ const current = read.token === token ? read : { token, wallet: null, config: null, error: null };
31
+ const tokenRef = (0, react_1.useRef)(token);
32
+ tokenRef.current = token;
33
+ // The client for the current token; also configured as the shared one, as before.
34
+ const client = (0, react_1.useMemo)(() => {
35
+ if (!token)
36
+ return null;
37
+ shopify_1.shopify.tileCredit.configure({ baseUrl, customerAccessToken: token, shopDomain });
38
+ return new tileCredit_1.TileCreditClient({ baseUrl, customerAccessToken: token, shopDomain });
39
+ }, [baseUrl, token, shopDomain]);
35
40
  const refresh = (0, react_1.useCallback)(async () => {
36
- if (!configured)
37
- return;
38
- const client = shopify_1.shopify.tileCredit.client();
39
- if (!client)
41
+ if (!client || !token)
40
42
  return;
41
- setLoading(true);
42
- setError(null);
43
+ setLoadingFor(token);
43
44
  try {
44
45
  const [w, c] = await Promise.all([client.getWallet(), client.getConfig()]);
45
- setWallet(w);
46
- setConfig(c);
46
+ if (tokenRef.current === token)
47
+ setRead({ token, wallet: w, config: c, error: null });
47
48
  }
48
49
  catch (e) {
49
- setError(e instanceof Error ? e : new Error(String(e)));
50
+ if (tokenRef.current === token) {
51
+ const error = e instanceof Error ? e : new Error(String(e));
52
+ setRead((before) => (before.token === token ? { ...before, error } : { token, wallet: null, config: null, error }));
53
+ }
50
54
  }
51
55
  finally {
52
- setLoading(false);
56
+ setLoadingFor((now) => (now === token ? null : now));
53
57
  }
54
- }, [configured]);
58
+ }, [client, token]);
55
59
  (0, react_1.useEffect)(() => {
56
- if (autoLoad && configured)
60
+ if (autoLoad && client)
57
61
  void refresh();
58
- }, [autoLoad, configured, refresh]);
62
+ }, [autoLoad, client, refresh]);
59
63
  const redeemAndApply = (0, react_1.useCallback)(async (amountCents, o = {}) => {
60
- const currentCart = cartState.cart;
61
- if (!currentCart)
64
+ var _a;
65
+ if (!cartState.cart)
62
66
  throw new Error('useTileCredit.redeemAndApply: no cart loaded');
63
- const result = await shopify_1.shopify.tileCredit.redeemAndApplyToCart({
64
- cartId: currentCart.id,
67
+ if (!client)
68
+ throw new types_1.TileCreditError('unauthorized', 'No signed-in customer');
69
+ const redeemed = await client.redeem({
65
70
  amountCents,
66
71
  idempotencyKey: o.idempotencyKey,
67
- reason: o.reason,
68
- countryFallback: o.countryFallback,
72
+ reason: (_a = o.reason) !== null && _a !== void 0 ? _a : 'Wallet redemption',
69
73
  });
70
- // Refresh the wallet so the balance debit shows in the UI.
74
+ let cart;
75
+ try {
76
+ cart = await cartState.addGiftCardCodes([redeemed.code]);
77
+ }
78
+ catch (e) {
79
+ throw new types_1.TileCreditError('cart_refused', e instanceof Error ? e.message : String(e));
80
+ }
81
+ if (!cart)
82
+ throw new types_1.TileCreditError('cart_refused', 'There is no cart to put the credit on');
71
83
  void refresh();
72
- // The convenience method already applied; refresh cart state so the
73
- // provider re-emits with the new totals + appliedGiftCards.
74
- await cartState.refresh();
75
- return result;
76
- }, [cartState, refresh]);
84
+ return { redeemed, cart };
85
+ }, [cartState, client, refresh]);
77
86
  const removeAppliedGiftCards = (0, react_1.useCallback)(async (ids) => {
78
- const currentCart = cartState.cart;
79
- if (!currentCart)
87
+ const next = await cartState.removeGiftCards(ids);
88
+ if (!next)
80
89
  throw new Error('useTileCredit.removeAppliedGiftCards: no cart loaded');
81
- const next = await shopify_1.shopify.cart.removeGiftCardCodes(currentCart.id, ids);
82
- await cartState.refresh();
83
90
  return next;
84
91
  }, [cartState]);
92
+ const loading = loadingFor !== null && loadingFor === token;
85
93
  return (0, react_1.useMemo)(() => ({
86
- ready: configured && !loading && (wallet !== null || error !== null),
87
- wallet,
88
- config,
94
+ ready: !!token && !loading && (current.wallet !== null || current.error !== null),
95
+ wallet: current.wallet,
96
+ config: current.config,
89
97
  loading,
90
- error,
98
+ error: current.error,
91
99
  refresh,
92
100
  redeemAndApply,
93
101
  removeAppliedGiftCards,
94
- }), [configured, wallet, config, loading, error, refresh, redeemAndApply, removeAppliedGiftCards]);
102
+ }), [token, loading, current.wallet, current.config, current.error, refresh, redeemAndApply, removeAppliedGiftCards]);
95
103
  }
96
104
  //# sourceMappingURL=useTileCredit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTileCredit.js","sourceRoot":"","sources":["../../src/react/useTileCredit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTileCredit.js","sourceRoot":"","sources":["../../src/react/useTileCredit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shopify.d.ts","sourceRoot":"","sources":["../src/shopify.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjE,eAAO,MAAM,OAAO,EAAE,kBAkCrB,CAAC"}
1
+ {"version":3,"file":"shopify.d.ts","sourceRoot":"","sources":["../src/shopify.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjE,eAAO,MAAM,OAAO,EAAE,kBAmCrB,CAAC"}
package/dist/shopify.js CHANGED
@@ -11,6 +11,7 @@ const customer_1 = require("./customer");
11
11
  const products_1 = require("./products");
12
12
  const variants_1 = require("./variants");
13
13
  const wishlist_1 = require("./wishlist");
14
+ const waitlist_1 = require("./waitlist");
14
15
  const client_1 = require("./client");
15
16
  const money_1 = require("./money");
16
17
  const cartPolicy_1 = require("./cartPolicy");
@@ -37,6 +38,7 @@ exports.shopify = {
37
38
  customer: customer_1.customer,
38
39
  blogs: blogs_1.blogs,
39
40
  wishlist: wishlist_1.wishlist,
41
+ waitlist: waitlist_1.waitlist,
40
42
  shop: money_1.shop,
41
43
  formatMoney: money_1.formatMoney,
42
44
  alerts: {
@@ -1 +1 @@
1
- {"version":3,"file":"shopify.js","sourceRoot":"","sources":["../src/shopify.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,6EAA6E;AAC7E,mFAAmF;AACnF,mCAAgC;AAChC,iCAA8B;AAC9B,+CAA4C;AAC5C,yCAAsC;AACtC,yCAAsC;AACtC,yCAAsC;AACtC,yCAAsC;AACtC,qCAAmD;AACnD,mCAA4C;AAC5C,6CAA6C;AAC7C,yCAAqF;AACrF,6CAA8F;AAGjF,QAAA,OAAO,GAAuB;IACzC,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;QAClB,sEAAsE;QACtE,wEAAwE;QACxE,IAAA,sBAAW,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAA,6BAAkB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,IAAA,0BAAa,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,YAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IACD,OAAO;QACL,OAAO,IAAA,qBAAY,GAAE,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,KAAK;IACb,QAAQ,EAAR,mBAAQ;IACR,QAAQ,EAAR,mBAAQ;IACR,WAAW,EAAX,yBAAW;IACX,IAAI,EAAJ,WAAI;IACJ,QAAQ,EAAR,mBAAQ;IACR,KAAK,EAAL,aAAK;IACL,QAAQ,EAAR,mBAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,WAAW,EAAX,mBAAW;IACX,MAAM,EAAE;QACN,OAAO,EAAP,kBAAO;QACP,WAAW,EAAX,sBAAW;QACX,aAAa,EAAb,wBAAa;QACb,SAAS,EAAE,0BAAa;KACzB;IACD,UAAU,EAAE;QACV,SAAS,EAAE,gCAAmB;QAC9B,MAAM,EAAE,gCAAmB;QAC3B,oBAAoB,EAApB,iCAAoB;KACrB;CACF,CAAC"}
1
+ {"version":3,"file":"shopify.js","sourceRoot":"","sources":["../src/shopify.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,6EAA6E;AAC7E,mFAAmF;AACnF,mCAAgC;AAChC,iCAA8B;AAC9B,+CAA4C;AAC5C,yCAAsC;AACtC,yCAAsC;AACtC,yCAAsC;AACtC,yCAAsC;AACtC,yCAAsC;AACtC,qCAAmD;AACnD,mCAA4C;AAC5C,6CAA6C;AAC7C,yCAAqF;AACrF,6CAA8F;AAGjF,QAAA,OAAO,GAAuB;IACzC,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;QAClB,sEAAsE;QACtE,wEAAwE;QACxE,IAAA,sBAAW,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAA,6BAAkB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,IAAA,0BAAa,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,YAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IACD,OAAO;QACL,OAAO,IAAA,qBAAY,GAAE,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,KAAK;IACb,QAAQ,EAAR,mBAAQ;IACR,QAAQ,EAAR,mBAAQ;IACR,WAAW,EAAX,yBAAW;IACX,IAAI,EAAJ,WAAI;IACJ,QAAQ,EAAR,mBAAQ;IACR,KAAK,EAAL,aAAK;IACL,QAAQ,EAAR,mBAAQ;IACR,QAAQ,EAAR,mBAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,WAAW,EAAX,mBAAW;IACX,MAAM,EAAE;QACN,OAAO,EAAP,kBAAO;QACP,WAAW,EAAX,sBAAW;QACX,aAAa,EAAb,wBAAa;QACb,SAAS,EAAE,0BAAa;KACzB;IACD,UAAU,EAAE;QACV,SAAS,EAAE,gCAAmB;QAC9B,MAAM,EAAE,gCAAmB;QAC3B,oBAAoB,EAApB,iCAAoB;KACrB;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { WishlistStorageAdapter } from './types';
2
+ /** Characters of stored details per list. See the note above. */
3
+ export declare const STORED_DETAILS_BUDGET = 1000000;
4
+ export interface StoredListCodec<T> {
5
+ /** The item's id, unique in the list. */
6
+ idOf(item: T): string;
7
+ /** When it was added (ms epoch, 0 when unknown), to order a merge. */
8
+ addedAt(item: T): number;
9
+ /** One stored entry, in any shape the key has held. Null when it names nothing. */
10
+ read(v: unknown): T | null;
11
+ /** The entry to store. `details` is what `detailsOf` returned, or undefined when over the budget. */
12
+ write(item: T, details: unknown): Record<string, unknown>;
13
+ /** The details to store with the item (trimmed as wanted), undefined when it has none. */
14
+ detailsOf(item: T): unknown;
15
+ }
16
+ export interface StoredList<T> {
17
+ /** Points the list at a storage and key. Nothing is read until `load`. */
18
+ open(storage: WishlistStorageAdapter | null, key: string): void;
19
+ /** The stored items; `[]` when there are none. A list that failed to read is `[]` and never written. */
20
+ load(): Promise<T[]>;
21
+ /** Merges each of `keys` not merged yet into `items`, newest first, and stores the result. */
22
+ mergeOnce(items: T[], keys: string[]): Promise<T[]>;
23
+ save(items: T[]): Promise<boolean>;
24
+ clear(): Promise<void>;
25
+ }
26
+ export declare function createStoredList<T>(codec: StoredListCodec<T>): StoredList<T>;
27
+ //# sourceMappingURL=storedList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storedList.d.ts","sourceRoot":"","sources":["../src/storedList.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAE/C,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yCAAyC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACtB,sEAAsE;IACtE,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACzB,mFAAmF;IACnF,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;IAC3B,qGAAqG;IACrG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,0FAA0F;IAC1F,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,0EAA0E;IAC1E,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,wGAAwG;IACxG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,8FAA8F;IAC9F,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAqI5E"}