@seams/wallet-server 0.6.2 → 0.7.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 (705) hide show
  1. package/artifact-manifest.json +147 -32
  2. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -0
  3. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  4. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  5. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -0
  6. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  7. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  8. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/router/build-stamp.json +1 -0
  12. package/cloudflare-router-ab/build/router/index.js +2 -2
  13. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  14. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -0
  15. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  16. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  17. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  20. package/cloudflare-router-ab/migrations/deriver-a/0012_tenant_root_creation_tombstones.sql +20 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0013_tenant_root_root_use_admissions.sql +32 -0
  22. package/cloudflare-router-ab/migrations/deriver-a/0014_tenant_root_refresh_supersessions.sql +24 -0
  23. package/cloudflare-router-ab/migrations/deriver-a/0015_tenant_root_root_use_attempts.sql +56 -0
  24. package/cloudflare-router-ab/migrations/deriver-a/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  25. package/cloudflare-router-ab/migrations/deriver-a/0017_tenant_root_root_use_admission_claims.sql +64 -0
  26. package/cloudflare-router-ab/migrations/deriver-a/0018_tenant_root_recovery_retention_keys.sql +12 -0
  27. package/cloudflare-router-ab/migrations/deriver-b/0012_tenant_root_creation_tombstones.sql +20 -0
  28. package/cloudflare-router-ab/migrations/deriver-b/0013_tenant_root_root_use_admissions.sql +32 -0
  29. package/cloudflare-router-ab/migrations/deriver-b/0014_tenant_root_refresh_supersessions.sql +24 -0
  30. package/cloudflare-router-ab/migrations/deriver-b/0015_tenant_root_root_use_attempts.sql +56 -0
  31. package/cloudflare-router-ab/migrations/deriver-b/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  32. package/cloudflare-router-ab/migrations/deriver-b/0017_tenant_root_root_use_admission_claims.sql +64 -0
  33. package/cloudflare-router-ab/migrations/deriver-b/0018_tenant_root_recovery_retention_keys.sql +12 -0
  34. package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +81 -16
  35. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +102 -9
  36. package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +4 -1
  37. package/cloudflare-router-ab/wrangler.deriver-a.toml +24 -0
  38. package/cloudflare-router-ab/wrangler.router.toml +13 -0
  39. package/dist/esm/authorization/capabilityPolicy.js +1 -1
  40. package/dist/esm/authorization/domain.js +2 -2
  41. package/dist/esm/authorization/factorEvidence.js +6 -100
  42. package/dist/esm/authorization/service.js +34 -2
  43. package/dist/esm/authorization/vaultProxyUse.js +3 -4
  44. package/dist/esm/cloud-host.js +16 -11
  45. package/dist/esm/core/EmailOtpRecords.js +19 -1
  46. package/dist/esm/core/EmailOtpStores.js +323 -924
  47. package/dist/esm/core/IdentityStore.js +44 -235
  48. package/dist/esm/core/NearPublicKeyStore.js +21 -63
  49. package/dist/esm/core/RegistrationCeremonyStore.js +3 -1793
  50. package/dist/esm/core/ThresholdService/config.js +1 -82
  51. package/dist/esm/core/ThresholdService/kv.js +3 -3
  52. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +37 -5
  53. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +4 -74
  54. package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +15 -51
  55. package/dist/esm/core/ThresholdService/stores/KeyStore.js +3 -3
  56. package/dist/esm/core/ThresholdService/stores/SessionStore.js +5 -81
  57. package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +185 -290
  58. package/dist/esm/core/ThresholdService/validation.js +18 -230
  59. package/dist/esm/core/WalletAuthMethodStore.js +22 -79
  60. package/dist/esm/core/WalletStore.js +58 -185
  61. package/dist/esm/core/WebAuthnAuthenticatorStore.js +57 -340
  62. package/dist/esm/core/WebAuthnCredentialBindingStore.js +90 -369
  63. package/dist/esm/core/WebAuthnLoginChallengeStore.js +17 -397
  64. package/dist/esm/core/WebAuthnSyncChallengeStore.js +17 -397
  65. package/dist/esm/core/authService/AuthService.js +2 -19
  66. package/dist/esm/core/authService/emailOtpChallengeProof.js +1 -1
  67. package/dist/esm/core/authService/emailOtpChallenges.js +1 -1
  68. package/dist/esm/core/authService/emailOtpConfig.js +1 -32
  69. package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +6 -153
  70. package/dist/esm/core/authService/googleEmailOtpRegistration.js +1 -1
  71. package/dist/esm/core/authService/nearPrivateKeySigning.js +7 -15
  72. package/dist/esm/core/authService/nearTransactions.js +2 -1
  73. package/dist/esm/core/authService/oidcVerification.js +3 -4
  74. package/dist/esm/core/authService/rateLimits.js +1 -31
  75. package/dist/esm/core/authService/registrationThresholdHelpers.js +2 -103
  76. package/dist/esm/core/authService/storeRegistry.js +2 -13
  77. package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +4 -5
  78. package/dist/esm/core/authService/webauthn.js +15 -50
  79. package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -6
  80. package/dist/esm/core/authService/webauthnVerificationOutcomes.js +60 -0
  81. package/dist/esm/core/authService/webauthnWalletBinding.js +2 -122
  82. package/dist/esm/core/d1IdentityStore.js +32 -66
  83. package/dist/esm/core/d1TenantStore.js +82 -0
  84. package/dist/esm/core/d1WalletAuthMethodStore.js +92 -143
  85. package/dist/esm/core/d1WalletStore.js +14 -12
  86. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +10 -8
  87. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +25 -3
  88. package/dist/esm/core/deviceLinking/linkedDeviceSession.js +6 -895
  89. package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +102 -0
  90. package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +668 -0
  91. package/dist/esm/core/emailOtpD1Statements.js +383 -0
  92. package/dist/esm/core/hostedAccountIds.js +2 -2
  93. package/dist/esm/core/keyMaterialBrands.js +2 -48
  94. package/dist/esm/core/nearRelayerAccountProvisioning.js +25 -150
  95. package/dist/esm/core/nearSignerWasmRuntime.js +1 -4
  96. package/dist/esm/core/rpcClients/near/NearClient.js +15 -218
  97. package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +1 -1
  98. package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +2 -4
  99. package/dist/esm/core/signingLanes/LaneLifecycleStore.js +0 -24
  100. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +5 -5
  101. package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +3 -8
  102. package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +1 -4
  103. package/dist/esm/core/storeBackends.js +208 -0
  104. package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -7
  105. package/dist/esm/core/webAuthnD1Statements.js +92 -0
  106. package/dist/esm/core/webAuthnStoreBackends.js +198 -0
  107. package/dist/esm/hosted-wallet-gateway.js +33 -16
  108. package/dist/esm/index.js +2 -2
  109. package/dist/esm/local-hosted-wallet-gateway-worker.js +2 -23
  110. package/dist/esm/localHostedWalletGatewayHandler.js +299 -0
  111. package/dist/esm/localIntendedEcdsaFinalizeFault.js +85 -0
  112. package/dist/esm/localIntendedLinkExecuteFault.js +140 -0
  113. package/dist/esm/localIntendedRevokeFault.js +106 -0
  114. package/dist/esm/localIntendedSessionAdmissionFault.js +139 -0
  115. package/dist/esm/localIntendedYaoExportFault.js +117 -0
  116. package/dist/esm/localIntendedYaoFault.js +13 -16
  117. package/dist/esm/localIntendedYaoFinalizeFault.js +99 -0
  118. package/dist/esm/localIntendedYaoRecoveryFault.js +102 -0
  119. package/dist/esm/localIntendedYaoSigningFault.js +127 -0
  120. package/dist/esm/router/auth/authRequestValidation.js +1 -1
  121. package/dist/esm/router/auth/commonRouterUtils.js +10 -2
  122. package/dist/esm/router/auth/walletSessionFailure.js +1 -14
  123. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +23 -0
  124. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +86 -66
  125. package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +208 -0
  126. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +246 -296
  127. package/dist/esm/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.js +14 -0
  128. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +62 -63
  129. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +3 -6
  130. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +1 -19
  131. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +4 -3
  132. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +52 -9
  133. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -6
  134. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.js +100 -0
  135. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +7 -10
  136. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +33 -124
  137. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +2 -2
  138. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +9 -17
  139. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +6 -6
  140. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +3 -1
  141. package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
  142. package/dist/esm/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.js +69 -0
  143. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +39 -68
  144. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +69 -0
  145. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +2 -2
  146. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +26 -71
  147. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +20 -3
  148. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +7 -94
  149. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +5 -47
  150. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +26 -123
  151. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +0 -2
  152. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +2 -2
  153. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +15 -134
  154. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +54 -260
  155. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
  156. package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +1 -28
  157. package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +2 -8
  158. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +1 -1
  159. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +3 -3
  160. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +23 -73
  161. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +15 -2
  162. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +12 -203
  163. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +16 -32
  164. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +29 -72
  165. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +4 -1
  166. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +3 -1
  167. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +6 -30
  168. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +261 -205
  169. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +5 -3
  170. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +2 -2
  171. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +3 -3
  172. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +43 -25
  173. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -1
  174. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1 -1
  175. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +2 -1
  176. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +2 -60
  177. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +158 -19
  178. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +19 -49
  179. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +100 -0
  180. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +132 -33
  181. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +83 -4
  182. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +14 -49
  183. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +4 -4
  184. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +22 -116
  185. package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +1 -2
  186. package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +11 -2
  187. package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
  188. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +5 -6
  189. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +2 -1
  190. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +48 -21
  191. package/dist/esm/router/cloudflare.js +11480 -12853
  192. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +16 -5
  193. package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +2 -8
  194. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js +33 -0
  195. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +17 -9
  196. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +29 -431
  197. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +7 -2
  198. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +2 -1
  199. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +70 -2
  200. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +134 -169
  201. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +77 -162
  202. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +205 -51
  203. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +29 -11
  204. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +182 -55
  205. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +2 -1
  206. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +63 -247
  207. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +3 -2
  208. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +87 -132
  209. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +5 -4
  210. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +45 -0
  211. package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +1 -1
  212. package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +1 -42
  213. package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +1 -6
  214. package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +1 -142
  215. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +1 -1
  216. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -2
  217. package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +23 -45
  218. package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +5 -5
  219. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
  220. package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +827 -0
  221. package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +698 -0
  222. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +209 -0
  223. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +16 -15
  224. package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +313 -0
  225. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +62 -2159
  226. package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +1 -1
  227. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +18 -22
  228. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +3 -4
  229. package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +2 -2
  230. package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +97 -150
  231. package/dist/esm/router/express.js +5967 -6410
  232. package/dist/esm/router/framework/http.js +1 -4
  233. package/dist/esm/router/framework/ror/normalize.js +1 -1
  234. package/dist/esm/router/framework/routerApiRouteSurface.js +1 -1
  235. package/dist/esm/router/node/nodeHostedWalletGateway.js +64 -0
  236. package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +163 -0
  237. package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +120 -0
  238. package/dist/esm/router/node/nodeHttp.js +79 -0
  239. package/dist/esm/router/node/nodeSqlite.js +43 -0
  240. package/dist/esm/router/node/signerSqlMigrations.js +48 -0
  241. package/dist/esm/router/transport/fetch/createFetchRouter.js +1 -1
  242. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +16 -18
  243. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +3 -5
  244. package/dist/esm/router/transport/fetch/routes/deviceManagement.js +15 -24
  245. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +3 -16
  246. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +144 -461
  247. package/dist/esm/router/transport/fetch/routes/sessions.js +4 -4
  248. package/dist/esm/router/transport/fetch/routes/syncAccount.js +4 -6
  249. package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +2 -2
  250. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +69 -23
  251. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +52 -27
  252. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -1
  253. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  254. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
  255. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +99 -227
  256. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  257. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +74 -0
  258. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +50 -0
  259. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +8 -9
  260. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  261. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +55 -0
  262. package/dist/esm/shared-ts/src/device-linking/digests.js +10 -65
  263. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  264. package/dist/esm/shared-ts/src/device-linking/index.js +4 -1
  265. package/dist/esm/shared-ts/src/device-linking/parsers.js +510 -1063
  266. package/dist/esm/shared-ts/src/device-linking/requestProof.js +5 -14
  267. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +6 -9
  268. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +9 -9
  269. package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
  270. package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
  271. package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +3 -1
  272. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +7 -5
  273. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  274. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
  275. package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -5
  276. package/dist/esm/shared-ts/src/signing-lanes/index.js +3 -3
  277. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +5 -12
  278. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +5 -14
  279. package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
  280. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -5
  281. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +6 -45
  282. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +423 -1511
  283. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +323 -0
  284. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +59 -0
  285. package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -1
  286. package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +1 -2
  287. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +49 -0
  288. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  289. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  290. package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
  291. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +2 -2
  292. package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
  293. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +127 -0
  294. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
  295. package/dist/esm/shared-ts/src/utils/registrationIds.js +280 -0
  296. package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1170
  297. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +429 -0
  298. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -136
  299. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -163
  300. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +160 -0
  301. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  302. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +7 -15
  303. package/dist/esm/shared-ts/src/utils/validation.js +37 -6
  304. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +362 -0
  305. package/dist/esm/shared-ts/src/utils/wireSchema.js +77 -0
  306. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
  307. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
  308. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +7 -11
  309. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  310. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  311. package/dist/esm/storage/d1Sql.js +10 -1
  312. package/dist/esm/storage/syncSqlite.js +79 -0
  313. package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +1 -1
  314. package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +1 -1
  315. package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +1 -2
  316. package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
  317. package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +18 -55
  318. package/dist/esm/threshold/statusCodes.js +1 -1
  319. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +3 -3
  320. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  321. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
  322. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
  323. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
  324. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
  325. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
  326. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
  327. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
  328. package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
  329. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
  330. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
  331. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
  332. package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
  333. package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
  334. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
  335. package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
  336. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
  337. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
  338. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
  339. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
  340. package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
  341. package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
  342. package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
  343. package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
  344. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
  345. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
  346. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
  347. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
  348. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
  349. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
  350. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
  351. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
  352. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
  353. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
  354. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
  355. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
  356. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
  357. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
  358. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
  359. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
  360. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
  361. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
  362. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
  363. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
  364. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
  365. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
  366. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
  367. package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
  368. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
  369. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
  370. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
  371. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
  372. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
  373. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
  374. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
  375. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
  376. package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
  377. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
  378. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
  379. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
  380. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
  381. package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
  382. package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
  383. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
  384. package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
  385. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
  386. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
  387. package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
  388. package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
  389. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
  390. package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
  391. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
  392. package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
  393. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
  394. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
  395. package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
  396. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
  397. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
  398. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
  399. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
  400. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
  401. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
  402. package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
  403. package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
  404. package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
  405. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
  406. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
  407. package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
  408. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
  409. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
  410. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
  411. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
  412. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
  413. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
  414. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
  415. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
  416. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
  417. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
  418. package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +0 -1
  419. package/dist/types/wallet-server/src/authorization/domain.d.ts +25 -5
  420. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +37 -0
  421. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.typecheck.d.ts +2 -0
  422. package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +6 -7
  423. package/dist/types/wallet-server/src/authorization/service.d.ts +52 -3
  424. package/dist/types/wallet-server/src/cloud-host.d.ts +6 -2
  425. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +10 -1
  426. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +16 -116
  427. package/dist/types/wallet-server/src/core/IdentityStore.d.ts +2 -7
  428. package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +6 -16
  429. package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +29 -90
  430. package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -12
  431. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +10 -3
  432. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +17 -48
  433. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +2 -1
  434. package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +4 -71
  435. package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +2 -1
  436. package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +4 -8
  437. package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +2 -1
  438. package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +1 -3
  439. package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +14 -47
  440. package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +2 -7
  441. package/dist/types/wallet-server/src/core/WalletStore.d.ts +3 -8
  442. package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +7 -22
  443. package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +14 -36
  444. package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +9 -34
  445. package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +9 -34
  446. package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -3
  447. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +6 -5
  448. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +9 -17
  449. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +3 -2
  450. package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +7 -23
  451. package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +3 -10
  452. package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +4 -3
  453. package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +4 -3
  454. package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +3 -70
  455. package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +3 -2
  456. package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +4 -3
  457. package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +5 -8
  458. package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +3 -2
  459. package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +2 -1
  460. package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +2 -1
  461. package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +4 -3
  462. package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -3
  463. package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -26
  464. package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -5
  465. package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +0 -23
  466. package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +8 -16
  467. package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +7 -7
  468. package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +43 -0
  469. package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +1 -28
  470. package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +6 -16
  471. package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +51 -0
  472. package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +11 -29
  473. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -1
  474. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +2 -1
  475. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +2 -1
  476. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +44 -26
  477. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +19 -217
  478. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionApproval.d.ts +8 -0
  479. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +259 -0
  480. package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -2
  481. package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +54 -0
  482. package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -15
  483. package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +4 -24
  484. package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +2 -3
  485. package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +0 -1
  486. package/dist/types/wallet-server/src/core/registrationContracts.d.ts +37 -108
  487. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +5 -4
  488. package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +10 -106
  489. package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +4 -3
  490. package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +2 -3
  491. package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +2 -3
  492. package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +3 -9
  493. package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +4 -4
  494. package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +3 -3
  495. package/dist/types/wallet-server/src/core/storeBackends.d.ts +83 -0
  496. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +13 -59
  497. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +51 -3
  498. package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +0 -1
  499. package/dist/types/wallet-server/src/core/types.d.ts +3 -24
  500. package/dist/types/wallet-server/src/core/webAuthnD1Statements.d.ts +29 -0
  501. package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +96 -0
  502. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +11 -7
  503. package/dist/types/wallet-server/src/index.d.ts +1 -1
  504. package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +1 -4
  505. package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +12 -0
  506. package/dist/types/wallet-server/src/localIntendedEcdsaFinalizeFault.d.ts +33 -0
  507. package/dist/types/wallet-server/src/localIntendedLinkExecuteFault.d.ts +47 -0
  508. package/dist/types/wallet-server/src/localIntendedRevokeFault.d.ts +40 -0
  509. package/dist/types/wallet-server/src/localIntendedSessionAdmissionFault.d.ts +41 -0
  510. package/dist/types/wallet-server/src/localIntendedYaoExportFault.d.ts +41 -0
  511. package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +7 -1
  512. package/dist/types/wallet-server/src/localIntendedYaoFinalizeFault.d.ts +37 -0
  513. package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +45 -0
  514. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +51 -0
  515. package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +10 -21
  516. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +5 -10
  517. package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +1 -4
  518. package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +3 -2
  519. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +12 -0
  520. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +3 -2
  521. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +2 -2
  522. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
  523. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +30 -0
  524. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +45 -21
  525. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.d.ts +3 -0
  526. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +2 -1
  527. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +57 -6
  528. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +2 -3
  529. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +8 -21
  530. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +14 -1
  531. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.d.ts +49 -0
  532. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +1 -1
  533. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +4 -2
  534. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +1 -1
  535. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +2 -2
  536. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +8 -4
  537. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +3 -5
  538. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.d.ts +7 -0
  539. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +1 -2
  540. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +33 -0
  541. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +1 -1
  542. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +13 -3
  543. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +24 -5
  544. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -3
  545. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +1 -3
  546. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +3 -4
  547. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +9 -8
  548. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +0 -2
  549. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +5 -4
  550. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +1 -3
  551. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -21
  552. package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +0 -23
  553. package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +1 -2
  554. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +11 -19
  555. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -54
  556. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +7 -19
  557. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +4 -3
  558. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +8 -12
  559. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +5 -8
  560. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -22
  561. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +6 -2
  562. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +10 -6
  563. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +15 -22
  564. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +5 -3
  565. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +4 -3
  566. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -5
  567. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +3 -5
  568. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -1
  569. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +0 -16
  570. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +29 -14
  571. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +15 -12
  572. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.d.ts +71 -0
  573. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +34 -24
  574. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +44 -26
  575. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +3 -7
  576. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +8 -19
  577. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +2 -1
  578. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -0
  579. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +15 -2
  580. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +2 -2
  581. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +9 -7
  582. package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +4 -4
  583. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.d.ts +46 -0
  584. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +5 -3
  585. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +20 -79
  586. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -0
  587. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +1 -1
  588. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +4 -3
  589. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +62 -42
  590. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +108 -32
  591. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +5 -0
  592. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +36 -5
  593. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +5 -4
  594. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +41 -50
  595. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -2
  596. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +3 -3
  597. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +6 -5
  598. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +14 -4
  599. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -1
  600. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +5 -5
  601. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +3 -4
  602. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +2 -27
  603. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +1 -2
  604. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +2 -1
  605. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +2 -102
  606. package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +2 -1
  607. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +3 -2
  608. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +1 -9
  609. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +2 -1
  610. package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +2 -1
  611. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +2 -1
  612. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +2 -28
  613. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +43 -1
  614. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +7 -7
  615. package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +0 -3
  616. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +165 -0
  617. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +110 -0
  618. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +360 -0
  619. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +11 -10
  620. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.typecheck.d.ts +2 -0
  621. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +165 -0
  622. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +16 -702
  623. package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +5 -12
  624. package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +5 -4
  625. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +6 -1
  626. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +4 -7
  627. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -1
  628. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +8 -8
  629. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +4 -4
  630. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +4 -4
  631. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +4 -62
  632. package/dist/types/wallet-server/src/router/express-adaptor.d.ts +2 -2
  633. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +64 -61
  634. package/dist/types/wallet-server/src/router/framework/http.d.ts +0 -1
  635. package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +2 -2
  636. package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +3 -2
  637. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -1
  638. package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +3 -3
  639. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +34 -0
  640. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +21 -0
  641. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +2 -0
  642. package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +13 -0
  643. package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +22 -0
  644. package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +20 -0
  645. package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +1 -3
  646. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +5 -6
  647. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +2 -2
  648. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +14 -16
  649. package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +0 -12
  650. package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +1 -1
  651. package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +2 -1
  652. package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +7 -13
  653. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +3 -57
  654. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +0 -44
  655. package/dist/types/wallet-server/src/storage/d1Sql.d.ts +7 -0
  656. package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +28 -0
  657. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +0 -1
  658. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +5 -6
  659. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +1 -0
  660. package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +4 -4
  661. package/migrations/d1-signer/0036_r150_yao_lifecycle_decisions.sql +22 -0
  662. package/migrations/d1-signer/0037_r150_wallet_auth_method_revocation_replays.sql +26 -0
  663. package/migrations/d1-signer/0038_r150_registration_ceremony_cas_guard_seed.sql +8 -0
  664. package/migrations/d1-signer/0039_r150_revocation_replay_answer_kind.sql +9 -0
  665. package/package.json +1 -1
  666. package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +0 -27
  667. package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +0 -115
  668. package/dist/esm/core/ThresholdService/secureRandomId.js +0 -9
  669. package/dist/esm/core/authService/record.js +0 -8
  670. package/dist/esm/core/authService/thresholdRuntimePolicy.js +0 -19
  671. package/dist/esm/core/authService/walletRegistrationPlanning.js +0 -49
  672. package/dist/esm/core/deviceLinking/index.js +0 -5
  673. package/dist/esm/core/errors.js +0 -54
  674. package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +0 -39
  675. package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
  676. package/dist/esm/core/signingLanes/index.js +0 -8
  677. package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +0 -55
  678. package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +0 -56
  679. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  680. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +0 -414
  681. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
  682. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
  683. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
  684. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
  685. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
  686. package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
  687. package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
  688. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
  689. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
  690. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
  691. package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +0 -12
  692. package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +0 -17
  693. package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +0 -2
  694. package/dist/types/wallet-server/src/core/authService/record.d.ts +0 -2
  695. package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +0 -4
  696. package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +0 -19
  697. package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +0 -5
  698. package/dist/types/wallet-server/src/core/errors.d.ts +0 -10
  699. package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +0 -28
  700. package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +0 -15
  701. package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +0 -13
  702. package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +0 -11
  703. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +0 -35
  704. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +0 -35
  705. /package/dist/esm/{core/signingLanes/SigningLaneStore.js → authorization/ecdsaWalletSessionAdmission.js} +0 -0
