@basedone/core 0.1.10 → 0.2.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 (53) hide show
  1. package/dist/chunk-4GAKANLT.mjs +1987 -0
  2. package/dist/chunk-4UEJOM6W.mjs +1 -3
  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 +3732 -0
  7. package/dist/ecommerce.d.ts +3732 -0
  8. package/dist/ecommerce.js +2031 -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 +2691 -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/QUICK_REFERENCE.md +211 -0
  29. package/lib/ecommerce/README.md +385 -0
  30. package/lib/ecommerce/USAGE_EXAMPLES.md +704 -0
  31. package/lib/ecommerce/client/base.ts +272 -0
  32. package/lib/ecommerce/client/customer.ts +522 -0
  33. package/lib/ecommerce/client/merchant.ts +1341 -0
  34. package/lib/ecommerce/index.ts +51 -0
  35. package/lib/ecommerce/types/entities.ts +722 -0
  36. package/lib/ecommerce/types/enums.ts +270 -0
  37. package/lib/ecommerce/types/index.ts +18 -0
  38. package/lib/ecommerce/types/requests.ts +525 -0
  39. package/lib/ecommerce/types/responses.ts +805 -0
  40. package/lib/ecommerce/utils/errors.ts +113 -0
  41. package/lib/ecommerce/utils/helpers.ts +131 -0
  42. package/lib/hip3/market-info.ts +1 -1
  43. package/lib/instrument/client.ts +351 -0
  44. package/lib/meta/data/mainnet/perpDexs.json +34 -4
  45. package/lib/meta/data/mainnet/spotMeta.json +21 -3
  46. package/lib/meta/data/testnet/meta.json +1 -3
  47. package/lib/meta/data/testnet/perpDexs.json +174 -28
  48. package/lib/meta/data/testnet/spotMeta.json +51 -0
  49. package/lib/react/InstrumentProvider.tsx +69 -0
  50. package/lib/utils/flooredDateTime.ts +55 -0
  51. package/lib/utils/time.ts +51 -0
  52. package/package.json +37 -11
  53. package/react.ts +1 -0
