@seams/wallet-server 0.8.0 → 0.9.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/THIRD_PARTY_NOTICES.md +7 -1
- package/artifact-manifest.json +196 -41
- 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/cloudflare-router-ab/migrations/deriver-a/0019_wallet_object_addresses.sql +10 -0
- package/cloudflare-router-ab/migrations/deriver-b/0019_wallet_object_addresses.sql +10 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +3 -117
- package/cloudflare-router-ab/wrangler.deriver-a.toml +0 -8
- package/cloudflare-router-ab/wrangler.deriver-b.toml +24 -8
- package/cloudflare-router-ab/wrangler.router.toml +0 -2
- package/cloudflare-router-ab/wrangler.signing-worker.toml +29 -0
- package/dist/esm/authorization/domain.js +3 -2
- package/dist/esm/authorization/ed25519WalletSessionAdmission.js +0 -0
- package/dist/esm/authorization/service.js +64 -36
- package/dist/esm/cloud-host.js +24 -19
- package/dist/esm/core/EmailOtpRecords.js +29 -6
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +2 -0
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +10 -0
- package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +1 -0
- package/dist/esm/core/ThresholdService/validation.js +2 -2
- package/dist/esm/core/authService/nearPrivateKeySigning.js +1 -1
- package/dist/esm/core/authService/webauthn.js +1 -1
- package/dist/esm/core/d1Ed25519SignerRead.js +55 -0
- package/dist/esm/core/d1WalletStore.js +14 -11
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +2 -2
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +1 -1
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -2
- package/dist/esm/core/emailOtpD1Statements.js +1 -0
- package/dist/esm/core/nearRelayerAccountProvisioning.js +1 -1
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +4 -0
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +1 -1
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +1 -0
- package/dist/esm/hosted-wallet-gateway.js +93 -10
- package/dist/esm/localHostedWalletGatewayHandler.js +12 -9
- package/dist/esm/localIntendedYaoSigningFault.js +2 -30
- package/dist/esm/localRegistrationSetupAuthority.js +8 -1
- package/dist/esm/router/auth/commonRouterUtils.js +17 -10
- package/dist/esm/router/auth/routerApiCredentialAuth.js +26 -7
- package/dist/esm/router/auth/walletRegistrationContext.js +49 -0
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +1 -1
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +4 -3
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +2 -0
- package/dist/esm/router/cloudflare/d1/auth/d1EmailOtpRouteService.js +25 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +14 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +44 -40
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +17 -1
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +35 -5
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +258 -99
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +31 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +1 -1
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +11 -2
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +100 -10
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.js +92 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.js +77 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +14 -8
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +14 -8
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +3 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +58 -38
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +27 -20
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +18 -7
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +75 -14
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +49 -29
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.js +28 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +11 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +168 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletOperationStore.js +53 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +83 -42
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.js +33 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.js +16 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +58 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +439 -500
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +104 -90
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +78 -44
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +11 -35
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +98 -39
- package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +12 -9
- package/dist/esm/router/cloudflare/d1/wallet/authorizationSnapshotLayout.js +168 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +15 -6
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -40
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +54 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.js +157 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.js +56 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.js +238 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.js +287 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.js +295 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.js +140 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.js +170 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.js +60 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwner.js +33 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.js +74 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.js +77 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.js +37 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationSessions.js +97 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.js +133 -0
- package/dist/esm/router/cloudflare/d1/walletObjectAddresses.js +47 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
- package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +32 -1
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +20 -8
- package/dist/esm/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.js +488 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +26 -6
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +3 -0
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletObjectAddresses.js +105 -0
- package/dist/esm/router/cloudflare/runtime/walletPlacementRoutes.js +339 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationDeriver.js +244 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationEcdsa.js +212 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationEd25519.js +172 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationOps.js +183 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationPresign.js +185 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationSource.js +221 -0
- package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +30 -8
- package/dist/esm/router/cloudflare-adaptor.js +8 -8
- package/dist/esm/router/cloudflare.js +34115 -32240
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +35 -9
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +42 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +32 -6
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +61 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +70 -3
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +59 -87
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +52 -22
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +10 -7
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +108 -78
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +19 -5
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +71 -22
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +37 -25
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +3 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +24 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +4 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +20 -7
- package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +7 -1
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +1 -1
- package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +34 -18
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +16 -6
- package/dist/esm/router/domains/signingOperations/authorizedOperationWire.js +73 -0
- package/dist/esm/router/domains/signingOperations/ecdsaSigningResponse.js +31 -0
- package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +2 -1
- package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +31 -121
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +2 -93
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +1 -1
- package/dist/esm/router/domains/signingOperations/signingPrepareSession.js +33 -0
- package/dist/esm/router/domains/walletRegistration/registrationSessionSeal.js +121 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +4 -4
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +46 -157
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +1 -1
- package/dist/esm/router/express.js +764 -894
- package/dist/esm/router/framework/http.js +2 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +2 -2
- package/dist/esm/router/transport/fetch/routes/auth.js +1 -1
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +3 -3
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +2 -2
- package/dist/esm/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.js +65 -0
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +13 -3
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +3 -3
- package/dist/esm/router/transport/fetch/routes/sessions.js +3 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +67 -130
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +76 -212
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +18 -41
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +6 -5
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +1 -1
- package/dist/esm/shared-ts/src/authorization/index.js +1 -1
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +2 -2
- package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +12 -2
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/index.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/parsers.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +1 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +2 -2
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +4 -2
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +0 -27
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
- package/dist/types/wallet-server/src/authorization/domain.d.ts +17 -1
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +1 -0
- package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.d.ts +35 -0
- package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +43 -5
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +7 -3
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +2 -1
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +19 -5
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +1 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +6 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +1 -0
- package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +17 -0
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -0
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +1 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +5 -1
- package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +1 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +14 -48
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +4 -3
- package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +1 -16
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +1 -1
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +7 -1
- package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +11 -3
- package/dist/types/wallet-server/src/router/auth/walletRegistrationContext.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1EmailOtpRouteService.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +7 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +4 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +32 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.d.ts +15 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +6 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +4 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpCounters.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +6 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +21 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +17 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +32 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +16 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +41 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletOperationStore.d.ts +28 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +6 -9
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.d.ts +17 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +43 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +24 -45
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +9 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +42 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +24 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +10 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/authorizationSnapshotLayout.d.ts +21 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +3 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.d.ts +29 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.d.ts +31 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.d.ts +49 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.d.ts +47 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.d.ts +25 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwner.d.ts +88 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.d.ts +37 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.d.ts +18 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationSessions.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/walletObjectAddresses.d.ts +14 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.d.ts +21 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +3 -3
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletObjectAddresses.d.ts +45 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletPlacementRoutes.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationDeriver.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEcdsa.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEd25519.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationOps.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationPresign.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationSource.d.ts +26 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +5 -0
- package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +3 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +7 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +41 -7
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +33 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +12 -6
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +17 -9
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +13 -14
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +7 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +6 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +11 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +10 -6
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +10 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +12 -5
- package/dist/types/wallet-server/src/router/domains/signingOperations/authorizedOperationWire.d.ts +97 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/ecdsaSigningResponse.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +9 -206
- package/dist/types/wallet-server/src/router/domains/signingOperations/signingPrepareSession.d.ts +23 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/registrationSessionSeal.d.ts +36 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +7 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +80 -6
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +15 -5
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +24 -0
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +21 -7
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +3 -12
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.d.ts +37 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +1 -17
- package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +1 -1
- package/migrations/d1-signer/0049_wallet_relocation_challenges.sql +16 -0
- package/migrations/d1-signer/0050_wallet_relocation_approvals.sql +14 -0
- package/migrations/d1-signer/0051_wallet_relocation_email_otp.sql +92 -0
- package/migrations/d1-signer/0052_wallet_relocation_session_fences.sql +91 -0
- package/migrations/d1-signer/0053_wallet_hosted_history_import.sql +164 -0
- package/migrations/d1-signer/0054_wallet_authorization_freeze.sql +318 -0
- package/migrations/d1-signer/0055_wallet_authorization_snapshot.sql +120 -0
- package/migrations/d1-signer/0056_wallet_authorization_history_import.sql +424 -0
- package/migrations/d1-signer/0057_wallet_authorization_intake.sql +44 -0
- package/migrations/d1-signer/0058_wallet_ceremony_activity.sql +59 -0
- package/migrations/d1-signer/0059_wallet_authorization_activation.sql +45 -0
- package/migrations/d1-signer/0060_wallet_authorization_cleanup.sql +153 -0
- package/migrations/d1-signer/0061_wallet_session_operation_settlement.sql +28 -0
- package/migrations/d1-signer/0062_wallet_step_up_operation_settlement.sql +204 -0
- package/migrations/d1-signer/0063_wallet_operation_history_transfer.sql +466 -0
- package/migrations/d1-signer/0064_wallet_execution_generations.sql +93 -0
- package/migrations/d1-signer/0065_wallet_operation_execution_generation.sql +37 -0
- package/migrations/d1-signer/0066_regional_deployment_admission.sql +59 -0
- package/migrations/d1-signer/0067_registration_completion_decision.sql +12 -0
- package/migrations/d1-signer/0068_registration_cancellation_write_fence.sql +24 -0
- package/migrations/d1-signer/0069_cancelled_registration_session_fence.sql +11 -0
- package/migrations/d1-signer/0070_wallet_passkey_relocation.sql +369 -0
- package/migrations/d1-signer/0071_regional_wallet_otp_counters.sql +98 -0
- package/migrations/d1-signer/0072_linked_device_relocation_history.sql +899 -0
- package/migrations/d1-signer/0073_wallet_recovery_relocation.sql +86 -0
- package/migrations/d1-signer/0074_email_otp_relocation.sql +158 -0
- package/migrations/d1-signer/0075_wallet_authorization_return.sql +107 -0
- package/migrations/d1-signer/0076_wallet_relocation_write_block.sql +406 -0
- package/migrations/d1-signer/0077_wallet_object_addresses.sql +24 -0
- package/package.json +1 -1
- package/src/README.md +23 -1
- package/cloudflare-router-ab/scripts/local-key-material.mjs +0 -29
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseWalletId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
1
2
|
import { NEAR_ED25519_MPC_OPERATION_KINDS } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
2
3
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
4
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
@@ -344,6 +345,32 @@ async function authorizeRecoveryContinuation(input) {
|
|
|
344
345
|
}
|
|
345
346
|
};
|
|
346
347
|
}
|
|
348
|
+
async function authorizeRecoveryCredential(input, services) {
|
|
349
|
+
switch (input.kind) {
|
|
350
|
+
case "bootstrap": return await authorizeV2WarmBootstrap({
|
|
351
|
+
request: input,
|
|
352
|
+
services
|
|
353
|
+
});
|
|
354
|
+
case "admit":
|
|
355
|
+
if (String(input.request.headers.get("x-seams-wallet-recovery-challenge-id") || "").trim()) return await authorizePreparedRecovery({
|
|
356
|
+
request: input,
|
|
357
|
+
services
|
|
358
|
+
});
|
|
359
|
+
if (extractBearerCredential(input.request.headers)) return await authorizeV2RecoveryAdmission({
|
|
360
|
+
request: input,
|
|
361
|
+
services
|
|
362
|
+
});
|
|
363
|
+
return await authorizePreparedRecovery({
|
|
364
|
+
request: input,
|
|
365
|
+
services
|
|
366
|
+
});
|
|
367
|
+
case "execute":
|
|
368
|
+
case "activate": return await authorizeRecoveryContinuation({
|
|
369
|
+
request: input,
|
|
370
|
+
services
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
347
374
|
var RouterAbEd25519YaoRecoveryWalletSessionAuthorizationAdapter = class {
|
|
348
375
|
constructor(resolveServices) {
|
|
349
376
|
this.resolveServices = resolveServices;
|
|
@@ -359,30 +386,52 @@ var RouterAbEd25519YaoRecoveryWalletSessionAuthorizationAdapter = class {
|
|
|
359
386
|
message: "wallet recovery admission is unavailable"
|
|
360
387
|
});
|
|
361
388
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
389
|
+
const credential = await authorizeRecoveryCredential(input, services);
|
|
390
|
+
if (!credential.ok) return credential;
|
|
391
|
+
const authorization = credential.authorization;
|
|
392
|
+
if (input.kind === "execute" || input.kind === "activate") return {
|
|
393
|
+
ok: true,
|
|
394
|
+
ownershipGeneration: input.ownershipGeneration,
|
|
395
|
+
authorization
|
|
396
|
+
};
|
|
397
|
+
let walletIdentity;
|
|
398
|
+
switch (authorization.kind) {
|
|
399
|
+
case "wallet_recovery":
|
|
400
|
+
walletIdentity = authorization.walletId;
|
|
401
|
+
break;
|
|
402
|
+
case "wallet_session_v2":
|
|
403
|
+
walletIdentity = authorization.context.authorization.session.walletId;
|
|
404
|
+
break;
|
|
405
|
+
case "wallet_session_v2_exhausted_candidate":
|
|
406
|
+
walletIdentity = authorization.context.status.session.walletId;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
const walletId = parseWalletId(walletIdentity);
|
|
410
|
+
if (!walletId.ok) return authorizationFailure({
|
|
411
|
+
status: 403,
|
|
412
|
+
code: "wallet_recovery_scope_mismatch",
|
|
413
|
+
message: "Recovery wallet identity is invalid"
|
|
414
|
+
});
|
|
415
|
+
let home;
|
|
416
|
+
try {
|
|
417
|
+
home = await services.admitEstablishedHome({ walletId: walletId.value });
|
|
418
|
+
} catch {
|
|
419
|
+
return authorizationFailure({
|
|
420
|
+
status: 503,
|
|
421
|
+
code: "wallet_home_unavailable",
|
|
422
|
+
message: "Recovery wallet home is unavailable"
|
|
384
423
|
});
|
|
385
424
|
}
|
|
425
|
+
if (!home.ok) return authorizationFailure({
|
|
426
|
+
status: 409,
|
|
427
|
+
code: home.code,
|
|
428
|
+
message: home.message
|
|
429
|
+
});
|
|
430
|
+
return {
|
|
431
|
+
ok: true,
|
|
432
|
+
ownershipGeneration: home.ownershipGeneration,
|
|
433
|
+
authorization
|
|
434
|
+
};
|
|
386
435
|
}
|
|
387
436
|
};
|
|
388
437
|
//#endregion
|
package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { requireRecord } from "../../../../shared-ts/src/utils/validation.js";
|
|
2
2
|
import { deriveRouterAbEd25519YaoStableContextBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519YaoDigests.js";
|
|
3
3
|
import { parseRouterAbEd25519YaoActivationKeysetV1, parseRouterAbEd25519YaoActivationResultV1, parseRouterAbEd25519YaoExportResultV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
4
|
+
import { walletObjectIdentity, walletObjectIdentityHeaders } from "../../../cloudflare/runtime/walletObjectAddresses.js";
|
|
4
5
|
import { createRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
5
|
-
import { routerAbEd25519YaoTenantRootWireV1 } from "../routerAbEd25519YaoGatewayEnvelope.js";
|
|
6
|
+
import { routerAbEd25519YaoRegistrationSigningRootIdV1, routerAbEd25519YaoTenantRootWireV1 } from "../routerAbEd25519YaoGatewayEnvelope.js";
|
|
6
7
|
//#region src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.ts
|
|
7
8
|
const INTERNAL_AUTH_HEADER = "x-router-ab-internal-service-auth";
|
|
8
9
|
const TRACE_ID_HEADER = "x-seams-trace-id";
|
|
@@ -216,6 +217,7 @@ function registrationRouterExecuteRequest(input, tenantRoot) {
|
|
|
216
217
|
participant_ids: input.admissionRequest.participant_ids,
|
|
217
218
|
target: {
|
|
218
219
|
operation: "registration",
|
|
220
|
+
ownership_generation: input.ownershipGeneration,
|
|
219
221
|
binding: input.request.binding,
|
|
220
222
|
deriver_a_input: input.request.deriver_a_input,
|
|
221
223
|
deriver_b_input: input.request.deriver_b_input
|
|
@@ -229,6 +231,7 @@ function recoveryRouterExecuteRequest(input, tenantRoot, attempt) {
|
|
|
229
231
|
participant_ids: input.admissionRequest.participant_ids,
|
|
230
232
|
target: {
|
|
231
233
|
operation: "recovery",
|
|
234
|
+
ownership_generation: input.ownershipGeneration,
|
|
232
235
|
binding: input.request.binding,
|
|
233
236
|
attempt,
|
|
234
237
|
deriver_a_input: input.request.deriver_a_input,
|
|
@@ -241,7 +244,7 @@ async function routerExecuteRequest(input, resolveTenantRoot) {
|
|
|
241
244
|
switch (input.operation) {
|
|
242
245
|
case "registration": return registrationRouterExecuteRequest(input, await routerAbEd25519YaoTenantRootWireV1(await resolveTenantRoot({
|
|
243
246
|
operation: "registration",
|
|
244
|
-
|
|
247
|
+
...routerAbEd25519YaoRegistrationSigningRootIdV1(input.admissionRequest)
|
|
245
248
|
})));
|
|
246
249
|
case "export": return {
|
|
247
250
|
tenant_root: await routerAbEd25519YaoTenantRootWireV1(await resolveTenantRoot({
|
|
@@ -252,6 +255,7 @@ async function routerExecuteRequest(input, resolveTenantRoot) {
|
|
|
252
255
|
participant_ids: input.admissionRequest.participant_ids,
|
|
253
256
|
target: {
|
|
254
257
|
operation: "export",
|
|
258
|
+
ownership_generation: input.ownershipGeneration,
|
|
255
259
|
binding: input.request.binding,
|
|
256
260
|
deriver_a_input: input.request.deriver_a_input,
|
|
257
261
|
deriver_b_input: input.request.deriver_b_input
|
|
@@ -458,11 +462,12 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
458
462
|
}
|
|
459
463
|
};
|
|
460
464
|
}
|
|
461
|
-
async executeExport(request,
|
|
465
|
+
async executeExport(request, claim, traceContext) {
|
|
462
466
|
return await this.executeRouterRequest({
|
|
463
467
|
operation: "export",
|
|
464
468
|
request,
|
|
465
|
-
admissionRequest
|
|
469
|
+
admissionRequest: claim.admissionRequest,
|
|
470
|
+
ownershipGeneration: claim.ownershipGeneration
|
|
466
471
|
}, false, traceContext);
|
|
467
472
|
}
|
|
468
473
|
keyset() {
|
|
@@ -529,34 +534,37 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
529
534
|
};
|
|
530
535
|
}
|
|
531
536
|
}
|
|
532
|
-
async execute(request, admissionRequest, traceContext) {
|
|
537
|
+
async execute(request, admissionRequest, ownershipGeneration, traceContext) {
|
|
533
538
|
return await this.executeRouterRequest({
|
|
534
539
|
operation: "registration",
|
|
535
540
|
request,
|
|
536
|
-
admissionRequest
|
|
541
|
+
admissionRequest,
|
|
542
|
+
ownershipGeneration
|
|
537
543
|
}, false, traceContext);
|
|
538
544
|
}
|
|
539
|
-
async resolveRegistrationDispatchRoot(
|
|
545
|
+
async resolveRegistrationDispatchRoot(signingRootId) {
|
|
540
546
|
return await routerAbEd25519YaoTenantRootWireV1(await this.config.resolveTenantRoot({
|
|
541
547
|
operation: "registration",
|
|
542
|
-
|
|
548
|
+
...signingRootId
|
|
543
549
|
}));
|
|
544
550
|
}
|
|
545
|
-
async executePinnedRegistration(request,
|
|
551
|
+
async executePinnedRegistration(request, authority, traceContext) {
|
|
546
552
|
const routerInput = {
|
|
547
553
|
operation: "registration",
|
|
548
554
|
request,
|
|
549
|
-
admissionRequest
|
|
555
|
+
admissionRequest: authority.admissionRequest,
|
|
556
|
+
ownershipGeneration: authority.ownershipGeneration
|
|
550
557
|
};
|
|
551
|
-
return await this.sendRouterRequest(routerInput, registrationRouterExecuteRequest(routerInput, dispatchRoot), traceContext.value, "exact", false);
|
|
558
|
+
return await this.sendRouterRequest(routerInput, registrationRouterExecuteRequest(routerInput, authority.dispatchRoot), traceContext.value, "exact", false);
|
|
552
559
|
}
|
|
553
560
|
async consumeRegistration(input) {
|
|
554
561
|
let response;
|
|
555
562
|
try {
|
|
556
|
-
response = await this.post(ROUTER_REGISTRATION_CONSUME_PATH, {
|
|
557
|
-
tenant_root: input.
|
|
558
|
-
|
|
559
|
-
|
|
563
|
+
response = await this.post(ROUTER_REGISTRATION_CONSUME_PATH, walletObjectIdentity(input.authority.admissionReceipt.binding.lifecycle.account_id, input.authority.ownershipGeneration, input.authority.dispatchRoot.identity), {
|
|
564
|
+
tenant_root: input.authority.dispatchRoot,
|
|
565
|
+
ownership_generation: input.authority.ownershipGeneration,
|
|
566
|
+
wallet_id: input.authority.admissionReceipt.binding.lifecycle.account_id,
|
|
567
|
+
lifecycle_id: input.authority.lifecycleId,
|
|
560
568
|
session_id: Array.from(input.sessionId),
|
|
561
569
|
consumer_binding: input.consumerBinding
|
|
562
570
|
}, createRouterAbTraceContextV1().value, "exact");
|
|
@@ -578,13 +586,14 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
578
586
|
admissionRequest
|
|
579
587
|
}));
|
|
580
588
|
}
|
|
581
|
-
async executeRecovery(request,
|
|
589
|
+
async executeRecovery(request, claim, traceContext) {
|
|
582
590
|
const routerInput = {
|
|
583
591
|
operation: "recovery",
|
|
584
592
|
request,
|
|
585
|
-
admissionRequest
|
|
593
|
+
admissionRequest: claim.admissionRequest,
|
|
594
|
+
ownershipGeneration: claim.ownershipGeneration
|
|
586
595
|
};
|
|
587
|
-
return await this.sendRouterRequest(routerInput, recoveryRouterExecuteRequest(routerInput, dispatchRoot, attempt), (traceContext ?? createRouterAbTraceContextV1()).value, "replay", replay);
|
|
596
|
+
return await this.sendRouterRequest(routerInput, recoveryRouterExecuteRequest(routerInput, claim.dispatchRoot, claim.attempt), (traceContext ?? createRouterAbTraceContextV1()).value, "replay", claim.replay);
|
|
588
597
|
}
|
|
589
598
|
async executeRouterRequest(request, replay, traceContext) {
|
|
590
599
|
const traceId = (traceContext ?? createRouterAbTraceContextV1()).value;
|
|
@@ -604,7 +613,7 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
604
613
|
const operation = request.operation;
|
|
605
614
|
const executeStartedAt = performance.now();
|
|
606
615
|
try {
|
|
607
|
-
const response = await this.post(ROUTER_EXECUTE_PATH, routerRequest, traceId, retryAfterTransportFailure, replay);
|
|
616
|
+
const response = await this.post(ROUTER_EXECUTE_PATH, walletObjectIdentity(request.admissionRequest.application_binding.wallet_id, request.ownershipGeneration, routerRequest.tenant_root.identity), routerRequest, traceId, retryAfterTransportFailure, replay);
|
|
608
617
|
this.lastRouterServerTiming = response.ok ? response.serverTiming : null;
|
|
609
618
|
const result = response.ok ? parseRouterExecuteResult(response.body, request.request) : response;
|
|
610
619
|
emitGatewaySpan(this.config.onSpan, "gateway.yao_execute", operation, traceId, executeStartedAt, result.ok ? "success" : "failure");
|
|
@@ -614,10 +623,11 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
614
623
|
return unavailableFailure(error);
|
|
615
624
|
}
|
|
616
625
|
}
|
|
617
|
-
async activateRecovery(request, dispatchRoot, traceContext) {
|
|
618
|
-
const promoted = await this.post(ROUTER_RECOVERY_PROMOTE_PATH, {
|
|
626
|
+
async activateRecovery(request, dispatchRoot, ownershipGeneration, traceContext) {
|
|
627
|
+
const promoted = await this.post(ROUTER_RECOVERY_PROMOTE_PATH, walletObjectIdentity(request.binding.lifecycle.account_id, ownershipGeneration, dispatchRoot.identity), {
|
|
619
628
|
...request,
|
|
620
|
-
tenant_root: dispatchRoot
|
|
629
|
+
tenant_root: dispatchRoot,
|
|
630
|
+
ownership_generation: ownershipGeneration
|
|
621
631
|
}, (traceContext ?? createRouterAbTraceContextV1()).value);
|
|
622
632
|
if (!promoted.ok) return promoted;
|
|
623
633
|
if (!activeReceiptMatchesRecoveryActivation(parseActiveSigningWorkerReceipt(promoted.body, request.binding.session_id, request.public_receipt.transcript), request)) return internalFailure("recovery_promotion_mismatch", "Router promotion receipt does not match the verified recovery result");
|
|
@@ -626,10 +636,13 @@ var RouterAbEd25519YaoHttpRegistrationBackend = class {
|
|
|
626
636
|
body: request
|
|
627
637
|
};
|
|
628
638
|
}
|
|
629
|
-
async post(path, body, traceId, retryAfterTransportFailure = "none", replay = false) {
|
|
639
|
+
async post(path, identity, body, traceId, retryAfterTransportFailure = "none", replay = false) {
|
|
630
640
|
const init = {
|
|
631
641
|
method: "POST",
|
|
632
|
-
headers:
|
|
642
|
+
headers: {
|
|
643
|
+
...this.headers(traceId),
|
|
644
|
+
...walletObjectIdentityHeaders(identity)
|
|
645
|
+
},
|
|
633
646
|
body: JSON.stringify(body)
|
|
634
647
|
};
|
|
635
648
|
return await this.request(this.config.routerUrl, path, replay ? requestInitWithReplayHeader(init) : init, retryAfterTransportFailure);
|
|
@@ -669,7 +682,6 @@ function parseRouterServerTiming(value) {
|
|
|
669
682
|
const metrics = value.split(",").map((metric) => metric.trim());
|
|
670
683
|
const allowedNames = new Set([
|
|
671
684
|
"yao_router_prepare_pair",
|
|
672
|
-
"yao_router_verify_readiness",
|
|
673
685
|
"yao_router_role_execution",
|
|
674
686
|
"yao_router_signing_worker_delivery"
|
|
675
687
|
]);
|
|
@@ -187,7 +187,7 @@ var RouterAbEd25519YaoRegistrationRouteExtension = class {
|
|
|
187
187
|
body: parsed.value
|
|
188
188
|
});
|
|
189
189
|
if (!authorization.ok) return routeFailureResponse(authorization);
|
|
190
|
-
const result = await this.service.execute(parsed.value, traceContext.value);
|
|
190
|
+
const result = await this.service.execute(parsed.value, authorization.ownershipGeneration, traceContext.value);
|
|
191
191
|
if (!result.ok) return routeFailureResponse(result);
|
|
192
192
|
return json(result.value, { status: result.status });
|
|
193
193
|
}
|
|
@@ -324,7 +324,7 @@ var InMemoryRouterAbEd25519YaoRegistrationService = class {
|
|
|
324
324
|
value: parsed.value
|
|
325
325
|
};
|
|
326
326
|
}
|
|
327
|
-
async execute(request, traceContext) {
|
|
327
|
+
async execute(request, ownershipGeneration, traceContext) {
|
|
328
328
|
const preparation = this.prepareExecute(request);
|
|
329
329
|
switch (preparation.kind) {
|
|
330
330
|
case "completed": return {
|
|
@@ -338,7 +338,7 @@ var InMemoryRouterAbEd25519YaoRegistrationService = class {
|
|
|
338
338
|
try {
|
|
339
339
|
outcome = {
|
|
340
340
|
kind: "backend_response",
|
|
341
|
-
result: await this.backend.execute(request, preparation.claim.admissionRequest, traceContext)
|
|
341
|
+
result: await this.backend.execute(request, preparation.claim.admissionRequest, ownershipGeneration, traceContext)
|
|
342
342
|
};
|
|
343
343
|
} catch (error) {
|
|
344
344
|
outcome = {
|
|
@@ -9,8 +9,9 @@ import { routerAbEd25519YaoCredentialDigestHexV1 } from "./routerAbEd25519YaoReg
|
|
|
9
9
|
*/
|
|
10
10
|
function buildRouterAbEd25519YaoRegistrationExecutionAuthorityV1(input) {
|
|
11
11
|
const { lifecycleId, registration, authority, dispatchRoot } = input;
|
|
12
|
-
if (dispatchRoot === void 0 || dispatchRoot.identity.signingRootId !== registration.admissionRequest.application_binding.signing_root_id || dispatchRoot.identity.signingRootVersion !== registration.admissionRequest.scope.root_share_epoch || registration.admissionRequest.scope.lifecycle_id !== lifecycleId || registration.admissionReceipt.binding.lifecycle.lifecycle_id !== lifecycleId || authority.admissionRequest.scope.lifecycle_id !== lifecycleId || authority.admissionFingerprint !== encodeRouterAbEd25519YaoRegistrationAdmissionFingerprintV1(authority.admissionRequest) || authority.admissionFingerprint !== encodeRouterAbEd25519YaoRegistrationAdmissionFingerprintV1(registration.admissionRequest) || !Number.isSafeInteger(authority.expiresAtMs) || authority.expiresAtMs <= 0) return null;
|
|
12
|
+
if (!Number.isSafeInteger(authority.ownershipGeneration) || authority.ownershipGeneration < 1 || dispatchRoot === void 0 || dispatchRoot.identity.signingRootId !== registration.admissionRequest.application_binding.signing_root_id || dispatchRoot.identity.signingRootVersion !== registration.admissionRequest.scope.root_share_epoch || registration.admissionRequest.scope.lifecycle_id !== lifecycleId || registration.admissionReceipt.binding.lifecycle.lifecycle_id !== lifecycleId || authority.admissionRequest.scope.lifecycle_id !== lifecycleId || authority.admissionFingerprint !== encodeRouterAbEd25519YaoRegistrationAdmissionFingerprintV1(authority.admissionRequest) || authority.admissionFingerprint !== encodeRouterAbEd25519YaoRegistrationAdmissionFingerprintV1(registration.admissionRequest) || !Number.isSafeInteger(authority.expiresAtMs) || authority.expiresAtMs <= 0) return null;
|
|
13
13
|
return {
|
|
14
|
+
ownershipGeneration: authority.ownershipGeneration,
|
|
14
15
|
lifecycleId,
|
|
15
16
|
admissionRequest: registration.admissionRequest,
|
|
16
17
|
admissionReceipt: registration.admissionReceipt,
|
|
@@ -180,6 +180,7 @@ function admittedAuthority(authority) {
|
|
|
180
180
|
return {
|
|
181
181
|
kind: "admitted",
|
|
182
182
|
purpose: authority.purpose,
|
|
183
|
+
ownershipGeneration: authority.ownershipGeneration,
|
|
183
184
|
credentialDigestSha256: authority.credentialDigestSha256,
|
|
184
185
|
admissionRequest: authority.admissionRequest,
|
|
185
186
|
admissionFingerprint: authority.admissionFingerprint,
|
|
@@ -217,6 +218,7 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
217
218
|
this.authorities = state.authorities;
|
|
218
219
|
}
|
|
219
220
|
async bindVerifiedIntent(verified) {
|
|
221
|
+
if (!Number.isSafeInteger(verified.ownershipGeneration) || verified.ownershipGeneration < 1) return failure("invalid_registration_intent", "Wallet ownership generation is invalid");
|
|
220
222
|
const credential = activationIntentCredential(verified);
|
|
221
223
|
if (!VERIFIED_INTENT_CREDENTIAL.test(credential)) return failure("invalid_registration_intent", "registration intent grant is not a canonical Bearer credential");
|
|
222
224
|
if (!Number.isSafeInteger(verified.expiresAtMs) || verified.expiresAtMs <= Date.now()) return failure("invalid_registration_intent", "registration intent authority is expired");
|
|
@@ -229,7 +231,7 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
229
231
|
const existingLifecycle = findAuthorityByLifecycleId(this.authorities, verified.admissionRequest.scope.lifecycle_id);
|
|
230
232
|
if (existingCredential || existingLifecycle) {
|
|
231
233
|
const existing = existingCredential?.authority ?? existingLifecycle?.authority;
|
|
232
|
-
const exactRetry = existing !== void 0 && existing.purpose === purpose && credentialDigestsEqual(existing.credentialDigestSha256, credentialDigest) && (existing.admissionFingerprint === admissionFingerprint || purpose === "wallet_registration" && sameAdmissionSubject(existing.admissionRequest, copiedAdmissionRequest)) && existing.expiresAtMs === verified.expiresAtMs;
|
|
234
|
+
const exactRetry = existing !== void 0 && existing.purpose === purpose && existing.ownershipGeneration === verified.ownershipGeneration && credentialDigestsEqual(existing.credentialDigestSha256, credentialDigest) && (existing.admissionFingerprint === admissionFingerprint || purpose === "wallet_registration" && sameAdmissionSubject(existing.admissionRequest, copiedAdmissionRequest)) && existing.expiresAtMs === verified.expiresAtMs;
|
|
233
235
|
credentialDigest.fill(0);
|
|
234
236
|
return exactRetry ? {
|
|
235
237
|
ok: true,
|
|
@@ -238,6 +240,7 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
238
240
|
}
|
|
239
241
|
this.authorities.push({
|
|
240
242
|
kind: "available",
|
|
243
|
+
ownershipGeneration: verified.ownershipGeneration,
|
|
241
244
|
purpose,
|
|
242
245
|
credentialDigestSha256: credentialDigest,
|
|
243
246
|
admissionRequest: copiedAdmissionRequest,
|
|
@@ -255,6 +258,7 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
255
258
|
this.authorities[existing.index] = {
|
|
256
259
|
kind: existing.authority.kind,
|
|
257
260
|
purpose: existing.authority.purpose,
|
|
261
|
+
ownershipGeneration: existing.authority.ownershipGeneration,
|
|
258
262
|
admissionRequest: existing.authority.admissionRequest,
|
|
259
263
|
admissionFingerprint: existing.authority.admissionFingerprint,
|
|
260
264
|
credentialDigestSha256: await credentialDigestSha256(verified.credential),
|
|
@@ -265,6 +269,17 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
265
269
|
admissionRequest: copyAdmissionRequest(existing.authority.admissionRequest)
|
|
266
270
|
};
|
|
267
271
|
}
|
|
272
|
+
async bindAndAuthorizeAdmission(input) {
|
|
273
|
+
const bound = await this.bindVerifiedIntent(input);
|
|
274
|
+
if (!bound.ok) return bound;
|
|
275
|
+
const digest = await credentialDigestSha256(input.kind === "verified_registration_intent" ? input.registrationIntentGrant : input.addSignerIntentGrant);
|
|
276
|
+
try {
|
|
277
|
+
const authorized = this.authorizeAdmission(bound.admissionRequest, digest);
|
|
278
|
+
return authorized.ok ? bound : authorized;
|
|
279
|
+
} finally {
|
|
280
|
+
digest.fill(0);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
268
283
|
async authorize(input) {
|
|
269
284
|
const bearer = extractStrictBearerCredential(input.request);
|
|
270
285
|
if (!bearer.ok) return bearer.result;
|
|
@@ -296,7 +311,10 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
296
311
|
message: "registration intent credential does not authorize this admission subject"
|
|
297
312
|
});
|
|
298
313
|
if (matched.authority.kind === "available") this.authorities[matched.index] = admittedAuthority(matched.authority);
|
|
299
|
-
return {
|
|
314
|
+
return {
|
|
315
|
+
ok: true,
|
|
316
|
+
ownershipGeneration: matched.authority.ownershipGeneration
|
|
317
|
+
};
|
|
300
318
|
}
|
|
301
319
|
async authorizeExecution(binding, credentialDigest) {
|
|
302
320
|
const matched = findAuthorityByLifecycleId(this.authorities, binding.lifecycle.lifecycle_id);
|
|
@@ -331,7 +349,10 @@ var InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter = class {
|
|
|
331
349
|
code: "registration_intent_binding_mismatch",
|
|
332
350
|
message: "registration execution context does not match its admitted application"
|
|
333
351
|
});
|
|
334
|
-
return {
|
|
352
|
+
return {
|
|
353
|
+
ok: true,
|
|
354
|
+
ownershipGeneration: matched.authority.ownershipGeneration
|
|
355
|
+
};
|
|
335
356
|
}
|
|
336
357
|
};
|
|
337
358
|
//#endregion
|
|
@@ -4,6 +4,7 @@ import { json, readJson } from "../../../framework/http.js";
|
|
|
4
4
|
import { InMemoryRouterAbEd25519YaoRegistrationService, routerAbEd25519YaoExecutionMatchesAdmissionV1 } from "./routerAbEd25519YaoRegistration.js";
|
|
5
5
|
import { InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, routerAbEd25519YaoBearerCredentialDigestV1 } from "./routerAbEd25519YaoRegistrationIntentAuthorization.js";
|
|
6
6
|
import { pinRouterAbEd25519YaoRegistrationDispatchRootV1, routerAbEd25519YaoRegistrationResultFromRouterAnswerV1 } from "./routerAbEd25519YaoRegistrationExecutionRecord.js";
|
|
7
|
+
import { routerAbEd25519YaoRegistrationSigningRootIdV1 } from "../routerAbEd25519YaoGatewayEnvelope.js";
|
|
7
8
|
import { routerAbEd25519YaoAdmittedRegistrationAuthorityV1 } from "../capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js";
|
|
8
9
|
import { runRouterAbEd25519YaoRegistrationTwoPhaseV1 } from "./routerAbEd25519YaoRegistrationTwoPhaseRunner.js";
|
|
9
10
|
//#region src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.ts
|
|
@@ -109,7 +110,7 @@ async function runAdmissionRequest(input, request, trace) {
|
|
|
109
110
|
};
|
|
110
111
|
case "claimed":
|
|
111
112
|
try {
|
|
112
|
-
dispatchRoot = await input.backend.resolveRegistrationDispatchRoot(request);
|
|
113
|
+
dispatchRoot = await input.backend.resolveRegistrationDispatchRoot(routerAbEd25519YaoRegistrationSigningRootIdV1(request));
|
|
113
114
|
} catch (error) {
|
|
114
115
|
return {
|
|
115
116
|
kind: "rejected",
|
|
@@ -183,7 +184,7 @@ async function runExecutionRequest(input, request, trace) {
|
|
|
183
184
|
};
|
|
184
185
|
if (!credential.ok) return timedExecutionResult(credential.result, timing);
|
|
185
186
|
const admissionStartedAt = performance.now();
|
|
186
|
-
const authority = routerAbEd25519YaoAdmittedRegistrationAuthorityV1((await input.store.
|
|
187
|
+
const authority = routerAbEd25519YaoAdmittedRegistrationAuthorityV1((await input.store.loadRegistration(lifecycleId)).state, lifecycleId);
|
|
187
188
|
const timingBeforeRouter = {
|
|
188
189
|
...timing,
|
|
189
190
|
d1AdmissionReadMs: elapsedMs(admissionStartedAt)
|
|
@@ -195,7 +196,7 @@ async function runExecutionRequest(input, request, trace) {
|
|
|
195
196
|
let backend;
|
|
196
197
|
const routerExecutionStartedAt = performance.now();
|
|
197
198
|
try {
|
|
198
|
-
backend = await input.backend.executePinnedRegistration(request, authority
|
|
199
|
+
backend = await input.backend.executePinnedRegistration(request, authority, trace);
|
|
199
200
|
} catch (error) {
|
|
200
201
|
return timedExecutionResult({
|
|
201
202
|
ok: false,
|
|
@@ -104,13 +104,16 @@ function parseRouterAbEd25519YaoRegistrationSideEffectClaimFields(record, parseP
|
|
|
104
104
|
* or allowing a network effect.
|
|
105
105
|
*/
|
|
106
106
|
async function runRouterAbEd25519YaoRegistrationSideEffectV1(store, input) {
|
|
107
|
+
return runRegistrationSideEffect(store, input, store.read.bind(store));
|
|
108
|
+
}
|
|
109
|
+
async function runRegistrationSideEffect(store, input, readInitial) {
|
|
107
110
|
const key = requireOpaqueKey(input.key);
|
|
108
111
|
const requestFingerprint = requireRequestFingerprint(input.requestFingerprint);
|
|
109
112
|
const resumeAfterMs = requirePositiveDuration(input.resumeAfterMs, "resumeAfterMs");
|
|
110
113
|
let existing;
|
|
111
114
|
let disposition;
|
|
112
115
|
try {
|
|
113
|
-
existing = await
|
|
116
|
+
existing = await readInitial(key);
|
|
114
117
|
disposition = await existingDisposition(existing, requestFingerprint, input.derivePreparedArtifactFingerprint);
|
|
115
118
|
} catch (error) {
|
|
116
119
|
return uncertainResult("claim", error);
|
|
@@ -233,7 +236,8 @@ async function runRouterAbEd25519YaoRegistrationSideEffectV1(store, input) {
|
|
|
233
236
|
* from its digest, so replay never reconstructs one.
|
|
234
237
|
*/
|
|
235
238
|
async function runRouterAbEd25519YaoRegistrationSideEffectV2(store, input) {
|
|
236
|
-
const
|
|
239
|
+
const adaptedStore = new RegistrationV2StoreAdapter(store, input.initialRecord, input.projectReceipt, input.completionWrite);
|
|
240
|
+
const result = await runRegistrationSideEffect(adaptedStore, {
|
|
237
241
|
kind: input.kind,
|
|
238
242
|
operation: input.operation,
|
|
239
243
|
key: input.key,
|
|
@@ -246,7 +250,7 @@ async function runRouterAbEd25519YaoRegistrationSideEffectV2(store, input) {
|
|
|
246
250
|
kind: "executed_response",
|
|
247
251
|
response: await input.execute(prepared, attempt)
|
|
248
252
|
})
|
|
249
|
-
});
|
|
253
|
+
}, adaptedStore.readInitial.bind(adaptedStore));
|
|
250
254
|
switch (result.kind) {
|
|
251
255
|
case "executed":
|
|
252
256
|
if (result.value.kind !== "executed_response") return {
|
|
@@ -280,12 +284,19 @@ async function resolveRegistrationV2AdapterReplay(value, input) {
|
|
|
280
284
|
}
|
|
281
285
|
}
|
|
282
286
|
var RegistrationV2StoreAdapter = class {
|
|
283
|
-
constructor(store, projectReceipt) {
|
|
287
|
+
constructor(store, initialRecord, projectReceipt, completionWrite) {
|
|
284
288
|
this.store = store;
|
|
289
|
+
this.initialRecord = initialRecord;
|
|
285
290
|
this.projectReceipt = projectReceipt;
|
|
291
|
+
this.completionWrite = completionWrite;
|
|
292
|
+
}
|
|
293
|
+
async readInitial() {
|
|
294
|
+
return this.adaptRead(this.initialRecord);
|
|
286
295
|
}
|
|
287
296
|
async read(key) {
|
|
288
|
-
|
|
297
|
+
return this.adaptRead(await this.store.read(key));
|
|
298
|
+
}
|
|
299
|
+
adaptRead(result) {
|
|
289
300
|
if (result.kind === "missing") return { kind: "missing" };
|
|
290
301
|
switch (result.value.kind) {
|
|
291
302
|
case "router_ab_ed25519_yao_registration_side_effect_claim_v1": return {
|
|
@@ -319,7 +330,7 @@ var RegistrationV2StoreAdapter = class {
|
|
|
319
330
|
case "router_ab_ed25519_yao_registration_side_effect_completion_v1": {
|
|
320
331
|
if (value.response.kind !== "executed_response") throw new Error("registration side-effect cannot persist a replay response");
|
|
321
332
|
const receipt = requireReceipt(await this.projectReceipt(value.response.response));
|
|
322
|
-
|
|
333
|
+
const completion = {
|
|
323
334
|
kind: "router_ab_ed25519_yao_registration_side_effect_completion_v2",
|
|
324
335
|
operation: value.operation,
|
|
325
336
|
requestFingerprint: value.requestFingerprint,
|
|
@@ -328,7 +339,9 @@ var RegistrationV2StoreAdapter = class {
|
|
|
328
339
|
completedAtMs: value.completedAtMs,
|
|
329
340
|
prepared: value.prepared,
|
|
330
341
|
receipt
|
|
331
|
-
}
|
|
342
|
+
};
|
|
343
|
+
const companionWrite = this.completionWrite(value.response.response);
|
|
344
|
+
return companionWrite ? await this.store.putWithCompanion(key, completion, expectedVersion, companionWrite) : await this.store.put(key, completion, expectedVersion);
|
|
332
345
|
}
|
|
333
346
|
default: return assertNever(value);
|
|
334
347
|
}
|
|
@@ -39,7 +39,13 @@ async function routerAbEd25519YaoTenantRootWireV1(root) {
|
|
|
39
39
|
custody_lineage_b64u: root.custodyLineageB64u
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
+
function routerAbEd25519YaoRegistrationSigningRootIdV1(admissionRequest) {
|
|
43
|
+
return {
|
|
44
|
+
signing_root_id: admissionRequest.application_binding.signing_root_id,
|
|
45
|
+
root_share_epoch: admissionRequest.scope.root_share_epoch
|
|
46
|
+
};
|
|
47
|
+
}
|
|
42
48
|
//#endregion
|
|
43
|
-
export { parseRouterAbEd25519YaoTenantRootWireV1, routerAbEd25519YaoTenantRootWireV1 };
|
|
49
|
+
export { parseRouterAbEd25519YaoTenantRootWireV1, routerAbEd25519YaoRegistrationSigningRootIdV1, routerAbEd25519YaoTenantRootWireV1 };
|
|
44
50
|
|
|
45
51
|
//# sourceMappingURL=routerAbEd25519YaoGatewayEnvelope.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
2
|
-
import "../../../shared-ts/src/utils/encoders.js";
|
|
3
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
4
2
|
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
3
|
+
import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
4
|
+
import "../../../shared-ts/src/utils/encoders.js";
|
|
5
5
|
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
6
6
|
import { emailOtpStatusCode } from "./emailOtpSessionRouteHelpers.js";
|
|
7
7
|
import { EMAIL_OTP_FACTOR_RELEASE_AAD_DOMAIN_V1 } from "../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
2
1
|
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
2
|
+
import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { decodeBase64UrlOrBase64 } from "../../../core/authService/webauthnOidcHelpers.js";
|
|
4
4
|
import { verifyWebAuthnAuthenticationLiteWithStore } from "../../../core/authService/webauthn.js";
|
|
5
5
|
//#region src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.ts
|
|
@@ -1,31 +1,47 @@
|
|
|
1
1
|
import { admitWalletCustodyRegistrationCommit } from "./walletCustodyRegistrationAdmission.js";
|
|
2
2
|
import { verifiedCustodyFactorFromAuthority } from "./verifiedCustodyFactor.js";
|
|
3
3
|
//#region src/router/domains/passkeyCustody/registrationCustodyOutcome.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
...input.verifiedEmailOtpEnrollment ? { emailOtpEnrollment: input.verifiedEmailOtpEnrollment } : {}
|
|
9
|
-
});
|
|
10
|
-
if (!factor.ok) return {
|
|
11
|
-
status: "rejected",
|
|
12
|
-
reason: factor.reason
|
|
13
|
-
};
|
|
4
|
+
/** Admits the custody payload and claims its routes. It never throws either. */
|
|
5
|
+
async function reserveRegistrationCustody(input) {
|
|
6
|
+
const payload = input.payload;
|
|
7
|
+
if (!payload) return settled({ status: "not_requested" });
|
|
14
8
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
const factor = verifiedCustodyFactorFromAuthority({
|
|
10
|
+
authority: input.verifiedAuthority,
|
|
11
|
+
...input.verifiedEmailOtpEnrollment ? { emailOtpEnrollment: input.verifiedEmailOtpEnrollment } : {}
|
|
12
|
+
});
|
|
13
|
+
if (!factor.ok) return settled({
|
|
14
|
+
status: "rejected",
|
|
15
|
+
reason: factor.reason
|
|
16
|
+
});
|
|
17
|
+
const admitted = await admitWalletCustodyRegistrationCommit({
|
|
18
|
+
payload,
|
|
17
19
|
verifiedWalletId: input.verifiedWalletId,
|
|
18
20
|
verifiedFactor: factor.factor,
|
|
19
21
|
nowMs: input.nowMs,
|
|
20
22
|
store: input.store
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
});
|
|
24
|
+
if (admitted.kind !== "reserved") return settled(toOutcome(admitted));
|
|
25
|
+
return async () => {
|
|
26
|
+
try {
|
|
27
|
+
return toOutcome(await admitted.commit());
|
|
28
|
+
} catch (error) {
|
|
29
|
+
return storeFailure(error);
|
|
30
|
+
}
|
|
26
31
|
};
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return settled(storeFailure(error));
|
|
27
34
|
}
|
|
28
35
|
}
|
|
36
|
+
function settled(outcome) {
|
|
37
|
+
return () => Promise.resolve(outcome);
|
|
38
|
+
}
|
|
39
|
+
function storeFailure(error) {
|
|
40
|
+
return {
|
|
41
|
+
status: "rejected",
|
|
42
|
+
reason: error instanceof Error ? error.message : "wallet custody commit failed"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
29
45
|
function toOutcome(admitted) {
|
|
30
46
|
switch (admitted.kind) {
|
|
31
47
|
case "committed": return { status: "committed" };
|
|
@@ -42,6 +58,6 @@ function toOutcome(admitted) {
|
|
|
42
58
|
}
|
|
43
59
|
}
|
|
44
60
|
//#endregion
|
|
45
|
-
export {
|
|
61
|
+
export { reserveRegistrationCustody };
|
|
46
62
|
|
|
47
63
|
//# sourceMappingURL=registrationCustodyOutcome.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { reserveWalletCustodyRegistration } from "./walletCustodyRegistrationCommit.js";
|
|
2
2
|
//#region src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.ts
|
|
3
3
|
async function admitWalletCustodyRegistrationCommit(input) {
|
|
4
4
|
const payloadWalletId = String(input.payload.walletId ?? "").trim();
|
|
@@ -19,7 +19,7 @@ async function admitWalletCustodyRegistrationCommit(input) {
|
|
|
19
19
|
kind: "no_custody_records",
|
|
20
20
|
keyManifestDigestB64u: digest
|
|
21
21
|
};
|
|
22
|
-
return await
|
|
22
|
+
return await reserveWalletCustodyRegistration({
|
|
23
23
|
payload: input.payload,
|
|
24
24
|
factor: input.verifiedFactor,
|
|
25
25
|
nowMs: input.nowMs,
|