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