Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
1166c0c
feat: init KYC controller and add logic from mobile repo
Akaryatrh Jul 22, 2026
18c67ef
feat: update readme with architecture doc
Akaryatrh Jul 23, 2026
400b874
feat: add product support + automatic calls to kyc required and sumsu…
Akaryatrh Jul 23, 2026
9b3de4c
fix: geoCountry not updated issue
Akaryatrh Jul 23, 2026
133fa9b
fix: previously selected product is not reset
Akaryatrh Jul 23, 2026
89ac0b4
fix: issue with sumsub complete status
Akaryatrh Jul 23, 2026
3392d00
feat: update lock file
Akaryatrh Jul 23, 2026
3de6713
fix: issue with old accessToken and state update while controller has…
Akaryatrh Jul 23, 2026
49ec4f1
fix: another race condition
Akaryatrh Jul 23, 2026
20cff98
fix: add links in changelog
Akaryatrh Jul 23, 2026
abc47a6
fix: lint issue
Akaryatrh Jul 24, 2026
461473d
fix: dedupe dependencies
Akaryatrh Jul 24, 2026
41275fc
fix: cursor comments + state management
Akaryatrh Jul 24, 2026
cb246ed
fix: session state issue
Akaryatrh Jul 24, 2026
194d216
fix: lockfile after rebase
Akaryatrh Jul 24, 2026
85a764f
fix: review again state management
Akaryatrh Jul 24, 2026
ed8497c
feat: update architecture section of readme
Akaryatrh Jul 24, 2026
3d2cf99
feat: update codeowner files
Akaryatrh Jul 24, 2026
2c4805d
fix: lint issues
Akaryatrh Jul 24, 2026
1983026
replace idosSessionId with sessionId
jiexi Jul 27, 2026
a1fcb5b
Initial key derivation, wrapping, and submission
jiexi Jul 27, 2026
b9bc735
add ukycCapabilityToken submission
jiexi Jul 28, 2026
02afb3a
WIP
jiexi Jul 28, 2026
cf28727
Merge branch 'main' into feat/kyc-controller
jiexi Jul 28, 2026
966ca62
Fix key wrapping. Fix idosSessionId param
jiexi Jul 29, 2026
9c0dee1
Merge branch 'jl/kyc-controller-fix-nonce' into feat/kyc-controller
jiexi Jul 29, 2026
8eee01d
rename fetchApplicantAccessToken to createJourney
jiexi Jul 30, 2026
40bb435
polling status
jiexi Jul 30, 2026
9b99126
Merge remote-tracking branch 'origin/main' into feat/kyc-controller
Akaryatrh Jul 31, 2026
54b16fd
feat: update lockfile after merge with main
Akaryatrh Jul 31, 2026
f69ee7e
fix: lint issues
Akaryatrh Jul 31, 2026
3c32929
fix: codeowner issue
Akaryatrh Jul 31, 2026
e35605e
fix: deps constraints
Akaryatrh Jul 31, 2026
dda438f
fix: eslint file-extension-in-import
Akaryatrh Jul 31, 2026
166c8b1
fix: import lint issue
Akaryatrh Jul 31, 2026
f4b81bc
fix: deps version
Akaryatrh Jul 31, 2026
7cfb7a3
fix: messenger action type check
Akaryatrh Jul 31, 2026
1d983a3
feat: expose as a temporary solution kycstatus and finalstatus on rel…
Akaryatrh Aug 5, 2026
e31c5ed
Merge remote-tracking branch 'origin/main' into feat/kyc-controller
Akaryatrh Aug 6, 2026
2664c92
fix: remove barrel files and useless exports
Akaryatrh Aug 6, 2026
26b1ded
feat: refactor kyc service to base service pattern
Akaryatrh Aug 6, 2026
7e5464c
feat: add comments about vendorProcessing
Akaryatrh Aug 6, 2026
f17b9ea
fix: remove type cast
Akaryatrh Aug 6, 2026
11969e2
feat: move architecture info to a dedicated .md file
Akaryatrh Aug 6, 2026
52875be
feat: remove trailing logs
Akaryatrh Aug 6, 2026
ade32c8
feat: baseUrl is now mandatory for KYC service initialization
Akaryatrh Aug 6, 2026
2be2775
feat: remove base64ToBytes from crypto ts and move encoding file one …
Akaryatrh Aug 6, 2026
6b7da84
fix: yarn constraints
Akaryatrh Aug 7, 2026
801e098
fix: bump dependency for constraint
Akaryatrh Aug 7, 2026
ece1fef
fix: missing entry in readme
Akaryatrh Aug 7, 2026
81246f6
Adjusting the storage token to the spec
BjornGunnarsson Aug 12, 2026
e57e5c3
Creating a test token script
BjornGunnarsson Aug 12, 2026
176da6a
feat(ramps): add autoramp accounts, NeoBankService, and User Storage …
georgeweiler Aug 12, 2026
6964382
feat(transaction-pay-controller): add Money Account vault deposit and…
saustrie-consensys Aug 12, 2026
4a9cb43
fix(transaction-pay-controller): harden Money Account vault deposit/w…
saustrie-consensys Aug 12, 2026
8e7e0ac
feat(kyc-controller): register Money Account wallets
saustrie-consensys Aug 12, 2026
e3c13f9
feat(ramps): add NeoBankService Pix and quote client methods
saustrie-consensys Aug 12, 2026
ecb94e8
feat(kyc-controller): sync wallet registration with neobank-proxy
saustrie-consensys Aug 12, 2026
bd674c3
fix(transaction-pay-controller): do not cache skipped vault deposits
saustrie-consensys Aug 12, 2026
a40fa2f
feat(kyc-controller): add Iron Money KYC path and status polling
amitabh94 Aug 12, 2026
10b3588
Merge branch 'cursor/ramps-autoramp-accounts' into neobank-demo
georgeweiler Aug 12, 2026
189aa9e
Merge branch 'feat/iron-kyc-controller-m2' into neobank-demo
georgeweiler Aug 12, 2026
04d40bc
Merge branch 'saustrie/neobank-pix-service-methods' into neobank-demo
georgeweiler Aug 12, 2026
508cd90
Merge branch 'saustrie/vba-money-account-vault-functions' into neoban…
georgeweiler Aug 12, 2026
13585d8
feat(ramps): resolve autoramp customer id from KYC controller
georgeweiler Aug 12, 2026
7e209f7
fix(kyc-controller): sync Iron CI lint fixes onto neobank-demo (#9855)
amitabh94 Aug 12, 2026
594bb21
fix(ramps): narrow required service action list to its literal members
georgeweiler Aug 12, 2026
ae31c6e
Merge branch 'feat/moonpay-wallet-registration-stacked' into neobank-…
georgeweiler Aug 12, 2026
5311fe8
feat(kyc-controller): register Money Account wallets
saustrie-consensys Aug 12, 2026
a1b133d
feat(kyc-controller): sync wallet registration with neobank-proxy
saustrie-consensys Aug 12, 2026
fee45dd
feat(ramps): fall back to Profile Sync for autoramp customer id
georgeweiler Aug 13, 2026
b0d70fa
Merge remote-tracking branch 'origin/neobank-demo' into neobank-demo
georgeweiler Aug 13, 2026
0a3674b
refactor(ramps): move Money Account wallet signing from kyc-controlle…
amitabh94 Aug 13, 2026
8667a18
refactor(ramps): stop resolving autoramp customer id via KycControlle…
amitabh94 Aug 13, 2026
c6b9443
fix: unblock neobank-demo lint for #9853 (#9860)
amitabh94 Aug 13, 2026
c34a16a
fix: unblock neobank-demo CI and resolve Cursor findings for #9853 (#…
amitabh94 Aug 13, 2026
8bc742f
fix(ramps): stop retrying permanent neobank 4xx failures
georgeweiler Aug 13, 2026
e456f16
Merge branch 'main' into jl/neobank-demo-generalize-kyc-controller
jiexi Aug 20, 2026
98cb1a0
merge main
jiexi Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
## Confirmations Team
/packages/address-book-controller @MetaMask/confirmations
/packages/approval-controller @MetaMask/confirmations
/packages/ens-controller @MetaMask/confirmations
/packages/gas-fee-controller @MetaMask/confirmations
/packages/logging-controller @MetaMask/confirmations
/packages/message-manager @MetaMask/confirmations
Expand Down Expand Up @@ -216,6 +217,9 @@
/packages/money-account-api-data-service/package.json @MetaMask/earn @MetaMask/core-platform
/packages/money-account-api-data-service/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform
/packages/money-account-api-data-service/tsconfig.* @MetaMask/earn @MetaMask/core-platform
/packages/ens-controller/package.json @MetaMask/confirmations @MetaMask/core-platform
/packages/ens-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform
/packages/ens-controller/tsconfig.* @MetaMask/confirmations @MetaMask/core-platform
/packages/gas-fee-controller/package.json @MetaMask/confirmations @MetaMask/core-platform
/packages/gas-fee-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform
/packages/gas-fee-controller/tsconfig.* @MetaMask/confirmations @MetaMask/core-platform
Expand Down
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ yarn skills --reset # clear saved local selection
- [`@metamask/eip-5792-middleware`](packages/eip-5792-middleware)
- [`@metamask/eip-7702-internal-rpc-middleware`](packages/eip-7702-internal-rpc-middleware)
- [`@metamask/eip1193-permission-middleware`](packages/eip1193-permission-middleware)
- [`@metamask/ens-controller`](packages/ens-controller)
- [`@metamask/eth-block-tracker`](packages/eth-block-tracker)
- [`@metamask/eth-json-rpc-middleware`](packages/eth-json-rpc-middleware)
- [`@metamask/eth-json-rpc-provider`](packages/eth-json-rpc-provider)
Expand Down Expand Up @@ -180,6 +181,7 @@ linkStyle default opacity:0.5
eip_5792_middleware(["@metamask/eip-5792-middleware"]);
eip_7702_internal_rpc_middleware(["@metamask/eip-7702-internal-rpc-middleware"]);
eip1193_permission_middleware(["@metamask/eip1193-permission-middleware"]);
ens_controller(["@metamask/ens-controller"]);
eth_block_tracker(["@metamask/eth-block-tracker"]);
eth_json_rpc_middleware(["@metamask/eth-json-rpc-middleware"]);
eth_json_rpc_provider(["@metamask/eth-json-rpc-provider"]);
Expand Down Expand Up @@ -367,6 +369,7 @@ linkStyle default opacity:0.5
config_registry_controller --> keyring_controller;
config_registry_controller --> messenger;
config_registry_controller --> polling_controller;
config_registry_controller --> profile_sync_controller;
config_registry_controller --> remote_feature_flag_controller;
connectivity_controller --> base_controller;
connectivity_controller --> messenger;
Expand Down Expand Up @@ -394,6 +397,10 @@ linkStyle default opacity:0.5
eip1193_permission_middleware --> controller_utils;
eip1193_permission_middleware --> json_rpc_engine;
eip1193_permission_middleware --> permission_controller;
ens_controller --> base_controller;
ens_controller --> controller_utils;
ens_controller --> messenger;
ens_controller --> network_controller;
eth_block_tracker --> eth_json_rpc_provider;
eth_block_tracker --> json_rpc_engine;
eth_json_rpc_middleware --> eth_block_tracker;
Expand Down Expand Up @@ -536,6 +543,7 @@ linkStyle default opacity:0.5
phishing_controller --> messenger;
phishing_controller --> transaction_controller;
polling_controller --> base_controller;
polling_controller --> network_controller;
polling_controller --> messenger;
preferences_controller --> base_controller;
preferences_controller --> messenger;
Expand Down Expand Up @@ -641,6 +649,7 @@ linkStyle default opacity:0.5
transaction_pay_controller --> gas_fee_controller;
transaction_pay_controller --> keyring_controller;
transaction_pay_controller --> messenger;
transaction_pay_controller --> money_account_utils;
transaction_pay_controller --> network_controller;
transaction_pay_controller --> ramps_controller;
transaction_pay_controller --> remote_feature_flag_controller;
Expand All @@ -661,7 +670,6 @@ linkStyle default opacity:0.5
wallet --> approval_controller;
wallet --> base_controller;
wallet --> claims_controller;
wallet --> config_registry_controller;
wallet --> connectivity_controller;
wallet --> controller_utils;
wallet --> gas_fee_controller;
Expand All @@ -677,7 +685,6 @@ linkStyle default opacity:0.5
wallet --> transaction_controller;
wallet_cli --> analytics_controller;
wallet_cli --> base_controller;
wallet_cli --> config_registry_controller;
wallet_cli --> messenger;
wallet_cli --> remote_feature_flag_controller;
wallet_cli --> storage_service;
Expand Down
5 changes: 5 additions & 0 deletions codeowners.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ const PACKAGES: Record<string, PackageInfo> = {
'eip1193-permission-middleware': {
teams: ['@MetaMask/core-platform'],
},
'ens-controller': {
teams: ['@MetaMask/confirmations'],
},
'eth-block-tracker': {
teams: ['@MetaMask/core-platform'],
},
Expand Down Expand Up @@ -447,6 +450,7 @@ function buildTeamSections(): CodeownersSection[] {
rules: [
buildRuleForPackage('address-book-controller'),
buildRuleForPackage('approval-controller'),
buildRuleForPackage('ens-controller'),
buildRuleForPackage('gas-fee-controller'),
buildRuleForPackage('logging-controller'),
buildRuleForPackage('message-manager'),
Expand Down Expand Up @@ -667,6 +671,7 @@ function buildPackageReleaseSection(): CodeownersSection {
'earn-controller',
'money-account-balance-service',
'money-account-api-data-service',
'ens-controller',
'gas-fee-controller',
'gator-permissions-controller',
'geolocation-controller',
Expand Down
36 changes: 30 additions & 6 deletions eslint-suppressions.json
Original file line number Diff line number Diff line change
Expand Up @@ -958,6 +958,22 @@
"count": 1
}
},
"packages/ens-controller/src/EnsController.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 11
},
"@typescript-eslint/prefer-nullish-coalescing": {
"count": 1
},
"no-param-reassign": {
"count": 1
}
},
"packages/ens-controller/src/EnsController.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 6
}
},
"packages/eth-block-tracker/tests/withBlockTracker.ts": {
"no-restricted-syntax": {
"count": 3
Expand Down Expand Up @@ -1503,7 +1519,12 @@
},
"packages/perps-controller/src/PerpsController.ts": {
"no-restricted-syntax": {
"count": 2
"count": 3
}
},
"packages/perps-controller/src/services/HyperLiquidSubscriptionService.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
}
},
"packages/perps-controller/src/utils/myxAdapter.ts": {
Expand Down Expand Up @@ -1600,6 +1621,14 @@
"count": 1
}
},
"packages/polling-controller/src/BlockTrackerPollingController.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 2
},
"no-restricted-syntax": {
"count": 1
}
},
"packages/profile-metrics-controller/src/index.ts": {
"no-restricted-syntax": {
"count": 2
Expand Down Expand Up @@ -2189,11 +2218,6 @@
"count": 6
}
},
"packages/user-operation-controller/src/BlockTrackerPollingController.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 1
}
},
"packages/user-operation-controller/src/UserOperationController.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 6
Expand Down
1 change: 1 addition & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ const config = createConfig([
'packages/assets-controllers/src/TokenRatesController.ts',
'packages/assets-controllers/src/TokensController.ts',
'packages/controller-utils/src/siwe.ts',
'packages/ens-controller/src/EnsController.ts',
'packages/gas-fee-controller/src/GasFeeController.ts',
'packages/logging-controller/src/LoggingController.ts',
'packages/message-manager/src/AbstractMessageManager.ts',
Expand Down
3 changes: 3 additions & 0 deletions knip.config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ const config: KnipConfig = {
'packages/eip1193-permission-middleware': {
ignoreDependencies: ['@metamask/rpc-errors'],
},
'packages/ens-controller': {
ignoreDependencies: ['punycode'],
},
'packages/foundryup': {
// `anvil` and `sysctl` are external system binaries, not npm packages.
ignoreBinaries: ['anvil', 'sysctl'],
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@metamask/core-monorepo",
"version": "1202.0.0",
"version": "1191.0.0",
"private": true,
"description": "Monorepo for packages shared between MetaMask clients",
"repository": {
Expand Down
21 changes: 1 addition & 20 deletions packages/account-tree-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [8.0.0]

### Added

- **BREAKING:** Add `:{import,export}State` ([#9663](https://github.com/MetaMask/core/pull/9663), [#9826](https://github.com/MetaMask/core/pull/9826), [#9863](https://github.com/MetaMask/core/pull/9863), [#9864](https://github.com/MetaMask/core/pull/9864), [#9883](https://github.com/MetaMask/core/pull/9883))
- The following actions must be registered on the controller's messenger: `MultichainAccountService:createMultichainAccountWallet`, `KeyringController:with{Controller,KeyringV2,KeyringV2Unsafe}`.
- This can be used to serialize/deserialize the entire account-tree state (metadata + secrets if needed).
- The `password` is required whenever secrets are requested.
- The payload is versionned and hard-coded to version 1 for now.
- Add `AccountTreeController:initialized` event, emitted at the end of `init()` when the account tree is fully built and ready to consume ([#9880](https://github.com/MetaMask/core/pull/9880))
- Add `AccountTreeController:uninitialized` event, emitted at the end of `clearState()` when the account tree has been torn down ([#9880](https://github.com/MetaMask/core/pull/9880))

### Changed

- Bump `@metamask/accounts-controller` from `^39.0.7` to `^39.1.0` ([#9807](https://github.com/MetaMask/core/pull/9807))
- Bump `@metamask/multichain-account-service` from `^13.0.1` to `^13.0.2` ([#9886](https://github.com/MetaMask/core/pull/9886))

### Fixed

- `clearState` now resets internal mappings and resets selected account group through `:selectedAccountGroupChange` ([#9825](https://github.com/MetaMask/core/pull/9825))
- Consumers are (and were already) expected to handle `''` for `:selectedAccountGroupChange` (which can happens during onboarding, and now, during wallet resets).

## [7.6.1]

Expand Down Expand Up @@ -670,8 +652,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Initial release ([#5847](https://github.com/MetaMask/core/pull/5847))
- Grouping accounts into 3 main categories: Entropy source, Snap ID, keyring types.

[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@8.0.0...HEAD
[8.0.0]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@7.6.1...@metamask/account-tree-controller@8.0.0
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@7.6.1...HEAD
[7.6.1]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@7.6.0...@metamask/account-tree-controller@7.6.1
[7.6.0]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@7.5.5...@metamask/account-tree-controller@7.6.0
[7.5.5]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@7.5.4...@metamask/account-tree-controller@7.5.5
Expand Down
5 changes: 2 additions & 3 deletions packages/account-tree-controller/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@metamask/account-tree-controller",
"version": "8.0.0",
"version": "7.6.1",
"description": "Controller to group account together based on some pre-defined rules",
"keywords": [
"Ethereum",
Expand Down Expand Up @@ -60,7 +60,7 @@
"@metamask/keyring-api": "^24.0.0",
"@metamask/keyring-controller": "^27.1.1",
"@metamask/messenger": "^2.0.0",
"@metamask/multichain-account-service": "^13.0.2",
"@metamask/multichain-account-service": "^13.0.1",
"@metamask/profile-sync-controller": "^29.0.0",
"@metamask/snaps-controllers": "^19.0.0",
"@metamask/snaps-sdk": "^11.0.0",
Expand All @@ -73,7 +73,6 @@
"devDependencies": {
"@metamask/account-api": "^2.0.0",
"@metamask/auto-changelog": "^6.1.0",
"@metamask/eth-hd-keyring": "^15.0.0",
"@metamask/providers": "^22.1.0",
"@ts-bridge/cli": "^0.6.4",
"@types/jest": "^30.0.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,44 +233,6 @@ export type AccountTreeControllerSyncWithUserStorageAtLeastOnceAction = {
handler: AccountTreeController['syncWithUserStorageAtLeastOnce'];
};

/**
* Produces a versioned snapshot of the current wallet and group state.
*
* When `options.includeSecrets` is `true`, `options.password` is required
* and verified against the vault before any secret is read. Without
* `includeSecrets`, only metadata (names, pinned, hidden) is exported and
* no password is needed.
*
* @param options - Export options.
* @returns A promise resolving to an `AccountTreeSnapshot`.
* @throws If the vault is locked or the password is incorrect.
*/
export type AccountTreeControllerExportStateAction = {
type: `AccountTreeController:exportState`;
handler: AccountTreeController['exportState'];
};

/**
* Applies a validated snapshot to the current state.
*
* Accepts an {@link AccountTreeSnapshot} only — untrusted wire data must be
* parsed with {@link AccountTreeSnapshot.deserialize} first. Callers may
* filter the snapshot with {@link AccountTreeSnapshot.filterWallets},
* {@link AccountTreeSnapshot.filterGroups}, or
* {@link AccountTreeSnapshot.filterAllGroups} before importing.
*
* New mnemonic wallets are imported via `MultichainAccountService` and new
* private-key accounts via `KeyringController`. Metadata (name, pinned,
* hidden) is applied to all existing and newly created wallets / groups.
*
* @param snapshot - The validated snapshot to import.
* @returns A promise that resolves when the import is complete.
*/
export type AccountTreeControllerImportStateAction = {
type: `AccountTreeController:importState`;
handler: AccountTreeController['importState'];
};

/**
* Union of all AccountTreeController action types.
*/
Expand All @@ -292,6 +254,4 @@ export type AccountTreeControllerMethodActions =
| AccountTreeControllerSetAccountGroupHiddenAction
| AccountTreeControllerClearStateAction
| AccountTreeControllerSyncWithUserStorageAction
| AccountTreeControllerSyncWithUserStorageAtLeastOnceAction
| AccountTreeControllerExportStateAction
| AccountTreeControllerImportStateAction;
| AccountTreeControllerSyncWithUserStorageAtLeastOnceAction;
Loading
Loading