@@ -1,13 +1,11 @@
1
- import { parseLinkDeviceSessionId, parseLinkedDeviceEnrollmentId, parseLinkedDeviceId, parseMpcMaterialActivationRef, parseVerifiedEmailAddress, parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId, parseWalletKeyId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../utils/domainIds.js";
2
- import { parseDeviceId as parseDeviceId$1, parseMpcWalletSigningQuotaId, parseWalletSessionAuthorizationId, parseWalletSessionId } from "../authorization/capabilityKinds.js";
3
1
  import { base64UrlDecode, base64UrlEncode } from "../utils/base64.js";
4
- import { parseDigestB64u } from "../utils/canonicalPrimitives.js";
5
- import { parseEd25519PublicKeyB64u, parseUnixMs, rejectUnknownFields, requireRecord } from "../passkey-custody/primitives.js";
6
- import { parseDelegatedWalletAuthorityV1 } from "../authorization/delegatedAuthority.js";
2
+ import { requireArray, requireRecord } from "../utils/validation.js";
3
+ import { exactRecord } from "../utils/exactRecord.js";
4
+ import { wireLiteral, wireNullable, wireObject, wireUnion } from "../utils/wireSchema.js";
5
+ import "../authorization/delegatedAuthority.js";
6
+ import { parseEd25519PublicKeyB64u } from "../passkey-custody/primitives.js";
7
+ import { authorizationDeviceId, credentialId, digest, enrollmentId, linkedDeviceId, parseDelegatedWalletAuthority, parseNonEmptyToken, parseNonNegativeSafeInteger, parseTargetEmail, parseUnixTime, rpId, sessionId, walletAuthMethodId, walletAuthorityId, walletId, walletKeyId, walletSessionAuthorizationId, walletSessionId } from "./wireFields.js";
7
8
  import { parseWalletAddAuthMethodRegistrationOptions } from "../utils/addAuthMethodRegistration.js";
8
- import "./walletSessionCredentialDelivery.js";
9
- import { parseWalletSignerActivationSetV1 } from "../authorization/walletAuthority.js";
10
- import "../utils/registrationIntent.js";
11
9
  import { requireRouterAbX25519PublicKey } from "../utils/routerAbPublicKeyset.js";
12
10
  import { parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1, parseLinkedDeviceOrdinaryMaterialSourceContributionTupleV1 } from "./sourceContribution.js";
13
11
  import "./committedSignerPackages.js";
@@ -23,187 +21,16 @@ const QR_FIELDS = [
23
21
  "issuedAtMs",
24
22
  "expiresAtMs"
25
23
  ];
26
- const QR_EMAIL_FIELDS = [...QR_FIELDS, "targetEmail"];
27
- const OWNER_AUTHORIZATION_REQUEST_FIELDS = ["payload", "requestedAtMs"];
28
- const CLAIM_REQUEST_FIELDS = ["kind", "payload"];
29
- const CLAIM_FIELDS = [
30
- "kind",
31
- "linkSessionId",
32
- "walletId",
33
- "enrollmentId",
34
- "deviceId",
35
- "devicePublicKeyB64u",
36
- "targetFactor",
37
- "sessionRevision",
38
- "claimedAtMs",
39
- "claimExpiresAtMs"
40
- ];
41
- const OWNER_AUTH_WALLET_SESSION_FIELDS = [
42
- "kind",
43
- "walletSessionId",
44
- "authorizationId"
45
- ];
46
- const ENROLLMENT_FIELDS = [
47
- "kind",
48
- "linkSessionId",
49
- "walletId",
50
- "enrollmentId",
51
- "deviceId",
52
- "linkPublicKeyB64u",
53
- "devicePublicKeyB64u",
54
- "permission",
55
- "targetFactor",
56
- "ownerAuthorization",
57
- "approvedAtMs",
58
- "expiresAtMs"
59
- ];
60
- const ENROLLMENT_FIELDS_WITH_SOURCE_CONTRIBUTION = [...ENROLLMENT_FIELDS, "sourceContribution"];
61
- const APPROVAL_DELIVERY_FIELDS = ["kind", "approval"];
62
- const CREDENTIAL_BASE_FIELDS = [
63
- "kind",
64
- "linkSessionId",
65
- "walletId",
66
- "enrollmentId",
67
- "deviceId",
68
- "walletAuthMethodId",
69
- "targetFactor",
70
- "targetPreparationDigestB64u",
71
- "ordinarySignerMaterialRecipientRequests",
72
- "registeredAtMs"
73
- ];
74
- const PASSKEY_CREDENTIAL_FIELDS = [...CREDENTIAL_BASE_FIELDS, "webauthnRegistration"];
75
- const EMAIL_OTP_CREDENTIAL_FIELDS = [
76
- ...CREDENTIAL_BASE_FIELDS,
77
- "targetEmail",
78
- "emailOtpVerificationGrant"
79
- ];
80
- const EMAIL_OTP_CREDENTIAL_NEW_FIELDS = [...EMAIL_OTP_CREDENTIAL_FIELDS, "emailOtpEnrollment"];
81
- const TARGET_PREPARATION_BASE_FIELDS = [
82
- "kind",
83
- "linkSessionId",
84
- "walletId",
85
- "enrollmentId",
86
- "deviceId",
87
- "deliveryRecipientPublicKey65B64u",
88
- "walletAuthMethodId",
89
- "ed25519ExportRoot",
90
- "targetFactor",
91
- "ordinarySignerMaterialRecipientRequirements",
92
- "issuedAtMs",
93
- "expiresAtMs"
94
- ];
95
- const TARGET_PREPARATION_REQUEST_FIELDS = [
96
- "kind",
97
- "linkSessionId",
98
- "deliveryRecipientPublicKey65B64u"
99
- ];
100
- const TARGET_PREPARATION_PASSKEY_FIELDS = [
101
- ...TARGET_PREPARATION_BASE_FIELDS,
102
- "passkeyCreationOptions",
103
- "passkeyConfigurationDigestB64u"
104
- ];
105
- const TARGET_PREPARATION_EMAIL_FIELDS = [
106
- ...TARGET_PREPARATION_BASE_FIELDS,
107
- "targetEmail",
108
- "enrollment",
109
- "baseWalletAuthMethodId"
110
- ];
111
- const TARGET_PREPARATION_EMAIL_NEW_FIELDS = [
112
- ...TARGET_PREPARATION_BASE_FIELDS,
113
- "targetEmail",
114
- "enrollment"
115
- ];
116
- const EMAIL_OTP_VERIFICATION_GRANT_BASE_FIELDS = [
117
- "kind",
118
- "grantId",
119
- "grantToken",
120
- "challengeId",
121
- "linkSessionId",
122
- "walletId",
123
- "enrollmentId",
124
- "deviceId",
125
- "targetPreparationDigestB64u",
126
- "targetEmail",
127
- "enrollment",
128
- "emailHashHex",
129
- "registrationAuthorityId",
130
- "providerUserId",
131
- "authorityDigestB64u",
132
- "issuedAtMs",
133
- "expiresAtMs"
134
- ];
135
- const EMAIL_OTP_VERIFICATION_GRANT_FIELDS = [...EMAIL_OTP_VERIFICATION_GRANT_BASE_FIELDS, "baseWalletAuthMethodId"];
136
- const EMAIL_OTP_FACTOR_RELEASE_FIELDS = [
137
- "kind",
138
- "challengeId",
139
- "enrollmentId",
140
- "enrollmentSealKeyVersion",
141
- "serverEphemeralPublicKey65B64u",
142
- "nonce12B64u",
143
- "ciphertextB64u"
144
- ];
145
- const WEBAUTHN_REGISTRATION_FIELDS = [
146
- "kind",
147
- "credentialIdB64u",
148
- "authenticatorAttachment",
149
- "clientDataJsonB64u",
150
- "attestationObjectB64u",
151
- "transports"
152
- ];
153
- const LINKED_DEVICE_LIST_REQUEST_FIELDS = [
154
- "kind",
155
- "walletId",
156
- "limit",
157
- "cursor"
158
- ];
159
- const LINKED_DEVICE_REVOKE_REQUEST_FIELDS = [
160
- "kind",
161
- "walletId",
162
- "walletAuthMethodId",
163
- "requestedAtMs"
164
- ];
165
- function exactRecord(raw, fields, label) {
166
- const record = requireRecord(raw, label);
167
- rejectUnknownFields(record, fields, label);
168
- for (const field of fields) if (!Object.prototype.hasOwnProperty.call(record, field) || record[field] === void 0) throw new Error(`${label}.${field} is required`);
169
- return record;
170
- }
171
- function parseId(parser, raw, label) {
172
- const result = parser(raw);
173
- if (result.ok) return result.value;
174
- throw new Error(`${label} ${result.error.message}`);
175
- }
176
- function parseLinkedDeviceRevokeWalletAuthMethodId(raw, label) {
177
- const value = parseId(parseWalletAuthMethodId, raw, label);
178
- if (value.startsWith("wallet-authority:") || value.startsWith("authority:")) throw new Error(`${label} must identify a WalletAuthMethodId`);
179
- return value;
180
- }
181
- function parseUnixTime(raw, label) {
182
- try {
183
- return parseUnixMs(raw, label);
184
- } catch (error) {
185
- throw new Error(error instanceof Error ? error.message : `${label} is invalid`);
186
- }
24
+ function supportedLiteral(...values) {
25
+ return (raw, label) => {
26
+ if (!values.includes(raw)) throw new Error(`${label} is unsupported`);
27
+ return raw;
28
+ };
187
29
  }
188
30
  function parseEmailHashHex(raw, label) {
189
31
  if (typeof raw !== "string" || !/^[0-9a-f]{64}$/.test(raw)) throw new Error(`${label} must be 32 canonical lowercase hex bytes`);
190
32
  return raw;
191
33
  }
192
- function parseNonEmptyToken(raw, label) {
193
- if (typeof raw !== "string" || raw.length === 0 || raw.trim() !== raw) throw new Error(`${label} must be a non-empty canonical string`);
194
- for (const character of raw) {
195
- const code = character.charCodeAt(0);
196
- if (/\s/.test(character) || code <= 31 || code === 127) throw new Error(`${label} must not contain whitespace or control characters`);
197
- }
198
- return raw;
199
- }
200
- function parseDigest(raw, label) {
201
- try {
202
- return parseDigestB64u(raw);
203
- } catch (error) {
204
- throw new Error(`${label} ${error instanceof Error ? error.message : "is invalid"}`);
205
- }
206
- }
207
34
  function parsePublicKey(raw, label) {
208
35
  if (typeof raw !== "string" || raw.length === 0 || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${label} must be canonical unpadded base64url`);
209
36
  try {
@@ -263,33 +90,15 @@ function parseLinkDevicePublicKeyB64u(raw) {
263
90
  return parsePublicKey(raw, "LinkDevicePublicKeyB64u");
264
91
  }
265
92
  function parseCredential(raw, label) {
266
- return parseId(parseWebAuthnCredentialIdB64u, parseCanonicalBase64UrlBytes(raw, label), label);
93
+ return credentialId(parseCanonicalBase64UrlBytes(raw, label), label);
267
94
  }
268
95
  function parseKeyFamily(raw, label) {
269
96
  if (raw !== "ed25519" && raw !== "ecdsa_secp256k1") throw new Error(`${label} must identify a supported key family`);
270
97
  return raw;
271
98
  }
272
- function parseNonNegativeSafeInteger(raw, label) {
273
- if (!Number.isSafeInteger(raw) || Number(raw) < 0) throw new Error(`${label} must be a non-negative safe integer`);
274
- return Number(raw);
275
- }
276
- function parsePositiveSafeInteger(raw, label) {
277
- const value = parseNonNegativeSafeInteger(raw, label);
278
- if (value < 1) throw new Error(`${label} must be a positive safe integer`);
279
- return value;
280
- }
281
- function parseNullableCursor(raw, label) {
282
- if (raw === null) return null;
283
- return parseNonEmptyToken(raw, label);
284
- }
285
99
  function assertExpiryAfterIssued(issuedAtMs, expiresAtMs, label) {
286
100
  if (expiresAtMs <= issuedAtMs) throw new Error(`${label}.expiresAtMs must be after issuedAtMs`);
287
101
  }
288
- function parseDelegatedWalletAuthority(raw, label) {
289
- const result = parseDelegatedWalletAuthorityV1(raw);
290
- if (!result.ok) throw new Error(`${label}: ${result.error.message}`);
291
- return result.value;
292
- }
293
102
  function parseTargetFactor(raw, label) {
294
103
  switch (exactRecord(raw, ["kind"], label).kind) {
295
104
  case "passkey_prf": return { kind: "passkey_prf" };
@@ -297,36 +106,31 @@ function parseTargetFactor(raw, label) {
297
106
  default: throw new Error(`${label}.kind is unsupported`);
298
107
  }
299
108
  }
300
- function parseTargetEmail(raw, label) {
301
- const parsed = parseVerifiedEmailAddress(raw);
302
- if (!parsed.ok) throw new Error(`${label} ${parsed.error.message}`);
303
- return parsed.value;
109
+ function passkeyTargetFactorV1() {
110
+ return wireObject({ kind: wireLiteral("passkey_prf") });
304
111
  }
305
- function parseEmailOtpEnrollmentSelection(raw, label) {
306
- const record = requireRecord(raw, label);
307
- if (record.kind === "existing_enrollment") {
308
- exactRecord(record, ["kind"], label);
309
- return { kind: "existing_enrollment" };
310
- }
311
- if (record.kind === "new_enrollment") {
312
- exactRecord(record, ["kind"], label);
313
- return { kind: "new_enrollment" };
314
- }
315
- throw new Error(`${label}.kind is invalid`);
112
+ function emailOtpTargetFactorV1() {
113
+ return wireObject({ kind: wireLiteral("email_otp") });
316
114
  }
317
- function parseEmailOtpEnrollmentMaterial(raw, label) {
318
- const record = exactRecord(raw, [
319
- "enrollmentSealKeyVersion",
320
- "clientUnlockPublicKeyB64u",
321
- "unlockKeyVersion",
322
- "serverSealedFactorCiphertextB64u"
323
- ], label);
324
- return {
325
- enrollmentSealKeyVersion: parseNonEmptyToken(record.enrollmentSealKeyVersion, `${label}.enrollmentSealKeyVersion`),
326
- clientUnlockPublicKeyB64u: parseNonEmptyToken(record.clientUnlockPublicKeyB64u, `${label}.clientUnlockPublicKeyB64u`),
327
- unlockKeyVersion: parseNonEmptyToken(record.unlockKeyVersion, `${label}.unlockKeyVersion`),
328
- serverSealedFactorCiphertextB64u: parseNonEmptyToken(record.serverSealedFactorCiphertextB64u, `${label}.serverSealedFactorCiphertextB64u`)
329
- };
115
+ function existingEnrollmentV1() {
116
+ return wireObject({ kind: wireLiteral("existing_enrollment") });
117
+ }
118
+ function newEnrollmentV1() {
119
+ return wireObject({ kind: wireLiteral("new_enrollment") });
120
+ }
121
+ function emailOtpEnrollmentSelectionV1() {
122
+ return wireUnion("kind", [existingEnrollmentV1(), newEnrollmentV1()]);
123
+ }
124
+ function parseEmailOtpEnrollmentSelection(raw, label) {
125
+ return emailOtpEnrollmentSelectionV1()(raw, label);
126
+ }
127
+ function emailOtpEnrollmentMaterialV1() {
128
+ return wireObject({
129
+ enrollmentSealKeyVersion: parseNonEmptyToken,
130
+ clientUnlockPublicKeyB64u: parseNonEmptyToken,
131
+ unlockKeyVersion: parseNonEmptyToken,
132
+ serverSealedFactorCiphertextB64u: parseNonEmptyToken
133
+ });
330
134
  }
331
135
  function parseApprovedTargetFactor(raw, label) {
332
136
  const record = requireRecord(raw, label);
@@ -341,7 +145,7 @@ function parseApprovedTargetFactor(raw, label) {
341
145
  kind: "email_otp",
342
146
  targetEmail,
343
147
  enrollment,
344
- baseWalletAuthMethodId: parseId(parseWalletAuthMethodId, exactRecord(record, [
148
+ baseWalletAuthMethodId: walletAuthMethodId(exactRecord(record, [
345
149
  "kind",
346
150
  "targetEmail",
347
151
  "enrollment",
@@ -361,47 +165,6 @@ function parseApprovedTargetFactor(raw, label) {
361
165
  }
362
166
  throw new Error(`${label}.kind is unsupported`);
363
167
  }
364
- function parseSessionId(raw, label) {
365
- return parseId(parseLinkDeviceSessionId, raw, label);
366
- }
367
- function parseWallet(raw, label) {
368
- return parseId(parseWalletId, raw, label);
369
- }
370
- function parseEnrollmentId(raw, label) {
371
- return parseId(parseLinkedDeviceEnrollmentId, raw, label);
372
- }
373
- function parseDeviceId(raw, label) {
374
- return parseId(parseLinkedDeviceId, raw, label);
375
- }
376
- function parseWalletKey(raw, label) {
377
- return parseId(parseWalletKeyId, raw, label);
378
- }
379
- function parseWalletSession(raw, label) {
380
- return parseId(parseWalletSessionId, raw, label);
381
- }
382
- function parseWalletAuthorization(raw, label) {
383
- return parseId(parseWalletSessionAuthorizationId, raw, label);
384
- }
385
- function parseLinkedDeviceListRequestV1(raw) {
386
- const record = exactRecord(raw, LINKED_DEVICE_LIST_REQUEST_FIELDS, "LinkedDeviceListRequestV1");
387
- if (record.kind !== "linked_device_list_request_v1") throw new Error("LinkedDeviceListRequestV1.kind is invalid");
388
- return {
389
- kind: "linked_device_list_request_v1",
390
- walletId: parseWallet(record.walletId, "LinkedDeviceListRequestV1.walletId"),
391
- limit: parsePositiveSafeInteger(record.limit, "LinkedDeviceListRequestV1.limit"),
392
- cursor: parseNullableCursor(record.cursor, "LinkedDeviceListRequestV1.cursor")
393
- };
394
- }
395
- function parseLinkedDeviceRevokeRequestV1(raw) {
396
- const record = exactRecord(raw, LINKED_DEVICE_REVOKE_REQUEST_FIELDS, "LinkedDeviceRevokeRequestV1");
397
- if (record.kind !== "linked_device_revoke_request_v1") throw new Error("LinkedDeviceRevokeRequestV1.kind is invalid");
398
- return {
399
- kind: "linked_device_revoke_request_v1",
400
- walletId: parseWallet(record.walletId, "LinkedDeviceRevokeRequestV1.walletId"),
401
- walletAuthMethodId: parseLinkedDeviceRevokeWalletAuthMethodId(record.walletAuthMethodId, "LinkedDeviceRevokeRequestV1.walletAuthMethodId"),
402
- requestedAtMs: parseUnixTime(record.requestedAtMs, "LinkedDeviceRevokeRequestV1.requestedAtMs")
403
- };
404
- }
405
168
  function parseQrPayloadRecord(record) {
406
169
  if (record.version !== "v5") throw new Error("QrLinkedDeviceSessionPayloadV5.version is invalid");
407
170
  if (record.purpose !== "linked_device_lane_creation") throw new Error("QrLinkedDeviceSessionPayloadV5.purpose is invalid");
@@ -411,7 +174,7 @@ function parseQrPayloadRecord(record) {
411
174
  const base = {
412
175
  version: "v5",
413
176
  purpose: "linked_device_lane_creation",
414
- linkSessionId: parseSessionId(record.linkSessionId, "QrLinkedDeviceSessionPayloadV5.linkSessionId"),
177
+ linkSessionId: sessionId(record.linkSessionId, "QrLinkedDeviceSessionPayloadV5.linkSessionId"),
415
178
  linkPublicKeyB64u: parsePublicKey(record.linkPublicKeyB64u, "QrLinkedDeviceSessionPayloadV5.linkPublicKeyB64u"),
416
179
  devicePublicKeyB64u: parsePublicKey(record.devicePublicKeyB64u, "QrLinkedDeviceSessionPayloadV5.devicePublicKeyB64u"),
417
180
  requestedPermission: parseDelegatedWalletAuthority(record.requestedPermission, "QrLinkedDeviceSessionPayloadV5.requestedPermission"),
@@ -431,78 +194,60 @@ function parseQrPayloadRecord(record) {
431
194
  }
432
195
  function parseQrLinkedDeviceSessionPayloadV5(raw) {
433
196
  const candidate = requireRecord(raw, "QrLinkedDeviceSessionPayloadV5");
434
- return parseQrPayloadRecord(exactRecord(candidate, parseTargetFactor(candidate.targetFactor, "QrLinkedDeviceSessionPayloadV5.targetFactor").kind === "email_otp" ? QR_EMAIL_FIELDS : QR_FIELDS, "QrLinkedDeviceSessionPayloadV5"));
197
+ return parseQrPayloadRecord(exactRecord(candidate, parseTargetFactor(candidate.targetFactor, "QrLinkedDeviceSessionPayloadV5.targetFactor").kind === "email_otp" ? [...QR_FIELDS, "targetEmail"] : QR_FIELDS, "QrLinkedDeviceSessionPayloadV5"));
198
+ }
199
+ function linkedDeviceOwnerAuthorizationRequestV1() {
200
+ return wireObject({
201
+ payload: parseQrLinkedDeviceSessionPayloadV5,
202
+ requestedAtMs: parseUnixTime
203
+ });
435
204
  }
436
205
  function parseLinkedDeviceOwnerAuthorizationRequestV1(raw) {
437
- const record = exactRecord(raw, OWNER_AUTHORIZATION_REQUEST_FIELDS, "LinkedDeviceOwnerAuthorizationRequestV1");
438
- const requestedAtMs = parseUnixTime(record.requestedAtMs, "LinkedDeviceOwnerAuthorizationRequestV1.requestedAtMs");
439
- return {
440
- payload: parseQrLinkedDeviceSessionPayloadV5(record.payload),
441
- requestedAtMs
442
- };
206
+ return linkedDeviceOwnerAuthorizationRequestV1()(raw, "LinkedDeviceOwnerAuthorizationRequestV1");
207
+ }
208
+ function linkSessionStatesV1() {
209
+ const withDevice = (state) => wireObject({
210
+ state: wireLiteral(state),
211
+ deviceId: authorizationDeviceId
212
+ });
213
+ return [
214
+ wireObject({ state: wireLiteral("displaying_qr") }),
215
+ withDevice("claimed"),
216
+ withDevice("awaiting_target_factor"),
217
+ withDevice("awaiting_source_contribution"),
218
+ withDevice("provisioning"),
219
+ wireObject({
220
+ state: wireLiteral("authority_pending_local_install"),
221
+ deviceId: authorizationDeviceId,
222
+ authorityId: walletAuthorityId,
223
+ packageSetDigestB64u: digest
224
+ }),
225
+ wireObject({
226
+ state: wireLiteral("active"),
227
+ deviceId: authorizationDeviceId,
228
+ authorityId: walletAuthorityId,
229
+ activatedAtMs: parseUnixTime
230
+ }),
231
+ wireObject({
232
+ state: wireLiteral("failed_before_commit"),
233
+ error: parseLinkPrecommitFailureV1
234
+ }),
235
+ wireObject({
236
+ state: wireLiteral("cancelled"),
237
+ cancelledAtMs: parseUnixTime
238
+ }),
239
+ wireObject({
240
+ state: wireLiteral("expired"),
241
+ expiredAtMs: parseUnixTime
242
+ })
243
+ ];
443
244
  }
444
245
  function parseLinkSessionStateV1(raw) {
445
- const initial = requireRecord(raw, "LinkSessionStateV1");
446
- if (typeof initial.state !== "string") throw new Error("LinkSessionStateV1.state is invalid");
447
- switch (initial.state) {
448
- case "displaying_qr":
449
- exactRecord(initial, ["state"], "LinkSessionStateV1.displaying_qr");
450
- return { state: "displaying_qr" };
451
- case "claimed":
452
- case "awaiting_target_factor":
453
- case "awaiting_source_contribution":
454
- case "provisioning":
455
- exactRecord(initial, ["state", "deviceId"], `LinkSessionStateV1.${initial.state}`);
456
- return {
457
- state: initial.state,
458
- deviceId: parseId(parseDeviceId$1, initial.deviceId, `LinkSessionStateV1.${initial.state}.deviceId`)
459
- };
460
- case "authority_pending_local_install":
461
- exactRecord(initial, [
462
- "state",
463
- "deviceId",
464
- "authorityId",
465
- "packageSetDigestB64u"
466
- ], "LinkSessionStateV1.authority_pending_local_install");
467
- return {
468
- state: initial.state,
469
- deviceId: parseId(parseDeviceId$1, initial.deviceId, "LinkSessionStateV1.authority_pending_local_install.deviceId"),
470
- authorityId: parseId(parseWalletAuthorityId, initial.authorityId, "LinkSessionStateV1.authority_pending_local_install.authorityId"),
471
- packageSetDigestB64u: parseDigest(initial.packageSetDigestB64u, "LinkSessionStateV1.authority_pending_local_install.packageSetDigestB64u")
472
- };
473
- case "active":
474
- exactRecord(initial, [
475
- "state",
476
- "deviceId",
477
- "authorityId",
478
- "activatedAtMs"
479
- ], "LinkSessionStateV1.active");
480
- return {
481
- state: initial.state,
482
- deviceId: parseId(parseDeviceId$1, initial.deviceId, "LinkSessionStateV1.active.deviceId"),
483
- authorityId: parseId(parseWalletAuthorityId, initial.authorityId, "LinkSessionStateV1.active.authorityId"),
484
- activatedAtMs: parseUnixTime(initial.activatedAtMs, "LinkSessionStateV1.active.activatedAtMs")
485
- };
486
- case "failed_before_commit":
487
- exactRecord(initial, ["state", "error"], "LinkSessionStateV1.failed_before_commit");
488
- return {
489
- state: initial.state,
490
- error: parseLinkPrecommitFailureV1(initial.error)
491
- };
492
- case "cancelled":
493
- exactRecord(initial, ["state", "cancelledAtMs"], "LinkSessionStateV1.cancelled");
494
- return {
495
- state: initial.state,
496
- cancelledAtMs: parseUnixTime(initial.cancelledAtMs, "LinkSessionStateV1.cancelled.cancelledAtMs")
497
- };
498
- case "expired":
499
- exactRecord(initial, ["state", "expiredAtMs"], "LinkSessionStateV1.expired");
500
- return {
501
- state: initial.state,
502
- expiredAtMs: parseUnixTime(initial.expiredAtMs, "LinkSessionStateV1.expired.expiredAtMs")
503
- };
504
- default: throw new Error(`LinkSessionStateV1.state ${initial.state} is unsupported`);
505
- }
246
+ const state = requireRecord(raw, "LinkSessionStateV1").state;
247
+ if (typeof state !== "string") throw new Error("LinkSessionStateV1.state is invalid");
248
+ const schema = linkSessionStatesV1().find((variant) => variant.shape.state.literals.includes(state));
249
+ if (!schema) throw new Error(`LinkSessionStateV1.state ${state} is unsupported`);
250
+ return schema(raw, `LinkSessionStateV1.${state}`);
506
251
  }
507
252
  function parseLinkPrecommitFailureV1(raw) {
508
253
  const record = exactRecord(raw, ["kind", "reason"], "LinkPrecommitFailureV1");
@@ -512,143 +257,145 @@ function parseLinkPrecommitFailureV1(raw) {
512
257
  reason: parseNonEmptyToken(record.reason, "LinkPrecommitFailureV1.reason")
513
258
  };
514
259
  }
260
+ function linkedDeviceSessionClaimRequestV1() {
261
+ return wireObject({
262
+ kind: wireLiteral("linked_device_session_claim_request_v1"),
263
+ payload: parseQrLinkedDeviceSessionPayloadV5
264
+ });
265
+ }
515
266
  function parseLinkedDeviceSessionClaimRequestV1(raw) {
516
- const record = exactRecord(raw, CLAIM_REQUEST_FIELDS, "LinkedDeviceSessionClaimRequestV1");
517
- if (record.kind !== "linked_device_session_claim_request_v1") throw new Error("LinkedDeviceSessionClaimRequestV1.kind is invalid");
518
- return {
519
- kind: "linked_device_session_claim_request_v1",
520
- payload: parseQrLinkedDeviceSessionPayloadV5(record.payload)
521
- };
267
+ return linkedDeviceSessionClaimRequestV1()(raw, "LinkedDeviceSessionClaimRequestV1");
268
+ }
269
+ function linkedDeviceSessionClaimV1() {
270
+ return wireObject({
271
+ kind: wireLiteral("linked_device_session_claim_v1"),
272
+ linkSessionId: sessionId,
273
+ walletId,
274
+ enrollmentId,
275
+ deviceId: linkedDeviceId,
276
+ devicePublicKeyB64u: parsePublicKey,
277
+ targetFactor: parseTargetFactor,
278
+ sessionRevision: parseUnixTime,
279
+ claimedAtMs: parseUnixTime,
280
+ claimExpiresAtMs: parseUnixTime
281
+ }, (claim, label) => assertExpiryAfterIssued(claim.claimedAtMs, claim.claimExpiresAtMs, label));
522
282
  }
523
283
  function parseLinkedDeviceSessionClaimV1(raw) {
524
- const record = exactRecord(raw, CLAIM_FIELDS, "LinkedDeviceSessionClaimV1");
525
- if (record.kind !== "linked_device_session_claim_v1") throw new Error("LinkedDeviceSessionClaimV1.kind is invalid");
526
- const claimedAtMs = parseUnixTime(record.claimedAtMs, "LinkedDeviceSessionClaimV1.claimedAtMs");
527
- const claimExpiresAtMs = parseUnixTime(record.claimExpiresAtMs, "LinkedDeviceSessionClaimV1.claimExpiresAtMs");
528
- assertExpiryAfterIssued(claimedAtMs, claimExpiresAtMs, "LinkedDeviceSessionClaimV1");
529
- return {
530
- kind: "linked_device_session_claim_v1",
531
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceSessionClaimV1.linkSessionId"),
532
- walletId: parseWallet(record.walletId, "LinkedDeviceSessionClaimV1.walletId"),
533
- enrollmentId: parseEnrollmentId(record.enrollmentId, "LinkedDeviceSessionClaimV1.enrollmentId"),
534
- deviceId: parseDeviceId(record.deviceId, "LinkedDeviceSessionClaimV1.deviceId"),
535
- devicePublicKeyB64u: parsePublicKey(record.devicePublicKeyB64u, "LinkedDeviceSessionClaimV1.devicePublicKeyB64u"),
536
- targetFactor: parseTargetFactor(record.targetFactor, "LinkedDeviceSessionClaimV1.targetFactor"),
537
- sessionRevision: parseUnixTime(record.sessionRevision, "LinkedDeviceSessionClaimV1.sessionRevision"),
538
- claimedAtMs,
539
- claimExpiresAtMs
540
- };
284
+ return linkedDeviceSessionClaimV1()(raw, "LinkedDeviceSessionClaimV1");
285
+ }
286
+ function walletSessionOwnerAuthorizationV1() {
287
+ return wireObject({
288
+ kind: wireLiteral("wallet_session"),
289
+ walletSessionId,
290
+ authorizationId: walletSessionAuthorizationId
291
+ });
541
292
  }
542
293
  function parseLinkedDeviceOwnerAuthorizationSourceV1(raw, label = "ownerAuthorization") {
543
- const record = requireRecord(raw, label);
544
- if (record.kind === "wallet_session") {
545
- const exact = exactRecord(record, OWNER_AUTH_WALLET_SESSION_FIELDS, label);
546
- return {
547
- kind: "wallet_session",
548
- walletSessionId: parseWalletSession(exact.walletSessionId, `${label}.walletSessionId`),
549
- authorizationId: parseWalletAuthorization(exact.authorizationId, `${label}.authorizationId`)
550
- };
551
- }
552
- throw new Error(`${label}.kind is unsupported`);
294
+ if (requireRecord(raw, label).kind !== "wallet_session") throw new Error(`${label}.kind is unsupported`);
295
+ return walletSessionOwnerAuthorizationV1()(raw, label);
553
296
  }
554
- function parseEnrollmentCore(record, label) {
555
- const approvedAtMs = parseUnixTime(record.approvedAtMs, `${label}.approvedAtMs`);
556
- const expiresAtMs = parseUnixTime(record.expiresAtMs, `${label}.expiresAtMs`);
557
- assertExpiryAfterIssued(approvedAtMs, expiresAtMs, label);
558
- const core = {
559
- linkSessionId: parseSessionId(record.linkSessionId, `${label}.linkSessionId`),
560
- walletId: parseWallet(record.walletId, `${label}.walletId`),
561
- enrollmentId: parseEnrollmentId(record.enrollmentId, `${label}.enrollmentId`),
562
- deviceId: parseDeviceId(record.deviceId, `${label}.deviceId`),
563
- linkPublicKeyB64u: parsePublicKey(record.linkPublicKeyB64u, `${label}.linkPublicKeyB64u`),
564
- devicePublicKeyB64u: parsePublicKey(record.devicePublicKeyB64u, `${label}.devicePublicKeyB64u`),
565
- permission: parseDelegatedWalletAuthority(record.permission, `${label}.permission`),
566
- targetFactor: parseApprovedTargetFactor(record.targetFactor, `${label}.targetFactor`),
567
- ownerAuthorization: parseLinkedDeviceOwnerAuthorizationSourceV1(record.ownerAuthorization, `${label}.ownerAuthorization`),
568
- approvedAtMs,
569
- expiresAtMs
570
- };
571
- if (record.sourceContribution === void 0) return core;
297
+ function linkedDeviceApprovalFields() {
572
298
  return {
573
- ...core,
574
- sourceContribution: parseLinkedDeviceOrdinaryMaterialSourceContributionTupleV1(record.sourceContribution)
299
+ kind: wireLiteral("linked_device_approval_v1"),
300
+ linkSessionId: sessionId,
301
+ walletId,
302
+ enrollmentId,
303
+ deviceId: linkedDeviceId,
304
+ linkPublicKeyB64u: parsePublicKey,
305
+ devicePublicKeyB64u: parsePublicKey,
306
+ permission: parseDelegatedWalletAuthority,
307
+ targetFactor: parseApprovedTargetFactor,
308
+ ownerAuthorization: parseLinkedDeviceOwnerAuthorizationSourceV1,
309
+ approvedAtMs: parseUnixTime,
310
+ expiresAtMs: parseUnixTime
575
311
  };
576
312
  }
313
+ function approvedBeforeExpiry(approval, label) {
314
+ assertExpiryAfterIssued(approval.approvedAtMs, approval.expiresAtMs, label);
315
+ }
316
+ function linkedDeviceApprovalV1() {
317
+ return wireObject(linkedDeviceApprovalFields(), approvedBeforeExpiry);
318
+ }
319
+ function linkedDeviceSourceContributionApprovalV1() {
320
+ return wireObject({
321
+ ...linkedDeviceApprovalFields(),
322
+ sourceContribution: parseLinkedDeviceOrdinaryMaterialSourceContributionTupleV1
323
+ }, approvedBeforeExpiry);
324
+ }
577
325
  function parseLinkedDeviceApprovalV1(raw) {
578
- const candidate = requireRecord(raw, "LinkedDeviceApprovalV1");
579
- const record = exactRecord(candidate, candidate.sourceContribution === void 0 ? ENROLLMENT_FIELDS : ENROLLMENT_FIELDS_WITH_SOURCE_CONTRIBUTION, "LinkedDeviceApprovalV1");
580
- if (record.kind !== "linked_device_approval_v1") throw new Error("LinkedDeviceApprovalV1.kind is invalid");
581
- return {
582
- kind: "linked_device_approval_v1",
583
- ...parseEnrollmentCore(record, "LinkedDeviceApprovalV1")
584
- };
326
+ const record = requireRecord(raw, "LinkedDeviceApprovalV1");
327
+ return (record.sourceContribution === void 0 ? linkedDeviceApprovalV1() : linkedDeviceSourceContributionApprovalV1())(record, "LinkedDeviceApprovalV1");
328
+ }
329
+ function linkedDeviceApprovalDeliveryV1() {
330
+ return wireObject({
331
+ kind: wireLiteral("linked_device_approval_delivery_v1"),
332
+ approval: parseLinkedDeviceApprovalV1
333
+ });
585
334
  }
586
335
  function parseLinkedDeviceApprovalDeliveryV1(raw) {
587
- const record = exactRecord(raw, APPROVAL_DELIVERY_FIELDS, "LinkedDeviceApprovalDeliveryV1");
588
- if (record.kind !== "linked_device_approval_delivery_v1") throw new Error("LinkedDeviceApprovalDeliveryV1.kind is invalid");
336
+ return linkedDeviceApprovalDeliveryV1()(raw, "LinkedDeviceApprovalDeliveryV1");
337
+ }
338
+ function linkedDeviceTargetPreparationFields() {
589
339
  return {
590
- kind: "linked_device_approval_delivery_v1",
591
- approval: parseLinkedDeviceApprovalV1(record.approval)
592
- };
340
+ kind: wireLiteral("linked_device_target_preparation_v1"),
341
+ linkSessionId: sessionId,
342
+ walletId,
343
+ enrollmentId,
344
+ deviceId: linkedDeviceId,
345
+ deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u,
346
+ walletAuthMethodId,
347
+ ed25519ExportRoot: wireNullable(ed25519ExportRootPreparationV1()),
348
+ ordinarySignerMaterialRecipientRequirements: parseRecipientRequirements,
349
+ issuedAtMs: parseUnixTime,
350
+ expiresAtMs: parseUnixTime
351
+ };
352
+ }
353
+ function preparationExpiresAfterIssue(preparation, label) {
354
+ if (preparation.expiresAtMs <= preparation.issuedAtMs) throw new Error(`${label}.expiresAtMs must follow issuedAtMs`);
355
+ }
356
+ function passkeyTargetPreparationV1() {
357
+ return wireObject({
358
+ ...linkedDeviceTargetPreparationFields(),
359
+ targetFactor: passkeyTargetFactorV1(),
360
+ passkeyCreationOptions: parseLinkedDevicePasskeyCreationOptionsV1,
361
+ passkeyConfigurationDigestB64u: digest
362
+ }, (preparation, label) => {
363
+ preparationExpiresAfterIssue(preparation, label);
364
+ if (preparation.passkeyCreationOptions.walletAuthMethodId !== preparation.walletAuthMethodId) throw new Error(`${label}.passkeyCreationOptions.walletAuthMethodId must match the preparation`);
365
+ });
366
+ }
367
+ function emailOtpTargetPreparationV1() {
368
+ return wireObject({
369
+ ...linkedDeviceTargetPreparationFields(),
370
+ targetFactor: emailOtpTargetFactorV1(),
371
+ targetEmail: parseTargetEmail,
372
+ enrollment: existingEnrollmentV1(),
373
+ baseWalletAuthMethodId: walletAuthMethodId
374
+ }, preparationExpiresAfterIssue);
375
+ }
376
+ function newEmailOtpTargetPreparationV1() {
377
+ return wireObject({
378
+ ...linkedDeviceTargetPreparationFields(),
379
+ targetFactor: emailOtpTargetFactorV1(),
380
+ targetEmail: parseTargetEmail,
381
+ enrollment: newEnrollmentV1()
382
+ }, preparationExpiresAfterIssue);
593
383
  }
594
384
  function parseLinkedDeviceTargetPreparationV1(raw) {
595
- const candidate = requireRecord(raw, "LinkedDeviceTargetPreparationV1");
596
- const targetFactor = parseTargetFactor(candidate.targetFactor, "LinkedDeviceTargetPreparationV1.targetFactor");
597
- const emailEnrollment = targetFactor.kind === "email_otp" ? parseEmailOtpEnrollmentSelection(candidate.enrollment, "LinkedDeviceTargetPreparationV1.enrollment") : null;
598
- const record = exactRecord(candidate, targetFactor.kind === "passkey_prf" ? TARGET_PREPARATION_PASSKEY_FIELDS : emailEnrollment?.kind === "new_enrollment" ? TARGET_PREPARATION_EMAIL_NEW_FIELDS : TARGET_PREPARATION_EMAIL_FIELDS, "LinkedDeviceTargetPreparationV1");
599
- if (record.kind !== "linked_device_target_preparation_v1") throw new Error("LinkedDeviceTargetPreparationV1.kind is invalid");
600
- const walletAuthMethodId = parseId(parseWalletAuthMethodId, record.walletAuthMethodId, "LinkedDeviceTargetPreparationV1.walletAuthMethodId");
601
- const ordinarySignerMaterialRecipientRequirements = parseOrdinarySignerMaterialRecipientRequirementsV1(record.ordinarySignerMaterialRecipientRequirements);
602
- const issuedAtMs = parseUnixTime(record.issuedAtMs, "LinkedDeviceTargetPreparationV1.issuedAtMs");
603
- const expiresAtMs = parseUnixTime(record.expiresAtMs, "LinkedDeviceTargetPreparationV1.expiresAtMs");
604
- if (expiresAtMs <= issuedAtMs) throw new Error("LinkedDeviceTargetPreparationV1.expiresAtMs must follow issuedAtMs");
605
- const ed25519ExportRoot = parseLinkedDeviceEd25519ExportRootPreparationV1(record.ed25519ExportRoot);
606
- const base = {
607
- kind: "linked_device_target_preparation_v1",
608
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceTargetPreparationV1.linkSessionId"),
609
- walletId: parseWallet(record.walletId, "LinkedDeviceTargetPreparationV1.walletId"),
610
- enrollmentId: parseEnrollmentId(record.enrollmentId, "LinkedDeviceTargetPreparationV1.enrollmentId"),
611
- deviceId: parseDeviceId(record.deviceId, "LinkedDeviceTargetPreparationV1.deviceId"),
612
- deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u(record.deliveryRecipientPublicKey65B64u, "LinkedDeviceTargetPreparationV1.deliveryRecipientPublicKey65B64u"),
613
- walletAuthMethodId,
614
- ed25519ExportRoot,
615
- ordinarySignerMaterialRecipientRequirements,
616
- issuedAtMs,
617
- expiresAtMs
618
- };
619
- if (targetFactor.kind === "passkey_prf") {
620
- const passkeyCreationOptions = parseLinkedDevicePasskeyCreationOptionsV1(record.passkeyCreationOptions, walletAuthMethodId);
621
- return {
622
- ...base,
623
- targetFactor,
624
- passkeyCreationOptions,
625
- passkeyConfigurationDigestB64u: parseDigest(record.passkeyConfigurationDigestB64u, "LinkedDeviceTargetPreparationV1.passkeyConfigurationDigestB64u")
626
- };
627
- }
628
- if (!emailEnrollment) throw new Error("Email OTP target preparation enrollment is missing");
629
- const targetEmail = parseTargetEmail(record.targetEmail, "LinkedDeviceTargetPreparationV1.targetEmail");
630
- if (emailEnrollment.kind === "new_enrollment") return {
631
- ...base,
632
- targetFactor,
633
- targetEmail,
634
- enrollment: emailEnrollment
635
- };
636
- return {
637
- ...base,
638
- targetFactor,
639
- targetEmail,
640
- enrollment: emailEnrollment,
641
- baseWalletAuthMethodId: parseId(parseWalletAuthMethodId, record.baseWalletAuthMethodId, "LinkedDeviceTargetPreparationV1.baseWalletAuthMethodId")
642
- };
385
+ const label = "LinkedDeviceTargetPreparationV1";
386
+ const record = requireRecord(raw, label);
387
+ if (parseTargetFactor(record.targetFactor, `${label}.targetFactor`).kind === "passkey_prf") return passkeyTargetPreparationV1()(record, label);
388
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "new_enrollment" ? newEmailOtpTargetPreparationV1() : emailOtpTargetPreparationV1())(record, label);
389
+ }
390
+ function linkedDeviceTargetPreparationRequestV1() {
391
+ return wireObject({
392
+ kind: wireLiteral("linked_device_target_preparation_request_v1"),
393
+ linkSessionId: sessionId,
394
+ deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u
395
+ });
643
396
  }
644
397
  function parseLinkedDeviceTargetPreparationRequestV1(raw) {
645
- const record = exactRecord(raw, TARGET_PREPARATION_REQUEST_FIELDS, "LinkedDeviceTargetPreparationRequestV1");
646
- if (record.kind !== "linked_device_target_preparation_request_v1") throw new Error("LinkedDeviceTargetPreparationRequestV1.kind is invalid");
647
- return {
648
- kind: "linked_device_target_preparation_request_v1",
649
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceTargetPreparationRequestV1.linkSessionId"),
650
- deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u(record.deliveryRecipientPublicKey65B64u, "LinkedDeviceTargetPreparationRequestV1.deliveryRecipientPublicKey65B64u")
651
- };
398
+ return linkedDeviceTargetPreparationRequestV1()(raw, "LinkedDeviceTargetPreparationRequestV1");
652
399
  }
653
400
  function parseLinkedDeviceEmailOtpBaseFactorRequestV1(raw) {
654
401
  const record = requireRecord(raw, "LinkedDeviceEmailOtpBaseFactorRequestV1");
@@ -663,7 +410,7 @@ function parseLinkedDeviceEmailOtpBaseFactorRequestV1(raw) {
663
410
  if (record.kind === "select") return {
664
411
  kind: "select",
665
412
  expectedRevision,
666
- baseWalletAuthMethodId: parseId(parseWalletAuthMethodId, exactRecord(record, [
413
+ baseWalletAuthMethodId: walletAuthMethodId(exactRecord(record, [
667
414
  "kind",
668
415
  "expectedRevision",
669
416
  "baseWalletAuthMethodId"
@@ -671,8 +418,7 @@ function parseLinkedDeviceEmailOtpBaseFactorRequestV1(raw) {
671
418
  };
672
419
  throw new Error("LinkedDeviceEmailOtpBaseFactorRequestV1.kind is unsupported");
673
420
  }
674
- function parseLinkedDevicePasskeyCreationOptionsV1(raw, expectedWalletAuthMethodId) {
675
- const label = "LinkedDeviceTargetPreparationV1.passkeyCreationOptions";
421
+ function parseLinkedDevicePasskeyCreationOptionsV1(raw, label) {
676
422
  const record = exactRecord(raw, [
677
423
  "kind",
678
424
  "walletAuthMethodId",
@@ -687,8 +433,7 @@ function parseLinkedDevicePasskeyCreationOptionsV1(raw, expectedWalletAuthMethod
687
433
  "extensions",
688
434
  "excludeCredentials"
689
435
  ], label);
690
- const walletAuthMethodId = parseId(parseWalletAuthMethodId, record.walletAuthMethodId, `${label}.walletAuthMethodId`);
691
- if (walletAuthMethodId !== expectedWalletAuthMethodId) throw new Error(`${label}.walletAuthMethodId must match the preparation`);
436
+ const methodId = walletAuthMethodId(record.walletAuthMethodId, `${label}.walletAuthMethodId`);
692
437
  exactRecord(record.user, [
693
438
  "idB64u",
694
439
  "name",
@@ -707,7 +452,7 @@ function parseLinkedDevicePasskeyCreationOptionsV1(raw, expectedWalletAuthMethod
707
452
  const options = parseWalletAddAuthMethodRegistrationOptions(record);
708
453
  return {
709
454
  kind: options.kind,
710
- walletAuthMethodId,
455
+ walletAuthMethodId: methodId,
711
456
  challengeId: options.challengeId,
712
457
  challengeB64u: options.challengeB64u,
713
458
  rpId: options.rpId,
@@ -720,448 +465,311 @@ function parseLinkedDevicePasskeyCreationOptionsV1(raw, expectedWalletAuthMethod
720
465
  excludeCredentials: options.excludeCredentials
721
466
  };
722
467
  }
723
- function parseLinkedDeviceEd25519ExportRootPreparationV1(raw) {
724
- if (raw === null) return null;
725
- const record = exactRecord(raw, [
726
- "kind",
727
- "walletKeyId",
728
- "applicationBindingDigestB64u",
729
- "registeredPublicKeyB64u",
730
- "revocationEpoch"
731
- ], "LinkedDeviceTargetPreparationV1.ed25519ExportRoot");
732
- if (record.kind !== "linked_device_ed25519_export_root_preparation_v1") throw new Error("LinkedDeviceTargetPreparationV1.ed25519ExportRoot.kind is invalid");
733
- return {
734
- kind: "linked_device_ed25519_export_root_preparation_v1",
735
- walletKeyId: parseWalletKey(record.walletKeyId, "LinkedDeviceTargetPreparationV1.ed25519ExportRoot.walletKeyId"),
736
- applicationBindingDigestB64u: parseDigest(record.applicationBindingDigestB64u, "LinkedDeviceTargetPreparationV1.ed25519ExportRoot.applicationBindingDigestB64u"),
737
- registeredPublicKeyB64u: parseEd25519PublicKeyB64u(record.registeredPublicKeyB64u, "LinkedDeviceTargetPreparationV1.ed25519ExportRoot.registeredPublicKeyB64u"),
738
- revocationEpoch: parseNonNegativeSafeInteger(record.revocationEpoch, "LinkedDeviceTargetPreparationV1.ed25519ExportRoot.revocationEpoch")
739
- };
468
+ function ed25519ExportRootPreparationV1() {
469
+ return wireObject({
470
+ kind: wireLiteral("linked_device_ed25519_export_root_preparation_v1"),
471
+ walletKeyId,
472
+ applicationBindingDigestB64u: digest,
473
+ registeredPublicKeyB64u: parseEd25519PublicKeyB64u,
474
+ revocationEpoch: parseNonNegativeSafeInteger
475
+ });
740
476
  }
741
- function parseOrdinarySignerMaterialRecipientRequirementV1(raw, index) {
742
- const label = `LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements[${index}]`;
743
- const record = exactRecord(raw, [
744
- "kind",
745
- "keyFamily",
746
- "walletKeyId"
747
- ], label);
748
- if (record.kind !== "ordinary_signer_material_recipient_requirement_v1") throw new Error(`${label}.kind is invalid`);
749
- return {
750
- kind: "ordinary_signer_material_recipient_requirement_v1",
751
- keyFamily: parseKeyFamily(record.keyFamily, `${label}.keyFamily`),
752
- walletKeyId: parseId(parseWalletKeyId, record.walletKeyId, `${label}.walletKeyId`)
753
- };
477
+ function parseKeyFamilyEntries(raw, item, label) {
478
+ if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error(`${label} must contain one or two entries`);
479
+ const entries = raw.map((entry, index) => item(entry, `${label}[${index}]`));
480
+ if (new Set(entries.map((entry) => entry.keyFamily)).size !== entries.length) throw new Error(`${label} repeats a key family`);
481
+ if (new Set(entries.map((entry) => String(entry.walletKeyId))).size !== entries.length) throw new Error(`${label} repeats a wallet key`);
482
+ if (entries.length === 2 && (entries[0]?.keyFamily !== "ed25519" || entries[1]?.keyFamily !== "ecdsa_secp256k1")) throw new Error(`${label} must be ordered Ed25519 then ECDSA`);
483
+ return entries;
484
+ }
485
+ function recipientRequirementV1() {
486
+ return wireObject({
487
+ kind: wireLiteral("ordinary_signer_material_recipient_requirement_v1"),
488
+ keyFamily: parseKeyFamily,
489
+ walletKeyId
490
+ });
754
491
  }
755
- function parseOrdinarySignerMaterialRecipientRequirementsV1(raw) {
756
- if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error("LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements must contain one or two entries");
757
- const requirements = raw.map((entry, index) => parseOrdinarySignerMaterialRecipientRequirementV1(entry, index));
758
- if (new Set(requirements.map((entry) => entry.keyFamily)).size !== requirements.length) throw new Error("LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements repeats a key family");
759
- if (new Set(requirements.map((entry) => String(entry.walletKeyId))).size !== requirements.length) throw new Error("LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements repeats a wallet key");
760
- if (requirements.length === 2 && (requirements[0]?.keyFamily !== "ed25519" || requirements[1]?.keyFamily !== "ecdsa_secp256k1")) throw new Error("LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements must be ordered Ed25519 then ECDSA");
492
+ function parseRecipientRequirements(raw) {
493
+ const requirements = parseKeyFamilyEntries(raw, recipientRequirementV1(), "LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements");
761
494
  const first = requirements[0];
762
495
  if (!first) throw new Error("ordinary signer material recipient requirements are empty");
763
496
  return [first, ...requirements.slice(1)];
764
497
  }
765
- function parseWebAuthnTransport(raw, label) {
766
- switch (raw) {
767
- case "ble":
768
- case "cable":
769
- case "hybrid":
770
- case "internal":
771
- case "nfc":
772
- case "smart-card":
773
- case "usb": return raw;
774
- default: throw new Error(`${label} is invalid`);
775
- }
776
- }
777
- function parseLinkedDeviceWebAuthnRegistrationV1(raw) {
778
- const label = "LinkedDeviceTargetCredentialRegistrationV1.webauthnRegistration";
779
- const record = exactRecord(raw, WEBAUTHN_REGISTRATION_FIELDS, label);
780
- if (record.kind !== "linked_device_webauthn_registration_v1") throw new Error(`${label}.kind is invalid`);
781
- if (!Array.isArray(record.transports)) throw new Error(`${label}.transports must be an array`);
782
- if (record.authenticatorAttachment !== null && record.authenticatorAttachment !== "platform" && record.authenticatorAttachment !== "cross-platform") throw new Error(`${label}.authenticatorAttachment is invalid`);
783
- const transports = record.transports.map((entry, index) => parseWebAuthnTransport(entry, `${label}.transports[${index}]`));
784
- if (new Set(transports).size !== transports.length) throw new Error(`${label}.transports contains duplicates`);
785
- return {
786
- kind: "linked_device_webauthn_registration_v1",
787
- credentialIdB64u: parseCredential(record.credentialIdB64u, `${label}.credentialIdB64u`),
788
- authenticatorAttachment: record.authenticatorAttachment,
789
- clientDataJsonB64u: parseCanonicalBase64UrlBytes(record.clientDataJsonB64u, `${label}.clientDataJsonB64u`),
790
- attestationObjectB64u: parseCanonicalBase64UrlBytes(record.attestationObjectB64u, `${label}.attestationObjectB64u`),
791
- transports
792
- };
793
- }
794
- function parseOrdinarySignerMaterialPreparationsV1(raw) {
795
- return parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1(raw);
498
+ const webAuthnTransport = /* @__PURE__ */ wireLiteral("ble", "cable", "hybrid", "internal", "nfc", "smart-card", "usb");
499
+ function parseWebAuthnTransports(raw, label) {
500
+ const transports = requireArray(raw, label).map((entry, index) => webAuthnTransport(entry, `${label}[${index}]`));
501
+ if (new Set(transports).size !== transports.length) throw new Error(`${label} contains duplicates`);
502
+ return transports;
503
+ }
504
+ function linkedDeviceWebAuthnRegistrationV1() {
505
+ return wireObject({
506
+ kind: wireLiteral("linked_device_webauthn_registration_v1"),
507
+ credentialIdB64u: parseCredential,
508
+ authenticatorAttachment: wireNullable(wireLiteral("platform", "cross-platform")),
509
+ clientDataJsonB64u: parseCanonicalBase64UrlBytes,
510
+ attestationObjectB64u: parseCanonicalBase64UrlBytes,
511
+ transports: parseWebAuthnTransports
512
+ });
796
513
  }
797
- function parseOrdinarySignerMaterialRecipientRequestV1(raw, index) {
798
- const label = `LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests[${index}]`;
799
- const record = requireRecord(raw, label);
800
- if (record.kind === "ordinary_ed25519_signer_material_recipient_request_v1") {
801
- exactRecord(record, [
802
- "kind",
803
- "keyFamily",
804
- "walletKeyId",
805
- "recipientPublicKeyB64u"
806
- ], label);
807
- if (record.keyFamily !== "ed25519") throw new Error(`${label}.keyFamily does not match its kind`);
808
- return {
809
- kind: record.kind,
810
- keyFamily: "ed25519",
811
- walletKeyId: parseId(parseWalletKeyId, record.walletKeyId, `${label}.walletKeyId`),
812
- recipientPublicKeyB64u: parseCanonicalFixedBase64UrlBytes(record.recipientPublicKeyB64u, 32, `${label}.recipientPublicKeyB64u`)
813
- };
814
- }
815
- if (record.kind === "ordinary_ecdsa_signer_material_recipient_request_v1") {
816
- exactRecord(record, [
817
- "kind",
818
- "keyFamily",
819
- "walletKeyId",
820
- "clientEphemeralPublicKey"
821
- ], label);
822
- if (record.keyFamily !== "ecdsa_secp256k1") throw new Error(`${label}.keyFamily does not match its kind`);
823
- return {
824
- kind: record.kind,
825
- keyFamily: "ecdsa_secp256k1",
826
- walletKeyId: parseId(parseWalletKeyId, record.walletKeyId, `${label}.walletKeyId`),
827
- clientEphemeralPublicKey: requireRouterAbX25519PublicKey(record.clientEphemeralPublicKey, `${label}.clientEphemeralPublicKey`)
828
- };
829
- }
830
- throw new Error(`${label}.kind is invalid`);
831
- }
832
- function parseOrdinarySignerMaterialRecipientRequestsV1(raw) {
833
- if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error("LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests must contain one or two entries");
834
- const requests = raw.map((entry, index) => parseOrdinarySignerMaterialRecipientRequestV1(entry, index));
835
- const families = requests.map((entry) => entry.keyFamily);
836
- if (new Set(families).size !== families.length) throw new Error("LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests repeats a key family");
837
- if (new Set(requests.map((entry) => String(entry.walletKeyId))).size !== requests.length) throw new Error("LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests repeats a wallet key");
838
- if (requests.length === 2 && (requests[0]?.keyFamily !== "ed25519" || requests[1]?.keyFamily !== "ecdsa_secp256k1")) throw new Error("LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests must be ordered Ed25519 then ECDSA");
514
+ function recipientRequestV1() {
515
+ const keyFamily = (family) => (raw, label) => {
516
+ if (raw !== family) throw new Error(`${label} does not match its kind`);
517
+ return family;
518
+ };
519
+ return wireUnion("kind", [wireObject({
520
+ kind: wireLiteral("ordinary_ed25519_signer_material_recipient_request_v1"),
521
+ keyFamily: keyFamily("ed25519"),
522
+ walletKeyId,
523
+ recipientPublicKeyB64u: (raw, label) => parseCanonicalFixedBase64UrlBytes(raw, 32, label)
524
+ }), wireObject({
525
+ kind: wireLiteral("ordinary_ecdsa_signer_material_recipient_request_v1"),
526
+ keyFamily: keyFamily("ecdsa_secp256k1"),
527
+ walletKeyId,
528
+ clientEphemeralPublicKey: requireRouterAbX25519PublicKey
529
+ })]);
530
+ }
531
+ function parseRecipientRequests(raw) {
532
+ const requests = parseKeyFamilyEntries(raw, recipientRequestV1(), "LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests");
839
533
  const first = requests[0];
840
534
  if (!first) throw new Error("ordinary signer material recipient requests are empty");
841
535
  return [first, ...requests.slice(1)];
842
536
  }
843
- function parseLinkedDeviceTargetCredentialRegistrationV1(raw) {
844
- const initial = requireRecord(raw, "LinkedDeviceTargetCredentialRegistrationV1");
845
- const targetFactor = parseTargetFactor(initial.targetFactor, "LinkedDeviceTargetCredentialRegistrationV1.targetFactor");
846
- const emailGrant = targetFactor.kind === "email_otp" ? parseLinkedDeviceEmailOtpVerificationGrantV1(initial.emailOtpVerificationGrant) : null;
847
- const record = exactRecord(initial, targetFactor.kind === "passkey_prf" ? PASSKEY_CREDENTIAL_FIELDS : emailGrant?.enrollment.kind === "new_enrollment" ? EMAIL_OTP_CREDENTIAL_NEW_FIELDS : EMAIL_OTP_CREDENTIAL_FIELDS, "LinkedDeviceTargetCredentialRegistrationV1");
848
- if (record.kind !== "linked_device_target_credential_registration_v1") throw new Error("LinkedDeviceTargetCredentialRegistrationV1.kind is invalid");
849
- if (targetFactor.kind === "email_otp" && !emailGrant) throw new Error("Email OTP target credential grant is missing");
850
- const linkSessionId = parseSessionId(record.linkSessionId, "LinkedDeviceTargetCredentialRegistrationV1.linkSessionId");
851
- const walletId = parseWallet(record.walletId, "LinkedDeviceTargetCredentialRegistrationV1.walletId");
852
- const enrollmentId = parseEnrollmentId(record.enrollmentId, "LinkedDeviceTargetCredentialRegistrationV1.enrollmentId");
853
- const deviceId = parseDeviceId(record.deviceId, "LinkedDeviceTargetCredentialRegistrationV1.deviceId");
854
- const walletAuthMethodId = parseWalletAuthMethodId(record.walletAuthMethodId);
855
- if (!walletAuthMethodId.ok) throw new Error(`LinkedDeviceTargetCredentialRegistrationV1.walletAuthMethodId ${walletAuthMethodId.error.message}`);
856
- const targetPreparationDigestB64u = parseDigest(record.targetPreparationDigestB64u, "LinkedDeviceTargetCredentialRegistrationV1.targetPreparationDigestB64u");
857
- const ordinarySignerMaterialRecipientRequests = parseOrdinarySignerMaterialRecipientRequestsV1(record.ordinarySignerMaterialRecipientRequests);
858
- const registeredAtMs = parseUnixTime(record.registeredAtMs, "LinkedDeviceTargetCredentialRegistrationV1.registeredAtMs");
859
- if (targetFactor.kind === "passkey_prf") return {
860
- kind: "linked_device_target_credential_registration_v1",
861
- linkSessionId,
862
- walletId,
863
- enrollmentId,
864
- deviceId,
865
- walletAuthMethodId: walletAuthMethodId.value,
866
- targetFactor,
867
- targetPreparationDigestB64u,
868
- ordinarySignerMaterialRecipientRequests,
869
- webauthnRegistration: parseLinkedDeviceWebAuthnRegistrationV1(record.webauthnRegistration),
870
- registeredAtMs
871
- };
872
- if (!emailGrant) throw new Error("Email OTP target credential grant is missing");
873
- const targetEmail = parseTargetEmail(record.targetEmail, "LinkedDeviceTargetCredentialRegistrationV1.targetEmail");
874
- if (emailGrant.enrollment.kind === "new_enrollment") return {
875
- kind: "linked_device_target_credential_registration_v1",
876
- linkSessionId,
877
- walletId,
878
- enrollmentId,
879
- deviceId,
880
- walletAuthMethodId: walletAuthMethodId.value,
881
- targetFactor,
882
- targetEmail,
883
- targetPreparationDigestB64u,
884
- ordinarySignerMaterialRecipientRequests,
885
- emailOtpVerificationGrant: emailGrant,
886
- emailOtpEnrollment: parseEmailOtpEnrollmentMaterial(record.emailOtpEnrollment, "LinkedDeviceTargetCredentialRegistrationV1.emailOtpEnrollment"),
887
- registeredAtMs
888
- };
537
+ function targetCredentialRegistrationIdentity() {
889
538
  return {
890
- kind: "linked_device_target_credential_registration_v1",
891
- linkSessionId,
539
+ kind: wireLiteral("linked_device_target_credential_registration_v1"),
540
+ linkSessionId: sessionId,
892
541
  walletId,
893
542
  enrollmentId,
894
- deviceId,
895
- walletAuthMethodId: walletAuthMethodId.value,
896
- targetFactor,
897
- targetEmail,
898
- targetPreparationDigestB64u,
899
- ordinarySignerMaterialRecipientRequests,
900
- emailOtpVerificationGrant: emailGrant,
901
- registeredAtMs
902
- };
543
+ deviceId: linkedDeviceId,
544
+ walletAuthMethodId
545
+ };
546
+ }
547
+ function passkeyTargetCredentialRegistrationV1() {
548
+ return wireObject({
549
+ ...targetCredentialRegistrationIdentity(),
550
+ targetFactor: passkeyTargetFactorV1(),
551
+ targetPreparationDigestB64u: digest,
552
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
553
+ webauthnRegistration: linkedDeviceWebAuthnRegistrationV1(),
554
+ registeredAtMs: parseUnixTime
555
+ });
903
556
  }
904
- function parseLinkedDeviceTargetCredentialRegistrationResultV1(raw) {
905
- const record = exactRecord(raw, [
906
- "kind",
907
- "outcome",
908
- "linkSessionId",
909
- "walletId",
910
- "enrollmentId",
911
- "deviceId",
912
- "walletAuthMethodId",
913
- "targetPreparationDigestB64u",
914
- "targetFactor",
915
- "ordinarySignerMaterialPreparations",
916
- "ordinarySignerMaterialRecipientRequests",
917
- "keyManifestDigestB64u"
918
- ], "LinkedDeviceTargetCredentialRegistrationResultV1");
919
- if (record.kind !== "linked_device_target_credential_registration_result_v1") throw new Error("LinkedDeviceTargetCredentialRegistrationResultV1.kind is invalid");
920
- if (record.outcome !== "applied" && record.outcome !== "replayed") throw new Error("LinkedDeviceTargetCredentialRegistrationResultV1.outcome is invalid");
921
- const linkSessionId = parseSessionId(record.linkSessionId, "LinkedDeviceTargetCredentialRegistrationResultV1.linkSessionId");
922
- const walletId = parseWallet(record.walletId, "LinkedDeviceTargetCredentialRegistrationResultV1.walletId");
923
- const enrollmentId = parseEnrollmentId(record.enrollmentId, "LinkedDeviceTargetCredentialRegistrationResultV1.enrollmentId");
924
- const deviceId = parseDeviceId(record.deviceId, "LinkedDeviceTargetCredentialRegistrationResultV1.deviceId");
925
- const walletAuthMethodId = parseId(parseWalletAuthMethodId, record.walletAuthMethodId, "LinkedDeviceTargetCredentialRegistrationResultV1.walletAuthMethodId");
926
- const targetPreparationDigestB64u = parseDigest(record.targetPreparationDigestB64u, "LinkedDeviceTargetCredentialRegistrationResultV1.targetPreparationDigestB64u");
927
- const targetFactor = parseVerifiedTargetFactorV1(record.targetFactor, "LinkedDeviceTargetCredentialRegistrationResultV1.targetFactor");
928
- if (targetFactor.authMethod.walletAuthMethodId !== walletAuthMethodId || targetFactor.authMethod.walletId !== walletId) throw new Error("LinkedDeviceTargetCredentialRegistrationResultV1 target identity differs");
929
- const ordinarySignerMaterialPreparations = parseOrdinarySignerMaterialPreparationsV1(record.ordinarySignerMaterialPreparations);
930
- const ordinarySignerMaterialRecipientRequests = parseOrdinarySignerMaterialRecipientRequestsV1(record.ordinarySignerMaterialRecipientRequests);
931
- return {
932
- kind: "linked_device_target_credential_registration_result_v1",
933
- outcome: record.outcome,
934
- linkSessionId,
557
+ function emailOtpTargetCredentialRegistrationV1() {
558
+ return wireObject({
559
+ ...targetCredentialRegistrationIdentity(),
560
+ targetFactor: emailOtpTargetFactorV1(),
561
+ targetEmail: parseTargetEmail,
562
+ targetPreparationDigestB64u: digest,
563
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
564
+ emailOtpVerificationGrant: parseLinkedDeviceEmailOtpVerificationGrantV1,
565
+ registeredAtMs: parseUnixTime
566
+ });
567
+ }
568
+ function newEmailOtpTargetCredentialRegistrationV1() {
569
+ return wireObject({
570
+ ...targetCredentialRegistrationIdentity(),
571
+ targetFactor: emailOtpTargetFactorV1(),
572
+ targetEmail: parseTargetEmail,
573
+ targetPreparationDigestB64u: digest,
574
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
575
+ emailOtpVerificationGrant: parseLinkedDeviceEmailOtpVerificationGrantV1,
576
+ emailOtpEnrollment: emailOtpEnrollmentMaterialV1(),
577
+ registeredAtMs: parseUnixTime
578
+ });
579
+ }
580
+ function parseLinkedDeviceTargetCredentialRegistrationV1(raw) {
581
+ const label = "LinkedDeviceTargetCredentialRegistrationV1";
582
+ const record = requireRecord(raw, label);
583
+ if (parseTargetFactor(record.targetFactor, `${label}.targetFactor`).kind === "passkey_prf") return passkeyTargetCredentialRegistrationV1()(record, label);
584
+ return (parseLinkedDeviceEmailOtpVerificationGrantV1(record.emailOtpVerificationGrant).enrollment.kind === "new_enrollment" ? newEmailOtpTargetCredentialRegistrationV1() : emailOtpTargetCredentialRegistrationV1())(record, label);
585
+ }
586
+ function targetCredentialRegistrationResultV1() {
587
+ return wireObject({
588
+ kind: wireLiteral("linked_device_target_credential_registration_result_v1"),
589
+ outcome: wireLiteral("applied", "replayed"),
590
+ linkSessionId: sessionId,
935
591
  walletId,
936
592
  enrollmentId,
937
- deviceId,
593
+ deviceId: linkedDeviceId,
938
594
  walletAuthMethodId,
939
- targetPreparationDigestB64u,
940
- targetFactor,
941
- ordinarySignerMaterialPreparations,
942
- ordinarySignerMaterialRecipientRequests,
943
- keyManifestDigestB64u: parseDigest(record.keyManifestDigestB64u, "LinkedDeviceTargetCredentialRegistrationResultV1.keyManifestDigestB64u")
944
- };
595
+ targetPreparationDigestB64u: digest,
596
+ targetFactor: parseVerifiedTargetFactorV1,
597
+ ordinarySignerMaterialPreparations: parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1,
598
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
599
+ keyManifestDigestB64u: digest
600
+ }, (result, label) => {
601
+ const { authMethod } = result.targetFactor;
602
+ if (authMethod.walletAuthMethodId !== result.walletAuthMethodId || authMethod.walletId !== result.walletId) throw new Error(`${label} target identity differs`);
603
+ });
604
+ }
605
+ function parseLinkedDeviceTargetCredentialRegistrationResultV1(raw) {
606
+ return targetCredentialRegistrationResultV1()(raw, "LinkedDeviceTargetCredentialRegistrationResultV1");
607
+ }
608
+ function verifiedAfterCreation(target, label) {
609
+ if (target.verifiedAtMs < target.authMethod.createdAtMs) throw new Error(`${label}.verifiedAtMs precedes authMethod.createdAtMs`);
610
+ }
611
+ function verifiedPasskeyTargetV1() {
612
+ return wireObject({
613
+ kind: wireLiteral("verified_passkey_target_v1"),
614
+ authMethod: parsePasskeyWalletAuthMethodDraftV1,
615
+ verificationDigestB64u: digest,
616
+ verifiedAtMs: parseUnixTime
617
+ }, verifiedAfterCreation);
618
+ }
619
+ function verifiedEmailOtpTargetV1() {
620
+ return wireObject({
621
+ kind: wireLiteral("verified_email_otp_target_v1"),
622
+ authMethod: parseEmailOtpWalletAuthMethodDraftV1,
623
+ targetEmail: parseTargetEmail,
624
+ enrollment: existingEnrollmentV1(),
625
+ baseWalletAuthMethodId: walletAuthMethodId,
626
+ providerUserId: parseNonEmptyToken,
627
+ verificationDigestB64u: digest,
628
+ verifiedAtMs: parseUnixTime
629
+ }, verifiedAfterCreation);
630
+ }
631
+ function verifiedNewEmailOtpTargetV1() {
632
+ return wireObject({
633
+ kind: wireLiteral("verified_email_otp_target_v1"),
634
+ authMethod: parseEmailOtpWalletAuthMethodDraftV1,
635
+ targetEmail: parseTargetEmail,
636
+ enrollment: newEnrollmentV1(),
637
+ providerUserId: parseNonEmptyToken,
638
+ verificationDigestB64u: digest,
639
+ verifiedAtMs: parseUnixTime
640
+ }, verifiedAfterCreation);
945
641
  }
946
642
  function parseVerifiedTargetFactorV1(raw, label) {
947
643
  const record = requireRecord(raw, label);
948
- if (record.kind === "verified_passkey_target_v1") {
949
- exactRecord(record, [
950
- "kind",
951
- "authMethod",
952
- "verificationDigestB64u",
953
- "verifiedAtMs"
954
- ], label);
955
- const authMethod = parsePasskeyWalletAuthMethodDraftV1(record.authMethod, `${label}.authMethod`);
956
- const verifiedAtMs = parseUnixTime(record.verifiedAtMs, `${label}.verifiedAtMs`);
957
- if (verifiedAtMs < authMethod.createdAtMs) throw new Error(`${label}.verifiedAtMs precedes authMethod.createdAtMs`);
958
- return {
959
- kind: "verified_passkey_target_v1",
960
- authMethod,
961
- verificationDigestB64u: parseDigest(record.verificationDigestB64u, `${label}.verificationDigestB64u`),
962
- verifiedAtMs
963
- };
964
- }
965
- if (record.kind === "verified_email_otp_target_v1") {
966
- const enrollment = parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`);
967
- const exact = exactRecord(record, enrollment.kind === "existing_enrollment" ? [
968
- "kind",
969
- "authMethod",
970
- "targetEmail",
971
- "enrollment",
972
- "baseWalletAuthMethodId",
973
- "providerUserId",
974
- "verificationDigestB64u",
975
- "verifiedAtMs"
976
- ] : [
977
- "kind",
978
- "authMethod",
979
- "targetEmail",
980
- "enrollment",
981
- "providerUserId",
982
- "verificationDigestB64u",
983
- "verifiedAtMs"
984
- ], label);
985
- const authMethod = parseEmailOtpWalletAuthMethodDraftV1(record.authMethod, `${label}.authMethod`);
986
- const verifiedAtMs = parseUnixTime(record.verifiedAtMs, `${label}.verifiedAtMs`);
987
- if (verifiedAtMs < authMethod.createdAtMs) throw new Error(`${label}.verifiedAtMs precedes authMethod.createdAtMs`);
988
- const targetEmail = parseTargetEmail(record.targetEmail, `${label}.targetEmail`);
989
- const providerUserId = parseNonEmptyToken(record.providerUserId, `${label}.providerUserId`);
990
- const verificationDigestB64u = parseDigest(record.verificationDigestB64u, `${label}.verificationDigestB64u`);
991
- if (enrollment.kind === "existing_enrollment") return {
992
- kind: "verified_email_otp_target_v1",
993
- authMethod,
994
- targetEmail,
995
- enrollment,
996
- baseWalletAuthMethodId: parseId(parseWalletAuthMethodId, exact.baseWalletAuthMethodId, `${label}.baseWalletAuthMethodId`),
997
- providerUserId,
998
- verificationDigestB64u,
999
- verifiedAtMs
1000
- };
1001
- return {
1002
- kind: "verified_email_otp_target_v1",
1003
- authMethod,
1004
- targetEmail,
1005
- enrollment,
1006
- providerUserId,
1007
- verificationDigestB64u,
1008
- verifiedAtMs
1009
- };
1010
- }
1011
- throw new Error(`${label}.kind is invalid`);
644
+ if (record.kind === "verified_passkey_target_v1") return verifiedPasskeyTargetV1()(record, label);
645
+ if (record.kind !== "verified_email_otp_target_v1") throw new Error(`${label}.kind is invalid`);
646
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "existing_enrollment" ? verifiedEmailOtpTargetV1() : verifiedNewEmailOtpTargetV1())(record, label);
647
+ }
648
+ function passkeyWalletAuthMethodDraftV1() {
649
+ return wireObject({
650
+ walletAuthMethodId,
651
+ walletId,
652
+ createdAtMs: parseUnixTime,
653
+ kind: wireLiteral("passkey"),
654
+ rpId,
655
+ credentialIdB64u: credentialId,
656
+ credentialPublicKeyB64u: parseCanonicalBase64UrlBytes,
657
+ counter: parseNonNegativeSafeInteger
658
+ });
1012
659
  }
