@lifi/perps-sdk-provider-lighter 9.0.0 → 11.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/dist/cjs/LighterProvider.d.ts +0 -1
- package/dist/cjs/LighterProvider.d.ts.map +1 -1
- package/dist/cjs/LighterProvider.js +14 -6
- package/dist/cjs/LighterProvider.js.map +1 -1
- package/dist/cjs/signers/LighterSigner.d.ts.map +1 -1
- package/dist/cjs/signers/LighterSigner.js +25 -5
- package/dist/cjs/signers/LighterSigner.js.map +1 -1
- package/dist/cjs/types/account.d.ts +4 -1
- package/dist/cjs/types/account.d.ts.map +1 -1
- package/dist/cjs/types/action.d.ts +4 -1
- package/dist/cjs/types/action.d.ts.map +1 -1
- package/dist/cjs/types/action.js.map +1 -1
- package/dist/cjs/utils/assetCollateral.d.ts +2 -1
- package/dist/cjs/utils/assetCollateral.d.ts.map +1 -1
- package/dist/cjs/utils/assetCollateral.js +1 -1
- package/dist/cjs/utils/assetCollateral.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.d.ts +4 -0
- package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -0
- package/dist/cjs/utils/withdrawableBalances.js +21 -0
- package/dist/cjs/utils/withdrawableBalances.js.map +1 -0
- package/dist/esm/LighterProvider.d.ts +0 -7
- package/dist/esm/LighterProvider.d.ts.map +1 -1
- package/dist/esm/LighterProvider.js +26 -9
- package/dist/esm/LighterProvider.js.map +1 -1
- package/dist/esm/signers/LighterSigner.d.ts.map +1 -1
- package/dist/esm/signers/LighterSigner.js +25 -11
- package/dist/esm/signers/LighterSigner.js.map +1 -1
- package/dist/esm/types/account.d.ts +17 -6
- package/dist/esm/types/account.d.ts.map +1 -1
- package/dist/esm/types/action.d.ts +14 -2
- package/dist/esm/types/action.d.ts.map +1 -1
- package/dist/esm/types/action.js.map +1 -1
- package/dist/esm/utils/assetCollateral.d.ts +3 -2
- package/dist/esm/utils/assetCollateral.d.ts.map +1 -1
- package/dist/esm/utils/assetCollateral.js +5 -5
- package/dist/esm/utils/assetCollateral.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/withdrawableBalances.d.ts +12 -0
- package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -0
- package/dist/esm/utils/withdrawableBalances.js +25 -0
- package/dist/esm/utils/withdrawableBalances.js.map +1 -0
- package/dist/types/LighterProvider.d.ts +0 -7
- package/dist/types/LighterProvider.d.ts.map +1 -1
- package/dist/types/signers/LighterSigner.d.ts.map +1 -1
- package/dist/types/types/account.d.ts +17 -6
- package/dist/types/types/account.d.ts.map +1 -1
- package/dist/types/types/action.d.ts +14 -2
- package/dist/types/types/action.d.ts.map +1 -1
- package/dist/types/utils/assetCollateral.d.ts +3 -2
- package/dist/types/utils/assetCollateral.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/withdrawableBalances.d.ts +12 -0
- package/dist/types/utils/withdrawableBalances.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/LighterProvider.ts +38 -17
- package/src/signers/LighterSigner.ts +32 -15
- package/src/types/account.ts +18 -6
- package/src/types/action.ts +14 -2
- package/src/utils/assetCollateral.ts +8 -6
- package/src/utils/index.ts +1 -0
- package/src/utils/withdrawableBalances.ts +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,MAAwB,EACO,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CACxD,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACtD,CAAA;QACD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QACnE,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -42,13 +42,6 @@ export interface LighterProviderOptions {
|
|
|
42
42
|
tokenLifetimeSeconds?: number;
|
|
43
43
|
/** Re-create when the cached standard token's remaining life is below this. Default 60s. */
|
|
44
44
|
tokenRenewBufferSeconds?: number;
|
|
45
|
-
/**
|
|
46
|
-
* LI.FI's Lighter referral code — the code `getAccount` compares the account's
|
|
47
|
-
* applied referral against to populate `LighterAccountConfig.referralPresent`.
|
|
48
|
-
* Must match the backend's configured `LIGHTER_REFERRAL_CODE`; when omitted,
|
|
49
|
-
* `referralPresent` is always `false` (the SDK has nothing to compare against).
|
|
50
|
-
*/
|
|
51
|
-
referralCode?: string;
|
|
52
45
|
}
|
|
53
46
|
/**
|
|
54
47
|
* Lighter provider plugin extended with a public `resolveAuthToken` so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,mBAAmB,EAkBxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;AA4BxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAuGvB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAQD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,iBAAiB,EAC7B,UAAS,sBAA2B,KACnC,oBAwmCF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,oBACyD,CAAA;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAS,sBAA2B,KACnC,oBAA6E,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,OAAO,aA7BT,sBAAsB,KAC9B,oBA4BmC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterSigner.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterSigner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LighterSigner.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterSigner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAe9C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,sFAAsF;IACtF,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,qHAAqH;IACrH,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AA2BD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;gBAE1C,MAAM,EAAE,mBAAmB;IAMvC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IAY3C;;;;;;;;;OASG;IACG,IAAI,CACR,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,iBAAiB,CAAC;IAmB7B;;;;;;;;;;;OAWG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,CAAC,GAAG,CAAK,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAsC9B;;;;;;;OAOG;IACG,qBAAqB,CACzB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IA8BnC;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAa7D;;;OAGG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;YAiBJ,YAAY;YAOZ,YAAY;IAmB1B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CA+NjB"}
|
|
@@ -29,24 +29,35 @@ export type LtAccountPosition = {
|
|
|
29
29
|
total_discount: string;
|
|
30
30
|
};
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
|
|
32
|
+
* Cross-margin collateral flag Lighter reports on an account asset row.
|
|
33
|
+
*
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
export type LtAssetMarginMode = 'enabled' | 'disabled';
|
|
37
|
+
/**
|
|
38
|
+
* Held asset row returned in a Lighter account response. The two balances are
|
|
39
|
+
* the asset's two withdrawal routes: `balance` is the spot route
|
|
40
|
+
* (`AssetRouteType_Spot`) and `margin_balance` the perps route
|
|
41
|
+
* (`AssetRouteType_Perps`). All amounts are decimal strings.
|
|
36
42
|
*
|
|
37
43
|
* @public
|
|
38
44
|
*/
|
|
39
45
|
export type LtAccountAsset = {
|
|
40
46
|
symbol: string;
|
|
41
47
|
asset_id: number;
|
|
48
|
+
/** Spot-route balance, `locked_balance` included. */
|
|
42
49
|
balance: string;
|
|
50
|
+
/** Portion of `balance` reserved by pending activity and not withdrawable. */
|
|
43
51
|
locked_balance: string;
|
|
52
|
+
/** Perps-route balance — the asset's collateral leg. */
|
|
53
|
+
margin_balance: string;
|
|
54
|
+
/** Collateral weighting Lighter applies to the asset, as a decimal factor. */
|
|
55
|
+
multiplier: string;
|
|
44
56
|
/**
|
|
45
|
-
* Cross-margin collateral flag: 0 = MarginDisabled, 1 = MarginEnabled.
|
|
46
57
|
* Lighter surfaces it via `additional_properties`, so it may be absent —
|
|
47
58
|
* chiefly outside Unified Trading Account mode.
|
|
48
59
|
*/
|
|
49
|
-
margin_mode?:
|
|
60
|
+
margin_mode?: LtAssetMarginMode;
|
|
50
61
|
};
|
|
51
62
|
/**
|
|
52
63
|
* Account-position row from `/api/v1/account`. Identical shape to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uBAAuB,EAAE,MAAM,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,yBAAyB,EAAE,MAAM,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,14 +63,26 @@ export type LtUpdateMarginWasmParams = {
|
|
|
63
63
|
direction: number;
|
|
64
64
|
};
|
|
65
65
|
/**
|
|
66
|
-
* Backend-provided params for SignWithdraw.
|
|
66
|
+
* Backend-provided params for SignWithdraw. The asset and route are the
|
|
67
|
+
* caller's selection, not a signer default, and the remaining fields are the
|
|
68
|
+
* venue metadata the signer needs to scale and bounds-check `amount` without
|
|
69
|
+
* an asset registry of its own.
|
|
67
70
|
*
|
|
68
71
|
* @public
|
|
69
72
|
*/
|
|
70
73
|
export type LtWithdrawWasmParams = {
|
|
74
|
+
/** Lighter L2 `asset_id` being withdrawn. */
|
|
71
75
|
asset_index: number;
|
|
76
|
+
/** {@link LT_ROUTE_PERP} or {@link LT_ROUTE_SPOT}; anything else is rejected. */
|
|
72
77
|
route_type: number;
|
|
73
|
-
amount
|
|
78
|
+
/** Decimal amount in the asset's own units, unscaled. */
|
|
79
|
+
amount: string;
|
|
80
|
+
/** The asset's L2 precision — the exponent `amount` is scaled by. */
|
|
81
|
+
decimals: number;
|
|
82
|
+
/** Venue minimum for a single withdrawal, in the asset's own units. */
|
|
83
|
+
min_withdrawal_amount: string;
|
|
84
|
+
/** Asset symbol, named in a sub-minimum rejection. */
|
|
85
|
+
symbol: string;
|
|
74
86
|
};
|
|
75
87
|
/**
|
|
76
88
|
* Backend-provided params for SignCancelAllOrders.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,wBAAwB,EAAE,MAAM,CAAA;IAChC,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,wBAAwB,EAAE,MAAM,CAAA;IAChC,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { LtAssetMarginMode } from '../types/account.js';
|
|
1
2
|
/** Map the user-facing `enabled` flag to Lighter's `AssetMarginMode` wire int. */
|
|
2
3
|
export declare function assetMarginModeInt(enabled: boolean): number;
|
|
3
|
-
/** Decode Lighter's `margin_mode`
|
|
4
|
-
export declare function isAssetMarginEnabled(marginMode:
|
|
4
|
+
/** Decode Lighter's `margin_mode` on an account asset back to `enabled`. */
|
|
5
|
+
export declare function isAssetMarginEnabled(marginMode: LtAssetMarginMode): boolean;
|
|
5
6
|
//# sourceMappingURL=assetCollateral.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/assetCollateral.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assetCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/assetCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAS5D,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAE3E"}
|
|
@@ -16,4 +16,5 @@ export { formatOrderPrice, formatOrderSize } from './orderFormatting.js';
|
|
|
16
16
|
export { toIsoFromMs, toIsoFromSeconds } from './time.js';
|
|
17
17
|
export { positionMarginConstraints } from './transferMargin.js';
|
|
18
18
|
export { leverageToFraction, mapOrderTypeToInt, mapTimeInForceToInt, marginFractionToMaxLeverage, orderExpiryForTif, resolveTimeInForce, } from './wireEncoding.js';
|
|
19
|
+
export { lighterWithdrawableBalances } from './withdrawableBalances.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProviderWithdrawableBalance } from '@lifi/perps-sdk';
|
|
2
|
+
import type { LtAccountAsset } from '../types/account.js';
|
|
3
|
+
/**
|
|
4
|
+
* Split each held asset into the two routes a Lighter withdrawal can name:
|
|
5
|
+
* spot draws on `balance` net of `locked_balance`, perps draws on
|
|
6
|
+
* `margin_balance`. Routes with nothing left to draw are dropped; the
|
|
7
|
+
* per-asset venue minimum is applied by the caller holding the asset registry.
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare const lighterWithdrawableBalances: (assets: LtAccountAsset[]) => ProviderWithdrawableBalance[];
|
|
12
|
+
//# sourceMappingURL=withdrawableBalances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGzD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,QAAQ,cAAc,EAAE,KACvB,2BAA2B,EAgB7B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-lighter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.0.0",
|
|
4
4
|
"description": "Lighter provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"big.js": "^7.0.1",
|
|
46
46
|
"viem": "^2.48.8",
|
|
47
|
-
"@lifi/perps-types": "^5.
|
|
47
|
+
"@lifi/perps-types": "^5.1.1"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@lifi/perps-sdk": "^6.
|
|
50
|
+
"@lifi/perps-sdk": "^6.3.0"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
package/src/LighterProvider.ts
CHANGED
|
@@ -18,6 +18,8 @@ import {
|
|
|
18
18
|
type ProviderGetOrdersParams,
|
|
19
19
|
type ProviderGetPositionsParams,
|
|
20
20
|
type ProviderGetQuoteParams,
|
|
21
|
+
type ProviderGetWithdrawableBalancesParams,
|
|
22
|
+
type ProviderWithdrawableBalance,
|
|
21
23
|
resolveQuote,
|
|
22
24
|
resolveRetryPolicy,
|
|
23
25
|
type SDKRequestOptions,
|
|
@@ -105,6 +107,7 @@ import {
|
|
|
105
107
|
formatOrderSize,
|
|
106
108
|
leverageFromImf,
|
|
107
109
|
lighterAsset,
|
|
110
|
+
lighterWithdrawableBalances,
|
|
108
111
|
mapFill,
|
|
109
112
|
mapOpenPositions,
|
|
110
113
|
mapOrderDetail,
|
|
@@ -209,13 +212,6 @@ export interface LighterProviderOptions {
|
|
|
209
212
|
tokenLifetimeSeconds?: number
|
|
210
213
|
/** Re-create when the cached standard token's remaining life is below this. Default 60s. */
|
|
211
214
|
tokenRenewBufferSeconds?: number
|
|
212
|
-
/**
|
|
213
|
-
* LI.FI's Lighter referral code — the code `getAccount` compares the account's
|
|
214
|
-
* applied referral against to populate `LighterAccountConfig.referralPresent`.
|
|
215
|
-
* Must match the backend's configured `LIGHTER_REFERRAL_CODE`; when omitted,
|
|
216
|
-
* `referralPresent` is always `false` (the SDK has nothing to compare against).
|
|
217
|
-
*/
|
|
218
|
-
referralCode?: string
|
|
219
215
|
}
|
|
220
216
|
|
|
221
217
|
interface CachedStandardToken {
|
|
@@ -293,7 +289,6 @@ export const createLighterProvider = (
|
|
|
293
289
|
})
|
|
294
290
|
const tokenLifetimeSeconds = options.tokenLifetimeSeconds ?? 60 * 60
|
|
295
291
|
const tokenRenewBufferSeconds = options.tokenRenewBufferSeconds ?? 60
|
|
296
|
-
const referralCode = options.referralCode
|
|
297
292
|
const standardTokenByAddress: Map<string, CachedStandardToken> = new Map()
|
|
298
293
|
// Single-flight + backoff for lazy read-only token creation. Without these,
|
|
299
294
|
// concurrent reads on first load all race `tokens/create`, and any sustained
|
|
@@ -681,6 +676,9 @@ export const createLighterProvider = (
|
|
|
681
676
|
|
|
682
677
|
const registry = getMarketRegistry(requireClient(), providerKey)
|
|
683
678
|
const assetRegistry = getAssetRegistry(requireClient(), providerKey)
|
|
679
|
+
// Shared promise: the referral read below awaits this instance's runtime
|
|
680
|
+
// metadata off the same `/providers` fetch — no second request.
|
|
681
|
+
const providersPromise = getProviders(requireClient())
|
|
684
682
|
const [
|
|
685
683
|
{ providers },
|
|
686
684
|
,
|
|
@@ -691,7 +689,7 @@ export const createLighterProvider = (
|
|
|
691
689
|
storedReadOnlyToken,
|
|
692
690
|
appliedReferralCode,
|
|
693
691
|
] = await Promise.all([
|
|
694
|
-
|
|
692
|
+
providersPromise,
|
|
695
693
|
registry.sync(),
|
|
696
694
|
assetRegistry.sync(),
|
|
697
695
|
fetchRegisteredApiKey(client, account.index, DEFAULT_API_KEY_INDEX),
|
|
@@ -705,12 +703,21 @@ export const createLighterProvider = (
|
|
|
705
703
|
),
|
|
706
704
|
keyStore.get(params.address),
|
|
707
705
|
readOnlyTokenManager.get(params.address, account.index),
|
|
708
|
-
//
|
|
709
|
-
//
|
|
710
|
-
|
|
706
|
+
// The expected code is backend-owned runtime metadata on this
|
|
707
|
+
// instance's own provider descriptor (keyed by `providerKey`, so the
|
|
708
|
+
// RH instance never compares against mainnet attribution). Metadata
|
|
709
|
+
// without a code, or no token to authenticate the read → undefined →
|
|
710
|
+
// `referralPresent: false`. The read stays SDK-direct: the token only
|
|
711
|
+
// ever goes to Lighter, never to the LI.FI backend.
|
|
712
|
+
token === undefined
|
|
711
713
|
? Promise.resolve(undefined)
|
|
712
|
-
:
|
|
713
|
-
|
|
714
|
+
: providersPromise.then((response) =>
|
|
715
|
+
response.providers.find((p) => p.key === providerKey)
|
|
716
|
+
?.referralCode
|
|
717
|
+
? retryOnRevoked(opts, params.address, token, (t) =>
|
|
718
|
+
fetchAppliedReferralCode(client, params.address, t)
|
|
719
|
+
)
|
|
720
|
+
: undefined
|
|
714
721
|
),
|
|
715
722
|
])
|
|
716
723
|
|
|
@@ -736,8 +743,8 @@ export const createLighterProvider = (
|
|
|
736
743
|
0
|
|
737
744
|
)
|
|
738
745
|
|
|
739
|
-
const
|
|
740
|
-
|
|
746
|
+
const instanceMeta = providers.find((p) => p.key === providerKey)
|
|
747
|
+
const categories = instanceMeta?.categories ?? []
|
|
741
748
|
const perpsCategory = categories.find((c) => c.quoteAsset !== null)
|
|
742
749
|
const spotCategoryId =
|
|
743
750
|
categories.find((c) => c.quoteAsset === null)?.id ??
|
|
@@ -808,9 +815,12 @@ export const createLighterProvider = (
|
|
|
808
815
|
readOnlyTokenApproved: storedReadOnlyToken !== undefined,
|
|
809
816
|
readOnlyTokenExpiry: storedReadOnlyToken?.expiry,
|
|
810
817
|
readOnlyTokenScope: storedReadOnlyToken?.scope,
|
|
818
|
+
// True only when the authenticated `used_code` equals the backend-owned
|
|
819
|
+
// code for this instance; `appliedReferralCode` is only ever fetched
|
|
820
|
+
// when that code exists.
|
|
811
821
|
referralPresent:
|
|
812
822
|
appliedReferralCode !== undefined &&
|
|
813
|
-
appliedReferralCode === referralCode,
|
|
823
|
+
appliedReferralCode === instanceMeta?.referralCode,
|
|
814
824
|
}
|
|
815
825
|
|
|
816
826
|
return {
|
|
@@ -846,6 +856,17 @@ export const createLighterProvider = (
|
|
|
846
856
|
)
|
|
847
857
|
},
|
|
848
858
|
|
|
859
|
+
async getWithdrawableBalances(
|
|
860
|
+
params: ProviderGetWithdrawableBalancesParams,
|
|
861
|
+
opts?: SDKRequestOptions
|
|
862
|
+
): Promise<ProviderWithdrawableBalance[]> {
|
|
863
|
+
const account = await fetchDetailedAccount(
|
|
864
|
+
apiClient(opts),
|
|
865
|
+
params.address
|
|
866
|
+
)
|
|
867
|
+
return lighterWithdrawableBalances(account.assets)
|
|
868
|
+
},
|
|
869
|
+
|
|
849
870
|
async getPositions(
|
|
850
871
|
params: ProviderGetPositionsParams,
|
|
851
872
|
opts?: SDKRequestOptions
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { scaleToInteger } from '@lifi/perps-sdk'
|
|
1
2
|
import { ActionType } from '@lifi/perps-types'
|
|
3
|
+
import Big from 'big.js'
|
|
2
4
|
import { LT_ROUTE_PERP, LT_ROUTE_SPOT } from '../types/action.js'
|
|
3
5
|
import { assetMarginModeInt } from '../utils/assetCollateral.js'
|
|
4
6
|
import {
|
|
@@ -99,10 +101,6 @@ const SKIP_NONCE_DISABLED = 0
|
|
|
99
101
|
// CancelAll across every market (lighter-go `NilMarketIndex`); a real index
|
|
100
102
|
// scopes the cancel to a single market.
|
|
101
103
|
const NIL_MARKET_INDEX = 255
|
|
102
|
-
// Collateral withdrawals and transfers ride the perps route (lighter-go
|
|
103
|
-
// `AssetRouteType_Perps`). The signer rejects an asset index < 1.
|
|
104
|
-
const ASSET_ROUTE_TYPE_PERPS = 0
|
|
105
|
-
|
|
106
104
|
// SEND_ASSET is a same-account route→route collateral move (spot↔perp): no
|
|
107
105
|
// fee, and no memo. `SignTransfer` requires a 32-byte memo, so we pass 32 zero
|
|
108
106
|
// bytes in the `0x`-prefixed 64-hex form the WASM signer decodes.
|
|
@@ -483,29 +481,45 @@ export class LighterSigner {
|
|
|
483
481
|
ctx.apiKeyIndex,
|
|
484
482
|
ctx.accountIndex
|
|
485
483
|
)
|
|
486
|
-
case ActionType.WITHDRAWAL:
|
|
484
|
+
case ActionType.WITHDRAWAL: {
|
|
485
|
+
const routeType = numberField(p, 'route_type')
|
|
486
|
+
if (routeType !== LT_ROUTE_PERP && routeType !== LT_ROUTE_SPOT) {
|
|
487
|
+
throw new Error(
|
|
488
|
+
`Lighter WITHDRAWAL route_type ${routeType} is invalid: expected ` +
|
|
489
|
+
`${LT_ROUTE_PERP} (perps) or ${LT_ROUTE_SPOT} (spot)`
|
|
490
|
+
)
|
|
491
|
+
}
|
|
492
|
+
const symbol = stringField(p, 'symbol')
|
|
493
|
+
const amount = stringField(p, 'amount')
|
|
494
|
+
const minimum = stringField(p, 'min_withdrawal_amount')
|
|
495
|
+
if (new Big(amount).lt(new Big(minimum))) {
|
|
496
|
+
throw new Error(
|
|
497
|
+
`Lighter WITHDRAWAL of ${amount} ${symbol} is below the venue ` +
|
|
498
|
+
`minimum of ${minimum} ${symbol}`
|
|
499
|
+
)
|
|
500
|
+
}
|
|
487
501
|
return wasm.SignWithdraw(
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
numberField(p, '
|
|
502
|
+
numberField(p, 'asset_index'),
|
|
503
|
+
routeType,
|
|
504
|
+
scaleToInteger(amount, numberField(p, 'decimals'), 'truncate'),
|
|
491
505
|
SKIP_NONCE_DISABLED,
|
|
492
506
|
nonce,
|
|
493
507
|
ctx.apiKeyIndex,
|
|
494
508
|
ctx.accountIndex
|
|
495
509
|
)
|
|
510
|
+
}
|
|
496
511
|
case ActionType.TRANSFER:
|
|
497
512
|
// SignTransfer's positional args follow the Go binding order:
|
|
498
513
|
// `toAccountIndex, assetIndex, fromRouteType, toRouteType, amount,
|
|
499
514
|
// usdcFee, memo, skipNonce, nonce, apiKeyIndex, accountIndex`. `memo`
|
|
500
|
-
// is
|
|
501
|
-
// string
|
|
502
|
-
//
|
|
503
|
-
// long".
|
|
515
|
+
// is decoded as a 66-char `0x`-prefixed hex string, a bare 64-char hex
|
|
516
|
+
// string, or 32 raw bytes — anything else fails with "memo expected to
|
|
517
|
+
// be 32 bytes or 64 hex encoded or 66 if 0x hex encoded".
|
|
504
518
|
return wasm.SignTransfer(
|
|
505
519
|
numberField(p, 'to_account'),
|
|
506
520
|
this.collateralAssetIndex,
|
|
507
|
-
|
|
508
|
-
|
|
521
|
+
LT_ROUTE_PERP,
|
|
522
|
+
LT_ROUTE_PERP,
|
|
509
523
|
numberField(p, 'usdc_amount'),
|
|
510
524
|
numberField(p, 'fee'),
|
|
511
525
|
stringField(p, 'memo'),
|
|
@@ -648,7 +662,10 @@ function routeFromDex(dex: string): number {
|
|
|
648
662
|
|
|
649
663
|
function stringField(p: Record<string, unknown>, key: string): string {
|
|
650
664
|
const v = p[key]
|
|
651
|
-
if (
|
|
665
|
+
if (v === '') {
|
|
666
|
+
throw new Error(`Lighter sign params string field '${key}' is empty`)
|
|
667
|
+
}
|
|
668
|
+
if (typeof v === 'string') {
|
|
652
669
|
return v
|
|
653
670
|
}
|
|
654
671
|
throw new Error(
|
package/src/types/account.ts
CHANGED
|
@@ -33,24 +33,36 @@ export type LtAccountPosition = {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
|
|
36
|
+
* Cross-margin collateral flag Lighter reports on an account asset row.
|
|
37
|
+
*
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export type LtAssetMarginMode = 'enabled' | 'disabled'
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Held asset row returned in a Lighter account response. The two balances are
|
|
44
|
+
* the asset's two withdrawal routes: `balance` is the spot route
|
|
45
|
+
* (`AssetRouteType_Spot`) and `margin_balance` the perps route
|
|
46
|
+
* (`AssetRouteType_Perps`). All amounts are decimal strings.
|
|
40
47
|
*
|
|
41
48
|
* @public
|
|
42
49
|
*/
|
|
43
50
|
export type LtAccountAsset = {
|
|
44
51
|
symbol: string
|
|
45
52
|
asset_id: number
|
|
53
|
+
/** Spot-route balance, `locked_balance` included. */
|
|
46
54
|
balance: string
|
|
55
|
+
/** Portion of `balance` reserved by pending activity and not withdrawable. */
|
|
47
56
|
locked_balance: string
|
|
57
|
+
/** Perps-route balance — the asset's collateral leg. */
|
|
58
|
+
margin_balance: string
|
|
59
|
+
/** Collateral weighting Lighter applies to the asset, as a decimal factor. */
|
|
60
|
+
multiplier: string
|
|
48
61
|
/**
|
|
49
|
-
* Cross-margin collateral flag: 0 = MarginDisabled, 1 = MarginEnabled.
|
|
50
62
|
* Lighter surfaces it via `additional_properties`, so it may be absent —
|
|
51
63
|
* chiefly outside Unified Trading Account mode.
|
|
52
64
|
*/
|
|
53
|
-
margin_mode?:
|
|
65
|
+
margin_mode?: LtAssetMarginMode
|
|
54
66
|
}
|
|
55
67
|
|
|
56
68
|
/**
|
package/src/types/action.ts
CHANGED
|
@@ -72,14 +72,26 @@ export type LtUpdateMarginWasmParams = {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
|
-
* Backend-provided params for SignWithdraw.
|
|
75
|
+
* Backend-provided params for SignWithdraw. The asset and route are the
|
|
76
|
+
* caller's selection, not a signer default, and the remaining fields are the
|
|
77
|
+
* venue metadata the signer needs to scale and bounds-check `amount` without
|
|
78
|
+
* an asset registry of its own.
|
|
76
79
|
*
|
|
77
80
|
* @public
|
|
78
81
|
*/
|
|
79
82
|
export type LtWithdrawWasmParams = {
|
|
83
|
+
/** Lighter L2 `asset_id` being withdrawn. */
|
|
80
84
|
asset_index: number
|
|
85
|
+
/** {@link LT_ROUTE_PERP} or {@link LT_ROUTE_SPOT}; anything else is rejected. */
|
|
81
86
|
route_type: number
|
|
82
|
-
amount
|
|
87
|
+
/** Decimal amount in the asset's own units, unscaled. */
|
|
88
|
+
amount: string
|
|
89
|
+
/** The asset's L2 precision — the exponent `amount` is scaled by. */
|
|
90
|
+
decimals: number
|
|
91
|
+
/** Venue minimum for a single withdrawal, in the asset's own units. */
|
|
92
|
+
min_withdrawal_amount: string
|
|
93
|
+
/** Asset symbol, named in a sub-minimum rejection. */
|
|
94
|
+
symbol: string
|
|
83
95
|
}
|
|
84
96
|
|
|
85
97
|
/**
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { LtAssetMarginMode } from '../types/account.js'
|
|
2
|
+
|
|
1
3
|
// Lighter's `AssetMarginMode` wire ints (lighter-go
|
|
2
|
-
// `types/txtypes/update_account_asset_config.go`), used
|
|
3
|
-
//
|
|
4
|
-
//
|
|
4
|
+
// `types/txtypes/update_account_asset_config.go`), used to sign
|
|
5
|
+
// `L2UpdateAccountAssetConfigTx` (tx type 42). The read side is not symmetric:
|
|
6
|
+
// `/api/v1/account` reports the same flag as a string.
|
|
5
7
|
const ASSET_MARGIN_DISABLED = 0
|
|
6
8
|
const ASSET_MARGIN_ENABLED = 1
|
|
7
9
|
|
|
@@ -10,7 +12,7 @@ export function assetMarginModeInt(enabled: boolean): number {
|
|
|
10
12
|
return enabled ? ASSET_MARGIN_ENABLED : ASSET_MARGIN_DISABLED
|
|
11
13
|
}
|
|
12
14
|
|
|
13
|
-
/** Decode Lighter's `margin_mode`
|
|
14
|
-
export function isAssetMarginEnabled(marginMode:
|
|
15
|
-
return marginMode ===
|
|
15
|
+
/** Decode Lighter's `margin_mode` on an account asset back to `enabled`. */
|
|
16
|
+
export function isAssetMarginEnabled(marginMode: LtAssetMarginMode): boolean {
|
|
17
|
+
return marginMode === 'enabled'
|
|
16
18
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ProviderWithdrawableBalance } from '@lifi/perps-sdk'
|
|
2
|
+
import type { LtAccountAsset } from '../types/account.js'
|
|
3
|
+
import { toRequiredBig } from './decimal.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Split each held asset into the two routes a Lighter withdrawal can name:
|
|
7
|
+
* spot draws on `balance` net of `locked_balance`, perps draws on
|
|
8
|
+
* `margin_balance`. Routes with nothing left to draw are dropped; the
|
|
9
|
+
* per-asset venue minimum is applied by the caller holding the asset registry.
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export const lighterWithdrawableBalances = (
|
|
14
|
+
assets: LtAccountAsset[]
|
|
15
|
+
): ProviderWithdrawableBalance[] => {
|
|
16
|
+
const rows: ProviderWithdrawableBalance[] = []
|
|
17
|
+
for (const asset of assets) {
|
|
18
|
+
const assetId = String(asset.asset_id)
|
|
19
|
+
const spot = toRequiredBig(asset.balance, 'balance').minus(
|
|
20
|
+
toRequiredBig(asset.locked_balance, 'locked_balance')
|
|
21
|
+
)
|
|
22
|
+
if (spot.gt(0)) {
|
|
23
|
+
rows.push({ assetId, route: 'spot', available: spot.toFixed() })
|
|
24
|
+
}
|
|
25
|
+
const perps = toRequiredBig(asset.margin_balance, 'margin_balance')
|
|
26
|
+
if (perps.gt(0)) {
|
|
27
|
+
rows.push({ assetId, route: 'perps', available: perps.toFixed() })
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return rows
|
|
31
|
+
}
|