@seams/wallet-server 0.14.0 → 0.15.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/artifact-manifest.json +23 -23
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- 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_bg.wasm +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +1 -1
- 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_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_bg.wasm +0 -0
- package/dist/esm/cloud-host.js +2 -2
- package/dist/esm/hosted-wallet-gateway.js +1 -1
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- 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/passkeyCustody/d1WalletCustodyCommitStore.js +17 -45
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +5 -5
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +1 -17
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +31 -34
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +3 -2
- package/dist/esm/router/cloudflare/d1/registration/registrationCompletionWrite.js +20 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +2 -2
- 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/runtime/walletControlOps.js +1 -0
- package/dist/esm/router/cloudflare.js +2563 -2505
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +44 -8
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +15 -1
- package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +8 -8
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +1 -19
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +7 -7
- package/dist/esm/router/framework/registrationSetupDispatch.js +1 -1
- package/dist/esm/router/framework/registrationTiming.js +21 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +1 -1
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +2 -2
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +0 -9
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +5 -42
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +0 -9
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +1 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/registrationCompletionWrite.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +6 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +16 -24
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +1 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +7 -17
- package/dist/types/wallet-server/src/router/framework/registrationTiming.d.ts +10 -0
- package/package.json +1 -1
|
@@ -21,33 +21,35 @@ import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND } from "../../../../shared-
|
|
|
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
23
|
import { admitRegistrationReservationHome, cancelRegistrationHome } from "../../../domains/walletRegistration/walletRegistrationReservation.js";
|
|
24
|
+
import { recordRegistrationPromiseTiming, recordRegistrationServerTiming } from "../../../framework/registrationTiming.js";
|
|
25
|
+
import { walletCustodyCeremonyCommitPayloadFromWire } from "../../../../shared-ts/src/passkey-custody/ceremonyCommitPayload.js";
|
|
26
|
+
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
24
27
|
import { parseImplicitNearAccountId, parseNamedNearAccountId } from "../../../../shared-ts/src/utils/near.js";
|
|
25
28
|
import { registrationNearEd25519BranchKey } from "../../../../shared-ts/src/utils/registrationSignerPlan.js";
|
|
26
|
-
import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
|
|
27
29
|
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";
|
|
31
30
|
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";
|
|
35
31
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
36
32
|
import { DEFAULT_WALLET_SESSION_TTL_MS } from "../../../../shared-ts/src/threshold/sessionPolicy.js";
|
|
33
|
+
import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
37
34
|
import { walletAuthAuthorityFromRegistrationAuthority, walletRegistrationFinalizeAuthMethodFromAuthority } from "../wallet/d1WalletAuthMethodBoundary.js";
|
|
38
35
|
import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
|
|
39
36
|
import { buildRouterAbEd25519YaoProductAdmissionRequestV1, projectRouterAbEd25519YaoExactWalletSession } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
40
37
|
import { routerAbEd25519YaoRegistrationExecutionTimingEntriesV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
|
|
41
38
|
import { runRouterAbEd25519YaoRegistrationSideEffectV2, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
42
39
|
import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
|
|
40
|
+
import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
|
|
41
|
+
import { routerAbEcdsaStrictRegistrationRequestBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
42
|
+
import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, buildD1WalletRecord, parseWalletIdForIntent, thresholdEcdsaChainTargetsEqual } from "./d1RegistrationCeremonyRecords.js";
|
|
43
43
|
import { deriveThresholdEcdsaKeyHandle } from "../../../../shared-ts/src/utils/thresholdEcdsaKeyHandle.js";
|
|
44
44
|
import { isTransientD1Error, retryTransientD1 } from "../../../../storage/d1Retry.js";
|
|
45
|
+
import { registrationCommitCompletionWrite } from "./registrationCompletionWrite.js";
|
|
45
46
|
import { listThresholdEcdsaKeyIdentityTargetsForUser } from "../../../../core/authService/thresholdEcdsaKeyInventory.js";
|
|
46
47
|
import { routerAbEd25519YaoLifecycleDecisionLookupV1, routerAbEd25519YaoLifecycleDecisionV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js";
|
|
47
48
|
import { reserveRegistrationCustody } from "../../../domains/passkeyCustody/registrationCustodyOutcome.js";
|
|
48
49
|
import { resolveTenantRootIdentityV1 } from "../../../domains/tenantRoot/tenantRootIdentityResolution.js";
|
|
49
50
|
import { walletRegistrationOperationPreparedFromCeremony } from "./d1WalletRegistrationPreparation.js";
|
|
50
51
|
import { computeWalletRegistrationSetupDigestB64u, parseWalletRegistrationSetupClaims, verifySignedWalletRegistrationSetup, verifyWalletRegistrationSetupClaims } from "../../../domains/walletRegistration/walletRegistrationSetupPayload.js";
|
|
52
|
+
import { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, registrationSignerBranchesFromPlan, startD1RegistrationRouteTiming } from "./d1RegistrationSetupSupport.js";
|
|
51
53
|
import { projectWalletRegistrationSessionCommitReceiptV2, registrationCommitActivation, registrationReplayAuthMethodFields, replayedRegistrationCommit, unissuedRegistrationCommit } from "./walletRegistrationSessionCommitReceipt.js";
|
|
52
54
|
import { assertDirectWalletSessionOwnerProof, buildRegistrationOwnerProof, issueDirectRegistrationEstablishedEcdsaSession, issueDirectRegistrationEstablishedEd25519Session, projectCurrentNearRegistrationSession, replayDirectRegistrationEstablishedEcdsaSession, replayDirectRegistrationEstablishedEd25519Session, walletSessionPrincipalId } from "./walletRegistrationEstablishedSessionIssuer.js";
|
|
53
55
|
import { commitWalletRegistration } from "./d1WalletRegistrationInitialSession.js";
|
|
@@ -2202,7 +2204,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2202
2204
|
if (issuance.status === "rejected") throw issuance.reason;
|
|
2203
2205
|
if (custody.status === "rejected") throw custody.reason;
|
|
2204
2206
|
const issuedRegistrationSession = issuance.value;
|
|
2205
|
-
const custodyField = custody.value.status === "not_requested" ? {} : { walletCustody: custody.value };
|
|
2207
|
+
const custodyField = custody.value.outcome.status === "not_requested" ? {} : { walletCustody: custody.value.outcome };
|
|
2206
2208
|
switch (issuedRegistrationSession.kind) {
|
|
2207
2209
|
case "issued": return {
|
|
2208
2210
|
kind: "session_issued",
|
|
@@ -2216,7 +2218,8 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2216
2218
|
},
|
|
2217
2219
|
issuedAtMs: issuedRegistrationSession.issuedAtMs,
|
|
2218
2220
|
expectedOrigin: ownerProofContext.expectedOrigin,
|
|
2219
|
-
activation: issuedRegistrationSession.activation
|
|
2221
|
+
activation: issuedRegistrationSession.activation,
|
|
2222
|
+
custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
|
|
2220
2223
|
};
|
|
2221
2224
|
case "already_committed": return {
|
|
2222
2225
|
kind: "session_issued",
|
|
@@ -2231,7 +2234,8 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2231
2234
|
},
|
|
2232
2235
|
issuedAtMs: issuedRegistrationSession.issuedAtMs,
|
|
2233
2236
|
expectedOrigin: ownerProofContext.expectedOrigin,
|
|
2234
|
-
activation: issuedRegistrationSession.activation
|
|
2237
|
+
activation: issuedRegistrationSession.activation,
|
|
2238
|
+
custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
|
|
2235
2239
|
};
|
|
2236
2240
|
default: return assertNeverD1RegistrationSessionIssuance(issuedRegistrationSession);
|
|
2237
2241
|
}
|
|
@@ -2430,7 +2434,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2430
2434
|
registrationCeremonyId: input.registrationCeremonyId,
|
|
2431
2435
|
execution
|
|
2432
2436
|
}),
|
|
2433
|
-
completionWrite:
|
|
2437
|
+
completionWrite: registrationCommitCompletionWrite,
|
|
2434
2438
|
replay: this.replayWalletRegistrationNearProvisioningCommit.bind(this)
|
|
2435
2439
|
});
|
|
2436
2440
|
recordRegistrationServerTiming(serverTiming, "near_finalize_side_effect", sideEffectStartedAtMs);
|
|
@@ -2656,7 +2660,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2656
2660
|
}, stored ? null : (bound) => ceremonyStore.prepareEcdsaClaimCommit({
|
|
2657
2661
|
expected: input.snapshot,
|
|
2658
2662
|
next: authorizedCeremony(bound)
|
|
2659
|
-
}), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId);
|
|
2663
|
+
}), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId, input.serverTiming);
|
|
2660
2664
|
recordRegistrationServerTiming(input.serverTiming, "yao_admission_bind", bindStartedAtMs);
|
|
2661
2665
|
if (!admitted.ok) return {
|
|
2662
2666
|
ok: false,
|
|
@@ -2692,6 +2696,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2692
2696
|
admissionReceipt: admitted.value
|
|
2693
2697
|
};
|
|
2694
2698
|
const execution = input.ed25519Execution ? await runtime.executeAdmittedRegistration({
|
|
2699
|
+
admission: admitted.executionAdmission,
|
|
2695
2700
|
request: input.ed25519Execution,
|
|
2696
2701
|
credential: input.registrationBearerToken,
|
|
2697
2702
|
trace: input.traceContext ?? createRouterAbTraceContextV1()
|
|
@@ -2712,8 +2717,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2712
2717
|
}
|
|
2713
2718
|
};
|
|
2714
2719
|
}
|
|
2715
|
-
/**
|
|
2716
|
-
* Derives the authority-bound Yao admission now that the proof is verified.
|
|
2720
|
+
/** Derives the authority-bound Yao admission after proof verification.
|
|
2717
2721
|
* Both auth methods take this path — the scope comes from the verified
|
|
2718
2722
|
* authority, so Email OTP's `providerUserId` is established rather than
|
|
2719
2723
|
* assumed.
|
|
@@ -2837,17 +2841,21 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2837
2841
|
registrationCeremonyId: claims.registrationCeremonyId,
|
|
2838
2842
|
execution
|
|
2839
2843
|
}),
|
|
2840
|
-
completionWrite:
|
|
2844
|
+
completionWrite: registrationCommitCompletionWrite,
|
|
2841
2845
|
replay: this.replayWalletRegistrationActivateCommit.bind(this)
|
|
2842
2846
|
});
|
|
2843
2847
|
switch (run.kind) {
|
|
2844
2848
|
case "executed":
|
|
2845
2849
|
case "exact_replay":
|
|
2846
2850
|
await publishCompletedRegistration(run.value, waitUntil);
|
|
2847
|
-
if (run.value.response.ok && run.value.response.kind === "evm_family_ecdsa")
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
+
if (run.value.response.ok && run.value.response.kind === "evm_family_ecdsa") {
|
|
2852
|
+
const cleanup = cleanupFinalizedRegistrationCeremony({
|
|
2853
|
+
store: this.getRegistrationCeremonyIntentStore(),
|
|
2854
|
+
registrationCeremonyId: claims.registrationCeremonyId
|
|
2855
|
+
});
|
|
2856
|
+
if (waitUntil) waitUntil(cleanup);
|
|
2857
|
+
else await cleanup;
|
|
2858
|
+
}
|
|
2851
2859
|
return run.value.response;
|
|
2852
2860
|
case "request_conflict": return {
|
|
2853
2861
|
ok: false,
|
|
@@ -2983,7 +2991,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2983
2991
|
foundingAuthority: commit.foundingAuthority,
|
|
2984
2992
|
foundingAuthMethod: commit.foundingAuthMethod,
|
|
2985
2993
|
...commit.registrationDiagnostics ? { registrationDiagnostics: commit.registrationDiagnostics } : {},
|
|
2986
|
-
...custody.value.status === "not_requested" ? {} : { walletCustody: custody.value },
|
|
2994
|
+
...custody.value.outcome.status === "not_requested" ? {} : { walletCustody: custody.value.outcome },
|
|
2987
2995
|
custodyKeyManifestDigestB64u: commit.custodyKeyManifestDigestB64u,
|
|
2988
2996
|
ecdsa: {
|
|
2989
2997
|
...commit.ecdsa,
|
|
@@ -2996,7 +3004,8 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
2996
3004
|
const issuedContext = {
|
|
2997
3005
|
issuedAtMs: registrationEstablishedSession.issuedAtMs,
|
|
2998
3006
|
expectedOrigin: ownerProofContext.expectedOrigin,
|
|
2999
|
-
activation: registrationEstablishedSession.activation
|
|
3007
|
+
activation: registrationEstablishedSession.activation,
|
|
3008
|
+
custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
|
|
3000
3009
|
};
|
|
3001
3010
|
if (commit.authMethod.kind === "passkey") {
|
|
3002
3011
|
if (!commit.rpId) throw new Error("Passkey registration activation is missing its RP ID");
|
|
@@ -3847,19 +3856,7 @@ var CloudflareD1WalletRegistrationService = class {
|
|
|
3847
3856
|
};
|
|
3848
3857
|
const foundingAuthority = persistedFoundingRecords.authority;
|
|
3849
3858
|
const foundingAuthMethod = persistedFoundingRecords.authMethod;
|
|
3850
|
-
const custody = custodyReservation
|
|
3851
|
-
const walletCustody = await recordRegistrationPromiseTiming({
|
|
3852
|
-
sink: serverTiming,
|
|
3853
|
-
name: "near_finalize_custody_commit",
|
|
3854
|
-
startedAtMs: Date.now(),
|
|
3855
|
-
promise: commitCustody()
|
|
3856
|
-
});
|
|
3857
|
-
if (walletCustody.status === "rejected") console.warn("[wallet-registration] custody commit rejected", {
|
|
3858
|
-
registrationCeremonyId: ceremony.registrationCeremonyId,
|
|
3859
|
-
reason: walletCustody.reason
|
|
3860
|
-
});
|
|
3861
|
-
return walletCustody;
|
|
3862
|
-
});
|
|
3859
|
+
const custody = custodyReservation;
|
|
3863
3860
|
startedCustody = custody;
|
|
3864
3861
|
const authMethod = walletRegistrationFinalizeAuthMethodFromAuthority(ceremonyAuthority);
|
|
3865
3862
|
let response;
|
|
@@ -1,12 +1,13 @@
|
|
|
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 { recordRegistrationPromiseTiming, recordRegistrationServerTiming } from "../../../framework/registrationTiming.js";
|
|
5
|
+
import { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
4
6
|
import { buildStoredWalletRegistrationEvmFamilyEcdsaPreparedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch } from "../../../../core/RegistrationCeremonyStore.js";
|
|
5
7
|
import { routerAbEcdsaStrictRegistrationFactsBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
6
8
|
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";
|
|
9
9
|
import { isTransientD1Error } from "../../../../storage/d1Retry.js";
|
|
10
|
+
import { errorMessage, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
|
|
10
11
|
import { buildWalletRegistrationSetupSignature, normalizeWalletRegistrationSetupRequest, walletRegistrationSetupError, walletRegistrationSetupExpiresAtMs, walletRegistrationSetupIntentDigest } from "./d1WalletRegistrationSetup.js";
|
|
11
12
|
import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "./d1EvmFamilyEcdsaRegistrationBranch.js";
|
|
12
13
|
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.ts
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/router/cloudflare/d1/registration/registrationCompletionWrite.ts
|
|
2
|
+
/** Custody, home activation and the replay receipt share one durable transaction. */
|
|
3
|
+
function registrationCommitCompletionWrite(execution) {
|
|
4
|
+
switch (execution.kind) {
|
|
5
|
+
case "unissued":
|
|
6
|
+
case "replayed": return null;
|
|
7
|
+
case "session_issued":
|
|
8
|
+
case "session_issued_with_installation_projection":
|
|
9
|
+
if (!execution.custodyWrite) return execution.activation;
|
|
10
|
+
return { statements: [...execution.custodyWrite.statements, ...execution.activation?.statements ?? []] };
|
|
11
|
+
default: return assertNever(execution);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function assertNever(value) {
|
|
15
|
+
throw new Error(`Unknown registration completion state: ${String(value)}`);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { registrationCommitCompletionWrite };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=registrationCompletionWrite.js.map
|
|
@@ -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 { parseD1WalletAddSignerFinalizeTerminalResponse, parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
6
5
|
import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
6
|
+
import { parseD1WalletAddSignerFinalizeTerminalResponse, parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.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";
|
|
18
16
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
19
17
|
import { WalletAuthorityCommitConflictError } from "./d1WalletAuthorityStore.js";
|
|
20
18
|
import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
|
|
21
19
|
import { buildRouterAbEd25519YaoAddSignerAdmissionRequestV1, createRouterAbEd25519YaoMaterialActivationRefV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
|
|
22
20
|
import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1, runRouterAbEd25519YaoRegistrationSideEffectV1, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
23
21
|
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";
|
|
@@ -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";
|
|
17
16
|
import { parsePasskeyCustodyEnvelopeRecord } from "../../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
|
|
18
17
|
import "../../../../shared-ts/src/passkey-custody/index.js";
|
|
19
|
-
import {
|
|
20
|
-
import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
|
|
18
|
+
import { addAuthMethodIntentGrantFromString, computeAddAuthMethodIntentDigestB64u } from "../../../../shared-ts/src/utils/registrationIntent.js";
|
|
21
19
|
import { parseWebAuthnClientDataJsonBase64url, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
22
20
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
23
21
|
import { resolveWalletAuthMethodIdForAuthority } from "../../../../core/signingLanes/WalletExecutionLaneProjection.js";
|
|
22
|
+
import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
|
|
24
23
|
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 { nonNegativeSafeInteger, optionalNonNegativeInteger, parseD1BoundaryWalletId, parseD1BoundaryWalletIdResult, parseJsonObject } from "../auth/d1RouterApiAuthBoundary.js";
|
|
8
7
|
import { decodeWebAuthnBase64UrlOrBase64, parseWebAuthnAuthenticationCredential, parseWebAuthnClientDataJsonBase64url, webAuthnCredentialIdB64uFromCredential, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
8
|
+
import { nonNegativeSafeInteger, optionalNonNegativeInteger, parseD1BoundaryWalletId, parseD1BoundaryWalletIdResult, parseJsonObject } from "../auth/d1RouterApiAuthBoundary.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 { nonNegativeSafeInteger, optionalNonNegativeInteger, positiveInteger } from "../auth/d1RouterApiAuthBoundary.js";
|
|
12
11
|
import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeReservation.js";
|
|
12
|
+
import { nonNegativeSafeInteger, optionalNonNegativeInteger, positiveInteger } from "../auth/d1RouterApiAuthBoundary.js";
|
|
13
13
|
//#region src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.ts
|
|
14
14
|
function parseWebAuthnAuthenticatorRowDeviceInfo(raw) {
|
|
15
15
|
return parseWebAuthnAuthenticatorDeviceInfoJson(raw);
|
|
@@ -6,6 +6,7 @@ const WALLET_CONTROL_BASE_PATH_V1 = "/internal/wallet-runtime/v1/tenant-root-con
|
|
|
6
6
|
const WALLET_CONTROL_AUTH_MARKER_V1 = "wallet-control-private-binding-v1";
|
|
7
7
|
const OPERATIONS = [
|
|
8
8
|
operation("create", "mpc-router", "https://mpc-router.router-ab.internal", "/router-ab/internal/tenant-root/creation/v1/create"),
|
|
9
|
+
operation("renew-creation-authorization", "mpc-router", "https://mpc-router.router-ab.internal", "/router-ab/internal/tenant-root/creation/v1/renewal-fence"),
|
|
9
10
|
operation("refresh", "mpc-router", "https://mpc-router.router-ab.internal", "/router-ab/internal/tenant-root/refresh/v1/execute"),
|
|
10
11
|
operation("status", "mpc-router", "https://mpc-router.router-ab.internal", "/router-ab/internal/tenant-root/status/v1/read"),
|
|
11
12
|
operation("destination-bootstrap", "mpc-router", "https://mpc-router.router-ab.internal", "/router-ab/internal/tenant-root/destination-bootstrap/v1/read-auth"),
|