@zerodev/wallet-core 0.0.4 → 0.0.6
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/actions/wallet/getUserWallet.js +1 -1
- package/dist/_cjs/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_cjs/core/createZeroDevWalletCore.js +75 -38
- package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_cjs/stampers/indexedDbStamper.js +5 -1
- package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
- package/dist/_cjs/utils/crossTabLock.js +10 -0
- package/dist/_cjs/utils/crossTabLock.js.map +1 -0
- package/dist/_esm/actions/wallet/getUserWallet.js +3 -1
- package/dist/_esm/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_esm/core/createZeroDevWalletCore.js +98 -43
- package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_esm/stampers/indexedDbStamper.js +8 -1
- package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
- package/dist/_esm/utils/crossTabLock.js +17 -0
- package/dist/_esm/utils/crossTabLock.js.map +1 -0
- package/dist/_types/actions/wallet/getUserWallet.d.ts.map +1 -1
- package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
- package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
- package/dist/_types/stampers/types.d.ts +5 -0
- package/dist/_types/stampers/types.d.ts.map +1 -1
- package/dist/_types/utils/crossTabLock.d.ts +3 -0
- package/dist/_types/utils/crossTabLock.d.ts.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/actions/wallet/getUserWallet.ts +3 -1
- package/src/core/createZeroDevWalletCore.ts +172 -94
- package/src/stampers/indexedDbStamper.ts +8 -1
- package/src/stampers/types.ts +5 -0
- package/src/utils/crossTabLock.ts +19 -0
|
@@ -4,7 +4,7 @@ exports.getUserWallet = getUserWallet;
|
|
|
4
4
|
async function getUserWallet(client, params) {
|
|
5
5
|
const { projectId, token } = params;
|
|
6
6
|
return await client.request({
|
|
7
|
-
path: `${projectId}/
|
|
7
|
+
path: `${projectId}/wallets`,
|
|
8
8
|
method: 'GET',
|
|
9
9
|
headers: {
|
|
10
10
|
Authorization: `Bearer ${token}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserWallet.js","sourceRoot":"","sources":["../../../../src/actions/wallet/getUserWallet.ts"],"names":[],"mappings":";;AAmCA,
|
|
1
|
+
{"version":3,"file":"getUserWallet.js","sourceRoot":"","sources":["../../../../src/actions/wallet/getUserWallet.ts"],"names":[],"mappings":";;AAmCA,sCAmBC;AAnBM,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAMnC,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,GAAG,SAAS,UAAU;QAC5B,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;QACD,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -9,6 +9,7 @@ const noopPasskeyStamper_js_1 = require("../stampers/noopPasskeyStamper.js");
|
|
|
9
9
|
const manager_js_1 = require("../storage/manager.js");
|
|
10
10
|
const session_js_1 = require("../types/session.js");
|
|
11
11
|
const buildClientSignature_js_1 = require("../utils/buildClientSignature.js");
|
|
12
|
+
const crossTabLock_js_1 = require("../utils/crossTabLock.js");
|
|
12
13
|
const encryptOtpAttempt_js_1 = require("../utils/encryptOtpAttempt.js");
|
|
13
14
|
const resolveOrganizationId_js_1 = require("../utils/resolveOrganizationId.js");
|
|
14
15
|
const utils_js_1 = require("../utils/utils.js");
|
|
@@ -64,7 +65,7 @@ async function createZeroDevWalletCore(config) {
|
|
|
64
65
|
createdAt: now,
|
|
65
66
|
};
|
|
66
67
|
};
|
|
67
|
-
const
|
|
68
|
+
const commitReplacementSessionLocked = async (session, targetPublicKey) => {
|
|
68
69
|
await sessionStorageManager.stageSessionTransition(session, targetPublicKey);
|
|
69
70
|
try {
|
|
70
71
|
await client.apiKeyStamper.commitKeyRotation();
|
|
@@ -92,7 +93,9 @@ async function createZeroDevWalletCore(config) {
|
|
|
92
93
|
throw error;
|
|
93
94
|
}
|
|
94
95
|
};
|
|
95
|
-
|
|
96
|
+
const commitReplacementSession = (session, targetPublicKey) => (0, crossTabLock_js_1.withCrossTabLock)(() => commitReplacementSessionLocked(session, targetPublicKey));
|
|
97
|
+
await withKeyTransition(() => (0, crossTabLock_js_1.withCrossTabLock)(async () => {
|
|
98
|
+
await client.apiKeyStamper.reload?.();
|
|
96
99
|
const activePublicKey = await client.apiKeyStamper.getPublicKey();
|
|
97
100
|
await sessionStorageManager.recoverSessionTransition(activePublicKey);
|
|
98
101
|
const restoredSession = await sessionStorageManager.getActiveSession();
|
|
@@ -109,7 +112,7 @@ async function createZeroDevWalletCore(config) {
|
|
|
109
112
|
await sessionStorageManager.clearAllSessions();
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
|
-
});
|
|
115
|
+
}));
|
|
113
116
|
return {
|
|
114
117
|
client,
|
|
115
118
|
async getPublicKey() {
|
|
@@ -145,21 +148,43 @@ async function createZeroDevWalletCore(config) {
|
|
|
145
148
|
await sessionStorageManager.clearSession(sessionId);
|
|
146
149
|
},
|
|
147
150
|
async clearAllSessions() {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
return withKeyTransition(() => (0, crossTabLock_js_1.withCrossTabLock)(async () => {
|
|
152
|
+
if (await sessionStorageManager.getActiveSession()) {
|
|
153
|
+
throw new Error('Refusing to clear the active session locally; use logout() to revoke its remote key first.');
|
|
154
|
+
}
|
|
155
|
+
await sessionStorageManager.clearAllSessions();
|
|
156
|
+
}));
|
|
152
157
|
},
|
|
153
158
|
async refreshSession(sessionId) {
|
|
154
|
-
|
|
159
|
+
const expected = sessionId === undefined
|
|
160
|
+
? sessionStorageManager.getActiveSessionKey()
|
|
161
|
+
: Promise.resolve(sessionId);
|
|
162
|
+
expected.catch(() => undefined);
|
|
163
|
+
return withKeyTransition(() => (0, crossTabLock_js_1.withCrossTabLock)(async () => {
|
|
164
|
+
const expectedId = await expected;
|
|
155
165
|
const activeSessionKey = await sessionStorageManager.getActiveSessionKey();
|
|
156
|
-
if (sessionId && sessionId !== activeSessionKey) {
|
|
157
|
-
throw new Error('Refreshing an inactive session is not supported with a single active key vault');
|
|
158
|
-
}
|
|
159
166
|
const activeSession = await sessionStorageManager.getActiveSession();
|
|
160
167
|
if (!activeSession) {
|
|
161
168
|
throw new Error('No active session');
|
|
162
169
|
}
|
|
170
|
+
if (expectedId && expectedId !== activeSessionKey) {
|
|
171
|
+
if (activeSession.stamperType === 'apiKey') {
|
|
172
|
+
const keyBefore = await client.apiKeyStamper.getPublicKey();
|
|
173
|
+
await client.apiKeyStamper.reload?.();
|
|
174
|
+
const activePublicKey = await client.apiKeyStamper.getPublicKey();
|
|
175
|
+
if (activePublicKey &&
|
|
176
|
+
normalizeKey(activePublicKey) !==
|
|
177
|
+
normalizeKey(keyBefore ?? '') &&
|
|
178
|
+
normalizeKey(activePublicKey) ===
|
|
179
|
+
normalizeKey(activeSession.publicKey ?? '') &&
|
|
180
|
+
(0, utils_js_1.normalizeTimestamp)(activeSession.expiry) > Date.now()) {
|
|
181
|
+
return activeSession;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (sessionId !== undefined) {
|
|
185
|
+
throw new Error('Refreshing an inactive session is not supported with a single active key vault');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
163
188
|
if (activeSession.stamperType !== 'apiKey') {
|
|
164
189
|
throw new Error('Invalid session type');
|
|
165
190
|
}
|
|
@@ -172,14 +197,14 @@ async function createZeroDevWalletCore(config) {
|
|
|
172
197
|
stampWith: 'apiKey',
|
|
173
198
|
});
|
|
174
199
|
const session = createReplacementSession(data.session, targetPublicKey, 'indexedDb', session_js_1.SessionType.READ_WRITE);
|
|
175
|
-
await
|
|
200
|
+
await commitReplacementSessionLocked(session, targetPublicKey);
|
|
176
201
|
return session;
|
|
177
202
|
}
|
|
178
203
|
catch (error) {
|
|
179
204
|
await client.apiKeyStamper.discardKeyRotation();
|
|
180
205
|
throw error;
|
|
181
206
|
}
|
|
182
|
-
});
|
|
207
|
+
}));
|
|
183
208
|
},
|
|
184
209
|
async auth(params) {
|
|
185
210
|
switch (params.type) {
|
|
@@ -232,16 +257,18 @@ async function createZeroDevWalletCore(config) {
|
|
|
232
257
|
projectId,
|
|
233
258
|
encodedPublicKey: registrationPublicKey,
|
|
234
259
|
});
|
|
235
|
-
await
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
260
|
+
return await (0, crossTabLock_js_1.withCrossTabLock)(async () => {
|
|
261
|
+
await client.apiKeyStamper.commitKeyRotation();
|
|
262
|
+
const targetPublicKey = await prepareFreshKeyRotation();
|
|
263
|
+
const loginData = await client.loginWithStamp({
|
|
264
|
+
projectId,
|
|
265
|
+
targetPublicKey,
|
|
266
|
+
organizationId: await resolveOrganizationId(),
|
|
267
|
+
});
|
|
268
|
+
const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
|
|
269
|
+
await commitReplacementSessionLocked(session, targetPublicKey);
|
|
270
|
+
return data;
|
|
241
271
|
});
|
|
242
|
-
const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
|
|
243
|
-
await commitReplacementSession(session, targetPublicKey);
|
|
244
|
-
return data;
|
|
245
272
|
}
|
|
246
273
|
catch (error) {
|
|
247
274
|
await client.apiKeyStamper.discardKeyRotation();
|
|
@@ -396,22 +423,32 @@ async function createZeroDevWalletCore(config) {
|
|
|
396
423
|
}
|
|
397
424
|
}
|
|
398
425
|
preparedOAuthPublicKey = undefined;
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
426
|
+
return (0, crossTabLock_js_1.withCrossTabLock)(async () => {
|
|
427
|
+
const current = await sessionStorageManager.getActiveSession();
|
|
428
|
+
if (current &&
|
|
429
|
+
(!session ||
|
|
430
|
+
current.organizationId !== session.organizationId ||
|
|
431
|
+
current.userId !== session.userId)) {
|
|
432
|
+
await client.apiKeyStamper.discardKeyRotation();
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
let cleanupError;
|
|
436
|
+
try {
|
|
437
|
+
await client.apiKeyStamper.clear();
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
cleanupError = error;
|
|
441
|
+
}
|
|
442
|
+
try {
|
|
443
|
+
await sessionStorageManager.clearAllSessions();
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
cleanupError ??= error;
|
|
447
|
+
}
|
|
448
|
+
if (cleanupError)
|
|
449
|
+
throw cleanupError;
|
|
450
|
+
return true;
|
|
451
|
+
});
|
|
415
452
|
});
|
|
416
453
|
},
|
|
417
454
|
async toAccount() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroDevWalletCore.js","sourceRoot":"","sources":["../../../src/core/createZeroDevWalletCore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createZeroDevWalletCore.js","sourceRoot":"","sources":["../../../src/core/createZeroDevWalletCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createIndexedDbStamper = createIndexedDbStamper;
|
|
4
4
|
const nist_js_1 = require("@noble/curves/nist.js");
|
|
5
5
|
const indexed_db_stamper_1 = require("@turnkey/indexed-db-stamper");
|
|
6
|
+
const crossTabLock_js_1 = require("../utils/crossTabLock.js");
|
|
6
7
|
const utils_js_1 = require("../utils/utils.js");
|
|
7
8
|
async function signWithKeyPair(keyPair, payload) {
|
|
8
9
|
const rawSignature = new Uint8Array(await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, keyPair.privateKey, new TextEncoder().encode(payload)));
|
|
@@ -18,7 +19,7 @@ function encodeStamp(publicKey, signature) {
|
|
|
18
19
|
}
|
|
19
20
|
async function createIndexedDbStamper() {
|
|
20
21
|
const inner = new indexed_db_stamper_1.IndexedDbStamper();
|
|
21
|
-
await inner.init();
|
|
22
|
+
await (0, crossTabLock_js_1.withCrossTabLock)(() => inner.init());
|
|
22
23
|
let pendingKeyPair = null;
|
|
23
24
|
const requirePending = () => {
|
|
24
25
|
if (!pendingKeyPair)
|
|
@@ -70,6 +71,9 @@ async function createIndexedDbStamper() {
|
|
|
70
71
|
async discardKeyRotation() {
|
|
71
72
|
pendingKeyPair = null;
|
|
72
73
|
},
|
|
74
|
+
async reload() {
|
|
75
|
+
await inner.init();
|
|
76
|
+
},
|
|
73
77
|
};
|
|
74
78
|
}
|
|
75
79
|
//# sourceMappingURL=indexedDbStamper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexedDbStamper.js","sourceRoot":"","sources":["../../../src/stampers/indexedDbStamper.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"indexedDbStamper.js","sourceRoot":"","sources":["../../../src/stampers/indexedDbStamper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withCrossTabLock = exports.KEY_TRANSITION_LOCK = void 0;
|
|
4
|
+
exports.KEY_TRANSITION_LOCK = '@zerodev/key_transition';
|
|
5
|
+
const withCrossTabLock = async (task) => {
|
|
6
|
+
const locks = typeof navigator === 'undefined' ? undefined : navigator.locks;
|
|
7
|
+
return locks ? await locks.request(exports.KEY_TRANSITION_LOCK, task) : task();
|
|
8
|
+
};
|
|
9
|
+
exports.withCrossTabLock = withCrossTabLock;
|
|
10
|
+
//# sourceMappingURL=crossTabLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossTabLock.js","sourceRoot":"","sources":["../../../src/utils/crossTabLock.ts"],"names":[],"mappings":";;;AAWa,QAAA,mBAAmB,GAAG,yBAAyB,CAAA;AAErD,MAAM,gBAAgB,GAAG,KAAK,EACnC,IAAsB,EACV,EAAE;IACd,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAA;IAC5E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,2BAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACxE,CAAC,CAAA;AALY,QAAA,gBAAgB,oBAK5B"}
|
|
@@ -18,8 +18,10 @@ export async function getUserWallet(client, params) {
|
|
|
18
18
|
const { projectId, token } = params;
|
|
19
19
|
// GET behind StampCheckUser: user is resolved from the stamped credential
|
|
20
20
|
// (+ session JWT); no body sent. The stamp signs the X-Timestamp value.
|
|
21
|
+
// /wallets surfaces an expired session as a real 401 (RestRequestError);
|
|
22
|
+
// the deprecated /user-wallet route returned a 200 with a malformed address.
|
|
21
23
|
return await client.request({
|
|
22
|
-
path: `${projectId}/
|
|
24
|
+
path: `${projectId}/wallets`,
|
|
23
25
|
method: 'GET',
|
|
24
26
|
headers: {
|
|
25
27
|
Authorization: `Bearer ${token}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserWallet.js","sourceRoot":"","sources":["../../../../src/actions/wallet/getUserWallet.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAEnC,0EAA0E;IAC1E,wEAAwE;IACxE,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"getUserWallet.js","sourceRoot":"","sources":["../../../../src/actions/wallet/getUserWallet.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAEnC,0EAA0E;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,6EAA6E;IAC7E,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,GAAG,SAAS,UAAU;QAC5B,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;QACD,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -6,9 +6,10 @@ import { createNoopPasskeyStamper } from '../stampers/noopPasskeyStamper.js';
|
|
|
6
6
|
import { createStorageManager, } from '../storage/manager.js';
|
|
7
7
|
import { SessionType } from '../types/session.js';
|
|
8
8
|
import { buildClientSignature } from '../utils/buildClientSignature.js';
|
|
9
|
+
import { withCrossTabLock } from '../utils/crossTabLock.js';
|
|
9
10
|
import { encryptOtpAttempt } from '../utils/encryptOtpAttempt.js';
|
|
10
11
|
import { createOrganizationIdResolver } from '../utils/resolveOrganizationId.js';
|
|
11
|
-
import { humanReadableDateTime, parseSession } from '../utils/utils.js';
|
|
12
|
+
import { humanReadableDateTime, normalizeTimestamp, parseSession, } from '../utils/utils.js';
|
|
12
13
|
// The browser/native key vault is a single physical slot shared by SDK
|
|
13
14
|
// instances, so key transitions must be serialized across projects.
|
|
14
15
|
let keyTransitionTail = Promise.resolve();
|
|
@@ -67,7 +68,8 @@ export async function createZeroDevWalletCore(config) {
|
|
|
67
68
|
createdAt: now,
|
|
68
69
|
};
|
|
69
70
|
};
|
|
70
|
-
|
|
71
|
+
// Callers must hold the cross-tab lock; see commitReplacementSession.
|
|
72
|
+
const commitReplacementSessionLocked = async (session, targetPublicKey) => {
|
|
71
73
|
await sessionStorageManager.stageSessionTransition(session, targetPublicKey);
|
|
72
74
|
try {
|
|
73
75
|
await client.apiKeyStamper.commitKeyRotation();
|
|
@@ -95,7 +97,12 @@ export async function createZeroDevWalletCore(config) {
|
|
|
95
97
|
throw error;
|
|
96
98
|
}
|
|
97
99
|
};
|
|
98
|
-
|
|
100
|
+
const commitReplacementSession = (session, targetPublicKey) => withCrossTabLock(() => commitReplacementSessionLocked(session, targetPublicKey));
|
|
101
|
+
await withKeyTransition(() => withCrossTabLock(async () => {
|
|
102
|
+
// The stamper read the vault before this tab got the lock; another tab
|
|
103
|
+
// may have committed a new key since. A stale key here would look like a
|
|
104
|
+
// mismatch and clear that tab's valid session.
|
|
105
|
+
await client.apiKeyStamper.reload?.();
|
|
99
106
|
const activePublicKey = await client.apiKeyStamper.getPublicKey();
|
|
100
107
|
await sessionStorageManager.recoverSessionTransition(activePublicKey);
|
|
101
108
|
const restoredSession = await sessionStorageManager.getActiveSession();
|
|
@@ -112,7 +119,7 @@ export async function createZeroDevWalletCore(config) {
|
|
|
112
119
|
await sessionStorageManager.clearAllSessions();
|
|
113
120
|
}
|
|
114
121
|
}
|
|
115
|
-
});
|
|
122
|
+
}));
|
|
116
123
|
return {
|
|
117
124
|
client,
|
|
118
125
|
async getPublicKey() {
|
|
@@ -148,21 +155,52 @@ export async function createZeroDevWalletCore(config) {
|
|
|
148
155
|
await sessionStorageManager.clearSession(sessionId);
|
|
149
156
|
},
|
|
150
157
|
async clearAllSessions() {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
158
|
+
// Under the lock, so it cannot remove another tab's in-flight journal.
|
|
159
|
+
return withKeyTransition(() => withCrossTabLock(async () => {
|
|
160
|
+
if (await sessionStorageManager.getActiveSession()) {
|
|
161
|
+
throw new Error('Refusing to clear the active session locally; use logout() to revoke its remote key first.');
|
|
162
|
+
}
|
|
163
|
+
await sessionStorageManager.clearAllSessions();
|
|
164
|
+
}));
|
|
155
165
|
},
|
|
156
166
|
async refreshSession(sessionId) {
|
|
157
|
-
|
|
167
|
+
// Without an id, refresh the session active when called, so a tab that
|
|
168
|
+
// then waits behind another tab's refresh adopts it instead of rotating
|
|
169
|
+
// again. Read now but awaited inside, so the call keeps its queue place.
|
|
170
|
+
const expected = sessionId === undefined
|
|
171
|
+
? sessionStorageManager.getActiveSessionKey()
|
|
172
|
+
: Promise.resolve(sessionId);
|
|
173
|
+
expected.catch(() => undefined);
|
|
174
|
+
return withKeyTransition(() => withCrossTabLock(async () => {
|
|
175
|
+
const expectedId = await expected;
|
|
158
176
|
const activeSessionKey = await sessionStorageManager.getActiveSessionKey();
|
|
159
|
-
if (sessionId && sessionId !== activeSessionKey) {
|
|
160
|
-
throw new Error('Refreshing an inactive session is not supported with a single active key vault');
|
|
161
|
-
}
|
|
162
177
|
const activeSession = await sessionStorageManager.getActiveSession();
|
|
163
178
|
if (!activeSession) {
|
|
164
179
|
throw new Error('No active session');
|
|
165
180
|
}
|
|
181
|
+
if (expectedId && expectedId !== activeSessionKey) {
|
|
182
|
+
// Another tab replaced the session while this one waited. Adopt it
|
|
183
|
+
// only when that tab also replaced the key under this one. Within
|
|
184
|
+
// one tab, a call without an id refreshes the current session and
|
|
185
|
+
// an inactive id stays an error. Callers should still compare the
|
|
186
|
+
// identity: the other tab may have signed in to a different account.
|
|
187
|
+
if (activeSession.stamperType === 'apiKey') {
|
|
188
|
+
const keyBefore = await client.apiKeyStamper.getPublicKey();
|
|
189
|
+
await client.apiKeyStamper.reload?.();
|
|
190
|
+
const activePublicKey = await client.apiKeyStamper.getPublicKey();
|
|
191
|
+
if (activePublicKey &&
|
|
192
|
+
normalizeKey(activePublicKey) !==
|
|
193
|
+
normalizeKey(keyBefore ?? '') &&
|
|
194
|
+
normalizeKey(activePublicKey) ===
|
|
195
|
+
normalizeKey(activeSession.publicKey ?? '') &&
|
|
196
|
+
normalizeTimestamp(activeSession.expiry) > Date.now()) {
|
|
197
|
+
return activeSession;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (sessionId !== undefined) {
|
|
201
|
+
throw new Error('Refreshing an inactive session is not supported with a single active key vault');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
166
204
|
if (activeSession.stamperType !== 'apiKey') {
|
|
167
205
|
throw new Error('Invalid session type');
|
|
168
206
|
}
|
|
@@ -179,14 +217,14 @@ export async function createZeroDevWalletCore(config) {
|
|
|
179
217
|
stampWith: 'apiKey',
|
|
180
218
|
});
|
|
181
219
|
const session = createReplacementSession(data.session, targetPublicKey, 'indexedDb', SessionType.READ_WRITE);
|
|
182
|
-
await
|
|
220
|
+
await commitReplacementSessionLocked(session, targetPublicKey);
|
|
183
221
|
return session;
|
|
184
222
|
}
|
|
185
223
|
catch (error) {
|
|
186
224
|
await client.apiKeyStamper.discardKeyRotation();
|
|
187
225
|
throw error;
|
|
188
226
|
}
|
|
189
|
-
});
|
|
227
|
+
}));
|
|
190
228
|
},
|
|
191
229
|
// [TODO] refactor to smaller utils/actions
|
|
192
230
|
async auth(params) {
|
|
@@ -240,20 +278,24 @@ export async function createZeroDevWalletCore(config) {
|
|
|
240
278
|
projectId,
|
|
241
279
|
encodedPublicKey: registrationPublicKey,
|
|
242
280
|
});
|
|
243
|
-
//
|
|
244
|
-
//
|
|
245
|
-
await
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
targetPublicKey
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
281
|
+
// From here the shared vault changes, so hold the cross-tab
|
|
282
|
+
// lock; the passkey prompt above stays outside it.
|
|
283
|
+
return await withCrossTabLock(async () => {
|
|
284
|
+
// Registration proves the temporary key exists remotely. Make
|
|
285
|
+
// it active so it can authorize the durable replacement key.
|
|
286
|
+
await client.apiKeyStamper.commitKeyRotation();
|
|
287
|
+
const targetPublicKey = await prepareFreshKeyRotation();
|
|
288
|
+
const loginData = await client.loginWithStamp({
|
|
289
|
+
projectId,
|
|
290
|
+
targetPublicKey,
|
|
291
|
+
// Sign against the parent org (see refreshSession note) — the
|
|
292
|
+
// backend derives the sub-org from the stamped credential.
|
|
293
|
+
organizationId: await resolveOrganizationId(),
|
|
294
|
+
});
|
|
295
|
+
const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
|
|
296
|
+
await commitReplacementSessionLocked(session, targetPublicKey);
|
|
297
|
+
return data;
|
|
253
298
|
});
|
|
254
|
-
const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
|
|
255
|
-
await commitReplacementSession(session, targetPublicKey);
|
|
256
|
-
return data;
|
|
257
299
|
}
|
|
258
300
|
catch (error) {
|
|
259
301
|
await client.apiKeyStamper.discardKeyRotation();
|
|
@@ -424,22 +466,35 @@ export async function createZeroDevWalletCore(config) {
|
|
|
424
466
|
}
|
|
425
467
|
}
|
|
426
468
|
preparedOAuthPublicKey = undefined;
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
469
|
+
return withCrossTabLock(async () => {
|
|
470
|
+
// Another tab may have signed in while the revoke was in flight. Keep
|
|
471
|
+
// a session for a different account, or one that appeared after a
|
|
472
|
+
// signed-out start; a same-account refresh is still ours to clear.
|
|
473
|
+
const current = await sessionStorageManager.getActiveSession();
|
|
474
|
+
if (current &&
|
|
475
|
+
(!session ||
|
|
476
|
+
current.organizationId !== session.organizationId ||
|
|
477
|
+
current.userId !== session.userId)) {
|
|
478
|
+
await client.apiKeyStamper.discardKeyRotation();
|
|
479
|
+
return true;
|
|
480
|
+
}
|
|
481
|
+
let cleanupError;
|
|
482
|
+
try {
|
|
483
|
+
await client.apiKeyStamper.clear();
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
cleanupError = error;
|
|
487
|
+
}
|
|
488
|
+
try {
|
|
489
|
+
await sessionStorageManager.clearAllSessions();
|
|
490
|
+
}
|
|
491
|
+
catch (error) {
|
|
492
|
+
cleanupError ??= error;
|
|
493
|
+
}
|
|
494
|
+
if (cleanupError)
|
|
495
|
+
throw cleanupError;
|
|
496
|
+
return true;
|
|
497
|
+
});
|
|
443
498
|
});
|
|
444
499
|
},
|
|
445
500
|
async toAccount() {
|