@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.
Files changed (369) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -1
  2. package/artifact-manifest.json +196 -41
  3. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
  4. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  5. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
  7. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  8. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  12. package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
  13. package/cloudflare-router-ab/build/router/index.js +2 -2
  14. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  15. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
  16. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  17. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  20. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0019_wallet_object_addresses.sql +10 -0
  22. package/cloudflare-router-ab/migrations/deriver-b/0019_wallet_object_addresses.sql +10 -0
  23. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +3 -117
  24. package/cloudflare-router-ab/wrangler.deriver-a.toml +0 -8
  25. package/cloudflare-router-ab/wrangler.deriver-b.toml +24 -8
  26. package/cloudflare-router-ab/wrangler.router.toml +0 -2
  27. package/cloudflare-router-ab/wrangler.signing-worker.toml +29 -0
  28. package/dist/esm/authorization/domain.js +3 -2
  29. package/dist/esm/authorization/ed25519WalletSessionAdmission.js +0 -0
  30. package/dist/esm/authorization/service.js +64 -36
  31. package/dist/esm/cloud-host.js +24 -19
  32. package/dist/esm/core/EmailOtpRecords.js +29 -6
  33. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +2 -0
  34. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +10 -0
  35. package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +1 -0
  36. package/dist/esm/core/ThresholdService/validation.js +2 -2
  37. package/dist/esm/core/authService/nearPrivateKeySigning.js +1 -1
  38. package/dist/esm/core/authService/webauthn.js +1 -1
  39. package/dist/esm/core/d1Ed25519SignerRead.js +55 -0
  40. package/dist/esm/core/d1WalletStore.js +14 -11
  41. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +2 -2
  42. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +1 -1
  43. package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -2
  44. package/dist/esm/core/emailOtpD1Statements.js +1 -0
  45. package/dist/esm/core/nearRelayerAccountProvisioning.js +1 -1
  46. package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +4 -0
  47. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +1 -1
  48. package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +1 -0
  49. package/dist/esm/hosted-wallet-gateway.js +93 -10
  50. package/dist/esm/localHostedWalletGatewayHandler.js +12 -9
  51. package/dist/esm/localIntendedYaoSigningFault.js +2 -30
  52. package/dist/esm/localRegistrationSetupAuthority.js +8 -1
  53. package/dist/esm/router/auth/commonRouterUtils.js +17 -10
  54. package/dist/esm/router/auth/routerApiCredentialAuth.js +26 -7
  55. package/dist/esm/router/auth/walletRegistrationContext.js +49 -0
  56. package/dist/esm/router/auth/webAuthnCredentialCodecs.js +1 -1
  57. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +4 -3
  58. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +2 -0
  59. package/dist/esm/router/cloudflare/d1/auth/d1EmailOtpRouteService.js +25 -0
  60. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +14 -6
  61. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +44 -40
  62. package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +17 -1
  63. package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +35 -5
  64. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +258 -99
  65. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +31 -4
  66. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
  67. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +1 -1
  68. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +1 -1
  69. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
  70. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +1 -1
  71. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +1 -1
  72. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +11 -2
  73. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +100 -10
  74. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.js +92 -0
  75. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.js +77 -0
  76. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +14 -8
  77. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +14 -8
  78. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +3 -1
  79. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +58 -38
  80. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +27 -20
  81. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -0
  82. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -0
  83. package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +1 -1
  84. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +18 -7
  85. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +75 -14
  86. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +1 -1
  87. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +49 -29
  88. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.js +28 -0
  89. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +11 -1
  90. package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +168 -0
  91. package/dist/esm/router/cloudflare/d1/registration/d1WalletOperationStore.js +53 -0
  92. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +83 -42
  93. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.js +33 -0
  94. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.js +16 -0
  95. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +58 -0
  96. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +439 -500
  97. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +1 -1
  98. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +104 -90
  99. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +78 -44
  100. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +11 -35
  101. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +98 -39
  102. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +12 -9
  103. package/dist/esm/router/cloudflare/d1/wallet/authorizationSnapshotLayout.js +168 -0
  104. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
  105. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +15 -6
  106. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -40
  107. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +54 -1
  108. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.js +157 -0
  109. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.js +56 -0
  110. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.js +238 -0
  111. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.js +287 -0
  112. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.js +295 -0
  113. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.js +140 -0
  114. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.js +170 -0
  115. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.js +60 -0
  116. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwner.js +33 -0
  117. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.js +74 -0
  118. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.js +77 -0
  119. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.js +37 -0
  120. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationSessions.js +97 -0
  121. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.js +133 -0
  122. package/dist/esm/router/cloudflare/d1/walletObjectAddresses.js +47 -0
  123. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
  124. package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +32 -1
  125. package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +20 -8
  126. package/dist/esm/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.js +488 -0
  127. package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -1
  128. package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +26 -6
  129. package/dist/esm/router/cloudflare/runtime/walletControlOps.js +3 -0
  130. package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
  131. package/dist/esm/router/cloudflare/runtime/walletObjectAddresses.js +105 -0
  132. package/dist/esm/router/cloudflare/runtime/walletPlacementRoutes.js +339 -0
  133. package/dist/esm/router/cloudflare/runtime/walletRelocationDeriver.js +244 -0
  134. package/dist/esm/router/cloudflare/runtime/walletRelocationEcdsa.js +212 -0
  135. package/dist/esm/router/cloudflare/runtime/walletRelocationEd25519.js +172 -0
  136. package/dist/esm/router/cloudflare/runtime/walletRelocationOps.js +183 -0
  137. package/dist/esm/router/cloudflare/runtime/walletRelocationPresign.js +185 -0
  138. package/dist/esm/router/cloudflare/runtime/walletRelocationSource.js +221 -0
  139. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +30 -8
  140. package/dist/esm/router/cloudflare-adaptor.js +8 -8
  141. package/dist/esm/router/cloudflare.js +34115 -32240
  142. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +35 -9
  143. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +42 -0
  144. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +32 -6
  145. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +61 -1
  146. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +70 -3
  147. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +59 -87
  148. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +52 -22
  149. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +10 -7
  150. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +108 -78
  151. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +19 -5
  152. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +71 -22
  153. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +37 -25
  154. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +3 -3
  155. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +2 -1
  156. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +24 -3
  157. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +4 -3
  158. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +20 -7
  159. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +7 -1
  160. package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +2 -2
  161. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +1 -1
  162. package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +34 -18
  163. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +2 -2
  164. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +16 -6
  165. package/dist/esm/router/domains/signingOperations/authorizedOperationWire.js +73 -0
  166. package/dist/esm/router/domains/signingOperations/ecdsaSigningResponse.js +31 -0
  167. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
  168. package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +2 -1
  169. package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +31 -121
  170. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +2 -93
  171. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +1 -1
  172. package/dist/esm/router/domains/signingOperations/signingPrepareSession.js +33 -0
  173. package/dist/esm/router/domains/walletRegistration/registrationSessionSeal.js +121 -0
  174. package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +4 -4
  175. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +46 -157
  176. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +1 -1
  177. package/dist/esm/router/express.js +764 -894
  178. package/dist/esm/router/framework/http.js +2 -1
  179. package/dist/esm/router/transport/fetch/createFetchRouter.js +2 -2
  180. package/dist/esm/router/transport/fetch/routes/auth.js +1 -1
  181. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +3 -3
  182. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +2 -2
  183. package/dist/esm/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.js +65 -0
  184. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +13 -3
  185. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +3 -3
  186. package/dist/esm/router/transport/fetch/routes/sessions.js +3 -2
  187. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +67 -130
  188. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +76 -212
  189. package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +18 -41
  190. package/dist/esm/router/transport/fetch/routes/walletRegistration.js +6 -5
  191. package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +1 -1
  192. package/dist/esm/shared-ts/src/authorization/index.js +1 -1
  193. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +2 -2
  194. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +12 -2
  195. package/dist/esm/shared-ts/src/device-linking/digests.js +1 -1
  196. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +1 -1
  197. package/dist/esm/shared-ts/src/device-linking/index.js +1 -1
  198. package/dist/esm/shared-ts/src/device-linking/parsers.js +1 -1
  199. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
  200. package/dist/esm/shared-ts/src/device-linking/wireFields.js +1 -1
  201. package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
  202. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +2 -2
  203. package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
  204. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +4 -2
  205. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
  206. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +0 -27
  207. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +1 -1
  208. package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
  209. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  210. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
  211. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
  212. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
  213. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
  214. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
  215. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  216. package/dist/types/wallet-server/src/authorization/domain.d.ts +17 -1
  217. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +1 -0
  218. package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.d.ts +35 -0
  219. package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.typecheck.d.ts +2 -0
  220. package/dist/types/wallet-server/src/authorization/service.d.ts +43 -5
  221. package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +2 -0
  222. package/dist/types/wallet-server/src/cloud-host.d.ts +7 -3
  223. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +2 -1
  224. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +19 -5
  225. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +1 -0
  226. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +6 -0
  227. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +1 -0
  228. package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +17 -0
  229. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -0
  230. package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +1 -0
  231. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +5 -1
  232. package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +1 -0
  233. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +14 -48
  234. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +4 -3
  235. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +1 -16
  236. package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +1 -1
  237. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +7 -1
  238. package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +11 -3
  239. package/dist/types/wallet-server/src/router/auth/walletRegistrationContext.d.ts +8 -0
  240. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +1 -1
  241. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1EmailOtpRouteService.d.ts +16 -0
  242. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +7 -4
  243. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +4 -1
  244. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +7 -1
  245. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +32 -1
  246. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +2 -0
  247. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +3 -1
  248. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +1 -0
  249. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.d.ts +8 -0
  250. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.d.ts +15 -0
  251. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +6 -1
  252. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -0
  253. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +4 -1
  254. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpCounters.typecheck.d.ts +2 -0
  255. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +6 -29
  256. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +21 -7
  257. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +17 -1
  258. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +32 -7
  259. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +16 -7
  260. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.d.ts +13 -0
  261. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +7 -0
  262. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +41 -0
  263. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletOperationStore.d.ts +28 -0
  264. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +6 -9
  265. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.d.ts +17 -0
  266. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.d.ts +12 -0
  267. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +43 -0
  268. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +24 -45
  269. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +9 -4
  270. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +42 -14
  271. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -4
  272. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +24 -1
  273. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +10 -4
  274. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/authorizationSnapshotLayout.d.ts +21 -0
  275. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +3 -0
  276. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +3 -7
  277. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +8 -0
  278. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.d.ts +20 -0
  279. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.d.ts +12 -0
  280. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.d.ts +20 -0
  281. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.d.ts +29 -0
  282. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.d.ts +31 -0
  283. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.d.ts +49 -0
  284. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.d.ts +47 -0
  285. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.d.ts +25 -0
  286. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwner.d.ts +88 -0
  287. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.d.ts +37 -0
  288. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.d.ts +12 -0
  289. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.d.ts +18 -0
  290. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationSessions.d.ts +23 -0
  291. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.d.ts +16 -0
  292. package/dist/types/wallet-server/src/router/cloudflare/d1/walletObjectAddresses.d.ts +14 -0
  293. package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +13 -0
  294. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.d.ts +21 -0
  295. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -1
  296. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +3 -3
  297. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +2 -1
  298. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +3 -1
  299. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletObjectAddresses.d.ts +45 -0
  300. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletPlacementRoutes.d.ts +30 -0
  301. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationDeriver.d.ts +11 -0
  302. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEcdsa.d.ts +7 -0
  303. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEd25519.d.ts +7 -0
  304. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationOps.d.ts +11 -0
  305. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationPresign.d.ts +7 -0
  306. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationSource.d.ts +26 -0
  307. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +5 -0
  308. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +3 -0
  309. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +7 -0
  310. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +41 -7
  311. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +33 -2
  312. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +12 -6
  313. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +17 -9
  314. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +2 -0
  315. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +13 -14
  316. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +7 -3
  317. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +1 -0
  318. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +6 -1
  319. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +11 -0
  320. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -3
  321. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +10 -6
  322. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +10 -3
  323. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +12 -5
  324. package/dist/types/wallet-server/src/router/domains/signingOperations/authorizedOperationWire.d.ts +97 -0
  325. package/dist/types/wallet-server/src/router/domains/signingOperations/ecdsaSigningResponse.d.ts +13 -0
  326. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +9 -206
  327. package/dist/types/wallet-server/src/router/domains/signingOperations/signingPrepareSession.d.ts +23 -0
  328. package/dist/types/wallet-server/src/router/domains/walletRegistration/registrationSessionSeal.d.ts +36 -0
  329. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +7 -7
  330. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +80 -6
  331. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +15 -5
  332. package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +24 -0
  333. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +21 -7
  334. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +3 -12
  335. package/dist/types/wallet-server/src/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.d.ts +37 -0
  336. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +1 -17
  337. package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +1 -1
  338. package/migrations/d1-signer/0049_wallet_relocation_challenges.sql +16 -0
  339. package/migrations/d1-signer/0050_wallet_relocation_approvals.sql +14 -0
  340. package/migrations/d1-signer/0051_wallet_relocation_email_otp.sql +92 -0
  341. package/migrations/d1-signer/0052_wallet_relocation_session_fences.sql +91 -0
  342. package/migrations/d1-signer/0053_wallet_hosted_history_import.sql +164 -0
  343. package/migrations/d1-signer/0054_wallet_authorization_freeze.sql +318 -0
  344. package/migrations/d1-signer/0055_wallet_authorization_snapshot.sql +120 -0
  345. package/migrations/d1-signer/0056_wallet_authorization_history_import.sql +424 -0
  346. package/migrations/d1-signer/0057_wallet_authorization_intake.sql +44 -0
  347. package/migrations/d1-signer/0058_wallet_ceremony_activity.sql +59 -0
  348. package/migrations/d1-signer/0059_wallet_authorization_activation.sql +45 -0
  349. package/migrations/d1-signer/0060_wallet_authorization_cleanup.sql +153 -0
  350. package/migrations/d1-signer/0061_wallet_session_operation_settlement.sql +28 -0
  351. package/migrations/d1-signer/0062_wallet_step_up_operation_settlement.sql +204 -0
  352. package/migrations/d1-signer/0063_wallet_operation_history_transfer.sql +466 -0
  353. package/migrations/d1-signer/0064_wallet_execution_generations.sql +93 -0
  354. package/migrations/d1-signer/0065_wallet_operation_execution_generation.sql +37 -0
  355. package/migrations/d1-signer/0066_regional_deployment_admission.sql +59 -0
  356. package/migrations/d1-signer/0067_registration_completion_decision.sql +12 -0
  357. package/migrations/d1-signer/0068_registration_cancellation_write_fence.sql +24 -0
  358. package/migrations/d1-signer/0069_cancelled_registration_session_fence.sql +11 -0
  359. package/migrations/d1-signer/0070_wallet_passkey_relocation.sql +369 -0
  360. package/migrations/d1-signer/0071_regional_wallet_otp_counters.sql +98 -0
  361. package/migrations/d1-signer/0072_linked_device_relocation_history.sql +899 -0
  362. package/migrations/d1-signer/0073_wallet_recovery_relocation.sql +86 -0
  363. package/migrations/d1-signer/0074_email_otp_relocation.sql +158 -0
  364. package/migrations/d1-signer/0075_wallet_authorization_return.sql +107 -0
  365. package/migrations/d1-signer/0076_wallet_relocation_write_block.sql +406 -0
  366. package/migrations/d1-signer/0077_wallet_object_addresses.sql +24 -0
  367. package/package.json +1 -1
  368. package/src/README.md +23 -1
  369. package/cloudflare-router-ab/scripts/local-key-material.mjs +0 -29
