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

@ethereumjs/trie

Package Overview
Dependencies
Maintainers
4
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ethereumjs/trie - npm Package Compare versions

Comparing version 6.1.1 to 6.2.0

23

dist/cjs/proof/range.js

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

async function verifyProof(rootHash, key, proof, useKeyHashingFunction) {
const proofTrie = await trie_js_1.Trie.fromProof(proof, { root: rootHash, useKeyHashingFunction });
const proofTrie = await trie_js_1.Trie.fromProof(proof, {
root: rootHash,
useKeyHashingFunction,
});
try {

@@ -395,13 +398,15 @@ const value = await proofTrie.get(key, true);

}
if (proof !== null && firstKey !== null && lastKey === null) {
// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(rootHash, (0, nibbles_js_1.nibblestoBytes)(firstKey), proof, useKeyHashingFunction);
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch');
}
return false;
}
}
if (proof === null || firstKey === null || lastKey === null) {
throw new Error('invalid all elements proof: proof, firstKey, lastKey must be null at the same time');
}
// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(rootHash, (0, nibbles_js_1.nibblestoBytes)(firstKey), proof, useKeyHashingFunction);
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch');
}
return false;
}
// One element proof

@@ -408,0 +413,0 @@ if (keys.length === 1 && (0, nibbles_js_1.nibblesCompare)(firstKey, lastKey) === 0) {

@@ -1,15 +0,8 @@

/// <reference types="node" />
import { Lock, ValueEncoding } from '@ethereumjs/util';
import { CheckpointDB } from './db/index.js';
import { TrieReadStream as ReadStream } from './util/readStream.js';
import type { EmbeddedNode, FoundNodeFunction, Nibbles, Proof, TrieNode, TrieOpts, TrieOptsWithDefaults, TrieShallowCopyOpts } from './types.js';
import type { EmbeddedNode, FoundNodeFunction, Nibbles, Path, Proof, TrieNode, TrieOpts, TrieOptsWithDefaults, TrieShallowCopyOpts } from './types.js';
import type { OnFound } from './util/asyncWalk.js';
import type { BatchDBOp, DB } from '@ethereumjs/util';
import type { Debugger } from 'debug';
import type { ReadableStream } from 'node:stream/web';
interface Path {
node: TrieNode | null;
remaining: Nibbles;
stack: TrieNode[];
}
/**

@@ -166,3 +159,5 @@ * The basic trie interface, use with `import { Trie } from '@ethereumjs/trie'`.

*/
findPath(key: Uint8Array, throwIfMissing?: boolean): Promise<Path>;
findPath(key: Uint8Array, throwIfMissing?: boolean, partialPath?: {
stack: TrieNode[];
}): Promise<Path>;
/**

@@ -250,3 +245,2 @@ * Walks a trie until finished.

* The `data` event is given an `Object` that has two properties; the `key` and the `value`. Both should be Uint8Arrays.
* @deprecated Use `createAsyncReadStream`
* @return Returns a [stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie`

@@ -256,7 +250,2 @@ */

/**
* Use asynchronous iteration over the chunks in a web stream using the for await...of syntax.
* @return Returns a [web stream](https://nodejs.org/api/webstreams.html#example-readablestream) of the contents of the `trie`
*/
createAsyncReadStream(): ReadableStream;
/**
* Returns a copy of the underlying trie.

@@ -319,3 +308,2 @@ *

}
export {};
//# sourceMappingURL=trie.d.ts.map

@@ -134,6 +134,3 @@ // Some more secure presets when using e.g. JS `call`

static verifyRangeProof(rootHash, firstKey, lastKey, keys, values, proof, opts) {
return (0, range_js_1.verifyRangeProof)(rootHash, firstKey && (0, nibbles_js_1.bytesToNibbles)(firstKey), lastKey && (0, nibbles_js_1.bytesToNibbles)(lastKey), keys.map((k) => k).map(nibbles_js_1.bytesToNibbles), values, proof, opts?.useKeyHashingFunction ??
((msg) => {
return msg;
}));
return (0, range_js_1.verifyRangeProof)(rootHash, firstKey && (0, nibbles_js_1.bytesToNibbles)(firstKey), lastKey && (0, nibbles_js_1.bytesToNibbles)(lastKey), keys.map((k) => k).map(nibbles_js_1.bytesToNibbles), values, proof, opts?.useKeyHashingFunction ?? keccak_js_1.keccak256);
}

@@ -471,3 +468,5 @@ /**

*/
async findPath(key, throwIfMissing = false) {
async findPath(key, throwIfMissing = false, partialPath = {
stack: [],
}) {
const targetKey = (0, nibbles_js_1.bytesToNibbles)(key);

@@ -477,2 +476,6 @@ const keyLen = targetKey.length;

let progress = 0;
for (let i = 0; i < partialPath.stack.length - 1; i++) {
stack[i] = partialPath.stack[i];
progress += stack[i] instanceof index_js_2.BranchNode ? 1 : stack[i].keyLength();
}
this.DEBUG && this.debug(`Target (${targetKey.length}): [${targetKey}]`, ['FIND_PATH']);

@@ -541,5 +544,8 @@ let result = null;

};
const startingNode = partialPath.stack[partialPath.stack.length - 1];
const start = startingNode !== undefined ? this.hash(startingNode?.serialize()) : this.root();
try {
this.DEBUG && this.debug(`Walking trie from root: ${(0, util_1.bytesToHex)(this.root())}`, ['FIND_PATH']);
await this.walkTrie(this.root(), onFound);
this.DEBUG &&
this.debug(`Walking trie from ${startingNode === undefined ? 'ROOT' : 'NODE'}: ${(0, util_1.bytesToHex)(start)}`, ['FIND_PATH']);
await this.walkTrie(start, onFound);
}

@@ -995,3 +1001,2 @@ catch (error) {

* The `data` event is given an `Object` that has two properties; the `key` and the `value`. Both should be Uint8Arrays.
* @deprecated Use `createAsyncReadStream`
* @return Returns a [stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie`

@@ -1003,9 +1008,2 @@ */

/**
* Use asynchronous iteration over the chunks in a web stream using the for await...of syntax.
* @return Returns a [web stream](https://nodejs.org/api/webstreams.html#example-readablestream) of the contents of the `trie`
*/
createAsyncReadStream() {
return (0, readStream_js_1.asyncTrieReadStream)(this);
}
/**
* Returns a copy of the underlying trie.

@@ -1012,0 +1010,0 @@ *

@@ -13,2 +13,7 @@ import type { BranchNode, ExtensionNode, LeafNode } from './node/index.js';

}
export interface Path {
node: TrieNode | null;
remaining: Nibbles;
stack: TrieNode[];
}
export declare type FoundNodeFunction = (nodeRef: Uint8Array, node: TrieNode | null, key: Nibbles, walkController: WalkController) => void;

@@ -15,0 +20,0 @@ export declare type HashKeysFunction = (msg: Uint8Array) => Uint8Array;

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

/// <reference types="node" />
import { ReadableStream } from 'node:stream/web';
import { Readable } from 'readable-stream';

@@ -11,3 +9,2 @@ import type { Trie } from '../trie.js';

}
export declare function asyncTrieReadStream(trie: Trie): ReadableStream<any>;
//# sourceMappingURL=readStream.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.asyncTrieReadStream = exports.TrieReadStream = void 0;
exports.TrieReadStream = void 0;
// eslint-disable-next-line implicit-dependencies/no-implicit
const web_1 = require("node:stream/web");
const readable_stream_1 = require("readable-stream");

@@ -64,29 +63,2 @@ const index_js_1 = require("../node/index.js");

exports.TrieReadStream = TrieReadStream;
function asyncTrieReadStream(trie) {
return new web_1.ReadableStream({
async start(controller) {
try {
await _findValueNodes(trie, async (_, node, key, walkController) => {
if (node !== null) {
controller.enqueue({
key: (0, nibbles_js_1.nibblestoBytes)(key),
value: node.value(),
});
walkController.allChildren(node, key);
}
});
}
catch (error) {
if (error.message === 'Missing node in DB') {
// pass
}
else {
throw error;
}
}
controller.close();
},
});
}
exports.asyncTrieReadStream = asyncTrieReadStream;
//# sourceMappingURL=readStream.js.map

@@ -282,3 +282,6 @@ import { equalsBytes } from '@ethereumjs/util';

async function verifyProof(rootHash, key, proof, useKeyHashingFunction) {
const proofTrie = await Trie.fromProof(proof, { root: rootHash, useKeyHashingFunction });
const proofTrie = await Trie.fromProof(proof, {
root: rootHash,
useKeyHashingFunction,
});
try {

@@ -392,13 +395,15 @@ const value = await proofTrie.get(key, true);

}
if (proof !== null && firstKey !== null && lastKey === null) {
// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(rootHash, nibblestoBytes(firstKey), proof, useKeyHashingFunction);
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch');
}
return false;
}
}
if (proof === null || firstKey === null || lastKey === null) {
throw new Error('invalid all elements proof: proof, firstKey, lastKey must be null at the same time');
}
// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(rootHash, nibblestoBytes(firstKey), proof, useKeyHashingFunction);
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch');
}
return false;
}
// One element proof

@@ -405,0 +410,0 @@ if (keys.length === 1 && nibblesCompare(firstKey, lastKey) === 0) {

@@ -1,15 +0,8 @@

/// <reference types="node" />
import { Lock, ValueEncoding } from '@ethereumjs/util';
import { CheckpointDB } from './db/index.js';
import { TrieReadStream as ReadStream } from './util/readStream.js';
import type { EmbeddedNode, FoundNodeFunction, Nibbles, Proof, TrieNode, TrieOpts, TrieOptsWithDefaults, TrieShallowCopyOpts } from './types.js';
import type { EmbeddedNode, FoundNodeFunction, Nibbles, Path, Proof, TrieNode, TrieOpts, TrieOptsWithDefaults, TrieShallowCopyOpts } from './types.js';
import type { OnFound } from './util/asyncWalk.js';
import type { BatchDBOp, DB } from '@ethereumjs/util';
import type { Debugger } from 'debug';
import type { ReadableStream } from 'node:stream/web';
interface Path {
node: TrieNode | null;
remaining: Nibbles;
stack: TrieNode[];
}
/**

@@ -166,3 +159,5 @@ * The basic trie interface, use with `import { Trie } from '@ethereumjs/trie'`.

*/
findPath(key: Uint8Array, throwIfMissing?: boolean): Promise<Path>;
findPath(key: Uint8Array, throwIfMissing?: boolean, partialPath?: {
stack: TrieNode[];
}): Promise<Path>;
/**

@@ -250,3 +245,2 @@ * Walks a trie until finished.

* The `data` event is given an `Object` that has two properties; the `key` and the `value`. Both should be Uint8Arrays.
* @deprecated Use `createAsyncReadStream`
* @return Returns a [stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie`

@@ -256,7 +250,2 @@ */

/**
* Use asynchronous iteration over the chunks in a web stream using the for await...of syntax.
* @return Returns a [web stream](https://nodejs.org/api/webstreams.html#example-readablestream) of the contents of the `trie`
*/
createAsyncReadStream(): ReadableStream;
/**
* Returns a copy of the underlying trie.

@@ -319,3 +308,2 @@ *

}
export {};
//# sourceMappingURL=trie.d.ts.map

@@ -12,3 +12,3 @@ // Some more secure presets when using e.g. JS `call`

import { bytesToNibbles, matchingNibbleLength } from './util/nibbles.js';
import { TrieReadStream as ReadStream, asyncTrieReadStream as asyncReadStream, } from './util/readStream.js';
import { TrieReadStream as ReadStream } from './util/readStream.js';
import { WalkController } from './util/walkController.js';

@@ -133,6 +133,3 @@ /**

static verifyRangeProof(rootHash, firstKey, lastKey, keys, values, proof, opts) {
return verifyRangeProof(rootHash, firstKey && bytesToNibbles(firstKey), lastKey && bytesToNibbles(lastKey), keys.map((k) => k).map(bytesToNibbles), values, proof, opts?.useKeyHashingFunction ??
((msg) => {
return msg;
}));
return verifyRangeProof(rootHash, firstKey && bytesToNibbles(firstKey), lastKey && bytesToNibbles(lastKey), keys.map((k) => k).map(bytesToNibbles), values, proof, opts?.useKeyHashingFunction ?? keccak256);
}

@@ -470,3 +467,5 @@ /**

*/
async findPath(key, throwIfMissing = false) {
async findPath(key, throwIfMissing = false, partialPath = {
stack: [],
}) {
const targetKey = bytesToNibbles(key);

@@ -476,2 +475,6 @@ const keyLen = targetKey.length;

let progress = 0;
for (let i = 0; i < partialPath.stack.length - 1; i++) {
stack[i] = partialPath.stack[i];
progress += stack[i] instanceof BranchNode ? 1 : stack[i].keyLength();
}
this.DEBUG && this.debug(`Target (${targetKey.length}): [${targetKey}]`, ['FIND_PATH']);

@@ -540,5 +543,8 @@ let result = null;

};
const startingNode = partialPath.stack[partialPath.stack.length - 1];
const start = startingNode !== undefined ? this.hash(startingNode?.serialize()) : this.root();
try {
this.DEBUG && this.debug(`Walking trie from root: ${bytesToHex(this.root())}`, ['FIND_PATH']);
await this.walkTrie(this.root(), onFound);
this.DEBUG &&
this.debug(`Walking trie from ${startingNode === undefined ? 'ROOT' : 'NODE'}: ${bytesToHex(start)}`, ['FIND_PATH']);
await this.walkTrie(start, onFound);
}

@@ -994,3 +1000,2 @@ catch (error) {

* The `data` event is given an `Object` that has two properties; the `key` and the `value`. Both should be Uint8Arrays.
* @deprecated Use `createAsyncReadStream`
* @return Returns a [stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie`

@@ -1002,9 +1007,2 @@ */

/**
* Use asynchronous iteration over the chunks in a web stream using the for await...of syntax.
* @return Returns a [web stream](https://nodejs.org/api/webstreams.html#example-readablestream) of the contents of the `trie`
*/
createAsyncReadStream() {
return asyncReadStream(this);
}
/**
* Returns a copy of the underlying trie.

@@ -1011,0 +1009,0 @@ *

@@ -13,2 +13,7 @@ import type { BranchNode, ExtensionNode, LeafNode } from './node/index.js';

}
export interface Path {
node: TrieNode | null;
remaining: Nibbles;
stack: TrieNode[];
}
export declare type FoundNodeFunction = (nodeRef: Uint8Array, node: TrieNode | null, key: Nibbles, walkController: WalkController) => void;

@@ -15,0 +20,0 @@ export declare type HashKeysFunction = (msg: Uint8Array) => Uint8Array;

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

/// <reference types="node" />
import { ReadableStream } from 'node:stream/web';
import { Readable } from 'readable-stream';

@@ -11,3 +9,2 @@ import type { Trie } from '../trie.js';

}
export declare function asyncTrieReadStream(trie: Trie): ReadableStream<any>;
//# sourceMappingURL=readStream.d.ts.map
// eslint-disable-next-line implicit-dependencies/no-implicit
import { ReadableStream } from 'node:stream/web';
import { Readable } from 'readable-stream';

@@ -60,28 +59,2 @@ import { BranchNode, LeafNode } from '../node/index.js';

}
export function asyncTrieReadStream(trie) {
return new ReadableStream({
async start(controller) {
try {
await _findValueNodes(trie, async (_, node, key, walkController) => {
if (node !== null) {
controller.enqueue({
key: nibblestoBytes(key),
value: node.value(),
});
walkController.allChildren(node, key);
}
});
}
catch (error) {
if (error.message === 'Missing node in DB') {
// pass
}
else {
throw error;
}
}
controller.close();
},
});
}
//# sourceMappingURL=readStream.js.map
{
"name": "@ethereumjs/trie",
"version": "6.1.1",
"version": "6.2.0",
"description": "Implementation of the modified merkle patricia tree as specified in Ethereum's yellow paper.",

@@ -57,6 +57,6 @@ "keywords": [

"@ethereumjs/rlp": "^5.0.2",
"@ethereumjs/util": "^9.0.2",
"@ethereumjs/util": "^9.0.3",
"@types/readable-stream": "^2.3.13",
"debug": "^4.3.4",
"lru-cache": "^10.0.0",
"lru-cache": "10.1.0",
"ethereum-cryptography": "^2.1.3",

@@ -66,3 +66,3 @@ "readable-stream": "^3.6.0"

"devDependencies": {
"@ethereumjs/genesis": "^0.2.1",
"@ethereumjs/genesis": "^0.2.2",
"@types/benchmark": "^1.0.33",

@@ -69,0 +69,0 @@ "abstract-level": "^1.0.3",

@@ -325,3 +325,6 @@ import { equalsBytes } from '@ethereumjs/util'

): Promise<{ value: Uint8Array | null; trie: Trie }> {
const proofTrie = await Trie.fromProof(proof, { root: rootHash, useKeyHashingFunction })
const proofTrie = await Trie.fromProof(proof, {
root: rootHash,
useKeyHashingFunction,
})
try {

@@ -447,2 +450,20 @@ const value = await proofTrie.get(key, true)

if (proof !== null && firstKey !== null && lastKey === null) {
// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(
rootHash,
nibblestoBytes(firstKey),
proof,
useKeyHashingFunction
)
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch')
}
return false
}
}
if (proof === null || firstKey === null || lastKey === null) {

@@ -454,18 +475,2 @@ throw new Error(

// Zero element proof
if (keys.length === 0) {
const { trie, value } = await verifyProof(
rootHash,
nibblestoBytes(firstKey),
proof,
useKeyHashingFunction
)
if (value !== null || (await hasRightElement(trie, firstKey))) {
throw new Error('invalid zero element proof: value mismatch')
}
return false
}
// One element proof

@@ -472,0 +477,0 @@ if (keys.length === 1 && nibblesCompare(firstKey, lastKey) === 0) {

@@ -33,6 +33,3 @@ // Some more secure presets when using e.g. JS `call`

import { bytesToNibbles, matchingNibbleLength } from './util/nibbles.js'
import {
TrieReadStream as ReadStream,
asyncTrieReadStream as asyncReadStream,
} from './util/readStream.js'
import { TrieReadStream as ReadStream } from './util/readStream.js'
import { WalkController } from './util/walkController.js'

@@ -44,2 +41,3 @@

Nibbles,
Path,
Proof,

@@ -54,15 +52,3 @@ TrieNode,

import type { Debugger } from 'debug'
// Since ReadableStream is from a Web API, the following type import
// is not needed in and should be ignored by the browser, so an exeption
// is made here to deviate from our policy to not add Node.js specific
// package imports. -- 16/01/24
// eslint-disable-next-line implicit-dependencies/no-implicit
import type { ReadableStream } from 'node:stream/web'
interface Path {
node: TrieNode | null
remaining: Nibbles
stack: TrieNode[]
}
/**

@@ -227,6 +213,3 @@ * The basic trie interface, use with `import { Trie } from '@ethereumjs/trie'`.

proof,
opts?.useKeyHashingFunction ??
((msg) => {
return msg
})
opts?.useKeyHashingFunction ?? keccak256
)

@@ -620,3 +603,11 @@ }

*/
async findPath(key: Uint8Array, throwIfMissing = false): Promise<Path> {
async findPath(
key: Uint8Array,
throwIfMissing = false,
partialPath: {
stack: TrieNode[]
} = {
stack: [],
}
): Promise<Path> {
const targetKey = bytesToNibbles(key)

@@ -626,2 +617,6 @@ const keyLen = targetKey.length

let progress = 0
for (let i = 0; i < partialPath.stack.length - 1; i++) {
stack[i] = partialPath.stack[i]
progress += stack[i] instanceof BranchNode ? 1 : (<ExtensionNode>stack[i]).keyLength()
}
this.DEBUG && this.debug(`Target (${targetKey.length}): [${targetKey}]`, ['FIND_PATH'])

@@ -698,6 +693,13 @@ let result: Path | null = null

}
const startingNode = partialPath.stack[partialPath.stack.length - 1]
const start = startingNode !== undefined ? this.hash(startingNode?.serialize()) : this.root()
try {
this.DEBUG && this.debug(`Walking trie from root: ${bytesToHex(this.root())}`, ['FIND_PATH'])
await this.walkTrie(this.root(), onFound)
this.DEBUG &&
this.debug(
`Walking trie from ${startingNode === undefined ? 'ROOT' : 'NODE'}: ${bytesToHex(
start as Uint8Array
)}`,
['FIND_PATH']
)
await this.walkTrie(start, onFound)
} catch (error: any) {

@@ -1214,3 +1216,2 @@ if (error.message !== 'Missing node in DB' || throwIfMissing) {

* The `data` event is given an `Object` that has two properties; the `key` and the `value`. Both should be Uint8Arrays.
* @deprecated Use `createAsyncReadStream`
* @return Returns a [stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie`

@@ -1223,10 +1224,2 @@ */

/**
* Use asynchronous iteration over the chunks in a web stream using the for await...of syntax.
* @return Returns a [web stream](https://nodejs.org/api/webstreams.html#example-readablestream) of the contents of the `trie`
*/
createAsyncReadStream(): ReadableStream {
return asyncReadStream(this)
}
/**
* Returns a copy of the underlying trie.

@@ -1233,0 +1226,0 @@ *

@@ -23,2 +23,8 @@ import { utf8ToBytes } from '@ethereumjs/util'

export interface Path {
node: TrieNode | null
remaining: Nibbles
stack: TrieNode[]
}
export type FoundNodeFunction = (

@@ -25,0 +31,0 @@ nodeRef: Uint8Array,

// eslint-disable-next-line implicit-dependencies/no-implicit
import { ReadableStream } from 'node:stream/web'
import { Readable } from 'readable-stream'

@@ -68,26 +67,1 @@

}
export function asyncTrieReadStream(trie: Trie) {
return new ReadableStream({
async start(controller) {
try {
await _findValueNodes(trie, async (_, node, key, walkController) => {
if (node !== null) {
controller.enqueue({
key: nibblestoBytes(key),
value: node.value(),
})
walkController.allChildren(node, key)
}
})
} catch (error: any) {
if (error.message === 'Missing node in DB') {
// pass
} else {
throw error
}
}
controller.close()
},
})
}

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

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