Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@metamask/eth-json-rpc-middleware

Package Overview
Dependencies
Maintainers
10
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@metamask/eth-json-rpc-middleware - npm Package Compare versions

Comparing version 11.0.1 to 11.0.2

7

CHANGELOG.md

@@ -9,2 +9,6 @@ # Changelog

## [11.0.2]
### Changed
- Bump @metamask/eth-sig-util from ^5.0.0 to ^6.0.0 ([#236](https://github.com/MetaMask/eth-json-rpc-middleware/pull/236))
## [11.0.1]

@@ -134,3 +138,4 @@ ### Changed

[Unreleased]: https://github.com/MetaMask/eth-json-rpc-middleware/compare/v11.0.1...HEAD
[Unreleased]: https://github.com/MetaMask/eth-json-rpc-middleware/compare/v11.0.2...HEAD
[11.0.2]: https://github.com/MetaMask/eth-json-rpc-middleware/compare/v11.0.1...v11.0.2
[11.0.1]: https://github.com/MetaMask/eth-json-rpc-middleware/compare/v11.0.0...v11.0.1

@@ -137,0 +142,0 @@ [11.0.0]: https://github.com/MetaMask/eth-json-rpc-middleware/compare/v10.0.0...v11.0.0

2

dist/block-cache.d.ts

@@ -1,2 +0,2 @@

import { PollingBlockTracker } from 'eth-block-tracker';
import type { PollingBlockTracker } from 'eth-block-tracker';
import type { JsonRpcCacheMiddleware } from './types';

@@ -3,0 +3,0 @@ interface BlockCacheMiddlewareOptions {

@@ -7,3 +7,3 @@ "use strict";

const cache_1 = require("./utils/cache");
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'block-cache');
const log = (0, logging_utils_1.createModuleLogger)(logging_utils_1.projectLogger, 'block-cache');
// `<nil>` comes from https://github.com/ethereum/go-ethereum/issues/16925

@@ -33,3 +33,3 @@ const emptyValues = [undefined, null, '\u003cnil\u003e'];

// lookup payload in block cache
const identifier = cache_1.cacheIdentifierForRequest(request, true);
const identifier = (0, cache_1.cacheIdentifierForRequest)(request, true);
return identifier ? blockCache[identifier] : undefined;

@@ -44,3 +44,3 @@ }

// set the value in the cache
const identifier = cache_1.cacheIdentifierForRequest(request, true);
const identifier = (0, cache_1.cacheIdentifierForRequest)(request, true);
if (!identifier) {

@@ -54,7 +54,7 @@ return;

// check request method
if (!cache_1.canCache(request.method)) {
if (!(0, cache_1.canCache)(request.method)) {
return false;
}
// check blockTag
const blockTag = cache_1.blockTagForRequest(request);
const blockTag = (0, cache_1.blockTagForRequest)(request);
if (blockTag === 'pending') {

@@ -107,3 +107,3 @@ return false;

};
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, next) => {
// allow cach to be skipped if so specified

@@ -114,3 +114,3 @@ if (req.skipCache) {

// check type and matching strategy
const type = cache_1.cacheTypeForMethod(req.method);
const type = (0, cache_1.cacheTypeForMethod)(req.method);
const strategy = strategies[type];

@@ -126,3 +126,3 @@ // If there's no strategy in place, pass it down the chain.

// get block reference (number or keyword)
const requestBlockTag = cache_1.blockTagForRequest(req);
const requestBlockTag = (0, cache_1.blockTagForRequest)(req);
const blockTag = requestBlockTag && typeof requestBlockTag === 'string'

@@ -157,3 +157,3 @@ ? requestBlockTag

log('No cache stored under block number %o, carrying request forward', requestedBlockNumber);
// eslint-disable-next-line node/callback-return
// eslint-disable-next-line n/callback-return
await next();

@@ -160,0 +160,0 @@ // add result to cache

@@ -1,3 +0,3 @@

import { PollingBlockTracker } from 'eth-block-tracker';
import { JsonRpcMiddleware } from 'json-rpc-engine';
import type { PollingBlockTracker } from 'eth-block-tracker';
import type { JsonRpcMiddleware } from 'json-rpc-engine';
interface BlockRefRewriteMiddlewareOptions {

@@ -4,0 +4,0 @@ blockTracker?: PollingBlockTracker;

@@ -10,4 +10,4 @@ "use strict";

}
return json_rpc_engine_1.createAsyncMiddleware(async (req, _res, next) => {
const blockRefIndex = cache_1.blockTagParamIndex(req.method);
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, _res, next) => {
const blockRefIndex = (0, cache_1.blockTagParamIndex)(req.method);
// skip if method does not include blockRef

@@ -14,0 +14,0 @@ if (blockRefIndex === undefined) {

@@ -1,4 +0,4 @@

import { PollingBlockTracker } from 'eth-block-tracker';
import { JsonRpcMiddleware } from 'json-rpc-engine';
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
import type { PollingBlockTracker } from 'eth-block-tracker';
import type { JsonRpcMiddleware } from 'json-rpc-engine';
interface BlockRefMiddlewareOptions {

@@ -5,0 +5,0 @@ blockTracker?: PollingBlockTracker;

@@ -7,8 +7,8 @@ "use strict";

exports.createBlockRefMiddleware = void 0;
const clone_1 = __importDefault(require("clone"));
const json_rpc_engine_1 = require("json-rpc-engine");
const clone_1 = __importDefault(require("clone"));
const pify_1 = __importDefault(require("pify"));
const logging_utils_1 = require("./logging-utils");
const cache_1 = require("./utils/cache");
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'block-ref');
const log = (0, logging_utils_1.createModuleLogger)(logging_utils_1.projectLogger, 'block-ref');
function createBlockRefMiddleware({ provider, blockTracker, } = {}) {

@@ -21,5 +21,5 @@ if (!provider) {

}
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, next) => {
var _a;
const blockRefIndex = cache_1.blockTagParamIndex(req.method);
const blockRefIndex = (0, cache_1.blockTagParamIndex)(req.method);
// skip if method does not include blockRef

@@ -41,3 +41,3 @@ if (blockRefIndex === undefined) {

// create child request with specific block-ref
const childRequest = clone_1.default(req);
const childRequest = (0, clone_1.default)(req);
if (Array.isArray(childRequest.params)) {

@@ -48,3 +48,3 @@ childRequest.params[blockRefIndex] = latestBlockNumber;

log('Performing another request %o', childRequest);
const childRes = await pify_1.default(provider.sendAsync).call(provider, childRequest);
const childRes = await (0, pify_1.default)(provider.sendAsync).call(provider, childRequest);
// copy child response onto original response

@@ -51,0 +51,0 @@ res.result = childRes.result;

@@ -1,3 +0,3 @@

import { PollingBlockTracker } from 'eth-block-tracker';
import { JsonRpcMiddleware } from 'json-rpc-engine';
import type { PollingBlockTracker } from 'eth-block-tracker';
import type { JsonRpcMiddleware } from 'json-rpc-engine';
interface BlockTrackerInspectorMiddlewareOptions {

@@ -4,0 +4,0 @@ blockTracker: PollingBlockTracker;

@@ -6,3 +6,3 @@ "use strict";

const logging_utils_1 = require("./logging-utils");
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'block-tracker-inspector');
const log = (0, logging_utils_1.createModuleLogger)(logging_utils_1.projectLogger, 'block-tracker-inspector');
const futureBlockRefRequests = [

@@ -17,3 +17,3 @@ 'eth_getTransactionByHash',

* @param property - The property to look for.
* @returns - Whether the object has the property.
* @returns Whether the object has the property.
*/

@@ -37,7 +37,7 @@ function hasProperty(objectToCheck, property) {

function createBlockTrackerInspectorMiddleware({ blockTracker, }) {
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, next) => {
if (!futureBlockRefRequests.includes(req.method)) {
return next();
}
// eslint-disable-next-line node/callback-return
// eslint-disable-next-line n/callback-return
await next();

@@ -44,0 +44,0 @@ // abort if no result or no block number

@@ -1,2 +0,2 @@

import { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
import type { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
export interface PayloadWithOrigin extends JsonRpcRequest<unknown> {

@@ -39,2 +39,3 @@ origin?: string;

* will be attached to each outgoing fetch request under this header.
* @param options.req
* @returns The fetch middleware.

@@ -41,0 +42,0 @@ */

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFetchConfigFromReq = exports.createFetchMiddleware = void 0;
const eth_rpc_errors_1 = require("eth-rpc-errors");
const json_rpc_engine_1 = require("json-rpc-engine");
const eth_rpc_errors_1 = require("eth-rpc-errors");
const timeout_1 = require("./utils/timeout");

@@ -33,3 +33,3 @@ const RETRIABLE_ERRORS = [

fetch, rpcUrl, originHttpHeaderKey, }) {
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, _next) => {
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, _next) => {
const { fetchUrl, fetchParams } = createFetchConfigFromReq({

@@ -72,3 +72,3 @@ btoa,

// delay before retrying
await timeout_1.timeout(retryInterval);
await (0, timeout_1.timeout)(retryInterval);
}

@@ -117,2 +117,3 @@ });

* will be attached to each outgoing fetch request under this header.
* @param options.req
* @returns The fetch middleware.

@@ -119,0 +120,0 @@ */

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {

@@ -6,0 +10,0 @@ if (k2 === undefined) k2 = k;

@@ -11,6 +11,6 @@ "use strict";

const cache_1 = require("./utils/cache");
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'inflight-cache');
const log = (0, logging_utils_1.createModuleLogger)(logging_utils_1.projectLogger, 'inflight-cache');
function createInflightCacheMiddleware() {
const inflightRequests = {};
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, next) => {
// allow cach to be skipped if so specified

@@ -21,3 +21,3 @@ if (req.skipCache) {

// get cacheId, if cacheable
const cacheId = cache_1.cacheIdentifierForRequest(req);
const cacheId = (0, cache_1.cacheIdentifierForRequest)(req);
// if not cacheable, skip

@@ -43,3 +43,3 @@ if (!cacheId) {

log('Carrying original request forward %o', req);
// eslint-disable-next-line node/callback-return
// eslint-disable-next-line n/callback-return
await next();

@@ -54,8 +54,8 @@ // clear inflight requests

});
function createActiveRequestHandler(res, activeRequestHandlers) {
async function createActiveRequestHandler(res, activeRequestHandlers) {
const { resolve, promise } = deferredPromise();
activeRequestHandlers.push((handledRes) => {
// append a copy of the result and error to the response
res.result = clone_1.default(handledRes.result);
res.error = clone_1.default(handledRes.error);
res.result = (0, clone_1.default)(handledRes.result);
res.error = (0, clone_1.default)(handledRes.error);
resolve();

@@ -62,0 +62,0 @@ });

@@ -6,3 +6,3 @@ "use strict";

Object.defineProperty(exports, "createModuleLogger", { enumerable: true, get: function () { return utils_1.createModuleLogger; } });
exports.projectLogger = utils_1.createProjectLogger('eth-json-rpc-middleware');
exports.projectLogger = (0, utils_1.createProjectLogger)('eth-json-rpc-middleware');
//# sourceMappingURL=logging-utils.js.map

@@ -1,4 +0,4 @@

import { JsonRpcMiddleware } from 'json-rpc-engine';
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
import type { JsonRpcMiddleware } from 'json-rpc-engine';
export declare function providerAsMiddleware(provider: SafeEventEmitterProvider): JsonRpcMiddleware<unknown, unknown>;
export declare function ethersProviderAsMiddleware(provider: SafeEventEmitterProvider): JsonRpcMiddleware<unknown, unknown>;

@@ -1,4 +0,4 @@

import { PollingBlockTracker } from 'eth-block-tracker';
import { JsonRpcMiddleware } from 'json-rpc-engine';
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
import type { PollingBlockTracker } from 'eth-block-tracker';
import type { JsonRpcMiddleware } from 'json-rpc-engine';
interface RetryOnEmptyMiddlewareOptions {

@@ -5,0 +5,0 @@ provider?: SafeEventEmitterProvider;

@@ -19,3 +19,3 @@ "use strict";

//
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'retry-on-empty');
const log = (0, logging_utils_1.createModuleLogger)(logging_utils_1.projectLogger, 'retry-on-empty');
// empty values used to determine if a request should be retried

@@ -35,4 +35,4 @@ // `<nil>` comes from https://github.com/ethereum/go-ethereum/issues/16925

}
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
const blockRefIndex = cache_1.blockTagParamIndex(req.method);
return (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res, next) => {
const blockRefIndex = (0, cache_1.blockTagParamIndex)(req.method);
// skip if method does not include blockRef

@@ -69,7 +69,7 @@ if (blockRefIndex === undefined) {

// create child request with specific block-ref
const childRequest = clone_1.default(req);
const childRequest = (0, clone_1.default)(req);
// attempt child request until non-empty response is received
const childResponse = await retry(10, async () => {
log('Performing request %o', childRequest);
const attemptResponse = await pify_1.default(provider.sendAsync).call(provider, childRequest);
const attemptResponse = await (0, pify_1.default)(provider.sendAsync).call(provider, childRequest);
log('Response is %o', attemptResponse);

@@ -97,3 +97,3 @@ // verify result

log('(call %i) Request failed, waiting 1s to retry again...', index + 1);
await timeout_1.timeout(1000);
await (0, timeout_1.timeout)(1000);
}

@@ -100,0 +100,0 @@ }

@@ -1,2 +0,2 @@

import { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
import type { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
export interface JsonRpcRequestToCache<T> extends JsonRpcRequest<T> {

@@ -3,0 +3,0 @@ skipCache?: boolean;

@@ -1,2 +0,2 @@

import { JsonRpcRequest } from 'json-rpc-engine';
import type { JsonRpcRequest } from 'json-rpc-engine';
/**

@@ -23,2 +23,17 @@ * The cache strategy to use for a given method.

}
/**
* Return a cache identifier for the given request.
*
* This identifier should include any request details that might impact the
* response, with the exception of the block parameter if the `skipBlockRef`
* option is set,
*
* If the request cannot be cached, this will return `null`.
*
* @param request - The JSON-RPC request.
* @param skipBlockRef - Skip the block parameter when generating the cache
* identifier.
* @returns The cache identifier for this request, or `null` if it can't be
* cached.
*/
export declare function cacheIdentifierForRequest(request: JsonRpcRequest<unknown>, skipBlockRef?: boolean): string | null;

@@ -25,0 +40,0 @@ /**

@@ -5,3 +5,3 @@ "use strict";

const safe_stable_stringify_1 = require("safe-stable-stringify");
const stringify = safe_stable_stringify_1.configure({ bigint: false, circularValue: Error });
const stringify = (0, safe_stable_stringify_1.configure)({ bigint: false, circularValue: Error });
/**

@@ -29,3 +29,3 @@ * The cache strategy to use for a given method.

})(CacheStrategy = exports.CacheStrategy || (exports.CacheStrategy = {}));
/*
/**
* Return a cache identifier for the given request.

@@ -32,0 +32,0 @@ *

@@ -10,3 +10,3 @@ "use strict";

*/
function timeout(duration) {
async function timeout(duration) {
return new Promise((resolve) => setTimeout(resolve, duration));

@@ -13,0 +13,0 @@ }

@@ -1,2 +0,2 @@

import { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
import type { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
import type { Block } from './types';

@@ -3,0 +3,0 @@ export interface TransactionParams {

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {

@@ -23,5 +27,5 @@ if (k2 === undefined) k2 = k;

exports.createWalletMiddleware = void 0;
const json_rpc_engine_1 = require("json-rpc-engine");
const sigUtil = __importStar(require("@metamask/eth-sig-util"));
const eth_rpc_errors_1 = require("eth-rpc-errors");
const json_rpc_engine_1 = require("json-rpc-engine");
function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processEthSignMessage, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, }) {

@@ -31,18 +35,18 @@ if (!getAccounts) {

}
return json_rpc_engine_1.createScaffoldMiddleware({
return (0, json_rpc_engine_1.createScaffoldMiddleware)({
// account lookups
eth_accounts: json_rpc_engine_1.createAsyncMiddleware(lookupAccounts),
eth_coinbase: json_rpc_engine_1.createAsyncMiddleware(lookupDefaultAccount),
eth_accounts: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupAccounts),
eth_coinbase: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupDefaultAccount),
// tx signatures
eth_sendTransaction: json_rpc_engine_1.createAsyncMiddleware(sendTransaction),
eth_signTransaction: json_rpc_engine_1.createAsyncMiddleware(signTransaction),
eth_sendTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(sendTransaction),
eth_signTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(signTransaction),
// message signatures
eth_sign: json_rpc_engine_1.createAsyncMiddleware(ethSign),
eth_signTypedData: json_rpc_engine_1.createAsyncMiddleware(signTypedData),
eth_signTypedData_v3: json_rpc_engine_1.createAsyncMiddleware(signTypedDataV3),
eth_signTypedData_v4: json_rpc_engine_1.createAsyncMiddleware(signTypedDataV4),
personal_sign: json_rpc_engine_1.createAsyncMiddleware(personalSign),
eth_getEncryptionPublicKey: json_rpc_engine_1.createAsyncMiddleware(encryptionPublicKey),
eth_decrypt: json_rpc_engine_1.createAsyncMiddleware(decryptMessage),
personal_ecRecover: json_rpc_engine_1.createAsyncMiddleware(personalRecover),
eth_sign: (0, json_rpc_engine_1.createAsyncMiddleware)(ethSign),
eth_signTypedData: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedData),
eth_signTypedData_v3: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedDataV3),
eth_signTypedData_v4: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedDataV4),
personal_sign: (0, json_rpc_engine_1.createAsyncMiddleware)(personalSign),
eth_getEncryptionPublicKey: (0, json_rpc_engine_1.createAsyncMiddleware)(encryptionPublicKey),
eth_decrypt: (0, json_rpc_engine_1.createAsyncMiddleware)(decryptMessage),
personal_ecRecover: (0, json_rpc_engine_1.createAsyncMiddleware)(personalRecover),
});

@@ -198,4 +202,4 @@ //

*
* @param {string} address - The address to validate and normalize.
* @param {Object} req - The request object.
* @param address - The address to validate and normalize.
* @param req - The request object.
* @returns {string} - The normalized address, if valid. Otherwise, throws

@@ -202,0 +206,0 @@ * an error

{
"name": "@metamask/eth-json-rpc-middleware",
"version": "11.0.1",
"version": "11.0.2",
"description": "Ethereum-related json-rpc-engine middleware.",

@@ -32,3 +32,3 @@ "repository": {

"@metamask/eth-json-rpc-provider": "^1.0.0",
"@metamask/eth-sig-util": "^5.0.0",
"@metamask/eth-sig-util": "^6.0.0",
"@metamask/utils": "^5.0.1",

@@ -44,8 +44,8 @@ "clone": "^2.1.1",

"@jest/globals": "^27.5.1",
"@lavamoat/allow-scripts": "^2.0.3",
"@lavamoat/allow-scripts": "^2.3.1",
"@metamask/auto-changelog": "^3.1.0",
"@metamask/eslint-config": "^8.0.0",
"@metamask/eslint-config-jest": "^8.0.0",
"@metamask/eslint-config-nodejs": "^8.0.0",
"@metamask/eslint-config-typescript": "^8.0.0",
"@metamask/eslint-config": "^12.1.0",
"@metamask/eslint-config-jest": "^12.1.0",
"@metamask/eslint-config-nodejs": "^12.1.0",
"@metamask/eslint-config-typescript": "^12.1.0",
"@types/btoa": "^1.2.3",

@@ -56,10 +56,12 @@ "@types/clone": "^2.1.0",

"@types/pify": "^3.0.2",
"@typescript-eslint/eslint-plugin": "^4.21.0",
"@typescript-eslint/parser": "^4.21.0",
"eslint": "^7.14.0",
"@typescript-eslint/eslint-plugin": "^5.42.1",
"@typescript-eslint/parser": "^5.42.1",
"eslint": "^8.44.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.1.3",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-import": "^2.27.5",
"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": "^27.5.1",

@@ -71,3 +73,3 @@ "prettier": "^2.2.1",

"ts-node": "^10.7.0",
"typescript": "~4.2.4"
"typescript": "~4.8.4"
},

@@ -74,0 +76,0 @@ "packageManager": "yarn@3.2.1",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc