@lifi/perps-types 0.1.1-alpha.1 → 0.1.1-alpha.2

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 (82) hide show
  1. package/package.json +8 -2
  2. package/providers/hyperliquid/package.json +5 -0
  3. package/src/_cjs/index.js +1 -0
  4. package/src/_cjs/index.js.map +1 -1
  5. package/src/_cjs/providers/hyperliquid/assetId.js +19 -0
  6. package/src/_cjs/providers/hyperliquid/assetId.js.map +1 -0
  7. package/src/_cjs/providers/hyperliquid/index.js +20 -0
  8. package/src/_cjs/providers/hyperliquid/index.js.map +1 -0
  9. package/src/_cjs/providers/hyperliquid/mappers/history.js +22 -0
  10. package/src/_cjs/providers/hyperliquid/mappers/history.js.map +1 -0
  11. package/src/_cjs/providers/hyperliquid/mappers/index.js +15 -0
  12. package/src/_cjs/providers/hyperliquid/mappers/index.js.map +1 -0
  13. package/src/_cjs/providers/hyperliquid/mappers/market.js +28 -0
  14. package/src/_cjs/providers/hyperliquid/mappers/market.js.map +1 -0
  15. package/src/_cjs/providers/hyperliquid/mappers/order.js +77 -0
  16. package/src/_cjs/providers/hyperliquid/mappers/order.js.map +1 -0
  17. package/src/_cjs/providers/hyperliquid/mappers/position.js +29 -0
  18. package/src/_cjs/providers/hyperliquid/mappers/position.js.map +1 -0
  19. package/src/_cjs/providers/hyperliquid/mappers/shared.js +12 -0
  20. package/src/_cjs/providers/hyperliquid/mappers/shared.js.map +1 -0
  21. package/src/_cjs/providers/hyperliquid/types.js +3 -0
  22. package/src/_cjs/providers/hyperliquid/types.js.map +1 -0
  23. package/src/_cjs/subscriptions.js +3 -0
  24. package/src/_cjs/subscriptions.js.map +1 -0
  25. package/src/_esm/index.js +1 -0
  26. package/src/_esm/index.js.map +1 -1
  27. package/src/_esm/providers/hyperliquid/assetId.js +23 -0
  28. package/src/_esm/providers/hyperliquid/assetId.js.map +1 -0
  29. package/src/_esm/providers/hyperliquid/index.js +4 -0
  30. package/src/_esm/providers/hyperliquid/index.js.map +1 -0
  31. package/src/_esm/providers/hyperliquid/mappers/history.js +18 -0
  32. package/src/_esm/providers/hyperliquid/mappers/history.js.map +1 -0
  33. package/src/_esm/providers/hyperliquid/mappers/index.js +6 -0
  34. package/src/_esm/providers/hyperliquid/mappers/index.js.map +1 -0
  35. package/src/_esm/providers/hyperliquid/mappers/market.js +24 -0
  36. package/src/_esm/providers/hyperliquid/mappers/market.js.map +1 -0
  37. package/src/_esm/providers/hyperliquid/mappers/order.js +72 -0
  38. package/src/_esm/providers/hyperliquid/mappers/order.js.map +1 -0
  39. package/src/_esm/providers/hyperliquid/mappers/position.js +25 -0
  40. package/src/_esm/providers/hyperliquid/mappers/position.js.map +1 -0
  41. package/src/_esm/providers/hyperliquid/mappers/shared.js +13 -0
  42. package/src/_esm/providers/hyperliquid/mappers/shared.js.map +1 -0
  43. package/src/_esm/providers/hyperliquid/types.js +5 -0
  44. package/src/_esm/providers/hyperliquid/types.js.map +1 -0
  45. package/src/_esm/subscriptions.js +2 -0
  46. package/src/_esm/subscriptions.js.map +1 -0
  47. package/src/_types/index.d.ts +1 -0
  48. package/src/_types/index.d.ts.map +1 -1
  49. package/src/_types/market.d.ts +1 -0
  50. package/src/_types/market.d.ts.map +1 -1
  51. package/src/_types/providers/hyperliquid/assetId.d.ts +12 -0
  52. package/src/_types/providers/hyperliquid/assetId.d.ts.map +1 -0
  53. package/src/_types/providers/hyperliquid/index.d.ts +4 -0
  54. package/src/_types/providers/hyperliquid/index.d.ts.map +1 -0
  55. package/src/_types/providers/hyperliquid/mappers/history.d.ts +4 -0
  56. package/src/_types/providers/hyperliquid/mappers/history.d.ts.map +1 -0
  57. package/src/_types/providers/hyperliquid/mappers/index.d.ts +6 -0
  58. package/src/_types/providers/hyperliquid/mappers/index.d.ts.map +1 -0
  59. package/src/_types/providers/hyperliquid/mappers/market.d.ts +4 -0
  60. package/src/_types/providers/hyperliquid/mappers/market.d.ts.map +1 -0
  61. package/src/_types/providers/hyperliquid/mappers/order.d.ts +6 -0
  62. package/src/_types/providers/hyperliquid/mappers/order.d.ts.map +1 -0
  63. package/src/_types/providers/hyperliquid/mappers/position.d.ts +4 -0
  64. package/src/_types/providers/hyperliquid/mappers/position.d.ts.map +1 -0
  65. package/src/_types/providers/hyperliquid/mappers/shared.d.ts +7 -0
  66. package/src/_types/providers/hyperliquid/mappers/shared.d.ts.map +1 -0
  67. package/src/_types/providers/hyperliquid/types.d.ts +177 -0
  68. package/src/_types/providers/hyperliquid/types.d.ts.map +1 -0
  69. package/src/_types/subscriptions.d.ts +70 -0
  70. package/src/_types/subscriptions.d.ts.map +1 -0
  71. package/src/index.ts +1 -0
  72. package/src/market.ts +1 -0
  73. package/src/providers/hyperliquid/assetId.ts +26 -0
  74. package/src/providers/hyperliquid/index.ts +3 -0
  75. package/src/providers/hyperliquid/mappers/history.ts +25 -0
  76. package/src/providers/hyperliquid/mappers/index.ts +5 -0
  77. package/src/providers/hyperliquid/mappers/market.ts +35 -0
  78. package/src/providers/hyperliquid/mappers/order.ts +89 -0
  79. package/src/providers/hyperliquid/mappers/position.ts +35 -0
  80. package/src/providers/hyperliquid/mappers/shared.ts +15 -0
  81. package/src/providers/hyperliquid/types.ts +200 -0
  82. package/src/subscriptions.ts +72 -0
