@zerodev/wallet-core 0.0.3 → 0.0.4

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 (124) hide show
  1. package/dist/_cjs/actions/auth/getAuthenticators.js.map +1 -1
  2. package/dist/_cjs/actions/auth/index.js +3 -1
  3. package/dist/_cjs/actions/auth/index.js.map +1 -1
  4. package/dist/_cjs/actions/auth/logout.js +23 -0
  5. package/dist/_cjs/actions/auth/logout.js.map +1 -0
  6. package/dist/_cjs/actions/index.js +2 -1
  7. package/dist/_cjs/actions/index.js.map +1 -1
  8. package/dist/_cjs/actions/wallet/signingUtils.js +23 -3
  9. package/dist/_cjs/actions/wallet/signingUtils.js.map +1 -1
  10. package/dist/_cjs/adapters/viem.js +26 -9
  11. package/dist/_cjs/adapters/viem.js.map +1 -1
  12. package/dist/_cjs/client/decorators/client.js +1 -0
  13. package/dist/_cjs/client/decorators/client.js.map +1 -1
  14. package/dist/_cjs/client/transports/rest.js.map +1 -1
  15. package/dist/_cjs/core/createZeroDevWalletCore.js +297 -168
  16. package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
  17. package/dist/_cjs/index.js +2 -1
  18. package/dist/_cjs/index.js.map +1 -1
  19. package/dist/_cjs/index.native.js +2 -1
  20. package/dist/_cjs/index.native.js.map +1 -1
  21. package/dist/_cjs/native/stampers/secureStore.js +94 -17
  22. package/dist/_cjs/native/stampers/secureStore.js.map +1 -1
  23. package/dist/_cjs/stampers/indexedDbStamper.js +34 -0
  24. package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
  25. package/dist/_cjs/storage/manager.js +144 -17
  26. package/dist/_cjs/storage/manager.js.map +1 -1
  27. package/dist/_cjs/utils/buildClientSignature.js +4 -1
  28. package/dist/_cjs/utils/buildClientSignature.js.map +1 -1
  29. package/dist/_cjs/utils/derToRawSignature.js +12 -0
  30. package/dist/_cjs/utils/derToRawSignature.js.map +1 -1
  31. package/dist/_cjs/utils/exportPrivateKey.js +1 -1
  32. package/dist/_cjs/utils/exportPrivateKey.js.map +1 -1
  33. package/dist/_cjs/utils/utils.js +27 -6
  34. package/dist/_cjs/utils/utils.js.map +1 -1
  35. package/dist/_esm/actions/auth/getAuthenticators.js +3 -2
  36. package/dist/_esm/actions/auth/getAuthenticators.js.map +1 -1
  37. package/dist/_esm/actions/auth/index.js +1 -0
  38. package/dist/_esm/actions/auth/index.js.map +1 -1
  39. package/dist/_esm/actions/auth/logout.js +21 -0
  40. package/dist/_esm/actions/auth/logout.js.map +1 -0
  41. package/dist/_esm/actions/index.js +1 -1
  42. package/dist/_esm/actions/index.js.map +1 -1
  43. package/dist/_esm/actions/wallet/signingUtils.js +24 -4
  44. package/dist/_esm/actions/wallet/signingUtils.js.map +1 -1
  45. package/dist/_esm/adapters/viem.js +27 -10
  46. package/dist/_esm/adapters/viem.js.map +1 -1
  47. package/dist/_esm/client/decorators/client.js +2 -1
  48. package/dist/_esm/client/decorators/client.js.map +1 -1
  49. package/dist/_esm/client/transports/rest.js.map +1 -1
  50. package/dist/_esm/core/createZeroDevWalletCore.js +320 -186
  51. package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
  52. package/dist/_esm/index.js +1 -1
  53. package/dist/_esm/index.js.map +1 -1
  54. package/dist/_esm/index.native.js +1 -1
  55. package/dist/_esm/index.native.js.map +1 -1
  56. package/dist/_esm/native/stampers/secureStore.js +111 -18
  57. package/dist/_esm/native/stampers/secureStore.js.map +1 -1
  58. package/dist/_esm/stampers/indexedDbStamper.js +36 -0
  59. package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
  60. package/dist/_esm/storage/manager.js +150 -22
  61. package/dist/_esm/storage/manager.js.map +1 -1
  62. package/dist/_esm/utils/buildClientSignature.js +4 -1
  63. package/dist/_esm/utils/buildClientSignature.js.map +1 -1
  64. package/dist/_esm/utils/derToRawSignature.js +12 -0
  65. package/dist/_esm/utils/derToRawSignature.js.map +1 -1
  66. package/dist/_esm/utils/exportPrivateKey.js +1 -1
  67. package/dist/_esm/utils/exportPrivateKey.js.map +1 -1
  68. package/dist/_esm/utils/utils.js +27 -6
  69. package/dist/_esm/utils/utils.js.map +1 -1
  70. package/dist/_types/actions/auth/getAuthenticators.d.ts +19 -2
  71. package/dist/_types/actions/auth/getAuthenticators.d.ts.map +1 -1
  72. package/dist/_types/actions/auth/index.d.ts +2 -1
  73. package/dist/_types/actions/auth/index.d.ts.map +1 -1
  74. package/dist/_types/actions/auth/logout.d.ts +11 -0
  75. package/dist/_types/actions/auth/logout.d.ts.map +1 -0
  76. package/dist/_types/actions/index.d.ts +1 -1
  77. package/dist/_types/actions/index.d.ts.map +1 -1
  78. package/dist/_types/actions/wallet/signingUtils.d.ts.map +1 -1
  79. package/dist/_types/adapters/viem.d.ts.map +1 -1
  80. package/dist/_types/client/decorators/client.d.ts +3 -1
  81. package/dist/_types/client/decorators/client.d.ts.map +1 -1
  82. package/dist/_types/client/transports/rest.d.ts +3 -3
  83. package/dist/_types/client/transports/rest.d.ts.map +1 -1
  84. package/dist/_types/core/createZeroDevWalletCore.d.ts +8 -1
  85. package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
  86. package/dist/_types/index.d.ts +2 -2
  87. package/dist/_types/index.d.ts.map +1 -1
  88. package/dist/_types/index.native.d.ts +2 -2
  89. package/dist/_types/index.native.d.ts.map +1 -1
  90. package/dist/_types/native/stampers/secureStore.d.ts.map +1 -1
  91. package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
  92. package/dist/_types/stampers/types.d.ts +6 -0
  93. package/dist/_types/stampers/types.d.ts.map +1 -1
  94. package/dist/_types/storage/manager.d.ts +3 -0
  95. package/dist/_types/storage/manager.d.ts.map +1 -1
  96. package/dist/_types/types/session.d.ts +2 -0
  97. package/dist/_types/types/session.d.ts.map +1 -1
  98. package/dist/_types/utils/buildClientSignature.d.ts +1 -1
  99. package/dist/_types/utils/buildClientSignature.d.ts.map +1 -1
  100. package/dist/_types/utils/derToRawSignature.d.ts.map +1 -1
  101. package/dist/_types/utils/utils.d.ts +1 -1
  102. package/dist/_types/utils/utils.d.ts.map +1 -1
  103. package/dist/tsconfig.build.tsbuildinfo +1 -1
  104. package/package.json +1 -1
  105. package/src/actions/auth/getAuthenticators.ts +20 -2
  106. package/src/actions/auth/index.ts +6 -0
  107. package/src/actions/auth/logout.ts +35 -0
  108. package/src/actions/index.ts +4 -0
  109. package/src/actions/wallet/signingUtils.ts +43 -4
  110. package/src/adapters/viem.ts +40 -12
  111. package/src/client/decorators/client.ts +7 -0
  112. package/src/client/transports/rest.ts +4 -4
  113. package/src/core/createZeroDevWalletCore.ts +393 -205
  114. package/src/index.native.ts +4 -0
  115. package/src/index.ts +4 -0
  116. package/src/native/stampers/secureStore.ts +119 -24
  117. package/src/stampers/indexedDbStamper.ts +47 -0
  118. package/src/stampers/types.ts +6 -0
  119. package/src/storage/manager.ts +205 -25
  120. package/src/types/session.ts +2 -0
  121. package/src/utils/buildClientSignature.ts +4 -2
  122. package/src/utils/derToRawSignature.ts +16 -2
  123. package/src/utils/exportPrivateKey.ts +1 -1
  124. package/src/utils/utils.ts +30 -9
