Skip to content

Commit

Permalink
Merge branch 'main' into remove-provider-config
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmire committed Jun 11, 2024
2 parents 17ce10b + 072f2b1 commit d66f6f3
Show file tree
Hide file tree
Showing 129 changed files with 2,052 additions and 196 deletions.
8 changes: 1 addition & 7 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,13 @@ module.exports = {
// TODO: auto-fix breaks stuff
'@typescript-eslint/promise-function-async': 'off',

// TODO: re-enble most of these rules
'@typescript-eslint/await-thenable': 'warn',
'@typescript-eslint/naming-convention': 'off',
'@typescript-eslint/no-floating-promises': 'warn',
'@typescript-eslint/no-misused-promises': 'warn',
// TODO: re-enable most of these rules
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
'@typescript-eslint/unbound-method': 'off',
'@typescript-eslint/prefer-enum-initializers': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/prefer-reduce-type-parameter': 'off',
'@typescript-eslint/restrict-plus-operands': 'warn',
'@typescript-eslint/restrict-template-expressions': 'warn',
'no-restricted-syntax': 'off',
'no-restricted-globals': 'off',
},
Expand Down
4 changes: 2 additions & 2 deletions packages/accounts-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
"dependencies": {
"@ethereumjs/util": "^8.1.0",
"@metamask/base-controller": "^6.0.0",
"@metamask/eth-snap-keyring": "^4.1.1",
"@metamask/keyring-api": "^6.4.0",
"@metamask/eth-snap-keyring": "^4.3.1",
"@metamask/keyring-api": "^8.0.0",
"@metamask/snaps-sdk": "^4.2.0",
"@metamask/snaps-utils": "^7.4.0",
"@metamask/utils": "^8.3.0",
Expand Down
4 changes: 4 additions & 0 deletions packages/accounts-controller/src/AccountsController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,11 @@ function createExpectedInternalAccount({
}): InternalAccount {
const accountTypeToMethods = {
[`${EthAccountType.Eoa}`]: [...Object.values(ETH_EOA_METHODS)],
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
[`${EthAccountType.Erc4337}`]: [...Object.values(ETH_ERC_4337_METHODS)],
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
[`${BtcAccountType.P2wpkh}`]: [...Object.values(BtcMethod)],
};

Expand Down
2 changes: 2 additions & 0 deletions packages/accounts-controller/src/AccountsController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,8 @@ export class AccountsController extends BaseController<
* @param metadataKey - The key of the metadata to retrieve.
* @returns The value of the specified metadata key, or undefined if the account or metadata key does not exist.
*/
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/naming-convention
#populateExistingMetadata<T extends keyof InternalAccount['metadata']>(
accountId: string,
metadataKey: T,
Expand Down
104 changes: 84 additions & 20 deletions packages/address-book-controller/src/AddressBookController.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,45 @@
import { ControllerMessenger } from '@metamask/base-controller';
import { toHex } from '@metamask/controller-utils';

import { AddressBookController, AddressType } from './AddressBookController';
import type {
AddressBookControllerActions,
AddressBookControllerEvents,
} from './AddressBookController';
import {
AddressBookController,
AddressType,
controllerName,
} from './AddressBookController';

/**
* Constructs a restricted controller messenger.
*
* @returns A restricted controller messenger.
*/
function getRestrictedMessenger() {
const controllerMessenger = new ControllerMessenger<
AddressBookControllerActions,
AddressBookControllerEvents
>();
return controllerMessenger.getRestricted({
name: controllerName,
allowedActions: [],
allowedEvents: [],
});
}

describe('AddressBookController', () => {
it('should set default state', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
expect(controller.state).toStrictEqual({ addressBook: {} });
});

it('should add a contact entry', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

expect(controller.state).toStrictEqual({
Expand All @@ -29,7 +59,9 @@ describe('AddressBookController', () => {
});

it('should add a contact entry with chainId and memo', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set(
'0x32Be343B94f860124dC4fEe278FDCBD38C102D88',
'foo',
Expand All @@ -55,7 +87,9 @@ describe('AddressBookController', () => {
});

it('should add a contact entry with address type contract accounts', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set(
'0x32Be343B94f860124dC4fEe278FDCBD38C102D88',
'foo',
Expand All @@ -81,7 +115,9 @@ describe('AddressBookController', () => {
});

it('should add a contact entry with address type non accounts', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set(
'0x32Be343B94f860124dC4fEe278FDCBD38C102D88',
'foo',
Expand All @@ -107,7 +143,9 @@ describe('AddressBookController', () => {
});

it('should add multiple contact entries with different chainIds', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set(
'0x32Be343B94f860124dC4fEe278FDCBD38C102D88',
'foo',
Expand Down Expand Up @@ -149,7 +187,9 @@ describe('AddressBookController', () => {
});

it('should update a contact entry', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'bar');
Expand All @@ -171,22 +211,28 @@ describe('AddressBookController', () => {
});

it('should not add invalid contact entry', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
// @ts-expect-error Intentionally invalid entry
controller.set('0x01', 'foo', AddressType.externallyOwnedAccounts);
expect(controller.state).toStrictEqual({ addressBook: {} });
});

it('should remove one contact entry', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');
controller.delete(toHex(1), '0x32Be343B94f860124dC4fEe278FDCBD38C102D88');

expect(controller.state).toStrictEqual({ addressBook: {} });
});

it('should remove only one contact entry', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

controller.set('0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d', 'bar');
Expand All @@ -209,7 +255,9 @@ describe('AddressBookController', () => {
});

it('should add two contact entries with the same chainId', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

controller.set('0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d', 'bar');
Expand Down Expand Up @@ -239,7 +287,9 @@ describe('AddressBookController', () => {
});

it('should correctly mark ens entries', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set(
'0x32Be343B94f860124dC4fEe278FDCBD38C102D88',
'metamask.eth',
Expand All @@ -262,7 +312,9 @@ describe('AddressBookController', () => {
});

it('should clear all contact entries', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

controller.set('0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d', 'bar');
Expand All @@ -271,22 +323,28 @@ describe('AddressBookController', () => {
});

it('should return true to indicate an address book entry has been added', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
expect(
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo'),
).toBe(true);
});

it('should return false to indicate an address book entry has NOT been added', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
expect(
// @ts-expect-error Intentionally invalid entry
controller.set('0x00', 'foo', AddressType.externallyOwnedAccounts),
).toBe(false);
});

it('should return true to indicate an address book entry has been deleted', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

expect(
Expand All @@ -295,20 +353,26 @@ describe('AddressBookController', () => {
});

it('should return false to indicate an address book entry has NOT been deleted due to unsafe input', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
// @ts-expect-error Suppressing error to test runtime behavior
expect(controller.delete('__proto__', '0x01')).toBe(false);
expect(controller.delete(toHex(1), 'constructor')).toBe(false);
});

it('should return false to indicate an address book entry has NOT been deleted', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', '0x00');
expect(controller.delete(toHex(1), '0x01')).toBe(false);
});

it('should normalize addresses so adding and removing entries work across casings', () => {
const controller = new AddressBookController();
const controller = new AddressBookController({
messenger: getRestrictedMessenger(),
});
controller.set('0x32Be343B94f860124dC4fEe278FDCBD38C102D88', 'foo');

controller.set('0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d', 'bar');
Expand Down
Loading

0 comments on commit d66f6f3

Please sign in to comment.