@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
|
@@ -68,7 +68,17 @@ function registrationSignerBranchesFromPlan(plan) {
|
|
|
68
68
|
evmFamilyEcdsa: findRegistrationSignerPlanEvmFamilyEcdsaBranch(plan)
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
+
function recordRegistrationServerTiming(sink, name, startedAtMs) {
|
|
72
|
+
sink.push([name, Math.max(0, Date.now() - startedAtMs)]);
|
|
73
|
+
}
|
|
74
|
+
async function recordRegistrationPromiseTiming(args) {
|
|
75
|
+
try {
|
|
76
|
+
return await args.promise;
|
|
77
|
+
} finally {
|
|
78
|
+
recordRegistrationServerTiming(args.sink, args.name, args.startedAtMs);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
71
81
|
//#endregion
|
|
72
|
-
export { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan, startD1RegistrationRouteTiming };
|
|
82
|
+
export { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan, startD1RegistrationRouteTiming };
|
|
73
83
|
|
|
74
84
|
//# sourceMappingURL=d1RegistrationSetupSupport.js.map
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
|
|
2
|
+
import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
|
|
3
|
+
//#region src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.ts
|
|
4
|
+
var D1WalletExecutionAuthority = class {
|
|
5
|
+
constructor(database, scope, registration) {
|
|
6
|
+
this.database = database;
|
|
7
|
+
this.scope = scope;
|
|
8
|
+
this.registration = registration;
|
|
9
|
+
}
|
|
10
|
+
reserve(input) {
|
|
11
|
+
return this.registration.reserve(input);
|
|
12
|
+
}
|
|
13
|
+
async admitHome(input) {
|
|
14
|
+
const result = await this.prepareHomeRead(input).all();
|
|
15
|
+
return this.admitHomeRead(input, result);
|
|
16
|
+
}
|
|
17
|
+
prepareHomeRead(input) {
|
|
18
|
+
return prepareD1TenantStatement(this.database, this.scope, `SELECT generation, state, registration_completion,
|
|
19
|
+
EXISTS (SELECT 1 FROM wallet_relocation_write_blocks block
|
|
20
|
+
WHERE block.namespace = ?1 AND block.org_id = ?2 AND block.project_id = ?3
|
|
21
|
+
AND block.env_id = ?4 AND block.wallet_id = ?5 AND block.source_generation = generation
|
|
22
|
+
AND block.state IN ('draining', 'checked')) AS relocation_blocked
|
|
23
|
+
FROM wallet_execution_generations
|
|
24
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
25
|
+
AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6`, [input.walletId, input.ceremonyId]);
|
|
26
|
+
}
|
|
27
|
+
async admitHomeRead(input, result) {
|
|
28
|
+
if (!result.success) throw new Error("Registration home D1 read failed");
|
|
29
|
+
const local = result.results?.[0];
|
|
30
|
+
if (local) {
|
|
31
|
+
if (typeof local.generation !== "number" || !Number.isSafeInteger(local.generation) || local.generation < 1 || local.relocation_blocked !== 0 && local.relocation_blocked !== 1) throw new Error("Registration execution identity is invalid");
|
|
32
|
+
switch (local.state) {
|
|
33
|
+
case "active":
|
|
34
|
+
if (local.relocation_blocked === 1) return {
|
|
35
|
+
ok: false,
|
|
36
|
+
code: "wallet_home_unavailable",
|
|
37
|
+
message: "Wallet execution is not active at this home"
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
ok: true,
|
|
41
|
+
purpose: "ordinary",
|
|
42
|
+
ownershipGeneration: local.generation
|
|
43
|
+
};
|
|
44
|
+
case "registering":
|
|
45
|
+
if (local.registration_completion === "pending") return {
|
|
46
|
+
ok: true,
|
|
47
|
+
purpose: "registration",
|
|
48
|
+
ownershipGeneration: local.generation
|
|
49
|
+
};
|
|
50
|
+
if (local.registration_completion !== "established") throw new Error("Registration completion state is invalid");
|
|
51
|
+
return {
|
|
52
|
+
ok: true,
|
|
53
|
+
purpose: "registration",
|
|
54
|
+
ownershipGeneration: local.generation
|
|
55
|
+
};
|
|
56
|
+
case "retired":
|
|
57
|
+
if (local.registration_completion === "cancelled") {
|
|
58
|
+
const published = await this.cancel(input);
|
|
59
|
+
if (!published.ok) return published;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
ok: false,
|
|
63
|
+
code: "wallet_home_unavailable",
|
|
64
|
+
message: "Registration execution is retired at this home"
|
|
65
|
+
};
|
|
66
|
+
default: throw new Error("Registration execution state is invalid");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
code: "wallet_home_unavailable",
|
|
72
|
+
message: "Registration setup has no local execution identity"
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async cancel(input) {
|
|
76
|
+
const completion = {
|
|
77
|
+
...input,
|
|
78
|
+
outcome: "cancelled"
|
|
79
|
+
};
|
|
80
|
+
await this.fixCancellation(input);
|
|
81
|
+
const completed = await this.registration.complete(completion);
|
|
82
|
+
if (!completed.ok) return completed;
|
|
83
|
+
await this.database.batch(this.prepareState(input, "retired"));
|
|
84
|
+
return completed;
|
|
85
|
+
}
|
|
86
|
+
async publishEstablished(input) {
|
|
87
|
+
if (input.registration.state === "active") return {
|
|
88
|
+
ok: true,
|
|
89
|
+
activation: null
|
|
90
|
+
};
|
|
91
|
+
const completed = await this.registration.complete({
|
|
92
|
+
ceremonyId: input.registration.ceremonyId,
|
|
93
|
+
walletId: input.registration.walletId,
|
|
94
|
+
outcome: "established",
|
|
95
|
+
session: input.session
|
|
96
|
+
});
|
|
97
|
+
if (!completed.ok) return completed;
|
|
98
|
+
return {
|
|
99
|
+
ok: true,
|
|
100
|
+
activation: { statements: this.prepareState(input.registration, "active") }
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async fixCancellation(input) {
|
|
104
|
+
await this.database.batch([prepareD1TenantStatement(this.database, this.scope, `UPDATE wallet_execution_generations
|
|
105
|
+
SET registration_completion = 'cancelled', state = 'retired'
|
|
106
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
107
|
+
AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6
|
|
108
|
+
AND registration_completion IN ('pending', 'cancelled')
|
|
109
|
+
AND state IN ('registering', 'retired')`, [input.walletId, input.ceremonyId]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)]);
|
|
110
|
+
}
|
|
111
|
+
/** The state update with its guard. The guard reads the row count of the update before it. */
|
|
112
|
+
prepareState(input, state) {
|
|
113
|
+
return [prepareD1TenantStatement(this.database, this.scope, `UPDATE wallet_execution_generations SET state = ?7
|
|
114
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
115
|
+
AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6
|
|
116
|
+
AND state IN ('registering', ?7)`, [
|
|
117
|
+
input.walletId,
|
|
118
|
+
input.ceremonyId,
|
|
119
|
+
state
|
|
120
|
+
]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)];
|
|
121
|
+
}
|
|
122
|
+
async admitEstablishedHome(input) {
|
|
123
|
+
return admitD1EstablishedWalletHome(this.database, this.scope, input);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
/** Records the authenticated reservation beside setup without reopening a retired home. */
|
|
127
|
+
function prepareD1RegistrationHomeReservation(database, scope, input) {
|
|
128
|
+
if (!Number.isSafeInteger(input.ownershipGeneration) || input.ownershipGeneration < 1) throw new Error("Registration execution generation is invalid");
|
|
129
|
+
const identity = [
|
|
130
|
+
input.walletId,
|
|
131
|
+
input.ownershipGeneration,
|
|
132
|
+
input.ceremonyId
|
|
133
|
+
];
|
|
134
|
+
return [
|
|
135
|
+
prepareD1TenantStatement(database, scope, `INSERT INTO wallet_execution_generations
|
|
136
|
+
(namespace, org_id, project_id, env_id, wallet_id, generation, origin, origin_id, state)
|
|
137
|
+
VALUES (?1, ?2, ?3, ?4, ?5, ?6, 'registration', ?7, 'registering')
|
|
138
|
+
ON CONFLICT DO NOTHING`, identity),
|
|
139
|
+
prepareD1TenantStatement(database, scope, `UPDATE wallet_execution_generations SET state = state
|
|
140
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
141
|
+
AND wallet_id = ?5 AND generation = ?6 AND origin = 'registration'
|
|
142
|
+
AND origin_id = ?7 AND state IN ('registering', 'active')`, identity),
|
|
143
|
+
database.prepare(D1_BATCH_CAS_GUARD_SQL)
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
async function admitD1EstablishedWalletHome(database, scope, input) {
|
|
147
|
+
const row = await prepareD1TenantStatement(database, scope, `SELECT generation FROM wallet_execution_generations
|
|
148
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
149
|
+
AND wallet_id = ?5 AND state = 'active'
|
|
150
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_write_blocks block
|
|
151
|
+
WHERE block.namespace = ?1 AND block.org_id = ?2 AND block.project_id = ?3
|
|
152
|
+
AND block.env_id = ?4 AND block.wallet_id = ?5 AND block.source_generation = generation
|
|
153
|
+
AND block.state IN ('draining', 'checked'))`, [input.walletId]).first();
|
|
154
|
+
if (!row) return {
|
|
155
|
+
ok: false,
|
|
156
|
+
code: "wallet_home_unavailable",
|
|
157
|
+
message: "Wallet execution is not active at this home"
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
ok: true,
|
|
161
|
+
purpose: "ordinary",
|
|
162
|
+
ownershipGeneration: row.generation
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//#endregion
|
|
166
|
+
export { D1WalletExecutionAuthority, admitD1EstablishedWalletHome, prepareD1RegistrationHomeReservation };
|
|
167
|
+
|
|
168
|
+
//# sourceMappingURL=d1WalletExecutionAuthority.js.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createCloudflareD1VersionedJsonRecordStore } from "../versionedJson/d1VersionedJsonRecordStore.js";
|
|
2
|
+
import { D1WalletCeremonyActivity } from "../ed25519Yao/d1WalletCeremonyActivity.js";
|
|
3
|
+
import { lifecycleWriteFenceStatements } from "../ed25519Yao/d1Ed25519YaoStateWriteFence.js";
|
|
4
|
+
//#region src/router/cloudflare/d1/registration/d1WalletOperationStore.ts
|
|
5
|
+
var D1WalletOperationStore = class {
|
|
6
|
+
constructor(options, walletId) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.walletId = walletId;
|
|
9
|
+
this.records = createCloudflareD1VersionedJsonRecordStore(options);
|
|
10
|
+
this.activity = new D1WalletCeremonyActivity(options.database, options.scope);
|
|
11
|
+
}
|
|
12
|
+
read(key) {
|
|
13
|
+
return this.records.read(key);
|
|
14
|
+
}
|
|
15
|
+
prepareRead(key) {
|
|
16
|
+
return this.records.prepareRead(key);
|
|
17
|
+
}
|
|
18
|
+
parseReadResult(result) {
|
|
19
|
+
return this.records.parseReadResult(result);
|
|
20
|
+
}
|
|
21
|
+
listByKeyPrefix(key, options) {
|
|
22
|
+
return this.records.listByKeyPrefix(key, options);
|
|
23
|
+
}
|
|
24
|
+
put(key, value, expectedVersion) {
|
|
25
|
+
return this.commit(key, value, expectedVersion, []);
|
|
26
|
+
}
|
|
27
|
+
/** As `put`, with another store's write on this database in the same batch. */
|
|
28
|
+
putWithCompanion(key, value, expectedVersion, companionWrite) {
|
|
29
|
+
return this.commit(key, value, expectedVersion, companionWrite.statements);
|
|
30
|
+
}
|
|
31
|
+
async commit(key, value, expectedVersion, companionStatements) {
|
|
32
|
+
const walletId = this.walletId(value);
|
|
33
|
+
const result = await this.records.putManyWithAdditionalStatements([{
|
|
34
|
+
key,
|
|
35
|
+
value,
|
|
36
|
+
expectedVersion
|
|
37
|
+
}], [
|
|
38
|
+
...lifecycleWriteFenceStatements(this.options, new Set([walletId])),
|
|
39
|
+
this.activity.project(this.records.storageKey(key), walletId, value.kind !== "router_ab_ed25519_yao_registration_side_effect_claim_v1"),
|
|
40
|
+
...companionStatements
|
|
41
|
+
]);
|
|
42
|
+
if (result.kind === "version_mismatch") return { kind: "version_mismatch" };
|
|
43
|
+
for (const entry of result.versions) if (entry.key === key) return {
|
|
44
|
+
kind: "stored",
|
|
45
|
+
version: entry.version
|
|
46
|
+
};
|
|
47
|
+
throw new Error("Wallet operation commit omitted its record version");
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { D1WalletOperationStore };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=d1WalletOperationStore.js.map
|
|
@@ -11,6 +11,8 @@ import { prepareD1WebAuthnCredentialBindingPutStatement } from "../../../../core
|
|
|
11
11
|
import { prepareD1WebAuthnAuthenticatorPutStatement } from "../webauthn/d1WebAuthnStore.js";
|
|
12
12
|
import { prepareD1WalletSessionAuthorityProjectionStatements } from "../authorization/walletSessionAuthorityProjection.js";
|
|
13
13
|
import { prepareD1WalletAuthorityExtensionCasGuard, prepareD1WalletAuthorityExtensionStatement, prepareD1WalletAuthorityPutStatement } from "../wallet/d1WalletAuthorityStore.js";
|
|
14
|
+
import { createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1 } from "../ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js";
|
|
15
|
+
import { commitRouterAbEd25519YaoRegistrationCapability } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js";
|
|
14
16
|
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.ts
|
|
15
17
|
function requireScopeString(value, field) {
|
|
16
18
|
const normalized = normalizeOptionalTrimmedString(value);
|
|
@@ -25,8 +27,10 @@ function normalizeScope(input) {
|
|
|
25
27
|
envId: requireScopeString(input.envId, "envId")
|
|
26
28
|
};
|
|
27
29
|
}
|
|
28
|
-
function assertCommitWalletIdentity(input) {
|
|
29
|
-
|
|
30
|
+
function assertCommitWalletIdentity(input, authority) {
|
|
31
|
+
const expectedKind = authority.kind === "passkey" ? "passkey_wallet_registration_commit_v1" : "email_otp_wallet_registration_commit_v1";
|
|
32
|
+
if (input.kind !== expectedKind) throw new Error("Registration commit does not match its reserved authority");
|
|
33
|
+
if (authority.walletId !== input.wallet.walletId) throw new Error("Registration authority walletId does not match wallet record");
|
|
30
34
|
if (input.foundingAuthority) {
|
|
31
35
|
if (!input.foundingAuthMethod) throw new Error("Founding wallet authority is missing its auth method");
|
|
32
36
|
if (input.foundingAuthority.walletId !== input.wallet.walletId || input.foundingAuthMethod.walletId !== input.wallet.walletId || input.foundingAuthMethod.walletAuthorityId !== input.foundingAuthority.authorityId) throw new Error("Founding authority identities do not match wallet registration");
|
|
@@ -122,22 +126,29 @@ function canExtendFoundingAuthorityWithEd25519(existing, next) {
|
|
|
122
126
|
async function prepareFoundingStatements(input) {
|
|
123
127
|
if (!input.foundingAuthority) return [];
|
|
124
128
|
const foundingAuthMethod = requireFoundingAuthMethod(input.foundingAuthMethod);
|
|
125
|
-
const
|
|
129
|
+
const authorityRead = input.database.prepare(`SELECT record_json
|
|
126
130
|
FROM wallet_authorities
|
|
127
131
|
WHERE namespace = ?
|
|
128
132
|
AND org_id = ?
|
|
129
133
|
AND project_id = ?
|
|
130
134
|
AND env_id = ?
|
|
131
135
|
AND authority_id = ?
|
|
132
|
-
LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(input.foundingAuthority.authorityId))
|
|
133
|
-
const
|
|
136
|
+
LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(input.foundingAuthority.authorityId));
|
|
137
|
+
const authMethodRead = input.database.prepare(`SELECT record_json
|
|
134
138
|
FROM wallet_auth_methods
|
|
135
139
|
WHERE namespace = ?
|
|
136
140
|
AND org_id = ?
|
|
137
141
|
AND project_id = ?
|
|
138
142
|
AND env_id = ?
|
|
139
143
|
AND wallet_auth_method_id = ?
|
|
140
|
-
LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(foundingAuthMethod.walletAuthMethodId))
|
|
144
|
+
LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(foundingAuthMethod.walletAuthMethodId));
|
|
145
|
+
const results = await input.database.batch([authorityRead, authMethodRead]);
|
|
146
|
+
assertBatchSucceeded({
|
|
147
|
+
expectedStatementCount: 2,
|
|
148
|
+
results
|
|
149
|
+
});
|
|
150
|
+
const authorityRow = results[0]?.results?.[0] ?? null;
|
|
151
|
+
const authMethodRow = results[1]?.results?.[0] ?? null;
|
|
141
152
|
let persistedAuthority = null;
|
|
142
153
|
if (authorityRow) {
|
|
143
154
|
const parsedAuthority = parseWalletAuthorityV1(parseD1JsonColumn(authorityRow.record_json));
|
|
@@ -196,49 +207,79 @@ var CloudflareD1WalletRegistrationCommitStore = class {
|
|
|
196
207
|
this.database = input.database;
|
|
197
208
|
this.scope = normalizeScope(input);
|
|
198
209
|
}
|
|
199
|
-
async
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
credentialIdB64u: input.authority.credentialIdB64u
|
|
210
|
+
async reserveAuthority(authority) {
|
|
211
|
+
if (authority.kind === "passkey") await reservePasskeyCredential(this.credentialClaims, {
|
|
212
|
+
walletId: authority.walletId,
|
|
213
|
+
rpId: authority.rpId,
|
|
214
|
+
credentialIdB64u: authority.credentialIdB64u
|
|
205
215
|
});
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
now: input.now
|
|
232
|
-
}));
|
|
233
|
-
statements.push(...emailOtpCommitStatements(input));
|
|
234
|
-
statements.push(...input.decisionStatements);
|
|
235
|
-
const results = await this.database.batch(statements);
|
|
216
|
+
return this.commit.bind(this, authority);
|
|
217
|
+
}
|
|
218
|
+
async commit(authority, input, executeBatch) {
|
|
219
|
+
assertCommitWalletIdentity(input, authority);
|
|
220
|
+
const ed25519Signer = input.walletSigners.find(isEd25519Signer);
|
|
221
|
+
if (ed25519Signer) {
|
|
222
|
+
const capability = ed25519Signer.activeYaoCapability;
|
|
223
|
+
if (capability.version !== "wallet_ed25519_yao_registration_capability_v1") throw new Error("A registration commit requires its registration capability");
|
|
224
|
+
const installed = await commitRouterAbEd25519YaoRegistrationCapability(createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1({
|
|
225
|
+
database: this.database,
|
|
226
|
+
scope: this.scope
|
|
227
|
+
}), {
|
|
228
|
+
kind: "router_ab_ed25519_yao_registration_finalize_capability_v1",
|
|
229
|
+
activeCapabilityBinding: capability.activeCapabilityBinding,
|
|
230
|
+
nearAccountId: capability.nearAccountId,
|
|
231
|
+
registrationAdmissionRequest: capability.admissionRequest,
|
|
232
|
+
registrationAdmissionReceipt: capability.admissionReceipt,
|
|
233
|
+
registrationResult: capability.activationResult,
|
|
234
|
+
runtimePolicyScope: capability.runtimePolicyScope
|
|
235
|
+
}, prepareWalletWrite(this.database, this.scope, authority, input, executeBatch));
|
|
236
|
+
if (!installed.ok) throw new Error(installed.message);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const { statements } = await prepareWalletWrite(this.database, this.scope, authority, input);
|
|
240
|
+
const results = executeBatch ? await executeBatch(statements) : await this.database.batch(statements);
|
|
236
241
|
assertBatchSucceeded({
|
|
237
242
|
expectedStatementCount: statements.length,
|
|
238
243
|
results
|
|
239
244
|
});
|
|
240
245
|
}
|
|
241
246
|
};
|
|
247
|
+
async function prepareWalletWrite(database, scope, authority, input, executeBatch) {
|
|
248
|
+
const foundingStatements = await prepareFoundingStatements({
|
|
249
|
+
database,
|
|
250
|
+
scope,
|
|
251
|
+
foundingAuthority: input.foundingAuthority,
|
|
252
|
+
foundingAuthMethod: input.foundingAuthMethod,
|
|
253
|
+
now: input.now
|
|
254
|
+
});
|
|
255
|
+
const statements = [prepareD1WalletPutSubjectStatement({
|
|
256
|
+
database,
|
|
257
|
+
scope,
|
|
258
|
+
record: input.wallet
|
|
259
|
+
})];
|
|
260
|
+
for (const signer of input.walletSigners) statements.push(prepareD1WalletPutSignerStatement({
|
|
261
|
+
database,
|
|
262
|
+
scope,
|
|
263
|
+
record: signer
|
|
264
|
+
}));
|
|
265
|
+
statements.push(...prepareAuthorityStatements({
|
|
266
|
+
database,
|
|
267
|
+
scope,
|
|
268
|
+
authority,
|
|
269
|
+
walletSigners: input.walletSigners,
|
|
270
|
+
foundingAuthority: input.foundingAuthority,
|
|
271
|
+
foundingAuthMethod: input.foundingAuthMethod,
|
|
272
|
+
foundingStatements,
|
|
273
|
+
now: input.now
|
|
274
|
+
}), ...emailOtpCommitStatements(input), ...input.decisionStatements);
|
|
275
|
+
return {
|
|
276
|
+
statements,
|
|
277
|
+
executeBatch
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function isEd25519Signer(signer) {
|
|
281
|
+
return signer.version === "wallet_signer_ed25519_v1";
|
|
282
|
+
}
|
|
242
283
|
//#endregion
|
|
243
284
|
export { CloudflareD1WalletRegistrationCommitStore };
|
|
244
285
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { commitInitialEd25519RegistrationSession } from "./walletRegistrationEstablishedSessionIssuer.js";
|
|
2
|
+
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.ts
|
|
3
|
+
async function commitWalletRegistration(commitWallet, input, session) {
|
|
4
|
+
switch (session.kind) {
|
|
5
|
+
case "separate":
|
|
6
|
+
await commitWallet(input);
|
|
7
|
+
return { kind: "uncommitted" };
|
|
8
|
+
case "initial_near":
|
|
9
|
+
if (!input.foundingAuthority) throw new Error("An initial registration session requires its founding authority");
|
|
10
|
+
return {
|
|
11
|
+
kind: "committed",
|
|
12
|
+
value: await commitInitialEd25519RegistrationSession({
|
|
13
|
+
authorizationService: session.request.authorizationService,
|
|
14
|
+
authorizationTenantId: session.request.authorizationTenantId,
|
|
15
|
+
registrationCeremonyId: session.request.registrationCeremonyId,
|
|
16
|
+
authority: session.request.authority,
|
|
17
|
+
foundingAuthority: input.foundingAuthority,
|
|
18
|
+
walletAuthMethodId: session.request.walletAuthMethodId,
|
|
19
|
+
expiresAtMs: session.request.expiresAtMs,
|
|
20
|
+
remainingUses: session.request.remainingUses,
|
|
21
|
+
proof: session.request.proof
|
|
22
|
+
}, session.store.commitRegistrationWalletSessionAuthorizationV2.bind(session.store, commitWallet.bind(void 0, input)))
|
|
23
|
+
};
|
|
24
|
+
default: return assertNeverSessionPlan(session);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function assertNeverSessionPlan(value) {
|
|
28
|
+
throw new Error(`Unsupported registration session plan: ${String(value)}`);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { commitWalletRegistration };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=d1WalletRegistrationInitialSession.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.ts
|
|
2
|
+
function walletRegistrationOperationPreparedFromCeremony(ceremony, allocated) {
|
|
3
|
+
if (String(ceremony.foundingWalletAuthMethodId) !== String(ceremony.intent.foundingWalletAuthMethodId)) throw new Error("registration ceremony and intent name different founding auth methods");
|
|
4
|
+
if (allocated && (allocated.walletId !== ceremony.intent.walletId || allocated.walletAuthorityId !== ceremony.foundingWalletAuthorityId || allocated.deviceId !== ceremony.foundingDeviceId || allocated.walletAuthMethodId !== ceremony.foundingWalletAuthMethodId)) throw new Error("registration operation identity does not match its ceremony");
|
|
5
|
+
return {
|
|
6
|
+
kind: "d1_wallet_registration_operation_prepared_v1",
|
|
7
|
+
walletId: ceremony.intent.walletId,
|
|
8
|
+
walletAuthorityId: ceremony.foundingWalletAuthorityId,
|
|
9
|
+
deviceId: ceremony.foundingDeviceId,
|
|
10
|
+
walletAuthMethodId: ceremony.foundingWalletAuthMethodId
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { walletRegistrationOperationPreparedFromCeremony };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=d1WalletRegistrationPreparation.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/router/cloudflare/d1/registration/d1WalletRegistrationRead.ts
|
|
2
|
+
/** Read admission and immutable finalization state from one D1 snapshot. */
|
|
3
|
+
var D1WalletRegistrationRead = class {
|
|
4
|
+
constructor(database, authority, operations, getCeremonies, decisions) {
|
|
5
|
+
this.database = database;
|
|
6
|
+
this.authority = authority;
|
|
7
|
+
this.operations = operations;
|
|
8
|
+
this.getCeremonies = getCeremonies;
|
|
9
|
+
this.decisions = decisions;
|
|
10
|
+
}
|
|
11
|
+
async readRespond(home) {
|
|
12
|
+
if (!this.authority) return {
|
|
13
|
+
ok: false,
|
|
14
|
+
code: "registration_authority_unavailable",
|
|
15
|
+
message: "Registration reservation authority is required"
|
|
16
|
+
};
|
|
17
|
+
const ceremonies = this.getCeremonies();
|
|
18
|
+
const results = await this.database.batch([this.authority.prepareHomeRead(home), ceremonies.prepareCeremonyRead(home.ceremonyId)]);
|
|
19
|
+
const [homeRead, ceremonyRead] = results;
|
|
20
|
+
if (results.length !== 2 || !homeRead || !ceremonyRead) throw new Error("Registration respond D1 batch returned incomplete results");
|
|
21
|
+
const admission = await this.authority.admitHomeRead(home, homeRead);
|
|
22
|
+
if (!admission.ok) return admission;
|
|
23
|
+
return {
|
|
24
|
+
ok: true,
|
|
25
|
+
ownershipGeneration: admission.ownershipGeneration,
|
|
26
|
+
snapshot: await ceremonies.parseCeremonySnapshotRead(home.ceremonyId, ceremonyRead)
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async readFinalization(home, operationKey) {
|
|
30
|
+
if (!this.authority) return {
|
|
31
|
+
ok: false,
|
|
32
|
+
code: "registration_authority_unavailable",
|
|
33
|
+
message: "Registration reservation authority is required"
|
|
34
|
+
};
|
|
35
|
+
const ceremonies = this.getCeremonies();
|
|
36
|
+
const results = await this.database.batch([
|
|
37
|
+
this.authority.prepareHomeRead(home),
|
|
38
|
+
this.operations.prepareRead(operationKey),
|
|
39
|
+
ceremonies.prepareCeremonyRead(home.ceremonyId),
|
|
40
|
+
this.decisions.prepareRead(home.ceremonyId)
|
|
41
|
+
]);
|
|
42
|
+
const [homeRead, operationRead, ceremonyRead, decisionRead] = results;
|
|
43
|
+
if (results.length !== 4 || !homeRead || !operationRead || !ceremonyRead || !decisionRead) throw new Error("Registration finalization D1 batch returned incomplete results");
|
|
44
|
+
const admission = await this.authority.admitHomeRead(home, homeRead);
|
|
45
|
+
if (!admission.ok) return admission;
|
|
46
|
+
if (!ceremonyRead.success) throw new Error("Registration ceremony D1 read failed");
|
|
47
|
+
return {
|
|
48
|
+
ok: true,
|
|
49
|
+
operation: this.operations.parseReadResult(operationRead),
|
|
50
|
+
decision: this.decisions.parseRead(home.ceremonyId, decisionRead),
|
|
51
|
+
readCeremony: ceremonies.parseCeremonyRead.bind(ceremonies, home.ceremonyId, ceremonyRead)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
export { D1WalletRegistrationRead };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=d1WalletRegistrationRead.js.map
|