@@ -126,14 +126,14 @@ function buildWalletCustodyRegistrationRecords(args) {
126
126
  };
127
127
  }
128
128
  /**
129
- * Builds and commits in one call.
129
+ * Builds the records and claims their recovery-code routes.
130
130
  *
131
131
  * A payload this server cannot parse becomes `rejected` rather than an
132
132
  * exception, so a malformed ceremony result is a request outcome and not a
133
- * route crash. Nothing is written in that case: the records are built before
134
- * the store is touched.
133
+ * route crash. Nothing is claimed or written in that case: the records are
134
+ * built before the store is touched.
135
135
  */
136
- async function commitWalletCustodyRegistration(input) {
136
+ async function reserveWalletCustodyRegistration(input) {
137
137
  let records;
138
138
  try {
139
139
  records = buildWalletCustodyRegistrationRecords(input);
@@ -143,7 +143,17 @@ async function commitWalletCustodyRegistration(input) {
143
143
  reason: error instanceof Error ? error.message : "invalid wallet custody commit payload"
144
144
  };
145
145
  }
146
- const stored = await input.store.commitRegistration(records);
146
+ const reserved = await input.store.reserveRegistration(records);
147
+ if (reserved.kind === "inconsistent") return {
148
+ kind: "rejected",
149
+ reason: reserved.reason
150
+ };
151
+ return {
152
+ kind: "reserved",
153
+ commit: async () => commitOutcome(await reserved.commit())
154
+ };
155
+ }
156
+ function commitOutcome(stored) {
147
157
  switch (stored.kind) {
148
158
  case "committed": return {
149
159
  kind: "committed",
@@ -159,6 +169,6 @@ async function commitWalletCustodyRegistration(input) {
159
169
  }
160
170
  }
161
171
  //#endregion
162
- export { commitWalletCustodyRegistration };
172
+ export { reserveWalletCustodyRegistration };
163
173
 
164
174
  //# sourceMappingURL=walletCustodyRegistrationCommit.js.map
@@ -0,0 +1,73 @@
1
+ //#region src/router/domains/signingOperations/authorizedOperationWire.ts
2
+ function buildAuthorizedOperationWire(input, commonAuthorizedOperation) {
3
+ const operation = input.operation;
4
+ switch (input.binding.kind) {
5
+ case "reusable_wallet_session":
6
+ if (operation.authorization.kind !== "authorization_grant" || operation.quota.kind !== "consume_reusable_wallet_session") throw new Error("Reusable Wallet Session authorized operation is invalid");
7
+ return {
8
+ binding: {
9
+ kind: "reusable_wallet_session",
10
+ authorization_id: operation.authorization.authorizationGrantRef.authorizationId,
11
+ wallet_session_id: input.binding.walletSessionId,
12
+ quota_id: input.binding.quotaId
13
+ },
14
+ authorized_operation: {
15
+ kind: "reusable_wallet_session_authorized_operation_v1",
16
+ ...commonAuthorizedOperation
17
+ }
18
+ };
19
+ case "gateway_owner_wallet_session":
20
+ if (operation.authorization.kind !== "authorization_grant" || operation.quota.kind !== "consume_reusable_wallet_session") throw new Error("Gateway owner Wallet Session authorized operation is invalid");
21
+ return {
22
+ binding: {
23
+ kind: "gateway_owner_wallet_session",
24
+ ownership_generation: input.binding.ownershipGeneration,
25
+ subject_id: input.binding.subjectId,
26
+ account_id: input.binding.accountId,
27
+ authorization_id: input.binding.authorizationId,
28
+ wallet_session_id: input.binding.walletSessionId,
29
+ quota_id: input.binding.quotaId,
30
+ threshold_session_id: input.binding.thresholdSessionId,
31
+ org_id: input.binding.orgId,
32
+ project_id: input.binding.projectId,
33
+ environment: input.binding.environment,
34
+ project_environment_id: input.binding.projectEnvironmentId,
35
+ signing_worker_id: input.binding.signingWorkerId,
36
+ expires_at_ms: input.binding.expiresAtMs
37
+ },
38
+ authorized_operation: {
39
+ kind: "reusable_wallet_session_authorized_operation_v1",
40
+ ...commonAuthorizedOperation
41
+ }
42
+ };
43
+ case "operation_step_up":
44
+ if (operation.authorization.kind !== "verified_step_up" || operation.quota.kind !== "quota_neutral") throw new Error("Verified step-up authorized operation is invalid");
45
+ return {
46
+ binding: {
47
+ kind: "operation_step_up",
48
+ ownership_generation: input.binding.ownershipGeneration,
49
+ authorization_session_id: input.binding.authorizationSessionId,
50
+ org_id: input.binding.orgId,
51
+ project_id: input.binding.projectId,
52
+ environment: input.binding.environment,
53
+ project_environment_id: input.binding.projectEnvironmentId,
54
+ subject_id: input.binding.subjectId,
55
+ account_id: input.binding.accountId
56
+ },
57
+ authorized_operation: {
58
+ kind: "verified_step_up_authorized_operation_v1",
59
+ authorization_session_id: input.binding.authorizationSessionId,
60
+ evidence_set_digest: operation.authorization.evidenceSetDigest,
61
+ ...commonAuthorizedOperation
62
+ }
63
+ };
64
+ default: return assertNeverOperationBinding(input.binding);
65
+ }
66
+ }
67
+ function assertNeverOperationBinding(_binding) {
68
+ throw new Error("Unsupported authorized-operation binding");
69
+ }
70
+ //#endregion
71
+ export { buildAuthorizedOperationWire };
72
+
73
+ //# sourceMappingURL=authorizedOperationWire.js.map
@@ -0,0 +1,31 @@
1
+ import { completeRouterAbEcdsaOperation } from "./routerAbEcdsaDerivationNormalSigningRoute.js";
2
+ //#region src/router/domains/signingOperations/ecdsaSigningResponse.ts
3
+ async function finishRouterAbEcdsaSigningResponse(input) {
4
+ const upstream = input.upstream;
5
+ const upstreamBodyText = await upstream.clone().text().catch(() => "");
6
+ input.timing.proxy = performance.now() - input.proxyStartedAt;
7
+ if (isRouterAbEcdsaOperationInProgressResponse({
8
+ status: upstream.status,
9
+ bodyText: upstreamBodyText
10
+ })) return upstream;
11
+ const completionStartedAt = performance.now();
12
+ await completeRouterAbEcdsaOperation({
13
+ authorizedOperations: input.authorizedOperations,
14
+ operation: input.operation,
15
+ result: upstream.ok ? "succeeded" : upstream.status < 500 ? "failed_before_side_effect" : "failed_after_side_effect",
16
+ response: {
17
+ status: upstream.status,
18
+ contentType: upstream.headers.get("content-type") || "application/json",
19
+ bodyText: upstreamBodyText
20
+ }
21
+ });
22
+ input.timing.complete = performance.now() - completionStartedAt;
23
+ return upstream;
24
+ }
25
+ function isRouterAbEcdsaOperationInProgressResponse(input) {
26
+ return input.status === 409 && input.bodyText.includes("ReplayedLocalRequest:") && input.bodyText.includes("SigningWorker ECDSA effect is already in progress");
27
+ }
28
+ //#endregion
29
+ export { finishRouterAbEcdsaSigningResponse };
30
+
31
+ //# sourceMappingURL=ecdsaSigningResponse.js.map
@@ -1,6 +1,6 @@
1
+ import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
1
2
  import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
2
3
  import { parseCapabilityOperationFingerprintDigest } from "../../../shared-ts/src/authorization/operationFingerprint.js";
3
- import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
4
4
  //#region src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.ts
5
5
  function requireEd25519OperationKind(value) {
6
6
  if (value !== "near.sign_transaction" && value !== "near.sign_delegate_action" && value !== "near.sign_nep413_message") throw new Error("authorized_operation.operation_kind is invalid");
@@ -9,6 +9,7 @@ import { WALLET_SESSION_FAILURE_CODES } from "../../../shared-ts/src/utils/walle
9
9
  import { extractBearerCredential } from "../../auth/routerApiKeyAuth.js";
10
10
  import { walletSessionFailure, walletSessionFailureStatus } from "../../auth/walletSessionFailure.js";
11
11
  import { validateRouterAbEcdsaDerivationWalletSessionInputs } from "../../auth/commonRouterUtils.js";
12
+ import { signingPrepareSessionResponse } from "./signingPrepareSession.js";
12
13
  import { evaluateRouterAbNormalSigningAdmission, requireAuthorizationValue, requireMpcMaterialActivationId, routerAbErrorMessage, routerAbOwnerOperationFailureResult, routerAbOwnerOperationStepUpDecision, routerAbSigningError, routerAbStepUpError, routerAbWalletSessionValidationStatus } from "./routerAbNormalSigningAdmission.js";
13
14
  import { ecdsaStepUpActiveMaterial, exactOperationStepUpSession, parseStepUpRequestOrigin, recordedStepUpOperationClaim, routerAbOperationStepUpClaimFailure, walletSessionCandidateAdmission, walletSessionScopeInvalidFailure, walletSessionUnavailableFailure } from "./routerAbOperationStepUp.js";
14
15
  import { buildRouterAbEcdsaDerivationPrivateSigningWorkerBody, isRouterAbEcdsaSigningWorkerOperationInProgress, postRouterAbSigningWorkerJson, replayResponseFromSigningWorkerResult } from "./routerAbPrivateSigningWorker.js";
@@ -805,7 +806,7 @@ async function handleRouterAbEcdsaDerivationNormalSigningRouteCore(input) {
805
806
  });
806
807
  return forwarded.ok ? {
807
808
  status: 200,
808
- body: forwarded.body
809
+ body: signingPrepareSessionResponse(forwarded.body, authorization)
809
810
  } : {
810
811
  status: forwarded.status,
811
812
  body: forwarded.body
@@ -1,10 +1,10 @@
1
1
  import { mpcMaterialActivationRefsEqual } from "../../../shared-ts/src/utils/domainIds.js";
2
2
  import { buildNearEd25519MpcOperationRef, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
3
+ import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
3
4
  import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
4
5
  import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
5
6
  import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest, parseSigningOperationFingerprintDigest } from "../../../shared-ts/src/authorization/operationFingerprint.js";
6
7
  import "../../../shared-ts/src/utils/encoders.js";
7
- import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
8
8
  import { routerAbMpcMaterialActivationRefFromWire, routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
9
9
  import { extractBearerCredential } from "../../auth/routerApiKeyAuth.js";
10
10
  import { validateRouterAbEd25519WalletSessionInputs } from "../../auth/commonRouterUtils.js";
@@ -327,30 +327,22 @@ function parseRouterAbEd25519NormalSigningOperationForAdmission(input) {
327
327
  }
328
328
  try {
329
329
  switch (input.authorizationKind) {
330
- case "reusable_wallet_session": {
331
- const receipt = parseEd25519ReusableAuthorizedOperationReceipt(input.body.authorized_operation);
332
- return {
333
- ok: true,
334
- operation: {
335
- phase: "finalize",
336
- operationKind: receipt.operation_kind,
337
- authorizationKind: "reusable_wallet_session",
338
- receipt
339
- }
340
- };
341
- }
342
- case "operation_step_up": {
343
- const receipt = parseEd25519VerifiedStepUpAuthorizedOperationReceipt(input.body.authorized_operation);
344
- return {
345
- ok: true,
346
- operation: {
347
- phase: "finalize",
348
- operationKind: receipt.operation_kind,
349
- authorizationKind: "operation_step_up",
350
- receipt
351
- }
352
- };
353
- }
330
+ case "reusable_wallet_session": return {
331
+ ok: true,
332
+ operation: {
333
+ phase: "finalize",
334
+ operationKind: parseEd25519ReusableAuthorizedOperationReceipt(input.body.authorized_operation).operation_kind,
335
+ authorizationKind: "reusable_wallet_session"
336
+ }
337
+ };
338
+ case "operation_step_up": return {
339
+ ok: true,
340
+ operation: {
341
+ phase: "finalize",
342
+ operationKind: parseEd25519VerifiedStepUpAuthorizedOperationReceipt(input.body.authorized_operation).operation_kind,
343
+ authorizationKind: "operation_step_up"
344
+ }
345
+ };
354
346
  }
355
347
  } catch (error) {
356
348
  return {
@@ -359,94 +351,7 @@ function parseRouterAbEd25519NormalSigningOperationForAdmission(input) {
359
351
  };
360
352
  }
361
353
  }
362
- async function validateRouterAbEd25519V2FinalizeAuthorizedOperation(input) {
363
- if (!input.authorizedOperations) return {
364
- ok: false,
365
- result: routerAbEd25519OwnerOperationFailureResult({
366
- status: 501,
367
- code: "not_configured",
368
- message: "Reusable Wallet Session authorization is not configured",
369
- phase: input.phase
370
- })
371
- };
372
- let authorizedOperationId;
373
- try {
374
- authorizedOperationId = requireAuthorizationValue(parseAuthorizedOperationId(input.receipt.authorized_operation_id));
375
- requireAuthorizationValue(parseCapabilityOperationId(input.receipt.operation_id));
376
- } catch (error) {
377
- return {
378
- ok: false,
379
- result: routerAbEd25519OwnerOperationFailureResult({
380
- status: 400,
381
- code: "invalid_authorized_operation",
382
- message: routerAbErrorMessage(error),
383
- phase: input.phase
384
- })
385
- };
386
- }
387
- let operation;
388
- try {
389
- operation = await input.authorizedOperations.readAuthorizedOperationById({
390
- tenantId: input.authorizedOperations.tenantId,
391
- authorizedOperationId
392
- });
393
- } catch (error) {
394
- return {
395
- ok: false,
396
- result: routerAbEd25519OwnerOperationFailureResult({
397
- status: 500,
398
- code: "internal",
399
- message: routerAbErrorMessage(error),
400
- phase: input.phase
401
- })
402
- };
403
- }
404
- if (!operation) return {
405
- ok: false,
406
- result: routerAbEd25519OwnerOperationFailureResult({
407
- status: 409,
408
- code: "authorized_operation_missing",
409
- message: "Authorized operation is unavailable",
410
- phase: input.phase
411
- })
412
- };
413
- const operationRef = operation.operation.operation;
414
- if (operation.tenantId !== input.authorizedOperations.tenantId || operation.authorizedOperationId !== authorizedOperationId || operation.operation.operationId !== input.receipt.operation_id || operation.operationFingerprintDigest !== input.receipt.operation_fingerprint_digest || operation.operation.digests.laneDigest !== input.receipt.lane_digest_b64u || operation.operation.digests.intentDigest !== input.receipt.intent_digest_b64u || operation.operation.digests.displayDigest !== input.receipt.display_digest_b64u || operationRef.capabilityKind !== "near_ed25519_mpc_signing" || operationRef.operationKind !== input.receipt.operation_kind) return {
415
- ok: false,
416
- result: routerAbEd25519OwnerOperationFailureResult({
417
- status: 400,
418
- code: "invalid_authorized_operation",
419
- message: "Ed25519 authorized operation does not match its receipt",
420
- phase: input.phase
421
- })
422
- };
423
- switch (operationRef.operationKind) {
424
- case "near.sign_transaction":
425
- case "near.sign_delegate_action":
426
- case "near.sign_nep413_message": return {
427
- ok: true,
428
- operationKind: operationRef.operationKind
429
- };
430
- }
431
- }
432
354
  async function authorizeRouterAbEd25519WalletSessionRequest(input) {
433
- if (input.operation.phase === "finalize") {
434
- const exactOperation = await validateRouterAbEd25519V2FinalizeAuthorizedOperation({
435
- receipt: input.operation.receipt,
436
- authorizedOperations: input.authorizedOperations,
437
- phase: input.phase
438
- });
439
- if (!exactOperation.ok) return exactOperation;
440
- if (exactOperation.operationKind !== input.admission.operationKind) return {
441
- ok: false,
442
- result: routerAbEd25519OwnerOperationFailureResult({
443
- status: 403,
444
- code: "wallet_session_scope_mismatch",
445
- message: "Exact Wallet Session operation does not match the authorized operation",
446
- phase: input.phase
447
- })
448
- };
449
- }
450
355
  const expectedMaterialActivation = routerAbMpcMaterialActivationRefFromWire(input.scope.material_activation);
451
356
  const admittedMaterialActivation = routerAbMpcMaterialActivationRefToWire(input.admission.materialActivation);
452
357
  const expiresAtMs = Number(input.body.expires_at_ms);
@@ -479,7 +384,8 @@ async function authorizeRouterAbEd25519WalletSessionRequest(input) {
479
384
  };
480
385
  const activeMaterial = await input.resolveEd25519MaterialActivation({
481
386
  walletId: String(input.session.walletId),
482
- materialActivation: admittedMaterialActivation
387
+ materialActivation: admittedMaterialActivation,
388
+ ...input.signerRead ? { signerRead: input.signerRead } : {}
483
389
  });
484
390
  if (!activeMaterial.ok || !sameRouterAbMpcMaterialActivationRef(activeMaterial.materialActivation, admittedMaterialActivation) || activeMaterial.signingWorkerId !== input.scope.signing_worker_id || base64UrlEncode(Uint8Array.from(activeMaterial.exportIdentity.registered_public_key)) !== input.admission.signer.registeredPublicKeyB64u) return {
485
391
  ok: false,
@@ -500,6 +406,7 @@ async function authorizeRouterAbEd25519WalletSessionRequest(input) {
500
406
  const admissionDecision = await evaluateRouterAbNormalSigningAdmission({
501
407
  adapter: input.admissionAdapter,
502
408
  curve: "ed25519",
409
+ policyReadSource: input.policyReadSource,
503
410
  authorizationKind: "wallet_session_operation_credential_v1",
504
411
  phase: input.phase,
505
412
  walletId: String(input.session.walletId),
@@ -557,13 +464,13 @@ async function resolveRouterAbEd25519ExhaustedCandidateAuthorization(input) {
557
464
  phase: input.phase,
558
465
  body: input.body,
559
466
  scope: input.scope,
560
- operation: input.operation,
561
467
  session,
562
468
  authorityId: String(candidate.authority.authorityId),
563
469
  admission,
564
- authorizedOperations: input.authorizedOperations,
565
470
  admissionAdapter: input.admissionAdapter,
566
- resolveEd25519MaterialActivation: input.resolveEd25519MaterialActivation
471
+ resolveEd25519MaterialActivation: input.resolveEd25519MaterialActivation,
472
+ signerRead: null,
473
+ policyReadSource: { kind: "database" }
567
474
  });
568
475
  if (!authorized.ok) return authorized;
569
476
  return {
@@ -626,7 +533,8 @@ async function authorizeRouterAbEd25519NormalSigningRoute(input) {
626
533
  const validated = await validateRouterAbEd25519WalletSessionInputs({
627
534
  headers: input.headers,
628
535
  authorizationSessions: input.authorizationSessions,
629
- operationKind: operationForAdmission.operation.operationKind
536
+ operationKind: operationForAdmission.operation.operationKind,
537
+ materialActivation: scope.material_activation
630
538
  });
631
539
  if (!validated.ok) {
632
540
  const operation = operationForAdmission.operation;
@@ -637,7 +545,6 @@ async function authorizeRouterAbEd25519NormalSigningRoute(input) {
637
545
  scope,
638
546
  phase: input.phase,
639
547
  operation,
640
- authorizedOperations: input.authorizedOperations,
641
548
  authorizationSessions: input.authorizationSessions,
642
549
  admissionAdapter: input.admissionAdapter,
643
550
  resolveEd25519MaterialActivation: input.resolveEd25519MaterialActivation
@@ -675,13 +582,16 @@ async function authorizeRouterAbEd25519NormalSigningRoute(input) {
675
582
  phase: input.phase,
676
583
  body: input.body,
677
584
  scope,
678
- operation,
679
585
  session: validated.admission.context.authorization.session,
680
586
  authorityId: String(validated.admission.context.authority.authorityId),
681
587
  admission: validated.admission.admission,
682
- authorizedOperations: input.authorizedOperations,
683
588
  admissionAdapter: input.admissionAdapter,
684
- resolveEd25519MaterialActivation: input.resolveEd25519MaterialActivation
589
+ resolveEd25519MaterialActivation: input.resolveEd25519MaterialActivation,
590
+ signerRead: validated.signerRead,
591
+ policyReadSource: {
592
+ kind: "credential_snapshot",
593
+ policyRead: validated.policyRead
594
+ }
685
595
  });
686
596
  if (!authorized.ok) return authorized;
687
597
  return {
@@ -1,98 +1,6 @@
1
1
  import { parseMpcMaterialActivationId } from "../../../shared-ts/src/utils/domainIds.js";
2
2
  import { walletSessionFailureStatus } from "../../auth/walletSessionFailure.js";
3
3
  //#region src/router/domains/signingOperations/routerAbNormalSigningAdmission.ts
4
- function buildRouterAbEd25519AcceptedAuthorizedOperationV1(input) {
5
- const operation = input.operation;
6
- const operationRef = operation.operation.operation;
7
- if (operationRef.capabilityKind !== "near_ed25519_mpc_signing") throw new Error("Ed25519 authorized operation capability is invalid");
8
- if (operationRef.operationKind === "near.export_key") throw new Error("Ed25519 export cannot use normal-signing admission");
9
- return buildRouterAbAcceptedAuthorizedOperationV1({
10
- operation,
11
- operationKind: operationRef.operationKind,
12
- capabilityKind: "near_ed25519_mpc_signing",
13
- binding: input.binding
14
- });
15
- }
16
- function buildRouterAbEcdsaAcceptedAuthorizedOperationV1(input) {
17
- const operation = input.operation;
18
- const operationRef = operation.operation.operation;
19
- if (operationRef.capabilityKind !== "evm_ecdsa_mpc_signing" || operationRef.operationKind !== "evm.sign_transaction") throw new Error("ECDSA authorized operation capability or operation kind is invalid");
20
- return buildRouterAbAcceptedAuthorizedOperationV1({
21
- operation,
22
- operationKind: "evm.sign_transaction",
23
- capabilityKind: "evm_ecdsa_mpc_signing",
24
- binding: input.binding
25
- });
26
- }
27
- function buildRouterAbAcceptedAuthorizedOperationV1(input) {
28
- const operation = input.operation;
29
- const commonAuthorizedOperation = {
30
- authorized_operation_id: operation.authorizedOperationId,
31
- operation_id: operation.operation.operationId,
32
- capability_kind: input.capabilityKind,
33
- operation_kind: input.operationKind,
34
- lane_digest_b64u: operation.operation.digests.laneDigest,
35
- intent_digest_b64u: operation.operation.digests.intentDigest,
36
- display_digest_b64u: operation.operation.digests.displayDigest,
37
- operation_fingerprint_digest: operation.operationFingerprintDigest
38
- };
39
- switch (input.binding.kind) {
40
- case "reusable_wallet_session":
41
- if (operation.authorization.kind !== "authorization_grant" || operation.quota.kind !== "consume_reusable_wallet_session") throw new Error("Reusable Wallet Session authorized operation is invalid");
42
- return {
43
- binding: {
44
- kind: "reusable_wallet_session",
45
- authorization_id: operation.authorization.authorizationGrantRef.authorizationId,
46
- wallet_session_id: input.binding.walletSessionId,
47
- quota_id: input.binding.quotaId
48
- },
49
- authorized_operation: {
50
- kind: "reusable_wallet_session_authorized_operation_v1",
51
- ...commonAuthorizedOperation
52
- }
53
- };
54
- case "gateway_owner_wallet_session":
55
- if (operation.authorization.kind !== "authorization_grant" || operation.quota.kind !== "consume_reusable_wallet_session") throw new Error("Gateway owner Wallet Session authorized operation is invalid");
56
- return {
57
- binding: {
58
- kind: "gateway_owner_wallet_session",
59
- subject_id: input.binding.subjectId,
60
- account_id: input.binding.accountId,
61
- authorization_id: input.binding.authorizationId,
62
- wallet_session_id: input.binding.walletSessionId,
63
- quota_id: input.binding.quotaId,
64
- threshold_session_id: input.binding.thresholdSessionId,
65
- org_id: input.binding.orgId,
66
- project_id: input.binding.projectId,
67
- environment: input.binding.environment,
68
- signing_worker_id: input.binding.signingWorkerId,
69
- expires_at_ms: input.binding.expiresAtMs
70
- },
71
- authorized_operation: {
72
- kind: "reusable_wallet_session_authorized_operation_v1",
73
- ...commonAuthorizedOperation
74
- }
75
- };
76
- case "operation_step_up":
77
- if (operation.authorization.kind !== "verified_step_up" || operation.quota.kind !== "quota_neutral") throw new Error("Verified step-up authorized operation is invalid");
78
- return {
79
- binding: {
80
- kind: "operation_step_up",
81
- authorization_session_id: input.binding.authorizationSessionId,
82
- org_id: input.binding.orgId,
83
- project_id: input.binding.projectId,
84
- environment: input.binding.environment,
85
- subject_id: input.binding.subjectId
86
- },
87
- authorized_operation: {
88
- kind: "verified_step_up_authorized_operation_v1",
89
- authorization_session_id: input.binding.authorizationSessionId,
90
- evidence_set_digest: operation.authorization.evidenceSetDigest,
91
- ...commonAuthorizedOperation
92
- }
93
- };
94
- }
95
- }
96
4
  function routerAbOwnerOperationStepUpDecision(input) {
97
5
  const reason = (() => {
98
6
  switch (input.code) {
@@ -138,6 +46,7 @@ async function evaluateRouterAbNormalSigningAdmission(input) {
138
46
  };
139
47
  if (input.curve === "ed25519") return await input.adapter.evaluatePolicy({
140
48
  curve: "ed25519",
49
+ policyReadSource: input.policyReadSource,
141
50
  authorityKind: "wallet_authority_v1",
142
51
  authorityId: input.authorityId,
143
52
  phase: input.phase,
@@ -205,6 +114,6 @@ function routerAbErrorMessage(error) {
205
114
  return String(error && typeof error === "object" && "message" in error ? error.message : error || "unknown error");
206
115
  }
207
116
  //#endregion
208
- export { buildRouterAbEcdsaAcceptedAuthorizedOperationV1, buildRouterAbEd25519AcceptedAuthorizedOperationV1, evaluateRouterAbNormalSigningAdmission, requireAuthorizationValue, requireMpcMaterialActivationId, routerAbErrorMessage, routerAbOwnerOperationFailureResult, routerAbOwnerOperationStepUpDecision, routerAbSigningError, routerAbStepUpError, routerAbWalletSessionValidationStatus };
117
+ export { evaluateRouterAbNormalSigningAdmission, requireAuthorizationValue, requireMpcMaterialActivationId, routerAbErrorMessage, routerAbOwnerOperationFailureResult, routerAbOwnerOperationStepUpDecision, routerAbSigningError, routerAbStepUpError, routerAbWalletSessionValidationStatus };
209
118
 
210
119
  //# sourceMappingURL=routerAbNormalSigningAdmission.js.map
@@ -1,6 +1,6 @@
1
+ import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
1
2
  import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
2
3
  import "../../../shared-ts/src/utils/encoders.js";
3
- import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
4
4
  import { parseRouterAbEcdsaDerivationEvmDigestSigningFinalizeRequestV1, parseRouterAbEcdsaDerivationEvmDigestSigningRequestV1, routerAbEcdsaDerivationEvmDigestSigningFinalizeCoreRequestDigestV1, routerAbEcdsaDerivationEvmDigestSigningRequestDigestV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
5
5
  import { postRouterAbInternalServiceJson } from "../../../core/ThresholdService/routerAb/internalServiceHttp.js";
6
6
  import { requireMpcMaterialActivationId, routerAbSigningError } from "./routerAbNormalSigningAdmission.js";
@@ -0,0 +1,33 @@
1
+ import { projectExactWalletSessionAuthorizationV1 } from "../../../authorization/domain.js";
2
+ //#region src/router/domains/signingOperations/signingPrepareSession.ts
3
+ /** The session snapshot validated for this admission, before its quota claim. */
4
+ function signingPrepareSessionResponse(signing, authorization) {
5
+ switch (authorization.kind) {
6
+ case "operation_step_up": return {
7
+ kind: "operation_step_up",
8
+ signing
9
+ };
10
+ case "wallet_session_operation_credential_v1": {
11
+ const { session, quota } = authorization.validated.admission.context.authorization;
12
+ return {
13
+ kind: "reusable_wallet_session",
14
+ signing,
15
+ session_status: {
16
+ ok: true,
17
+ status: "active",
18
+ walletSessionId: session.walletSessionId,
19
+ quotaId: session.quotaId,
20
+ remainingUses: quota.remainingUses,
21
+ expiresAtMs: quota.expiresAtMs,
22
+ quotaLifecycle: "active",
23
+ authorization: projectExactWalletSessionAuthorizationV1(session)
24
+ }
25
+ };
26
+ }
27
+ case "wallet_session_operation_credential_exhausted_candidate_v1": throw new Error("An exhausted Wallet Session cannot publish a fresh prepare response");
28
+ }
29
+ }
30
+ //#endregion
31
+ export { signingPrepareSessionResponse };
32
+
33
+ //# sourceMappingURL=signingPrepareSession.js.map