@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import './chunk-4UEJOM6W.mjs';
|
|
2
2
|
|
|
3
3
|
// lib/meta/data/testnet/perpDexs.json
|
|
4
4
|
var perpDexs_default = [
|
|
@@ -294,6 +294,12 @@ var perpDexs_default = [
|
|
|
294
294
|
feeRecipient: "0x40008f23a17a1ba9a6f25723a4d06bcd81c33426",
|
|
295
295
|
assetToStreamingOiCap: [],
|
|
296
296
|
subDeployers: [
|
|
297
|
+
[
|
|
298
|
+
"registerAsset",
|
|
299
|
+
[
|
|
300
|
+
"0xb26126e39214f9594802b59515f409479e202f3a"
|
|
301
|
+
]
|
|
302
|
+
],
|
|
297
303
|
[
|
|
298
304
|
"setOracle",
|
|
299
305
|
[
|
|
@@ -449,79 +455,79 @@ var perpDexs_default = [
|
|
|
449
455
|
assetToFundingMultiplier: [
|
|
450
456
|
[
|
|
451
457
|
"vntls:vANDRL",
|
|
452
|
-
"0.
|
|
458
|
+
"0.005000002"
|
|
453
459
|
],
|
|
454
460
|
[
|
|
455
461
|
"vntls:vANTHRPC",
|
|
456
|
-
"0.
|
|
462
|
+
"0.0171374751"
|
|
457
463
|
],
|
|
458
464
|
[
|
|
459
465
|
"vntls:vBYTED",
|
|
460
|
-
"0.
|
|
466
|
+
"0.0148191144"
|
|
461
467
|
],
|
|
462
468
|
[
|
|
463
469
|
"vntls:vCHAIN",
|
|
464
|
-
"0.
|
|
470
|
+
"0.005"
|
|
465
471
|
],
|
|
466
472
|
[
|
|
467
473
|
"vntls:vCLUELY",
|
|
468
|
-
"0
|
|
474
|
+
"2.0"
|
|
469
475
|
],
|
|
470
476
|
[
|
|
471
477
|
"vntls:vCOLOSSAL",
|
|
472
|
-
"0
|
|
478
|
+
"2.0"
|
|
473
479
|
],
|
|
474
480
|
[
|
|
475
481
|
"vntls:vCURSOR",
|
|
476
|
-
"0
|
|
482
|
+
"2.0"
|
|
477
483
|
],
|
|
478
484
|
[
|
|
479
485
|
"vntls:vDBRICKS",
|
|
480
|
-
"0.
|
|
486
|
+
"0.0050534663"
|
|
481
487
|
],
|
|
482
488
|
[
|
|
483
489
|
"vntls:vFIG",
|
|
484
|
-
"0
|
|
490
|
+
"2.0"
|
|
485
491
|
],
|
|
486
492
|
[
|
|
487
493
|
"vntls:vFIGAI",
|
|
488
|
-
"0.
|
|
494
|
+
"0.0050472398"
|
|
489
495
|
],
|
|
490
496
|
[
|
|
491
497
|
"vntls:vKRAKEN",
|
|
492
|
-
"0.
|
|
498
|
+
"0.005"
|
|
493
499
|
],
|
|
494
500
|
[
|
|
495
501
|
"vntls:vNLINK",
|
|
496
|
-
"0
|
|
502
|
+
"2.0"
|
|
497
503
|
],
|
|
498
504
|
[
|
|
499
505
|
"vntls:vOAI",
|
|
500
|
-
"0
|
|
506
|
+
"2.0"
|
|
501
507
|
],
|
|
502
508
|
[
|
|
503
509
|
"vntls:vPERPLXT",
|
|
504
|
-
"0.
|
|
510
|
+
"0.0167613111"
|
|
505
511
|
],
|
|
506
512
|
[
|
|
507
513
|
"vntls:vPOLY",
|
|
508
|
-
"0
|
|
514
|
+
"2.0"
|
|
509
515
|
],
|
|
510
516
|
[
|
|
511
517
|
"vntls:vRAMP",
|
|
512
|
-
"0.
|
|
518
|
+
"0.0050482304"
|
|
513
519
|
],
|
|
514
520
|
[
|
|
515
521
|
"vntls:vSPACEX",
|
|
516
|
-
"0.
|
|
522
|
+
"0.0050030981"
|
|
517
523
|
],
|
|
518
524
|
[
|
|
519
525
|
"vntls:vSTRIPE",
|
|
520
|
-
"0
|
|
526
|
+
"2.0"
|
|
521
527
|
],
|
|
522
528
|
[
|
|
523
529
|
"vntls:vXAI",
|
|
524
|
-
"0
|
|
530
|
+
"2.0"
|
|
525
531
|
]
|
|
526
532
|
]
|
|
527
533
|
},
|
|
@@ -1544,6 +1550,7 @@ var perpDexs_default = [
|
|
|
1544
1550
|
[
|
|
1545
1551
|
"setOracle",
|
|
1546
1552
|
[
|
|
1553
|
+
"0x897ee1987787a2cd302ea9d729e5c46ccd302afe",
|
|
1547
1554
|
"0xa67b36947149a7f2312bffc9d1c859bf12029986"
|
|
1548
1555
|
]
|
|
1549
1556
|
]
|
|
@@ -2128,7 +2135,24 @@ var perpDexs_default = [
|
|
|
2128
2135
|
deployer: "0x2e3ee3705913258c9a0ecb643571045343d77e1b",
|
|
2129
2136
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2130
2137
|
feeRecipient: null,
|
|
2131
|
-
assetToStreamingOiCap: [
|
|
2138
|
+
assetToStreamingOiCap: [
|
|
2139
|
+
[
|
|
2140
|
+
"trve:CRZD",
|
|
2141
|
+
"3000000.0"
|
|
2142
|
+
],
|
|
2143
|
+
[
|
|
2144
|
+
"trve:CS2",
|
|
2145
|
+
"3000000.0"
|
|
2146
|
+
],
|
|
2147
|
+
[
|
|
2148
|
+
"trve:F1LN",
|
|
2149
|
+
"3000000.0"
|
|
2150
|
+
],
|
|
2151
|
+
[
|
|
2152
|
+
"trve:PMRT",
|
|
2153
|
+
"3000000.0"
|
|
2154
|
+
]
|
|
2155
|
+
],
|
|
2132
2156
|
subDeployers: [
|
|
2133
2157
|
[
|
|
2134
2158
|
"setOracle",
|
|
@@ -2171,7 +2195,16 @@ var perpDexs_default = [
|
|
|
2171
2195
|
deployer: "0xb38a498cc3f358899a5a7ad67608271b679a4167",
|
|
2172
2196
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2173
2197
|
feeRecipient: null,
|
|
2174
|
-
assetToStreamingOiCap: [
|
|
2198
|
+
assetToStreamingOiCap: [
|
|
2199
|
+
[
|
|
2200
|
+
"trv:POKE",
|
|
2201
|
+
"3000000.0"
|
|
2202
|
+
],
|
|
2203
|
+
[
|
|
2204
|
+
"trv:ZARD",
|
|
2205
|
+
"3000000.0"
|
|
2206
|
+
]
|
|
2207
|
+
],
|
|
2175
2208
|
subDeployers: [
|
|
2176
2209
|
[
|
|
2177
2210
|
"setOracle",
|
|
@@ -2482,7 +2515,16 @@ var perpDexs_default = [
|
|
|
2482
2515
|
deployer: "0x9b4989cb2735a1ac906cd99648fe3d84ef4b4d2d",
|
|
2483
2516
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2484
2517
|
feeRecipient: null,
|
|
2485
|
-
assetToStreamingOiCap: [
|
|
2518
|
+
assetToStreamingOiCap: [
|
|
2519
|
+
[
|
|
2520
|
+
"trov:NDTO",
|
|
2521
|
+
"3000000.0"
|
|
2522
|
+
],
|
|
2523
|
+
[
|
|
2524
|
+
"trov:NTDO",
|
|
2525
|
+
"3000000.0"
|
|
2526
|
+
]
|
|
2527
|
+
],
|
|
2486
2528
|
subDeployers: [
|
|
2487
2529
|
[
|
|
2488
2530
|
"setOracle",
|
|
@@ -2604,7 +2646,16 @@ var perpDexs_default = [
|
|
|
2604
2646
|
deployer: "0xfe770a17e47717b2e43504cf8f00ced96cf00979",
|
|
2605
2647
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2606
2648
|
feeRecipient: null,
|
|
2607
|
-
assetToStreamingOiCap: [
|
|
2649
|
+
assetToStreamingOiCap: [
|
|
2650
|
+
[
|
|
2651
|
+
"trvv:BIRKN",
|
|
2652
|
+
"3000000.0"
|
|
2653
|
+
],
|
|
2654
|
+
[
|
|
2655
|
+
"trvv:WATCH",
|
|
2656
|
+
"3000000.0"
|
|
2657
|
+
]
|
|
2658
|
+
],
|
|
2608
2659
|
subDeployers: [
|
|
2609
2660
|
[
|
|
2610
2661
|
"setOracle",
|
|
@@ -2623,7 +2674,16 @@ var perpDexs_default = [
|
|
|
2623
2674
|
deployer: "0xaaf21c1d7e7da1604c85d3ea93268e91902ba41e",
|
|
2624
2675
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2625
2676
|
feeRecipient: null,
|
|
2626
|
-
assetToStreamingOiCap: [
|
|
2677
|
+
assetToStreamingOiCap: [
|
|
2678
|
+
[
|
|
2679
|
+
"trvo:BIRKN",
|
|
2680
|
+
"3000000.0"
|
|
2681
|
+
],
|
|
2682
|
+
[
|
|
2683
|
+
"trvo:WATCH",
|
|
2684
|
+
"3000000.0"
|
|
2685
|
+
]
|
|
2686
|
+
],
|
|
2627
2687
|
subDeployers: [
|
|
2628
2688
|
[
|
|
2629
2689
|
"setOracle",
|
|
@@ -2642,7 +2702,20 @@ var perpDexs_default = [
|
|
|
2642
2702
|
deployer: "0x27f9d24b907b86bce4d2cf1299248421391aa444",
|
|
2643
2703
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2644
2704
|
feeRecipient: null,
|
|
2645
|
-
assetToStreamingOiCap: [
|
|
2705
|
+
assetToStreamingOiCap: [
|
|
2706
|
+
[
|
|
2707
|
+
"tvr:HRMES",
|
|
2708
|
+
"3000000.0"
|
|
2709
|
+
],
|
|
2710
|
+
[
|
|
2711
|
+
"tvr:LVMH",
|
|
2712
|
+
"3000000.0"
|
|
2713
|
+
],
|
|
2714
|
+
[
|
|
2715
|
+
"tvr:RCHMT",
|
|
2716
|
+
"3000000.0"
|
|
2717
|
+
]
|
|
2718
|
+
],
|
|
2646
2719
|
subDeployers: [
|
|
2647
2720
|
[
|
|
2648
2721
|
"setOracle",
|
|
@@ -2661,7 +2734,20 @@ var perpDexs_default = [
|
|
|
2661
2734
|
deployer: "0x2be16138a3ea12e09b38dae749f49accc735fded",
|
|
2662
2735
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2663
2736
|
feeRecipient: null,
|
|
2664
|
-
assetToStreamingOiCap: [
|
|
2737
|
+
assetToStreamingOiCap: [
|
|
2738
|
+
[
|
|
2739
|
+
"torv:BRBY",
|
|
2740
|
+
"3000000.0"
|
|
2741
|
+
],
|
|
2742
|
+
[
|
|
2743
|
+
"torv:KRING",
|
|
2744
|
+
"3000000.0"
|
|
2745
|
+
],
|
|
2746
|
+
[
|
|
2747
|
+
"torv:PRADA",
|
|
2748
|
+
"3000000.0"
|
|
2749
|
+
]
|
|
2750
|
+
],
|
|
2665
2751
|
subDeployers: [
|
|
2666
2752
|
[
|
|
2667
2753
|
"setOracle",
|
|
@@ -2680,7 +2766,20 @@ var perpDexs_default = [
|
|
|
2680
2766
|
deployer: "0x5f120e2aed50caf06e89ece2de71c9f5d30bb866",
|
|
2681
2767
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2682
2768
|
feeRecipient: null,
|
|
2683
|
-
assetToStreamingOiCap: [
|
|
2769
|
+
assetToStreamingOiCap: [
|
|
2770
|
+
[
|
|
2771
|
+
"tvro:CRPI",
|
|
2772
|
+
"3000000.0"
|
|
2773
|
+
],
|
|
2774
|
+
[
|
|
2775
|
+
"tvro:GOOS",
|
|
2776
|
+
"3000000.0"
|
|
2777
|
+
],
|
|
2778
|
+
[
|
|
2779
|
+
"tvro:MONC",
|
|
2780
|
+
"3000000.0"
|
|
2781
|
+
]
|
|
2782
|
+
],
|
|
2684
2783
|
subDeployers: [
|
|
2685
2784
|
[
|
|
2686
2785
|
"setOracle",
|
|
@@ -2699,7 +2798,16 @@ var perpDexs_default = [
|
|
|
2699
2798
|
deployer: "0xab8b0324d63cb39728f8c7502ff3b1a905ae8b0d",
|
|
2700
2799
|
oracleUpdater: "0xec6c68168d9fd51bb078acc74722aeff14db220b",
|
|
2701
2800
|
feeRecipient: null,
|
|
2702
|
-
assetToStreamingOiCap: [
|
|
2801
|
+
assetToStreamingOiCap: [
|
|
2802
|
+
[
|
|
2803
|
+
"tvor:CPRI",
|
|
2804
|
+
"3000000.0"
|
|
2805
|
+
],
|
|
2806
|
+
[
|
|
2807
|
+
"tvor:TPR",
|
|
2808
|
+
"3000000.0"
|
|
2809
|
+
]
|
|
2810
|
+
],
|
|
2703
2811
|
subDeployers: [
|
|
2704
2812
|
[
|
|
2705
2813
|
"setOracle",
|
|
@@ -2823,8 +2931,45 @@ var perpDexs_default = [
|
|
|
2823
2931
|
deployerFeeScale: "1.0",
|
|
2824
2932
|
lastDeployerFeeScaleChangeTime: "2025-12-02T11:35:58.687904841",
|
|
2825
2933
|
assetToFundingMultiplier: []
|
|
2934
|
+
},
|
|
2935
|
+
{
|
|
2936
|
+
name: "wa",
|
|
2937
|
+
fullName: "wa:GDR Test DEX",
|
|
2938
|
+
deployer: "0x47515db2eab01758c740ab220352a34b8d5a3826",
|
|
2939
|
+
oracleUpdater: "0x47515db2eab01758c740ab220352a34b8d5a3826",
|
|
2940
|
+
feeRecipient: null,
|
|
2941
|
+
assetToStreamingOiCap: [],
|
|
2942
|
+
subDeployers: [
|
|
2943
|
+
[
|
|
2944
|
+
"setOracle",
|
|
2945
|
+
[
|
|
2946
|
+
"0x47515db2eab01758c740ab220352a34b8d5a3826"
|
|
2947
|
+
]
|
|
2948
|
+
]
|
|
2949
|
+
],
|
|
2950
|
+
deployerFeeScale: "1.0",
|
|
2951
|
+
lastDeployerFeeScaleChangeTime: "2025-12-03T11:35:21.991486494",
|
|
2952
|
+
assetToFundingMultiplier: []
|
|
2953
|
+
},
|
|
2954
|
+
{
|
|
2955
|
+
name: "org",
|
|
2956
|
+
fullName: "org dex",
|
|
2957
|
+
deployer: "0xf5e2c3905c402ea494e71248c6c75338b9098cf6",
|
|
2958
|
+
oracleUpdater: "0xf5e2c3905c402ea494e71248c6c75338b9098cf6",
|
|
2959
|
+
feeRecipient: null,
|
|
2960
|
+
assetToStreamingOiCap: [],
|
|
2961
|
+
subDeployers: [
|
|
2962
|
+
[
|
|
2963
|
+
"setOracle",
|
|
2964
|
+
[
|
|
2965
|
+
"0xf5e2c3905c402ea494e71248c6c75338b9098cf6"
|
|
2966
|
+
]
|
|
2967
|
+
]
|
|
2968
|
+
],
|
|
2969
|
+
deployerFeeScale: "1.0",
|
|
2970
|
+
lastDeployerFeeScaleChangeTime: "2025-12-05T11:15:20.928371793",
|
|
2971
|
+
assetToFundingMultiplier: []
|
|
2826
2972
|
}
|
|
2827
2973
|
];
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
};
|
|
2974
|
+
|
|
2975
|
+
export { perpDexs_default as default };
|
package/dist/react.d.mts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { SpotMeta } from '@nktkas/hyperliquid';
|
|
4
|
+
import { A as AllPerpsMeta, I as InstrumentClient } from './client-CgmiTuEX.mjs';
|
|
5
|
+
|
|
6
|
+
interface InstrumentsProviderProps {
|
|
7
|
+
spotMeta: SpotMeta;
|
|
8
|
+
allPerpsMeta: AllPerpsMeta;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Provides InstrumentClient to the React tree.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <InstrumentsProvider spotMeta={spotMeta} allPerpsMeta={allPerpsMeta}>
|
|
17
|
+
* <App />
|
|
18
|
+
* </InstrumentsProvider>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function InstrumentsProvider({ spotMeta, allPerpsMeta, children, }: InstrumentsProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* Access the InstrumentClient from context.
|
|
24
|
+
* Must be used within an InstrumentsProvider.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const client = useInstruments();
|
|
29
|
+
* const btc = client.getInstrument("BTC");
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
declare function useInstruments(): InstrumentClient;
|
|
33
|
+
/**
|
|
34
|
+
* Access the InstrumentClient from context, returns null if not in provider.
|
|
35
|
+
* Useful for optional instrument access.
|
|
36
|
+
*/
|
|
37
|
+
declare function useInstrumentsOptional(): InstrumentClient | null;
|
|
38
|
+
|
|
39
|
+
export { InstrumentsProvider, type InstrumentsProviderProps, useInstruments, useInstrumentsOptional };
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { SpotMeta } from '@nktkas/hyperliquid';
|
|
4
|
+
import { A as AllPerpsMeta, I as InstrumentClient } from './client-CgmiTuEX.js';
|
|
5
|
+
|
|
6
|
+
interface InstrumentsProviderProps {
|
|
7
|
+
spotMeta: SpotMeta;
|
|
8
|
+
allPerpsMeta: AllPerpsMeta;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Provides InstrumentClient to the React tree.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <InstrumentsProvider spotMeta={spotMeta} allPerpsMeta={allPerpsMeta}>
|
|
17
|
+
* <App />
|
|
18
|
+
* </InstrumentsProvider>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function InstrumentsProvider({ spotMeta, allPerpsMeta, children, }: InstrumentsProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* Access the InstrumentClient from context.
|
|
24
|
+
* Must be used within an InstrumentsProvider.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const client = useInstruments();
|
|
29
|
+
* const btc = client.getInstrument("BTC");
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
declare function useInstruments(): InstrumentClient;
|
|
33
|
+
/**
|
|
34
|
+
* Access the InstrumentClient from context, returns null if not in provider.
|
|
35
|
+
* Useful for optional instrument access.
|
|
36
|
+
*/
|
|
37
|
+
declare function useInstrumentsOptional(): InstrumentClient | null;
|
|
38
|
+
|
|
39
|
+
export { InstrumentsProvider, type InstrumentsProviderProps, useInstruments, useInstrumentsOptional };
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
|
|
6
|
+
// lib/react/InstrumentProvider.tsx
|
|
7
|
+
|
|
8
|
+
// lib/instrument/client.ts
|
|
9
|
+
var AssetIdUtils = {
|
|
10
|
+
/**
|
|
11
|
+
* Calculate perp asset ID
|
|
12
|
+
* - Root dex: assetIndex (0, 1, 2, ...)
|
|
13
|
+
* - HIP3 dex: 100000 + dexIndex * 10000 + assetIndex
|
|
14
|
+
*/
|
|
15
|
+
calcPerpAssetId(dexIndex, assetIndex) {
|
|
16
|
+
if (dexIndex === 0) return assetIndex;
|
|
17
|
+
return 1e5 + dexIndex * 1e4 + assetIndex;
|
|
18
|
+
},
|
|
19
|
+
/**
|
|
20
|
+
* Calculate spot asset ID: 10000 + pairIndex
|
|
21
|
+
*/
|
|
22
|
+
calcSpotAssetId(pairIndex) {
|
|
23
|
+
return 1e4 + pairIndex;
|
|
24
|
+
},
|
|
25
|
+
/**
|
|
26
|
+
* Check if symbol is HIP3 format (contains ":")
|
|
27
|
+
*/
|
|
28
|
+
isHip3Symbol(symbol) {
|
|
29
|
+
return symbol?.includes(":") ?? false;
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Extract dex name from HIP3 symbol (e.g., "xyz:MSTR" -> "xyz")
|
|
33
|
+
*/
|
|
34
|
+
extractDexName(symbol) {
|
|
35
|
+
if (!this.isHip3Symbol(symbol)) return void 0;
|
|
36
|
+
return symbol.split(":")[0];
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var InstrumentClient = class {
|
|
40
|
+
constructor(spotMeta, allPerpsMeta) {
|
|
41
|
+
this.spotMeta = spotMeta;
|
|
42
|
+
this.allPerpsMeta = allPerpsMeta;
|
|
43
|
+
this.instruments = [];
|
|
44
|
+
// O(1) lookup maps for efficient retrieval
|
|
45
|
+
this.instrumentsBySymbol = /* @__PURE__ */ new Map();
|
|
46
|
+
this.instrumentsByCoin = /* @__PURE__ */ new Map();
|
|
47
|
+
this.instrumentsByAssetId = /* @__PURE__ */ new Map();
|
|
48
|
+
// Additional spot lookups (base token -> instrument)
|
|
49
|
+
this.spotByBaseToken = /* @__PURE__ */ new Map();
|
|
50
|
+
// Dex metadata map (dex name -> PerpsMeta)
|
|
51
|
+
// Key: "" for root dex, dex name for HIP3 (e.g., "xyz")
|
|
52
|
+
this.dexMetaMap = /* @__PURE__ */ new Map();
|
|
53
|
+
// Token index lookup for spot
|
|
54
|
+
this.spotTokensByIndex = /* @__PURE__ */ new Map();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Initialize the client by processing meta into instruments.
|
|
58
|
+
* Call this after construction to populate the instrument registry.
|
|
59
|
+
* @returns this for chaining
|
|
60
|
+
*/
|
|
61
|
+
init() {
|
|
62
|
+
if (!this.spotMeta || !this.allPerpsMeta) {
|
|
63
|
+
throw new Error("SpotMeta and allPerpsMeta are required");
|
|
64
|
+
}
|
|
65
|
+
this.indexSpotTokens();
|
|
66
|
+
this.processPerpsInstruments();
|
|
67
|
+
this.processSpotInstruments();
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
// ===== Perps Meta Accessors =====
|
|
71
|
+
getAllPerpsMeta() {
|
|
72
|
+
return this.allPerpsMeta;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get PerpsMeta for a specific dex
|
|
76
|
+
* @param dex - Dex name ("" for root dex, or HIP3 dex name)
|
|
77
|
+
*/
|
|
78
|
+
getPerpDex(dex) {
|
|
79
|
+
return this.dexMetaMap.get(dex);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get PerpsMeta by dex index in allPerpsMeta array
|
|
83
|
+
*/
|
|
84
|
+
getPerpDexByIndex(index) {
|
|
85
|
+
return this.allPerpsMeta[index];
|
|
86
|
+
}
|
|
87
|
+
// ===== Instrument Accessors =====
|
|
88
|
+
/**
|
|
89
|
+
* Get all instruments
|
|
90
|
+
*/
|
|
91
|
+
getAllInstruments() {
|
|
92
|
+
return this.instruments;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get all perps instruments
|
|
96
|
+
*/
|
|
97
|
+
getPerpsInstruments() {
|
|
98
|
+
return this.instruments.filter(
|
|
99
|
+
(i) => i.type === "futures"
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
getHip3Instruments() {
|
|
103
|
+
return this.instruments.filter(
|
|
104
|
+
(i) => i.type === "futures" && !!i.dex
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get all spot instruments
|
|
109
|
+
*/
|
|
110
|
+
getSpotInstruments() {
|
|
111
|
+
return this.instruments.filter(
|
|
112
|
+
(i) => i.type === "spot"
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get instrument by symbol or coin (tries both)
|
|
117
|
+
* @param coinOrSymbol - Symbol (e.g., "BTC", "BTC/USDC") or coin (e.g., "@107")
|
|
118
|
+
*/
|
|
119
|
+
getInstrument(coinOrSymbol) {
|
|
120
|
+
return this.instrumentsByCoin.get(coinOrSymbol) ?? this.instrumentsBySymbol.get(coinOrSymbol);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get instrument by display symbol
|
|
124
|
+
* @param symbol - Display symbol (e.g., "BTC", "BTC/USDC", "xyz:MSTR")
|
|
125
|
+
*/
|
|
126
|
+
getInstrumentBySymbol(symbol) {
|
|
127
|
+
return this.instrumentsBySymbol.get(symbol);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get instrument by Hyperliquid API coin format
|
|
131
|
+
* @param coin - API coin name (e.g., "BTC", "@107", "xyz:MSTR")
|
|
132
|
+
*/
|
|
133
|
+
getInstrumentByCoin(coin) {
|
|
134
|
+
return this.instrumentsByCoin.get(coin);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get instrument by asset ID
|
|
138
|
+
* @param assetId - Numeric asset ID (e.g., 1 for perps, 10001 for spot)
|
|
139
|
+
*/
|
|
140
|
+
getInstrumentByAssetId(assetId) {
|
|
141
|
+
return this.instrumentsByAssetId.get(assetId);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get spot instrument by base token symbol
|
|
145
|
+
* @param baseSymbol - Base token symbol (e.g., "HYPE" to find "HYPE/USDC")
|
|
146
|
+
*/
|
|
147
|
+
getSpotInstrumentByBaseToken(baseSymbol) {
|
|
148
|
+
return this.spotByBaseToken.get(baseSymbol);
|
|
149
|
+
}
|
|
150
|
+
/** Search instruments by symbol, coin, or assetId */
|
|
151
|
+
searchInstruments(query, type) {
|
|
152
|
+
return this.instruments.filter((i) => {
|
|
153
|
+
if (type && i.type !== type) return false;
|
|
154
|
+
return i.symbol.toLowerCase().includes(query.toLowerCase()) || i.coin.toLowerCase().includes(query.toLowerCase());
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get spot token by index
|
|
159
|
+
*/
|
|
160
|
+
getSpotToken(index) {
|
|
161
|
+
return this.spotTokensByIndex.get(index);
|
|
162
|
+
}
|
|
163
|
+
// ===== Internal Processing =====
|
|
164
|
+
indexSpotTokens() {
|
|
165
|
+
for (const token of this.spotMeta.tokens) {
|
|
166
|
+
this.spotTokensByIndex.set(token.index, token);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
processPerpsInstruments() {
|
|
170
|
+
for (let dexIndex = 0; dexIndex < this.allPerpsMeta.length; dexIndex++) {
|
|
171
|
+
const perpMeta = this.allPerpsMeta[dexIndex];
|
|
172
|
+
const dexName = this.extractDexNameFromMeta(perpMeta, dexIndex);
|
|
173
|
+
this.dexMetaMap.set(dexName, perpMeta);
|
|
174
|
+
const collateralToken = this.spotTokensByIndex.get(
|
|
175
|
+
perpMeta.collateralToken
|
|
176
|
+
);
|
|
177
|
+
const collateralTokenSymbol = collateralToken?.name ?? "USDC";
|
|
178
|
+
for (let assetIndex = 0; assetIndex < perpMeta.universe.length; assetIndex++) {
|
|
179
|
+
const info = perpMeta.universe[assetIndex];
|
|
180
|
+
const assetId = AssetIdUtils.calcPerpAssetId(dexIndex, assetIndex);
|
|
181
|
+
const instrument = {
|
|
182
|
+
assetId,
|
|
183
|
+
symbol: info.name,
|
|
184
|
+
coin: info.name,
|
|
185
|
+
szDecimals: info.szDecimals,
|
|
186
|
+
leverage: info.maxLeverage,
|
|
187
|
+
collateralTokenSymbol,
|
|
188
|
+
type: "futures",
|
|
189
|
+
isDelisted: info.isDelisted,
|
|
190
|
+
dex: AssetIdUtils.extractDexName(info.name),
|
|
191
|
+
collateralTokenIndex: perpMeta.collateralToken
|
|
192
|
+
};
|
|
193
|
+
this.addInstrument(instrument);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
processSpotInstruments() {
|
|
198
|
+
const seenSymbols = /* @__PURE__ */ new Set();
|
|
199
|
+
for (const pair of this.spotMeta.universe) {
|
|
200
|
+
const [baseTokenIndex, quoteTokenIndex] = pair.tokens;
|
|
201
|
+
const baseToken = this.spotTokensByIndex.get(baseTokenIndex);
|
|
202
|
+
const quoteToken = this.spotTokensByIndex.get(quoteTokenIndex);
|
|
203
|
+
if (!baseToken || !quoteToken) continue;
|
|
204
|
+
const symbol = `${baseToken.name}/${quoteToken.name}`;
|
|
205
|
+
if (seenSymbols.has(symbol)) continue;
|
|
206
|
+
seenSymbols.add(symbol);
|
|
207
|
+
const assetId = AssetIdUtils.calcSpotAssetId(pair.index);
|
|
208
|
+
const instrument = {
|
|
209
|
+
assetId,
|
|
210
|
+
symbol,
|
|
211
|
+
coin: pair.name,
|
|
212
|
+
// e.g., "@107"
|
|
213
|
+
szDecimals: baseToken.szDecimals,
|
|
214
|
+
type: "spot",
|
|
215
|
+
baseToken,
|
|
216
|
+
quoteToken
|
|
217
|
+
};
|
|
218
|
+
this.addInstrument(instrument);
|
|
219
|
+
if (!this.spotByBaseToken.has(baseToken.name)) {
|
|
220
|
+
this.spotByBaseToken.set(baseToken.name, instrument);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
addInstrument(instrument) {
|
|
225
|
+
this.instruments.push(instrument);
|
|
226
|
+
this.instrumentsBySymbol.set(instrument.symbol, instrument);
|
|
227
|
+
this.instrumentsByCoin.set(instrument.coin, instrument);
|
|
228
|
+
this.instrumentsByAssetId.set(instrument.assetId, instrument);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Extract dex name from PerpsMeta
|
|
232
|
+
* Root dex (index 0) returns "", HIP3 dexes return the dex name (e.g., "xyz")
|
|
233
|
+
*/
|
|
234
|
+
extractDexNameFromMeta(perpMeta, dexIndex) {
|
|
235
|
+
if (dexIndex === 0) return "";
|
|
236
|
+
const firstAsset = perpMeta.universe[0];
|
|
237
|
+
if (!firstAsset) return "";
|
|
238
|
+
return AssetIdUtils.extractDexName(firstAsset.name) ?? "";
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
var InstrumentContext = react.createContext(null);
|
|
242
|
+
function InstrumentsProvider({
|
|
243
|
+
spotMeta,
|
|
244
|
+
allPerpsMeta,
|
|
245
|
+
children
|
|
246
|
+
}) {
|
|
247
|
+
const client = react.useMemo(
|
|
248
|
+
() => new InstrumentClient(spotMeta, allPerpsMeta).init(),
|
|
249
|
+
[spotMeta, allPerpsMeta]
|
|
250
|
+
);
|
|
251
|
+
return /* @__PURE__ */ jsxRuntime.jsx(InstrumentContext.Provider, { value: client, children });
|
|
252
|
+
}
|
|
253
|
+
function useInstruments() {
|
|
254
|
+
const client = react.useContext(InstrumentContext);
|
|
255
|
+
if (!client) {
|
|
256
|
+
throw new Error(
|
|
257
|
+
"useInstruments must be used within an InstrumentsProvider"
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
return client;
|
|
261
|
+
}
|
|
262
|
+
function useInstrumentsOptional() {
|
|
263
|
+
return react.useContext(InstrumentContext);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
exports.InstrumentsProvider = InstrumentsProvider;
|
|
267
|
+
exports.useInstruments = useInstruments;
|
|
268
|
+
exports.useInstrumentsOptional = useInstrumentsOptional;
|