@lifi/perps-sdk 23.0.0 → 24.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 +85 -45
- package/dist/cjs/client/PerpsClient.d.ts +3 -2
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +16 -9
- package/dist/cjs/client/PerpsClient.js.map +1 -1
- package/dist/cjs/decimal/arithmetic.d.ts +13 -0
- package/dist/cjs/decimal/arithmetic.d.ts.map +1 -0
- package/dist/cjs/decimal/arithmetic.js +48 -0
- package/dist/cjs/decimal/arithmetic.js.map +1 -0
- package/dist/cjs/decimal/big.d.ts +0 -1
- package/dist/cjs/decimal/big.d.ts.map +1 -1
- package/dist/cjs/decimal/big.js +0 -4
- package/dist/cjs/decimal/big.js.map +1 -1
- package/dist/cjs/decimal/compare.d.ts +7 -0
- package/dist/cjs/decimal/compare.d.ts.map +1 -0
- package/dist/cjs/decimal/compare.js +21 -0
- package/dist/cjs/decimal/compare.js.map +1 -0
- package/dist/cjs/decimal/convert.d.ts +12 -6
- package/dist/cjs/decimal/convert.d.ts.map +1 -1
- package/dist/cjs/decimal/convert.js +36 -14
- package/dist/cjs/decimal/convert.js.map +1 -1
- package/dist/cjs/decimal/decimalStringToBig.d.ts +5 -0
- package/dist/cjs/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/cjs/decimal/decimalStringToBig.js +27 -0
- package/dist/cjs/decimal/decimalStringToBig.js.map +1 -0
- package/dist/cjs/decimal/format.d.ts.map +1 -1
- package/dist/cjs/decimal/format.js +70 -49
- package/dist/cjs/decimal/format.js.map +1 -1
- package/dist/cjs/decimal/parse.d.ts +4 -3
- package/dist/cjs/decimal/parse.d.ts.map +1 -1
- package/dist/cjs/decimal/parse.js +44 -19
- package/dist/cjs/decimal/parse.js.map +1 -1
- package/dist/cjs/index.d.ts +13 -10
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +66 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/math/fills.d.ts +1 -1
- package/dist/cjs/math/fills.d.ts.map +1 -1
- package/dist/cjs/math/fills.js +28 -13
- package/dist/cjs/math/fills.js.map +1 -1
- package/dist/cjs/math/order.d.ts +27 -16
- package/dist/cjs/math/order.d.ts.map +1 -1
- package/dist/cjs/math/order.js +106 -122
- package/dist/cjs/math/order.js.map +1 -1
- package/dist/cjs/math/position.d.ts +85 -35
- package/dist/cjs/math/position.d.ts.map +1 -1
- package/dist/cjs/math/position.js +88 -91
- package/dist/cjs/math/position.js.map +1 -1
- package/dist/cjs/services/getGasRecommendation.js +1 -1
- package/dist/cjs/services/getGasRecommendation.js.map +1 -1
- package/dist/cjs/services/getQuote.d.ts +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.js +3 -2
- package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/cjs/transport/request.d.ts +1 -0
- package/dist/cjs/transport/request.d.ts.map +1 -1
- package/dist/cjs/transport/request.js +2 -2
- package/dist/cjs/transport/request.js.map +1 -1
- package/dist/cjs/types/api.d.ts +4 -0
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/types/provider.d.ts +9 -5
- package/dist/cjs/types/provider.d.ts.map +1 -1
- package/dist/cjs/types/withdrawal.d.ts +12 -4
- package/dist/cjs/types/withdrawal.d.ts.map +1 -1
- package/dist/cjs/utils/createSafeFunction.d.ts +2 -0
- package/dist/cjs/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/cjs/utils/createSafeFunction.js +15 -0
- package/dist/cjs/utils/createSafeFunction.js.map +1 -0
- package/dist/cjs/utils/timestampToIsoString.d.ts +3 -0
- package/dist/cjs/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/cjs/utils/timestampToIsoString.js +16 -0
- package/dist/cjs/utils/timestampToIsoString.js.map +1 -0
- package/dist/cjs/utils/warnOnce.d.ts +2 -0
- package/dist/cjs/utils/warnOnce.d.ts.map +1 -1
- package/dist/cjs/utils/warnOnce.js +13 -1
- package/dist/cjs/utils/warnOnce.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/websocket/PerpsWsClient.d.ts +2 -0
- package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/cjs/websocket/PerpsWsClient.js +14 -1
- package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
- package/dist/cjs/websocket/wsLog.d.ts +2 -0
- package/dist/cjs/websocket/wsLog.d.ts.map +1 -1
- package/dist/cjs/websocket/wsLog.js +8 -0
- package/dist/cjs/websocket/wsLog.js.map +1 -1
- package/dist/cjs/wire/orderAmounts.d.ts.map +1 -1
- package/dist/cjs/wire/orderAmounts.js +6 -9
- package/dist/cjs/wire/orderAmounts.js.map +1 -1
- package/dist/cjs/wire/refuel.d.ts +4 -1
- package/dist/cjs/wire/refuel.d.ts.map +1 -1
- package/dist/cjs/wire/refuel.js +23 -6
- package/dist/cjs/wire/refuel.js.map +1 -1
- package/dist/cjs/wire/transferable.js +3 -3
- package/dist/cjs/wire/transferable.js.map +1 -1
- package/dist/cjs/wire/withdraw.d.ts.map +1 -1
- package/dist/cjs/wire/withdraw.js +3 -3
- package/dist/cjs/wire/withdraw.js.map +1 -1
- package/dist/esm/client/PerpsClient.d.ts +17 -4
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +30 -8
- package/dist/esm/client/PerpsClient.js.map +1 -1
- package/dist/esm/decimal/arithmetic.d.ts +84 -0
- package/dist/esm/decimal/arithmetic.d.ts.map +1 -0
- package/dist/esm/decimal/arithmetic.js +110 -0
- package/dist/esm/decimal/arithmetic.js.map +1 -0
- package/dist/esm/decimal/big.d.ts +0 -2
- package/dist/esm/decimal/big.d.ts.map +1 -1
- package/dist/esm/decimal/big.js +0 -4
- package/dist/esm/decimal/big.js.map +1 -1
- package/dist/esm/decimal/compare.d.ts +45 -0
- package/dist/esm/decimal/compare.d.ts.map +1 -0
- package/dist/esm/decimal/compare.js +53 -0
- package/dist/esm/decimal/compare.js.map +1 -0
- package/dist/esm/decimal/convert.d.ts +62 -26
- package/dist/esm/decimal/convert.d.ts.map +1 -1
- package/dist/esm/decimal/convert.js +76 -25
- package/dist/esm/decimal/convert.js.map +1 -1
- package/dist/esm/decimal/decimalStringToBig.d.ts +26 -0
- package/dist/esm/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/esm/decimal/decimalStringToBig.js +40 -0
- package/dist/esm/decimal/decimalStringToBig.js.map +1 -0
- package/dist/esm/decimal/format.d.ts +4 -1
- package/dist/esm/decimal/format.d.ts.map +1 -1
- package/dist/esm/decimal/format.js +71 -66
- package/dist/esm/decimal/format.js.map +1 -1
- package/dist/esm/decimal/parse.d.ts +26 -7
- package/dist/esm/decimal/parse.d.ts.map +1 -1
- package/dist/esm/decimal/parse.js +59 -33
- package/dist/esm/decimal/parse.js.map +1 -1
- package/dist/esm/index.d.ts +13 -10
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +9 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/math/fills.d.ts +6 -3
- package/dist/esm/math/fills.d.ts.map +1 -1
- package/dist/esm/math/fills.js +31 -16
- package/dist/esm/math/fills.js.map +1 -1
- package/dist/esm/math/order.d.ts +85 -65
- package/dist/esm/math/order.d.ts.map +1 -1
- package/dist/esm/math/order.js +158 -166
- package/dist/esm/math/order.js.map +1 -1
- package/dist/esm/math/position.d.ts +155 -98
- package/dist/esm/math/position.d.ts.map +1 -1
- package/dist/esm/math/position.js +157 -155
- package/dist/esm/math/position.js.map +1 -1
- package/dist/esm/services/getGasRecommendation.js +1 -1
- package/dist/esm/services/getGasRecommendation.js.map +1 -1
- package/dist/esm/services/getQuote.d.ts +2 -2
- package/dist/esm/services/getQuote.js +1 -1
- package/dist/esm/services/resolveSubscribeQuote.d.ts +1 -1
- package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/esm/services/resolveSubscribeQuote.js +4 -3
- package/dist/esm/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/esm/transport/request.d.ts +5 -0
- package/dist/esm/transport/request.d.ts.map +1 -1
- package/dist/esm/transport/request.js +2 -2
- package/dist/esm/transport/request.js.map +1 -1
- package/dist/esm/types/api.d.ts +9 -0
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/types/provider.d.ts +26 -13
- package/dist/esm/types/provider.d.ts.map +1 -1
- package/dist/esm/types/withdrawal.d.ts +32 -7
- package/dist/esm/types/withdrawal.d.ts.map +1 -1
- package/dist/esm/utils/createSafeFunction.d.ts +9 -0
- package/dist/esm/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/esm/utils/createSafeFunction.js +19 -0
- package/dist/esm/utils/createSafeFunction.js.map +1 -0
- package/dist/esm/utils/timestampToIsoString.d.ts +15 -0
- package/dist/esm/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/esm/utils/timestampToIsoString.js +24 -0
- package/dist/esm/utils/timestampToIsoString.js.map +1 -0
- package/dist/esm/utils/warnOnce.d.ts +16 -0
- package/dist/esm/utils/warnOnce.d.ts.map +1 -1
- package/dist/esm/utils/warnOnce.js +24 -0
- package/dist/esm/utils/warnOnce.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/websocket/PerpsWsClient.d.ts +7 -0
- package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/esm/websocket/PerpsWsClient.js +20 -2
- package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
- package/dist/esm/websocket/wsLog.d.ts +12 -0
- package/dist/esm/websocket/wsLog.d.ts.map +1 -1
- package/dist/esm/websocket/wsLog.js +18 -0
- package/dist/esm/websocket/wsLog.js.map +1 -1
- package/dist/esm/wire/orderAmounts.d.ts.map +1 -1
- package/dist/esm/wire/orderAmounts.js +2 -2
- package/dist/esm/wire/orderAmounts.js.map +1 -1
- package/dist/esm/wire/refuel.d.ts +24 -14
- package/dist/esm/wire/refuel.d.ts.map +1 -1
- package/dist/esm/wire/refuel.js +38 -17
- package/dist/esm/wire/refuel.js.map +1 -1
- package/dist/esm/wire/transferable.js +3 -3
- package/dist/esm/wire/transferable.js.map +1 -1
- package/dist/esm/wire/withdraw.d.ts.map +1 -1
- package/dist/esm/wire/withdraw.js +3 -3
- package/dist/esm/wire/withdraw.js.map +1 -1
- package/dist/types/client/PerpsClient.d.ts +17 -4
- package/dist/types/client/PerpsClient.d.ts.map +1 -1
- package/dist/types/decimal/arithmetic.d.ts +84 -0
- package/dist/types/decimal/arithmetic.d.ts.map +1 -0
- package/dist/types/decimal/big.d.ts +0 -2
- package/dist/types/decimal/big.d.ts.map +1 -1
- package/dist/types/decimal/compare.d.ts +45 -0
- package/dist/types/decimal/compare.d.ts.map +1 -0
- package/dist/types/decimal/convert.d.ts +62 -26
- package/dist/types/decimal/convert.d.ts.map +1 -1
- package/dist/types/decimal/decimalStringToBig.d.ts +26 -0
- package/dist/types/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/types/decimal/format.d.ts +4 -1
- package/dist/types/decimal/format.d.ts.map +1 -1
- package/dist/types/decimal/parse.d.ts +26 -7
- package/dist/types/decimal/parse.d.ts.map +1 -1
- package/dist/types/index.d.ts +13 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/math/fills.d.ts +6 -3
- package/dist/types/math/fills.d.ts.map +1 -1
- package/dist/types/math/order.d.ts +85 -65
- package/dist/types/math/order.d.ts.map +1 -1
- package/dist/types/math/position.d.ts +155 -98
- package/dist/types/math/position.d.ts.map +1 -1
- package/dist/types/services/getQuote.d.ts +2 -2
- package/dist/types/services/resolveSubscribeQuote.d.ts +1 -1
- package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/types/transport/request.d.ts +5 -0
- package/dist/types/transport/request.d.ts.map +1 -1
- package/dist/types/types/api.d.ts +9 -0
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/types/provider.d.ts +26 -13
- package/dist/types/types/provider.d.ts.map +1 -1
- package/dist/types/types/withdrawal.d.ts +32 -7
- package/dist/types/types/withdrawal.d.ts.map +1 -1
- package/dist/types/utils/createSafeFunction.d.ts +9 -0
- package/dist/types/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/types/utils/timestampToIsoString.d.ts +15 -0
- package/dist/types/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/types/utils/warnOnce.d.ts +16 -0
- package/dist/types/utils/warnOnce.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/websocket/PerpsWsClient.d.ts +7 -0
- package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/types/websocket/wsLog.d.ts +12 -0
- package/dist/types/websocket/wsLog.d.ts.map +1 -1
- package/dist/types/wire/orderAmounts.d.ts.map +1 -1
- package/dist/types/wire/refuel.d.ts +24 -14
- package/dist/types/wire/refuel.d.ts.map +1 -1
- package/dist/types/wire/withdraw.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/client/PerpsClient.ts +48 -10
- package/src/decimal/arithmetic.ts +144 -0
- package/src/decimal/big.ts +0 -5
- package/src/decimal/compare.ts +67 -0
- package/src/decimal/convert.ts +123 -44
- package/src/decimal/decimalStringToBig.ts +47 -0
- package/src/decimal/format.ts +81 -68
- package/src/decimal/parse.ts +73 -36
- package/src/index.ts +76 -8
- package/src/math/fills.ts +32 -17
- package/src/math/order.ts +261 -216
- package/src/math/position.ts +277 -194
- package/src/services/getGasRecommendation.ts +1 -1
- package/src/services/getQuote.ts +2 -2
- package/src/services/resolveSubscribeQuote.ts +4 -3
- package/src/transport/request.ts +7 -2
- package/src/types/api.ts +10 -0
- package/src/types/provider.ts +35 -13
- package/src/types/withdrawal.ts +35 -8
- package/src/utils/createSafeFunction.ts +20 -0
- package/src/utils/timestampToIsoString.ts +31 -0
- package/src/utils/warnOnce.ts +44 -0
- package/src/version.ts +1 -1
- package/src/websocket/PerpsWsClient.ts +25 -2
- package/src/websocket/wsLog.ts +31 -0
- package/src/wire/orderAmounts.ts +3 -2
- package/src/wire/refuel.ts +56 -20
- package/src/wire/transferable.ts +3 -3
- package/src/wire/withdraw.ts +3 -5
- package/dist/cjs/decimal/requireDecimal.d.ts +0 -4
- package/dist/cjs/decimal/requireDecimal.d.ts.map +0 -1
- package/dist/cjs/decimal/requireDecimal.js +0 -17
- package/dist/cjs/decimal/requireDecimal.js.map +0 -1
- package/dist/esm/decimal/requireDecimal.d.ts +0 -11
- package/dist/esm/decimal/requireDecimal.d.ts.map +0 -1
- package/dist/esm/decimal/requireDecimal.js +0 -18
- package/dist/esm/decimal/requireDecimal.js.map +0 -1
- package/dist/types/decimal/requireDecimal.d.ts +0 -11
- package/dist/types/decimal/requireDecimal.d.ts.map +0 -1
- package/src/decimal/requireDecimal.ts +0 -21
package/src/decimal/parse.ts
CHANGED
|
@@ -1,60 +1,97 @@
|
|
|
1
|
-
import { DECIMAL_PATTERN,
|
|
1
|
+
import { DECIMAL_PATTERN, PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import Big from 'big.js'
|
|
3
|
+
import { PerpsError } from '../errors/PerpsError.js'
|
|
4
|
+
import { createSafeFunction } from '../utils/createSafeFunction.js'
|
|
5
|
+
import { decimalStringToBig } from './decimalStringToBig.js'
|
|
2
6
|
|
|
3
7
|
/**
|
|
4
|
-
*
|
|
8
|
+
* Read a decimal string as a JS float, for a chart or pixel value only. A
|
|
9
|
+
* float holds about 15 significant digits, so the result can lose precision;
|
|
10
|
+
* never use it for an amount sent to a venue.
|
|
5
11
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - Thousands separators (commas)
|
|
10
|
-
* - Percentage suffixes (%)
|
|
11
|
-
* - Whitespace
|
|
12
|
-
*
|
|
13
|
-
* @returns Parsed number; `0` for empty/blank input, `NaN` when a non-empty
|
|
14
|
-
* string contains no parseable number
|
|
12
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a decimal string
|
|
13
|
+
* or is too large for a finite float.
|
|
14
|
+
* @public
|
|
15
15
|
*/
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
export function decimalStringToNumber(value: string): number {
|
|
17
|
+
const parsed = decimalStringToBig(value).toNumber()
|
|
18
|
+
if (!Number.isFinite(parsed)) {
|
|
19
|
+
throw new PerpsError(
|
|
20
|
+
PerpsErrorCode.ValidationError,
|
|
21
|
+
`'${value}' is too large for a finite number.`
|
|
22
|
+
)
|
|
23
23
|
}
|
|
24
|
-
return
|
|
24
|
+
return parsed
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
/**
|
|
28
|
+
* {@link decimalStringToNumber}, or `undefined` with a warning when it throws.
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export const safeDecimalStringToNumber = createSafeFunction(
|
|
33
|
+
'decimalStringToNumber',
|
|
34
|
+
decimalStringToNumber
|
|
35
|
+
)
|
|
29
36
|
|
|
30
37
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* Gives back `undefined` for a missing, malformed or non-finite value, and `0` for an empty string.
|
|
38
|
+
* Narrows an unknown value to a {@link DecimalString}. No characters are
|
|
39
|
+
* removed first.
|
|
34
40
|
*
|
|
35
41
|
* @public
|
|
36
42
|
*/
|
|
37
|
-
export function
|
|
38
|
-
value
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
export function isDecimalString(value: unknown): value is string {
|
|
44
|
+
return typeof value === 'string' && DECIMAL_PATTERN.test(value)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const MAX_SPELLED_EXPONENT = 1000
|
|
48
|
+
|
|
49
|
+
function spellDecimal(value: unknown): string | undefined {
|
|
50
|
+
if (isDecimalString(value)) {
|
|
51
|
+
return value
|
|
52
|
+
}
|
|
53
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
54
|
+
return undefined
|
|
55
|
+
}
|
|
56
|
+
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
41
57
|
return undefined
|
|
42
58
|
}
|
|
43
|
-
|
|
44
|
-
|
|
59
|
+
let parsed: Big
|
|
60
|
+
try {
|
|
61
|
+
parsed = new Big(value)
|
|
62
|
+
} catch {
|
|
63
|
+
return undefined
|
|
45
64
|
}
|
|
46
|
-
|
|
65
|
+
// Spelling out an unbounded exponent builds a string of that many digits.
|
|
66
|
+
if (Math.abs(parsed.e) > MAX_SPELLED_EXPONENT) {
|
|
47
67
|
return undefined
|
|
48
68
|
}
|
|
49
|
-
|
|
50
|
-
return Number.isFinite(parsed) ? parsed : undefined
|
|
69
|
+
return (parsed.eq(0) ? new Big(0) : parsed).toFixed()
|
|
51
70
|
}
|
|
52
71
|
|
|
53
72
|
/**
|
|
54
|
-
*
|
|
73
|
+
* Read a venue value (a string or a number) as a decimal string, for a
|
|
74
|
+
* money-path value that must not go on wrong. A number or an exponent string
|
|
75
|
+
* is spelled out in full; no `$`, `%` or `,` is removed.
|
|
55
76
|
*
|
|
77
|
+
* @param tool - Provider key set on the error.
|
|
78
|
+
* @throws {PerpsError} `SDKError` naming `field` when `value` is not a finite
|
|
79
|
+
* decimal.
|
|
56
80
|
* @public
|
|
57
81
|
*/
|
|
58
|
-
export function
|
|
59
|
-
|
|
82
|
+
export function unknownToDecimalString(
|
|
83
|
+
value: unknown,
|
|
84
|
+
field: string,
|
|
85
|
+
tool: string
|
|
86
|
+
): string {
|
|
87
|
+
const decimal = spellDecimal(value)
|
|
88
|
+
if (decimal !== undefined) {
|
|
89
|
+
return decimal
|
|
90
|
+
}
|
|
91
|
+
const error = new PerpsError(
|
|
92
|
+
PerpsErrorCode.SDKError,
|
|
93
|
+
`${tool} field \`${field}\` is not a valid decimal: '${String(value)}'`
|
|
94
|
+
)
|
|
95
|
+
error.tool = tool
|
|
96
|
+
throw error
|
|
60
97
|
}
|
package/src/index.ts
CHANGED
|
@@ -17,11 +17,39 @@ export {
|
|
|
17
17
|
} from './client/createPerpsClient.js'
|
|
18
18
|
export { PerpsClient } from './client/PerpsClient.js'
|
|
19
19
|
export { requireProvider } from './client/requireProvider.js'
|
|
20
|
-
export type { BaseUnitsRounding } from './decimal/convert.js'
|
|
21
20
|
export {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
absDecimalString,
|
|
22
|
+
addDecimalString,
|
|
23
|
+
divideDecimalString,
|
|
24
|
+
divideDecimalStringRoundDown,
|
|
25
|
+
multiplyDecimalString,
|
|
26
|
+
safeAbsDecimalString,
|
|
27
|
+
safeAddDecimalString,
|
|
28
|
+
safeDivideDecimalString,
|
|
29
|
+
safeDivideDecimalStringRoundDown,
|
|
30
|
+
safeMultiplyDecimalString,
|
|
31
|
+
safeSubtractDecimalString,
|
|
32
|
+
subtractDecimalString,
|
|
33
|
+
} from './decimal/arithmetic.js'
|
|
34
|
+
export {
|
|
35
|
+
compareDecimalStrings,
|
|
36
|
+
isDecimalStringGreaterThan,
|
|
37
|
+
isDecimalStringZero,
|
|
38
|
+
safeCompareDecimalStrings,
|
|
39
|
+
safeIsDecimalStringGreaterThan,
|
|
40
|
+
safeIsDecimalStringZero,
|
|
41
|
+
} from './decimal/compare.js'
|
|
42
|
+
export type { DecimalRounding } from './decimal/convert.js'
|
|
43
|
+
export {
|
|
44
|
+
decimalStringToScaledInteger,
|
|
24
45
|
numberToDecimalString,
|
|
46
|
+
roundDecimalString,
|
|
47
|
+
safeDecimalStringToScaledInteger,
|
|
48
|
+
safeNumberToDecimalString,
|
|
49
|
+
safeRoundDecimalString,
|
|
50
|
+
safeScaledIntegerToDecimalString,
|
|
51
|
+
safeTruncateDecimal,
|
|
52
|
+
scaledIntegerToDecimalString,
|
|
25
53
|
truncateDecimal,
|
|
26
54
|
} from './decimal/convert.js'
|
|
27
55
|
export type { FormatOptions, RoundingMode } from './decimal/format.js'
|
|
@@ -33,7 +61,12 @@ export {
|
|
|
33
61
|
formatSignedUsd,
|
|
34
62
|
formatUsd,
|
|
35
63
|
} from './decimal/format.js'
|
|
36
|
-
export {
|
|
64
|
+
export {
|
|
65
|
+
decimalStringToNumber,
|
|
66
|
+
isDecimalString,
|
|
67
|
+
safeDecimalStringToNumber,
|
|
68
|
+
unknownToDecimalString,
|
|
69
|
+
} from './decimal/parse.js'
|
|
37
70
|
export { PerpsErrorMessage } from './errors/constants.js'
|
|
38
71
|
export { PerpsError } from './errors/PerpsError.js'
|
|
39
72
|
export {
|
|
@@ -43,7 +76,7 @@ export {
|
|
|
43
76
|
} from './math/fills.js'
|
|
44
77
|
export type { ExpectedPnl } from './math/order.js'
|
|
45
78
|
export {
|
|
46
|
-
|
|
79
|
+
applySlippageToPrice,
|
|
47
80
|
buildQuote,
|
|
48
81
|
calculateExpectedPnl,
|
|
49
82
|
calculateRealizedPnlPercent,
|
|
@@ -54,6 +87,17 @@ export {
|
|
|
54
87
|
estimateRealizedPnl,
|
|
55
88
|
findMatchingPosition,
|
|
56
89
|
resolveCloseSize,
|
|
90
|
+
safeApplySlippageToPrice,
|
|
91
|
+
safeBuildQuote,
|
|
92
|
+
safeCalculateExpectedPnl,
|
|
93
|
+
safeCalculateRealizedPnlPercent,
|
|
94
|
+
safeCalculateSize,
|
|
95
|
+
safeCalculateTriggerPercent,
|
|
96
|
+
safeCalculateTriggerPrice,
|
|
97
|
+
safeEstimateFees,
|
|
98
|
+
safeEstimateRealizedPnl,
|
|
99
|
+
safeResolveCloseSize,
|
|
100
|
+
safeWalkOrderbook,
|
|
57
101
|
walkOrderbook,
|
|
58
102
|
} from './math/order.js'
|
|
59
103
|
export {
|
|
@@ -66,10 +110,24 @@ export {
|
|
|
66
110
|
calculateUnrealizedPnl,
|
|
67
111
|
estimateAverageEntryPrice,
|
|
68
112
|
estimateLiquidationPrice,
|
|
113
|
+
estimateLiquidationPriceAtMarketRate,
|
|
69
114
|
estimateNewLeverage,
|
|
70
115
|
estimateUnrealizedPnl,
|
|
71
116
|
positionSupportsMarginAdjustment,
|
|
72
117
|
positionSupportsMarginRemoval,
|
|
118
|
+
safeCalculateEffectiveLeverage,
|
|
119
|
+
safeCalculateLiquidationDistance,
|
|
120
|
+
safeCalculateNotionalValue,
|
|
121
|
+
safeCalculateRealizedPnl,
|
|
122
|
+
safeCalculateRequiredMargin,
|
|
123
|
+
safeCalculateRoe,
|
|
124
|
+
safeCalculateUnrealizedPnl,
|
|
125
|
+
safeEstimateAverageEntryPrice,
|
|
126
|
+
safeEstimateLiquidationPrice,
|
|
127
|
+
safeEstimateLiquidationPriceAtMarketRate,
|
|
128
|
+
safeEstimateNewLeverage,
|
|
129
|
+
safeEstimateUnrealizedPnl,
|
|
130
|
+
safeWouldImmediatelyLiquidate,
|
|
73
131
|
wouldImmediatelyLiquidate,
|
|
74
132
|
} from './math/position.js'
|
|
75
133
|
// Registries
|
|
@@ -172,6 +230,7 @@ export type {
|
|
|
172
230
|
GetPortfolioHistoryParams,
|
|
173
231
|
GetSetupParams,
|
|
174
232
|
GetWithdrawableBalancesParams,
|
|
233
|
+
GetWithdrawalTypesParams,
|
|
175
234
|
GetWithdrawFlowParams,
|
|
176
235
|
ModifyOrdersParams,
|
|
177
236
|
PerpsClientOptions,
|
|
@@ -218,6 +277,7 @@ export type {
|
|
|
218
277
|
ProviderGetPositionsParams,
|
|
219
278
|
ProviderGetQuoteParams,
|
|
220
279
|
ProviderGetWithdrawableBalancesParams,
|
|
280
|
+
ProviderGetWithdrawalTypesParams,
|
|
221
281
|
ProviderGetWithdrawFlowParams,
|
|
222
282
|
QuoteListener,
|
|
223
283
|
SignActionProgress,
|
|
@@ -226,7 +286,8 @@ export type {
|
|
|
226
286
|
export type {
|
|
227
287
|
ProviderWithdrawableBalance,
|
|
228
288
|
WithdrawableBalance,
|
|
229
|
-
|
|
289
|
+
WithdrawalSourceTypes,
|
|
290
|
+
WithdrawalTypeOption,
|
|
230
291
|
WithdrawFlow,
|
|
231
292
|
WithdrawFlowReady,
|
|
232
293
|
WithdrawFlowSetupRequired,
|
|
@@ -264,7 +325,11 @@ export {
|
|
|
264
325
|
signTypedData,
|
|
265
326
|
signTypedDataWithSigner,
|
|
266
327
|
} from './utils/signTypedData.js'
|
|
267
|
-
export {
|
|
328
|
+
export {
|
|
329
|
+
safeTimestampToIsoString,
|
|
330
|
+
timestampToIsoString,
|
|
331
|
+
} from './utils/timestampToIsoString.js'
|
|
332
|
+
export { createWarnOnce, warnSkippedVenueRow } from './utils/warnOnce.js'
|
|
268
333
|
// Version
|
|
269
334
|
export { name, version } from './version.js'
|
|
270
335
|
export { cachePromise } from './websocket/cachePromise.js'
|
|
@@ -296,7 +361,10 @@ export type {
|
|
|
296
361
|
} from './wire/orderAmounts.js'
|
|
297
362
|
export { calculateOrderAmounts } from './wire/orderAmounts.js'
|
|
298
363
|
export type { RefuelAmountInput } from './wire/refuel.js'
|
|
299
|
-
export {
|
|
364
|
+
export {
|
|
365
|
+
calculateRefuelAmount,
|
|
366
|
+
REFUEL_FEE_MARGIN_PERCENT,
|
|
367
|
+
} from './wire/refuel.js'
|
|
300
368
|
export { snapOrderPrice, snapOrderSize } from './wire/snap.js'
|
|
301
369
|
export { calculateTransferable } from './wire/transferable.js'
|
|
302
370
|
export { calculateWithdrawMax } from './wire/withdraw.js'
|
package/src/math/fills.ts
CHANGED
|
@@ -3,7 +3,9 @@ import {
|
|
|
3
3
|
FillClassification,
|
|
4
4
|
OrderSide,
|
|
5
5
|
} from '@lifi/perps-types'
|
|
6
|
-
import
|
|
6
|
+
import Big from 'big.js'
|
|
7
|
+
import { isDecimalStringZero } from '../decimal/compare.js'
|
|
8
|
+
import { isDecimalString } from '../decimal/parse.js'
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Re-exported fill taxonomy used by {@link classifyFillFromPosition}.
|
|
@@ -18,45 +20,51 @@ export { FillClassification }
|
|
|
18
20
|
*
|
|
19
21
|
* @param startPosition Signed position held BEFORE this fill (`> 0` long,
|
|
20
22
|
* `< 0` short, `0` flat).
|
|
21
|
-
* @param
|
|
22
|
-
* @
|
|
23
|
+
* @param sz Unsigned fill size.
|
|
24
|
+
* @returns `BUY` or `SELL` when `startPosition` or `sz` is not a decimal
|
|
25
|
+
* string, so one malformed venue fill still maps.
|
|
23
26
|
* @public
|
|
24
27
|
*/
|
|
25
28
|
export function classifyFillFromPosition(
|
|
26
29
|
startPosition: DecimalString,
|
|
27
|
-
side:
|
|
30
|
+
side: OrderSide,
|
|
28
31
|
sz: DecimalString
|
|
29
32
|
): FillClassification {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
if (!isDecimalString(startPosition) || !isDecimalString(sz)) {
|
|
34
|
+
return side === OrderSide.BUY
|
|
35
|
+
? FillClassification.BUY
|
|
36
|
+
: FillClassification.SELL
|
|
37
|
+
}
|
|
38
|
+
const start = new Big(startPosition)
|
|
39
|
+
const size = new Big(sz)
|
|
40
|
+
const end = side === OrderSide.BUY ? start.plus(size) : start.minus(size)
|
|
33
41
|
|
|
34
|
-
if (start
|
|
35
|
-
return end
|
|
42
|
+
if (start.eq(0)) {
|
|
43
|
+
return end.gt(0)
|
|
36
44
|
? FillClassification.OPENED_LONG
|
|
37
45
|
: FillClassification.OPENED_SHORT
|
|
38
46
|
}
|
|
39
47
|
|
|
40
|
-
if (start
|
|
41
|
-
if (end
|
|
48
|
+
if (start.gt(0)) {
|
|
49
|
+
if (end.eq(0)) {
|
|
42
50
|
return FillClassification.CLOSED_LONG
|
|
43
51
|
}
|
|
44
|
-
if (end
|
|
52
|
+
if (end.lt(0)) {
|
|
45
53
|
return FillClassification.SWITCHED_SHORT
|
|
46
54
|
}
|
|
47
|
-
if (end
|
|
55
|
+
if (end.gt(start)) {
|
|
48
56
|
return FillClassification.INCREASED_LONG
|
|
49
57
|
}
|
|
50
58
|
return FillClassification.REDUCED_LONG
|
|
51
59
|
}
|
|
52
60
|
|
|
53
|
-
if (end
|
|
61
|
+
if (end.eq(0)) {
|
|
54
62
|
return FillClassification.CLOSED_SHORT
|
|
55
63
|
}
|
|
56
|
-
if (end
|
|
64
|
+
if (end.gt(0)) {
|
|
57
65
|
return FillClassification.SWITCHED_LONG
|
|
58
66
|
}
|
|
59
|
-
if (end
|
|
67
|
+
if (end.lt(start)) {
|
|
60
68
|
return FillClassification.INCREASED_SHORT
|
|
61
69
|
}
|
|
62
70
|
return FillClassification.REDUCED_SHORT
|
|
@@ -66,13 +74,20 @@ export function classifyFillFromPosition(
|
|
|
66
74
|
* Classify a fill as open or close based on realizedPnl.
|
|
67
75
|
* @deprecated Use `Fill.classification` instead — it uses startPosition
|
|
68
76
|
* for accurate open/increase/reduce/close/reverse classification.
|
|
77
|
+
* @returns `BUY` or `SELL` when `realizedPnl` is a string that is not a
|
|
78
|
+
* decimal string.
|
|
69
79
|
* @public
|
|
70
80
|
*/
|
|
71
81
|
export function classifyFill(
|
|
72
82
|
side: OrderSide,
|
|
73
83
|
realizedPnl: DecimalString | null | undefined
|
|
74
84
|
): FillClassification {
|
|
75
|
-
|
|
85
|
+
if (realizedPnl != null && !isDecimalString(realizedPnl)) {
|
|
86
|
+
return side === OrderSide.BUY
|
|
87
|
+
? FillClassification.BUY
|
|
88
|
+
: FillClassification.SELL
|
|
89
|
+
}
|
|
90
|
+
const isClose = realizedPnl != null && !isDecimalStringZero(realizedPnl)
|
|
76
91
|
if (side === OrderSide.BUY) {
|
|
77
92
|
return isClose
|
|
78
93
|
? FillClassification.CLOSED_SHORT
|