@cartridge/controller 0.5.8 → 0.6.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/.turbo/turbo-build$colon$deps.log +77 -110
- package/.turbo/turbo-build.log +78 -111
- package/dist/__tests__/parseChainId.test.d.ts +2 -0
- package/dist/__tests__/parseChainId.test.js +89 -0
- package/dist/__tests__/parseChainId.test.js.map +1 -0
- package/dist/account.js +6 -0
- package/dist/account.js.map +1 -1
- package/dist/controller.d.ts +1 -1
- package/dist/controller.js +218 -136
- package/dist/controller.js.map +1 -1
- package/dist/iframe/base.js +4 -0
- package/dist/iframe/base.js.map +1 -1
- package/dist/iframe/index.js +4 -0
- package/dist/iframe/index.js.map +1 -1
- package/dist/iframe/keychain.js +4 -0
- package/dist/iframe/keychain.js.map +1 -1
- package/dist/iframe/profile.js +4 -0
- package/dist/iframe/profile.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +222 -138
- package/dist/index.js.map +1 -1
- package/dist/mutex.d.ts +14 -0
- package/dist/mutex.js +22 -0
- package/dist/mutex.js.map +1 -0
- package/dist/policies.d.ts +19 -0
- package/dist/policies.js +26 -0
- package/dist/policies.js.map +1 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.js +167 -109
- package/dist/provider.js.map +1 -1
- package/dist/session/account.js +4 -0
- package/dist/session/account.js.map +1 -1
- package/dist/session/index.d.ts +1 -0
- package/dist/session/index.js +292 -121
- package/dist/session/index.js.map +1 -1
- package/dist/session/provider.d.ts +7 -2
- package/dist/session/provider.js +292 -121
- package/dist/session/provider.js.map +1 -1
- package/dist/telegram/provider.d.ts +2 -1
- package/dist/telegram/provider.js +204 -112
- package/dist/telegram/provider.js.map +1 -1
- package/dist/utils.d.ts +5 -3
- package/dist/utils.js +29 -2
- package/dist/utils.js.map +1 -1
- package/jest.config.ts +13 -0
- package/package.json +26 -8
- package/src/__tests__/parseChainId.test.ts +60 -0
- package/src/controller.ts +25 -29
- package/src/mutex.ts +22 -0
- package/src/policies.ts +49 -0
- package/src/provider.ts +33 -2
- package/src/session/account.ts +1 -0
- package/src/session/provider.ts +139 -10
- package/src/telegram/provider.ts +3 -2
- package/src/utils.ts +32 -1
- package/tsconfig.json +1 -2
package/dist/session/index.js
CHANGED
|
@@ -9,8 +9,10 @@ import { WalletAccount } from "starknet";
|
|
|
9
9
|
import {
|
|
10
10
|
addAddressPadding,
|
|
11
11
|
CallData,
|
|
12
|
+
constants,
|
|
12
13
|
getChecksumAddress,
|
|
13
14
|
hash,
|
|
15
|
+
shortString,
|
|
14
16
|
typedData,
|
|
15
17
|
TypedDataRevision
|
|
16
18
|
} from "starknet";
|
|
@@ -28,7 +30,8 @@ function toWasmPolicies(policies) {
|
|
|
28
30
|
...Object.entries(policies.contracts ?? {}).flatMap(
|
|
29
31
|
([target, { methods }]) => toArray(methods).map((m) => ({
|
|
30
32
|
target,
|
|
31
|
-
method: m.entrypoint
|
|
33
|
+
method: m.entrypoint,
|
|
34
|
+
authorized: m.authorized
|
|
32
35
|
}))
|
|
33
36
|
),
|
|
34
37
|
...(policies.messages ?? []).map((p) => {
|
|
@@ -44,7 +47,8 @@ function toWasmPolicies(policies) {
|
|
|
44
47
|
TypedDataRevision.ACTIVE
|
|
45
48
|
);
|
|
46
49
|
return {
|
|
47
|
-
scope_hash: hash.computePoseidonHash(domainHash, typeHash)
|
|
50
|
+
scope_hash: hash.computePoseidonHash(domainHash, typeHash),
|
|
51
|
+
authorized: p.authorized
|
|
48
52
|
};
|
|
49
53
|
})
|
|
50
54
|
];
|
|
@@ -73,6 +77,7 @@ var ResponseCodes = /* @__PURE__ */ ((ResponseCodes2) => {
|
|
|
73
77
|
|
|
74
78
|
// src/session/account.ts
|
|
75
79
|
var SessionAccount = class extends WalletAccount {
|
|
80
|
+
controller;
|
|
76
81
|
constructor(provider, {
|
|
77
82
|
rpcUrl,
|
|
78
83
|
privateKey,
|
|
@@ -83,6 +88,7 @@ var SessionAccount = class extends WalletAccount {
|
|
|
83
88
|
policies
|
|
84
89
|
}) {
|
|
85
90
|
super({ nodeUrl: rpcUrl }, provider);
|
|
91
|
+
this.address = address;
|
|
86
92
|
this.controller = CartridgeSessionAccount.new_as_registered(
|
|
87
93
|
rpcUrl,
|
|
88
94
|
privateKey,
|
|
@@ -123,7 +129,7 @@ import {
|
|
|
123
129
|
// package.json
|
|
124
130
|
var package_default = {
|
|
125
131
|
name: "@cartridge/controller",
|
|
126
|
-
version: "0.
|
|
132
|
+
version: "0.6.0",
|
|
127
133
|
description: "Cartridge Controller",
|
|
128
134
|
module: "dist/index.js",
|
|
129
135
|
types: "dist/index.d.ts",
|
|
@@ -133,13 +139,26 @@ var package_default = {
|
|
|
133
139
|
build: "pnpm build:deps",
|
|
134
140
|
format: 'prettier --write "src/**/*.ts"',
|
|
135
141
|
"format:check": 'prettier --check "src/**/*.ts"',
|
|
142
|
+
test: "jest",
|
|
136
143
|
version: "pnpm pkg get version"
|
|
137
144
|
},
|
|
138
145
|
exports: {
|
|
139
|
-
".":
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
146
|
+
".": {
|
|
147
|
+
types: "./dist/index.d.ts",
|
|
148
|
+
default: "./dist/index.js"
|
|
149
|
+
},
|
|
150
|
+
"./session": {
|
|
151
|
+
types: "./dist/session/index.d.ts",
|
|
152
|
+
default: "./dist/session/index.js"
|
|
153
|
+
},
|
|
154
|
+
"./provider": {
|
|
155
|
+
types: "./dist/provider/index.d.ts",
|
|
156
|
+
default: "./dist/provider/index.js"
|
|
157
|
+
},
|
|
158
|
+
"./types": {
|
|
159
|
+
types: "./dist/types/index.d.ts",
|
|
160
|
+
default: "./dist/types/index.js"
|
|
161
|
+
}
|
|
143
162
|
},
|
|
144
163
|
tsup: {
|
|
145
164
|
entry: [
|
|
@@ -152,6 +171,9 @@ var package_default = {
|
|
|
152
171
|
sourcemap: true,
|
|
153
172
|
clean: true
|
|
154
173
|
},
|
|
174
|
+
peerDependencies: {
|
|
175
|
+
starknet: "^6.21.0"
|
|
176
|
+
},
|
|
155
177
|
dependencies: {
|
|
156
178
|
"@cartridge/account-wasm": "workspace:*",
|
|
157
179
|
"@cartridge/penpal": "^6.2.3",
|
|
@@ -160,12 +182,14 @@ var package_default = {
|
|
|
160
182
|
base64url: "^3.0.1",
|
|
161
183
|
"cbor-x": "^1.5.0",
|
|
162
184
|
"fast-deep-equal": "^3.1.3",
|
|
163
|
-
"query-string": "^7.1.1"
|
|
164
|
-
starknet: "^6.11.0"
|
|
185
|
+
"query-string": "^7.1.1"
|
|
165
186
|
},
|
|
166
187
|
devDependencies: {
|
|
167
188
|
"@cartridge/tsconfig": "workspace:*",
|
|
189
|
+
"@types/jest": "^29.5.14",
|
|
168
190
|
"@types/node": "^20.6.0",
|
|
191
|
+
jest: "^29.7.0",
|
|
192
|
+
"ts-jest": "^29.2.5",
|
|
169
193
|
typescript: "^5.4.5"
|
|
170
194
|
}
|
|
171
195
|
};
|
|
@@ -173,127 +197,167 @@ var package_default = {
|
|
|
173
197
|
// src/icon.ts
|
|
174
198
|
var icon = "data:image/png;base64,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";
|
|
175
199
|
|
|
200
|
+
// src/mutex.ts
|
|
201
|
+
function releaseStub() {
|
|
202
|
+
}
|
|
203
|
+
var Mutex = class {
|
|
204
|
+
m_lastPromise = Promise.resolve();
|
|
205
|
+
/**
|
|
206
|
+
* Acquire lock
|
|
207
|
+
* @param [bypass=false] option to skip lock acquisition
|
|
208
|
+
*/
|
|
209
|
+
async obtain(bypass = false) {
|
|
210
|
+
let release = releaseStub;
|
|
211
|
+
if (bypass) return release;
|
|
212
|
+
const lastPromise = this.m_lastPromise;
|
|
213
|
+
this.m_lastPromise = new Promise((resolve) => release = resolve);
|
|
214
|
+
await lastPromise;
|
|
215
|
+
return release;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
|
|
176
219
|
// src/provider.ts
|
|
220
|
+
var mutex = new Mutex();
|
|
177
221
|
var BaseProvider = class {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
222
|
+
id = "controller";
|
|
223
|
+
name = "Controller";
|
|
224
|
+
version = package_default.version;
|
|
225
|
+
icon = icon;
|
|
226
|
+
account;
|
|
227
|
+
subscriptions = [];
|
|
228
|
+
_probePromise = null;
|
|
229
|
+
async safeProbe() {
|
|
230
|
+
if (this.account) {
|
|
231
|
+
return this.account;
|
|
232
|
+
}
|
|
233
|
+
if (this._probePromise) {
|
|
234
|
+
return this._probePromise;
|
|
235
|
+
}
|
|
236
|
+
const release = await mutex.obtain();
|
|
237
|
+
return await new Promise(async (resolve) => {
|
|
238
|
+
try {
|
|
239
|
+
this._probePromise = this.probe();
|
|
240
|
+
const result = await this._probePromise;
|
|
241
|
+
resolve(result);
|
|
242
|
+
} finally {
|
|
243
|
+
this._probePromise = null;
|
|
244
|
+
}
|
|
245
|
+
}).finally(() => {
|
|
246
|
+
release();
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
request = async (call) => {
|
|
250
|
+
switch (call.type) {
|
|
251
|
+
case "wallet_getPermissions":
|
|
252
|
+
await this.safeProbe();
|
|
253
|
+
if (this.account) {
|
|
254
|
+
return [Permission.ACCOUNTS];
|
|
205
255
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
data: "wallet_watchAsset not implemented"
|
|
211
|
-
};
|
|
212
|
-
case "wallet_addStarknetChain": {
|
|
213
|
-
let params2 = call.params;
|
|
214
|
-
return this.addStarknetChain(params2);
|
|
256
|
+
return [];
|
|
257
|
+
case "wallet_requestAccounts": {
|
|
258
|
+
if (this.account) {
|
|
259
|
+
return [this.account.address];
|
|
215
260
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
261
|
+
const silentMode = call.params && call.params.silent_mode;
|
|
262
|
+
this.account = await this.safeProbe();
|
|
263
|
+
if (!this.account && !silentMode) {
|
|
264
|
+
this.account = await this.connect();
|
|
219
265
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
266
|
+
if (this.account) {
|
|
267
|
+
return [this.account.address];
|
|
268
|
+
}
|
|
269
|
+
return [];
|
|
270
|
+
}
|
|
271
|
+
case "wallet_watchAsset":
|
|
272
|
+
throw {
|
|
273
|
+
code: 63,
|
|
274
|
+
message: "An unexpected error occurred",
|
|
275
|
+
data: "wallet_watchAsset not implemented"
|
|
276
|
+
};
|
|
277
|
+
case "wallet_addStarknetChain": {
|
|
278
|
+
let params2 = call.params;
|
|
279
|
+
return this.addStarknetChain(params2);
|
|
280
|
+
}
|
|
281
|
+
case "wallet_switchStarknetChain": {
|
|
282
|
+
let params2 = call.params;
|
|
283
|
+
return this.switchStarknetChain(params2.chainId);
|
|
284
|
+
}
|
|
285
|
+
case "wallet_requestChainId":
|
|
286
|
+
if (!this.account) {
|
|
230
287
|
throw {
|
|
231
288
|
code: 63,
|
|
232
289
|
message: "An unexpected error occurred",
|
|
233
|
-
data: "
|
|
290
|
+
data: "Account not initialized"
|
|
234
291
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
params.calls.map((call2) => ({
|
|
246
|
-
contractAddress: call2.contract_address,
|
|
247
|
-
entrypoint: call2.entry_point,
|
|
248
|
-
calldata: call2.calldata
|
|
249
|
-
}))
|
|
250
|
-
);
|
|
251
|
-
case "wallet_addDeclareTransaction":
|
|
292
|
+
}
|
|
293
|
+
return await this.account.getChainId();
|
|
294
|
+
case "wallet_deploymentData":
|
|
295
|
+
throw {
|
|
296
|
+
code: 63,
|
|
297
|
+
message: "An unexpected error occurred",
|
|
298
|
+
data: "wallet_deploymentData not implemented"
|
|
299
|
+
};
|
|
300
|
+
case "wallet_addInvokeTransaction":
|
|
301
|
+
if (!this.account) {
|
|
252
302
|
throw {
|
|
253
303
|
code: 63,
|
|
254
304
|
message: "An unexpected error occurred",
|
|
255
|
-
data: "
|
|
305
|
+
data: "Account not initialized"
|
|
256
306
|
};
|
|
257
|
-
case "wallet_signTypedData": {
|
|
258
|
-
if (!this.account) {
|
|
259
|
-
throw {
|
|
260
|
-
code: 63,
|
|
261
|
-
message: "An unexpected error occurred",
|
|
262
|
-
data: "Account not initialized"
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
return await this.account.signMessage(call.params);
|
|
266
307
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
308
|
+
let params = call.params;
|
|
309
|
+
return await this.account.execute(
|
|
310
|
+
params.calls.map((call2) => ({
|
|
311
|
+
contractAddress: call2.contract_address,
|
|
312
|
+
entrypoint: call2.entry_point,
|
|
313
|
+
calldata: call2.calldata
|
|
314
|
+
}))
|
|
315
|
+
);
|
|
316
|
+
case "wallet_addDeclareTransaction":
|
|
317
|
+
throw {
|
|
318
|
+
code: 63,
|
|
319
|
+
message: "An unexpected error occurred",
|
|
320
|
+
data: "wallet_addDeclareTransaction not implemented"
|
|
321
|
+
};
|
|
322
|
+
case "wallet_signTypedData": {
|
|
323
|
+
if (!this.account) {
|
|
272
324
|
throw {
|
|
273
325
|
code: 63,
|
|
274
326
|
message: "An unexpected error occurred",
|
|
275
|
-
data:
|
|
327
|
+
data: "Account not initialized"
|
|
276
328
|
};
|
|
329
|
+
}
|
|
330
|
+
return await this.account.signMessage(call.params);
|
|
277
331
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
332
|
+
case "wallet_supportedSpecs":
|
|
333
|
+
return [];
|
|
334
|
+
case "wallet_supportedWalletApi":
|
|
335
|
+
return [];
|
|
336
|
+
default:
|
|
337
|
+
throw {
|
|
338
|
+
code: 63,
|
|
339
|
+
message: "An unexpected error occurred",
|
|
340
|
+
data: `Unknown RPC call type: ${call.type}`
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
on = (event, handler) => {
|
|
345
|
+
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
346
|
+
throw new Error(`Unknown event: ${event}`);
|
|
347
|
+
}
|
|
348
|
+
this.subscriptions.push({ type: event, handler });
|
|
349
|
+
};
|
|
350
|
+
off = (event, handler) => {
|
|
351
|
+
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
352
|
+
throw new Error(`Unknown event: ${event}`);
|
|
353
|
+
}
|
|
354
|
+
const idx = this.subscriptions.findIndex(
|
|
355
|
+
(sub) => sub.type === event && sub.handler === handler
|
|
356
|
+
);
|
|
357
|
+
if (idx >= 0) {
|
|
358
|
+
this.subscriptions.splice(idx, 1);
|
|
359
|
+
}
|
|
360
|
+
};
|
|
297
361
|
emitNetworkChanged(chainId) {
|
|
298
362
|
this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
|
|
299
363
|
sub.handler(chainId);
|
|
@@ -308,30 +372,92 @@ var BaseProvider = class {
|
|
|
308
372
|
|
|
309
373
|
// src/session/provider.ts
|
|
310
374
|
var SessionProvider = class extends BaseProvider {
|
|
311
|
-
|
|
375
|
+
id = "controller_session";
|
|
376
|
+
name = "Controller Session";
|
|
377
|
+
_chainId;
|
|
378
|
+
_rpcUrl;
|
|
379
|
+
_username;
|
|
380
|
+
_redirectUrl;
|
|
381
|
+
_policies;
|
|
382
|
+
_keychainUrl;
|
|
383
|
+
constructor({
|
|
384
|
+
rpc,
|
|
385
|
+
chainId,
|
|
386
|
+
policies,
|
|
387
|
+
redirectUrl,
|
|
388
|
+
keychainUrl
|
|
389
|
+
}) {
|
|
312
390
|
super();
|
|
313
|
-
this.
|
|
314
|
-
|
|
391
|
+
this._policies = {
|
|
392
|
+
verified: false,
|
|
393
|
+
contracts: policies.contracts ? Object.fromEntries(
|
|
394
|
+
Object.entries(policies.contracts).map(([address, contract]) => [
|
|
395
|
+
address,
|
|
396
|
+
{
|
|
397
|
+
...contract,
|
|
398
|
+
methods: contract.methods.map((method) => ({
|
|
399
|
+
...method,
|
|
400
|
+
authorized: true
|
|
401
|
+
}))
|
|
402
|
+
}
|
|
403
|
+
])
|
|
404
|
+
) : void 0,
|
|
405
|
+
messages: policies.messages?.map((message) => ({
|
|
406
|
+
...message,
|
|
407
|
+
authorized: true
|
|
408
|
+
}))
|
|
409
|
+
};
|
|
315
410
|
this._rpcUrl = rpc;
|
|
316
411
|
this._chainId = chainId;
|
|
317
412
|
this._redirectUrl = redirectUrl;
|
|
318
|
-
this.
|
|
413
|
+
this._keychainUrl = keychainUrl || KEYCHAIN_URL;
|
|
319
414
|
if (typeof window !== "undefined") {
|
|
320
415
|
window.starknet_controller_session = this;
|
|
321
416
|
}
|
|
322
417
|
}
|
|
418
|
+
validatePoliciesSubset(newPolicies, existingPolicies) {
|
|
419
|
+
if (newPolicies.contracts) {
|
|
420
|
+
if (!existingPolicies.contracts) return false;
|
|
421
|
+
for (const [address, contract] of Object.entries(newPolicies.contracts)) {
|
|
422
|
+
const existingContract = existingPolicies.contracts[address];
|
|
423
|
+
if (!existingContract) return false;
|
|
424
|
+
for (const method of contract.methods) {
|
|
425
|
+
const existingMethod = existingContract.methods.find(
|
|
426
|
+
(m) => m.entrypoint === method.entrypoint
|
|
427
|
+
);
|
|
428
|
+
if (!existingMethod || !existingMethod.authorized) return false;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (newPolicies.messages) {
|
|
433
|
+
if (!existingPolicies.messages) return false;
|
|
434
|
+
for (const message of newPolicies.messages) {
|
|
435
|
+
const existingMessage = existingPolicies.messages.find(
|
|
436
|
+
(m) => JSON.stringify(m.domain) === JSON.stringify(message.domain) && JSON.stringify(m.types) === JSON.stringify(message.types)
|
|
437
|
+
);
|
|
438
|
+
if (!existingMessage || !existingMessage.authorized) return false;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
323
443
|
async username() {
|
|
324
444
|
await this.tryRetrieveFromQueryOrStorage();
|
|
325
445
|
return this._username;
|
|
326
446
|
}
|
|
327
447
|
async probe() {
|
|
328
|
-
|
|
329
|
-
|
|
448
|
+
if (this.account) {
|
|
449
|
+
return this.account;
|
|
450
|
+
}
|
|
451
|
+
this.account = await this.tryRetrieveFromQueryOrStorage();
|
|
452
|
+
return this.account;
|
|
330
453
|
}
|
|
331
454
|
async connect() {
|
|
332
|
-
await this.tryRetrieveFromQueryOrStorage();
|
|
333
455
|
if (this.account) {
|
|
334
|
-
return;
|
|
456
|
+
return this.account;
|
|
457
|
+
}
|
|
458
|
+
this.account = await this.tryRetrieveFromQueryOrStorage();
|
|
459
|
+
if (this.account) {
|
|
460
|
+
return this.account;
|
|
335
461
|
}
|
|
336
462
|
const pk = stark.randomAddress();
|
|
337
463
|
const publicKey = ec.starkCurve.getStarkKey(pk);
|
|
@@ -342,12 +468,13 @@ var SessionProvider = class extends BaseProvider {
|
|
|
342
468
|
pubKey: publicKey
|
|
343
469
|
})
|
|
344
470
|
);
|
|
345
|
-
|
|
471
|
+
localStorage.setItem("sessionPolicies", JSON.stringify(this._policies));
|
|
472
|
+
const url = `${this._keychainUrl}/session?public_key=${publicKey}&redirect_uri=${this._redirectUrl}&redirect_query_name=startapp&policies=${JSON.stringify(
|
|
346
473
|
this._policies
|
|
347
474
|
)}&rpc_url=${this._rpcUrl}`;
|
|
348
475
|
localStorage.setItem("lastUsedConnector", this.id);
|
|
349
476
|
window.open(url, "_blank");
|
|
350
|
-
return;
|
|
477
|
+
return this.account;
|
|
351
478
|
}
|
|
352
479
|
switchStarknetChain(_chainId) {
|
|
353
480
|
throw new Error("switchStarknetChain not implemented");
|
|
@@ -358,11 +485,15 @@ var SessionProvider = class extends BaseProvider {
|
|
|
358
485
|
disconnect() {
|
|
359
486
|
localStorage.removeItem("sessionSigner");
|
|
360
487
|
localStorage.removeItem("session");
|
|
488
|
+
localStorage.removeItem("sessionPolicies");
|
|
361
489
|
this.account = void 0;
|
|
362
490
|
this._username = void 0;
|
|
363
491
|
return Promise.resolve();
|
|
364
492
|
}
|
|
365
493
|
async tryRetrieveFromQueryOrStorage() {
|
|
494
|
+
if (this.account) {
|
|
495
|
+
return this.account;
|
|
496
|
+
}
|
|
366
497
|
const signerString = localStorage.getItem("sessionSigner");
|
|
367
498
|
const signer = signerString ? JSON.parse(signerString) : null;
|
|
368
499
|
let sessionRegistration = null;
|
|
@@ -386,6 +517,41 @@ var SessionProvider = class extends BaseProvider {
|
|
|
386
517
|
if (!sessionRegistration || !signer) {
|
|
387
518
|
return;
|
|
388
519
|
}
|
|
520
|
+
const expirationTime = parseInt(sessionRegistration.expiresAt) * 1e3;
|
|
521
|
+
console.log("Session expiration check:", {
|
|
522
|
+
expirationTime,
|
|
523
|
+
currentTime: Date.now(),
|
|
524
|
+
expired: Date.now() >= expirationTime
|
|
525
|
+
});
|
|
526
|
+
if (Date.now() >= expirationTime) {
|
|
527
|
+
console.log("Session expired, clearing stored session");
|
|
528
|
+
this.clearStoredSession();
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
const storedPoliciesStr = localStorage.getItem("sessionPolicies");
|
|
532
|
+
console.log("Checking stored policies:", {
|
|
533
|
+
storedPoliciesStr,
|
|
534
|
+
currentPolicies: this._policies
|
|
535
|
+
});
|
|
536
|
+
if (storedPoliciesStr) {
|
|
537
|
+
const storedPolicies = JSON.parse(
|
|
538
|
+
storedPoliciesStr
|
|
539
|
+
);
|
|
540
|
+
const isValid = this.validatePoliciesSubset(
|
|
541
|
+
this._policies,
|
|
542
|
+
storedPolicies
|
|
543
|
+
);
|
|
544
|
+
console.log("Policy validation result:", {
|
|
545
|
+
isValid,
|
|
546
|
+
storedPolicies,
|
|
547
|
+
requestedPolicies: this._policies
|
|
548
|
+
});
|
|
549
|
+
if (!isValid) {
|
|
550
|
+
console.log("Policy validation failed, clearing stored session");
|
|
551
|
+
this.clearStoredSession();
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
389
555
|
this._username = sessionRegistration.username;
|
|
390
556
|
this.account = new SessionAccount(this, {
|
|
391
557
|
rpcUrl: this._rpcUrl,
|
|
@@ -398,6 +564,11 @@ var SessionProvider = class extends BaseProvider {
|
|
|
398
564
|
});
|
|
399
565
|
return this.account;
|
|
400
566
|
}
|
|
567
|
+
clearStoredSession() {
|
|
568
|
+
localStorage.removeItem("sessionSigner");
|
|
569
|
+
localStorage.removeItem("session");
|
|
570
|
+
localStorage.removeItem("sessionPolicies");
|
|
571
|
+
}
|
|
401
572
|
};
|
|
402
573
|
export {
|
|
403
574
|
NotReadyToConnect,
|