@lifi/perps-sdk 0.0.0-preview-3c78fa1 → 0.0.0-preview-ba2d335
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/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/storage/encryptedStorage.d.ts +3 -0
- package/dist/cjs/storage/encryptedStorage.d.ts.map +1 -0
- package/dist/cjs/storage/encryptedStorage.js +124 -0
- package/dist/cjs/storage/encryptedStorage.js.map +1 -0
- package/dist/cjs/storage/storage.d.ts +0 -1
- package/dist/cjs/storage/storage.d.ts.map +1 -1
- package/dist/cjs/storage/storage.js +0 -27
- package/dist/cjs/storage/storage.js.map +1 -1
- package/dist/cjs/types/api.d.ts +1 -0
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/utils/accountSummary.d.ts +1 -1
- package/dist/cjs/utils/accountSummary.d.ts.map +1 -1
- package/dist/cjs/utils/accountSummary.js +6 -2
- package/dist/cjs/utils/accountSummary.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/storage/encryptedStorage.d.ts +22 -0
- package/dist/esm/storage/encryptedStorage.d.ts.map +1 -0
- package/dist/esm/storage/encryptedStorage.js +149 -0
- package/dist/esm/storage/encryptedStorage.js.map +1 -0
- package/dist/esm/storage/storage.d.ts +0 -7
- package/dist/esm/storage/storage.d.ts.map +1 -1
- package/dist/esm/storage/storage.js +0 -34
- package/dist/esm/storage/storage.js.map +1 -1
- package/dist/esm/types/api.d.ts +4 -0
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/utils/accountSummary.d.ts +4 -1
- package/dist/esm/utils/accountSummary.d.ts.map +1 -1
- package/dist/esm/utils/accountSummary.js +6 -2
- package/dist/esm/utils/accountSummary.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/storage/encryptedStorage.d.ts +22 -0
- package/dist/types/storage/encryptedStorage.d.ts.map +1 -0
- package/dist/types/storage/storage.d.ts +0 -7
- package/dist/types/storage/storage.d.ts.map +1 -1
- package/dist/types/types/api.d.ts +4 -0
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/utils/accountSummary.d.ts +4 -1
- package/dist/types/utils/accountSummary.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -1
- package/src/storage/encryptedStorage.ts +171 -0
- package/src/storage/storage.ts +0 -34
- package/src/types/api.ts +4 -0
- package/src/utils/accountSummary.ts +10 -3
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAkBpD"}
|
|
@@ -1,37 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* localStorage adapter for browser environments. Falls back to a no-op when
|
|
3
|
-
* `localStorage` is unavailable (e.g. SSR).
|
|
4
|
-
*
|
|
5
|
-
* @public
|
|
6
|
-
*/
|
|
7
|
-
export const localStorageAdapter = {
|
|
8
|
-
get: (key) => {
|
|
9
|
-
try {
|
|
10
|
-
return Promise.resolve(localStorage.getItem(key));
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
return Promise.resolve(null);
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
set: (key, value) => {
|
|
17
|
-
try {
|
|
18
|
-
localStorage.setItem(key, value);
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// localStorage not available
|
|
22
|
-
}
|
|
23
|
-
return Promise.resolve();
|
|
24
|
-
},
|
|
25
|
-
remove: (key) => {
|
|
26
|
-
try {
|
|
27
|
-
localStorage.removeItem(key);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
// localStorage not available
|
|
31
|
-
}
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
1
|
/**
|
|
36
2
|
* In-memory storage adapter for testing or server-side use.
|
|
37
3
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEvC,OAAO;QACL,GAAG,EAAE,CAAC,GAAW,EAA0B,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAA;QAChD,CAAC;QAED,GAAG,EAAE,CAAC,GAAW,EAAE,KAAa,EAAiB,EAAE;YACjD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;QAED,MAAM,EAAE,CAAC,GAAW,EAAiB,EAAE;YACrC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/esm/types/api.d.ts
CHANGED
|
@@ -154,7 +154,11 @@ export interface SendAssetActionParams {
|
|
|
154
154
|
export interface CancelOrdersParams {
|
|
155
155
|
provider: string;
|
|
156
156
|
address: Address;
|
|
157
|
+
/** Venue order ids. Venues whose ids are scoped per market (e.g. Lighter's
|
|
158
|
+
* `order_index`) also accept the composite `"<market_id>:<order_id>"`. */
|
|
157
159
|
ids: string[];
|
|
160
|
+
/** Market context for per-market order ids; the order's `market.id`. */
|
|
161
|
+
assetId?: string;
|
|
158
162
|
}
|
|
159
163
|
/**
|
|
160
164
|
* Parameters for modifying orders.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-type
|
|
|
6
6
|
* - `'free'` — free collateral only; locked margin and unrealized PnL are
|
|
7
7
|
* both carried by the positions. Available margin is the free collateral
|
|
8
8
|
* as-is; unrealized PnL is not counted toward it.
|
|
9
|
+
* - `'net'` — free collateral with unrealized PnL already marked in; only
|
|
10
|
+
* the locked margin is carried by the positions (e.g. a venue-reported
|
|
11
|
+
* available balance).
|
|
9
12
|
* - `'gross'` — locked margin included, unrealized PnL carried by the
|
|
10
13
|
* positions (e.g. spot holdings backing a unified account). The venue
|
|
11
14
|
* counts unrealized PnL toward buying power, so it is added to available
|
|
@@ -16,7 +19,7 @@ import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-type
|
|
|
16
19
|
*
|
|
17
20
|
* @public
|
|
18
21
|
*/
|
|
19
|
-
export type CollateralSemantics = 'free' | 'gross' | 'equity';
|
|
22
|
+
export type CollateralSemantics = 'free' | 'net' | 'gross' | 'equity';
|
|
20
23
|
/**
|
|
21
24
|
* Roll an {@link AccountResponse} and its open positions up into an
|
|
22
25
|
* {@link AccountSummary}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAM1B
|
|
1
|
+
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,QAAQ,EAAE,EACrB,SAAS,EAAE,mBAAmB,GAC7B,cAAc,CAgChB"}
|
|
@@ -17,8 +17,12 @@ export function summarizeAccount(account, positions, semantics) {
|
|
|
17
17
|
}
|
|
18
18
|
const collateral = sumValueUsd(account.collateralBalances);
|
|
19
19
|
const balances = sumValueUsd(account.balances);
|
|
20
|
-
const grossCollateral = semantics === 'free'
|
|
21
|
-
|
|
20
|
+
const grossCollateral = semantics === 'free' || semantics === 'net'
|
|
21
|
+
? collateral + marginUsed
|
|
22
|
+
: collateral;
|
|
23
|
+
const equity = semantics === 'equity' || semantics === 'net'
|
|
24
|
+
? grossCollateral
|
|
25
|
+
: grossCollateral + unrealizedPnl;
|
|
22
26
|
// Buying power is equity net of locked margin, so unrealized PnL counts
|
|
23
27
|
// toward it. The `'free'` rows exclude uPnL from available margin, holding
|
|
24
28
|
// it purely as free collateral.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountSummary.js","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,GAAG,CAAC,QAAqC,EAAU,EAAE,CACpE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"accountSummary.js","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,GAAG,CAAC,QAAqC,EAAU,EAAE,CACpE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;AAwBjE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAwB,EACxB,SAAqB,EACrB,SAA8B;IAE9B,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,aAAa,GAAG,CAAC,CAAA;IACrB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,UAAU,IAAI,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACzC,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE9C,MAAM,eAAe,GACnB,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK;QACzC,CAAC,CAAC,UAAU,GAAG,UAAU;QACzB,CAAC,CAAC,UAAU,CAAA;IAChB,MAAM,MAAM,GACV,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK;QAC3C,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,eAAe,GAAG,aAAa,CAAA;IAErC,wEAAwE;IACxE,2EAA2E;IAC3E,gCAAgC;IAChC,MAAM,eAAe,GACnB,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAA;IAE3E,OAAO;QACL,cAAc,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE;QAC9C,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;QAC3C,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;QACjC,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE;KACxC,CAAA;AACH,CAAC"}
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -48,8 +48,9 @@ export { getQuote } from './services/getQuote.js';
|
|
|
48
48
|
export { getTermsAcceptance } from './services/getTermsAcceptance.js';
|
|
49
49
|
export { resolveQuote, resolveQuoteMarket } from './services/resolveQuote.js';
|
|
50
50
|
export { QUOTE_THROTTLE_MS, resolveSubscribeQuote, } from './services/resolveSubscribeQuote.js';
|
|
51
|
+
export { localStorageAdapter } from './storage/encryptedStorage.js';
|
|
51
52
|
export { parseStoredRecord, readValidatedRecord, } from './storage/parseStoredRecord.js';
|
|
52
|
-
export { createMemoryStorage
|
|
53
|
+
export { createMemoryStorage } from './storage/storage.js';
|
|
53
54
|
export type { StorageAdapter } from './storage/types.js';
|
|
54
55
|
export type { FetchWithRetryOptions } from './transport/fetchWithRetry.js';
|
|
55
56
|
export { fetchWithRetry } from './transport/fetchWithRetry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,cAAc,mBAAmB,CAAA;AACjC,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,8BAA8B,CAAA;AAErC,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StorageAdapter } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default storage adapter: persists AES-GCM-256 ciphertext to browser
|
|
4
|
+
* `localStorage`, keyed by a non-extractable master {@link CryptoKey} held in
|
|
5
|
+
* IndexedDB. Each `set` uses a fresh 12-byte IV and
|
|
6
|
+
* stores `base64(iv ‖ ciphertext)`. Falls back to a no-op / `null` when
|
|
7
|
+
* `localStorage`, `indexedDB`, or `crypto.subtle` is unavailable (e.g. SSR) —
|
|
8
|
+
* never writing plaintext.
|
|
9
|
+
*
|
|
10
|
+
* `get` resolves `null` on any failure (missing master key, tampered or
|
|
11
|
+
* truncated ciphertext, malformed value), matching the poisoned-record
|
|
12
|
+
* eviction philosophy so callers treat undecryptable data as absent.
|
|
13
|
+
*
|
|
14
|
+
* @security Encryption at rest defeats generic browser-storage/disk scanning
|
|
15
|
+
* and raw key exfiltration, not malware targeting this SDK or a fully
|
|
16
|
+
* compromised page — a same-origin script can still drive this adapter to
|
|
17
|
+
* decrypt.
|
|
18
|
+
*
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
export declare const localStorageAdapter: StorageAdapter;
|
|
22
|
+
//# sourceMappingURL=encryptedStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryptedStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/encryptedStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAgGhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAuDjC,CAAA"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import type { StorageAdapter } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* localStorage adapter for browser environments. Falls back to a no-op when
|
|
4
|
-
* `localStorage` is unavailable (e.g. SSR).
|
|
5
|
-
*
|
|
6
|
-
* @public
|
|
7
|
-
*/
|
|
8
|
-
export declare const localStorageAdapter: StorageAdapter;
|
|
9
2
|
/**
|
|
10
3
|
* In-memory storage adapter for testing or server-side use.
|
|
11
4
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAkBpD"}
|
|
@@ -154,7 +154,11 @@ export interface SendAssetActionParams {
|
|
|
154
154
|
export interface CancelOrdersParams {
|
|
155
155
|
provider: string;
|
|
156
156
|
address: Address;
|
|
157
|
+
/** Venue order ids. Venues whose ids are scoped per market (e.g. Lighter's
|
|
158
|
+
* `order_index`) also accept the composite `"<market_id>:<order_id>"`. */
|
|
157
159
|
ids: string[];
|
|
160
|
+
/** Market context for per-market order ids; the order's `market.id`. */
|
|
161
|
+
assetId?: string;
|
|
158
162
|
}
|
|
159
163
|
/**
|
|
160
164
|
* Parameters for modifying orders.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-type
|
|
|
6
6
|
* - `'free'` — free collateral only; locked margin and unrealized PnL are
|
|
7
7
|
* both carried by the positions. Available margin is the free collateral
|
|
8
8
|
* as-is; unrealized PnL is not counted toward it.
|
|
9
|
+
* - `'net'` — free collateral with unrealized PnL already marked in; only
|
|
10
|
+
* the locked margin is carried by the positions (e.g. a venue-reported
|
|
11
|
+
* available balance).
|
|
9
12
|
* - `'gross'` — locked margin included, unrealized PnL carried by the
|
|
10
13
|
* positions (e.g. spot holdings backing a unified account). The venue
|
|
11
14
|
* counts unrealized PnL toward buying power, so it is added to available
|
|
@@ -16,7 +19,7 @@ import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-type
|
|
|
16
19
|
*
|
|
17
20
|
* @public
|
|
18
21
|
*/
|
|
19
|
-
export type CollateralSemantics = 'free' | 'gross' | 'equity';
|
|
22
|
+
export type CollateralSemantics = 'free' | 'net' | 'gross' | 'equity';
|
|
20
23
|
/**
|
|
21
24
|
* Roll an {@link AccountResponse} and its open positions up into an
|
|
22
25
|
* {@link AccountSummary}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAM1B
|
|
1
|
+
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../../src/utils/accountSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,QAAQ,EAAE,EACrB,SAAS,EAAE,mBAAmB,GAC7B,cAAc,CAgChB"}
|
package/dist/types/version.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk",
|
|
3
|
-
"version": "0.0.0-preview-
|
|
3
|
+
"version": "0.0.0-preview-ba2d335",
|
|
4
4
|
"description": "LI.FI Perps SDK for perpetuals trading",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@lifi/types": "17.82.1",
|
|
45
45
|
"partysocket": "^1.1.19",
|
|
46
46
|
"viem": "^2.48.8",
|
|
47
|
-
"@lifi/perps-types": "^1.
|
|
47
|
+
"@lifi/perps-types": "^1.14.0"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
package/src/index.ts
CHANGED
|
@@ -64,11 +64,12 @@ export {
|
|
|
64
64
|
QUOTE_THROTTLE_MS,
|
|
65
65
|
resolveSubscribeQuote,
|
|
66
66
|
} from './services/resolveSubscribeQuote.js'
|
|
67
|
+
export { localStorageAdapter } from './storage/encryptedStorage.js'
|
|
67
68
|
export {
|
|
68
69
|
parseStoredRecord,
|
|
69
70
|
readValidatedRecord,
|
|
70
71
|
} from './storage/parseStoredRecord.js'
|
|
71
|
-
export { createMemoryStorage
|
|
72
|
+
export { createMemoryStorage } from './storage/storage.js'
|
|
72
73
|
export type { StorageAdapter } from './storage/types.js'
|
|
73
74
|
export type { FetchWithRetryOptions } from './transport/fetchWithRetry.js'
|
|
74
75
|
export { fetchWithRetry } from './transport/fetchWithRetry.js'
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { StorageAdapter } from './types.js'
|
|
2
|
+
|
|
3
|
+
const DB_NAME = 'lifi-perps-sdk'
|
|
4
|
+
const OBJECT_STORE = 'keys'
|
|
5
|
+
const MASTER_KEY_ID = 'storage-master-key'
|
|
6
|
+
const IV_BYTE_LENGTH = 12
|
|
7
|
+
const AES_KEY_PARAMS = { name: 'AES-GCM', length: 256 } as const
|
|
8
|
+
|
|
9
|
+
let masterKeyPromise: Promise<CryptoKey | null> | undefined
|
|
10
|
+
|
|
11
|
+
function openDb(): Promise<IDBDatabase> {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const request = indexedDB.open(DB_NAME, 1)
|
|
14
|
+
request.onupgradeneeded = () => {
|
|
15
|
+
request.result.createObjectStore(OBJECT_STORE)
|
|
16
|
+
}
|
|
17
|
+
request.onsuccess = () => resolve(request.result)
|
|
18
|
+
request.onerror = () => reject(request.error)
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function requestToPromise<T>(request: IDBRequest<T>): Promise<T> {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
request.onsuccess = () => resolve(request.result)
|
|
25
|
+
request.onerror = () => reject(request.error)
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the AES-GCM master key, generating and persisting one on first use.
|
|
31
|
+
* The key is non-extractable and lives as a structured-cloned handle in
|
|
32
|
+
* IndexedDB — the raw bytes never leave the browser's crypto layer. Resolves
|
|
33
|
+
* `null` when IndexedDB or WebCrypto is unavailable so callers degrade to
|
|
34
|
+
* no-op writes / null reads rather than persisting plaintext.
|
|
35
|
+
*/
|
|
36
|
+
async function loadMasterKey(): Promise<CryptoKey | null> {
|
|
37
|
+
if (
|
|
38
|
+
typeof indexedDB === 'undefined' ||
|
|
39
|
+
typeof crypto === 'undefined' ||
|
|
40
|
+
!crypto.subtle
|
|
41
|
+
) {
|
|
42
|
+
return null
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const db = await openDb()
|
|
46
|
+
try {
|
|
47
|
+
const existing = await requestToPromise(
|
|
48
|
+
db
|
|
49
|
+
.transaction(OBJECT_STORE, 'readonly')
|
|
50
|
+
.objectStore(OBJECT_STORE)
|
|
51
|
+
.get(MASTER_KEY_ID)
|
|
52
|
+
)
|
|
53
|
+
if (existing instanceof CryptoKey) {
|
|
54
|
+
return existing
|
|
55
|
+
}
|
|
56
|
+
const key = await crypto.subtle.generateKey(AES_KEY_PARAMS, false, [
|
|
57
|
+
'encrypt',
|
|
58
|
+
'decrypt',
|
|
59
|
+
])
|
|
60
|
+
await requestToPromise(
|
|
61
|
+
db
|
|
62
|
+
.transaction(OBJECT_STORE, 'readwrite')
|
|
63
|
+
.objectStore(OBJECT_STORE)
|
|
64
|
+
.put(key, MASTER_KEY_ID)
|
|
65
|
+
)
|
|
66
|
+
return key
|
|
67
|
+
} finally {
|
|
68
|
+
db.close()
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
return null
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function getMasterKey(): Promise<CryptoKey | null> {
|
|
76
|
+
masterKeyPromise ??= loadMasterKey()
|
|
77
|
+
return masterKeyPromise
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function bytesToBase64(bytes: Uint8Array): string {
|
|
81
|
+
let binary = ''
|
|
82
|
+
for (const byte of bytes) {
|
|
83
|
+
binary += String.fromCharCode(byte)
|
|
84
|
+
}
|
|
85
|
+
return btoa(binary)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function base64ToBytes(value: string): Uint8Array {
|
|
89
|
+
const binary = atob(value)
|
|
90
|
+
const bytes = new Uint8Array(binary.length)
|
|
91
|
+
for (let i = 0; i < binary.length; i += 1) {
|
|
92
|
+
bytes[i] = binary.charCodeAt(i)
|
|
93
|
+
}
|
|
94
|
+
return bytes
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Default storage adapter: persists AES-GCM-256 ciphertext to browser
|
|
99
|
+
* `localStorage`, keyed by a non-extractable master {@link CryptoKey} held in
|
|
100
|
+
* IndexedDB. Each `set` uses a fresh 12-byte IV and
|
|
101
|
+
* stores `base64(iv ‖ ciphertext)`. Falls back to a no-op / `null` when
|
|
102
|
+
* `localStorage`, `indexedDB`, or `crypto.subtle` is unavailable (e.g. SSR) —
|
|
103
|
+
* never writing plaintext.
|
|
104
|
+
*
|
|
105
|
+
* `get` resolves `null` on any failure (missing master key, tampered or
|
|
106
|
+
* truncated ciphertext, malformed value), matching the poisoned-record
|
|
107
|
+
* eviction philosophy so callers treat undecryptable data as absent.
|
|
108
|
+
*
|
|
109
|
+
* @security Encryption at rest defeats generic browser-storage/disk scanning
|
|
110
|
+
* and raw key exfiltration, not malware targeting this SDK or a fully
|
|
111
|
+
* compromised page — a same-origin script can still drive this adapter to
|
|
112
|
+
* decrypt.
|
|
113
|
+
*
|
|
114
|
+
* @public
|
|
115
|
+
*/
|
|
116
|
+
export const localStorageAdapter: StorageAdapter = {
|
|
117
|
+
async get(key: string): Promise<string | null> {
|
|
118
|
+
try {
|
|
119
|
+
const raw = localStorage.getItem(key)
|
|
120
|
+
if (raw === null) {
|
|
121
|
+
return null
|
|
122
|
+
}
|
|
123
|
+
const masterKey = await getMasterKey()
|
|
124
|
+
if (!masterKey) {
|
|
125
|
+
return null
|
|
126
|
+
}
|
|
127
|
+
const combined = base64ToBytes(raw)
|
|
128
|
+
const iv = combined.slice(0, IV_BYTE_LENGTH)
|
|
129
|
+
const ciphertext = combined.slice(IV_BYTE_LENGTH)
|
|
130
|
+
const plaintext = await crypto.subtle.decrypt(
|
|
131
|
+
{ name: 'AES-GCM', iv },
|
|
132
|
+
masterKey,
|
|
133
|
+
ciphertext
|
|
134
|
+
)
|
|
135
|
+
return new TextDecoder().decode(plaintext)
|
|
136
|
+
} catch {
|
|
137
|
+
return null
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
async set(key: string, value: string): Promise<void> {
|
|
142
|
+
try {
|
|
143
|
+
const masterKey = await getMasterKey()
|
|
144
|
+
if (!masterKey) {
|
|
145
|
+
return
|
|
146
|
+
}
|
|
147
|
+
const iv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH))
|
|
148
|
+
const ciphertext = new Uint8Array(
|
|
149
|
+
await crypto.subtle.encrypt(
|
|
150
|
+
{ name: 'AES-GCM', iv },
|
|
151
|
+
masterKey,
|
|
152
|
+
new TextEncoder().encode(value)
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
const combined = new Uint8Array(iv.length + ciphertext.length)
|
|
156
|
+
combined.set(iv, 0)
|
|
157
|
+
combined.set(ciphertext, iv.length)
|
|
158
|
+
localStorage.setItem(key, bytesToBase64(combined))
|
|
159
|
+
} catch {
|
|
160
|
+
// localStorage/crypto unavailable or encryption failed — never persist plaintext
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
async remove(key: string): Promise<void> {
|
|
165
|
+
try {
|
|
166
|
+
localStorage.removeItem(key)
|
|
167
|
+
} catch {
|
|
168
|
+
// localStorage not available
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
}
|
package/src/storage/storage.ts
CHANGED
|
@@ -1,39 +1,5 @@
|
|
|
1
1
|
import type { StorageAdapter } from './types.js'
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* localStorage adapter for browser environments. Falls back to a no-op when
|
|
5
|
-
* `localStorage` is unavailable (e.g. SSR).
|
|
6
|
-
*
|
|
7
|
-
* @public
|
|
8
|
-
*/
|
|
9
|
-
export const localStorageAdapter: StorageAdapter = {
|
|
10
|
-
get: (key: string): Promise<string | null> => {
|
|
11
|
-
try {
|
|
12
|
-
return Promise.resolve(localStorage.getItem(key))
|
|
13
|
-
} catch {
|
|
14
|
-
return Promise.resolve(null)
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
set: (key: string, value: string): Promise<void> => {
|
|
19
|
-
try {
|
|
20
|
-
localStorage.setItem(key, value)
|
|
21
|
-
} catch {
|
|
22
|
-
// localStorage not available
|
|
23
|
-
}
|
|
24
|
-
return Promise.resolve()
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
remove: (key: string): Promise<void> => {
|
|
28
|
-
try {
|
|
29
|
-
localStorage.removeItem(key)
|
|
30
|
-
} catch {
|
|
31
|
-
// localStorage not available
|
|
32
|
-
}
|
|
33
|
-
return Promise.resolve()
|
|
34
|
-
},
|
|
35
|
-
}
|
|
36
|
-
|
|
37
3
|
/**
|
|
38
4
|
* In-memory storage adapter for testing or server-side use.
|
|
39
5
|
*
|
package/src/types/api.ts
CHANGED
|
@@ -179,7 +179,11 @@ export interface SendAssetActionParams {
|
|
|
179
179
|
export interface CancelOrdersParams {
|
|
180
180
|
provider: string
|
|
181
181
|
address: Address
|
|
182
|
+
/** Venue order ids. Venues whose ids are scoped per market (e.g. Lighter's
|
|
183
|
+
* `order_index`) also accept the composite `"<market_id>:<order_id>"`. */
|
|
182
184
|
ids: string[]
|
|
185
|
+
/** Market context for per-market order ids; the order's `market.id`. */
|
|
186
|
+
assetId?: string
|
|
183
187
|
}
|
|
184
188
|
|
|
185
189
|
/**
|
|
@@ -15,6 +15,9 @@ const sumValueUsd = (balances: AccountResponse['balances']): number =>
|
|
|
15
15
|
* - `'free'` — free collateral only; locked margin and unrealized PnL are
|
|
16
16
|
* both carried by the positions. Available margin is the free collateral
|
|
17
17
|
* as-is; unrealized PnL is not counted toward it.
|
|
18
|
+
* - `'net'` — free collateral with unrealized PnL already marked in; only
|
|
19
|
+
* the locked margin is carried by the positions (e.g. a venue-reported
|
|
20
|
+
* available balance).
|
|
18
21
|
* - `'gross'` — locked margin included, unrealized PnL carried by the
|
|
19
22
|
* positions (e.g. spot holdings backing a unified account). The venue
|
|
20
23
|
* counts unrealized PnL toward buying power, so it is added to available
|
|
@@ -25,7 +28,7 @@ const sumValueUsd = (balances: AccountResponse['balances']): number =>
|
|
|
25
28
|
*
|
|
26
29
|
* @public
|
|
27
30
|
*/
|
|
28
|
-
export type CollateralSemantics = 'free' | 'gross' | 'equity'
|
|
31
|
+
export type CollateralSemantics = 'free' | 'net' | 'gross' | 'equity'
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
34
|
* Roll an {@link AccountResponse} and its open positions up into an
|
|
@@ -51,9 +54,13 @@ export function summarizeAccount(
|
|
|
51
54
|
const balances = sumValueUsd(account.balances)
|
|
52
55
|
|
|
53
56
|
const grossCollateral =
|
|
54
|
-
semantics === 'free'
|
|
57
|
+
semantics === 'free' || semantics === 'net'
|
|
58
|
+
? collateral + marginUsed
|
|
59
|
+
: collateral
|
|
55
60
|
const equity =
|
|
56
|
-
semantics === 'equity'
|
|
61
|
+
semantics === 'equity' || semantics === 'net'
|
|
62
|
+
? grossCollateral
|
|
63
|
+
: grossCollateral + unrealizedPnl
|
|
57
64
|
|
|
58
65
|
// Buying power is equity net of locked margin, so unrealized PnL counts
|
|
59
66
|
// toward it. The `'free'` rows exclude uPnL from available margin, holding
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/perps-sdk'
|
|
2
|
-
export const version = '0.0.0-preview-
|
|
2
|
+
export const version = '0.0.0-preview-ba2d335'
|