@@ -1 +1 @@
1
- {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../market.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IACrC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,GAAG,EAAE,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,WAAW,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,aAAa,GACrB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAA;AAER,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB"}
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../market.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IACrC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,GAAG,EAAE,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,WAAW,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,aAAa,GACrB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAA;AAER,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Calculate the asset ID for a given DEX index and asset index.
3
+ *
4
+ * Main DEX (dex = ''): assetId = indexInDex
5
+ * HIP-3 DEXes (dex = 'xyz'): assetId = 100_000 + perpDexIndex * 10_000 + indexInDex
6
+ */
7
+ export declare const calculateAssetId: (dexIndex: number, indexInDex: number) => number;
8
+ /**
9
+ * Get the DEX index from the given list of dex names.
10
+ */
11
+ export declare const getDexIndex: (dex: string, dexNames: string[]) => number;
12
+ //# sourceMappingURL=assetId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetId.d.ts","sourceRoot":"","sources":["../../../providers/hyperliquid/assetId.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,YAAY,MAAM,KACjB,MAKF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,EAAE,KAAG,MAM7D,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './assetId.js';
3
+ export * from './mappers/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../providers/hyperliquid/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { HistoryItem } from '../../../account.js';
2
+ import type { HlUserFill } from '../types.js';
3
+ export declare const mapHistoryItem: (fill: HlUserFill, dexKey: string, assetIdLookup: Map<string, number>) => HistoryItem;
4
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI7C,eAAO,MAAM,cAAc,GACzB,MAAM,UAAU,EAChB,QAAQ,MAAM,EACd,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACjC,WAcD,CAAA"}
@@ -0,0 +1,6 @@
1
+ export { resolveAssetIdFromLookup } from './shared.js';
2
+ export { mapMarket } from './market.js';
3
+ export { mapOpenOrder, mapOrder } from './order.js';
4
+ export { mapPosition } from './position.js';
5
+ export { mapHistoryItem } from './history.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Market } from '../../../market.js';
2
+ import type { HlAssetCtx, HlUniverseItem } from '../types.js';
3
+ export declare const mapMarket: (universe: HlUniverseItem, assetCtx: HlAssetCtx, dexIndex: number, indexInDex: number, dexKey: string) => Market;
4
+ //# sourceMappingURL=market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/market.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI7D,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,UAAU,UAAU,EACpB,UAAU,MAAM,EAChB,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,MAsBF,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { OpenOrder } from '../../../account.js';
2
+ import type { Order } from '../../../trading.js';
3
+ import type { HlFrontendOpenOrder, HlOrderDetail } from '../types.js';
4
+ export declare const mapOpenOrder: (o: HlFrontendOpenOrder, dexKey: string, assetIdLookup: Map<string, number>) => OpenOrder;
5
+ export declare const mapOrder: (detail: HlOrderDetail) => Order;
6
+ //# sourceMappingURL=order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/order.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIrE,eAAO,MAAM,YAAY,GACvB,GAAG,mBAAmB,EACtB,QAAQ,MAAM,EACd,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACjC,SAcD,CAAA;AAoCF,eAAO,MAAM,QAAQ,GAAI,QAAQ,aAAa,KAAG,KAsBhD,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Position } from '../../../account.js';
2
+ import type { HlAssetPosition } from '../types.js';
3
+ export declare const mapPosition: (ap: HlAssetPosition, dexKey: string, assetIdLookup: Map<string, number>) => Position;
4
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/position.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,eAAO,MAAM,WAAW,GACtB,IAAI,eAAe,EACnB,QAAQ,MAAM,EACd,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACjC,QAwBF,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Look up an asset ID by symbol, throwing if the symbol is unknown.
3
+ * Asset ID 0 is a valid Hyperliquid asset (BTC-PERP), so a fallback
4
+ * to 0 would silently corrupt data.
5
+ */
6
+ export declare const resolveAssetIdFromLookup: (lookup: Map<string, number>, symbol: string) => number;
7
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../providers/hyperliquid/mappers/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,MAAM,KACb,MAMF,CAAA"}
@@ -0,0 +1,177 @@
1
+ export type HlUniverseItem = {
2
+ name: string;
3
+ szDecimals: number;
4
+ maxLeverage: number;
5
+ onlyIsolated: boolean;
6
+ isDelisted: boolean;
7
+ };
8
+ export type HlMeta = {
9
+ universe: HlUniverseItem[];
10
+ };
11
+ export type HlAssetCtx = {
12
+ funding: string;
13
+ openInterest: string;
14
+ dayNtlVlm: string;
15
+ markPx: string;
16
+ };
17
+ export type HlMetaAndAssetCtxs = [HlMeta, HlAssetCtx[]];
18
+ export type HlUniverse = HlMeta['universe'];
19
+ export type HlAllMids = Record<string, string>;
20
+ export type HlCandle = {
21
+ t: number;
22
+ o: string;
23
+ h: string;
24
+ l: string;
25
+ c: string;
26
+ v: string;
27
+ };
28
+ export type HlCandleSnapshot = HlCandle[];
29
+ export type HlLevel = {
30
+ px: string;
31
+ sz: string;
32
+ n: number;
33
+ };
34
+ export type HlL2Book = {
35
+ levels: [HlLevel[], HlLevel[]];
36
+ time: number;
37
+ };
38
+ export type HlPosition = {
39
+ coin: string;
40
+ szi: string;
41
+ entryPx: string;
42
+ positionValue: string;
43
+ liquidationPx: string;
44
+ unrealizedPnl: string;
45
+ marginUsed: string;
46
+ leverage: {
47
+ type: string;
48
+ value: number;
49
+ };
50
+ };
51
+ export type HlAssetPosition = {
52
+ position: HlPosition;
53
+ };
54
+ export type HlClearinghouseState = {
55
+ assetPositions: HlAssetPosition[];
56
+ marginSummary: {
57
+ accountValue: string;
58
+ totalMarginUsed: string;
59
+ };
60
+ crossMarginSummary: {
61
+ accountValue: string;
62
+ totalMarginUsed: string;
63
+ };
64
+ };
65
+ export type HlSpotBalance = {
66
+ coin: string;
67
+ token: number;
68
+ total: string;
69
+ hold: string;
70
+ entryNtl: string;
71
+ };
72
+ export type HlSpotClearinghouseState = {
73
+ balances: HlSpotBalance[];
74
+ };
75
+ export type HlUserFees = {
76
+ userAddRate: string;
77
+ userCrossRate: string;
78
+ activeReferralDiscount: string;
79
+ };
80
+ export type HlFrontendOpenOrder = {
81
+ oid: number;
82
+ coin: string;
83
+ side: string;
84
+ sz: string;
85
+ limitPx: string;
86
+ orderType: string;
87
+ origSz: string;
88
+ reduceOnly: boolean;
89
+ timestamp: number;
90
+ };
91
+ export type HlFrontendOpenOrders = HlFrontendOpenOrder[];
92
+ export type HlExtraAgents = Array<Record<string, unknown>>;
93
+ export type HlUserFill = {
94
+ tid: number;
95
+ coin: string;
96
+ side: string;
97
+ sz: string;
98
+ px: string;
99
+ dir: string;
100
+ fee: string;
101
+ closedPnl: string;
102
+ time: number;
103
+ };
104
+ export type HlUserFills = HlUserFill[];
105
+ export type HlUserFillsByTime = HlUserFill[];
106
+ export type HlOrderStatusFound = {
107
+ status: 'order';
108
+ order: HlOrderDetail;
109
+ };
110
+ export type HlOrderDetail = {
111
+ order: {
112
+ oid: number;
113
+ coin: string;
114
+ side: string;
115
+ sz: string;
116
+ limitPx: string;
117
+ orderType: string;
118
+ origSz: string;
119
+ reduceOnly: boolean;
120
+ timestamp: number;
121
+ tif: string | null;
122
+ cloid: string | null;
123
+ triggerCondition: string;
124
+ triggerPx: string | null;
125
+ };
126
+ status: string;
127
+ statusTimestamp: number;
128
+ };
129
+ export type HlOrderStatusResponse = HlOrderStatusFound | {
130
+ status: 'unknownOid';
131
+ };
132
+ export type HlPerpDexs = Array<null | {
133
+ name: string;
134
+ }>;
135
+ export type HlExchangeRequest = {
136
+ action: Record<string, unknown>;
137
+ signature: {
138
+ r: string;
139
+ s: string;
140
+ v: number;
141
+ };
142
+ nonce: number;
143
+ vaultAddress?: string | null;
144
+ };
145
+ export type HlExchangeResponse = {
146
+ status: string;
147
+ response?: string | {
148
+ type: string;
149
+ data?: {
150
+ statuses?: Array<string | {
151
+ filled: {
152
+ totalSz: string;
153
+ avgPx: string;
154
+ oid: number;
155
+ };
156
+ } | {
157
+ resting: {
158
+ oid: number;
159
+ };
160
+ } | {
161
+ waitingForFill: {
162
+ oid: number;
163
+ };
164
+ } | {
165
+ waitingForTrigger: {
166
+ oid: number;
167
+ };
168
+ } | {
169
+ success: true;
170
+ } | {
171
+ error: string;
172
+ }>;
173
+ status?: unknown;
174
+ };
175
+ };
176
+ };
177
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../providers/hyperliquid/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { Address } from './typedData.js';
2
+ import type { Candle, OhlcvInterval, OrderbookResponse, PricesResponse } from './market.js';
3
+ import type { HistoryItem, Position } from './account.js';
4
+ import type { Order } from './trading.js';
5
+ export type PricesSubscription = {
6
+ channel: 'prices';
7
+ dex: string;
8
+ };
9
+ export type OrderbookSubscription = {
10
+ channel: 'orderbook';
11
+ dex: string;
12
+ symbol: string;
13
+ };
14
+ export type TradesSubscription = {
15
+ channel: 'trades';
16
+ dex: string;
17
+ symbol: string;
18
+ };
19
+ export type CandleSubscription = {
20
+ channel: 'candle';
21
+ dex: string;
22
+ symbol: string;
23
+ interval: OhlcvInterval;
24
+ };
25
+ export type OrderUpdatesSubscription = {
26
+ channel: 'orderUpdates';
27
+ dex: string;
28
+ address: Address;
29
+ };
30
+ export type FillsSubscription = {
31
+ channel: 'fills';
32
+ dex: string;
33
+ address: Address;
34
+ };
35
+ export type PositionsSubscription = {
36
+ channel: 'positions';
37
+ dex: string;
38
+ address: Address;
39
+ };
40
+ export type Subscription = PricesSubscription | OrderbookSubscription | TradesSubscription | CandleSubscription | OrderUpdatesSubscription | FillsSubscription | PositionsSubscription;
41
+ export type PricesEvent = {
42
+ channel: 'prices';
43
+ data: PricesResponse;
44
+ };
45
+ export type OrderbookEvent = {
46
+ channel: 'orderbook';
47
+ data: OrderbookResponse;
48
+ };
49
+ export type TradesEvent = {
50
+ channel: 'trades';
51
+ data: HistoryItem[];
52
+ };
53
+ export type CandleEvent = {
54
+ channel: 'candle';
55
+ data: Candle;
56
+ };
57
+ export type OrderUpdatesEvent = {
58
+ channel: 'orderUpdates';
59
+ data: Order[];
60
+ };
61
+ export type FillsEvent = {
62
+ channel: 'fills';
63
+ data: HistoryItem[];
64
+ };
65
+ export type PositionsEvent = {
66
+ channel: 'positions';
67
+ data: Position[];
68
+ };
69
+ export type SubscriptionEvent = PricesEvent | OrderbookEvent | TradesEvent | CandleEvent | OrderUpdatesEvent | FillsEvent | PositionsEvent;
70
+ //# sourceMappingURL=subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAIzC,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,QAAQ,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,QAAQ,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,aAAa,CAAA;CACxB,CAAA;AACD,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,iBAAiB,GACjB,qBAAqB,CAAA;AAIzB,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAA;AACrE,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAC9E,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,KAAK,EAAE,CAAA;CAAE,CAAA;AAC1E,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAClE,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,cAAc,GACd,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,UAAU,GACV,cAAc,CAAA"}
package/src/index.ts CHANGED
@@ -6,3 +6,4 @@ export * from './account.js'
6
6
  export * from './trading.js'
7
7
  export * from './withdrawal.js'
8
8
  export * from './errors.js'
9
+ export * from './subscriptions.js'
package/src/market.ts CHANGED
@@ -16,6 +16,7 @@ export interface Dex {
16
16
  logoURI: string
17
17
  authorizations: Authorization[]
18
18
  extraData?: Record<string, unknown>
19
+ wsUrl?: string
19
20
  }
20
21
 
21
22
  export interface DexesResponse {
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Calculate the asset ID for a given DEX index and asset index.
3
+ *
4
+ * Main DEX (dex = ''): assetId = indexInDex
5
+ * HIP-3 DEXes (dex = 'xyz'): assetId = 100_000 + perpDexIndex * 10_000 + indexInDex
6
+ */
7
+ export const calculateAssetId = (
8
+ dexIndex: number,
9
+ indexInDex: number
10
+ ): number => {
11
+ if (dexIndex === 0) {
12
+ return indexInDex
13
+ }
14
+ return 100_000 + dexIndex * 10_000 + indexInDex
15
+ }
16
+
17
+ /**
18
+ * Get the DEX index from the given list of dex names.
19
+ */
20
+ export const getDexIndex = (dex: string, dexNames: string[]): number => {
21
+ const index = dexNames.indexOf(dex)
22
+ if (index === -1) {
23
+ throw new Error(`Unknown sub-dex: ${dex}`)
24
+ }
25
+ return index
26
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types.js'
2
+ export * from './assetId.js'
3
+ export * from './mappers/index.js'
@@ -0,0 +1,25 @@
1
+ import { HistoryItemStatus, OrderSide, OrderType } from '../../../enums.js'
2
+ import type { HistoryItem } from '../../../account.js'
3
+ import type { HlUserFill } from '../types.js'
4
+
5
+ import { resolveAssetIdFromLookup } from './shared.js'
6
+
7
+ export const mapHistoryItem = (
8
+ fill: HlUserFill,
9
+ dexKey: string,
10
+ assetIdLookup: Map<string, number>
11
+ ): HistoryItem => ({
12
+ id: String(fill.tid),
13
+ symbol: fill.coin,
14
+ assetId: resolveAssetIdFromLookup(assetIdLookup, fill.coin),
15
+ dex: dexKey,
16
+ side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
17
+ type: fill.dir?.includes('Limit') ? OrderType.LIMIT : OrderType.MARKET,
18
+ size: fill.sz,
19
+ price: fill.px,
20
+ status: HistoryItemStatus.FILLED,
21
+ filledSize: fill.sz,
22
+ fee: fill.fee,
23
+ realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl,
24
+ createdAt: new Date(fill.time).toISOString(),
25
+ })
@@ -0,0 +1,5 @@
1
+ export { resolveAssetIdFromLookup } from './shared.js'
2
+ export { mapMarket } from './market.js'
3
+ export { mapOpenOrder, mapOrder } from './order.js'
4
+ export { mapPosition } from './position.js'
5
+ export { mapHistoryItem } from './history.js'
@@ -0,0 +1,35 @@
1
+ import type { Market } from '../../../market.js'
2
+ import { calculateAssetId } from '../assetId.js'
3
+ import type { HlAssetCtx, HlUniverseItem } from '../types.js'
4
+
5
+ const NEXT_FUNDING_INTERVAL_MS = 60 * 60 * 1000 // 1 hour
6
+
7
+ export const mapMarket = (
8
+ universe: HlUniverseItem,
9
+ assetCtx: HlAssetCtx,
10
+ dexIndex: number,
11
+ indexInDex: number,
12
+ dexKey: string
13
+ ): Market => {
14
+ const now = Date.now()
15
+ const nextFundingTime =
16
+ Math.ceil(now / NEXT_FUNDING_INTERVAL_MS) * NEXT_FUNDING_INTERVAL_MS
17
+
18
+ return {
19
+ symbol: universe.name,
20
+ name: universe.name,
21
+ logoURI: `https://app.hyperliquid.xyz/coins/${universe.name}.svg`,
22
+ assetId: calculateAssetId(dexIndex, indexInDex),
23
+ dex: dexKey,
24
+ szDecimals: universe.szDecimals,
25
+ maxLeverage: universe.maxLeverage,
26
+ onlyIsolated: universe.onlyIsolated === true,
27
+ funding: {
28
+ rate: assetCtx.funding,
29
+ nextFundingTime,
30
+ },
31
+ openInterest: assetCtx.openInterest,
32
+ volume24h: assetCtx.dayNtlVlm,
33
+ markPrice: assetCtx.markPx,
34
+ }
35
+ }
@@ -0,0 +1,89 @@
1
+ import {
2
+ OrderSide,
3
+ OrderStatus,
4
+ OrderType,
5
+ TimeInForce,
6
+ } from '../../../enums.js'
7
+ import type { OpenOrder } from '../../../account.js'
8
+ import type { Order } from '../../../trading.js'
9
+ import type { HlFrontendOpenOrder, HlOrderDetail } from '../types.js'
10
+
11
+ import { resolveAssetIdFromLookup } from './shared.js'
12
+
13
+ export const mapOpenOrder = (
14
+ o: HlFrontendOpenOrder,
15
+ dexKey: string,
16
+ assetIdLookup: Map<string, number>
17
+ ): OpenOrder => ({
18
+ id: String(o.oid),
19
+ symbol: o.coin,
20
+ assetId: resolveAssetIdFromLookup(assetIdLookup, o.coin),
21
+ dex: dexKey,
22
+ side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
23
+ type: o.orderType === 'Limit' ? OrderType.LIMIT : OrderType.MARKET,
24
+ size: o.sz,
25
+ price: o.limitPx,
26
+ filledSize: o.origSz
27
+ ? (parseFloat(o.origSz) - parseFloat(o.sz)).toString()
28
+ : '0',
29
+ reduceOnly: o.reduceOnly ?? false,
30
+ createdAt: new Date(o.timestamp).toISOString(),
31
+ })
32
+
33
+ const mapOrderStatus = (status: string): OrderStatus => {
34
+ switch (status) {
35
+ case 'open':
36
+ case 'resting':
37
+ return OrderStatus.OPEN
38
+ case 'filled':
39
+ return OrderStatus.FILLED
40
+ case 'canceled':
41
+ case 'cancelled':
42
+ return OrderStatus.CANCELLED
43
+ case 'rejected':
44
+ return OrderStatus.REJECTED
45
+ case 'triggered':
46
+ return OrderStatus.TRIGGERED
47
+ case 'marginCanceled':
48
+ return OrderStatus.CANCELLED
49
+ default:
50
+ return OrderStatus.PENDING
51
+ }
52
+ }
53
+
54
+ const mapTimeInForce = (tif: string | undefined): TimeInForce | undefined => {
55
+ switch (tif) {
56
+ case 'Gtc':
57
+ return TimeInForce.GTC
58
+ case 'Ioc':
59
+ return TimeInForce.IOC
60
+ case 'Alo':
61
+ return TimeInForce.POST_ONLY
62
+ default:
63
+ return undefined
64
+ }
65
+ }
66
+
67
+ export const mapOrder = (detail: HlOrderDetail): Order => {
68
+ const o = detail.order
69
+ const filled = parseFloat(o.origSz) - parseFloat(o.sz)
70
+
71
+ return {
72
+ orderId: String(o.oid),
73
+ clientOrderId: o.cloid ?? undefined,
74
+ symbol: o.coin,
75
+ side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
76
+ type: o.orderType === 'Limit' ? OrderType.LIMIT : OrderType.MARKET,
77
+ price: o.limitPx,
78
+ originalSize: o.origSz,
79
+ remainingSize: o.sz,
80
+ filledSize: filled.toString(),
81
+ timeInForce: mapTimeInForce(o.tif ?? undefined),
82
+ reduceOnly: o.reduceOnly ?? undefined,
83
+ isTrigger: o.triggerCondition !== undefined && o.triggerCondition !== 'N/A',
84
+ triggerPrice: o.triggerPx ?? undefined,
85
+ status: mapOrderStatus(detail.status),
86
+ createdAt: new Date(o.timestamp).toISOString(),
87
+ updatedAt: new Date(detail.statusTimestamp).toISOString(),
88
+ }
89
+ }
@@ -0,0 +1,35 @@
1
+ import { MarginMode, PositionSide } from '../../../enums.js'
2
+ import type { Position } from '../../../account.js'
3
+ import type { HlAssetPosition } from '../types.js'
4
+
5
+ import { resolveAssetIdFromLookup } from './shared.js'
6
+
7
+ export const mapPosition = (
8
+ ap: HlAssetPosition,
9
+ dexKey: string,
10
+ assetIdLookup: Map<string, number>
11
+ ): Position => {
12
+ const pos = ap.position
13
+ const szi = parseFloat(pos.szi)
14
+
15
+ return {
16
+ symbol: pos.coin,
17
+ assetId: resolveAssetIdFromLookup(assetIdLookup, pos.coin),
18
+ dex: dexKey,
19
+ side: szi >= 0 ? PositionSide.LONG : PositionSide.SHORT,
20
+ size: Math.abs(szi).toString(),
21
+ entryPrice: pos.entryPx ?? '0',
22
+ markPrice:
23
+ pos.positionValue && szi !== 0
24
+ ? (parseFloat(pos.positionValue) / Math.abs(szi)).toString()
25
+ : '0',
26
+ liquidationPrice: pos.liquidationPx ?? '0',
27
+ unrealizedPnl: pos.unrealizedPnl,
28
+ leverage: ap.position.leverage.value,
29
+ marginUsed: pos.marginUsed,
30
+ marginMode:
31
+ ap.position.leverage.type === 'cross'
32
+ ? MarginMode.CROSS
33
+ : MarginMode.ISOLATED,
34
+ }
35
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Look up an asset ID by symbol, throwing if the symbol is unknown.
3
+ * Asset ID 0 is a valid Hyperliquid asset (BTC-PERP), so a fallback
4
+ * to 0 would silently corrupt data.
5
+ */
6
+ export const resolveAssetIdFromLookup = (
7
+ lookup: Map<string, number>,
8
+ symbol: string
9
+ ): number => {
10
+ const id = lookup.get(symbol)
11
+ if (id === undefined) {
12
+ throw new Error(`Unknown asset symbol: ${symbol}`)
13
+ }
14
+ return id
15
+ }