@seams/wallet-server 0.10.1 → 0.11.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.
- package/THIRD_PARTY_NOTICES.md +33 -1812
- package/artifact-manifest.json +30 -30
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/dist/esm/cloud-host.js +8 -7
- package/dist/esm/hosted-wallet-gateway.js +19 -2
- package/dist/esm/index.js +1 -2
- package/dist/esm/localHostedWalletGatewayHandler.js +17 -11
- package/dist/esm/localIntendedYaoFault.js +34 -3
- package/dist/esm/localIntendedYaoRecoveryFault.js +19 -16
- package/dist/esm/localIntendedYaoSigningFault.js +31 -16
- package/dist/esm/router/auth/routerApiKeyAuth.js +1 -13
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +13 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +4 -4
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +19 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +5 -5
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +5 -2
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +7 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +56 -21
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +15 -5
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +87 -34
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +23 -7
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +3 -3
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -3
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +1 -1
- package/dist/esm/router/cloudflare-adaptor.js +2 -2
- package/dist/esm/router/cloudflare.js +2495 -2444
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +5 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +15 -3
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +39 -32
- package/dist/esm/router/framework/registrationSetupDispatch.js +11 -3
- package/dist/esm/router/framework/routeResponses.js +1 -5
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +1 -1
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +2 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +51 -24
- package/dist/esm/shared-ts/src/utils/validation.js +5 -1
- package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +19 -1
- package/dist/esm/threshold/session/signingSessionSeal/index.js +1 -2
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +1 -0
- package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +1 -1
- package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +13 -3
- package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +4 -2
- package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +4 -2
- package/dist/types/wallet-server/src/router/auth/routerApiKeyAuth.d.ts +0 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +27 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +20 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +6 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +10 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +3 -1
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/routeResponses.d.ts +0 -2
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +6 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +1 -2
- package/package.json +2 -9
- package/src/README.md +5 -3
- package/dist/esm/router/express-adaptor.js +0 -84
- package/dist/esm/router/express.js +0 -26400
- package/dist/esm/router/node/nodeHostedWalletGateway.js +0 -64
- package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +0 -163
- package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +0 -120
- package/dist/esm/router/node/nodeHttp.js +0 -79
- package/dist/esm/router/node/nodeSqlite.js +0 -43
- package/dist/esm/router/node/signerSqlMigrations.js +0 -48
- package/dist/esm/storage/syncSqlite.js +0 -79
- package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +0 -75
- package/dist/types/wallet-server/src/router/express-adaptor.d.ts +0 -22
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +0 -34
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +0 -21
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +0 -2
- package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +0 -13
- package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +0 -22
- package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +0 -20
- package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +0 -28
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/express.d.ts +0 -12
|
@@ -20,33 +20,34 @@ import { buildActiveWalletAuthorityV1, buildWalletSignerActivationSetV1, compute
|
|
|
20
20
|
import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
|
|
21
21
|
import { normalizeThresholdEd25519ParticipantIds } from "../../../../shared-ts/src/threshold/participants.js";
|
|
22
22
|
import { nearEd25519SigningKeyIdFromString, registrationEd25519AuthorityScopeFromAuthority, walletIdFromString } from "../../../../shared-ts/src/utils/registrationIds.js";
|
|
23
|
-
import {
|
|
24
|
-
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
23
|
+
import { admitRegistrationReservationHome, cancelRegistrationHome } from "../../../domains/walletRegistration/walletRegistrationReservation.js";
|
|
25
24
|
import { parseImplicitNearAccountId, parseNamedNearAccountId } from "../../../../shared-ts/src/utils/near.js";
|
|
26
25
|
import { registrationNearEd25519BranchKey } from "../../../../shared-ts/src/utils/registrationSignerPlan.js";
|
|
26
|
+
import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
|
|
27
27
|
import { registrationIntentGrantFromString } from "../../../../shared-ts/src/utils/registrationIntent.js";
|
|
28
|
+
import { walletCustodyCeremonyCommitPayloadFromWire } from "../../../../shared-ts/src/passkey-custody/ceremonyCommitPayload.js";
|
|
29
|
+
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
30
|
+
import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
28
31
|
import { createRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
32
|
+
import { routerAbEcdsaStrictRegistrationRequestBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
33
|
+
import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, buildD1WalletRecord, parseWalletIdForIntent, thresholdEcdsaChainTargetsEqual } from "./d1RegistrationCeremonyRecords.js";
|
|
34
|
+
import { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationSignerBranchesFromPlan, startD1RegistrationRouteTiming } from "./d1RegistrationSetupSupport.js";
|
|
29
35
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
30
36
|
import { DEFAULT_WALLET_SESSION_TTL_MS } from "../../../../shared-ts/src/threshold/sessionPolicy.js";
|
|
31
|
-
import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
32
37
|
import { walletAuthAuthorityFromRegistrationAuthority, walletRegistrationFinalizeAuthMethodFromAuthority } from "../wallet/d1WalletAuthMethodBoundary.js";
|
|
33
38
|
import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
|
|
34
39
|
import { buildRouterAbEd25519YaoProductAdmissionRequestV1, projectRouterAbEd25519YaoExactWalletSession } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
35
40
|
import { routerAbEd25519YaoRegistrationExecutionTimingEntriesV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
|
|
36
41
|
import { runRouterAbEd25519YaoRegistrationSideEffectV2, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
37
42
|
import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
|
|
38
|
-
import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
|
|
39
|
-
import { routerAbEcdsaStrictRegistrationRequestBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
40
|
-
import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, buildD1WalletRecord, parseWalletIdForIntent, thresholdEcdsaChainTargetsEqual } from "./d1RegistrationCeremonyRecords.js";
|
|
41
43
|
import { deriveThresholdEcdsaKeyHandle } from "../../../../shared-ts/src/utils/thresholdEcdsaKeyHandle.js";
|
|
42
|
-
import {
|
|
44
|
+
import { isTransientD1Error, retryTransientD1 } from "../../../../storage/d1Retry.js";
|
|
43
45
|
import { listThresholdEcdsaKeyIdentityTargetsForUser } from "../../../../core/authService/thresholdEcdsaKeyInventory.js";
|
|
44
46
|
import { routerAbEd25519YaoLifecycleDecisionLookupV1, routerAbEd25519YaoLifecycleDecisionV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js";
|
|
45
47
|
import { reserveRegistrationCustody } from "../../../domains/passkeyCustody/registrationCustodyOutcome.js";
|
|
46
48
|
import { resolveTenantRootIdentityV1 } from "../../../domains/tenantRoot/tenantRootIdentityResolution.js";
|
|
47
49
|
import { walletRegistrationOperationPreparedFromCeremony } from "./d1WalletRegistrationPreparation.js";
|
|
48
50
|
import { computeWalletRegistrationSetupDigestB64u, parseWalletRegistrationSetupClaims, verifySignedWalletRegistrationSetup, verifyWalletRegistrationSetupClaims } from "../../../domains/walletRegistration/walletRegistrationSetupPayload.js";
|
|
49
|
-
import { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationSignerBranchesFromPlan, startD1RegistrationRouteTiming } from "./d1RegistrationSetupSupport.js";
|
|
50
51
|
import { projectWalletRegistrationSessionCommitReceiptV2, registrationCommitActivation, registrationReplayAuthMethodFields, replayedRegistrationCommit, unissuedRegistrationCommit } from "./walletRegistrationSessionCommitReceipt.js";
|
|
51
52
|
import { assertDirectWalletSessionOwnerProof, buildRegistrationOwnerProof, issueDirectRegistrationEstablishedEcdsaSession, issueDirectRegistrationEstablishedEd25519Session, projectCurrentNearRegistrationSession, replayDirectRegistrationEstablishedEcdsaSession, replayDirectRegistrationEstablishedEd25519Session, walletSessionPrincipalId } from "./walletRegistrationEstablishedSessionIssuer.js";
|
|
52
53
|
import { commitWalletRegistration } from "./d1WalletRegistrationInitialSession.js";
|
|
@@ -1646,7 +1647,24 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
1646
1647
|
};
|
|
1647
1648
|
}
|
|
1648
1649
|
}
|
|
1650
|
+
/**
|
|
1651
|
+
* Respond replays exactly, so a transient D1 fault runs it again, as a client
|
|
1652
|
+
* retry would. A fault that outlasts the retries reports `storage_unavailable`
|
|
1653
|
+
* without the driver's text.
|
|
1654
|
+
*/
|
|
1649
1655
|
async respondWalletRegistration(input, traceContext, timingSink, waitUntil) {
|
|
1656
|
+
try {
|
|
1657
|
+
return await retryTransientD1(() => this.respondWalletRegistrationAttempt(input, traceContext, timingSink, waitUntil));
|
|
1658
|
+
} catch (error) {
|
|
1659
|
+
if (!isTransientD1Error(error)) throw error;
|
|
1660
|
+
return {
|
|
1661
|
+
ok: false,
|
|
1662
|
+
code: "storage_unavailable",
|
|
1663
|
+
message: "Wallet registration storage is unavailable"
|
|
1664
|
+
};
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
async respondWalletRegistrationAttempt(input, traceContext, timingSink, waitUntil) {
|
|
1650
1668
|
const serverTiming = timingSink ?? [];
|
|
1651
1669
|
const totalStartedAtMs = Date.now();
|
|
1652
1670
|
const mark = (name, startedAtMs) => {
|
|
@@ -1948,6 +1966,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
1948
1966
|
ed25519: ed25519Admission.deferred
|
|
1949
1967
|
});
|
|
1950
1968
|
} catch (error) {
|
|
1969
|
+
if (isTransientD1Error(error)) throw error;
|
|
1951
1970
|
return {
|
|
1952
1971
|
ok: false,
|
|
1953
1972
|
code: "internal",
|
|
@@ -2132,7 +2151,10 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2132
2151
|
ed25519: args.input.ed25519,
|
|
2133
2152
|
emailOtpEnrollment: args.input.emailOtpEnrollment,
|
|
2134
2153
|
walletCustodyCommit: args.input.walletCustodyCommit
|
|
2135
|
-
}, effectivePrepared, source, args.serverTiming, initialSessionPlan, args.lifecycleDecision, args.heldPasskeyClaim
|
|
2154
|
+
}, effectivePrepared, source, args.serverTiming, initialSessionPlan, args.lifecycleDecision, args.heldPasskeyClaim, {
|
|
2155
|
+
kind: "snapshot",
|
|
2156
|
+
authority: args.readYaoAdmission()
|
|
2157
|
+
}, args.readFounding());
|
|
2136
2158
|
if (!execution.ok) return unissuedRegistrationCommit(throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1(execution));
|
|
2137
2159
|
const finalized = execution.finalized;
|
|
2138
2160
|
if (finalized.kind !== "near_ed25519") {
|
|
@@ -2335,22 +2357,29 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2335
2357
|
};
|
|
2336
2358
|
const admissionStartedAtMs = Date.now();
|
|
2337
2359
|
const operationKey = `near-provisioning:${input.registrationCeremonyId}:${input.idempotencyKey}`;
|
|
2338
|
-
const initial = await
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2360
|
+
const [initial, requestFingerprintBytes] = await Promise.all([recordRegistrationPromiseTiming({
|
|
2361
|
+
sink: serverTiming,
|
|
2362
|
+
name: "near_finalize_initial_read",
|
|
2363
|
+
startedAtMs: admissionStartedAtMs,
|
|
2364
|
+
promise: this.registrationRead.readFinalization({
|
|
2365
|
+
ceremonyId: verified.claims.registrationCeremonyId,
|
|
2366
|
+
walletId: walletIdFromString(verified.claims.walletId)
|
|
2367
|
+
}, operationKey)
|
|
2368
|
+
}), recordRegistrationPromiseTiming({
|
|
2369
|
+
sink: serverTiming,
|
|
2370
|
+
name: "near_finalize_fingerprint",
|
|
2371
|
+
startedAtMs: Date.now(),
|
|
2372
|
+
promise: sha256BytesUtf8(alphabetizeStringify({
|
|
2373
|
+
version: "wallet_registration_near_provisioning_digest_v1",
|
|
2374
|
+
registrationCeremonyId: input.registrationCeremonyId,
|
|
2375
|
+
setupDigestB64u: verified.claims.setupDigestB64u,
|
|
2376
|
+
idempotencyKey: input.idempotencyKey,
|
|
2377
|
+
ed25519: input.ed25519,
|
|
2378
|
+
emailOtpEnrollment: input.emailOtpEnrollment
|
|
2379
|
+
}))
|
|
2380
|
+
})]);
|
|
2343
2381
|
if (!initial.ok) return initial;
|
|
2344
|
-
const
|
|
2345
|
-
const requestFingerprint = base64UrlEncode(await sha256BytesUtf8(alphabetizeStringify({
|
|
2346
|
-
version: "wallet_registration_near_provisioning_digest_v1",
|
|
2347
|
-
registrationCeremonyId: input.registrationCeremonyId,
|
|
2348
|
-
setupDigestB64u: verified.claims.setupDigestB64u,
|
|
2349
|
-
idempotencyKey: input.idempotencyKey,
|
|
2350
|
-
ed25519: input.ed25519,
|
|
2351
|
-
emailOtpEnrollment: input.emailOtpEnrollment
|
|
2352
|
-
})));
|
|
2353
|
-
recordRegistrationServerTiming(serverTiming, "near_finalize_fingerprint", fingerprintStartedAtMs);
|
|
2382
|
+
const requestFingerprint = base64UrlEncode(requestFingerprintBytes);
|
|
2354
2383
|
const sideEffectStartedAtMs = Date.now();
|
|
2355
2384
|
let preparedCeremony = null;
|
|
2356
2385
|
const run = await runRouterAbEd25519YaoRegistrationSideEffectV2(this.registrationRead.operations, {
|
|
@@ -2380,7 +2409,9 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2380
2409
|
authoritySource: verified.source,
|
|
2381
2410
|
preparedCeremony: () => preparedCeremony,
|
|
2382
2411
|
lifecycleDecision: initial.decision,
|
|
2383
|
-
heldPasskeyClaim: initial.heldPasskeyClaim
|
|
2412
|
+
heldPasskeyClaim: initial.heldPasskeyClaim,
|
|
2413
|
+
readYaoAdmission: initial.readYaoAdmission,
|
|
2414
|
+
readFounding: initial.readFounding
|
|
2384
2415
|
}),
|
|
2385
2416
|
projectReceipt: (execution) => projectWalletRegistrationSessionCommitReceiptV2({
|
|
2386
2417
|
operation: "near_provisioning",
|
|
@@ -2530,6 +2561,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2530
2561
|
const ceremony = input.ceremony;
|
|
2531
2562
|
const stored = storedRespondEd25519DeferredWork(ceremony.signerState);
|
|
2532
2563
|
let authority;
|
|
2564
|
+
const authorityStartedAtMs = Date.now();
|
|
2533
2565
|
if (stored) {
|
|
2534
2566
|
const replayAuthority = await this.verifyRespondReplayAuthority({
|
|
2535
2567
|
ceremony,
|
|
@@ -2563,6 +2595,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2563
2595
|
};
|
|
2564
2596
|
authority = verified.authority;
|
|
2565
2597
|
}
|
|
2598
|
+
recordRegistrationServerTiming(input.serverTiming, "respond_authority_verify", authorityStartedAtMs);
|
|
2566
2599
|
if (authority.walletId !== ceremony.intent.walletId) return {
|
|
2567
2600
|
ok: false,
|
|
2568
2601
|
code: "scope_mismatch",
|
|
@@ -2574,12 +2607,14 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2574
2607
|
code: "not_configured",
|
|
2575
2608
|
message: "Ed25519 Yao registration is unavailable"
|
|
2576
2609
|
};
|
|
2610
|
+
const requestStartedAtMs = Date.now();
|
|
2577
2611
|
const admissionRequest = stored ? stored.admissionRequest : await buildRespondEd25519AdmissionRequest({
|
|
2578
2612
|
ceremony,
|
|
2579
2613
|
branch: input.branch,
|
|
2580
2614
|
authority,
|
|
2581
2615
|
signingWorkerId: runtime.signingWorkerId
|
|
2582
2616
|
});
|
|
2617
|
+
recordRegistrationServerTiming(input.serverTiming, "yao_admission_request", requestStartedAtMs);
|
|
2583
2618
|
const verifiedAuthority = authority;
|
|
2584
2619
|
const branchKey = input.branch.branchKey;
|
|
2585
2620
|
const ceremonyStore = this.getRegistrationCeremonyIntentStore();
|
|
@@ -2597,6 +2632,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2597
2632
|
})]
|
|
2598
2633
|
}
|
|
2599
2634
|
});
|
|
2635
|
+
const bindStartedAtMs = Date.now();
|
|
2600
2636
|
const admitted = await runtime.bindAndAdmitVerifiedRegistration({
|
|
2601
2637
|
kind: "verified_registration_intent",
|
|
2602
2638
|
ownershipGeneration: input.ownershipGeneration,
|
|
@@ -2608,15 +2644,26 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2608
2644
|
expected: input.snapshot,
|
|
2609
2645
|
next: authorizedCeremony(bound)
|
|
2610
2646
|
}), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId);
|
|
2647
|
+
recordRegistrationServerTiming(input.serverTiming, "yao_admission_bind", bindStartedAtMs);
|
|
2611
2648
|
if (!admitted.ok) return {
|
|
2612
2649
|
ok: false,
|
|
2613
2650
|
code: admitted.code,
|
|
2614
2651
|
message: admitted.message
|
|
2615
2652
|
};
|
|
2616
|
-
if (!stored && admitted.companionWrite === "not_committed")
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2653
|
+
if (!stored && admitted.companionWrite === "not_committed") {
|
|
2654
|
+
const next = authorizedCeremony(admitted.admissionRequest);
|
|
2655
|
+
const commitStartedAtMs = Date.now();
|
|
2656
|
+
try {
|
|
2657
|
+
await ceremonyStore.commitEcdsaClaim({
|
|
2658
|
+
expected: input.snapshot,
|
|
2659
|
+
next
|
|
2660
|
+
});
|
|
2661
|
+
} catch (error) {
|
|
2662
|
+
const committed = await ceremonyStore.getCeremony(ceremony.registrationCeremonyId);
|
|
2663
|
+
if (!committed || alphabetizeStringify(committed) !== alphabetizeStringify(next)) throw error;
|
|
2664
|
+
}
|
|
2665
|
+
recordRegistrationServerTiming(input.serverTiming, "respond_ceremony_commit", commitStartedAtMs);
|
|
2666
|
+
}
|
|
2620
2667
|
if (!stored && input.waitUntil && verifiedAuthority.kind === "passkey") input.waitUntil(this.walletRegistrationCommitStore.claimPasskeyAhead({
|
|
2621
2668
|
registrationCeremonyId: ceremony.registrationCeremonyId,
|
|
2622
2669
|
authority: verifiedAuthority,
|
|
@@ -2870,7 +2917,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2870
2917
|
}, prepared, {
|
|
2871
2918
|
kind: "stored_ceremony",
|
|
2872
2919
|
ceremony: activatedCeremony
|
|
2873
|
-
}, [], { kind: "separate" }, null);
|
|
2920
|
+
}, [], { kind: "separate" }, null, null, { kind: "stored" }, null);
|
|
2874
2921
|
if (!execution.ok) return unissuedRegistrationCommit(throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1(execution));
|
|
2875
2922
|
const commit = execution.finalized;
|
|
2876
2923
|
if (commit.kind !== "evm_family_ecdsa") {
|
|
@@ -3206,7 +3253,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
3206
3253
|
};
|
|
3207
3254
|
}
|
|
3208
3255
|
}
|
|
3209
|
-
async executeWalletRegistrationFinalize(request, prepared, source, serverTiming, initialSessionPlan, lifecycleDecision, heldPasskeyClaim
|
|
3256
|
+
async executeWalletRegistrationFinalize(request, prepared, source, serverTiming, initialSessionPlan, lifecycleDecision, heldPasskeyClaim, yaoAdmission, founding) {
|
|
3210
3257
|
const finalizeTiming = createD1RegistrationRouteTimingRecorder("wallets_register_finalize");
|
|
3211
3258
|
const totalTiming = startD1RegistrationRouteTiming("registerFinalizeTotalMs");
|
|
3212
3259
|
let startedCustody = null;
|
|
@@ -3440,12 +3487,15 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
3440
3487
|
sessionId: activationReference.session_id
|
|
3441
3488
|
},
|
|
3442
3489
|
consumerBinding: requestFingerprint
|
|
3443
|
-
})
|
|
3490
|
+
}, yaoAdmission)
|
|
3444
3491
|
}), recordRegistrationPromiseTiming({
|
|
3445
3492
|
sink: serverTiming,
|
|
3446
3493
|
name: "near_finalize_authority_reserve",
|
|
3447
3494
|
startedAtMs: Date.now(),
|
|
3448
|
-
promise: this.walletRegistrationCommitStore.reserveAuthority(ceremonyAuthority, heldPasskeyClaim
|
|
3495
|
+
promise: this.walletRegistrationCommitStore.reserveAuthority(ceremonyAuthority, heldPasskeyClaim, founding ?? {
|
|
3496
|
+
kind: "read",
|
|
3497
|
+
ids: prepared
|
|
3498
|
+
})
|
|
3449
3499
|
})]);
|
|
3450
3500
|
if (activationConsumption.status === "rejected") throw activationConsumption.reason;
|
|
3451
3501
|
if (authorityReservation.status === "rejected") throw authorityReservation.reason;
|
|
@@ -3574,7 +3624,10 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
3574
3624
|
} else {
|
|
3575
3625
|
custodyReservation = reserveCustody();
|
|
3576
3626
|
startedCustody = custodyReservation;
|
|
3577
|
-
commitWallet = await this.walletRegistrationCommitStore.reserveAuthority(ceremonyAuthority
|
|
3627
|
+
commitWallet = await this.walletRegistrationCommitStore.reserveAuthority(ceremonyAuthority, null, {
|
|
3628
|
+
kind: "read",
|
|
3629
|
+
ids: prepared
|
|
3630
|
+
});
|
|
3578
3631
|
}
|
|
3579
3632
|
if (yaoDecisionFound?.kind === "decided_otherwise") return {
|
|
3580
3633
|
ok: false,
|
|
@@ -1,37 +1,53 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import { deriveSigningRootId } from "../../../../shared-ts/src/threshold/signingRootScope.js";
|
|
3
3
|
import { registrationPreparationIdFromString } from "../../../../core/types.js";
|
|
4
|
-
import { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
5
4
|
import { buildStoredWalletRegistrationEvmFamilyEcdsaPreparedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch } from "../../../../core/RegistrationCeremonyStore.js";
|
|
6
5
|
import { routerAbEcdsaStrictRegistrationFactsBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
7
6
|
import { buildRegistrationIntent, inferRuntimePolicyScopeFromSigningRoot } from "./d1RegistrationCeremonyRecords.js";
|
|
7
|
+
import { errorMessage, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
|
|
8
|
+
import { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
8
9
|
import { isTransientD1Error } from "../../../../storage/d1Retry.js";
|
|
9
|
-
import { errorMessage, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
|
|
10
10
|
import { buildWalletRegistrationSetupSignature, normalizeWalletRegistrationSetupRequest, walletRegistrationSetupError, walletRegistrationSetupExpiresAtMs, walletRegistrationSetupIntentDigest } from "./d1WalletRegistrationSetup.js";
|
|
11
11
|
import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "./d1EvmFamilyEcdsaRegistrationBranch.js";
|
|
12
12
|
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.ts
|
|
13
13
|
async function executeD1WalletRegistrationSetup(input, dependencies) {
|
|
14
|
+
const serverTiming = input.serverTiming ?? [];
|
|
14
15
|
try {
|
|
15
16
|
const normalized = normalizeWalletRegistrationSetupRequest(input.request);
|
|
16
17
|
if (!normalized.ok) return walletRegistrationSetupError(normalized.code, normalized.message);
|
|
17
18
|
if (!dependencies.reservation) return walletRegistrationSetupError("registration_authority_unavailable", "Registration reservation authority is required");
|
|
19
|
+
const reserveStartedAtMs = Date.now();
|
|
18
20
|
const admitted = await dependencies.reservation.reserve(input);
|
|
21
|
+
recordRegistrationServerTiming(serverTiming, "setup_reserve", reserveStartedAtMs);
|
|
19
22
|
if (!admitted.ok) return admitted;
|
|
20
23
|
const reservation = admitted.reservation;
|
|
21
24
|
const wallet = { walletId: reservation.walletId };
|
|
22
25
|
if (input.request.wallet?.kind === "provided" && input.request.wallet.walletId !== wallet.walletId) return walletRegistrationSetupError("reservation_conflict", "Registration reservation changed the requested wallet");
|
|
23
26
|
const expiresAtMs = walletRegistrationSetupExpiresAtMs(reservation.reservedAtMs);
|
|
24
27
|
if (Date.now() >= expiresAtMs) return walletRegistrationSetupError("registration_expired", "Registration setup has expired");
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const parallelStartedAtMs = Date.now();
|
|
29
|
+
const [startup, setup] = await Promise.allSettled([recordRegistrationPromiseTiming({
|
|
30
|
+
sink: serverTiming,
|
|
31
|
+
name: "setup_wallet_objects",
|
|
32
|
+
startedAtMs: parallelStartedAtMs,
|
|
33
|
+
promise: dependencies.startRegistrationWallets?.({
|
|
34
|
+
kind: "objects",
|
|
35
|
+
walletId: wallet.walletId,
|
|
36
|
+
ownershipGeneration: admitted.ownershipGeneration
|
|
37
|
+
})
|
|
38
|
+
}), recordRegistrationPromiseTiming({
|
|
39
|
+
sink: serverTiming,
|
|
40
|
+
name: "setup_ceremony",
|
|
41
|
+
startedAtMs: parallelStartedAtMs,
|
|
42
|
+
promise: completeReservedRegistrationSetup(input, dependencies, admitted, normalized, expiresAtMs)
|
|
43
|
+
})]);
|
|
30
44
|
if (setup.status === "rejected") throw setup.reason;
|
|
31
45
|
if (!setup.value.ok) return setup.value;
|
|
32
46
|
if (startup.status === "rejected") throw startup.reason;
|
|
33
47
|
if (dependencies.startRegistrationWallets) try {
|
|
48
|
+
const pairStartedAtMs = Date.now();
|
|
34
49
|
const preparation = await describeCommittedSetupPair(setup.value, dependencies);
|
|
50
|
+
recordRegistrationServerTiming(serverTiming, "setup_pair_describe", pairStartedAtMs);
|
|
35
51
|
if (preparation.status === "described") await dependencies.startRegistrationWallets({
|
|
36
52
|
kind: "pair",
|
|
37
53
|
walletId: wallet.walletId,
|
|
@@ -2,8 +2,8 @@ import { isPlainObject } from "../../../../shared-ts/src/utils/validation.js";
|
|
|
2
2
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
4
4
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
5
|
-
import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
6
5
|
import { parseD1WalletAddSignerFinalizeTerminalResponse, parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
6
|
+
import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
7
7
|
//#region src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.ts
|
|
8
8
|
function parseWalletAddSignerFinalizePrepared(raw) {
|
|
9
9
|
if (!isPlainObject(raw)) return null;
|
|
@@ -13,14 +13,14 @@ import { buildRouterAbEcdsaDerivationPublicCapabilityV1, parseRouterAbEcdsaRegis
|
|
|
13
13
|
import { buildWalletEcdsaSignerActivationV1, extendEd25519WalletAuthorityWithEcdsa, isActiveEd25519WalletAuthorityV1 } from "../../../../shared-ts/src/authorization/walletAuthority.js";
|
|
14
14
|
import { registrationPreparationIdFromString } from "../../../../core/types.js";
|
|
15
15
|
import { addSignerIntentGrantFromString, computeAddSignerIntentDigestB64u, sameAddSignerIntentV1 } from "../../../../shared-ts/src/utils/registrationIntent.js";
|
|
16
|
+
import { routerAbEcdsaStrictRegistrationRequestMatchesFacts } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
17
|
+
import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, normalizeThresholdEcdsaChainTargets, parseD1AddSignerIntent, parseD1RuntimePolicyScope, parseD1StoredAddSignerAuth, parseD1StoredAddSignerIntent, parseD1StoredWalletAddSignerCeremony, parseWalletIdForIntent, positiveIntegerArraysEqual, runtimePolicyScopeMatches, thresholdEcdsaChainTargetsEqual } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
16
18
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
17
19
|
import { WalletAuthorityCommitConflictError } from "./d1WalletAuthorityStore.js";
|
|
18
20
|
import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
|
|
19
21
|
import { buildRouterAbEd25519YaoAddSignerAdmissionRequestV1, createRouterAbEd25519YaoMaterialActivationRefV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
20
22
|
import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1, runRouterAbEd25519YaoRegistrationSideEffectV1, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
21
23
|
import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
|
|
22
|
-
import { routerAbEcdsaStrictRegistrationRequestMatchesFacts } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
23
|
-
import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, normalizeThresholdEcdsaChainTargets, parseD1AddSignerIntent, parseD1RuntimePolicyScope, parseD1StoredAddSignerAuth, parseD1StoredAddSignerIntent, parseD1StoredWalletAddSignerCeremony, parseWalletIdForIntent, positiveIntegerArraysEqual, runtimePolicyScopeMatches, thresholdEcdsaChainTargetsEqual } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
24
24
|
import { buildD1WalletAddSignerFinalizePrepared, fingerprintD1WalletAddSignerFinalizePrepared, rejectUnexpectedWalletAddSignerFinalizePreparation, returnD1WalletAddSignerFinalizePrepared } from "./d1WalletAddSignerFinalizeRecord.js";
|
|
25
25
|
import { routerAbEd25519YaoLifecycleDecisionLookupV1, routerAbEd25519YaoLifecycleDecisionV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js";
|
|
26
26
|
import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "../registration/d1EvmFamilyEcdsaRegistrationBranch.js";
|
|
@@ -1255,7 +1255,7 @@ var CloudflareD1WalletAddSignerService = class {
|
|
|
1255
1255
|
const consumed = await yaoRuntime.consumeActivated({
|
|
1256
1256
|
reference: requestedActivationReference,
|
|
1257
1257
|
consumerBinding: input.consumerBinding
|
|
1258
|
-
});
|
|
1258
|
+
}, { kind: "stored" });
|
|
1259
1259
|
if (!consumed.ok) return consumed;
|
|
1260
1260
|
if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(consumed.activation.admissionRequest, currentState.admissionRequest)) return {
|
|
1261
1261
|
ok: false,
|
|
@@ -13,15 +13,15 @@ import { deriveWebAuthnAuthenticatorDeviceInfo } from "../../../../shared-ts/src
|
|
|
13
13
|
import { parseSessionOrigin } from "../../../../authorization/domain.js";
|
|
14
14
|
import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
|
|
15
15
|
import { PASSKEY_PRF_FIRST_SALT_V1, PASSKEY_PRF_SECOND_SALT_V1 } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
|
|
16
|
+
import { addAuthMethodIntentGrantFromString, computeAddAuthMethodIntentDigestB64u } from "../../../../shared-ts/src/utils/registrationIntent.js";
|
|
16
17
|
import { parsePasskeyCustodyEnvelopeRecord } from "../../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
|
|
17
18
|
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
18
|
-
import {
|
|
19
|
+
import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
|
|
20
|
+
import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
19
21
|
import { parseWebAuthnClientDataJsonBase64url, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
20
22
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
21
23
|
import { resolveWalletAuthMethodIdForAuthority } from "../../../../core/signingLanes/WalletExecutionLaneProjection.js";
|
|
22
|
-
import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
|
|
23
24
|
import { d1HostIsWithinWebAuthnRpId, resolveD1AddAuthMethodExistingAuth, resolveD1AddSignerExistingAuth, verifyD1LinkedDeviceFreshRevokeProofV1, walletAuthAuthorityFromRegistrationAuthority } from "./d1WalletAuthMethodBoundary.js";
|
|
24
|
-
import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
25
25
|
import { runtimePolicyScopeKey } from "../../../../core/EmailOtpRecords.js";
|
|
26
26
|
import { expiredGoogleEmailOtpRegistrationAttemptRecord } from "../emailOtp/d1GoogleEmailOtpRegistrationRecords.js";
|
|
27
27
|
import { admitAddWalletAuthMethod } from "../../../../shared-ts/src/utils/addWalletAuthMethod.js";
|
|
@@ -4,8 +4,8 @@ import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimit
|
|
|
4
4
|
import { WalletLifecycleLocator } from "../../../../authorization/lifecycleRouting.js";
|
|
5
5
|
import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
|
|
6
6
|
import { failedVerification, failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
7
|
-
import { decodeWebAuthnBase64UrlOrBase64, parseWebAuthnAuthenticationCredential, parseWebAuthnClientDataJsonBase64url, webAuthnCredentialIdB64uFromCredential, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
8
7
|
import { nonNegativeSafeInteger, optionalNonNegativeInteger, parseD1BoundaryWalletId, parseD1BoundaryWalletIdResult, parseJsonObject } from "../auth/d1RouterApiAuthBoundary.js";
|
|
8
|
+
import { decodeWebAuthnBase64UrlOrBase64, parseWebAuthnAuthenticationCredential, parseWebAuthnClientDataJsonBase64url, webAuthnCredentialIdB64uFromCredential, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
9
9
|
import { parseWebAuthnAuthenticatorRowDeviceInfo, webAuthnSyncWalletBindingFromCredentialBinding } from "./d1WebAuthnRecords.js";
|
|
10
10
|
import { d1HostIsWithinWebAuthnRpId } from "../wallet/d1WalletAuthMethodBoundary.js";
|
|
11
11
|
import { webAuthnAuthenticationFailure, webAuthnLoginEd25519, webAuthnSyncCredentialBinding } from "../../../../core/authService/webauthnVerificationOutcomes.js";
|
|
@@ -8,8 +8,8 @@ import { parseWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/
|
|
|
8
8
|
import { parseWebAuthnAuthenticatorDeviceInfoJson } from "../../../../shared-ts/src/utils/webauthnDeviceInfo.js";
|
|
9
9
|
import { hasExactKeys } from "../../../../shared-ts/src/utils/exactKeys.js";
|
|
10
10
|
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
11
|
-
import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeReservation.js";
|
|
12
11
|
import { nonNegativeSafeInteger, optionalNonNegativeInteger, positiveInteger } from "../auth/d1RouterApiAuthBoundary.js";
|
|
12
|
+
import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeReservation.js";
|
|
13
13
|
//#region src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.ts
|
|
14
14
|
function parseWebAuthnAuthenticatorRowDeviceInfo(raw) {
|
|
15
15
|
return parseWebAuthnAuthenticatorDeviceInfoJson(raw);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, parseRouterAbPublicKeysetV2 } from "../shared-ts/src/utils/routerAbPublicKeyset.js";
|
|
2
2
|
import { defineRoute, matchesRouteDefinitionRequest } from "./framework/routeDefinitions.js";
|
|
3
|
-
import { extractBearerCredential, extractRouterApiEnvironmentId,
|
|
3
|
+
import { extractBearerCredential, extractRouterApiEnvironmentId, resolveSourceIpFromFetchHeaders } from "./auth/routerApiKeyAuth.js";
|
|
4
4
|
import { InMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createRouterAbNormalSigningAdmissionAdapter } from "./domains/signingOperations/routerAbNormalSigningAdmissionCore.js";
|
|
5
5
|
import { CloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1RouterAbNormalSigningAdmissionStore } from "./cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js";
|
|
6
6
|
import { getRouterApiRouteExtensionRoutes } from "./framework/routeExtensions.js";
|
|
@@ -41,4 +41,4 @@ import { handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1 } from ".
|
|
|
41
41
|
import { createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js";
|
|
42
42
|
import { runRouterAbEd25519YaoRegistrationSideEffectV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
43
43
|
import { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1 } from "./cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js";
|
|
44
|
-
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, createStaticWalletConsoleBindingV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createWalletConsoleOpsClient, createWalletConsoleRelayProxyExtensionV1, createWalletControlClientBindings, createWalletRuntimeOpsHandler, decodeWalletConsoleTenantRootActiveLineageRequestV1, decodeWalletConsoleTenantRootActiveLineageResponseV1, defineRoute, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, extractBearerCredential, extractRouterApiEnvironmentId, getRouterApiRouteExtensionRoutes, handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1, handleStaticWalletConsoleRequestV1, handleWalletControlRequest, matchesRouteDefinitionRequest, mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, parseRouterAbPublicKeysetV2, parseStaticWalletConsoleBindingConfigV1, parseWalletRegistrationContextResponse, parseWalletRuntimeExecuteSignedDelegateRequest, parseWalletRuntimeExecuteSignedDelegateResponse, parseWalletRuntimeExecuteSignedDelegateResult, parseWalletRuntimeRelayerAccount, parseWalletRuntimeWalletIdentitiesResult, parseWalletRuntimeWalletIdentityRequest, partitionRouterAbEd25519YaoProductRegistrationStateV1, randomTenantRootCreationGrantBytesV1, readEnvironmentCsv, readEnvironmentString, requireEnvironmentString, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1, resolveRuntimeTenantRootLineage,
|
|
44
|
+
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, createStaticWalletConsoleBindingV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createWalletConsoleOpsClient, createWalletConsoleRelayProxyExtensionV1, createWalletControlClientBindings, createWalletRuntimeOpsHandler, decodeWalletConsoleTenantRootActiveLineageRequestV1, decodeWalletConsoleTenantRootActiveLineageResponseV1, defineRoute, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, extractBearerCredential, extractRouterApiEnvironmentId, getRouterApiRouteExtensionRoutes, handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1, handleStaticWalletConsoleRequestV1, handleWalletControlRequest, matchesRouteDefinitionRequest, mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, parseRouterAbPublicKeysetV2, parseStaticWalletConsoleBindingConfigV1, parseWalletRegistrationContextResponse, parseWalletRuntimeExecuteSignedDelegateRequest, parseWalletRuntimeExecuteSignedDelegateResponse, parseWalletRuntimeExecuteSignedDelegateResult, parseWalletRuntimeRelayerAccount, parseWalletRuntimeWalletIdentitiesResult, parseWalletRuntimeWalletIdentityRequest, partitionRouterAbEd25519YaoProductRegistrationStateV1, randomTenantRootCreationGrantBytesV1, readEnvironmentCsv, readEnvironmentString, requireEnvironmentString, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1, resolveRuntimeTenantRootLineage, resolveSourceIpFromFetchHeaders, runRouterAbEd25519YaoProductRegistrationRequestScopedV1, runRouterAbEd25519YaoRegistrationSideEffectV1, runRouterAbEd25519YaoRegistrationTwoPhaseV1, runRouterAbPrewarmScheduledV1, signTenantRootCreationGrantV1, tenantRootIdentityDigestB64uV1, validateRuntimeSnapshotExpectation, walletConsoleApiWalletGetRouteDefinitionV1, walletConsoleApiWalletListRouteDefinitionV1, walletConsoleApiWalletSearchRouteDefinitionV1, walletConsoleRelayRouteDefinitionsV1, walletConsoleSignedDelegateRouteDefinitionV1, walletConsoleSponsoredEvmCallRouteDefinitionV1 };
|