1013
660
  function parsePasskeyWalletAuthMethodDraftV1(raw, label) {
1014
- const record = exactRecord(raw, [
1015
- "walletAuthMethodId",
1016
- "walletId",
1017
- "createdAtMs",
1018
- "kind",
1019
- "rpId",
1020
- "credentialIdB64u",
1021
- "credentialPublicKeyB64u",
1022
- "counter"
1023
- ], label);
1024
- if (record.kind !== "passkey") throw new Error(`${label}.kind is invalid`);
1025
- return {
1026
- walletAuthMethodId: parseId(parseWalletAuthMethodId, record.walletAuthMethodId, `${label}.walletAuthMethodId`),
1027
- walletId: parseWallet(record.walletId, `${label}.walletId`),
1028
- createdAtMs: parseUnixTime(record.createdAtMs, `${label}.createdAtMs`),
1029
- kind: "passkey",
1030
- rpId: parseId(parseWebAuthnRpId, record.rpId, `${label}.rpId`),
1031
- credentialIdB64u: parseId(parseWebAuthnCredentialIdB64u, record.credentialIdB64u, `${label}.credentialIdB64u`),
1032
- credentialPublicKeyB64u: parseCanonicalBase64UrlBytes(record.credentialPublicKeyB64u, `${label}.credentialPublicKeyB64u`),
1033
- counter: parseNonNegativeInteger(record.counter, `${label}.counter`)
1034
- };
661
+ return passkeyWalletAuthMethodDraftV1()(raw, label);
662
+ }
663
+ function emailOtpWalletAuthMethodDraftV1() {
664
+ return wireObject({
665
+ walletAuthMethodId,
666
+ walletId,
667
+ createdAtMs: parseUnixTime,
668
+ kind: wireLiteral("email_otp"),
669
+ emailHashHex: parseEmailHashHex,
670
+ registrationAuthorityId: parseNonEmptyToken
671
+ });
1035
672
  }
