@basedone/core 0.1.10 → 0.2.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 (54) hide show
  1. package/dist/chunk-4UEJOM6W.mjs +1 -3
  2. package/dist/chunk-MVFO4WRF.mjs +2091 -0
  3. package/dist/chunk-VBC6EQ7Q.mjs +235 -0
  4. package/dist/client-CgmiTuEX.d.mts +179 -0
  5. package/dist/client-CgmiTuEX.d.ts +179 -0
  6. package/dist/ecommerce.d.mts +3986 -0
  7. package/dist/ecommerce.d.ts +3986 -0
  8. package/dist/ecommerce.js +2135 -0
  9. package/dist/ecommerce.mjs +2 -0
  10. package/dist/index.d.mts +51 -43
  11. package/dist/index.d.ts +51 -43
  12. package/dist/index.js +2795 -205
  13. package/dist/index.mjs +68 -90
  14. package/dist/{meta-FVJIMALT.mjs → meta-JB5ITE27.mjs} +4 -10
  15. package/dist/meta-UOGUG3OW.mjs +3 -7
  16. package/dist/{perpDexs-GGL32HT4.mjs → perpDexs-3LRJ5ZHM.mjs} +37 -8
  17. package/dist/{perpDexs-G7V2QIM6.mjs → perpDexs-4ISLD7NX.mjs} +177 -32
  18. package/dist/react.d.mts +39 -0
  19. package/dist/react.d.ts +39 -0
  20. package/dist/react.js +268 -0
  21. package/dist/react.mjs +31 -0
  22. package/dist/{spotMeta-OD7S6HGW.mjs → spotMeta-GHXX7C5M.mjs} +24 -9
  23. package/dist/{spotMeta-PCN4Z4R3.mjs → spotMeta-IBBUP2SG.mjs} +54 -6
  24. package/dist/staticMeta-GM7T3OYL.mjs +3 -6
  25. package/dist/staticMeta-QV2KMX57.mjs +3 -6
  26. package/ecommerce.ts +15 -0
  27. package/index.ts +6 -0
  28. package/lib/ecommerce/FLASH_SALES.md +340 -0
  29. package/lib/ecommerce/QUICK_REFERENCE.md +211 -0
  30. package/lib/ecommerce/README.md +391 -0
  31. package/lib/ecommerce/USAGE_EXAMPLES.md +704 -0
  32. package/lib/ecommerce/client/base.ts +272 -0
  33. package/lib/ecommerce/client/customer.ts +639 -0
  34. package/lib/ecommerce/client/merchant.ts +1341 -0
  35. package/lib/ecommerce/index.ts +51 -0
  36. package/lib/ecommerce/types/entities.ts +791 -0
  37. package/lib/ecommerce/types/enums.ts +270 -0
  38. package/lib/ecommerce/types/index.ts +18 -0
  39. package/lib/ecommerce/types/requests.ts +580 -0
  40. package/lib/ecommerce/types/responses.ts +857 -0
  41. package/lib/ecommerce/utils/errors.ts +113 -0
  42. package/lib/ecommerce/utils/helpers.ts +131 -0
  43. package/lib/hip3/market-info.ts +1 -1
  44. package/lib/instrument/client.ts +351 -0
  45. package/lib/meta/data/mainnet/perpDexs.json +34 -4
  46. package/lib/meta/data/mainnet/spotMeta.json +21 -3
  47. package/lib/meta/data/testnet/meta.json +1 -3
  48. package/lib/meta/data/testnet/perpDexs.json +174 -28
  49. package/lib/meta/data/testnet/spotMeta.json +51 -0
  50. package/lib/react/InstrumentProvider.tsx +69 -0
  51. package/lib/utils/flooredDateTime.ts +55 -0
  52. package/lib/utils/time.ts +51 -0
  53. package/package.json +37 -11
  54. package/react.ts +1 -0