@@ -1,6 +1,7 @@
1
1
  import { toViemAccount } from '../adapters/viem.js';
2
2
  import { createAuthProxyClient, createClient, zeroDevWalletTransport, } from '../client/index.js';
3
- import { DEFAULT_ORGANIZATION_ID, DEFAULT_SESSION_EXPIRATION_IN_SECONDS, KMS_SERVER_URL, } from '../constants.js';
3
+ import { DEFAULT_ORGANIZATION_ID, KMS_SERVER_URL } from '../constants.js';
4
+ import { RestRequestError } from '../errors/request.js';
4
5
  import { createNoopPasskeyStamper } from '../stampers/noopPasskeyStamper.js';
5
6
  import { createStorageManager, } from '../storage/manager.js';
6
7
  import { SessionType } from '../types/session.js';
@@ -8,6 +9,9 @@ import { buildClientSignature } from '../utils/buildClientSignature.js';
8
9
  import { encryptOtpAttempt } from '../utils/encryptOtpAttempt.js';
9
10
  import { createOrganizationIdResolver } from '../utils/resolveOrganizationId.js';
10
11
  import { humanReadableDateTime, parseSession } from '../utils/utils.js';
12
+ // The browser/native key vault is a single physical slot shared by SDK
13
+ // instances, so key transitions must be serialized across projects.
14
+ let keyTransitionTail = Promise.resolve();
11
15
  export async function createZeroDevWalletCore(config) {
12
16
  const { projectId, sessionStorage, rpId, apiKeyStamper, organizationId } = config;
13
17
  const passkeyStamper = config.passkeyStamper ?? createNoopPasskeyStamper();
@@ -30,12 +34,94 @@ export async function createZeroDevWalletCore(config) {
30
34
  fetchParentOrgId: async () => (await client.getParentOrgId()).parentOrgId,
31
35
  fallback: DEFAULT_ORGANIZATION_ID,
32
36
  });