1036
673
  function parseEmailOtpWalletAuthMethodDraftV1(raw, label) {
1037
- const record = exactRecord(raw, [
1038
- "walletAuthMethodId",
1039
- "walletId",
1040
- "createdAtMs",
1041
- "kind",
1042
- "emailHashHex",
1043
- "registrationAuthorityId"
1044
- ], label);
1045
- if (record.kind !== "email_otp") throw new Error(`${label}.kind is invalid`);
674
+ return emailOtpWalletAuthMethodDraftV1()(raw, label);
675
+ }
676
+ function emailOtpVerificationGrantFields(enrollment) {
1046
677
  return {
1047
- walletAuthMethodId: parseId(parseWalletAuthMethodId, record.walletAuthMethodId, `${label}.walletAuthMethodId`),
1048
- walletId: parseWallet(record.walletId, `${label}.walletId`),
1049
- createdAtMs: parseUnixTime(record.createdAtMs, `${label}.createdAtMs`),
1050
- kind: "email_otp",
1051
- emailHashHex: parseEmailHashHex(record.emailHashHex, `${label}.emailHashHex`),
1052
- registrationAuthorityId: parseNonEmptyToken(record.registrationAuthorityId, `${label}.registrationAuthorityId`)
678
+ kind: wireLiteral("linked_device_email_otp_verification_grant_v1"),
679
+ grantId: parseNonEmptyToken,
680
+ grantToken: parseNonEmptyToken,
681
+ challengeId: parseNonEmptyToken,
682
+ linkSessionId: sessionId,
683
+ walletId,
684
+ enrollmentId,
685
+ deviceId: linkedDeviceId,
686
+ targetPreparationDigestB64u: digest,
687
+ targetEmail: parseTargetEmail,
688
+ enrollment,
689
+ emailHashHex: parseEmailHashHex,
690
+ registrationAuthorityId: parseNonEmptyToken,
691
+ providerUserId: parseNonEmptyToken,
692
+ authorityDigestB64u: digest,
693
+ issuedAtMs: parseUnixTime,
694
+ expiresAtMs: parseUnixTime
1053
695
  };
1054
696
  }
