@lifi/perps-types 0.1.1-alpha.1 → 0.1.1-alpha.10
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/package.json +28 -5
- package/providers/hyperliquid/package.json +5 -0
- package/src/_cjs/enums.js +8 -1
- package/src/_cjs/enums.js.map +1 -1
- package/src/_cjs/index.js +1 -0
- package/src/_cjs/index.js.map +1 -1
- package/src/_cjs/providers/hyperliquid/assetId.js +19 -0
- package/src/_cjs/providers/hyperliquid/assetId.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/index.js +20 -0
- package/src/_cjs/providers/hyperliquid/index.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/activity.js +56 -0
- package/src/_cjs/providers/hyperliquid/mappers/activity.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/history.js +22 -0
- package/src/_cjs/providers/hyperliquid/mappers/history.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/index.js +18 -0
- package/src/_cjs/providers/hyperliquid/mappers/index.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/market.js +28 -0
- package/src/_cjs/providers/hyperliquid/mappers/market.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/order.js +76 -0
- package/src/_cjs/providers/hyperliquid/mappers/order.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/position.js +29 -0
- package/src/_cjs/providers/hyperliquid/mappers/position.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/mappers/shared.js +12 -0
- package/src/_cjs/providers/hyperliquid/mappers/shared.js.map +1 -0
- package/src/_cjs/providers/hyperliquid/types.js +3 -0
- package/src/_cjs/providers/hyperliquid/types.js.map +1 -0
- package/src/_cjs/subscriptions.js +3 -0
- package/src/_cjs/subscriptions.js.map +1 -0
- package/src/_esm/enums.js +7 -0
- package/src/_esm/enums.js.map +1 -1
- package/src/_esm/index.js +1 -0
- package/src/_esm/index.js.map +1 -1
- package/src/_esm/providers/hyperliquid/assetId.js +23 -0
- package/src/_esm/providers/hyperliquid/assetId.js.map +1 -0
- package/src/_esm/providers/hyperliquid/index.js +4 -0
- package/src/_esm/providers/hyperliquid/index.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/activity.js +59 -0
- package/src/_esm/providers/hyperliquid/mappers/activity.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/history.js +18 -0
- package/src/_esm/providers/hyperliquid/mappers/history.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/index.js +7 -0
- package/src/_esm/providers/hyperliquid/mappers/index.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/market.js +24 -0
- package/src/_esm/providers/hyperliquid/mappers/market.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/order.js +71 -0
- package/src/_esm/providers/hyperliquid/mappers/order.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/position.js +25 -0
- package/src/_esm/providers/hyperliquid/mappers/position.js.map +1 -0
- package/src/_esm/providers/hyperliquid/mappers/shared.js +13 -0
- package/src/_esm/providers/hyperliquid/mappers/shared.js.map +1 -0
- package/src/_esm/providers/hyperliquid/types.js +5 -0
- package/src/_esm/providers/hyperliquid/types.js.map +1 -0
- package/src/_esm/subscriptions.js +2 -0
- package/src/_esm/subscriptions.js.map +1 -0
- package/src/_types/account.d.ts +39 -1
- package/src/_types/account.d.ts.map +1 -1
- package/src/_types/enums.d.ts +6 -0
- package/src/_types/enums.d.ts.map +1 -1
- package/src/_types/index.d.ts +1 -0
- package/src/_types/index.d.ts.map +1 -1
- package/src/_types/market.d.ts +1 -0
- package/src/_types/market.d.ts.map +1 -1
- package/src/_types/providers/hyperliquid/assetId.d.ts +12 -0
- package/src/_types/providers/hyperliquid/assetId.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/index.d.ts +4 -0
- package/src/_types/providers/hyperliquid/index.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/activity.d.ts +13 -0
- package/src/_types/providers/hyperliquid/mappers/activity.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/history.d.ts +4 -0
- package/src/_types/providers/hyperliquid/mappers/history.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/index.d.ts +7 -0
- package/src/_types/providers/hyperliquid/mappers/index.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/market.d.ts +4 -0
- package/src/_types/providers/hyperliquid/mappers/market.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/order.d.ts +6 -0
- package/src/_types/providers/hyperliquid/mappers/order.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/position.d.ts +4 -0
- package/src/_types/providers/hyperliquid/mappers/position.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/mappers/shared.d.ts +7 -0
- package/src/_types/providers/hyperliquid/mappers/shared.d.ts.map +1 -0
- package/src/_types/providers/hyperliquid/types.d.ts +201 -0
- package/src/_types/providers/hyperliquid/types.d.ts.map +1 -0
- package/src/_types/subscriptions.d.ts +71 -0
- package/src/_types/subscriptions.d.ts.map +1 -0
- package/src/_types/trading.d.ts +0 -2
- package/src/_types/trading.d.ts.map +1 -1
- package/src/account.ts +55 -0
- package/src/enums.ts +7 -0
- package/src/index.ts +1 -0
- package/src/market.ts +1 -0
- package/src/providers/hyperliquid/assetId.ts +26 -0
- package/src/providers/hyperliquid/index.ts +3 -0
- package/src/providers/hyperliquid/mappers/activity.ts +84 -0
- package/src/providers/hyperliquid/mappers/history.ts +25 -0
- package/src/providers/hyperliquid/mappers/index.ts +6 -0
- package/src/providers/hyperliquid/mappers/market.ts +35 -0
- package/src/providers/hyperliquid/mappers/order.ts +88 -0
- package/src/providers/hyperliquid/mappers/position.ts +35 -0
- package/src/providers/hyperliquid/mappers/shared.ts +15 -0
- package/src/providers/hyperliquid/types.ts +255 -0
- package/src/subscriptions.ts +73 -0
- package/src/trading.ts +0 -2
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Address } from './typedData.js';
|
|
2
|
+
import type { Candle, OhlcvInterval, OrderbookResponse, PricesResponse } from './market.js';
|
|
3
|
+
import type { HistoryItem, Position } from './account.js';
|
|
4
|
+
import type { Order } from './trading.js';
|
|
5
|
+
export type PricesSubscription = {
|
|
6
|
+
channel: 'prices';
|
|
7
|
+
dex: string;
|
|
8
|
+
};
|
|
9
|
+
export type OrderbookSubscription = {
|
|
10
|
+
channel: 'orderbook';
|
|
11
|
+
dex: string;
|
|
12
|
+
symbol: string;
|
|
13
|
+
depth?: number;
|
|
14
|
+
};
|
|
15
|
+
export type TradesSubscription = {
|
|
16
|
+
channel: 'trades';
|
|
17
|
+
dex: string;
|
|
18
|
+
symbol: string;
|
|
19
|
+
};
|
|
20
|
+
export type CandleSubscription = {
|
|
21
|
+
channel: 'candle';
|
|
22
|
+
dex: string;
|
|
23
|
+
symbol: string;
|
|
24
|
+
interval: OhlcvInterval;
|
|
25
|
+
};
|
|
26
|
+
export type OrderUpdatesSubscription = {
|
|
27
|
+
channel: 'orderUpdates';
|
|
28
|
+
dex: string;
|
|
29
|
+
address: Address;
|
|
30
|
+
};
|
|
31
|
+
export type FillsSubscription = {
|
|
32
|
+
channel: 'fills';
|
|
33
|
+
dex: string;
|
|
34
|
+
address: Address;
|
|
35
|
+
};
|
|
36
|
+
export type PositionsSubscription = {
|
|
37
|
+
channel: 'positions';
|
|
38
|
+
dex: string;
|
|
39
|
+
address: Address;
|
|
40
|
+
};
|
|
41
|
+
export type Subscription = PricesSubscription | OrderbookSubscription | TradesSubscription | CandleSubscription | OrderUpdatesSubscription | FillsSubscription | PositionsSubscription;
|
|
42
|
+
export type PricesEvent = {
|
|
43
|
+
channel: 'prices';
|
|
44
|
+
data: PricesResponse;
|
|
45
|
+
};
|
|
46
|
+
export type OrderbookEvent = {
|
|
47
|
+
channel: 'orderbook';
|
|
48
|
+
data: OrderbookResponse;
|
|
49
|
+
};
|
|
50
|
+
export type TradesEvent = {
|
|
51
|
+
channel: 'trades';
|
|
52
|
+
data: HistoryItem[];
|
|
53
|
+
};
|
|
54
|
+
export type CandleEvent = {
|
|
55
|
+
channel: 'candle';
|
|
56
|
+
data: Candle;
|
|
57
|
+
};
|
|
58
|
+
export type OrderUpdatesEvent = {
|
|
59
|
+
channel: 'orderUpdates';
|
|
60
|
+
data: Order[];
|
|
61
|
+
};
|
|
62
|
+
export type FillsEvent = {
|
|
63
|
+
channel: 'fills';
|
|
64
|
+
data: HistoryItem[];
|
|
65
|
+
};
|
|
66
|
+
export type PositionsEvent = {
|
|
67
|
+
channel: 'positions';
|
|
68
|
+
data: Position[];
|
|
69
|
+
};
|
|
70
|
+
export type SubscriptionEvent = PricesEvent | OrderbookEvent | TradesEvent | CandleEvent | OrderUpdatesEvent | FillsEvent | PositionsEvent;
|
|
71
|
+
//# sourceMappingURL=subscriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAIzC,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,QAAQ,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,QAAQ,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,aAAa,CAAA;CACxB,CAAA;AACD,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,iBAAiB,GACjB,qBAAqB,CAAA;AAIzB,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAA;AACrE,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAC9E,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,KAAK,EAAE,CAAA;CAAE,CAAA;AAC1E,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAClE,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,cAAc,GACd,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,UAAU,GACV,cAAc,CAAA"}
|
package/src/_types/trading.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export interface CreateOrderRequest {
|
|
|
8
8
|
dex: string;
|
|
9
9
|
address: Address;
|
|
10
10
|
signerAddress?: Address;
|
|
11
|
-
clientOrderId?: string;
|
|
12
11
|
symbol: string;
|
|
13
12
|
side: OrderSide;
|
|
14
13
|
type: OrderType;
|
|
@@ -60,7 +59,6 @@ export interface SubmitOrderResponse {
|
|
|
60
59
|
}
|
|
61
60
|
export interface Order {
|
|
62
61
|
orderId: string;
|
|
63
|
-
clientOrderId?: string;
|
|
64
62
|
symbol: string;
|
|
65
63
|
side: OrderSide;
|
|
66
64
|
type: OrderType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../trading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,
|
|
1
|
+
{"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../trading.ts"],"names":[],"mappings":"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"}
|
package/src/account.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Address } from './typedData.js'
|
|
2
2
|
import type {
|
|
3
|
+
ActivityType,
|
|
3
4
|
HistoryItemStatus,
|
|
4
5
|
MarginMode,
|
|
5
6
|
OrderSide,
|
|
@@ -86,3 +87,57 @@ export interface HistoryResponse {
|
|
|
86
87
|
items: HistoryItem[]
|
|
87
88
|
pagination: Pagination
|
|
88
89
|
}
|
|
90
|
+
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Activities
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
|
|
95
|
+
export interface BaseActivity {
|
|
96
|
+
id: string
|
|
97
|
+
dex: string
|
|
98
|
+
timestamp: string
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface DepositActivity extends BaseActivity {
|
|
102
|
+
type: ActivityType.DEPOSIT
|
|
103
|
+
amount: string
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface WithdrawalActivity extends BaseActivity {
|
|
107
|
+
type: ActivityType.WITHDRAWAL
|
|
108
|
+
amount: string
|
|
109
|
+
fee: string
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface LiquidatedPosition {
|
|
113
|
+
symbol: string
|
|
114
|
+
size: string
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface LiquidationActivity extends BaseActivity {
|
|
118
|
+
type: ActivityType.LIQUIDATION
|
|
119
|
+
liquidatedNotionalPosition: string
|
|
120
|
+
accountValue: string
|
|
121
|
+
leverageType: string
|
|
122
|
+
liquidatedPositions: LiquidatedPosition[]
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface FundingActivity extends BaseActivity {
|
|
126
|
+
type: ActivityType.FUNDING
|
|
127
|
+
symbol: string
|
|
128
|
+
amount: string
|
|
129
|
+
positionSize: string
|
|
130
|
+
fundingRate: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export type ActivityItem =
|
|
134
|
+
| DepositActivity
|
|
135
|
+
| WithdrawalActivity
|
|
136
|
+
| LiquidationActivity
|
|
137
|
+
| FundingActivity
|
|
138
|
+
|
|
139
|
+
export interface ActivitiesResponse {
|
|
140
|
+
dex: string
|
|
141
|
+
items: ActivityItem[]
|
|
142
|
+
pagination: Pagination
|
|
143
|
+
}
|
package/src/enums.ts
CHANGED
package/src/index.ts
CHANGED
package/src/market.ts
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate the asset ID for a given DEX index and asset index.
|
|
3
|
+
*
|
|
4
|
+
* Main DEX (dex = ''): assetId = indexInDex
|
|
5
|
+
* HIP-3 DEXes (dex = 'xyz'): assetId = 100_000 + perpDexIndex * 10_000 + indexInDex
|
|
6
|
+
*/
|
|
7
|
+
export const calculateAssetId = (
|
|
8
|
+
dexIndex: number,
|
|
9
|
+
indexInDex: number
|
|
10
|
+
): number => {
|
|
11
|
+
if (dexIndex === 0) {
|
|
12
|
+
return indexInDex
|
|
13
|
+
}
|
|
14
|
+
return 100_000 + dexIndex * 10_000 + indexInDex
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Get the DEX index from the given list of dex names.
|
|
19
|
+
*/
|
|
20
|
+
export const getDexIndex = (dex: string, dexNames: string[]): number => {
|
|
21
|
+
const index = dexNames.indexOf(dex)
|
|
22
|
+
if (index === -1) {
|
|
23
|
+
throw new Error(`Unknown sub-dex: ${dex}`)
|
|
24
|
+
}
|
|
25
|
+
return index
|
|
26
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ActivityType } from '../../../enums.js'
|
|
2
|
+
import type {
|
|
3
|
+
ActivityItem,
|
|
4
|
+
DepositActivity,
|
|
5
|
+
WithdrawalActivity,
|
|
6
|
+
LiquidationActivity,
|
|
7
|
+
FundingActivity,
|
|
8
|
+
} from '../../../account.js'
|
|
9
|
+
import type { HlLedgerUpdate, HlFundingUpdate } from '../types.js'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Map a Hyperliquid non-funding ledger entry to an ActivityItem.
|
|
13
|
+
* Returns null for unsupported delta types (accountClassTransfer,
|
|
14
|
+
* internalTransfer, subAccountTransfer, spotTransfer).
|
|
15
|
+
*/
|
|
16
|
+
export const mapLedgerEntry = (
|
|
17
|
+
entry: HlLedgerUpdate,
|
|
18
|
+
dexKey: string
|
|
19
|
+
): ActivityItem | null => {
|
|
20
|
+
const { delta } = entry
|
|
21
|
+
const base = {
|
|
22
|
+
id: entry.hash,
|
|
23
|
+
dex: dexKey,
|
|
24
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
switch (delta.type) {
|
|
28
|
+
case 'deposit':
|
|
29
|
+
return {
|
|
30
|
+
...base,
|
|
31
|
+
type: ActivityType.DEPOSIT,
|
|
32
|
+
amount: delta.usdc ?? '0',
|
|
33
|
+
} satisfies DepositActivity
|
|
34
|
+
|
|
35
|
+
case 'withdraw':
|
|
36
|
+
return {
|
|
37
|
+
...base,
|
|
38
|
+
type: ActivityType.WITHDRAWAL,
|
|
39
|
+
amount: delta.usdc ?? '0',
|
|
40
|
+
fee: (delta as { fee?: string }).fee ?? '0',
|
|
41
|
+
} satisfies WithdrawalActivity
|
|
42
|
+
|
|
43
|
+
case 'liquidation': {
|
|
44
|
+
const d = delta as unknown as {
|
|
45
|
+
type: string
|
|
46
|
+
liquidatedNtlPos: string
|
|
47
|
+
accountValue: string
|
|
48
|
+
leverageType: string
|
|
49
|
+
liquidatedPositions?: { coin: string; szi: string }[]
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
...base,
|
|
53
|
+
type: ActivityType.LIQUIDATION,
|
|
54
|
+
liquidatedNotionalPosition: d.liquidatedNtlPos,
|
|
55
|
+
accountValue: d.accountValue,
|
|
56
|
+
leverageType: d.leverageType,
|
|
57
|
+
liquidatedPositions: (d.liquidatedPositions ?? []).map((p) => ({
|
|
58
|
+
symbol: p.coin,
|
|
59
|
+
size: p.szi,
|
|
60
|
+
})),
|
|
61
|
+
} satisfies LiquidationActivity
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
default:
|
|
65
|
+
return null
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Map a Hyperliquid funding entry to a FundingActivity.
|
|
71
|
+
*/
|
|
72
|
+
export const mapFundingActivity = (
|
|
73
|
+
entry: HlFundingUpdate,
|
|
74
|
+
dexKey: string
|
|
75
|
+
): FundingActivity => ({
|
|
76
|
+
id: entry.hash,
|
|
77
|
+
dex: dexKey,
|
|
78
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
79
|
+
type: ActivityType.FUNDING,
|
|
80
|
+
symbol: entry.delta.coin,
|
|
81
|
+
amount: entry.delta.usdc,
|
|
82
|
+
positionSize: entry.delta.szi,
|
|
83
|
+
fundingRate: entry.delta.fundingRate,
|
|
84
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HistoryItemStatus, OrderSide, OrderType } from '../../../enums.js'
|
|
2
|
+
import type { HistoryItem } from '../../../account.js'
|
|
3
|
+
import type { HlUserFill } from '../types.js'
|
|
4
|
+
|
|
5
|
+
import { resolveAssetIdFromLookup } from './shared.js'
|
|
6
|
+
|
|
7
|
+
export const mapHistoryItem = (
|
|
8
|
+
fill: HlUserFill,
|
|
9
|
+
dexKey: string,
|
|
10
|
+
assetIdLookup: Map<string, number>
|
|
11
|
+
): HistoryItem => ({
|
|
12
|
+
id: String(fill.tid),
|
|
13
|
+
symbol: fill.coin,
|
|
14
|
+
assetId: resolveAssetIdFromLookup(assetIdLookup, fill.coin),
|
|
15
|
+
dex: dexKey,
|
|
16
|
+
side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
17
|
+
type: fill.dir?.includes('Limit') ? OrderType.LIMIT : OrderType.MARKET,
|
|
18
|
+
size: fill.sz,
|
|
19
|
+
price: fill.px,
|
|
20
|
+
status: HistoryItemStatus.FILLED,
|
|
21
|
+
filledSize: fill.sz,
|
|
22
|
+
fee: fill.fee,
|
|
23
|
+
realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl,
|
|
24
|
+
createdAt: new Date(fill.time).toISOString(),
|
|
25
|
+
})
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { resolveAssetIdFromLookup } from './shared.js'
|
|
2
|
+
export { mapMarket } from './market.js'
|
|
3
|
+
export { mapOpenOrder, mapOrder } from './order.js'
|
|
4
|
+
export { mapPosition } from './position.js'
|
|
5
|
+
export { mapHistoryItem } from './history.js'
|
|
6
|
+
export { mapLedgerEntry, mapFundingActivity } from './activity.js'
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Market } from '../../../market.js'
|
|
2
|
+
import { calculateAssetId } from '../assetId.js'
|
|
3
|
+
import type { HlAssetCtx, HlUniverseItem } from '../types.js'
|
|
4
|
+
|
|
5
|
+
const NEXT_FUNDING_INTERVAL_MS = 60 * 60 * 1000 // 1 hour
|
|
6
|
+
|
|
7
|
+
export const mapMarket = (
|
|
8
|
+
universe: HlUniverseItem,
|
|
9
|
+
assetCtx: HlAssetCtx,
|
|
10
|
+
dexIndex: number,
|
|
11
|
+
indexInDex: number,
|
|
12
|
+
dexKey: string
|
|
13
|
+
): Market => {
|
|
14
|
+
const now = Date.now()
|
|
15
|
+
const nextFundingTime =
|
|
16
|
+
Math.ceil(now / NEXT_FUNDING_INTERVAL_MS) * NEXT_FUNDING_INTERVAL_MS
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
symbol: universe.name,
|
|
20
|
+
name: universe.name,
|
|
21
|
+
logoURI: `https://app.hyperliquid.xyz/coins/${universe.name}.svg`,
|
|
22
|
+
assetId: calculateAssetId(dexIndex, indexInDex),
|
|
23
|
+
dex: dexKey,
|
|
24
|
+
szDecimals: universe.szDecimals,
|
|
25
|
+
maxLeverage: universe.maxLeverage,
|
|
26
|
+
onlyIsolated: universe.onlyIsolated === true,
|
|
27
|
+
funding: {
|
|
28
|
+
rate: assetCtx.funding,
|
|
29
|
+
nextFundingTime,
|
|
30
|
+
},
|
|
31
|
+
openInterest: assetCtx.openInterest,
|
|
32
|
+
volume24h: assetCtx.dayNtlVlm,
|
|
33
|
+
markPrice: assetCtx.markPx,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OrderSide,
|
|
3
|
+
OrderStatus,
|
|
4
|
+
OrderType,
|
|
5
|
+
TimeInForce,
|
|
6
|
+
} from '../../../enums.js'
|
|
7
|
+
import type { OpenOrder } from '../../../account.js'
|
|
8
|
+
import type { Order } from '../../../trading.js'
|
|
9
|
+
import type { HlFrontendOpenOrder, HlOrderDetail } from '../types.js'
|
|
10
|
+
|
|
11
|
+
import { resolveAssetIdFromLookup } from './shared.js'
|
|
12
|
+
|
|
13
|
+
export const mapOpenOrder = (
|
|
14
|
+
o: HlFrontendOpenOrder,
|
|
15
|
+
dexKey: string,
|
|
16
|
+
assetIdLookup: Map<string, number>
|
|
17
|
+
): OpenOrder => ({
|
|
18
|
+
id: String(o.oid),
|
|
19
|
+
symbol: o.coin,
|
|
20
|
+
assetId: resolveAssetIdFromLookup(assetIdLookup, o.coin),
|
|
21
|
+
dex: dexKey,
|
|
22
|
+
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
23
|
+
type: o.orderType === 'Limit' ? OrderType.LIMIT : OrderType.MARKET,
|
|
24
|
+
size: o.sz,
|
|
25
|
+
price: o.limitPx,
|
|
26
|
+
filledSize: o.origSz
|
|
27
|
+
? (parseFloat(o.origSz) - parseFloat(o.sz)).toString()
|
|
28
|
+
: '0',
|
|
29
|
+
reduceOnly: o.reduceOnly ?? false,
|
|
30
|
+
createdAt: new Date(o.timestamp).toISOString(),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const mapOrderStatus = (status: string): OrderStatus => {
|
|
34
|
+
switch (status) {
|
|
35
|
+
case 'open':
|
|
36
|
+
case 'resting':
|
|
37
|
+
return OrderStatus.OPEN
|
|
38
|
+
case 'filled':
|
|
39
|
+
return OrderStatus.FILLED
|
|
40
|
+
case 'canceled':
|
|
41
|
+
case 'cancelled':
|
|
42
|
+
return OrderStatus.CANCELLED
|
|
43
|
+
case 'rejected':
|
|
44
|
+
return OrderStatus.REJECTED
|
|
45
|
+
case 'triggered':
|
|
46
|
+
return OrderStatus.TRIGGERED
|
|
47
|
+
case 'marginCanceled':
|
|
48
|
+
return OrderStatus.CANCELLED
|
|
49
|
+
default:
|
|
50
|
+
return OrderStatus.PENDING
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const mapTimeInForce = (tif: string | undefined): TimeInForce | undefined => {
|
|
55
|
+
switch (tif) {
|
|
56
|
+
case 'Gtc':
|
|
57
|
+
return TimeInForce.GTC
|
|
58
|
+
case 'Ioc':
|
|
59
|
+
return TimeInForce.IOC
|
|
60
|
+
case 'Alo':
|
|
61
|
+
return TimeInForce.POST_ONLY
|
|
62
|
+
default:
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const mapOrder = (detail: HlOrderDetail): Order => {
|
|
68
|
+
const o = detail.order
|
|
69
|
+
const filled = parseFloat(o.origSz) - parseFloat(o.sz)
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
orderId: String(o.oid),
|
|
73
|
+
symbol: o.coin,
|
|
74
|
+
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
75
|
+
type: o.orderType === 'Limit' ? OrderType.LIMIT : OrderType.MARKET,
|
|
76
|
+
price: o.limitPx,
|
|
77
|
+
originalSize: o.origSz,
|
|
78
|
+
remainingSize: o.sz,
|
|
79
|
+
filledSize: filled.toString(),
|
|
80
|
+
timeInForce: mapTimeInForce(o.tif ?? undefined),
|
|
81
|
+
reduceOnly: o.reduceOnly ?? undefined,
|
|
82
|
+
isTrigger: o.triggerCondition !== undefined && o.triggerCondition !== 'N/A',
|
|
83
|
+
triggerPrice: o.triggerPx ?? undefined,
|
|
84
|
+
status: mapOrderStatus(detail.status),
|
|
85
|
+
createdAt: new Date(o.timestamp).toISOString(),
|
|
86
|
+
updatedAt: new Date(detail.statusTimestamp).toISOString(),
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MarginMode, PositionSide } from '../../../enums.js'
|
|
2
|
+
import type { Position } from '../../../account.js'
|
|
3
|
+
import type { HlAssetPosition } from '../types.js'
|
|
4
|
+
|
|
5
|
+
import { resolveAssetIdFromLookup } from './shared.js'
|
|
6
|
+
|
|
7
|
+
export const mapPosition = (
|
|
8
|
+
ap: HlAssetPosition,
|
|
9
|
+
dexKey: string,
|
|
10
|
+
assetIdLookup: Map<string, number>
|
|
11
|
+
): Position => {
|
|
12
|
+
const pos = ap.position
|
|
13
|
+
const szi = parseFloat(pos.szi)
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
symbol: pos.coin,
|
|
17
|
+
assetId: resolveAssetIdFromLookup(assetIdLookup, pos.coin),
|
|
18
|
+
dex: dexKey,
|
|
19
|
+
side: szi >= 0 ? PositionSide.LONG : PositionSide.SHORT,
|
|
20
|
+
size: Math.abs(szi).toString(),
|
|
21
|
+
entryPrice: pos.entryPx ?? '0',
|
|
22
|
+
markPrice:
|
|
23
|
+
pos.positionValue && szi !== 0
|
|
24
|
+
? (parseFloat(pos.positionValue) / Math.abs(szi)).toString()
|
|
25
|
+
: '0',
|
|
26
|
+
liquidationPrice: pos.liquidationPx ?? '0',
|
|
27
|
+
unrealizedPnl: pos.unrealizedPnl,
|
|
28
|
+
leverage: ap.position.leverage.value,
|
|
29
|
+
marginUsed: pos.marginUsed,
|
|
30
|
+
marginMode:
|
|
31
|
+
ap.position.leverage.type === 'cross'
|
|
32
|
+
? MarginMode.CROSS
|
|
33
|
+
: MarginMode.ISOLATED,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Look up an asset ID by symbol, throwing if the symbol is unknown.
|
|
3
|
+
* Asset ID 0 is a valid Hyperliquid asset (BTC-PERP), so a fallback
|
|
4
|
+
* to 0 would silently corrupt data.
|
|
5
|
+
*/
|
|
6
|
+
export const resolveAssetIdFromLookup = (
|
|
7
|
+
lookup: Map<string, number>,
|
|
8
|
+
symbol: string
|
|
9
|
+
): number => {
|
|
10
|
+
const id = lookup.get(symbol)
|
|
11
|
+
if (id === undefined) {
|
|
12
|
+
throw new Error(`Unknown asset symbol: ${symbol}`)
|
|
13
|
+
}
|
|
14
|
+
return id
|
|
15
|
+
}
|