Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/error-reporting-service/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6462](https://github.com/MetaMask/core/pull/6462))
- Previously, `ErrorReportingService` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
- Bump `@metamask/base-controller` from `^8.0.1` to `^8.4.0` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465), [#6632](https://github.com/MetaMask/core/pull/6632))

## [2.0.0]
Expand Down
3 changes: 2 additions & 1 deletion packages/error-reporting-service/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@
"since-latest-release": "../../scripts/since-latest-release.sh"
},
"dependencies": {
"@metamask/base-controller": "^8.4.1"
"@metamask/base-controller": "^8.4.1",
"@metamask/messenger": "^0.3.0"
},
"devDependencies": {
"@metamask/auto-changelog": "^3.4.4",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { Messenger } from '@metamask/base-controller';
import {
Messenger,
type MessengerActions,
type MessengerEvents,
} from '@metamask/messenger';
import { captureException as sentryCaptureException } from '@sentry/core';

import type { ErrorReportingServiceMessenger } from './error-reporting-service';
Expand Down Expand Up @@ -68,9 +72,11 @@ describe('ErrorReportingService', () => {
* @returns The messenger.
*/
function buildMessenger(): ErrorReportingServiceMessenger {
return new Messenger().getRestricted({
name: 'ErrorReportingService',
allowedActions: [],
allowedEvents: [],
return new Messenger<
'ErrorReportingService',
MessengerActions<ErrorReportingServiceMessenger>,
MessengerEvents<ErrorReportingServiceMessenger>
>({
namespace: 'ErrorReportingService',
});
}
46 changes: 31 additions & 15 deletions packages/error-reporting-service/src/error-reporting-service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { RestrictedMessenger } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';

/**
* The action which can be used to report an error.
Expand Down Expand Up @@ -37,12 +37,10 @@ type AllowedEvents = never;
* The messenger restricted to actions and events that
* {@link ErrorReportingService} needs to access.
*/
export type ErrorReportingServiceMessenger = RestrictedMessenger<
export type ErrorReportingServiceMessenger = Messenger<
'ErrorReportingService',
ErrorReportingServiceActions | AllowedActions,
ErrorReportingServiceEvents | AllowedEvents,
AllowedActions['type'],
AllowedEvents['type']
ErrorReportingServiceEvents | AllowedEvents
>;

/**
Expand All @@ -69,12 +67,10 @@ type ErrorReportingServiceOptions = {
*
* // Define the messenger type for the controller.
* type AllowedActions = ErrorReportingServiceCaptureExceptionAction;
* type ExampleControllerMessenger = RestrictedMessenger<
* type ExampleControllerMessenger = Messenger<
* 'ExampleController',
* AllowedActions,
* never,
* AllowedActions['type'],
* never
* >;
*
* // Define the controller.
Expand All @@ -86,7 +82,7 @@ type ErrorReportingServiceOptions = {
* doSomething() {
* // Imagine that we do something that produces an error and we want to
* // report the error.
* this.messagingSystem.call(
* this.messenger.call(
* 'ErrorReportingService:captureException',
* new Error('Something went wrong'),
* );
Expand All @@ -99,23 +95,43 @@ type ErrorReportingServiceOptions = {
* import { ErrorReportingService } from '@metamask/error-reporting-service';
* import { ExampleController } from './example-controller';
*
* type AllActions = MessengerActions<ErrorReportingServiceMessenger>;
*
* type AllEvents = MessengerEvents<ErrorReportingServiceMessenger>;
*
* type RootMessenger = Messenger<'Root', AllActions, AllEvents>;
*
* // Create a global messenger.
* const globalMessenger = new Messenger();
Comment on lines +98 to 105
Copy link
Contributor

@mcmire mcmire Sep 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can simplify this a bit? Also in this example should we go with global messenger instead of root messenger to match the variable name below this?

Suggested change
* type AllActions = MessengerActions<ErrorReportingServiceMessenger>;
*
* type AllEvents = MessengerEvents<ErrorReportingServiceMessenger>;
*
* type RootMessenger = Messenger<'Root', AllActions, AllEvents>;
*
* // Create a global messenger.
* const globalMessenger = new Messenger();
* type GlobalMessenger = Messenger<
* 'Global',
* MessengerActions<ErrorReportingServiceMessenger>,
* MessengerEvents<ErrorReportingServiceMessenger>
* >;
*
* // Create a global messenger.
* const globalMessenger: GlobalMessenger = new Messenger();

*
* // Register handler for the `ErrorReportingService:captureException`
* // action in the global messenger.
* const errorReportingServiceMessenger = globalMessenger.getRestricted({
* allowedActions: [],
* allowedEvents: [],
* const errorReportingServiceMessenger = new Messenger<
* 'ErrorReportingService',
* MessengerActions<ErrorReportingServiceMessenger>,
* MessengerEvents<ErrorReportingServiceMessenger>,
* RootMessenger
* >({
* namespace: 'ErrorReportingService',
* parent: globalMessenger,
* });
* const errorReportingService = new ErrorReportingService({
* messenger: errorReportingServiceMessenger,
* captureException,
* });
*
* const exampleControllerMessenger = globalMessenger.getRestricted({
* allowedActions: ['ErrorReportingService:captureException'],
* allowedEvents: [],
* const exampleControllerMessenger = new Messenger<
* 'ExampleController',
* MessengerActions<ExampleControllerMessenger>,
* MessengerEvents<ExampleControllerMessenger>,
* RootMessenger
* >({
* namespace: 'ExampleController',
* parent: globalMessenger,
* });
* globalMessenger.delegate({
* messenger: exampleControllerMessenger,
* actions: ['ErrorReportingService:captureException'],
* });
* const exampleController = new ExampleController({
* messenger: exampleControllerMessenger,
Expand Down
1 change: 1 addition & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3339,6 +3339,7 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^3.4.4"
"@metamask/base-controller": "npm:^8.4.1"
"@metamask/messenger": "npm:^0.3.0"
"@sentry/core": "npm:^9.22.0"
"@types/jest": "npm:^27.4.1"
deepmerge: "npm:^4.2.2"
Expand Down
Loading