37
+ let preparedOAuthPublicKey;
38
+ const prepareFreshKeyRotation = async () => {
39
+ if (preparedOAuthPublicKey) {
40
+ await client.apiKeyStamper.discardKeyRotation();
41
+ preparedOAuthPublicKey = undefined;
42
+ }
43
+ return client.apiKeyStamper.prepareKeyRotation();
44
+ };
45
+ const withKeyTransition = async (transition) => {
46
+ const result = keyTransitionTail.then(transition);
47
+ keyTransitionTail = result.then(() => undefined, () => undefined);
48
+ return result;
49
+ };
50
+ const normalizeKey = (key) => key.replace(/^0x/, '').toLowerCase();
51
+ const createReplacementSession = (token, expectedPublicKey, idPrefix, sessionType) => {
52
+ const parsed = parseSession(token);
53
+ if (!parsed.publicKey ||
54
+ normalizeKey(parsed.publicKey) !== normalizeKey(expectedPublicKey)) {
55
+ throw new Error('Session public key does not match the locally prepared signing key');
56
+ }
57
+ const now = Date.now();
58
+ return {
59
+ id: `session_${idPrefix}_${now}`,
60
+ userId: parsed.userId,
61
+ organizationId: parsed.organizationId,
62
+ stamperType: 'apiKey',
63
+ sessionType: sessionType ?? parsed.sessionType ?? SessionType.READ_WRITE,
64
+ token,
65
+ publicKey: expectedPublicKey,
66
+ expiry: parsed.expiry,
67
+ createdAt: now,
68
+ };
69
+ };
70
+ const commitReplacementSession = async (session, targetPublicKey) => {
71
+ await sessionStorageManager.stageSessionTransition(session, targetPublicKey);
72
+ try {
73
+ await client.apiKeyStamper.commitKeyRotation();
74
+ }
75
+ catch (error) {
76
+ await client.apiKeyStamper.discardKeyRotation();
77
+ const activePublicKey = await client.apiKeyStamper.getPublicKey();
78
+ const recovered = await sessionStorageManager.recoverSessionTransition(activePublicKey);
79
+ if (!activePublicKey ||
80
+ normalizeKey(activePublicKey) !== normalizeKey(targetPublicKey) ||
81
+ !recovered) {
82
+ throw error;
83
+ }
84
+ return;
85
+ }
86
+ try {
87
+ const committed = await sessionStorageManager.commitSessionTransition();
88
+ if (!committed) {
89
+ throw new Error('Session transition journal disappeared before commit');
90
+ }
91
+ }
92
+ catch (error) {
93
+ const recovered = await sessionStorageManager.recoverSessionTransition(await client.apiKeyStamper.getPublicKey());
94
+ if (!recovered)
95
+ throw error;
96
+ }
97
+ };
98
+ await withKeyTransition(async () => {
99
+ const activePublicKey = await client.apiKeyStamper.getPublicKey();
100
+ await sessionStorageManager.recoverSessionTransition(activePublicKey);
101
+ const restoredSession = await sessionStorageManager.getActiveSession();
102
+ if (restoredSession) {
103
+ try {
104
+ const restoredPublicKey = parseSession(restoredSession.token).publicKey;
105
+ if (!activePublicKey ||
106
+ !restoredPublicKey ||
107
+ normalizeKey(activePublicKey) !== normalizeKey(restoredPublicKey)) {
108
+ await sessionStorageManager.clearAllSessions();
109
+ }
110
+ }
111
+ catch {
112
+ await sessionStorageManager.clearAllSessions();
113
+ }
114
+ }
115
+ });
33
116
  return {
34
117
  client,
35
118
  async getPublicKey() {
36
- await client.apiKeyStamper.resetKeyPair();
37
- const compressedPublicKey = await client.apiKeyStamper.getPublicKey();
38
- return compressedPublicKey;
119
+ return withKeyTransition(async () => {
120
+ if (preparedOAuthPublicKey)
121
+ return preparedOAuthPublicKey;
122
+ preparedOAuthPublicKey = await client.apiKeyStamper.prepareKeyRotation();
123
+ return preparedOAuthPublicKey;
124
+ });
39
125
  },
40
126
  async getSession() {
41
127
  return sessionStorageManager.getActiveSession();
@@ -49,157 +135,156 @@ export async function createZeroDevWalletCore(config) {
49
135
  return sessionMap;
50
136
  },
51
137
  async switchSession(sessionId) {
52
- await sessionStorageManager.setActiveSession(sessionId);
53
- const session = await sessionStorageManager.getActiveSession();
54
- return session;
138
+ const activeSessionKey = await sessionStorageManager.getActiveSessionKey();
139
+ if (sessionId !== activeSessionKey) {
140
+ throw new Error('Session switching is not supported with a single active key vault');
141
+ }
142
+ return sessionStorageManager.getActiveSession();
55
143
  },
56
144
  async clearSession(sessionId) {
145
+ if ((await sessionStorageManager.getActiveSessionKey()) === sessionId) {
146
+ throw new Error('Refusing to clear the active session locally; use logout() to revoke its remote key first.');
147
+ }
57
148
  await sessionStorageManager.clearSession(sessionId);
58
149
  },
59
150
  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
+ }
60
154
  await sessionStorageManager.clearAllSessions();
61
155
  },
