@tiledev/sdk-apptile-live-selling 0.11.0 → 0.12.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 (70) hide show
  1. package/README.md +67 -1
  2. package/dist/auctions.d.ts.map +1 -1
  3. package/dist/auctions.js +22 -1
  4. package/dist/auctions.js.map +1 -1
  5. package/dist/commentLinkCards.d.ts +11 -0
  6. package/dist/commentLinkCards.d.ts.map +1 -0
  7. package/dist/commentLinkCards.js +70 -0
  8. package/dist/commentLinkCards.js.map +1 -0
  9. package/dist/commentLinks.d.ts +29 -0
  10. package/dist/commentLinks.d.ts.map +1 -1
  11. package/dist/commentLinks.js.map +1 -1
  12. package/dist/index.d.ts +6 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +39 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/react/index.d.ts +5 -0
  17. package/dist/react/index.d.ts.map +1 -1
  18. package/dist/react/index.js +11 -1
  19. package/dist/react/index.js.map +1 -1
  20. package/dist/react/index.web.d.ts +5 -0
  21. package/dist/react/index.web.d.ts.map +1 -1
  22. package/dist/react/index.web.js +12 -1
  23. package/dist/react/index.web.js.map +1 -1
  24. package/dist/react/useCommentLinkCards.d.ts +6 -0
  25. package/dist/react/useCommentLinkCards.d.ts.map +1 -0
  26. package/dist/react/useCommentLinkCards.js +67 -0
  27. package/dist/react/useCommentLinkCards.js.map +1 -0
  28. package/dist/react/useMySilentAuctionBids.d.ts +29 -0
  29. package/dist/react/useMySilentAuctionBids.d.ts.map +1 -0
  30. package/dist/react/useMySilentAuctionBids.js +154 -0
  31. package/dist/react/useMySilentAuctionBids.js.map +1 -0
  32. package/dist/react/useSilentAuctionLot.d.ts +42 -0
  33. package/dist/react/useSilentAuctionLot.d.ts.map +1 -0
  34. package/dist/react/useSilentAuctionLot.js +147 -0
  35. package/dist/react/useSilentAuctionLot.js.map +1 -0
  36. package/dist/react/useSilentAuctionLots.d.ts +39 -0
  37. package/dist/react/useSilentAuctionLots.d.ts.map +1 -0
  38. package/dist/react/useSilentAuctionLots.js +59 -0
  39. package/dist/react/useSilentAuctionLots.js.map +1 -0
  40. package/dist/react/useSilentAuctionRounds.d.ts +14 -0
  41. package/dist/react/useSilentAuctionRounds.d.ts.map +1 -0
  42. package/dist/react/useSilentAuctionRounds.js +40 -0
  43. package/dist/react/useSilentAuctionRounds.js.map +1 -0
  44. package/dist/replays.d.ts +7 -0
  45. package/dist/replays.d.ts.map +1 -1
  46. package/dist/replays.js +16 -0
  47. package/dist/replays.js.map +1 -1
  48. package/dist/sessionTypes.d.ts +9 -0
  49. package/dist/sessionTypes.d.ts.map +1 -1
  50. package/dist/sessionTypes.js.map +1 -1
  51. package/dist/shopifyCommerce.d.ts +43 -1
  52. package/dist/shopifyCommerce.d.ts.map +1 -1
  53. package/dist/shopifyCommerce.js +62 -2
  54. package/dist/shopifyCommerce.js.map +1 -1
  55. package/dist/silentAuctionFeed.d.ts +47 -0
  56. package/dist/silentAuctionFeed.d.ts.map +1 -0
  57. package/dist/silentAuctionFeed.js +232 -0
  58. package/dist/silentAuctionFeed.js.map +1 -0
  59. package/dist/silentAuctionRules.d.ts +206 -0
  60. package/dist/silentAuctionRules.d.ts.map +1 -0
  61. package/dist/silentAuctionRules.js +424 -0
  62. package/dist/silentAuctionRules.js.map +1 -0
  63. package/dist/silentAuctions.d.ts +65 -0
  64. package/dist/silentAuctions.d.ts.map +1 -0
  65. package/dist/silentAuctions.js +272 -0
  66. package/dist/silentAuctions.js.map +1 -0
  67. package/dist/types.d.ts +40 -2
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BID_RECORD_KEY = exports.BID_RECORD_NAMESPACE = void 0;
4
+ exports.lotProductGid = lotProductGid;
5
+ exports.toSilentAuctionLot = toSilentAuctionLot;
6
+ exports.lotsFromResponse = lotsFromResponse;
7
+ exports.lotKey = lotKey;
8
+ exports.timeLeftMs = timeLeftMs;
9
+ exports.lotPhase = lotPhase;
10
+ exports.inExtensionWindow = inExtensionWindow;
11
+ exports.wasExtended = wasExtended;
12
+ exports.nextBid = nextBid;
13
+ exports.bidCapState = bidCapState;
14
+ exports.isLeading = isLeading;
15
+ exports.lotStatus = lotStatus;
16
+ exports.orderLots = orderLots;
17
+ exports.upcomingGroups = upcomingGroups;
18
+ exports.myBidsTabs = myBidsTabs;
19
+ exports.productPageBuyBar = productPageBuyBar;
20
+ exports.bidRecordEntries = bidRecordEntries;
21
+ exports.bidRecordEntry = bidRecordEntry;
22
+ exports.queryableBidEntries = queryableBidEntries;
23
+ exports.toSilentAuctionRound = toSilentAuctionRound;
24
+ /**
25
+ * Silent auctions' rules (0.12.0, moved from Sparkl's app on 2026-10-17: "added in the SDK", "the same
26
+ * way"). Pure and platform-free: no network, no React, so each rule is tested on its own.
27
+ *
28
+ * A silent auction is a set of timed lots on Apptile's auction service, bid on from the product page
29
+ * rather than in a show. The service answers in more than one shape (PascalCase and camelCase keys, ISO
30
+ * strings and epoch seconds), so every reader goes through `toSilentAuctionLot`.
31
+ */
32
+ const shopifyIds_1 = require("./shopifyIds");
33
+ /** Epoch ms. 10-digit numbers are seconds, 13-digit ms; strings may be either, or ISO. */
34
+ function toMs(value) {
35
+ if (value === undefined || value === null || value === '')
36
+ return null;
37
+ if (typeof value === 'number')
38
+ return Number.isFinite(value) ? (value < 1e12 ? value * 1000 : value) : null;
39
+ const asNumber = Number(value);
40
+ if (Number.isFinite(asNumber))
41
+ return asNumber < 1e12 ? asNumber * 1000 : asNumber;
42
+ const parsed = Date.parse(String(value));
43
+ return Number.isNaN(parsed) ? null : parsed;
44
+ }
45
+ function toNumber(value) {
46
+ if (value === undefined || value === null || value === '')
47
+ return null;
48
+ const asNumber = Number(value);
49
+ return Number.isFinite(asNumber) ? asNumber : null;
50
+ }
51
+ function firstOf(...values) {
52
+ for (const value of values)
53
+ if (value !== undefined && value !== null && value !== '')
54
+ return value;
55
+ return null;
56
+ }
57
+ function text(value) {
58
+ if (value === undefined || value === null)
59
+ return null;
60
+ const trimmed = String(value).trim();
61
+ return trimmed || null;
62
+ }
63
+ /** A Shopify product GID from a GID or a bare numeric id; null for anything else (a `prod-1` key). */
64
+ function lotProductGid(value) {
65
+ const raw = text(value);
66
+ if (!raw)
67
+ return null;
68
+ if (raw.startsWith('gid://shopify/Product/'))
69
+ return raw;
70
+ return /^\d+$/.test(raw) ? (0, shopifyIds_1.productGid)(raw) : null;
71
+ }
72
+ /** One lot, from any of the service's shapes (the list, `/product/{id}`, the bulk read). */
73
+ function toSilentAuctionLot(raw) {
74
+ var _a, _b;
75
+ const row = (raw && typeof raw === 'object' ? raw : {});
76
+ const pk = typeof row.PK === 'string' && row.PK.startsWith('PRODUCT#') ? row.PK.slice('PRODUCT#'.length) : null;
77
+ const productId = text(firstOf(row.productId, row.ProductId, row.storeProductId, row.StoreProductId, pk));
78
+ const gid = (_a = lotProductGid(firstOf(row.storeProductId, row.StoreProductId))) !== null && _a !== void 0 ? _a : lotProductGid(firstOf(row.productId, row.ProductId));
79
+ const bidder = firstOf(row.HighestBidderDetails, row.highestBidderDetails, row.highestBidder);
80
+ const enabled = firstOf(row.extBiddingEnabled, row.ExtBiddingEnabled);
81
+ return {
82
+ storeProductId: gid ? (0, shopifyIds_1.bareId)(gid) : productId,
83
+ productGid: gid,
84
+ productHandle: text(firstOf(row.productHandle, row.ProductHandle, row.handle, row.Handle, row.productSlug)),
85
+ auctionId: text(firstOf(row.auctionId, row.AuctionId)),
86
+ streamId: text(firstOf(row.stream_id, row.streamId, row.StreamId)),
87
+ lotNumber: toNumber(firstOf(row.lotNumber, row.LotNumber, row.lot_number)),
88
+ startsAt: toMs(firstOf(row.StartTime, row.startTime, row.StartTimeStamp, row.startTimestamp, row.currentStartTime, row.CurrentStartTime)),
89
+ endsAt: toMs(firstOf(row.EndTimeStamp, row.endTimeStamp, row.EndTime, row.endTime, row.endTimestamp, row.currentEndTime, row.CurrentEndTime)),
90
+ startingPrice: toNumber(firstOf(row.StartingPrice, row.startingPrice, row.startingBid, row.StartingBid)),
91
+ highestBid: toNumber(firstOf(row.HighestBid, row.highestBid)),
92
+ bidIncrement: toNumber(firstOf(row.BidIncrement, row.bidIncrement)),
93
+ biddingCap: toNumber(firstOf(row.biddingCap, row.BiddingCap)),
94
+ highestBidderId: bidder && typeof bidder === 'object' && bidder.userId != null ? (0, shopifyIds_1.bareId)(String(bidder.userId)) : null,
95
+ // `bareId` though the service sends a plain id: a no-op on one, and right the day it sends a GID.
96
+ highestBidVariantId: text(firstOf(row.HighestBidVariantId, row.highestBidVariantId)) ? (0, shopifyIds_1.bareId)(String(firstOf(row.HighestBidVariantId, row.highestBidVariantId))) : null,
97
+ extendedBidding: {
98
+ enabled: enabled === true || enabled === 'true',
99
+ // Left null rather than 0 when absent: a non-positive trigger is an open gate, and a made-up
100
+ // window would be worse than none.
101
+ triggerMs: toNumber(firstOf(row.extBiddingTriggerMs, row.ExtBiddingTriggerMs)),
102
+ durationMs: toNumber(firstOf(row.extBiddingDurationMs, row.ExtBiddingDurationMs)),
103
+ },
104
+ biddingWarAt: (_b = firstOf(row.BiddingWarNotifiedAt, row.biddingWarNotifiedAt, row.bidding_war_notified_at)) !== null && _b !== void 0 ? _b : null,
105
+ purchaseWindowMs: toNumber(firstOf(row.timeAllowedForPurchase, row.TimeAllowedForPurchase, row.timeAllowedForPurchaseMs)),
106
+ raw,
107
+ };
108
+ }
109
+ /** The lots in a list response: a bare array, or one wrapped in `items`, `products`, `auctionProducts` or `data`. */
110
+ function lotsFromResponse(json) {
111
+ var _a, _b, _c, _d;
112
+ const body = json;
113
+ const rows = Array.isArray(body)
114
+ ? body
115
+ : ((_d = (_c = (_b = (_a = body === null || body === void 0 ? void 0 : body.items) !== null && _a !== void 0 ? _a : body === null || body === void 0 ? void 0 : body.products) !== null && _b !== void 0 ? _b : body === null || body === void 0 ? void 0 : body.auctionProducts) !== null && _c !== void 0 ? _c : body === null || body === void 0 ? void 0 : body.data) !== null && _d !== void 0 ? _d : []);
116
+ return Array.isArray(rows) ? rows.map(toSilentAuctionLot) : [];
117
+ }
118
+ /** The key a lot keeps across reads: its product and its round. */
119
+ function lotKey(lot) {
120
+ if (lot.productGid && lot.auctionId)
121
+ return `${lot.productGid}#${lot.auctionId}`;
122
+ if (lot.auctionId)
123
+ return `auction:${lot.auctionId}`;
124
+ if (lot.productGid)
125
+ return `gid:${lot.productGid}`;
126
+ return null;
127
+ }
128
+ // ─── Time ─────────────────────────────────────────────────────────────────────
129
+ const moment = (value) => typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null;
130
+ const duration = (value) => typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;
131
+ /** Ms until the lot closes, never below zero. No close time reads as zero. */
132
+ function timeLeftMs(lot, nowMs) {
133
+ const end = moment(lot.endsAt);
134
+ return end === null ? 0 : Math.max(0, end - nowMs);
135
+ }
136
+ /** Upcoming before it opens, live until it closes, ended after (or when it has no close time). */
137
+ function lotPhase(lot, nowMs) {
138
+ const end = moment(lot.endsAt);
139
+ if (end === null || nowMs >= end)
140
+ return 'ended';
141
+ const start = moment(lot.startsAt);
142
+ return start !== null && nowMs < start ? 'upcoming' : 'live';
143
+ }
144
+ /** Inside the anti-sniping window: a bid now pushes the close back. A 0 or unset trigger is always open. */
145
+ function inExtensionWindow(lot, nowMs) {
146
+ if (!lot.extendedBidding.enabled)
147
+ return false;
148
+ const left = timeLeftMs(lot, nowMs);
149
+ if (left <= 0)
150
+ return false;
151
+ const trigger = duration(lot.extendedBidding.triggerMs);
152
+ return trigger <= 0 || left <= trigger;
153
+ }
154
+ /**
155
+ * Whether a new close time is an anti-sniping extension rather than a host's edit: it moved later,
156
+ * while the lot was still open and inside its trigger window.
157
+ */
158
+ function wasExtended(previousEndsAt, lot, nowMs) {
159
+ if (!lot.extendedBidding.enabled)
160
+ return false;
161
+ const before = moment(previousEndsAt);
162
+ const after = moment(lot.endsAt);
163
+ if (before === null || after === null || after <= before)
164
+ return false;
165
+ const leftBefore = before - nowMs;
166
+ if (leftBefore <= 0)
167
+ return false;
168
+ const trigger = duration(lot.extendedBidding.triggerMs);
169
+ return trigger <= 0 || leftBefore <= trigger;
170
+ }
171
+ // ─── Bidding ──────────────────────────────────────────────────────────────────
172
+ /** What the one-tap bid offers: the standing bid plus the increment, else the starting price. */
173
+ function nextBid(lot) {
174
+ var _a, _b, _c;
175
+ const highest = (_a = lot.highestBid) !== null && _a !== void 0 ? _a : 0;
176
+ return highest > 0 ? highest + ((_b = lot.bidIncrement) !== null && _b !== void 0 ? _b : 0) : ((_c = lot.startingPrice) !== null && _c !== void 0 ? _c : 0);
177
+ }
178
+ /**
179
+ * The bid cap for an offer of `offered` (what the one-tap bid offers).
180
+ *
181
+ * - **A numeric 0 is a ceiling;** null, undefined and a blank string are none. `Number("")` is 0, so
182
+ * coercing first would turn an unset field into a ceiling of 0 and lock out every bid.
183
+ * - **The cap is inclusive:** a bid of exactly the cap is legal (`overCap` is `>`). The service agreed
184
+ * on 2026-09-14; if either end changes, a bid at the ceiling silently goes nowhere again.
185
+ * - **The keypad's test is stricter** (`noCustomRoom`, `>=`): it needs an amount above the offer and
186
+ * within the cap, and at offer === cap there is none, while the one-tap bid is still live.
187
+ */
188
+ function bidCapState(offered, cap) {
189
+ const ceiling = typeof cap === 'number' ? cap : typeof cap === 'string' && cap.trim() ? Number(cap) : Number.NaN;
190
+ const hasCap = Number.isFinite(ceiling);
191
+ return { hasCap, overCap: hasCap && offered > ceiling, noCustomRoom: hasCap && offered >= ceiling, ceiling };
192
+ }
193
+ /** Whether this customer holds the leading bid (ids compared bare). */
194
+ function isLeading(lot, customerId) {
195
+ return !!lot.highestBidderId && !!customerId && lot.highestBidderId === (0, shopifyIds_1.bareId)(String(customerId));
196
+ }
197
+ /**
198
+ * A lot's card status: ended (won by this customer, or lost), upcoming, inside its anti-sniping window
199
+ * (a bidding war once the service has flagged one, else ending soon), or live. Without a trigger window
200
+ * there are no urgency states.
201
+ */
202
+ function lotStatus(lot, nowMs, customerId) {
203
+ const phase = lotPhase(lot, nowMs);
204
+ if (phase === 'ended')
205
+ return isLeading(lot, customerId) ? 'endedWon' : 'endedLost';
206
+ if (phase === 'upcoming')
207
+ return 'upcoming';
208
+ const trigger = duration(lot.extendedBidding.triggerMs);
209
+ if (trigger > 0 && timeLeftMs(lot, nowMs) <= trigger)
210
+ return lot.biddingWarAt ? 'biddingWar' : 'endingSoon';
211
+ return 'live';
212
+ }
213
+ /** 0 live, 1 not open yet, 2 closed: lots sort by this first. */
214
+ function tier(lot, nowMs) {
215
+ const phase = lotPhase(lot, nowMs);
216
+ return phase === 'live' ? 0 : phase === 'upcoming' ? 1 : 2;
217
+ }
218
+ /**
219
+ * The lots in a page's order. Live lots first, then those not open yet (soonest first), then closed ones
220
+ * (latest closed first). `endingSoon` and `upcoming` leave out lots not open yet; `wishlisted` keeps only
221
+ * `wishlistedProductIds` (bare or GIDs).
222
+ */
223
+ function orderLots(items, order, nowMs, wishlistedProductIds = []) {
224
+ let list = items.slice();
225
+ if (order === 'wishlisted') {
226
+ const wanted = new Set([...wishlistedProductIds].map((id) => (0, shopifyIds_1.bareId)(id)));
227
+ list = list.filter(({ lot }) => !!lot.productGid && wanted.has((0, shopifyIds_1.bareId)(lot.productGid)));
228
+ }
229
+ else if (order !== 'newest') {
230
+ list = list.filter(({ lot }) => { var _a; return ((_a = lot.startsAt) !== null && _a !== void 0 ? _a : 0) <= nowMs; });
231
+ }
232
+ const at = (value) => value !== null && value !== void 0 ? value : 0;
233
+ return list.sort((a, b) => {
234
+ const tierA = tier(a.lot, nowMs);
235
+ const tierB = tier(b.lot, nowMs);
236
+ if (tierA !== tierB)
237
+ return tierA - tierB;
238
+ if (tierA === 2)
239
+ return at(b.lot.endsAt) - at(a.lot.endsAt);
240
+ if (tierA === 1)
241
+ return at(a.lot.startsAt) - at(b.lot.startsAt);
242
+ return order === 'newest' ? at(b.lot.startsAt) - at(a.lot.startsAt) : at(a.lot.endsAt) - at(b.lot.endsAt);
243
+ });
244
+ }
245
+ /** Upcoming lots grouped by round, the soonest round first; within a round, the service's order. */
246
+ function upcomingGroups(items) {
247
+ const groups = new Map();
248
+ for (const item of items) {
249
+ const auctionId = item.lot.auctionId;
250
+ if (!auctionId)
251
+ continue;
252
+ const group = groups.get(auctionId);
253
+ if (group)
254
+ group.items.push(item);
255
+ else
256
+ groups.set(auctionId, { auctionId, startsAt: item.lot.startsAt, items: [item] });
257
+ }
258
+ return [...groups.values()].sort((a, b) => { var _a, _b; return ((_a = a.startsAt) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.startsAt) !== null && _b !== void 0 ? _b : Infinity); });
259
+ }
260
+ /**
261
+ * My Bids' three tabs: active (not closed, the soonest to close first), won (closed and this customer
262
+ * leads, the latest first), lost (closed otherwise, the latest first). A lot with no close time is
263
+ * closed, as `lotPhase` reads it.
264
+ */
265
+ function myBidsTabs(items, customerId, nowMs) {
266
+ const tabs = { active: [], won: [], lost: [] };
267
+ for (const item of items) {
268
+ const closed = lotPhase(item.lot, nowMs) === 'ended';
269
+ if (!closed)
270
+ tabs.active.push(item);
271
+ else if (isLeading(item.lot, customerId))
272
+ tabs.won.push(item);
273
+ else
274
+ tabs.lost.push(item);
275
+ }
276
+ const end = (item) => { var _a; return (_a = item.lot.endsAt) !== null && _a !== void 0 ? _a : 0; };
277
+ tabs.active.sort((a, b) => end(a) - end(b));
278
+ tabs.won.sort((a, b) => end(b) - end(a));
279
+ tabs.lost.sort((a, b) => end(b) - end(a));
280
+ return tabs;
281
+ }
282
+ /**
283
+ * Which bottom bar the product page draws: the bid console, Add to Cart, or neither. They aren't
284
+ * opposites: before a round opens neither shows; a round that closed with stock left goes back to a
285
+ * normal sale; a product with a recorded winner keeps the console. A recorded winner blocks a variant
286
+ * only once the round permits no more of it (`allowedQty` ≤ 0; none recorded counts as 0). While the
287
+ * lot read hasn't answered for a managed product, neither shows rather than guess.
288
+ */
289
+ function productPageBuyBar(input) {
290
+ const { lot, lotStatus, auctionManaged, productHasWinner, variantHasWinner, allowedQty, soldOut, nowMs } = input;
291
+ const winnerBlocks = (variantHasWinner || productHasWinner) && (allowedQty !== null && allowedQty !== void 0 ? allowedQty : 0) <= 0;
292
+ const unknown = lotStatus === 'failed' || (lotStatus === 'loading' && auctionManaged);
293
+ if (unknown && !lot)
294
+ return { console: false, addToCart: false };
295
+ const open = !!lot && lot.endsAt !== null && lot.endsAt > nowMs;
296
+ const notYet = !!lot && lot.startsAt !== null && nowMs < lot.startsAt;
297
+ let showConsole;
298
+ if (!lot)
299
+ showConsole = winnerBlocks;
300
+ else if (notYet)
301
+ showConsole = false;
302
+ else if (open)
303
+ showConsole = true;
304
+ else
305
+ showConsole = winnerBlocks || soldOut;
306
+ let addToCart;
307
+ if (winnerBlocks)
308
+ addToCart = false;
309
+ else if (!lot)
310
+ addToCart = true;
311
+ else if (open)
312
+ addToCart = false;
313
+ else
314
+ addToCart = !soldOut;
315
+ return { console: showConsole, addToCart };
316
+ }
317
+ // ─── The customer's bid record ────────────────────────────────────────────────
318
+ /**
319
+ * The customer metafield that records which lots they bid on: `auction.apptile_silent_auction_bids`.
320
+ * The auction service keeps no per-bidder index, so this is the only record, written on every bid and
321
+ * read by My Bids.
322
+ */
323
+ exports.BID_RECORD_NAMESPACE = 'auction';
324
+ exports.BID_RECORD_KEY = 'apptile_silent_auction_bids';
325
+ /**
326
+ * Exactly one dash with something on each side: the format `/bulk-auction-product-info` enforces. Any
327
+ * other entry and the service answers 400 for the whole batch (one bare id left by an older client took
328
+ * 89 good bids with it), so the reader drops what doesn't match and the writer never writes it.
329
+ */
330
+ const QUERYABLE_ENTRY = /^[^-]+-[^-]+$/;
331
+ /** The record's entries, from a JSON array or the comma-separated string an older client left. Deduplicated. */
332
+ function bidRecordEntries(raw) {
333
+ if (raw === null || raw === undefined || raw === '')
334
+ return [];
335
+ let list;
336
+ if (Array.isArray(raw))
337
+ list = raw;
338
+ else if (typeof raw === 'string') {
339
+ const trimmed = raw.trim();
340
+ if (!trimmed)
341
+ return [];
342
+ if (trimmed.startsWith('[')) {
343
+ try {
344
+ const parsed = JSON.parse(trimmed);
345
+ list = Array.isArray(parsed) ? parsed : [parsed];
346
+ }
347
+ catch {
348
+ list = trimmed.split(/[\s,]+/);
349
+ }
350
+ }
351
+ else
352
+ list = trimmed.split(/[\s,]+/);
353
+ }
354
+ else
355
+ list = [raw];
356
+ const out = [];
357
+ const seen = new Set();
358
+ for (const item of list) {
359
+ if (item === null || item === undefined)
360
+ continue;
361
+ const entry = String(item).trim();
362
+ if (!entry || seen.has(entry))
363
+ continue;
364
+ seen.add(entry);
365
+ out.push(entry);
366
+ }
367
+ return out;
368
+ }
369
+ /** One record entry, `<bare product id>-<auction id>`, or null when the halves can't make a queryable one. */
370
+ function bidRecordEntry(productId, auctionId) {
371
+ var _a, _b;
372
+ const product = (_b = (_a = String(productId !== null && productId !== void 0 ? productId : '').split('/').pop()) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
373
+ const auction = String(auctionId !== null && auctionId !== void 0 ? auctionId : '').trim();
374
+ if (!product || !auction)
375
+ return null;
376
+ const entry = `${product}-${auction}`;
377
+ return QUERYABLE_ENTRY.test(entry) ? entry : null;
378
+ }
379
+ /**
380
+ * The entries the service can be asked about, and how many couldn't be (a bid the shopper placed and
381
+ * won't see, so a list missing them says so).
382
+ */
383
+ function queryableBidEntries(raw) {
384
+ const entries = [];
385
+ let skipped = 0;
386
+ for (const entry of bidRecordEntries(raw)) {
387
+ if (QUERYABLE_ENTRY.test(entry) && lotProductGid(entry.split('-')[0]))
388
+ entries.push(entry);
389
+ else
390
+ skipped += 1;
391
+ }
392
+ return { entries, skipped };
393
+ }
394
+ const asText = (value) => (typeof value === 'string' && value.trim() !== '' ? value : null);
395
+ /** One round, from the rounds endpoint's `auctions[i]`. */
396
+ function toSilentAuctionRound(raw) {
397
+ var _a, _b, _c;
398
+ const row = (raw && typeof raw === 'object' ? raw : {});
399
+ const lots = Array.isArray(row.products) ? row.products : [];
400
+ return {
401
+ id: (_a = asText(row.id)) !== null && _a !== void 0 ? _a : asText(row._id),
402
+ name: asText(row.auctionName),
403
+ streamingId: asText(row.streamingId),
404
+ status: asText(row.status),
405
+ startsAt: toMs(asText(row.startTime)),
406
+ endsAt: toMs(asText(row.endTime)),
407
+ notification: (_b = row.notification) !== null && _b !== void 0 ? _b : null,
408
+ startNotification: (_c = row.startNotification) !== null && _c !== void 0 ? _c : null,
409
+ lots: lots.map((item) => {
410
+ var _a;
411
+ const lot = (item && typeof item === 'object' ? item : {});
412
+ return {
413
+ storeProductId: String((_a = lot.productId) !== null && _a !== void 0 ? _a : ''),
414
+ thumbnailUrl: asText(lot.productThumbnail),
415
+ lotNumber: toNumber(lot.lotNumber),
416
+ startingBid: toNumber(lot.startingBid),
417
+ bidIncrement: toNumber(lot.bidIncrement),
418
+ startsAt: toMs(asText(lot.currentStartTime)),
419
+ endsAt: toMs(asText(lot.currentEndTime)),
420
+ };
421
+ }),
422
+ };
423
+ }
424
+ //# sourceMappingURL=silentAuctionRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silentAuctionRules.js","sourceRoot":"","sources":["../src/silentAuctionRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type SilentAuctionLot, type SilentAuctionRound } from './silentAuctionRules';
2
+ export declare const SILENT_AUCTION_API_URL = "https://auction.apptile.io";
3
+ /** Bid record entries per bulk read (Sparkl's batch). */
4
+ export declare const BID_RECORD_BATCH_SIZE = 90;
5
+ export declare const silentAuctions: {
6
+ /** Whether silent auctions are set up (`silentAuctions.appId` in the config). */
7
+ isConfigured(): boolean;
8
+ /**
9
+ * The store's lots: `current` (open and closed lots of the running rounds) or `upcoming`. A 404 is
10
+ * "none": the service says it for a store with nothing scheduled (and for an app id it doesn't know).
11
+ */
12
+ lots(filter?: "current" | "upcoming"): Promise<SilentAuctionLot[]>;
13
+ /**
14
+ * One product's lot, for its product page. Null when the product isn't in a round: a 404, or a lot
15
+ * with no close time (nothing to count down, no round to be in).
16
+ */
17
+ lot(productId: string): Promise<SilentAuctionLot | null>;
18
+ /**
19
+ * A bid. Ids may be GIDs or bare; the service is sent bare ones. Throws when the service refuses or
20
+ * doesn't answer. Doesn't record it: `recordBid` does, after.
21
+ */
22
+ bid(params: {
23
+ productId: string;
24
+ customerId: string;
25
+ amount: number;
26
+ variantId?: string | null;
27
+ email?: string | null;
28
+ }): Promise<void>;
29
+ /**
30
+ * The lots behind bid record entries (`<product>-<auction>`), 90 to a request, all at once. A batch
31
+ * that fails is counted, not thrown, so the rest still show.
32
+ */
33
+ lotsForBidEntries(entries: string[]): Promise<{
34
+ lots: SilentAuctionLot[];
35
+ failedBatches: number;
36
+ totalBatches: number;
37
+ }>;
38
+ /** The store's rounds, from the live-selling gateway: `active` (bidding open) or `upcoming`. */
39
+ rounds(filter?: "active" | "upcoming"): Promise<SilentAuctionRound[]>;
40
+ /**
41
+ * The signed-in customer's bid record: their id, the entries the service can be asked about, and how
42
+ * many it can't. Null without `customerAccountRequest`. Throws when the read fails, so a failed read
43
+ * isn't shown as "no bids".
44
+ */
45
+ bidRecord(): Promise<{
46
+ customerId: string | null;
47
+ entries: string[];
48
+ skipped: number;
49
+ } | null>;
50
+ /**
51
+ * Adds a placed bid to the customer's record, which My Bids reads (the service keeps no per-bidder
52
+ * index). False when it couldn't be recorded. Never throws: the bid is already placed, and a failure
53
+ * here mustn't read as a failed bid; it is retried once and reported. One append at a time, or two
54
+ * bids within one round trip each read the same list and the second write drops the first.
55
+ */
56
+ recordBid(productId: string | null | undefined, auctionId: string | null | undefined): Promise<boolean>;
57
+ /**
58
+ * The variant this device last bid on for a product, so its page opens on that size. Null when none.
59
+ * Sparkl's key (`pdp.bidVariant.<product id>`), so what its app remembered is still read.
60
+ */
61
+ bidVariant(productId: string): Promise<string | null>;
62
+ /** Remember the variant a bid was placed on. Never throws. */
63
+ rememberBidVariant(productId: string, variantId: string): Promise<void>;
64
+ };
65
+ //# sourceMappingURL=silentAuctions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silentAuctions.d.ts","sourceRoot":"","sources":["../src/silentAuctions.ts"],"names":[],"mappings":"AAsBA,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AACnE,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAiFxC,eAAO,MAAM,cAAc;IACzB,iFAAiF;oBACjE,OAAO;IAIvB;;;OAGG;kBACgB,SAAS,GAAG,UAAU,GAAe,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAUnF;;;OAGG;mBACkB,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAc9D;;;OAGG;gBACe;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7I;;;OAGG;+BAC8B,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAyB9H,gGAAgG;oBAC3E,QAAQ,GAAG,UAAU,GAAc,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAUrF;;;;OAIG;iBACgB,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAQpG;;;;;OAKG;yBACkB,MAAM,GAAG,IAAI,GAAG,SAAS,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBvG;;;OAGG;0BACyB,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU3D,8DAA8D;kCAC1B,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS9E,CAAC"}