@tiledev/sdk-shopify 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +650 -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/useProductPage.d.ts +148 -0
  103. package/dist/react/useProductPage.d.ts.map +1 -0
  104. package/dist/react/useProductPage.js +178 -0
  105. package/dist/react/useProductPage.js.map +1 -0
  106. package/dist/react/useProductRecommendations.d.ts +27 -0
  107. package/dist/react/useProductRecommendations.d.ts.map +1 -0
  108. package/dist/react/useProductRecommendations.js +76 -0
  109. package/dist/react/useProductRecommendations.js.map +1 -0
  110. package/dist/react/useStoreCredit.d.ts +58 -0
  111. package/dist/react/useStoreCredit.d.ts.map +1 -0
  112. package/dist/react/useStoreCredit.js +209 -0
  113. package/dist/react/useStoreCredit.js.map +1 -0
  114. package/dist/react/useTileCredit.d.ts +4 -3
  115. package/dist/react/useTileCredit.d.ts.map +1 -1
  116. package/dist/react/useTileCredit.js +63 -55
  117. package/dist/react/useTileCredit.js.map +1 -1
  118. package/dist/shopify.d.ts.map +1 -1
  119. package/dist/shopify.js +2 -0
  120. package/dist/shopify.js.map +1 -1
  121. package/dist/storedList.d.ts +27 -0
  122. package/dist/storedList.d.ts.map +1 -0
  123. package/dist/storedList.js +152 -0
  124. package/dist/storedList.js.map +1 -0
  125. package/dist/tileCredit.d.ts +25 -10
  126. package/dist/tileCredit.d.ts.map +1 -1
  127. package/dist/tileCredit.js +97 -45
  128. package/dist/tileCredit.js.map +1 -1
  129. package/dist/types.d.ts +407 -34
  130. package/dist/types.d.ts.map +1 -1
  131. package/dist/types.js +1 -2
  132. package/dist/types.js.map +1 -1
  133. package/dist/variants.d.ts.map +1 -1
  134. package/dist/variants.js +4 -3
  135. package/dist/variants.js.map +1 -1
  136. package/dist/waitlist.d.ts +4 -0
  137. package/dist/waitlist.d.ts.map +1 -0
  138. package/dist/waitlist.js +213 -0
  139. package/dist/waitlist.js.map +1 -0
  140. package/dist/wishlist.d.ts.map +1 -1
  141. package/dist/wishlist.js +70 -47
  142. package/dist/wishlist.js.map +1 -1
  143. package/package.json +2 -2
