@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/provider.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
|
];
|
|
@@ -55,6 +59,7 @@ function toArray(val) {
|
|
|
55
59
|
|
|
56
60
|
// src/session/account.ts
|
|
57
61
|
var SessionAccount = class extends WalletAccount {
|
|
62
|
+
controller;
|
|
58
63
|
constructor(provider, {
|
|
59
64
|
rpcUrl,
|
|
60
65
|
privateKey,
|
|
@@ -65,6 +70,7 @@ var SessionAccount = class extends WalletAccount {
|
|
|
65
70
|
policies
|
|
66
71
|
}) {
|
|
67
72
|
super({ nodeUrl: rpcUrl }, provider);
|
|
73
|
+
this.address = address;
|
|
68
74
|
this.controller = CartridgeSessionAccount.new_as_registered(
|
|
69
75
|
rpcUrl,
|
|
70
76
|
privateKey,
|
|
@@ -105,7 +111,7 @@ import {
|
|
|
105
111
|
// package.json
|
|
106
112
|
var package_default = {
|
|
107
113
|
name: "@cartridge/controller",
|
|
108
|
-
version: "0.
|
|
114
|
+
version: "0.6.0",
|
|
109
115
|
description: "Cartridge Controller",
|
|
110
116
|
module: "dist/index.js",
|
|
111
117
|
types: "dist/index.d.ts",
|
|
@@ -115,13 +121,26 @@ var package_default = {
|
|
|
115
121
|
build: "pnpm build:deps",
|
|
116
122
|
format: 'prettier --write "src/**/*.ts"',
|
|
117
123
|
"format:check": 'prettier --check "src/**/*.ts"',
|
|
124
|
+
test: "jest",
|
|
118
125
|
version: "pnpm pkg get version"
|
|
119
126
|
},
|
|
120
127
|
exports: {
|
|
121
|
-
".":
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
+
}
|
|
125
144
|
},
|
|
126
145
|
tsup: {
|
|
127
146
|
entry: [
|
|
@@ -134,6 +153,9 @@ var package_default = {
|
|
|
134
153
|
sourcemap: true,
|
|
135
154
|
clean: true
|
|
136
155
|
},
|
|
156
|
+
peerDependencies: {
|
|
157
|
+
starknet: "^6.21.0"
|
|
158
|
+
},
|
|
137
159
|
dependencies: {
|
|
138
160
|
"@cartridge/account-wasm": "workspace:*",
|
|
139
161
|
"@cartridge/penpal": "^6.2.3",
|
|
@@ -142,12 +164,14 @@ var package_default = {
|
|
|
142
164
|
base64url: "^3.0.1",
|
|
143
165
|
"cbor-x": "^1.5.0",
|
|
144
166
|
"fast-deep-equal": "^3.1.3",
|
|
145
|
-
"query-string": "^7.1.1"
|
|
146
|
-
starknet: "^6.11.0"
|
|
167
|
+
"query-string": "^7.1.1"
|
|
147
168
|
},
|
|
148
169
|
devDependencies: {
|
|
149
170
|
"@cartridge/tsconfig": "workspace:*",
|
|
171
|
+
"@types/jest": "^29.5.14",
|
|
150
172
|
"@types/node": "^20.6.0",
|
|
173
|
+
jest: "^29.7.0",
|
|
174
|
+
"ts-jest": "^29.2.5",
|
|
151
175
|
typescript: "^5.4.5"
|
|
152
176
|
}
|
|
153
177
|
};
|
|
@@ -155,127 +179,167 @@ var package_default = {
|
|
|
155
179
|
// src/icon.ts
|
|
156
180
|
var icon = "data:image/png;base64,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";
|
|
157
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
|
+
|
|
158
201
|
// src/provider.ts
|
|
202
|
+
var mutex = new Mutex();
|
|
159
203
|
var BaseProvider = class {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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];
|
|
187
237
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
data: "wallet_watchAsset not implemented"
|
|
193
|
-
};
|
|
194
|
-
case "wallet_addStarknetChain": {
|
|
195
|
-
let params2 = call.params;
|
|
196
|
-
return this.addStarknetChain(params2);
|
|
238
|
+
return [];
|
|
239
|
+
case "wallet_requestAccounts": {
|
|
240
|
+
if (this.account) {
|
|
241
|
+
return [this.account.address];
|
|
197
242
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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();
|
|
201
247
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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) {
|
|
212
269
|
throw {
|
|
213
270
|
code: 63,
|
|
214
271
|
message: "An unexpected error occurred",
|
|
215
|
-
data: "
|
|
272
|
+
data: "Account not initialized"
|
|
216
273
|
};
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
params.calls.map((call2) => ({
|
|
228
|
-
contractAddress: call2.contract_address,
|
|
229
|
-
entrypoint: call2.entry_point,
|
|
230
|
-
calldata: call2.calldata
|
|
231
|
-
}))
|
|
232
|
-
);
|
|
233
|
-
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) {
|
|
234
284
|
throw {
|
|
235
285
|
code: 63,
|
|
236
286
|
message: "An unexpected error occurred",
|
|
237
|
-
data: "
|
|
287
|
+
data: "Account not initialized"
|
|
238
288
|
};
|
|
239
|
-
case "wallet_signTypedData": {
|
|
240
|
-
if (!this.account) {
|
|
241
|
-
throw {
|
|
242
|
-
code: 63,
|
|
243
|
-
message: "An unexpected error occurred",
|
|
244
|
-
data: "Account not initialized"
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
return await this.account.signMessage(call.params);
|
|
248
289
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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) {
|
|
254
306
|
throw {
|
|
255
307
|
code: 63,
|
|
256
308
|
message: "An unexpected error occurred",
|
|
257
|
-
data:
|
|
309
|
+
data: "Account not initialized"
|
|
258
310
|
};
|
|
311
|
+
}
|
|
312
|
+
return await this.account.signMessage(call.params);
|
|
259
313
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
+
};
|
|
279
343
|
emitNetworkChanged(chainId) {
|
|
280
344
|
this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
|
|
281
345
|
sub.handler(chainId);
|
|
@@ -290,30 +354,92 @@ var BaseProvider = class {
|
|
|
290
354
|
|
|
291
355
|
// src/session/provider.ts
|
|
292
356
|
var SessionProvider = class extends BaseProvider {
|
|
293
|
-
|
|
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
|
+
}) {
|
|
294
372
|
super();
|
|
295
|
-
this.
|
|
296
|
-
|
|
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
|
+
};
|
|
297
392
|
this._rpcUrl = rpc;
|
|
298
393
|
this._chainId = chainId;
|
|
299
394
|
this._redirectUrl = redirectUrl;
|
|
300
|
-
this.
|
|
395
|
+
this._keychainUrl = keychainUrl || KEYCHAIN_URL;
|
|
301
396
|
if (typeof window !== "undefined") {
|
|
302
397
|
window.starknet_controller_session = this;
|
|
303
398
|
}
|
|
304
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
|
+
}
|
|
305
425
|
async username() {
|
|
306
426
|
await this.tryRetrieveFromQueryOrStorage();
|
|
307
427
|
return this._username;
|
|
308
428
|
}
|
|
309
429
|
async probe() {
|
|
310
|
-
|
|
311
|
-
|
|
430
|
+
if (this.account) {
|
|
431
|
+
return this.account;
|
|
432
|
+
}
|
|
433
|
+
this.account = await this.tryRetrieveFromQueryOrStorage();
|
|
434
|
+
return this.account;
|
|
312
435
|
}
|
|
313
436
|
async connect() {
|
|
314
|
-
await this.tryRetrieveFromQueryOrStorage();
|
|
315
437
|
if (this.account) {
|
|
316
|
-
return;
|
|
438
|
+
return this.account;
|
|
439
|
+
}
|
|
440
|
+
this.account = await this.tryRetrieveFromQueryOrStorage();
|
|
441
|
+
if (this.account) {
|
|
442
|
+
return this.account;
|
|
317
443
|
}
|
|
318
444
|
const pk = stark.randomAddress();
|
|
319
445
|
const publicKey = ec.starkCurve.getStarkKey(pk);
|
|
@@ -324,12 +450,13 @@ var SessionProvider = class extends BaseProvider {
|
|
|
324
450
|
pubKey: publicKey
|
|
325
451
|
})
|
|
326
452
|
);
|
|
327
|
-
|
|
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(
|
|
328
455
|
this._policies
|
|
329
456
|
)}&rpc_url=${this._rpcUrl}`;
|
|
330
457
|
localStorage.setItem("lastUsedConnector", this.id);
|
|
331
458
|
window.open(url, "_blank");
|
|
332
|
-
return;
|
|
459
|
+
return this.account;
|
|
333
460
|
}
|
|
334
461
|
switchStarknetChain(_chainId) {
|
|
335
462
|
throw new Error("switchStarknetChain not implemented");
|
|
@@ -340,11 +467,15 @@ var SessionProvider = class extends BaseProvider {
|
|
|
340
467
|
disconnect() {
|
|
341
468
|
localStorage.removeItem("sessionSigner");
|
|
342
469
|
localStorage.removeItem("session");
|
|
470
|
+
localStorage.removeItem("sessionPolicies");
|
|
343
471
|
this.account = void 0;
|
|
344
472
|
this._username = void 0;
|
|
345
473
|
return Promise.resolve();
|
|
346
474
|
}
|
|
347
475
|
async tryRetrieveFromQueryOrStorage() {
|
|
476
|
+
if (this.account) {
|
|
477
|
+
return this.account;
|
|
478
|
+
}
|
|
348
479
|
const signerString = localStorage.getItem("sessionSigner");
|
|
349
480
|
const signer = signerString ? JSON.parse(signerString) : null;
|
|
350
481
|
let sessionRegistration = null;
|
|
@@ -368,6 +499,41 @@ var SessionProvider = class extends BaseProvider {
|
|
|
368
499
|
if (!sessionRegistration || !signer) {
|
|
369
500
|
return;
|
|
370
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
|
+
}
|
|
371
537
|
this._username = sessionRegistration.username;
|
|
372
538
|
this.account = new SessionAccount(this, {
|
|
373
539
|
rpcUrl: this._rpcUrl,
|
|
@@ -380,6 +546,11 @@ var SessionProvider = class extends BaseProvider {
|
|
|
380
546
|
});
|
|
381
547
|
return this.account;
|
|
382
548
|
}
|
|
549
|
+
clearStoredSession() {
|
|
550
|
+
localStorage.removeItem("sessionSigner");
|
|
551
|
+
localStorage.removeItem("session");
|
|
552
|
+
localStorage.removeItem("sessionPolicies");
|
|
553
|
+
}
|
|
383
554
|
};
|
|
384
555
|
export {
|
|
385
556
|
SessionProvider as default
|