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..b5b796eb495 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,9 @@ "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" + }, "devDependencies": { "@lavamoat/allow-scripts": "^2.3.1", "@metamask/create-release-branch": "^1.1.0", 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 188ee402ffb..667517794a7 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/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", - "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..c9951630f0e 100644 --- a/packages/permission-controller/src/Permission.ts +++ b/packages/permission-controller/src/Permission.ts @@ -210,19 +210,20 @@ type RestrictedMethodContext = Readonly<{ [key: string]: any; }>; -export type RestrictedMethodParameters = Json[] | Record | void; +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 c20e3cb71c5..29a62805e65 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 type { Json, PendingJsonRpcResponse } from '@metamask/utils'; import { hasProperty } from '@metamask/utils'; import assert from 'assert'; -import { JsonRpcEngine } from 'json-rpc-engine'; -import type { PendingJsonRpcResponse } from 'json-rpc-engine'; import type { AsyncRestrictedMethod, @@ -251,7 +250,7 @@ function getDefaultPermissionSpecifications() { CaveatTypes.filterArrayResponse, CaveatTypes.reverseArrayResponse, ], - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return ['a', 'b', 'c']; }, }, @@ -262,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) => { @@ -292,7 +293,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noop, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, }, @@ -300,7 +301,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -312,7 +313,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedAndFailureSideEffects2, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -324,7 +325,7 @@ function getDefaultPermissionSpecifications() { permissionType: PermissionType.RestrictedMethod, targetName: PermissionKeys.wallet_noopWithPermittedSideEffects, allowedCaveats: null, - methodImplementation: (_args: RestrictedMethodOptions) => { + methodImplementation: (_args: RestrictedMethodOptions) => { return null; }, sideEffect: { @@ -335,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], @@ -352,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], @@ -388,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], @@ -415,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], @@ -1850,6 +1851,7 @@ describe('PermissionController', () => { expect(() => controller.removeCaveat( origin, + // @ts-expect-error - Testing invalid permission name. PermissionNames.wallet_noopWithRequiredCaveat, CaveatTypes.noopCaveat, ), @@ -5270,7 +5272,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); @@ -5293,6 +5301,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)); }); @@ -5334,6 +5347,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)); }); }); 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 c79437fdc5d..c18b90c622b 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, +} from '@metamask/json-rpc-engine'; +import type { + Json, PendingJsonRpcResponse, JsonRpcRequest, -} from 'json-rpc-engine'; +} from '@metamask/utils'; import type { GenericPermissionController, 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..dfa18ef953e 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 { ethErrors, serializeError } from 'eth-rpc-errors'; -import { JsonRpcEngine, createAsyncMiddleware } from 'json-rpc-engine'; +import { + JsonRpcEngine, + createAsyncMiddleware, +} from '@metamask/json-rpc-engine'; +import { rpcErrors, serializeError } from '@metamask/rpc-errors'; import { requestPermissionsHandler } from './requestPermissions'; @@ -67,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'); }); @@ -91,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 } }, @@ -125,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 5792e4fbe73..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 type { JsonRpcEngineEndCallback } from 'json-rpc-engine'; 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/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 65916e5aa66..43d3a1dab4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2080,15 +2080,15 @@ __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/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 - json-rpc-engine: ^6.1.0 nanoid: ^3.1.31 ts-jest: ^27.1.4 typedoc: ^0.24.8 @@ -2257,7 +2257,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: @@ -2275,21 +2275,38 @@ __metadata: linkType: hard "@metamask/rpc-methods@npm:^1.0.1": - version: 1.0.1 - resolution: "@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.1 - "@metamask/snaps-utils": ^1.0.1 + "@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: 9d5c91f7af7c66b5f7afe23ce08a1d959bec1c7423063e955ae30ca41ed048e793a4e075b0fd23b9a8e54ff3a3fee018994e8d2fa494adebcc236f0bdd484340 + 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." + dependencies: + "@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.3.1 + eth-rpc-errors: ^4.0.3 + superstruct: ^1.0.3 + checksum: 61829b70d80b7d3ad40e3916a303c26b4545f61b74ea776063c9803dce7ffa4c8882fef0189803a07250e125dc3818cbd9a4e6891d1041da23bb2a9c26f85441 languageName: node linkType: hard @@ -2489,13 +2506,13 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-ui@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/snaps-ui@npm:1.0.1" +"@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: 71719b47a79d2ff23f0e9f1d2a1a8afd42f4f94891437056241a49090d245ccd086eac5d8fdf7719aaaa3f6bbc16b30f5566ad7bcecaa7b70e00ea638387aaa0 + checksum: eb3d8806803d7e5e7677550eb0eaec4102f8b1b2aad660b408ebb8d3c532666a422176b2ff7c490bfb427c9378449976f16b19c9c5330759dff5283db9fe7224 languageName: node linkType: hard @@ -2528,9 +2545,9 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/snaps-utils@npm:1.0.1" +"@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: "@babel/core": ^7.18.6 "@babel/types": ^7.18.7 @@ -2539,7 +2556,7 @@ __metadata: "@metamask/permission-controller": ^4.0.0 "@metamask/providers": ^10.2.1 "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-ui": ^1.0.1 + "@metamask/snaps-ui": ^1.0.2 "@metamask/utils": ^6.0.1 "@noble/hashes": ^1.1.3 "@scure/base": ^1.1.1 @@ -2552,7 +2569,7 @@ __metadata: ses: ^0.18.7 superstruct: ^1.0.3 validate-npm-package-name: ^5.0.0 - checksum: 4abb2aabd5b6af314338d812f6029cbdecb0953bcaaf8df16e4b3ad65106d934d0c076c4587df032a1adb08409c8ea246f309aa8c2f94e4453e96f8afbb143f3 + checksum: e207652c0ba61970f7a298325a75edbd330fc8f62f2a23a6429dd2448db66b59414794e77389b72d007d5b18c21e6331dcb815d2bbe91851843d8ee0902600d9 languageName: node linkType: hard