{"_id":"@metamask/json-rpc-engine","_rev":"4642775","name":"@metamask/json-rpc-engine","description":"A tool for processing JSON-RPC messages","dist-tags":{"latest":"10.2.4"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"time":{"modified":"2026-04-10T20:05:05.000Z","created":"2023-04-13T17:42:20.859Z","10.2.4":"2026-03-26T19:20:52.168Z","10.2.3":"2026-03-02T11:36:42.361Z","10.2.2":"2026-02-06T13:31:10.506Z","10.2.1":"2026-01-15T19:30:07.318Z","10.2.0":"2025-11-20T12:17:01.323Z","10.1.1":"2025-10-09T17:39:59.327Z","10.1.0":"2025-09-22T21:19:53.689Z","10.0.3":"2025-02-04T21:35:41.209Z","10.0.2":"2024-12-19T11:53:11.932Z","10.0.1":"2024-10-29T11:35:21.894Z","10.0.0":"2024-10-16T21:58:24.677Z","9.0.3":"2024-09-16T13:43:56.304Z","9.0.2":"2024-07-22T15:21:07.216Z","9.0.1":"2024-07-11T20:13:42.310Z","9.0.0":"2024-05-31T19:51:17.637Z","8.0.2":"2024-05-01T13:38:37.249Z","8.0.1":"2024-03-13T11:27:19.050Z","8.0.0":"2024-03-12T19:48:10.550Z","7.3.3":"2024-03-04T18:44:30.994Z","7.3.2":"2024-01-23T21:47:02.450Z","7.3.1":"2023-12-22T20:15:26.134Z","7.3.0":"2023-11-08T21:00:28.074Z","7.2.0":"2023-10-19T13:16:46.888Z","7.1.1":"2023-09-01T21:50:20.062Z","7.1.0":"2023-09-01T21:49:45.380Z","7.0.0":"2023-04-13T17:42:20.859Z"},"users":{},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"versions":{"10.2.4":{"name":"@metamask/json-rpc-engine","version":"10.2.4","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./v2":{"import":{"types":"./dist/v2/index.d.mts","default":"./dist/v2/index.mjs"},"require":{"types":"./dist/v2/index.d.cts","default":"./dist/v2/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:all":"ts-bridge --project tsconfig.build.json --verbose --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint .  --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.9.0","@types/deep-freeze-strict":"^1.1.0","deep-freeze-strict":"^1.1.1","klona":"^2.0.6"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@ts-bridge/cli":"^0.6.4","@types/jest":"^29.5.14","deepmerge":"^4.2.2","jest":"^29.7.0","jest-it-up":"^2.0.2","ts-jest":"^29.2.5","typedoc":"^0.25.13","typescript":"~5.3.3"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.2.4","gitHead":"4ed97951a61311efaa7e8eb3cca1c763fa60dfb1","dist":{"shasum":"65c32250c4eb854fb9f4292c6d28ad168ec0e5d9","size":78395,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.2.4.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.2.4_1774552852004_0.8438553691885902"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-26T19:20:52.168Z","publish_time":1774552852168,"_source_registry_name":"default","_cnpm_publish_time":1774552852168},"10.2.3":{"name":"@metamask/json-rpc-engine","version":"10.2.3","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./v2":{"import":{"types":"./dist/v2/index.d.mts","default":"./dist/v2/index.mjs"},"require":{"types":"./dist/v2/index.d.cts","default":"./dist/v2/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:all":"ts-bridge --project tsconfig.build.json --verbose --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint .  --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.9.0","@types/deep-freeze-strict":"^1.1.0","deep-freeze-strict":"^1.1.1","klona":"^2.0.6"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@ts-bridge/cli":"^0.6.4","@types/jest":"^29.5.14","deepmerge":"^4.2.2","jest":"^29.7.0","jest-it-up":"^2.0.2","ts-jest":"^29.2.5","typedoc":"^0.25.13","typescript":"~5.3.3"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.2.3","gitHead":"34cb9d2f6a5a452b1b9d86b7dc9a1b04400320f8","dist":{"shasum":"bffe8bfa1ea99d60fe9c4e91b1550eed5606c0b0","size":77883,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.2.3.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.2.3_1772451402195_0.08584685849930307"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-02T11:36:42.361Z","publish_time":1772451402361,"_source_registry_name":"default","_cnpm_publish_time":1772451402361},"10.2.2":{"name":"@metamask/json-rpc-engine","version":"10.2.2","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./v2":{"import":{"types":"./dist/v2/index.d.mts","default":"./dist/v2/index.mjs"},"require":{"types":"./dist/v2/index.d.cts","default":"./dist/v2/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:all":"ts-bridge --project tsconfig.build.json --verbose --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint .  --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.9.0","@types/deep-freeze-strict":"^1.1.0","deep-freeze-strict":"^1.1.1","klona":"^2.0.6"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@ts-bridge/cli":"^0.6.4","@types/jest":"^27.5.2","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.5","typedoc":"^0.24.8","typescript":"~5.3.3"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.2.2","gitHead":"b52af00efe9fe2d9b8c9a8bb21ae7fcba2af0ac3","dist":{"shasum":"ac0978e81e5ddbf982b4c6b8e350cc81881cb750","size":77748,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.2.2.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.2.2_1770384670310_0.06847808169217084"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-02-06T13:31:10.506Z","publish_time":1770384670506,"_source_registry_name":"default","_cnpm_publish_time":1770384670506},"10.2.1":{"name":"@metamask/json-rpc-engine","version":"10.2.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./v2":{"import":{"types":"./dist/v2/index.d.mts","default":"./dist/v2/index.mjs"},"require":{"types":"./dist/v2/index.d.cts","default":"./dist/v2/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:all":"ts-bridge --project tsconfig.build.json --verbose --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint .  --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.9.0","@types/deep-freeze-strict":"^1.1.0","deep-freeze-strict":"^1.1.1","klona":"^2.0.6"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@ts-bridge/cli":"^0.6.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.3.3"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.2.1","gitHead":"4a1b947853848a48a1f25f1b03a196d79e00a5ba","dist":{"shasum":"33be293472112e1d0edb2edb310c6456f80606c4","size":77700,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.2.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.2.1_1768505407149_0.0045540889411050944"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-15T19:30:07.318Z","publish_time":1768505407318,"_source_registry_name":"default","_cnpm_publish_time":1768505407318},"10.2.0":{"name":"@metamask/json-rpc-engine","version":"10.2.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./v2":{"import":{"types":"./dist/v2/index.d.mts","default":"./dist/v2/index.mjs"},"require":{"types":"./dist/v2/index.d.cts","default":"./dist/v2/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:all":"ts-bridge --project tsconfig.build.json --verbose --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint .  --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.8.1","@types/deep-freeze-strict":"^1.1.0","deep-freeze-strict":"^1.1.1","klona":"^2.0.6"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@ts-bridge/cli":"^0.6.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.3.3"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.2.0","gitHead":"fcb43e64fc5ce6745f904ac6b0b0a8eddf7e92c1","dist":{"shasum":"8aba042c92ffbd60ad2de6a2f4cef33fde1defb7","size":76499,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.2.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.2.0_1763641021083_0.3650691900888303"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-11-20T12:17:01.323Z","publish_time":1763641021323,"_source_registry_name":"default","_cnpm_publish_time":1763641021323},"10.1.1":{"name":"@metamask/json-rpc-engine","version":"10.1.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.8.1"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.1.1","gitHead":"cc42c42fee8848dfc09356bb9ff1017e4b99de2e","dist":{"shasum":"a6c1be35e706501fe98cc1b25ca110990640ede3","size":32117,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.1.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.1.1_1760031599147_0.7236979808838839"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-10-09T17:39:59.327Z","publish_time":1760031599327,"_source_registry_name":"default","_cnpm_publish_time":1760031599327},"10.1.0":{"name":"@metamask/json-rpc-engine","version":"10.1.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.8.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.1.0","gitHead":"1727ebe7a92163e3693c8e068d29fe20e638e55a","dist":{"shasum":"36fc18a1fd47c8d51af4b5e304c016f1017fa694","size":32083,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.1.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.1.0_1758575993493_0.9703425735378799"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-09-22T21:19:53.689Z","publish_time":1758575993689,"_source_registry_name":"default","_cnpm_publish_time":1758575993689},"10.0.3":{"name":"@metamask/json-rpc-engine","version":"10.0.3","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.0.3","gitHead":"67c7844f4d482fb05917dbe064e7e901977328a4","dist":{"shasum":"9258c4718abe305121872414a5c828e43cfcc0f9","size":32098,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.0.3.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.0.3_1738704941043_0.09359645138808892"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-02-04T21:35:41.209Z","publish_time":1738704941209,"_source_registry_name":"default","_cnpm_publish_time":1738704941209},"10.0.2":{"name":"@metamask/json-rpc-engine","version":"10.0.2","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.2","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^11.0.1"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@lavamoat/preinstall-always-fail":"^2.1.0","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.0.2","gitHead":"91e9c6186cdf5afff904bb188da070589feaa58f","dist":{"shasum":"9173f90ebb16054fe20d5d73a910729a014750ce","size":32058,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.0.2.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/json-rpc-engine_10.0.2_1734609191741_0.18405794791953412"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-12-19T11:53:11.932Z","publish_time":1734609191932,"_source_registry_name":"default","_cnpm_publish_time":1734609191932},"10.0.1":{"name":"@metamask/json-rpc-engine","version":"10.0.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^10.0.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.0.1","gitHead":"557e28be18d72f0f5111a6838d04bea614347b80","dist":{"shasum":"432e4b42770ecd4da8a89f94b52cdeac982bdca3","size":32008,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.0.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_10.0.1_1730201721729_0.054666920488527726"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-10-29T11:35:21.894Z","publish_time":1730201721894,"_source_registry_name":"default","_cnpm_publish_time":1730201721894},"10.0.0":{"name":"@metamask/json-rpc-engine","version":"10.0.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^7.0.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^9.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@10.0.0","gitHead":"c0e7783fb1cd210b894d6daf92885485b59edeb8","dist":{"shasum":"d2beb23ca43596bf2e4a72c54c1d4c24fce1c8a6","size":31981,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-10.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-10.0.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_10.0.0_1729115904501_0.9419169165786154"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-10-16T21:58:24.677Z","publish_time":1729115904677,"_source_registry_name":"default","_cnpm_publish_time":1729115904677},"9.0.3":{"name":"@metamask/json-rpc-engine","version":"9.0.3","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"main":"./dist/index.cjs","types":"./dist/index.d.cts","directories":{"test":"test"},"scripts":{"build":"ts-bridge --project tsconfig.build.json --verbose --clean --no-references","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","since-latest-release":"../../scripts/since-latest-release.sh","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.3.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^9.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.2.2"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@9.0.3","gitHead":"4d30dda4fbe7ad71d92fd465d125462665577da4","dist":{"shasum":"491eb6085b63b040979d4c65f2a01107d22a162a","size":31865,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-9.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-9.0.3.tgz"},"_npmUser":{"name":"metamaskbot","email":"metamask-npm@consensys.net"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_9.0.3_1726494236146_0.3699497870284023"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-16T13:43:56.304Z","publish_time":1726494236304,"_source_registry_name":"default","_cnpm_publish_time":1726494236304},"9.0.2":{"name":"@metamask/json-rpc-engine","version":"9.0.2","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/types/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter","test:clean":"NODE_OPTIONS=--experimental-vm-modules jest --clearCache","test:verbose":"NODE_OPTIONS=--experimental-vm-modules jest --verbose","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.3.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^9.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~5.0.4"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@9.0.2","gitHead":"cc09e4e9c1254a00994f39dae885559fe620323b","dist":{"shasum":"2a060ff14748fec3b686cb6def55529f1dc547c0","size":46379,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-9.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-9.0.2.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_9.0.2_1721661667021_0.2474311881406872"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-22T15:21:07.216Z","publish_time":1721661667216,"_source_registry_name":"default","_cnpm_publish_time":1721661667216},"9.0.1":{"name":"@metamask/json-rpc-engine","version":"9.0.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/types/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.3.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^9.0.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.9.5"},"engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@9.0.1","gitHead":"a68021b605477757f23ebc300654bc105d07c2bf","dist":{"shasum":"202f6b5d24957c4bc949c113c3b60fa134478e11","size":45983,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-9.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-9.0.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_9.0.1_1720728822128_0.2987106397669661"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-11T20:13:42.310Z","publish_time":1720728822310,"_source_registry_name":"default","_cnpm_publish_time":1720728822310},"9.0.0":{"name":"@metamask/json-rpc-engine","version":"9.0.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/types/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.2.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.4","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.9.5"},"packageManager":"yarn@3.3.0","engines":{"node":"^18.18 || >=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@9.0.0","gitHead":"f8e343bde43a7510a1e2856abf15cdee004db179","dist":{"shasum":"41224ee7dae6b58befb883fb643fe56f47682fd4","size":45793,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-9.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-9.0.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_9.0.0_1717185077428_0.5737067258041428"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-05-31T19:51:17.637Z","publish_time":1717185077637,"_source_registry_name":"default","_cnpm_publish_time":1717185077637},"8.0.2":{"name":"@metamask/json-rpc-engine","version":"8.0.2","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/types/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.2.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.2","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.9.5"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@8.0.2","gitHead":"3227bd51bc4eca0531a53f4be6468404e6a5f032","dist":{"shasum":"29510a871a8edef892f838ee854db18de0bf0d14","size":45900,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-8.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-8.0.2.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_8.0.2_1714570717065_0.9267642956152646"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-05-01T13:38:37.249Z","publish_time":1714570717249,"_source_registry_name":"default","_cnpm_publish_time":1714570717249},"8.0.1":{"name":"@metamask/json-rpc-engine","version":"8.0.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/types/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.2.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.2","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@8.0.1","gitHead":"6986972bf7882902c32f6693fe39fdad73e98530","dist":{"shasum":"faa9fd46de2ca8b97b6efe5b9bf826b3670617eb","size":47498,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-8.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-8.0.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_8.0.1_1710329238883_0.4944940813009051"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-13T11:27:19.050Z","publish_time":1710329239050,"_source_registry_name":"default","_cnpm_publish_time":1710329239050},"8.0.0":{"name":"@metamask/json-rpc-engine","version":"8.0.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","sideEffects":false,"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsup --config ../../tsup.config.ts --tsconfig ./tsconfig.build.json --clean","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.2.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.2","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@8.0.0","gitHead":"816c8b25878115af32c2b36f117c7d7fe26ec361","dist":{"shasum":"70c8e3da01fe4690c40dceda75a3403a98797924","size":47433,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-8.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-8.0.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_8.0.0_1710272890268_0.48873063772622904"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-12T19:48:10.550Z","publish_time":1710272890550,"_source_registry_name":"default","_cnpm_publish_time":1710272890550},"7.3.3":{"name":"@metamask/json-rpc-engine","version":"7.3.3","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","main":"./dist/index.js","types":"./dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.2.1","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^3.0.2","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.3.3","gitHead":"a24869b8e7e518f6682058d3eda4c41f0317ccc8","dist":{"shasum":"f2b30a2164558014bfcca45db10f5af291d989af","size":21505,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.3.3.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.3.3_1709577870845_0.005243501744022883"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-04T18:44:30.994Z","publish_time":1709577870994,"_source_registry_name":"default","_cnpm_publish_time":1709577870994},"7.3.2":{"name":"@metamask/json-rpc-engine","version":"7.3.2","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","main":"./dist/index.js","types":"./dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.1.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.3.0"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.3.2","gitHead":"b20eb087e7b432f6372873cc087b824d96d505fa","dist":{"shasum":"e8f0695811619eef7b7c894ba5cf782db9f1c2cb","size":21470,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.3.2.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.3.2_1706046422247_0.16786688833673158"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-01-23T21:47:02.450Z","publish_time":1706046422450,"_source_registry_name":"default","_cnpm_publish_time":1706046422450},"7.3.1":{"name":"@metamask/json-rpc-engine","version":"7.3.1","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","main":"./dist/index.js","types":"./dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","changelog:update":"../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.1.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.2.0"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.4.4","@types/jest":"^27.4.1","deepmerge":"^4.2.2","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.3.1","gitHead":"968d6d14b96820d5766e5b73d4a3e6b2bd35ce60","dist":{"shasum":"f5ea9d4299382345a58a090e9fba76f6d4b0b244","size":21440,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.3.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.3.1_1703276125958_0.7060977904140577"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-12-22T20:15:26.134Z","publish_time":1703276126134,"_source_registry_name":"default","_cnpm_publish_time":1703276126134},"7.3.0":{"name":"@metamask/json-rpc-engine","version":"7.3.0","description":"A tool for processing JSON-RPC messages","keywords":["MetaMask","Ethereum"],"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/core.git"},"license":"ISC","main":"./dist/index.js","types":"./dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","changelog:validate":"../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","publish:preview":"yarn npm publish --tag preview","test":"jest --reporters=jest-silent-reporter","test:clean":"jest --clearCache","test:verbose":"jest --verbose","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.1.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.2.0"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.4.3","@types/jest":"^27.4.1","deepmerge":"^4.2.2","depcheck":"^1.4.3","jest":"^27.5.1","jest-it-up":"^2.0.2","ts-jest":"^27.1.4","typedoc":"^0.24.8","typescript":"~4.8.4"},"packageManager":"yarn@3.3.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.3.0","gitHead":"20054ab903ec1f3100a2e3988db477ae706ab792","dist":{"shasum":"eec5505f0ea41bd46c785c8722c5a10a3afd9850","size":20986,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.3.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.3.0_1699477227820_0.2667029170577555"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-11-08T21:00:28.074Z","publish_time":1699477228074,"_source_registry_name":"default","_cnpm_publish_time":1699477228074},"7.2.0":{"name":"@metamask/json-rpc-engine","version":"7.2.0","description":"A tool for processing JSON-RPC messages.","homepage":"https://github.com/MetaMask/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/json-rpc-engine/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/json-rpc-engine.git"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","prepack":"./scripts/prepack.sh","test":"jest && jest-it-up","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.0.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.1.0","@metamask/eslint-config":"^12.2.0","@metamask/eslint-config-jest":"^12.1.0","@metamask/eslint-config-nodejs":"^12.1.0","@metamask/eslint-config-typescript":"^12.1.0","@types/jest":"^29.5.0","@types/node":"^18.15.11","@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","depcheck":"^1.4.3","eslint":"^8.27.0","eslint-config-prettier":"^8.5.0","eslint-import-resolver-typescript":"^2.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jest":"^27.1.5","eslint-plugin-jsdoc":"^39.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-prettier":"^4.2.1","eslint-plugin-promise":"^6.1.1","jest":"^29.5.0","jest-it-up":"^2.2.0","prettier":"^2.8.7","prettier-plugin-packagejson":"^2.4.3","rimraf":"^5.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","typedoc":"^0.24.1","typescript":"~4.8.4"},"packageManager":"yarn@3.5.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.2.0","gitHead":"ea412ad63f52906d3ceb01654017be7e4beec57a","dist":{"shasum":"568a0159d44aa2f46979dd27a3b9e6c490891950","size":19107,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.2.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.2.0_1697721406649_0.042130187769839456"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-10-19T13:16:46.888Z","publish_time":1697721406888,"_source_registry_name":"default","_cnpm_publish_time":1697721406888},"7.1.1":{"name":"@metamask/json-rpc-engine","version":"7.1.1","description":"A tool for processing JSON-RPC messages.","homepage":"https://github.com/MetaMask/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/json-rpc-engine/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/json-rpc-engine.git"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","prepack":"./scripts/prepack.sh","test":"jest && jest-it-up","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^6.0.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^8.1.0"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.1.0","@metamask/eslint-config":"^11.0.1","@metamask/eslint-config-jest":"^11.0.0","@metamask/eslint-config-nodejs":"^11.0.1","@metamask/eslint-config-typescript":"^11.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.11","@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","depcheck":"^1.4.3","eslint":"^8.27.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jest":"^27.1.5","eslint-plugin-jsdoc":"^39.6.2","eslint-plugin-node":"^11.1.0","eslint-plugin-prettier":"^4.2.1","jest":"^29.5.0","jest-it-up":"^2.2.0","prettier":"^2.8.7","prettier-plugin-packagejson":"^2.4.3","rimraf":"^5.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","typedoc":"^0.24.1","typescript":"~4.8.4"},"packageManager":"yarn@3.5.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.1.1","gitHead":"add4adbe97903c4dc246f410e0edd2d10efbef8e","dist":{"shasum":"90d4c1e1fe3bcfc983563f6e07715319b8857190","size":19016,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.1.1.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.1.1_1693605019851_0.9577326495836183"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-09-01T21:50:20.062Z","publish_time":1693605020062,"_source_registry_name":"default","_cnpm_publish_time":1693605020062},"7.1.0":{"name":"@metamask/json-rpc-engine","version":"7.1.0","description":"A tool for processing JSON-RPC messages.","homepage":"https://github.com/MetaMask/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/json-rpc-engine/issues"},"repository":{"type":"git","url":"git+https://github.com/MetaMask/json-rpc-engine.git"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","prepack":"./scripts/prepack.sh","test":"jest && jest-it-up","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^5.0.0","@metamask/safe-event-emitter":"^3.0.0","@metamask/utils":"^5.0.2"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.1","@metamask/auto-changelog":"^3.1.0","@metamask/eslint-config":"^11.0.1","@metamask/eslint-config-jest":"^11.0.0","@metamask/eslint-config-nodejs":"^11.0.1","@metamask/eslint-config-typescript":"^11.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.11","@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","depcheck":"^1.4.3","eslint":"^8.27.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jest":"^27.1.5","eslint-plugin-jsdoc":"^39.6.2","eslint-plugin-node":"^11.1.0","eslint-plugin-prettier":"^4.2.1","jest":"^29.5.0","jest-it-up":"^2.2.0","prettier":"^2.8.7","prettier-plugin-packagejson":"^2.4.3","rimraf":"^5.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","typedoc":"^0.24.1","typescript":"~4.8.4"},"packageManager":"yarn@3.5.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"gitHead":"465455db82330b3dc9067910b90b74110963360e","_id":"@metamask/json-rpc-engine@7.1.0","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"shasum":"31d6344e31797565d294a12404f02825082d1bff","size":20487,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.1.0.tgz"},"_npmUser":{"name":"gudahtt","email":"markjstacey@gmail.com"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.1.0_1693604985114_0.25871315435875597"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-09-01T21:49:45.380Z","publish_time":1693604985380,"_source_registry_name":"default","_cnpm_publish_time":1693604985380},"7.0.0":{"name":"@metamask/json-rpc-engine","version":"7.0.0","description":"A tool for processing JSON-RPC messages.","homepage":"https://github.com/MetaMask/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/json-rpc-engine/issues"},"repository":{"type":"git","url":"https://github.com/MetaMask/json-rpc-engine.git"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","directories":{"test":"test"},"scripts":{"build":"tsc --project tsconfig.build.json","build:clean":"rimraf dist && yarn build","build:docs":"typedoc","lint":"yarn lint:eslint && yarn lint:misc --check && yarn lint:dependencies && yarn lint:changelog","lint:changelog":"auto-changelog validate","lint:dependencies":"depcheck","lint:eslint":"eslint . --cache --ext js,ts","lint:fix":"yarn lint:eslint --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog","lint:misc":"prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern","prepack":"./scripts/prepack.sh","test":"jest && jest-it-up","test:watch":"jest --watch"},"dependencies":{"@metamask/rpc-errors":"^5.0.0","@metamask/safe-event-emitter":"^2.0.0","@metamask/utils":"^5.0.1"},"devDependencies":{"@lavamoat/allow-scripts":"^2.3.0","@metamask/auto-changelog":"^3.1.0","@metamask/eslint-config":"^11.0.1","@metamask/eslint-config-jest":"^11.0.0","@metamask/eslint-config-nodejs":"^11.0.1","@metamask/eslint-config-typescript":"^11.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.11","@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","depcheck":"^1.4.3","eslint":"^8.27.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jest":"^27.1.5","eslint-plugin-jsdoc":"^39.6.2","eslint-plugin-node":"^11.1.0","eslint-plugin-prettier":"^4.2.1","jest":"^29.5.0","jest-it-up":"^2.2.0","prettier":"^2.8.7","prettier-plugin-packagejson":"^2.4.3","rimraf":"^5.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","typedoc":"^0.24.1","typescript":"~4.8.4"},"packageManager":"yarn@3.5.0","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"lavamoat":{"allowScripts":{"@lavamoat/preinstall-always-fail":false}},"_id":"@metamask/json-rpc-engine@7.0.0","gitHead":"78edafb673a84e293d19b13afbfb404222669671","dist":{"shasum":"5110d7e90a75aab4e515621fafff5adf7174b6e3","size":18493,"noattachment":false,"key":"/@metamask/json-rpc-engine/-/@metamask/json-rpc-engine-7.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@metamask/json-rpc-engine/download/@metamask/json-rpc-engine-7.0.0.tgz"},"_npmUser":{"name":"metamaskbot","email":"security@metamask.io"},"maintainers":[{"name":"danfinlay","email":"dan@danfinlay.com"},{"name":"gudahtt","email":"markjstacey@gmail.com"},{"name":"kumavis","email":"aaron@kumavis.me"},{"name":"metamaskbot","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-rpc-engine_7.0.0_1681407740637_0.9507415046317704"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-04-13T17:42:20.859Z","publish_time":1681407740859,"_cnpm_publish_time":1681407740859}},"readme":"# `@metamask/json-rpc-engine`\n\nA tool for processing JSON-RPC requests and responses.\n\n## Installation\n\n`yarn add @metamask/json-rpc-engine`\n\nor\n\n`npm install @metamask/json-rpc-engine`\n\n## Usage\n\n> [!TIP]\n> For the legacy `JsonRpcEngine`, see [its readme](./src/README.md).\n>\n> For how to migrate from the legacy `JsonRpcEngine` to `JsonRpcEngineV2`, see [Migrating from `JsonRpcEngine`](#migrating-from-jsonrpcengine).\n\n```ts\nimport { JsonRpcEngineV2 } from '@metamask/json-rpc-engine/v2';\nimport type {\n  Json,\n  JsonRpcMiddleware,\n  MiddlewareContext,\n} from '@metamask/json-rpc-engine/v2';\n\ntype Middleware = JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json,\n  MiddlewareContext<{ hello: string }>\n>;\n\n// Engines are instantiated using the `create()` factory method as opposed to\n// the constructor, which is private.\nconst engine = JsonRpcEngineV2.create<Middleware>({\n  middleware: [\n    ({ request, next, context }) => {\n      if (request.method === 'hello') {\n        context.set('hello', 'world');\n        return next();\n      }\n      return null;\n    },\n    ({ context }) => context.assertGet('hello'),\n  ],\n});\n```\n\nRequests are handled asynchronously, stepping down the middleware stack until complete.\n\n```ts\nconst request = { id: '1', jsonrpc: '2.0', method: 'hello' };\n\ntry {\n  const result = await engine.handle(request);\n  // Do something with the result\n} catch (error) {\n  // Handle the error\n}\n```\n\nAlternatively, pass the engine to a `JsonRpcServer`, which coerces raw request\nobjects into well-formed requests, and handles error serialization:\n\n```ts\nconst server = new JsonRpcServer({ engine, onError });\nconst request = { id: '1', jsonrpc: '2.0', method: 'hello' };\n\n// server.handle() never throws\nconst response = await server.handle(request);\nif ('result' in response) {\n  // Handle result\n} else {\n  // Handle error\n}\n\nconst notification = { jsonrpc: '2.0', method: 'hello' };\n\n// Always returns undefined for notifications\nawait server.handle(notification);\n```\n\n### Legacy compatibility\n\nUse `asLegacyMiddleware()` to convert a `JsonRpcEngineV2` or one or more V2 middleware into a legacy middleware.\n\n#### Context propagation\n\nIn keeping with the conventions of the legacy engine, non-JSON-RPC string properties of the `context` will be\ncopied over to the request once the V2 engine is done with the request. _Note that **only `string` keys** of\nthe `context` will be copied over._\n\n#### Converting a V2 engine\n\n```ts\nimport {\n  asLegacyMiddleware,\n  JsonRpcEngineV2,\n} from '@metamask/json-rpc-engine/v2';\nimport { JsonRpcEngine } from '@metamask/json-rpc-engine';\n\nconst legacyEngine = new JsonRpcEngine();\n\nconst v2Engine = JsonRpcEngineV2.create({\n  middleware: [\n    // ...\n  ],\n});\n\nlegacyEngine.push(asLegacyMiddleware(v2Engine));\n```\n\n#### Converting V2 middleware\n\n```ts\nimport {\n  asLegacyMiddleware,\n  type JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine/v2';\nimport { JsonRpcEngine } from '@metamask/json-rpc-engine';\n\n// Convert a single V2 middleware\nconst middleware1: JsonRpcMiddleware<JsonRpcRequest> = ({ request }) => {\n  /* ... */\n};\n\nconst legacyEngine = new JsonRpcEngine();\nlegacyEngine.push(asLegacyMiddleware(middleware1));\n\n// Convert multiple V2 middlewares at once\nconst middleware2: JsonRpcMiddleware<JsonRpcRequest> = ({ context, next }) => {\n  /* ... */\n};\n\nconst legacyEngine2 = new JsonRpcEngine();\nlegacyEngine2.push(asLegacyMiddleware(middleware1, middleware2));\n```\n\n### Middleware\n\nMiddleware functions can be sync or async.\nThey receive a `MiddlewareParams` object containing:\n\n- `request`\n  - The JSON-RPC request or notification (readonly)\n- `context`\n  - An append-only `Map` for passing data between middleware\n- `next`\n  - Function that calls the next middleware in the stack and returns its result (if any)\n\nHere's a basic example:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ next, context }) => {\n      context.set('foo', 'bar');\n      // Proceed to the next middleware and return its result\n      return next();\n    },\n    async ({ request, context }) => {\n      await doSomething(request, context.get('foo'));\n      // Return a result wihout calling next() to end the request\n      return 42;\n    },\n  ],\n});\n```\n\nIn practice, middleware functions are often defined apart from the engine in which\nthey are used. Middleware defined in this manner must use the `JsonRpcMiddleware` type:\n\n```ts\nexport const permissionMiddleware: JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json, // The result\n  MiddlewareContext<{ user: User; permissions: Permissions }>\n> = async ({ request, context, next }) => {\n  const user = context.assertGet('user');\n  const permissions = await getUserPermissions(user.id);\n  context.set('permissions', permissions);\n  return next();\n};\n```\n\nMiddleware can specify a return type, however `next()` always returns the widest possible\ntype based on the type of the `request`. See [Requests vs. notifications](#requests-vs-notifications)\nfor more details.\n\nCreating a useful `JsonRpcEngineV2` requires composing differently typed middleware together.\nSee [Engine composition](#engine-composition) for how to\naccomplish this in the same or a set of composed engines.\n\n### Requests vs. notifications\n\nJSON-RPC requests come in two flavors:\n\n- [Requests](https://www.jsonrpc.org/specification#request_object), i.e. request objects _with_ an `id`\n- [Notifications](https://www.jsonrpc.org/specification#notification), i.e. request objects _without_ an `id`\n\n`next()` returns `Json` for requests, `void` for notifications, and `Json | void` if the type of the request\nobject is not known.\n\nFor requests, one of the engine's middleware must \"end\" the request by returning a non-`undefined` result, or `.handle()`\nwill throw an error:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    () => {\n      if (Math.random() > 0.5) {\n        return 42;\n      }\n      return undefined;\n    },\n  ],\n});\n\nconst request = { jsonrpc: '2.0', id: '1', method: 'hello' };\n\ntry {\n  const result = await engine.handle(request);\n  console.log(result); // 42\n} catch (error) {\n  console.error(error); // Nothing ended request: { ... }\n}\n```\n\nFor notifications, on the other hand, one of the engine's middleware must return `undefined` to end the request,\nand any non-`undefined` return values will cause an error to be thrown:\n\n```ts\nconst notification = { jsonrpc: '2.0', method: 'hello' };\n\ntry {\n  const result = await engine.handle(notification);\n  console.log(result); // undefined\n} catch (error) {\n  console.error(error); // Result returned for notification: { ... }\n}\n```\n\nIf your middleware may be passed both requests and notifications,\nuse the `isRequest` or `isNotification` utilities to determine what to do:\n\n> [!NOTE]\n> Middleware that handle both requests and notifications—i.e. the `JsonRpcCall` type—\n> must ensure that their return values are valid for incoming requests at runtime.\n> There is no compile time type error if such a middleware returns e.g. a string\n> for a notification.\n\n```ts\nimport {\n  isRequest,\n  isNotification,\n  JsonRpcEngineV2,\n} from '@metamask/json-rpc-engine/v2';\n\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    async ({ request, next }) => {\n      if (isRequest(request) && request.method === 'everything') {\n        return 42;\n      }\n      return next();\n    },\n    ({ request }) => {\n      if (isNotification(request)) {\n        console.log(`Received notification: ${request.method}`);\n        return undefined;\n      }\n      return null;\n    },\n  ],\n});\n```\n\n### Request modification\n\nThe `request` object is immutable.\nAttempting to directly modify it will throw an error.\nMiddleware can modify the `method` and `params` properties\nby passing a new request object to `next()`:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request, next }) => {\n      // Modify the request for subsequent middleware\n      // The new request object will be deeply frozen\n      return next({\n        ...request,\n        method: 'modified_method',\n        params: [1, 2, 3],\n      });\n    },\n    ({ request }) => {\n      // This middleware receives the modified request\n      return request.params[0];\n    },\n  ],\n});\n```\n\nModifying the `jsonrpc` or `id` properties is not allowed, and will cause\nan error:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request, next }) => {\n      return next({\n        ...request,\n        // Modifying either property will cause an error\n        jsonrpc: '3.0',\n        id: 'foo',\n      });\n    },\n    () => 42,\n  ],\n});\n\n// Error: Middleware attempted to modify readonly property...\nawait engine.handle(anyRequest);\n```\n\n### Result handling\n\nMiddleware can observe the result by awaiting `next()`:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    async ({ request, next }) => {\n      const startTime = Date.now();\n      const result = await next();\n      const duration = Date.now() - startTime;\n\n      // Log the request duration\n      console.log(\n        `Request ${request.method} producing ${result} took ${duration}ms`,\n      );\n\n      // By returning `undefined`, the result will be forwarded unmodified to earlier\n      // middleware.\n    },\n    ({ request }) => {\n      return 'Hello, World!';\n    },\n  ],\n});\n```\n\nLike the `request`, the `result` is also immutable.\nMiddleware can update the result by returning a new one.\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    async ({ request, next }) => {\n      const result = await next();\n\n      // Add metadata to the result\n      if (result && typeof result === 'object') {\n        // The new result will also be deeply frozen\n        return {\n          ...result,\n          metadata: {\n            processedAt: new Date().toISOString(),\n            requestId: request.id,\n          },\n        };\n      }\n\n      // Returning the unmodified result is equivalent to returning `undefined`\n      return result;\n    },\n    ({ request }) => {\n      // Initial result\n      return { message: 'Hello, World!' };\n    },\n  ],\n});\n\nconst result = await engine.handle({\n  id: '1',\n  jsonrpc: '2.0',\n  method: 'hello',\n});\nconsole.log(result);\n// {\n//   message: 'Hello, World!',\n//   metadata: {\n//     processedAt: '2024-01-01T12:00:00.000Z',\n//     requestId: 1\n//   }\n// }\n```\n\n### The `MiddlewareContext`\n\nUse the `context` to share data between middleware:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    async ({ context, next }) => {\n      context.set('user', { id: '123', name: 'Alice' });\n      return next();\n    },\n    async ({ context, next }) => {\n      // context.assertGet() throws if the value does not exist\n      const user = context.assertGet('user') as { id: string; name: string };\n      context.set('permissions', await getUserPermissions(user.id));\n      return next();\n    },\n    ({ context }) => {\n      const user = context.get('user');\n      const permissions = context.get('permissions');\n      return { user, permissions };\n    },\n  ],\n});\n```\n\nThe `context` supports `PropertyKey` keys, i.e. strings, numbers, and symbols.\nTo prevent accidental naming collisions, existing keys must be deleted before they can be\noverwritten via `set()`.\nContext values are not frozen, and objects can be mutated as normal:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    async ({ context, next }) => {\n      context.set('user', { id: '123', name: 'Alice' });\n      return next();\n    },\n    async ({ context, next }) => {\n      const user = context.assertGet<{ id: string; name: string }>('user');\n      user.name = 'Bob';\n      return next();\n    },\n    // ...\n  ],\n});\n```\n\n#### Passing the context to `handle()`\n\nYou can pass a `MiddlewareContext` instance directly to `handle()`:\n\n```ts\nconst context = new MiddlewareContext();\ncontext.set('foo', 'bar');\nconst result = await engine.handle(\n  { id: '1', jsonrpc: '2.0', method: 'hello' },\n  { context },\n);\nconsole.log(result); // 'bar'\n```\n\nYou can also pass a plain object as a shorthand for a `MiddlewareContext` instance:\n\n```ts\nconst context = { foo: 'bar' };\nconst result = await engine.handle(\n  { id: '1', jsonrpc: '2.0', method: 'hello' },\n  { context },\n);\nconsole.log(result); // 'bar'\n```\n\nThis works the same way for `JsonRpcServer.handle()`.\n\n#### Constraining context keys and values\n\nThe context exposes a generic parameter `KeyValues`, which determines the keys and values\na context instance supports:\n\n```ts\nconst context = new MiddlewareContext();\ncontext.set('foo', 'bar');\ncontext.get('foo'); // 'bar'\ncontext.get('fizz'); // undefined\n```\n\nBy default, `KeyValues` is `Record<PropertyKey, unknown>`. However, any object type can be\nspecified, effectively turning the context into a strongly typed `Map`:\n\n```ts\nconst context = new MiddlewareContext<{ foo: string }>([['foo', 'bar']]);\ncontext.get('foo'); // 'bar'\ncontext.get('fizz'); // Type error\n```\n\nThe context is itself exposed as the third generic parameter of the `JsonRpcMiddleware` type.\nSee [Instrumenting middleware pipelines](#instrumenting-middleware-pipelines) for how to\ncompose different context types together.\n\n### Error handling\n\nErrors in middleware are propagated up the call stack:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ next }) => {\n      return next();\n    },\n    ({ request, next }) => {\n      if (request.method === 'restricted') {\n        throw new Error('Method not allowed');\n      }\n      return 'Success';\n    },\n  ],\n});\n\ntry {\n  await engine.handle({ id: '1', jsonrpc: '2.0', method: 'restricted' });\n} catch (error) {\n  console.error('Request failed:', error.message);\n}\n```\n\nIf your middleware awaits `next()`, it can handle errors using `try`/`catch`:\n\n```ts\nconst engine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request, next }) => {\n      try {\n        return await next();\n      } catch (error) {\n        console.error(`Request ${request.method} errored:`, error);\n        return 42;\n      }\n    },\n    ({ request }) => {\n      if (!isValid(request)) {\n        throw new Error('Invalid request');\n      }\n    },\n  ],\n});\n\nconst result = await engine.handle({\n  id: '1',\n  jsonrpc: '2.0',\n  method: 'hello',\n});\nconsole.log('Result:', result);\n// Request hello errored: Error: Invalid request\n// Result: 42\n```\n\n#### Internal errors\n\nThe engine throws `JsonRpcEngineError` values when its invariants are violated, e.g. a middleware returns\na result value for a notification.\nIf you want to reliably detect these cases, use `JsonRpcEngineError.isInstance(error)`, which works across\nversions of this package in the same realm.\n\n### Engine composition\n\n#### Instrumenting middleware pipelines\n\nAs discussed in the [Middleware](#middleware) section, middleware are often defined apart from the\nengine in which they are used. To be used within the same engine, a set of middleware must have\ncompatible types. Specifically, all middleware must:\n\n- Handle either `JsonRpcRequest`, `JsonRpcNotification`, or both (i.e. `JsonRpcCall`)\n  - It is okay to mix `JsonRpcCall` middleware with either `JsonRpcRequest` or `JsonRpcNotification`\n    middleware, as long as the latter two are not mixed together.\n- Return valid results for the overall request type\n- Specify mutually inclusive context types\n  - The context types may be the same, partially intersecting, or completely disjoint\n    so long as they are not mutually exclusive.\n\nFor example, the following middleware are compatible:\n\n```ts\nconst middleware1: JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json,\n  MiddlewareContext<{ foo: string }>\n> = /* ... */;\n\nconst middleware2: JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json,\n  MiddlewareContext<{ bar: string }>\n> = /* ... */;\n\nconst middleware3: JsonRpcMiddleware<\n  JsonRpcRequest,\n  { foo: string; bar: string },\n  MiddlewareContext<{ foo: string; bar: string; baz: number }>\n> = /* ... */;\n\n// ✅ OK\nconst engine = JsonRpcEngineV2.create<Middleware>({\n  middleware: [middleware1, middleware2, middleware3],\n});\n```\n\nThe following middleware are incompatible due to mismatched request types:\n\n> [!WARNING]\n> Providing `JsonRpcRequest`- and `JsonRpcNotification`-only middleware to the same engine is\n> generally unsound and should be avoided. However, doing so will **not** cause a type error,\n> and it is the programmer's responsibility to prevent it from happening.\n\n```ts\nconst middleware1: JsonRpcMiddleware<JsonRpcNotification> = /* ... */;\n\nconst middleware2: JsonRpcMiddleware<JsonRpcRequest> = /* ... */;\n\n// ⚠️ Attempting to call engine.handle() will NOT cause a type error, but it\n// may cause errors at runtime and should be avoided.\nconst engine = JsonRpcEngineV2.create<Middleware>({\n  middleware: [middleware1, middleware2],\n});\n```\n\nFinally, these middleware are incompatible due to mismatched context types:\n\n```ts\nconst middleware1: JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json,\n  MiddlewareContext<{ foo: string }>\n> = /* ... */;\n\nconst middleware2: JsonRpcMiddleware<\n  JsonRpcRequest,\n  Json,\n  MiddlewareContext<{ foo: number }>\n> = /* ... */;\n\n// ❌ The type of the engine is `never`; accessing any property will cause a type error\nconst engine = JsonRpcEngineV2.create<Middleware>({\n  middleware: [middleware1, middleware2],\n});\n```\n\n#### `asMiddleware()`\n\nEngines can be nested by converting them to middleware using `asMiddleware()`:\n\n```ts\nconst subEngine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request }) => {\n      return 'Sub-engine result';\n    },\n  ],\n});\n\nconst mainEngine = JsonRpcEngineV2.create({\n  middleware: [\n    subEngine.asMiddleware(),\n    ({ request, next }) => {\n      const subResult = await next();\n      return `Main engine processed: ${subResult}`;\n    },\n  ],\n});\n```\n\nEngines used as middleware may return `undefined` for requests, but only when\nused as middleware:\n\n```ts\nconst loggingEngine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request, next }) => {\n      console.log('Observed request:', request.method);\n    },\n  ],\n});\n\nconst mainEngine = JsonRpcEngineV2.create({\n  middleware: [\n    loggingEngine.asMiddleware(),\n    ({ request }) => {\n      return 'success';\n    },\n  ],\n});\n\nconst request = { id: '1', jsonrpc: '2.0', method: 'hello' };\nconst result = await mainEngine.handle(request);\nconsole.log('Result:', result);\n// Observed request: hello\n// Result: success\n\n// ATTN: This will throw \"Nothing ended request\"\nconst result2 = await loggingEngine.handle(request);\n```\n\n#### Calling `handle()` in a middleware\n\nYou can also compose different engines together by calling `handle(request, context)`\non a different engine in a middleware. Keep in mind that, unlike when using `asMiddleware()`,\nthese \"sub\"-engines must return results for requests.\n\nThis method of composition can be useful to instrument request- and notification-only\nmiddleware pipelines:\n\n```ts\nconst requestEngine = JsonRpcEngineV2.create({\n  middleware: [\n    /* Request-only middleware */\n  ],\n});\n\nconst notificationEngine = JsonRpcEngineV2.create({\n  middleware: [\n    /* Notification-only middleware */\n  ],\n});\n\nconst orchestratorEngine = JsonRpcEngineV2.create({\n  middleware: [\n    ({ request, context }) =>\n      isRequest(request)\n        ? requestEngine.handle(request, { context })\n        : notificationEngine.handle(request as JsonRpcNotification, {\n            context,\n          }),\n  ],\n});\n```\n\n### `JsonRpcServer`\n\nThe `JsonRpcServer` wraps a `JsonRpcEngineV2` to provide JSON-RPC 2.0 compliance and error handling. It coerces raw request objects into well-formed requests and handles error serialization.\n\n```ts\nimport { JsonRpcEngineV2, JsonRpcServer } from '@metamask/json-rpc-engine/v2';\n\nconst engine = new JsonRpcEngine({ middleware });\n\nconst server = new JsonRpcServer({\n  engine,\n  // onError receives the raw error, before it is coerced into a JSON-RPC error.\n  onError: (error) => console.error('Server error:', error),\n});\n\n// server.handle() never throws - all errors are handled by onError\nconst response = await server.handle({\n  id: '1',\n  jsonrpc: '2.0',\n  method: 'hello',\n});\nif ('result' in response) {\n  // Handle successful response\n} else {\n  // Handle error response\n}\n\n// Notifications always return undefined\nconst notification = { jsonrpc: '2.0', method: 'hello' };\nawait server.handle(notification); // Returns undefined\n```\n\nThe server accepts any object with a `method` property, coercing it into a request or notification\ndepending on the presence or absence of the `id` property, respectively.\nExcept for the `id`, all present JSON-RPC 2.0 fields are validated for spec conformance.\nThe `id` is replaced during request processing with an internal, trusted value, although the\noriginal `id` is attached to the response before it is returned.\n\nResponse objects are returned for requests, and contain\nthe `result` in case of success and `error` in case of failure.\n`undefined` is always returned for notifications.\n\nErrors thrown by the underlying engine are always passed to `onError` unmodified.\nIf the request is not a notification, the error is subsequently serialized and attached\nto the response object via the `error` property.\n\n> [!WARNING]\n> It is possible to construct a `JsonRpcServer` the only accepts either requests or notifications,\n> but not both. If you do so, it is your responsibility to ensure that the server is only used with the\n> appropriate request objects. `JsonRpcServer.handle()` will not type error at compile time if you attempt to pass\n> it an unsupported request object.\n\n## Migrating from `JsonRpcEngine`\n\nMigrating from the legacy `JsonRpcEngine` to `JsonRpcEngineV2` is generally straightforward.\nFor an example, see [MetaMask/core#7065](https://github.com/MetaMask/core/pull/7065).\nThere are a couple of pitfalls to watch out for:\n\n### `MiddlewareContext` vs. non-JSON-RPC string properties\n\nThe legacy `JsonRpcEngine` allowed non-JSON-RPC string properties to be attached to the request object.\n`JsonRpcEngineV2` does not allow this, and instead you must use the `context` object to pass data between middleware.\nWhile it's easy to migrate a middleware function body to use the `context` object, injected dependencies\nof the middleware function may need to be updated.\n\nFor example if you have a legacy middleware implementation like this:\n\n```ts\nconst createFooMiddleware =\n  (processFoo: (req: JsonRpcRequest) => string) => (req, res, next, end) => {\n    if (req.method === 'foo') {\n      const fooResult = processFoo(req); // May expect non-JSON-RPC properties on the request object!\n      res.result = fooResult;\n      end();\n    } else {\n      next();\n    }\n  };\n```\n\n`processFoo` may expect non-JSON-RPC properties on the request object. To fully migrate the middleware, you need to\ninvestigate the implementation of `processFoo` and potentially update it to accept a `context` object.\n\n### Frozen requests\n\nIn the legacy `JsonRpcEngine`, request and response objects are mutable and shared between all middleware.\nIn `JsonRpcEngineV2`, response objects are not visible to middleware, and request objects are deeply frozen.\nIf injected dependencies mutate the request object, it will cause an error.\n\nFor example, if you have a legacy middleware implementation like this:\n\n```ts\nconst createBarMiddleware =\n  (processBar: (req: JsonRpcRequest) => string) => (req, _res, next, _end) => {\n    if (req.method === 'bar') {\n      processBar(req); // May mutate the request object!\n    }\n    next();\n  };\n```\n\n`processBar` may mutate the request object. To fully migrate the middleware, you need to\ninvestigate the implementation of `processBar` and update it to not directly mutate the request object.\nSee [Request modification](#request-modification) for how to modify the request object in `JsonRpcEngineV2`.\n\n## Contributing\n\nThis package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme).\n","_attachments":{},"homepage":"https://github.com/MetaMask/core/tree/main/packages/json-rpc-engine#readme","bugs":{"url":"https://github.com/MetaMask/core/issues"},"license":"ISC"}