@@ -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"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STORED_DETAILS_BUDGET = void 0;
4
+ exports.createStoredList = createStoredList;
5
+ /** Characters of stored details per list. See the note above. */
6
+ exports.STORED_DETAILS_BUDGET = 1000000;
7
+ function createStoredList(codec) {
8
+ let storage = null;
9
+ let key = '';
10
+ /** False once the stored list failed to read: writing then would replace a list we never saw. */
11
+ let writable = true;
12
+ /** The entries under `k`, de-duplicated; `null` when it could not be read at all. */
13
+ async function readList(k) {
14
+ if (!storage)
15
+ return [];
16
+ let raw;
17
+ try {
18
+ raw = await Promise.resolve(storage.getItem(k));
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ if (!raw)
24
+ return [];
25
+ let parsed;
26
+ try {
27
+ parsed = JSON.parse(raw);
28
+ }
29
+ catch {
30
+ parsed = undefined;
31
+ }
32
+ if (!Array.isArray(parsed)) {
33
+ try {
34
+ const backup = `${k}:unreadable`;
35
+ if (!(await Promise.resolve(storage.getItem(backup))))
36
+ await Promise.resolve(storage.setItem(backup, raw));
37
+ }
38
+ catch {
39
+ /* best effort */
40
+ }
41
+ return [];
42
+ }
43
+ const seen = new Set();
44
+ const out = [];
45
+ for (const v of parsed) {
46
+ const item = codec.read(v);
47
+ if (!item)
48
+ continue;
49
+ const id = codec.idOf(item);
50
+ if (seen.has(id))
51
+ continue;
52
+ seen.add(id);
53
+ out.push(item);
54
+ }
55
+ return out;
56
+ }
57
+ function serialize(items) {
58
+ let budget = exports.STORED_DETAILS_BUDGET;
59
+ return JSON.stringify(items.map((item) => {
60
+ const details = codec.detailsOf(item);
61
+ if (details == null)
62
+ return codec.write(item, details);
63
+ const size = JSON.stringify(details).length;
64
+ if (size > budget)
65
+ return codec.write(item, undefined);
66
+ budget -= size;
67
+ return codec.write(item, details);
68
+ }));
69
+ }
70
+ async function save(items) {
71
+ if (!storage || !writable)
72
+ return false;
73
+ try {
74
+ await Promise.resolve(storage.setItem(key, serialize(items)));
75
+ return true;
76
+ }
77
+ catch {
78
+ // Storage full or unavailable: the list in memory stays correct regardless.
79
+ return false;
80
+ }
81
+ }
82
+ return {
83
+ open(nextStorage, nextKey) {
84
+ storage = nextStorage;
85
+ key = nextKey;
86
+ writable = true;
87
+ },
88
+ async load() {
89
+ const items = await readList(key);
90
+ writable = items !== null;
91
+ return items !== null && items !== void 0 ? items : [];
92
+ },
93
+ async mergeOnce(items, keys) {
94
+ if (!storage || !writable || keys.length === 0)
95
+ return items;
96
+ const markerKey = `${key}:merged`;
97
+ let merged = [];
98
+ try {
99
+ const raw = await Promise.resolve(storage.getItem(markerKey));
100
+ const parsed = raw ? JSON.parse(raw) : [];
101
+ if (Array.isArray(parsed))
102
+ merged = parsed.filter((k) => typeof k === 'string');
103
+ }
104
+ catch {
105
+ return items;
106
+ }
107
+ const pending = keys.filter((k) => k !== key && !merged.includes(k));
108
+ if (pending.length === 0)
109
+ return items;
110
+ const seen = new Set(items.map(codec.idOf));
111
+ const next = items.slice();
112
+ for (const k of pending) {
113
+ const found = await readList(k);
114
+ if (found === null)
115
+ return items;
116
+ for (const item of found) {
117
+ const id = codec.idOf(item);
118
+ if (seen.has(id))
119
+ continue;
120
+ seen.add(id);
121
+ next.push(item);
122
+ }
123
+ }
124
+ if (next.length > items.length) {
125
+ // Newest first across the lists; entries without a date keep their order, last.
126
+ next.sort((a, b) => codec.addedAt(b) - codec.addedAt(a));
127
+ // Not recorded if it couldn't be stored: merged again next launch, which skips what's there.
128
+ if (!(await save(next)))
129
+ return next;
130
+ }
131
+ try {
132
+ await Promise.resolve(storage.setItem(markerKey, JSON.stringify([...merged, ...pending])));
133
+ }
134
+ catch {
135
+ /* merged again next launch: entries already saved are skipped */
136
+ }
137
+ return next;
138
+ },
139
+ save,
140
+ async clear() {
141
+ if (!storage || !writable)
142
+ return;
143
+ try {
144
+ await Promise.resolve(storage.removeItem(key));
145
+ }
146
+ catch {
147
+ /* ignore */
148
+ }
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=storedList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storedList.js","sourceRoot":"","sources":["../src/storedList.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,22 @@ export declare function moneyToCents(money: string | number): number;
8
8
  export declare const DEFAULT_TILE_CREDIT_BASE_URL = "https://tile-credit.apptile.io";
9
9
  export declare class TileCreditClient implements TileCreditAPI {
10
10
  private readonly baseUrl;
11
- private readonly token;
11
+ private readonly getAccessToken;
12
+ private readonly renewAccessToken;
12
13
  private readonly shopDomain;
13
14
  private readonly signal?;
14
15
  private readonly timeoutMs;
15
16
  constructor(config: TileCreditConfig);
17
+ /**
18
+ * One request with a token read just now. A 401 renews the token once (`renewAccessToken`) and sends
19
+ * the request again; a second 401, or no new token, is `unauthorized`. Nothing here signs anyone out:
20
+ * the service also answers 401 for a shop it doesn't know.
21
+ */
16
22
  private call;
23
+ /** A token from `source`, or `unauthorized` (signed out) / `network` (couldn't be renewed). */
24
+ private tokenOrThrow;
25
+ private send;
26
+ private read;
17
27
  getWallet(): Promise<TileCreditWallet>;
18
28
  getLedger(opts?: {
19
29
  limit?: number;
@@ -24,7 +34,7 @@ export declare class TileCreditClient implements TileCreditAPI {
24
34
  }>;
25
35
  getConfig(): Promise<TileCreditPublicConfig>;
26
36
  /**
27
- * Ledger + gift-cards joined into one history feed (docs §4.6). Each redeem
37
+ * Ledger + gift-cards joined into one history feed. Each redeem
28
38
  * row gets `.card` populated with the masked info (last4 / status / expiry)
29
39
  * so you can render "•••• adf7 · depleted" in one pass. Non-redeem rows
30
40
  * pass through unchanged with `card: null`.
@@ -39,17 +49,21 @@ export declare class TileCreditClient implements TileCreditAPI {
39
49
  }): Promise<TileCreditHistoryPage>;
40
50
  redeem(input: TileCreditRedeemInput): Promise<TileCreditRedeemResult>;
41
51
  }
42
- /** Configure the singleton client for the current customer session. Safe to
43
- * call multiple times — replaces the instance. Rebuild on logout / new
44
- * customer (`token` is baked in for the lifetime of the instance). */
52
+ /** Configure the shared client. Safe to call multiple times — it replaces the instance. With a fixed
53
+ * `customerAccessToken`, configure again for each new token; with `getAccessToken` it stays fresh. */
45
54
  export declare function configureTileCredit(config: TileCreditConfig): TileCreditAPI;
46
55
  export declare function getTileCreditClient(): TileCreditAPI | null;
47
56
  /**
48
- * Mint a gift card and apply it to the given cart — the "one function that
49
- * does it all" from the integration guide (§5.7). If `countryFallback` is
50
- * omitted, the shop's `localization.country.isoCode` is used. The buyer
51
- * identity update is a no-op when the cart already has a countryCode, so
52
- * calling this on a freshly created cart is safe.
57
+ * @deprecated Use `useCartStoreCredit()` in a React app: it allows one Apply at a time, finds its card
58
+ * on the cart, and writes through the provider's cart queue (this writes to the cart directly, so the
59
+ * provider's cart state is stale until it reads the cart again). Kept for callers without React.
60
+ *
61
+ * Mints a gift card with the shared client and adds it to the cart, keeping the cart's other gift
62
+ * cards (`cartGiftCardCodesAdd`; this used `cartGiftCardCodesUpdate`, which took them off). The cart's
63
+ * country is set only when it has none (`countryFallback`, else the shop's), keeping its email, and the
64
+ * shopper when `customerAccessToken` is passed; it used to replace the identity with the country alone,
65
+ * which dropped both. Throws `TileCreditError('cart_refused')` when Shopify didn't put the card on the
66
+ * cart; the card then only holds the credit (nothing is charged), and the next redeem disables it.
53
67
  */
54
68
  export declare function redeemAndApplyToCart(opts: {
55
69
  cartId: string;
@@ -57,6 +71,7 @@ export declare function redeemAndApplyToCart(opts: {
57
71
  idempotencyKey?: string;
58
72
  reason?: string;
59
73
  countryFallback?: string;
74
+ customerAccessToken?: string;
60
75
  }): Promise<{
61
76
  redeemed: TileCreditRedeemResult;
62
77
  cart: Cart;
@@ -1 +1 @@
1
- {"version":3,"file":"tileCredit.d.ts","sourceRoot":"","sources":["../src/tileCredit.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,gBAAgB,EAIhB,qBAAqB,EACrB,wBAAwB,EAExB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAOjB;yDACyD;AACzD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAI3D;AA4BD,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,mCAAmC,CAAC;AAE7E,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,gBAAgB;YAatB,IAAI;IA+CZ,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAYtC,SAAS,CAAC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASxF,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,wBAAwB,EAAE,CAAA;KAAE,CAAC;IAKnE,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC;IASlD;;;;;;;;;OASG;IACG,UAAU,CAAC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuB1F,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAW5E;AAQD;;uEAEuE;AACvE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAG3E;AAED,wBAAgB,mBAAmB,IAAI,aAAa,GAAG,IAAI,CAE1D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAwB5D"}
1
+ {"version":3,"file":"tileCredit.d.ts","sourceRoot":"","sources":["../src/tileCredit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,gBAAgB,EAIhB,qBAAqB,EACrB,wBAAwB,EAExB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAOjB;yDACyD;AACzD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAI3D;AAmCD,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,mCAAmC,CAAC;AAE7E,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwC;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,gBAAgB;IAepC;;;;OAIG;YACW,IAAI;IAclB,+FAA+F;YACjF,YAAY;YAYZ,IAAI;IAuClB,OAAO,CAAC,IAAI;IAWN,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAYtC,SAAS,CAAC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASxF,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,wBAAwB,EAAE,CAAA;KAAE,CAAC;IAKnE,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC;IASlD;;;;;;;;;OASG;IACG,UAAU,CAAC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuB1F,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAW5E;AAQD;uGACuG;AACvG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAG3E;AAED,wBAAgB,mBAAmB,IAAI,aAAa,GAAG,IAAI,CAE1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CA2B5D"}