@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderAmounts.js","sourceRoot":"","sources":["../../../src/wire/orderAmounts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orderAmounts.js","sourceRoot":"","sources":["../../../src/wire/orderAmounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AA2BzC,SAAS,eAAe,CAAC,KAAoB;IAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AACrC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1C,IACE,MAAM,KAAK,IAAI;QACf,KAAK,KAAK,IAAI;QACd,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,QAAQ,IAAI,CAAC,EACb,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GACb,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,KAAK,CAAC,MAAM;QACd,CAAC,CAAC,IAAI,KAAK,UAAU;YACnB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;YAC7B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;IACnD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAClD,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChD,OAAO;QACL,MAAM,EACJ,IAAI,KAAK,QAAQ;YACf,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;QAClD,IAAI;QACJ,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE;KAC7B,CAAA;AACH,CAAC"}
|
|
@@ -1,27 +1,37 @@
|
|
|
1
1
|
import { type DecimalString } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Headroom, in percent, that {@link calculateRefuelAmount} adds over the gas
|
|
4
|
+
* deficit to pay the refuel route's own swap and bridge fees.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare const REFUEL_FEE_MARGIN_PERCENT = 20;
|
|
2
9
|
/** @public */
|
|
3
10
|
export interface RefuelAmountInput {
|
|
4
|
-
/**
|
|
5
|
-
|
|
11
|
+
/** Native gas amount the LI.FI gas suggestion recommends, in base units. */
|
|
12
|
+
recommendedAmount: DecimalString;
|
|
13
|
+
/** USD value of `recommendedAmount`. */
|
|
14
|
+
recommendedUsd: DecimalString;
|
|
15
|
+
/** Native balance the wallet holds on the recommendation's chain, in base units. */
|
|
16
|
+
nativeBalance: DecimalString;
|
|
6
17
|
/** USD price of one whole source token. */
|
|
7
18
|
priceUsd: DecimalString;
|
|
8
19
|
/** Decimals of the source token, which the result is spelled to exactly. */
|
|
9
20
|
decimals: number;
|
|
10
21
|
}
|
|
11
22
|
/**
|
|
12
|
-
* Source-token amount
|
|
13
|
-
* the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* The quotient does not terminate for most prices, which is why this is a
|
|
18
|
-
* big.js primitive: an 18-decimal token needs a ceiling at 10^-18, far past
|
|
19
|
-
* what a `number` can carry.
|
|
23
|
+
* Source-token amount that buys the native gas the wallet lacks: the part of
|
|
24
|
+
* the recommendation above `nativeBalance`, valued pro rata on
|
|
25
|
+
* `recommendedUsd`, plus {@link REFUEL_FEE_MARGIN_PERCENT}. Rounded **up**
|
|
26
|
+
* onto the token's decimal grid so a refuel never lands short, and spelled
|
|
27
|
+
* with trailing zeros to `decimals` to seed an amount input.
|
|
20
28
|
*
|
|
21
|
-
* @returns `undefined` when
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
29
|
+
* @returns `undefined` when the wallet already holds the recommendation, or
|
|
30
|
+
* when `recommendedAmount`, `recommendedUsd` or `priceUsd` is not greater
|
|
31
|
+
* than zero: a route with nothing to refuel, not a failure.
|
|
32
|
+
* @throws {PerpsError} `ValidationError` when a base-unit field is not an
|
|
33
|
+
* integer string, a USD field is not a {@link DecimalString}, or `decimals`
|
|
34
|
+
* is not a non-negative integer.
|
|
25
35
|
* @public
|
|
26
36
|
*/
|
|
27
37
|
export declare function calculateRefuelAmount(input: RefuelAmountInput): DecimalString | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refuel.d.ts","sourceRoot":"","sources":["../../../src/wire/refuel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"refuel.d.ts","sourceRoot":"","sources":["../../../src/wire/refuel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,mBAAmB,CAAA;AAOtE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAE3C,cAAc;AACd,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,iBAAiB,EAAE,aAAa,CAAA;IAChC,wCAAwC;IACxC,cAAc,EAAE,aAAa,CAAA;IAC7B,oFAAoF;IACpF,aAAa,EAAE,aAAa,CAAA;IAC5B,2CAA2C;IAC3C,QAAQ,EAAE,aAAa,CAAA;IACvB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;CACjB;AAYD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,GACvB,aAAa,GAAG,SAAS,CA8B3B"}
|
package/dist/esm/wire/refuel.js
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
1
|
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
2
|
import { DivBig } from '../decimal/big.js';
|
|
3
|
-
import {
|
|
3
|
+
import { BASE_UNITS_PATTERN } from '../decimal/convert.js';
|
|
4
|
+
import { decimalStringToBig } from '../decimal/decimalStringToBig.js';
|
|
4
5
|
import { PerpsError } from '../errors/PerpsError.js';
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* recommendation. The result keeps trailing zeros to `decimals`, so it seeds
|
|
9
|
-
* an amount input at the token's own precision.
|
|
7
|
+
* Headroom, in percent, that {@link calculateRefuelAmount} adds over the gas
|
|
8
|
+
* deficit to pay the refuel route's own swap and bridge fees.
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export const REFUEL_FEE_MARGIN_PERCENT = 20;
|
|
13
|
+
function requireBaseUnits(value, field) {
|
|
14
|
+
if (!BASE_UNITS_PATTERN.test(value)) {
|
|
15
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid \`${field}\`: '${value}' is not an integer base-unit string.`);
|
|
16
|
+
}
|
|
17
|
+
return new DivBig(value);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Source-token amount that buys the native gas the wallet lacks: the part of
|
|
21
|
+
* the recommendation above `nativeBalance`, valued pro rata on
|
|
22
|
+
* `recommendedUsd`, plus {@link REFUEL_FEE_MARGIN_PERCENT}. Rounded **up**
|
|
23
|
+
* onto the token's decimal grid so a refuel never lands short, and spelled
|
|
24
|
+
* with trailing zeros to `decimals` to seed an amount input.
|
|
14
25
|
*
|
|
15
|
-
* @returns `undefined` when
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
26
|
+
* @returns `undefined` when the wallet already holds the recommendation, or
|
|
27
|
+
* when `recommendedAmount`, `recommendedUsd` or `priceUsd` is not greater
|
|
28
|
+
* than zero: a route with nothing to refuel, not a failure.
|
|
29
|
+
* @throws {PerpsError} `ValidationError` when a base-unit field is not an
|
|
30
|
+
* integer string, a USD field is not a {@link DecimalString}, or `decimals`
|
|
31
|
+
* is not a non-negative integer.
|
|
19
32
|
* @public
|
|
20
33
|
*/
|
|
21
34
|
export function calculateRefuelAmount(input) {
|
|
@@ -23,13 +36,21 @@ export function calculateRefuelAmount(input) {
|
|
|
23
36
|
if (!Number.isInteger(decimals) || decimals < 0) {
|
|
24
37
|
throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid \`decimals\` for a refuel amount: ${decimals}`);
|
|
25
38
|
}
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
39
|
+
const recommended = requireBaseUnits(input.recommendedAmount, 'recommendedAmount');
|
|
40
|
+
const balance = requireBaseUnits(input.nativeBalance, 'nativeBalance');
|
|
41
|
+
const recommendedUsd = decimalStringToBig(input.recommendedUsd);
|
|
42
|
+
const priceUsd = decimalStringToBig(input.priceUsd);
|
|
43
|
+
const deficit = recommended.minus(balance);
|
|
44
|
+
if (!recommended.gt(0) ||
|
|
45
|
+
!recommendedUsd.gt(0) ||
|
|
46
|
+
!priceUsd.gt(0) ||
|
|
47
|
+
!deficit.gt(0)) {
|
|
29
48
|
return undefined;
|
|
30
49
|
}
|
|
31
|
-
return
|
|
32
|
-
.
|
|
50
|
+
return recommendedUsd
|
|
51
|
+
.times(deficit)
|
|
52
|
+
.times(100 + REFUEL_FEE_MARGIN_PERCENT)
|
|
53
|
+
.div(recommended.times(100).times(priceUsd))
|
|
33
54
|
.round(decimals, DivBig.roundUp)
|
|
34
55
|
.toFixed(decimals);
|
|
35
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refuel.js","sourceRoot":"","sources":["../../../src/wire/refuel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"refuel.js","sourceRoot":"","sources":["../../../src/wire/refuel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAgB3C,SAAS,gBAAgB,CAAC,KAAoB,EAAE,KAAa;IAC3D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,aAAa,KAAK,QAAQ,KAAK,uCAAuC,CACvE,CAAA;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAwB;IAExB,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,6CAA6C,QAAQ,EAAE,CACxD,CAAA;IACH,CAAC;IACD,MAAM,WAAW,GAAG,gBAAgB,CAClC,KAAK,CAAC,iBAAiB,EACvB,mBAAmB,CACpB,CAAA;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IACtE,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1C,IACE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EACd,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,cAAc;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,KAAK,CAAC,GAAG,GAAG,yBAAyB,CAAC;SACtC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC3C,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;SAC/B,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decimalStringToBig } from '../decimal/decimalStringToBig.js';
|
|
2
2
|
/**
|
|
3
3
|
* The part of `units` that a venue-wide free figure releases: never below
|
|
4
4
|
* zero, never above the units held. `Balance.transferable` on every provider
|
|
@@ -12,8 +12,8 @@ import { requireDecimal } from '../decimal/requireDecimal.js';
|
|
|
12
12
|
* @public
|
|
13
13
|
*/
|
|
14
14
|
export function calculateTransferable(venueFigure, units) {
|
|
15
|
-
const figure =
|
|
16
|
-
const held =
|
|
15
|
+
const figure = decimalStringToBig(venueFigure);
|
|
16
|
+
const held = decimalStringToBig(units);
|
|
17
17
|
if (figure.lt(0)) {
|
|
18
18
|
return '0';
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferable.js","sourceRoot":"","sources":["../../../src/wire/transferable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transferable.js","sourceRoot":"","sources":["../../../src/wire/transferable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAA0B,EAC1B,KAAoB;IAEpB,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../src/wire/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,IAAI,CACP,mBAAmB,EACnB,WAAW,GAAG,eAAe,GAAG,eAAe,CAChD,GACA,aAAa,
|
|
1
|
+
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../src/wire/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,IAAI,CACP,mBAAmB,EACnB,WAAW,GAAG,eAAe,GAAG,eAAe,CAChD,GACA,aAAa,CAOf"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decimalStringToBig } from '../decimal/decimalStringToBig.js';
|
|
2
2
|
/**
|
|
3
3
|
* Largest `amount` a withdrawable row can fund: `available` when the venue
|
|
4
4
|
* deducts the fee from the amount or publishes no fee, and
|
|
@@ -10,11 +10,11 @@ import { requireDecimal } from '../decimal/requireDecimal.js';
|
|
|
10
10
|
* @public
|
|
11
11
|
*/
|
|
12
12
|
export function calculateWithdrawMax(row) {
|
|
13
|
-
const available =
|
|
13
|
+
const available = decimalStringToBig(row.available);
|
|
14
14
|
if (row.isFeeDeducted !== false || row.withdrawalFee === undefined) {
|
|
15
15
|
return available.toFixed();
|
|
16
16
|
}
|
|
17
|
-
const funded = available.minus(
|
|
17
|
+
const funded = available.minus(decimalStringToBig(row.withdrawalFee));
|
|
18
18
|
return funded.gt(0) ? funded.toFixed() : '0';
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=withdraw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../../src/wire/withdraw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../../src/wire/withdraw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAGrE;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAGC;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IACrE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;AAC9C,CAAC"}
|
|
@@ -3,11 +3,11 @@ import { ActionType } from '@lifi/perps-types';
|
|
|
3
3
|
import type { Address } from 'viem';
|
|
4
4
|
import { type GetOrderParams } from '../services/getOrder.js';
|
|
5
5
|
import { type GetOrdersParams } from '../services/getOrders.js';
|
|
6
|
-
import type { BuildProviderSetupParams, CancelOrdersParams, CancelTwapOrderParams, CreateReferralCodeActionParams, ExecuteMetaActionParams, GetAccountResult, GetDepositFlowParams, GetPortfolioHistoryParams, GetSetupParams, GetWithdrawableBalancesParams, GetWithdrawFlowParams, ModifyOrdersParams, PerpsClientOptions, PlaceOrderParams, PlaceTriggerOrderParams, PlaceTwapOrderParams, ProviderSetup, SendAssetActionParams, SetupChecklistItem, SubmitOnboardingParams, WithdrawParams } from '../types/api.js';
|
|
6
|
+
import type { BuildProviderSetupParams, CancelOrdersParams, CancelTwapOrderParams, CreateReferralCodeActionParams, ExecuteMetaActionParams, GetAccountResult, GetDepositFlowParams, GetPortfolioHistoryParams, GetSetupParams, GetWithdrawableBalancesParams, GetWithdrawalTypesParams, GetWithdrawFlowParams, ModifyOrdersParams, PerpsClientOptions, PlaceOrderParams, PlaceTriggerOrderParams, PlaceTwapOrderParams, ProviderSetup, SendAssetActionParams, SetupChecklistItem, SubmitOnboardingParams, WithdrawParams } from '../types/api.js';
|
|
7
7
|
import type { SDKRequestOptions, SwitchChainHook } from '../types/config.js';
|
|
8
8
|
import type { DepositFlow } from '../types/deposit.js';
|
|
9
9
|
import type { PerpsSDKClient, SignActionProgress } from '../types/provider.js';
|
|
10
|
-
import type { WithdrawableBalance, WithdrawFlow } from '../types/withdrawal.js';
|
|
10
|
+
import type { WithdrawableBalance, WithdrawalSourceTypes, WithdrawFlow } from '../types/withdrawal.js';
|
|
11
11
|
/**
|
|
12
12
|
* The primary high-level perps API: wraps a {@link PerpsSDKClient} and owns the
|
|
13
13
|
* end-to-end signing pipeline for provider setup, orders, and account-level
|
|
@@ -270,8 +270,9 @@ export declare class PerpsClient {
|
|
|
270
270
|
*/
|
|
271
271
|
getWithdrawFlow(params: GetWithdrawFlowParams, options?: SDKRequestOptions): Promise<WithdrawFlow | undefined>;
|
|
272
272
|
/**
|
|
273
|
-
* The `(asset,
|
|
274
|
-
* `params.provider`. The venue owns how its balances split across
|
|
273
|
+
* The `(asset, category)` selections `params.address` can actually withdraw
|
|
274
|
+
* at `params.provider`. The venue owns how its balances split across
|
|
275
|
+
* categories;
|
|
275
276
|
* this join adds the core `/assets` metadata — precision, L1 identity and
|
|
276
277
|
* the per-asset minimum — and drops every row the minimum rules out, plus
|
|
277
278
|
* any row whose asset the provider's registry does not carry, since without
|
|
@@ -289,6 +290,18 @@ export declare class PerpsClient {
|
|
|
289
290
|
* @public
|
|
290
291
|
*/
|
|
291
292
|
getWithdrawableBalances(params: GetWithdrawableBalancesParams, options?: SDKRequestOptions): Promise<WithdrawableBalance[] | undefined>;
|
|
293
|
+
/**
|
|
294
|
+
* The withdrawal types `params.address` can choose per holding at
|
|
295
|
+
* `params.provider`, each with its cap and the `withdrawalOptions` to pass
|
|
296
|
+
* unchanged in `WithdrawalParams`.
|
|
297
|
+
*
|
|
298
|
+
* @returns `undefined` when the registered plugin declares no withdrawal
|
|
299
|
+
* types read.
|
|
300
|
+
* @throws {PerpsError} When the provider plugin is not registered, or when
|
|
301
|
+
* the plugin read fails.
|
|
302
|
+
* @public
|
|
303
|
+
*/
|
|
304
|
+
getWithdrawalTypes(params: GetWithdrawalTypesParams, options?: SDKRequestOptions): Promise<WithdrawalSourceTypes[] | undefined>;
|
|
292
305
|
/**
|
|
293
306
|
* The account's portfolio value and cumulative PnL over `params.range` at
|
|
294
307
|
* `params.provider`, read directly from the venue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PerpsClient.d.ts","sourceRoot":"","sources":["../../../src/client/PerpsClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACd,eAAe,EAEf,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,cAAc,EACd,KAAK,EACL,cAAc,EACd,wBAAwB,EACxB,QAAQ,EAGR,WAAW,EACX,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,UAAU,EAKX,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"PerpsClient.d.ts","sourceRoot":"","sources":["../../../src/client/PerpsClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact `a + b`. Each input may carry `$`, `%`, `,` or whitespace:
|
|
3
|
+
* `addDecimalString('$4', '$6')` is `'10'`.
|
|
4
|
+
*
|
|
5
|
+
* @throws {PerpsError} `ValidationError` when an input is not a decimal string.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare function addDecimalString(a: string, b: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* {@link addDecimalString}, or `undefined` with a warning when it throws.
|
|
11
|
+
*
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export declare const safeAddDecimalString: (a: string, b: string) => string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Exact `a - b`.
|
|
17
|
+
*
|
|
18
|
+
* @throws {PerpsError} `ValidationError` when an input is not a decimal string.
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
export declare function subtractDecimalString(a: string, b: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* {@link subtractDecimalString}, or `undefined` with a warning when it throws.
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export declare const safeSubtractDecimalString: (a: string, b: string) => string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Exact `a × b`.
|
|
30
|
+
*
|
|
31
|
+
* @throws {PerpsError} `ValidationError` when an input is not a decimal string.
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
export declare function multiplyDecimalString(a: string, b: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* {@link multiplyDecimalString}, or `undefined` with a warning when it throws.
|
|
37
|
+
*
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export declare const safeMultiplyDecimalString: (a: string, b: string) => string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* `a ÷ b` to 40 decimal places, rounded half up.
|
|
43
|
+
*
|
|
44
|
+
* @throws {PerpsError} `ValidationError` when an input is not a decimal
|
|
45
|
+
* string or `b` is zero.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
export declare function divideDecimalString(a: string, b: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* {@link divideDecimalString}, or `undefined` with a warning when it throws.
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export declare const safeDivideDecimalString: (a: string, b: string) => string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* `a ÷ b` to 40 decimal places, truncated toward zero, so a derived amount
|
|
57
|
+
* never exceeds the exact quotient.
|
|
58
|
+
*
|
|
59
|
+
* @throws {PerpsError} `ValidationError` when an input is not a decimal
|
|
60
|
+
* string or `b` is zero.
|
|
61
|
+
* @public
|
|
62
|
+
*/
|
|
63
|
+
export declare function divideDecimalStringRoundDown(a: string, b: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* {@link divideDecimalStringRoundDown}, or `undefined` with a warning when it
|
|
66
|
+
* throws.
|
|
67
|
+
*
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare const safeDivideDecimalStringRoundDown: (a: string, b: string) => string | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Exact `|value|`.
|
|
73
|
+
*
|
|
74
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a decimal string.
|
|
75
|
+
* @public
|
|
76
|
+
*/
|
|
77
|
+
export declare function absDecimalString(value: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* {@link absDecimalString}, or `undefined` with a warning when it throws.
|
|
80
|
+
*
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
export declare const safeAbsDecimalString: (value: string) => string | undefined;
|
|
84
|
+
//# sourceMappingURL=arithmetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../src/decimal/arithmetic.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,8CAGhC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,8CAGrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,8CAGrC,CAAA;AAaD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,8CAGnC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,8CAG5C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uCAGhC,CAAA"}
|
|
@@ -9,6 +9,4 @@ export declare const DivBig: Big.BigConstructor;
|
|
|
9
9
|
* exact quotient.
|
|
10
10
|
*/
|
|
11
11
|
export declare const TruncBig: Big.BigConstructor;
|
|
12
|
-
/** True when every value is a finite number, so `new DivBig(value)` cannot throw. */
|
|
13
|
-
export declare function areFinite(...values: number[]): boolean;
|
|
14
12
|
//# sourceMappingURL=big.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"big.d.ts","sourceRoot":"","sources":["../../../src/decimal/big.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,eAAO,MAAM,MAAM,oBAAQ,CAAA;AAG3B;;;GAGG;AACH,eAAO,MAAM,QAAQ,oBAAQ,CAAA
|
|
1
|
+
{"version":3,"file":"big.d.ts","sourceRoot":"","sources":["../../../src/decimal/big.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,eAAO,MAAM,MAAM,oBAAQ,CAAA;AAG3B;;;GAGG;AACH,eAAO,MAAM,QAAQ,oBAAQ,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact `a > b` on two decimal strings, with no float rounding, so a funds
|
|
3
|
+
* gate can tell `'1.0000000000000001'` from `'1'`. The other relations follow
|
|
4
|
+
* from it: `a <= b` is `!isDecimalStringGreaterThan(a, b)`.
|
|
5
|
+
*
|
|
6
|
+
* @throws {PerpsError} `ValidationError` when either operand is not a decimal string.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare function isDecimalStringGreaterThan(a: string, b: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* {@link isDecimalStringGreaterThan}, or `undefined` with a warning when it
|
|
12
|
+
* throws.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare const safeIsDecimalStringGreaterThan: (a: string, b: string) => boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Exact `value == 0`, so a flat-position check never reads `'0.0'` as
|
|
19
|
+
* non-zero.
|
|
20
|
+
*
|
|
21
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a decimal string.
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export declare function isDecimalStringZero(value: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* {@link isDecimalStringZero}, or `undefined` with a warning when it throws.
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare const safeIsDecimalStringZero: (value: string) => boolean | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Exact three-way compare for a sort: `-1` when `a < b`, `0` when equal, `1`
|
|
33
|
+
* when `a > b`.
|
|
34
|
+
*
|
|
35
|
+
* @throws {PerpsError} `ValidationError` when either operand is not a decimal string.
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export declare function compareDecimalStrings(a: string, b: string): -1 | 0 | 1;
|
|
39
|
+
/**
|
|
40
|
+
* {@link compareDecimalStrings}, or `undefined` with a warning when it throws.
|
|
41
|
+
*
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export declare const safeCompareDecimalStrings: (a: string, b: string) => 0 | 1 | -1 | undefined;
|
|
45
|
+
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/decimal/compare.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,+CAG1C,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,wCAGnC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAEtE;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,kDAGrC,CAAA"}
|
|
@@ -1,39 +1,63 @@
|
|
|
1
|
-
import { type DecimalString } from '@lifi/perps-types';
|
|
2
1
|
/**
|
|
3
|
-
* Off-grid resolution for {@link
|
|
4
|
-
* - `truncate
|
|
5
|
-
*
|
|
6
|
-
* - `round
|
|
7
|
-
*
|
|
2
|
+
* Off-grid resolution for {@link roundDecimalString}:
|
|
3
|
+
* - `truncate`: toward zero, for sizes and collateral amounts. The result
|
|
4
|
+
* never exceeds the caller's intent.
|
|
5
|
+
* - `round`: half away from zero, for prices, which snap to the nearest tick.
|
|
6
|
+
* - `up`: away from zero, for an amount that must cover a target.
|
|
8
7
|
* @public
|
|
9
8
|
*/
|
|
10
|
-
export type
|
|
9
|
+
export type DecimalRounding = 'truncate' | 'round' | 'up';
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* Round a decimal string to `decimals` places with exact decimal arithmetic.
|
|
12
|
+
* The result has no trailing zeros: `roundDecimalString('1.50', 1, 'round')`
|
|
13
|
+
* is `'1.5'`.
|
|
14
|
+
*
|
|
15
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a decimal string,
|
|
16
|
+
* or `decimals` is not a non-negative integer.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export declare function roundDecimalString(value: string, decimals: number, rounding: DecimalRounding): string;
|
|
20
|
+
/**
|
|
21
|
+
* {@link roundDecimalString}, or `undefined` with a warning when it throws.
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export declare const safeRoundDecimalString: (value: string, decimals: number, rounding: DecimalRounding) => string | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Scale a decimal string to an integer at `decimals` places in exact decimal
|
|
28
|
+
* arithmetic: `'0.29'` at 2 decimals is 29, never 28. Off-grid input resolves
|
|
29
|
+
* per `rounding`. No `$`, `%` or `,` is removed first.
|
|
30
|
+
*
|
|
31
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a decimal string,
|
|
32
|
+
* `decimals` is not a non-negative integer, or the result's magnitude
|
|
33
|
+
* exceeds `Number.MAX_SAFE_INTEGER`.
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
export declare function decimalStringToScaledInteger(value: string, decimals: number, rounding: DecimalRounding): number;
|
|
37
|
+
/**
|
|
38
|
+
* {@link decimalStringToScaledInteger}, or `undefined` with a warning when it
|
|
39
|
+
* throws.
|
|
16
40
|
*
|
|
17
|
-
* @throws {PerpsError} `ValidationError` when `value` is not a
|
|
18
|
-
* {@link DecimalString}, `decimals` is not a non-negative integer, or the scaled
|
|
19
|
-
* result's magnitude exceeds `Number.MAX_SAFE_INTEGER`.
|
|
20
41
|
* @public
|
|
21
42
|
*/
|
|
22
|
-
export declare const
|
|
43
|
+
export declare const safeDecimalStringToScaledInteger: (value: string, decimals: number, rounding: DecimalRounding) => number | undefined;
|
|
44
|
+
export declare const BASE_UNITS_PATTERN: RegExp;
|
|
23
45
|
/**
|
|
24
|
-
* Convert a
|
|
46
|
+
* Convert a scaled integer string (a token amount in base units) to a decimal
|
|
47
|
+
* string: `scaledIntegerToDecimalString('1000000', 6)` is `'1'`.
|
|
25
48
|
*
|
|
26
|
-
* @param amount - Amount in base units (e.g. "1000000" for 1 USDC)
|
|
27
|
-
* @param decimals - Token decimals (e.g. 6 for USDC)
|
|
28
49
|
* @throws {PerpsError} `ValidationError` when `amount` is not an integer
|
|
29
50
|
* string, or `decimals` is not a non-negative integer.
|
|
30
|
-
* @example
|
|
31
|
-
* ```ts
|
|
32
|
-
* baseUnitsToDecimal('1000000', 6) // '1'
|
|
33
|
-
* ```
|
|
34
51
|
* @public
|
|
35
52
|
*/
|
|
36
|
-
export declare function
|
|
53
|
+
export declare function scaledIntegerToDecimalString(amount: string, decimals: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* {@link scaledIntegerToDecimalString}, or `undefined` with a warning when it
|
|
56
|
+
* throws.
|
|
57
|
+
*
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export declare const safeScaledIntegerToDecimalString: (amount: string, decimals: number) => string | undefined;
|
|
37
61
|
/**
|
|
38
62
|
* Round `value` down to `decimals` and pad the result to exactly that many
|
|
39
63
|
* decimal places. The padding is the point: this seeds a fixed-decimal input,
|
|
@@ -46,10 +70,16 @@ export declare function baseUnitsToDecimal(amount: DecimalString, decimals: numb
|
|
|
46
70
|
* `'0.010000000000000000'`, which `Number#toFixed` cannot.
|
|
47
71
|
*
|
|
48
72
|
* @throws {PerpsError} `ValidationError` when `value` is not a
|
|
49
|
-
*
|
|
73
|
+
* decimal string, or `decimals` is not a non-negative integer.
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
export declare function truncateDecimal(value: string, decimals: number): string;
|
|
77
|
+
/**
|
|
78
|
+
* {@link truncateDecimal}, or `undefined` with a warning when it throws.
|
|
79
|
+
*
|
|
50
80
|
* @public
|
|
51
81
|
*/
|
|
52
|
-
export declare
|
|
82
|
+
export declare const safeTruncateDecimal: (value: string, decimals: number) => string | undefined;
|
|
53
83
|
/**
|
|
54
84
|
* Spell a `number` as a {@link DecimalString} in plain notation: `1e-7`
|
|
55
85
|
* becomes `'0.0000001'`, never `'1e-7'`. The boundary helper for a venue or
|
|
@@ -60,5 +90,11 @@ export declare function truncateDecimal(value: DecimalString, decimals: number):
|
|
|
60
90
|
* @throws {PerpsError} `ValidationError` when `value` is `NaN` or infinite.
|
|
61
91
|
* @public
|
|
62
92
|
*/
|
|
63
|
-
export declare function numberToDecimalString(value: number):
|
|
93
|
+
export declare function numberToDecimalString(value: number): string;
|
|
94
|
+
/**
|
|
95
|
+
* {@link numberToDecimalString}, or `undefined` with a warning when it throws.
|
|
96
|
+
*
|
|
97
|
+
* @public
|
|
98
|
+
*/
|
|
99
|
+
export declare const safeNumberToDecimalString: (value: number) => string | undefined;
|
|
64
100
|
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/decimal/convert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/decimal/convert.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAA;AAQzD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,GACxB,MAAM,CAUR;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,oFAGlC,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,GACxB,MAAM,CAuBR;AAED;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,oFAG5C,CAAA;AAED,eAAO,MAAM,kBAAkB,QAAY,CAAA;AAE3C;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAcR;AAED;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,0DAG5C,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,yDAG/B,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS3D;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,uCAGrC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Big from 'big.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read a decimal string as a `Big`. Whitespace, `$`, `%` and `,` are removed
|
|
4
|
+
* first, so `'$1,234.5'` reads as `1234.5`; the rest must match
|
|
5
|
+
* `DECIMAL_PATTERN`, so an exponent form such as `'1e5'` is rejected.
|
|
6
|
+
*
|
|
7
|
+
* @throws {PerpsError} `ValidationError` when `value` is not a string or the
|
|
8
|
+
* cleaned string is not a decimal string.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare function decimalStringToBig(value: string): Big;
|
|
12
|
+
/**
|
|
13
|
+
* Spell a `Big` as a canonical decimal string, with no exponent and no `-0`.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function bigToDecimalString(value: Big): string;
|
|
18
|
+
/**
|
|
19
|
+
* {@link decimalStringToBig} as a `DivBig`, so a later `div` keeps 40 decimal
|
|
20
|
+
* places.
|
|
21
|
+
*
|
|
22
|
+
* @throws {PerpsError} `ValidationError` as {@link decimalStringToBig}.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function decimalStringToDivBig(value: string): Big;
|
|
26
|
+
//# sourceMappingURL=decimalStringToBig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimalStringToBig.d.ts","sourceRoot":"","sources":["../../../src/decimal/decimalStringToBig.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,QAAQ,CAAA;AAMxB;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAUrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAExD"}
|
|
@@ -7,7 +7,10 @@ import type { DecimalString } from '@lifi/perps-types';
|
|
|
7
7
|
export interface FormatOptions {
|
|
8
8
|
/** Fixed number of decimal places. Defaults are per-formatter. */
|
|
9
9
|
decimals?: number;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Rendered when the value is null, undefined, blank or a non-finite number.
|
|
12
|
+
* A string that is not a decimal is shown unchanged. Defaults to `'—'`.
|
|
13
|
+
*/
|
|
11
14
|
placeholder?: string;
|
|
12
15
|
/** BCP 47 locale controlling digit grouping and separators (e.g. `'en-US'`). */
|
|
13
16
|
locale?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/decimal/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/decimal/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAA;AAI7C,KAAK,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;AA+ErE;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAgBR;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAwBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAqBR"}
|