697
+ function grantIssuedBeforeExpiry(grant, label) {
698
+ assertExpiryAfterIssued(grant.issuedAtMs, grant.expiresAtMs, label);
699
+ }
700
+ function emailOtpVerificationGrantV1() {
701
+ return wireObject({
702
+ ...emailOtpVerificationGrantFields(existingEnrollmentV1()),
703
+ baseWalletAuthMethodId: walletAuthMethodId
704
+ }, grantIssuedBeforeExpiry);
705
+ }
706
+ function newEnrollmentEmailOtpVerificationGrantV1() {
707
+ return wireObject(emailOtpVerificationGrantFields(newEnrollmentV1()), grantIssuedBeforeExpiry);
708
+ }
1055
709
  function parseLinkedDeviceEmailOtpVerificationGrantV1(raw) {
1056
- const candidate = requireRecord(raw, "LinkedDeviceEmailOtpVerificationGrantV1");
1057
- const enrollment = parseEmailOtpEnrollmentSelection(candidate.enrollment, "LinkedDeviceEmailOtpVerificationGrantV1.enrollment");
1058
- const record = exactRecord(candidate, enrollment.kind === "new_enrollment" ? EMAIL_OTP_VERIFICATION_GRANT_BASE_FIELDS : EMAIL_OTP_VERIFICATION_GRANT_FIELDS, "LinkedDeviceEmailOtpVerificationGrantV1");
1059
- if (record.kind !== "linked_device_email_otp_verification_grant_v1") throw new Error("LinkedDeviceEmailOtpVerificationGrantV1.kind is invalid");
1060
- const issuedAtMs = parseUnixTime(record.issuedAtMs, "LinkedDeviceEmailOtpVerificationGrantV1.issuedAtMs");
1061
- const expiresAtMs = parseUnixTime(record.expiresAtMs, "LinkedDeviceEmailOtpVerificationGrantV1.expiresAtMs");
1062
- assertExpiryAfterIssued(issuedAtMs, expiresAtMs, "LinkedDeviceEmailOtpVerificationGrantV1");
1063
- const base = {
1064
- kind: "linked_device_email_otp_verification_grant_v1",
1065
- grantId: parseNonEmptyToken(record.grantId, "LinkedDeviceEmailOtpVerificationGrantV1.grantId"),
1066
- grantToken: parseNonEmptyToken(record.grantToken, "LinkedDeviceEmailOtpVerificationGrantV1.grantToken"),
1067
- challengeId: parseNonEmptyToken(record.challengeId, "LinkedDeviceEmailOtpVerificationGrantV1.challengeId"),
1068
- linkSessionId: parseId(parseLinkDeviceSessionId, record.linkSessionId, "LinkedDeviceEmailOtpVerificationGrantV1.linkSessionId"),
1069
- walletId: parseId(parseWalletId, record.walletId, "LinkedDeviceEmailOtpVerificationGrantV1.walletId"),
1070
- enrollmentId: parseId(parseLinkedDeviceEnrollmentId, record.enrollmentId, "LinkedDeviceEmailOtpVerificationGrantV1.enrollmentId"),
1071
- deviceId: parseId(parseLinkedDeviceId, record.deviceId, "LinkedDeviceEmailOtpVerificationGrantV1.deviceId"),
1072
- targetPreparationDigestB64u: parseDigest(record.targetPreparationDigestB64u, "LinkedDeviceEmailOtpVerificationGrantV1.targetPreparationDigestB64u"),
1073
- targetEmail: parseTargetEmail(record.targetEmail, "LinkedDeviceEmailOtpVerificationGrantV1.targetEmail"),
1074
- enrollment,
1075
- emailHashHex: parseEmailHashHex(record.emailHashHex, "LinkedDeviceEmailOtpVerificationGrantV1.emailHashHex"),
1076
- registrationAuthorityId: parseNonEmptyToken(record.registrationAuthorityId, "LinkedDeviceEmailOtpVerificationGrantV1.registrationAuthorityId"),
1077
- providerUserId: parseNonEmptyToken(record.providerUserId, "LinkedDeviceEmailOtpVerificationGrantV1.providerUserId"),
1078
- authorityDigestB64u: parseDigest(record.authorityDigestB64u, "LinkedDeviceEmailOtpVerificationGrantV1.authorityDigestB64u"),
1079
- issuedAtMs,
1080
- expiresAtMs
1081
- };
1082
- if (enrollment.kind === "new_enrollment") return {
1083
- ...base,
1084
- enrollment: { kind: "new_enrollment" }
1085
- };
1086
- return {
1087
- ...base,
1088
- enrollment: { kind: "existing_enrollment" },
1089
- baseWalletAuthMethodId: parseId(parseWalletAuthMethodId, record.baseWalletAuthMethodId, "LinkedDeviceEmailOtpVerificationGrantV1.baseWalletAuthMethodId")
1090
- };
710
+ const label = "LinkedDeviceEmailOtpVerificationGrantV1";
711
+ const record = requireRecord(raw, label);
712
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "new_enrollment" ? newEnrollmentEmailOtpVerificationGrantV1() : emailOtpVerificationGrantV1())(record, label);
713
+ }
714
+ function emailOtpFactorReleaseEnvelopeV1() {
715
+ return wireObject({
716
+ kind: wireLiteral("email_otp_factor_release_v1"),
717
+ challengeId: parseNonEmptyToken,
718
+ enrollmentId: parseNonEmptyToken,
719
+ enrollmentSealKeyVersion: parseNonEmptyToken,
720
+ serverEphemeralPublicKey65B64u: parseUncompressedP256PointB64u,
721
+ nonce12B64u: (raw, label) => parseCanonicalFixedBase64UrlBytes(raw, 12, label),
722
+ ciphertextB64u: parseCanonicalBase64UrlBytes
723
+ });
1091
724
  }
