@lifi/perps-sdk 13.0.0 → 15.0.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/README.md +7 -5
- package/dist/cjs/client/PerpsClient.d.ts +5 -1
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +8 -0
- package/dist/cjs/client/PerpsClient.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +10 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/registry/assetRegistry.d.ts +2 -0
- package/dist/cjs/registry/assetRegistry.d.ts.map +1 -1
- package/dist/cjs/registry/assetRegistry.js +18 -1
- package/dist/cjs/registry/assetRegistry.js.map +1 -1
- package/dist/cjs/registry/referenceDataRegistry.d.ts +5 -2
- package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -1
- package/dist/cjs/registry/referenceDataRegistry.js +37 -7
- package/dist/cjs/registry/referenceDataRegistry.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts +2 -1
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js +2 -0
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/cjs/transport/fetchWithRetry.js.map +1 -1
- package/dist/cjs/types/provider.d.ts +2 -6
- package/dist/cjs/types/provider.d.ts.map +1 -1
- package/dist/cjs/utils/explorer.d.ts +3 -0
- package/dist/cjs/utils/explorer.d.ts.map +1 -1
- package/dist/cjs/utils/explorer.js +6 -0
- package/dist/cjs/utils/explorer.js.map +1 -1
- package/dist/cjs/utils/orderClassification.d.ts +9 -5
- package/dist/cjs/utils/orderClassification.d.ts.map +1 -1
- package/dist/cjs/utils/orderClassification.js +20 -0
- package/dist/cjs/utils/orderClassification.js.map +1 -1
- package/dist/cjs/utils/orderMath.d.ts +2 -2
- package/dist/cjs/utils/orderMath.d.ts.map +1 -1
- package/dist/cjs/utils/orderMath.js +15 -4
- package/dist/cjs/utils/orderMath.js.map +1 -1
- package/dist/cjs/utils/warnOnce.d.ts +2 -0
- package/dist/cjs/utils/warnOnce.d.ts.map +1 -0
- package/dist/cjs/utils/warnOnce.js +22 -0
- package/dist/cjs/utils/warnOnce.js.map +1 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/client/PerpsClient.d.ts +7 -1
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +10 -0
- package/dist/esm/client/PerpsClient.js.map +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/registry/assetRegistry.d.ts +5 -8
- package/dist/esm/registry/assetRegistry.d.ts.map +1 -1
- package/dist/esm/registry/assetRegistry.js +21 -9
- package/dist/esm/registry/assetRegistry.js.map +1 -1
- package/dist/esm/registry/referenceDataRegistry.d.ts +6 -14
- package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -1
- package/dist/esm/registry/referenceDataRegistry.js +38 -19
- package/dist/esm/registry/referenceDataRegistry.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts +3 -17
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js +3 -16
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/transport/fetchWithRetry.d.ts +3 -2
- package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/esm/transport/fetchWithRetry.js +3 -2
- package/dist/esm/transport/fetchWithRetry.js.map +1 -1
- package/dist/esm/types/api.d.ts +2 -2
- package/dist/esm/types/provider.d.ts +2 -16
- package/dist/esm/types/provider.d.ts.map +1 -1
- package/dist/esm/utils/explorer.d.ts +3 -0
- package/dist/esm/utils/explorer.d.ts.map +1 -1
- package/dist/esm/utils/explorer.js +6 -0
- package/dist/esm/utils/explorer.js.map +1 -1
- package/dist/esm/utils/orderClassification.d.ts +14 -19
- package/dist/esm/utils/orderClassification.d.ts.map +1 -1
- package/dist/esm/utils/orderClassification.js +22 -15
- package/dist/esm/utils/orderClassification.js.map +1 -1
- package/dist/esm/utils/orderMath.d.ts +3 -13
- package/dist/esm/utils/orderMath.d.ts.map +1 -1
- package/dist/esm/utils/orderMath.js +17 -16
- package/dist/esm/utils/orderMath.js.map +1 -1
- package/dist/esm/utils/warnOnce.d.ts +9 -0
- package/dist/esm/utils/warnOnce.d.ts.map +1 -0
- package/dist/esm/utils/warnOnce.js +29 -0
- package/dist/esm/utils/warnOnce.js.map +1 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/client/PerpsClient.d.ts +7 -1
- package/dist/types/client/PerpsClient.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/registry/assetRegistry.d.ts +5 -8
- package/dist/types/registry/assetRegistry.d.ts.map +1 -1
- package/dist/types/registry/referenceDataRegistry.d.ts +6 -14
- package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts +3 -17
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/transport/fetchWithRetry.d.ts +3 -2
- package/dist/types/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/types/types/api.d.ts +2 -2
- package/dist/types/types/provider.d.ts +2 -16
- package/dist/types/types/provider.d.ts.map +1 -1
- package/dist/types/utils/explorer.d.ts +3 -0
- package/dist/types/utils/explorer.d.ts.map +1 -1
- package/dist/types/utils/orderClassification.d.ts +14 -19
- package/dist/types/utils/orderClassification.d.ts.map +1 -1
- package/dist/types/utils/orderMath.d.ts +3 -13
- package/dist/types/utils/orderMath.d.ts.map +1 -1
- package/dist/types/utils/warnOnce.d.ts +9 -0
- package/dist/types/utils/warnOnce.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/client/PerpsClient.ts +26 -0
- package/src/index.ts +6 -2
- package/src/registry/assetRegistry.ts +29 -9
- package/src/registry/referenceDataRegistry.ts +46 -19
- package/src/services/getOrders.ts +5 -17
- package/src/transport/fetchWithRetry.ts +3 -2
- package/src/types/api.ts +2 -2
- package/src/types/provider.ts +2 -21
- package/src/utils/explorer.ts +6 -0
- package/src/utils/orderClassification.ts +38 -19
- package/src/utils/orderMath.ts +25 -17
- package/src/utils/warnOnce.ts +29 -0
- package/src/version.ts +1 -1
package/src/utils/orderMath.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
type OpenOrder,
|
|
3
2
|
OrderSide,
|
|
3
|
+
OrderStatus,
|
|
4
4
|
type Position,
|
|
5
5
|
PositionSide,
|
|
6
|
+
type RegularOrder,
|
|
6
7
|
type TriggerOrder,
|
|
7
8
|
} from '@lifi/perps-types'
|
|
9
|
+
import { isActiveOrderStatus } from './orderClassification.js'
|
|
8
10
|
import { realizedPnlOnClose } from './positionMath.js'
|
|
9
11
|
|
|
10
12
|
/**
|
|
@@ -55,10 +57,10 @@ export function resolveCloseSize(
|
|
|
55
57
|
* @public
|
|
56
58
|
*/
|
|
57
59
|
export function expectedRealizedPnlForOpenOrder(
|
|
58
|
-
order:
|
|
60
|
+
order: RegularOrder,
|
|
59
61
|
position: Position | undefined
|
|
60
62
|
): number | null {
|
|
61
|
-
if (!position) {
|
|
63
|
+
if (!position || !isActiveOrderStatus(order.status)) {
|
|
62
64
|
return null
|
|
63
65
|
}
|
|
64
66
|
|
|
@@ -70,7 +72,7 @@ export function expectedRealizedPnlForOpenOrder(
|
|
|
70
72
|
return null
|
|
71
73
|
}
|
|
72
74
|
|
|
73
|
-
const limitPrice = Number.parseFloat(order.price)
|
|
75
|
+
const limitPrice = Number.parseFloat(order.price ?? '')
|
|
74
76
|
const entryPrice = Number.parseFloat(position.entryPrice)
|
|
75
77
|
const orderSize = Math.abs(Number.parseFloat(order.remainingSize))
|
|
76
78
|
const positionSize = Math.abs(Number.parseFloat(position.size))
|
|
@@ -100,29 +102,29 @@ export function expectedRealizedPnlForOpenOrder(
|
|
|
100
102
|
})
|
|
101
103
|
}
|
|
102
104
|
|
|
103
|
-
/**
|
|
104
|
-
* Expected rPnL for a TP/SL trigger order against a matching position.
|
|
105
|
-
*
|
|
106
|
-
* A trigger order is by construction a closing leg — its direction is the
|
|
107
|
-
* opposite of the position's. With no matching position there is nothing to
|
|
108
|
-
* close, so rPnL is `null`. The trigger price (always present on the SDK
|
|
109
|
-
* `TriggerOrder` shape) is used as the rPnL price; the optional `limitPrice`
|
|
110
|
-
* for STOP_LIMIT / TAKE_PROFIT_LIMIT is the post-trigger limit, not the rPnL
|
|
111
|
-
* price.
|
|
112
|
-
* @public
|
|
113
|
-
*/
|
|
105
|
+
/** Project the unfilled closing quantity of an active trigger at its trigger price. */
|
|
114
106
|
export function expectedRealizedPnlForTriggerOrder(
|
|
115
107
|
order: TriggerOrder,
|
|
116
108
|
position: Position | undefined
|
|
117
109
|
): number | null {
|
|
118
|
-
if (
|
|
110
|
+
if (
|
|
111
|
+
!position ||
|
|
112
|
+
!isActiveOrderStatus(order.status) ||
|
|
113
|
+
order.status === OrderStatus.PENDING
|
|
114
|
+
) {
|
|
119
115
|
return null
|
|
120
116
|
}
|
|
121
117
|
|
|
122
118
|
const isLong = position.side === PositionSide.LONG
|
|
119
|
+
if (
|
|
120
|
+
(isLong && order.side !== OrderSide.SELL) ||
|
|
121
|
+
(!isLong && order.side !== OrderSide.BUY)
|
|
122
|
+
) {
|
|
123
|
+
return null
|
|
124
|
+
}
|
|
123
125
|
const triggerPrice = Number.parseFloat(order.triggerPrice)
|
|
124
126
|
const entryPrice = Number.parseFloat(position.entryPrice)
|
|
125
|
-
const orderSize = Math.abs(Number.parseFloat(order.
|
|
127
|
+
const orderSize = Math.abs(Number.parseFloat(order.remainingSize))
|
|
126
128
|
const positionSize = Math.abs(Number.parseFloat(position.size))
|
|
127
129
|
if (
|
|
128
130
|
!Number.isFinite(triggerPrice) ||
|
|
@@ -133,6 +135,12 @@ export function expectedRealizedPnlForTriggerOrder(
|
|
|
133
135
|
) {
|
|
134
136
|
return null
|
|
135
137
|
}
|
|
138
|
+
if (
|
|
139
|
+
orderSize === 0 &&
|
|
140
|
+
(Number.parseFloat(order.originalSize) !== 0 || !order.reduceOnly)
|
|
141
|
+
) {
|
|
142
|
+
return null
|
|
143
|
+
}
|
|
136
144
|
|
|
137
145
|
const closeSize = resolveCloseSize(orderSize, positionSize)
|
|
138
146
|
return realizedPnlOnClose({
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The number of keys one warner remembers. Venue wire data supplies the keys,
|
|
3
|
+
* so the memory must not grow for as long as the process runs.
|
|
4
|
+
*/
|
|
5
|
+
const KEY_MEMORY_LIMIT = 256
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Build a warner that writes each distinct key once. The warner forgets the
|
|
9
|
+
* oldest key when its memory is full, so a key it saw long ago can warn a
|
|
10
|
+
* second time.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export const createWarnOnce = (): ((key: string, message: string) => void) => {
|
|
15
|
+
const seen = new Set<string>()
|
|
16
|
+
return (key, message) => {
|
|
17
|
+
if (seen.has(key)) {
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
if (seen.size >= KEY_MEMORY_LIMIT) {
|
|
21
|
+
const oldest = seen.values().next().value
|
|
22
|
+
if (oldest !== undefined) {
|
|
23
|
+
seen.delete(oldest)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
seen.add(key)
|
|
27
|
+
console.warn(message)
|
|
28
|
+
}
|
|
29
|
+
}
|
package/src/version.ts
CHANGED