@seams/wallet-server 0.27.0 → 0.29.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/README.md +19 -4
- package/artifact-manifest.json +28 -13
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/dist/esm/application-auth.js +2 -0
- package/dist/esm/auth/applicationAuth.js +85 -0
- package/dist/esm/auth/externalAuthService.js +149 -0
- package/dist/esm/auth/externalAuthStore.js +353 -0
- package/dist/esm/auth/externalOwnerOperations.js +82 -0
- package/dist/esm/authorization/domain.js +2 -2
- package/dist/esm/authorization/factorEvidence.js +1 -1
- package/dist/esm/authorization/service.js +2 -2
- package/dist/esm/authorization/vaultProxyUse.js +1 -1
- package/dist/esm/cloud-host.js +12 -11
- package/dist/esm/core/ThresholdService/validation.js +1 -1
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +1 -1
- package/dist/esm/core/authService/webauthn.js +1 -1
- package/dist/esm/core/d1EcdsaSignerRead.js +1 -1
- package/dist/esm/core/d1WalletAuthMethodStore.js +2 -2
- package/dist/esm/core/d1WalletStore.js +1 -1
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +1 -1
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +1 -1
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -2
- package/dist/esm/core/nearRelayerAccountProvisioning.js +2 -2
- package/dist/esm/hosted-wallet-gateway.js +3 -3
- package/dist/esm/index.js +1 -1
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +1 -1
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +2 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RecordedOwnerOperation.js +43 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +27 -3
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +2 -2
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +3 -3
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetAuthenticatorStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +1 -1
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +3 -3
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +3 -3
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +7 -1
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +4 -4
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +4 -4
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +3 -3
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +11 -2
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +9 -16
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +46 -4
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +12 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +1 -0
- package/dist/esm/router/cloudflare/d1/registration/registrationCompletionWrite.js +1 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +36 -1
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/authorizationSnapshotLayout.js +1 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1VoiceIdWalletSessionChallenges.js +2 -2
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +6 -5
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +2 -2
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.js +2 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.js +2 -2
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +2 -2
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +2 -2
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +9 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +6 -0
- package/dist/esm/router/cloudflare-adaptor.js +1 -1
- package/dist/esm/router/cloudflare.js +6139 -5567
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +5 -5
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +2 -2
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +1 -1
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +1 -1
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +2 -2
- package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +37 -3
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +1 -1
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +1 -1
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +18 -3
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +12 -4
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +3 -3
- package/dist/esm/router/framework/http.js +1 -1
- package/dist/esm/router/framework/routeDefinitions.js +2 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +5 -3
- package/dist/esm/router/transport/fetch/routes/auth.js +1 -1
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +3 -3
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +1 -1
- package/dist/esm/router/transport/fetch/routes/ecdsaOperationStepUpFactor.js +3 -3
- package/dist/esm/router/transport/fetch/routes/externalAuth.js +351 -0
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +1 -1
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +46 -306
- package/dist/esm/router/transport/fetch/routes/sessions.js +4 -4
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +2 -2
- package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +1 -1
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +4 -4
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +6 -6
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +2 -2
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +4 -4
- package/dist/esm/router/transport/fetch/walletOwnerOperationAuthorization.js +306 -0
- package/dist/esm/shared-ts/src/auth/externalAuth.js +118 -0
- package/dist/esm/shared-ts/src/authorization/index.js +1 -1
- package/dist/esm/shared-ts/src/authorization/voiceIdDeviceAssertion.js +1 -1
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +2 -2
- package/dist/esm/shared-ts/src/authorization/{walletCustodyOperation.js → walletOwnerOperation.js} +4 -4
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/parsers.js +2 -2
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +2 -2
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +1 -1
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/index.js +3 -3
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/service.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +1 -1
- package/dist/types/shared-ts/src/auth/externalAuth.d.ts +127 -0
- package/dist/types/shared-ts/src/authorization/index.d.ts +1 -1
- package/dist/types/shared-ts/src/authorization/walletOwnerOperation.d.ts +10 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +4 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
- package/dist/types/wallet-server/src/application-auth.d.ts +3 -0
- package/dist/types/wallet-server/src/auth/applicationAuth.d.ts +29 -0
- package/dist/types/wallet-server/src/auth/externalAuthService.d.ts +55 -0
- package/dist/types/wallet-server/src/auth/externalAuthStore.d.ts +115 -0
- package/dist/types/wallet-server/src/auth/externalOwnerOperations.d.ts +18 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +2 -1
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +5 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RecordedOwnerOperation.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcBoundary.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/authorizationSnapshotLayout.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/staticWalletConsoleBinding.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +1 -1
- 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 +11 -6
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +1 -0
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +12 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/externalAuth.d.ts +5 -0
- package/dist/types/wallet-server/src/router/transport/fetch/walletOwnerOperationAuthorization.d.ts +23 -0
- package/migrations/d1-signer/0085_external_wallet_auth.sql +158 -0
- package/migrations/d1-signer/0086_application_auth.sql +67 -0
- package/migrations/d1-signer/0087_registration_without_session.sql +43 -0
- package/package.json +7 -2
- package/dist/types/shared-ts/src/authorization/walletCustodyOperation.d.ts +0 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseRouterAbEcdsaDerivationActivationRefreshCommitRequestV1, parseRouterAbEcdsaDerivationActivationRefreshResponseV1, parseRouterAbEcdsaDerivationExplicitExportRequestV1, parseRouterAbEcdsaExplicitExportProtocolForwardedResponseV1, parseRouterAbEcdsaRegistrationActivationReceiptV1, parseRouterAbEcdsaStrictForwardedRegistrationResponseV1, projectRouterAbEcdsaDerivationExplicitExportRequestToProtocolV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
2
|
+
import { ROUTER_AB_TRACE_ID_HEADER_V1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
2
3
|
import { walletObjectIdentity, walletObjectIdentityHeaders } from "../../cloudflare/runtime/walletObjectAddresses.js";
|
|
3
4
|
import { ROUTER_AB_INTERNAL_SERVICE_AUTH_HEADER_V1, normalizeRouterAbInternalServiceAuthSecret } from "../../../core/ThresholdService/routerAb/internalServiceHttp.js";
|
|
4
|
-
import { ROUTER_AB_TRACE_ID_HEADER_V1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
5
5
|
//#region src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.ts
|
|
6
6
|
const STRICT_ECDSA_REGISTRATION_PATH = "/router-ab/ecdsa-derivation/register";
|
|
7
7
|
const STRICT_ECDSA_ADD_SIGNER_PATH = "/router-ab/ecdsa-derivation/add-signer";
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { parseEmailOtpChallengeId, parseThresholdEd25519SessionId, parseWalletId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { parseAuthFactorId, parseAuthorizationAuditEventId, parseAuthorizationEvidenceId, parseAuthorizationEvidenceSetId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parsePrincipalId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { isPlainObject } from "../../../../shared-ts/src/utils/validation.js";
|
|
4
3
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
5
4
|
import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
6
5
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
7
|
-
import { buildCapabilityOperationEnvelope } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
8
6
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
7
|
+
import { parseAuthFactorId, parseAuthorizationAuditEventId, parseAuthorizationEvidenceId, parseAuthorizationEvidenceSetId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parsePrincipalId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
8
|
+
import { buildCapabilityOperationEnvelope } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
9
9
|
import { sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
10
10
|
import { deriveRouterAbEd25519YaoExportAuthorizationDigestV1, deriveRouterAbEd25519YaoExportConfirmationDigestV1, deriveRouterAbEd25519YaoRuntimePolicyBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519YaoDigests.js";
|
|
11
11
|
import { ROUTER_AB_ED25519_YAO_EXPORT_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_EXPORT_EXECUTE_PATH_V1, parseRouterAbEd25519YaoExportAdmissionReceiptV1, parseRouterAbEd25519YaoExportAdmissionRequestV1, parseRouterAbEd25519YaoExportExecuteRequestV1, parseRouterAbEd25519YaoExportResultV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
12
12
|
import { walletAuthAuthorityRef } from "../../../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
13
13
|
import { parseSessionOrigin, parseVerifiedOwnerProofId } from "../../../../authorization/domain.js";
|
|
14
14
|
import { buildVerifiedWalletOperationEmailOtpFactorResult, buildVerifiedWalletOperationPasskeyFactorResult } from "../../../../authorization/factorEvidence.js";
|
|
15
|
-
import {
|
|
15
|
+
import { WALLET_EMAIL_OTP_EXPORT_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
16
|
+
import { parseWebAuthnAuthenticationCredential, webAuthnCredentialIdB64uFromCredential } from "../../../auth/webAuthnCredentialCodecs.js";
|
|
16
17
|
import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
|
|
17
18
|
import { ROUTER_AB_TRACE_ID_HEADER_V1, createRouterAbTraceContextV1, parseRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
18
19
|
import { json, readJson } from "../../../framework/http.js";
|
|
19
|
-
import {
|
|
20
|
-
import { WALLET_EMAIL_OTP_EXPORT_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
20
|
+
import { defineRoute } from "../../../framework/routeDefinitions.js";
|
|
21
21
|
import { createRouterApiModule } from "../../../framework/modules.js";
|
|
22
22
|
//#region src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.ts
|
|
23
23
|
const EXPORT_AUTH_MAX_TTL_MS = 6e4;
|
|
@@ -2,10 +2,10 @@ import { parseThresholdEd25519SessionId } from "../../../../shared-ts/src/utils/
|
|
|
2
2
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
3
3
|
import { ROUTER_AB_ED25519_YAO_RECOVERY_ACTIVATE_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_RECOVERY_EXECUTE_PATH_V1, ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1, parseRouterAbEd25519YaoRecoveryActivationAdmissionReceiptV1, parseRouterAbEd25519YaoRecoveryActivationExecuteRequestV1, parseRouterAbEd25519YaoRecoveryActivationReceiptV1, parseRouterAbEd25519YaoRecoveryActivationRequestV1, parseRouterAbEd25519YaoRecoveryActivationResultV1, parseRouterAbEd25519YaoRecoveryAdmissionRequestV1, parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1, parseRouterAbEd25519YaoRegistrationActivationResultV1, parseRouterAbEd25519YaoRegistrationAdmissionRequestV1, parseRouterAbEd25519YaoWarmRecoveryBootstrapRequestV1, sameRouterAbEd25519YaoActivationBindingV1, sameRouterAbEd25519YaoActivationPublicReceiptV1, sameRouterAbEd25519YaoRecoveryAdmissionRequestV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
4
4
|
import { normalizeRuntimePolicyScope, signingRootScopeFromRuntimePolicyScope } from "../../../../shared-ts/src/threshold/signingRootScope.js";
|
|
5
|
-
import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
|
|
6
|
-
import { defineRoute } from "../../../framework/routeDefinitions.js";
|
|
7
5
|
import { ROUTER_AB_TRACE_ID_HEADER_V1, createRouterAbTraceContextV1, parseRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
8
6
|
import { json, readJson } from "../../../framework/http.js";
|
|
7
|
+
import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
|
|
8
|
+
import { defineRoute } from "../../../framework/routeDefinitions.js";
|
|
9
9
|
import { createRouterApiModule } from "../../../framework/modules.js";
|
|
10
10
|
//#region src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.ts
|
|
11
11
|
function requireThresholdEd25519SessionId(value, label) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseWalletId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { NEAR_ED25519_MPC_OPERATION_KINDS } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
|
+
import { NEAR_ED25519_MPC_OPERATION_KINDS } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
4
4
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
5
5
|
import { sameRouterAbEd25519YaoByteSequence } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
6
6
|
import { extractBearerCredential } from "../../../auth/routerApiKeyAuth.js";
|
package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { requireRecord } from "../../../../shared-ts/src/utils/validation.js";
|
|
2
2
|
import { deriveRouterAbEd25519YaoStableContextBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519YaoDigests.js";
|
|
3
3
|
import { parseRouterAbEd25519YaoActivationKeysetV1, parseRouterAbEd25519YaoActivationResultV1, parseRouterAbEd25519YaoExportResultV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
4
|
-
import { walletObjectIdentity, walletObjectIdentityHeaders } from "../../../cloudflare/runtime/walletObjectAddresses.js";
|
|
5
4
|
import { createRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
5
|
+
import { walletObjectIdentity, walletObjectIdentityHeaders } from "../../../cloudflare/runtime/walletObjectAddresses.js";
|
|
6
6
|
import { routerAbEd25519YaoRegistrationSigningRootIdV1, routerAbEd25519YaoTenantRootWireV1 } from "../routerAbEd25519YaoGatewayEnvelope.js";
|
|
7
7
|
//#region src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.ts
|
|
8
8
|
const INTERNAL_AUTH_HEADER = "x-router-ab-internal-service-auth";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
2
2
|
import { ROUTER_AB_ED25519_YAO_REGISTRATION_ADMISSION_PATH_V1, ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1, parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1, parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1, parseRouterAbEd25519YaoRegistrationActivationResultV1, parseRouterAbEd25519YaoRegistrationAdmissionRequestV1, sameRouterAbEd25519YaoActivationBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
3
|
-
import { defineRoute } from "../../../framework/routeDefinitions.js";
|
|
4
3
|
import { ROUTER_AB_TRACE_ID_HEADER_V1, createRouterAbTraceContextV1, parseRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
5
4
|
import { json, readJson } from "../../../framework/http.js";
|
|
5
|
+
import { defineRoute } from "../../../framework/routeDefinitions.js";
|
|
6
6
|
import { createRouterApiModule } from "../../../framework/modules.js";
|
|
7
7
|
//#region src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.ts
|
|
8
8
|
function resolveTraceContext(request) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
1
2
|
import { sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
2
3
|
import { deriveRouterAbEd25519YaoStableContextBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519YaoDigests.js";
|
|
3
4
|
import { deriveSigningRootId } from "../../../../shared-ts/src/threshold/signingRootScope.js";
|
|
4
|
-
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
5
5
|
import { computeAddSignerNearEd25519SigningKeyId } from "../../../../shared-ts/src/utils/registrationIds.js";
|
|
6
6
|
import { findRegistrationSignerPlanNearEd25519Branch, registrationNearEd25519BranchKey, registrationSignerPlanFromSelection } from "../../../../shared-ts/src/utils/registrationSignerPlan.js";
|
|
7
7
|
//#region src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
3
3
|
import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
4
|
-
import "../../../shared-ts/src/utils/encoders.js";
|
|
5
4
|
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
6
|
-
import
|
|
5
|
+
import "../../../shared-ts/src/utils/encoders.js";
|
|
7
6
|
import { EMAIL_OTP_FACTOR_RELEASE_AAD_DOMAIN_V1 } from "../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
7
|
+
import { emailOtpStatusCode } from "./emailOtpSessionRouteHelpers.js";
|
|
8
8
|
//#region src/router/domains/emailOtp/emailOtpRouteHandlers.ts
|
|
9
9
|
function decodeEmailOtpFactorSecret32(value) {
|
|
10
10
|
const magnitude = base64UrlDecode(value);
|
|
@@ -4,11 +4,11 @@ import { parseDigestField, parseEnvelopeCiphertextB64u, parseEnvelopeNonceB64u,
|
|
|
4
4
|
import { parsePasskeyCustodySecretBinding } from "../../../shared-ts/src/passkey-custody/custodySecretBinding.js";
|
|
5
5
|
import { buildActiveEnvelopeLifecycle, buildPasskeyCustodyEnvelopeRecord, parseWalletCustodyEnvelopeFactor, parseWalletCustodyEnvelopeOwnershipWireV1 } from "../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
|
|
6
6
|
import "../../../shared-ts/src/passkey-custody/index.js";
|
|
7
|
+
import { parseRecoveryCodeLocatorV1 } from "../../../shared-ts/src/wallet-recovery/recoveryCodeLocator.js";
|
|
7
8
|
import { parseDerivedWalletRecoveryKeyId } from "../../../shared-ts/src/wallet-recovery/recoveryKeyId.js";
|
|
8
9
|
import { buildWalletRecoveryBackupAcknowledgementV1 } from "../../../shared-ts/src/wallet-recovery/backupAcknowledgement.js";
|
|
9
10
|
import "../../../shared-ts/src/wallet-recovery/recoveryCodes.js";
|
|
10
11
|
import { buildWalletCustodySeedRecoveryEntry, buildWalletRecoveryEnvelopeSetRecord, buildWalletRecoveryManifestKekWrap } from "../../../shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js";
|
|
11
|
-
import { parseRecoveryCodeLocatorV1 } from "../../../shared-ts/src/wallet-recovery/recoveryCodeLocator.js";
|
|
12
12
|
import "../../../shared-ts/src/wallet-recovery/index.js";
|
|
13
13
|
//#region src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.ts
|
|
14
14
|
function requireNonEmpty(value, label) {
|
package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { parseWalletId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { buildAuthorizationGrantRef, buildEvmEcdsaMpcOperationRef, parseAuthorizationAuditEventId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
3
|
+
import { buildAuthorizationGrantRef, buildEvmEcdsaMpcOperationRef, parseAuthorizationAuditEventId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
4
4
|
import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest } from "../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
5
5
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
6
6
|
import { ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_STATE_KIND_V1, parseRouterAbEcdsaDerivationEvmDigestSigningFinalizeRequestV1, parseRouterAbEcdsaDerivationEvmDigestSigningRequestV1, routerAbEcdsaDerivationActiveStateId, sameRouterAbEcdsaDerivationNormalSigningScopeV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
7
7
|
import { authorizedOperationReplayBodyInit } from "../../../authorization/domain.js";
|
|
8
|
-
import { WALLET_SESSION_FAILURE_CODES } from "../../../shared-ts/src/utils/walletSessionFailure.js";
|
|
9
8
|
import { extractBearerCredential } from "../../auth/routerApiKeyAuth.js";
|
|
9
|
+
import { WALLET_SESSION_FAILURE_CODES } from "../../../shared-ts/src/utils/walletSessionFailure.js";
|
|
10
10
|
import { walletSessionFailure, walletSessionFailureStatus } from "../../auth/walletSessionFailure.js";
|
|
11
11
|
import { validateRouterAbEcdsaDerivationWalletSessionInputs } from "../../auth/commonRouterUtils.js";
|
|
12
12
|
import { signingPrepareSessionResponse } from "./signingPrepareSession.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { mpcMaterialActivationRefsEqual } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { buildNearEd25519MpcOperationRef, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
1
|
+
import { mpcMaterialActivationRefsEqual, parseWalletId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
3
2
|
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
4
3
|
import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
5
4
|
import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
6
|
-
import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest, parseSigningOperationFingerprintDigest } from "../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
7
5
|
import "../../../shared-ts/src/utils/encoders.js";
|
|
6
|
+
import { buildNearEd25519MpcOperationRef, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
7
|
+
import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest, parseSigningOperationFingerprintDigest } from "../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
8
8
|
import { routerAbMpcMaterialActivationRefFromWire, routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
9
9
|
import { extractBearerCredential } from "../../auth/routerApiKeyAuth.js";
|
|
10
10
|
import { validateRouterAbEd25519WalletSessionInputs } from "../../auth/commonRouterUtils.js";
|
|
@@ -263,6 +263,40 @@ function isWalletSessionUnavailableStepUpError(result) {
|
|
|
263
263
|
return isPlainObject(result.body) && result.body.code === "wallet_session_unavailable";
|
|
264
264
|
}
|
|
265
265
|
async function authenticateRouterAbWalletOperationStepUp(input) {
|
|
266
|
+
if (!extractBearerCredential(input.headers) && input.authorizedOperations) {
|
|
267
|
+
const origin = parseStepUpRequestOrigin(input.headers);
|
|
268
|
+
if (!origin.ok) return origin;
|
|
269
|
+
const operationId = requireAuthorizationValue(parseAuthorizedOperationId(`normal-signing-operation:${input.scope.request_id}`));
|
|
270
|
+
const parsedWalletId = parseWalletId(input.scope.account_id);
|
|
271
|
+
if (!parsedWalletId.ok) return walletSessionScopeInvalidFailure();
|
|
272
|
+
const walletId = parsedWalletId.value;
|
|
273
|
+
const recorded = await input.authorizedOperations.resolveRecordedPasskeyOwnerOperation({
|
|
274
|
+
authorizedOperationId: operationId,
|
|
275
|
+
walletId,
|
|
276
|
+
requestOrigin: origin.requestOrigin,
|
|
277
|
+
nowMs: Date.now()
|
|
278
|
+
});
|
|
279
|
+
if (!recorded || input.requestExpiresAtMs > recorded.expiresAtMs) return {
|
|
280
|
+
ok: false,
|
|
281
|
+
error: routerAbStepUpError(403, "unauthorized", "Recorded owner approval is unavailable")
|
|
282
|
+
};
|
|
283
|
+
const activeMaterial = await input.resolveEd25519MaterialActivation({
|
|
284
|
+
walletId,
|
|
285
|
+
materialActivation: input.scope.material_activation
|
|
286
|
+
});
|
|
287
|
+
if (!activeMaterial.ok) return walletSessionScopeInvalidFailure();
|
|
288
|
+
return authenticateRouterAbWalletOperationStepUpIdentity({
|
|
289
|
+
kind: "verified_owner_proof",
|
|
290
|
+
headers: input.headers,
|
|
291
|
+
walletId,
|
|
292
|
+
materialOwner: input.scope.material_activation.material_owner,
|
|
293
|
+
operationId: recorded.operation.operation.operationId,
|
|
294
|
+
authority: recorded.authority,
|
|
295
|
+
runtimePolicyScope: activeMaterial.runtimePolicyScope,
|
|
296
|
+
expiresAtMs: recorded.expiresAtMs,
|
|
297
|
+
authorizedOperations: input.authorizedOperations
|
|
298
|
+
});
|
|
299
|
+
}
|
|
266
300
|
return authenticateRouterAbWalletOperationStepUpIdentity({
|
|
267
301
|
kind: "wallet_session_operation_credential_v1",
|
|
268
302
|
headers: input.headers,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseProviderSubject } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { parsePrincipalId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
4
3
|
import "../../../shared-ts/src/utils/encoders.js";
|
|
4
|
+
import { parsePrincipalId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
5
5
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
6
6
|
import { walletAuthAuthorityRef } from "../../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
7
7
|
import { parseSessionOrigin } from "../../../authorization/domain.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
1
2
|
import { sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
2
3
|
import { signingRootScopeFromRuntimePolicyScope } from "../../../shared-ts/src/threshold/signingRootScope.js";
|
|
3
|
-
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
4
4
|
import { buildTenantRootIdentityFromAuthenticatedDeploymentV1, isTenantRootIdentityFieldCanonicalV1 } from "../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
|
|
5
5
|
//#region src/router/domains/tenantRoot/tenantRootIdentityResolution.ts
|
|
6
6
|
const FORBIDDEN_TENANT_ROOT_SELECTOR_FIELDS_V1 = [
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import {
|
|
3
|
-
import { isPlainObject, requireCanonicalString } from "../../../shared-ts/src/utils/validation.js";
|
|
2
|
+
import { isPlainObject, requireCanonicalString, requireRecord } from "../../../shared-ts/src/utils/validation.js";
|
|
4
3
|
import { alphabetizeStringify, sha256HexUtf8 } from "../../../shared-ts/src/utils/digests.js";
|
|
4
|
+
import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
|
+
import { parseDeviceId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
5
6
|
import { secureRandomBase64Url } from "../../../shared-ts/src/utils/secureRandomId.js";
|
|
6
7
|
import { createServerAllocatedWalletId } from "../../../shared-ts/src/utils/registrationIds.js";
|
|
7
8
|
//#region src/router/domains/walletRegistration/walletRegistrationReservation.ts
|
|
@@ -44,6 +45,7 @@ async function walletRegistrationSetupRequestDigest(namespace, input) {
|
|
|
44
45
|
runtimePolicyScope: input.runtimePolicyScope,
|
|
45
46
|
expectedOrigin: input.expectedOrigin,
|
|
46
47
|
wallet: input.request.wallet ?? { kind: "server_allocated" },
|
|
48
|
+
completion: input.request.completion,
|
|
47
49
|
authMethod: input.request.authMethod,
|
|
48
50
|
signerSelection: input.request.signerSelection
|
|
49
51
|
}));
|
|
@@ -64,7 +66,20 @@ async function admitRegistrationReservationHome(authority, input) {
|
|
|
64
66
|
};
|
|
65
67
|
return authority.admitHome(input);
|
|
66
68
|
}
|
|
69
|
+
function parseRegistrationSessionPublication(raw, walletId) {
|
|
70
|
+
const value = requireRecord(raw, "registration session publication");
|
|
71
|
+
if (value.kind === "none") return { kind: "none" };
|
|
72
|
+
if (value.kind !== "credential" || value.walletId !== String(walletId)) throw new Error("Invalid registration session publication");
|
|
73
|
+
const expiresAtMs = value.expiresAtMs;
|
|
74
|
+
if (typeof expiresAtMs !== "number" || !Number.isSafeInteger(expiresAtMs) || expiresAtMs <= 0) throw new Error("Invalid registration session publication expiry");
|
|
75
|
+
return {
|
|
76
|
+
kind: "credential",
|
|
77
|
+
walletId,
|
|
78
|
+
digest: parseDigestB64u(value.digest),
|
|
79
|
+
expiresAtMs
|
|
80
|
+
};
|
|
81
|
+
}
|
|
67
82
|
//#endregion
|
|
68
|
-
export { admitRegistrationReservationHome, cancelRegistrationHome, parseWalletRegistrationSetupReservation, proposeWalletRegistrationSetup, walletRegistrationSetupRequestDigest };
|
|
83
|
+
export { admitRegistrationReservationHome, cancelRegistrationHome, parseRegistrationSessionPublication, parseWalletRegistrationSetupReservation, proposeWalletRegistrationSetup, walletRegistrationSetupRequestDigest };
|
|
69
84
|
|
|
70
85
|
//# sourceMappingURL=walletRegistrationReservation.js.map
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
import { parseWalletAuthMethodId, parseWalletId, parseWebAuthnRpId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { EVM_ECDSA_MPC_OPERATION_KINDS, NEAR_ED25519_MPC_OPERATION_KINDS, parseWalletSessionId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
4
3
|
import { base64UrlDecode } from "../../../shared-ts/src/utils/base64.js";
|
|
5
4
|
import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
6
5
|
import { base58Encode } from "../../../shared-ts/src/utils/base58.js";
|
|
7
6
|
import "../../../shared-ts/src/utils/encoders.js";
|
|
7
|
+
import { EVM_ECDSA_MPC_OPERATION_KINDS, NEAR_ED25519_MPC_OPERATION_KINDS, parseWalletSessionId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
8
8
|
import { parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1 } from "../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
9
9
|
import { ecdsaClientRootPublicKey33B64uFromString } from "../../../shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js";
|
|
10
10
|
import { normalizeRuntimePolicyScope } from "../../../shared-ts/src/threshold/signingRootScope.js";
|
|
11
11
|
import { parseRouterAbEcdsaRegistrationActivationRequestV1, parseRouterAbEcdsaRegistrationRequestV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
12
12
|
import { normalizeAddAuthMethodInput, normalizeEmailOtpRegistrationProof, normalizeRegistrationAuthMethodInput } from "../../../shared-ts/src/utils/registrationAuthMethodInput.js";
|
|
13
13
|
import { parseHostedWalletSessionOperationCredentialToken, parsePrimaryWalletSessionOperationCredentialToken, parseSessionOrigin } from "../../../authorization/domain.js";
|
|
14
|
+
import { routeError, routeJson } from "../../framework/routeResponses.js";
|
|
15
|
+
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../auth/routerApiKeyAuth.js";
|
|
14
16
|
import { normalizeCorsOrigin } from "../../../core/SessionService.js";
|
|
17
|
+
import { parseRouterAbTraceContextV1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
15
18
|
import { thresholdEcdsaChainTargetFromValue } from "../../../core/thresholdEcdsaChainTarget.js";
|
|
16
19
|
import { walletIdFromString } from "../../../shared-ts/src/utils/registrationIds.js";
|
|
17
20
|
import { recordRegistrationServerTiming, registrationServerTimingHeaders } from "../../framework/registrationTiming.js";
|
|
18
21
|
import { parseRegistrationSetupOperationId } from "../../../shared-ts/src/utils/registrationSetupOperation.js";
|
|
19
|
-
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../auth/routerApiKeyAuth.js";
|
|
20
22
|
import { publishableKeyRoutePrincipal, resolvePublishableKeyApiCredentialAuth, resolveWalletRegistrationContext } from "../../auth/routerApiCredentialAuth.js";
|
|
21
23
|
import { resolveActiveRuntimePolicyScopeForEnvironment, resolveWalletSessionAdministrationAdmission, resolveWalletSessionOperationCredentialAdmission, resolveWalletSessionOperationCredentialAdmissionFromContext } from "../../auth/commonRouterUtils.js";
|
|
22
24
|
import { enforceRoutePolicy } from "../../framework/enforceRoutePolicy.js";
|
|
23
25
|
import { parseRegistrationPreparedSessionSeal } from "./registrationSessionSeal.js";
|
|
24
|
-
import { routeError, routeJson } from "../../framework/routeResponses.js";
|
|
25
26
|
import { parsePasskeyCustodyEnvelopeRecord } from "../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
|
|
26
27
|
import "../../../shared-ts/src/passkey-custody/index.js";
|
|
27
28
|
import { computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u } from "../../../shared-ts/src/utils/ecdsaKeyFactsInventory.js";
|
|
28
29
|
import { deriveImplicitNearAccountIdFromEd25519PublicKey, parseImplicitNearAccountId } from "../../../shared-ts/src/utils/near.js";
|
|
29
30
|
import { normalizeRegistrationSignerPlan, registrationSignerSetSelectionFromPlan } from "../../../shared-ts/src/utils/registrationSignerPlan.js";
|
|
30
31
|
import { addAuthMethodIntentGrantFromString, addSignerIntentGrantFromString, computeAddAuthMethodIntentDigestB64u, computeAddSignerIntentDigestB64u, normalizeAddAuthMethodIntentCaller } from "../../../shared-ts/src/utils/registrationIntent.js";
|
|
31
|
-
import { parseRouterAbTraceContextV1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
32
32
|
//#region src/router/domains/walletRegistration/walletRegistrationRoutes.ts
|
|
33
33
|
function parseRegistrationTraceContext(headers) {
|
|
34
34
|
const parsed = parseRouterAbTraceContextV1(headers["x-seams-trace-id"] ?? headers["X-Seams-Trace-Id"]);
|
|
@@ -343,12 +343,19 @@ function parseWalletRegistrationSetupRequest(body) {
|
|
|
343
343
|
code: "invalid_body",
|
|
344
344
|
message: "authMethod is required"
|
|
345
345
|
};
|
|
346
|
+
const completion = body.completion ?? "wallet_session";
|
|
347
|
+
if (completion !== "wallet_session" && completion !== "owner_operations") return {
|
|
348
|
+
ok: false,
|
|
349
|
+
code: "invalid_body",
|
|
350
|
+
message: "Invalid registration completion"
|
|
351
|
+
};
|
|
346
352
|
const wallet = parseWalletRegistrationSetupWallet(body.wallet);
|
|
347
353
|
if (!wallet.ok) return wallet;
|
|
348
354
|
return {
|
|
349
355
|
ok: true,
|
|
350
356
|
value: {
|
|
351
357
|
registrationOperationId,
|
|
358
|
+
completion,
|
|
352
359
|
...wallet.value ? { wallet: wallet.value } : {},
|
|
353
360
|
signerSelection: signerSelection.value.selection,
|
|
354
361
|
authMethod
|
|
@@ -1928,6 +1935,7 @@ async function handleRouterApiWalletRegistrationNearProvisioning(input) {
|
|
|
1928
1935
|
if (sessionSeal.value) {
|
|
1929
1936
|
if (!isPasskeyWalletRegistrationNearProvisioningSuccessV2(result)) return routeError(400, "invalid_body", "Registration session sealing requires a passkey authority");
|
|
1930
1937
|
const sealStartedAt = Date.now();
|
|
1938
|
+
if (result.registrationEstablishedSession.kind === "owner_operations") return routeError(400, "invalid_body", "Owner registration has no session seal");
|
|
1931
1939
|
const sealed = await sessionSeal.value.finish(result.registrationEstablishedSession.session);
|
|
1932
1940
|
serverTiming.push(["near_finalize_session_seal", Math.max(0, Date.now() - sealStartedAt)]);
|
|
1933
1941
|
if (!sealed.ok) return routeJson(503, {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { parseEmailOtpChallengeId, parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { parseAuthFactorId, parsePrincipalId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { alphabetizeStringify } from "../../../shared-ts/src/utils/digests.js";
|
|
4
3
|
import { sha256Utf8DigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
|
+
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
5
|
+
import { parseAuthFactorId, parsePrincipalId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
5
6
|
import { ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1 } from "../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
6
7
|
import { walletAuthAuthorityRef } from "../../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
7
8
|
import { parseSessionOrigin, parseVerifiedOwnerProofId, projectActiveWalletSession } from "../../../authorization/domain.js";
|
|
8
9
|
import { buildVerifiedWalletSessionEmailOtpFactorResult, buildVerifiedWalletSessionPasskeyFactorResult } from "../../../authorization/factorEvidence.js";
|
|
9
|
-
import { failure } from "../../../shared-ts/src/utils/failure.js";
|
|
10
|
-
import { emailOtpFailureWebhookEventDescriptors, emailOtpLoggedInWebhookEventDescriptor } from "../emailOtp/emailOtpSessionRouteHelpers.js";
|
|
11
10
|
import { EMAIL_OTP_CHANNEL } from "../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
11
|
+
import { emailOtpFailureWebhookEventDescriptors, emailOtpLoggedInWebhookEventDescriptor } from "../emailOtp/emailOtpSessionRouteHelpers.js";
|
|
12
12
|
import { thresholdEd25519StatusCode } from "../../../threshold/statusCodes.js";
|
|
13
13
|
import { parseWalletUnlockBackend } from "../emailOtp/emailOtpRequestValidation.js";
|
|
14
14
|
//#region src/router/domains/walletUnlock/walletUnlockRouteHandlers.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { failure } from "../../shared-ts/src/utils/failure.js";
|
|
1
2
|
import { ROUTER_AB_ED25519_YAO_RECOVERY_CHALLENGE_ID_HEADER_V1 } from "../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
2
3
|
import { LINKED_DEVICE_REQUEST_PROOF_HEADER_V1 } from "../../shared-ts/src/device-linking/requestProof.js";
|
|
3
4
|
import "../../shared-ts/src/device-linking/index.js";
|
|
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
7
|
import { WALLET_MANAGEMENT_PROTOCOL_HEADER } from "../../shared-ts/src/utils/walletManagementProtocol.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH } from "../../shared-ts/src/utils/routerAbPublicKeyset.js";
|
|
2
2
|
import { ROUTER_AB_ECDSA_DERIVATION_EXPORT_PATH, ROUTER_AB_ECDSA_DERIVATION_HEALTH_PATH, ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PATH, ROUTER_AB_ECDSA_DERIVATION_NORMAL_SIGNING_PREPARE_PATH, ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_INIT_PATH, ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_FILL_STEP_PATH, ROUTER_AB_ECDSA_DERIVATION_REFRESH_PATH, ROUTER_AB_ECDSA_DERIVATION_SESSION_ACTIVATION_PATH } from "../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
3
|
+
import { externalAuthRoutes } from "../transport/fetch/routes/externalAuth.js";
|
|
3
4
|
import { ROUTER_AB_ED25519_HEALTH_PATH, ROUTER_AB_ED25519_NORMAL_SIGNING_PATH, ROUTER_AB_ED25519_NORMAL_SIGNING_PREPARE_PATH, ROUTER_AB_ED25519_WALLET_SESSION_PATH } from "../../shared-ts/src/utils/signingSessionSeal.js";
|
|
4
5
|
import { buildSigningSessionSealApplyPath, buildSigningSessionSealRemovePath, resolveSigningSessionSealBasePath } from "../../threshold/session/signingSessionSeal/transport/shared.js";
|
|
5
6
|
import { API_CREDENTIAL_ROUTE_SCOPES, API_CREDENTIAL_TYPES, PUBLIC_PROOF_TYPES } from "./routeAuthPolicy.js";
|
|
@@ -222,7 +223,7 @@ function apiCredentialRoute(id, method, path, summary, auth, metering, requiredS
|
|
|
222
223
|
}
|
|
223
224
|
function createRouterApiRouteDefinitions(options = {}) {
|
|
224
225
|
const signingSessionSealBasePath = resolveSigningSessionSealBasePath(options.signingSessionSealBasePath);
|
|
225
|
-
const definitions =
|
|
226
|
+
const definitions = externalAuthRoutes();
|
|
226
227
|
if (options.enableHealthz) definitions.push(publicRoute("router_api_healthz", "GET", "/healthz", "Router API health probe", {
|
|
227
228
|
plane: "public",
|
|
228
229
|
rationale: "Health probes are intentionally public diagnostics."
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { EVM_ECDSA_MPC_OPERATION_KINDS, NEAR_ED25519_MPC_OPERATION_KINDS } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
2
1
|
import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
|
|
2
|
+
import { EVM_ECDSA_MPC_OPERATION_KINDS, NEAR_ED25519_MPC_OPERATION_KINDS } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
3
|
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
4
4
|
import { routerAbEcdsaDerivationActiveStateId } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
5
|
-
import { findRouteDefinitionForRequest } from "../../framework/routeDefinitions.js";
|
|
6
5
|
import { extractBearerCredential } from "../../auth/routerApiKeyAuth.js";
|
|
6
|
+
import { json, jsonFailure, withCors } from "../../framework/http.js";
|
|
7
|
+
import { handleExternalAuth } from "./routes/externalAuth.js";
|
|
8
|
+
import { findRouteDefinitionForRequest } from "../../framework/routeDefinitions.js";
|
|
7
9
|
import { resolveWalletSessionOperationCredentialAdmissionFromContext } from "../../auth/commonRouterUtils.js";
|
|
8
10
|
import { getRouterApiRouteExtensionRoutes, getRouterApiRouteExtensionsForTransport } from "../../framework/routeExtensions.js";
|
|
9
11
|
import { coerceRouterLogger } from "../../framework/logger.js";
|
|
10
|
-
import { json, jsonFailure, withCors } from "../../framework/http.js";
|
|
11
12
|
import { handleHealth, handleReady } from "./routes/health.js";
|
|
12
13
|
import { handleWalletRegistration } from "./routes/walletRegistration.js";
|
|
13
14
|
import { handleWalletVoiceIdActivation } from "./routes/walletVoiceIdActivation.js";
|
|
@@ -224,6 +225,7 @@ function createFetchRouter(service, opts, runtime) {
|
|
|
224
225
|
handleWalletRecoveryRotate,
|
|
225
226
|
handleWalletRecoveryRead,
|
|
226
227
|
handleWalletRecoveryStatus,
|
|
228
|
+
handleExternalAuth,
|
|
227
229
|
handleAuth,
|
|
228
230
|
handleSyncAccount,
|
|
229
231
|
handleOwnerWalletExecutionLanePreflight,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildDelegatedWalletAuthorityV1, buildFullOwnerPermissionsV1, sameDelegatedWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
2
2
|
import { extractBearerCredential } from "../../../auth/routerApiKeyAuth.js";
|
|
3
|
-
import { resolveThresholdRuntimePolicyScope } from "../../../auth/commonRouterUtils.js";
|
|
4
3
|
import { json, jsonFailure, readJson } from "../../../framework/http.js";
|
|
4
|
+
import { resolveThresholdRuntimePolicyScope } from "../../../auth/commonRouterUtils.js";
|
|
5
5
|
import { parseAuthIdentityMutationRequest, parseAuthProviderActionPath, parseGoogleLoginVerifyRequest, parsePasskeyLoginOptionsRequest, parsePasskeyLoginVerifyRequest } from "../../../auth/authRequestValidation.js";
|
|
6
6
|
//#region src/router/transport/fetch/routes/auth.ts
|
|
7
7
|
function assertNeverAuthProviderAction(route) {
|
|
@@ -11,11 +11,11 @@ import { parseLinkedDeviceEd25519SourcePreservingReservationV1, parseLinkedDevic
|
|
|
11
11
|
import { parseLinkedDeviceApprovalDeliveryV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceEmailOtpBaseFactorRequestV1, parseLinkedDeviceEmailOtpChallengeResendRequestV1, parseLinkedDeviceEmailOtpChallengeResultV1, parseLinkedDeviceEmailOtpChallengeStartRequestV1, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1, parseLinkedDeviceEmailOtpVerificationResultV1, parseLinkedDeviceSessionClaimRequestV1, parseLinkedDeviceSessionTransportRequestV1, parseLinkedDeviceTargetCredentialRegistrationV1, parseLinkedDeviceTargetPreparationRequestV1, parseLinkedDeviceTargetPreparationV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../../../shared-ts/src/device-linking/parsers.js";
|
|
12
12
|
import { parseLocalAuthorityActivationFinalAckV1, parseLocalAuthorityInstallationReceiptV1 } from "../../../../shared-ts/src/device-linking/authorityActivation.js";
|
|
13
13
|
import { LINKED_DEVICE_REQUEST_PROOF_HEADER_V1, computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
|
|
14
|
-
import { findRouteDefinitionById } from "../../../framework/routeDefinitions.js";
|
|
15
|
-
import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
|
|
16
14
|
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../../auth/routerApiKeyAuth.js";
|
|
17
|
-
import {
|
|
15
|
+
import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
|
|
18
16
|
import { json, readJson } from "../../../framework/http.js";
|
|
17
|
+
import { findRouteDefinitionById } from "../../../framework/routeDefinitions.js";
|
|
18
|
+
import { resolvePublishableKeyApiCredentialAuth } from "../../../auth/routerApiCredentialAuth.js";
|
|
19
19
|
import { authDeniedResponse, exportRootWriteResponse, invalidInputResponse, invalidStateResponse, methodNotAllowedResponse, notFoundResponse, notSupportedResponse, projectSession, sessionProjectionResponse, targetCredentialResultResponse } from "./deviceLinkingResponses.js";
|
|
20
20
|
import { linkedDeviceBootstrapFailure } from "../../../../core/deviceLinking/linkedDeviceBootstrap.js";
|
|
21
21
|
import { parseLinkedDeviceRequestProofV1 } from "../../../../core/deviceLinking/requestProof.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseProviderSubject } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { buildDelegatedWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
3
2
|
import { sha256DigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
3
|
+
import { buildDelegatedWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/delegatedAuthority.js";
|
|
4
4
|
import { buildEmailOtpWalletAuthAuthority, buildPasskeyWalletAuthAuthority, buildVoiceIdWalletAuthAuthority, 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";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { parseEmailOtpChallengeId, parseOrgId, parseProviderSubject } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
-
import { parseAuthFactorId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
2
|
import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
4
3
|
import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
5
4
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
6
5
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
6
|
+
import { parseAuthFactorId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
7
7
|
import { buildVerifiedWalletOperationEmailOtpFactorResult, buildVerifiedWalletOperationPasskeyFactorResult } from "../../../../authorization/factorEvidence.js";
|
|
8
|
-
import { json } from "../../../framework/http.js";
|
|
9
|
-
import { hashEmailOtpOperationBinding } from "../../../domains/emailOtp/emailOtpSessionRouteHelpers.js";
|
|
10
8
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_EXPORT_OPERATION, WALLET_EMAIL_OTP_TRANSACTION_SIGN_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
9
|
+
import { hashEmailOtpOperationBinding } from "../../../domains/emailOtp/emailOtpSessionRouteHelpers.js";
|
|
10
|
+
import { json } from "../../../framework/http.js";
|
|
11
11
|
//#region src/router/transport/fetch/routes/ecdsaOperationStepUpFactor.ts
|
|
12
12
|
async function verifyEcdsaOperationStepUpFactor(input) {
|
|
13
13
|
const proof = input.proof;
|