Skip to content

fix(kyc-controller): Send residenceCountry and sessionClientPublicKey on kyc session creation - #9993

Open
jiexi wants to merge 4 commits into
mainfrom
jl/fix-kyc-controller-api-mismatch
Open

fix(kyc-controller): Send residenceCountry and sessionClientPublicKey on kyc session creation#9993
jiexi wants to merge 4 commits into
mainfrom
jl/fix-kyc-controller-api-mismatch

Conversation

@jiexi

@jiexi jiexi commented Aug 27, 2026

Copy link
Copy Markdown
Member

Explanation

  • remove unused wrapUserKey helper
  • pass sessionClientPublicKey into ukyc session creation
  • add residenceCountry to create ukyc session flow

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Breaking API on UKYC session creation and changes to crypto/session registration on the KYC critical path; controller orchestration is updated with reset guards.

Overview
BREAKING: KycService.createUkycSession (POST /sessions) now requires sessionClientPublicKey (unpadded base64url X25519) and residenceCountry (ISO 3166-1 alpha-3). Callers that invoke the service directly must supply both fields.

KycController generates a per-session X25519 keypair before creating the UKYC session, registers the public key with the API, and keeps the private key for wrapping data_encryption_key and ukyc_capability_token via setAuthorizations. Residence country comes from persisted geoCountry when present, otherwise from getGeoCountry, with flow-generation checks so a reset() during geo resolution does not create a session.

Removes the unused wrapUserKey helper and its tests; wrapEncryptionKey docs now describe public-key registration on session creation rather than a separate wrapping-key exchange. Architecture docs, changelog, and tests cover the new payload and controller behavior.

Reviewed by Cursor Bugbot for commit 965e373. Bugbot is set up for automated code reviews on this repo. Configure here.

@jiexi
jiexi requested review from a team as code owners August 27, 2026 17:51
@jiexi jiexi changed the title fix(kyc-controller): Send residenceCountry and sessionClientPublicKey on kyc session creation" fix(kyc-controller): Send residenceCountry and sessionClientPublicKey on kyc session creation Aug 27, 2026
@jiexi
jiexi deployed to default-branch August 27, 2026 17:51 — with GitHub Actions Active
Co-authored-by: Cursor <cursoragent@cursor.com>
@jiexi

jiexi commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

