@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.
Files changed (30) hide show
  1. package/dist/_cjs/actions/wallet/getUserWallet.js +1 -1
  2. package/dist/_cjs/actions/wallet/getUserWallet.js.map +1 -1
  3. package/dist/_cjs/core/createZeroDevWalletCore.js +75 -38
  4. package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
  5. package/dist/_cjs/stampers/indexedDbStamper.js +5 -1
  6. package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
  7. package/dist/_cjs/utils/crossTabLock.js +10 -0
  8. package/dist/_cjs/utils/crossTabLock.js.map +1 -0
  9. package/dist/_esm/actions/wallet/getUserWallet.js +3 -1
  10. package/dist/_esm/actions/wallet/getUserWallet.js.map +1 -1
  11. package/dist/_esm/core/createZeroDevWalletCore.js +98 -43
  12. package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
  13. package/dist/_esm/stampers/indexedDbStamper.js +8 -1
  14. package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
  15. package/dist/_esm/utils/crossTabLock.js +17 -0
  16. package/dist/_esm/utils/crossTabLock.js.map +1 -0
  17. package/dist/_types/actions/wallet/getUserWallet.d.ts.map +1 -1
  18. package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
  19. package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
  20. package/dist/_types/stampers/types.d.ts +5 -0
  21. package/dist/_types/stampers/types.d.ts.map +1 -1
  22. package/dist/_types/utils/crossTabLock.d.ts +3 -0
  23. package/dist/_types/utils/crossTabLock.d.ts.map +1 -0
  24. package/dist/tsconfig.build.tsbuildinfo +1 -1
  25. package/package.json +1 -1
  26. package/src/actions/wallet/getUserWallet.ts +3 -1
  27. package/src/core/createZeroDevWalletCore.ts +172 -94
  28. package/src/stampers/indexedDbStamper.ts +8 -1
  29. package/src/stampers/types.ts +5 -0
  30. 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}/user-wallet`,
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,sCAiBC;AAjBM,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAInC,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,GAAG,SAAS,cAAc;QAChC,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"}
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 commitReplacementSession = async (session, targetPublicKey) => {
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
- await withKeyTransition(async () => {
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
- if (await sessionStorageManager.getActiveSession()) {
149
- throw new Error('Refusing to clear the active session locally; use logout() to revoke its remote key first.');
150
- }
151
- await sessionStorageManager.clearAllSessions();
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
- return withKeyTransition(async () => {
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 commitReplacementSession(session, targetPublicKey);
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 client.apiKeyStamper.commitKeyRotation();
236
- const targetPublicKey = await prepareFreshKeyRotation();
237
- const loginData = await client.loginWithStamp({
238
- projectId,
239
- targetPublicKey,
240
- organizationId: await resolveOrganizationId(),
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
- let cleanupError;
400
- try {
401
- await client.apiKeyStamper.clear();
402
- }
403
- catch (error) {
404
- cleanupError = error;
405
- }
406
- try {
407
- await sessionStorageManager.clearAllSessions();
408
- }
409
- catch (error) {
410
- cleanupError ??= error;
411
- }
412
- if (cleanupError)
413
- throw cleanupError;
414
- return true;
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":"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"}
1
+ {"version":3,"file":"indexedDbStamper.js","sourceRoot":"","sources":["../../../src/stampers/indexedDbStamper.ts"],"names":[],"mappings":";;AA6BA,wDAqEC;AAlGD,mDAA4C;AAC5C,oEAAyF;AACzF,8DAA2D;AAC3D,gDAA0E;AAG1E,KAAK,UAAU,eAAe,CAC5B,OAAsB,EACtB,OAAe;IAEf,MAAM,YAAY,GAAG,IAAI,UAAU,CACjC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CACtB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAClC,OAAO,CAAC,UAAU,EAClB,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAClC,CACF,CAAA;IACD,OAAO,cAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,SAAiB;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,SAAS;QACT,MAAM,EAAE,8BAA8B;QACtC,SAAS;KACV,CAAC,CAAA;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC7E,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAC1C,MAAM,KAAK,GAAG,IAAI,qCAAuB,EAAE,CAAA;IAG3C,MAAM,IAAA,kCAAgB,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAE1C,IAAI,cAAc,GAAyB,IAAI,CAAA;IAI/C,MAAM,cAAc,GAAG,GAAkB,EAAE;QACzC,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC/D,OAAO,cAAc,CAAA;IACvB,CAAC,CAAA;IAED,OAAO;QACL,KAAK,CAAC,YAAY;YAChB,OAAO,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAe;YACzB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAe;YACxB,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,cAAc,GAAG,IAAI,CAAA;YACrB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,cAAc,GAAG,IAAI,CAAA;YACrB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;QAC5B,CAAC;QACD,KAAK,CAAC,kBAAkB;YACtB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAA;YACD,cAAc,GAAG,OAAO,CAAA;YACxB,OAAO,MAAM,IAAA,iDAAsC,EAAC,OAAO,CAAC,CAAA;QAC9D,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,OAAe;YAChC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;YAChC,MAAM,SAAS,GAAG,MAAM,IAAA,iDAAsC,EAAC,OAAO,CAAC,CAAA;YACvE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACzD,OAAO;gBACL,eAAe,EAAE,SAAS;gBAC1B,gBAAgB,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC;aACpD,CAAA;QACH,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,OAAO,eAAe,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAA;QACnD,CAAC;QACD,KAAK,CAAC,iBAAiB;YACrB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACtD,CAAC;YACD,MAAM,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;YACxC,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QACD,KAAK,CAAC,kBAAkB;YACtB,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,KAAK,CAAC,MAAM;YACV,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -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}/user-wallet`,
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,cAAc;QAChC,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"}
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
- const commitReplacementSession = async (session, targetPublicKey) => {
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
- await withKeyTransition(async () => {
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
- if (await sessionStorageManager.getActiveSession()) {
152
- throw new Error('Refusing to clear the active session locally; use logout() to revoke its remote key first.');
153
- }
154
- await sessionStorageManager.clearAllSessions();
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
- return withKeyTransition(async () => {
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 commitReplacementSession(session, targetPublicKey);
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
- // Registration proves the temporary key exists remotely. Make
244
- // it active so it can authorize the durable replacement key.
245
- await client.apiKeyStamper.commitKeyRotation();
246
- const targetPublicKey = await prepareFreshKeyRotation();
247
- const loginData = await client.loginWithStamp({
248
- projectId,
249
- targetPublicKey,
250
- // Sign against the parent org (see refreshSession note) — the
251
- // backend derives the sub-org from the stamped credential.
252
- organizationId: await resolveOrganizationId(),
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
- let cleanupError;
428
- try {
429
- await client.apiKeyStamper.clear();
430
- }
431
- catch (error) {
432
- cleanupError = error;
433
- }
434
- try {
435
- await sessionStorageManager.clearAllSessions();
436
- }
437
- catch (error) {
438
- cleanupError ??= error;
439
- }
440
- if (cleanupError)
441
- throw cleanupError;
442
- return true;
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() {