hyperliquid-prime 0.1.3 → 0.1.5
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/README.md +87 -30
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +32 -7
- package/dist/cli/program.js.map +1 -1
- package/dist/collateral/manager.d.ts +2 -2
- package/dist/collateral/manager.d.ts.map +1 -1
- package/dist/collateral/manager.js +487 -91
- package/dist/collateral/manager.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/execution/executor.d.ts +23 -0
- package/dist/execution/executor.d.ts.map +1 -1
- package/dist/execution/executor.js +346 -102
- package/dist/execution/executor.js.map +1 -1
- package/dist/execution/types.d.ts +23 -2
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +51 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +227 -26
- package/dist/index.js.map +1 -1
- package/dist/market/registry.d.ts +3 -0
- package/dist/market/registry.d.ts.map +1 -1
- package/dist/market/registry.js +53 -23
- package/dist/market/registry.js.map +1 -1
- package/dist/market/types.d.ts +6 -0
- package/dist/market/types.d.ts.map +1 -1
- package/dist/position/manager.d.ts +6 -3
- package/dist/position/manager.d.ts.map +1 -1
- package/dist/position/manager.js +58 -31
- package/dist/position/manager.js.map +1 -1
- package/dist/provider/nktkas.d.ts +38 -3
- package/dist/provider/nktkas.d.ts.map +1 -1
- package/dist/provider/nktkas.js +202 -35
- package/dist/provider/nktkas.js.map +1 -1
- package/dist/provider/provider.d.ts +29 -3
- package/dist/provider/provider.d.ts.map +1 -1
- package/dist/provider/schemas.d.ts +933 -0
- package/dist/provider/schemas.d.ts.map +1 -0
- package/dist/provider/schemas.js +330 -0
- package/dist/provider/schemas.js.map +1 -0
- package/dist/provider/types.d.ts +88 -1
- package/dist/provider/types.d.ts.map +1 -1
- package/dist/router/router.d.ts +3 -3
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +98 -25
- package/dist/router/router.js.map +1 -1
- package/dist/router/scorer.d.ts +3 -1
- package/dist/router/scorer.d.ts.map +1 -1
- package/dist/router/scorer.js +28 -5
- package/dist/router/scorer.js.map +1 -1
- package/dist/router/types.d.ts +11 -0
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/types/result.d.ts +16 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +9 -0
- package/dist/types/result.js.map +1 -0
- package/dist/utils/asset.d.ts +2 -0
- package/dist/utils/asset.d.ts.map +1 -0
- package/dist/utils/asset.js +18 -0
- package/dist/utils/asset.js.map +1 -0
- package/dist/utils/order-precision.d.ts +16 -0
- package/dist/utils/order-precision.d.ts.map +1 -0
- package/dist/utils/order-precision.js +45 -0
- package/dist/utils/order-precision.js.map +1 -0
- package/package.json +7 -3
package/dist/market/registry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export class MarketRegistry {
|
|
2
2
|
provider;
|
|
3
3
|
groups = new Map();
|
|
4
|
+
coinIndex = new Map();
|
|
4
5
|
spotTokens = new Map();
|
|
5
6
|
logger;
|
|
6
7
|
constructor(provider, logger) {
|
|
@@ -15,46 +16,57 @@ export class MarketRegistry {
|
|
|
15
16
|
for (const token of spotMeta.tokens) {
|
|
16
17
|
nextSpotTokens.set(token.index, token);
|
|
17
18
|
}
|
|
18
|
-
// Fetch
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
// Fetch deployer list — indices in this array ARE the canonical dex indices
|
|
20
|
+
// used by the exchange for global asset ID computation.
|
|
21
|
+
// Previously we iterated allPerpMetas() which can have different array
|
|
22
|
+
// indices than perpDexs(), causing wrong asset IDs (e.g. 110003 instead
|
|
23
|
+
// of 170009 for xyz:GOLD).
|
|
24
|
+
const dexs = await this.provider.perpDexs();
|
|
25
|
+
// Build (dexIndex, dexName) pairs from perpDexs.
|
|
26
|
+
// In the real API, perpDexs[0] is always null (native perps).
|
|
27
|
+
// null entries → native deployer, non-null → HIP-3 deployer.
|
|
28
|
+
const dexEntries = [];
|
|
29
|
+
for (let i = 0; i < dexs.length; i++) {
|
|
30
|
+
const dex = dexs[i];
|
|
31
|
+
if (dex === null) {
|
|
32
|
+
dexEntries.push({ dexIndex: i, dexName: "__native__", apiDex: "", isNative: true });
|
|
33
|
+
}
|
|
34
|
+
else if (dex.name && dex.name.length > 0) {
|
|
35
|
+
dexEntries.push({ dexIndex: i, dexName: dex.name, apiDex: dex.name, isNative: false });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Fetch metaAndAssetCtxs for each deployer in parallel
|
|
39
|
+
const ctxResults = await Promise.allSettled(dexEntries.map((entry) => this.provider.metaAndAssetCtxs(entry.apiDex)));
|
|
40
|
+
this.logger.info({ dexCount: dexEntries.length, spotTokens: spotMeta.tokens.length }, "Discovering markets across all deployers");
|
|
28
41
|
let totalAssets = 0;
|
|
29
42
|
let dexContextFailures = 0;
|
|
30
|
-
for (const [
|
|
31
|
-
const
|
|
32
|
-
const dexName = dex ? dex.name : "__native__";
|
|
33
|
-
const collateral = this.resolveCollateralToken(meta.collateralToken, nextSpotTokens);
|
|
34
|
-
const ctxResult = ctxResults[dexIndex];
|
|
43
|
+
for (const [idx, entry] of dexEntries.entries()) {
|
|
44
|
+
const ctxResult = ctxResults[idx];
|
|
35
45
|
if (!ctxResult || ctxResult.status === "rejected") {
|
|
36
46
|
dexContextFailures++;
|
|
37
47
|
this.logger.warn({
|
|
38
|
-
dexName,
|
|
48
|
+
dexName: entry.dexName,
|
|
49
|
+
dexIndex: entry.dexIndex,
|
|
39
50
|
reason: ctxResult?.status === "rejected" ? String(ctxResult.reason) : "missing context result",
|
|
40
51
|
}, "Skipping deployer due to missing asset contexts");
|
|
41
52
|
continue;
|
|
42
53
|
}
|
|
43
|
-
const [, assetCtxs] = ctxResult.value;
|
|
54
|
+
const [meta, assetCtxs] = ctxResult.value;
|
|
55
|
+
const collateral = this.resolveCollateralToken(meta.collateralToken, nextSpotTokens);
|
|
44
56
|
for (const [i, asset] of meta.universe.entries()) {
|
|
45
57
|
// Skip delisted markets
|
|
46
58
|
if (asset.isDelisted)
|
|
47
59
|
continue;
|
|
48
60
|
const ctx = assetCtxs[i];
|
|
49
61
|
if (!ctx) {
|
|
50
|
-
this.logger.warn({ dexName, asset: asset.name, assetIndex: i }, "Skipping asset due to missing context");
|
|
62
|
+
this.logger.warn({ dexName: entry.dexName, asset: asset.name, assetIndex: i }, "Skipping asset due to missing context");
|
|
51
63
|
continue;
|
|
52
64
|
}
|
|
53
|
-
// Compute global asset ID:
|
|
54
|
-
// Native
|
|
55
|
-
// HIP-3
|
|
56
|
-
const globalAssetIndex =
|
|
57
|
-
const parsed = this.parseAsset(asset, globalAssetIndex, ctx, dexName, collateral);
|
|
65
|
+
// Compute global asset ID using the CANONICAL dex index from perpDexs():
|
|
66
|
+
// Native: assetIndex = local index
|
|
67
|
+
// HIP-3: assetIndex = 100000 + dexIndex * 10000 + local index
|
|
68
|
+
const globalAssetIndex = entry.isNative ? i : 100000 + entry.dexIndex * 10000 + i;
|
|
69
|
+
const parsed = this.parseAsset(asset, globalAssetIndex, ctx, entry.dexName, collateral);
|
|
58
70
|
if (!parsed)
|
|
59
71
|
continue;
|
|
60
72
|
const key = parsed.baseAsset.toUpperCase();
|
|
@@ -73,6 +85,14 @@ export class MarketRegistry {
|
|
|
73
85
|
}
|
|
74
86
|
this.groups = nextGroups;
|
|
75
87
|
this.spotTokens = nextSpotTokens;
|
|
88
|
+
// Build coin→market index for O(1) lookup by coin name
|
|
89
|
+
const nextCoinIndex = new Map();
|
|
90
|
+
for (const group of nextGroups.values()) {
|
|
91
|
+
for (const market of group.markets) {
|
|
92
|
+
nextCoinIndex.set(market.coin, market);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.coinIndex = nextCoinIndex;
|
|
76
96
|
this.logger.info({
|
|
77
97
|
totalAssets,
|
|
78
98
|
totalGroups: nextGroups.size,
|
|
@@ -92,6 +112,10 @@ export class MarketRegistry {
|
|
|
92
112
|
getGroupsWithAlternatives() {
|
|
93
113
|
return [...this.groups.values()].filter((g) => g.hasAlternatives);
|
|
94
114
|
}
|
|
115
|
+
/** O(1) lookup of a market by its full coin name (e.g. "xyz:TSLA"). */
|
|
116
|
+
findByCoin(coin) {
|
|
117
|
+
return this.coinIndex.get(coin);
|
|
118
|
+
}
|
|
95
119
|
parseAsset(asset, index, ctx, dexName, collateral) {
|
|
96
120
|
const isNative = dexName === "__native__";
|
|
97
121
|
return {
|
|
@@ -103,8 +127,14 @@ export class MarketRegistry {
|
|
|
103
127
|
dexName,
|
|
104
128
|
collateral,
|
|
105
129
|
isNative,
|
|
130
|
+
maxLeverage: asset.maxLeverage,
|
|
131
|
+
szDecimals: asset.szDecimals,
|
|
132
|
+
onlyIsolated: asset.onlyIsolated,
|
|
133
|
+
marginMode: asset.marginMode,
|
|
106
134
|
funding: ctx.funding,
|
|
107
135
|
openInterest: ctx.openInterest,
|
|
136
|
+
prevDayPx: ctx.prevDayPx,
|
|
137
|
+
dayNtlVlm: ctx.dayNtlVlm,
|
|
108
138
|
markPrice: ctx.markPx,
|
|
109
139
|
oraclePx: ctx.oraclePx,
|
|
110
140
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/market/registry.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/market/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/market/types.d.ts
CHANGED
|
@@ -6,8 +6,14 @@ export interface PerpMarket {
|
|
|
6
6
|
dexName: string;
|
|
7
7
|
collateral: string;
|
|
8
8
|
isNative: boolean;
|
|
9
|
+
maxLeverage: number;
|
|
10
|
+
szDecimals?: number;
|
|
11
|
+
onlyIsolated?: boolean;
|
|
12
|
+
marginMode?: string;
|
|
9
13
|
funding?: string;
|
|
10
14
|
openInterest?: string;
|
|
15
|
+
prevDayPx?: string;
|
|
16
|
+
dayNtlVlm?: string;
|
|
11
17
|
markPrice?: string;
|
|
12
18
|
oraclePx?: string;
|
|
13
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/market/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/market/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAElB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,EAAE,CAAC;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -2,6 +2,7 @@ import type { HLProvider } from "../provider/provider.js";
|
|
|
2
2
|
import type { Logger } from "../logging/logger.js";
|
|
3
3
|
import type { MarketRegistry } from "../market/registry.js";
|
|
4
4
|
import type { LogicalPosition } from "./types.js";
|
|
5
|
+
import type { WithWarnings } from "../types/result.js";
|
|
5
6
|
export declare class PositionManager {
|
|
6
7
|
private provider;
|
|
7
8
|
private registry;
|
|
@@ -9,13 +10,15 @@ export declare class PositionManager {
|
|
|
9
10
|
constructor(provider: HLProvider, registry: MarketRegistry, parentLogger: Logger);
|
|
10
11
|
/**
|
|
11
12
|
* Get all positions, annotated with whether they were created by this SDK.
|
|
13
|
+
* Queries both native and HIP-3 deployer clearinghouses.
|
|
14
|
+
*
|
|
15
|
+
* Returns WithWarnings so callers can see which deployers failed.
|
|
12
16
|
*/
|
|
13
|
-
getPositions(user: string): Promise<LogicalPosition[]
|
|
17
|
+
getPositions(user: string): Promise<WithWarnings<LogicalPosition[]>>;
|
|
14
18
|
/**
|
|
15
19
|
* Get positions grouped by base asset.
|
|
16
20
|
* If ETH has positions across multiple HIP-3 markets, they appear together.
|
|
17
21
|
*/
|
|
18
|
-
getGroupedPositions(user: string): Promise<Map<string, LogicalPosition[]
|
|
19
|
-
private findMarket;
|
|
22
|
+
getGroupedPositions(user: string): Promise<WithWarnings<Map<string, LogicalPosition[]>>>;
|
|
20
23
|
}
|
|
21
24
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/position/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/position/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAJlB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,cAAc,EAChC,YAAY,EAAE,MAAM;IAKtB;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;IAkE1E;;;OAGG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;CAYzD"}
|
package/dist/position/manager.js
CHANGED
|
@@ -9,39 +9,74 @@ export class PositionManager {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Get all positions, annotated with whether they were created by this SDK.
|
|
12
|
+
* Queries both native and HIP-3 deployer clearinghouses.
|
|
13
|
+
*
|
|
14
|
+
* Returns WithWarnings so callers can see which deployers failed.
|
|
12
15
|
*/
|
|
13
16
|
async getPositions(user) {
|
|
14
17
|
this.logger.debug({ user }, "Fetching positions");
|
|
15
|
-
const
|
|
18
|
+
const warnings = [];
|
|
19
|
+
// Collect unique HIP-3 dex names from the registry
|
|
20
|
+
const dexNames = new Set();
|
|
21
|
+
for (const group of this.registry.getAllGroups()) {
|
|
22
|
+
for (const market of group.markets) {
|
|
23
|
+
if (!market.isNative && market.dexName && market.dexName !== "__native__") {
|
|
24
|
+
dexNames.add(market.dexName);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Fetch native + all HIP-3 deployer clearinghouse states in parallel
|
|
29
|
+
const dexList = [...dexNames];
|
|
30
|
+
const [nativeState, ...hip3Results] = await Promise.all([
|
|
31
|
+
this.provider.clearinghouseState(user),
|
|
32
|
+
...dexList.map((dex) => this.provider.clearinghouseState(user, dex).catch((err) => {
|
|
33
|
+
const msg = `Failed to fetch positions from deployer "${dex}": ${String(err)}`;
|
|
34
|
+
this.logger.warn({ dex, error: String(err) }, "Failed to fetch HIP-3 clearinghouse state");
|
|
35
|
+
warnings.push(msg);
|
|
36
|
+
return null;
|
|
37
|
+
})),
|
|
38
|
+
]);
|
|
16
39
|
const positions = [];
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
coin
|
|
24
|
-
market
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
const allStates = [nativeState, ...hip3Results.filter(Boolean)];
|
|
41
|
+
for (const state of allStates) {
|
|
42
|
+
if (!state)
|
|
43
|
+
continue;
|
|
44
|
+
for (const pos of state.assetPositions) {
|
|
45
|
+
const coin = pos.position.coin;
|
|
46
|
+
const market = this.registry.findByCoin(coin);
|
|
47
|
+
const baseAsset = market?.baseAsset ?? coin;
|
|
48
|
+
const rawMarkPrice = parseFloat(pos.position.markPx ?? "0");
|
|
49
|
+
const registryMarkPrice = parseFloat(market?.markPrice ?? "0");
|
|
50
|
+
const markPrice = rawMarkPrice > 0
|
|
51
|
+
? rawMarkPrice
|
|
52
|
+
: registryMarkPrice > 0
|
|
53
|
+
? registryMarkPrice
|
|
54
|
+
: 0;
|
|
55
|
+
positions.push({
|
|
56
|
+
baseAsset,
|
|
57
|
+
coin,
|
|
58
|
+
market,
|
|
59
|
+
side: parseFloat(pos.position.szi) >= 0 ? "long" : "short",
|
|
60
|
+
size: Math.abs(parseFloat(pos.position.szi)),
|
|
61
|
+
entryPrice: parseFloat(pos.position.entryPx),
|
|
62
|
+
markPrice,
|
|
63
|
+
unrealizedPnl: parseFloat(pos.position.unrealizedPnl),
|
|
64
|
+
leverage: parseFloat(pos.position.leverage?.value ?? "1"),
|
|
65
|
+
liquidationPrice: pos.position.liquidationPx
|
|
66
|
+
? parseFloat(pos.position.liquidationPx)
|
|
67
|
+
: null,
|
|
68
|
+
managedBySDK: "unknown",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
36
71
|
}
|
|
37
|
-
return positions;
|
|
72
|
+
return { data: positions, warnings };
|
|
38
73
|
}
|
|
39
74
|
/**
|
|
40
75
|
* Get positions grouped by base asset.
|
|
41
76
|
* If ETH has positions across multiple HIP-3 markets, they appear together.
|
|
42
77
|
*/
|
|
43
78
|
async getGroupedPositions(user) {
|
|
44
|
-
const positions = await this.getPositions(user);
|
|
79
|
+
const { data: positions, warnings } = await this.getPositions(user);
|
|
45
80
|
const grouped = new Map();
|
|
46
81
|
for (const pos of positions) {
|
|
47
82
|
const key = pos.baseAsset;
|
|
@@ -49,15 +84,7 @@ export class PositionManager {
|
|
|
49
84
|
grouped.set(key, []);
|
|
50
85
|
grouped.get(key).push(pos);
|
|
51
86
|
}
|
|
52
|
-
return grouped;
|
|
53
|
-
}
|
|
54
|
-
findMarket(coin) {
|
|
55
|
-
for (const group of this.registry.getAllGroups()) {
|
|
56
|
-
const match = group.markets.find((m) => m.coin === coin);
|
|
57
|
-
if (match)
|
|
58
|
-
return match;
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
87
|
+
return { data: grouped, warnings };
|
|
61
88
|
}
|
|
62
89
|
}
|
|
63
90
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/position/manager.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IAIhB;IACA;IAJO,MAAM,CAAS;IAEhC,YACU,QAAoB,EACpB,QAAwB,EAChC,YAAoB;QAFZ,aAAQ,GAAR,QAAQ,CAAY;QACpB,aAAQ,GAAR,QAAQ,CAAgB;QAGhC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/position/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { type AbstractWallet } from "@nktkas/hyperliquid/signing";
|
|
1
2
|
import type { HLProvider } from "./provider.js";
|
|
2
|
-
import type { Meta, AssetCtx, L2Book, ClearinghouseState, SpotClearinghouseState, SpotMeta, PerpDex, OpenOrder, Fill, FundingRecord, OrderParams, OrderResult, CancelParams, CancelResult, L2BookUpdate, AllMidsUpdate, Trade, UserEvent } from "./types.js";
|
|
3
|
+
import type { Meta, AssetCtx, L2Book, ClearinghouseState, SpotClearinghouseState, SpotMeta, PerpDex, OpenOrder, Fill, FundingRecord, FrontendOpenOrder, HistoricalOrder, UserFundingEntry, OrderParams, OrderResult, CancelParams, CancelResult, L2BookUpdate, AllMidsUpdate, Trade, UserEvent, Candle, CandleInterval, ReferralResponse } from "./types.js";
|
|
3
4
|
export interface ProviderConfig {
|
|
4
5
|
privateKey?: `0x${string}`;
|
|
6
|
+
wallet?: AbstractWallet;
|
|
7
|
+
walletAddress?: `0x${string}`;
|
|
8
|
+
signerAddress?: `0x${string}`;
|
|
9
|
+
vaultAddress?: `0x${string}`;
|
|
5
10
|
testnet?: boolean;
|
|
6
11
|
l2BookCacheTtlMs?: number;
|
|
7
12
|
spotMetaCacheTtlMs?: number;
|
|
@@ -14,11 +19,16 @@ export declare class NktkasProvider implements HLProvider {
|
|
|
14
19
|
private wsTransport;
|
|
15
20
|
private readonly l2BookCacheTtlMs;
|
|
16
21
|
private readonly spotMetaCacheTtlMs;
|
|
22
|
+
private readonly signerAddress;
|
|
17
23
|
private l2BookCache;
|
|
18
24
|
private l2BookInFlight;
|
|
19
25
|
private spotMetaCache;
|
|
20
26
|
private spotMetaInFlight;
|
|
27
|
+
private spotBalanceCache;
|
|
28
|
+
private clearinghouseCache;
|
|
21
29
|
constructor(config: ProviderConfig);
|
|
30
|
+
static resolveSignerAddress(config: Pick<ProviderConfig, "privateKey" | "wallet" | "signerAddress">): Promise<`0x${string}` | null>;
|
|
31
|
+
getSignerAddress(): `0x${string}` | null;
|
|
22
32
|
connect(): Promise<void>;
|
|
23
33
|
disconnect(): Promise<void>;
|
|
24
34
|
meta(dex?: string): Promise<Meta>;
|
|
@@ -28,11 +38,19 @@ export declare class NktkasProvider implements HLProvider {
|
|
|
28
38
|
spotMeta(): Promise<SpotMeta>;
|
|
29
39
|
allMids(): Promise<Record<string, string>>;
|
|
30
40
|
l2Book(coin: string, nSigFigs?: number): Promise<L2Book>;
|
|
31
|
-
clearinghouseState(user: string): Promise<ClearinghouseState>;
|
|
41
|
+
clearinghouseState(user: string, dex?: string): Promise<ClearinghouseState>;
|
|
32
42
|
spotClearinghouseState(user: string): Promise<SpotClearinghouseState>;
|
|
43
|
+
/** Invalidate balance caches after trades or transfers. */
|
|
44
|
+
invalidateBalanceCaches(): void;
|
|
33
45
|
openOrders(user: string): Promise<OpenOrder[]>;
|
|
46
|
+
frontendOpenOrders(user: string, dex?: string): Promise<FrontendOpenOrder[]>;
|
|
47
|
+
historicalOrders(user: string): Promise<HistoricalOrder[]>;
|
|
34
48
|
userFills(user: string): Promise<Fill[]>;
|
|
49
|
+
userFillsByTime(user: string, startTime: number, endTime?: number, aggregateByTime?: boolean): Promise<Fill[]>;
|
|
50
|
+
userFunding(user: string, startTime?: number, endTime?: number): Promise<UserFundingEntry[]>;
|
|
35
51
|
fundingHistory(coin: string, startTime: number, _endTime?: number): Promise<FundingRecord[]>;
|
|
52
|
+
candleSnapshot(coin: string, interval: CandleInterval, startTime: number, endTime?: number): Promise<Candle[]>;
|
|
53
|
+
referral(user: string): Promise<ReferralResponse>;
|
|
36
54
|
subscribeL2Book(coin: string, cb: (data: L2BookUpdate) => void): Promise<() => Promise<void>>;
|
|
37
55
|
subscribeAllMids(cb: (data: AllMidsUpdate) => void): Promise<() => Promise<void>>;
|
|
38
56
|
subscribeTrades(coin: string, cb: (data: Trade[]) => void): Promise<() => Promise<void>>;
|
|
@@ -46,9 +64,25 @@ export declare class NktkasProvider implements HLProvider {
|
|
|
46
64
|
b: `0x${string}`;
|
|
47
65
|
f: number;
|
|
48
66
|
}): Promise<OrderResult>;
|
|
49
|
-
setLeverage(
|
|
67
|
+
setLeverage(assetIndex: number, leverage: number, isCross: boolean): Promise<void>;
|
|
50
68
|
usdClassTransfer(amount: number, toPerp: boolean): Promise<void>;
|
|
51
69
|
setDexAbstraction(enabled: boolean): Promise<void>;
|
|
70
|
+
approveAgent(params: {
|
|
71
|
+
agentAddress: `0x${string}`;
|
|
72
|
+
agentName?: string | null;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
extraAgents(user: string): Promise<{
|
|
75
|
+
address: `0x${string}`;
|
|
76
|
+
name: string;
|
|
77
|
+
validUntil: number;
|
|
78
|
+
}[]>;
|
|
79
|
+
userSetAbstraction(params: {
|
|
80
|
+
user: `0x${string}`;
|
|
81
|
+
abstraction: "dexAbstraction" | "unifiedAccount" | "portfolioMargin" | "disabled";
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
agentSetAbstraction(params: {
|
|
84
|
+
abstraction: "i" | "u" | "p";
|
|
85
|
+
}): Promise<void>;
|
|
52
86
|
approveBuilderFee(params: {
|
|
53
87
|
maxFeeRate: string;
|
|
54
88
|
builder: string;
|
|
@@ -58,6 +92,7 @@ export declare class NktkasProvider implements HLProvider {
|
|
|
58
92
|
builder: string;
|
|
59
93
|
}): Promise<number>;
|
|
60
94
|
private requireExchange;
|
|
95
|
+
private parseOrderResult;
|
|
61
96
|
private mapOrderType;
|
|
62
97
|
}
|
|
63
98
|
//# sourceMappingURL=nktkas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nktkas.d.ts","sourceRoot":"","sources":["../../src/provider/nktkas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nktkas.d.ts","sourceRoot":"","sources":["../../src/provider/nktkas.ts"],"names":[],"mappings":"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"}
|