@lifi/perps-sdk 23.1.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 +6 -2
- package/dist/cjs/decimal/compare.d.ts.map +1 -1
- package/dist/cjs/decimal/compare.js +15 -2
- package/dist/cjs/decimal/compare.js.map +1 -1
- 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 -52
- package/dist/cjs/decimal/format.js.map +1 -1
- package/dist/cjs/decimal/parse.d.ts +4 -4
- package/dist/cjs/decimal/parse.d.ts.map +1 -1
- package/dist/cjs/decimal/parse.js +42 -25
- package/dist/cjs/decimal/parse.js.map +1 -1
- package/dist/cjs/index.d.ts +13 -11
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +64 -8
- 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 +39 -5
- package/dist/esm/decimal/compare.d.ts.map +1 -1
- package/dist/esm/decimal/compare.js +45 -5
- package/dist/esm/decimal/compare.js.map +1 -1
- 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 -70
- package/dist/esm/decimal/format.js.map +1 -1
- package/dist/esm/decimal/parse.d.ts +22 -13
- package/dist/esm/decimal/parse.d.ts.map +1 -1
- package/dist/esm/decimal/parse.js +56 -46
- package/dist/esm/decimal/parse.js.map +1 -1
- package/dist/esm/index.d.ts +13 -11
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +9 -7
- 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 +39 -5
- package/dist/types/decimal/compare.d.ts.map +1 -1
- 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 +22 -13
- package/dist/types/decimal/parse.d.ts.map +1 -1
- package/dist/types/index.d.ts +13 -11
- 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 +60 -10
- package/src/decimal/convert.ts +123 -44
- package/src/decimal/decimalStringToBig.ts +47 -0
- package/src/decimal/format.ts +81 -72
- package/src/decimal/parse.ts +71 -61
- package/src/index.ts +73 -10
- 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 -12
- package/dist/cjs/decimal/requireDecimal.js.map +0 -1
- package/dist/esm/decimal/requireDecimal.d.ts +0 -5
- package/dist/esm/decimal/requireDecimal.d.ts.map +0 -1
- package/dist/esm/decimal/requireDecimal.js +0 -7
- package/dist/esm/decimal/requireDecimal.js.map +0 -1
- package/dist/types/decimal/requireDecimal.d.ts +0 -5
- package/dist/types/decimal/requireDecimal.d.ts.map +0 -1
- package/src/decimal/requireDecimal.ts +0 -8
package/src/decimal/parse.ts
CHANGED
|
@@ -1,87 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
type DecimalString,
|
|
4
|
-
PerpsErrorCode,
|
|
5
|
-
} from '@lifi/perps-types'
|
|
1
|
+
import { DECIMAL_PATTERN, PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import Big from 'big.js'
|
|
6
3
|
import { PerpsError } from '../errors/PerpsError.js'
|
|
4
|
+
import { createSafeFunction } from '../utils/createSafeFunction.js'
|
|
5
|
+
import { decimalStringToBig } from './decimalStringToBig.js'
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
|
-
*
|
|
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.
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* - Thousands separators (commas)
|
|
15
|
-
* - Percentage suffixes (%)
|
|
16
|
-
* - Whitespace
|
|
17
|
-
*
|
|
18
|
-
* @returns Parsed number; `0` for empty/blank input, `NaN` when a non-empty
|
|
19
|
-
* 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
|
|
20
15
|
*/
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
+
)
|
|
28
23
|
}
|
|
29
|
-
return
|
|
24
|
+
return parsed
|
|
30
25
|
}
|
|
31
26
|
|
|
32
|
-
const FORMATTED_NUMBER =
|
|
33
|
-
/^(?:[+-]\s*)?(?:\$\s*)?(?:(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:\s*(?:%|USD))?$/i
|
|
34
|
-
|
|
35
27
|
/**
|
|
36
|
-
*
|
|
37
|
-
* separators and a percentage suffix around the number.
|
|
38
|
-
* Gives back `undefined` for a missing, malformed or non-finite value, and `0` for an empty string.
|
|
28
|
+
* {@link decimalStringToNumber}, or `undefined` with a warning when it throws.
|
|
39
29
|
*
|
|
40
30
|
* @public
|
|
41
31
|
*/
|
|
42
|
-
export
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return undefined
|
|
47
|
-
}
|
|
48
|
-
if (value.trim() === '') {
|
|
49
|
-
return toFloat(value)
|
|
50
|
-
}
|
|
51
|
-
if (!FORMATTED_NUMBER.test(value.trim())) {
|
|
52
|
-
return undefined
|
|
53
|
-
}
|
|
54
|
-
const parsed = toFloat(value)
|
|
55
|
-
return Number.isFinite(parsed) ? parsed : undefined
|
|
56
|
-
}
|
|
32
|
+
export const safeDecimalStringToNumber = createSafeFunction(
|
|
33
|
+
'decimalStringToNumber',
|
|
34
|
+
decimalStringToNumber
|
|
35
|
+
)
|
|
57
36
|
|
|
58
37
|
/**
|
|
59
|
-
* Narrows an unknown value to a {@link DecimalString}.
|
|
38
|
+
* Narrows an unknown value to a {@link DecimalString}. No characters are
|
|
39
|
+
* removed first.
|
|
60
40
|
*
|
|
61
41
|
* @public
|
|
62
42
|
*/
|
|
63
|
-
export function isDecimalString(value: unknown): value is
|
|
43
|
+
export function isDecimalString(value: unknown): value is string {
|
|
64
44
|
return typeof value === 'string' && DECIMAL_PATTERN.test(value)
|
|
65
45
|
}
|
|
66
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)) {
|
|
57
|
+
return undefined
|
|
58
|
+
}
|
|
59
|
+
let parsed: Big
|
|
60
|
+
try {
|
|
61
|
+
parsed = new Big(value)
|
|
62
|
+
} catch {
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
// Spelling out an unbounded exponent builds a string of that many digits.
|
|
66
|
+
if (Math.abs(parsed.e) > MAX_SPELLED_EXPONENT) {
|
|
67
|
+
return undefined
|
|
68
|
+
}
|
|
69
|
+
return (parsed.eq(0) ? new Big(0) : parsed).toFixed()
|
|
70
|
+
}
|
|
71
|
+
|
|
67
72
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
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.
|
|
71
76
|
*
|
|
72
|
-
* @
|
|
73
|
-
* @throws {PerpsError} `
|
|
77
|
+
* @param tool - Provider key set on the error.
|
|
78
|
+
* @throws {PerpsError} `SDKError` naming `field` when `value` is not a finite
|
|
79
|
+
* decimal.
|
|
74
80
|
* @public
|
|
75
81
|
*/
|
|
76
|
-
export function
|
|
77
|
-
value:
|
|
78
|
-
field: string
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
)
|
|
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
|
|
85
90
|
}
|
|
86
|
-
|
|
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
|
|
87
97
|
}
|
package/src/index.ts
CHANGED
|
@@ -17,12 +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 { isDecimalStringGreaterThan } from './decimal/compare.js'
|
|
21
|
-
export type { BaseUnitsRounding } from './decimal/convert.js'
|
|
22
20
|
export {
|
|
23
|
-
|
|
24
|
-
|
|
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,
|
|
25
45
|
numberToDecimalString,
|
|
46
|
+
roundDecimalString,
|
|
47
|
+
safeDecimalStringToScaledInteger,
|
|
48
|
+
safeNumberToDecimalString,
|
|
49
|
+
safeRoundDecimalString,
|
|
50
|
+
safeScaledIntegerToDecimalString,
|
|
51
|
+
safeTruncateDecimal,
|
|
52
|
+
scaledIntegerToDecimalString,
|
|
26
53
|
truncateDecimal,
|
|
27
54
|
} from './decimal/convert.js'
|
|
28
55
|
export type { FormatOptions, RoundingMode } from './decimal/format.js'
|
|
@@ -35,9 +62,10 @@ export {
|
|
|
35
62
|
formatUsd,
|
|
36
63
|
} from './decimal/format.js'
|
|
37
64
|
export {
|
|
65
|
+
decimalStringToNumber,
|
|
38
66
|
isDecimalString,
|
|
39
|
-
|
|
40
|
-
|
|
67
|
+
safeDecimalStringToNumber,
|
|
68
|
+
unknownToDecimalString,
|
|
41
69
|
} from './decimal/parse.js'
|
|
42
70
|
export { PerpsErrorMessage } from './errors/constants.js'
|
|
43
71
|
export { PerpsError } from './errors/PerpsError.js'
|
|
@@ -48,7 +76,7 @@ export {
|
|
|
48
76
|
} from './math/fills.js'
|
|
49
77
|
export type { ExpectedPnl } from './math/order.js'
|
|
50
78
|
export {
|
|
51
|
-
|
|
79
|
+
applySlippageToPrice,
|
|
52
80
|
buildQuote,
|
|
53
81
|
calculateExpectedPnl,
|
|
54
82
|
calculateRealizedPnlPercent,
|
|
@@ -59,6 +87,17 @@ export {
|
|
|
59
87
|
estimateRealizedPnl,
|
|
60
88
|
findMatchingPosition,
|
|
61
89
|
resolveCloseSize,
|
|
90
|
+
safeApplySlippageToPrice,
|
|
91
|
+
safeBuildQuote,
|
|
92
|
+
safeCalculateExpectedPnl,
|
|
93
|
+
safeCalculateRealizedPnlPercent,
|
|
94
|
+
safeCalculateSize,
|
|
95
|
+
safeCalculateTriggerPercent,
|
|
96
|
+
safeCalculateTriggerPrice,
|
|
97
|
+
safeEstimateFees,
|
|
98
|
+
safeEstimateRealizedPnl,
|
|
99
|
+
safeResolveCloseSize,
|
|
100
|
+
safeWalkOrderbook,
|
|
62
101
|
walkOrderbook,
|
|
63
102
|
} from './math/order.js'
|
|
64
103
|
export {
|
|
@@ -71,10 +110,24 @@ export {
|
|
|
71
110
|
calculateUnrealizedPnl,
|
|
72
111
|
estimateAverageEntryPrice,
|
|
73
112
|
estimateLiquidationPrice,
|
|
113
|
+
estimateLiquidationPriceAtMarketRate,
|
|
74
114
|
estimateNewLeverage,
|
|
75
115
|
estimateUnrealizedPnl,
|
|
76
116
|
positionSupportsMarginAdjustment,
|
|
77
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,
|
|
78
131
|
wouldImmediatelyLiquidate,
|
|
79
132
|
} from './math/position.js'
|
|
80
133
|
// Registries
|
|
@@ -177,6 +230,7 @@ export type {
|
|
|
177
230
|
GetPortfolioHistoryParams,
|
|
178
231
|
GetSetupParams,
|
|
179
232
|
GetWithdrawableBalancesParams,
|
|
233
|
+
GetWithdrawalTypesParams,
|
|
180
234
|
GetWithdrawFlowParams,
|
|
181
235
|
ModifyOrdersParams,
|
|
182
236
|
PerpsClientOptions,
|
|
@@ -223,6 +277,7 @@ export type {
|
|
|
223
277
|
ProviderGetPositionsParams,
|
|
224
278
|
ProviderGetQuoteParams,
|
|
225
279
|
ProviderGetWithdrawableBalancesParams,
|
|
280
|
+
ProviderGetWithdrawalTypesParams,
|
|
226
281
|
ProviderGetWithdrawFlowParams,
|
|
227
282
|
QuoteListener,
|
|
228
283
|
SignActionProgress,
|
|
@@ -231,7 +286,8 @@ export type {
|
|
|
231
286
|
export type {
|
|
232
287
|
ProviderWithdrawableBalance,
|
|
233
288
|
WithdrawableBalance,
|
|
234
|
-
|
|
289
|
+
WithdrawalSourceTypes,
|
|
290
|
+
WithdrawalTypeOption,
|
|
235
291
|
WithdrawFlow,
|
|
236
292
|
WithdrawFlowReady,
|
|
237
293
|
WithdrawFlowSetupRequired,
|
|
@@ -269,7 +325,11 @@ export {
|
|
|
269
325
|
signTypedData,
|
|
270
326
|
signTypedDataWithSigner,
|
|
271
327
|
} from './utils/signTypedData.js'
|
|
272
|
-
export {
|
|
328
|
+
export {
|
|
329
|
+
safeTimestampToIsoString,
|
|
330
|
+
timestampToIsoString,
|
|
331
|
+
} from './utils/timestampToIsoString.js'
|
|
332
|
+
export { createWarnOnce, warnSkippedVenueRow } from './utils/warnOnce.js'
|
|
273
333
|
// Version
|
|
274
334
|
export { name, version } from './version.js'
|
|
275
335
|
export { cachePromise } from './websocket/cachePromise.js'
|
|
@@ -301,7 +361,10 @@ export type {
|
|
|
301
361
|
} from './wire/orderAmounts.js'
|
|
302
362
|
export { calculateOrderAmounts } from './wire/orderAmounts.js'
|
|
303
363
|
export type { RefuelAmountInput } from './wire/refuel.js'
|
|
304
|
-
export {
|
|
364
|
+
export {
|
|
365
|
+
calculateRefuelAmount,
|
|
366
|
+
REFUEL_FEE_MARGIN_PERCENT,
|
|
367
|
+
} from './wire/refuel.js'
|
|
305
368
|
export { snapOrderPrice, snapOrderSize } from './wire/snap.js'
|
|
306
369
|
export { calculateTransferable } from './wire/transferable.js'
|
|
307
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
|