@metamaskbot publish-previews

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@8.0.0-preview-965e373
@metamask-previews/accounts-controller@39.1.1-preview-965e373
@metamask-previews/address-book-controller@7.1.2-preview-965e373
@metamask-previews/ai-controllers@0.8.0-preview-965e373
@metamask-previews/analytics-controller@2.0.0-preview-965e373
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-965e373
@metamask-previews/announcement-controller@8.1.0-preview-965e373
@metamask-previews/app-metadata-controller@2.0.1-preview-965e373
@metamask-previews/approval-controller@9.0.2-preview-965e373
@metamask-previews/assets-controller@14.0.2-preview-965e373
@metamask-previews/assets-controllers@111.1.3-preview-965e373
@metamask-previews/authenticated-user-storage@3.0.2-preview-965e373
@metamask-previews/base-controller@9.1.0-preview-965e373
@metamask-previews/base-data-service@1.0.0-preview-965e373
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-965e373
@metamask-previews/bridge-controller@80.0.0-preview-965e373
@metamask-previews/bridge-status-controller@75.3.0-preview-965e373
@metamask-previews/build-utils@3.0.4-preview-965e373
@metamask-previews/chain-agnostic-permission@1.7.0-preview-965e373
@metamask-previews/chomp-api-service@4.0.1-preview-965e373
@metamask-previews/claims-controller@0.6.1-preview-965e373
@metamask-previews/client-controller@1.0.1-preview-965e373
@metamask-previews/client-utils@2.1.1-preview-965e373
@metamask-previews/compliance-controller@2.1.0-preview-965e373
@metamask-previews/composable-controller@12.0.1-preview-965e373
@metamask-previews/config-registry-controller@3.1.0-preview-965e373
@metamask-previews/connectivity-controller@0.3.0-preview-965e373
@metamask-previews/controller-utils@12.3.0-preview-965e373
@metamask-previews/core-backend@9.0.0-preview-965e373
@metamask-previews/delegation-controller@3.0.2-preview-965e373
@metamask-previews/earn-controller@12.2.6-preview-965e373
@metamask-previews/eip-5792-middleware@3.0.5-preview-965e373
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-965e373
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-965e373
@metamask-previews/eth-block-tracker@15.0.1-preview-965e373
@metamask-previews/eth-json-rpc-middleware@24.0.1-preview-965e373
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-965e373
@metamask-previews/foundryup@1.0.1-preview-965e373
@metamask-previews/gas-fee-controller@26.3.2-preview-965e373
@metamask-previews/gator-permissions-controller@5.0.2-preview-965e373
@metamask-previews/geolocation-controller@1.0.0-preview-965e373
@metamask-previews/java-tron-up@1.0.0-preview-965e373
@metamask-previews/json-rpc-engine@10.5.0-preview-965e373
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-965e373
@metamask-previews/keyring-controller@27.1.1-preview-965e373
@metamask-previews/kyc-controller@0.0.0-preview-965e373
@metamask-previews/local-node-utils@1.0.0-preview-965e373
@metamask-previews/logging-controller@9.0.0-preview-965e373
@metamask-previews/message-manager@14.1.2-preview-965e373
@metamask-previews/messenger@2.0.0-preview-965e373
@metamask-previews/messenger-cli@0.2.0-preview-965e373
@metamask-previews/money-account-api-data-service@0.4.1-preview-965e373
@metamask-previews/money-account-balance-service@2.4.3-preview-965e373
@metamask-previews/money-account-controller@1.0.0-preview-965e373
@metamask-previews/money-account-upgrade-controller@3.0.2-preview-965e373
@metamask-previews/money-account-utils@1.1.0-preview-965e373
@metamask-previews/multichain-account-service@13.0.2-preview-965e373
@metamask-previews/multichain-api-middleware@4.0.3-preview-965e373
@metamask-previews/multichain-network-controller@3.2.4-preview-965e373
@metamask-previews/multichain-transactions-controller@7.1.2-preview-965e373
@metamask-previews/name-controller@9.1.2-preview-965e373
@metamask-previews/network-connection-banner-controller@0.2.1-preview-965e373
@metamask-previews/network-controller@36.0.0-preview-965e373
@metamask-previews/network-enablement-controller@6.0.5-preview-965e373
@metamask-previews/notification-services-controller@26.0.1-preview-965e373
@metamask-previews/passkey-controller@3.1.0-preview-965e373
@metamask-previews/permission-controller@13.1.1-preview-965e373
@metamask-previews/permission-log-controller@5.1.0-preview-965e373
@metamask-previews/perps-controller@13.1.0-preview-965e373
@metamask-previews/phishing-controller@17.4.0-preview-965e373
@metamask-previews/platform-api-docs@0.0.0-preview-965e373
@metamask-previews/polling-controller@16.0.9-preview-965e373
@metamask-previews/preferences-controller@23.1.0-preview-965e373
@metamask-previews/profile-metrics-controller@4.0.3-preview-965e373
@metamask-previews/profile-sync-controller@29.0.0-preview-965e373
@metamask-previews/ramps-controller@20.0.0-preview-965e373
@metamask-previews/rate-limit-controller@7.0.1-preview-965e373
@metamask-previews/react-data-query@1.0.0-preview-965e373
@metamask-previews/remote-feature-flag-controller@6.1.0-preview-965e373
@metamask-previews/sample-controllers@5.0.6-preview-965e373
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-965e373
@metamask-previews/selected-network-controller@26.1.7-preview-965e373
@metamask-previews/sentinel-api-service@1.0.1-preview-965e373
@metamask-previews/shield-controller@6.0.1-preview-965e373
@metamask-previews/signature-controller@39.2.10-preview-965e373
@metamask-previews/smart-transactions-controller@25.1.1-preview-965e373
@metamask-previews/snap-account-service@2.1.2-preview-965e373
@metamask-previews/social-controllers@2.8.0-preview-965e373
@metamask-previews/solana-test-validator-up@1.0.0-preview-965e373
@metamask-previews/stellar-quickstart-up@0.0.0-preview-965e373
@metamask-previews/storage-service@1.0.2-preview-965e373
@metamask-previews/subscription-controller@8.0.1-preview-965e373
@metamask-previews/transaction-controller@69.6.1-preview-965e373
@metamask-previews/transaction-pay-controller@27.0.0-preview-965e373
@metamask-previews/user-operation-controller@41.2.9-preview-965e373
@metamask-previews/wallet@12.0.2-preview-965e373
@metamask-previews/wallet-cli@0.0.0-preview-965e373

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant