Skip to content

Commit e50bb63

Browse files
authored
feat: add @metamask/profile-metrics-controller package with ProfileMetricsService (#7194)
## Explanation <!-- Thanks for your contribution! Take a moment to answer these questions so that reviewers have the information they need to properly understand your changes: * What is the current state of things and why does it need to change? * What is the solution your changes offer and how does it work? * Are there any changes whose purpose might not obvious to those unfamiliar with the domain? * If your primary goal was to update one package but you found you had to update another one along the way, why did you do so? * If you had to upgrade a dependency, why did you do so? --> The `@metamask/profile-metrics-controller` package is being added to the monorepo. `ProfileMetricsService` is also being added to the package, to be used for sending requests to the Authentication API. The service will be consumed by `ProfileMetricsController`, which is being added in this follow-up PR: #7196 ## References <!-- Are there any issues that this pull request is tied to? Are there other links that reviewers should consult to understand these changes better? Are there client or consumer pull requests to adopt any breaking changes? For example: * Fixes #12345 * Related to #67890 --> * Related to https://consensyssoftware.atlassian.net/browse/WPC-179 ## 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](https://github.com/MetaMask/core/tree/main/docs/contributing.md#updating-changelogs), highlighting breaking changes as necessary - [ ] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds new @metamask/profile-metrics-controller with a ProfileMetricsService for submitting metrics to the Auth API, plus tests and repo wiring. > > - **New Package: `@metamask/profile-metrics-controller`** > - Implements `ProfileMetricsService` with `submitMetrics` using `AuthenticationController:getBearerToken` and `createServicePolicy` (retry, degraded threshold, circuit breaker); environment-aware `getAuthUrl`. > - Exposes messenger action `ProfileMetricsService:submitMetrics`; exports types and service. > - Adds tests covering success, missing `entropySourceId`, degraded timing, retry limits, circuit break/open/restore. > - Includes package scaffolding: `package.json`, `jest.config.js`, `tsconfig*`, `typedoc.json`, `README`, `LICENSE`, `CHANGELOG`. > - **Monorepo Integration** > - Updates `README.md` package list and dependency graph to include `profile_metrics_controller` and its deps. > - Adds ownership/team mappings in `.github/CODEOWNERS` and `teams.json`. > - Adds TS project references in root `tsconfig.json` and `tsconfig.build.json`; updates `yarn.lock`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 274982b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent 9dc36c2 commit e50bb63

18 files changed

+945
-50
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
/packages/polling-controller @MetaMask/core-platform
7777
/packages/preferences-controller @MetaMask/core-platform
7878
/packages/rate-limit-controller @MetaMask/core-platform
79+
/packages/profile-metrics-controller @MetaMask/core-platform
7980

8081
## Web3Auth Team
8182
/packages/seedless-onboarding-controller @MetaMask/web3auth

README.md

Lines changed: 64 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Each package in this repository has its own README where you can find installati
6969
- [`@metamask/phishing-controller`](packages/phishing-controller)
7070
- [`@metamask/polling-controller`](packages/polling-controller)
7171
- [`@metamask/preferences-controller`](packages/preferences-controller)
72+
- [`@metamask/profile-metrics-controller`](packages/profile-metrics-controller)
7273
- [`@metamask/profile-sync-controller`](packages/profile-sync-controller)
7374
- [`@metamask/rate-limit-controller`](packages/rate-limit-controller)
7475
- [`@metamask/remote-feature-flag-controller`](packages/remote-feature-flag-controller)
@@ -140,6 +141,7 @@ linkStyle default opacity:0.5
140141
phishing_controller(["@metamask/phishing-controller"]);
141142
polling_controller(["@metamask/polling-controller"]);
142143
preferences_controller(["@metamask/preferences-controller"]);
144+
profile_metrics_controller(["@metamask/profile-metrics-controller"]);
143145
profile_sync_controller(["@metamask/profile-sync-controller"]);
144146
rate_limit_controller(["@metamask/rate-limit-controller"]);
145147
remote_feature_flag_controller(["@metamask/remote-feature-flag-controller"]);
@@ -153,85 +155,90 @@ linkStyle default opacity:0.5
153155
transaction_controller(["@metamask/transaction-controller"]);
154156
transaction_pay_controller(["@metamask/transaction-pay-controller"]);
155157
user_operation_controller(["@metamask/user-operation-controller"]);
156-
account_tree_controller --> base_controller;
157-
account_tree_controller --> messenger;
158158
account_tree_controller --> accounts_controller;
159+
account_tree_controller --> base_controller;
159160
account_tree_controller --> keyring_controller;
161+
account_tree_controller --> messenger;
160162
account_tree_controller --> multichain_account_service;
161163
account_tree_controller --> profile_sync_controller;
162164
accounts_controller --> base_controller;
163-
accounts_controller --> messenger;
164-
accounts_controller --> controller_utils;
165165
accounts_controller --> keyring_controller;
166+
accounts_controller --> messenger;
166167
accounts_controller --> network_controller;
168+
accounts_controller --> controller_utils;
167169
address_book_controller --> base_controller;
168170
address_book_controller --> controller_utils;
169171
address_book_controller --> messenger;
172+
analytics_controller --> base_controller;
173+
analytics_controller --> messenger;
170174
announcement_controller --> base_controller;
171175
announcement_controller --> messenger;
172176
app_metadata_controller --> base_controller;
173177
app_metadata_controller --> messenger;
174178
approval_controller --> base_controller;
175179
approval_controller --> messenger;
176-
assets_controllers --> base_controller;
177-
assets_controllers --> controller_utils;
178-
assets_controllers --> messenger;
179-
assets_controllers --> polling_controller;
180180
assets_controllers --> account_tree_controller;
181181
assets_controllers --> accounts_controller;
182182
assets_controllers --> approval_controller;
183+
assets_controllers --> base_controller;
184+
assets_controllers --> controller_utils;
183185
assets_controllers --> core_backend;
184186
assets_controllers --> keyring_controller;
187+
assets_controllers --> messenger;
185188
assets_controllers --> multichain_account_service;
186189
assets_controllers --> network_controller;
187190
assets_controllers --> permission_controller;
188191
assets_controllers --> phishing_controller;
192+
assets_controllers --> polling_controller;
189193
assets_controllers --> preferences_controller;
194+
assets_controllers --> profile_sync_controller;
190195
assets_controllers --> transaction_controller;
191196
base_controller --> messenger;
192197
base_controller --> json_rpc_engine;
198+
bridge_controller --> accounts_controller;
199+
bridge_controller --> assets_controllers;
193200
bridge_controller --> base_controller;
194201
bridge_controller --> controller_utils;
195202
bridge_controller --> gas_fee_controller;
196203
bridge_controller --> messenger;
197204
bridge_controller --> multichain_network_controller;
198-
bridge_controller --> polling_controller;
199-
bridge_controller --> accounts_controller;
200-
bridge_controller --> assets_controllers;
201-
bridge_controller --> eth_json_rpc_provider;
202205
bridge_controller --> network_controller;
206+
bridge_controller --> polling_controller;
203207
bridge_controller --> remote_feature_flag_controller;
204208
bridge_controller --> transaction_controller;
205-
bridge_status_controller --> base_controller;
206-
bridge_status_controller --> controller_utils;
207-
bridge_status_controller --> polling_controller;
209+
bridge_controller --> eth_json_rpc_provider;
208210
bridge_status_controller --> accounts_controller;
211+
bridge_status_controller --> base_controller;
209212
bridge_status_controller --> bridge_controller;
213+
bridge_status_controller --> controller_utils;
210214
bridge_status_controller --> gas_fee_controller;
211215
bridge_status_controller --> network_controller;
216+
bridge_status_controller --> polling_controller;
212217
bridge_status_controller --> transaction_controller;
213218
chain_agnostic_permission --> controller_utils;
214219
chain_agnostic_permission --> network_controller;
215220
chain_agnostic_permission --> permission_controller;
216221
claims_controller --> base_controller;
217222
claims_controller --> controller_utils;
218223
claims_controller --> messenger;
224+
claims_controller --> keyring_controller;
225+
claims_controller --> profile_sync_controller;
219226
composable_controller --> base_controller;
220227
composable_controller --> messenger;
221228
composable_controller --> json_rpc_engine;
229+
core_backend --> accounts_controller;
222230
core_backend --> controller_utils;
231+
core_backend --> keyring_controller;
223232
core_backend --> messenger;
224233
core_backend --> profile_sync_controller;
225-
core_backend --> accounts_controller;
226-
core_backend --> keyring_controller;
227-
delegation_controller --> base_controller;
228-
delegation_controller --> messenger;
229234
delegation_controller --> accounts_controller;
235+
delegation_controller --> base_controller;
230236
delegation_controller --> keyring_controller;
237+
delegation_controller --> messenger;
238+
earn_controller --> account_tree_controller;
231239
earn_controller --> base_controller;
232240
earn_controller --> controller_utils;
233241
earn_controller --> messenger;
234-
earn_controller --> account_tree_controller;
235242
earn_controller --> network_controller;
236243
earn_controller --> transaction_controller;
237244
eip_5792_middleware --> messenger;
@@ -253,15 +260,17 @@ linkStyle default opacity:0.5
253260
eth_json_rpc_middleware --> eth_block_tracker;
254261
eth_json_rpc_middleware --> eth_json_rpc_provider;
255262
eth_json_rpc_middleware --> json_rpc_engine;
263+
eth_json_rpc_middleware --> message_manager;
256264
eth_json_rpc_middleware --> error_reporting_service;
257265
eth_json_rpc_middleware --> network_controller;
258266
eth_json_rpc_provider --> json_rpc_engine;
259267
gas_fee_controller --> base_controller;
260268
gas_fee_controller --> controller_utils;
261-
gas_fee_controller --> polling_controller;
262269
gas_fee_controller --> network_controller;
270+
gas_fee_controller --> polling_controller;
263271
gator_permissions_controller --> base_controller;
264272
gator_permissions_controller --> messenger;
273+
gator_permissions_controller --> transaction_controller;
265274
json_rpc_middleware_stream --> json_rpc_engine;
266275
keyring_controller --> base_controller;
267276
keyring_controller --> messenger;
@@ -271,38 +280,39 @@ linkStyle default opacity:0.5
271280
message_manager --> base_controller;
272281
message_manager --> controller_utils;
273282
message_manager --> messenger;
274-
multichain_account_service --> base_controller;
275-
multichain_account_service --> messenger;
276283
multichain_account_service --> accounts_controller;
284+
multichain_account_service --> base_controller;
285+
multichain_account_service --> error_reporting_service;
277286
multichain_account_service --> keyring_controller;
287+
multichain_account_service --> messenger;
278288
multichain_api_middleware --> chain_agnostic_permission;
279289
multichain_api_middleware --> controller_utils;
280290
multichain_api_middleware --> json_rpc_engine;
281291
multichain_api_middleware --> network_controller;
282292
multichain_api_middleware --> permission_controller;
283293
multichain_api_middleware --> multichain_transactions_controller;
294+
multichain_network_controller --> accounts_controller;
284295
multichain_network_controller --> base_controller;
285296
multichain_network_controller --> controller_utils;
286297
multichain_network_controller --> messenger;
287-
multichain_network_controller --> accounts_controller;
288-
multichain_network_controller --> keyring_controller;
289298
multichain_network_controller --> network_controller;
299+
multichain_network_controller --> keyring_controller;
300+
multichain_transactions_controller --> accounts_controller;
290301
multichain_transactions_controller --> base_controller;
291302
multichain_transactions_controller --> messenger;
292303
multichain_transactions_controller --> polling_controller;
293-
multichain_transactions_controller --> accounts_controller;
294304
multichain_transactions_controller --> keyring_controller;
295305
name_controller --> base_controller;
296306
name_controller --> controller_utils;
297307
name_controller --> messenger;
298308
network_controller --> base_controller;
299309
network_controller --> controller_utils;
310+
network_controller --> error_reporting_service;
300311
network_controller --> eth_block_tracker;
301312
network_controller --> eth_json_rpc_middleware;
302313
network_controller --> eth_json_rpc_provider;
303314
network_controller --> json_rpc_engine;
304315
network_controller --> messenger;
305-
network_controller --> error_reporting_service;
306316
network_enablement_controller --> base_controller;
307317
network_enablement_controller --> controller_utils;
308318
network_enablement_controller --> messenger;
@@ -311,14 +321,14 @@ linkStyle default opacity:0.5
311321
network_enablement_controller --> transaction_controller;
312322
notification_services_controller --> base_controller;
313323
notification_services_controller --> controller_utils;
314-
notification_services_controller --> messenger;
315324
notification_services_controller --> keyring_controller;
325+
notification_services_controller --> messenger;
316326
notification_services_controller --> profile_sync_controller;
327+
permission_controller --> approval_controller;
317328
permission_controller --> base_controller;
318329
permission_controller --> controller_utils;
319330
permission_controller --> json_rpc_engine;
320331
permission_controller --> messenger;
321-
permission_controller --> approval_controller;
322332
permission_log_controller --> base_controller;
323333
permission_log_controller --> json_rpc_engine;
324334
permission_log_controller --> messenger;
@@ -331,24 +341,28 @@ linkStyle default opacity:0.5
331341
polling_controller --> network_controller;
332342
preferences_controller --> base_controller;
333343
preferences_controller --> controller_utils;
334-
preferences_controller --> messenger;
335344
preferences_controller --> keyring_controller;
336-
profile_sync_controller --> base_controller;
337-
profile_sync_controller --> messenger;
345+
preferences_controller --> messenger;
346+
profile_metrics_controller --> base_controller;
347+
profile_metrics_controller --> controller_utils;
348+
profile_metrics_controller --> messenger;
349+
profile_metrics_controller --> profile_sync_controller;
338350
profile_sync_controller --> address_book_controller;
351+
profile_sync_controller --> base_controller;
339352
profile_sync_controller --> keyring_controller;
353+
profile_sync_controller --> messenger;
340354
rate_limit_controller --> base_controller;
341355
rate_limit_controller --> messenger;
342356
remote_feature_flag_controller --> base_controller;
343357
remote_feature_flag_controller --> controller_utils;
344358
remote_feature_flag_controller --> messenger;
345359
sample_controllers --> base_controller;
346360
sample_controllers --> messenger;
347-
sample_controllers --> controller_utils;
348361
sample_controllers --> network_controller;
362+
sample_controllers --> controller_utils;
349363
seedless_onboarding_controller --> base_controller;
350-
seedless_onboarding_controller --> messenger;
351364
seedless_onboarding_controller --> keyring_controller;
365+
seedless_onboarding_controller --> messenger;
352366
selected_network_controller --> base_controller;
353367
selected_network_controller --> json_rpc_engine;
354368
selected_network_controller --> messenger;
@@ -359,53 +373,53 @@ linkStyle default opacity:0.5
359373
shield_controller --> messenger;
360374
shield_controller --> signature_controller;
361375
shield_controller --> transaction_controller;
362-
signature_controller --> base_controller;
363-
signature_controller --> controller_utils;
364-
signature_controller --> messenger;
365376
signature_controller --> accounts_controller;
366377
signature_controller --> approval_controller;
378+
signature_controller --> base_controller;
379+
signature_controller --> controller_utils;
367380
signature_controller --> gator_permissions_controller;
368381
signature_controller --> keyring_controller;
369382
signature_controller --> logging_controller;
383+
signature_controller --> messenger;
370384
signature_controller --> network_controller;
371385
subscription_controller --> base_controller;
372386
subscription_controller --> controller_utils;
373387
subscription_controller --> messenger;
374388
subscription_controller --> polling_controller;
375-
subscription_controller --> transaction_controller;
376389
subscription_controller --> profile_sync_controller;
390+
subscription_controller --> transaction_controller;
377391
token_search_discovery_controller --> base_controller;
378392
token_search_discovery_controller --> messenger;
379-
transaction_controller --> base_controller;
380-
transaction_controller --> controller_utils;
381-
transaction_controller --> messenger;
382393
transaction_controller --> accounts_controller;
383394
transaction_controller --> approval_controller;
384-
transaction_controller --> eth_block_tracker;
385-
transaction_controller --> eth_json_rpc_provider;
395+
transaction_controller --> base_controller;
396+
transaction_controller --> controller_utils;
386397
transaction_controller --> gas_fee_controller;
398+
transaction_controller --> messenger;
387399
transaction_controller --> network_controller;
388400
transaction_controller --> remote_feature_flag_controller;
389-
transaction_pay_controller --> base_controller;
390-
transaction_pay_controller --> controller_utils;
391-
transaction_pay_controller --> messenger;
401+
transaction_controller --> eth_block_tracker;
402+
transaction_controller --> eth_json_rpc_provider;
392403
transaction_pay_controller --> assets_controllers;
404+
transaction_pay_controller --> base_controller;
393405
transaction_pay_controller --> bridge_controller;
394406
transaction_pay_controller --> bridge_status_controller;
407+
transaction_pay_controller --> controller_utils;
395408
transaction_pay_controller --> gas_fee_controller;
409+
transaction_pay_controller --> messenger;
396410
transaction_pay_controller --> network_controller;
397411
transaction_pay_controller --> remote_feature_flag_controller;
398412
transaction_pay_controller --> transaction_controller;
413+
user_operation_controller --> approval_controller;
399414
user_operation_controller --> base_controller;
400415
user_operation_controller --> controller_utils;
401-
user_operation_controller --> messenger;
402-
user_operation_controller --> polling_controller;
403-
user_operation_controller --> approval_controller;
404-
user_operation_controller --> eth_block_tracker;
405416
user_operation_controller --> gas_fee_controller;
406417
user_operation_controller --> keyring_controller;
418+
user_operation_controller --> messenger;
407419
user_operation_controller --> network_controller;
420+
user_operation_controller --> polling_controller;
408421
user_operation_controller --> transaction_controller;
422+
user_operation_controller --> eth_block_tracker;
409423
```
410424

411425
<!-- end dependency graph -->
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
### Added
11+
12+
- Initial release ([#7194](https://github.com/MetaMask/core/pull/7194))
13+
14+
[Unreleased]: https://github.com/MetaMask/core/
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
MIT License
2+
3+
Copyright (c) 2025 MetaMask
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# `@metamask/profile-metrics-controller`
2+
3+
## Installation
4+
5+
`yarn add @metamask/profile-metrics-controller`
6+
7+
or
8+
9+
`npm install @metamask/profile-metrics-controller`
10+
11+
## Contributing
12+
13+
This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme).
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* For a detailed explanation regarding each configuration property and type check, visit:
3+
* https://jestjs.io/docs/configuration
4+
*/
5+
6+
const merge = require('deepmerge');
7+
const path = require('path');
8+
9+
const baseConfig = require('../../jest.config.packages');
10+
11+
const displayName = path.basename(__dirname);
12+
13+
module.exports = merge(baseConfig, {
14+
// The display name when running multiple projects
15+
displayName,
16+
17+
// An object that configures minimum threshold enforcement for coverage results
18+
coverageThreshold: {
19+
global: {
20+
branches: 100,
21+
functions: 100,
22+
lines: 100,
23+
statements: 100,
24+
},
25+
},
26+
});

0 commit comments

Comments
 (0)