@@ -0,0 +1,522 @@
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
+
24
+ // Response types
25
+ ListProductsResponse,
26
+ GetProductResponse,
27
+ CreateOrderResponse,
28
+ ListOrdersResponse,
29
+ GetOrderResponse,
30
+ ConfirmEscrowDepositResponse,
31
+ OrderReceiptResponse,
32
+ ListReviewsResponse,
33
+ ReviewResponse,
34
+ ListShippingAddressesResponse,
35
+ ShippingAddressResponse,
36
+ CalculateCartDiscountsResponse,
37
+ ValidateDiscountResponse,
38
+ CalculateTaxResponse,
39
+ ListBannersResponse,
40
+ SuccessResponse,
41
+ ProductDiscountsResponse,
42
+ } from "../types";
43
+
44
+ /**
45
+ * Customer API client for end-user ecommerce operations
46
+ *
47
+ * Provides methods for browsing products, placing orders, managing reviews,
48
+ * and other customer-facing operations.
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const client = new CustomerEcommerceClient({
53
+ * baseURL: "https://api.example.com",
54
+ * authToken: "user-auth-token"
55
+ * });
56
+ *
57
+ * // Browse products
58
+ * const products = await client.listProducts({ limit: 20, category: "electronics" });
59
+ *
60
+ * // Place an order
61
+ * const order = await client.createOrder({
62
+ * items: [{ productId: "123", quantity: 1 }],
63
+ * paymentMethod: "USDC_ESCROW",
64
+ * shippingAddress: { ... }
65
+ * });
66
+ * ```
67
+ */
68
+ export class CustomerEcommerceClient extends BaseEcommerceClient {
69
+
70
+ // ============================================================================
71
+ // Products API
72
+ // ============================================================================
73
+
74
+ /**
75
+ * List products with filtering and pagination
76
+ *
77
+ * @param params - Query parameters for filtering
78
+ * @returns Paginated list of products
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const products = await client.listProducts({
83
+ * limit: 20,
84
+ * offset: 0,
85
+ * category: "electronics",
86
+ * search: "laptop",
87
+ * minPrice: 500,
88
+ * maxPrice: 2000,
89
+ * sortBy: "price_asc"
90
+ * });
91
+ * ```
92
+ */
93
+ async listProducts(params?: ListProductsParams): Promise<ListProductsResponse> {
94
+ const queryString = params ? buildQueryString(params) : "";
95
+ return this.get(`/api/marketplace/products${queryString}`);
96
+ }
97
+
98
+ /**
99
+ * Get product details by ID
100
+ *
101
+ * @param productId - Product ID
102
+ * @returns Product details with merchant info, variants, and reviews
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const product = await client.getProduct("prod_123");
107
+ * console.log(product.title, product.priceUSDC);
108
+ * ```
109
+ */
110
+ async getProduct(productId: string): Promise<GetProductResponse> {
111
+ return this.get(`/api/marketplace/products/${productId}`);
112
+ }
113
+
114
+ /**
115
+ * Track product view (increment view count)
116
+ *
117
+ * @param productId - Product ID
118
+ * @returns Success response
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * await client.trackProductView("prod_123");
123
+ * ```
124
+ */
125
+ async trackProductView(productId: string): Promise<SuccessResponse> {
126
+ return this.post(`/api/marketplace/products/${productId}/view`);
127
+ }
128
+
129
+ /**
130
+ * Get active automatic discounts for a product
131
+ *
132
+ * @param productId - Product ID
133
+ * @returns List of applicable discounts
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const discounts = await client.getProductDiscounts("prod_123");
138
+ * discounts.discounts.forEach(d => console.log(d.description));
139
+ * ```
140
+ */
141
+ async getProductDiscounts(productId: string): Promise<ProductDiscountsResponse> {
142
+ return this.get(`/api/marketplace/products/${productId}/discounts`);
143
+ }
144
+
145
+ // ============================================================================
146
+ // Orders API
147
+ // ============================================================================
148
+
149
+ /**
150
+ * Create order from cart checkout
151
+ *
152
+ * Supports multi-merchant checkout - automatically splits orders by merchant.
153
+ *
154
+ * @param request - Order creation request
155
+ * @returns Created order(s) with payment instructions
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const result = await client.createOrder({
160
+ * items: [
161
+ * { productId: "prod_123", quantity: 2 },
162
+ * { productId: "prod_456", quantity: 1, variantId: "var_789" }
163
+ * ],
164
+ * paymentMethod: "USDC_ESCROW",
165
+ * shippingAddress: {
166
+ * fullName: "John Doe",
167
+ * phone: "+1234567890",
168
+ * addressLine1: "123 Main St",
169
+ * city: "New York",
170
+ * stateProvince: "NY",
171
+ * postalCode: "10001",
172
+ * country: "US"
173
+ * },
174
+ * couponCode: "SAVE10"
175
+ * });
176
+ *
177
+ * // For USDC escrow, deposit to the escrow address
178
+ * if (result.escrow) {
179
+ * console.log("Deposit", result.escrow.amountUSDC, "USDC to", result.escrow.address);
180
+ * }
181
+ * ```
182
+ */
183
+ async createOrder(request: CreateOrderRequest): Promise<CreateOrderResponse> {
184
+ return this.post("/api/marketplace/orders", request);
185
+ }
186
+
187
+ /**
188
+ * List user's orders
189
+ *
190
+ * @param params - Query parameters for filtering
191
+ * @returns Paginated list of orders
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * const orders = await client.listOrders({
196
+ * limit: 10,
197
+ * offset: 0,
198
+ * status: "SHIPPED"
199
+ * });
200
+ * ```
201
+ */
202
+ async listOrders(params?: ListOrdersParams): Promise<ListOrdersResponse> {
203
+ const queryString = params ? buildQueryString(params) : "";
204
+ return this.get(`/api/marketplace/orders${queryString}`);
205
+ }
206
+
207
+ /**
208
+ * Get order details by ID
209
+ *
210
+ * @param orderId - Order ID
211
+ * @returns Order details with items, payment, and shipment info
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const order = await client.getOrder("ord_123");
216
+ * console.log(order.order.status, order.order.totalUSDC);
217
+ * ```
218
+ */
219
+ async getOrder(orderId: string): Promise<GetOrderResponse> {
220
+ return this.get(`/api/marketplace/orders/${orderId}`);
221
+ }
222
+
223
+ /**
224
+ * Confirm USDC escrow deposit for order payment
225
+ *
226
+ * Verifies the Hyperliquid transaction and updates order status.
227
+ *
228
+ * @param orderId - Order ID
229
+ * @returns Confirmation response with transaction hash
230
+ *
231
+ * @example
232
+ * ```typescript
233
+ * // After depositing USDC to escrow address
234
+ * const result = await client.confirmEscrowDeposit("ord_123");
235
+ * console.log("Payment confirmed:", result.depositTxHash);
236
+ * ```
237
+ */
238
+ async confirmEscrowDeposit(orderId: string): Promise<ConfirmEscrowDepositResponse> {
239
+ return this.post(`/api/marketplace/orders/${orderId}/confirm-escrow-deposit`);
240
+ }
241
+
242
+ /**
243
+ * Get order receipt
244
+ *
245
+ * @param orderId - Order ID
246
+ * @returns Order receipt for download/display
247
+ *
248
+ * @example
249
+ * ```typescript
250
+ * const receipt = await client.getOrderReceipt("ord_123");
251
+ * console.log("Order #", receipt.receipt.orderNumber);
252
+ * ```
253
+ */
254
+ async getOrderReceipt(orderId: string): Promise<OrderReceiptResponse> {
255
+ return this.get(`/api/marketplace/orders/${orderId}/receipt`);
256
+ }
257
+
258
+ // ============================================================================
259
+ // Reviews API
260
+ // ============================================================================
261
+
262
+ /**
263
+ * List reviews for a product
264
+ *
265
+ * @param productId - Product ID
266
+ * @param params - Query parameters
267
+ * @returns Paginated list of reviews
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * const reviews = await client.listProductReviews("prod_123", {
272
+ * limit: 10,
273
+ * sortBy: "highest"
274
+ * });
275
+ * ```
276
+ */
277
+ async listProductReviews(
278
+ productId: string,
279
+ params?: ListReviewsParams
280
+ ): Promise<ListReviewsResponse> {
281
+ const queryString = params ? buildQueryString(params) : "";
282
+ return this.get(`/api/marketplace/products/${productId}/reviews${queryString}`);
283
+ }
284
+
285
+ /**
286
+ * Create a product review
287
+ *
288
+ * Requires authenticated user who has purchased the product.
289
+ *
290
+ * @param productId - Product ID
291
+ * @param request - Review creation request
292
+ * @returns Created review
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const review = await client.createReview("prod_123", {
297
+ * rating: 5,
298
+ * title: "Great product!",
299
+ * comment: "Exactly what I needed. Fast shipping too!"
300
+ * });
301
+ * ```
302
+ */
303
+ async createReview(
304
+ productId: string,
305
+ request: CreateReviewRequest
306
+ ): Promise<ReviewResponse> {
307
+ return this.post(`/api/marketplace/products/${productId}/reviews`, request);
308
+ }
309
+
310
+ // ============================================================================
311
+ // Shipping Addresses API
312
+ // ============================================================================
313
+
314
+ /**
315
+ * List saved shipping addresses
316
+ *
317
+ * @returns List of user's saved shipping addresses
318
+ *
319
+ * @example
320
+ * ```typescript
321
+ * const addresses = await client.listShippingAddresses();
322
+ * const defaultAddress = addresses.addresses.find(a => a.isDefault);
323
+ * ```
324
+ */
325
+ async listShippingAddresses(): Promise<ListShippingAddressesResponse> {
326
+ return this.get("/api/user/shipping-addresses");
327
+ }
328
+
329
+ /**
330
+ * Create a new shipping address
331
+ *
332
+ * @param request - Shipping address data
333
+ * @returns Created address
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * const address = await client.createShippingAddress({
338
+ * fullName: "John Doe",
339
+ * phone: "+1234567890",
340
+ * addressLine1: "123 Main St",
341
+ * city: "New York",
342
+ * stateProvince: "NY",
343
+ * postalCode: "10001",
344
+ * country: "US",
345
+ * isDefault: true,
346
+ * label: "Home"
347
+ * });
348
+ * ```
349
+ */
350
+ async createShippingAddress(
351
+ request: ShippingAddressRequest
352
+ ): Promise<ShippingAddressResponse> {
353
+ return this.post("/api/user/shipping-addresses", request);
354
+ }
355
+
356
+ /**
357
+ * Update a shipping address
358
+ *
359
+ * @param addressId - Address ID
360
+ * @param request - Updated address data
361
+ * @returns Updated address
362
+ *
363
+ * @example
364
+ * ```typescript
365
+ * const address = await client.updateShippingAddress("addr_123", {
366
+ * phone: "+0987654321"
367
+ * });
368
+ * ```
369
+ */
370
+ async updateShippingAddress(
371
+ addressId: string,
372
+ request: Partial<ShippingAddressRequest>
373
+ ): Promise<ShippingAddressResponse> {
374
+ return this.patch(`/api/user/shipping-addresses/${addressId}`, request);
375
+ }
376
+
377
+ /**
378
+ * Delete a shipping address
379
+ *
380
+ * @param addressId - Address ID
381
+ * @returns Success response
382
+ *
383
+ * @example
384
+ * ```typescript
385
+ * await client.deleteShippingAddress("addr_123");
386
+ * ```
387
+ */
388
+ async deleteShippingAddress(addressId: string): Promise<SuccessResponse> {
389
+ return this.delete(`/api/user/shipping-addresses/${addressId}`);
390
+ }
391
+
392
+ // ============================================================================
393
+ // Cart & Discounts API
394
+ // ============================================================================
395
+
396
+ /**
397
+ * Calculate automatic discounts for cart items
398
+ *
399
+ * @param request - Cart items
400
+ * @returns Calculated discounts and totals
401
+ *
402
+ * @example
403
+ * ```typescript
404
+ * const result = await client.calculateCartDiscounts({
405
+ * items: [
406
+ * { productId: "prod_123", quantity: 2 },
407
+ * { productId: "prod_456", quantity: 1 }
408
+ * ]
409
+ * });
410
+ * console.log("Subtotal:", result.subtotal);
411
+ * console.log("Discount:", result.discountAmount);
412
+ * console.log("Total:", result.total);
413
+ * ```
414
+ */
415
+ async calculateCartDiscounts(
416
+ request: CalculateCartDiscountsRequest
417
+ ): Promise<CalculateCartDiscountsResponse> {
418
+ return this.post("/api/marketplace/cart/discounts", request);
419
+ }
420
+
421
+ /**
422
+ * Validate a discount code for cart items
423
+ *
424
+ * @param request - Discount code and cart items
425
+ * @returns Validation result with discount details
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * const result = await client.validateDiscountCode({
430
+ * code: "SAVE10",
431
+ * items: [
432
+ * { productId: "prod_123", quantity: 2 }
433
+ * ]
434
+ * });
435
+ *
436
+ * if (result.valid) {
437
+ * console.log("Discount:", result.discount?.discountAmount);
438
+ * } else {
439
+ * console.log("Error:", result.error);
440
+ * }
441
+ * ```
442
+ */
443
+ async validateDiscountCode(
444
+ request: ValidateDiscountRequest
445
+ ): Promise<ValidateDiscountResponse> {
446
+ return this.post("/api/marketplace/discounts/validate", request);
447
+ }
448
+
449
+ // ============================================================================
450
+ // Tax Calculation API
451
+ // ============================================================================
452
+
453
+ /**
454
+ * Calculate tax for cart items based on shipping address
455
+ *
456
+ * @param request - Cart items and shipping address
457
+ * @returns Tax calculation with breakdown
458
+ *
459
+ * @example
460
+ * ```typescript
461
+ * const result = await client.calculateTax({
462
+ * items: [
463
+ * { productId: "prod_123", quantity: 2 }
464
+ * ],
465
+ * shippingAddress: {
466
+ * country: "US",
467
+ * region: "NY",
468
+ * postalCode: "10001"
469
+ * }
470
+ * });
471
+ * console.log("Tax:", result.taxAmount);
472
+ * console.log("Total:", result.total);
473
+ * ```
474
+ */
475
+ async calculateTax(request: CalculateTaxRequest): Promise<CalculateTaxResponse> {
476
+ return this.post("/api/marketplace/tax/calculate", request);
477
+ }
478
+
479
+ // ============================================================================
480
+ // Banners API
481
+ // ============================================================================
482
+
483
+ /**
484
+ * Get active promotional banners
485
+ *
486
+ * @param params - Query parameters
487
+ * @returns List of active banners
488
+ *
489
+ * @example
490
+ * ```typescript
491
+ * const banners = await client.getActiveBanners({
492
+ * type: "HERO",
493
+ * merchantId: "merchant_123"
494
+ * });
495
+ * ```
496
+ */
497
+ async getActiveBanners(params?: ListActiveBannersParams): Promise<ListBannersResponse> {
498
+ const queryString = params ? buildQueryString(params) : "";
499
+ return this.get(`/api/marketplace/banners/active${queryString}`);
500
+ }
501
+
502
+ /**
503
+ * Track banner impression or click
504
+ *
505
+ * @param bannerId - Banner ID
506
+ * @param request - Track action (impression or click)
507
+ * @returns Success response
508
+ *
509
+ * @example
510
+ * ```typescript
511
+ * // Track impression
512
+ * await client.trackBanner("banner_123", { action: "impression" });
513
+ *
514
+ * // Track click
515
+ * await client.trackBanner("banner_123", { action: "click" });
516
+ * ```
517
+ */
518
+ async trackBanner(bannerId: string, request: TrackBannerRequest): Promise<SuccessResponse> {
519
+ return this.post(`/api/marketplace/banners/${bannerId}/track`, request);
520
+ }
521
+ }
522
+