@lifi/perps-sdk-provider-lighter 17.0.0 → 17.1.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/accountConfig.d.ts.map +1 -1
- package/dist/cjs/accountConfig.js +2 -0
- package/dist/cjs/accountConfig.js.map +1 -1
- package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts +42 -0
- package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts.map +1 -1
- package/dist/cjs/signers/LighterReadOnlyTokenManager.js +87 -6
- package/dist/cjs/signers/LighterReadOnlyTokenManager.js.map +1 -1
- package/dist/esm/accountConfig.d.ts.map +1 -1
- package/dist/esm/accountConfig.js +2 -0
- package/dist/esm/accountConfig.js.map +1 -1
- package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts +112 -12
- package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts.map +1 -1
- package/dist/esm/signers/LighterReadOnlyTokenManager.js +119 -8
- package/dist/esm/signers/LighterReadOnlyTokenManager.js.map +1 -1
- package/dist/types/accountConfig.d.ts.map +1 -1
- package/dist/types/signers/LighterReadOnlyTokenManager.d.ts +112 -12
- package/dist/types/signers/LighterReadOnlyTokenManager.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/accountConfig.ts +2 -0
- package/src/signers/LighterReadOnlyTokenManager.ts +245 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAA;AA2K1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
|
|
@@ -61,6 +61,7 @@ function projectLighterDescriptor(descriptor, config) {
|
|
|
61
61
|
],
|
|
62
62
|
};
|
|
63
63
|
case perps_types_1.ActionType.APPROVE_AGENT:
|
|
64
|
+
case perps_types_1.ActionType.REVOKE_AGENT:
|
|
64
65
|
case perps_types_1.ActionType.APPROVE_BUILDER_FEE:
|
|
65
66
|
case perps_types_1.ActionType.SEND_ASSET:
|
|
66
67
|
case perps_types_1.ActionType.WITHDRAWAL:
|
|
@@ -80,6 +81,7 @@ function projectLighterDescriptor(descriptor, config) {
|
|
|
80
81
|
case perps_types_1.ActionType.UPDATE_ASSET_COLLATERAL:
|
|
81
82
|
case perps_types_1.ActionType.DEPOSIT:
|
|
82
83
|
case perps_types_1.ActionType.META_ACCEPT_TERMS:
|
|
84
|
+
case perps_types_1.ActionType.SYNC_FEE_ATTRIBUTION:
|
|
83
85
|
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.SDKError, `Lighter account-config mapper has no projection for ` +
|
|
84
86
|
`descriptor type '${descriptor.type}' — this ActionType is not ` +
|
|
85
87
|
`valid on Provider.setup / Provider.options for Lighter.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,14 @@ export interface LighterReadOnlyToken {
|
|
|
7
7
|
expiry: number;
|
|
8
8
|
scope: 'single' | 'all';
|
|
9
9
|
accountIndex: number;
|
|
10
|
+
tokenId?: number;
|
|
10
11
|
}
|
|
11
12
|
export interface LighterCreateTokenResponse {
|
|
12
13
|
api_token: string;
|
|
13
14
|
account_index: number;
|
|
14
15
|
expiry: number;
|
|
15
16
|
scopes: string;
|
|
17
|
+
token_id: number;
|
|
16
18
|
}
|
|
17
19
|
export type LighterTokenFetcher = (params: {
|
|
18
20
|
url: string;
|
|
@@ -23,11 +25,45 @@ export type LighterTokenFetcher = (params: {
|
|
|
23
25
|
subAccountAccess: boolean;
|
|
24
26
|
scopes: string;
|
|
25
27
|
}) => Promise<LighterCreateTokenResponse>;
|
|
28
|
+
export interface LighterApiToken {
|
|
29
|
+
token_id: number;
|
|
30
|
+
api_token: string;
|
|
31
|
+
name: string;
|
|
32
|
+
account_index: number;
|
|
33
|
+
expiry: number;
|
|
34
|
+
sub_account_access: boolean;
|
|
35
|
+
revoked: boolean;
|
|
36
|
+
scopes: string;
|
|
37
|
+
}
|
|
38
|
+
export interface LighterListTokensResponse {
|
|
39
|
+
code: number;
|
|
40
|
+
message?: string;
|
|
41
|
+
api_tokens: LighterApiToken[];
|
|
42
|
+
}
|
|
43
|
+
export interface LighterRevokeTokenResponse {
|
|
44
|
+
code: number;
|
|
45
|
+
message?: string;
|
|
46
|
+
token_id: number;
|
|
47
|
+
revoked: boolean;
|
|
48
|
+
}
|
|
49
|
+
export type LighterTokenListFetcher = (params: {
|
|
50
|
+
url: string;
|
|
51
|
+
authorization: string;
|
|
52
|
+
accountIndex: number;
|
|
53
|
+
}) => Promise<LighterListTokensResponse>;
|
|
54
|
+
export type LighterTokenRevokeFetcher = (params: {
|
|
55
|
+
url: string;
|
|
56
|
+
authorization: string;
|
|
57
|
+
tokenId: number;
|
|
58
|
+
accountIndex: number;
|
|
59
|
+
}) => Promise<LighterRevokeTokenResponse>;
|
|
26
60
|
export interface LighterReadOnlyTokenManagerOptions {
|
|
27
61
|
storage?: StorageAdapter;
|
|
28
62
|
providerKey?: LighterProviderKey;
|
|
29
63
|
lighterApiUrl?: string;
|
|
30
64
|
fetcher?: LighterTokenFetcher;
|
|
65
|
+
listFetcher?: LighterTokenListFetcher;
|
|
66
|
+
revokeFetcher?: LighterTokenRevokeFetcher;
|
|
31
67
|
now?: () => number;
|
|
32
68
|
}
|
|
33
69
|
export interface ApproveReadOnlyTokenInputs extends ApproveReadOnlyTokenParams {
|
|
@@ -42,16 +78,22 @@ export declare class LighterReadOnlyTokenManager {
|
|
|
42
78
|
private readonly providerKey;
|
|
43
79
|
private readonly lighterApiUrl;
|
|
44
80
|
private readonly fetcher;
|
|
81
|
+
private readonly listFetcher;
|
|
82
|
+
private readonly revokeFetcher;
|
|
45
83
|
private readonly now;
|
|
46
84
|
private readonly cache;
|
|
47
85
|
constructor(options?: LighterReadOnlyTokenManagerOptions);
|
|
48
86
|
private storageKey;
|
|
49
87
|
private isExpired;
|
|
88
|
+
private readStoredToken;
|
|
50
89
|
get(address: Address, accountIndex: number): Promise<LighterReadOnlyToken | undefined>;
|
|
51
90
|
isReadOnlyTokenExpiringSoon(address: Address, accountIndex: number, thresholdDays?: number): Promise<boolean>;
|
|
52
91
|
set(address: Address, accountIndex: number, token: LighterReadOnlyToken): Promise<void>;
|
|
53
92
|
remove(address: Address, accountIndex: number): Promise<void>;
|
|
54
93
|
approve(authorization: string, inputs: ApproveReadOnlyTokenInputs): Promise<ApproveReadOnlyTokenResult>;
|
|
94
|
+
private revokeStaleOwnTokens;
|
|
55
95
|
}
|
|
56
96
|
export declare const defaultLighterTokenFetcher: LighterTokenFetcher;
|
|
97
|
+
export declare const defaultLighterTokenListFetcher: LighterTokenListFetcher;
|
|
98
|
+
export declare const defaultLighterTokenRevokeFetcher: LighterTokenRevokeFetcher;
|
|
57
99
|
//# sourceMappingURL=LighterReadOnlyTokenManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterReadOnlyTokenManager.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AASnC,eAAO,MAAM,4BAA4B,gBAAgB,CAAA;AASzD,MAAM,WAAW,oBAAoB;IAEnC,KAAK,EAAE,MAAM,CAAA;IAEb,MAAM,EAAE,MAAM,CAAA;IAEd,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAA;IAEvB,YAAY,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"LighterReadOnlyTokenManager.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultLighterTokenFetcher = exports.LighterReadOnlyTokenManager = exports.DEFAULT_READ_ONLY_TOKEN_NAME = void 0;
|
|
3
|
+
exports.defaultLighterTokenRevokeFetcher = exports.defaultLighterTokenListFetcher = exports.defaultLighterTokenFetcher = exports.LighterReadOnlyTokenManager = exports.DEFAULT_READ_ONLY_TOKEN_NAME = void 0;
|
|
4
4
|
const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
5
5
|
const perps_types_1 = require("@lifi/perps-types");
|
|
6
6
|
const constants_js_1 = require("../constants.js");
|
|
@@ -10,20 +10,26 @@ const isLighterReadOnlyToken = (value) => {
|
|
|
10
10
|
if (typeof value !== 'object' || value === null) {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
-
const { token, expiry, scope, accountIndex } = value;
|
|
13
|
+
const { token, expiry, scope, accountIndex, tokenId } = value;
|
|
14
14
|
return (typeof token === 'string' &&
|
|
15
15
|
token.length > 0 &&
|
|
16
16
|
typeof expiry === 'number' &&
|
|
17
17
|
Number.isFinite(expiry) &&
|
|
18
18
|
(scope === 'single' || scope === 'all') &&
|
|
19
19
|
typeof accountIndex === 'number' &&
|
|
20
|
-
Number.isFinite(accountIndex)
|
|
20
|
+
Number.isFinite(accountIndex) &&
|
|
21
|
+
(tokenId === undefined ||
|
|
22
|
+
(typeof tokenId === 'number' && Number.isFinite(tokenId))));
|
|
21
23
|
};
|
|
24
|
+
const isLiveRow = (row, live) => live !== undefined &&
|
|
25
|
+
(row.token_id === live.tokenId || row.api_token === live.token);
|
|
22
26
|
class LighterReadOnlyTokenManager {
|
|
23
27
|
storage;
|
|
24
28
|
providerKey;
|
|
25
29
|
lighterApiUrl;
|
|
26
30
|
fetcher;
|
|
31
|
+
listFetcher;
|
|
32
|
+
revokeFetcher;
|
|
27
33
|
now;
|
|
28
34
|
cache = new Map();
|
|
29
35
|
constructor(options = {}) {
|
|
@@ -31,6 +37,9 @@ class LighterReadOnlyTokenManager {
|
|
|
31
37
|
this.providerKey = options.providerKey ?? constants_js_1.LIGHTER_PROVIDER_KEY;
|
|
32
38
|
this.lighterApiUrl = options.lighterApiUrl ?? constants_js_1.DEFAULT_LIGHTER_REST_URL;
|
|
33
39
|
this.fetcher = options.fetcher ?? exports.defaultLighterTokenFetcher;
|
|
40
|
+
this.listFetcher = options.listFetcher ?? exports.defaultLighterTokenListFetcher;
|
|
41
|
+
this.revokeFetcher =
|
|
42
|
+
options.revokeFetcher ?? exports.defaultLighterTokenRevokeFetcher;
|
|
34
43
|
this.now = options.now ?? (() => Date.now());
|
|
35
44
|
}
|
|
36
45
|
storageKey(address, accountIndex) {
|
|
@@ -39,6 +48,12 @@ class LighterReadOnlyTokenManager {
|
|
|
39
48
|
isExpired(token) {
|
|
40
49
|
return token.expiry * 1000 <= this.now();
|
|
41
50
|
}
|
|
51
|
+
async readStoredToken(address, accountIndex) {
|
|
52
|
+
const key = this.storageKey(address, accountIndex);
|
|
53
|
+
return (this.cache.get(key) ??
|
|
54
|
+
(await (0, perps_sdk_1.readValidatedRecord)(this.storage, key, isLighterReadOnlyToken)) ??
|
|
55
|
+
undefined);
|
|
56
|
+
}
|
|
42
57
|
async get(address, accountIndex) {
|
|
43
58
|
const key = this.storageKey(address, accountIndex);
|
|
44
59
|
const cached = this.cache.get(key);
|
|
@@ -53,9 +68,7 @@ class LighterReadOnlyTokenManager {
|
|
|
53
68
|
return parsed;
|
|
54
69
|
}
|
|
55
70
|
async isReadOnlyTokenExpiringSoon(address, accountIndex, thresholdDays = 30) {
|
|
56
|
-
const
|
|
57
|
-
const token = this.cache.get(key) ??
|
|
58
|
-
(await (0, perps_sdk_1.readValidatedRecord)(this.storage, key, isLighterReadOnlyToken));
|
|
71
|
+
const token = await this.readStoredToken(address, accountIndex);
|
|
59
72
|
if (!token) {
|
|
60
73
|
return false;
|
|
61
74
|
}
|
|
@@ -77,6 +90,7 @@ class LighterReadOnlyTokenManager {
|
|
|
77
90
|
}
|
|
78
91
|
async approve(authorization, inputs) {
|
|
79
92
|
const { address, accountIndex, expirySeconds, scope } = inputs;
|
|
93
|
+
await this.revokeStaleOwnTokens(authorization, address, accountIndex);
|
|
80
94
|
const response = await this.fetcher({
|
|
81
95
|
url: `${this.lighterApiUrl}/api/v1/tokens/create`,
|
|
82
96
|
authorization,
|
|
@@ -91,6 +105,9 @@ class LighterReadOnlyTokenManager {
|
|
|
91
105
|
expiry: response.expiry,
|
|
92
106
|
scope,
|
|
93
107
|
accountIndex,
|
|
108
|
+
tokenId: Number.isFinite(response.token_id)
|
|
109
|
+
? response.token_id
|
|
110
|
+
: undefined,
|
|
94
111
|
};
|
|
95
112
|
await this.set(address, token.accountIndex, token);
|
|
96
113
|
return {
|
|
@@ -104,6 +121,38 @@ class LighterReadOnlyTokenManager {
|
|
|
104
121
|
},
|
|
105
122
|
};
|
|
106
123
|
}
|
|
124
|
+
async revokeStaleOwnTokens(authorization, address, accountIndex) {
|
|
125
|
+
try {
|
|
126
|
+
const live = await this.readStoredToken(address, accountIndex);
|
|
127
|
+
const { api_tokens: rows } = await this.listFetcher({
|
|
128
|
+
url: `${this.lighterApiUrl}/api/v1/tokens`,
|
|
129
|
+
authorization,
|
|
130
|
+
accountIndex,
|
|
131
|
+
});
|
|
132
|
+
const nowSeconds = Math.floor(this.now() / 1000);
|
|
133
|
+
const stale = rows
|
|
134
|
+
.filter((row) => row.name === exports.DEFAULT_READ_ONLY_TOKEN_NAME)
|
|
135
|
+
.filter((row) => !row.revoked)
|
|
136
|
+
.filter((row) => row.expiry <= nowSeconds || !isLiveRow(row, live))
|
|
137
|
+
.sort((a, b) => a.token_id - b.token_id);
|
|
138
|
+
for (const row of stale) {
|
|
139
|
+
try {
|
|
140
|
+
await this.revokeFetcher({
|
|
141
|
+
url: `${this.lighterApiUrl}/api/v1/tokens/revoke`,
|
|
142
|
+
authorization,
|
|
143
|
+
tokenId: row.token_id,
|
|
144
|
+
accountIndex,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
console.warn(`[lighter] could not revoke stale read-only token ${row.token_id}; continuing.`, err);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.warn('[lighter] could not clean up stale read-only tokens; creating the new one anyway.', err);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
107
156
|
}
|
|
108
157
|
exports.LighterReadOnlyTokenManager = LighterReadOnlyTokenManager;
|
|
109
158
|
const defaultLighterTokenFetcher = async ({ url, authorization, name, accountIndex, expiry, subAccountAccess, scopes, }) => {
|
|
@@ -125,4 +174,36 @@ const defaultLighterTokenFetcher = async ({ url, authorization, name, accountInd
|
|
|
125
174
|
return (await response.json());
|
|
126
175
|
};
|
|
127
176
|
exports.defaultLighterTokenFetcher = defaultLighterTokenFetcher;
|
|
177
|
+
const defaultLighterTokenListFetcher = async ({ url, authorization, accountIndex, }) => {
|
|
178
|
+
const query = new URLSearchParams({ account_index: String(accountIndex) });
|
|
179
|
+
const response = await fetch(`${url}?${query.toString()}`, {
|
|
180
|
+
headers: { authorization },
|
|
181
|
+
});
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
const body = await response.text();
|
|
184
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ServerError, `Lighter tokens returned ${response.status}: ${body || '<empty>'}`);
|
|
185
|
+
}
|
|
186
|
+
return (await response.json());
|
|
187
|
+
};
|
|
188
|
+
exports.defaultLighterTokenListFetcher = defaultLighterTokenListFetcher;
|
|
189
|
+
const defaultLighterTokenRevokeFetcher = async ({ url, authorization, tokenId, accountIndex }) => {
|
|
190
|
+
const form = new URLSearchParams({
|
|
191
|
+
token_id: String(tokenId),
|
|
192
|
+
account_index: String(accountIndex),
|
|
193
|
+
});
|
|
194
|
+
const response = await fetch(url, {
|
|
195
|
+
method: 'POST',
|
|
196
|
+
headers: {
|
|
197
|
+
authorization,
|
|
198
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
199
|
+
},
|
|
200
|
+
body: form,
|
|
201
|
+
});
|
|
202
|
+
if (!response.ok) {
|
|
203
|
+
const body = await response.text();
|
|
204
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ServerError, `Lighter tokens/revoke returned ${response.status}: ${body || '<empty>'}`);
|
|
205
|
+
}
|
|
206
|
+
return (await response.json());
|
|
207
|
+
};
|
|
208
|
+
exports.defaultLighterTokenRevokeFetcher = defaultLighterTokenRevokeFetcher;
|
|
128
209
|
//# sourceMappingURL=LighterReadOnlyTokenManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterReadOnlyTokenManager.js","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":";;;AAAA,+CAKwB;AAMxB,mDAAkD;AAElD,kDAAgF;AAQnE,QAAA,4BAA4B,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"LighterReadOnlyTokenManager.js","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAgK1B;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
|
|
@@ -109,6 +109,7 @@ function projectLighterDescriptor(descriptor, config) {
|
|
|
109
109
|
],
|
|
110
110
|
};
|
|
111
111
|
case ActionType.APPROVE_AGENT:
|
|
112
|
+
case ActionType.REVOKE_AGENT:
|
|
112
113
|
case ActionType.APPROVE_BUILDER_FEE:
|
|
113
114
|
case ActionType.SEND_ASSET:
|
|
114
115
|
case ActionType.WITHDRAWAL:
|
|
@@ -128,6 +129,7 @@ function projectLighterDescriptor(descriptor, config) {
|
|
|
128
129
|
case ActionType.UPDATE_ASSET_COLLATERAL:
|
|
129
130
|
case ActionType.DEPOSIT:
|
|
130
131
|
case ActionType.META_ACCEPT_TERMS:
|
|
132
|
+
case ActionType.SYNC_FEE_ATTRIBUTION:
|
|
131
133
|
throw new PerpsError(PerpsErrorCode.SDKError, `Lighter account-config mapper has no projection for ` +
|
|
132
134
|
`descriptor type '${descriptor.type}' — this ActionType is not ` +
|
|
133
135
|
`valid on Provider.setup / Provider.options for Lighter.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import type { Address } from 'viem';
|
|
|
5
5
|
* Default token name persisted alongside Lighter's `tokens/create` row.
|
|
6
6
|
* Lighter requires a non-empty `name` form field; the literal here is what
|
|
7
7
|
* surfaces in Lighter's UI listing under `app.lighter.xyz/read-only-tokens`.
|
|
8
|
-
* @
|
|
8
|
+
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export declare const DEFAULT_READ_ONLY_TOKEN_NAME = "LI.FI Perps";
|
|
11
11
|
/**
|
|
@@ -13,7 +13,7 @@ export declare const DEFAULT_READ_ONLY_TOKEN_NAME = "LI.FI Perps";
|
|
|
13
13
|
* Lighter's opaque `ro:{accountIndex}:{scope}:{expiry}:{rand}` bearer; the
|
|
14
14
|
* SDK never parses it — `expiry`/`scope`/`accountIndex` are create-time inputs
|
|
15
15
|
* we keep alongside so consumers can render expiry UX without re-fetching.
|
|
16
|
-
* @
|
|
16
|
+
* @internal
|
|
17
17
|
*/
|
|
18
18
|
export interface LighterReadOnlyToken {
|
|
19
19
|
/** Opaque bearer string — never parse client-side. */
|
|
@@ -24,25 +24,33 @@ export interface LighterReadOnlyToken {
|
|
|
24
24
|
scope: 'single' | 'all';
|
|
25
25
|
/** Lighter L2 account index the token authorises. */
|
|
26
26
|
accountIndex: number;
|
|
27
|
+
/**
|
|
28
|
+
* Lighter's monotonic registry row id. Optional: a record persisted without
|
|
29
|
+
* it stays valid, and the cleanup pass then identifies its row by the
|
|
30
|
+
* bearer string instead.
|
|
31
|
+
*/
|
|
32
|
+
tokenId?: number;
|
|
27
33
|
}
|
|
28
34
|
/**
|
|
29
|
-
* Lighter `POST /api/v1/tokens/create` response shape
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @
|
|
35
|
+
* Lighter `POST /api/v1/tokens/create` response shape — the subset of
|
|
36
|
+
* Lighter's `RespPostApiToken` the SDK consumes. Lighter documents further
|
|
37
|
+
* fields (`name`, `revoked`, `sub_account_access`) the SDK does not need.
|
|
38
|
+
* @internal
|
|
33
39
|
*/
|
|
34
40
|
export interface LighterCreateTokenResponse {
|
|
35
41
|
api_token: string;
|
|
36
42
|
account_index: number;
|
|
37
43
|
expiry: number;
|
|
38
44
|
scopes: string;
|
|
45
|
+
/** Monotonic registry row id Lighter assigns to the new row. */
|
|
46
|
+
token_id: number;
|
|
39
47
|
}
|
|
40
48
|
/**
|
|
41
49
|
* Function injected for the HTTP boundary against Lighter's `tokens/create`
|
|
42
50
|
* endpoint. Returning a parsed {@link LighterCreateTokenResponse} keeps the
|
|
43
51
|
* create code free of fetch/multipart plumbing and lets tests drop a fixture
|
|
44
52
|
* in without spinning a mock server.
|
|
45
|
-
* @
|
|
53
|
+
* @internal
|
|
46
54
|
*/
|
|
47
55
|
export type LighterTokenFetcher = (params: {
|
|
48
56
|
url: string;
|
|
@@ -53,12 +61,71 @@ export type LighterTokenFetcher = (params: {
|
|
|
53
61
|
subAccountAccess: boolean;
|
|
54
62
|
scopes: string;
|
|
55
63
|
}) => Promise<LighterCreateTokenResponse>;
|
|
64
|
+
/**
|
|
65
|
+
* One row of Lighter's read-only token registry, matching Lighter's
|
|
66
|
+
* `ApiToken`. `name` carries the label supplied at create time, which is how
|
|
67
|
+
* the SDK recognises a row it owns.
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
70
|
+
export interface LighterApiToken {
|
|
71
|
+
token_id: number;
|
|
72
|
+
api_token: string;
|
|
73
|
+
name: string;
|
|
74
|
+
account_index: number;
|
|
75
|
+
expiry: number;
|
|
76
|
+
sub_account_access: boolean;
|
|
77
|
+
revoked: boolean;
|
|
78
|
+
scopes: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Lighter `GET /api/v1/tokens` response shape, matching `RespGetApiTokens`.
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
export interface LighterListTokensResponse {
|
|
85
|
+
code: number;
|
|
86
|
+
message?: string;
|
|
87
|
+
api_tokens: LighterApiToken[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Lighter `POST /api/v1/tokens/revoke` response shape, matching Lighter's
|
|
91
|
+
* `RespRevokeApiToken`.
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
export interface LighterRevokeTokenResponse {
|
|
95
|
+
code: number;
|
|
96
|
+
message?: string;
|
|
97
|
+
token_id: number;
|
|
98
|
+
revoked: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Function injected for the HTTP boundary against Lighter's
|
|
102
|
+
* `GET /api/v1/tokens` endpoint. Injected for the same reason as
|
|
103
|
+
* {@link LighterTokenFetcher}: a unit spec supplies a registry fixture
|
|
104
|
+
* without a mock server.
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export type LighterTokenListFetcher = (params: {
|
|
108
|
+
url: string;
|
|
109
|
+
authorization: string;
|
|
110
|
+
accountIndex: number;
|
|
111
|
+
}) => Promise<LighterListTokensResponse>;
|
|
112
|
+
/**
|
|
113
|
+
* Function injected for the HTTP boundary against Lighter's
|
|
114
|
+
* `POST /api/v1/tokens/revoke` endpoint.
|
|
115
|
+
* @internal
|
|
116
|
+
*/
|
|
117
|
+
export type LighterTokenRevokeFetcher = (params: {
|
|
118
|
+
url: string;
|
|
119
|
+
authorization: string;
|
|
120
|
+
tokenId: number;
|
|
121
|
+
accountIndex: number;
|
|
122
|
+
}) => Promise<LighterRevokeTokenResponse>;
|
|
56
123
|
/**
|
|
57
124
|
* Dependencies and overrides for {@link LighterReadOnlyTokenManager}.
|
|
58
125
|
* Storage and token-fetching defaults target the browser's local storage and
|
|
59
126
|
* Lighter's mainnet REST API.
|
|
60
127
|
*
|
|
61
|
-
* @
|
|
128
|
+
* @internal
|
|
62
129
|
*/
|
|
63
130
|
export interface LighterReadOnlyTokenManagerOptions {
|
|
64
131
|
storage?: StorageAdapter;
|
|
@@ -73,6 +140,10 @@ export interface LighterReadOnlyTokenManagerOptions {
|
|
|
73
140
|
lighterApiUrl?: string;
|
|
74
141
|
/** Override the multipart POST. Defaults to a `fetch`-based implementation. */
|
|
75
142
|
fetcher?: LighterTokenFetcher;
|
|
143
|
+
/** Override the registry list GET. Defaults to a `fetch`-based implementation. */
|
|
144
|
+
listFetcher?: LighterTokenListFetcher;
|
|
145
|
+
/** Override the revoke POST. Defaults to a `fetch`-based implementation. */
|
|
146
|
+
revokeFetcher?: LighterTokenRevokeFetcher;
|
|
76
147
|
/** Clock injection for testing expiry logic. Defaults to `Date.now`. */
|
|
77
148
|
now?: () => number;
|
|
78
149
|
}
|
|
@@ -80,7 +151,7 @@ export interface LighterReadOnlyTokenManagerOptions {
|
|
|
80
151
|
* Input to the read-only-token approval flow. Extends the shared approval
|
|
81
152
|
* parameters with the L1 address whose wallet authorizes token creation.
|
|
82
153
|
*
|
|
83
|
-
* @
|
|
154
|
+
* @internal
|
|
84
155
|
*/
|
|
85
156
|
export interface ApproveReadOnlyTokenInputs extends ApproveReadOnlyTokenParams {
|
|
86
157
|
/** L1 wallet address that signs the create message. */
|
|
@@ -90,7 +161,7 @@ export interface ApproveReadOnlyTokenInputs extends ApproveReadOnlyTokenParams {
|
|
|
90
161
|
* Result of approving or creating a Lighter read-only token. `config` is the
|
|
91
162
|
* account-state projection callers can persist alongside the token.
|
|
92
163
|
*
|
|
93
|
-
* @
|
|
164
|
+
* @internal
|
|
94
165
|
*/
|
|
95
166
|
export interface ApproveReadOnlyTokenResult {
|
|
96
167
|
token: LighterReadOnlyToken;
|
|
@@ -114,18 +185,22 @@ export interface ApproveReadOnlyTokenResult {
|
|
|
114
185
|
* a fully compromised page — a same-origin script can still drive this manager
|
|
115
186
|
* to decrypt. Blast radius is limited to reads: the token cannot sign orders
|
|
116
187
|
* or move funds.
|
|
117
|
-
* @
|
|
188
|
+
* @internal
|
|
118
189
|
*/
|
|
119
190
|
export declare class LighterReadOnlyTokenManager {
|
|
120
191
|
private readonly storage;
|
|
121
192
|
private readonly providerKey;
|
|
122
193
|
private readonly lighterApiUrl;
|
|
123
194
|
private readonly fetcher;
|
|
195
|
+
private readonly listFetcher;
|
|
196
|
+
private readonly revokeFetcher;
|
|
124
197
|
private readonly now;
|
|
125
198
|
private readonly cache;
|
|
126
199
|
constructor(options?: LighterReadOnlyTokenManagerOptions);
|
|
127
200
|
private storageKey;
|
|
128
201
|
private isExpired;
|
|
202
|
+
/** Stored record for the pair, whether or not it is past its `expiry`. */
|
|
203
|
+
private readStoredToken;
|
|
129
204
|
/**
|
|
130
205
|
* Return the stored token for the `(address, accountIndex)` pair, or
|
|
131
206
|
* `undefined` if absent or past its `expiry`. Never surfaces an expired
|
|
@@ -157,6 +232,9 @@ export declare class LighterReadOnlyTokenManager {
|
|
|
157
232
|
* and persists the returned `ro:` bearer alongside its
|
|
158
233
|
* `expiry`/`scope`/`accountIndex`.
|
|
159
234
|
*
|
|
235
|
+
* Before the create call, the flow revokes this SDK's own stale registry
|
|
236
|
+
* rows. That pass is best-effort: a failure is logged and the create runs.
|
|
237
|
+
*
|
|
160
238
|
* `authorization` MUST be a **standard** Lighter auth token — one created by
|
|
161
239
|
* the account's API key (`createAuthToken` / the WASM signer), NOT an L1
|
|
162
240
|
* wallet signature. Lighter authenticates the create request with that token
|
|
@@ -175,13 +253,35 @@ export declare class LighterReadOnlyTokenManager {
|
|
|
175
253
|
* @param inputs Token-create parameters plus the owning `address`.
|
|
176
254
|
*/
|
|
177
255
|
approve(authorization: string, inputs: ApproveReadOnlyTokenInputs): Promise<ApproveReadOnlyTokenResult>;
|
|
256
|
+
/**
|
|
257
|
+
* Revoke the registry rows this SDK owns and no longer needs. Lighter's
|
|
258
|
+
* `tokens/create` appends a row on every call, so without this pass the
|
|
259
|
+
* user's registry grows on every rotation.
|
|
260
|
+
*/
|
|
261
|
+
private revokeStaleOwnTokens;
|
|
178
262
|
}
|
|
179
263
|
/**
|
|
180
264
|
* Default fetcher: posts a multipart/form-data request to Lighter's
|
|
181
265
|
* `tokens/create` endpoint and returns the parsed response. Throws a
|
|
182
266
|
* {@link PerpsError} with the Lighter-side body when the response is
|
|
183
267
|
* non-2xx.
|
|
184
|
-
* @
|
|
268
|
+
* @internal
|
|
185
269
|
*/
|
|
186
270
|
export declare const defaultLighterTokenFetcher: LighterTokenFetcher;
|
|
271
|
+
/**
|
|
272
|
+
* Default list fetcher: `GET /api/v1/tokens` with `account_index` as a query
|
|
273
|
+
* parameter. Lighter's OpenAPI defines no request body for this route. Throws
|
|
274
|
+
* a {@link PerpsError} with the Lighter-side body when the response is
|
|
275
|
+
* non-2xx.
|
|
276
|
+
* @internal
|
|
277
|
+
*/
|
|
278
|
+
export declare const defaultLighterTokenListFetcher: LighterTokenListFetcher;
|
|
279
|
+
/**
|
|
280
|
+
* Default revoke fetcher: posts `application/x-www-form-urlencoded` to
|
|
281
|
+
* Lighter's `tokens/revoke` endpoint, which is the content type Lighter's
|
|
282
|
+
* OpenAPI declares for that route. Throws a {@link PerpsError} with the
|
|
283
|
+
* Lighter-side body when the response is non-2xx.
|
|
284
|
+
* @internal
|
|
285
|
+
*/
|
|
286
|
+
export declare const defaultLighterTokenRevokeFetcher: LighterTokenRevokeFetcher;
|
|
187
287
|
//# sourceMappingURL=LighterReadOnlyTokenManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterReadOnlyTokenManager.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,gBAAgB,CAAA;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAA;IACb,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,sEAAsE;IACtE,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAA;IACvB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"LighterReadOnlyTokenManager.d.ts","sourceRoot":"","sources":["../../../src/signers/LighterReadOnlyTokenManager.ts"],"names":[],"mappings":"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"}
|