@lifi/perps-sdk-provider-hyperliquid 4.1.0 → 4.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/cjs/services/getAccount.d.ts.map +1 -1
  2. package/dist/cjs/services/getAccount.js +1 -11
  3. package/dist/cjs/services/getAccount.js.map +1 -1
  4. package/dist/cjs/types/account.d.ts +1 -0
  5. package/dist/cjs/types/account.d.ts.map +1 -1
  6. package/dist/cjs/types/account.js +1 -0
  7. package/dist/cjs/types/account.js.map +1 -1
  8. package/dist/cjs/utils/index.d.ts +1 -0
  9. package/dist/cjs/utils/index.d.ts.map +1 -1
  10. package/dist/cjs/utils/index.js +3 -1
  11. package/dist/cjs/utils/index.js.map +1 -1
  12. package/dist/cjs/utils/spotCollateral.d.ts +7 -0
  13. package/dist/cjs/utils/spotCollateral.d.ts.map +1 -0
  14. package/dist/cjs/utils/spotCollateral.js +29 -0
  15. package/dist/cjs/utils/spotCollateral.js.map +1 -0
  16. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +15 -1
  17. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  18. package/dist/cjs/websocket/HyperliquidWsProvider.js +184 -27
  19. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  20. package/dist/esm/services/getAccount.d.ts.map +1 -1
  21. package/dist/esm/services/getAccount.js +2 -13
  22. package/dist/esm/services/getAccount.js.map +1 -1
  23. package/dist/esm/types/account.d.ts +3 -1
  24. package/dist/esm/types/account.d.ts.map +1 -1
  25. package/dist/esm/types/account.js +3 -1
  26. package/dist/esm/types/account.js.map +1 -1
  27. package/dist/esm/utils/index.d.ts +1 -0
  28. package/dist/esm/utils/index.d.ts.map +1 -1
  29. package/dist/esm/utils/index.js +1 -0
  30. package/dist/esm/utils/index.js.map +1 -1
  31. package/dist/esm/utils/spotCollateral.d.ts +14 -0
  32. package/dist/esm/utils/spotCollateral.d.ts.map +1 -0
  33. package/dist/esm/utils/spotCollateral.js +39 -0
  34. package/dist/esm/utils/spotCollateral.js.map +1 -0
  35. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +23 -1
  36. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  37. package/dist/esm/websocket/HyperliquidWsProvider.js +223 -17
  38. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  39. package/dist/types/services/getAccount.d.ts.map +1 -1
  40. package/dist/types/types/account.d.ts +3 -1
  41. package/dist/types/types/account.d.ts.map +1 -1
  42. package/dist/types/utils/index.d.ts +1 -0
  43. package/dist/types/utils/index.d.ts.map +1 -1
  44. package/dist/types/utils/spotCollateral.d.ts +14 -0
  45. package/dist/types/utils/spotCollateral.d.ts.map +1 -0
  46. package/dist/types/websocket/HyperliquidWsProvider.d.ts +23 -1
  47. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  48. package/package.json +3 -3
  49. package/src/services/getAccount.ts +8 -12
  50. package/src/types/account.ts +3 -1
  51. package/src/utils/index.ts +1 -0
  52. package/src/utils/spotCollateral.ts +50 -0
  53. package/src/websocket/HyperliquidWsProvider.ts +304 -18
