passkey-kit 0.16.4 → 0.17.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.
Files changed (71) hide show
  1. package/README.md +72 -33
  2. package/dist/contract-errors.d.ts +1 -1
  3. package/dist/contract-errors.d.ts.map +1 -1
  4. package/dist/contract-errors.js +6 -2
  5. package/dist/contract-errors.js.map +1 -1
  6. package/dist/errors.d.ts +7 -0
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +11 -0
  9. package/dist/errors.js.map +1 -1
  10. package/dist/index.d.ts +3 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/indexer/index.d.ts +1 -1
  15. package/dist/indexer/index.d.ts.map +1 -1
  16. package/dist/indexer/index.js.map +1 -1
  17. package/dist/indexer/mercury.d.ts +8 -12
  18. package/dist/indexer/mercury.d.ts.map +1 -1
  19. package/dist/indexer/mercury.js +110 -37
  20. package/dist/indexer/mercury.js.map +1 -1
  21. package/dist/indexer/types.d.ts +41 -5
  22. package/dist/indexer/types.d.ts.map +1 -1
  23. package/dist/kit/birth-verification.d.ts +45 -0
  24. package/dist/kit/birth-verification.d.ts.map +1 -0
  25. package/dist/kit/birth-verification.js +127 -0
  26. package/dist/kit/birth-verification.js.map +1 -0
  27. package/dist/kit/deploy-ops.d.ts +2 -2
  28. package/dist/kit/deploy-ops.d.ts.map +1 -1
  29. package/dist/kit/deploy-ops.js +2 -2
  30. package/dist/kit/deploy-ops.js.map +1 -1
  31. package/dist/kit/wallet-ops.d.ts +14 -2
  32. package/dist/kit/wallet-ops.d.ts.map +1 -1
  33. package/dist/kit/wallet-ops.js +50 -3
  34. package/dist/kit/wallet-ops.js.map +1 -1
  35. package/dist/kit/webauthn-ops.d.ts +3 -1
  36. package/dist/kit/webauthn-ops.d.ts.map +1 -1
  37. package/dist/kit/webauthn-ops.js +8 -2
  38. package/dist/kit/webauthn-ops.js.map +1 -1
  39. package/dist/kit/webauthn-verify.d.ts +166 -0
  40. package/dist/kit/webauthn-verify.d.ts.map +1 -0
  41. package/dist/kit/webauthn-verify.js +328 -0
  42. package/dist/kit/webauthn-verify.js.map +1 -0
  43. package/dist/kit.d.ts +63 -41
  44. package/dist/kit.d.ts.map +1 -1
  45. package/dist/kit.js +339 -115
  46. package/dist/kit.js.map +1 -1
  47. package/dist/managers/credential-manager.d.ts +2 -2
  48. package/dist/managers/credential-manager.d.ts.map +1 -1
  49. package/dist/managers/credential-manager.js +3 -3
  50. package/dist/managers/credential-manager.js.map +1 -1
  51. package/dist/managers/signer-manager.d.ts +10 -4
  52. package/dist/managers/signer-manager.d.ts.map +1 -1
  53. package/dist/managers/signer-manager.js +11 -5
  54. package/dist/managers/signer-manager.js.map +1 -1
  55. package/dist/managers/submission-manager.d.ts +4 -1
  56. package/dist/managers/submission-manager.d.ts.map +1 -1
  57. package/dist/managers/submission-manager.js +11 -3
  58. package/dist/managers/submission-manager.js.map +1 -1
  59. package/dist/server.d.ts +7 -5
  60. package/dist/server.d.ts.map +1 -1
  61. package/dist/server.js +6 -5
  62. package/dist/server.js.map +1 -1
  63. package/dist/types.d.ts +10 -2
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/utils.d.ts +4 -8
  66. package/dist/utils.d.ts.map +1 -1
  67. package/dist/utils.js +4 -8
  68. package/dist/utils.js.map +1 -1
  69. package/dist/version.d.ts +1 -1
  70. package/dist/version.js +1 -1
  71. package/package.json +2 -2
package/dist/kit.js CHANGED
@@ -6,25 +6,35 @@
6
6
  * pipeline, WebAuthn ceremonies, deploy path, and signer writes now live in
7
7
  * dependency-injected managers ({@link CredentialManager}, {@link SignerManager},
8
8
  * {@link SubmissionManager}) wired here with late-bound closures. All Protocol-27