@@ -0,0 +1,639 @@
1
+ /**
2
+ * Customer/End-User Ecommerce API Client
3
+ *
4
+ * This module provides methods for customer-facing ecommerce operations including
5
+ * browsing products, placing orders, managing reviews, and more.
6
+ */
7
+
8
+ import { BaseEcommerceClient } from "./base";
9
+ import { buildQueryString } from "../utils/helpers";
10
+ import type {
11
+ // Request types
12
+ ListProductsParams,
13
+ CreateOrderRequest,
14
+ ListOrdersParams,
15
+ CreateReviewRequest,
16
+ ListReviewsParams,
17
+ ShippingAddressRequest,
18
+ CalculateCartDiscountsRequest,
19
+ ValidateDiscountRequest,
20
+ CalculateTaxRequest,
21
+ ListActiveBannersParams,
22
+ TrackBannerRequest,
23
+ SendMessageRequest,
24
+ ListActiveFlashSalesParams,
25
+
26
+ // Response types
27
+ ListProductsResponse,
28
+ GetProductResponse,
29
+ CreateOrderResponse,
30
+ ListOrdersResponse,
31
+ GetOrderResponse,
32
+ ConfirmEscrowDepositResponse,
33
+ OrderReceiptResponse,
34
+ ListReviewsResponse,
35
+ ReviewResponse,
36
+ ListShippingAddressesResponse,
37
+ ShippingAddressResponse,
38
+ CalculateCartDiscountsResponse,
39
+ ValidateDiscountResponse,
40
+ CalculateTaxResponse,
41
+ ListBannersResponse,
42
+ SuccessResponse,
43
+ ProductDiscountsResponse,
44
+ CustomerMessagesResponse,
45
+ MessageStatsResponse,
46
+ MessageResponse,
47
+ ActiveFlashSalesResponse,
48
+ } from "../types";
49
+
50
+ /**
51
+ * Customer API client for end-user ecommerce operations
52
+ *
53
+ * Provides methods for browsing products, placing orders, managing reviews,
54
+ * and other customer-facing operations.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const client = new CustomerEcommerceClient({
59
+ * baseURL: "https://api.example.com",
60
+ * authToken: "user-auth-token"
61
+ * });
62
+ *
63
+ * // Browse products
64
+ * const products = await client.listProducts({ limit: 20, category: "electronics" });
65
+ *
66
+ * // Place an order
67
+ * const order = await client.createOrder({
68
+ * items: [{ productId: "123", quantity: 1 }],
69
+ * paymentMethod: "USDC_ESCROW",
70
+ * shippingAddress: { ... }
71
+ * });
72
+ * ```
73
+ */
74
+ export class CustomerEcommerceClient extends BaseEcommerceClient {
75
+
76
+ // ============================================================================
77
+ // Products API
78
+ // ============================================================================
79
+
80
+ /**
81
+ * List products with filtering and pagination
82
+ *
83
+ * @param params - Query parameters for filtering
84
+ * @returns Paginated list of products
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const products = await client.listProducts({
89
+ * limit: 20,
90
+ * offset: 0,
91
+ * category: "electronics",
92
+ * search: "laptop",
93
+ * minPrice: 500,
94
+ * maxPrice: 2000,
95
+ * sortBy: "price_asc"
96
+ * });
97
+ * ```
98
+ */
99
+ async listProducts(params?: ListProductsParams): Promise<ListProductsResponse> {
100
+ const queryString = params ? buildQueryString(params) : "";
101
+ return this.get(`/api/marketplace/products${queryString}`);
102
+ }
103
+
104
+ /**
105
+ * Get product details by ID
106
+ *
107
+ * @param productId - Product ID
108
+ * @returns Product details with merchant info, variants, and reviews
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * const product = await client.getProduct("prod_123");
113
+ * console.log(product.title, product.priceUSDC);
114
+ * ```
115
+ */
116
+ async getProduct(productId: string): Promise<GetProductResponse> {
117
+ return this.get(`/api/marketplace/products/${productId}`);
118
+ }
119
+
120
+ /**
121
+ * Track product view (increment view count)
122
+ *
123
+ * @param productId - Product ID
124
+ * @returns Success response
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * await client.trackProductView("prod_123");
129
+ * ```
130
+ */
131
+ async trackProductView(productId: string): Promise<SuccessResponse> {
132
+ return this.post(`/api/marketplace/products/${productId}/view`);
133
+ }
134
+
135
+ /**
136
+ * Get active automatic discounts for a product
137
+ *
138
+ * @param productId - Product ID
139
+ * @returns List of applicable discounts
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const discounts = await client.getProductDiscounts("prod_123");
144
+ * discounts.discounts.forEach(d => console.log(d.description));
145
+ * ```
146
+ */
147
+ async getProductDiscounts(productId: string): Promise<ProductDiscountsResponse> {
148
+ return this.get(`/api/marketplace/products/${productId}/discounts`);
149
+ }
150
+
151
+ // ============================================================================
152
+ // Orders API
153
+ // ============================================================================
154
+
155
+ /**
156
+ * Create order from cart checkout
157
+ *
158
+ * Supports multi-merchant checkout - automatically splits orders by merchant.
159
+ *
160
+ * @param request - Order creation request
161
+ * @returns Created order(s) with payment instructions
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * const result = await client.createOrder({
166
+ * items: [
167
+ * { productId: "prod_123", quantity: 2 },
168
+ * { productId: "prod_456", quantity: 1, variantId: "var_789" }
169
+ * ],
170
+ * paymentMethod: "USDC_ESCROW",
171
+ * shippingAddress: {
172
+ * fullName: "John Doe",
173
+ * phone: "+1234567890",
174
+ * addressLine1: "123 Main St",
175
+ * city: "New York",
176
+ * stateProvince: "NY",
177
+ * postalCode: "10001",
178
+ * country: "US"
179
+ * },
180
+ * couponCode: "SAVE10"
181
+ * });
182
+ *
183
+ * // For USDC escrow, deposit to the escrow address
184
+ * if (result.escrow) {
185
+ * console.log("Deposit", result.escrow.amountUSDC, "USDC to", result.escrow.address);
186
+ * }
187
+ * ```
188
+ */
189
+ async createOrder(request: CreateOrderRequest): Promise<CreateOrderResponse> {
190
+ return this.post("/api/marketplace/orders", request);
191
+ }
192
+
193
+ /**
194
+ * List user's orders
195
+ *
196
+ * @param params - Query parameters for filtering
197
+ * @returns Paginated list of orders
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const orders = await client.listOrders({
202
+ * limit: 10,
203
+ * offset: 0,
204
+ * status: "SHIPPED"
205
+ * });
206
+ * ```
207
+ */
208
+ async listOrders(params?: ListOrdersParams): Promise<ListOrdersResponse> {
209
+ const queryString = params ? buildQueryString(params) : "";
210
+ return this.get(`/api/marketplace/orders${queryString}`);
211
+ }
212
+
213
+ /**
214
+ * Get order details by ID
215
+ *
216
+ * @param orderId - Order ID
217
+ * @returns Order details with items, payment, and shipment info
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * const order = await client.getOrder("ord_123");
222
+ * console.log(order.order.status, order.order.totalUSDC);
223
+ * ```
224
+ */
225
+ async getOrder(orderId: string): Promise<GetOrderResponse> {
226
+ return this.get(`/api/marketplace/orders/${orderId}`);
227
+ }
228
+
229
+ /**
230
+ * Confirm USDC escrow deposit for order payment
231
+ *
232
+ * Verifies the Hyperliquid transaction and updates order status.
233
+ *
234
+ * @param orderId - Order ID
235
+ * @returns Confirmation response with transaction hash
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * // After depositing USDC to escrow address
240
+ * const result = await client.confirmEscrowDeposit("ord_123");
241
+ * console.log("Payment confirmed:", result.depositTxHash);
242
+ * ```
243
+ */
244
+ async confirmEscrowDeposit(orderId: string): Promise<ConfirmEscrowDepositResponse> {
245
+ return this.post(`/api/marketplace/orders/${orderId}/confirm-escrow-deposit`);
246
+ }
247
+
248
+ /**
249
+ * Get order receipt
250
+ *
251
+ * @param orderId - Order ID
252
+ * @returns Order receipt for download/display
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const receipt = await client.getOrderReceipt("ord_123");
257
+ * console.log("Order #", receipt.receipt.orderNumber);
258
+ * ```
259
+ */
260
+ async getOrderReceipt(orderId: string): Promise<OrderReceiptResponse> {
261
+ return this.get(`/api/marketplace/orders/${orderId}/receipt`);
262
+ }
263
+
264
+ // ============================================================================
265
+ // Reviews API
266
+ // ============================================================================
267
+
268
+ /**
269
+ * List reviews for a product
270
+ *
271
+ * @param productId - Product ID
272
+ * @param params - Query parameters
273
+ * @returns Paginated list of reviews
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * const reviews = await client.listProductReviews("prod_123", {
278
+ * limit: 10,
279
+ * sortBy: "highest"
280
+ * });
281
+ * ```
282
+ */
283
+ async listProductReviews(
284
+ productId: string,
285
+ params?: ListReviewsParams
286
+ ): Promise<ListReviewsResponse> {
287
+ const queryString = params ? buildQueryString(params) : "";
288
+ return this.get(`/api/marketplace/products/${productId}/reviews${queryString}`);
289
+ }
290
+
291
+ /**
292
+ * Create a product review
293
+ *
294
+ * Requires authenticated user who has purchased the product.
295
+ *
296
+ * @param productId - Product ID
297
+ * @param request - Review creation request
298
+ * @returns Created review
299
+ *
300
+ * @example
301
+ * ```typescript
302
+ * const review = await client.createReview("prod_123", {
303
+ * rating: 5,
304
+ * title: "Great product!",
305
+ * comment: "Exactly what I needed. Fast shipping too!"
306
+ * });
307
+ * ```
308
+ */
309
+ async createReview(
310
+ productId: string,
311
+ request: CreateReviewRequest
312
+ ): Promise<ReviewResponse> {
313
+ return this.post(`/api/marketplace/products/${productId}/reviews`, request);
314
+ }
315
+
316
+ // ============================================================================
317
+ // Shipping Addresses API
318
+ // ============================================================================
319
+
320
+ /**
321
+ * List saved shipping addresses
322
+ *
323
+ * @returns List of user's saved shipping addresses
324
+ *
325
+ * @example
326
+ * ```typescript
327
+ * const addresses = await client.listShippingAddresses();
328
+ * const defaultAddress = addresses.addresses.find(a => a.isDefault);
329
+ * ```
330
+ */
331
+ async listShippingAddresses(): Promise<ListShippingAddressesResponse> {
332
+ return this.get("/api/user/shipping-addresses");
333
+ }
334
+
335
+ /**
336
+ * Create a new shipping address
337
+ *
338
+ * @param request - Shipping address data
339
+ * @returns Created address
340
+ *
341
+ * @example
342
+ * ```typescript
343
+ * const address = await client.createShippingAddress({
344
+ * fullName: "John Doe",
345
+ * phone: "+1234567890",
346
+ * addressLine1: "123 Main St",
347
+ * city: "New York",
348
+ * stateProvince: "NY",
349
+ * postalCode: "10001",
350
+ * country: "US",
351
+ * isDefault: true,
352
+ * label: "Home"
353
+ * });
354
+ * ```
355
+ */
356
+ async createShippingAddress(
357
+ request: ShippingAddressRequest
358
+ ): Promise<ShippingAddressResponse> {
359
+ return this.post("/api/user/shipping-addresses", request);
360
+ }
361
+
362
+ /**
363
+ * Update a shipping address
364
+ *
365
+ * @param addressId - Address ID
366
+ * @param request - Updated address data
367
+ * @returns Updated address
368
+ *
369
+ * @example
370
+ * ```typescript
371
+ * const address = await client.updateShippingAddress("addr_123", {
372
+ * phone: "+0987654321"
373
+ * });
374
+ * ```
375
+ */
376
+ async updateShippingAddress(
377
+ addressId: string,
378
+ request: Partial<ShippingAddressRequest>
379
+ ): Promise<ShippingAddressResponse> {
380
+ return this.patch(`/api/user/shipping-addresses/${addressId}`, request);
381
+ }
382
+
383
+ /**
384
+ * Delete a shipping address
385
+ *
386
+ * @param addressId - Address ID
387
+ * @returns Success response
388
+ *
389
+ * @example
390
+ * ```typescript
391
+ * await client.deleteShippingAddress("addr_123");
392
+ * ```
393
+ */
394
+ async deleteShippingAddress(addressId: string): Promise<SuccessResponse> {
395
+ return this.delete(`/api/user/shipping-addresses/${addressId}`);
396
+ }
397
+
398
+ // ============================================================================
399
+ // Cart & Discounts API
400
+ // ============================================================================
401
+
402
+ /**
403
+ * Calculate automatic discounts for cart items
404
+ *
405
+ * @param request - Cart items
406
+ * @returns Calculated discounts and totals
407
+ *
408
+ * @example
409
+ * ```typescript
410
+ * const result = await client.calculateCartDiscounts({
411
+ * items: [
412
+ * { productId: "prod_123", quantity: 2 },
413
+ * { productId: "prod_456", quantity: 1 }
414
+ * ]
415
+ * });
416
+ * console.log("Subtotal:", result.subtotal);
417
+ * console.log("Discount:", result.discountAmount);
418
+ * console.log("Total:", result.total);
419
+ * ```
420
+ */
421
+ async calculateCartDiscounts(
422
+ request: CalculateCartDiscountsRequest
423
+ ): Promise<CalculateCartDiscountsResponse> {
424
+ return this.post("/api/marketplace/cart/discounts", request);
425
+ }
426
+
427
+ /**
428
+ * Validate a discount code for cart items
429
+ *
430
+ * @param request - Discount code and cart items
431
+ * @returns Validation result with discount details
432
+ *
433
+ * @example
434
+ * ```typescript
435
+ * const result = await client.validateDiscountCode({
436
+ * code: "SAVE10",
437
+ * items: [
438
+ * { productId: "prod_123", quantity: 2 }
439
+ * ]
440
+ * });
441
+ *
442
+ * if (result.valid) {
443
+ * console.log("Discount:", result.discount?.discountAmount);
444
+ * } else {
445
+ * console.log("Error:", result.error);
446
+ * }
447
+ * ```
448
+ */
449
+ async validateDiscountCode(
450
+ request: ValidateDiscountRequest
451
+ ): Promise<ValidateDiscountResponse> {
452
+ return this.post("/api/marketplace/discounts/validate", request);
453
+ }
454
+
455
+ // ============================================================================
456
+ // Tax Calculation API
457
+ // ============================================================================
458
+
459
+ /**
460
+ * Calculate tax for cart items based on shipping address
461
+ *
462
+ * @param request - Cart items and shipping address
463
+ * @returns Tax calculation with breakdown
464
+ *
465
+ * @example
466
+ * ```typescript
467
+ * const result = await client.calculateTax({
468
+ * items: [
469
+ * { productId: "prod_123", quantity: 2 }
470
+ * ],
471
+ * shippingAddress: {
472
+ * country: "US",
473
+ * region: "NY",
474
+ * postalCode: "10001"
475
+ * }
476
+ * });
477
+ * console.log("Tax:", result.taxAmount);
478
+ * console.log("Total:", result.total);
479
+ * ```
480
+ */
481
+ async calculateTax(request: CalculateTaxRequest): Promise<CalculateTaxResponse> {
482
+ return this.post("/api/marketplace/tax/calculate", request);
483
+ }
484
+
485
+ // ============================================================================
486
+ // Banners API
487
+ // ============================================================================
488
+
489
+ /**
490
+ * Get active promotional banners
491
+ *
492
+ * @param params - Query parameters
493
+ * @returns List of active banners
494
+ *
495
+ * @example
496
+ * ```typescript
497
+ * const banners = await client.getActiveBanners({
498
+ * type: "HERO",
499
+ * merchantId: "merchant_123"
500
+ * });
501
+ * ```
502
+ */
503
+ async getActiveBanners(params?: ListActiveBannersParams): Promise<ListBannersResponse> {
504
+ const queryString = params ? buildQueryString(params) : "";
505
+ return this.get(`/api/marketplace/banners/active${queryString}`);
506
+ }
507
+
508
+ /**
509
+ * Track banner impression or click
510
+ *
511
+ * @param bannerId - Banner ID
512
+ * @param request - Track action (impression or click)
513
+ * @returns Success response
514
+ *
515
+ * @example
516
+ * ```typescript
517
+ * // Track impression
518
+ * await client.trackBanner("banner_123", { action: "impression" });
519
+ *
520
+ * // Track click
521
+ * await client.trackBanner("banner_123", { action: "click" });
522
+ * ```
523
+ */
524
+ async trackBanner(bannerId: string, request: TrackBannerRequest): Promise<SuccessResponse> {
525
+ return this.post(`/api/marketplace/banners/${bannerId}/track`, request);
526
+ }
527
+
528
+ // ============================================================================
529
+ // Messages API
530
+ // ============================================================================
531
+
532
+ /**
533
+ * List messages for customer
534
+ *
535
+ * Returns all conversations grouped by order, where each order represents
536
+ * a conversation with a merchant.
537
+ *
538
+ * @returns List of conversations with messages and stats
539
+ *
540
+ * @example
541
+ * ```typescript
542
+ * const result = await client.listMessages();
543
+ * console.log("Unread:", result.stats.unread);
544
+ * result.conversations.forEach(conv => {
545
+ * console.log(`Order ${conv.orderNumber}: ${conv.unreadCount} unread`);
546
+ * });
547
+ * ```
548
+ */
549
+ async listMessages(): Promise<CustomerMessagesResponse> {
550
+ return this.get("/api/marketplace/messages");
551
+ }
552
+
553
+ /**
554
+ * Get message stats (unread count)
555
+ *
556
+ * Lightweight endpoint for notification badges.
557
+ *
558
+ * @returns Unread message count
559
+ *
560
+ * @example
561
+ * ```typescript
562
+ * const stats = await client.getMessageStats();
563
+ * console.log("Unread messages:", stats.unread);
564
+ * ```
565
+ */
566
+ async getMessageStats(): Promise<MessageStatsResponse> {
567
+ return this.get("/api/marketplace/messages/stats");
568
+ }
569
+
570
+ /**
571
+ * Send a message to a merchant about an order
572
+ *
573
+ * @param request - Message data including orderId, recipientId (merchant user ID), and message
574
+ * @returns Sent message
575
+ *
576
+ * @example
577
+ * ```typescript
578
+ * await client.sendMessage({
579
+ * orderId: "ord_123",
580
+ * recipientId: "user_merchant_456",
581
+ * message: "When will my order ship?"
582
+ * });
583
+ * ```
584
+ */
585
+ async sendMessage(request: SendMessageRequest): Promise<MessageResponse> {
586
+ return this.post("/api/marketplace/messages/send", request);
587
+ }
588
+
589
+ /**
590
+ * Mark a message as read
591
+ *
592
+ * @param messageId - Message ID
593
+ * @returns Updated message
594
+ *
595
+ * @example
596
+ * ```typescript
597
+ * await client.markMessageAsRead("msg_123");
598
+ * ```
599
+ */
600
+ async markMessageAsRead(messageId: string): Promise<MessageResponse> {
601
+ return this.patch(`/api/marketplace/messages/${messageId}/read`, {});
602
+ }
603
+
604
+ // ============================================================================
605
+ // Flash Sales API
606
+ // ============================================================================
607
+
608
+ /**
609
+ * Get active flash sales
610
+ *
611
+ * Returns currently running flash sales with their discounted products.
612
+ * Includes countdown timer information for UI display.
613
+ *
614
+ * @param params - Query parameters
615
+ * @returns List of active flash sales with time remaining
616
+ *
617
+ * @example
618
+ * ```typescript
619
+ * const result = await client.getActiveFlashSales({ limit: 5 });
620
+ *
621
+ * result.flashSales.forEach(sale => {
622
+ * console.log(`${sale.name} - ends at ${sale.endsAt}`);
623
+ * sale.items.forEach(item => {
624
+ * console.log(` ${item.product.title}: $${item.salePrice} (${item.discountPercent}% off)`);
625
+ * });
626
+ * });
627
+ *
628
+ * // Use timeRemaining for countdown UI
629
+ * if (result.timeRemaining) {
630
+ * console.log(`Featured sale ends in ${result.timeRemaining.remainingSeconds} seconds`);
631
+ * }
632
+ * ```
633
+ */
634
+ async getActiveFlashSales(params?: ListActiveFlashSalesParams): Promise<ActiveFlashSalesResponse> {
635
+ const queryString = params ? buildQueryString(params) : "";
636
+ return this.get(`/api/marketplace/flash-sales/active${queryString}`);
637
+ }
638
+ }
639
+