@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.
- package/dist/chunk-4UEJOM6W.mjs +1 -3
- package/dist/chunk-MVFO4WRF.mjs +2091 -0
- package/dist/chunk-VBC6EQ7Q.mjs +235 -0
- package/dist/client-CgmiTuEX.d.mts +179 -0
- package/dist/client-CgmiTuEX.d.ts +179 -0
- package/dist/ecommerce.d.mts +3986 -0
- package/dist/ecommerce.d.ts +3986 -0
- package/dist/ecommerce.js +2135 -0
- package/dist/ecommerce.mjs +2 -0
- package/dist/index.d.mts +51 -43
- package/dist/index.d.ts +51 -43
- package/dist/index.js +2795 -205
- package/dist/index.mjs +68 -90
- package/dist/{meta-FVJIMALT.mjs → meta-JB5ITE27.mjs} +4 -10
- package/dist/meta-UOGUG3OW.mjs +3 -7
- package/dist/{perpDexs-GGL32HT4.mjs → perpDexs-3LRJ5ZHM.mjs} +37 -8
- package/dist/{perpDexs-G7V2QIM6.mjs → perpDexs-4ISLD7NX.mjs} +177 -32
- package/dist/react.d.mts +39 -0
- package/dist/react.d.ts +39 -0
- package/dist/react.js +268 -0
- package/dist/react.mjs +31 -0
- package/dist/{spotMeta-OD7S6HGW.mjs → spotMeta-GHXX7C5M.mjs} +24 -9
- package/dist/{spotMeta-PCN4Z4R3.mjs → spotMeta-IBBUP2SG.mjs} +54 -6
- package/dist/staticMeta-GM7T3OYL.mjs +3 -6
- package/dist/staticMeta-QV2KMX57.mjs +3 -6
- package/ecommerce.ts +15 -0
- package/index.ts +6 -0
- package/lib/ecommerce/FLASH_SALES.md +340 -0
- package/lib/ecommerce/QUICK_REFERENCE.md +211 -0
- package/lib/ecommerce/README.md +391 -0
- package/lib/ecommerce/USAGE_EXAMPLES.md +704 -0
- package/lib/ecommerce/client/base.ts +272 -0
- package/lib/ecommerce/client/customer.ts +639 -0
- package/lib/ecommerce/client/merchant.ts +1341 -0
- package/lib/ecommerce/index.ts +51 -0
- package/lib/ecommerce/types/entities.ts +791 -0
- package/lib/ecommerce/types/enums.ts +270 -0
- package/lib/ecommerce/types/index.ts +18 -0
- package/lib/ecommerce/types/requests.ts +580 -0
- package/lib/ecommerce/types/responses.ts +857 -0
- package/lib/ecommerce/utils/errors.ts +113 -0
- package/lib/ecommerce/utils/helpers.ts +131 -0
- package/lib/hip3/market-info.ts +1 -1
- package/lib/instrument/client.ts +351 -0
- package/lib/meta/data/mainnet/perpDexs.json +34 -4
- package/lib/meta/data/mainnet/spotMeta.json +21 -3
- package/lib/meta/data/testnet/meta.json +1 -3
- package/lib/meta/data/testnet/perpDexs.json +174 -28
- package/lib/meta/data/testnet/spotMeta.json +51 -0
- package/lib/react/InstrumentProvider.tsx +69 -0
- package/lib/utils/flooredDateTime.ts +55 -0
- package/lib/utils/time.ts +51 -0
- package/package.json +37 -11
- 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
|
+
|