9
- * probe shims, dead commented experiments, and the legacy factory-address
10
- * fallback are gone — the kit targets stellar-sdk >= 16 and the current wallet.
9
+ * probe shims and dead commented experiments are gone. The kit targets
10
+ * stellar-sdk >= 16 and the current wallet.
11
11
  *
12
12
  * @packageDocumentation
13
13
  */
14
- import { Keypair, xdr } from "@stellar/stellar-sdk";
15
- import { Server } from "@stellar/stellar-sdk/rpc";
14
+ import { Horizon, Keypair, Networks, xdr } from "@stellar/stellar-sdk";
15
+ import { Api, Server } from "@stellar/stellar-sdk/rpc";
16
16
  import { startAuthentication, startRegistration, } from "@simplewebauthn/browser";
17
- import { Client as PasskeyClient } from "passkey-kit-sdk";
17
+ import { Client as PasskeyClient, } from "passkey-kit-sdk";
18
18
  import base64url from "./base64url.js";
19
- import { SignerKey, } from "./types.js";
20
- import { ConfigurationError, PasskeyKitError, PasskeyKitErrorCode, WalletNotConnectedError, WalletOwnershipError, } from "./errors.js";
19
+ import { SignerKey, SignerStore, } from "./types.js";
20
+ import { ConfigurationError, PasskeyKitError, PasskeyKitErrorCode, WalletNotConnectedError, WalletOwnershipError, WalletAmbiguousError, } from "./errors.js";
21
21
  import { PasskeyEventEmitter } from "./events.js";
22
22
  import { isDefaultDeployer } from "./utils.js";
23
23
  import { DEFAULT_TIMEOUT_SECONDS } from "./constants.js";
24
+ import { PasskeySigner } from "./signers.js";
24
25
  import { calculateExpiration } from "./kit/tx-ops.js";
25
26
  import { CredentialManager, SignerManager, SubmissionManager, } from "./managers/index.js";
26
27
  import { resolveDeployer } from "./kit/deploy-ops.js";
