@lifi/perps-sdk-provider-lighter 33.0.0 → 35.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 +53 -47
- package/dist/cjs/LighterProvider.js.map +1 -1
- package/dist/cjs/accountSummary.d.ts.map +1 -1
- package/dist/cjs/accountSummary.js +3 -6
- package/dist/cjs/accountSummary.js.map +1 -1
- package/dist/cjs/signers/createAuthToken.d.ts.map +1 -1
- package/dist/cjs/signers/createAuthToken.js.map +1 -1
- package/dist/cjs/utils/liquidation.js.map +1 -1
- package/dist/cjs/utils/mapFill.js +1 -1
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapOrder.js +1 -1
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/settlementPool.d.ts +6 -0
- package/dist/cjs/utils/settlementPool.d.ts.map +1 -0
- package/dist/cjs/utils/settlementPool.js +21 -0
- package/dist/cjs/utils/settlementPool.js.map +1 -0
- package/dist/cjs/utils/transferMargin.d.ts +2 -2
- package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
- package/dist/cjs/utils/transferMargin.js +2 -2
- package/dist/cjs/utils/transferMargin.js.map +1 -1
- package/dist/esm/LighterProvider.d.ts +7 -11
- package/dist/esm/LighterProvider.d.ts.map +1 -1
- package/dist/esm/LighterProvider.js +63 -54
- package/dist/esm/LighterProvider.js.map +1 -1
- package/dist/esm/accountSummary.d.ts +2 -1
- package/dist/esm/accountSummary.d.ts.map +1 -1
- package/dist/esm/accountSummary.js +5 -7
- package/dist/esm/accountSummary.js.map +1 -1
- package/dist/esm/signers/createAuthToken.d.ts +1 -2
- package/dist/esm/signers/createAuthToken.d.ts.map +1 -1
- package/dist/esm/signers/createAuthToken.js +1 -2
- package/dist/esm/signers/createAuthToken.js.map +1 -1
- package/dist/esm/utils/liquidation.js +2 -2
- package/dist/esm/utils/liquidation.js.map +1 -1
- package/dist/esm/utils/mapFill.js +1 -1
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapOrder.js +1 -1
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/settlementPool.d.ts +14 -0
- package/dist/esm/utils/settlementPool.d.ts.map +1 -0
- package/dist/esm/utils/settlementPool.js +23 -0
- package/dist/esm/utils/settlementPool.js.map +1 -0
- package/dist/esm/utils/transferMargin.d.ts +2 -2
- package/dist/esm/utils/transferMargin.d.ts.map +1 -1
- package/dist/esm/utils/transferMargin.js +2 -2
- package/dist/esm/utils/transferMargin.js.map +1 -1
- package/dist/types/LighterProvider.d.ts +7 -11
- package/dist/types/LighterProvider.d.ts.map +1 -1
- package/dist/types/accountSummary.d.ts +2 -1
- package/dist/types/accountSummary.d.ts.map +1 -1
- package/dist/types/signers/createAuthToken.d.ts +1 -2
- package/dist/types/signers/createAuthToken.d.ts.map +1 -1
- package/dist/types/utils/settlementPool.d.ts +14 -0
- package/dist/types/utils/settlementPool.d.ts.map +1 -0
- package/dist/types/utils/transferMargin.d.ts +2 -2
- package/dist/types/utils/transferMargin.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/LighterProvider.ts +101 -92
- package/src/accountSummary.ts +10 -10
- package/src/signers/createAuthToken.ts +1 -2
- package/src/utils/liquidation.ts +2 -2
- package/src/utils/mapFill.ts +1 -1
- package/src/utils/mapOrder.ts +1 -1
- package/src/utils/settlementPool.ts +36 -0
- package/src/utils/transferMargin.ts +7 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type Big from 'big.js';
|
|
2
|
+
import type { LtAccountAsset } from '../types/account.js';
|
|
3
|
+
export declare const pooledSettlementUnits: (asset: LtAccountAsset) => Big;
|
|
4
|
+
export declare const pooledSettlementSpendable: (asset: LtAccountAsset, availableBalance: Big) => Big;
|
|
5
|
+
export declare const collateralSpotBalance: (assets: readonly LtAccountAsset[], settlementAssetIndex: number) => string;
|
|
6
|
+
//# sourceMappingURL=settlementPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlementPool.d.ts","sourceRoot":"","sources":["../../../src/utils/settlementPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,QAAQ,CAAA;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,eAAO,MAAM,qBAAqB,GAAI,OAAO,cAAc,KAAG,GAG3D,CAAA;AAQH,eAAO,MAAM,yBAAyB,GACpC,OAAO,cAAc,EACrB,kBAAkB,GAAG,KACpB,GAKF,CAAA;AAGD,eAAO,MAAM,qBAAqB,GAChC,QAAQ,SAAS,cAAc,EAAE,EACjC,sBAAsB,MAAM,KAC3B,MAKF,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collateralSpotBalance = exports.pooledSettlementSpendable = exports.pooledSettlementUnits = void 0;
|
|
4
|
+
const decimal_js_1 = require("./decimal.js");
|
|
5
|
+
const pooledSettlementUnits = (asset) => (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance').plus((0, decimal_js_1.toRequiredBig)(asset.margin_balance, 'margin_balance'));
|
|
6
|
+
exports.pooledSettlementUnits = pooledSettlementUnits;
|
|
7
|
+
const pooledSettlementSpendable = (asset, availableBalance) => {
|
|
8
|
+
const marginBalance = (0, decimal_js_1.toRequiredBig)(asset.margin_balance, 'margin_balance');
|
|
9
|
+
return (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance')
|
|
10
|
+
.minus((0, decimal_js_1.toRequiredBig)(asset.locked_balance, 'locked_balance'))
|
|
11
|
+
.plus(marginBalance.lt(availableBalance) ? marginBalance : availableBalance);
|
|
12
|
+
};
|
|
13
|
+
exports.pooledSettlementSpendable = pooledSettlementSpendable;
|
|
14
|
+
const collateralSpotBalance = (assets, settlementAssetIndex) => {
|
|
15
|
+
const asset = assets.find((a) => a.asset_id === settlementAssetIndex);
|
|
16
|
+
return asset === undefined
|
|
17
|
+
? '0'
|
|
18
|
+
: (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance').toFixed();
|
|
19
|
+
};
|
|
20
|
+
exports.collateralSpotBalance = collateralSpotBalance;
|
|
21
|
+
//# sourceMappingURL=settlementPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlementPool.js","sourceRoot":"","sources":["../../../src/utils/settlementPool.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAGrC,MAAM,qBAAqB,GAAG,CAAC,KAAqB,EAAO,EAAE,CAClE,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAC1C,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACtD,CAAA;AAHU,QAAA,qBAAqB,yBAG/B;AAQI,MAAM,yBAAyB,GAAG,CACvC,KAAqB,EACrB,gBAAqB,EAChB,EAAE;IACP,MAAM,aAAa,GAAG,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IAC3E,OAAO,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;SAC3C,KAAK,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;SAC5D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;AAChF,CAAC,CAAA;AARY,QAAA,yBAAyB,6BAQrC;AAGM,MAAM,qBAAqB,GAAG,CACnC,MAAiC,EACjC,oBAA4B,EACpB,EAAE;IACV,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,oBAAoB,CAAC,CAAA;IACrE,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AACvD,CAAC,CAAA;AARY,QAAA,qBAAqB,yBAQjC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Position } from '@lifi/perps-types';
|
|
2
|
-
export declare function positionRemovableMargin(position: Position):
|
|
1
|
+
import { type DecimalString, type Position } from '@lifi/perps-types';
|
|
2
|
+
export declare function positionRemovableMargin(position: Position): DecimalString | undefined;
|
|
3
3
|
//# sourceMappingURL=transferMargin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAyC1B,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAmB3B"}
|
|
@@ -24,10 +24,10 @@ function positivePositionAmount(value, field) {
|
|
|
24
24
|
return amount;
|
|
25
25
|
}
|
|
26
26
|
function positionRemovableMargin(position) {
|
|
27
|
-
if (!(0,
|
|
27
|
+
if (!(0, perps_sdk_1.positionSupportsMarginAdjustment)(position)) {
|
|
28
28
|
return undefined;
|
|
29
29
|
}
|
|
30
|
-
if (!(0,
|
|
30
|
+
if (!(0, perps_sdk_1.positionSupportsMarginRemoval)(position)) {
|
|
31
31
|
return '0';
|
|
32
32
|
}
|
|
33
33
|
const removable = positivePositionAmount(position.marginUsed, 'marginUsed')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;AAkDA,0DAqBC;AAvED,+CAIwB;AACxB,mDAI0B;AAC1B,oDAAwB;AAExB,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,gBAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,sCAAsC,KAAK,MAAM,KAAK,GAAG,CAC1D,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAgBD,SAAgB,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,IAAA,4CAAgC,EAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,IAAA,yCAA6B,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;SACxE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;SAC7D,KAAK,CACJ,sBAAsB,CACpB,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CACF,CAAA;IACH,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
|
|
@@ -9,11 +9,9 @@ import { type LighterDeployment } from './constants.js';
|
|
|
9
9
|
* manager are created per plugin instance.
|
|
10
10
|
*
|
|
11
11
|
* Auth-token resolution order for the auth-gated reads:
|
|
12
|
-
* 1.
|
|
13
|
-
* 2. Constructor `authToken` (string or async factory)
|
|
14
|
-
* 3. Persisted long-lived read-only token, keyed on the resolved Lighter
|
|
12
|
+
* 1. Persisted long-lived read-only token, keyed on the resolved Lighter
|
|
15
13
|
* `accountIndex`
|
|
16
|
-
*
|
|
14
|
+
* 2. Fresh 1h create via this instance's WASM signer + the user's registered
|
|
17
15
|
* API key
|
|
18
16
|
*
|
|
19
17
|
* Status reads report the account's state and do not throw for a missing
|
|
@@ -27,9 +25,9 @@ import { type LighterDeployment } from './constants.js';
|
|
|
27
25
|
* - `SetupRequired` when none of these sources yields a token. The SDK
|
|
28
26
|
* sends no venue request. `getOrders`, `getOrder`, `getFills`,
|
|
29
27
|
* `getPortfolioHistory` and `getActivity` need a token.
|
|
30
|
-
* - `Unauthorized` when Lighter rejects the token that was sent.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
28
|
+
* - `Unauthorized` when Lighter rejects the token that was sent. A
|
|
29
|
+
* read-only token that Lighter reports as revoked is replaced and the
|
|
30
|
+
* read retried once first.
|
|
33
31
|
* - `AccountNotFound` when the wallet has no Lighter account. This also
|
|
34
32
|
* applies to `getPositions`, `getWithdrawableBalances` and
|
|
35
33
|
* `getAvailableToTrade`, which need no token. `getAvailableToTrade`
|
|
@@ -52,8 +50,6 @@ export interface LighterProviderOptions {
|
|
|
52
50
|
* instance's signer and read-only token manager follow this URL.
|
|
53
51
|
*/
|
|
54
52
|
restUrl?: string;
|
|
55
|
-
/** Pre-created Lighter read-only bearer, bypassing SDK token resolution. */
|
|
56
|
-
authToken?: string | (() => string | Promise<string>);
|
|
57
53
|
/** Token lifetime for on-demand standard-token creates (Lighter caps at 8h). Default 1h. */
|
|
58
54
|
tokenLifetimeSeconds?: number;
|
|
59
55
|
/** Re-create when the cached standard token's remaining life is below this. Default 60s. */
|
|
@@ -71,8 +67,8 @@ export interface LighterProviderOptions {
|
|
|
71
67
|
export interface LighterPerpsProvider extends PerpsProviderPlugin {
|
|
72
68
|
/**
|
|
73
69
|
* Resolve a Lighter auth token for `address`, following the resolution order
|
|
74
|
-
* documented on {@link LighterProviderOptions}
|
|
75
|
-
*
|
|
70
|
+
* documented on {@link LighterProviderOptions}. Returns `undefined` when no
|
|
71
|
+
* source can produce a token.
|
|
76
72
|
*/
|
|
77
73
|
resolveAuthToken(address: Address): Promise<string | undefined>;
|
|
78
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,mBAAmB,EAqBxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;AAmCxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQnC,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAiLvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAcD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;OAIG;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,oBAwgDF,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,5 +1,5 @@
|
|
|
1
|
-
import { ACTIVE_ORDER_STATUSES, calculateTransferable, explorerTxUrl, explorerTxUrlFromBase, getAssetRegistry, getMarketRegistry, getMarketsContext, getProviders, isActiveOrderStatus, localStorageAdapter, PerpsError, paginateActivity, resolveQuote, resolveRetryPolicy, toPerpsMarketDisplay, } from '@lifi/perps-sdk';
|
|
2
|
-
import { ActionType, ActivityType,
|
|
1
|
+
import { ACTIVE_ORDER_STATUSES, calculateTransferable, explorerTxUrl, explorerTxUrlFromBase, getAssetRegistry, getMarketRegistry, getMarketsContext, getProviders, isActiveOrderStatus, isDecimalString, localStorageAdapter, numberToDecimalString, PerpsError, paginateActivity, resolveQuote, resolveRetryPolicy, toPerpsMarketDisplay, } from '@lifi/perps-sdk';
|
|
2
|
+
import { ActionType, ActivityType, MarginMode, PerpsErrorCode, } from '@lifi/perps-types';
|
|
3
3
|
import Big from 'big.js';
|
|
4
4
|
import { boundAccountTiers, projectLighterConfigSettings, resolveAccountTier, } from './accountConfig.js';
|
|
5
5
|
import { getAccountSummary, lighterConfig } from './accountSummary.js';
|
|
@@ -11,17 +11,18 @@ import { LighterKeyStore, } from './signers/LighterKeyStore.js';
|
|
|
11
11
|
import { LighterReadOnlyTokenManager } from './signers/LighterReadOnlyTokenManager.js';
|
|
12
12
|
import { LighterSigner } from './signers/LighterSigner.js';
|
|
13
13
|
import { createLighterApiKeyFreshness, lighterSignActions, } from './signers/signActions.js';
|
|
14
|
-
import { LT_ACCOUNT_TRADING_MODE_SIMPLE, LT_MARGIN_MODE_CROSS, LT_MARGIN_MODE_ISOLATED, } from './types/index.js';
|
|
14
|
+
import { LT_ACCOUNT_TRADING_MODE_SIMPLE, LT_ACCOUNT_TRADING_MODE_UNIFIED, LT_MARGIN_MODE_CROSS, LT_MARGIN_MODE_ISOLATED, } from './types/index.js';
|
|
15
15
|
import { decodeActivityCursor, encodeActivityCursor, } from './utils/activityCursor.js';
|
|
16
16
|
import { LIGHTER_RETRY_DEFAULTS, LighterApiClient, LighterAuthRejectedError, LighterTokenRevokedError, } from './utils/apiClient.js';
|
|
17
17
|
import { isAssetMarginEnabled } from './utils/assetCollateral.js';
|
|
18
18
|
import { estimateLiquidationPrice, fetchDetailedAccount, leverageFromImf, lighterAsset, lighterWithdrawableBalances, mapFill, mapOpenPositions, mapOrder, mapPortfolioHistory, positionRemovableMargin, snapOrderPrice, snapOrderSize, toBigOrNull, toIsoFromMs, toIsoFromSeconds, toRequiredBig, } from './utils/index.js';
|
|
19
19
|
import { fetchRegisteredApiKey, normalizeLighterPublicKey, } from './utils/registeredApiKey.js';
|
|
20
|
+
import { collateralSpotBalance, pooledSettlementSpendable, pooledSettlementUnits, } from './utils/settlementPool.js';
|
|
20
21
|
import { spotPriceByAssetId, spotValuation } from './utils/spotPrice.js';
|
|
21
22
|
import { isPlaceholderTxHash } from './utils/txHash.js';
|
|
22
23
|
import { wireList } from './utils/wireList.js';
|
|
23
24
|
const ZERO_FEE_TIER = { maker: '0', taker: '0' };
|
|
24
|
-
const tickToFeeString = (tick) =>
|
|
25
|
+
const tickToFeeString = (tick) => numberToDecimalString(tick / LIGHTER_FEE_TICK_SCALE);
|
|
25
26
|
const projectFeeTier = (limits) => ({
|
|
26
27
|
maker: tickToFeeString(limits.current_maker_fee_tick),
|
|
27
28
|
taker: tickToFeeString(limits.current_taker_fee_tick),
|
|
@@ -105,11 +106,6 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
105
106
|
const explorerTxBaseUrl = deployment.explorerTxBaseUrl;
|
|
106
107
|
const bridgeChainId = deployment.bridgeChainId;
|
|
107
108
|
const collateral = deployment.collateral;
|
|
108
|
-
const authTokenSource = typeof options.authToken === 'function'
|
|
109
|
-
? options.authToken
|
|
110
|
-
: options.authToken !== undefined
|
|
111
|
-
? () => options.authToken
|
|
112
|
-
: undefined;
|
|
113
109
|
const storage = options.storage ?? localStorageAdapter;
|
|
114
110
|
const signer = new LighterSigner({
|
|
115
111
|
apiUrl: restUrl,
|
|
@@ -168,28 +164,17 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
168
164
|
};
|
|
169
165
|
/**
|
|
170
166
|
* Resolve the bearer token for auth-gated reads. Priority:
|
|
171
|
-
* 1.
|
|
172
|
-
* 2. Constructor-supplied token source.
|
|
173
|
-
* 3. A stored read-only token — preferred for reads: it is read-only, so
|
|
167
|
+
* 1. A stored read-only token — preferred for reads: it is read-only, so
|
|
174
168
|
* forwarding it (incl. to the backend) cannot authorise writes.
|
|
175
|
-
*
|
|
169
|
+
* 2. A read-only token created on first use (via signer + registered API
|
|
176
170
|
* key) and persisted for reuse.
|
|
177
|
-
*
|
|
171
|
+
* 3. A standard auth token (read+write, 8h max) as a last resort — used
|
|
178
172
|
* as the credential that authorises read-only token creation, and as
|
|
179
173
|
* the fallback while creation is failing, bounded by the
|
|
180
174
|
* creation-retry backoff.
|
|
181
175
|
* Returns `undefined` when no source can produce a token.
|
|
182
176
|
*/
|
|
183
|
-
const resolveAuthToken = async (
|
|
184
|
-
if (opts?.lighterAuthToken !== undefined) {
|
|
185
|
-
return opts.lighterAuthToken;
|
|
186
|
-
}
|
|
187
|
-
if (authTokenSource !== undefined) {
|
|
188
|
-
return authTokenSource();
|
|
189
|
-
}
|
|
190
|
-
if (address === undefined) {
|
|
191
|
-
return undefined;
|
|
192
|
-
}
|
|
177
|
+
const resolveAuthToken = async (address, knownApiKey) => {
|
|
193
178
|
const apiKey = knownApiKey ?? (await keyStore.get(address));
|
|
194
179
|
if (apiKey === null) {
|
|
195
180
|
return undefined;
|
|
@@ -255,12 +240,11 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
255
240
|
return attempt;
|
|
256
241
|
};
|
|
257
242
|
/** {@link resolveAuthToken}, throwing `SetupRequired` when no source yields a token. */
|
|
258
|
-
const requireAuthToken = async (read,
|
|
259
|
-
const token = await resolveAuthToken(
|
|
243
|
+
const requireAuthToken = async (read, address, knownApiKey) => {
|
|
244
|
+
const token = await resolveAuthToken(address, knownApiKey);
|
|
260
245
|
if (token === undefined) {
|
|
261
|
-
throw new PerpsError(PerpsErrorCode.SetupRequired, `Lighter ${read} requires an auth token.
|
|
262
|
-
'
|
|
263
|
-
'forward `options.lighterAuthToken` on the call.');
|
|
246
|
+
throw new PerpsError(PerpsErrorCode.SetupRequired, `Lighter ${read} requires an auth token. Register an API key + signer ` +
|
|
247
|
+
'for on-demand creation.');
|
|
264
248
|
}
|
|
265
249
|
return token;
|
|
266
250
|
};
|
|
@@ -307,13 +291,12 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
307
291
|
}
|
|
308
292
|
}
|
|
309
293
|
};
|
|
310
|
-
const retryOnRevoked = async (
|
|
294
|
+
const retryOnRevoked = async (address, token, run) => {
|
|
311
295
|
try {
|
|
312
296
|
return await run(token);
|
|
313
297
|
}
|
|
314
298
|
catch (err) {
|
|
315
|
-
|
|
316
|
-
if (!(err instanceof LighterTokenRevokedError) || !sdkOwnsToken) {
|
|
299
|
+
if (!(err instanceof LighterTokenRevokedError)) {
|
|
317
300
|
throw err;
|
|
318
301
|
}
|
|
319
302
|
const fresh = await replaceRevokedReadOnlyToken(address, token);
|
|
@@ -439,6 +422,16 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
439
422
|
const setup = await setupPromise;
|
|
440
423
|
return setup.find((descriptor) => descriptor.type === action);
|
|
441
424
|
};
|
|
425
|
+
/**
|
|
426
|
+
* Refuse a SEND_ASSET for a unified account. Its settlement asset is one pool
|
|
427
|
+
* across both routes, so a perps↔spot transfer has nothing to move.
|
|
428
|
+
*/
|
|
429
|
+
const assertSendAssetMode = async (address) => {
|
|
430
|
+
const account = await fetchDetailedAccount(apiClient(), address);
|
|
431
|
+
if (account.account_trading_mode === LT_ACCOUNT_TRADING_MODE_UNIFIED) {
|
|
432
|
+
throw new PerpsError(PerpsErrorCode.PooledCategoryTransfer, 'Lighter unified accounts pool the settlement asset across perps and spot; a transfer between them has nothing to move');
|
|
433
|
+
}
|
|
434
|
+
};
|
|
442
435
|
/**
|
|
443
436
|
* Refuse an order signature for a tier no ACCOUNT_TYPE option binds. An
|
|
444
437
|
* unreadable descriptor or tier fails open: the venue itself
|
|
@@ -464,10 +457,10 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
464
457
|
}
|
|
465
458
|
let userTierName;
|
|
466
459
|
try {
|
|
467
|
-
const token = await resolveAuthToken(
|
|
460
|
+
const token = await resolveAuthToken(address, localKey);
|
|
468
461
|
const limits = token === undefined
|
|
469
462
|
? undefined
|
|
470
|
-
: await retryOnRevoked(
|
|
463
|
+
: await retryOnRevoked(address, token, (resolvedToken) => fetchAccountLimits(apiClient(), localKey.accountIndex, resolvedToken));
|
|
471
464
|
userTierName = limits?.user_tier_name;
|
|
472
465
|
}
|
|
473
466
|
catch (err) {
|
|
@@ -490,7 +483,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
490
483
|
boundClient = client;
|
|
491
484
|
},
|
|
492
485
|
resolveAuthToken(address) {
|
|
493
|
-
return resolveAuthToken(
|
|
486
|
+
return resolveAuthToken(address);
|
|
494
487
|
},
|
|
495
488
|
async getAccount(params, opts) {
|
|
496
489
|
const client = apiClient(opts);
|
|
@@ -509,7 +502,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
509
502
|
normalizeLighterPublicKey(registeredKey.public_key);
|
|
510
503
|
// Status read: a missing or stale credential reports `apiKeyRegistered: false`, not a throw.
|
|
511
504
|
const token = apiKeyRegistered
|
|
512
|
-
? await resolveAuthToken(
|
|
505
|
+
? await resolveAuthToken(params.address, localKey)
|
|
513
506
|
: undefined;
|
|
514
507
|
const registry = getMarketRegistry(requireClient(), providerKey);
|
|
515
508
|
const assetRegistry = getAssetRegistry(requireClient(), providerKey);
|
|
@@ -520,7 +513,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
520
513
|
getMarketsContext(requireClient(), { provider: providerKey }, opts),
|
|
521
514
|
token === undefined
|
|
522
515
|
? Promise.resolve(undefined)
|
|
523
|
-
: retryOnRevoked(
|
|
516
|
+
: retryOnRevoked(params.address, token, (resolvedToken) => fetchAccountLimits(client, account.index, resolvedToken)),
|
|
524
517
|
apiKeyRegistered
|
|
525
518
|
? readOnlyTokenManager.get(params.address, localKey.accountIndex)
|
|
526
519
|
: Promise.resolve(undefined),
|
|
@@ -534,9 +527,15 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
534
527
|
const availableBalance = toRequiredBig(account.available_balance, 'available_balance');
|
|
535
528
|
// Each asset has a spot route (`balance`) and a perps route
|
|
536
529
|
// (`margin_balance`). The instance's settlement asset is valued 1:1; an
|
|
537
|
-
// asset no spot market prices keeps a zero USD value.
|
|
538
|
-
|
|
539
|
-
const
|
|
530
|
+
// asset no spot market prices keeps a zero USD value. A unified account
|
|
531
|
+
// pools both settlement routes into one spot row.
|
|
532
|
+
const isPooled = (asset) => account.account_trading_mode === LT_ACCOUNT_TRADING_MODE_UNIFIED &&
|
|
533
|
+
asset.asset_id === collateral.assetIndex;
|
|
534
|
+
const heldAssets = account.assets.filter((asset) => (isPooled(asset)
|
|
535
|
+
? pooledSettlementUnits(asset)
|
|
536
|
+
: toRequiredBig(asset.balance, 'balance')).gt(0));
|
|
537
|
+
const marginAssets = account.assets.filter((asset) => !isPooled(asset) &&
|
|
538
|
+
toRequiredBig(asset.margin_balance, 'margin_balance').gt(0));
|
|
540
539
|
const spotPrices = spotPriceByAssetId(registry.markets, LIGHTER_SPOT_CATEGORY_ID, prices, new Set([...heldAssets, ...marginAssets]
|
|
541
540
|
.filter((a) => a.asset_id !== collateral.assetIndex)
|
|
542
541
|
.map((a) => String(a.asset_id))));
|
|
@@ -569,6 +568,13 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
569
568
|
};
|
|
570
569
|
});
|
|
571
570
|
const balances = heldAssets.map((a) => {
|
|
571
|
+
if (isPooled(a)) {
|
|
572
|
+
const units = pooledSettlementUnits(a).toFixed();
|
|
573
|
+
return {
|
|
574
|
+
...toBalance(a, LIGHTER_SPOT_CATEGORY_ID, registryAsset(a), units),
|
|
575
|
+
transferable: calculateTransferable(pooledSettlementSpendable(a, availableBalance).toFixed(), units),
|
|
576
|
+
};
|
|
577
|
+
}
|
|
572
578
|
const balance = toRequiredBig(a.balance, 'balance');
|
|
573
579
|
return {
|
|
574
580
|
...toBalance(a, LIGHTER_SPOT_CATEGORY_ID, registryAsset(a), isDecimalString(a.balance) ? a.balance : balance.toFixed()),
|
|
@@ -595,6 +601,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
595
601
|
crossAssetValue: account.cross_asset_value,
|
|
596
602
|
crossInitialMarginRequirement: account.cross_initial_margin_requirement,
|
|
597
603
|
totalAssetValue: account.total_asset_value,
|
|
604
|
+
collateralSpotBalance: collateralSpotBalance(account.assets, collateral.assetIndex),
|
|
598
605
|
userTierName: limitsResult?.user_tier_name,
|
|
599
606
|
accountTradingMode: account.account_trading_mode ?? LT_ACCOUNT_TRADING_MODE_SIMPLE,
|
|
600
607
|
assetCollateral,
|
|
@@ -701,7 +708,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
701
708
|
if (statuses.size === 0) {
|
|
702
709
|
return empty;
|
|
703
710
|
}
|
|
704
|
-
const token = await requireAuthToken('orders read',
|
|
711
|
+
const token = await requireAuthToken('orders read', params.address);
|
|
705
712
|
const client = apiClient(opts);
|
|
706
713
|
const registry = getMarketRegistry(requireClient(), providerKey);
|
|
707
714
|
const [account] = await Promise.all([
|
|
@@ -721,7 +728,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
721
728
|
terminal = true;
|
|
722
729
|
}
|
|
723
730
|
}
|
|
724
|
-
const [activeResponse, inactiveResponse] = await retryOnRevoked(
|
|
731
|
+
const [activeResponse, inactiveResponse] = await retryOnRevoked(params.address, token, (t) => Promise.all([
|
|
725
732
|
active && params.cursor === undefined
|
|
726
733
|
? fetchActiveOrders(client, t, account.index, marketId)
|
|
727
734
|
: undefined,
|
|
@@ -775,7 +782,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
775
782
|
* `order_index`.
|
|
776
783
|
*/
|
|
777
784
|
async getOrder(params, opts) {
|
|
778
|
-
const token = await requireAuthToken('order lookup',
|
|
785
|
+
const token = await requireAuthToken('order lookup', params.address);
|
|
779
786
|
const client = apiClient(opts);
|
|
780
787
|
const registry = getMarketRegistry(requireClient(), providerKey);
|
|
781
788
|
const [account] = await Promise.all([
|
|
@@ -801,7 +808,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
801
808
|
throw new PerpsError(PerpsErrorCode.SDKError, `Lighter order id "${params.id}" names a client order index, but ` +
|
|
802
809
|
`"${clientOrderIndex}" is not a decimal integer.`);
|
|
803
810
|
}
|
|
804
|
-
const orders = await retryOnRevoked(
|
|
811
|
+
const orders = await retryOnRevoked(params.address, token, (t) => fetchOrdersByClientOrderIndex(client, t, account.index, clientOrderIndex));
|
|
805
812
|
// `accountOrders` reaches active and inactive rows alike, so a reused
|
|
806
813
|
// client order index can match more than one row. Prefer the live one.
|
|
807
814
|
const matches = orders
|
|
@@ -814,12 +821,12 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
814
821
|
return hit;
|
|
815
822
|
}
|
|
816
823
|
const byOrderIndex = (o) => String(o.order_index) === params.id;
|
|
817
|
-
const active = await retryOnRevoked(
|
|
824
|
+
const active = await retryOnRevoked(params.address, token, (t) => fetchActiveOrders(client, t, account.index, LIGHTER_ALL_MARKETS_WILDCARD));
|
|
818
825
|
const activeHit = active.orders.find(byOrderIndex);
|
|
819
826
|
if (activeHit !== undefined) {
|
|
820
827
|
return detail(activeHit);
|
|
821
828
|
}
|
|
822
|
-
const inactive = await retryOnRevoked(
|
|
829
|
+
const inactive = await retryOnRevoked(params.address, token, (t) => client.getAuthed('/api/v1/accountInactiveOrders', t, {
|
|
823
830
|
account_index: account.index,
|
|
824
831
|
market_id: LIGHTER_ALL_MARKETS_WILDCARD,
|
|
825
832
|
limit: INACTIVE_ORDERS_LOOKUP_LIMIT,
|
|
@@ -831,7 +838,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
831
838
|
return detail(inactiveHit);
|
|
832
839
|
},
|
|
833
840
|
async getFills(params, opts) {
|
|
834
|
-
const token = await requireAuthToken('fills read',
|
|
841
|
+
const token = await requireAuthToken('fills read', params.address);
|
|
835
842
|
const client = apiClient(opts);
|
|
836
843
|
const registry = getMarketRegistry(requireClient(), providerKey);
|
|
837
844
|
const [account] = await Promise.all([
|
|
@@ -847,7 +854,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
847
854
|
if (params.cursor !== undefined) {
|
|
848
855
|
queryParams.cursor = params.cursor;
|
|
849
856
|
}
|
|
850
|
-
const response = await retryOnRevoked(
|
|
857
|
+
const response = await retryOnRevoked(params.address, token, (tok) => client.getAuthed('/api/v1/trades', tok, queryParams));
|
|
851
858
|
// `get`, not `require`: a market id the backend list no longer carries
|
|
852
859
|
// drops only its own row instead of rejecting the whole page. The
|
|
853
860
|
// registry warns once per unresolved id. A delisted market still
|
|
@@ -870,9 +877,8 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
870
877
|
};
|
|
871
878
|
},
|
|
872
879
|
async getPortfolioHistory(params, opts) {
|
|
873
|
-
const
|
|
874
|
-
const
|
|
875
|
-
const token = await requireAuthToken('portfolio history read', opts, params.address, apiKey ?? undefined);
|
|
880
|
+
const apiKey = await keyStore.get(params.address);
|
|
881
|
+
const token = await requireAuthToken('portfolio history read', params.address, apiKey ?? undefined);
|
|
876
882
|
const client = apiClient(opts);
|
|
877
883
|
const account = await plugin.getAccount({ address: params.address }, opts);
|
|
878
884
|
const window = PNL_WINDOWS[params.range];
|
|
@@ -894,7 +900,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
894
900
|
// fallback sits outside `retryOnRevoked`, so a revocation the standard
|
|
895
901
|
// token reports never replaces the read-only one. The key is re-read at
|
|
896
902
|
// retry time because `REGISTER_API_KEY` can rotate it.
|
|
897
|
-
const response = await retryOnRevoked(
|
|
903
|
+
const response = await retryOnRevoked(params.address, token, read).catch(async (err) => {
|
|
898
904
|
if (!(err instanceof LighterAuthRejectedError) || apiKey === null) {
|
|
899
905
|
throw err;
|
|
900
906
|
}
|
|
@@ -907,7 +913,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
907
913
|
return mapPortfolioHistory(params.range, wireList(response.pnl), new Big(getAccountSummary(account, account.positions).portfolioValue));
|
|
908
914
|
},
|
|
909
915
|
async getActivity(params, opts) {
|
|
910
|
-
const token = await requireAuthToken('activity read',
|
|
916
|
+
const token = await requireAuthToken('activity read', params.address);
|
|
911
917
|
const inputCursor = decodeActivityCursor(params.cursor);
|
|
912
918
|
const client = apiClient(opts);
|
|
913
919
|
const account = await fetchDetailedAccount(client, params.address);
|
|
@@ -916,7 +922,7 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
916
922
|
// Markets identify funding and liquidation rows; assets identify ledger
|
|
917
923
|
// rows. A request for one surface must not pull the other's registry.
|
|
918
924
|
const [history] = await Promise.all([
|
|
919
|
-
retryOnRevoked(
|
|
925
|
+
retryOnRevoked(params.address, token, (t) => fetchAllHistory(client, t, account.index, params.address, params.type, inputCursor)),
|
|
920
926
|
wantsAnyType(params.type, MARKET_BEARING_TYPES)
|
|
921
927
|
? marketRegistry.sync()
|
|
922
928
|
: Promise.resolve(),
|
|
@@ -1104,6 +1110,9 @@ export const createLighterProvider = (deployment, options = {}) => {
|
|
|
1104
1110
|
if (steps.some((step) => ORDER_PLACEMENT_ACTIONS.has(step.action))) {
|
|
1105
1111
|
await assertOrderTier(address);
|
|
1106
1112
|
}
|
|
1113
|
+
if (steps.some((step) => step.action === ActionType.SEND_ASSET)) {
|
|
1114
|
+
await assertSendAssetMode(address);
|
|
1115
|
+
}
|
|
1107
1116
|
return lighterSignActions({
|
|
1108
1117
|
signer,
|
|
1109
1118
|
keyStore,
|