@seams/wallet-server 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +1 -9
- package/artifact-manifest.json +78 -33
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +0 -2
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +77 -20
- package/dist/esm/authorization/lifecycleRouting.js +62 -0
- package/dist/esm/authorization/service.js +35 -12
- package/dist/esm/cloud-host.js +20 -22
- package/dist/esm/core/EmailOtpRecords.js +1 -217
- package/dist/esm/core/EmailOtpStores.js +0 -859
- package/dist/esm/core/IdentityStore.js +2 -339
- package/dist/esm/core/ThresholdService/config.js +1 -9
- package/dist/esm/core/ThresholdService/index.js +0 -4
- package/dist/esm/core/ThresholdService/kv.js +1 -66
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +1 -13
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +1 -11
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +0 -541
- package/dist/esm/core/ThresholdService/validation.js +2 -346
- package/dist/esm/core/WalletAuthMethodStore.js +2 -123
- package/dist/esm/core/WalletStore.js +3 -209
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +0 -202
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +2 -182
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +0 -52
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +0 -54
- package/dist/esm/core/authService/emailOtpConfig.js +1 -195
- package/dist/esm/core/authService/emailOtpEnrollment.js +0 -110
- package/dist/esm/core/authService/emailOtpSeal.js +0 -63
- package/dist/esm/core/authService/nearTransactions.js +3 -98
- package/dist/esm/core/authService/rateLimits.js +0 -84
- package/dist/esm/core/authService/webauthn.js +2 -298
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -24
- package/dist/esm/core/authService/webauthnWalletBinding.js +0 -37
- package/dist/esm/core/config.js +1 -95
- package/dist/esm/core/d1EcdsaSignerRead.js +1 -1
- package/dist/esm/core/d1IdentityStore.js +1 -2
- package/dist/esm/core/d1TenantStore.js +1 -24
- package/dist/esm/core/d1WalletAuthMethodStore.js +2 -5
- package/dist/esm/core/d1WalletStore.js +2 -2
- package/dist/esm/core/deviceLinking/linkedDeviceBootstrap.js +13 -0
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +20 -14
- package/dist/esm/core/deviceLinking/requestProof.js +9 -6
- package/dist/esm/core/emailOtpD1Statements.js +107 -94
- package/dist/esm/core/keyMaterialBrands.js +2 -12
- package/dist/esm/core/nearKeys.js +0 -1
- package/dist/esm/core/nearRelayerAccountProvisioning.js +6 -9
- package/dist/esm/core/passkeyCredentialClaims.js +8 -0
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +2 -6
- package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +2 -30
- package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -4
- package/dist/esm/hosted-wallet-gateway.js +66 -43
- package/dist/esm/index.js +6 -19
- package/dist/esm/localHostedWalletGatewayHandler.js +12 -0
- package/dist/esm/localRegistrationSetupAuthority.js +89 -0
- package/dist/esm/router/auth/authRequestValidation.js +8 -16
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +0 -1
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +87 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +12 -2
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +32 -281
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +24 -22
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +8 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +12 -13
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +6 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +12 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +4 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +2 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +89 -7
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +23 -14
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +9 -6
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +1 -7
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +19 -13
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +44 -12
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +1 -49
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +19 -31
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.js +85 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +0 -48
- package/dist/esm/router/cloudflare/d1/near/d1SponsoredNearAccount.js +242 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +0 -1
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +2 -29
- package/dist/esm/router/cloudflare/d1/oidc/googleOidcToken.js +41 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +5 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +34 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +9 -3
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +7 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +25 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +0 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +74 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +7 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +69 -238
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +12 -56
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +155 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +1 -3
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +12 -6
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +68 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +7 -54
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +9 -8
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +2 -142
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +25 -4
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +4 -70
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +23 -7
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +5 -0
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +16 -4
- package/dist/esm/router/cloudflare-adaptor.js +1 -2
- package/dist/esm/router/cloudflare.js +1342 -1733
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +11 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +3 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +8 -0
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +0 -1
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +2 -8
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -8
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +5 -19
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +2 -3
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +70 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +10 -11
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +2 -3
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +14 -0
- package/dist/esm/router/express.js +574 -479
- package/dist/esm/router/framework/http.js +2 -0
- package/dist/esm/router/framework/registrationSetupDispatch.js +14 -0
- package/dist/esm/router/framework/ror/normalize.js +0 -1
- package/dist/esm/router/framework/ror/options.js +0 -1
- package/dist/esm/router/framework/ror/provider.js +0 -1
- package/dist/esm/router/framework/ror/staticProvider.js +0 -1
- package/dist/esm/router/framework/routeDefinitions.js +1 -2
- package/dist/esm/router/framework/routerApiWebhooks.js +0 -1
- package/dist/esm/router/ror.js +0 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +0 -2
- package/dist/esm/router/transport/fetch/routes/auth.js +2 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +36 -147
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +3 -2
- package/dist/esm/router/transport/fetch/routes/deviceLinkingResponses.js +130 -0
- package/dist/esm/router/transport/fetch/routes/ecdsaOperationStepUpFactor.js +171 -0
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +7 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +19 -115
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -1
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +0 -1
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +0 -2
- package/dist/esm/shared-ts/src/device-linking/contracts.js +16 -1
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -8
- package/dist/esm/shared-ts/src/near/actions.js +0 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -6
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -81
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -219
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -3
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -2
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -22
- package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +0 -1
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +4 -13
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +1 -7
- package/dist/esm/shared-ts/src/utils/domainIds.js +1 -16
- package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -11
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -1
- package/dist/esm/shared-ts/src/utils/errors.js +1 -19
- package/dist/esm/shared-ts/src/utils/near.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +0 -1
- package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +8 -0
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +0 -1
- package/dist/esm/shared-ts/src/utils/validation.js +1 -5
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +2 -13
- package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +6 -24
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +5 -6
- package/dist/esm/storage/d1Sql.js +1 -7
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +1 -2
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/options.js +0 -1
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +0 -611
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +1 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +0 -11
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +2 -7
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -843
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
- package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.d.ts +32 -0
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.d.ts +22 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +8 -1
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +20 -0
- package/dist/types/wallet-server/src/authorization/sessionRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +31 -9
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +1 -22
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +1 -79
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +0 -10
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +1 -3
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -7
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +7 -19
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +0 -34
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +1 -5
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +0 -3
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +0 -20
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +1 -27
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +2 -16
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +22 -14
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +0 -24
- package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +1 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +0 -13
- package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +1 -39
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -17
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +0 -125
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +1 -1
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +0 -12
- package/dist/types/wallet-server/src/core/config.d.ts +0 -10
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +0 -2
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +0 -7
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceBootstrap.d.ts +19 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +8 -6
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -5
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +10 -7
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +1 -5
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +0 -1
- package/dist/types/wallet-server/src/core/passkeyCredentialClaims.d.ts +9 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +1 -92
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +4 -52
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +0 -1
- package/dist/types/wallet-server/src/core/types.d.ts +0 -299
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +15 -3
- package/dist/types/wallet-server/src/index.d.ts +8 -13
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +25 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +6 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +1 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +18 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +29 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +7 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +0 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/googleOidcToken.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +30 -47
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +3 -30
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +23 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +0 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +0 -17
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +51 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +2 -10
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +14 -34
- package/dist/types/wallet-server/src/router/framework/googleLoginResolution.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/registrationSetupDispatch.d.ts +13 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingResponses.d.ts +17 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ecdsaOperationStepUpFactor.d.ts +37 -0
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +0 -1
- package/migrations/d1-signer/0040_namespace_home_challenges.sql +16 -0
- package/migrations/d1-signer/0041_step_up_admission_expiry.sql +28 -0
- package/migrations/d1-signer/0042_deployment_resource_challenges.sql +4 -0
- package/migrations/d1-signer/0043_google_registration_candidate_claim.sql +2 -0
- package/migrations/d1-signer/0044_linked_device_bootstrap_imports.sql +6 -0
- package/migrations/d1-signer/0045_wallet_owned_capability_receipts.sql +29 -0
- package/migrations/d1-signer/0046_wallet_owned_signing_abuse.sql +41 -0
- package/migrations/d1-signer/0047_remove_unused_near_public_keys.sql +2 -0
- package/migrations/d1-signer/0048_operation_owner_scope.sql +45 -0
- package/package.json +2 -3
- package/src/README.md +11 -3
- package/dist/esm/core/AuthService.js +0 -2
- package/dist/esm/core/NearPublicKeyStore.js +0 -200
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +0 -397
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +0 -140
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +0 -361
- package/dist/esm/core/ThresholdService/stores/StoreConfig.js +0 -13
- package/dist/esm/core/ThresholdService/stores/exportReplayGuard.js +0 -7
- package/dist/esm/core/authService/AuthService.js +0 -594
- package/dist/esm/core/authService/bytes.js +0 -19
- package/dist/esm/core/authService/configValues.js +0 -15
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +0 -123
- package/dist/esm/core/authService/emailOtpChallengeProof.js +0 -183
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +0 -264
- package/dist/esm/core/authService/emailOtpChallenges.js +0 -225
- package/dist/esm/core/authService/emailOtpDelivery.js +0 -134
- package/dist/esm/core/authService/emailOtpGrant.js +0 -43
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +0 -144
- package/dist/esm/core/authService/emailOtpUnlock.js +0 -174
- package/dist/esm/core/authService/googleEmailOtpOperations.js +0 -141
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +0 -587
- package/dist/esm/core/authService/identity.js +0 -42
- package/dist/esm/core/authService/identityOperations.js +0 -32
- package/dist/esm/core/authService/nearAccountOperations.js +0 -229
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +0 -108
- package/dist/esm/core/authService/oidcVerification.js +0 -249
- package/dist/esm/core/authService/registrationThresholdHelpers.js +0 -30
- package/dist/esm/core/authService/runtime.js +0 -45
- package/dist/esm/core/authService/storeRegistry.js +0 -102
- package/dist/esm/core/authService/thresholdStoreSummary.js +0 -32
- package/dist/esm/core/authService/webauthnAuthority.js +0 -17
- package/dist/esm/core/defaultConfigsServer.js +0 -9
- package/dist/esm/core/hostedAccountIds.js +0 -225
- package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +0 -84
- package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +0 -86
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +0 -324
- package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +0 -173
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +0 -198
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +0 -73
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +0 -68
- package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
- package/dist/esm/core/storeBackends.js +0 -208
- package/dist/esm/core/utils.js +0 -14
- package/dist/esm/core/webAuthnStoreBackends.js +0 -198
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +0 -49
- package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +0 -10
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +0 -22
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -166
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +0 -38
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +0 -20
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +0 -1459
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +0 -114
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +0 -16
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +0 -171
- package/dist/esm/router/cloudflare/d1/signingLanes/index.js +0 -10
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +0 -397
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +0 -597
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +0 -273
- package/dist/esm/router/cloudflare/signingLanes/index.js +0 -4
- package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +0 -32
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +0 -27
- package/dist/esm/shared-ts/src/signing-lanes/rotation.js +0 -8
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -358
- package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +0 -313
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -532
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -323
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -59
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
- package/dist/types/wallet-server/src/core/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +0 -48
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +0 -21
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +0 -40
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +0 -98
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +0 -4
- package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/stores/exportReplayGuard.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -490
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/configValues.d.ts +0 -7
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +0 -109
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +0 -47
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +0 -86
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +0 -43
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +0 -49
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +0 -64
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +0 -126
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/identity.d.ts +0 -25
- package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +0 -19
- package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +0 -55
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +0 -44
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -11
- package/dist/types/wallet-server/src/core/authService/runtime.d.ts +0 -20
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -53
- package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +0 -5
- package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +0 -5
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -16
- package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +0 -16
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +0 -36
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +0 -62
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +0 -24
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +0 -141
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +0 -228
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +0 -58
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +0 -30
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +0 -4
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +0 -83
- package/dist/types/wallet-server/src/core/utils.d.ts +0 -3
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +0 -96
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +0 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +0 -20
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +0 -51
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +0 -28
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +0 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +0 -107
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +0 -10
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +0 -18
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +0 -217
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +0 -73
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +0 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +0 -3
- /package/dist/esm/{core/signingLanes/LaneEffectJournalStore.js → authorization/recoveryRouting.js} +0 -0
- /package/dist/esm/{core/signingLanes/LaneLifecycleStore.js → authorization/sessionRouting.js} +0 -0
|
@@ -4,11 +4,13 @@ import "../../shared-ts/src/device-linking/index.js";
|
|
|
4
4
|
import { failure } from "../../shared-ts/src/utils/failure.js";
|
|
5
5
|
import { buildCorsOrigins, normalizeCorsOrigin } from "../../core/SessionService.js";
|
|
6
6
|
import { ROUTER_AB_TRACE_ID_HEADER_V1 } from "../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
7
|
+
import { WALLET_MANAGEMENT_PROTOCOL_HEADER } from "../../shared-ts/src/utils/walletManagementProtocol.js";
|
|
7
8
|
//#region src/router/framework/http.ts
|
|
8
9
|
const CORS_ALLOW_METHODS = "GET,POST,PUT,PATCH,DELETE,OPTIONS";
|
|
9
10
|
const CORS_PREFLIGHT_MAX_AGE_SECONDS = 600;
|
|
10
11
|
const CORS_ALLOW_HEADERS = [
|
|
11
12
|
"Content-Type",
|
|
13
|
+
WALLET_MANAGEMENT_PROTOCOL_HEADER,
|
|
12
14
|
"Authorization",
|
|
13
15
|
"X-Seams-Benchmark-Diagnostics",
|
|
14
16
|
LINKED_DEVICE_REQUEST_PROOF_HEADER_V1,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/router/framework/registrationSetupDispatch.ts
|
|
2
|
+
async function dispatchWalletRegistrationSetup(context, input) {
|
|
3
|
+
const forwarded = await context.dispatcher?.dispatch(input);
|
|
4
|
+
if (forwarded) return forwarded;
|
|
5
|
+
const result = await context.local.setupWalletRegistration(input);
|
|
6
|
+
return {
|
|
7
|
+
status: result.ok ? 200 : 400,
|
|
8
|
+
body: result
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { dispatchWalletRegistrationSetup };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=registrationSetupDispatch.js.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString, toRorOriginOrNull } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../../shared-ts/src/utils/signingSessionSeal.js";
|
|
4
3
|
//#region src/router/framework/ror/normalize.ts
|
|
5
4
|
function normalizeCsv(valuesRaw) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { normalizeCsv, sanitizeRorOrigins } from "./normalize.js";
|
|
4
3
|
import { StaticRorOriginsProvider } from "./staticProvider.js";
|
|
5
4
|
//#region src/router/framework/ror/options.ts
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { normalizeRorHost } from "./normalize.js";
|
|
4
3
|
//#region src/router/framework/ror/provider.ts
|
|
5
4
|
function validateRouterApiRorOptions(ror) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { sanitizeRorOrigins } from "./normalize.js";
|
|
4
3
|
//#region src/router/framework/ror/staticProvider.ts
|
|
5
4
|
var StaticRorOriginsProvider = class {
|
|
@@ -37,7 +37,6 @@ const ROUTER_API_ECDSA_STRICT_LIFECYCLE_SERVICES = [
|
|
|
37
37
|
"session"
|
|
38
38
|
];
|
|
39
39
|
const ROUTER_API_WEBAUTHN_AUTHENTICATOR_SERVICES = ["webAuthn", "session"];
|
|
40
|
-
const ROUTER_API_NEAR_PUBLIC_KEY_SERVICES = ["nearFunding", "session"];
|
|
41
40
|
const ROUTER_API_PASSKEY_CUSTODY_SERVICES = [
|
|
42
41
|
"passkeyCustody",
|
|
43
42
|
"walletAuthMethods",
|
|
@@ -404,7 +403,7 @@ function createRouterApiRouteDefinitions(options = {}) {
|
|
|
404
403
|
}, ROUTER_API_ED25519_WALLET_SESSION_SERVICES), sessionPrincipalRoute("router_ab_ed25519_sign_prepare", "POST", ROUTER_AB_ED25519_NORMAL_SIGNING_PREPARE_PATH, "Prepare Router A/B Ed25519 normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), sessionPrincipalRoute("router_ab_ed25519_sign_finalize", "POST", ROUTER_AB_ED25519_NORMAL_SIGNING_PATH, "Finalize Router A/B Ed25519 normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), publicRoute("router_ab_ecdsa_derivation_healthz", "GET", ROUTER_AB_ECDSA_DERIVATION_HEALTH_PATH, "Router A/B ECDSA derivation health probe", {
|
|
405
404
|
plane: "public",
|
|
406
405
|
rationale: "Router A/B health probes are intentionally public diagnostics."
|
|
407
|
-
}, ROUTER_API_THRESHOLD_RUNTIME_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_export", "POST", ROUTER_AB_ECDSA_DERIVATION_EXPORT_PATH, "Export authorized Router A/B ECDSA derivation material", ROUTER_API_ECDSA_STRICT_LIFECYCLE_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_refresh", "POST", ROUTER_AB_ECDSA_DERIVATION_REFRESH_PATH, "Refresh Router A/B ECDSA derivation activation", ROUTER_API_ECDSA_STRICT_LIFECYCLE_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_session_activate", "POST", ROUTER_AB_ECDSA_DERIVATION_SESSION_ACTIVATION_PATH, "Activate Router A/B ECDSA normal-signing session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_sign_prepare", "POST", ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PREPARE_PATH, "Prepare Router A/B ECDSA derivation normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_sign_finalize", "POST", ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PATH, "Finalize Router A/B ECDSA derivation normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_presignature_pool_fill_init", "POST", ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_INIT_PATH, "Begin Router A/B ECDSA derivation presignature pool-fill session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_presignature_pool_fill_step", "POST", ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_STEP_PATH, "Continue Router A/B ECDSA derivation presignature pool-fill session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("webauthn_authenticators", "GET", "/webauthn/authenticators", "List registered WebAuthn authenticators", ROUTER_API_WEBAUTHN_AUTHENTICATOR_SERVICES),
|
|
406
|
+
}, ROUTER_API_THRESHOLD_RUNTIME_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_export", "POST", ROUTER_AB_ECDSA_DERIVATION_EXPORT_PATH, "Export authorized Router A/B ECDSA derivation material", ROUTER_API_ECDSA_STRICT_LIFECYCLE_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_refresh", "POST", ROUTER_AB_ECDSA_DERIVATION_REFRESH_PATH, "Refresh Router A/B ECDSA derivation activation", ROUTER_API_ECDSA_STRICT_LIFECYCLE_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_session_activate", "POST", ROUTER_AB_ECDSA_DERIVATION_SESSION_ACTIVATION_PATH, "Activate Router A/B ECDSA normal-signing session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_sign_prepare", "POST", ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PREPARE_PATH, "Prepare Router A/B ECDSA derivation normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_sign_finalize", "POST", ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PATH, "Finalize Router A/B ECDSA derivation normal signing", ROUTER_API_NORMAL_SIGNING_PROXY_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_presignature_pool_fill_init", "POST", ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_INIT_PATH, "Begin Router A/B ECDSA derivation presignature pool-fill session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("router_ab_ecdsa_derivation_presignature_pool_fill_step", "POST", ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_STEP_PATH, "Continue Router A/B ECDSA derivation presignature pool-fill session", ROUTER_API_THRESHOLD_SESSION_SERVICES), sessionPrincipalRoute("webauthn_authenticators", "GET", "/webauthn/authenticators", "List registered WebAuthn authenticators", ROUTER_API_WEBAUTHN_AUTHENTICATOR_SERVICES), publicRoute("wallet_unlock_challenge", "POST", "/wallet/unlock/challenge", "Create wallet unlock challenge", {
|
|
408
407
|
plane: "public",
|
|
409
408
|
proof: "challenge_exchange",
|
|
410
409
|
rationale: "Wallet unlock challenge issuance is intentionally public."
|
package/dist/esm/router/ror.js
CHANGED
|
@@ -18,7 +18,6 @@ import { handleThresholdEd25519 } from "./routes/thresholdEd25519.js";
|
|
|
18
18
|
import { handleOwnerWalletExecutionLanePreflight } from "./routes/walletExecutionLanePreflight.js";
|
|
19
19
|
import { handleWebAuthnAuthenticators } from "./routes/webauthnAuthenticators.js";
|
|
20
20
|
import { handleAuth } from "./routes/auth.js";
|
|
21
|
-
import { handleNearPublicKeys } from "./routes/nearPublicKeys.js";
|
|
22
21
|
import { validateRouterApiRorOptions } from "../../framework/ror/provider.js";
|
|
23
22
|
import { handleWellKnown } from "./routes/wellKnown.js";
|
|
24
23
|
import { handleDeviceLinking } from "./routes/deviceLinking.js";
|
|
@@ -230,7 +229,6 @@ function createFetchRouter(service, opts, runtime) {
|
|
|
230
229
|
handleThresholdEcdsa,
|
|
231
230
|
handleExactWalletSigningSessionSeal,
|
|
232
231
|
handleWebAuthnAuthenticators,
|
|
233
|
-
handleNearPublicKeys,
|
|
234
232
|
handleExactWalletSessionStatus,
|
|
235
233
|
handleHostedWalletSessionExchangeIssue,
|
|
236
234
|
handleHostedWalletSessionExchangeRedeem,
|
|
@@ -130,6 +130,8 @@ async function handleAuth(ctx) {
|
|
|
130
130
|
const parsed = parsePasskeyLoginOptionsRequest(await readJson(ctx.request));
|
|
131
131
|
if (!parsed.ok) return json(parsed.body, { status: parsed.status });
|
|
132
132
|
const result = await ctx.service.webAuthn.createWebAuthnLoginOptions(parsed.request);
|
|
133
|
+
if (result.code === "wallet_home_unavailable") return json(result, { status: 503 });
|
|
134
|
+
if (result.code === "wallet_home_conflict") return json(result, { status: 409 });
|
|
133
135
|
return json(result, { status: result.ok ? 200 : result.code === "internal" ? 500 : 400 });
|
|
134
136
|
}
|
|
135
137
|
case "passkey_verify": {
|
|
@@ -2,7 +2,7 @@ import { parseLinkDeviceSessionId } from "../../../../shared-ts/src/utils/domain
|
|
|
2
2
|
import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { sha256Bytes } from "../../../../shared-ts/src/utils/digests.js";
|
|
4
4
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
|
-
import {
|
|
5
|
+
import { isLinkSessionTerminalFailureV1 } from "../../../../shared-ts/src/device-linking/contracts.js";
|
|
6
6
|
import { requireRecord } from "../../../../shared-ts/src/utils/validation.js";
|
|
7
7
|
import { parseActiveWalletSessionV1 } from "../../../../shared-ts/src/device-linking/activeWalletSession.js";
|
|
8
8
|
import { parseLinkedDeviceEd25519ExportRootRecipientV1, parseLinkedDeviceEd25519ExportRootSubmissionV1 } from "../../../../shared-ts/src/device-linking/ed25519ExportRoot.js";
|
|
@@ -16,6 +16,8 @@ import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
|
|
|
16
16
|
import { json, readJson } from "../../../framework/http.js";
|
|
17
17
|
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../../auth/routerApiKeyAuth.js";
|
|
18
18
|
import { resolvePublishableKeyApiCredentialAuth } from "../../../auth/routerApiCredentialAuth.js";
|
|
19
|
+
import { authDeniedResponse, exportRootWriteResponse, invalidInputResponse, invalidStateResponse, methodNotAllowedResponse, notFoundResponse, notSupportedResponse, projectSession, sessionProjectionResponse, targetCredentialResultResponse } from "./deviceLinkingResponses.js";
|
|
20
|
+
import { linkedDeviceBootstrapFailure } from "../../../../core/deviceLinking/linkedDeviceBootstrap.js";
|
|
19
21
|
import { parseLinkedDeviceRequestProofV1 } from "../../../../core/deviceLinking/requestProof.js";
|
|
20
22
|
//#region src/router/transport/fetch/routes/deviceLinking.ts
|
|
21
23
|
const DEVICE_LINKING_BASE = "/wallet/device-linking/v1/sessions";
|
|
@@ -52,6 +54,11 @@ async function handleDeviceLinking(ctx) {
|
|
|
52
54
|
default: return assertNever(action);
|
|
53
55
|
}
|
|
54
56
|
} catch (error) {
|
|
57
|
+
const bootstrapFailure = linkedDeviceBootstrapFailure(error);
|
|
58
|
+
if (bootstrapFailure) return sessionResultResponse({
|
|
59
|
+
outcome: bootstrapFailure,
|
|
60
|
+
message: "Linked-device bootstrap authority failed"
|
|
61
|
+
});
|
|
55
62
|
if (error instanceof DeviceLinkingInputError) return invalidInputResponse(error.message);
|
|
56
63
|
return json({
|
|
57
64
|
ok: false,
|
|
@@ -63,7 +70,7 @@ async function handleDeviceLinking(ctx) {
|
|
|
63
70
|
async function handleCreate(ctx, service, nowMs) {
|
|
64
71
|
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
65
72
|
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
66
|
-
const rawBody = await
|
|
73
|
+
const rawBody = await readJson(ctx.request);
|
|
67
74
|
const body = parseBoundary(() => parseCreateRequest(rawBody));
|
|
68
75
|
const keyDigest = await computeDevicePublicKeyDigestB64u(body.payload.devicePublicKeyB64u);
|
|
69
76
|
const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
|
|
@@ -140,7 +147,7 @@ async function handleApproval(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
140
147
|
});
|
|
141
148
|
if (!session) return notFoundResponse();
|
|
142
149
|
const ownerMismatch = requireOwnerMatchesClaimedWallet(authentication.owner, session);
|
|
143
|
-
if (ownerMismatch) return ownerMismatch;
|
|
150
|
+
if (ownerMismatch) return authDeniedResponse(ownerMismatch);
|
|
144
151
|
if (authentication.owner.walletId !== approval.walletId) return authDeniedResponse({
|
|
145
152
|
kind: "denied",
|
|
146
153
|
code: "unauthorized",
|
|
@@ -224,6 +231,7 @@ async function handleCredential(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
224
231
|
async function handleSourceContributionPreparation(ctx, service, rawLinkSessionId, nowMs) {
|
|
225
232
|
const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
226
233
|
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
234
|
+
if (isLinkSessionTerminalFailureV1(owner.session.state)) return invalidStateResponse(owner.session);
|
|
227
235
|
if (ctx.method !== "GET") return methodNotAllowedResponse();
|
|
228
236
|
const preparation = owner.session.sourceContributionPreparation;
|
|
229
237
|
if (!preparation) return new Response(null, { status: 204 });
|
|
@@ -274,10 +282,6 @@ async function handleSourceContribution(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
274
282
|
}));
|
|
275
283
|
return sessionProjectionResponse(committed.session, committed.kind === "replayed" ? "replayed" : recorded.outcome);
|
|
276
284
|
}
|
|
277
|
-
/**
|
|
278
|
-
* A precommit failure's reason is a single token. The installer's message
|
|
279
|
-
* keeps its words, joined, so the session still says what failed.
|
|
280
|
-
*/
|
|
281
285
|
function precommitFailureReasonV1(message) {
|
|
282
286
|
const token = message.trim().replace(/\s+/g, "_").replace(/[\u0000-\u001f\u007f]/g, "");
|
|
283
287
|
return token.length > 0 ? token : "authority_commit_failed";
|
|
@@ -286,6 +290,7 @@ async function handleSourceContributionExecute(ctx, service, rawLinkSessionId, n
|
|
|
286
290
|
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
287
291
|
const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
288
292
|
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
293
|
+
if (isLinkSessionTerminalFailureV1(owner.session.state)) return invalidStateResponse(owner.session);
|
|
289
294
|
const router = service.sourceContributionRouter;
|
|
290
295
|
if (!router) return notSupportedResponse("Ed25519 source-preserving linking is not configured");
|
|
291
296
|
const preparation = requireEd25519SourceContributionPreparation(owner.session);
|
|
@@ -358,8 +363,6 @@ async function handleEmailOtpBaseFactor(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
358
363
|
const authenticated = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
359
364
|
if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
|
|
360
365
|
const session = authenticated.session;
|
|
361
|
-
const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
|
|
362
|
-
if (ownerMismatch) return ownerMismatch;
|
|
363
366
|
if (session.state.state !== "claimed" || session.qrPayload.targetFactor.kind !== "email_otp" || !session.claimTranscript) return invalidStateResponse(session);
|
|
364
367
|
const walletId = session.claimTranscript.value.walletId;
|
|
365
368
|
const request = parseBoundary(() => parseLinkedDeviceEmailOtpBaseFactorRequestV1(authenticated.body));
|
|
@@ -387,8 +390,6 @@ async function handleOwnerCancel(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
387
390
|
if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
|
|
388
391
|
parseBoundary(() => parseOwnerCancelRequest(authenticated.body));
|
|
389
392
|
const session = authenticated.session;
|
|
390
|
-
const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
|
|
391
|
-
if (ownerMismatch) return ownerMismatch;
|
|
392
393
|
if (session.state.state === "cancelled") return sessionProjectionResponse(session, "replayed");
|
|
393
394
|
return sessionResultResponse(await service.sessionService.cancelSessionV1({
|
|
394
395
|
linkSessionId,
|
|
@@ -436,6 +437,7 @@ async function handleExportRootRecipient(ctx, service, rawLinkSessionId, nowMs)
|
|
|
436
437
|
if (ctx.method === "GET") {
|
|
437
438
|
const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
|
|
438
439
|
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
440
|
+
if (isLinkSessionTerminalFailureV1(owner.session.state)) return invalidStateResponse(owner.session);
|
|
439
441
|
const transfer = await port.readTransferV1(sessionId);
|
|
440
442
|
return transfer ? json(transfer.recipient, { status: 200 }) : new Response(null, { status: 204 });
|
|
441
443
|
}
|
|
@@ -443,8 +445,14 @@ async function handleExportRootRecipient(ctx, service, rawLinkSessionId, nowMs)
|
|
|
443
445
|
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
444
446
|
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
445
447
|
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
448
|
+
if (isLinkSessionTerminalFailureV1(authenticated.session.state)) return invalidStateResponse(authenticated.session);
|
|
446
449
|
const recipient = parseBoundary(() => parseLinkedDeviceEd25519ExportRootRecipientV1(authenticated.body));
|
|
447
450
|
if (recipient.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
451
|
+
const session = authenticated.session;
|
|
452
|
+
const preparation = await readTargetPreparation(service, session, requireApproval(session), { access: "replay_only" }, nowMs);
|
|
453
|
+
if (preparation.kind === "conflict") return invalidStateResponse(session);
|
|
454
|
+
const facts = preparation.ed25519ExportRoot;
|
|
455
|
+
if (!facts || recipient.walletId !== preparation.walletId || recipient.enrollmentId !== preparation.enrollmentId || recipient.deviceId !== preparation.deviceId || recipient.targetFactor.kind !== preparation.targetFactor.kind || recipient.walletKeyId !== facts.walletKeyId || recipient.revocationEpoch !== facts.revocationEpoch || recipient.applicationBindingDigestB64u !== facts.applicationBindingDigestB64u || recipient.registeredPublicKeyB64u !== facts.registeredPublicKeyB64u) return invalidInputResponse("export-root recipient does not match target preparation");
|
|
448
456
|
return exportRootWriteResponse(await port.registerRecipientV1({ recipient }));
|
|
449
457
|
}
|
|
450
458
|
async function handleExportRootPackage(ctx, service, rawLinkSessionId, nowMs) {
|
|
@@ -455,12 +463,14 @@ async function handleExportRootPackage(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
455
463
|
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
456
464
|
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
457
465
|
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
466
|
+
if (isLinkSessionTerminalFailureV1(authenticated.session.state)) return invalidStateResponse(authenticated.session);
|
|
458
467
|
const transfer = await port.readTransferV1(sessionId);
|
|
459
468
|
return transfer?.state === "sealed" ? json(transfer.package, { status: 200 }) : new Response(null, { status: 204 });
|
|
460
469
|
}
|
|
461
470
|
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
462
471
|
const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
|
|
463
472
|
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
473
|
+
if (isLinkSessionTerminalFailureV1(owner.session.state)) return invalidStateResponse(owner.session);
|
|
464
474
|
const submission = parseBoundary(() => parseLinkedDeviceEd25519ExportRootSubmissionV1(owner.body));
|
|
465
475
|
if (submission.linkSessionId !== sessionId) return invalidInputResponse("link session id does not match route");
|
|
466
476
|
return exportRootWriteResponse(await port.submitPackageV1({
|
|
@@ -472,7 +482,7 @@ async function handleReceipt(ctx, service, rawLinkSessionId, nowMs) {
|
|
|
472
482
|
if (!service.installationReceipt) return notSupportedResponse("Installation receipt is not configured");
|
|
473
483
|
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
474
484
|
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
475
|
-
const rawBody = await
|
|
485
|
+
const rawBody = await readJson(ctx.request.clone());
|
|
476
486
|
if (isFinalActivationAcknowledgement(rawBody)) {
|
|
477
487
|
const acknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(rawBody));
|
|
478
488
|
if (acknowledgement.linkSessionId !== linkSessionId) return invalidInputResponse("activation acknowledgement session does not match the route");
|
|
@@ -658,6 +668,8 @@ async function authenticateOwnerForSession(ctx, service, linkSessionId, nowMs) {
|
|
|
658
668
|
});
|
|
659
669
|
if (!session) return { kind: "not_found" };
|
|
660
670
|
validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
|
|
671
|
+
const ownerMismatch = requireOwnerMatchesClaimedWallet(authentication.owner, session);
|
|
672
|
+
if (ownerMismatch) return ownerMismatch;
|
|
661
673
|
return {
|
|
662
674
|
kind: "authorized",
|
|
663
675
|
body: authentication.body,
|
|
@@ -862,69 +874,6 @@ async function authenticateTargetPasskeyOriginV1(ctx, routeId) {
|
|
|
862
874
|
expectedOrigin
|
|
863
875
|
};
|
|
864
876
|
}
|
|
865
|
-
function projectLinkSessionStateV1(state) {
|
|
866
|
-
switch (state.state) {
|
|
867
|
-
case "displaying_qr": return { state: "displaying_qr" };
|
|
868
|
-
case "claimed":
|
|
869
|
-
case "awaiting_target_factor":
|
|
870
|
-
case "awaiting_source_contribution":
|
|
871
|
-
case "provisioning": return {
|
|
872
|
-
state: state.state,
|
|
873
|
-
deviceId: state.deviceId
|
|
874
|
-
};
|
|
875
|
-
case "authority_pending_local_install": return {
|
|
876
|
-
state: "authority_pending_local_install",
|
|
877
|
-
deviceId: state.deviceId,
|
|
878
|
-
authorityId: state.authorityId,
|
|
879
|
-
packageSetDigestB64u: state.packageSetDigestB64u
|
|
880
|
-
};
|
|
881
|
-
case "active": return {
|
|
882
|
-
state: "active",
|
|
883
|
-
deviceId: state.deviceId,
|
|
884
|
-
authorityId: state.authorityId,
|
|
885
|
-
activatedAtMs: state.activatedAtMs
|
|
886
|
-
};
|
|
887
|
-
case "failed_before_commit": return {
|
|
888
|
-
state: "failed_before_commit",
|
|
889
|
-
error: state.error
|
|
890
|
-
};
|
|
891
|
-
case "cancelled": return {
|
|
892
|
-
state: "cancelled",
|
|
893
|
-
cancelledAtMs: state.cancelledAtMs
|
|
894
|
-
};
|
|
895
|
-
case "expired": return {
|
|
896
|
-
state: "expired",
|
|
897
|
-
expiredAtMs: state.expiredAtMs
|
|
898
|
-
};
|
|
899
|
-
default: return assertNeverLinkSessionStateV1(state);
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
function projectSession(record) {
|
|
903
|
-
return {
|
|
904
|
-
kind: "linked_device_session_projection_v1",
|
|
905
|
-
linkSessionId: record.linkSessionId,
|
|
906
|
-
qrPayload: record.qrPayload,
|
|
907
|
-
revision: record.revision,
|
|
908
|
-
createdAtMs: record.createdAtMs,
|
|
909
|
-
updatedAtMs: record.updatedAtMs,
|
|
910
|
-
state: projectLinkSessionStateV1(record.state)
|
|
911
|
-
};
|
|
912
|
-
}
|
|
913
|
-
function sessionProjectionResponse(record, outcome) {
|
|
914
|
-
return json({
|
|
915
|
-
ok: true,
|
|
916
|
-
outcome,
|
|
917
|
-
session: projectSession(record)
|
|
918
|
-
}, { status: 200 });
|
|
919
|
-
}
|
|
920
|
-
function targetCredentialResultResponse(record, outcome, targetCredential) {
|
|
921
|
-
return json({
|
|
922
|
-
ok: true,
|
|
923
|
-
outcome,
|
|
924
|
-
targetCredential,
|
|
925
|
-
session: projectSession(record)
|
|
926
|
-
}, { status: 200 });
|
|
927
|
-
}
|
|
928
877
|
function claimResultResponse(result) {
|
|
929
878
|
if (result.outcome !== "applied" && result.outcome !== "replayed") return sessionResultResponse(result);
|
|
930
879
|
const claim = result.record.claimTranscript?.value;
|
|
@@ -953,6 +902,16 @@ function approvalResultResponse(result) {
|
|
|
953
902
|
}
|
|
954
903
|
function sessionResultResponse(result) {
|
|
955
904
|
switch (result.outcome) {
|
|
905
|
+
case "home_conflict": return json({
|
|
906
|
+
ok: false,
|
|
907
|
+
code: "wallet_home_conflict",
|
|
908
|
+
message: result.message
|
|
909
|
+
}, { status: 409 });
|
|
910
|
+
case "home_unavailable": return json({
|
|
911
|
+
ok: false,
|
|
912
|
+
code: "wallet_home_unavailable",
|
|
913
|
+
message: result.message
|
|
914
|
+
}, { status: 503 });
|
|
956
915
|
case "applied":
|
|
957
916
|
case "replayed": return sessionProjectionResponse(result.record, result.outcome);
|
|
958
917
|
case "conflict": return json({
|
|
@@ -993,49 +952,19 @@ function sessionResultResponse(result) {
|
|
|
993
952
|
default: return assertNever(result);
|
|
994
953
|
}
|
|
995
954
|
}
|
|
996
|
-
function invalidStateResponse(record) {
|
|
997
|
-
return json({
|
|
998
|
-
ok: false,
|
|
999
|
-
outcome: "invalid_state",
|
|
1000
|
-
state: record.state.state,
|
|
1001
|
-
session: projectSession(record)
|
|
1002
|
-
}, { status: 409 });
|
|
1003
|
-
}
|
|
1004
|
-
function exportRootWriteResponse(result) {
|
|
1005
|
-
return result.outcome === "conflict" ? json({
|
|
1006
|
-
ok: false,
|
|
1007
|
-
code: result.reason ?? "conflict",
|
|
1008
|
-
message: "export-root relay conflict"
|
|
1009
|
-
}, { status: 409 }) : json({
|
|
1010
|
-
ok: true,
|
|
1011
|
-
outcome: result.outcome
|
|
1012
|
-
}, { status: 200 });
|
|
1013
|
-
}
|
|
1014
955
|
function ownerSessionResponse(context) {
|
|
1015
956
|
return context.kind === "denied" ? authDeniedResponse(context) : notFoundResponse();
|
|
1016
957
|
}
|
|
1017
|
-
/**
|
|
1018
|
-
* The one owner-to-session binding, shared by every owner route on a claimed
|
|
1019
|
-
* session. It runs before any state is disclosed: an authenticated owner of a
|
|
1020
|
-
* DIFFERENT wallet must get the same denial for every state, not a projection
|
|
1021
|
-
* or an invalid-state body. An unclaimed session has no wallet to bind to yet,
|
|
1022
|
-
* so the caller's state checks answer instead.
|
|
1023
|
-
*/
|
|
1024
958
|
function requireOwnerMatchesClaimedWallet(owner, session) {
|
|
1025
959
|
const claimWalletId = session.claimTranscript?.value.walletId;
|
|
1026
960
|
if (claimWalletId === void 0) return null;
|
|
1027
961
|
if (owner.walletId === claimWalletId) return null;
|
|
1028
|
-
return
|
|
962
|
+
return {
|
|
1029
963
|
kind: "denied",
|
|
1030
964
|
code: "unauthorized",
|
|
1031
965
|
message: "owner session does not match link wallet"
|
|
1032
|
-
}
|
|
966
|
+
};
|
|
1033
967
|
}
|
|
1034
|
-
/**
|
|
1035
|
-
* Approval-time revalidation of the selected Email OTP base method. The same
|
|
1036
|
-
* eligibility question the dedicated base-factor route answers, asked once
|
|
1037
|
-
* more with the id the approval names, so the two paths cannot drift.
|
|
1038
|
-
*/
|
|
1039
968
|
async function requireSelectedEmailOtpBaseFactorV1(service, session, input) {
|
|
1040
969
|
const provider = service.emailOtpTargetFactor;
|
|
1041
970
|
if (!provider) return notSupportedResponse("Email OTP linking is not configured");
|
|
@@ -1054,43 +983,6 @@ async function requireSelectedEmailOtpBaseFactorV1(service, session, input) {
|
|
|
1054
983
|
});
|
|
1055
984
|
return null;
|
|
1056
985
|
}
|
|
1057
|
-
function authDeniedResponse(result) {
|
|
1058
|
-
return json({
|
|
1059
|
-
ok: false,
|
|
1060
|
-
outcome: "unauthorized",
|
|
1061
|
-
code: result.code,
|
|
1062
|
-
message: result.message
|
|
1063
|
-
}, { status: result.code === "expired" ? 410 : 401 });
|
|
1064
|
-
}
|
|
1065
|
-
function invalidInputResponse(message) {
|
|
1066
|
-
return json({
|
|
1067
|
-
ok: false,
|
|
1068
|
-
outcome: "invalid_input",
|
|
1069
|
-
code: "invalid_input",
|
|
1070
|
-
message
|
|
1071
|
-
}, { status: 400 });
|
|
1072
|
-
}
|
|
1073
|
-
function notSupportedResponse(message = "Device linking is not configured") {
|
|
1074
|
-
return json({
|
|
1075
|
-
ok: false,
|
|
1076
|
-
code: "not_supported",
|
|
1077
|
-
message
|
|
1078
|
-
}, { status: 501 });
|
|
1079
|
-
}
|
|
1080
|
-
function notFoundResponse() {
|
|
1081
|
-
return json({
|
|
1082
|
-
ok: false,
|
|
1083
|
-
code: "not_found",
|
|
1084
|
-
message: "Linked-device session not found"
|
|
1085
|
-
}, { status: 404 });
|
|
1086
|
-
}
|
|
1087
|
-
function methodNotAllowedResponse() {
|
|
1088
|
-
return json({
|
|
1089
|
-
ok: false,
|
|
1090
|
-
code: "method_not_allowed",
|
|
1091
|
-
message: "Method is not allowed"
|
|
1092
|
-
}, { status: 405 });
|
|
1093
|
-
}
|
|
1094
986
|
function parseCreateRequest(raw) {
|
|
1095
987
|
const record = requireRecord(raw, "device-linking create request");
|
|
1096
988
|
requireExactKeys(record, ["kind", "payload"]);
|
|
@@ -1155,9 +1047,6 @@ function parseB64uBytes(raw, field) {
|
|
|
1155
1047
|
if (bytes.length === 0 || base64UrlEncode(bytes) !== raw) throw new Error(`${field} is not canonical base64url`);
|
|
1156
1048
|
return bytes;
|
|
1157
1049
|
}
|
|
1158
|
-
async function readJsonBody(request) {
|
|
1159
|
-
return await readJson(request);
|
|
1160
|
-
}
|
|
1161
1050
|
function parseBoundary(parse) {
|
|
1162
1051
|
try {
|
|
1163
1052
|
return parse();
|
|
@@ -4,9 +4,9 @@ import { buildDelegatedWalletAuthorityV1 } from "../../../../shared-ts/src/autho
|
|
|
4
4
|
import { buildEmailOtpWalletAuthAuthority, buildPasskeyWalletAuthAuthority, walletAuthAuthorityRef } from "../../../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
5
5
|
import { parseLinkedDeviceOwnerAuthorizationRequestV1 } from "../../../../shared-ts/src/device-linking/parsers.js";
|
|
6
6
|
import { buildWalletSessionCapabilitySubjectsV1, walletSessionCapabilitySubjectsV1Equal } from "../../../../authorization/domain.js";
|
|
7
|
-
import { thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
8
7
|
import { json, jsonFailure, readJson } from "../../../framework/http.js";
|
|
9
8
|
import { extractBearerCredential } from "../../../auth/routerApiKeyAuth.js";
|
|
9
|
+
import { thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
10
10
|
//#region src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.ts
|
|
11
11
|
const LINKED_DEVICE_OWNER_AUTHORIZATION_PATH_V1 = "/wallet/device-linking/v1/owner-authorization";
|
|
12
12
|
/**
|
|
@@ -255,7 +255,8 @@ function methodNotAllowedResponse() {
|
|
|
255
255
|
}, { status: 405 });
|
|
256
256
|
}
|
|
257
257
|
function authDeniedResponse(value) {
|
|
258
|
-
|
|
258
|
+
if (value.code === "unavailable") return jsonFailure(503, value.code, value.message);
|
|
259
|
+
return jsonFailure(value.code === "invalid" ? 403 : 401, value.code, value.message);
|
|
259
260
|
}
|
|
260
261
|
//#endregion
|
|
261
262
|
export { LINKED_DEVICE_OWNER_AUTHORIZATION_PATH_V1, authenticateDeviceLinkingOwnerWalletSessionRequestV1, createDeviceLinkingOwnerRequestAuthenticatorV1, handleDeviceLinkingOwnerAuthorization };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { assertNeverLinkSessionStateV1 } from "../../../../shared-ts/src/device-linking/contracts.js";
|
|
2
|
+
import { json } from "../../../framework/http.js";
|
|
3
|
+
//#region src/router/transport/fetch/routes/deviceLinkingResponses.ts
|
|
4
|
+
function projectLinkSessionStateV1(state) {
|
|
5
|
+
switch (state.state) {
|
|
6
|
+
case "displaying_qr": return { state: "displaying_qr" };
|
|
7
|
+
case "claimed":
|
|
8
|
+
case "awaiting_target_factor":
|
|
9
|
+
case "awaiting_source_contribution":
|
|
10
|
+
case "provisioning": return {
|
|
11
|
+
state: state.state,
|
|
12
|
+
deviceId: state.deviceId
|
|
13
|
+
};
|
|
14
|
+
case "authority_pending_local_install": return {
|
|
15
|
+
state: "authority_pending_local_install",
|
|
16
|
+
deviceId: state.deviceId,
|
|
17
|
+
authorityId: state.authorityId,
|
|
18
|
+
packageSetDigestB64u: state.packageSetDigestB64u
|
|
19
|
+
};
|
|
20
|
+
case "active": return {
|
|
21
|
+
state: "active",
|
|
22
|
+
deviceId: state.deviceId,
|
|
23
|
+
authorityId: state.authorityId,
|
|
24
|
+
activatedAtMs: state.activatedAtMs
|
|
25
|
+
};
|
|
26
|
+
case "failed_before_commit": return {
|
|
27
|
+
state: "failed_before_commit",
|
|
28
|
+
error: state.error
|
|
29
|
+
};
|
|
30
|
+
case "cancelled": return {
|
|
31
|
+
state: "cancelled",
|
|
32
|
+
cancelledAtMs: state.cancelledAtMs
|
|
33
|
+
};
|
|
34
|
+
case "expired": return {
|
|
35
|
+
state: "expired",
|
|
36
|
+
expiredAtMs: state.expiredAtMs
|
|
37
|
+
};
|
|
38
|
+
default: return assertNeverLinkSessionStateV1(state);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function projectSession(record) {
|
|
42
|
+
return {
|
|
43
|
+
kind: "linked_device_session_projection_v1",
|
|
44
|
+
linkSessionId: record.linkSessionId,
|
|
45
|
+
qrPayload: record.qrPayload,
|
|
46
|
+
revision: record.revision,
|
|
47
|
+
createdAtMs: record.createdAtMs,
|
|
48
|
+
updatedAtMs: record.updatedAtMs,
|
|
49
|
+
state: projectLinkSessionStateV1(record.state)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function invalidStateResponse(record) {
|
|
53
|
+
return json({
|
|
54
|
+
ok: false,
|
|
55
|
+
outcome: "invalid_state",
|
|
56
|
+
state: record.state.state,
|
|
57
|
+
session: projectSession(record)
|
|
58
|
+
}, { status: 409 });
|
|
59
|
+
}
|
|
60
|
+
function sessionProjectionResponse(record, outcome) {
|
|
61
|
+
return json({
|
|
62
|
+
ok: true,
|
|
63
|
+
outcome,
|
|
64
|
+
session: projectSession(record)
|
|
65
|
+
}, { status: 200 });
|
|
66
|
+
}
|
|
67
|
+
function targetCredentialResultResponse(record, outcome, targetCredential) {
|
|
68
|
+
return json({
|
|
69
|
+
ok: true,
|
|
70
|
+
outcome,
|
|
71
|
+
targetCredential,
|
|
72
|
+
session: projectSession(record)
|
|
73
|
+
}, { status: 200 });
|
|
74
|
+
}
|
|
75
|
+
function exportRootWriteResponse(result) {
|
|
76
|
+
return result.outcome === "conflict" ? json({
|
|
77
|
+
ok: false,
|
|
78
|
+
code: result.reason ?? "conflict",
|
|
79
|
+
message: "export-root relay conflict"
|
|
80
|
+
}, { status: 409 }) : json({
|
|
81
|
+
ok: true,
|
|
82
|
+
outcome: result.outcome
|
|
83
|
+
}, { status: 200 });
|
|
84
|
+
}
|
|
85
|
+
function invalidInputResponse(message) {
|
|
86
|
+
return json({
|
|
87
|
+
ok: false,
|
|
88
|
+
outcome: "invalid_input",
|
|
89
|
+
code: "invalid_input",
|
|
90
|
+
message
|
|
91
|
+
}, { status: 400 });
|
|
92
|
+
}
|
|
93
|
+
function notSupportedResponse(message = "Device linking is not configured") {
|
|
94
|
+
return json({
|
|
95
|
+
ok: false,
|
|
96
|
+
code: "not_supported",
|
|
97
|
+
message
|
|
98
|
+
}, { status: 501 });
|
|
99
|
+
}
|
|
100
|
+
function notFoundResponse() {
|
|
101
|
+
return json({
|
|
102
|
+
ok: false,
|
|
103
|
+
code: "not_found",
|
|
104
|
+
message: "Linked-device session not found"
|
|
105
|
+
}, { status: 404 });
|
|
106
|
+
}
|
|
107
|
+
function methodNotAllowedResponse() {
|
|
108
|
+
return json({
|
|
109
|
+
ok: false,
|
|
110
|
+
code: "method_not_allowed",
|
|
111
|
+
message: "Method is not allowed"
|
|
112
|
+
}, { status: 405 });
|
|
113
|
+
}
|
|
114
|
+
function authDeniedResponse(result) {
|
|
115
|
+
if (result.code === "unavailable") return json({
|
|
116
|
+
ok: false,
|
|
117
|
+
code: result.code,
|
|
118
|
+
message: result.message
|
|
119
|
+
}, { status: 503 });
|
|
120
|
+
return json({
|
|
121
|
+
ok: false,
|
|
122
|
+
outcome: "unauthorized",
|
|
123
|
+
code: result.code,
|
|
124
|
+
message: result.message
|
|
125
|
+
}, { status: result.code === "expired" ? 410 : 401 });
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { authDeniedResponse, exportRootWriteResponse, invalidInputResponse, invalidStateResponse, methodNotAllowedResponse, notFoundResponse, notSupportedResponse, projectSession, sessionProjectionResponse, targetCredentialResultResponse };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=deviceLinkingResponses.js.map
|