@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,11 +1,11 @@
|
|
|
1
1
|
import { parseEmailOtpChallengeId, parseThresholdEd25519SessionId, parseWalletId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { parseAuthFactorId, parseAuthorizationAuditEventId, parseAuthorizationEvidenceId, parseAuthorizationEvidenceSetId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parsePrincipalId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
|
+
import { isPlainObject } from "../../../../shared-ts/src/utils/validation.js";
|
|
3
4
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
4
5
|
import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
5
6
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
6
7
|
import { buildCapabilityOperationEnvelope } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
7
8
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
8
|
-
import { isPlainObject } from "../../../../shared-ts/src/utils/validation.js";
|
|
9
9
|
import { sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
10
10
|
import { deriveRouterAbEd25519YaoExportAuthorizationDigestV1, deriveRouterAbEd25519YaoExportConfirmationDigestV1, deriveRouterAbEd25519YaoRuntimePolicyBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519YaoDigests.js";
|
|
11
11
|
import { ROUTER_AB_ED25519_YAO_EXPORT_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_EXPORT_EXECUTE_PATH_V1, parseRouterAbEd25519YaoExportAdmissionReceiptV1, parseRouterAbEd25519YaoExportAdmissionRequestV1, parseRouterAbEd25519YaoExportExecuteRequestV1, parseRouterAbEd25519YaoExportResultV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
@@ -182,14 +182,14 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
182
182
|
recordAuthorizationUncertain(request) {
|
|
183
183
|
this.state.authorizationUncertainOwners.set(exportKey(request), request.scope.account_id);
|
|
184
184
|
}
|
|
185
|
-
async admitExport(request, authorizationIdentity, admission, factorRelease, traceContext) {
|
|
185
|
+
async admitExport(request, authorizationIdentity, ownershipGeneration, admission, factorRelease, traceContext) {
|
|
186
186
|
const admitted = await admission.admit();
|
|
187
187
|
if (!admitted.ok) return failure({
|
|
188
188
|
status: admitted.status === 503 ? 503 : 409,
|
|
189
189
|
code: "admission_failed",
|
|
190
190
|
message: admitted.message
|
|
191
191
|
});
|
|
192
|
-
const authorization = this.authorizeExport(request, exportKey(request), authorizationIdentity, factorRelease);
|
|
192
|
+
const authorization = this.authorizeExport(request, exportKey(request), authorizationIdentity, ownershipGeneration, factorRelease);
|
|
193
193
|
if (authorization.kind === "completed" && !authorization.value.ok) return failure({
|
|
194
194
|
status: authorization.value.status === 503 ? 503 : 409,
|
|
195
195
|
code: "admission_failed",
|
|
@@ -226,11 +226,11 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
226
226
|
* admission. An export already here answers from its state instead, with
|
|
227
227
|
* the factor release it recorded.
|
|
228
228
|
*/
|
|
229
|
-
authorizeExport(request, authorizationFingerprint, authorizationIdentity, factorRelease) {
|
|
229
|
+
authorizeExport(request, authorizationFingerprint, authorizationIdentity, ownershipGeneration, factorRelease) {
|
|
230
230
|
const key = exportKey(request);
|
|
231
231
|
const existing = this.state.exports.get(key);
|
|
232
232
|
if (existing) {
|
|
233
|
-
if (!sameExportServerAuthorizationIdentityV1(existing.authorizationIdentity, authorizationIdentity)) return {
|
|
233
|
+
if (existing.ownershipGeneration !== ownershipGeneration || !sameExportServerAuthorizationIdentityV1(existing.authorizationIdentity, authorizationIdentity)) return {
|
|
234
234
|
kind: "completed",
|
|
235
235
|
value: authorizationConflict("export_authorization_conflict", "Export authorization owner changed for an existing request")
|
|
236
236
|
};
|
|
@@ -266,12 +266,18 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
266
266
|
request,
|
|
267
267
|
authorizationFingerprint,
|
|
268
268
|
authorizationIdentity,
|
|
269
|
+
ownershipGeneration,
|
|
269
270
|
factorRelease
|
|
270
271
|
});
|
|
271
272
|
return { kind: "authorized" };
|
|
272
273
|
}
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
readAdmissionAuthority(request) {
|
|
275
|
+
const current = this.state.exports.get(exportKey(request));
|
|
276
|
+
if (!current) return null;
|
|
277
|
+
return {
|
|
278
|
+
authorizationIdentity: current.authorizationIdentity,
|
|
279
|
+
ownershipGeneration: current.ownershipGeneration
|
|
280
|
+
};
|
|
275
281
|
}
|
|
276
282
|
async prepareAdmitExport(request, _authorizationIdentity) {
|
|
277
283
|
const key = exportKey(request);
|
|
@@ -351,6 +357,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
351
357
|
request: current.request,
|
|
352
358
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
353
359
|
authorizationIdentity: current.authorizationIdentity,
|
|
360
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
354
361
|
factorRelease: current.factorRelease
|
|
355
362
|
});
|
|
356
363
|
return {
|
|
@@ -412,6 +419,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
412
419
|
request: current.request,
|
|
413
420
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
414
421
|
authorizationIdentity: current.authorizationIdentity,
|
|
422
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
415
423
|
factorRelease: current.factorRelease,
|
|
416
424
|
receipt: parsed.value
|
|
417
425
|
});
|
|
@@ -436,7 +444,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
436
444
|
try {
|
|
437
445
|
outcome = {
|
|
438
446
|
kind: "backend_response",
|
|
439
|
-
result: await this.backend.executeExport(request, preparation.claim
|
|
447
|
+
result: await this.backend.executeExport(request, preparation.claim, traceContext)
|
|
440
448
|
};
|
|
441
449
|
} catch (error) {
|
|
442
450
|
return this.failUncertainExecution(preparation.claim, error);
|
|
@@ -470,6 +478,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
470
478
|
request: current.request,
|
|
471
479
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
472
480
|
authorizationIdentity: current.authorizationIdentity,
|
|
481
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
473
482
|
factorRelease: current.factorRelease,
|
|
474
483
|
receipt: current.receipt,
|
|
475
484
|
executeFingerprint: canonicalFingerprint(request),
|
|
@@ -488,6 +497,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
488
497
|
request: current.request,
|
|
489
498
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
490
499
|
authorizationIdentity: current.authorizationIdentity,
|
|
500
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
491
501
|
factorRelease: current.factorRelease,
|
|
492
502
|
receipt: current.receipt,
|
|
493
503
|
executeFingerprint
|
|
@@ -500,7 +510,8 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
500
510
|
exportKey: found.key,
|
|
501
511
|
sessionId: session,
|
|
502
512
|
executeFingerprint,
|
|
503
|
-
admissionRequest: current.request
|
|
513
|
+
admissionRequest: current.request,
|
|
514
|
+
ownershipGeneration: current.ownershipGeneration
|
|
504
515
|
}
|
|
505
516
|
};
|
|
506
517
|
case "executing": return {
|
|
@@ -561,6 +572,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
561
572
|
request: current.request,
|
|
562
573
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
563
574
|
authorizationIdentity: current.authorizationIdentity,
|
|
575
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
564
576
|
factorRelease: current.factorRelease,
|
|
565
577
|
receipt: current.receipt,
|
|
566
578
|
executeFingerprint: current.executeFingerprint,
|
|
@@ -598,6 +610,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
598
610
|
request: current.request,
|
|
599
611
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
600
612
|
authorizationIdentity: current.authorizationIdentity,
|
|
613
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
601
614
|
factorRelease: current.factorRelease,
|
|
602
615
|
failure: rejected
|
|
603
616
|
});
|
|
@@ -608,6 +621,7 @@ var InMemoryRouterAbEd25519YaoExportService = class {
|
|
|
608
621
|
request: current.request,
|
|
609
622
|
authorizationFingerprint: current.authorizationFingerprint,
|
|
610
623
|
authorizationIdentity: current.authorizationIdentity,
|
|
624
|
+
ownershipGeneration: current.ownershipGeneration,
|
|
611
625
|
factorRelease: current.factorRelease,
|
|
612
626
|
receipt: current.receipt,
|
|
613
627
|
executeFingerprint: current.executeFingerprint,
|
|
@@ -810,6 +824,7 @@ async function authorizeExportAdmission(args) {
|
|
|
810
824
|
});
|
|
811
825
|
if (!checked.ok) return checked;
|
|
812
826
|
return await recordFreshExportProof({
|
|
827
|
+
walletId: walletId.value,
|
|
813
828
|
input: args.input,
|
|
814
829
|
authority,
|
|
815
830
|
authorizedOperations: args.authorizedOperations,
|
|
@@ -836,6 +851,7 @@ async function authorizeExportAdmission(args) {
|
|
|
836
851
|
});
|
|
837
852
|
if (!checked.ok) return checked;
|
|
838
853
|
const recorded = await recordFreshExportProof({
|
|
854
|
+
walletId: walletId.value,
|
|
839
855
|
input: args.input,
|
|
840
856
|
authority: authority.authority,
|
|
841
857
|
authorizedOperations: args.authorizedOperations,
|
|
@@ -847,18 +863,13 @@ async function authorizeExportAdmission(args) {
|
|
|
847
863
|
return {
|
|
848
864
|
ok: true,
|
|
849
865
|
admission: recorded.admission,
|
|
866
|
+
walletId: recorded.walletId,
|
|
850
867
|
factorRelease: checked.factorRelease
|
|
851
868
|
};
|
|
852
869
|
}
|
|
853
870
|
async function recordFreshExportProof(args) {
|
|
854
|
-
const walletId = parseWalletId(args.input.body.application_binding.wallet_id);
|
|
855
|
-
if (!walletId.ok) return authorizationFailure({
|
|
856
|
-
status: 403,
|
|
857
|
-
code: "invalid_body",
|
|
858
|
-
message: walletId.error.message
|
|
859
|
-
});
|
|
860
871
|
const authorizationIdentitySuffix = base64UrlEncode(Uint8Array.from(args.input.body.authorization.authorization_digest));
|
|
861
|
-
const principalId = parsePrincipalId(`ed25519-export:${walletId
|
|
872
|
+
const principalId = parsePrincipalId(`ed25519-export:${args.walletId}`);
|
|
862
873
|
const capabilityId = parseCapabilityId(String(args.input.body.scope.material_activation.capability));
|
|
863
874
|
const operationId = parseCapabilityOperationId(`ed25519-export:${args.input.body.scope.lifecycle_id}:${authorizationIdentitySuffix}`);
|
|
864
875
|
const evidenceId = parseAuthorizationEvidenceId(`ed25519-export:evidence:${args.input.body.scope.lifecycle_id}:${authorizationIdentitySuffix}`);
|
|
@@ -931,7 +942,7 @@ async function recordFreshExportProof(args) {
|
|
|
931
942
|
factor = buildVerifiedWalletOperationPasskeyFactorResult({
|
|
932
943
|
tenantId: args.authorizedOperations.tenantId,
|
|
933
944
|
principalId: principalId.value,
|
|
934
|
-
walletId: walletId
|
|
945
|
+
walletId: args.walletId,
|
|
935
946
|
requestOrigin,
|
|
936
947
|
audience: requestOrigin,
|
|
937
948
|
factorId: factorId.value,
|
|
@@ -948,7 +959,7 @@ async function recordFreshExportProof(args) {
|
|
|
948
959
|
factor = buildVerifiedWalletOperationEmailOtpFactorResult({
|
|
949
960
|
tenantId: args.authorizedOperations.tenantId,
|
|
950
961
|
principalId: principalId.value,
|
|
951
|
-
walletId: walletId
|
|
962
|
+
walletId: args.walletId,
|
|
952
963
|
requestOrigin,
|
|
953
964
|
audience: requestOrigin,
|
|
954
965
|
factorId: factorId.value,
|
|
@@ -974,6 +985,7 @@ async function recordFreshExportProof(args) {
|
|
|
974
985
|
});
|
|
975
986
|
return {
|
|
976
987
|
ok: true,
|
|
988
|
+
walletId: args.walletId,
|
|
977
989
|
admission: new ExportOperationAdmission(args.authorizedOperations, {
|
|
978
990
|
tenantId: args.authorizedOperations.tenantId,
|
|
979
991
|
authorizedOperationId: authorizedOperationId.value,
|
|
@@ -1036,12 +1048,13 @@ function exportOwnerProofRejected(code) {
|
|
|
1036
1048
|
});
|
|
1037
1049
|
}
|
|
1038
1050
|
var RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter = class {
|
|
1039
|
-
constructor(webAuthn, emailOtp, walletAuthMethods, authorizedOperations, resolveEd25519MaterialActivation) {
|
|
1051
|
+
constructor(webAuthn, emailOtp, walletAuthMethods, authorizedOperations, resolveEd25519MaterialActivation, admitEstablishedHome) {
|
|
1040
1052
|
this.webAuthn = webAuthn;
|
|
1041
1053
|
this.emailOtp = emailOtp;
|
|
1042
1054
|
this.walletAuthMethods = walletAuthMethods;
|
|
1043
1055
|
this.authorizedOperations = authorizedOperations;
|
|
1044
1056
|
this.resolveEd25519MaterialActivation = resolveEd25519MaterialActivation;
|
|
1057
|
+
this.admitEstablishedHome = admitEstablishedHome;
|
|
1045
1058
|
}
|
|
1046
1059
|
async authorizeAdmission(input) {
|
|
1047
1060
|
const activeIdentity = await resolveActiveExportAuthorizationIdentity({
|
|
@@ -1056,12 +1069,29 @@ var RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter = class {
|
|
|
1056
1069
|
walletAuthMethods: this.walletAuthMethods,
|
|
1057
1070
|
authorizedOperations: this.authorizedOperations
|
|
1058
1071
|
});
|
|
1059
|
-
|
|
1072
|
+
if (!checked.ok) return checked;
|
|
1073
|
+
let home;
|
|
1074
|
+
try {
|
|
1075
|
+
home = await this.admitEstablishedHome({ walletId: checked.walletId });
|
|
1076
|
+
} catch {
|
|
1077
|
+
return authorizationFailure({
|
|
1078
|
+
status: 503,
|
|
1079
|
+
code: "wallet_home_unavailable",
|
|
1080
|
+
message: "Export wallet home is unavailable"
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
if (!home.ok) return authorizationFailure({
|
|
1084
|
+
status: 409,
|
|
1085
|
+
code: home.code,
|
|
1086
|
+
message: home.message
|
|
1087
|
+
});
|
|
1088
|
+
return {
|
|
1060
1089
|
ok: true,
|
|
1061
1090
|
authorizationIdentity: activeIdentity.authorizationIdentity,
|
|
1091
|
+
ownershipGeneration: home.ownershipGeneration,
|
|
1062
1092
|
admission: checked.admission,
|
|
1063
1093
|
...checked.factorRelease ? { factorRelease: checked.factorRelease } : {}
|
|
1064
|
-
}
|
|
1094
|
+
};
|
|
1065
1095
|
}
|
|
1066
1096
|
authorizeExecution(input) {
|
|
1067
1097
|
const thresholdSessionId = parseThresholdEd25519SessionId(input.body.binding.ceremony.lifecycle.session_id);
|
|
@@ -1273,7 +1303,7 @@ var RouterAbEd25519YaoExportRouteExtension = class {
|
|
|
1273
1303
|
code: authorized.code,
|
|
1274
1304
|
message: authorized.message
|
|
1275
1305
|
}, { status: authorized.status });
|
|
1276
|
-
const result = await this.service.admitExport(parsed.protocol, authorized.authorizationIdentity, authorized.admission, authorized.factorRelease ?? null, traceContext.value);
|
|
1306
|
+
const result = await this.service.admitExport(parsed.protocol, authorized.authorizationIdentity, authorized.ownershipGeneration, authorized.admission, authorized.factorRelease ?? null, traceContext.value);
|
|
1277
1307
|
return result.ok ? json({
|
|
1278
1308
|
protocol: result.value,
|
|
1279
1309
|
...authorized.factorRelease ? { factorRelease: authorized.factorRelease } : {}
|
package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js
CHANGED
|
@@ -85,11 +85,11 @@ var ExportExecutionRequestRun = class {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
async backend(
|
|
88
|
+
async backend(claim) {
|
|
89
89
|
try {
|
|
90
90
|
return {
|
|
91
91
|
kind: "response",
|
|
92
|
-
value: await this.context.input.backend.executeExport(this.request,
|
|
92
|
+
value: await this.context.input.backend.executeExport(this.request, claim, this.context.trace)
|
|
93
93
|
};
|
|
94
94
|
} catch (error) {
|
|
95
95
|
return {
|
|
@@ -197,15 +197,16 @@ async function runAuthorization(context, parsed, expectedOrigin) {
|
|
|
197
197
|
let loaded = await context.input.store.load(lifecycleId);
|
|
198
198
|
const service = exportService(context, loaded.state);
|
|
199
199
|
if (service.authorizationIsUncertain(parsed.protocol)) return authorizationFailure(503, "export_authorization_uncertain", "Export authorization outcome is uncertain and cannot be retried");
|
|
200
|
-
const
|
|
200
|
+
const existingAuthority = service.readAdmissionAuthority(parsed.protocol);
|
|
201
201
|
let verified;
|
|
202
|
-
if (
|
|
202
|
+
if (existingAuthority) {
|
|
203
203
|
if (parsed.protocol.authorization.expires_at_ms <= Date.now()) return authorizationFailure(403, "export_authorization_expired", "Ed25519 Yao export authorization is expired");
|
|
204
204
|
const resolved = await context.input.authorization.resolveAuthorizationIdentity(parsed.protocol);
|
|
205
205
|
if (!resolved.ok) return resolved;
|
|
206
|
-
if (!sameAuthorizationIdentity(resolved.authorizationIdentity,
|
|
206
|
+
if (!sameAuthorizationIdentity(resolved.authorizationIdentity, existingAuthority.authorizationIdentity)) return authorizationFailure(409, "export_authorization_conflict", "Export authorization owner changed for an existing request");
|
|
207
207
|
verified = {
|
|
208
|
-
identity:
|
|
208
|
+
identity: existingAuthority.authorizationIdentity,
|
|
209
|
+
ownershipGeneration: existingAuthority.ownershipGeneration,
|
|
209
210
|
admission: null
|
|
210
211
|
};
|
|
211
212
|
} else {
|
|
@@ -223,15 +224,17 @@ async function runAuthorization(context, parsed, expectedOrigin) {
|
|
|
223
224
|
if (!authorized.ok) return authorized;
|
|
224
225
|
verified = {
|
|
225
226
|
identity: authorized.authorizationIdentity,
|
|
227
|
+
ownershipGeneration: authorized.ownershipGeneration,
|
|
226
228
|
admission: authorized.admission,
|
|
227
229
|
...authorized.factorRelease ? { factorRelease: authorized.factorRelease } : {}
|
|
228
230
|
};
|
|
229
231
|
}
|
|
230
232
|
const authorizationFingerprint = await authorizationFingerprintForIdentity(parsed, verified.identity);
|
|
231
233
|
for (let attempt = 1;; attempt += 1) {
|
|
232
|
-
const decision = exportService(context, loaded.state).authorizeExport(parsed.protocol, authorizationFingerprint, verified.identity, verified.factorRelease ?? null);
|
|
234
|
+
const decision = exportService(context, loaded.state).authorizeExport(parsed.protocol, authorizationFingerprint, verified.identity, verified.ownershipGeneration, verified.factorRelease ?? null);
|
|
233
235
|
if (decision.kind === "completed") return decision.value.ok ? authorizedRun({
|
|
234
236
|
identity: verified.identity,
|
|
237
|
+
ownershipGeneration: verified.ownershipGeneration,
|
|
235
238
|
admission: verified.admission,
|
|
236
239
|
...decision.value.factorRelease ? { factorRelease: decision.value.factorRelease } : {}
|
|
237
240
|
}) : decision.value;
|
|
@@ -36,11 +36,17 @@ function resolveTraceContext(request) {
|
|
|
36
36
|
message: parsed.message
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
function recoveryAuthorizationBinding(
|
|
40
|
-
|
|
39
|
+
function recoveryAuthorizationBinding(admitted) {
|
|
40
|
+
const authorization = admitted.authorization;
|
|
41
|
+
if (authorization.kind === "wallet_recovery") return {
|
|
42
|
+
kind: "wallet_recovery",
|
|
43
|
+
walletId: authorization.walletId,
|
|
44
|
+
ownershipGeneration: admitted.ownershipGeneration
|
|
45
|
+
};
|
|
41
46
|
const session = authorization.kind === "wallet_session_v2" ? authorization.context.authorization.session : authorization.context.status.session;
|
|
42
47
|
return {
|
|
43
48
|
kind: "wallet_session_v2",
|
|
49
|
+
ownershipGeneration: admitted.ownershipGeneration,
|
|
44
50
|
tenantId: session.tenantId,
|
|
45
51
|
principalId: session.principalId,
|
|
46
52
|
walletId: session.walletId,
|
|
@@ -160,7 +166,7 @@ function equalBytes(left, right) {
|
|
|
160
166
|
return true;
|
|
161
167
|
}
|
|
162
168
|
function sameRecoveryAuthorizationBindingV1(left, right) {
|
|
163
|
-
if (left.kind !== right.kind) return false;
|
|
169
|
+
if (left.kind !== right.kind || left.ownershipGeneration !== right.ownershipGeneration) return false;
|
|
164
170
|
switch (left.kind) {
|
|
165
171
|
case "wallet_recovery": return right.kind === "wallet_recovery" && left.walletId === right.walletId;
|
|
166
172
|
case "wallet_session_v2": return right.kind === "wallet_session_v2" && left.tenantId === right.tenantId && left.principalId === right.principalId && left.walletId === right.walletId && left.authorityId === right.authorityId && left.walletAuthMethodId === right.walletAuthMethodId && left.mintId === right.mintId && left.authorizationId === right.authorizationId && left.walletSessionId === right.walletSessionId && left.quotaId === right.quotaId;
|
|
@@ -649,6 +655,77 @@ function activationReplayResult(state, fingerprint) {
|
|
|
649
655
|
default: return assertNever(state);
|
|
650
656
|
}
|
|
651
657
|
}
|
|
658
|
+
function resolveRouterAbEd25519YaoActiveCapability(capabilities, input) {
|
|
659
|
+
const walletId = String(input.walletId || "").trim();
|
|
660
|
+
const nearEd25519SigningKeyId = String(input.nearEd25519SigningKeyId || "").trim();
|
|
661
|
+
const signingWorkerId = String(input.signingWorkerId || "").trim();
|
|
662
|
+
const firstParticipantId = input.participantIds?.[0];
|
|
663
|
+
const secondParticipantId = input.participantIds?.[1];
|
|
664
|
+
if (input.kind !== "router_ab_ed25519_yao_active_capability_lookup_v1" || !walletId || !nearEd25519SigningKeyId || !signingWorkerId || !Number.isSafeInteger(input.signerSlot) || input.signerSlot < 1 || !Array.isArray(input.participantIds) || input.participantIds.length !== 2 || !Number.isSafeInteger(firstParticipantId) || !Number.isSafeInteger(secondParticipantId) || Number(firstParticipantId) < 1 || Number(secondParticipantId) < 1 || firstParticipantId === secondParticipantId) return {
|
|
665
|
+
ok: false,
|
|
666
|
+
code: "invalid_lookup",
|
|
667
|
+
message: "active Ed25519 Yao capability lookup is invalid"
|
|
668
|
+
};
|
|
669
|
+
let matched = null;
|
|
670
|
+
for (const state of capabilities.values()) {
|
|
671
|
+
if (state.kind !== "active") continue;
|
|
672
|
+
const identity = state.identity;
|
|
673
|
+
if (identity.applicationBinding.wallet_id !== walletId || identity.applicationBinding.near_ed25519_signing_key_id !== nearEd25519SigningKeyId || identity.applicationBinding.key_creation_signer_slot !== input.signerSlot || identity.activationBinding.lifecycle.selected_server_id !== signingWorkerId || identity.participantIds[0] !== firstParticipantId || identity.participantIds[1] !== secondParticipantId) continue;
|
|
674
|
+
if (matched) return {
|
|
675
|
+
ok: false,
|
|
676
|
+
code: "capability_conflict",
|
|
677
|
+
message: "multiple active Ed25519 Yao capabilities match the wallet identity"
|
|
678
|
+
};
|
|
679
|
+
matched = identity;
|
|
680
|
+
}
|
|
681
|
+
if (!matched) return {
|
|
682
|
+
ok: false,
|
|
683
|
+
code: "unknown_capability",
|
|
684
|
+
message: "active Ed25519 Yao capability was not found"
|
|
685
|
+
};
|
|
686
|
+
const lifecycle = matched.activationBinding.lifecycle;
|
|
687
|
+
return {
|
|
688
|
+
ok: true,
|
|
689
|
+
capability: {
|
|
690
|
+
kind: "router_ab_ed25519_yao_active_capability_v1",
|
|
691
|
+
materialActivation: matched.activationBinding.material_activation,
|
|
692
|
+
activeCapabilityBinding: [...matched.capabilityBinding],
|
|
693
|
+
registeredPublicKey: [...matched.registeredPublicKey],
|
|
694
|
+
nearAccountId: matched.nearAccountId,
|
|
695
|
+
applicationBinding: {
|
|
696
|
+
wallet_id: matched.applicationBinding.wallet_id,
|
|
697
|
+
near_ed25519_signing_key_id: matched.applicationBinding.near_ed25519_signing_key_id,
|
|
698
|
+
signing_root_id: matched.applicationBinding.signing_root_id,
|
|
699
|
+
key_creation_signer_slot: matched.applicationBinding.key_creation_signer_slot
|
|
700
|
+
},
|
|
701
|
+
runtimePolicyScope: {
|
|
702
|
+
orgId: matched.runtimePolicyScope.orgId,
|
|
703
|
+
projectId: matched.runtimePolicyScope.projectId,
|
|
704
|
+
envId: matched.runtimePolicyScope.envId,
|
|
705
|
+
signingRootVersion: matched.runtimePolicyScope.signingRootVersion
|
|
706
|
+
},
|
|
707
|
+
participantIds: [matched.participantIds[0], matched.participantIds[1]],
|
|
708
|
+
lifecycle: {
|
|
709
|
+
lifecycleId: lifecycle.lifecycle_id,
|
|
710
|
+
rootShareEpoch: lifecycle.root_share_epoch,
|
|
711
|
+
accountId: lifecycle.account_id,
|
|
712
|
+
thresholdSessionId: requireThresholdEd25519SessionId(lifecycle.session_id, "active capability threshold session identity"),
|
|
713
|
+
signerSetId: lifecycle.signer_set_id,
|
|
714
|
+
signingWorkerId: lifecycle.selected_server_id
|
|
715
|
+
},
|
|
716
|
+
stateEpoch: matched.stateEpoch,
|
|
717
|
+
registrationContinuity: matched.persisted.version === "wallet_ed25519_yao_registration_capability_v1" ? {
|
|
718
|
+
kind: "registration",
|
|
719
|
+
admissionRequest: matched.persisted.admissionRequest,
|
|
720
|
+
admissionReceipt: matched.persisted.admissionReceipt,
|
|
721
|
+
activationTranscript: [...matched.persisted.activationResult.public_receipt.transcript]
|
|
722
|
+
} : {
|
|
723
|
+
kind: "recovery",
|
|
724
|
+
activationTranscript: [...matched.persisted.activationResult.public_receipt.transcript]
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
};
|
|
728
|
+
}
|
|
652
729
|
var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
653
730
|
constructor(backend, state = new InMemoryRouterAbEd25519YaoRecoveryStateV1(), capabilityPersistence = new EphemeralRouterAbEd25519YaoCapabilityPersistenceV1()) {
|
|
654
731
|
this.backend = backend;
|
|
@@ -711,75 +788,7 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
711
788
|
return capabilityInstallResult("installed", identity);
|
|
712
789
|
}
|
|
713
790
|
resolveActiveCapability(input) {
|
|
714
|
-
|
|
715
|
-
const nearEd25519SigningKeyId = String(input.nearEd25519SigningKeyId || "").trim();
|
|
716
|
-
const signingWorkerId = String(input.signingWorkerId || "").trim();
|
|
717
|
-
const firstParticipantId = input.participantIds?.[0];
|
|
718
|
-
const secondParticipantId = input.participantIds?.[1];
|
|
719
|
-
if (input.kind !== "router_ab_ed25519_yao_active_capability_lookup_v1" || !walletId || !nearEd25519SigningKeyId || !signingWorkerId || !Number.isSafeInteger(input.signerSlot) || input.signerSlot < 1 || !Array.isArray(input.participantIds) || input.participantIds.length !== 2 || !Number.isSafeInteger(firstParticipantId) || !Number.isSafeInteger(secondParticipantId) || Number(firstParticipantId) < 1 || Number(secondParticipantId) < 1 || firstParticipantId === secondParticipantId) return {
|
|
720
|
-
ok: false,
|
|
721
|
-
code: "invalid_lookup",
|
|
722
|
-
message: "active Ed25519 Yao capability lookup is invalid"
|
|
723
|
-
};
|
|
724
|
-
let matched = null;
|
|
725
|
-
for (const state of this.capabilities.values()) {
|
|
726
|
-
if (state.kind !== "active") continue;
|
|
727
|
-
const identity = state.identity;
|
|
728
|
-
if (identity.applicationBinding.wallet_id !== walletId || identity.applicationBinding.near_ed25519_signing_key_id !== nearEd25519SigningKeyId || identity.applicationBinding.key_creation_signer_slot !== input.signerSlot || identity.activationBinding.lifecycle.selected_server_id !== signingWorkerId || identity.participantIds[0] !== firstParticipantId || identity.participantIds[1] !== secondParticipantId) continue;
|
|
729
|
-
if (matched) return {
|
|
730
|
-
ok: false,
|
|
731
|
-
code: "capability_conflict",
|
|
732
|
-
message: "multiple active Ed25519 Yao capabilities match the wallet identity"
|
|
733
|
-
};
|
|
734
|
-
matched = identity;
|
|
735
|
-
}
|
|
736
|
-
if (!matched) return {
|
|
737
|
-
ok: false,
|
|
738
|
-
code: "unknown_capability",
|
|
739
|
-
message: "active Ed25519 Yao capability was not found"
|
|
740
|
-
};
|
|
741
|
-
const lifecycle = matched.activationBinding.lifecycle;
|
|
742
|
-
return {
|
|
743
|
-
ok: true,
|
|
744
|
-
capability: {
|
|
745
|
-
kind: "router_ab_ed25519_yao_active_capability_v1",
|
|
746
|
-
materialActivation: matched.activationBinding.material_activation,
|
|
747
|
-
activeCapabilityBinding: [...matched.capabilityBinding],
|
|
748
|
-
registeredPublicKey: [...matched.registeredPublicKey],
|
|
749
|
-
nearAccountId: matched.nearAccountId,
|
|
750
|
-
applicationBinding: {
|
|
751
|
-
wallet_id: matched.applicationBinding.wallet_id,
|
|
752
|
-
near_ed25519_signing_key_id: matched.applicationBinding.near_ed25519_signing_key_id,
|
|
753
|
-
signing_root_id: matched.applicationBinding.signing_root_id,
|
|
754
|
-
key_creation_signer_slot: matched.applicationBinding.key_creation_signer_slot
|
|
755
|
-
},
|
|
756
|
-
runtimePolicyScope: {
|
|
757
|
-
orgId: matched.runtimePolicyScope.orgId,
|
|
758
|
-
projectId: matched.runtimePolicyScope.projectId,
|
|
759
|
-
envId: matched.runtimePolicyScope.envId,
|
|
760
|
-
signingRootVersion: matched.runtimePolicyScope.signingRootVersion
|
|
761
|
-
},
|
|
762
|
-
participantIds: [matched.participantIds[0], matched.participantIds[1]],
|
|
763
|
-
lifecycle: {
|
|
764
|
-
lifecycleId: lifecycle.lifecycle_id,
|
|
765
|
-
rootShareEpoch: lifecycle.root_share_epoch,
|
|
766
|
-
accountId: lifecycle.account_id,
|
|
767
|
-
thresholdSessionId: requireThresholdEd25519SessionId(lifecycle.session_id, "active capability threshold session identity"),
|
|
768
|
-
signerSetId: lifecycle.signer_set_id,
|
|
769
|
-
signingWorkerId: lifecycle.selected_server_id
|
|
770
|
-
},
|
|
771
|
-
stateEpoch: matched.stateEpoch,
|
|
772
|
-
registrationContinuity: matched.persisted.version === "wallet_ed25519_yao_registration_capability_v1" ? {
|
|
773
|
-
kind: "registration",
|
|
774
|
-
admissionRequest: matched.persisted.admissionRequest,
|
|
775
|
-
admissionReceipt: matched.persisted.admissionReceipt,
|
|
776
|
-
activationTranscript: [...matched.persisted.activationResult.public_receipt.transcript]
|
|
777
|
-
} : {
|
|
778
|
-
kind: "recovery",
|
|
779
|
-
activationTranscript: [...matched.persisted.activationResult.public_receipt.transcript]
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
};
|
|
791
|
+
return resolveRouterAbEd25519YaoActiveCapability(this.capabilities, input);
|
|
783
792
|
}
|
|
784
793
|
async admitRecovery(request, authorization, traceContext) {
|
|
785
794
|
const dispatchRoot = await this.backend.resolveRecoveryDispatchRoot(request);
|
|
@@ -998,7 +1007,7 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
998
1007
|
try {
|
|
999
1008
|
outcome = {
|
|
1000
1009
|
kind: "backend_response",
|
|
1001
|
-
result: await this.backend.executeRecovery(request, preparation.claim
|
|
1010
|
+
result: await this.backend.executeRecovery(request, preparation.claim, traceContext)
|
|
1002
1011
|
};
|
|
1003
1012
|
} catch (error) {
|
|
1004
1013
|
return this.failUncertainExecution(preparation.claim, error);
|
|
@@ -1011,6 +1020,19 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
1011
1020
|
}
|
|
1012
1021
|
}
|
|
1013
1022
|
}
|
|
1023
|
+
recoveryOwnershipGeneration(binding) {
|
|
1024
|
+
const state = this.stateForSession(binding.session_id);
|
|
1025
|
+
if (!state) return recoveryFailure({
|
|
1026
|
+
status: 404,
|
|
1027
|
+
code: "unknown_recovery",
|
|
1028
|
+
message: "Recovery admission was not found"
|
|
1029
|
+
});
|
|
1030
|
+
return {
|
|
1031
|
+
ok: true,
|
|
1032
|
+
status: 200,
|
|
1033
|
+
value: state.context.authorization.ownershipGeneration
|
|
1034
|
+
};
|
|
1035
|
+
}
|
|
1014
1036
|
prepareExecuteRecovery(request, authorization, nowMs) {
|
|
1015
1037
|
const parsed = parseRouterAbEd25519YaoRecoveryActivationExecuteRequestV1(request);
|
|
1016
1038
|
if (!parsed.ok) return {
|
|
@@ -1063,6 +1085,7 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
1063
1085
|
kind: "claimed",
|
|
1064
1086
|
claim: {
|
|
1065
1087
|
kind: "router_ab_ed25519_yao_recovery_execute_claim_v1",
|
|
1088
|
+
ownershipGeneration: claimed.context.authorization.ownershipGeneration,
|
|
1066
1089
|
lifecycleId: executionRequest.binding.lifecycle.lifecycle_id,
|
|
1067
1090
|
recoveryKey: claimed.context.recoveryKey,
|
|
1068
1091
|
sessionId,
|
|
@@ -1174,7 +1197,7 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
1174
1197
|
try {
|
|
1175
1198
|
outcome = {
|
|
1176
1199
|
kind: "backend_response",
|
|
1177
|
-
result: await this.backend.activateRecovery(request, preparation.claim.dispatchRoot, traceContext)
|
|
1200
|
+
result: await this.backend.activateRecovery(request, preparation.claim.dispatchRoot, preparation.claim.ownershipGeneration, traceContext)
|
|
1178
1201
|
};
|
|
1179
1202
|
} catch (error) {
|
|
1180
1203
|
return this.activationUncertainFailure(error);
|
|
@@ -1438,6 +1461,7 @@ var InMemoryRouterAbEd25519YaoRecoveryService = class {
|
|
|
1438
1461
|
activationClaim(state, authorityProjection, disposition) {
|
|
1439
1462
|
return {
|
|
1440
1463
|
kind: "router_ab_ed25519_yao_recovery_activation_claim_v1",
|
|
1464
|
+
ownershipGeneration: state.context.authorization.ownershipGeneration,
|
|
1441
1465
|
lifecycleId: state.context.admissionRequest.scope.lifecycle_id,
|
|
1442
1466
|
recoveryKey: state.context.recoveryKey,
|
|
1443
1467
|
sessionId: bytesToHex(state.admissionReceipt.binding.session_id),
|
|
@@ -1700,7 +1724,7 @@ var RouterAbEd25519YaoRecoveryRouteExtension = class {
|
|
|
1700
1724
|
body: parsed.value
|
|
1701
1725
|
});
|
|
1702
1726
|
if (!authorization.ok) return routeFailureResponse(authorization);
|
|
1703
|
-
const result = await this.service.admitRecovery(parsed.value, recoveryAuthorizationBinding(authorization
|
|
1727
|
+
const result = await this.service.admitRecovery(parsed.value, recoveryAuthorizationBinding(authorization), traceContext.value);
|
|
1704
1728
|
if (!result.ok) return routeFailureResponse(result);
|
|
1705
1729
|
return json(result.value, { status: result.status });
|
|
1706
1730
|
}
|
|
@@ -1717,13 +1741,16 @@ var RouterAbEd25519YaoRecoveryRouteExtension = class {
|
|
|
1717
1741
|
code: parsed.code,
|
|
1718
1742
|
message: parsed.message
|
|
1719
1743
|
}, { status: 400 });
|
|
1744
|
+
const ownership = this.service.recoveryOwnershipGeneration(parsed.value.binding);
|
|
1745
|
+
if (!ownership.ok) return routeFailureResponse(ownership);
|
|
1720
1746
|
const authorization = await this.authorization.authorize({
|
|
1721
1747
|
kind: "execute",
|
|
1748
|
+
ownershipGeneration: ownership.value,
|
|
1722
1749
|
request,
|
|
1723
1750
|
body: parsed.value
|
|
1724
1751
|
});
|
|
1725
1752
|
if (!authorization.ok) return routeFailureResponse(authorization);
|
|
1726
|
-
const result = await this.service.executeRecovery(parsed.value, recoveryAuthorizationBinding(authorization
|
|
1753
|
+
const result = await this.service.executeRecovery(parsed.value, recoveryAuthorizationBinding(authorization), traceContext.value);
|
|
1727
1754
|
if (!result.ok) return routeFailureResponse(result);
|
|
1728
1755
|
return json(result.value, { status: result.status });
|
|
1729
1756
|
}
|
|
@@ -1740,13 +1767,16 @@ var RouterAbEd25519YaoRecoveryRouteExtension = class {
|
|
|
1740
1767
|
code: parsed.code,
|
|
1741
1768
|
message: parsed.message
|
|
1742
1769
|
}, { status: 400 });
|
|
1770
|
+
const ownership = this.service.recoveryOwnershipGeneration(parsed.value.binding);
|
|
1771
|
+
if (!ownership.ok) return routeFailureResponse(ownership);
|
|
1743
1772
|
const authorization = await this.authorization.authorize({
|
|
1744
1773
|
kind: "activate",
|
|
1774
|
+
ownershipGeneration: ownership.value,
|
|
1745
1775
|
request,
|
|
1746
1776
|
body: parsed.value
|
|
1747
1777
|
});
|
|
1748
1778
|
if (!authorization.ok) return routeFailureResponse(authorization);
|
|
1749
|
-
const result = await this.service.activateRecovery(parsed.value, recoveryAuthorizationBinding(authorization
|
|
1779
|
+
const result = await this.service.activateRecovery(parsed.value, recoveryAuthorizationBinding(authorization), traceContext.value);
|
|
1750
1780
|
if (!result.ok) return routeFailureResponse(result);
|
|
1751
1781
|
return json(result.value, { status: result.status });
|
|
1752
1782
|
}
|
|
@@ -1758,6 +1788,6 @@ function createRouterAbEd25519YaoRecoveryModule(input) {
|
|
|
1758
1788
|
});
|
|
1759
1789
|
}
|
|
1760
1790
|
//#endregion
|
|
1761
|
-
export { InMemoryRouterAbEd25519YaoRecoveryService, InMemoryRouterAbEd25519YaoRecoveryStateV1, buildRouterAbEd25519YaoRegistrationCapabilityRecordV1, buildWarmRecoveryBootstrapResponse, createRouterAbEd25519YaoRecoveryModule, recoveryAuthorityProjection, recoveryAuthorizationBinding };
|
|
1791
|
+
export { InMemoryRouterAbEd25519YaoRecoveryService, InMemoryRouterAbEd25519YaoRecoveryStateV1, buildRouterAbEd25519YaoRegistrationCapabilityRecordV1, buildWarmRecoveryBootstrapResponse, createRouterAbEd25519YaoRecoveryModule, recoveryAuthorityProjection, recoveryAuthorizationBinding, resolveRouterAbEd25519YaoActiveCapability };
|
|
1762
1792
|
|
|
1763
1793
|
//# sourceMappingURL=routerAbEd25519YaoRecovery.js.map
|
|
@@ -20,7 +20,7 @@ var RecoveryAdmissionRequestRun = class {
|
|
|
20
20
|
kind: "rejected",
|
|
21
21
|
value: authorized
|
|
22
22
|
};
|
|
23
|
-
const prepared = this.service(state).prepareAdmitRecovery(this.request, recoveryAuthorizationBinding(authorized
|
|
23
|
+
const prepared = this.service(state).prepareAdmitRecovery(this.request, recoveryAuthorizationBinding(authorized), await this.context.input.backend.resolveRecoveryDispatchRoot(this.request), Date.now());
|
|
24
24
|
if (prepared.kind !== "failed") {
|
|
25
25
|
const published = await publishWalletLifecycleHome(this.context.input.lifecycleRouting ?? null, "yao_recovery", this.request);
|
|
26
26
|
if (!published.ok) return {
|
|
@@ -85,8 +85,15 @@ var RecoveryExecutionRequestRun = class {
|
|
|
85
85
|
this.request = request;
|
|
86
86
|
}
|
|
87
87
|
async prepare(state) {
|
|
88
|
+
const service = this.service(state);
|
|
89
|
+
const ownership = service.recoveryOwnershipGeneration(this.request.binding);
|
|
90
|
+
if (!ownership.ok) return {
|
|
91
|
+
kind: "rejected",
|
|
92
|
+
value: ownership
|
|
93
|
+
};
|
|
88
94
|
const authorized = await this.context.input.authorization.authorize({
|
|
89
95
|
kind: "execute",
|
|
96
|
+
ownershipGeneration: ownership.value,
|
|
90
97
|
request: this.context.input.request,
|
|
91
98
|
body: this.request
|
|
92
99
|
});
|
|
@@ -94,7 +101,7 @@ var RecoveryExecutionRequestRun = class {
|
|
|
94
101
|
kind: "rejected",
|
|
95
102
|
value: authorized
|
|
96
103
|
};
|
|
97
|
-
const prepared =
|
|
104
|
+
const prepared = service.prepareExecuteRecovery(this.request, recoveryAuthorizationBinding(authorized), Date.now());
|
|
98
105
|
switch (prepared.kind) {
|
|
99
106
|
case "claimed": return {
|
|
100
107
|
kind: "claimed",
|
|
@@ -119,7 +126,7 @@ var RecoveryExecutionRequestRun = class {
|
|
|
119
126
|
try {
|
|
120
127
|
return {
|
|
121
128
|
kind: "response",
|
|
122
|
-
value: await this.context.input.backend.executeRecovery(this.request, claim
|
|
129
|
+
value: await this.context.input.backend.executeRecovery(this.request, claim, this.context.trace)
|
|
123
130
|
};
|
|
124
131
|
} catch (error) {
|
|
125
132
|
return {
|
|
@@ -152,8 +159,15 @@ var RecoveryActivationRequestRun = class {
|
|
|
152
159
|
this.request = request;
|
|
153
160
|
}
|
|
154
161
|
async prepare(state) {
|
|
162
|
+
const service = this.service(state);
|
|
163
|
+
const ownership = service.recoveryOwnershipGeneration(this.request.binding);
|
|
164
|
+
if (!ownership.ok) return {
|
|
165
|
+
kind: "rejected",
|
|
166
|
+
value: ownership
|
|
167
|
+
};
|
|
155
168
|
const authorized = await this.context.input.authorization.authorize({
|
|
156
169
|
kind: "activate",
|
|
170
|
+
ownershipGeneration: ownership.value,
|
|
157
171
|
request: this.context.input.request,
|
|
158
172
|
body: this.request
|
|
159
173
|
});
|
|
@@ -161,7 +175,7 @@ var RecoveryActivationRequestRun = class {
|
|
|
161
175
|
kind: "rejected",
|
|
162
176
|
value: authorized
|
|
163
177
|
};
|
|
164
|
-
const prepared =
|
|
178
|
+
const prepared = service.prepareActivateRecovery(this.request, recoveryAuthorizationBinding(authorized));
|
|
165
179
|
switch (prepared.kind) {
|
|
166
180
|
case "claimed": return {
|
|
167
181
|
kind: "claimed",
|
|
@@ -186,7 +200,7 @@ var RecoveryActivationRequestRun = class {
|
|
|
186
200
|
try {
|
|
187
201
|
return {
|
|
188
202
|
kind: "response",
|
|
189
|
-
value: await this.context.input.backend.activateRecovery(this.request, claim.dispatchRoot, this.context.trace)
|
|
203
|
+
value: await this.context.input.backend.activateRecovery(this.request, claim.dispatchRoot, claim.ownershipGeneration, this.context.trace)
|
|
190
204
|
};
|
|
191
205
|
} catch (error) {
|
|
192
206
|
return {
|