@seams/wallet-server 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +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
|
@@ -219,6 +219,16 @@ function parseWalletEd25519YaoActiveCapabilityRecord(raw) {
|
|
|
219
219
|
default: return null;
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
|
+
/** Where an Ed25519 signer row names the material activation it serves. */
|
|
223
|
+
const ED25519_SIGNER_ACTIVATION_ID_PATH = "$.activeYaoCapability.admissionRequest.scope.material_activation.activation_id";
|
|
224
|
+
/** The wallet's signer for one material activation, among the rows that name its id. */
|
|
225
|
+
function selectWalletEd25519Signer(rows, walletId, materialActivation) {
|
|
226
|
+
const matches = rows.map((row) => parseWalletEd25519SignerRecord(parseD1JsonColumn(row.record_json))).filter((record) => record !== null && record.walletId === walletId && sameRouterAbMpcMaterialActivationRef(record.activeYaoCapability.admissionRequest.scope.material_activation, materialActivation));
|
|
227
|
+
if (matches.length === 0) return null;
|
|
228
|
+
const signerId = matches[0]?.signerId;
|
|
229
|
+
if (!signerId || matches.some((record) => record.signerId !== signerId)) throw new Error("Wallet has conflicting Ed25519 material activations");
|
|
230
|
+
return matches[0] ?? null;
|
|
231
|
+
}
|
|
222
232
|
function parseWalletEd25519SignerRecord(raw) {
|
|
223
233
|
if (!isPlainObject(raw) || raw.version !== "wallet_signer_ed25519_v1") return null;
|
|
224
234
|
const walletId = parseWalletId(raw.walletId);
|
|
@@ -579,7 +589,7 @@ var D1WalletStore = class {
|
|
|
579
589
|
await this.ensureSchema();
|
|
580
590
|
const walletId = normalizeOptionalTrimmedString(input.walletId);
|
|
581
591
|
if (!walletId) return null;
|
|
582
|
-
|
|
592
|
+
return selectWalletEd25519Signer((await this.database.prepare(`SELECT record_json
|
|
583
593
|
FROM wallet_signers
|
|
584
594
|
WHERE namespace = ?
|
|
585
595
|
AND org_id = ?
|
|
@@ -587,15 +597,8 @@ var D1WalletStore = class {
|
|
|
587
597
|
AND env_id = ?
|
|
588
598
|
AND wallet_id = ?
|
|
589
599
|
AND signer_family = 'ed25519'
|
|
590
|
-
AND json_extract(
|
|
591
|
-
|
|
592
|
-
'$.activeYaoCapability.admissionRequest.scope.material_activation.activation_id'
|
|
593
|
-
) = ?
|
|
594
|
-
LIMIT 4`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, walletId, input.materialActivation.activation_id).all()).results || []).map((row) => parseWalletEd25519SignerRecord(parseD1JsonColumn(row.record_json))).filter((record) => record !== null && record.walletId === walletId && sameRouterAbMpcMaterialActivationRef(record.activeYaoCapability.admissionRequest.scope.material_activation, input.materialActivation));
|
|
595
|
-
if (matches.length === 0) return null;
|
|
596
|
-
const signerId = matches[0]?.signerId;
|
|
597
|
-
if (!signerId || matches.some((record) => record.signerId !== signerId)) throw new Error("Wallet has conflicting Ed25519 material activations");
|
|
598
|
-
return matches[0] ?? null;
|
|
600
|
+
AND json_extract(record_json, '\$.activeYaoCapability.admissionRequest.scope.material_activation.activation_id') = ?
|
|
601
|
+
LIMIT 4`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, walletId, input.materialActivation.activation_id).all()).results || [], walletId, input.materialActivation);
|
|
599
602
|
}
|
|
600
603
|
async getEd25519SignerBySlot(input) {
|
|
601
604
|
await this.ensureSchema();
|
|
@@ -711,6 +714,6 @@ var D1WalletStore = class {
|
|
|
711
714
|
}
|
|
712
715
|
};
|
|
713
716
|
//#endregion
|
|
714
|
-
export { D1WalletStore, WALLET_STORE_D1_SCHEMA_SQL, buildWalletEcdsaSignerRecord, ensureWalletStoreD1Schema, parseWalletEd25519SignerRecord, prepareD1WalletPutSignerStatement, prepareD1WalletPutSubjectStatement };
|
|
717
|
+
export { D1WalletStore, ED25519_SIGNER_ACTIVATION_ID_PATH, WALLET_STORE_D1_SCHEMA_SQL, buildWalletEcdsaSignerRecord, ensureWalletStoreD1Schema, parseWalletEd25519SignerRecord, prepareD1WalletPutSignerStatement, prepareD1WalletPutSubjectStatement, selectWalletEd25519Signer };
|
|
715
718
|
|
|
716
719
|
//# sourceMappingURL=d1WalletStore.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { parseLinkDeviceSessionId, parseLinkedDeviceEnrollmentId, parseLinkedDeviceId, parseVerifiedEmailAddress, parseWalletAuthMethodId, parseWalletId, parseWebAuthnCredentialIdB64u } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
|
+
import { requireRecord } from "../../shared-ts/src/utils/validation.js";
|
|
3
|
+
import { rejectUnknownFields } from "../../shared-ts/src/utils/exactRecord.js";
|
|
2
4
|
import { base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
3
5
|
import { sha256BytesUtf8 } from "../../shared-ts/src/utils/digests.js";
|
|
4
6
|
import { parseDigestB64u, sha256Utf8DigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
|
-
import { requireRecord } from "../../shared-ts/src/utils/validation.js";
|
|
6
|
-
import { rejectUnknownFields } from "../../shared-ts/src/utils/exactRecord.js";
|
|
7
7
|
import { parseUnixMs, requireParsed } from "../../shared-ts/src/passkey-custody/primitives.js";
|
|
8
8
|
//#region src/core/deviceLinking/linkedDeviceEmailOtpGrant.ts
|
|
9
9
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseLinkedDeviceId, parseVerifiedEmailAddress, parseWalletAuthorityId } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { base64UrlDecode, base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
3
2
|
import { buildDelegatedWalletAuthorityV1, buildFullOwnerPermissionsV1, hasDelegatedWalletPermissionV1, sameDelegatedWalletAuthorityV1 } from "../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
3
|
+
import { base64UrlDecode, base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
4
4
|
//#region src/core/deviceLinking/linkedDeviceManagement.ts
|
|
5
5
|
const MAX_LINKED_DEVICE_LIST_LIMIT_V1 = 50;
|
|
6
6
|
var LinkedDeviceListCursorError = class extends Error {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { hasWhitespaceOrControlCharacters, parseLinkDeviceSessionId, parseVerifiedEmailAddress, parseWalletAuthMethodId, parseWalletAuthorityId } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { parseDeviceId } from "../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
|
-
import { parseDigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
|
-
import { assertNeverLinkSessionStateV1 } from "../../shared-ts/src/device-linking/contracts.js";
|
|
5
3
|
import { requireRecordCopy } from "../../shared-ts/src/utils/validation.js";
|
|
6
4
|
import { sameDelegatedWalletAuthorityV1 } from "../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
5
|
+
import { parseDigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
6
|
+
import { assertNeverLinkSessionStateV1 } from "../../shared-ts/src/device-linking/contracts.js";
|
|
7
7
|
import { parseExactAdministeredSignerManifestV1 } from "../../shared-ts/src/device-linking/delegatedActivationPlan.js";
|
|
8
8
|
import { parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1 } from "../../shared-ts/src/device-linking/sourceContribution.js";
|
|
9
9
|
import { parseLinkSessionStateV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceSessionClaimV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../shared-ts/src/device-linking/parsers.js";
|
|
@@ -39,6 +39,7 @@ function challengeValues(record) {
|
|
|
39
39
|
/** Statements on `email_otp_challenges`. */
|
|
40
40
|
const emailOtpChallengeRows = {
|
|
41
41
|
insert: (prepare, record) => prepare(INSERT_CHALLENGE_SQL, challengeValues(record)),
|
|
42
|
+
insertIfAbsent: (prepare, record) => prepare(`${INSERT_CHALLENGE_SQL} ON CONFLICT(namespace, org_id, project_id, env_id, challenge_id) DO NOTHING`, challengeValues(record)),
|
|
42
43
|
delete: (prepare, challengeId) => prepare(`DELETE FROM email_otp_challenges
|
|
43
44
|
WHERE namespace = ?
|
|
44
45
|
AND org_id = ?
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { coerceNonEmptyString, requireRecordOrArray } from "../shared-ts/src/utils/validation.js";
|
|
1
2
|
import { base64UrlDecode, base64UrlEncode } from "../shared-ts/src/utils/base64.js";
|
|
2
3
|
import { sha256Bytes } from "../shared-ts/src/utils/digests.js";
|
|
3
4
|
import { base58Encode } from "../shared-ts/src/utils/base58.js";
|
|
4
5
|
import "../shared-ts/src/utils/encoders.js";
|
|
5
|
-
import { coerceNonEmptyString, requireRecordOrArray } from "../shared-ts/src/utils/validation.js";
|
|
6
6
|
import { failure } from "../shared-ts/src/utils/failure.js";
|
|
7
7
|
import { ActionType, validateActionArgsWasm } from "../shared-ts/src/near/actions.js";
|
|
8
8
|
import { deriveImplicitNearAccountIdFromEd25519PublicKey, parseImplicitNearAccountId, parseNamedNearAccountId } from "../shared-ts/src/utils/near.js";
|
|
@@ -40,6 +40,8 @@ var RouterAbEcdsaPresignRuntime = class {
|
|
|
40
40
|
return await startRouterAbLinkedDeviceEcdsaPresignSession({
|
|
41
41
|
signingWorkerBaseUrl: transport.signingWorkerBaseUrl,
|
|
42
42
|
request: input.request,
|
|
43
|
+
walletScope: input.walletScope,
|
|
44
|
+
ownershipGeneration: input.ownershipGeneration,
|
|
43
45
|
materialSource: input.materialSource,
|
|
44
46
|
presignSessionId: input.presignSessionId,
|
|
45
47
|
expiresAtMs: input.expiresAtMs,
|
|
@@ -52,6 +54,8 @@ var RouterAbEcdsaPresignRuntime = class {
|
|
|
52
54
|
return await stepRouterAbLinkedDeviceEcdsaPresignSession({
|
|
53
55
|
signingWorkerBaseUrl: transport.signingWorkerBaseUrl,
|
|
54
56
|
request: input.request,
|
|
57
|
+
walletScope: input.walletScope,
|
|
58
|
+
ownershipGeneration: input.ownershipGeneration,
|
|
55
59
|
materialSource: input.materialSource,
|
|
56
60
|
presignSessionId: input.presignSessionId,
|
|
57
61
|
requestedStage: input.requestedStage,
|
|
@@ -2,8 +2,8 @@ import { mpcMaterialActivationRefsEqual, parseEmailOtpProviderUserId, parseLaneS
|
|
|
2
2
|
import { base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { alphabetizeStringify } from "../../shared-ts/src/utils/digests.js";
|
|
4
4
|
import { parseDigestB64u, sha256Utf8DigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
|
-
import { base58Encode } from "../../shared-ts/src/utils/base58.js";
|
|
6
5
|
import { parseEd25519PublicKeyB64u, parseKeyCreationSignerSlot, parseSecp256k1CompressedPublicKeyB64u } from "../../shared-ts/src/passkey-custody/primitives.js";
|
|
6
|
+
import { base58Encode } from "../../shared-ts/src/utils/base58.js";
|
|
7
7
|
import { routerAbMpcMaterialActivationRefFromWire, sameRouterAbMpcMaterialActivationRef } from "../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
8
8
|
import { deriveEvmFamilySigningKeySlotId } from "../../shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js";
|
|
9
9
|
import { walletAuthAuthorityRef } from "../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
@@ -85,6 +85,7 @@ var OrdinaryInactiveSignerMaterialReservationServiceV1 = class {
|
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
87
|
function validateOrdinaryInactiveSignerMaterialReservationRequestV1(request) {
|
|
88
|
+
if (!Number.isSafeInteger(request.ownershipGeneration) || request.ownershipGeneration < 1) throw new Error("ordinary signer material ownership generation is invalid");
|
|
88
89
|
switch (request.kind) {
|
|
89
90
|
case "ordinary_ed25519_signer_material_reservation_request_v1": {
|
|
90
91
|
if (request.preparation.kind !== "ordinary_ed25519_signer_material_reservation_preparation_v1") throw new Error("ordinary Ed25519 reservation preparation kind is invalid");
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { parseWalletId } from "./shared-ts/src/utils/domainIds.js";
|
|
2
|
+
import { parseTenantId } from "./shared-ts/src/authorization/capabilityKinds.js";
|
|
2
3
|
import { base64UrlEncode } from "./shared-ts/src/utils/base64.js";
|
|
3
4
|
import { parseRouterAbPublicKeysetV2 } from "./shared-ts/src/utils/routerAbPublicKeyset.js";
|
|
4
5
|
import { ROUTER_AB_ED25519_YAO_EXPORT_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_EXPORT_EXECUTE_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_ACTIVATE_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_EXECUTE_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_STATUS_PATH_V1, ROUTER_AB_ED25519_YAO_REGISTRATION_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1, ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1 } from "./shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
6
|
+
import { parseSessionOrigin } from "./authorization/domain.js";
|
|
5
7
|
import { parseD1JsonColumn } from "./storage/d1Sql.js";
|
|
6
8
|
import { D1WalletStore } from "./core/d1WalletStore.js";
|
|
7
9
|
import { D1WalletAuthMethodStore } from "./core/d1WalletAuthMethodStore.js";
|
|
10
|
+
import { WALLET_OBJECT_ADDRESSES_HEADER, WALLET_OBJECT_IDENTITY_HEADER, walletObjectIdentity, walletObjectIdentityHeaders } from "./router/cloudflare/runtime/walletObjectAddresses.js";
|
|
8
11
|
import { RouterAbEcdsaPresignRuntime } from "./core/routerAbSigning/RouterAbEcdsaPresignRuntime.js";
|
|
9
12
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1, decodeTenantRootIdentityWireV1 } from "./shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
10
13
|
import "./shared-ts/src/tenant-root/index.js";
|
|
@@ -14,8 +17,10 @@ import { createCloudflareWalletGatewayRouterV1 } from "./router/cloudflare/runti
|
|
|
14
17
|
import { createWalletRuntimeOpsHandler } from "./router/cloudflare/runtime/walletRuntimeOpsHandler.js";
|
|
15
18
|
import { handleWalletControlRequest } from "./router/cloudflare/runtime/walletControlOps.js";
|
|
16
19
|
import { resolveRuntimeTenantRootLineage } from "./router/cloudflare/runtime/walletConsoleTenantRootLineage.js";
|
|
20
|
+
import { D1WalletObjectAddresses } from "./router/cloudflare/d1/walletObjectAddresses.js";
|
|
17
21
|
import { ROUTER_AB_MPC_ROUTER_ORIGIN, ROUTER_AB_SIGNING_WORKER_ORIGIN, createRouterAbServiceBindingFetch } from "./router/cloudflare/runtime/routerAbServiceBindings.js";
|
|
18
22
|
import { readEnvironmentCsv, readEnvironmentString, requireEnvironmentString } from "./router/cloudflare/runtime/environment.js";
|
|
23
|
+
import { admitD1EstablishedWalletHome } from "./router/cloudflare/d1/registration/d1WalletExecutionAuthority.js";
|
|
19
24
|
import { createD1LinkedDeviceSourceContributionPreparationPlannerV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js";
|
|
20
25
|
import { readD1LinkedDeviceEcdsaSourceV1, readD1LinkedDeviceEd25519SourceV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js";
|
|
21
26
|
import { RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter } from "./router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js";
|
|
@@ -32,10 +37,12 @@ import { createD1LinkedDeviceOwnerSourceChildReaderV1 } from "./router/cloudflar
|
|
|
32
37
|
import { createCloudflareD1RouterApiAuthService } from "./router/cloudflare/d1/auth/d1RouterApiAuthService.js";
|
|
33
38
|
import { loadCloudflareSignerWasmModule } from "./router/cloudflare/runtime/cloudflareSignerWasm.js";
|
|
34
39
|
import { createEd25519SessionAdapter } from "./router/cloudflare/runtime/ed25519SessionAdapter.js";
|
|
40
|
+
import { WalletPlacementRoutes } from "./router/cloudflare/runtime/walletPlacementRoutes.js";
|
|
35
41
|
import { handleRouterAbEd25519YaoExportRequestScopedCloudflareV1 } from "./router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js";
|
|
36
42
|
import { handleRouterAbEd25519YaoRecoveryRequestScopedCloudflareV1 } from "./router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js";
|
|
37
43
|
import { RouterAbEd25519YaoRecoveryWalletSessionAuthorizationAdapter } from "./router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js";
|
|
38
44
|
import "./cloud-host.js";
|
|
45
|
+
import { WalletAuthorizationRelocationRoutes } from "./router/cloudflare/runtime/walletAuthorizationRelocationRoutes.js";
|
|
39
46
|
//#region src/hosted-wallet-gateway.ts
|
|
40
47
|
function readStagingHostedWalletOrigins(env) {
|
|
41
48
|
return readEnvironmentCsv(requireEnvironmentString(env, "HOSTED_WALLET_ORIGINS"));
|
|
@@ -43,6 +50,17 @@ function readStagingHostedWalletOrigins(env) {
|
|
|
43
50
|
const RELAY_SIGNER_READY_TABLES = Object.freeze([
|
|
44
51
|
"wallets",
|
|
45
52
|
"wallet_auth_methods",
|
|
53
|
+
"wallet_relocation_challenges",
|
|
54
|
+
"wallet_relocation_approvals",
|
|
55
|
+
"wallet_relocation_session_fences",
|
|
56
|
+
"wallet_relocation_authorization_fences",
|
|
57
|
+
"wallet_relocation_authorization_snapshots",
|
|
58
|
+
"wallet_relocation_authorization_chunks",
|
|
59
|
+
"wallet_relocation_authorization_intakes",
|
|
60
|
+
"wallet_relocation_authorization_intake_chunks",
|
|
61
|
+
"wallet_relocation_authorization_imports",
|
|
62
|
+
"wallet_relocation_authorization_import_context",
|
|
63
|
+
"wallet_relocation_authorization_import_receipts",
|
|
46
64
|
"authorization_wallet_session_quotas",
|
|
47
65
|
"wallet_session_authorizations_v2",
|
|
48
66
|
"wallet_session_hosted_credentials_v2",
|
|
@@ -134,14 +152,14 @@ async function resolveStagingDeploymentTenantRoot(scope, tenantRootCustodyLineag
|
|
|
134
152
|
}
|
|
135
153
|
async function resolveStagingRegistrationTenantRoot(context, input) {
|
|
136
154
|
switch (input.operation) {
|
|
137
|
-
case "registration": return await resolveStagingDeploymentTenantRoot(context.scope, context.tenantRootCustodyLineage, input
|
|
155
|
+
case "registration": return await resolveStagingDeploymentTenantRoot(context.scope, context.tenantRootCustodyLineage, input, input.root_share_epoch);
|
|
138
156
|
case "recovery":
|
|
139
157
|
case "export": throw new Error("Ed25519 active-material tenant-root resolver is unavailable");
|
|
140
158
|
}
|
|
141
159
|
}
|
|
142
160
|
async function resolveStagingTenantRoot(context, input) {
|
|
143
161
|
switch (input.operation) {
|
|
144
|
-
case "registration": return await resolveStagingDeploymentTenantRoot(context.scope, context.tenantRootCustodyLineage, input
|
|
162
|
+
case "registration": return await resolveStagingDeploymentTenantRoot(context.scope, context.tenantRootCustodyLineage, input, input.root_share_epoch);
|
|
145
163
|
case "recovery": return await context.resolveActiveTenantRoot({
|
|
146
164
|
walletId: input.admissionRequest.application_binding.wallet_id,
|
|
147
165
|
materialActivation: input.admissionRequest.active_material_activation
|
|
@@ -174,7 +192,7 @@ function createStagingLinkedDeviceTenantRootResolver(scope, tenantRootCustodyLin
|
|
|
174
192
|
tenantRootCustodyLineage
|
|
175
193
|
});
|
|
176
194
|
}
|
|
177
|
-
async function createStagingRouterApiAuthComposition(env, scope, yaoRuntime, tenantRootCustodyLineage, dependencies) {
|
|
195
|
+
async function createStagingRouterApiAuthComposition(env, scope, yaoRuntime, tenantRootCustodyLineage, dependencies, startRegistrationWallets) {
|
|
178
196
|
const ecdsaCeremonyTokenIssuer = createStagingEcdsaCeremonyTokenIssuer(env);
|
|
179
197
|
const topology = requireStagingEcdsaRegistrationTopology(env);
|
|
180
198
|
const tokenScope = {
|
|
@@ -183,12 +201,14 @@ async function createStagingRouterApiAuthComposition(env, scope, yaoRuntime, ten
|
|
|
183
201
|
environment: scope.envId
|
|
184
202
|
};
|
|
185
203
|
const ecdsaStrictRegistration = createRouterAbEcdsaStrictRegistrationPort({
|
|
204
|
+
internalServiceAuthSecret: requireEnvironmentString(env, "ROUTER_AB_GATEWAY_TO_ROUTER_AUTH_SECRET"),
|
|
186
205
|
router: env.MPC_ROUTER,
|
|
187
206
|
tokenIssuer: ecdsaCeremonyTokenIssuer,
|
|
188
207
|
tokenScope,
|
|
189
208
|
topology
|
|
190
209
|
});
|
|
191
210
|
const ecdsaStrictPostRegistration = createRouterAbEcdsaStrictPostRegistrationPort({
|
|
211
|
+
internalServiceAuthSecret: requireEnvironmentString(env, "ROUTER_AB_GATEWAY_TO_ROUTER_AUTH_SECRET"),
|
|
192
212
|
router: env.MPC_ROUTER,
|
|
193
213
|
tokenIssuer: ecdsaCeremonyTokenIssuer,
|
|
194
214
|
tokenScope,
|
|
@@ -198,12 +218,12 @@ async function createStagingRouterApiAuthComposition(env, scope, yaoRuntime, ten
|
|
|
198
218
|
service: createCloudflareD1RouterApiAuthService({
|
|
199
219
|
database: env.SIGNER_DB,
|
|
200
220
|
identityStore: dependencies.identityStore,
|
|
201
|
-
emailOtpRateLimitCounter: dependencies.emailOtpRateLimitCounter,
|
|
202
221
|
googleRegistrationAttempts: dependencies.googleRegistrationAttempts,
|
|
203
222
|
sessionRouting: dependencies.sessionRouting,
|
|
204
223
|
recoveryRouting: dependencies.recoveryRouting,
|
|
205
224
|
lifecycleRouting: dependencies.lifecycleRouting,
|
|
206
225
|
registrationAuthority: dependencies.registrationAuthority,
|
|
226
|
+
startRegistrationWallets,
|
|
207
227
|
credentialClaims: dependencies.credentialClaims,
|
|
208
228
|
syncChallenges: dependencies.syncChallenges,
|
|
209
229
|
linkedDeviceProofNonces: dependencies.linkedDeviceProofNonces,
|
|
@@ -263,7 +283,9 @@ async function resolveStagingActiveTenantRootFromLoader(context, input) {
|
|
|
263
283
|
}
|
|
264
284
|
async function resolveStagingRecoveryAuthorizationServices(context) {
|
|
265
285
|
const { service } = await loadStagingRouterApiAuthComposition(context);
|
|
286
|
+
const authority = service.walletExecution;
|
|
266
287
|
return {
|
|
288
|
+
admitEstablishedHome: authority.admitEstablishedHome.bind(authority),
|
|
267
289
|
authorizationSessions: service.authorizationSessions,
|
|
268
290
|
preparedRecoveryAdmission: service.passkeyCustody,
|
|
269
291
|
resolveEd25519MaterialActivation: service.walletRegistration.resolveEd25519MaterialActivation.bind(service.walletRegistration)
|
|
@@ -331,12 +353,14 @@ function stagingLinkedDeviceSessionComposition(env, scope, tenantRootCustodyLine
|
|
|
331
353
|
tenant: scope
|
|
332
354
|
}),
|
|
333
355
|
deactivationEndpoint: createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1({
|
|
356
|
+
admitEstablishedHome: admitD1EstablishedWalletHome.bind(void 0, env.SIGNER_DB, scope),
|
|
334
357
|
fetch: serviceFetch,
|
|
335
358
|
internalServiceAuthSecret,
|
|
336
359
|
tenant: scope
|
|
337
360
|
})
|
|
338
361
|
},
|
|
339
362
|
sourceContributionRouter: createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1({
|
|
363
|
+
admitEstablishedHome: admitD1EstablishedWalletHome.bind(void 0, env.SIGNER_DB, scope),
|
|
340
364
|
fetch: serviceFetch,
|
|
341
365
|
internalServiceAuthSecret: requireEnvironmentString(env, "ROUTER_AB_GATEWAY_TO_ROUTER_AUTH_SECRET"),
|
|
342
366
|
resolveTenantRoot: createStagingLinkedDeviceTenantRootResolver(scope, tenantRootCustodyLineage)
|
|
@@ -350,18 +374,34 @@ function stagingLinkedDeviceSessionComposition(env, scope, tenantRootCustodyLine
|
|
|
350
374
|
* stay on the Wallet Console deployment until policy/sponsorship resolution
|
|
351
375
|
* operations join the binding.
|
|
352
376
|
*/
|
|
353
|
-
async function createHostedWalletGatewayCompositionV1(env, dependencies = {}) {
|
|
377
|
+
async function createHostedWalletGatewayCompositionV1(env, dependencies = {}, background = null) {
|
|
354
378
|
const scope = stagingTenantScope(env);
|
|
355
379
|
const session = stagingSessionAdapter(env);
|
|
356
380
|
const tenantRootCustodyLineage = createStagingTenantRootCustodyLineage(createWalletConsoleOpsClient(env.WALLET_CONSOLE));
|
|
357
381
|
const yaoRuntime = createStagingYaoRequestScopedRuntime(env, createStagingRegistrationTenantRootResolver(scope, tenantRootCustodyLineage));
|
|
358
|
-
const { service, ecdsaStrictPostRegistration } = await createStagingRouterApiAuthComposition(env, scope, yaoRuntime, tenantRootCustodyLineage, dependencies);
|
|
382
|
+
const { service, ecdsaStrictPostRegistration } = await createStagingRouterApiAuthComposition(env, scope, yaoRuntime, tenantRootCustodyLineage, dependencies, background ? scheduleRegistrationRouterStartup.bind(void 0, env, background) : void 0);
|
|
383
|
+
const tenantId = parseTenantId(scope.orgId);
|
|
384
|
+
if (!tenantId.ok) throw new Error("Wallet placement authorization tenant is invalid");
|
|
359
385
|
return {
|
|
360
386
|
handler: createCloudflareWalletGatewayRouterV1({
|
|
361
387
|
service,
|
|
362
388
|
walletConsole: env.WALLET_CONSOLE,
|
|
389
|
+
registrationContext: dependencies.registrationContext,
|
|
363
390
|
signerDatabase: env.SIGNER_DB,
|
|
364
391
|
signerStorageNamespace: scope.namespace,
|
|
392
|
+
routeExtensions: [new WalletAuthorizationRelocationRoutes({
|
|
393
|
+
database: env.SIGNER_DB,
|
|
394
|
+
scope,
|
|
395
|
+
directory: env.WALLET_CONSOLE
|
|
396
|
+
}), new WalletPlacementRoutes({
|
|
397
|
+
emailOtp: service.relocationEmailOtp,
|
|
398
|
+
database: env.SIGNER_DB,
|
|
399
|
+
scope,
|
|
400
|
+
tenantId: tenantId.value,
|
|
401
|
+
allowedOrigins: readStagingHostedWalletOrigins(env).map(parseSessionOrigin),
|
|
402
|
+
authorizationSessions: service.authorizationSessions,
|
|
403
|
+
directory: env.WALLET_CONSOLE
|
|
404
|
+
})],
|
|
365
405
|
router: {
|
|
366
406
|
healthz: true,
|
|
367
407
|
readyz: true,
|
|
@@ -390,8 +430,8 @@ async function createHostedWalletGatewayCompositionV1(env, dependencies = {}) {
|
|
|
390
430
|
session
|
|
391
431
|
};
|
|
392
432
|
}
|
|
393
|
-
async function createSplitGatewayRouterHandler(env, dependencies = {}) {
|
|
394
|
-
return (await createHostedWalletGatewayCompositionV1(env, dependencies)).handler;
|
|
433
|
+
async function createSplitGatewayRouterHandler(env, dependencies = {}, background = null) {
|
|
434
|
+
return (await createHostedWalletGatewayCompositionV1(env, dependencies, background)).handler;
|
|
395
435
|
}
|
|
396
436
|
async function handleSplitGatewayWalletRuntimeRequest(request, env, dependencies = {}) {
|
|
397
437
|
const controlResponse = await handleWalletControlRequest(request, env);
|
|
@@ -463,6 +503,10 @@ async function readWalletRuntimeIdentities(env, input) {
|
|
|
463
503
|
return { identities: result };
|
|
464
504
|
}
|
|
465
505
|
async function handleSplitGatewayRequest(request, env, ctx, dependencies = {}) {
|
|
506
|
+
const headers = new Headers(request.headers);
|
|
507
|
+
headers.delete(WALLET_OBJECT_IDENTITY_HEADER);
|
|
508
|
+
headers.delete(WALLET_OBJECT_ADDRESSES_HEADER);
|
|
509
|
+
request = new Request(request, { headers });
|
|
466
510
|
if (request.method === "GET" && new URL(request.url).pathname === ROUTER_AB_CEREMONY_JWKS_PATH) return routerAbCeremonyJwksResponse(env);
|
|
467
511
|
const operation = yaoDirectOperationForRequest(request);
|
|
468
512
|
if (operation !== null) {
|
|
@@ -470,7 +514,7 @@ async function handleSplitGatewayRequest(request, env, ctx, dependencies = {}) {
|
|
|
470
514
|
withCors(response.headers, { corsOrigins: readEnvironmentCsv(env.RELAY_CORS_ORIGINS) }, request);
|
|
471
515
|
return response;
|
|
472
516
|
}
|
|
473
|
-
return await (await createSplitGatewayRouterHandler(env, dependencies))(request, env, ctx);
|
|
517
|
+
return await (await createSplitGatewayRouterHandler(env, dependencies, ctx))(request, env, ctx);
|
|
474
518
|
}
|
|
475
519
|
function requireStagingRouterAbPublicKeyset(env) {
|
|
476
520
|
const parsed = parseJsonValue(requireEnvironmentString(env, "ROUTER_AB_PUBLIC_KEYSET_JSON"));
|
|
@@ -673,6 +717,44 @@ function createStagingYaoRequestScopedRuntime(env, resolveTenantRoot) {
|
|
|
673
717
|
loadPersistedActiveCapability: loadStagingPersistedActiveCapability.bind(void 0, env)
|
|
674
718
|
});
|
|
675
719
|
}
|
|
720
|
+
async function scheduleRegistrationRouterStartup(env, background, registration) {
|
|
721
|
+
const tenant = stagingTenantScope(env);
|
|
722
|
+
const identity = walletObjectIdentity(registration.walletId, registration.ownershipGeneration, tenant);
|
|
723
|
+
await new D1WalletObjectAddresses(env.SIGNER_DB, tenant).initialize(identity, env.MPC_ROUTER, requireEnvironmentString(env, "ROUTER_AB_GATEWAY_TO_ROUTER_AUTH_SECRET"));
|
|
724
|
+
background.waitUntil(startRegistrationRouter(env, identity));
|
|
725
|
+
}
|
|
726
|
+
async function startRegistrationRouter(env, registration) {
|
|
727
|
+
const started = Date.now();
|
|
728
|
+
let outcome = "failure";
|
|
729
|
+
try {
|
|
730
|
+
const scope = stagingTenantScope(env);
|
|
731
|
+
const response = await env.MPC_ROUTER.fetch(`${ROUTER_AB_MPC_ROUTER_ORIGIN}/router-ab/router/wallet/start`, {
|
|
732
|
+
method: "POST",
|
|
733
|
+
headers: {
|
|
734
|
+
"content-type": "application/json",
|
|
735
|
+
...walletObjectIdentityHeaders(registration),
|
|
736
|
+
"x-router-ab-internal-service-auth": requireEnvironmentString(env, "ROUTER_AB_GATEWAY_TO_ROUTER_AUTH_SECRET")
|
|
737
|
+
},
|
|
738
|
+
body: JSON.stringify({
|
|
739
|
+
owner: {
|
|
740
|
+
org_id: scope.orgId,
|
|
741
|
+
project_id: scope.projectId,
|
|
742
|
+
env_id: scope.envId,
|
|
743
|
+
wallet_id: registration.walletId
|
|
744
|
+
},
|
|
745
|
+
ownership_generation: registration.ownershipGeneration
|
|
746
|
+
}),
|
|
747
|
+
signal: AbortSignal.timeout(3e3)
|
|
748
|
+
});
|
|
749
|
+
await response.arrayBuffer();
|
|
750
|
+
if (response.ok) outcome = "success";
|
|
751
|
+
} catch {}
|
|
752
|
+
console.log(JSON.stringify({
|
|
753
|
+
event: "registration_router_startup",
|
|
754
|
+
outcome,
|
|
755
|
+
duration_ms: Date.now() - started
|
|
756
|
+
}));
|
|
757
|
+
}
|
|
676
758
|
/**
|
|
677
759
|
* Builds the recovery request-scoped dependencies from the environment alone.
|
|
678
760
|
* This is new composition wiring over the existing authorization classes, not a
|
|
@@ -711,13 +793,14 @@ function createStagingRecoveryRequestScopedDependencies(env, tenantRootCustodyLi
|
|
|
711
793
|
* Router API factor and owner-proof services.
|
|
712
794
|
*/
|
|
713
795
|
function createStagingExportRequestScopedDependencies(env, service, tenantRootCustodyLineage) {
|
|
796
|
+
const authority = service.walletExecution;
|
|
714
797
|
const scope = stagingTenantScope(env);
|
|
715
798
|
const registrationTenantRootResolver = createStagingRegistrationTenantRootResolver(scope, tenantRootCustodyLineage);
|
|
716
799
|
const resolveActiveTenantRoot = resolveStagingActiveTenantRootFromService.bind(void 0, service);
|
|
717
800
|
return {
|
|
718
801
|
store: createStagingYaoPartitionedStateStore(env),
|
|
719
802
|
backend: createStagingEd25519YaoBackend(env, createStagingTenantRootResolver(scope, tenantRootCustodyLineage, resolveActiveTenantRoot)),
|
|
720
|
-
authorization: new RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter(service.webAuthn, service.emailOtp, service.walletAuthMethods, service.authorizedOperations, service.walletRegistration.resolveEd25519MaterialActivation.bind(service.walletRegistration)),
|
|
803
|
+
authorization: new RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter(service.webAuthn, service.emailOtp, service.walletAuthMethods, service.authorizedOperations, service.walletRegistration.resolveEd25519MaterialActivation.bind(service.walletRegistration), authority.admitEstablishedHome.bind(authority)),
|
|
721
804
|
capabilities: createStagingYaoRequestScopedRuntime(env, registrationTenantRootResolver)
|
|
722
805
|
};
|
|
723
806
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { requireCanonicalString } from "./shared-ts/src/utils/validation.js";
|
|
2
2
|
import "./shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
3
3
|
import { WALLET_CONSOLE_OP_PATHS_V1 } from "./router/cloudflare/runtime/walletConsoleOps.js";
|
|
4
|
+
import { WalletHomeCustodyBinding } from "./router/cloudflare/runtime/routerAbServiceBindings.js";
|
|
4
5
|
import { createStaticWalletConsoleBindingV1, parseStaticWalletConsoleBindingConfigV1 } from "./router/cloudflare/runtime/staticWalletConsoleBinding.js";
|
|
5
6
|
import { handleSplitGatewayRequest } from "./hosted-wallet-gateway.js";
|
|
6
7
|
import { LocalRegistrationSetupAuthority } from "./localRegistrationSetupAuthority.js";
|
|
@@ -11,7 +12,7 @@ import { LOCAL_INTENDED_ECDSA_FINALIZE_FAULT_HEADER_V1, LOCAL_INTENDED_ECDSA_FIN
|
|
|
11
12
|
import { LOCAL_INTENDED_YAO_FINALIZE_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_FINALIZE_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoFinalizeFaultDatabaseV1, parseLocalIntendedYaoFinalizeFaultModeV1, parseLocalIntendedYaoFinalizeFaultTokenV1, requestWithoutLocalIntendedYaoFinalizeFaultHeadersV1, responseWithLocalIntendedYaoFinalizeFaultOutcomeV1 } from "./localIntendedYaoFinalizeFault.js";
|
|
12
13
|
import { LOCAL_INTENDED_YAO_RECOVERY_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_RECOVERY_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoRecoveryFaultControllerV1, parseLocalIntendedYaoRecoveryFaultModeV1, parseLocalIntendedYaoRecoveryFaultTokenV1, releaseLocalIntendedYaoRecoveryExecuteV1, requestWithoutLocalIntendedYaoRecoveryFaultHeadersV1, responseWithLocalIntendedYaoRecoveryFaultOutcomeV1 } from "./localIntendedYaoRecoveryFault.js";
|
|
13
14
|
import { LOCAL_INTENDED_YAO_EXPORT_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_EXPORT_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoExportFaultDatabaseV1, parseLocalIntendedYaoExportFaultModeV1, parseLocalIntendedYaoExportFaultTokenV1, requestWithoutLocalIntendedYaoExportFaultHeadersV1, responseWithLocalIntendedYaoExportFaultOutcomeV1 } from "./localIntendedYaoExportFault.js";
|
|
14
|
-
import { LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoSigningFaultControllerV1,
|
|
15
|
+
import { LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoSigningFaultControllerV1, parseLocalIntendedYaoSigningFaultModeV1, parseLocalIntendedYaoSigningFaultTokenV1, releaseLocalIntendedYaoSigningFinalizeV1, requestWithoutLocalIntendedYaoSigningFaultHeadersV1, responseWithLocalIntendedYaoSigningFaultOutcomeV1 } from "./localIntendedYaoSigningFault.js";
|
|
15
16
|
import { LOCAL_INTENDED_LINK_EXECUTE_FAULT_HEADER_V1, LOCAL_INTENDED_LINK_EXECUTE_FAULT_TOKEN_HEADER_V1, LocalIntendedLinkExecuteFaultControllerV1, parseLocalIntendedLinkExecuteFaultModeV1, parseLocalIntendedLinkExecuteFaultTokenV1, requestWithoutLocalIntendedLinkExecuteFaultHeadersV1, responseWithLocalIntendedLinkExecuteFaultOutcomeV1 } from "./localIntendedLinkExecuteFault.js";
|
|
16
17
|
import { LINKED_DEVICE_REVOKE_PATH_PATTERN_V1, LOCAL_INTENDED_REVOKE_FAULT_HEADER_V1, LOCAL_INTENDED_REVOKE_FAULT_TOKEN_HEADER_V1, LocalIntendedRevokeFaultDatabaseV1, WALLET_REVOKE_AUTH_METHOD_PATH_PATTERN_V1, parseLocalIntendedRevokeFaultModeV1, parseLocalIntendedRevokeFaultTokenV1, requestWithoutLocalIntendedRevokeFaultHeadersV1, responseWithLocalIntendedRevokeFaultOutcomeV1 } from "./localIntendedRevokeFault.js";
|
|
17
18
|
import { LOCAL_INTENDED_SESSION_ADMISSION_FAULT_HEADER_V1, LOCAL_INTENDED_SESSION_ADMISSION_FAULT_TOKEN_HEADER_V1, LocalIntendedSessionAdmissionFaultDatabaseV1, parseLocalIntendedSessionAdmissionFaultModeV1, parseLocalIntendedSessionAdmissionFaultTokenV1, requestWithoutLocalIntendedSessionAdmissionFaultHeadersV1, responseWithLocalIntendedSessionAdmissionFaultOutcomeV1 } from "./localIntendedSessionAdmissionFault.js";
|
|
@@ -104,18 +105,21 @@ async function handleEcdsaRespondFault(request, env, ctx, dependencies, fault, e
|
|
|
104
105
|
*/
|
|
105
106
|
async function handleLocalHostedWalletGatewayRequestV1(request, env, ctx, dependencies) {
|
|
106
107
|
const config = parseStaticWalletConsoleBindingConfigV1(JSON.parse(env.WALLET_LOCAL_DEPLOYMENT_JSON));
|
|
108
|
+
const tenantScope = {
|
|
109
|
+
namespace: requireCanonicalString(env.SEAMS_TENANT_STORAGE_NAMESPACE, "Local namespace"),
|
|
110
|
+
orgId: config.deployment.orgId,
|
|
111
|
+
projectId: config.deployment.projectId,
|
|
112
|
+
envId: config.deployment.environmentKey
|
|
113
|
+
};
|
|
107
114
|
dependencies = {
|
|
108
115
|
emailOtpDeliveryProvider: dependencies?.emailOtpDeliveryProvider,
|
|
109
116
|
signerWasm: dependencies?.signerWasm,
|
|
110
|
-
registrationAuthority: new LocalRegistrationSetupAuthority(env.SIGNER_DB,
|
|
111
|
-
namespace: requireCanonicalString(env.SEAMS_TENANT_STORAGE_NAMESPACE, "Local namespace"),
|
|
112
|
-
orgId: config.deployment.orgId,
|
|
113
|
-
projectId: config.deployment.projectId,
|
|
114
|
-
envId: config.deployment.environmentKey
|
|
115
|
-
})
|
|
117
|
+
registrationAuthority: new LocalRegistrationSetupAuthority(env.SIGNER_DB, tenantScope)
|
|
116
118
|
};
|
|
117
119
|
const gatewayEnv = {
|
|
118
120
|
...env,
|
|
121
|
+
MPC_ROUTER: new WalletHomeCustodyBinding(env.MPC_ROUTER, "US", env.SIGNER_DB, tenantScope.namespace, null),
|
|
122
|
+
SIGNING_WORKER: new WalletHomeCustodyBinding(env.SIGNING_WORKER, "US", env.SIGNER_DB, tenantScope.namespace, null),
|
|
119
123
|
WALLET_CONSOLE: createStaticWalletConsoleBindingV1(config)
|
|
120
124
|
};
|
|
121
125
|
const canceledPresign = await localPresignCancellationProbe(request, gatewayEnv, ctx, dependencies);
|
|
@@ -163,7 +167,7 @@ async function handleLocalHostedWalletGatewayRequestV1(request, env, ctx, depend
|
|
|
163
167
|
const token = parseLocalIntendedYaoFaultTokenV1(rawToken);
|
|
164
168
|
const url = new URL(request.url);
|
|
165
169
|
if (url.protocol !== "http:" || url.hostname !== "127.0.0.1" || url.pathname !== "/router-ab/ed25519/yao/registration/execute" || request.method !== "POST" || !mode || !token) return Response.json({ code: "invalid_intended_yao_fault" }, { status: 400 });
|
|
166
|
-
const controller = new LocalIntendedYaoFaultControllerV1(
|
|
170
|
+
const controller = new LocalIntendedYaoFaultControllerV1(gatewayEnv.MPC_ROUTER.fetch.bind(gatewayEnv.MPC_ROUTER));
|
|
167
171
|
controller.arm(mode);
|
|
168
172
|
return responseWithLocalIntendedYaoFaultOutcomeV1(await handleSplitGatewayRequest(sanitizedRequest, {
|
|
169
173
|
...gatewayEnv,
|
|
@@ -262,7 +266,6 @@ async function handleYaoSigningFault(request, env, ctx, dependencies, rawMode, r
|
|
|
262
266
|
const url = new URL(request.url);
|
|
263
267
|
if (url.protocol !== "http:" || url.hostname !== "127.0.0.1" || url.pathname !== "/router-ab/ed25519/sign" || request.method !== "POST" || !mode || !token) return Response.json({ code: "invalid_intended_yao_signing_fault" }, { status: 400 });
|
|
264
268
|
if (mode === "release_signing_finalize") return await releaseLocalIntendedYaoSigningFinalizeV1(env.MPC_ROUTER, token);
|
|
265
|
-
if (mode === "arm_signing_worker_hold" || mode === "read_signing_worker_hold") return await commandLocalIntendedSigningWorkerHoldV1(env.SIGNING_WORKER, env.ROUTER_AB_GATEWAY_TO_SIGNING_WORKER_PRESIGN_AUTH_SECRET, mode, await request.json().catch(() => null));
|
|
266
269
|
const controller = new LocalIntendedYaoSigningFaultControllerV1(env.MPC_ROUTER.fetch.bind(env.MPC_ROUTER), mode, token);
|
|
267
270
|
return responseWithLocalIntendedYaoSigningFaultOutcomeV1(await handleSplitGatewayRequest(requestWithoutLocalIntendedYaoSigningFaultHeadersV1(request), {
|
|
268
271
|
...env,
|
|
@@ -4,16 +4,12 @@ const LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1 = "x-seams-intended-yao-signing
|
|
|
4
4
|
const LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1 = "x-seams-intended-yao-signing-fault-token-v1";
|
|
5
5
|
const LOCAL_INTENDED_YAO_FAULT_PROOF_HEADER_V1 = "x-seams-intended-yao-fault-proof-v1";
|
|
6
6
|
const ROUTER_AB_ED25519_SIGNING_FINALIZE_PATH_V1 = "/router-ab/ed25519/sign";
|
|
7
|
-
const SIGNING_WORKER_LOCAL_INTENDED_HOLD_URL_V1 = "https://signing-worker.router-ab.internal/router-ab/signing-worker/local-intended/hold";
|
|
8
|
-
const ROUTER_AB_INTERNAL_SERVICE_AUTH_HEADER_V1 = "x-router-ab-internal-service-auth";
|
|
9
7
|
const keptFinalizes = /* @__PURE__ */ new Map();
|
|
10
8
|
function parseLocalIntendedYaoSigningFaultModeV1(value) {
|
|
11
9
|
switch (value) {
|
|
12
10
|
case "capture_signing_finalize":
|
|
13
11
|
case "withhold_signing_finalize":
|
|
14
|
-
case "release_signing_finalize":
|
|
15
|
-
case "arm_signing_worker_hold":
|
|
16
|
-
case "read_signing_worker_hold": return value;
|
|
12
|
+
case "release_signing_finalize": return value;
|
|
17
13
|
default: return null;
|
|
18
14
|
}
|
|
19
15
|
}
|
|
@@ -82,30 +78,6 @@ async function releaseLocalIntendedYaoSigningFinalizeV1(router, token) {
|
|
|
82
78
|
original: kept.original
|
|
83
79
|
});
|
|
84
80
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Arms or reads the SigningWorker's hold on one wallet's next NEAR finalize,
|
|
87
|
-
* with the Gateway's own SigningWorker credential, and answers with the
|
|
88
|
-
* SigningWorker's reply.
|
|
89
|
-
*/
|
|
90
|
-
async function commandLocalIntendedSigningWorkerHoldV1(signingWorker, credential, mode, body) {
|
|
91
|
-
const walletId = body?.wallet_id;
|
|
92
|
-
if (!credential || typeof walletId !== "string" || walletId === "") return Response.json({ code: "invalid_intended_signing_worker_hold" }, { status: 400 });
|
|
93
|
-
const reply = await signingWorker.fetch(new Request(SIGNING_WORKER_LOCAL_INTENDED_HOLD_URL_V1, {
|
|
94
|
-
method: "POST",
|
|
95
|
-
headers: {
|
|
96
|
-
"content-type": "application/json",
|
|
97
|
-
[ROUTER_AB_INTERNAL_SERVICE_AUTH_HEADER_V1]: credential
|
|
98
|
-
},
|
|
99
|
-
body: JSON.stringify({
|
|
100
|
-
command: mode === "arm_signing_worker_hold" ? "arm" : "read",
|
|
101
|
-
wallet_id: walletId
|
|
102
|
-
})
|
|
103
|
-
}));
|
|
104
|
-
return Response.json({
|
|
105
|
-
status: reply.status,
|
|
106
|
-
body: await reply.text()
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
81
|
function requestWithoutLocalIntendedYaoSigningFaultHeadersV1(request) {
|
|
110
82
|
const headers = new Headers(request.headers);
|
|
111
83
|
headers.delete(LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1);
|
|
@@ -122,6 +94,6 @@ function responseWithLocalIntendedYaoSigningFaultOutcomeV1(response, outcome) {
|
|
|
122
94
|
});
|
|
123
95
|
}
|
|
124
96
|
//#endregion
|
|
125
|
-
export { LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoSigningFaultControllerV1, ROUTER_AB_ED25519_SIGNING_FINALIZE_PATH_V1,
|
|
97
|
+
export { LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1, LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1, LocalIntendedYaoSigningFaultControllerV1, ROUTER_AB_ED25519_SIGNING_FINALIZE_PATH_V1, parseLocalIntendedYaoSigningFaultModeV1, parseLocalIntendedYaoSigningFaultTokenV1, releaseLocalIntendedYaoSigningFinalizeV1, requestWithoutLocalIntendedYaoSigningFaultHeadersV1, responseWithLocalIntendedYaoSigningFaultOutcomeV1 };
|
|
126
98
|
|
|
127
99
|
//# sourceMappingURL=localIntendedYaoSigningFault.js.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { D1RegistrationCeremonyRecordStore } from "./router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js";
|
|
2
2
|
import { parseWalletRegistrationSetupReservation, proposeWalletRegistrationSetup, walletRegistrationSetupRequestDigest } from "./router/domains/walletRegistration/walletRegistrationReservation.js";
|
|
3
3
|
//#region src/localRegistrationSetupAuthority.ts
|
|
4
|
+
/** The standalone host never relocates a wallet, so every wallet keeps its first generation. */
|
|
5
|
+
const LOCAL_OWNERSHIP_GENERATION = 1;
|
|
4
6
|
var LocalRegistrationSetupAuthority = class {
|
|
5
7
|
constructor(database, scope) {
|
|
6
8
|
this.scope = scope;
|
|
@@ -48,6 +50,7 @@ var LocalRegistrationSetupAuthority = class {
|
|
|
48
50
|
return {
|
|
49
51
|
ok: true,
|
|
50
52
|
reservation,
|
|
53
|
+
ownershipGeneration: LOCAL_OWNERSHIP_GENERATION,
|
|
51
54
|
lifecycle: terminal?.value.outcome === "established" ? "established" : "reserved"
|
|
52
55
|
};
|
|
53
56
|
}
|
|
@@ -59,7 +62,11 @@ var LocalRegistrationSetupAuthority = class {
|
|
|
59
62
|
code: "wallet_home_unavailable",
|
|
60
63
|
message: "Registration home is unavailable"
|
|
61
64
|
};
|
|
62
|
-
return {
|
|
65
|
+
return {
|
|
66
|
+
ok: true,
|
|
67
|
+
ownershipGeneration: LOCAL_OWNERSHIP_GENERATION,
|
|
68
|
+
purpose: terminal?.value.outcome === "established" ? "ordinary" : "registration"
|
|
69
|
+
};
|
|
63
70
|
}
|
|
64
71
|
async complete(input) {
|
|
65
72
|
const identity = await this.storage.get("setup-ceremony-index", input.ceremonyId);
|
|
@@ -109,12 +109,23 @@ async function validateRouterAbEd25519WalletSessionInputs(input) {
|
|
|
109
109
|
const token = extractBearerCredential(input.headers);
|
|
110
110
|
if (!token) return walletSessionFailure("wallet_session_missing");
|
|
111
111
|
const nowMs = input.nowMs || Date.now;
|
|
112
|
+
let read;
|
|
112
113
|
let resolution;
|
|
113
114
|
try {
|
|
114
|
-
|
|
115
|
-
authorizationSessions,
|
|
115
|
+
read = await authorizationSessions.readEd25519WalletSessionSigningReadByOperationCredential({
|
|
116
|
+
tenantId: authorizationSessions.tenantId,
|
|
116
117
|
token,
|
|
117
118
|
nowMs: nowMs(),
|
|
119
|
+
materialActivation: input.materialActivation
|
|
120
|
+
});
|
|
121
|
+
if (!read) return {
|
|
122
|
+
ok: false,
|
|
123
|
+
code: "wallet_session_invalid",
|
|
124
|
+
message: walletSessionFailureMessage("wallet_session_invalid")
|
|
125
|
+
};
|
|
126
|
+
resolution = resolveWalletSessionOperationCredentialAdmissionFromContext({
|
|
127
|
+
context: read.context,
|
|
128
|
+
nowMs: nowMs(),
|
|
118
129
|
operation: {
|
|
119
130
|
keyFamily: "ed25519",
|
|
120
131
|
operationKind: input.operationKind
|
|
@@ -123,18 +134,14 @@ async function validateRouterAbEd25519WalletSessionInputs(input) {
|
|
|
123
134
|
} catch {
|
|
124
135
|
return walletSessionFailure("wallet_session_unavailable");
|
|
125
136
|
}
|
|
126
|
-
if (resolution.kind === "rejected") return walletSessionFailure("wallet_session_scope_mismatch");
|
|
127
|
-
if (resolution.kind === "not_found") return {
|
|
128
|
-
ok: false,
|
|
129
|
-
code: "wallet_session_invalid",
|
|
130
|
-
message: walletSessionFailureMessage("wallet_session_invalid")
|
|
131
|
-
};
|
|
132
|
-
if (resolution.admission.curve !== "ed25519") return walletSessionFailure("wallet_session_scope_mismatch");
|
|
137
|
+
if (resolution.kind === "rejected" || resolution.admission.curve !== "ed25519") return walletSessionFailure("wallet_session_scope_mismatch");
|
|
133
138
|
return {
|
|
134
139
|
ok: true,
|
|
135
140
|
kind: "wallet_session_operation_credential_v1",
|
|
136
141
|
admission: resolution.admission,
|
|
137
|
-
context: resolution.admission.context
|
|
142
|
+
context: resolution.admission.context,
|
|
143
|
+
signerRead: read.signerRead,
|
|
144
|
+
policyRead: read.policyRead
|
|
138
145
|
};
|
|
139
146
|
}
|
|
140
147
|
async function validateEcdsaPreprocessingSession(input) {
|