62
156
  async refreshSession(sessionId) {
63
- const activeSession = sessionId
64
- ? await sessionStorageManager.getSession(sessionId)
65
- : await sessionStorageManager.getActiveSession();
66
- if (!activeSession) {
67
- throw new Error('No active session');
68
- }
69
- if (activeSession.stamperType === 'apiKey') {
70
- const compressedPublicKeyHex = await client.apiKeyStamper.prepareKeyRotation();
71
- const data = await client.loginWithStamp({
72
- targetPublicKey: compressedPublicKeyHex,
73
- projectId,
74
- // Stamp-login is signed against the Turnkey parent org; the backend
75
- // resolves the sub-org from the stamped credential. Signing the
76
- // sub-org here makes the relayed payload's org mismatch the
77
- // signature → Turnkey SIGNATURE_INVALID.
78
- organizationId: await resolveOrganizationId(),
79
- stampWith: 'apiKey',
80
- });
81
- await client.apiKeyStamper.commitKeyRotation();
82
- const parsedSession = parseSession(data.session);
83
- const session = {
84
- id: `session_indexedDb_${Date.now()}`,
85
- userId: parsedSession.userId,
86
- organizationId: parsedSession.organizationId,
87
- stamperType: 'apiKey',
88
- sessionType: SessionType.READ_WRITE,
89
- token: data.session,
90
- expiry: parsedSession.expiry,
91
- createdAt: Date.now(),
92
- };
93
- await sessionStorageManager.clearSession(activeSession.id);
94
- await sessionStorageManager.storeSession(session, session.id);
95
- return session;
96
- }
97
- throw new Error('Invalid session type');
157
+ return withKeyTransition(async () => {
158
+ 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
+ const activeSession = await sessionStorageManager.getActiveSession();
163
+ if (!activeSession) {
164
+ throw new Error('No active session');
165
+ }
166
+ if (activeSession.stamperType !== 'apiKey') {
167
+ throw new Error('Invalid session type');
168
+ }
169
+ const targetPublicKey = await prepareFreshKeyRotation();
170
+ try {
171
+ const data = await client.loginWithStamp({
172
+ targetPublicKey,
173
+ projectId,
174
+ // Stamp-login is signed against the Turnkey parent org; the backend
175
+ // resolves the sub-org from the stamped credential. Signing the
176
+ // sub-org here makes the relayed payload's org mismatch the
177
+ // signature → Turnkey SIGNATURE_INVALID.
178
+ organizationId: await resolveOrganizationId(),
179
+ stampWith: 'apiKey',
180
+ });
181
+ const session = createReplacementSession(data.session, targetPublicKey, 'indexedDb', SessionType.READ_WRITE);
182
+ await commitReplacementSession(session, targetPublicKey);
183
+ return session;
184
+ }
185
+ catch (error) {
186
+ await client.apiKeyStamper.discardKeyRotation();
187
+ throw error;
188
+ }
189
+ });
98
190
  },
