@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.
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +1 -11
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/types/account.d.ts +1 -0
- package/dist/cjs/types/account.d.ts.map +1 -1
- package/dist/cjs/types/account.js +1 -0
- package/dist/cjs/types/account.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/spotCollateral.d.ts +7 -0
- package/dist/cjs/utils/spotCollateral.d.ts.map +1 -0
- package/dist/cjs/utils/spotCollateral.js +29 -0
- package/dist/cjs/utils/spotCollateral.js.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +15 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +184 -27
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +2 -13
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/types/account.d.ts +3 -1
- package/dist/esm/types/account.d.ts.map +1 -1
- package/dist/esm/types/account.js +3 -1
- package/dist/esm/types/account.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/spotCollateral.d.ts +14 -0
- package/dist/esm/utils/spotCollateral.d.ts.map +1 -0
- package/dist/esm/utils/spotCollateral.js +39 -0
- package/dist/esm/utils/spotCollateral.js.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +23 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +223 -17
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/types/account.d.ts +3 -1
- package/dist/types/types/account.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/spotCollateral.d.ts +14 -0
- package/dist/types/utils/spotCollateral.d.ts.map +1 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +23 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/services/getAccount.ts +8 -12
- package/src/types/account.ts +3 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/spotCollateral.ts +50 -0
- 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;
|
|
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":";;;AAAA,+CAMwB;AAQxB,kDAA8C;AAE9C,gDAM0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -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,
|
|
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,KAAK,oBAAoB,EAEzB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAUL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA+D1B,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;IAUrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAG/B;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAIrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAMlC;IAGH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgC;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQ/B;IACH,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;IASxD,SAAS,CACtB,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,IAAI,CAAC;IAuBhB,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;IA8GnE,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;IA8CvC,OAAO,CAAC,MAAM,CAAC,oBAAoB;YAOrB,eAAe;IA+B7B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAKnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAEjD,OAAO,CAAC,uBAAuB;IAyC/B,OAAO,CAAC,oBAAoB;IA4C5B,OAAO,CAAC,eAAe;CA8BxB"}
|
|
@@ -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("../
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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.
|
|
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
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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
|
|
693
|
-
this.
|
|
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:
|
|
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;
|