From 8f1573a83f3709b80c01ce7b583fb243ca1be872 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Tue, 26 Sep 2023 12:31:57 +0200 Subject: [PATCH 01/10] deps(permission-controller): Update from json-rpc-engine to metamask/json-rpc-engine --- packages/permission-controller/package.json | 2 +- packages/permission-controller/src/Permission.ts | 4 ++-- .../src/PermissionController.test.ts | 5 ++--- .../src/permission-middleware.ts | 12 +++++++----- .../src/rpc-methods/getPermissions.test.ts | 2 +- .../src/rpc-methods/getPermissions.ts | 2 +- .../src/rpc-methods/requestPermissions.test.ts | 5 ++++- .../src/rpc-methods/requestPermissions.ts | 2 +- packages/permission-controller/src/utils.ts | 8 ++++---- yarn.lock | 2 +- 10 files changed, 24 insertions(+), 20 deletions(-) diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json index 188ee402ffb..6bd87398855 100644 --- a/packages/permission-controller/package.json +++ b/packages/permission-controller/package.json @@ -32,12 +32,12 @@ "@metamask/approval-controller": "^3.5.2", "@metamask/base-controller": "^3.2.2", "@metamask/controller-utils": "^5.0.1", + "@metamask/json-rpc-engine": "^7.1.1", "@metamask/utils": "^8.1.0", "@types/deep-freeze-strict": "^1.1.0", "deep-freeze-strict": "^1.1.1", "eth-rpc-errors": "^4.0.2", "immer": "^9.0.6", - "json-rpc-engine": "^6.1.0", "nanoid": "^3.1.31" }, "devDependencies": { diff --git a/packages/permission-controller/src/Permission.ts b/packages/permission-controller/src/Permission.ts index c6e033d2fb3..36cd03ff025 100644 --- a/packages/permission-controller/src/Permission.ts +++ b/packages/permission-controller/src/Permission.ts @@ -3,7 +3,7 @@ import type { EventConstraint, } from '@metamask/base-controller'; import type { NonEmptyArray } from '@metamask/controller-utils'; -import type { Json } from '@metamask/utils'; +import type { Json, JsonRpcParams } from '@metamask/utils'; import { nanoid } from 'nanoid'; // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -210,7 +210,7 @@ type RestrictedMethodContext = Readonly<{ [key: string]: any; }>; -export type RestrictedMethodParameters = Json[] | Record | void; +export type RestrictedMethodParameters = JsonRpcParams; /** * The arguments passed to a restricted method implementation. diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index c20e3cb71c5..e1c9a7599de 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -6,11 +6,10 @@ import type { } from '@metamask/approval-controller'; import { ControllerMessenger } from '@metamask/base-controller'; import { isPlainObject } from '@metamask/controller-utils'; -import type { Json } from '@metamask/utils'; +import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import { hasProperty } from '@metamask/utils'; +import type { Json, PendingJsonRpcResponse } from '@metamask/utils'; import assert from 'assert'; -import { JsonRpcEngine } from 'json-rpc-engine'; -import type { PendingJsonRpcResponse } from 'json-rpc-engine'; import type { AsyncRestrictedMethod, diff --git a/packages/permission-controller/src/permission-middleware.ts b/packages/permission-controller/src/permission-middleware.ts index c79437fdc5d..f618e1cfd65 100644 --- a/packages/permission-controller/src/permission-middleware.ts +++ b/packages/permission-controller/src/permission-middleware.ts @@ -1,13 +1,15 @@ -import type { Json } from '@metamask/utils'; -import { createAsyncMiddleware } from 'json-rpc-engine'; +import { createAsyncMiddleware } from '@metamask/json-rpc-engine'; import type { // eslint-disable-next-line @typescript-eslint/no-unused-vars JsonRpcEngine, JsonRpcMiddleware, AsyncJsonRpcEngineNextCallback, - PendingJsonRpcResponse, +} from '@metamask/json-rpc-engine'; +import type { + Json, JsonRpcRequest, -} from 'json-rpc-engine'; + PendingJsonRpcResponse, +} from '@metamask/utils'; import type { GenericPermissionController, @@ -60,7 +62,7 @@ export function getPermissionMiddlewareFactory({ } const permissionsMiddleware = async ( - req: JsonRpcRequest, + req: JsonRpcRequest, res: PendingJsonRpcResponse, next: AsyncJsonRpcEngineNextCallback, ): Promise => { diff --git a/packages/permission-controller/src/rpc-methods/getPermissions.test.ts b/packages/permission-controller/src/rpc-methods/getPermissions.test.ts index fd97a59e515..7ebbe4a04f1 100644 --- a/packages/permission-controller/src/rpc-methods/getPermissions.test.ts +++ b/packages/permission-controller/src/rpc-methods/getPermissions.test.ts @@ -1,4 +1,4 @@ -import { JsonRpcEngine } from 'json-rpc-engine'; +import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import { getPermissionsHandler } from './getPermissions'; diff --git a/packages/permission-controller/src/rpc-methods/getPermissions.ts b/packages/permission-controller/src/rpc-methods/getPermissions.ts index 37c05395aa1..807b20aedd1 100644 --- a/packages/permission-controller/src/rpc-methods/getPermissions.ts +++ b/packages/permission-controller/src/rpc-methods/getPermissions.ts @@ -1,5 +1,5 @@ +import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; import type { PendingJsonRpcResponse } from '@metamask/utils'; -import type { JsonRpcEngineEndCallback } from 'json-rpc-engine'; import type { PermissionConstraint } from '../Permission'; import type { SubjectPermissions } from '../PermissionController'; diff --git a/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts b/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts index b657286e8a4..45b346b9618 100644 --- a/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts +++ b/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts @@ -1,5 +1,8 @@ +import { + JsonRpcEngine, + createAsyncMiddleware, +} from '@metamask/json-rpc-engine'; import { ethErrors, serializeError } from 'eth-rpc-errors'; -import { JsonRpcEngine, createAsyncMiddleware } from 'json-rpc-engine'; import { requestPermissionsHandler } from './requestPermissions'; diff --git a/packages/permission-controller/src/rpc-methods/requestPermissions.ts b/packages/permission-controller/src/rpc-methods/requestPermissions.ts index 5792e4fbe73..b32b1a6bb78 100644 --- a/packages/permission-controller/src/rpc-methods/requestPermissions.ts +++ b/packages/permission-controller/src/rpc-methods/requestPermissions.ts @@ -1,7 +1,7 @@ import { isPlainObject } from '@metamask/controller-utils'; +import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils'; import { ethErrors } from 'eth-rpc-errors'; -import type { JsonRpcEngineEndCallback } from 'json-rpc-engine'; import { invalidParams } from '../errors'; import type { PermissionConstraint, RequestedPermissions } from '../Permission'; diff --git a/packages/permission-controller/src/utils.ts b/packages/permission-controller/src/utils.ts index 660160a656f..a031cf4199a 100644 --- a/packages/permission-controller/src/utils.ts +++ b/packages/permission-controller/src/utils.ts @@ -1,13 +1,13 @@ +import type { + JsonRpcEngineEndCallback, + JsonRpcEngineNextCallback, +} from '@metamask/json-rpc-engine'; import type { Json, JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, } from '@metamask/utils'; -import type { - JsonRpcEngineEndCallback, - JsonRpcEngineNextCallback, -} from 'json-rpc-engine'; import type { CaveatSpecificationConstraint, diff --git a/yarn.lock b/yarn.lock index 5110baa876c..1933e342123 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2079,6 +2079,7 @@ __metadata: "@metamask/auto-changelog": ^3.1.0 "@metamask/base-controller": ^3.2.2 "@metamask/controller-utils": ^5.0.1 + "@metamask/json-rpc-engine": ^7.1.1 "@metamask/utils": ^8.1.0 "@types/deep-freeze-strict": ^1.1.0 "@types/jest": ^27.4.1 @@ -2087,7 +2088,6 @@ __metadata: eth-rpc-errors: ^4.0.2 immer: ^9.0.6 jest: ^27.5.1 - json-rpc-engine: ^6.1.0 nanoid: ^3.1.31 ts-jest: ^27.1.4 typedoc: ^0.24.8 From 290c97a352a74d68aa2e3ee4499101d140d2fa43 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Tue, 26 Sep 2023 12:50:17 +0200 Subject: [PATCH 02/10] Fix type errors in permission controller tests --- .../src/PermissionController.test.ts | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index e1c9a7599de..841315b7193 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -8,7 +8,11 @@ import { ControllerMessenger } from '@metamask/base-controller'; import { isPlainObject } from '@metamask/controller-utils'; import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import { hasProperty } from '@metamask/utils'; -import type { Json, PendingJsonRpcResponse } from '@metamask/utils'; +import type { + Json, + PendingJsonRpcResponse, + JsonRpcParams, +} from '@metamask/utils'; import assert from 'assert'; import type { @@ -250,7 +254,7 @@ function getDefaultPermissionSpecifications() { CaveatTypes.filterArrayResponse, CaveatTypes.reverseArrayResponse, ], - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return ['a', 'b', 'c']; }, }, @@ -261,7 +265,7 @@ function getDefaultPermissionSpecifications() { CaveatTypes.filterObjectResponse, CaveatTypes.noopCaveat, ], - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return { a: 'x', b: 'y', c: 'z' }; }, validator: (permission: PermissionConstraint) => { @@ -291,7 +295,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noop, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, }, @@ -299,7 +303,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -311,7 +315,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects2, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -323,7 +327,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -334,7 +338,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithValidator]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithValidator, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.noopCaveat, CaveatTypes.filterArrayResponse], @@ -351,7 +355,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithRequiredCaveat]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithRequiredCaveat, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.noopCaveat], @@ -387,7 +391,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithFactory]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithFactory, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.filterArrayResponse], @@ -414,7 +418,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.snap_foo, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, subjectTypes: [SubjectType.Snap], From 5f8ff3bf7b571b6e1b4996593812df2151a1edcf Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Tue, 26 Sep 2023 13:13:18 +0200 Subject: [PATCH 03/10] Patch @metamask/rpc-methods --- ...ethods-npm-0.38.1-flask.1-081e1eb5b3.patch | 19 ++++++++++++++ package.json | 4 +++ yarn.lock | 26 +++++++++---------- 3 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 .yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch diff --git a/.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch b/.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch new file mode 100644 index 00000000000..01ab02aa938 --- /dev/null +++ b/.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch @@ -0,0 +1,19 @@ +diff --git a/dist/types/restricted/getLocale.d.ts b/dist/types/restricted/getLocale.d.ts +index 2941d2733042664c341776c7bc840ba0813994ca..0188bbd4de0cd013159a36b736ad9baf94c18c92 100644 +--- a/dist/types/restricted/getLocale.d.ts ++++ b/dist/types/restricted/getLocale.d.ts +@@ -1,6 +1,6 @@ + import type { PermissionSpecificationBuilder, ValidPermissionSpecification, RestrictedMethodOptions } from '@metamask/permission-controller'; + import { PermissionType } from '@metamask/permission-controller'; +-import type { NonEmptyArray } from '@metamask/utils'; ++import type { Json, NonEmptyArray } from '@metamask/utils'; + import type { MethodHooksObject } from '../utils'; + declare const methodName = "snap_getLocale"; + export declare type GetLocaleMethodHooks = { +@@ -43,5 +43,5 @@ export declare const getLocaleBuilder: Readonly<{ + * @param hooks.getLocale - A function that returns the user selected locale. + * @returns The user selected locale. + */ +-export declare function getImplementation({ getLocale }: GetLocaleMethodHooks): (_args: RestrictedMethodOptions) => Promise; ++export declare function getImplementation({ getLocale }: GetLocaleMethodHooks): (_args: RestrictedMethodOptions | Json[]>) => Promise; + export {}; diff --git a/package.json b/package.json index 90fd55ed6f9..aba22779997 100644 --- a/package.json +++ b/package.json @@ -83,5 +83,9 @@ "ethereumjs-util>ethereum-cryptography>secp256k1": true, "simple-git-hooks": false } + }, + "resolutions": { + "@metamask/rpc-methods@^0.38.1-flask.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch", + "@metamask/rpc-methods@^1.0.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch" } } diff --git a/yarn.lock b/yarn.lock index 1933e342123..8e00044ad52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1463,7 +1463,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/browser-passworder@npm:^4.0.2, @metamask/browser-passworder@npm:^4.1.0": +"@metamask/browser-passworder@npm:^4.1.0": version: 4.1.0 resolution: "@metamask/browser-passworder@npm:4.1.0" checksum: f1edb3b75594b8e8d075b3134c9ce6c73573160eb48184ef722b9d96a5763db1e2e9acb166fc5c66c7c82936e134a02a3fb4c0022ca9a948857a30181cb84d7e @@ -2256,7 +2256,7 @@ __metadata: languageName: node linkType: hard -"@metamask/rpc-methods@npm:^0.38.1-flask.1": +"@metamask/rpc-methods@npm:0.38.1-flask.1": version: 0.38.1-flask.1 resolution: "@metamask/rpc-methods@npm:0.38.1-flask.1" dependencies: @@ -2273,22 +2273,20 @@ __metadata: languageName: node linkType: hard -"@metamask/rpc-methods@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/rpc-methods@npm:1.0.1" +"@metamask/rpc-methods@patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": + version: 0.38.1-flask.1 + resolution: "@metamask/rpc-methods@patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch::version=0.38.1-flask.1&hash=2abe25&locator=%40metamask%2Fcore-monorepo%40workspace%3A." dependencies: - "@metamask/browser-passworder": ^4.0.2 - "@metamask/key-tree": ^7.1.1 - "@metamask/permission-controller": ^4.0.0 - "@metamask/snaps-ui": ^1.0.1 - "@metamask/snaps-utils": ^1.0.1 + "@metamask/key-tree": ^9.0.0 + "@metamask/permission-controller": ^4.1.0 + "@metamask/snaps-ui": ^0.37.4-flask.1 + "@metamask/snaps-utils": ^0.38.2-flask.1 "@metamask/types": ^1.1.0 "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.1.3 - eth-rpc-errors: ^4.0.2 - nanoid: ^3.1.31 + "@noble/hashes": ^1.3.1 + eth-rpc-errors: ^4.0.3 superstruct: ^1.0.3 - checksum: 9d5c91f7af7c66b5f7afe23ce08a1d959bec1c7423063e955ae30ca41ed048e793a4e075b0fd23b9a8e54ff3a3fee018994e8d2fa494adebcc236f0bdd484340 + checksum: 61829b70d80b7d3ad40e3916a303c26b4545f61b74ea776063c9803dce7ffa4c8882fef0189803a07250e125dc3818cbd9a4e6891d1041da23bb2a9c26f85441 languageName: node linkType: hard From c841d9254fbf1de2672490823fe8eafc211daac0 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Tue, 26 Sep 2023 13:17:47 +0200 Subject: [PATCH 04/10] Update formatting --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index aba22779997..01b543a54aa 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,10 @@ "simple-git-hooks": { "pre-push": "yarn lint" }, + "resolutions": { + "@metamask/rpc-methods@^0.38.1-flask.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch", + "@metamask/rpc-methods@^1.0.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch" + }, "devDependencies": { "@lavamoat/allow-scripts": "^2.3.1", "@metamask/create-release-branch": "^1.1.0", @@ -83,9 +87,5 @@ "ethereumjs-util>ethereum-cryptography>secp256k1": true, "simple-git-hooks": false } - }, - "resolutions": { - "@metamask/rpc-methods@^0.38.1-flask.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch", - "@metamask/rpc-methods@^1.0.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch" } } From 6f8ab7565ebffefaf8f90d82b1bf0520c99d494c Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 26 Sep 2023 22:49:00 +0000 Subject: [PATCH 05/10] deps(permission-controller): Update from eth-rpc-errors to @metamask/rpc-errors --- packages/permission-controller/README.md | 2 +- packages/permission-controller/package.json | 2 +- .../permission-controller/src/Permission.ts | 17 +++++---- .../src/PermissionController.test.ts | 38 ++++++++++--------- .../src/PermissionController.ts | 5 ++- packages/permission-controller/src/errors.ts | 33 ++++++++++------ .../src/permission-middleware.ts | 4 +- .../rpc-methods/requestPermissions.test.ts | 14 +++++-- .../src/rpc-methods/requestPermissions.ts | 4 +- yarn.lock | 2 +- 10 files changed, 71 insertions(+), 50 deletions(-) diff --git a/packages/permission-controller/README.md b/packages/permission-controller/README.md index b05c2240073..9d3e8f0edd9 100644 --- a/packages/permission-controller/README.md +++ b/packages/permission-controller/README.md @@ -1,6 +1,6 @@ # `@metamask/permission-controller` -Mediates access to JSON-RPC methods, used to interact with pieces of the MetaMask stack, via middleware for `json-rpc-engine`. +Mediates access to JSON-RPC methods, used to interact with pieces of the MetaMask stack, via middleware for `@metamask/json-rpc-engine`. ## Installation diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json index 6bd87398855..667517794a7 100644 --- a/packages/permission-controller/package.json +++ b/packages/permission-controller/package.json @@ -33,10 +33,10 @@ "@metamask/base-controller": "^3.2.2", "@metamask/controller-utils": "^5.0.1", "@metamask/json-rpc-engine": "^7.1.1", + "@metamask/rpc-errors": "^6.0.0", "@metamask/utils": "^8.1.0", "@types/deep-freeze-strict": "^1.1.0", "deep-freeze-strict": "^1.1.1", - "eth-rpc-errors": "^4.0.2", "immer": "^9.0.6", "nanoid": "^3.1.31" }, diff --git a/packages/permission-controller/src/Permission.ts b/packages/permission-controller/src/Permission.ts index 36cd03ff025..c9951630f0e 100644 --- a/packages/permission-controller/src/Permission.ts +++ b/packages/permission-controller/src/Permission.ts @@ -3,7 +3,7 @@ import type { EventConstraint, } from '@metamask/base-controller'; import type { NonEmptyArray } from '@metamask/controller-utils'; -import type { Json, JsonRpcParams } from '@metamask/utils'; +import type { Json } from '@metamask/utils'; import { nanoid } from 'nanoid'; // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -210,19 +210,20 @@ type RestrictedMethodContext = Readonly<{ [key: string]: any; }>; -export type RestrictedMethodParameters = JsonRpcParams; +export type RestrictedMethodParameters = Json[] | Record; /** * The arguments passed to a restricted method implementation. * * @template Params - The JSON-RPC parameters of the restricted method. */ -export type RestrictedMethodOptions = - { - method: TargetName; - params?: Params; - context: RestrictedMethodContext; - }; +export type RestrictedMethodOptions< + Params extends RestrictedMethodParameters | null, +> = { + method: TargetName; + params?: Params; + context: RestrictedMethodContext; +}; /** * A synchronous restricted method implementation. diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index 841315b7193..a78d1c6bfdc 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -7,12 +7,8 @@ import type { import { ControllerMessenger } from '@metamask/base-controller'; import { isPlainObject } from '@metamask/controller-utils'; import { JsonRpcEngine } from '@metamask/json-rpc-engine'; +import type { Json, PendingJsonRpcResponse } from '@metamask/utils'; import { hasProperty } from '@metamask/utils'; -import type { - Json, - PendingJsonRpcResponse, - JsonRpcParams, -} from '@metamask/utils'; import assert from 'assert'; import type { @@ -254,7 +250,7 @@ function getDefaultPermissionSpecifications() { CaveatTypes.filterArrayResponse, CaveatTypes.reverseArrayResponse, ], - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return ['a', 'b', 'c']; }, }, @@ -265,7 +261,9 @@ function getDefaultPermissionSpecifications() { CaveatTypes.filterObjectResponse, CaveatTypes.noopCaveat, ], - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: ( + _args: RestrictedMethodOptions>, + ) => { return { a: 'x', b: 'y', c: 'z' }; }, validator: (permission: PermissionConstraint) => { @@ -295,7 +293,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noop, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, }, @@ -303,7 +301,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -315,7 +313,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects2, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -327,7 +325,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -338,7 +336,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithValidator]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithValidator, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.noopCaveat, CaveatTypes.filterArrayResponse], @@ -355,7 +353,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithRequiredCaveat]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithRequiredCaveat, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.noopCaveat], @@ -391,7 +389,7 @@ function getDefaultPermissionSpecifications() { [PermissionKeys.wallet_noopWithFactory]: { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithFactory, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, allowedCaveats: [CaveatTypes.filterArrayResponse], @@ -418,7 +416,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.snap_foo, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, subjectTypes: [SubjectType.Snap], @@ -1853,7 +1851,7 @@ describe('PermissionController', () => { expect(() => controller.removeCaveat( origin, - PermissionNames.wallet_noopWithRequiredCaveat, + PermissionNames.wallet_noopWithRequiredCaveat as any, CaveatTypes.noopCaveat, ), ).toThrow( @@ -5273,7 +5271,13 @@ describe('PermissionController', () => { }; const expectedError = errors.unauthorized({ - data: { origin, method: PermissionNames.wallet_getSecretArray }, + data: { + origin, + method: PermissionNames.wallet_getSecretArray, + cause: null, + }, + message: + 'Unauthorized to perform action. Try requesting the required permission(s) first. For more information, see: https://docs.metamask.io/guide/rpc-api.html#permissions', }); const { error }: any = await engine.handle(request); diff --git a/packages/permission-controller/src/PermissionController.ts b/packages/permission-controller/src/PermissionController.ts index db282cda67c..5bebdb970a8 100644 --- a/packages/permission-controller/src/PermissionController.ts +++ b/packages/permission-controller/src/PermissionController.ts @@ -18,10 +18,10 @@ import { isPlainObject, isValidJson, } from '@metamask/controller-utils'; +import { JsonRpcError } from '@metamask/rpc-errors'; import { hasProperty } from '@metamask/utils'; import type { Json, Mutable } from '@metamask/utils'; import deepFreeze from 'deep-freeze-strict'; -import { EthereumRpcError } from 'eth-rpc-errors'; import { castDraft } from 'immer'; import type { Draft, Patch } from 'immer'; import { nanoid } from 'nanoid'; @@ -1802,6 +1802,7 @@ export class PermissionController< target: string, ): void { if (!isPlainObject(caveat)) { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw new InvalidCaveatError(caveat, origin, target); } @@ -2149,7 +2150,7 @@ export class PermissionController< try { this.validateRequestedPermissions(origin, permissions); } catch (error) { - if (error instanceof EthereumRpcError) { + if (error instanceof JsonRpcError) { // Re-throw as an internal error; we should never receive invalid approved // permissions. throw internalError( diff --git a/packages/permission-controller/src/errors.ts b/packages/permission-controller/src/errors.ts index 04a41ba0538..43a80b7d87f 100644 --- a/packages/permission-controller/src/errors.ts +++ b/packages/permission-controller/src/errors.ts @@ -1,9 +1,16 @@ -import { errorCodes, ethErrors, EthereumRpcError } from 'eth-rpc-errors'; +import type { DataWithOptionalCause } from '@metamask/rpc-errors'; +import { + errorCodes, + providerErrors, + rpcErrors, + JsonRpcError, +} from '@metamask/rpc-errors'; import type { PermissionType } from './Permission'; type UnauthorizedArg = { data?: Record; + message?: string; }; /** @@ -13,7 +20,7 @@ type UnauthorizedArg = { * @returns The built error */ export function unauthorized(opts: UnauthorizedArg) { - return ethErrors.provider.unauthorized({ + return providerErrors.unauthorized({ message: 'Unauthorized to perform action. Try requesting the required permission(s) first. For more information, see: https://docs.metamask.io/guide/rpc-api.html#permissions', data: opts.data, @@ -27,19 +34,19 @@ export function unauthorized(opts: UnauthorizedArg) { * @param data - Optional data for context. * @returns The built error */ -export function methodNotFound(method: string, data?: unknown) { +export function methodNotFound(method: string, data?: DataWithOptionalCause) { const message = `The method "${method}" does not exist / is not available.`; - const opts: Parameters[0] = { message }; + const opts: Parameters[0] = { message }; if (data !== undefined) { opts.data = data; } - return ethErrors.rpc.methodNotFound(opts); + return rpcErrors.methodNotFound(opts); } type InvalidParamsArg = { message?: string; - data?: unknown; + data?: DataWithOptionalCause; }; /** @@ -49,7 +56,7 @@ type InvalidParamsArg = { * @returns The built error */ export function invalidParams(opts: InvalidParamsArg) { - return ethErrors.rpc.invalidParams({ + return rpcErrors.invalidParams({ data: opts.data, message: opts.message, }); @@ -63,8 +70,8 @@ export function invalidParams(opts: InvalidParamsArg) { */ export function userRejectedRequest>( data?: Data, -): EthereumRpcError { - return ethErrors.provider.userRejectedRequest({ data }); +): JsonRpcError { + return providerErrors.userRejectedRequest({ data }); } /** @@ -77,8 +84,8 @@ export function userRejectedRequest>( export function internalError>( message: string, data?: Data, -): EthereumRpcError { - return ethErrors.rpc.internal({ message, data }); +): JsonRpcError { + return rpcErrors.internal({ message, data }); } export class InvalidSubjectIdentifierError extends Error { @@ -183,7 +190,9 @@ export class CaveatAlreadyExistsError extends Error { } } -export class InvalidCaveatError extends EthereumRpcError { +export class InvalidCaveatError extends JsonRpcError< + DataWithOptionalCause | undefined +> { public override data: { origin: string; target: string }; constructor(receivedCaveat: unknown, origin: string, target: string) { diff --git a/packages/permission-controller/src/permission-middleware.ts b/packages/permission-controller/src/permission-middleware.ts index f618e1cfd65..c18b90c622b 100644 --- a/packages/permission-controller/src/permission-middleware.ts +++ b/packages/permission-controller/src/permission-middleware.ts @@ -7,8 +7,8 @@ import type { } from '@metamask/json-rpc-engine'; import type { Json, - JsonRpcRequest, PendingJsonRpcResponse, + JsonRpcRequest, } from '@metamask/utils'; import type { @@ -62,7 +62,7 @@ export function getPermissionMiddlewareFactory({ } const permissionsMiddleware = async ( - req: JsonRpcRequest, + req: JsonRpcRequest, res: PendingJsonRpcResponse, next: AsyncJsonRpcEngineNextCallback, ): Promise => { diff --git a/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts b/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts index 45b346b9618..dfa18ef953e 100644 --- a/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts +++ b/packages/permission-controller/src/rpc-methods/requestPermissions.test.ts @@ -2,7 +2,7 @@ import { JsonRpcEngine, createAsyncMiddleware, } from '@metamask/json-rpc-engine'; -import { ethErrors, serializeError } from 'eth-rpc-errors'; +import { rpcErrors, serializeError } from '@metamask/rpc-errors'; import { requestPermissionsHandler } from './requestPermissions'; @@ -70,7 +70,13 @@ describe('requestPermissions RPC method', () => { }); expect(response.result).toBeUndefined(); - expect(response.error).toStrictEqual(serializeError(new Error('foo'))); + delete response.error.stack; + delete response.error.data.cause.stack; + const expectedError = new Error('foo'); + delete expectedError.stack; + expect(response.error).toStrictEqual( + serializeError(expectedError, { shouldIncludeStack: false }), + ); expect(mockRequestPermissionsForOrigin).toHaveBeenCalledTimes(1); expect(mockRequestPermissionsForOrigin).toHaveBeenCalledWith({}, '1'); }); @@ -94,7 +100,7 @@ describe('requestPermissions RPC method', () => { params: [], // doesn't matter }; - const expectedError = ethErrors.rpc + const expectedError = rpcErrors .invalidRequest({ message: 'Invalid request: Must specify a valid id.', data: { request: { ...req } }, @@ -128,7 +134,7 @@ describe('requestPermissions RPC method', () => { params: invalidParams, }; - const expectedError = ethErrors.rpc + const expectedError = rpcErrors .invalidParams({ data: { request: { ...req } }, }) diff --git a/packages/permission-controller/src/rpc-methods/requestPermissions.ts b/packages/permission-controller/src/rpc-methods/requestPermissions.ts index b32b1a6bb78..1976eb2934d 100644 --- a/packages/permission-controller/src/rpc-methods/requestPermissions.ts +++ b/packages/permission-controller/src/rpc-methods/requestPermissions.ts @@ -1,7 +1,7 @@ import { isPlainObject } from '@metamask/controller-utils'; import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; +import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils'; -import { ethErrors } from 'eth-rpc-errors'; import { invalidParams } from '../errors'; import type { PermissionConstraint, RequestedPermissions } from '../Permission'; @@ -56,7 +56,7 @@ async function requestPermissionsImplementation( (typeof id === 'string' && !id) ) { return end( - ethErrors.rpc.invalidRequest({ + rpcErrors.invalidRequest({ message: 'Invalid request: Must specify a valid id.', data: { request: req }, }), diff --git a/yarn.lock b/yarn.lock index 8e00044ad52..3886b6e19a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2080,12 +2080,12 @@ __metadata: "@metamask/base-controller": ^3.2.2 "@metamask/controller-utils": ^5.0.1 "@metamask/json-rpc-engine": ^7.1.1 + "@metamask/rpc-errors": ^6.0.0 "@metamask/utils": ^8.1.0 "@types/deep-freeze-strict": ^1.1.0 "@types/jest": ^27.4.1 deep-freeze-strict: ^1.1.1 deepmerge: ^4.2.2 - eth-rpc-errors: ^4.0.2 immer: ^9.0.6 jest: ^27.5.1 nanoid: ^3.1.31 From 1659e558c508d096d7fdf9d023052ddb87293a66 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 2 Oct 2023 10:24:11 +0000 Subject: [PATCH 06/10] test(permission-controller): work around error equality prop check after @metamask/rpc-errors upgrade --- .../src/PermissionController.test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index a78d1c6bfdc..d32f3fd22a9 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -5300,6 +5300,11 @@ describe('PermissionController', () => { const expectedError = errors.methodNotFound('wallet_foo', { origin }); const { error }: any = await engine.handle(request); + + expect(error.message).toStrictEqual(expectedError.message); + expect(error.data.cause).toBeNull(); + delete error.message; + delete error.data.cause; expect(error).toMatchObject(expect.objectContaining(expectedError)); }); @@ -5341,6 +5346,10 @@ describe('PermissionController', () => { ); const { error }: any = await engine.handle(request); + expect(error.message).toStrictEqual(expectedError.message); + expect(error.data.cause).toBeNull(); + delete error.message; + delete error.data.cause; expect(error).toMatchObject(expect.objectContaining(expectedError)); }); }); From 8f3593adbd0c05bd980c9326816b8eec6f4653bb Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 2 Oct 2023 10:41:52 +0000 Subject: [PATCH 07/10] only patch relevant resolution of @metamask/rpc-methods --- package.json | 3 +-- yarn.lock | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 01b543a54aa..b5b796eb495 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,7 @@ "pre-push": "yarn lint" }, "resolutions": { - "@metamask/rpc-methods@^0.38.1-flask.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch", - "@metamask/rpc-methods@^1.0.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch" + "@metamask/rpc-methods@^0.38.1-flask.1": "patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch" }, "devDependencies": { "@lavamoat/allow-scripts": "^2.3.1", diff --git a/yarn.lock b/yarn.lock index 3886b6e19a9..546931805ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1463,7 +1463,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/browser-passworder@npm:^4.1.0": +"@metamask/browser-passworder@npm:^4.0.2, @metamask/browser-passworder@npm:^4.1.0": version: 4.1.0 resolution: "@metamask/browser-passworder@npm:4.1.0" checksum: f1edb3b75594b8e8d075b3134c9ce6c73573160eb48184ef722b9d96a5763db1e2e9acb166fc5c66c7c82936e134a02a3fb4c0022ca9a948857a30181cb84d7e @@ -2273,6 +2273,25 @@ __metadata: languageName: node linkType: hard +"@metamask/rpc-methods@npm:^1.0.1": + version: 1.0.2 + resolution: "@metamask/rpc-methods@npm:1.0.2" + dependencies: + "@metamask/browser-passworder": ^4.0.2 + "@metamask/key-tree": ^7.1.1 + "@metamask/permission-controller": ^4.0.0 + "@metamask/snaps-ui": ^1.0.2 + "@metamask/snaps-utils": ^1.0.2 + "@metamask/types": ^1.1.0 + "@metamask/utils": ^6.0.1 + "@noble/hashes": ^1.1.3 + eth-rpc-errors: ^4.0.2 + nanoid: ^3.1.31 + superstruct: ^1.0.3 + checksum: b5de7ea63726cf3dc2324e8bc462d95de67bbf15f34849a2fdcb321efa21f255644b83e79ae1b1305a5b4ac0d7fb8fd110b917d08541326ba3d4dab3dbc1e594 + languageName: node + linkType: hard + "@metamask/rpc-methods@patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": version: 0.38.1-flask.1 resolution: "@metamask/rpc-methods@patch:@metamask/rpc-methods@npm%3A0.38.1-flask.1#./.yarn/patches/@metamask-rpc-methods-npm-0.38.1-flask.1-081e1eb5b3.patch::version=0.38.1-flask.1&hash=2abe25&locator=%40metamask%2Fcore-monorepo%40workspace%3A." @@ -2496,6 +2515,16 @@ __metadata: languageName: node linkType: hard +"@metamask/snaps-ui@npm:^1.0.2": + version: 1.0.2 + resolution: "@metamask/snaps-ui@npm:1.0.2" + dependencies: + "@metamask/utils": ^6.0.1 + superstruct: ^1.0.3 + checksum: eb3d8806803d7e5e7677550eb0eaec4102f8b1b2aad660b408ebb8d3c532666a422176b2ff7c490bfb427c9378449976f16b19c9c5330759dff5283db9fe7224 + languageName: node + linkType: hard + "@metamask/snaps-utils@npm:^0.38.2-flask.1": version: 0.38.2-flask.1 resolution: "@metamask/snaps-utils@npm:0.38.2-flask.1" @@ -2553,6 +2582,34 @@ __metadata: languageName: node linkType: hard +"@metamask/snaps-utils@npm:^1.0.2": + version: 1.0.2 + resolution: "@metamask/snaps-utils@npm:1.0.2" + dependencies: + "@babel/core": ^7.18.6 + "@babel/types": ^7.18.7 + "@metamask/base-controller": ^3.0.0 + "@metamask/key-tree": ^7.1.1 + "@metamask/permission-controller": ^4.0.0 + "@metamask/providers": ^10.2.1 + "@metamask/snaps-registry": ^1.2.1 + "@metamask/snaps-ui": ^1.0.2 + "@metamask/utils": ^6.0.1 + "@noble/hashes": ^1.1.3 + "@scure/base": ^1.1.1 + cron-parser: ^4.5.0 + eth-rpc-errors: ^4.0.3 + fast-deep-equal: ^3.1.3 + fast-json-stable-stringify: ^2.1.0 + rfdc: ^1.3.0 + semver: ^7.5.4 + ses: ^0.18.7 + superstruct: ^1.0.3 + validate-npm-package-name: ^5.0.0 + checksum: e207652c0ba61970f7a298325a75edbd330fc8f62f2a23a6429dd2448db66b59414794e77389b72d007d5b18c21e6331dcb815d2bbe91851843d8ee0902600d9 + languageName: node + linkType: hard + "@metamask/swappable-obj-proxy@npm:^2.1.0": version: 2.1.0 resolution: "@metamask/swappable-obj-proxy@npm:2.1.0" From 79103a1fa3aec5c383004aabe2c59055397cdf60 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 2 Oct 2023 10:42:22 +0000 Subject: [PATCH 08/10] yarn dedupe --- yarn.lock | 40 +--------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/yarn.lock b/yarn.lock index 546931805ad..71d85221c3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2505,16 +2505,6 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-ui@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/snaps-ui@npm:1.0.1" - dependencies: - "@metamask/utils": ^6.0.1 - superstruct: ^1.0.3 - checksum: 71719b47a79d2ff23f0e9f1d2a1a8afd42f4f94891437056241a49090d245ccd086eac5d8fdf7719aaaa3f6bbc16b30f5566ad7bcecaa7b70e00ea638387aaa0 - languageName: node - linkType: hard - "@metamask/snaps-ui@npm:^1.0.2": version: 1.0.2 resolution: "@metamask/snaps-ui@npm:1.0.2" @@ -2554,35 +2544,7 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/snaps-utils@npm:1.0.1" - dependencies: - "@babel/core": ^7.18.6 - "@babel/types": ^7.18.7 - "@metamask/base-controller": ^3.0.0 - "@metamask/key-tree": ^7.1.1 - "@metamask/permission-controller": ^4.0.0 - "@metamask/providers": ^10.2.1 - "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-ui": ^1.0.1 - "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.1.3 - "@scure/base": ^1.1.1 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 - fast-deep-equal: ^3.1.3 - fast-json-stable-stringify: ^2.1.0 - rfdc: ^1.3.0 - semver: ^7.5.4 - ses: ^0.18.7 - superstruct: ^1.0.3 - validate-npm-package-name: ^5.0.0 - checksum: 4abb2aabd5b6af314338d812f6029cbdecb0953bcaaf8df16e4b3ad65106d934d0c076c4587df032a1adb08409c8ea246f309aa8c2f94e4453e96f8afbb143f3 - languageName: node - linkType: hard - -"@metamask/snaps-utils@npm:^1.0.2": +"@metamask/snaps-utils@npm:^1.0.1, @metamask/snaps-utils@npm:^1.0.2": version: 1.0.2 resolution: "@metamask/snaps-utils@npm:1.0.2" dependencies: From 6c34a9e77df630fb2f733abf1e2bed3c82fc5df9 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 3 Oct 2023 03:48:35 +0000 Subject: [PATCH 09/10] chore(test): replace `as any` with `@ts-expect-error` --- .../permission-controller/src/PermissionController.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index d32f3fd22a9..658aa4d6bba 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -1851,7 +1851,8 @@ describe('PermissionController', () => { expect(() => controller.removeCaveat( origin, - PermissionNames.wallet_noopWithRequiredCaveat as any, + // @ts-expect-error + PermissionNames.wallet_noopWithRequiredCaveat, CaveatTypes.noopCaveat, ), ).toThrow( From cbad11a7e9d924a0e7e6a39980fbc8096ac53ccc Mon Sep 17 00:00:00 2001 From: legobeat <109787230+legobeat@users.noreply.github.com> Date: Tue, 3 Oct 2023 17:19:54 +0900 Subject: [PATCH 10/10] Update packages/permission-controller/src/PermissionController.test.ts Co-authored-by: Maarten Zuidhoorn --- packages/permission-controller/src/PermissionController.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts index 658aa4d6bba..29a62805e65 100644 --- a/packages/permission-controller/src/PermissionController.test.ts +++ b/packages/permission-controller/src/PermissionController.test.ts @@ -1851,7 +1851,7 @@ describe('PermissionController', () => { expect(() => controller.removeCaveat( origin, - // @ts-expect-error + // @ts-expect-error - Testing invalid permission name. PermissionNames.wallet_noopWithRequiredCaveat, CaveatTypes.noopCaveat, ),