@seams/wallet-server 0.7.1 → 0.7.3
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 -105
- package/artifact-manifest.json +21 -21
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- 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_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_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- 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_bg.wasm +0 -0
- package/dist/esm/authorization/service.js +8 -0
- package/dist/esm/authorization/vaultProxyUse.js +2 -6
- package/dist/esm/cloud-host.js +4 -4
- package/dist/esm/core/IdentityStore.js +23 -110
- package/dist/esm/core/SessionService.js +7 -30
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +3 -10
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +21 -97
- package/dist/esm/core/ThresholdService/stores/exportReplayGuard.js +7 -0
- package/dist/esm/core/WalletStore.js +4 -6
- package/dist/esm/core/authService/bytes.js +1 -4
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +2 -5
- package/dist/esm/core/authService/emailOtpChallengeProof.js +9 -40
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +19 -90
- package/dist/esm/core/authService/emailOtpChallenges.js +10 -45
- package/dist/esm/core/authService/emailOtpDelivery.js +10 -45
- package/dist/esm/core/authService/emailOtpEnrollment.js +9 -40
- package/dist/esm/core/authService/emailOtpGrant.js +9 -40
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +9 -40
- package/dist/esm/core/authService/emailOtpSeal.js +5 -20
- package/dist/esm/core/authService/emailOtpUnlock.js +20 -110
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +28 -115
- package/dist/esm/core/authService/identity.js +5 -20
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +6 -25
- package/dist/esm/core/authService/oidcVerification.js +22 -34
- package/dist/esm/core/authService/rateLimits.js +2 -5
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +2 -1
- package/dist/esm/core/authService/webauthn.js +37 -191
- package/dist/esm/core/authService/webauthnVerificationOutcomes.js +5 -24
- package/dist/esm/core/d1EcdsaSignerRead.js +76 -0
- package/dist/esm/core/d1IdentityStore.js +16 -75
- package/dist/esm/core/d1TenantStore.js +1 -1
- package/dist/esm/core/d1WalletStore.js +15 -25
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +1 -5
- package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +1 -3
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -8
- package/dist/esm/core/deviceLinking/requestProof.js +13 -4
- package/dist/esm/core/ecdsaMaterialReadSnapshot.js +85 -0
- package/dist/esm/core/nearRelayerAccountProvisioning.js +2 -5
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +3 -6
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +2 -5
- package/dist/esm/core/storeBackends.js +1 -1
- package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -3
- package/dist/esm/hosted-wallet-gateway.js +2 -2
- package/dist/esm/localHostedWalletGatewayHandler.js +13 -0
- package/dist/esm/localIntendedMaterialAdmissionFault.js +176 -0
- package/dist/esm/localIntendedPresignCancellation.js +44 -0
- package/dist/esm/router/auth/commonRouterUtils.js +24 -10
- package/dist/esm/router/auth/walletSessionFailure.js +2 -5
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +4 -15
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +1 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +2 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +5 -27
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +76 -0
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +28 -21
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +209 -44
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +8 -12
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +50 -8
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +12 -55
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +17 -80
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +6 -25
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +12 -47
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +24 -85
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +7 -30
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +5 -20
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +23 -110
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +9 -40
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +3 -10
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +18 -91
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +6 -30
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +4 -15
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +2 -7
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +9 -13
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +11 -50
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +5 -20
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +4 -7
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +2 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +7 -30
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +32 -22
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +1 -4
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +119 -25
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +31 -168
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +6 -9
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +59 -66
- package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +2 -2
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +5 -20
- package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +2 -9
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +2 -1
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +2 -1
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +2 -2
- package/dist/esm/router/cloudflare.js +2146 -1802
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +5 -8
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +3 -6
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +6 -25
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +39 -55
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +15 -62
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +83 -74
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +1 -0
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +1 -4
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +7 -13
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +41 -200
- package/dist/esm/router/express.js +317 -699
- package/dist/esm/router/framework/http.js +5 -1
- package/dist/esm/router/framework/runtimeSnapshotConsumer.js +8 -35
- package/dist/esm/router/transport/fetch/createFetchRouter.js +3 -6
- package/dist/esm/router/transport/fetch/routes/auth.js +9 -41
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +5 -22
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +4 -16
- package/dist/esm/router/transport/fetch/routes/sessions.js +1 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +8 -36
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +27 -79
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +4 -1
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +4 -16
- package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +2 -5
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +1 -5
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +12 -16
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +5 -8
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -1
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +4 -8
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentifier.js +12 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +2 -9
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -4
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -4
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -1
- package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
- package/dist/esm/shared-ts/src/utils/failure.js +20 -0
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +3 -12
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +2 -5
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -1
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -4
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +10 -32
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +3 -3
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +3 -9
- package/dist/esm/threshold/session/signingSessionSeal/service.js +8 -35
- package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +18 -94
- package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +6 -30
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +5 -20
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -1
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +9 -2
- package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +3 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +5 -63
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +2 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +5 -12
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -0
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -1
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +1 -10
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +3 -5
- package/dist/types/shared-ts/src/tenant-root/tenantRootIdentifier.d.ts +3 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -1
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +6 -0
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +2 -11
- package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +3 -8
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +7 -19
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
- package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -11
- package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/variant.d.ts +18 -0
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +3 -6
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +4 -2
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryPreparation.d.ts +15 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +3 -4
- package/dist/types/wallet-server/src/authorization/domain.d.ts +13 -2
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +27 -3
- package/dist/types/wallet-server/src/authorization/service.d.ts +19 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +2 -2
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +1 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/exportReplayGuard.d.ts +3 -0
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +8 -101
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +8 -0
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -1
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +2 -10
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +1 -1
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +3 -10
- package/dist/types/wallet-server/src/core/d1EcdsaSignerRead.d.ts +39 -0
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +10 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +3 -4
- package/dist/types/wallet-server/src/core/ecdsaMaterialReadSnapshot.d.ts +19 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +3 -5
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +1 -2
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +2 -11
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +2 -19
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +3 -11
- package/dist/types/wallet-server/src/core/types.d.ts +2 -6
- package/dist/types/wallet-server/src/localIntendedMaterialAdmissionFault.d.ts +38 -0
- package/dist/types/wallet-server/src/localIntendedPresignCancellation.d.ts +4 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +4 -9
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +15 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +10 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +19 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +2 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +5 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +2 -9
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +5 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +4 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +2 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +8 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +14 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +10 -39
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +8 -34
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +3 -15
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +9 -50
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +1 -13
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +8 -9
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +3 -4
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +7 -16
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +2 -7
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +3 -1
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +25 -4
- package/dist/types/wallet-server/src/router/framework/http.d.ts +1 -0
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +1 -9
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +3 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +3 -5
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +0 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +1 -2
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +6 -8
- package/package.json +1 -1
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { isPlainObject } from "../shared-ts/src/utils/validation.js";
|
|
2
|
+
import { sameRouterAbMpcMaterialActivationRef } from "../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
3
|
+
import { EcdsaMaterialReadSnapshot } from "./ecdsaMaterialReadSnapshot.js";
|
|
4
|
+
import { parseD1JsonColumn } from "../storage/d1Sql.js";
|
|
5
|
+
import { parseWalletEcdsaSignerRecord } from "./WalletStore.js";
|
|
6
|
+
//#region src/core/d1EcdsaSignerRead.ts
|
|
7
|
+
function prepareWalletEcdsaSignersRead(database, scope, walletId) {
|
|
8
|
+
return database.prepare(`SELECT record_json FROM wallet_signers
|
|
9
|
+
WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
|
|
10
|
+
AND wallet_id = ? AND signer_family = 'ecdsa'
|
|
11
|
+
ORDER BY signer_id`).bind(scope.namespace, scope.orgId, scope.projectId, scope.envId, walletId);
|
|
12
|
+
}
|
|
13
|
+
function parseWalletEcdsaSignerRows(rows, walletId) {
|
|
14
|
+
const signers = [];
|
|
15
|
+
for (const row of rows) {
|
|
16
|
+
const signer = parseWalletEcdsaSignerRecord(parseD1JsonColumn(row.record_json));
|
|
17
|
+
if (!signer || signer.walletId !== walletId) throw new Error("Wallet ECDSA signer record is invalid");
|
|
18
|
+
signers.push(signer);
|
|
19
|
+
}
|
|
20
|
+
return signers;
|
|
21
|
+
}
|
|
22
|
+
/** Parsed persistence evidence; material failures are surfaced after session validation. */
|
|
23
|
+
var EcdsaMaterialRead = class EcdsaMaterialRead {
|
|
24
|
+
#result;
|
|
25
|
+
constructor(walletId, scope, activation, result, linkedSnapshot) {
|
|
26
|
+
this.walletId = walletId;
|
|
27
|
+
this.scope = scope;
|
|
28
|
+
this.activation = activation;
|
|
29
|
+
this.linkedSnapshot = linkedSnapshot;
|
|
30
|
+
this.#result = result;
|
|
31
|
+
}
|
|
32
|
+
static fromRows(scope, walletId, activation, rows, linkedSnapshot) {
|
|
33
|
+
try {
|
|
34
|
+
if (!Array.isArray(rows)) throw new Error("ECDSA material rows are invalid");
|
|
35
|
+
const storedRows = [];
|
|
36
|
+
const matches = [];
|
|
37
|
+
for (const raw of rows) {
|
|
38
|
+
if (!isPlainObject(raw) || typeof raw.record_json !== "string") throw new Error("ECDSA material row is invalid");
|
|
39
|
+
storedRows.push({ record_json: raw.record_json });
|
|
40
|
+
const signer = parseWalletEcdsaSignerRecord(parseD1JsonColumn(raw.record_json));
|
|
41
|
+
if (signer && signer.walletId === walletId && sameRouterAbMpcMaterialActivationRef(signer.walletKey.publicCapability.material_activation, activation)) matches.push(signer);
|
|
42
|
+
}
|
|
43
|
+
const signer = matches[0];
|
|
44
|
+
if (!signer) return new EcdsaMaterialRead(walletId, scope, activation, {
|
|
45
|
+
ok: true,
|
|
46
|
+
value: null
|
|
47
|
+
}, linkedSnapshot);
|
|
48
|
+
for (const other of matches) if (!signer.walletKey.keyHandle || other.walletKey.keyHandle !== signer.walletKey.keyHandle) throw new Error("Wallet has conflicting ECDSA material activations");
|
|
49
|
+
return new EcdsaMaterialRead(walletId, scope, activation, {
|
|
50
|
+
ok: true,
|
|
51
|
+
value: {
|
|
52
|
+
signer,
|
|
53
|
+
readSnapshot: EcdsaMaterialReadSnapshot.canonical(scope, walletId, activation.activation_id, storedRows)
|
|
54
|
+
}
|
|
55
|
+
}, linkedSnapshot);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
return new EcdsaMaterialRead(walletId, scope, activation, {
|
|
58
|
+
ok: false,
|
|
59
|
+
message: error instanceof Error ? error.message : "ECDSA material read failed"
|
|
60
|
+
}, linkedSnapshot);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
resolveLinked(scope, walletId, activation) {
|
|
64
|
+
this.resolve(scope, walletId, activation);
|
|
65
|
+
return this.linkedSnapshot;
|
|
66
|
+
}
|
|
67
|
+
resolve(scope, walletId, activation) {
|
|
68
|
+
if (walletId !== this.walletId || !sameRouterAbMpcMaterialActivationRef(activation, this.activation) || scope.namespace !== this.scope.namespace || scope.orgId !== this.scope.orgId || scope.projectId !== this.scope.projectId || scope.envId !== this.scope.envId) throw new Error("ECDSA material read scope does not match");
|
|
69
|
+
if (!this.#result.ok) throw new Error(this.#result.message);
|
|
70
|
+
return this.#result.value;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//#endregion
|
|
74
|
+
export { EcdsaMaterialRead, parseWalletEcdsaSignerRows, prepareWalletEcdsaSignersRead };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=d1EcdsaSignerRead.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import "../shared-ts/src/utils/validation.js";
|
|
3
|
+
import { failure } from "../shared-ts/src/utils/failure.js";
|
|
3
4
|
import { d1ChangedRows } from "../storage/d1Sql.js";
|
|
4
5
|
import { D1TenantTable, ensureD1Schema } from "./d1TenantStore.js";
|
|
5
6
|
//#region src/core/d1IdentityStore.ts
|
|
@@ -112,16 +113,8 @@ var D1IdentityStore = class {
|
|
|
112
113
|
await this.table.ensureSchema();
|
|
113
114
|
const userId = normalizeOptionalTrimmedString(input.userId);
|
|
114
115
|
const subject = normalizeOptionalTrimmedString(input.subject);
|
|
115
|
-
if (!userId) return
|
|
116
|
-
|
|
117
|
-
code: "invalid_args",
|
|
118
|
-
message: "Missing userId"
|
|
119
|
-
};
|
|
120
|
-
if (!subject) return {
|
|
121
|
-
ok: false,
|
|
122
|
-
code: "invalid_args",
|
|
123
|
-
message: "Missing subject"
|
|
124
|
-
};
|
|
116
|
+
if (!userId) return failure("invalid_args", "Missing userId");
|
|
117
|
+
if (!subject) return failure("invalid_args", "Missing subject");
|
|
125
118
|
const now = this.now().getTime();
|
|
126
119
|
const existing = await this.table.prepare(`SELECT user_id, created_at_ms
|
|
127
120
|
FROM identity_links
|
|
@@ -135,11 +128,7 @@ var D1IdentityStore = class {
|
|
|
135
128
|
const existingCreatedAtMs = Number(existing?.created_at_ms);
|
|
136
129
|
const createdAtMs = Number.isFinite(existingCreatedAtMs) && existingCreatedAtMs > 0 ? Math.floor(existingCreatedAtMs) : now;
|
|
137
130
|
if (existingUserId && existingUserId !== userId) {
|
|
138
|
-
if (!input.allowMoveIfSoleIdentity) return
|
|
139
|
-
ok: false,
|
|
140
|
-
code: "already_linked",
|
|
141
|
-
message: "Subject is already linked to a different user"
|
|
142
|
-
};
|
|
131
|
+
if (!input.allowMoveIfSoleIdentity) return failure("already_linked", "Subject is already linked to a different user");
|
|
143
132
|
if (d1ChangedRows(await this.table.database.prepare(`UPDATE identity_links
|
|
144
133
|
SET user_id = ?,
|
|
145
134
|
record_json = ?,
|
|
@@ -167,16 +156,8 @@ var D1IdentityStore = class {
|
|
|
167
156
|
ok: true,
|
|
168
157
|
movedFromUserId: existingUserId
|
|
169
158
|
};
|
|
170
|
-
if (parseSubjectCount((await this.table.prepare(SUBJECT_COUNT_SQL, [existingUserId]).first())?.subject_count) !== 1) return
|
|
171
|
-
|
|
172
|
-
code: "already_linked",
|
|
173
|
-
message: "Subject is linked to a different user with other identities; merge is not allowed"
|
|
174
|
-
};
|
|
175
|
-
return {
|
|
176
|
-
ok: false,
|
|
177
|
-
code: "already_linked",
|
|
178
|
-
message: "Subject is already linked to a different user"
|
|
179
|
-
};
|
|
159
|
+
if (parseSubjectCount((await this.table.prepare(SUBJECT_COUNT_SQL, [existingUserId]).first())?.subject_count) !== 1) return failure("already_linked", "Subject is linked to a different user with other identities; merge is not allowed");
|
|
160
|
+
return failure("already_linked", "Subject is already linked to a different user");
|
|
180
161
|
}
|
|
181
162
|
await this.table.prepare(`INSERT INTO identity_links (
|
|
182
163
|
namespace,
|
|
@@ -209,31 +190,15 @@ var D1IdentityStore = class {
|
|
|
209
190
|
]).run();
|
|
210
191
|
const finalUserId = await this.getUserIdBySubject(subject);
|
|
211
192
|
if (finalUserId === userId) return { ok: true };
|
|
212
|
-
if (finalUserId) return
|
|
213
|
-
|
|
214
|
-
code: "already_linked",
|
|
215
|
-
message: "Subject is already linked to a different user"
|
|
216
|
-
};
|
|
217
|
-
return {
|
|
218
|
-
ok: false,
|
|
219
|
-
code: "internal",
|
|
220
|
-
message: "Failed to link identity"
|
|
221
|
-
};
|
|
193
|
+
if (finalUserId) return failure("already_linked", "Subject is already linked to a different user");
|
|
194
|
+
return failure("internal", "Failed to link identity");
|
|
222
195
|
}
|
|
223
196
|
async unlinkSubjectFromUserId(input) {
|
|
224
197
|
await this.table.ensureSchema();
|
|
225
198
|
const userId = normalizeOptionalTrimmedString(input.userId);
|
|
226
199
|
const subject = normalizeOptionalTrimmedString(input.subject);
|
|
227
|
-
if (!userId) return
|
|
228
|
-
|
|
229
|
-
code: "invalid_args",
|
|
230
|
-
message: "Missing userId"
|
|
231
|
-
};
|
|
232
|
-
if (!subject) return {
|
|
233
|
-
ok: false,
|
|
234
|
-
code: "invalid_args",
|
|
235
|
-
message: "Missing subject"
|
|
236
|
-
};
|
|
200
|
+
if (!userId) return failure("invalid_args", "Missing userId");
|
|
201
|
+
if (!subject) return failure("invalid_args", "Missing subject");
|
|
237
202
|
if (d1ChangedRows(await this.table.database.prepare(`DELETE FROM identity_links
|
|
238
203
|
WHERE namespace = ?
|
|
239
204
|
AND org_id = ?
|
|
@@ -250,44 +215,20 @@ var D1IdentityStore = class {
|
|
|
250
215
|
AND env_id = ?
|
|
251
216
|
AND user_id = ?
|
|
252
217
|
) > 1`).bind(this.table.scope.namespace, this.table.scope.orgId, this.table.scope.projectId, this.table.scope.envId, subject, userId, this.table.scope.namespace, this.table.scope.orgId, this.table.scope.projectId, this.table.scope.envId, userId).run()) > 0) return { ok: true };
|
|
253
|
-
if (await this.getUserIdBySubject(subject) !== userId) return
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
message: "Subject is not linked to this user"
|
|
257
|
-
};
|
|
258
|
-
if (parseSubjectCount((await this.table.prepare(SUBJECT_COUNT_SQL, [userId]).first())?.subject_count) <= 1) return {
|
|
259
|
-
ok: false,
|
|
260
|
-
code: "cannot_unlink_last_identity",
|
|
261
|
-
message: "Refusing to remove the last remaining identity"
|
|
262
|
-
};
|
|
263
|
-
return {
|
|
264
|
-
ok: false,
|
|
265
|
-
code: "internal",
|
|
266
|
-
message: "Failed to unlink identity"
|
|
267
|
-
};
|
|
218
|
+
if (await this.getUserIdBySubject(subject) !== userId) return failure("not_found", "Subject is not linked to this user");
|
|
219
|
+
if (parseSubjectCount((await this.table.prepare(SUBJECT_COUNT_SQL, [userId]).first())?.subject_count) <= 1) return failure("cannot_unlink_last_identity", "Refusing to remove the last remaining identity");
|
|
220
|
+
return failure("internal", "Failed to unlink identity");
|
|
268
221
|
}
|
|
269
222
|
async deleteSubjectLinkForDevCleanup(input) {
|
|
270
223
|
await this.table.ensureSchema();
|
|
271
224
|
const userId = normalizeOptionalTrimmedString(input.userId);
|
|
272
225
|
const subject = normalizeOptionalTrimmedString(input.subject);
|
|
273
|
-
if (!userId) return
|
|
274
|
-
|
|
275
|
-
code: "invalid_args",
|
|
276
|
-
message: "Missing userId"
|
|
277
|
-
};
|
|
278
|
-
if (!subject) return {
|
|
279
|
-
ok: false,
|
|
280
|
-
code: "invalid_args",
|
|
281
|
-
message: "Missing subject"
|
|
282
|
-
};
|
|
226
|
+
if (!userId) return failure("invalid_args", "Missing userId");
|
|
227
|
+
if (!subject) return failure("invalid_args", "Missing subject");
|
|
283
228
|
if (await this.deleteIdentityLink({
|
|
284
229
|
userId,
|
|
285
230
|
subject
|
|
286
|
-
}) === 0) return
|
|
287
|
-
ok: false,
|
|
288
|
-
code: "not_found",
|
|
289
|
-
message: "Subject is not linked to this user"
|
|
290
|
-
};
|
|
231
|
+
}) === 0) return failure("not_found", "Subject is not linked to this user");
|
|
291
232
|
return { ok: true };
|
|
292
233
|
}
|
|
293
234
|
async deleteIdentityLink(input) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import "../shared-ts/src/utils/validation.js";
|
|
3
|
-
import { formatD1ExecStatement } from "../storage/d1Sql.js";
|
|
4
3
|
import "./defaultConfigsServer.js";
|
|
5
4
|
import { toPrefixWithColon } from "./ThresholdService/validation.js";
|
|
5
|
+
import { formatD1ExecStatement } from "../storage/d1Sql.js";
|
|
6
6
|
//#region src/core/d1TenantStore.ts
|
|
7
7
|
/**
|
|
8
8
|
* A store's key prefix, which is also its D1 namespace: the first of `explicitKeys` set in
|
|
@@ -5,10 +5,11 @@ import { sameRouterAbMpcMaterialActivationRef } from "../shared-ts/src/utils/rou
|
|
|
5
5
|
import { parseRouterAbEd25519YaoRecoveryActivationResultV1, parseRouterAbEd25519YaoRecoveryAdmissionRequestV1, parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1, parseRouterAbEd25519YaoRegistrationActivationResultV1, parseRouterAbEd25519YaoRegistrationAdmissionRequestV1 } from "../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
6
6
|
import { normalizeRuntimePolicyScope, signingRootScopeFromRuntimePolicyScope } from "../shared-ts/src/threshold/signingRootScope.js";
|
|
7
7
|
import { sameRouterAbEcdsaDerivationPublicCapabilityV1 } from "../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
8
|
-
import { D1_BATCH_CAS_GUARD_SQL, formatD1ExecStatement, parseD1JsonColumn } from "../storage/d1Sql.js";
|
|
9
|
-
import { thresholdEcdsaChainTargetKey } from "./thresholdEcdsaChainTarget.js";
|
|
10
8
|
import { normalizeThresholdEd25519ParticipantIds } from "../shared-ts/src/threshold/participants.js";
|
|
9
|
+
import { D1_BATCH_CAS_GUARD_SQL, formatD1ExecStatement, parseD1JsonColumn } from "../storage/d1Sql.js";
|
|
10
|
+
import { thresholdEcdsaChainTargetKey } from "../shared-ts/src/utils/thresholdEcdsaChainTarget.js";
|
|
11
11
|
import { ecdsaPostRegistrationRequestMatchesCapability, parseWalletEcdsaPendingSessionActivationRecord, parseWalletEcdsaSignerRecord } from "./WalletStore.js";
|
|
12
|
+
import { EcdsaMaterialRead, parseWalletEcdsaSignerRows, prepareWalletEcdsaSignersRead } from "./d1EcdsaSignerRead.js";
|
|
12
13
|
//#region src/core/d1WalletStore.ts
|
|
13
14
|
function sameD1WalletRuntimePolicyScopeV1(left, right) {
|
|
14
15
|
return left.orgId === right.orgId && left.projectId === right.projectId && left.envId === right.envId && left.signingRootVersion === right.signingRootVersion;
|
|
@@ -455,10 +456,18 @@ var D1WalletStore = class {
|
|
|
455
456
|
return matches[0] ?? null;
|
|
456
457
|
}
|
|
457
458
|
async getEcdsaSignerByMaterialActivation(input) {
|
|
459
|
+
return (await this.readEcdsaSignerMaterialSnapshot({
|
|
460
|
+
walletId: input.walletId,
|
|
461
|
+
materialActivation: input.materialActivation,
|
|
462
|
+
source: { kind: "database" }
|
|
463
|
+
}))?.signer ?? null;
|
|
464
|
+
}
|
|
465
|
+
async readEcdsaSignerMaterialSnapshot(input) {
|
|
466
|
+
if (input.source.kind === "credential_snapshot") return input.source.materialRead.resolve(this.scope, input.walletId, input.materialActivation);
|
|
458
467
|
await this.ensureSchema();
|
|
459
468
|
const walletId = normalizeOptionalTrimmedString(input.walletId);
|
|
460
469
|
if (!walletId) return null;
|
|
461
|
-
const
|
|
470
|
+
const result = await this.database.prepare(`SELECT record_json
|
|
462
471
|
FROM wallet_signers
|
|
463
472
|
WHERE namespace = ?
|
|
464
473
|
AND org_id = ?
|
|
@@ -469,12 +478,8 @@ var D1WalletStore = class {
|
|
|
469
478
|
AND json_extract(
|
|
470
479
|
record_json,
|
|
471
480
|
'$.walletKey.publicCapability.material_activation.activation_id'
|
|
472
|
-
) =
|
|
473
|
-
|
|
474
|
-
if (matches.length === 0) return null;
|
|
475
|
-
const keyHandle = matches[0]?.walletKey.keyHandle;
|
|
476
|
-
if (!keyHandle || matches.some((record) => record.walletKey.keyHandle !== keyHandle)) throw new Error("Wallet has conflicting ECDSA material activations");
|
|
477
|
-
return matches[0] ?? null;
|
|
481
|
+
) = ?`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, walletId, input.materialActivation.activation_id).all();
|
|
482
|
+
return EcdsaMaterialRead.fromRows(this.scope, input.walletId, input.materialActivation, result.results ?? [], null).resolve(this.scope, input.walletId, input.materialActivation);
|
|
478
483
|
}
|
|
479
484
|
async getEcdsaSignerByPostRegistrationRequest(input) {
|
|
480
485
|
await this.ensureSchema();
|
|
@@ -503,22 +508,7 @@ var D1WalletStore = class {
|
|
|
503
508
|
}
|
|
504
509
|
async listEcdsaSignersForWallet(input) {
|
|
505
510
|
await this.ensureSchema();
|
|
506
|
-
|
|
507
|
-
FROM wallet_signers
|
|
508
|
-
WHERE namespace = ?
|
|
509
|
-
AND org_id = ?
|
|
510
|
-
AND project_id = ?
|
|
511
|
-
AND env_id = ?
|
|
512
|
-
AND wallet_id = ?
|
|
513
|
-
AND signer_family = 'ecdsa'
|
|
514
|
-
ORDER BY signer_id`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, input.walletId).all();
|
|
515
|
-
const signers = [];
|
|
516
|
-
for (const row of result.results || []) {
|
|
517
|
-
const signer = parseWalletEcdsaSignerRecord(parseD1JsonColumn(row.record_json));
|
|
518
|
-
if (!signer || signer.walletId !== input.walletId) throw new Error("Wallet ECDSA signer record is invalid");
|
|
519
|
-
signers.push(signer);
|
|
520
|
-
}
|
|
521
|
-
return signers;
|
|
511
|
+
return parseWalletEcdsaSignerRows((await prepareWalletEcdsaSignersRead(this.database, this.scope, input.walletId).all()).results ?? [], input.walletId);
|
|
522
512
|
}
|
|
523
513
|
async listEcdsaPendingSessionActivationsForLifecycle(input) {
|
|
524
514
|
await this.ensureSchema();
|
|
@@ -4,7 +4,7 @@ import { sha256BytesUtf8 } from "../../shared-ts/src/utils/digests.js";
|
|
|
4
4
|
import { parseDigestB64u, sha256Utf8DigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
5
|
import { requireRecord } from "../../shared-ts/src/utils/validation.js";
|
|
6
6
|
import { rejectUnknownFields } from "../../shared-ts/src/utils/exactRecord.js";
|
|
7
|
-
import { parseUnixMs } from "../../shared-ts/src/passkey-custody/primitives.js";
|
|
7
|
+
import { parseUnixMs, requireParsed } from "../../shared-ts/src/passkey-custody/primitives.js";
|
|
8
8
|
//#region src/core/deviceLinking/linkedDeviceEmailOtpGrant.ts
|
|
9
9
|
/**
|
|
10
10
|
* The durable one-time Email OTP verification grant.
|
|
@@ -203,10 +203,6 @@ function requireGrantDigest(raw, label) {
|
|
|
203
203
|
throw new Error(`${label} ${error instanceof Error ? error.message : "is invalid"}`);
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
|
-
function requireParsed(parsed, label) {
|
|
207
|
-
if (!parsed.ok) throw new Error(`${label} ${parsed.error.message}`);
|
|
208
|
-
return parsed.value;
|
|
209
|
-
}
|
|
210
206
|
//#endregion
|
|
211
207
|
export { computeLinkedDeviceEmailOtpAuthorityDigestV1, computeLinkedDeviceEmailOtpChallengeBindingDigestV1, computeLinkedDeviceEmailOtpGrantTokenDigestV1, linkedDeviceEmailOtpDescriptorCredentialIdV1, linkedDeviceEmailOtpGrantAdmitsUseV1, parseLinkedDeviceEmailOtpGrantRecordV1 };
|
|
212
208
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mpcMaterialActivationRefsEqual } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { hasDelegatedWalletPermissionV1, sameDelegatedWalletAuthorityV1, validateDelegatedWalletAuthorityAttenuationV1 } from "../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
3
3
|
import { routerAbMpcMaterialActivationRefFromWire, sameRouterAbMpcMaterialActivationRef } from "../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
4
|
+
import { sameRouterAbEd25519YaoByteSequence } from "../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
4
5
|
import { assertLinkedDeviceOrdinaryMaterialSourceContributionMatchesContextV1 } from "../../shared-ts/src/device-linking/sourceContribution.js";
|
|
5
6
|
import { parseDeviceIdValue } from "./linkedDeviceSessionRecord.js";
|
|
6
7
|
//#region src/core/deviceLinking/linkedDeviceSessionApproval.ts
|
|
@@ -93,9 +94,6 @@ function linkedDeviceOwnerAuthorizationsEqualV1(left, right) {
|
|
|
93
94
|
function linkedDeviceEd25519BindingsEqualV1(left, right) {
|
|
94
95
|
return left.operation === right.operation && sameRouterAbEd25519YaoByteSequence(left.session_id, right.session_id) && sameRouterAbEd25519YaoByteSequence(left.stable_key_context_binding, right.stable_key_context_binding) && sameRouterAbMpcMaterialActivationRef(left.material_activation, right.material_activation) && left.lifecycle.lifecycle_id === right.lifecycle.lifecycle_id && left.lifecycle.work_kind === right.lifecycle.work_kind && left.lifecycle.primitive_request_kind === right.lifecycle.primitive_request_kind && left.lifecycle.root_share_epoch === right.lifecycle.root_share_epoch && left.lifecycle.account_id === right.lifecycle.account_id && left.lifecycle.session_id === right.lifecycle.session_id && left.lifecycle.signer_set_id === right.lifecycle.signer_set_id && left.lifecycle.selected_server_id === right.lifecycle.selected_server_id;
|
|
95
96
|
}
|
|
96
|
-
function sameRouterAbEd25519YaoByteSequence(left, right) {
|
|
97
|
-
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
98
|
-
}
|
|
99
97
|
//#endregion
|
|
100
98
|
export { validateApprovalMatchesSession, validateLinkedDeviceRequestedAuthorityV1, validateSourceContributionApprovalMatchesSession, validateSourceContributionPreparationMatchesApproval };
|
|
101
99
|
|
|
@@ -6,7 +6,7 @@ import { requireRecordCopy } from "../../shared-ts/src/utils/validation.js";
|
|
|
6
6
|
import { sameDelegatedWalletAuthorityV1 } from "../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
7
7
|
import { parseExactAdministeredSignerManifestV1 } from "../../shared-ts/src/device-linking/delegatedActivationPlan.js";
|
|
8
8
|
import { parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1 } from "../../shared-ts/src/device-linking/sourceContribution.js";
|
|
9
|
-
import { parseLinkSessionStateV1, parseLinkedDeviceApprovalV1
|
|
9
|
+
import { parseLinkSessionStateV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceSessionClaimV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../shared-ts/src/device-linking/parsers.js";
|
|
10
10
|
import "../../shared-ts/src/device-linking/requestProof.js";
|
|
11
11
|
//#region src/core/deviceLinking/linkedDeviceSessionRecord.ts
|
|
12
12
|
function sourceKeyManifestDigestForFamilyV1(digests, keyFamily) {
|
|
@@ -377,19 +377,13 @@ function assertNeverLinkedDeviceEmailOtpChallengeV1(value) {
|
|
|
377
377
|
function assertNeverLinkPrecommitFailureV1(value) {
|
|
378
378
|
throw new Error(`unsupported linked-device precommit failure: ${String(value)}`);
|
|
379
379
|
}
|
|
380
|
-
function parseLinkedDeviceApprovalV1(raw) {
|
|
381
|
-
return parseLinkedDeviceApprovalV1$1(raw);
|
|
382
|
-
}
|
|
383
|
-
function parseLinkedDeviceClaimV1(raw) {
|
|
384
|
-
return parseLinkedDeviceSessionClaimV1(raw);
|
|
385
|
-
}
|
|
386
380
|
function parseOptionalClaimTranscript(raw) {
|
|
387
381
|
if (raw === void 0) return void 0;
|
|
388
382
|
const record = requireRecordCopy(raw, "claimTranscript");
|
|
389
383
|
requireExactKeys(record, ["digestB64u", "value"]);
|
|
390
384
|
return {
|
|
391
385
|
digestB64u: requireDigest(record.digestB64u, "claimTranscript.digestB64u"),
|
|
392
|
-
value:
|
|
386
|
+
value: parseLinkedDeviceSessionClaimV1(record.value)
|
|
393
387
|
};
|
|
394
388
|
}
|
|
395
389
|
/**
|
|
@@ -2,6 +2,7 @@ import { parseLinkDeviceSessionId } from "../../shared-ts/src/utils/domainIds.js
|
|
|
2
2
|
import { base64UrlDecode, base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { parseDigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
4
|
import { LINKED_DEVICE_CLOCK_SKEW_TOLERANCE_MS_V1, LINKED_DEVICE_REQUEST_PROOF_HEADER_V1, LINKED_DEVICE_REQUEST_PROOF_MAX_TTL_MS_V1, computeLinkedDevicePublicKeyDigestV1, computeLinkedDeviceRequestProofDigestV1, encodeLinkedDeviceRequestProofV1 } from "../../shared-ts/src/device-linking/requestProof.js";
|
|
5
|
+
import { hasExactKeys } from "../../shared-ts/src/utils/exactKeys.js";
|
|
5
6
|
//#region src/core/deviceLinking/requestProof.ts
|
|
6
7
|
var LinkedDeviceRequestProofVerifierV1 = class {
|
|
7
8
|
constructor(input) {
|
|
@@ -62,7 +63,18 @@ var LinkedDeviceRequestProofVerifierV1 = class {
|
|
|
62
63
|
};
|
|
63
64
|
function parseLinkedDeviceRequestProofV1(raw) {
|
|
64
65
|
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) throw new Error("linked-device request proof must be an object");
|
|
65
|
-
if (!
|
|
66
|
+
if (!hasExactKeys(raw, [
|
|
67
|
+
"kind",
|
|
68
|
+
"linkSessionId",
|
|
69
|
+
"devicePublicKeyDigestB64u",
|
|
70
|
+
"requestNonceB64u",
|
|
71
|
+
"method",
|
|
72
|
+
"canonicalPath",
|
|
73
|
+
"bodyDigestB64u",
|
|
74
|
+
"issuedAtMs",
|
|
75
|
+
"expiresAtMs",
|
|
76
|
+
"signatureB64u"
|
|
77
|
+
])) throw new Error("record contains invalid fields");
|
|
66
78
|
const record = raw;
|
|
67
79
|
if (record.kind !== "linked_device_request_proof_v1") throw new Error("linked-device request proof kind is invalid");
|
|
68
80
|
const linkSessionId = parseSessionId(record.linkSessionId);
|
|
@@ -152,9 +164,6 @@ function parseFixedB64u(raw, expectedBytes, field) {
|
|
|
152
164
|
function toArrayBuffer(bytes) {
|
|
153
165
|
return bytes.slice().buffer;
|
|
154
166
|
}
|
|
155
|
-
function isLinkedDeviceRequestProofRecordV1(value) {
|
|
156
|
-
return Object.keys(value).sort().join("|") === "bodyDigestB64u|canonicalPath|devicePublicKeyDigestB64u|expiresAtMs|issuedAtMs|kind|linkSessionId|method|requestNonceB64u|signatureB64u";
|
|
157
|
-
}
|
|
158
167
|
function errorMessage(error) {
|
|
159
168
|
return error instanceof Error ? error.message : String(error || "invalid device request proof");
|
|
160
169
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
//#region src/core/ecdsaMaterialReadSnapshot.ts
|
|
2
|
+
const ECDSA_INSTALLATION_SNAPSHOT_COLUMNS = [
|
|
3
|
+
"link_session_id",
|
|
4
|
+
"authority_id",
|
|
5
|
+
"wallet_id",
|
|
6
|
+
"auth_method_id",
|
|
7
|
+
"device_id",
|
|
8
|
+
"package_set_digest_b64u",
|
|
9
|
+
"target_factor_verification_digest_b64u",
|
|
10
|
+
"target_factor_verified_at_ms",
|
|
11
|
+
"source_manifest_digest_b64u",
|
|
12
|
+
"delivery_recipient_public_key_b64u",
|
|
13
|
+
"packages_json",
|
|
14
|
+
"server_reservation_ids_json",
|
|
15
|
+
"installed_record_set_digest_b64u",
|
|
16
|
+
"activated_at_ms"
|
|
17
|
+
];
|
|
18
|
+
/** Request-local evidence of the exact records a material resolver examined. */
|
|
19
|
+
var EcdsaMaterialReadSnapshot = class EcdsaMaterialReadSnapshot {
|
|
20
|
+
#scope;
|
|
21
|
+
#conditions;
|
|
22
|
+
constructor(walletId, scope, conditions) {
|
|
23
|
+
this.walletId = walletId;
|
|
24
|
+
this.#scope = scope;
|
|
25
|
+
this.#conditions = conditions;
|
|
26
|
+
}
|
|
27
|
+
static canonical(scope, walletId, activationId, rows) {
|
|
28
|
+
return new EcdsaMaterialReadSnapshot(walletId, scope, [recordSetCondition("wallet_signers", scope, walletId, ["record_json"], rows, "signer_family = 'ecdsa' AND json_extract(record_json, '$.walletKey.publicCapability.material_activation.activation_id') = ?", [activationId])]);
|
|
29
|
+
}
|
|
30
|
+
static linked(scope, walletId, installations, signers) {
|
|
31
|
+
return new EcdsaMaterialReadSnapshot(walletId, scope, [recordSetCondition("linked_device_authority_installations", scope, walletId, ECDSA_INSTALLATION_SNAPSHOT_COLUMNS, installations, "1", []), recordSetCondition("wallet_signers", scope, walletId, ["record_json"], signers, "signer_family = 'ecdsa'", [])]);
|
|
32
|
+
}
|
|
33
|
+
condition(scope) {
|
|
34
|
+
if (scope.namespace !== this.#scope.namespace || scope.orgId !== this.#scope.orgId || scope.projectId !== this.#scope.projectId || scope.envId !== this.#scope.envId) return {
|
|
35
|
+
sql: "0",
|
|
36
|
+
bindings: []
|
|
37
|
+
};
|
|
38
|
+
const clauses = [];
|
|
39
|
+
const bindings = [];
|
|
40
|
+
for (const condition of this.#conditions) {
|
|
41
|
+
clauses.push(`(${condition.sql})`);
|
|
42
|
+
bindings.push(...condition.bindings);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
sql: clauses.join(" AND "),
|
|
46
|
+
bindings
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
function recordSetCondition(table, scope, walletId, columns, rows, filter, filterBindings) {
|
|
51
|
+
const values = [];
|
|
52
|
+
for (const row of rows) {
|
|
53
|
+
const tuple = [];
|
|
54
|
+
for (const column of columns) {
|
|
55
|
+
const value = row[column];
|
|
56
|
+
if (value !== null && typeof value !== "string" && typeof value !== "number") throw new Error(`Invalid stored material column: ${column}`);
|
|
57
|
+
tuple.push(value);
|
|
58
|
+
}
|
|
59
|
+
values.push(tuple);
|
|
60
|
+
}
|
|
61
|
+
const predicate = `namespace = ? AND org_id = ? AND project_id = ? AND env_id = ? AND wallet_id = ? AND ${filter}`;
|
|
62
|
+
const identity = [
|
|
63
|
+
scope.namespace,
|
|
64
|
+
scope.orgId,
|
|
65
|
+
scope.projectId,
|
|
66
|
+
scope.envId,
|
|
67
|
+
walletId,
|
|
68
|
+
...filterBindings
|
|
69
|
+
];
|
|
70
|
+
return {
|
|
71
|
+
sql: `(SELECT COUNT(*) FROM ${table} WHERE ${predicate}) = ?
|
|
72
|
+
AND NOT EXISTS (SELECT 1 FROM ${table} WHERE ${predicate}
|
|
73
|
+
AND json_array(${columns.join(", ")}) NOT IN (SELECT value FROM json_each(?)))`,
|
|
74
|
+
bindings: [
|
|
75
|
+
...identity,
|
|
76
|
+
rows.length,
|
|
77
|
+
...identity,
|
|
78
|
+
JSON.stringify(values)
|
|
79
|
+
]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
export { ECDSA_INSTALLATION_SNAPSHOT_COLUMNS, EcdsaMaterialReadSnapshot };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=ecdsaMaterialReadSnapshot.js.map
|
|
@@ -4,6 +4,7 @@ import { base58Encode } from "../shared-ts/src/utils/base58.js";
|
|
|
4
4
|
import "../shared-ts/src/utils/encoders.js";
|
|
5
5
|
import { deriveImplicitNearAccountIdFromEd25519PublicKey, parseImplicitNearAccountId, parseNamedNearAccountId } from "../shared-ts/src/utils/near.js";
|
|
6
6
|
import { coerceNonEmptyString, requireRecordOrArray } from "../shared-ts/src/utils/validation.js";
|
|
7
|
+
import { failure } from "../shared-ts/src/utils/failure.js";
|
|
7
8
|
import { ActionType, validateActionArgsWasm } from "../shared-ts/src/near/actions.js";
|
|
8
9
|
import { errorMessage } from "../shared-ts/src/utils/errors.js";
|
|
9
10
|
import { toPublicKeyStringFromSecretKey } from "./nearKeys.js";
|
|
@@ -265,11 +266,7 @@ async function fundImplicitNearAccountWithRelayer(input) {
|
|
|
265
266
|
message: "Implicit NEAR account funding transaction submitted"
|
|
266
267
|
};
|
|
267
268
|
} catch (error) {
|
|
268
|
-
return
|
|
269
|
-
ok: false,
|
|
270
|
-
code: "funding_failed",
|
|
271
|
-
message: errorMessage(error) || "Failed to fund implicit NEAR account"
|
|
272
|
-
};
|
|
269
|
+
return failure("funding_failed", errorMessage(error) || "Failed to fund implicit NEAR account");
|
|
273
270
|
}
|
|
274
271
|
}
|
|
275
272
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseEmailOtpProviderUserId, parseLaneShareEpoch, parseMpcSigningWorkerRef, parseSigningLaneId, parseWalletKeyId, parseWebAuthnCredentialIdB64u } from "../../shared-ts/src/utils/domainIds.js";
|
|
1
|
+
import { mpcMaterialActivationRefsEqual, parseEmailOtpProviderUserId, parseLaneShareEpoch, parseMpcSigningWorkerRef, parseSigningLaneId, parseWalletKeyId, parseWebAuthnCredentialIdB64u } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { alphabetizeStringify } from "../../shared-ts/src/utils/digests.js";
|
|
4
4
|
import { parseDigestB64u, sha256Utf8DigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
@@ -218,13 +218,13 @@ function requireOnlyEcdsaSigners(signers) {
|
|
|
218
218
|
function signerMatchesMaterialActivation(signer, expected) {
|
|
219
219
|
const wire = signer.version === "wallet_signer_ed25519_v1" ? signer.activeYaoCapability.activationResult.public_receipt.material_activation : signer.walletKey.publicCapability.material_activation;
|
|
220
220
|
try {
|
|
221
|
-
return
|
|
221
|
+
return mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(wire), expected);
|
|
222
222
|
} catch {
|
|
223
223
|
return false;
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
function assertExpectedActivation(wire, expected) {
|
|
227
|
-
if (!
|
|
227
|
+
if (!mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(wire), expected)) throw new Error("wallet signer material activation changed");
|
|
228
228
|
}
|
|
229
229
|
function assertEcdsaReceiptContinuity(signer) {
|
|
230
230
|
const capability = signer.walletKey.publicCapability;
|
|
@@ -241,9 +241,6 @@ async function digestPublicIdentity(value) {
|
|
|
241
241
|
async function digestValue(domain, value) {
|
|
242
242
|
return sha256Utf8DigestB64u(`${domain}\u0000${alphabetizeStringify(value)}`);
|
|
243
243
|
}
|
|
244
|
-
function sameMaterialActivation(left, right) {
|
|
245
|
-
return left.activationId === right.activationId && left.capability === right.capability && left.materialOwner === right.materialOwner && left.keyBinding === right.keyBinding && left.lifecycleBinding === right.lifecycleBinding && left.signingWorker === right.signingWorker;
|
|
246
|
-
}
|
|
247
244
|
function requireParsed(result) {
|
|
248
245
|
if (result.ok) return result.value;
|
|
249
246
|
throw new Error("wallet execution lane identity is invalid");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hasWhitespaceOrControlCharacters, mpcMaterialActivationRefsEqual, parseMpcMaterialActivationRef } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { parseExactAdministeredSignerManifestV1 } from "../../shared-ts/src/device-linking/delegatedActivationPlan.js";
|
|
3
3
|
import { routerAbMpcMaterialActivationRefFromWire } from "../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
4
|
-
import { parseRouterAbEd25519YaoActivationPublicReceiptV1, parseRouterAbEd25519YaoCeremonyBindingV1, parseRouterAbEd25519YaoEncryptedPackageV1, parseRouterAbEd25519YaoParticipantIdsV1 } from "../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
4
|
+
import { parseRouterAbEd25519YaoActivationPublicReceiptV1, parseRouterAbEd25519YaoCeremonyBindingV1, parseRouterAbEd25519YaoEncryptedPackageV1, parseRouterAbEd25519YaoParticipantIdsV1, sameRouterAbEd25519YaoByteSequence } from "../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
5
5
|
import { parseLinkedDeviceEcdsaEncryptedSourceContributionV1, parseLinkedDeviceEcdsaSourceContributionPackageV1, parseLinkedDeviceEcdsaSourceDerivationV1, parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1 } from "../../shared-ts/src/device-linking/sourceContribution.js";
|
|
6
6
|
//#region src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.ts
|
|
7
7
|
function validateOrdinaryInactiveSignerMaterialDeactivationRequestV1(request) {
|
|
@@ -130,7 +130,7 @@ function parseOrdinaryEd25519SignerMaterialWorkerReservationV1(request, raw) {
|
|
|
130
130
|
const activationReceipt = parseRouterAbEd25519YaoActivationPublicReceiptV1(reservation.activationReceipt);
|
|
131
131
|
assertMaterialActivationMatchesV1(request.plannedActivationRef, routerAbMpcMaterialActivationRefFromWire(activationReceipt.material_activation));
|
|
132
132
|
const clientMaterial = parseEd25519ClientMaterialV1(reservation.clientMaterial);
|
|
133
|
-
if (!
|
|
133
|
+
if (!sameRouterAbEd25519YaoByteSequence(activationReceipt.transcript, clientMaterial.deriver_a_client_package.transcript) || !sameRouterAbEd25519YaoByteSequence(activationReceipt.transcript, clientMaterial.deriver_b_client_package.transcript)) throw new Error("ordinary Ed25519 worker receipt transcript does not match client packages");
|
|
134
134
|
return {
|
|
135
135
|
kind: "ordinary_ed25519_signer_material_worker_reservation_v1",
|
|
136
136
|
keyFamily: "ed25519",
|
|
@@ -247,9 +247,6 @@ function sameEcdsaSourceSigner(left, right) {
|
|
|
247
247
|
function sameEcdsaTarget(left, right) {
|
|
248
248
|
return mpcMaterialActivationRefsEqual(left.activation, right.activation) && String(left.targetDeviceId) === String(right.targetDeviceId) && left.targetFactorVerificationDigestB64u === right.targetFactorVerificationDigestB64u && left.clientRecipientPublicKeyB64u === right.clientRecipientPublicKeyB64u && left.signingWorkerRecipientPublicKeyB64u === right.signingWorkerRecipientPublicKeyB64u;
|
|
249
249
|
}
|
|
250
|
-
function sameBytes(left, right) {
|
|
251
|
-
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
252
|
-
}
|
|
253
250
|
function parseEd25519ClientPackageV1(raw, label, expectedRole) {
|
|
254
251
|
const parsed = parseRouterAbEd25519YaoEncryptedPackageV1(raw);
|
|
255
252
|
if (!parsed.ok) throw new Error(`${label} ${parsed.message}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import { isObject, isPlainObject } from "../shared-ts/src/utils/validation.js";
|
|
3
|
-
import { resolveD1DatabaseFromConfig } from "../storage/d1Sql.js";
|
|
4
3
|
import "./defaultConfigsServer.js";
|
|
4
|
+
import { resolveD1DatabaseFromConfig } from "../storage/d1Sql.js";
|
|
5
5
|
import { d1TenantScopeFromConfig } from "./d1TenantStore.js";
|
|
6
6
|
import { RedisTcpClient, UpstashRedisRestClient, redisDel, redisGetJson, redisGetdelJson, redisSetJson } from "./ThresholdService/kv.js";
|
|
7
7
|
//#region src/core/storeBackends.ts
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { thresholdEcdsaChainTargetKey } from "../shared-ts/src/utils/thresholdEcdsaChainTarget.js";
|
|
1
2
|
//#region src/core/thresholdEcdsaChainTarget.ts
|
|
2
3
|
function positiveSafeInteger(value) {
|
|
3
4
|
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
@@ -31,9 +32,6 @@ function thresholdEcdsaChainTargetFromValue(value) {
|
|
|
31
32
|
}
|
|
32
33
|
return null;
|
|
33
34
|
}
|
|
34
|
-
function thresholdEcdsaChainTargetKey(target) {
|
|
35
|
-
return target.kind === "evm" ? `evm:eip155:${target.chainId}` : `tempo:${target.chainId}`;
|
|
36
|
-
}
|
|
37
35
|
function thresholdEcdsaChainTargetsEqual(left, right) {
|
|
38
36
|
return thresholdEcdsaChainTargetKey(left) === thresholdEcdsaChainTargetKey(right);
|
|
39
37
|
}
|
|
@@ -16,6 +16,8 @@ import { handleWalletControlRequest } from "./router/cloudflare/runtime/walletCo
|
|
|
16
16
|
import { resolveRuntimeTenantRootLineage } from "./router/cloudflare/runtime/walletConsoleTenantRootLineage.js";
|
|
17
17
|
import { ROUTER_AB_MPC_ROUTER_ORIGIN, ROUTER_AB_SIGNING_WORKER_ORIGIN, createRouterAbServiceBindingFetch } from "./router/cloudflare/runtime/routerAbServiceBindings.js";
|
|
18
18
|
import { readEnvironmentCsv, readEnvironmentString, requireEnvironmentString } from "./router/cloudflare/runtime/environment.js";
|
|
19
|
+
import { createD1LinkedDeviceSourceContributionPreparationPlannerV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js";
|
|
20
|
+
import { readD1LinkedDeviceEcdsaSourceV1, readD1LinkedDeviceEd25519SourceV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js";
|
|
19
21
|
import { RouterAbEd25519YaoExportOwnerProofAuthorizationAdapter } from "./router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js";
|
|
20
22
|
import { createRouterAbEd25519YaoHttpRegistrationBackendFromEnv } from "./router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js";
|
|
21
23
|
import { createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1 } from "./router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js";
|
|
@@ -25,8 +27,6 @@ import { handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1 } from ".
|
|
|
25
27
|
import { CloudflareD1RouterAbEd25519YaoCapabilityPersistence } from "./router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js";
|
|
26
28
|
import { createSigningSessionSealOptions } from "./threshold/session/signingSessionSeal/options.js";
|
|
27
29
|
import { createRouterAbEcdsaEd25519CeremonyTokenIssuer, createRouterAbEcdsaStrictPostRegistrationPort, createRouterAbEcdsaStrictRegistrationPort, parseRouterAbEcdsaEd25519PrivateJwk, parseRouterAbEcdsaStrictRegistrationTopology } from "./router/domains/ecdsa/routerAbEcdsaStrictRegistration.js";
|
|
28
|
-
import { createD1LinkedDeviceSourceContributionPreparationPlannerV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js";
|
|
29
|
-
import { readD1LinkedDeviceEcdsaSourceV1, readD1LinkedDeviceEd25519SourceV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js";
|
|
30
30
|
import { D1LinkedDeviceTargetCredentialProviderV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js";
|
|
31
31
|
import { createD1LinkedDeviceOwnerSourceChildReaderV1 } from "./router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js";
|
|
32
32
|
import { createCloudflareD1RouterApiAuthService } from "./router/cloudflare/d1/auth/d1RouterApiAuthService.js";
|