1092
725
  function parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1(raw) {
1093
- const record = exactRecord(raw, EMAIL_OTP_FACTOR_RELEASE_FIELDS, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1");
1094
- if (record.kind !== "email_otp_factor_release_v1") throw new Error("LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.kind is invalid");
1095
- return {
1096
- kind: "email_otp_factor_release_v1",
1097
- challengeId: parseNonEmptyToken(record.challengeId, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.challengeId"),
1098
- enrollmentId: parseNonEmptyToken(record.enrollmentId, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.enrollmentId"),
1099
- enrollmentSealKeyVersion: parseNonEmptyToken(record.enrollmentSealKeyVersion, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.enrollmentSealKeyVersion"),
1100
- serverEphemeralPublicKey65B64u: parseUncompressedP256PointB64u(record.serverEphemeralPublicKey65B64u, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.serverEphemeralPublicKey65B64u"),
1101
- nonce12B64u: parseCanonicalFixedBase64UrlBytes(record.nonce12B64u, 12, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.nonce12B64u"),
1102
- ciphertextB64u: parseCanonicalBase64UrlBytes(record.ciphertextB64u, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1.ciphertextB64u")
1103
- };
726
+ return emailOtpFactorReleaseEnvelopeV1()(raw, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1");
727
+ }
728
+ function emailOtpChallengeStartRequestV1() {
729
+ return wireObject({
730
+ kind: wireLiteral("linked_device_email_otp_challenge_start_request_v1"),
731
+ linkSessionId: sessionId,
732
+ workerEphemeralPublicKey65B64u: parseUncompressedP256PointB64u
733
+ });
1104
734
  }
1105
735
  function parseLinkedDeviceEmailOtpChallengeStartRequestV1(raw) {
1106
- const record = exactRecord(raw, [
1107
- "kind",
1108
- "linkSessionId",
1109
- "workerEphemeralPublicKey65B64u"
1110
- ], "LinkedDeviceEmailOtpChallengeStartRequestV1");
1111
- if (record.kind !== "linked_device_email_otp_challenge_start_request_v1") throw new Error("LinkedDeviceEmailOtpChallengeStartRequestV1.kind is invalid");
1112
- return {
1113
- kind: "linked_device_email_otp_challenge_start_request_v1",
1114
- linkSessionId: parseId(parseLinkDeviceSessionId, record.linkSessionId, "LinkedDeviceEmailOtpChallengeStartRequestV1.linkSessionId"),
1115
- workerEphemeralPublicKey65B64u: parseUncompressedP256PointB64u(record.workerEphemeralPublicKey65B64u, "LinkedDeviceEmailOtpChallengeStartRequestV1.workerEphemeralPublicKey65B64u")
1116
- };
736
+ return emailOtpChallengeStartRequestV1()(raw, "LinkedDeviceEmailOtpChallengeStartRequestV1");
737
+ }
738
+ function emailOtpChallengeResendRequestV1() {
739
+ return wireObject({
740
+ kind: wireLiteral("linked_device_email_otp_challenge_resend_request_v1"),
741
+ linkSessionId: sessionId,
742
+ challengeId: parseNonEmptyToken
743
+ });
1117
744
  }
1118
745
  function parseLinkedDeviceEmailOtpChallengeResendRequestV1(raw) {
1119
- const record = exactRecord(raw, [
1120
- "kind",
1121
- "linkSessionId",
1122
- "challengeId"
1123
- ], "LinkedDeviceEmailOtpChallengeResendRequestV1");
1124
- if (record.kind !== "linked_device_email_otp_challenge_resend_request_v1") throw new Error("LinkedDeviceEmailOtpChallengeResendRequestV1.kind is invalid");
1125
- return {
1126
- kind: "linked_device_email_otp_challenge_resend_request_v1",
1127
- linkSessionId: parseId(parseLinkDeviceSessionId, record.linkSessionId, "LinkedDeviceEmailOtpChallengeResendRequestV1.linkSessionId"),
1128
- challengeId: parseNonEmptyToken(record.challengeId, "LinkedDeviceEmailOtpChallengeResendRequestV1.challengeId")
1129
- };
746
+ return emailOtpChallengeResendRequestV1()(raw, "LinkedDeviceEmailOtpChallengeResendRequestV1");
747
+ }
748
+ function emailOtpChallengeVerifyRequestV1() {
749
+ return wireObject({
750
+ kind: wireLiteral("linked_device_email_otp_challenge_verify_request_v1"),
751
+ linkSessionId: sessionId,
752
+ challengeId: parseNonEmptyToken,
753
+ otpCode: (raw, label) => {
754
+ if (typeof raw !== "string" || !/^[0-9]{6,10}$/.test(raw)) throw new Error(`${label} is invalid`);
755
+ return raw;
756
+ }
757
+ });
1130
758
  }
1131
759
  function parseLinkedDeviceEmailOtpChallengeVerifyRequestV1(raw) {
1132
- const record = exactRecord(raw, [
1133
- "kind",
1134
- "linkSessionId",
1135
- "challengeId",
1136
- "otpCode"
1137
- ], "LinkedDeviceEmailOtpChallengeVerifyRequestV1");
1138
- if (record.kind !== "linked_device_email_otp_challenge_verify_request_v1") throw new Error("LinkedDeviceEmailOtpChallengeVerifyRequestV1.kind is invalid");
1139
- if (typeof record.otpCode !== "string" || !/^[0-9]{6,10}$/.test(record.otpCode)) throw new Error("LinkedDeviceEmailOtpChallengeVerifyRequestV1.otpCode is invalid");
1140
- return {
1141
- kind: "linked_device_email_otp_challenge_verify_request_v1",
1142
- linkSessionId: parseId(parseLinkDeviceSessionId, record.linkSessionId, "LinkedDeviceEmailOtpChallengeVerifyRequestV1.linkSessionId"),
1143
- challengeId: parseNonEmptyToken(record.challengeId, "LinkedDeviceEmailOtpChallengeVerifyRequestV1.challengeId"),
1144
- otpCode: record.otpCode
1145
- };
760
+ return emailOtpChallengeVerifyRequestV1()(raw, "LinkedDeviceEmailOtpChallengeVerifyRequestV1");
761
+ }
762
+ function emailOtpChallengeResultV1() {
763
+ return wireObject({
764
+ kind: wireLiteral("linked_device_email_otp_challenge_result_v1"),
765
+ challengeId: parseNonEmptyToken,
766
+ maskedEmailHint: parseNonEmptyToken,
767
+ expiresAtMs: parseUnixTime,
768
+ resendAvailableAtMs: parseUnixTime
769
+ });
1146
770
  }
1147
771
  function parseLinkedDeviceEmailOtpChallengeResultV1(raw) {
1148
- const record = exactRecord(raw, [
1149
- "kind",
1150
- "challengeId",
1151
- "maskedEmailHint",
1152
- "expiresAtMs",
1153
- "resendAvailableAtMs"
1154
- ], "LinkedDeviceEmailOtpChallengeResultV1");
1155
- if (record.kind !== "linked_device_email_otp_challenge_result_v1") throw new Error("LinkedDeviceEmailOtpChallengeResultV1.kind is invalid");
1156
- const expiresAtMs = parseUnixTime(record.expiresAtMs, "LinkedDeviceEmailOtpChallengeResultV1.expiresAtMs");
1157
- const resendAvailableAtMs = parseUnixTime(record.resendAvailableAtMs, "LinkedDeviceEmailOtpChallengeResultV1.resendAvailableAtMs");
1158
- return {
1159
- kind: "linked_device_email_otp_challenge_result_v1",
1160
- challengeId: parseNonEmptyToken(record.challengeId, "LinkedDeviceEmailOtpChallengeResultV1.challengeId"),
1161
- maskedEmailHint: parseNonEmptyToken(record.maskedEmailHint, "LinkedDeviceEmailOtpChallengeResultV1.maskedEmailHint"),
1162
- expiresAtMs,
1163
- resendAvailableAtMs
1164
- };
772
+ return emailOtpChallengeResultV1()(raw, "LinkedDeviceEmailOtpChallengeResultV1");
1165
773
  }
1166
774
  function parseLinkedDeviceEmailOtpVerificationResultV1(raw) {
1167
775
  const record = exactRecord(raw, [
@@ -1190,57 +798,35 @@ function parseLinkedDeviceEmailOtpVerificationResultV1(raw) {
1190
798
  function isNewEnrollmentEmailOtpVerificationGrantV1(grant) {
1191
799
  return grant.enrollment.kind === "new_enrollment";
1192
800
  }
1193
- function parseCancelUnclaimedRequest(raw) {
1194
- const record = exactRecord(raw, [
1195
- "kind",
1196
- "linkSessionId",
1197
- "reason",
1198
- "requestedAtMs"
1199
- ], "LinkedDeviceSessionCancelUnclaimedRequestV1");
1200
- if (record.kind !== "linked_device_session_cancel_unclaimed_request_v1" || record.reason !== "user_cancelled") throw new Error("LinkedDeviceSessionCancelUnclaimedRequestV1 is invalid");
1201
- return {
1202
- kind: "linked_device_session_cancel_unclaimed_request_v1",
1203
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceSessionCancelUnclaimedRequestV1.linkSessionId"),
1204
- reason: "user_cancelled",
1205
- requestedAtMs: parseUnixTime(record.requestedAtMs, "LinkedDeviceSessionCancelUnclaimedRequestV1.requestedAtMs")
1206
- };
801
+ function cancelUnclaimedRequestV1() {
802
+ return wireObject({
803
+ kind: wireLiteral("linked_device_session_cancel_unclaimed_request_v1"),
804
+ linkSessionId: sessionId,
805
+ reason: (raw) => {
806
+ if (raw !== "user_cancelled") throw new Error("LinkedDeviceSessionCancelUnclaimedRequestV1 is invalid");
807
+ return raw;
808
+ },
809
+ requestedAtMs: parseUnixTime
810
+ });
1207
811
  }
1208
- function parseCancelClaimedRequest(raw) {
1209
- const record = exactRecord(raw, [
1210
- "kind",
1211
- "linkSessionId",
1212
- "enrollmentId",
1213
- "deviceId",
1214
- "reason",
1215
- "requestedAtMs"
1216
- ], "LinkedDeviceSessionCancelClaimedRequestV1");
1217
- if (record.kind !== "linked_device_session_cancel_claimed_request_v1") throw new Error("LinkedDeviceSessionCancelClaimedRequestV1.kind is invalid");
1218
- if (record.reason !== "user_cancelled" && record.reason !== "expired" && record.reason !== "revoked") throw new Error("LinkedDeviceSessionCancelClaimedRequestV1.reason is unsupported");
1219
- return {
1220
- kind: "linked_device_session_cancel_claimed_request_v1",
1221
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceSessionCancelClaimedRequestV1.linkSessionId"),
1222
- enrollmentId: parseEnrollmentId(record.enrollmentId, "LinkedDeviceSessionCancelClaimedRequestV1.enrollmentId"),
1223
- deviceId: parseDeviceId(record.deviceId, "LinkedDeviceSessionCancelClaimedRequestV1.deviceId"),
1224
- reason: record.reason,
1225
- requestedAtMs: parseUnixTime(record.requestedAtMs, "LinkedDeviceSessionCancelClaimedRequestV1.requestedAtMs")
1226
- };
812
+ function cancelClaimedRequestV1() {
813
+ return wireObject({
814
+ kind: wireLiteral("linked_device_session_cancel_claimed_request_v1"),
815
+ linkSessionId: sessionId,
816
+ enrollmentId,
817
+ deviceId: linkedDeviceId,
818
+ reason: supportedLiteral("user_cancelled", "expired", "revoked"),
819
+ requestedAtMs: parseUnixTime
820
+ });
1227
821
  }
1228
- function parseRetryRequest(raw) {
1229
- const record = exactRecord(raw, [
1230
- "kind",
1231
- "linkSessionId",
1232
- "enrollmentId",
1233
- "deviceId",
1234
- "requestedAtMs"
1235
- ], "LinkedDeviceSessionRetryCommittedDeliveryRequestV1");
1236
- if (record.kind !== "linked_device_session_retry_committed_delivery_request_v1") throw new Error("LinkedDeviceSessionRetryCommittedDeliveryRequestV1.kind is invalid");
1237
- return {
1238
- kind: "linked_device_session_retry_committed_delivery_request_v1",
1239
- linkSessionId: parseSessionId(record.linkSessionId, "LinkedDeviceSessionRetryCommittedDeliveryRequestV1.linkSessionId"),
1240
- enrollmentId: parseEnrollmentId(record.enrollmentId, "LinkedDeviceSessionRetryCommittedDeliveryRequestV1.enrollmentId"),
1241
- deviceId: parseDeviceId(record.deviceId, "LinkedDeviceSessionRetryCommittedDeliveryRequestV1.deviceId"),
1242
- requestedAtMs: parseUnixTime(record.requestedAtMs, "LinkedDeviceSessionRetryCommittedDeliveryRequestV1.requestedAtMs")
1243
- };
822
+ function retryCommittedDeliveryRequestV1() {
823
+ return wireObject({
824
+ kind: wireLiteral("linked_device_session_retry_committed_delivery_request_v1"),
825
+ linkSessionId: sessionId,
826
+ enrollmentId,
827
+ deviceId: linkedDeviceId,
828
+ requestedAtMs: parseUnixTime
829
+ });
1244
830
  }
1245
831
  function parseLinkedDeviceSessionTransportRequestV1(raw) {
1246
832
  const record = requireRecord(raw, "LinkedDeviceSessionTransportRequestV1");
@@ -1248,9 +834,9 @@ function parseLinkedDeviceSessionTransportRequestV1(raw) {
1248
834
  case "linked_device_session_claim_request_v1": return parseLinkedDeviceSessionClaimRequestV1(record);
1249
835
  case "linked_device_approval_v1": return parseLinkedDeviceApprovalV1(record);
1250
836
  case "linked_device_target_credential_registration_v1": return parseLinkedDeviceTargetCredentialRegistrationV1(record);
1251
- case "linked_device_session_cancel_unclaimed_request_v1": return parseCancelUnclaimedRequest(record);
1252
- case "linked_device_session_cancel_claimed_request_v1": return parseCancelClaimedRequest(record);
1253
- case "linked_device_session_retry_committed_delivery_request_v1": return parseRetryRequest(record);
837
+ case "linked_device_session_cancel_unclaimed_request_v1": return cancelUnclaimedRequestV1()(record, "LinkedDeviceSessionCancelUnclaimedRequestV1");
838
+ case "linked_device_session_cancel_claimed_request_v1": return cancelClaimedRequestV1()(record, "LinkedDeviceSessionCancelClaimedRequestV1");
839
+ case "linked_device_session_retry_committed_delivery_request_v1": return retryCommittedDeliveryRequestV1()(record, "LinkedDeviceSessionRetryCommittedDeliveryRequestV1");
1254
840
  default: throw new Error("LinkedDeviceSessionTransportRequestV1.kind is unsupported");
1255
841
  }
1256
842
  }
@@ -1267,146 +853,7 @@ function buildLinkedDeviceTargetPreparationV1(args) {
1267
853
  ...args
1268
854
  });
1269
855
  }
1270
- const LOCAL_AUTHORITY_INSTALLATION_RECEIPT_FIELDS = [
1271
- "kind",
1272
- "authorityId",
1273
- "walletId",
1274
- "authMethodId",
1275
- "deviceId",
1276
- "packageSetDigestB64u",
1277
- "installedActivationRefs",
1278
- "installedRecordSetDigestB64u",
1279
- "targetFactorVerificationDigestB64u",
1280
- "installedAtMs"
1281
- ];
1282
- function parseLocalAuthorityInstallationReceiptV1(raw) {
1283
- const record = exactRecord(raw, LOCAL_AUTHORITY_INSTALLATION_RECEIPT_FIELDS, "LocalAuthorityInstallationReceiptV1");
1284
- if (record.kind !== "local_authority_installation_receipt_v1") throw new Error("LocalAuthorityInstallationReceiptV1.kind is invalid");
1285
- const installedActivationResult = parseWalletSignerActivationSetV1(record.installedActivationRefs);
1286
- if (!installedActivationResult.ok) throw new Error(`LocalAuthorityInstallationReceiptV1.installedActivationRefs ${installedActivationResult.error}`);
1287
- return {
1288
- kind: "local_authority_installation_receipt_v1",
1289
- authorityId: parseId(parseWalletAuthorityId, record.authorityId, "authorityId"),
1290
- walletId: parseId(parseWalletId, record.walletId, "walletId"),
1291
- authMethodId: parseId(parseWalletAuthMethodId, record.authMethodId, "authMethodId"),
1292
- deviceId: parseId(parseDeviceId$1, record.deviceId, "deviceId"),
1293
- packageSetDigestB64u: parseDigest(record.packageSetDigestB64u, "packageSetDigestB64u"),
1294
- installedActivationRefs: installedActivationResult.value,
1295
- installedRecordSetDigestB64u: parseDigest(record.installedRecordSetDigestB64u, "installedRecordSetDigestB64u"),
1296
- targetFactorVerificationDigestB64u: parseDigest(record.targetFactorVerificationDigestB64u, "targetFactorVerificationDigestB64u"),
1297
- installedAtMs: parseUnixTime(record.installedAtMs, "installedAtMs")
1298
- };
1299
- }
1300
- const ACTIVE_WALLET_SESSION_FIELDS = [
1301
- "kind",
1302
- "walletId",
1303
- "authorityId",
1304
- "authMethodId",
1305
- "authorizationId",
1306
- "quotaId",
1307
- "authorityDigestB64u",
1308
- "authorityRevocationEpoch",
1309
- "capabilitySubjects",
1310
- "issuedAtMs",
1311
- "expiresAtMs"
1312
- ];
1313
- const WALLET_SESSION_OPERATION_CREDENTIAL_FIELDS = [
1314
- "kind",
1315
- "token",
1316
- "walletSessionId"
1317
- ];
1318
- function parseWalletSessionOperationCredentialV1(raw) {
1319
- const record = exactRecord(raw, WALLET_SESSION_OPERATION_CREDENTIAL_FIELDS, "WalletSessionOperationCredentialV1");
1320
- if (typeof record.token !== "string" || record.token.length > 8192) throw new Error("WalletSessionOperationCredentialV1.token is invalid");
1321
- if (record.kind === "opaque_wallet_session_operation_credential_v1") {
1322
- if (!/^wst_[A-Za-z0-9_-]{43}$/.test(record.token)) throw new Error("WalletSessionOperationCredentialV1 opaque token is invalid");
1323
- return {
1324
- kind: record.kind,
1325
- token: record.token,
1326
- walletSessionId: parseId(parseWalletSessionId, record.walletSessionId, "walletSessionId")
1327
- };
1328
- }
1329
- throw new Error("WalletSessionOperationCredentialV1.kind is invalid");
1330
- }
1331
- function parseActiveWalletSessionV1(raw) {
1332
- const record = exactRecord(raw, ACTIVE_WALLET_SESSION_FIELDS, "ActiveWalletSessionV1");
1333
- if (record.kind !== "active_wallet_session_v1") throw new Error("ActiveWalletSessionV1.kind is invalid");
1334
- if (!Array.isArray(record.capabilitySubjects) || record.capabilitySubjects.length === 0) throw new Error("ActiveWalletSessionV1.capabilitySubjects must be non-empty");
1335
- const capabilitySubjects = [];
1336
- const subjectKeys = /* @__PURE__ */ new Set();
1337
- for (const [index, rawSubject] of record.capabilitySubjects.entries()) {
1338
- const subject = parseWalletCapabilitySubjectV1(rawSubject, `capabilitySubjects[${index}]`);
1339
- const key = subject.kind === "sign" || subject.kind === "export_keys" ? `${subject.kind}:${subject.keyFamily}:${subject.materialActivation.activationId}` : subject.kind;
1340
- if (subjectKeys.has(key)) throw new Error("ActiveWalletSessionV1 capability subjects repeat");
1341
- subjectKeys.add(key);
1342
- capabilitySubjects.push(subject);
1343
- }
1344
- const first = capabilitySubjects[0];
1345
- if (!first) throw new Error("ActiveWalletSessionV1.capabilitySubjects must be non-empty");
1346
- return {
1347
- kind: "active_wallet_session_v1",
1348
- walletId: parseId(parseWalletId, record.walletId, "walletId"),
1349
- authorityId: parseId(parseWalletAuthorityId, record.authorityId, "authorityId"),
1350
- authMethodId: parseId(parseWalletAuthMethodId, record.authMethodId, "authMethodId"),
1351
- authorizationId: parseId(parseWalletSessionAuthorizationId, record.authorizationId, "authorizationId"),
1352
- quotaId: parseId(parseMpcWalletSigningQuotaId, record.quotaId, "quotaId"),
1353
- authorityDigestB64u: parseDigest(record.authorityDigestB64u, "authorityDigestB64u"),
1354
- authorityRevocationEpoch: parseNonNegativeInteger(record.authorityRevocationEpoch, "authorityRevocationEpoch"),
1355
- capabilitySubjects: [first, ...capabilitySubjects.slice(1)],
1356
- issuedAtMs: parseUnixTime(record.issuedAtMs, "issuedAtMs"),
1357
- expiresAtMs: parseUnixTime(record.expiresAtMs, "expiresAtMs")
1358
- };
1359
- }
1360
- function parseWalletCapabilitySubjectV1(raw, label) {
1361
- const record = requireRecord(raw, label);
1362
- if (record.kind === "link_devices" || record.kind === "revoke_devices") {
1363
- rejectUnknownFields(record, ["kind"], label);
1364
- return { kind: record.kind };
1365
- }
1366
- if (record.kind !== "sign" && record.kind !== "export_keys") throw new Error(`${label}.kind is invalid`);
1367
- rejectUnknownFields(record, [
1368
- "kind",
1369
- "keyFamily",
1370
- "materialActivation"
1371
- ], label);
1372
- if (record.keyFamily !== "ed25519" && record.keyFamily !== "ecdsa_secp256k1") throw new Error(`${label}.keyFamily is invalid`);
1373
- return {
1374
- kind: record.kind,
1375
- keyFamily: record.keyFamily,
1376
- materialActivation: parseId(parseMpcMaterialActivationRef, record.materialActivation, `${label}.materialActivation`)
1377
- };
1378
- }
1379
- function parseNonNegativeInteger(raw, label) {
1380
- if (!Number.isSafeInteger(raw) || Number(raw) < 0) throw new Error(`${label} must be a non-negative safe integer`);
1381
- return Number(raw);
1382
- }
1383
- const LOCAL_AUTHORITY_ACTIVATION_FINAL_ACK_FIELDS = [
1384
- "kind",
1385
- "linkSessionId",
1386
- "authorityId",
1387
- "packageSetDigestB64u",
1388
- "authorizationId",
1389
- "walletSessionId",
1390
- "credentialDigestB64u",
1391
- "installationReceiptDigestB64u",
1392
- "acknowledgedAtMs"
1393
- ];
1394
- function parseLocalAuthorityActivationFinalAckV1(raw) {
1395
- const record = exactRecord(raw, LOCAL_AUTHORITY_ACTIVATION_FINAL_ACK_FIELDS, "LocalAuthorityActivationFinalAckV1");
1396
- if (record.kind !== "local_authority_activation_final_ack_v1") throw new Error("LocalAuthorityActivationFinalAckV1.kind is invalid");
1397
- return {
1398
- kind: "local_authority_activation_final_ack_v1",
1399
- linkSessionId: parseId(parseLinkDeviceSessionId, record.linkSessionId, "linkSessionId"),
1400
- authorityId: parseId(parseWalletAuthorityId, record.authorityId, "authorityId"),
1401
- packageSetDigestB64u: parseDigest(record.packageSetDigestB64u, "packageSetDigestB64u"),
1402
- authorizationId: parseId(parseWalletSessionAuthorizationId, record.authorizationId, "authorizationId"),
1403
- walletSessionId: parseId(parseWalletSessionId, record.walletSessionId, "walletSessionId"),
1404
- credentialDigestB64u: parseDigest(record.credentialDigestB64u, "credentialDigestB64u"),
1405
- installationReceiptDigestB64u: parseDigest(record.installationReceiptDigestB64u, "installationReceiptDigestB64u"),
1406
- acknowledgedAtMs: parseUnixTime(record.acknowledgedAtMs, "acknowledgedAtMs")
1407
- };
1408
- }
1409
856
  //#endregion
1410
- export { buildLinkedDeviceTargetPreparationV1, buildWalletSessionLinkedDeviceOwnerAuthorizationV1, parseActiveWalletSessionV1, parseLinkDevicePublicKeyB64u, parseLinkSessionStateV1, parseLinkedDeviceApprovalDeliveryV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceEmailOtpBaseFactorRequestV1, parseLinkedDeviceEmailOtpChallengeResendRequestV1, parseLinkedDeviceEmailOtpChallengeResultV1, parseLinkedDeviceEmailOtpChallengeStartRequestV1, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1, parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1, parseLinkedDeviceEmailOtpVerificationGrantV1, parseLinkedDeviceEmailOtpVerificationResultV1, parseLinkedDeviceListRequestV1, parseLinkedDeviceOwnerAuthorizationRequestV1, parseLinkedDeviceOwnerAuthorizationSourceV1, parseLinkedDeviceRevokeRequestV1, parseLinkedDeviceSessionClaimRequestV1, parseLinkedDeviceSessionClaimV1, parseLinkedDeviceSessionTransportRequestV1, parseLinkedDeviceTargetCredentialRegistrationResultV1, parseLinkedDeviceTargetCredentialRegistrationV1, parseLinkedDeviceTargetPreparationRequestV1, parseLinkedDeviceTargetPreparationV1, parseLocalAuthorityActivationFinalAckV1, parseLocalAuthorityInstallationReceiptV1, parseQrLinkedDeviceSessionPayloadV5, parseWalletSessionOperationCredentialV1 };
857
+ export { buildLinkedDeviceTargetPreparationV1, buildWalletSessionLinkedDeviceOwnerAuthorizationV1, parseLinkDevicePublicKeyB64u, parseLinkSessionStateV1, parseLinkedDeviceApprovalDeliveryV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceEmailOtpBaseFactorRequestV1, parseLinkedDeviceEmailOtpChallengeResendRequestV1, parseLinkedDeviceEmailOtpChallengeResultV1, parseLinkedDeviceEmailOtpChallengeStartRequestV1, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1, parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1, parseLinkedDeviceEmailOtpVerificationGrantV1, parseLinkedDeviceEmailOtpVerificationResultV1, parseLinkedDeviceOwnerAuthorizationRequestV1, parseLinkedDeviceOwnerAuthorizationSourceV1, parseLinkedDeviceSessionClaimRequestV1, parseLinkedDeviceSessionClaimV1, parseLinkedDeviceSessionTransportRequestV1, parseLinkedDeviceTargetCredentialRegistrationResultV1, parseLinkedDeviceTargetCredentialRegistrationV1, parseLinkedDeviceTargetPreparationRequestV1, parseLinkedDeviceTargetPreparationV1, parseQrLinkedDeviceSessionPayloadV5 };
1411
858
 
1412
859
  //# sourceMappingURL=parsers.js.map