@@ -1 +1 @@
1
- {"version":3,"file":"getAccount.d.ts","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAsBvD,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AAiHvD,eAAO,MAAM,UAAU,GACrB,oBAAoB,kBAAkB,EACtC,QAAQ,gBAAgB,EACxB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,eAAe,CA2GzB,CAAA"}
1
+ {"version":3,"file":"getAccount.d.ts","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAuBvD,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AA4GvD,eAAO,MAAM,UAAU,GACrB,oBAAoB,kBAAkB,EACtC,QAAQ,gBAAgB,EACxB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,eAAe,CA2GzB,CAAA"}
@@ -31,17 +31,7 @@ const getMarginUsed = (abstraction, positions, stateByDex) => {
31
31
  const isUnifiedMode = (abstraction) => abstraction === index_js_1.HlAbstractionMode.UNIFIED_ACCOUNT ||
32
32
  abstraction === index_js_1.HlAbstractionMode.PORTFOLIO_MARGIN;
33
33
  const buildBalances = (abstraction, spotState, stateByDex, quoteAssetIds, priceById, quoteAssetByCategory) => {
34
- const balances = [];
35
- const collateralBalances = [];
36
- for (const b of spotState.balances) {
37
- const balance = (0, index_js_2.spotBalance)((0, index_js_2.spotAssetFromToken)(b), b.total, priceById);
38
- if (quoteAssetIds.has(balance.asset.id)) {
39
- collateralBalances.push(balance);
40
- }
41
- else {
42
- balances.push(balance);
43
- }
44
- }
34
+ const { balances, collateralBalances } = (0, index_js_2.partitionSpotBalances)(spotState.balances.map((b) => (0, index_js_2.spotBalance)((0, index_js_2.spotAssetFromToken)(b), b.total, priceById)), quoteAssetIds, abstraction === index_js_1.HlAbstractionMode.PORTFOLIO_MARGIN);
45
35
  if (!isUnifiedMode(abstraction)) {
46
36
  for (const [dex, state] of stateByDex) {
47
37
  const categoryId = dex || constants_js_1.PROVIDER_KEY;
@@ -1 +1 @@
1
- {"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":";;;AAAA,+CAMwB;AAQxB,kDAA8C;AAE9C,gDAM0B;AAC1B,gDAM0B;AAC1B,0DAAmE;AACnE,4DAA0E;AAY1E,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAU,EAAE,CAC9D,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;AAErD,MAAM,kBAAkB,GAAG,CAAC,KAA2B,EAAU,EAAE,CACjE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;AAExD,MAAM,aAAa,GAAG,CACpB,WAAqC,EACrC,SAAqB,EACrB,UAA6C,EACrC,EAAE;IACV,IACE,WAAW,KAAK,4BAAiB,CAAC,eAAe;QACjD,WAAW,KAAK,4BAAiB,CAAC,gBAAgB,EAClD,CAAC;QAGD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EACjD,CAAC,CACF,CAAA;QACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,WAAW,KAAK,4BAAiB,CAAC,eAAe,EAAE,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YACnC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,WAAqC,EAAW,EAAE,CACvE,WAAW,KAAK,4BAAiB,CAAC,eAAe;IACjD,WAAW,KAAK,4BAAiB,CAAC,gBAAgB,CAAA;AAOpD,MAAM,aAAa,GAAG,CACpB,WAAqC,EACrC,SAAmC,EACnC,UAA6C,EAC7C,aAAkC,EAClC,SAA8B,EAC9B,oBAAwC,EACtB,EAAE;IACpB,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,IAAA,gCAAqB,EAC5D,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,IAAA,sBAAW,EAAC,IAAA,6BAAkB,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CACvD,EACD,aAAa,EACb,WAAW,KAAK,4BAAiB,CAAC,gBAAgB,CACnD,CAAA;IAMD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,GAAG,IAAI,2BAAY,CAAA;YACtC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;YACpC,kBAAkB,CAAC,IAAI,CAAC;gBACtB,UAAU;gBAGV,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAE;gBAC5C,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;gBACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;aAC3B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;AACzC,CAAC,CAAA;AAmBM,MAAM,UAAU,GAAG,KAAK,EAC7B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAwB,EACxB,OAA2B,EACD,EAAE;IAC5B,MAAM,QAAQ,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,2BAAY,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAA;IACvC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CACjD,CAAA;IACD,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,MAAM,CACJ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,EAAE,MAAM,EAAE,EACX,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,IAAA,2BAAW,EACT,MAAM,EACN,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EAC1C,QAAQ,CACT;QAID,IAAA,2BAAW,EACT,MAAM,EACN,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACjD,QAAQ,CACT;QACD,IAAA,2BAAW,EACT,MAAM,EACN,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EAC7C,QAAQ,CACT;QACD,IAAA,2BAAW,EACT,MAAM,EACN,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACxD,QAAQ,CACT;QACD,OAAO,CAAC,GAAG,CACT,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpB,IAAA,2BAAW,EACT,MAAM,EACN;YACE,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/B,EACD,QAAQ,CACT,CACF,CACF;QACD,IAAA,6BAAiB,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,2BAAY,EAAE,EAAE,OAAO,CAAC;KAC/D,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAA,wBAAa,EAC7B,OAAO,EACP,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAA,yBAAa,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACrE,CAAA;IAED,MAAM,SAAS,GAAe,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3D,KAAK,CAAC,cAAc;SACjB,MAAM,CAAC,oCAAmB,CAAC;SAC3B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,4BAAW,EAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CACpE,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgC,CAAA;IAC1D,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,EACpD,CAAC,CACF,CAAA;IAED,MAAM,MAAM,GAA6B;QACvC,QAAQ,EAAE,2BAAY;QACtB,eAAe,EAAE,iBAAiB;QAClC,MAAM,EAAE,YAAY;KACrB,CAAA;IAED,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,aAAa,CACpD,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,oBAAoB,CACrB,CAAA;IAED,OAAO;QACL,QAAQ,EAAE,2BAAY;QACtB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ;QACR,kBAAkB;QAClB,SAAS;QACT,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,CAAC;QACnE,aAAa,EAAE,kBAAkB,CAAC,QAAQ,EAAE;QAC5C,OAAO,EAAE;YACP,KAAK,EAAE,UAAU,CAAC,WAAW,IAAI,GAAG;YACpC,KAAK,EAAE,UAAU,CAAC,aAAa,IAAI,GAAG;SACvC;QACD,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AA/GY,QAAA,UAAU,cA+GtB"}
@@ -45,6 +45,7 @@ export type HlPreTransferCheck = {
45
45
  userExists: boolean;
46
46
  };
47
47
  export declare const HlAbstractionMode: {
48
+ readonly DEFAULT: "default";
48
49
  readonly DISABLED: "disabled";
49
50
  readonly UNIFIED_ACCOUNT: "unifiedAccount";
50
51
  readonly PORTFOLIO_MARGIN: "portfolioMargin";
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,eAAe,EAAE,CAAA;IACjC,aAAa,EAAE;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,kBAAkB,EAAE;QAClB,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;CACF,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAGD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,MAAM,CAAA;CAC/B,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;AAQrD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAOD,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAA;AAGV,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,eAAe,EAAE,CAAA;IACjC,aAAa,EAAE;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,kBAAkB,EAAE;QAClB,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;CACF,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAGD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,MAAM,CAAA;CAC/B,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;AAQrD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAQD,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAA;AAGV,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HlAbstractionMode = void 0;
4
4
  exports.HlAbstractionMode = {
5
+ DEFAULT: 'default',
5
6
  DISABLED: 'disabled',
6
7
  UNIFIED_ACCOUNT: 'unifiedAccount',
7
8
  PORTFOLIO_MARGIN: 'portfolioMargin',
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":";;;AA0Ea,QAAA,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACzB,CAAA"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":";;;AA2Ea,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACzB,CAAA"}
@@ -13,4 +13,5 @@ export { coinAsset, perpsDexNames } from './marketDisplay.js';
13
13
  export { formatOrderPrice, formatOrderSize, getMaxPriceDecimals, } from './orderFormatting.js';
14
14
  export { priceStepToAggregation } from './priceStepToAggregation.js';
15
15
  export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
16
+ export { partitionSpotBalances, type SpotPartition } from './spotCollateral.js';
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.spotPriceById = exports.spotBalance = exports.spotAssetFromToken = exports.priceStepToAggregation = exports.getMaxPriceDecimals = exports.formatOrderSize = exports.formatOrderPrice = exports.perpsDexNames = exports.coinAsset = exports.mapPosition = exports.isOpenAssetPosition = exports.mapTriggerOrder = exports.mapStatusReason = exports.mapOrderType = exports.mapOrderStatus = exports.mapOrder = exports.mapOpenOrder = exports.isTriggerType = exports.isTriggerOrder = exports.mapMarketContext = exports.mapMarket = exports.mapFill = exports.classifyFillFromPosition = exports.mapLedgerEntry = exports.mapFundingActivity = exports.calculateMaintenanceMarginRate = exports.calculateLiquidationPrice = exports.infoRequest = exports.hlInfoOptions = exports.decodeFastAssetCtxs = exports.decodeCompressedJson = exports.getProviderIndex = exports.calculateAssetId = exports.assetIsSpot = void 0;
3
+ exports.partitionSpotBalances = exports.spotPriceById = exports.spotBalance = exports.spotAssetFromToken = exports.priceStepToAggregation = exports.getMaxPriceDecimals = exports.formatOrderSize = exports.formatOrderPrice = exports.perpsDexNames = exports.coinAsset = exports.mapPosition = exports.isOpenAssetPosition = exports.mapTriggerOrder = exports.mapStatusReason = exports.mapOrderType = exports.mapOrderStatus = exports.mapOrder = exports.mapOpenOrder = exports.isTriggerType = exports.isTriggerOrder = exports.mapMarketContext = exports.mapMarket = exports.mapFill = exports.classifyFillFromPosition = exports.mapLedgerEntry = exports.mapFundingActivity = exports.calculateMaintenanceMarginRate = exports.calculateLiquidationPrice = exports.infoRequest = exports.hlInfoOptions = exports.decodeFastAssetCtxs = exports.decodeCompressedJson = exports.getProviderIndex = exports.calculateAssetId = exports.assetIsSpot = void 0;
4
4
  var assetId_js_1 = require("./assetId.js");
5
5
  Object.defineProperty(exports, "assetIsSpot", { enumerable: true, get: function () { return assetId_js_1.assetIsSpot; } });
6
6
  Object.defineProperty(exports, "calculateAssetId", { enumerable: true, get: function () { return assetId_js_1.calculateAssetId; } });
@@ -49,4 +49,6 @@ var spotBalance_js_1 = require("./spotBalance.js");
49
49
  Object.defineProperty(exports, "spotAssetFromToken", { enumerable: true, get: function () { return spotBalance_js_1.spotAssetFromToken; } });
50
50
  Object.defineProperty(exports, "spotBalance", { enumerable: true, get: function () { return spotBalance_js_1.spotBalance; } });
51
51
  Object.defineProperty(exports, "spotPriceById", { enumerable: true, get: function () { return spotBalance_js_1.spotPriceById; } });
52
+ var spotCollateral_js_1 = require("./spotCollateral.js");
53
+ Object.defineProperty(exports, "partitionSpotBalances", { enumerable: true, get: function () { return spotCollateral_js_1.partitionSpotBalances; } });
52
54
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAIA,2CAA8E;AAArE,yGAAA,WAAW,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACxD,mEAGiC;AAF/B,8HAAA,oBAAoB,OAAA;AACpB,6HAAA,mBAAmB,OAAA;AAGrB,iDAA4D;AAAnD,8GAAA,aAAa,OAAA;AAAE,4GAAA,WAAW,OAAA;AACnC,mDAGyB;AAFvB,2HAAA,yBAAyB,OAAA;AACzB,gIAAA,8BAA8B,OAAA;AAEhC,mDAAqE;AAA5D,oHAAA,kBAAkB,OAAA;AAAE,gHAAA,cAAc,OAAA;AAC3C,2CAAgE;AAAvD,sHAAA,wBAAwB,OAAA;AAAE,qGAAA,OAAO,OAAA;AAC1C,+CAA0C;AAAjC,yGAAA,SAAS,OAAA;AAClB,6DAAwD;AAA/C,uHAAA,gBAAgB,OAAA;AACzB,6CASsB;AARpB,6GAAA,cAAc,OAAA;AACd,4GAAA,aAAa,OAAA;AACb,2GAAA,YAAY,OAAA;AACZ,uGAAA,QAAQ,OAAA;AACR,6GAAA,cAAc,OAAA;AACd,2GAAA,YAAY,OAAA;AACZ,8GAAA,eAAe,OAAA;AACf,8GAAA,eAAe,OAAA;AAEjB,mDAAmE;AAA1D,qHAAA,mBAAmB,OAAA;AAAE,6GAAA,WAAW,OAAA;AACzC,uDAA6D;AAApD,6GAAA,SAAS,OAAA;AAAE,iHAAA,aAAa,OAAA;AACjC,2DAI6B;AAH3B,sHAAA,gBAAgB,OAAA;AAChB,qHAAA,eAAe,OAAA;AACf,yHAAA,mBAAmB,OAAA;AAErB,yEAAoE;AAA3D,mIAAA,sBAAsB,OAAA;AAC/B,mDAIyB;AAHvB,oHAAA,kBAAkB,OAAA;AAClB,6GAAA,WAAW,OAAA;AACX,+GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAIA,2CAA8E;AAArE,yGAAA,WAAW,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACxD,mEAGiC;AAF/B,8HAAA,oBAAoB,OAAA;AACpB,6HAAA,mBAAmB,OAAA;AAGrB,iDAA4D;AAAnD,8GAAA,aAAa,OAAA;AAAE,4GAAA,WAAW,OAAA;AACnC,mDAGyB;AAFvB,2HAAA,yBAAyB,OAAA;AACzB,gIAAA,8BAA8B,OAAA;AAEhC,mDAAqE;AAA5D,oHAAA,kBAAkB,OAAA;AAAE,gHAAA,cAAc,OAAA;AAC3C,2CAAgE;AAAvD,sHAAA,wBAAwB,OAAA;AAAE,qGAAA,OAAO,OAAA;AAC1C,+CAA0C;AAAjC,yGAAA,SAAS,OAAA;AAClB,6DAAwD;AAA/C,uHAAA,gBAAgB,OAAA;AACzB,6CASsB;AARpB,6GAAA,cAAc,OAAA;AACd,4GAAA,aAAa,OAAA;AACb,2GAAA,YAAY,OAAA;AACZ,uGAAA,QAAQ,OAAA;AACR,6GAAA,cAAc,OAAA;AACd,2GAAA,YAAY,OAAA;AACZ,8GAAA,eAAe,OAAA;AACf,8GAAA,eAAe,OAAA;AAEjB,mDAAmE;AAA1D,qHAAA,mBAAmB,OAAA;AAAE,6GAAA,WAAW,OAAA;AACzC,uDAA6D;AAApD,6GAAA,SAAS,OAAA;AAAE,iHAAA,aAAa,OAAA;AACjC,2DAI6B;AAH3B,sHAAA,gBAAgB,OAAA;AAChB,qHAAA,eAAe,OAAA;AACf,yHAAA,mBAAmB,OAAA;AAErB,yEAAoE;AAA3D,mIAAA,sBAAsB,OAAA;AAC/B,mDAIyB;AAHvB,oHAAA,kBAAkB,OAAA;AAClB,6GAAA,WAAW,OAAA;AACX,+GAAA,aAAa,OAAA;AAEf,yDAA+E;AAAtE,0HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,7 @@
1
+ import type { Balance } from '@lifi/perps-types';
2
+ export interface SpotPartition {
3
+ collateralBalances: Balance[];
4
+ balances: Balance[];
5
+ }
6
+ export declare const partitionSpotBalances: (spotBalances: readonly Balance[], quoteAssetIds: ReadonlySet<string>, portfolioMargin: boolean) => SpotPartition;
7
+ //# sourceMappingURL=spotCollateral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spotCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAgBhD,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,OAAO,EAAE,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAQD,eAAO,MAAM,qBAAqB,GAChC,cAAc,SAAS,OAAO,EAAE,EAChC,eAAe,WAAW,CAAC,MAAM,CAAC,EAClC,iBAAiB,OAAO,KACvB,aAkBF,CAAA"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.partitionSpotBalances = void 0;
4
+ const PORTFOLIO_MARGIN_LTV = {
5
+ HYPE: 0.5,
6
+ UBTC: 0.5,
7
+ };
8
+ const partitionSpotBalances = (spotBalances, quoteAssetIds, portfolioMargin) => {
9
+ const collateralBalances = [];
10
+ const balances = [];
11
+ for (const balance of spotBalances) {
12
+ if (quoteAssetIds.has(balance.asset.id)) {
13
+ collateralBalances.push(balance);
14
+ continue;
15
+ }
16
+ const ltv = portfolioMargin
17
+ ? PORTFOLIO_MARGIN_LTV[balance.asset.displaySymbol]
18
+ : undefined;
19
+ if (ltv !== undefined) {
20
+ collateralBalances.push({ ...balance, collateralWeight: ltv });
21
+ }
22
+ else {
23
+ balances.push(balance);
24
+ }
25
+ }
26
+ return { collateralBalances, balances };
27
+ };
28
+ exports.partitionSpotBalances = partitionSpotBalances;
29
+ //# sourceMappingURL=spotCollateral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spotCollateral.js","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":";;;AAUA,MAAM,oBAAoB,GAAqC;IAC7D,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAA;AAcM,MAAM,qBAAqB,GAAG,CACnC,YAAgC,EAChC,aAAkC,EAClC,eAAwB,EACT,EAAE;IACjB,MAAM,kBAAkB,GAAc,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChC,SAAQ;QACV,CAAC;QACD,MAAM,GAAG,GAAG,eAAe;YACzB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YACnD,CAAC,CAAC,SAAS,CAAA;QACb,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;AACzC,CAAC,CAAA;AAtBY,QAAA,qBAAqB,yBAsBjC"}
@@ -1,4 +1,4 @@
1
- import { type PerpsSDKClient, type ProviderGetQuoteParams, type QuoteListener, WsProviderBase, type WsProviderFactory } from '@lifi/perps-sdk';
1
+ import { type PerpsSDKClient, type ProviderGetQuoteParams, type QuoteListener, type SubscriptionListener, WsProviderBase, type WsProviderFactory, type WsStatusListener } from '@lifi/perps-sdk';
2
2
  import { type Subscription } from '@lifi/perps-types';
3
3
  export declare const hyperliquidWsProvider: () => WsProviderFactory;
4
4
  export declare class HyperliquidWsProvider extends WsProviderBase<object> {
@@ -6,6 +6,11 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
6
6
  private readonly clearinghouseRefs;
7
7
  private readonly client;
8
8
  private readonly registry;
9
+ private readonly abstractionByUser;
10
+ private readonly spotRefs;
11
+ private readonly unifiedSummaryByUser;
12
+ private readonly latestPositionsByUser;
13
+ private readonly heldSummaryByUser;
9
14
  private perpCtxBySubDex;
10
15
  private spotCtxByMarketId;
11
16
  private marketsContextByMarketId;
@@ -18,6 +23,7 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
18
23
  private readonly sacDecodeChain;
19
24
  private readonly orderbookDecodeChain;
20
25
  constructor(wsUrl: string, providerKey: string, client?: PerpsSDKClient);
26
+ subscribe(sub: Subscription, listener: SubscriptionListener, onStatus?: WsStatusListener): Promise<() => void>;
21
27
  subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
22
28
  protected openChannel(sub: Subscription): Promise<() => void>;
23
29
  private claimOrderUpdatesKey;
@@ -53,6 +59,14 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
53
59
  private handleOrderUpdates;
54
60
  private handleUserFills;
55
61
  private handleAllDexsClearinghouseState;
62
+ private static summaryComputableFor;
63
+ private acquireSpotWire;
64
+ private syncUnifiedPipeline;
65
+ private emitUnifiedSummary;
66
+ private static readonly ABSTRACTION_TTL_MS;
67
+ private static readonly REFRESH_COALESCE_MS;
68
+ private emitSummaryIfModeAllows;
69
+ private fetchAbstractionMode;
56
70
  private handleSpotState;
57
71
  }
58
72
  //# sourceMappingURL=HyperliquidWsProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AAuD1B,eAAO,MAAM,qBAAqB,QAC5B,iBAEgD,CAAA;AAgBtD,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,wBAAwB,CAAoC;IACpE,OAAO,CAAC,uBAAuB,CAAiC;IAChE,OAAO,CAAC,yBAAyB,CAAuC;IAKxE,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACW;IAM/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG/B;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IACD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAGpC;gBAEW,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IASjE,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAgGnE,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;cAcL,OAAO,IAAI,IAAI;IAclC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IA4B1C,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IA8CnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IA8EnC,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,kBAAkB;IAyD1B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,+BAA+B;IA2CvC,OAAO,CAAC,eAAe;CAaxB"}
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@ const perps_sdk_1 = require("@lifi/perps-sdk");
8
8
  const perps_types_1 = require("@lifi/perps-types");
9
9
  const big_js_1 = __importDefault(require("big.js"));
10
10
  const constants_js_1 = require("../constants.js");
11
- const index_js_1 = require("../utils/index.js");
11
+ const index_js_1 = require("../types/index.js");
12
+ const index_js_2 = require("../utils/index.js");
12
13
  const decodeChain_js_1 = require("./decodeChain.js");
13
14
  const HL_L2_BOOK_MAX_LEVELS_PER_SIDE = 20;
14
15
  const hyperliquidWsProvider = () => ({ provider, wsUrl, client }) => new HyperliquidWsProvider(wsUrl, provider, client);
@@ -18,6 +19,11 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
18
19
  clearinghouseRefs = new Map();
19
20
  client;
20
21
  registry;
22
+ abstractionByUser = new Map();
23
+ spotRefs = new Map();
24
+ unifiedSummaryByUser = new Map();
25
+ latestPositionsByUser = new Map();
26
+ heldSummaryByUser = new Map();
21
27
  perpCtxBySubDex = new Map();
22
28
  spotCtxByMarketId = {};
23
29
  marketsContextByMarketId = {};
@@ -34,6 +40,21 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
34
40
  this.client = client;
35
41
  this.registry = client && (0, perps_sdk_1.getMarketRegistry)(client, providerKey);
36
42
  }
43
+ async subscribe(sub, listener, onStatus) {
44
+ const unsubscribe = await super.subscribe(sub, listener, onStatus);
45
+ if (sub.channel === 'accountSummary') {
46
+ const user = sub.address.toLowerCase();
47
+ const entry = this.abstractionByUser.get(user);
48
+ if (entry === undefined) {
49
+ this.fetchAbstractionMode(sub.address, user);
50
+ }
51
+ else if (entry !== 'pending' &&
52
+ Date.now() - entry.readAt > HyperliquidWsProvider.REFRESH_COALESCE_MS) {
53
+ this.fetchAbstractionMode(sub.address, user, entry);
54
+ }
55
+ }
56
+ return unsubscribe;
57
+ }
37
58
  async subscribeQuote(params, onQuote) {
38
59
  const client = this.client;
39
60
  if (client === undefined) {
@@ -64,6 +85,11 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
64
85
  this.marketsContextByMarketId = {};
65
86
  };
66
87
  }
88
+ if (sub.channel === 'spotBalances') {
89
+ const release = await this.acquireSpotWire(sub.address);
90
+ await this.rws.ready();
91
+ return release;
92
+ }
67
93
  if (sub.channel === 'positions' || sub.channel === 'accountSummary') {
68
94
  const user = sub.address.toLowerCase();
69
95
  const wireKey = `clearinghouse:${user}`;
@@ -78,6 +104,10 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
78
104
  const remaining = (this.clearinghouseRefs.get(user) ?? 1) - 1;
79
105
  if (remaining <= 0) {
80
106
  this.clearinghouseRefs.delete(user);
107
+ this.abstractionByUser.delete(user);
108
+ this.heldSummaryByUser.delete(user);
109
+ this.latestPositionsByUser.delete(user);
110
+ this.syncUnifiedPipeline(user, user, null);
81
111
  this.unregisterSub(wireKey);
82
112
  this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
83
113
  }
@@ -207,7 +237,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
207
237
  if (priceStep === undefined) {
208
238
  return {};
209
239
  }
210
- return (0, index_js_1.priceStepToAggregation)(priceStep, this.orderbookReferencePrice(marketId));
240
+ return (0, index_js_2.priceStepToAggregation)(priceStep, this.orderbookReferencePrice(marketId));
211
241
  }
212
242
  orderbookAggregationKey(marketId, priceStep) {
213
243
  const aggregation = this.orderbookAggregation(marketId, priceStep);
@@ -335,7 +365,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
335
365
  }
336
366
  handlePac(base64) {
337
367
  this.pacDecodeChain.push(async () => {
338
- this.emitMarketsContext(this.mergePerpAssetCtxEntries(await (0, index_js_1.decodeCompressedJson)(base64)));
368
+ this.emitMarketsContext(this.mergePerpAssetCtxEntries(await (0, index_js_2.decodeCompressedJson)(base64)));
339
369
  });
340
370
  }
341
371
  mergePerpAssetCtxEntries(entries) {
@@ -363,7 +393,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
363
393
  handleSac(base64) {
364
394
  this.sacDecodeChain.push(async () => {
365
395
  const spotMarketIdBySacKey = this.spotMarketIdBySacKey();
366
- const ctxs = await (0, index_js_1.decodeCompressedJson)(base64);
396
+ const ctxs = await (0, index_js_2.decodeCompressedJson)(base64);
367
397
  const touched = new Set();
368
398
  for (const [sacKey, ctx] of Object.entries(ctxs)) {
369
399
  const marketId = spotMarketIdBySacKey.get(sacKey);
@@ -392,7 +422,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
392
422
  }
393
423
  handleFastAssetCtxs(base64) {
394
424
  this.fastDecodeChain.push(async () => {
395
- const ctxs = await (0, index_js_1.decodeFastAssetCtxs)(base64);
425
+ const ctxs = await (0, index_js_2.decodeFastAssetCtxs)(base64);
396
426
  for (const [marketId, ctx] of Object.entries(ctxs)) {
397
427
  const prev = this.fastCtxByMarketId[marketId];
398
428
  this.fastCtxByMarketId[marketId] = {
@@ -433,7 +463,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
433
463
  perpCtx = byMarketId[marketId] ?? perpCtx;
434
464
  }
435
465
  if (perpCtx !== undefined) {
436
- const base = (0, index_js_1.mapMarketContext)(marketId, perpCtx);
466
+ const base = (0, index_js_2.mapMarketContext)(marketId, perpCtx);
437
467
  return {
438
468
  ...base,
439
469
  midPrice: fast?.midPx != null ? fast.midPx : base.midPrice,
@@ -455,7 +485,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
455
485
  }
456
486
  this.emit(`marketContext:${data.coin}`, {
457
487
  channel: 'marketContext',
458
- data: (0, index_js_1.mapMarketContext)(data.coin, ctx),
488
+ data: (0, index_js_2.mapMarketContext)(data.coin, ctx),
459
489
  });
460
490
  }
461
491
  handleActiveSpotAssetCtx(data) {
@@ -530,7 +560,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
530
560
  }
531
561
  const compressed = data.c;
532
562
  this.orderbookDecodeChain.push(async () => {
533
- this.handleCompactL2Delta(await (0, index_js_1.decodeCompressedJson)(compressed));
563
+ this.handleCompactL2Delta(await (0, index_js_2.decodeCompressedJson)(compressed));
534
564
  });
535
565
  }
536
566
  handleCompactL2Delta(delta) {
@@ -602,17 +632,17 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
602
632
  for (const detail of data) {
603
633
  const o = detail.order;
604
634
  const orderId = String(o.oid);
605
- if (!(0, perps_sdk_1.isActiveOrderStatus)((0, index_js_1.mapOrderStatus)(detail.status))) {
635
+ if (!(0, perps_sdk_1.isActiveOrderStatus)((0, index_js_2.mapOrderStatus)(detail.status))) {
606
636
  terminated.push(orderId);
607
637
  continue;
608
638
  }
609
- const type = (0, index_js_1.mapOrderType)(o.orderType);
639
+ const type = (0, index_js_2.mapOrderType)(o.orderType);
610
640
  const market = this.registry?.get(o.coin);
611
641
  if (!market) {
612
642
  continue;
613
643
  }
614
644
  const createdAt = new Date(o.timestamp).toISOString();
615
- if ((0, index_js_1.isTriggerOrder)(o)) {
645
+ if ((0, index_js_2.isTriggerOrder)(o)) {
616
646
  const isLimit = type === perps_types_1.OrderType.TAKE_PROFIT_LIMIT || type === perps_types_1.OrderType.STOP_LIMIT;
617
647
  triggerOrders.push({
618
648
  orderId,
@@ -650,7 +680,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
650
680
  ? []
651
681
  : data.fills.flatMap((f) => {
652
682
  const market = this.registry?.get(f.coin);
653
- return market ? [(0, index_js_1.mapFill)(f, market)] : [];
683
+ return market ? [(0, index_js_2.mapFill)(f, market)] : [];
654
684
  });
655
685
  this.emit(`userFills:${data.user.toLowerCase()}`, {
656
686
  channel: 'fills',
@@ -659,16 +689,18 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
659
689
  }
660
690
  handleAllDexsClearinghouseState(data) {
661
691
  const positions = data.clearinghouseStates.flatMap(([, state]) => state.assetPositions.flatMap((ap) => {
662
- if (!(0, index_js_1.isOpenAssetPosition)(ap)) {
692
+ if (!(0, index_js_2.isOpenAssetPosition)(ap)) {
663
693
  return [];
664
694
  }
665
695
  const market = this.registry?.get(ap.position.coin);
666
- return market ? [(0, index_js_1.mapPosition)(ap, market)] : [];
696
+ return market ? [(0, index_js_2.mapPosition)(ap, market)] : [];
667
697
  }));
668
698
  this.emit(`positions:${data.user.toLowerCase()}`, {
669
699
  channel: 'positions',
670
700
  data: positions,
671
701
  });
702
+ this.latestPositionsByUser.set(data.user.toLowerCase(), positions);
703
+ this.emitUnifiedSummary(data.user.toLowerCase());
672
704
  let accountValue = 0;
673
705
  let marginUsed = 0;
674
706
  for (const [, state] of data.clearinghouseStates) {
@@ -678,25 +710,150 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
678
710
  Number.parseFloat(state.marginSummary?.totalMarginUsed ?? '') || 0;
679
711
  }
680
712
  const unrealizedPnl = positions.reduce((sum, p) => sum + (Number.parseFloat(p.unrealizedPnl) || 0), 0);
681
- this.emit(`accountSummary:${data.user.toLowerCase()}`, {
713
+ this.emitSummaryIfModeAllows(data.user, {
714
+ portfolioValue: accountValue.toString(),
715
+ availableMargin: (accountValue - marginUsed).toString(),
716
+ marginUsed: marginUsed.toString(),
717
+ unrealizedPnl: unrealizedPnl.toString(),
718
+ });
719
+ }
720
+ static summaryComputableFor(mode) {
721
+ return (mode !== index_js_1.HlAbstractionMode.UNIFIED_ACCOUNT &&
722
+ mode !== index_js_1.HlAbstractionMode.PORTFOLIO_MARGIN);
723
+ }
724
+ async acquireSpotWire(address) {
725
+ const user = address.toLowerCase();
726
+ const wireKey = `spot:${user}`;
727
+ const payload = { type: 'spotState', user };
728
+ const count = this.spotRefs.get(user) ?? 0;
729
+ this.spotRefs.set(user, count + 1);
730
+ if (count === 0) {
731
+ await this.registerSub(wireKey, payload);
732
+ }
733
+ let released = false;
734
+ return () => {
735
+ if (released) {
736
+ return;
737
+ }
738
+ released = true;
739
+ const remaining = (this.spotRefs.get(user) ?? 1) - 1;
740
+ if (remaining <= 0) {
741
+ this.spotRefs.delete(user);
742
+ this.unregisterSub(wireKey);
743
+ this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
744
+ }
745
+ else {
746
+ this.spotRefs.set(user, remaining);
747
+ }
748
+ };
749
+ }
750
+ syncUnifiedPipeline(key, address, mode) {
751
+ const unified = !HyperliquidWsProvider.summaryComputableFor(mode);
752
+ const existing = this.unifiedSummaryByUser.get(key);
753
+ if (unified && existing === undefined) {
754
+ this.unifiedSummaryByUser.set(key, {
755
+ releaseSpot: this.acquireSpotWire(address).catch((error) => {
756
+ perps_sdk_1.wsLog.handlerFailure(this.providerKey, error);
757
+ return () => { };
758
+ }),
759
+ });
760
+ }
761
+ else if (!unified && existing !== undefined) {
762
+ this.unifiedSummaryByUser.delete(key);
763
+ void existing.releaseSpot.then((release) => release());
764
+ }
765
+ }
766
+ emitUnifiedSummary(key) {
767
+ const pipeline = this.unifiedSummaryByUser.get(key);
768
+ const positions = this.latestPositionsByUser.get(key);
769
+ if (pipeline?.spot === undefined || positions === undefined) {
770
+ return;
771
+ }
772
+ const summary = (0, perps_sdk_1.summarizeAccount)({
773
+ collateralBalances: pipeline.spot.collateralBalances,
774
+ balances: pipeline.spot.balances,
775
+ }, positions, 'gross');
776
+ this.emit(`accountSummary:${key}`, {
682
777
  channel: 'accountSummary',
683
- data: {
684
- portfolioValue: accountValue.toString(),
685
- availableMargin: (accountValue - marginUsed).toString(),
686
- marginUsed: marginUsed.toString(),
687
- unrealizedPnl: unrealizedPnl.toString(),
688
- },
778
+ data: summary,
779
+ });
780
+ }
781
+ static ABSTRACTION_TTL_MS = 15_000;
782
+ static REFRESH_COALESCE_MS = 200;
783
+ emitSummaryIfModeAllows(user, summary) {
784
+ const key = user.toLowerCase();
785
+ if (this.client === undefined) {
786
+ this.emit(`accountSummary:${key}`, {
787
+ channel: 'accountSummary',
788
+ data: summary,
789
+ });
790
+ return;
791
+ }
792
+ const entry = this.abstractionByUser.get(key);
793
+ if (entry === undefined || entry === 'pending') {
794
+ this.heldSummaryByUser.set(key, summary);
795
+ if (entry === undefined) {
796
+ this.fetchAbstractionMode(user, key);
797
+ }
798
+ return;
799
+ }
800
+ if (Date.now() - entry.readAt > HyperliquidWsProvider.ABSTRACTION_TTL_MS) {
801
+ this.fetchAbstractionMode(user, key, entry);
802
+ }
803
+ if (!HyperliquidWsProvider.summaryComputableFor(entry.mode)) {
804
+ return;
805
+ }
806
+ this.emit(`accountSummary:${key}`, {
807
+ channel: 'accountSummary',
808
+ data: summary,
809
+ });
810
+ }
811
+ fetchAbstractionMode(user, key, refreshing) {
812
+ const client = this.client;
813
+ if (client === undefined) {
814
+ return;
815
+ }
816
+ this.abstractionByUser.set(key, refreshing ? { ...refreshing, readAt: Date.now() } : 'pending');
817
+ (0, index_js_2.infoRequest)(constants_js_1.DEFAULT_HYPERLIQUID_API_URL, { type: 'userAbstraction', user }, (0, index_js_2.hlInfoOptions)(client)).then((mode) => {
818
+ this.abstractionByUser.set(key, { mode, readAt: Date.now() });
819
+ this.syncUnifiedPipeline(key, user, mode);
820
+ const held = this.heldSummaryByUser.get(key);
821
+ this.heldSummaryByUser.delete(key);
822
+ if (held && HyperliquidWsProvider.summaryComputableFor(mode)) {
823
+ this.emit(`accountSummary:${key}`, {
824
+ channel: 'accountSummary',
825
+ data: held,
826
+ });
827
+ }
828
+ }, (error) => {
829
+ if (!refreshing) {
830
+ this.abstractionByUser.delete(key);
831
+ }
832
+ perps_sdk_1.wsLog.handlerFailure(this.providerKey, error);
689
833
  });
690
834
  }
691
835
  handleSpotState(data) {
692
- const priceById = (0, index_js_1.spotPriceById)(this.registry?.markets ?? [], this.mergedMids());
693
- this.emit(`spotState:${data.user.toLowerCase()}`, {
836
+ const user = data.user.toLowerCase();
837
+ const markets = this.registry?.markets ?? [];
838
+ const priceById = (0, index_js_2.spotPriceById)(markets, this.mergedMids());
839
+ const rows = data.spotState.balances.map((b) => ({
840
+ balance: (0, index_js_2.spotBalance)((0, index_js_2.spotAssetFromToken)(b), b.total, priceById),
841
+ hold: b.hold,
842
+ }));
843
+ this.emit(`spotState:${user}`, {
694
844
  channel: 'spotBalances',
695
- data: data.spotState.balances.map((b) => ({
696
- ...(0, index_js_1.spotBalance)((0, index_js_1.spotAssetFromToken)(b), b.total, priceById),
697
- locked: b.hold,
698
- })),
845
+ data: rows.map(({ balance, hold }) => ({ ...balance, locked: hold })),
699
846
  });
847
+ const pipeline = this.unifiedSummaryByUser.get(user);
848
+ if (pipeline !== undefined) {
849
+ const quoteAssetIds = new Set(markets.map((m) => m.quoteAsset.id));
850
+ const entry = this.abstractionByUser.get(user);
851
+ const portfolioMargin = entry !== undefined &&
852
+ entry !== 'pending' &&
853
+ entry.mode === index_js_1.HlAbstractionMode.PORTFOLIO_MARGIN;
854
+ pipeline.spot = (0, index_js_2.partitionSpotBalances)(rows.map(({ balance }) => balance), quoteAssetIds, portfolioMargin);
855
+ this.emitUnifiedSummary(user);
856
+ }
700
857
  }
701
858
  }
702
859
  exports.HyperliquidWsProvider = HyperliquidWsProvider;