Skip to content
Merged
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 README.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ linkStyle default opacity:0.5
earn_controller --> transaction_controller;
eip_5792_middleware --> transaction_controller;
eip_5792_middleware --> keyring_controller;
eip_7702_internal_rpc_middleware --> controller_utils;
eip1193_permission_middleware --> chain_agnostic_permission;
eip1193_permission_middleware --> controller_utils;
eip1193_permission_middleware --> json_rpc_engine;
Expand All @@ -241,6 +242,7 @@ linkStyle default opacity:0.5
keyring_controller --> base_controller;
logging_controller --> base_controller;
logging_controller --> controller_utils;
logging_controller --> messenger;
message_manager --> base_controller;
message_manager --> controller_utils;
multichain_account_service --> base_controller;
Expand Down
6 changes: 6 additions & 0 deletions packages/logging-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6463](https://github.com/MetaMask/core/pull/6463))
- Previously, `LoggingController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6463](https://github.com/MetaMask/core/pull/6463))

## [6.1.1]

### Changed
Expand Down
1 change: 1 addition & 0 deletions packages/logging-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"dependencies": {
"@metamask/base-controller": "^8.4.2",
"@metamask/controller-utils": "^11.14.1",
"@metamask/messenger": "^0.3.0",
"uuid": "^8.3.2"
},
"devDependencies": {
Expand Down
105 changes: 58 additions & 47 deletions packages/logging-controller/src/LoggingController.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
import {
Messenger,
MOCK_ANY_NAMESPACE,
type MessengerActions,
type MessengerEvents,
type MockAnyNamespace,
} from '@metamask/messenger';
import * as uuid from 'uuid';

import type { LoggingControllerActions } from './LoggingController';
import type { LoggingControllerMessenger } from './LoggingController';
import { LoggingController } from './LoggingController';
import { LogType } from './logTypes';
import { SigningMethod, SigningStage } from './logTypes/EthSignLog';
Expand All @@ -15,44 +22,56 @@ jest.mock('uuid', () => {
};
});

const name = 'LoggingController';
type AllLoggingControllerActions = MessengerActions<LoggingControllerMessenger>;

type AllLoggingControllerEvents = MessengerEvents<LoggingControllerMessenger>;

type RootMessenger = Messenger<
MockAnyNamespace,
AllLoggingControllerActions,
AllLoggingControllerEvents
>;

const namespace = 'LoggingController';

/**
* Constructs a unrestricted messenger.
* Constructs a root messenger instance.
*
* @returns A unrestricted messenger.
* @returns A root messenger.
*/
function getUnrestrictedMessenger() {
return new Messenger<LoggingControllerActions, never>();
function getRootMessenger(): RootMessenger {
return new Messenger({ namespace: MOCK_ANY_NAMESPACE });
}

/**
* Constructs a restricted messenger.
* Constructs a messenger instance for LoggingController.
*
* @param messenger - An optional unrestricted messenger
* @returns A restricted messenger.
* @param messenger - An optional root messenger
* @returns A controller messenger.
*/
function getRestrictedMessenger(messenger = getUnrestrictedMessenger()) {
return messenger.getRestricted({
name,
allowedActions: [],
allowedEvents: [],
function getLoggingControllerMessenger(messenger = getRootMessenger()) {
return new Messenger<
typeof namespace,
AllLoggingControllerActions,
AllLoggingControllerEvents,
RootMessenger
>({
namespace,
parent: messenger,
});
}

describe('LoggingController', () => {
it('action: LoggingController:add with generic log', async () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);

const controller = new LoggingController({
messenger,
});

expect(
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/await-thenable
await unrestricted.call('LoggingController:add', {
rootMessenger.call('LoggingController:add', {
type: LogType.GenericLog,
data: `Generic log`,
}),
Expand All @@ -70,17 +89,15 @@ describe('LoggingController', () => {
});

it('action: LoggingController:add for a signing request', async () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);

const controller = new LoggingController({
messenger,
});

expect(
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/await-thenable
await unrestricted.call('LoggingController:add', {
rootMessenger.call('LoggingController:add', {
type: LogType.EthSignLog,
data: {
signingMethod: SigningMethod.PersonalSign,
Expand All @@ -106,18 +123,16 @@ describe('LoggingController', () => {
});

it('action: LoggingController:add prevents possible collision of ids', async () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);
const uuidV1Spy = jest.spyOn(uuid, 'v1');

const controller = new LoggingController({
messenger,
});

expect(
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/await-thenable
await unrestricted.call('LoggingController:add', {
rootMessenger.call('LoggingController:add', {
type: LogType.GenericLog,
data: `Generic log`,
}),
Expand All @@ -128,9 +143,7 @@ describe('LoggingController', () => {
uuidV1Spy.mockReturnValueOnce(id);

expect(
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/await-thenable
await unrestricted.call('LoggingController:add', {
rootMessenger.call('LoggingController:add', {
type: LogType.GenericLog,
data: `Generic log 2`,
}),
Expand Down Expand Up @@ -159,17 +172,15 @@ describe('LoggingController', () => {
});

it('internal method: clear', async () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);

const controller = new LoggingController({
messenger,
});

expect(
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/await-thenable
await unrestricted.call('LoggingController:add', {
rootMessenger.call('LoggingController:add', {
type: LogType.EthSignLog,
data: {
signingMethod: SigningMethod.PersonalSign,
Expand All @@ -186,8 +197,8 @@ describe('LoggingController', () => {

describe('metadata', () => {
it('includes expected state in debug snapshots', () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);
const controller = new LoggingController({
messenger,
});
Expand All @@ -196,14 +207,14 @@ describe('LoggingController', () => {
deriveStateFromMetadata(
controller.state,
controller.metadata,
'anonymous',
'includeInDebugSnapshot',
),
).toMatchInlineSnapshot(`Object {}`);
});

it('includes expected state in state logs', () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);
const controller = new LoggingController({
messenger,
});
Expand All @@ -222,8 +233,8 @@ describe('LoggingController', () => {
});

it('persists expected state', () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);
const controller = new LoggingController({
messenger,
});
Expand All @@ -242,8 +253,8 @@ describe('LoggingController', () => {
});

it('exposes expected state to UI', () => {
const unrestricted = getUnrestrictedMessenger();
const messenger = getRestrictedMessenger(unrestricted);
const rootMessenger = getRootMessenger();
const messenger = getLoggingControllerMessenger(rootMessenger);
const controller = new LoggingController({
messenger,
});
Expand Down
22 changes: 10 additions & 12 deletions packages/logging-controller/src/LoggingController.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type {
ControllerGetStateAction,
ControllerStateChangeEvent,
RestrictedMessenger,
} from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
StateMetadata,
} from '@metamask/base-controller/next';
import { BaseController } from '@metamask/base-controller/next';
import type { Messenger } from '@metamask/messenger';
import { v1 as random } from 'uuid';

import type { Log } from './logTypes';
Expand Down Expand Up @@ -54,19 +55,17 @@ export type LoggingControllerStateChangeEvent = ControllerStateChangeEvent<

export type LoggingControllerEvents = LoggingControllerStateChangeEvent;

export type LoggingControllerMessenger = RestrictedMessenger<
export type LoggingControllerMessenger = Messenger<
typeof name,
LoggingControllerActions,
LoggingControllerEvents,
never,
never
LoggingControllerEvents
>;

const metadata = {
const metadata: StateMetadata<LoggingControllerState> = {
logs: {
includeInStateLogs: true,
persist: true,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: false,
},
};
Expand Down Expand Up @@ -107,9 +106,8 @@ export class LoggingController extends BaseController<
},
});

this.messagingSystem.registerActionHandler(
`${name}:add` as const,
(log: Log) => this.add(log),
this.messenger.registerActionHandler(`${name}:add` as const, (log: Log) =>
this.add(log),
);
}

Expand Down
1 change: 1 addition & 0 deletions packages/logging-controller/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
},
"references": [
{ "path": "../base-controller/tsconfig.build.json" },
{ "path": "../messenger/tsconfig.build.json" },
{ "path": "../controller-utils/tsconfig.build.json" }
],
"include": ["../../types", "./src"]
Expand Down
1 change: 1 addition & 0 deletions packages/logging-controller/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
},
"references": [
{ "path": "../base-controller" },
{ "path": "../messenger" },
{ "path": "../controller-utils" }
],
"include": ["../../types", "./src"]
Expand Down
1 change: 1 addition & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4003,6 +4003,7 @@ __metadata:
"@metamask/auto-changelog": "npm:^3.4.4"
"@metamask/base-controller": "npm:^8.4.2"
"@metamask/controller-utils": "npm:^11.14.1"
"@metamask/messenger": "npm:^0.3.0"
"@types/jest": "npm:^27.4.1"
deepmerge: "npm:^4.2.2"
jest: "npm:^27.5.1"
Expand Down
Loading