@lifi/perps-types 0.1.1-alpha.0 → 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 +2 -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/_cjs/withdrawal.js +3 -0
- package/src/_cjs/withdrawal.js.map +1 -0
- package/src/_esm/enums.js +7 -0
- package/src/_esm/enums.js.map +1 -1
- package/src/_esm/index.js +2 -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/_esm/withdrawal.js +2 -0
- package/src/_esm/withdrawal.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 +2 -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/_types/typedData.d.ts +2 -3
- package/src/_types/typedData.d.ts.map +1 -1
- package/src/_types/withdrawal.d.ts +37 -0
- package/src/_types/withdrawal.d.ts.map +1 -0
- package/src/account.ts +55 -0
- package/src/enums.ts +7 -0
- package/src/index.ts +2 -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
- package/src/typedData.ts +2 -8
- package/src/withdrawal.ts +44 -0
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Hyperliquid /info response types
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
// -- metaAndAssetCtxs -------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
export type HlUniverseItem = {
|
|
8
|
+
name: string
|
|
9
|
+
szDecimals: number
|
|
10
|
+
maxLeverage: number
|
|
11
|
+
onlyIsolated?: boolean
|
|
12
|
+
isDelisted?: boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type HlMeta = {
|
|
16
|
+
universe: HlUniverseItem[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type HlAssetCtx = {
|
|
20
|
+
funding: string
|
|
21
|
+
openInterest: string
|
|
22
|
+
dayNtlVlm: string
|
|
23
|
+
markPx: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type HlMetaAndAssetCtxs = [HlMeta, HlAssetCtx[]]
|
|
27
|
+
|
|
28
|
+
export type HlUniverse = HlMeta['universe']
|
|
29
|
+
|
|
30
|
+
// -- allMids ----------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
export type HlAllMids = Record<string, string>
|
|
33
|
+
|
|
34
|
+
// -- candleSnapshot ---------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
export type HlCandle = {
|
|
37
|
+
t: number
|
|
38
|
+
o: string
|
|
39
|
+
h: string
|
|
40
|
+
l: string
|
|
41
|
+
c: string
|
|
42
|
+
v: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type HlCandleSnapshot = HlCandle[]
|
|
46
|
+
|
|
47
|
+
// -- l2Book -----------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
export type HlLevel = {
|
|
50
|
+
px: string
|
|
51
|
+
sz: string
|
|
52
|
+
n: number
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type HlL2Book = {
|
|
56
|
+
levels: [HlLevel[], HlLevel[]]
|
|
57
|
+
time: number
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// -- clearinghouseState -----------------------------------------------------
|
|
61
|
+
|
|
62
|
+
export type HlPosition = {
|
|
63
|
+
coin: string
|
|
64
|
+
szi: string
|
|
65
|
+
entryPx: string
|
|
66
|
+
positionValue: string
|
|
67
|
+
liquidationPx: string
|
|
68
|
+
unrealizedPnl: string
|
|
69
|
+
marginUsed: string
|
|
70
|
+
leverage: {
|
|
71
|
+
type: string
|
|
72
|
+
value: number
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type HlAssetPosition = {
|
|
77
|
+
position: HlPosition
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type HlClearinghouseState = {
|
|
81
|
+
assetPositions: HlAssetPosition[]
|
|
82
|
+
marginSummary: {
|
|
83
|
+
accountValue: string
|
|
84
|
+
totalMarginUsed: string
|
|
85
|
+
}
|
|
86
|
+
crossMarginSummary: {
|
|
87
|
+
accountValue: string
|
|
88
|
+
totalMarginUsed: string
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// -- spotClearinghouseState -------------------------------------------------
|
|
93
|
+
|
|
94
|
+
export type HlSpotBalance = {
|
|
95
|
+
coin: string
|
|
96
|
+
token: number
|
|
97
|
+
total: string
|
|
98
|
+
hold: string
|
|
99
|
+
entryNtl: string
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export type HlSpotClearinghouseState = {
|
|
103
|
+
balances: HlSpotBalance[]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// -- userFees ---------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
export type HlUserFees = {
|
|
109
|
+
userAddRate: string
|
|
110
|
+
userCrossRate: string
|
|
111
|
+
activeReferralDiscount: string
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// -- frontendOpenOrders -----------------------------------------------------
|
|
115
|
+
|
|
116
|
+
export type HlFrontendOpenOrder = {
|
|
117
|
+
oid: number
|
|
118
|
+
coin: string
|
|
119
|
+
side: string
|
|
120
|
+
sz: string
|
|
121
|
+
limitPx: string
|
|
122
|
+
orderType: string
|
|
123
|
+
origSz: string
|
|
124
|
+
reduceOnly: boolean
|
|
125
|
+
timestamp: number
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export type HlFrontendOpenOrders = HlFrontendOpenOrder[]
|
|
129
|
+
|
|
130
|
+
// -- extraAgents ------------------------------------------------------------
|
|
131
|
+
|
|
132
|
+
export type HlExtraAgents = Record<string, unknown>[]
|
|
133
|
+
|
|
134
|
+
// -- userFills / userFillsByTime --------------------------------------------
|
|
135
|
+
|
|
136
|
+
export type HlUserFill = {
|
|
137
|
+
tid: number
|
|
138
|
+
coin: string
|
|
139
|
+
side: string
|
|
140
|
+
sz: string
|
|
141
|
+
px: string
|
|
142
|
+
dir: string
|
|
143
|
+
fee: string
|
|
144
|
+
closedPnl: string
|
|
145
|
+
time: number
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type HlUserFills = HlUserFill[]
|
|
149
|
+
|
|
150
|
+
export type HlUserFillsByTime = HlUserFill[]
|
|
151
|
+
|
|
152
|
+
// -- orderStatus ------------------------------------------------------------
|
|
153
|
+
|
|
154
|
+
export type HlOrderDetail = {
|
|
155
|
+
order: {
|
|
156
|
+
oid: number
|
|
157
|
+
coin: string
|
|
158
|
+
side: string
|
|
159
|
+
sz: string
|
|
160
|
+
limitPx: string
|
|
161
|
+
orderType: string
|
|
162
|
+
origSz: string
|
|
163
|
+
reduceOnly: boolean
|
|
164
|
+
timestamp: number
|
|
165
|
+
tif: string | null
|
|
166
|
+
cloid: string | null
|
|
167
|
+
triggerCondition: string
|
|
168
|
+
triggerPx: string | null
|
|
169
|
+
}
|
|
170
|
+
status: string
|
|
171
|
+
statusTimestamp: number
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export type HlOrderStatusFound = {
|
|
175
|
+
status: 'order'
|
|
176
|
+
order: HlOrderDetail
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export type HlOrderStatusResponse =
|
|
180
|
+
| HlOrderStatusFound
|
|
181
|
+
| { status: 'unknownOid' }
|
|
182
|
+
|
|
183
|
+
// -- userNonFundingLedgerUpdates --------------------------------------------
|
|
184
|
+
|
|
185
|
+
export type HlLedgerDelta = {
|
|
186
|
+
type: string
|
|
187
|
+
usdc?: string
|
|
188
|
+
[key: string]: unknown
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export type HlLedgerUpdate = {
|
|
192
|
+
time: number
|
|
193
|
+
hash: string
|
|
194
|
+
delta: HlLedgerDelta
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export type HlUserNonFundingLedgerUpdates = HlLedgerUpdate[]
|
|
198
|
+
|
|
199
|
+
// -- userFunding ------------------------------------------------------------
|
|
200
|
+
|
|
201
|
+
export type HlFundingDelta = {
|
|
202
|
+
type: 'funding'
|
|
203
|
+
coin: string
|
|
204
|
+
usdc: string
|
|
205
|
+
szi: string
|
|
206
|
+
fundingRate: string
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export type HlFundingUpdate = {
|
|
210
|
+
time: number
|
|
211
|
+
hash: string
|
|
212
|
+
delta: HlFundingDelta
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export type HlUserFunding = HlFundingUpdate[]
|
|
216
|
+
|
|
217
|
+
// -- perpDexs ---------------------------------------------------------------
|
|
218
|
+
|
|
219
|
+
export type HlPerpDexs = (null | { name: string })[]
|
|
220
|
+
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// Exchange request / response types
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
|
|
225
|
+
export type HlExchangeRequest = {
|
|
226
|
+
action: Record<string, unknown>
|
|
227
|
+
signature: {
|
|
228
|
+
r: string
|
|
229
|
+
s: string
|
|
230
|
+
v: number
|
|
231
|
+
}
|
|
232
|
+
nonce: number
|
|
233
|
+
vaultAddress?: string | null
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export type HlExchangeResponse = {
|
|
237
|
+
status: string
|
|
238
|
+
response?:
|
|
239
|
+
| string
|
|
240
|
+
| {
|
|
241
|
+
type: string
|
|
242
|
+
data?: {
|
|
243
|
+
statuses?: (
|
|
244
|
+
| string
|
|
245
|
+
| { filled: { totalSz: string; avgPx: string; oid: number } }
|
|
246
|
+
| { resting: { oid: number } }
|
|
247
|
+
| { waitingForFill: { oid: number } }
|
|
248
|
+
| { waitingForTrigger: { oid: number } }
|
|
249
|
+
| { success: true }
|
|
250
|
+
| { error: string }
|
|
251
|
+
)[]
|
|
252
|
+
status?: unknown
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Address } from './typedData.js'
|
|
2
|
+
import type {
|
|
3
|
+
Candle,
|
|
4
|
+
OhlcvInterval,
|
|
5
|
+
OrderbookResponse,
|
|
6
|
+
PricesResponse,
|
|
7
|
+
} from './market.js'
|
|
8
|
+
import type { HistoryItem, Position } from './account.js'
|
|
9
|
+
import type { Order } from './trading.js'
|
|
10
|
+
|
|
11
|
+
// --- Channels the user can subscribe to ---
|
|
12
|
+
|
|
13
|
+
export type PricesSubscription = { channel: 'prices'; dex: string }
|
|
14
|
+
export type OrderbookSubscription = {
|
|
15
|
+
channel: 'orderbook'
|
|
16
|
+
dex: string
|
|
17
|
+
symbol: string
|
|
18
|
+
depth?: number
|
|
19
|
+
}
|
|
20
|
+
export type TradesSubscription = {
|
|
21
|
+
channel: 'trades'
|
|
22
|
+
dex: string
|
|
23
|
+
symbol: string
|
|
24
|
+
}
|
|
25
|
+
export type CandleSubscription = {
|
|
26
|
+
channel: 'candle'
|
|
27
|
+
dex: string
|
|
28
|
+
symbol: string
|
|
29
|
+
interval: OhlcvInterval
|
|
30
|
+
}
|
|
31
|
+
export type OrderUpdatesSubscription = {
|
|
32
|
+
channel: 'orderUpdates'
|
|
33
|
+
dex: string
|
|
34
|
+
address: Address
|
|
35
|
+
}
|
|
36
|
+
export type FillsSubscription = {
|
|
37
|
+
channel: 'fills'
|
|
38
|
+
dex: string
|
|
39
|
+
address: Address
|
|
40
|
+
}
|
|
41
|
+
export type PositionsSubscription = {
|
|
42
|
+
channel: 'positions'
|
|
43
|
+
dex: string
|
|
44
|
+
address: Address
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type Subscription =
|
|
48
|
+
| PricesSubscription
|
|
49
|
+
| OrderbookSubscription
|
|
50
|
+
| TradesSubscription
|
|
51
|
+
| CandleSubscription
|
|
52
|
+
| OrderUpdatesSubscription
|
|
53
|
+
| FillsSubscription
|
|
54
|
+
| PositionsSubscription
|
|
55
|
+
|
|
56
|
+
// --- Events emitted to listeners ---
|
|
57
|
+
|
|
58
|
+
export type PricesEvent = { channel: 'prices'; data: PricesResponse }
|
|
59
|
+
export type OrderbookEvent = { channel: 'orderbook'; data: OrderbookResponse }
|
|
60
|
+
export type TradesEvent = { channel: 'trades'; data: HistoryItem[] }
|
|
61
|
+
export type CandleEvent = { channel: 'candle'; data: Candle }
|
|
62
|
+
export type OrderUpdatesEvent = { channel: 'orderUpdates'; data: Order[] }
|
|
63
|
+
export type FillsEvent = { channel: 'fills'; data: HistoryItem[] }
|
|
64
|
+
export type PositionsEvent = { channel: 'positions'; data: Position[] }
|
|
65
|
+
|
|
66
|
+
export type SubscriptionEvent =
|
|
67
|
+
| PricesEvent
|
|
68
|
+
| OrderbookEvent
|
|
69
|
+
| TradesEvent
|
|
70
|
+
| CandleEvent
|
|
71
|
+
| OrderUpdatesEvent
|
|
72
|
+
| FillsEvent
|
|
73
|
+
| PositionsEvent
|
package/src/trading.ts
CHANGED
|
@@ -17,7 +17,6 @@ export interface CreateOrderRequest {
|
|
|
17
17
|
dex: string
|
|
18
18
|
address: Address
|
|
19
19
|
signerAddress?: Address
|
|
20
|
-
clientOrderId?: string
|
|
21
20
|
symbol: string
|
|
22
21
|
side: OrderSide
|
|
23
22
|
type: OrderType
|
|
@@ -78,7 +77,6 @@ export interface SubmitOrderResponse {
|
|
|
78
77
|
|
|
79
78
|
export interface Order {
|
|
80
79
|
orderId: string
|
|
81
|
-
clientOrderId?: string
|
|
82
80
|
symbol: string
|
|
83
81
|
side: OrderSide
|
|
84
82
|
type: OrderType
|
package/src/typedData.ts
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import type { TypedData, SignedTypedData } from '@lifi/types'
|
|
2
2
|
import type { Address, Hex, TypedDataDomain, TypedDataParameter } from 'viem'
|
|
3
3
|
|
|
4
|
-
export type PerpsTypedDataPrimaryType =
|
|
5
|
-
| 'HyperliquidTransaction:ApproveAgent'
|
|
6
|
-
| 'HyperliquidTransaction:ApproveBuilderFee'
|
|
7
|
-
| 'HyperliquidTransaction:UserSetAbstraction'
|
|
8
|
-
| 'Agent'
|
|
9
|
-
|
|
10
4
|
export type PerpsTypedData = Omit<TypedData, 'primaryType'> & {
|
|
11
|
-
primaryType:
|
|
5
|
+
primaryType: string
|
|
12
6
|
}
|
|
13
7
|
|
|
14
8
|
export type PerpsSignedTypedData = Omit<SignedTypedData, 'primaryType'> & {
|
|
15
|
-
primaryType:
|
|
9
|
+
primaryType: string
|
|
16
10
|
}
|
|
17
11
|
|
|
18
12
|
// Re-export viem primitives used across perps types
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Address, Hex, PerpsTypedData } from './typedData.js'
|
|
2
|
+
|
|
3
|
+
export interface WithdrawalInput {
|
|
4
|
+
destination: Address
|
|
5
|
+
amount: string // e.g., "100.5" — units are $1 USDC
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface CreateWithdrawalRequest {
|
|
9
|
+
dex: string
|
|
10
|
+
address: Address
|
|
11
|
+
withdrawal: WithdrawalInput
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface WithdrawalAction {
|
|
15
|
+
action: string // "Withdraw"
|
|
16
|
+
description?: string
|
|
17
|
+
typedData: PerpsTypedData
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface CreateWithdrawalResponse {
|
|
21
|
+
action: WithdrawalAction
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface SignedWithdrawal {
|
|
25
|
+
action: string
|
|
26
|
+
typedData: PerpsTypedData
|
|
27
|
+
signature: Hex
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface SubmitWithdrawalRequest {
|
|
31
|
+
dex: string
|
|
32
|
+
address: Address
|
|
33
|
+
action: SignedWithdrawal
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface WithdrawalResult {
|
|
37
|
+
action: string
|
|
38
|
+
success: boolean
|
|
39
|
+
error?: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface SubmitWithdrawalResponse {
|
|
43
|
+
result: WithdrawalResult
|
|
44
|
+
}
|