99
191
  // [TODO] refactor to smaller utils/actions
100
192
  async auth(params) {
101
193
  switch (params.type) {
102
194
  case 'oauth': {
103
- const popSignature = await client.apiKeyStamper.sign(params.sessionId);
104
- const data = await client.authenticateWithOAuth({
105
- provider: params.provider,
106
- projectId,
107
- sessionId: params.sessionId,
108
- popSignature,
195
+ return withKeyTransition(async () => {
196
+ const targetPublicKey = preparedOAuthPublicKey ??
197
+ (await client.apiKeyStamper.prepareKeyRotation());
198
+ preparedOAuthPublicKey = undefined;
199
+ try {
200
+ const popSignature = await client.apiKeyStamper.signPending(params.sessionId);
201
+ const data = await client.authenticateWithOAuth({
202
+ provider: params.provider,
203
+ projectId,
204
+ sessionId: params.sessionId,
205
+ popSignature,
206
+ });
207
+ if (!data.session) {
208
+ await client.apiKeyStamper.discardKeyRotation();
209
+ return data;
210
+ }
211
+ const session = createReplacementSession(data.session, targetPublicKey, 'oauth');
212
+ await commitReplacementSession(session, targetPublicKey);
213
+ return data;
214
+ }
215
+ catch (error) {
216
+ await client.apiKeyStamper.discardKeyRotation();
217
+ throw error;
218
+ }
109
219
  });
110
- if (data.session) {
111
- // Parse the JWT to get session data
112
- const parsedSession = parseSession(data.session);
113
- const session = {
114
- id: `session_oauth_${Date.now()}`,
115
- userId: parsedSession.userId,
116
- organizationId: parsedSession.organizationId,
117
- stamperType: 'apiKey',
118
- sessionType: parsedSession.sessionType || SessionType.READ_WRITE,
119
- token: data.session,
120
- expiry: parsedSession.expiry,
121
- createdAt: Date.now(),
122
- };
123
- await sessionStorageManager.storeSession(session, session.id);
124
- }
125
- return data;
126
220
  }
127
221
  case 'passkey': {
128
222
  const { type } = params;
129
223
  if (type === 'passkey' &&
130
224
  'mode' in params &&
131
225
  params.mode === 'register') {
132
- await client.apiKeyStamper.resetKeyPair();
133
- const tempPublicKey = await client.apiKeyStamper.getPublicKey();
134
- if (!tempPublicKey) {
135
- throw new Error('Failed to get public key');
136
- }
137
- const name = `ZeroDevWallet-${humanReadableDateTime()}`;
138
- const { attestation, encodedChallenge } = await passkeyStamper.register({
139
- rp: { id: rpId, name: '' },
140
- userName: name,
141
- });
142
- const data = await client.registerWithPasskey({
143
- attestation,
144
- challenge: encodedChallenge,
145
- projectId,
146
- encodedPublicKey: tempPublicKey,
226
+ return withKeyTransition(async () => {
227
+ if (await sessionStorageManager.getActiveSession()) {
228
+ throw new Error('Passkey registration requires an unauthenticated wallet; logout before registering a new wallet.');
229
+ }
230
+ const registrationPublicKey = await prepareFreshKeyRotation();
231
+ try {
232
+ const name = `ZeroDevWallet-${humanReadableDateTime()}`;
233
+ const { attestation, encodedChallenge } = await passkeyStamper.register({
234
+ rp: { id: rpId, name: 'ZeroDev Wallet' },
235
+ userName: name,
236
+ });
237
+ const data = await client.registerWithPasskey({
238
+ attestation,
239
+ challenge: encodedChallenge,
240
+ projectId,
241
+ encodedPublicKey: registrationPublicKey,
242
+ });
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(),
253
+ });
254
+ const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
255
+ await commitReplacementSession(session, targetPublicKey);
256
+ return data;
257
+ }
258
+ catch (error) {
259
+ await client.apiKeyStamper.discardKeyRotation();
260
+ throw error;
261
+ }
147
262
  });
148
- const compressedPublicKeyHex = await client.apiKeyStamper.prepareKeyRotation();
149
- const loginData = await client.loginWithStamp({
150
- projectId,
151
- targetPublicKey: compressedPublicKeyHex,
152
- // Sign against the parent org (see refreshSession note) — the
153
- // backend derives the sub-org from the stamped credential.
154
- organizationId: await resolveOrganizationId(),
155
- });
156
- await client.apiKeyStamper.commitKeyRotation();
157
- const parsedSession = parseSession(loginData.session);
158
- const session = {
159
- id: `session_indexedDb_${Date.now()}`,
160
- stamperType: 'apiKey',
161
- createdAt: Date.now(),
162
- sessionType: SessionType.READ_WRITE,
163
- userId: parsedSession.userId,
164
- organizationId: parsedSession.organizationId,
165
- expiry: Date.now() +
166
- Number(DEFAULT_SESSION_EXPIRATION_IN_SECONDS) * 1000,
167
- token: loginData.session,
168
- };
169
- await sessionStorageManager.storeSession(session, session.id);
170
- return data;
171
263
  }
172
264
  if (type === 'passkey' &&
173
265
  'mode' in params &&
174
266
  params.mode === 'login') {
175
- await client.apiKeyStamper.resetKeyPair();
176
- const generatedPublicKey = await client.apiKeyStamper.getPublicKey();
177
- if (!generatedPublicKey) {
178
- throw new Error('Failed to get public key');
179
- }
180
- const loginData = await client.loginWithStamp({
181
- targetPublicKey: generatedPublicKey,
182
- projectId,
183
- // Sign against the parent org, not the user's sub-org (see the
184
- // refreshSession note). The backend derives the sub-org from the
185
- // stamped passkey credential.
186
- organizationId: await resolveOrganizationId(),
187
- stampWith: 'passkey',
267
+ return withKeyTransition(async () => {
268
+ const targetPublicKey = await prepareFreshKeyRotation();
269
+ try {
270
+ const loginData = await client.loginWithStamp({
271
+ targetPublicKey,
272
+ projectId,
273
+ // Sign against the parent org, not the user's sub-org (see the
274
+ // refreshSession note). The backend derives the sub-org from the
275
+ // stamped passkey credential.
276
+ organizationId: await resolveOrganizationId(),
277
+ stampWith: 'passkey',
278
+ });
279
+ const session = createReplacementSession(loginData.session, targetPublicKey, 'indexedDb');
280
+ await commitReplacementSession(session, targetPublicKey);
281
+ return loginData;
282
+ }
283
+ catch (error) {
284
+ await client.apiKeyStamper.discardKeyRotation();
285
+ throw error;
286
+ }
188
287
  });
189
- const parsedSession = parseSession(loginData.session);
190
- const session = {
191
- id: `session_indexedDb_${Date.now()}`,
192
- stamperType: 'apiKey',
193
- createdAt: Date.now(),
194
- sessionType: SessionType.READ_WRITE,
195
- userId: parsedSession.userId,
196
- organizationId: parsedSession.organizationId,
197
- expiry: Date.now() +
198
- Number(DEFAULT_SESSION_EXPIRATION_IN_SECONDS) * 1000,
199
- token: loginData.session,
200
- };
201
- await sessionStorageManager.storeSession(session, session.id);
202
- return loginData;
203
288
  }
204
289
  throw new Error('Passkey authentication requires passkey parameter');
205
290
  }
@@ -242,60 +327,53 @@ export async function createZeroDevWalletCore(config) {
242
327
  return data;
243
328
  }
244
329
  if (otpParams.mode === 'verifyOtp') {
245
- const { otpId, otpCode, otpEncryptionTargetBundle } = otpParams;
246
- // Step 1: Generate new key pair
247
- await client.apiKeyStamper.resetKeyPair();
248
- const targetPublicKey = await client.apiKeyStamper.getPublicKey();
249
- if (!targetPublicKey) {
250
- throw new Error('Failed to get public key');
251
- }
252
- // Step 2a: HPKE-seal the OTP attempt to the enclave's per-session
253
- // target key. The auth proxy never sees the plaintext OTP code.
254
- const encryptedOtpBundle = await encryptOtpAttempt({
255
- otpCode,
256
- publicKey: targetPublicKey,
257
- encryptionTargetBundle: otpEncryptionTargetBundle,
258
- });
259
- // Step 2b: Verify OTP via Auth Proxy
260
- if (!cachedAuthProxyConfigId) {
261
- const { authProxyConfigId } = await client.getAuthProxyConfigId();
262
- cachedAuthProxyConfigId = authProxyConfigId;
263
- }
264
- const authProxyClient = createAuthProxyClient({
265
- authProxyConfigId: cachedAuthProxyConfigId,
330
+ return withKeyTransition(async () => {
331
+ const { otpId, otpCode, otpEncryptionTargetBundle } = otpParams;
332
+ const targetPublicKey = await prepareFreshKeyRotation();
333
+ try {
334
+ // HPKE-seal the OTP attempt to the enclave's per-session target
335
+ // key. The auth proxy never sees the plaintext OTP code.
336
+ const encryptedOtpBundle = await encryptOtpAttempt({
337
+ otpCode,
338
+ publicKey: targetPublicKey,
339
+ encryptionTargetBundle: otpEncryptionTargetBundle,
340
+ });
341
+ if (!cachedAuthProxyConfigId) {
342
+ const { authProxyConfigId } = await client.getAuthProxyConfigId();
343
+ cachedAuthProxyConfigId = authProxyConfigId;
344
+ }
345
+ const authProxyClient = createAuthProxyClient({
346
+ authProxyConfigId: cachedAuthProxyConfigId,
347
+ });
348
+ const { verificationToken } = await authProxyClient.verifyOtp({
349
+ otpId,
350
+ encryptedOtpBundle,
351
+ });
352
+ const clientSignature = await buildClientSignature({
353
+ verificationToken,
354
+ publicKey: targetPublicKey,
355
+ stamper: {
356
+ stamp: (payload) => client.apiKeyStamper.stampPending(payload),
357
+ },
358
+ });
359
+ const data = await client.loginWithOTP({
360
+ verificationToken,
361
+ clientSignature,
362
+ projectId,
363
+ });
364
+ if (!data.session) {
365
+ await client.apiKeyStamper.discardKeyRotation();
366
+ return data;
367
+ }
368
+ const session = createReplacementSession(data.session, targetPublicKey, 'otp');
369
+ await commitReplacementSession(session, targetPublicKey);
370
+ return data;
371
+ }
372
+ catch (error) {
373
+ await client.apiKeyStamper.discardKeyRotation();
374
+ throw error;
375
+ }
266
376
  });
267
- const { verificationToken } = await authProxyClient.verifyOtp({
268
- otpId,
269
- encryptedOtpBundle,
270
- });
271
- // Step 3: Build client signature
272
- const clientSignature = await buildClientSignature({
273
- verificationToken,
274
- publicKey: targetPublicKey,
275
- stamper: client.apiKeyStamper,
276
- });
277
- // Step 4: Login via backend (not Auth Proxy!)
278
- const data = await client.loginWithOTP({
279
- verificationToken,
280
- clientSignature,
281
- projectId,
282
- });
283
- if (data.session) {
284
- // Parse the JWT to get session data
285
- const parsedSession = parseSession(data.session);
286
- const session = {
287
- id: `session_otp_${Date.now()}`,
288
- userId: parsedSession.userId,
289
- organizationId: parsedSession.organizationId,
290
- stamperType: 'apiKey',
291
- sessionType: parsedSession.sessionType || SessionType.READ_WRITE,
292
- token: data.session,
293
- expiry: parsedSession.expiry,
294
- createdAt: Date.now(),
295
- };
296
- await sessionStorageManager.storeSession(session, session.id);
297
- }
298
- return data;
299
377
  }
300
378
  throw new Error('OTP authentication requires mode parameter');
301
379
  }
@@ -303,10 +381,66 @@ export async function createZeroDevWalletCore(config) {
303
381
  throw new Error(`Unknown auth type: ${params.type}`);
304
382
  }
305
383
  },
306
- async logout() {
307
- await sessionStorageManager.clearAllSessions();
308
- await client.apiKeyStamper.resetKeyPair();
309
- return true;
384
+ async logout(options) {
385
+ return withKeyTransition(async () => {
386
+ const session = await sessionStorageManager.getActiveSession();
387
+ if (session) {
388
+ const publicKey = await client.apiKeyStamper.getPublicKey();
389
+ if (publicKey) {
390
+ try {
391
+ const authenticators = await client.getAuthenticators({
392
+ subOrganizationId: session.organizationId,
393
+ projectId,
394
+ token: session.token,
395
+ });
396
+ const sessionKey = authenticators.sessionKeys?.find((key) => {
397
+ const candidate = key.ApiKey ?? key.apiKey;
398
+ return (candidate !== undefined &&
399
+ normalizeKey(candidate) === normalizeKey(publicKey));
400
+ });
401
+ const apiKeyId = sessionKey?.TurnkeyId ?? sessionKey?.turnkeyId;
402
+ if (!apiKeyId) {
403
+ throw new Error('Current session key was not found in the authenticated key list; refusing to erase local credentials without confirmed remote revocation.');
404
+ }
405
+ await client.logout({
406
+ projectId,
407
+ organizationId: session.organizationId,
408
+ userId: session.userId,
409
+ apiKeyId,
410
+ });
411
+ }
412
+ catch (error) {
413
+ // Only a confirmed rejection (401) or an explicit `force` clears
414
+ // local credentials below. Any other failure (403, 5xx, network)
415
+ // is ambiguous — erasing the only key on an inconclusive signal
416
+ // could lock the user out unrecoverably — so preserve it and
417
+ // return without throwing, so callers (e.g. a logout button)
418
+ // don't crash. Pass `logout({ force: true })` to clear locally
419
+ // regardless when the caller knows the remote is gone.
420
+ const credentialIsRejected = error instanceof RestRequestError && error.status === 401;
421
+ if (!options?.force && !credentialIsRejected)
422
+ return false;
423
+ }
424
+ }
425
+ }
426
+ 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;
443
+ });
310
444
  },
311
445
  async toAccount() {
312
446
  const session = await sessionStorageManager.getActiveSession();
@@ -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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"}