passkey-kit 0.16.5 → 0.17.1
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/README.md +86 -37
- package/SECURITY.md +1 -1
- package/dist/contract-errors.d.ts +1 -1
- package/dist/contract-errors.d.ts.map +1 -1
- package/dist/contract-errors.js +6 -2
- package/dist/contract-errors.js.map +1 -1
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.d.ts +1 -1
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/mercury.d.ts +8 -12
- package/dist/indexer/mercury.d.ts.map +1 -1
- package/dist/indexer/mercury.js +128 -37
- package/dist/indexer/mercury.js.map +1 -1
- package/dist/indexer/types.d.ts +41 -5
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/kit/birth-verification.d.ts +45 -0
- package/dist/kit/birth-verification.d.ts.map +1 -0
- package/dist/kit/birth-verification.js +127 -0
- package/dist/kit/birth-verification.js.map +1 -0
- package/dist/kit/deploy-ops.d.ts +2 -2
- package/dist/kit/deploy-ops.d.ts.map +1 -1
- package/dist/kit/deploy-ops.js +2 -2
- package/dist/kit/deploy-ops.js.map +1 -1
- package/dist/kit/wallet-ops.d.ts +14 -2
- package/dist/kit/wallet-ops.d.ts.map +1 -1
- package/dist/kit/wallet-ops.js +50 -3
- package/dist/kit/wallet-ops.js.map +1 -1
- package/dist/kit/webauthn-ops.d.ts +3 -1
- package/dist/kit/webauthn-ops.d.ts.map +1 -1
- package/dist/kit/webauthn-ops.js +8 -2
- package/dist/kit/webauthn-ops.js.map +1 -1
- package/dist/kit/webauthn-verify.d.ts +166 -0
- package/dist/kit/webauthn-verify.d.ts.map +1 -0
- package/dist/kit/webauthn-verify.js +328 -0
- package/dist/kit/webauthn-verify.js.map +1 -0
- package/dist/kit.d.ts +60 -38
- package/dist/kit.d.ts.map +1 -1
- package/dist/kit.js +335 -108
- package/dist/kit.js.map +1 -1
- package/dist/managers/credential-manager.d.ts +2 -2
- package/dist/managers/credential-manager.d.ts.map +1 -1
- package/dist/managers/credential-manager.js +3 -3
- package/dist/managers/credential-manager.js.map +1 -1
- package/dist/managers/signer-manager.d.ts +10 -4
- package/dist/managers/signer-manager.d.ts.map +1 -1
- package/dist/managers/signer-manager.js +11 -5
- package/dist/managers/signer-manager.js.map +1 -1
- package/dist/managers/submission-manager.d.ts +2 -1
- package/dist/managers/submission-manager.d.ts.map +1 -1
- package/dist/managers/submission-manager.js +2 -2
- package/dist/managers/submission-manager.js.map +1 -1
- package/dist/server.d.ts +7 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -5
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +8 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +4 -8
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -8
- package/dist/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
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
|
|
10
|
-
*
|
|
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 {
|
|
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.
|
|
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 };
|
|
@@ -132,120 +163,224 @@ export class PasskeyKit {
|
|
|
132
163
|
*/
|
|
133
164
|
async createWallet(appName, userName, options) {
|
|
134
165
|
const created = await this.createKey(appName, userName, options);
|
|
135
|
-
const
|
|
136
|
-
const
|
|
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
|
+
}
|
|
137
173
|
const signedTx = await this.submissionManager.signDeploy(deployTx);
|
|
138
|
-
await this.credentialManager.rememberPasskey({
|
|
139
|
-
keyId: created.keyId,
|
|
140
|
-
publicKey: created.publicKey,
|
|
141
|
-
contractId,
|
|
142
|
-
isPrimary: true,
|
|
143
|
-
createdAt: Date.now(),
|
|
144
|
-
});
|
|
145
|
-
this.events.emit("walletCreated", { contractId, keyId: created.keyId });
|
|
146
174
|
return {
|
|
147
175
|
rawResponse: created.rawResponse,
|
|
148
176
|
keyId: created.keyIdBuffer,
|
|
149
177
|
keyIdBase64: created.keyId,
|
|
178
|
+
publicKey: created.publicKey,
|
|
150
179
|
contractId,
|
|
151
180
|
signedTx,
|
|
152
181
|
};
|
|
153
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
|
+
}
|
|
154
235
|
/**
|
|
155
236
|
* Connect an existing wallet from a passkey.
|
|
156
237
|
*
|
|
157
|
-
* Resolves
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* Derivation is deliberately last: it is only correct for a wallet's first
|
|
162
|
-
* 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.
|
|
163
242
|
*
|
|
164
243
|
* @throws {WalletOwnershipError} If the keyId is not a signer on the wallet.
|
|
165
244
|
*/
|
|
166
245
|
async connectWallet(options) {
|
|
167
246
|
let rawResponse;
|
|
247
|
+
let authenticationChallenge;
|
|
168
248
|
let keyId = options?.keyId;
|
|
169
249
|
if (!keyId) {
|
|
170
|
-
const auth = await this.credentialManager.authenticate();
|
|
250
|
+
const auth = await this.credentialManager.authenticate(keyId);
|
|
171
251
|
keyId = auth.keyId;
|
|
172
252
|
rawResponse = auth.rawResponse;
|
|
253
|
+
authenticationChallenge = auth.challenge;
|
|
173
254
|
}
|
|
174
255
|
const keyIdBase64 = keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId;
|
|
175
256
|
const keyIdBuffer = keyId instanceof Uint8Array ? Buffer.from(keyId) : base64url.toBuffer(keyId);
|
|
176
|
-
// Resolve the wallet address. Deterministic derivation is authoritative
|
|
177
|
-
// ONLY for a wallet's first credential (the one whose keyId salted the
|
|
178
|
-
// deploy); for every later signer `derive(keyId)` points at an address that
|
|
179
|
-
// is never legitimately deployed, and is the one resolution path an attacker
|
|
180
|
-
// can poison by squatting code at that derived address. So trusted state
|
|
181
|
-
// wins and derivation is a last-resort hint, confirmed by an on-chain read:
|
|
182
|
-
// 1) local storage, 2) injected indexer lookup, 3) derivation.
|
|
183
|
-
// The keyId is still verified as a live signer below (F7), so a stale hint
|
|
184
|
-
// can never connect to a wallet the passkey does not actually control.
|
|
185
257
|
const storedPasskey = await this.credentialManager.getPasskey(keyIdBase64);
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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,
|
|
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
|
+
});
|
|
202
283
|
}
|
|
284
|
+
candidates = lookup.candidates;
|
|
203
285
|
}
|
|
204
|
-
if (
|
|
286
|
+
if (candidates.length === 0) {
|
|
205
287
|
throw new PasskeyKitError("Could not resolve a wallet for the given passkey", PasskeyKitErrorCode.WALLET_NOT_FOUND, { context: { keyId: keyIdBase64 } });
|
|
206
288
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
//
|
|
217
|
-
|
|
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;
|
|
218
309
|
try {
|
|
219
|
-
await
|
|
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
|
+
});
|
|
220
335
|
}
|
|
221
336
|
catch (err) {
|
|
222
337
|
this.wallet = undefined;
|
|
223
338
|
this.keyId = undefined;
|
|
339
|
+
if (err instanceof WalletOwnershipError) {
|
|
340
|
+
lastMismatch = err;
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
224
343
|
throw err;
|
|
225
344
|
}
|
|
226
345
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
catch (err) {
|
|
236
|
-
this.wallet = undefined;
|
|
237
|
-
this.keyId = undefined;
|
|
238
|
-
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
|
+
}));
|
|
239
354
|
}
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
-
this.keyId = undefined;
|
|
243
|
-
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()]);
|
|
244
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
|
+
});
|
|
245
370
|
this.events.emit("walletConnected", { contractId, keyId: keyIdBase64 });
|
|
246
371
|
return { rawResponse, keyId: keyIdBuffer, keyIdBase64, contractId };
|
|
247
372
|
}
|
|
248
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) {
|
|
249
384
|
const instance = await this.rpc.getContractData(contractId, xdr.ScVal.scvLedgerKeyContractInstance());
|
|
250
385
|
const executable = instance.val
|
|
251
386
|
.contractData()
|
|
@@ -257,13 +392,93 @@ export class PasskeyKit {
|
|
|
257
392
|
contractId,
|
|
258
393
|
});
|
|
259
394
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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);
|
|
267
482
|
}
|
|
268
483
|
}
|
|
269
484
|
/** Disconnect the current wallet. */
|
|
@@ -286,27 +501,34 @@ export class PasskeyKit {
|
|
|
286
501
|
}
|
|
287
502
|
// -- Signer management -------------------------------------------------------
|
|
288
503
|
async addSecp256r1(keyId, publicKey, limits, store, expiration) {
|
|
289
|
-
const tx = await this.signerManager.addSecp256r1(keyId, publicKey, limits, store, expiration);
|
|
290
|
-
// Persist the keyId → wallet mapping so a later connectWallet(keyId) resolves
|
|
291
|
-
// this wallet from trusted storage instead of derivation (derive(keyId) of a
|
|
292
|
-
// secondary passkey is a squattable address). Without this record a pure-SDK
|
|
293
|
-
// consumer has nothing but derivation to fall back on for a second signer.
|
|
294
|
-
// ponytail: optimistic — written at build time, before the caller submits.
|
|
295
|
-
// If the add tx never lands the keyId is not a signer anywhere, so the F7
|
|
296
|
-
// ownership check in connectWallet rejects the stale hint rather than
|
|
297
|
-
// mis-binding. Requires a connected wallet (add_signer is wallet-authorized).
|
|
298
504
|
const contractId = this.contractId;
|
|
299
|
-
if (contractId) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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 });
|
|
309
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
|
+
});
|
|
310
532
|
return tx;
|
|
311
533
|
}
|
|
312
534
|
/**
|
|
@@ -322,8 +544,13 @@ export class PasskeyKit {
|
|
|
322
544
|
updateEd25519(publicKey, limits, store, expiration) {
|
|
323
545
|
return this.signerManager.updateEd25519(publicKey, limits, store, expiration);
|
|
324
546
|
}
|
|
325
|
-
|
|
326
|
-
|
|
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);
|
|
327
554
|
}
|
|
328
555
|
updatePolicy(policy, limits, store, expiration) {
|
|
329
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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"}
|
|
@@ -22,8 +22,8 @@ export declare class CredentialManager {
|
|
|
22
22
|
private get webAuthnDeps();
|
|
23
23
|
/** Run a registration ceremony, returning the new passkey + its public key. */
|
|
24
24
|
createKey(appName: string, userName: string, authenticatorSelection?: AuthenticatorSelectionCriteria): Promise<CreatedPasskey>;
|
|
25
|
-
/** Run a
|
|
26
|
-
authenticate(): Promise<AuthenticatedPasskey>;
|
|
25
|
+
/** Run a discovery or targeted authentication ceremony. */
|
|
26
|
+
authenticate(keyId?: string | Uint8Array): Promise<AuthenticatedPasskey>;
|
|
27
27
|
/** Persist a passkey → wallet association (no-op without a storage adapter). */
|
|
28
28
|
rememberPasskey(record: StoredPasskey): Promise<void>;
|
|
29
29
|
/** Remove a persisted passkey record (no-op without a storage adapter). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/managers/credential-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,qBAAqB;IAExD,OAAO,KAAK,YAAY,GAEvB;IAED,+EAA+E;IAC/E,SAAS,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,8BAA8B,GACtD,OAAO,CAAC,cAAc,CAAC;IAS1B,
|
|
1
|
+
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/managers/credential-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,qBAAqB;IAExD,OAAO,KAAK,YAAY,GAEvB;IAED,+EAA+E;IAC/E,SAAS,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,8BAA8B,GACtD,OAAO,CAAC,cAAc,CAAC;IAS1B,2DAA2D;IAC3D,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIxE,gFAAgF;IAC1E,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,2EAA2E;IACrE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gDAAgD;IAC1C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAI9D;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGnE"}
|