@seams/wallet-server 0.6.1 → 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.
- package/artifact-manifest.json +147 -32
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -0
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -0
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -0
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -0
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/migrations/deriver-a/0012_tenant_root_creation_tombstones.sql +20 -0
- package/cloudflare-router-ab/migrations/deriver-a/0013_tenant_root_root_use_admissions.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-a/0014_tenant_root_refresh_supersessions.sql +24 -0
- package/cloudflare-router-ab/migrations/deriver-a/0015_tenant_root_root_use_attempts.sql +56 -0
- package/cloudflare-router-ab/migrations/deriver-a/0016_tenant_root_root_use_admission_settlement.sql +5 -0
- package/cloudflare-router-ab/migrations/deriver-a/0017_tenant_root_root_use_admission_claims.sql +64 -0
- package/cloudflare-router-ab/migrations/deriver-a/0018_tenant_root_recovery_retention_keys.sql +12 -0
- package/cloudflare-router-ab/migrations/deriver-b/0012_tenant_root_creation_tombstones.sql +20 -0
- package/cloudflare-router-ab/migrations/deriver-b/0013_tenant_root_root_use_admissions.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-b/0014_tenant_root_refresh_supersessions.sql +24 -0
- package/cloudflare-router-ab/migrations/deriver-b/0015_tenant_root_root_use_attempts.sql +56 -0
- package/cloudflare-router-ab/migrations/deriver-b/0016_tenant_root_root_use_admission_settlement.sql +5 -0
- package/cloudflare-router-ab/migrations/deriver-b/0017_tenant_root_root_use_admission_claims.sql +64 -0
- package/cloudflare-router-ab/migrations/deriver-b/0018_tenant_root_recovery_retention_keys.sql +12 -0
- package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +81 -16
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +102 -9
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +4 -1
- package/cloudflare-router-ab/wrangler.deriver-a.toml +24 -0
- package/cloudflare-router-ab/wrangler.router.toml +13 -0
- package/dist/esm/authorization/capabilityPolicy.js +1 -1
- package/dist/esm/authorization/domain.js +2 -2
- package/dist/esm/authorization/factorEvidence.js +6 -100
- package/dist/esm/authorization/service.js +34 -2
- package/dist/esm/authorization/vaultProxyUse.js +3 -4
- package/dist/esm/cloud-host.js +16 -11
- package/dist/esm/core/EmailOtpRecords.js +19 -1
- package/dist/esm/core/EmailOtpStores.js +323 -924
- package/dist/esm/core/IdentityStore.js +44 -235
- package/dist/esm/core/NearPublicKeyStore.js +21 -63
- package/dist/esm/core/RegistrationCeremonyStore.js +3 -1793
- package/dist/esm/core/ThresholdService/config.js +1 -82
- package/dist/esm/core/ThresholdService/kv.js +3 -3
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +37 -5
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +4 -74
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +15 -51
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +3 -3
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +5 -81
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +185 -290
- package/dist/esm/core/ThresholdService/validation.js +18 -230
- package/dist/esm/core/WalletAuthMethodStore.js +22 -79
- package/dist/esm/core/WalletStore.js +58 -185
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +57 -340
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +90 -369
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +17 -397
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +17 -397
- package/dist/esm/core/authService/AuthService.js +2 -19
- package/dist/esm/core/authService/emailOtpChallengeProof.js +1 -1
- package/dist/esm/core/authService/emailOtpChallenges.js +1 -1
- package/dist/esm/core/authService/emailOtpConfig.js +1 -32
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +6 -153
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +1 -1
- package/dist/esm/core/authService/nearPrivateKeySigning.js +7 -15
- package/dist/esm/core/authService/nearTransactions.js +2 -1
- package/dist/esm/core/authService/oidcVerification.js +3 -4
- package/dist/esm/core/authService/rateLimits.js +1 -31
- package/dist/esm/core/authService/registrationThresholdHelpers.js +2 -103
- package/dist/esm/core/authService/storeRegistry.js +2 -13
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +4 -5
- package/dist/esm/core/authService/webauthn.js +15 -50
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -6
- package/dist/esm/core/authService/webauthnVerificationOutcomes.js +60 -0
- package/dist/esm/core/authService/webauthnWalletBinding.js +2 -122
- package/dist/esm/core/d1IdentityStore.js +32 -66
- package/dist/esm/core/d1TenantStore.js +82 -0
- package/dist/esm/core/d1WalletAuthMethodStore.js +92 -143
- package/dist/esm/core/d1WalletStore.js +14 -12
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +10 -8
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +25 -3
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +6 -895
- package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +102 -0
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +668 -0
- package/dist/esm/core/emailOtpD1Statements.js +383 -0
- package/dist/esm/core/hostedAccountIds.js +2 -2
- package/dist/esm/core/keyMaterialBrands.js +2 -48
- package/dist/esm/core/nearRelayerAccountProvisioning.js +25 -150
- package/dist/esm/core/nearSignerWasmRuntime.js +1 -4
- package/dist/esm/core/rpcClients/near/NearClient.js +15 -218
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +1 -1
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +2 -4
- package/dist/esm/core/signingLanes/LaneLifecycleStore.js +0 -24
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +5 -5
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +3 -8
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +1 -4
- package/dist/esm/core/storeBackends.js +208 -0
- package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -7
- package/dist/esm/core/webAuthnD1Statements.js +92 -0
- package/dist/esm/core/webAuthnStoreBackends.js +198 -0
- package/dist/esm/hosted-wallet-gateway.js +33 -16
- package/dist/esm/index.js +2 -2
- package/dist/esm/local-hosted-wallet-gateway-worker.js +2 -23
- package/dist/esm/localHostedWalletGatewayHandler.js +299 -0
- package/dist/esm/localIntendedEcdsaFinalizeFault.js +85 -0
- package/dist/esm/localIntendedLinkExecuteFault.js +140 -0
- package/dist/esm/localIntendedRevokeFault.js +106 -0
- package/dist/esm/localIntendedSessionAdmissionFault.js +139 -0
- package/dist/esm/localIntendedYaoExportFault.js +117 -0
- package/dist/esm/localIntendedYaoFault.js +13 -16
- package/dist/esm/localIntendedYaoFinalizeFault.js +99 -0
- package/dist/esm/localIntendedYaoRecoveryFault.js +102 -0
- package/dist/esm/localIntendedYaoSigningFault.js +127 -0
- package/dist/esm/router/auth/authRequestValidation.js +1 -1
- package/dist/esm/router/auth/commonRouterUtils.js +10 -2
- package/dist/esm/router/auth/walletSessionFailure.js +1 -14
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +23 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +86 -66
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +208 -0
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +246 -296
- package/dist/esm/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.js +14 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +62 -63
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +3 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +1 -19
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +4 -3
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +52 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.js +100 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +7 -10
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +33 -124
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +9 -17
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +6 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +3 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
- package/dist/esm/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.js +69 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +39 -68
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +69 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +26 -71
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +20 -3
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +7 -94
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +5 -47
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +26 -123
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +0 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +15 -134
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +54 -260
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +1 -28
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +2 -8
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +3 -3
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +23 -73
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +15 -2
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +12 -203
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +16 -32
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +29 -72
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +4 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +3 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +6 -30
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +261 -205
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +5 -3
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +2 -2
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +3 -3
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +43 -25
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -1
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +2 -1
- package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +2 -60
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +158 -19
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +19 -49
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +100 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +132 -33
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +83 -4
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +14 -49
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +4 -4
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +22 -116
- package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +1 -2
- package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +11 -2
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +5 -6
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +2 -1
- package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +48 -21
- package/dist/esm/router/cloudflare.js +11480 -12853
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +16 -5
- package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +2 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js +33 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +17 -9
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +29 -431
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +7 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +70 -2
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +134 -169
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +77 -162
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +205 -51
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +29 -11
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +182 -55
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +63 -247
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +87 -132
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +5 -4
- package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +45 -0
- package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +1 -1
- package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +1 -42
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +1 -6
- package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +1 -142
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +1 -1
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +23 -45
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +5 -5
- package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +827 -0
- package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +698 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +209 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +16 -15
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +313 -0
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +62 -2159
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +1 -1
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +18 -22
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +3 -4
- package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +2 -2
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +97 -150
- package/dist/esm/router/express.js +5967 -6410
- package/dist/esm/router/framework/http.js +1 -4
- package/dist/esm/router/framework/ror/normalize.js +1 -1
- package/dist/esm/router/framework/routerApiRouteSurface.js +1 -1
- package/dist/esm/router/node/nodeHostedWalletGateway.js +64 -0
- package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +163 -0
- package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +120 -0
- package/dist/esm/router/node/nodeHttp.js +79 -0
- package/dist/esm/router/node/nodeSqlite.js +43 -0
- package/dist/esm/router/node/signerSqlMigrations.js +48 -0
- package/dist/esm/router/transport/fetch/createFetchRouter.js +1 -1
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +16 -18
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +3 -5
- package/dist/esm/router/transport/fetch/routes/deviceManagement.js +15 -24
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +3 -16
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +144 -461
- package/dist/esm/router/transport/fetch/routes/sessions.js +4 -4
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +4 -6
- package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +2 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +69 -23
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +52 -27
- package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -1
- package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
- package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +99 -227
- package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
- package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +74 -0
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +50 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +8 -9
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
- package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +55 -0
- package/dist/esm/shared-ts/src/device-linking/digests.js +10 -65
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
- package/dist/esm/shared-ts/src/device-linking/index.js +4 -1
- package/dist/esm/shared-ts/src/device-linking/parsers.js +510 -1063
- package/dist/esm/shared-ts/src/device-linking/requestProof.js +5 -14
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +6 -9
- package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +9 -9
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
- package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
- package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +3 -1
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +7 -5
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -5
- package/dist/esm/shared-ts/src/signing-lanes/index.js +3 -3
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +5 -12
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +5 -14
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -5
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +6 -45
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +423 -1511
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +323 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +59 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -1
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +1 -2
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +49 -0
- package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
- package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +2 -2
- package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
- package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +127 -0
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
- package/dist/esm/shared-ts/src/utils/registrationIds.js +280 -0
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1170
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +429 -0
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -136
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -163
- package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +160 -0
- package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +7 -15
- package/dist/esm/shared-ts/src/utils/validation.js +37 -6
- package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +362 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +77 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +7 -11
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
- package/dist/esm/storage/d1Sql.js +10 -1
- package/dist/esm/storage/syncSqlite.js +79 -0
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +1 -2
- package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +18 -55
- package/dist/esm/threshold/statusCodes.js +1 -1
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +3 -3
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
- package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
- package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
- package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
- package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
- package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
- package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
- package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
- package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
- package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
- package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
- package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
- package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
- package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
- package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
- package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
- package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
- package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
- package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
- package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
- package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
- package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
- package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
- package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
- package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
- package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
- package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
- package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
- package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
- package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
- package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
- package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
- package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/authorization/domain.d.ts +25 -5
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +37 -0
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +6 -7
- package/dist/types/wallet-server/src/authorization/service.d.ts +52 -3
- package/dist/types/wallet-server/src/cloud-host.d.ts +6 -2
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +10 -1
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +16 -116
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +2 -7
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +6 -16
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +29 -90
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -12
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +10 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +17 -48
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +4 -71
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +4 -8
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +1 -3
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +14 -47
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +2 -7
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +3 -8
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +7 -22
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +14 -36
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +9 -34
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +9 -34
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +6 -5
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +9 -17
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +3 -2
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +7 -23
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +3 -10
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +3 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +3 -2
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +5 -8
- package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +3 -2
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -26
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -5
- package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +0 -23
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +8 -16
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +7 -7
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +43 -0
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +1 -28
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +6 -16
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +51 -0
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +11 -29
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +2 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +2 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +44 -26
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +19 -217
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionApproval.d.ts +8 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +259 -0
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -2
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +54 -0
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -15
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +4 -24
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +2 -3
- package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +0 -1
- package/dist/types/wallet-server/src/core/registrationContracts.d.ts +37 -108
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +5 -4
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +10 -106
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +4 -3
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +2 -3
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +2 -3
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +3 -9
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +4 -4
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +3 -3
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +83 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +13 -59
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +51 -3
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +0 -1
- package/dist/types/wallet-server/src/core/types.d.ts +3 -24
- package/dist/types/wallet-server/src/core/webAuthnD1Statements.d.ts +29 -0
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +96 -0
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +11 -7
- package/dist/types/wallet-server/src/index.d.ts +1 -1
- package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +1 -4
- package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +12 -0
- package/dist/types/wallet-server/src/localIntendedEcdsaFinalizeFault.d.ts +33 -0
- package/dist/types/wallet-server/src/localIntendedLinkExecuteFault.d.ts +47 -0
- package/dist/types/wallet-server/src/localIntendedRevokeFault.d.ts +40 -0
- package/dist/types/wallet-server/src/localIntendedSessionAdmissionFault.d.ts +41 -0
- package/dist/types/wallet-server/src/localIntendedYaoExportFault.d.ts +41 -0
- package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +7 -1
- package/dist/types/wallet-server/src/localIntendedYaoFinalizeFault.d.ts +37 -0
- package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +45 -0
- package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +51 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +10 -21
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +5 -10
- package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +1 -4
- package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +45 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +57 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +2 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +8 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +14 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.d.ts +49 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +4 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +8 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +3 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +1 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +33 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +13 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +24 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +1 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +3 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +9 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +5 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +1 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +0 -23
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +1 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +11 -19
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -54
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +7 -19
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +4 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +8 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +5 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -22
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +6 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +10 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +15 -22
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +5 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +4 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +3 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +0 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +29 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +15 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.d.ts +71 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +34 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +44 -26
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +3 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +8 -19
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +15 -2
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +9 -7
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +4 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.d.ts +46 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +5 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +20 -79
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +4 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +62 -42
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +108 -32
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +5 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +36 -5
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +5 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +41 -50
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +3 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +6 -5
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +14 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +5 -5
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +3 -4
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +2 -27
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +2 -102
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +3 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +1 -9
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +2 -28
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +43 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +7 -7
- package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +165 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +110 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +360 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +11 -10
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +165 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +16 -702
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +5 -12
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +5 -4
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +6 -1
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +4 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +8 -8
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +4 -4
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +4 -4
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +4 -62
- package/dist/types/wallet-server/src/router/express-adaptor.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +64 -61
- package/dist/types/wallet-server/src/router/framework/http.d.ts +0 -1
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +3 -2
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -1
- package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +3 -3
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +34 -0
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +21 -0
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +2 -0
- package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +13 -0
- package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +22 -0
- package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +20 -0
- package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +1 -3
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +5 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +2 -2
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +14 -16
- package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +0 -12
- package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +2 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +7 -13
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +3 -57
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +0 -44
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +7 -0
- package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +28 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +0 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +5 -6
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +1 -0
- package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +4 -4
- package/migrations/d1-signer/0036_r150_yao_lifecycle_decisions.sql +22 -0
- package/migrations/d1-signer/0037_r150_wallet_auth_method_revocation_replays.sql +26 -0
- package/migrations/d1-signer/0038_r150_registration_ceremony_cas_guard_seed.sql +8 -0
- package/migrations/d1-signer/0039_r150_revocation_replay_answer_kind.sql +9 -0
- package/package.json +1 -1
- package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +0 -27
- package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +0 -115
- package/dist/esm/core/ThresholdService/secureRandomId.js +0 -9
- package/dist/esm/core/authService/record.js +0 -8
- package/dist/esm/core/authService/thresholdRuntimePolicy.js +0 -19
- package/dist/esm/core/authService/walletRegistrationPlanning.js +0 -49
- package/dist/esm/core/deviceLinking/index.js +0 -5
- package/dist/esm/core/errors.js +0 -54
- package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +0 -39
- package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
- package/dist/esm/core/signingLanes/index.js +0 -8
- package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +0 -55
- package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +0 -56
- package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +0 -414
- package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
- package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
- package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
- package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
- package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
- package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +0 -12
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +0 -17
- package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/record.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +0 -4
- package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +0 -19
- package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +0 -5
- package/dist/types/wallet-server/src/core/errors.d.ts +0 -10
- package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +0 -28
- package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +0 -15
- package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +0 -11
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +0 -35
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +0 -35
- /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 {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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
|
|
301
|
-
|
|
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
|
|
306
|
-
|
|
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
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
return
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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:
|
|
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:
|
|
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" ?
|
|
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
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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
|
|
446
|
-
if (typeof
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
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
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
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
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
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
|
-
|
|
544
|
-
|
|
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
|
|
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
|
-
|
|
574
|
-
|
|
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
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
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
|
-
|
|
588
|
-
|
|
336
|
+
return linkedDeviceApprovalDeliveryV1()(raw, "LinkedDeviceApprovalDeliveryV1");
|
|
337
|
+
}
|
|
338
|
+
function linkedDeviceTargetPreparationFields() {
|
|
589
339
|
return {
|
|
590
|
-
kind: "
|
|
591
|
-
|
|
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
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
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
|
|
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
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
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
|
|
742
|
-
|
|
743
|
-
const
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
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
|
|
756
|
-
|
|
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
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
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
|
|
798
|
-
const
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
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
|
|
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
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
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
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
const
|
|
930
|
-
|
|
931
|
-
return
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
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:
|
|
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
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
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
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
"
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
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
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
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
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
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
|
|
1057
|
-
const
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
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
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
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
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
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
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
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
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
"
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
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
|
-
|
|
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
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
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
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
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
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
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
|
|
1252
|
-
case "linked_device_session_cancel_claimed_request_v1": return
|
|
1253
|
-
case "linked_device_session_retry_committed_delivery_request_v1": return
|
|
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,
|
|
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
|