27
- import { contractInstanceExists } from "./rpc-data.js";
28
+ import { buildSecp256r1Signer, } from "./kit/wallet-ops.js";
29
+ import { verifyWalletBirth, } from "./kit/birth-verification.js";
30
+ import { bindingChallenge, verifyBindingRecord, verifyFreshAssertion, verifyStoredProof, } from "./kit/webauthn-verify.js";
31
+ /** Extract the generated contract spec from a wallet client. */
32
+ function specOf(wallet) {
33
+ return wallet.spec;
34
+ }
35
+ function bytesEqual(a, b) {
36
+ return Buffer.from(a).equals(Buffer.from(b));
37
+ }
28
38
  export class PasskeyKit {
29
39
  rpc;
30
40
  rpcUrl;
@@ -32,11 +42,17 @@ export class PasskeyKit {
32
42
  walletWasmHash;
33
43
  /** Accepted code identities, lowercase hex. Never empty. */
34
44
  acceptedWasmHashes;
45
+ /** Accepted immutable birth code identities, lowercase hex. Never empty. */
46
+ acceptedBirthWasmHashes;
47
+ /** Full-history source for immutable wallet-birth verification. */
48
+ history;
35
49
  rpId;
36
50
  /** Lifecycle event emitter (walletCreated, walletConnected, …). */
37
51
  events = new PasskeyEventEmitter();
38
52
  timeoutInSeconds;
39
53
  webAuthn;
54
+ allowedOrigins;
55
+ requireUserVerification;
40
56
  credentialManager;
41
57
  signerManager;
42
58
  submissionManager;
@@ -63,7 +79,22 @@ export class PasskeyKit {
63
79
  this.acceptedWasmHashes = (config.acceptedWasmHashes?.length
64
80
  ? config.acceptedWasmHashes
65
81
  : [config.walletWasmHash]).map((h) => h.toLowerCase());
66
- this.rpId = config.rpId;
82
+ this.acceptedBirthWasmHashes = (config.acceptedBirthWasmHashes?.length
83
+ ? config.acceptedBirthWasmHashes
84
+ : [config.walletWasmHash]).map((h) => h.toLowerCase());
85
+ const horizonUrl = config.horizonUrl ??
86
+ (config.networkPassphrase === Networks.PUBLIC
87
+ ? "https://horizon.stellar.org"
88
+ : config.networkPassphrase === Networks.TESTNET
89
+ ? "https://horizon-testnet.stellar.org"
90
+ : undefined);
91
+ this.history = horizonUrl ? new Horizon.Server(horizonUrl) : undefined;
92
+ const browserLocation = typeof globalThis.location === "object" ? globalThis.location : undefined;
93
+ this.rpId = config.rpId ?? browserLocation?.hostname;
94
+ this.allowedOrigins =
95
+ config.allowedOrigins ??
96
+ (browserLocation?.origin ? [browserLocation.origin] : undefined);
97
+ this.requireUserVerification = config.requireUserVerification ?? false;
67
98
  this.timeoutInSeconds = config.timeoutInSeconds ?? DEFAULT_TIMEOUT_SECONDS;
68
99
  this.webAuthn =
69
100
  config.WebAuthn ?? { startRegistration, startAuthentication };
@@ -126,130 +157,230 @@ export class PasskeyKit {
126
157
  return this.credentialManager.createKey(appName, userName, options?.authenticatorSelection);
127
158
  }
128
159
  /**
129
- * Register a passkey and deploy a smart wallet initialized with it as the
130
- * first signer. Returns the authorized deploy carrier (submit it via
131
- * `PasskeyServer`).
160
+ * Register a passkey and build a smart-wallet deployment initialized with it
161
+ * as the first signer. The kit remains disconnected until the caller confirms
162
+ * submission and calls `connectWallet`.
132
163
  */
133
164
  async createWallet(appName, userName, options) {
134
165
  const created = await this.createKey(appName, userName, options);
135
- const deployTx = await this.submissionManager.buildDeployTransaction(created.keyIdBuffer, created.publicKey);
136
- const contractId = deployTx.result.options.contractId;
137
- this.wallet = new PasskeyClient({
138
- contractId,
139
- rpcUrl: this.rpcUrl,
140
- networkPassphrase: this.networkPassphrase,
141
- });
142
- this.keyId = created.keyId;
166
+ const contractId = this.submissionManager.deriveWalletAddress(created.keyIdBuffer);
167
+ const signer = buildSecp256r1Signer(created.keyIdBuffer, created.publicKey, undefined, SignerStore.Persistent);
168
+ const proof = await this.createBindingProof(contractId, signer, "Genesis");
169
+ const deployTx = await this.submissionManager.buildDeployTransaction(created.keyIdBuffer, created.publicKey, proof);
170
+ if (deployTx.result.options.contractId !== contractId) {
171
+ throw new WalletOwnershipError("Wallet deployment returned an unexpected address", { expected: contractId, actual: deployTx.result.options.contractId });
172
+ }
143
173
  const signedTx = await this.submissionManager.signDeploy(deployTx);
144
- await this.credentialManager.rememberPasskey({
145
- keyId: created.keyId,
146
- publicKey: created.publicKey,
147
- contractId,
148
- createdAt: Date.now(),
149
- });
150
- this.events.emit("walletCreated", { contractId, keyId: created.keyId });
151
174
  return {
152
175
  rawResponse: created.rawResponse,
153
176
  keyId: created.keyIdBuffer,
154
177
  keyIdBase64: created.keyId,
178
+ publicKey: created.publicKey,
155
179
  contractId,
156
180
  signedTx,
157
181
  };
158
182
  }
183
+ /**
184
+ * Verify a successful wallet deployment and persist its immutable birth data.
185
+ * Call this only after the relayer returns a successful transaction hash.
186
+ */
187
+ async confirmWalletCreation(created, creationTransactionHash) {
188
+ const txHash = creationTransactionHash.toLowerCase();
189
+ if (!/^[0-9a-f]{64}$/.test(txHash)) {
190
+ throw new WalletOwnershipError("The wallet creation transaction hash is malformed", { contractId: created.contractId });
191
+ }
192
+ const response = await this.rpc.getTransaction(txHash);
193
+ let creationLedger;
194
+ if (response.status === Api.GetTransactionStatus.SUCCESS) {
195
+ creationLedger = response.ledger;
196
+ }
197
+ else if (response.status === Api.GetTransactionStatus.NOT_FOUND && this.history) {
198
+ const historical = await this.history
199
+ .transactions()
200
+ .transaction(txHash)
201
+ .call();
202
+ if (historical.successful)
203
+ creationLedger = historical.ledger_attr;
204
+ }
205
+ if (creationLedger === undefined) {
206
+ throw new WalletOwnershipError("The wallet creation transaction is not available as a successful history transaction", { contractId: created.contractId, creationTransactionHash: txHash });
207
+ }
208
+ const candidate = {
209
+ contractId: created.contractId,
210
+ birthWasmHash: this.walletWasmHash,
211
+ creationTransactionHash: txHash,
212
+ creationLedger,
213
+ };
214
+ const verified = await verifyWalletBirth({
215
+ rpc: this.rpc,
216
+ history: this.history,
217
+ networkPassphrase: this.networkPassphrase,
218
+ acceptedBirthWasmHashes: this.acceptedBirthWasmHashes,
219
+ }, candidate);
220
+ if (!verified.ok) {
221
+ throw new WalletOwnershipError(`Wallet birth verification failed: ${verified.detail}`, { contractId: created.contractId, reason: verified.reason });
222
+ }
223
+ await this.credentialManager.rememberPasskey({
224
+ keyId: created.keyIdBase64,
225
+ publicKey: created.publicKey,
226
+ ...verified.birth,
227
+ createdAt: Date.now(),
228
+ });
229
+ this.events.emit("walletCreated", {
230
+ contractId: created.contractId,
231
+ keyId: created.keyIdBase64,
232
+ });
233
+ return verified.birth;
234
+ }
159
235
  /**
160
236
  * Connect an existing wallet from a passkey.
161
237
  *
162
- * Resolves the wallet address by (1) local storage, (2) an injected indexer
163
- * lookup, then (3) deterministic derivation from the keyId and then VERIFIES
164
- * ownership: the keyId must resolve to a live signer on the wallet (#601 F7).
165
- * This closes the unverified reverse-lookup hole (#598 F3) at the SDK layer.
166
- * Derivation is deliberately last: it is only correct for a wallet's first
167
- * credential and is the one path a squatted contract can hijack.
238
+ * Resolves wallet candidates from verified local storage or one complete
239
+ * indexer response. Every candidate must prove its immutable birth, current
240
+ * code, signer binding, and fresh passkey possession. The method connects
241
+ * only when one candidate passes every check.
168
242
  *
169
243
  * @throws {WalletOwnershipError} If the keyId is not a signer on the wallet.
170
244
  */
171
245
  async connectWallet(options) {
172
246
  let rawResponse;
247
+ let authenticationChallenge;
173
248
  let keyId = options?.keyId;
174
249
  if (!keyId) {
175
- const auth = await this.credentialManager.authenticate();
250
+ const auth = await this.credentialManager.authenticate(keyId);
176
251
  keyId = auth.keyId;
177
252
  rawResponse = auth.rawResponse;
253
+ authenticationChallenge = auth.challenge;
178
254
  }
179
255
  const keyIdBase64 = keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId;
180
256
  const keyIdBuffer = keyId instanceof Uint8Array ? Buffer.from(keyId) : base64url.toBuffer(keyId);
181
- // Resolve the wallet address. Deterministic derivation is authoritative
182
- // ONLY for a wallet's first credential (the one whose keyId salted the
183
- // deploy); for every later signer `derive(keyId)` points at an address that
184
- // is never legitimately deployed, and is the one resolution path an attacker
185
- // can poison by squatting code at that derived address. So trusted state
186
- // wins and derivation is a last-resort hint, confirmed by an on-chain read:
187
- // 1) local storage, 2) injected indexer lookup, 3) derivation.
188
- // The keyId is still verified as a live signer below (F7), so a stale hint
189
- // can never connect to a wallet the passkey does not actually control.
190
- let contractId = await this.credentialManager.lookupContractId(keyIdBase64);
191
- // Whether the address came from trusted local state. An indexer row or a
192
- // derived address is a CLAIM by an untrusted party: any contract can emit
193
- // the signer events an indexer keys on, and any contract can write the
194
- // signer ledger entry we read back. Both are checked against accepted code
195
- // identity below; trusted state is not, so an upgraded wallet still opens.
196
- const fromTrustedState = contractId !== undefined;
197
- if (!contractId && options?.getContractId) {
198
- contractId = await options.getContractId(keyIdBase64);
199
- }
200
- if (!contractId) {
201
- // Transport errors (429/5xx/timeout) propagate — only an authoritative
202
- // not-found leaves the derived address unresolved.
203
- const derived = this.submissionManager.deriveWalletAddress(keyIdBuffer);
204
- if (await contractInstanceExists(this.rpc, derived)) {
205
- contractId = derived;
257
+ const storedPasskey = await this.credentialManager.getPasskey(keyIdBase64);
258
+ const storedCandidate = storedPasskey?.contractId &&
259
+ storedPasskey.birthWasmHash &&
260
+ storedPasskey.creationTransactionHash &&
261
+ Number.isSafeInteger(storedPasskey.creationLedger)
262
+ ? {
263
+ contractId: storedPasskey.contractId,
264
+ birthWasmHash: storedPasskey.birthWasmHash,
265
+ creationTransactionHash: storedPasskey.creationTransactionHash,
266
+ creationLedger: storedPasskey.creationLedger,
206
267
  }
268
+ : undefined;
269
+ let candidates = storedCandidate
270
+ ? [storedCandidate]
271
+ : [];
272
+ if (!storedCandidate && options?.getWalletCandidates) {
273
+ const lookupFloor = (await this.rpc.getLatestLedger()).sequence;
274
+ const lookup = await options.getWalletCandidates(keyIdBase64);
275
+ if (!lookup.complete ||
276
+ lookup.schema !== 2 ||
277
+ lookup.indexedThroughLedger < lookupFloor) {
278
+ throw new WalletOwnershipError("The wallet lookup is incomplete or stale and cannot prove unique ownership", {
279
+ keyId: keyIdBase64,
280
+ indexedThroughLedger: lookup.indexedThroughLedger,
281
+ requiredLedger: lookupFloor,
282
+ });
283
+ }
284
+ candidates = lookup.candidates;
207
285
  }
208
- if (!contractId) {
286
+ if (candidates.length === 0) {
209
287
  throw new PasskeyKitError("Could not resolve a wallet for the given passkey", PasskeyKitErrorCode.WALLET_NOT_FOUND, { context: { keyId: keyIdBase64 } });
210
288
  }
211
- this.wallet = new PasskeyClient({
212
- contractId,
213
- rpcUrl: this.rpcUrl,
214
- networkPassphrase: this.networkPassphrase,
215
- });
216
- this.keyId = keyIdBase64;
217
- // 3) Code identity FIRST, then signer state — the ordering matters. A signer
218
- // entry only means "this passkey was authorized onto this wallet" if the code
219
- // that wrote it enforced authorization; under arbitrary code it means nothing.
220
- // So bind accepted code before reading any signer state from the contract.
221
- if (options?.verifyWasmHash ?? !fromTrustedState) {
289
+ if (!rawResponse || !authenticationChallenge) {
290
+ const auth = await this.credentialManager.authenticate(keyIdBase64);
291
+ if (auth.keyId !== keyIdBase64) {
292
+ throw new WalletOwnershipError("The passkey returned a different credential during ownership proof", { expected: keyIdBase64, actual: auth.keyId });
293
+ }
294
+ rawResponse = auth.rawResponse;
295
+ authenticationChallenge = auth.challenge;
296
+ }
297
+ const verified = new Map();
298
+ // The last definitive rejection, rethrown verbatim when nothing verifies so
299
+ // its context (e.g. the rejected wasm hash) is not replaced by a summary.
300
+ let lastMismatch;
301
+ for (const candidate of candidates) {
302
+ const wallet = new PasskeyClient({
303
+ contractId: candidate.contractId,
304
+ rpcUrl: this.rpcUrl,
305
+ networkPassphrase: this.networkPassphrase,
306
+ });
307
+ this.wallet = wallet;
308
+ this.keyId = keyIdBase64;
222
309
  try {
223
- await this.assertWalletWasmHash(contractId);
310
+ const birth = await verifyWalletBirth({
311
+ rpc: this.rpc,
312
+ history: this.history,
313
+ networkPassphrase: this.networkPassphrase,
314
+ acceptedBirthWasmHashes: this.acceptedBirthWasmHashes,
315
+ }, candidate);
316
+ if (!birth.ok) {
317
+ lastMismatch = new WalletOwnershipError(`Wallet birth verification failed: ${birth.detail}`, { contractId: candidate.contractId, reason: birth.reason });
318
+ continue;
319
+ }
320
+ await this.assertWalletWasmHash(candidate.contractId);
321
+ const signerVal = await this.signerManager.getSigner(SignerKey.Secp256r1(keyIdBase64));
322
+ if (!signerVal || signerVal.tag !== "Secp256r1") {
323
+ lastMismatch = new WalletOwnershipError("The passkey is not a live signer on the candidate wallet", { contractId: candidate.contractId, keyId: keyIdBase64 });
324
+ continue;
325
+ }
326
+ if (!rawResponse || !authenticationChallenge) {
327
+ throw new Error("signer provenance requires a fresh WebAuthn assertion");
328
+ }
329
+ await this.assertSignerProvenance(wallet, candidate.contractId, keyIdBuffer, signerVal, rawResponse, authenticationChallenge);
330
+ verified.set(candidate.contractId, {
331
+ wallet,
332
+ birth: birth.birth,
333
+ signer: signerVal,
334
+ });
224
335
  }
225
336
  catch (err) {
226
337
  this.wallet = undefined;
227
338
  this.keyId = undefined;
339
+ if (err instanceof WalletOwnershipError) {
340
+ lastMismatch = err;
341
+ continue;
342
+ }
228
343
  throw err;
229
344
  }
230
345
  }
231
- // 4) Ownership verification (F7): the keyId must be a live signer.
232
- // A thrown error here is a transport failure, not proof of non-ownership —
233
- // surface it as-is (a valid passkey must not read as an ownership mismatch
234
- // because the RPC hiccuped); only a definitive not-found (`null`) does.
235
- let signerVal;
236
- try {
237
- signerVal = await this.signerManager.getSigner(SignerKey.Secp256r1(keyIdBase64));
238
- }
239
- catch (err) {
240
- this.wallet = undefined;
241
- this.keyId = undefined;
242
- throw err;
346
+ this.wallet = undefined;
347
+ this.keyId = undefined;
348
+ if (verified.size === 0) {
349
+ throw (lastMismatch ??
350
+ new WalletOwnershipError("The passkey is not a signer on any resolved wallet", {
351
+ candidates: candidates.map(({ contractId }) => contractId),
352
+ keyId: keyIdBase64,
353
+ }));
243
354
  }
244
- if (!signerVal) {
245
- this.wallet = undefined;
246
- this.keyId = undefined;
247
- throw new WalletOwnershipError("The passkey is not a signer on the resolved wallet", { contractId, keyId: keyIdBase64 });
355
+ if (verified.size > 1) {
356
+ throw new WalletAmbiguousError([...verified.keys()]);
248
357
  }
358
+ const [[contractId, match]] = [...verified.entries()];
359
+ const { wallet, birth, signer } = match;
360
+ this.wallet = wallet;
361
+ this.keyId = keyIdBase64;
362
+ await this.credentialManager.rememberPasskey({
363
+ keyId: keyIdBase64,
364
+ publicKey: signer.values[0],
365
+ ...birth,
366
+ createdAt: storedPasskey?.createdAt ?? Date.now(),
367
+ ...(storedPasskey?.nickname ? { nickname: storedPasskey.nickname } : {}),
368
+ lastUsedAt: Date.now(),
369
+ });
249
370
  this.events.emit("walletConnected", { contractId, keyId: keyIdBase64 });
250
371
  return { rawResponse, keyId: keyIdBuffer, keyIdBase64, contractId };
251
372
  }
252
373
  async assertWalletWasmHash(contractId) {
374
+ const wasmHash = await this.contractWasmHash(contractId);
375
+ if (!this.acceptedWasmHashes.includes(wasmHash)) {
376
+ throw new WalletOwnershipError("Wallet code identity is not accepted", {
377
+ contractId,
378
+ accepted: this.acceptedWasmHashes,
379
+ actual: wasmHash,
380
+ });
381
+ }
382
+ }
383
+ async contractWasmHash(contractId) {
253
384
  const instance = await this.rpc.getContractData(contractId, xdr.ScVal.scvLedgerKeyContractInstance());
254
385
  const executable = instance.val
255
386
  .contractData()
@@ -261,13 +392,93 @@ export class PasskeyKit {
261
392
  contractId,
262
393
  });
263
394
  }
264
- const wasmHash = executable.wasmHash().toString("hex");
265
- if (!this.acceptedWasmHashes.includes(wasmHash)) {
266
- throw new WalletOwnershipError("Wallet code identity is not accepted", {
267
- contractId,
268
- accepted: this.acceptedWasmHashes,
269
- actual: wasmHash,
270
- });
395
+ return executable.wasmHash().toString("hex");
396
+ }
397
+ /** Create the address-bound proof required for a Secp256r1 signer write. */
398
+ async createBindingProof(contractId, signer, purpose) {
399
+ this.assertWebAuthnVerificationConfig();
400
+ if (signer.tag !== "Secp256r1") {
401
+ throw new TypeError("binding signer must be Secp256r1");
402
+ }
403
+ const [keyId, publicKey] = signer.values;
404
+ const wallet = new PasskeyClient({
405
+ contractId,
406
+ rpcUrl: this.rpcUrl,
407
+ networkPassphrase: this.networkPassphrase,
408
+ });
409
+ const challenge = bindingChallenge({
410
+ spec: specOf(wallet),
411
+ networkPassphrase: this.networkPassphrase,
412
+ contractId,
413
+ purpose,
414
+ signer,
415
+ });
416
+ const prepared = await new PasskeySigner(keyId).sign(Buffer.from(challenge), this.signerContext());
417
+ if (prepared.key.tag !== "Secp256r1" ||
418
+ prepared.value?.tag !== "Secp256r1" ||
419
+ !bytesEqual(prepared.key.values[0], keyId)) {
420
+ throw new WalletOwnershipError("The passkey returned a different credential for the binding proof", { contractId });
421
+ }
422
+ const proof = prepared.value.values[0];
423
+ const verified = await verifyStoredProof({
424
+ authenticatorData: proof.authenticator_data,
425
+ clientDataJSON: proof.client_data_json,
426
+ signature: proof.signature,
427
+ }, {
428
+ expectedChallenge: challenge,
429
+ rpId: this.rpId,
430
+ publicKey,
431
+ allowedOrigins: this.allowedOrigins,
432
+ requireUserVerification: this.requireUserVerification,
433
+ });
434
+ if (!verified.ok) {
435
+ throw new WalletOwnershipError("The passkey binding proof failed local verification", { contractId, reason: verified.reason, detail: verified.detail });
436
+ }
437
+ return proof;
438
+ }
439
+ /** Verify stored address consent and fresh passkey possession. */
440
+ async assertSignerProvenance(wallet, contractId, keyId, signerVal, freshResponse, freshChallenge) {
441
+ this.assertWebAuthnVerificationConfig();
442
+ const record = (await wallet.get_secp256r1_binding({ key_id: keyId })).result;
443
+ if (!record) {
444
+ throw new WalletOwnershipError("Wallet has no signer binding record for the passkey", { contractId, keyId: base64url(keyId) });
445
+ }
446
+ const publicKey = signerVal.values[0];
447
+ const binding = await verifyBindingRecord(record, { keyId, publicKey }, {
448
+ spec: specOf(wallet),
449
+ networkPassphrase: this.networkPassphrase,
450
+ contractId,
451
+ rpId: this.rpId,
452
+ allowedOrigins: this.allowedOrigins,
453
+ requireUserVerification: this.requireUserVerification,
454
+ });
455
+ if (!binding.ok) {
456
+ throw new WalletOwnershipError("Wallet signer binding record is invalid", { contractId, reason: binding.reason, detail: binding.detail });
457
+ }
458
+ await this.assertFreshAssertion(contractId, keyId, signerVal, freshResponse, freshChallenge);
459
+ }
460
+ /** Verify one fresh WebAuthn assertion against the live signer key. */
461
+ async assertFreshAssertion(contractId, keyId, signerVal, freshResponse, freshChallenge) {
462
+ this.assertWebAuthnVerificationConfig();
463
+ const publicKey = signerVal.values[0];
464
+ const fresh = await verifyFreshAssertion(freshResponse, {
465
+ expectedChallenge: freshChallenge,
466
+ expectedKeyId: keyId,
467
+ rpId: this.rpId,
468
+ publicKey,
469
+ allowedOrigins: this.allowedOrigins,
470
+ requireUserVerification: this.requireUserVerification,
471
+ });
472
+ if (!fresh.ok) {
473
+ throw new WalletOwnershipError("Fresh passkey assertion is invalid", { contractId, reason: fresh.reason, detail: fresh.detail });
474
+ }
475
+ }
476
+ assertWebAuthnVerificationConfig() {
477
+ if (!this.rpId) {
478
+ throw new ConfigurationError("rpId is required to verify signer provenance outside a browser", PasskeyKitErrorCode.INVALID_CONFIG);
479
+ }
480
+ if (!this.allowedOrigins?.length) {
481
+ throw new ConfigurationError("allowedOrigins is required to verify signer provenance outside a browser", PasskeyKitErrorCode.INVALID_CONFIG);
271
482
  }
272
483
  }
273
484
  /** Disconnect the current wallet. */
@@ -290,26 +501,34 @@ export class PasskeyKit {
290
501
  }
291
502
  // -- Signer management -------------------------------------------------------
292
503
  async addSecp256r1(keyId, publicKey, limits, store, expiration) {
293
- const tx = await this.signerManager.addSecp256r1(keyId, publicKey, limits, store, expiration);
294
- // Persist the keyId → wallet mapping so a later connectWallet(keyId) resolves
295
- // this wallet from trusted storage instead of derivation (derive(keyId) of a
296
- // secondary passkey is a squattable address). Without this record a pure-SDK
297
- // consumer has nothing but derivation to fall back on for a second signer.
298
- // ponytail: optimistic — written at build time, before the caller submits.
299
- // If the add tx never lands the keyId is not a signer anywhere, so the F7
300
- // ownership check in connectWallet rejects the stale hint rather than
301
- // mis-binding. Requires a connected wallet (add_signer is wallet-authorized).
302
504
  const contractId = this.contractId;
303
- if (contractId) {
304
- await this.credentialManager.rememberPasskey({
305
- keyId: keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId,
306
- publicKey: publicKey instanceof Uint8Array
307
- ? publicKey
308
- : base64url.toBuffer(publicKey),
309
- contractId,
310
- createdAt: Date.now(),
311
- });
505
+ if (!contractId) {
506
+ throw new WalletNotConnectedError("add a Secp256r1 signer");
507
+ }
508
+ const publicKeyBytes = publicKey instanceof Uint8Array
509
+ ? publicKey
510
+ : base64url.toBuffer(publicKey);
511
+ const contractSigner = buildSecp256r1Signer(keyId, publicKeyBytes, limits, store, expiration);
512
+ const proof = await this.createBindingProof(contractId, contractSigner, "Add");
513
+ const tx = await this.signerManager.addSecp256r1(keyId, publicKey, limits, store, proof, expiration);
514
+ const connectedRecord = this.keyId
515
+ ? await this.credentialManager.getPasskey(this.keyId)
516
+ : null;
517
+ if (!connectedRecord) {
518
+ throw new WalletOwnershipError("The connected wallet has no verified birth record", { contractId });
312
519
  }
520
+ // The new signer uses the already verified immutable birth record. This
521
+ // optimistic association remains safe because connectWallet still requires
522
+ // a live signer, its ADD proof, and fresh passkey possession.
523
+ await this.credentialManager.rememberPasskey({
524
+ keyId: keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId,
525
+ publicKey: publicKeyBytes,
526
+ contractId,
527
+ birthWasmHash: connectedRecord.birthWasmHash,
528
+ creationTransactionHash: connectedRecord.creationTransactionHash,
529
+ creationLedger: connectedRecord.creationLedger,
530
+ createdAt: Date.now(),
531
+ });
313
532
  return tx;
314
533
  }
315
534
  /**
@@ -325,8 +544,13 @@ export class PasskeyKit {
325
544
  updateEd25519(publicKey, limits, store, expiration) {
326
545
  return this.signerManager.updateEd25519(publicKey, limits, store, expiration);
327
546
  }
328
- addPolicy(policy, limits, store, expiration) {
329
- return this.signerManager.addPolicy(policy, limits, store, expiration);
547
+ /**
548
+ * Add a policy signer. Throws a `ValidationError` if the policy's `install`
549
+ * hook adds wallet-authorized sub-invocations to the auth entry, unless
550
+ * `options.allowInstallSubInvocations` is set.
551
+ */
552
+ addPolicy(policy, limits, store, expiration, options) {
553
+ return this.signerManager.addPolicy(policy, limits, store, expiration, options);
330
554
  }
331
555
  updatePolicy(policy, limits, store, expiration) {
332
556
  return this.signerManager.updatePolicy(policy, limits, store, expiration);
package/dist/kit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}