diff --git a/packages/hardhat/contracts/FunctionsConsumer.sol b/packages/hardhat/contracts/FunctionsConsumer.sol index 0cfe5b4..882535b 100644 --- a/packages/hardhat/contracts/FunctionsConsumer.sol +++ b/packages/hardhat/contracts/FunctionsConsumer.sol @@ -35,10 +35,10 @@ contract FunctionsConsumer is FunctionsClient, ConfirmedOwner { bytes public s_lastError; // State variables used as args in the request - address router; // https://docs.chain.link/chainlink-functions/supported-networks - uint64 subscriptionId; // functions.chain.link - uint32 gasLimit; - bytes32 donID; + address public router; // https://docs.chain.link/chainlink-functions/supported-networks + uint64 public subscriptionId; // functions.chain.link + uint32 public gasLimit; + bytes32 public donID; // State variables to hold function response data string public weatherResult; @@ -71,10 +71,14 @@ contract FunctionsConsumer is FunctionsClient, ConfirmedOwner { * @return requestId The ID of the request */ function sendRequest( - string[] calldata args - ) external onlyOwner returns (bytes32 requestId) { + string[] calldata args, + bytes memory encryptedSecretsUrls + ) external returns (bytes32 requestId) { FunctionsRequest.Request memory req; req.initializeRequestForInlineJavaScript(weatherSource); // Initialize the request with JS code + if (encryptedSecretsUrls.length > 0) { + req.addSecretsReference(encryptedSecretsUrls); + } if (args.length > 0) req.setArgs(args); // Set the arguments for the request // Send the request and store the request ID @@ -84,7 +88,6 @@ contract FunctionsConsumer is FunctionsClient, ConfirmedOwner { gasLimit, donID ); - return s_lastRequestId; } diff --git a/packages/hardhat/deploy/05_FunctionsConsumer.ts b/packages/hardhat/deploy/05_FunctionsConsumer.ts index 7f6e935..c8763f6 100644 --- a/packages/hardhat/deploy/05_FunctionsConsumer.ts +++ b/packages/hardhat/deploy/05_FunctionsConsumer.ts @@ -21,9 +21,6 @@ const functionsConsumer: DeployFunction = async function (hre: HardhatRuntimeEnv const weatherSourceScriptPath = path.join(__dirname, "../functions-source-scripts/fetch-weather-data.js"); const weatherSourceScript = fs.readFileSync(weatherSourceScriptPath, "utf8"); - console.log("weatherSourceScriptPath", weatherSourceScriptPath); - console.log("weatherSourceScript", weatherSourceScript); - const args = [routerAddress, subscriptionId, gasLimit, donId, weatherSourceScript]; const FunctionsConsumer = await deploy("FunctionsConsumer", { diff --git a/packages/hardhat/functions-source-scripts/fetch-weather-data.js b/packages/hardhat/functions-source-scripts/fetch-weather-data.js index dfda3b3..8be4735 100644 --- a/packages/hardhat/functions-source-scripts/fetch-weather-data.js +++ b/packages/hardhat/functions-source-scripts/fetch-weather-data.js @@ -8,7 +8,7 @@ if (!secrets.apiKey) { const zipCode = `${args[0]},${args[1]}`; -const geoCodingURL = "http://api.openweathermap.org/geo/1.0/zip?"; +const geoCodingURL = "https://api.openweathermap.org/geo/1.0/zip?"; console.log(`Sending HTTP request to ${geoCodingURL}zip=${zipCode}`); @@ -25,7 +25,7 @@ const geoCodingResponse = await geoCodingRequest; if (geoCodingResponse.error) { console.error(geoCodingResponse.error); - throw Error("Request failed, try checking the params provided"); + throw Error(zipCode + " is not a valid zip code --" + `${geoCodingURL}zip=${zipCode}`); } console.log(geoCodingResponse); @@ -67,6 +67,8 @@ const result = { temp: temperature, }; +console.log("result", result); + // Use JSON.stringify() to convert from JSON object to JSON string // Finally, use the helper Functions.encodeString() to encode from string to bytes return Functions.encodeString(JSON.stringify(result)); diff --git a/packages/hardhat/helper-hardhat-config.ts b/packages/hardhat/helper-hardhat-config.ts index 410ed33..89327bd 100644 --- a/packages/hardhat/helper-hardhat-config.ts +++ b/packages/hardhat/helper-hardhat-config.ts @@ -19,6 +19,7 @@ interface NetworkConfigEntryTypes { subscriptionId: string; gasLimit: string; donId: string; + toolkitDonId: string; }; tokenAddress: { LINK: string; @@ -48,6 +49,7 @@ const networkConfig: { [key: number]: NetworkConfigEntryTypes } = { subscriptionId: "1464", gasLimit: "300000", donId: "0x66756e2d657468657265756d2d7365706f6c69612d3100000000000000000000", + toolkitDonId: "fun-ethereum-sepolia-1", }, tokenAddress: { LINK: "0x779877A7B0D9E8603169DdbD7836e478b4624789", diff --git a/packages/hardhat/package.json b/packages/hardhat/package.json index 244e8cc..5f5687d 100644 --- a/packages/hardhat/package.json +++ b/packages/hardhat/package.json @@ -47,6 +47,7 @@ }, "dependencies": { "@chainlink/contracts": "^0.7.1", + "@chainlink/functions-toolkit": "^0.2.8", "@openzeppelin/contracts": "^4.8.1", "dotenv": "^16.0.3", "envfile": "^6.18.0", diff --git a/packages/hardhat/tasks/index.ts b/packages/hardhat/tasks/index.ts index 66d13df..77f1ff2 100644 --- a/packages/hardhat/tasks/index.ts +++ b/packages/hardhat/tasks/index.ts @@ -1,2 +1,3 @@ export * from "./send-link"; export * from "./get-token-balance"; +export * from "./upload-secret-to-gist"; diff --git a/packages/hardhat/tasks/upload-secret-to-gist.ts b/packages/hardhat/tasks/upload-secret-to-gist.ts new file mode 100644 index 0000000..96c6a33 --- /dev/null +++ b/packages/hardhat/tasks/upload-secret-to-gist.ts @@ -0,0 +1,54 @@ +import * as dotenv from "dotenv"; +dotenv.config(); +// import chalk from "chalk"; +import { task } from "hardhat/config"; +import { SecretsManager, createGist } from "@chainlink/functions-toolkit"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { networkConfig } from "../helper-hardhat-config"; + +/** Upload a single secret to a github gist + * @param key the name for the secret + * @param value the value of the secret + * @returns the `encryptedSecretsReference` used to make a chainlink functions request + */ + +export async function uploadSecretToGist(hre: HardhatRuntimeEnvironment, key: string, value: string) { + if (hre.network.name !== "sepolia") { + throw new Error("This script is only configured for sepolia network"); + } + + const chainId = await hre.ethers.provider.getNetwork().then(network => network.chainId); + const { routerAddress, toolkitDonId } = networkConfig[chainId].FunctionsConsumer; + + const [signer] = await hre.ethers.getSigners(); + + const secretsManager = new SecretsManager({ + signer: signer, + functionsRouterAddress: routerAddress, + donId: toolkitDonId, + }); + await secretsManager.initialize(); + + const secretsObject = { [key]: value }; + // console.log("secretsObject", secretsObject); + + const encryptedSecrets = await secretsManager.encryptSecrets(secretsObject); + // console.log("encryptedSecrets", encryptedSecrets); + + if (process.env.GITHUB_ACCESS_TOKEN) { + const gistURL = await createGist(process.env.GITHUB_ACCESS_TOKEN, JSON.stringify(encryptedSecrets)); + console.log("gistURL", gistURL); + const encryptedSecretsReference: string = await secretsManager.encryptSecretsUrls([gistURL]); + console.log("encryptedSecretsReference:", encryptedSecretsReference); + return encryptedSecretsReference; + } else { + throw new Error("GITHUB_ACCESS_TOKEN not found in .env"); + } +} + +task("upload-secret-to-gist", "Uploads encrypted secrets to a GitHub gist") + .addParam("key", "The name for the secret") + .addParam("value", "The value of the secret") + .setAction(async (taskArgs, hre) => { + await uploadSecretToGist(hre, taskArgs.key, taskArgs.value); + }); diff --git a/packages/hardhat/tasks/upload-secrets-to-DON.ts b/packages/hardhat/tasks/upload-secrets-to-don.ts similarity index 100% rename from packages/hardhat/tasks/upload-secrets-to-DON.ts rename to packages/hardhat/tasks/upload-secrets-to-don.ts diff --git a/packages/nextjs/components/functions/Showcase.tsx b/packages/nextjs/components/functions/Showcase.tsx index 02cf788..cbddb02 100644 --- a/packages/nextjs/components/functions/Showcase.tsx +++ b/packages/nextjs/components/functions/Showcase.tsx @@ -1,34 +1,35 @@ import { ExternalLinkButton } from "~~/components/common"; import { Address } from "~~/components/scaffold-eth"; -import { - useScaffoldContract, // useScaffoldContractRead, useScaffoldContractWrite -} from "~~/hooks/scaffold-eth"; +import { useScaffoldContract, useScaffoldContractRead, useScaffoldContractWrite } from "~~/hooks/scaffold-eth"; + +// https://gist.githubusercontent.com/MattPereira/110db22c9d24cc1b30298f2818e2d6ef/raw +// below is above URL encrypted with secretsManager.encryptSecretsUrls() +const encryptedSecretsReference = + "0x822432d0a83c5c2308b6fd1a06964bbf027b1aae2beb4997b2d766011d4da126a0e6a5e32d5977862178c975eb35d5473758e4d84f19fc08a88ef8f1166bfda8704c5e35bea4f6ca31078b14eca867accb7418ba049a3c1d6c08819da13a87ead4a860cb0fad5d77658263c791d73641fb76554f370c03286ae1fe11bf6089e2483a25bb30fc7c93db01a5080206042ae5dc64a022f167a455720ac1e2992ec6c7"; export const Showcase = () => { const { data: functionsConsumerContract } = useScaffoldContract({ contractName: "FunctionsConsumer" }); - // const { writeAsync: fetchWeatherData } = useScaffoldContractWrite({ - // contractName: "FunctionsConsumer", - // functionName: "sendRequest", - // args: [["94521", "US"]], - // }); + const { writeAsync: sendRequest } = useScaffoldContractWrite({ + contractName: "FunctionsConsumer", + functionName: "sendRequest", + args: [["94521", "US", "metric"], encryptedSecretsReference], + }); // const { data: weatherResult } = useScaffoldContractRead({ // contractName: "FunctionsConsumer", // functionName: "weatherResult", // }); - // const { data: s_lastError } = useScaffoldContractRead({ - // contractName: "FunctionsConsumer", - // functionName: "s_lastError", - // }); - - // const { data: s_lastResponse } = useScaffoldContractRead({ - // contractName: "FunctionsConsumer", - // functionName: " s_lastResponse", - // }); + const { data: s_lastError } = useScaffoldContractRead({ + contractName: "FunctionsConsumer", + functionName: "s_lastError", + }); - // console.log(weatherResult); + const { data: s_lastResponse } = useScaffoldContractRead({ + contractName: "FunctionsConsumer", + functionName: "s_lastResponse", + }); return (
@@ -48,38 +49,46 @@ export const Showcase = () => { which executes the provided source code in off chain environment and returns the result on chain through the `fulfillRequest` function

-
-

TODO

-
    -
  1. Figure out how to upload encrypted secret to DON
  2. -
  3. Set up vercel serverless function with cron job to upload secret once per day
  4. -
  5. Set up function to return weather data
  6. -
+ + +
+
TODO
+
    +
  • Debug to get successful response
  • +
  • Store latest city/country on chain
  • +
  • Display city/country for latest request on chain
  • +
  • Fancy user interface that shows image of sun if hot, clouds if cold, etc...
  • +
-

On Chain Weather

- {/*
-
-
-
-
{builderCount?.toString()}
-
Builder Count
-
-
-
- -
-
-
*/} +

On Chain Weather

+
+ +
{s_lastResponse?.toString()}
+ + +
{s_lastError?.toString()}
+
{s_lastError && decodeHexError(s_lastError)}
+
); }; + +function decodeHexError(hexString: string) { + // Remove the '0x' prefix if it exists + if (hexString.startsWith("0x")) { + hexString = hexString.substring(2); + } + + // Convert the hex string to a Buffer + const buffer = Buffer.from(hexString, "hex"); + + // Convert the Buffer to a string + return buffer.toString("utf8"); +} diff --git a/packages/nextjs/generated/deployedContracts.ts b/packages/nextjs/generated/deployedContracts.ts index 4801594..8db9689 100644 --- a/packages/nextjs/generated/deployedContracts.ts +++ b/packages/nextjs/generated/deployedContracts.ts @@ -604,7 +604,7 @@ const contracts = { ], }, FunctionsConsumer: { - address: "0x7855b9755E8A1704cd59288214fd50387e05c50C", + address: "0x00B07a4b8155Ab74e45F9BabE01686e2684c3041", abi: [ { inputs: [ @@ -642,6 +642,11 @@ const contracts = { name: "EmptyArgs", type: "error", }, + { + inputs: [], + name: "EmptySecrets", + type: "error", + }, { inputs: [], name: "EmptySource", @@ -770,6 +775,32 @@ const contracts = { stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "donID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "gasLimit", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -806,6 +837,19 @@ const contracts = { stateMutability: "view", type: "function", }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "s_lastError", @@ -852,6 +896,11 @@ const contracts = { name: "args", type: "string[]", }, + { + internalType: "bytes", + name: "encryptedSecretsUrls", + type: "bytes", + }, ], name: "sendRequest", outputs: [ @@ -864,6 +913,19 @@ const contracts = { stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "subscriptionId", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { diff --git a/packages/nextjs/pages/index.tsx b/packages/nextjs/pages/index.tsx index 8de548c..8f4140d 100644 --- a/packages/nextjs/pages/index.tsx +++ b/packages/nextjs/pages/index.tsx @@ -21,12 +21,10 @@ const Home: NextPage = () => {

A beginner's guide to integrating chainlink products with smart contracts

-
- Speedrun Chainlink Banner -
+ {/*
*/} -
+
{PRODUCTS.map(product => ( { ))}
+ +
+ Speedrun Chainlink Banner +
); diff --git a/packages/nextjs/styles/globals.css b/packages/nextjs/styles/globals.css index 52c2e92..0a19051 100644 --- a/packages/nextjs/styles/globals.css +++ b/packages/nextjs/styles/globals.css @@ -27,7 +27,7 @@ p { } .btn { - font-weight: normal; + /* font-weight: normal; */ text-transform: none; /* padding: 0.5rem 1.5rem; */ /* font-family: "Cubano", sans-serif; */ @@ -43,8 +43,3 @@ p { .hide-scrollbar::-webkit-scrollbar { display: none; } - -/* Hide scrollbar for IE and Edge */ -.hide-scrollbar { - -ms-overflow-style: none; -} diff --git a/yarn.lock b/yarn.lock index 19b2a2d..f1389a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,6 +146,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:7.20.13": + version: 7.20.13 + resolution: "@babel/runtime@npm:7.20.13" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb + languageName: node + linkType: hard + "@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.9": version: 7.19.0 resolution: "@babel/runtime@npm:7.19.0" @@ -235,6 +244,21 @@ __metadata: languageName: node linkType: hard +"@chainlink/functions-toolkit@npm:^0.2.8": + version: 0.2.8 + resolution: "@chainlink/functions-toolkit@npm:0.2.8" + dependencies: + axios: ^1.4.0 + bcrypto: ^5.4.0 + cbor: ^9.0.1 + eth-crypto: ^2.6.0 + ethers: ^5.7.2 + ganache: ^7.9.1 + uniq: ^1.0.1 + checksum: a00f5cf9ca2f0dc36a44898bb9d6447d15fb93d3be5868a4bc266a5021f4f5c57ceaf067b441eceecae129844cbd38e58e89de37c154fb33ab753df7b6624544 + languageName: node + linkType: hard + "@chainsafe/as-sha256@npm:^0.3.1": version: 0.3.1 resolution: "@chainsafe/as-sha256@npm:0.3.1" @@ -416,6 +440,26 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/common@npm:^2.6.4": + version: 2.6.5 + resolution: "@ethereumjs/common@npm:2.6.5" + dependencies: + crc-32: ^1.2.0 + ethereumjs-util: ^7.1.5 + checksum: 0143386f267ef01b7a8bb1847596f964ad58643c084e5fd8e3a0271a7bf8428605dbf38cbb92c84f6622080ad095abeb765f178c02d86ec52abf9e8a4c0e4ecf + languageName: node + linkType: hard + +"@ethereumjs/tx@npm:3.5.2": + version: 3.5.2 + resolution: "@ethereumjs/tx@npm:3.5.2" + dependencies: + "@ethereumjs/common": ^2.6.4 + ethereumjs-util: ^7.1.5 + checksum: a34a7228a623b40300484d15875b9f31f0a612cfeab64a845f6866cf0bfe439519e9455ac6396149f29bc527cf0ee277ace082ae013a1075dcbf7193220a0146 + languageName: node + linkType: hard + "@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" @@ -671,7 +715,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:^5.7.0, @ethersproject/providers@npm:^5.7.2": +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.0, @ethersproject/providers@npm:^5.7.2": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -1897,6 +1941,7 @@ __metadata: resolution: "@se-2/hardhat@workspace:packages/hardhat" dependencies: "@chainlink/contracts": ^0.7.1 + "@chainlink/functions-toolkit": ^0.2.8 "@ethersproject/abi": ^5.7.0 "@ethersproject/providers": ^5.7.1 "@matterlabs/hardhat-zksync-solc": ^0.3.17 @@ -2362,6 +2407,32 @@ __metadata: languageName: node linkType: hard +"@trufflesuite/bigint-buffer@npm:1.1.10": + version: 1.1.10 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" + dependencies: + node-gyp: latest + node-gyp-build: 4.4.0 + checksum: e1dc5e4fbf348a55e660c0055267021eb04cbbdb7f6b0ee983ad32cd4aae1200be448a2ca3963c7d19c7c936d42f66c1ff8b5e4e2332cb1a9e3f870ff818dce4 + languageName: node + linkType: hard + +"@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0": + version: 20.30.0-unofficial.0 + resolution: "@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0" + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 6.0.3 + ws: 8.13.0 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 67e67140877f89b31c504a057d26853d5780b09c733d92c32480d2f0dfe4e98fb822860f3efeb06f379daecee70d67185f88a7b6f3406d18526e501b36c40fd3 + languageName: node + linkType: hard + "@ts-morph/common@npm:~0.11.0": version: 0.11.1 resolution: "@ts-morph/common@npm:0.11.1" @@ -2435,21 +2506,21 @@ __metadata: languageName: node linkType: hard -"@types/bn.js@npm:^4.11.3": - version: 4.11.6 - resolution: "@types/bn.js@npm:4.11.6" +"@types/bn.js@npm:5.1.1, @types/bn.js@npm:^5.1.0": + version: 5.1.1 + resolution: "@types/bn.js@npm:5.1.1" dependencies: "@types/node": "*" - checksum: 7f66f2c7b7b9303b3205a57184261974b114495736b77853af5b18d857c0b33e82ce7146911e86e87a87837de8acae28986716fd381ac7c301fd6e8d8b6c811f + checksum: e50ed2dd3abe997e047caf90e0352c71e54fc388679735217978b4ceb7e336e51477791b715f49fd77195ac26dd296c7bad08a3be9750e235f9b2e1edb1b51c2 languageName: node linkType: hard -"@types/bn.js@npm:^5.1.0": - version: 5.1.1 - resolution: "@types/bn.js@npm:5.1.1" +"@types/bn.js@npm:^4.11.3": + version: 4.11.6 + resolution: "@types/bn.js@npm:4.11.6" dependencies: "@types/node": "*" - checksum: e50ed2dd3abe997e047caf90e0352c71e54fc388679735217978b4ceb7e336e51477791b715f49fd77195ac26dd296c7bad08a3be9750e235f9b2e1edb1b51c2 + checksum: 7f66f2c7b7b9303b3205a57184261974b114495736b77853af5b18d857c0b33e82ce7146911e86e87a87837de8acae28986716fd381ac7c301fd6e8d8b6c811f languageName: node linkType: hard @@ -2546,7 +2617,7 @@ __metadata: languageName: node linkType: hard -"@types/lru-cache@npm:^5.1.0": +"@types/lru-cache@npm:5.1.1, @types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" checksum: e1d6c0085f61b16ec5b3073ec76ad1be4844ea036561c3f145fc19f71f084b58a6eb600b14128aa95809d057d28f1d147c910186ae51219f58366ffd2ff2e118 @@ -2708,6 +2779,13 @@ __metadata: languageName: node linkType: hard +"@types/seedrandom@npm:3.0.1": + version: 3.0.1 + resolution: "@types/seedrandom@npm:3.0.1" + checksum: d9755452f224a4f5072a1d8738da6c9de3039fc59a2a449b1f658e51087be7b48ada49bcabc8b0f16633c095f55598c32fcd072c448858422a2f6a0566569e4c + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12": version: 7.3.13 resolution: "@types/semver@npm:7.3.13" @@ -3901,7 +3979,7 @@ __metadata: languageName: node linkType: hard -"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": +"abstract-level@npm:1.0.3, abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": version: 1.0.3 resolution: "abstract-level@npm:1.0.3" dependencies: @@ -3916,6 +3994,20 @@ __metadata: languageName: node linkType: hard +"abstract-leveldown@npm:7.2.0, abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" + dependencies: + buffer: ^6.0.3 + catering: ^2.0.0 + is-buffer: ^2.0.5 + level-concat-iterator: ^3.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -3950,6 +4042,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:7.1.1": + version: 7.1.1 + resolution: "acorn@npm:7.1.1" + bin: + acorn: bin/acorn + checksum: a2b9409086697c03c3a6e7d4fdd898be23fc5abaea1c678693affd04465adb3d8ba4f0c1efc5cc2aad50d8c4d03ab3c72cfbe3784b6f2c61046ebcef1218bfe1 + languageName: node + linkType: hard + "acorn@npm:^7.0.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" @@ -4395,6 +4496,15 @@ __metadata: languageName: node linkType: hard +"async-eventemitter@npm:0.2.4": + version: 0.2.4 + resolution: "async-eventemitter@npm:0.2.4" + dependencies: + async: ^2.4.0 + checksum: b9e77e0f58ebd7188c50c23d613d1263e0ab501f5e677e02b57cc97d7032beaf60aafa189887e7105569c791e212df4af00b608be1e9a4c425911d577124911e + languageName: node + linkType: hard + "async-mutex@npm:^0.2.6": version: 0.2.6 resolution: "async-mutex@npm:0.2.6" @@ -4418,6 +4528,15 @@ __metadata: languageName: node linkType: hard +"async@npm:^2.4.0": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -4544,6 +4663,17 @@ __metadata: languageName: node linkType: hard +"bcrypto@npm:^5.4.0": + version: 5.5.2 + resolution: "bcrypto@npm:5.5.2" + dependencies: + bufio: ~1.0.7 + loady: ~0.0.5 + node-gyp: latest + checksum: 6eb78e0e6f8b06afb55174407df9b5395451519bab2dcec139fb8dbe3480c4a83be74d15cbe503904d3d98314e384a35cb47fe4a779f4f8188da0e944d188f24 + languageName: node + linkType: hard + "bech32@npm:1.1.4": version: 1.1.4 resolution: "bech32@npm:1.1.4" @@ -4605,7 +4735,7 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.3.0, bindings@npm:^1.4.0": +"bindings@npm:^1.3.0, bindings@npm:^1.4.0, bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" dependencies: @@ -4614,6 +4744,15 @@ __metadata: languageName: node linkType: hard +"bip66@npm:^1.1.5": + version: 1.1.5 + resolution: "bip66@npm:1.1.5" + dependencies: + safe-buffer: ^5.0.1 + checksum: 956cff6e51d7206571ef8ce875bc5fa61b5c181589790b9155799b7edcae4b20dbb3eed43b188ff3eec27cdbe98e0b7e0ec9f1cb2e4f5370c119028b248ad859 + languageName: node + linkType: hard + "bl@npm:^1.0.0": version: 1.2.3 resolution: "bl@npm:1.2.3" @@ -4735,7 +4874,7 @@ __metadata: languageName: node linkType: hard -"browserify-aes@npm:^1.2.0": +"browserify-aes@npm:^1.0.6, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" dependencies: @@ -4851,6 +4990,26 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:4.0.5": + version: 4.0.5 + resolution: "bufferutil@npm:4.0.5" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 37d5bef7cb38d29f9377b8891ff8a57f53ae6057313d77a8aa2a7417df37a72f16987100796cb2f1e1862f3eb80057705f3c052615ec076a0dcc7aa6c83b68c9 + languageName: node + linkType: hard + +"bufferutil@npm:4.0.7": + version: 4.0.7 + resolution: "bufferutil@npm:4.0.7" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: f75aa87e3d1b99b87a95f60a855e63f70af07b57fb8443e75a2ddfef2e47788d130fdd46e3a78fd7e0c10176082b26dfbed970c5b8632e1cc299cafa0e93ce45 + languageName: node + linkType: hard + "bufferutil@npm:^4.0.1": version: 4.0.6 resolution: "bufferutil@npm:4.0.6" @@ -4868,6 +5027,13 @@ __metadata: languageName: node linkType: hard +"bufio@npm:~1.0.7": + version: 1.0.7 + resolution: "bufio@npm:1.0.7" + checksum: 4871b8060a8d3bc04de8722f5cc5575b77f4cb18af389eab62d51bf42b08f43fe75159126ef11f15fe4045dc8c20e0e344406ca8388cb1371e558b986e971a57 + languageName: node + linkType: hard + "buildcheck@npm:~0.0.6": version: 0.0.6 resolution: "buildcheck@npm:0.0.6" @@ -4976,7 +5142,7 @@ __metadata: languageName: node linkType: hard -"catering@npm:^2.1.0, catering@npm:^2.1.1": +"catering@npm:^2.0.0, catering@npm:^2.1.0, catering@npm:^2.1.1": version: 2.1.1 resolution: "catering@npm:2.1.1" checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 @@ -4993,6 +5159,15 @@ __metadata: languageName: node linkType: hard +"cbor@npm:^9.0.1": + version: 9.0.1 + resolution: "cbor@npm:9.0.1" + dependencies: + nofilter: ^3.1.0 + checksum: 42333ac3d42cc3f6fcc7a529e68417a2dd8099eda43ca4be1304cdc5bc7494efe058e2db8a3d3b46ae60d69c7331ea813c22dbd019c4ac592d23e599d72bbcc9 + languageName: node + linkType: hard + "chai-as-promised@npm:^7.1.1": version: 7.1.1 resolution: "chai-as-promised@npm:7.1.1" @@ -5997,6 +6172,17 @@ __metadata: languageName: node linkType: hard +"drbg.js@npm:^1.0.1": + version: 1.0.1 + resolution: "drbg.js@npm:1.0.1" + dependencies: + browserify-aes: ^1.0.6 + create-hash: ^1.1.2 + create-hmac: ^1.1.4 + checksum: f8df5cdd4fb792e548d6187cbc446fbd0afd8f1ef7fa486e1c286c2adee55a687183ce48ab178e9f24965c2deabb6e2ba7a7ee2d675264b951356480eb042476 + languageName: node + linkType: hard + "duplexify@npm:^4.1.2": version: 4.1.2 resolution: "duplexify@npm:4.1.2" @@ -6026,6 +6212,23 @@ __metadata: languageName: node linkType: hard +"eccrypto@npm:1.1.6": + version: 1.1.6 + resolution: "eccrypto@npm:1.1.6" + dependencies: + acorn: 7.1.1 + elliptic: 6.5.4 + es6-promise: 4.2.8 + nan: 2.14.0 + node-gyp: latest + secp256k1: 3.7.1 + dependenciesMeta: + secp256k1: + optional: true + checksum: 3c53879928ca8ce0ff2b5edfe8e675aaa22ae41d952bd46d082fad5e6ef5329850d61329d6d70b5ca23bdab3dcce65f86d75d4d847759f1db6ab170b92c8a90f + languageName: node + linkType: hard + "edge-runtime@npm:2.0.0": version: 2.0.0 resolution: "edge-runtime@npm:2.0.0" @@ -6052,7 +6255,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:6.5.4, elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": +"elliptic@npm:6.5.4, elliptic@npm:^6.4.1, elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -6067,6 +6270,13 @@ __metadata: languageName: node linkType: hard +"emittery@npm:0.10.0": + version: 0.10.0 + resolution: "emittery@npm:0.10.0" + checksum: 2616a802df51e3f412b9b33f1b43161f7bc96037142cada6ecdbf35ddef1368e30d4f8e47fddc10b0753ccf91d3483b20ebca535b4b1e47526440e13150e2bc7 + languageName: node + linkType: hard + "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -6214,7 +6424,7 @@ __metadata: languageName: node linkType: hard -"es6-promise@npm:^4.0.3": +"es6-promise@npm:4.2.8, es6-promise@npm:^4.0.3": version: 4.2.8 resolution: "es6-promise@npm:4.2.8" checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d @@ -6895,6 +7105,21 @@ __metadata: languageName: node linkType: hard +"eth-crypto@npm:^2.6.0": + version: 2.6.0 + resolution: "eth-crypto@npm:2.6.0" + dependencies: + "@babel/runtime": 7.20.13 + "@ethereumjs/tx": 3.5.2 + "@types/bn.js": 5.1.1 + eccrypto: 1.1.6 + ethereumjs-util: 7.1.5 + ethers: 5.7.2 + secp256k1: 5.0.0 + checksum: 6ebdaacc9f226460ac690b4977569b8a52495237a079aaf8ca1d156f9c1d7046fb724981ab054adb5c790fd2071522d1ff3508a0e91f81a183f77d76eb5c28f1 + languageName: node + linkType: hard + "eth-gas-reporter@npm:^0.2.25": version: 0.2.25 resolution: "eth-gas-reporter@npm:0.2.25" @@ -7018,6 +7243,19 @@ __metadata: languageName: node linkType: hard +"ethereumjs-util@npm:7.1.5, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": + version: 7.1.5 + resolution: "ethereumjs-util@npm:7.1.5" + dependencies: + "@types/bn.js": ^5.1.0 + bn.js: ^5.1.2 + create-hash: ^1.1.2 + ethereum-cryptography: ^0.1.3 + rlp: ^2.2.4 + checksum: 27a3c79d6e06b2df34b80d478ce465b371c8458b58f5afc14d91c8564c13363ad336e6e83f57eb0bd719fde94d10ee5697ceef78b5aa932087150c5287b286d1 + languageName: node + linkType: hard + "ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.2.1": version: 6.2.1 resolution: "ethereumjs-util@npm:6.2.1" @@ -7033,16 +7271,41 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.4": - version: 7.1.5 - resolution: "ethereumjs-util@npm:7.1.5" +"ethers@npm:5.7.2, ethers@npm:^5.7.2": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" dependencies: - "@types/bn.js": ^5.1.0 - bn.js: ^5.1.2 - create-hash: ^1.1.2 - ethereum-cryptography: ^0.1.3 - rlp: ^2.2.4 - checksum: 27a3c79d6e06b2df34b80d478ce465b371c8458b58f5afc14d91c8564c13363ad336e6e83f57eb0bd719fde94d10ee5697ceef78b5aa932087150c5287b286d1 + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 languageName: node linkType: hard @@ -7664,6 +7927,36 @@ __metadata: languageName: node linkType: hard +"ganache@npm:^7.9.1": + version: 7.9.1 + resolution: "ganache@npm:7.9.1" + dependencies: + "@trufflesuite/bigint-buffer": 1.1.10 + "@trufflesuite/uws-js-unofficial": 20.30.0-unofficial.0 + "@types/bn.js": ^5.1.0 + "@types/lru-cache": 5.1.1 + "@types/seedrandom": 3.0.1 + abstract-level: 1.0.3 + abstract-leveldown: 7.2.0 + async-eventemitter: 0.2.4 + bufferutil: 4.0.5 + emittery: 0.10.0 + keccak: 3.0.2 + leveldown: 6.1.0 + secp256k1: 4.0.3 + utf-8-validate: 5.0.7 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + bin: + ganache: dist/node/cli.js + ganache-cli: dist/node/cli.js + checksum: 5807ef87ce7f82122790075001f6621af69e4a6b0a6a52be40b7cfae97a331b2dca7cfa0f6ebe0f3162cf5e88e393cd4dcb3aefeea7e3131285d9689e52e03ab + languageName: node + linkType: hard + "gauge@npm:^3.0.0": version: 3.0.2 resolution: "gauge@npm:3.0.2" @@ -9154,7 +9447,7 @@ __metadata: languageName: node linkType: hard -"keccak@npm:^3.0.0, keccak@npm:^3.0.1, keccak@npm:^3.0.2": +"keccak@npm:3.0.2, keccak@npm:^3.0.0, keccak@npm:^3.0.1, keccak@npm:^3.0.2": version: 3.0.2 resolution: "keccak@npm:3.0.2" dependencies: @@ -9208,6 +9501,22 @@ __metadata: languageName: node linkType: hard +"level-concat-iterator@npm:^3.0.0": + version: 3.1.0 + resolution: "level-concat-iterator@npm:3.1.0" + dependencies: + catering: ^2.1.0 + checksum: a15bc4c5fbbb30c1efa7fad06b72feaac84d90990b356b461593c198a833336f31f6daff8f40c3908fabd14cfd8856d1c5ecae9e1cb0575037b65fa607e760e9 + languageName: node + linkType: hard + +"level-supports@npm:^2.0.1": + version: 2.1.0 + resolution: "level-supports@npm:2.1.0" + checksum: f7b16aea7ddd13326ee4fbc2c1099bcaf8a74dc95346af9ebedea4e02518c6f7a438e829b79b7890d67489b59f615a9428369a0a065021797aa7cb6b6bd84d75 + languageName: node + linkType: hard + "level-supports@npm:^4.0.0": version: 4.0.1 resolution: "level-supports@npm:4.0.1" @@ -9235,6 +9544,18 @@ __metadata: languageName: node linkType: hard +"leveldown@npm:6.1.0": + version: 6.1.0 + resolution: "leveldown@npm:6.1.0" + dependencies: + abstract-leveldown: ^7.2.0 + napi-macros: ~2.0.0 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: e984b61e9fbe057cfd5c81ac0afe5d7e35d695ff130a95991e0ecb66390e4c4ff6aa3980a65b6c53edaba80527a47790bb26e3cfbd52a054957b3546d9941fe4 + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -9358,6 +9679,13 @@ __metadata: languageName: node linkType: hard +"loady@npm:~0.0.5": + version: 0.0.5 + resolution: "loady@npm:0.0.5" + checksum: 3cba2ffa8cef8a082b3d23f22c1269a339e9f268105c30229bb3fed9123bb79830c0c7f3fa79f52286e1de9303b87e4eb3236952a6ee3fcffa83e7c576f7a8f5 + languageName: node + linkType: hard + "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -10038,6 +10366,24 @@ __metadata: languageName: node linkType: hard +"nan@npm:2.14.0": + version: 2.14.0 + resolution: "nan@npm:2.14.0" + dependencies: + node-gyp: latest + checksum: 6dfd00d9bf71769898dfab21ef9d2ef278b392c586147616a718b995d6a582f5caa7f2ca0f83ce956fb0def698aca813b2b6fd4598125cd16bdc85924c34a37d + languageName: node + linkType: hard + +"nan@npm:^2.14.0": + version: 2.18.0 + resolution: "nan@npm:2.18.0" + dependencies: + node-gyp: latest + checksum: 4fe42f58456504eab3105c04a5cffb72066b5f22bd45decf33523cb17e7d6abc33cca2a19829407b9000539c5cb25f410312d4dc5b30220167a3594896ea6a0a + languageName: node + linkType: hard + "nan@npm:^2.17.0": version: 2.17.0 resolution: "nan@npm:2.17.0" @@ -10193,6 +10539,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: latest + checksum: 2508bd2d2981945406243a7bd31362fc7af8b70b8b4d65f869c61731800058fb818cc2fd36c8eac714ddd0e568cc85becf5e165cebbdf7b5024d5151bbc75ea1 + languageName: node + linkType: hard + "node-emoji@npm:^1.10.0": version: 1.11.0 resolution: "node-emoji@npm:1.11.0" @@ -10254,6 +10609,17 @@ __metadata: languageName: node linkType: hard +"node-gyp-build@npm:4.4.0": + version: 4.4.0 + resolution: "node-gyp-build@npm:4.4.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 972a059f960253d254e0b23ce10f54c8982236fc0edcab85166d0b7f87443b2ce98391c877cfb2f6eeafcf03c538c5f4dd3e0bfff03828eb48634f58f4c64343 + languageName: node + linkType: hard + "node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": version: 4.5.0 resolution: "node-gyp-build@npm:4.5.0" @@ -10310,6 +10676,13 @@ __metadata: languageName: node linkType: hard +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f + languageName: node + linkType: hard + "nopt@npm:3.x": version: 3.0.6 resolution: "nopt@npm:3.0.6" @@ -11629,6 +12002,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.13.4": version: 0.13.9 resolution: "regenerator-runtime@npm:0.13.9" @@ -12114,7 +12494,24 @@ __metadata: languageName: unknown linkType: soft -"secp256k1@npm:^4.0.1": +"secp256k1@npm:3.7.1": + version: 3.7.1 + resolution: "secp256k1@npm:3.7.1" + dependencies: + bindings: ^1.5.0 + bip66: ^1.1.5 + bn.js: ^4.11.8 + create-hash: ^1.2.0 + drbg.js: ^1.0.1 + elliptic: ^6.4.1 + nan: ^2.14.0 + node-gyp: latest + safe-buffer: ^5.1.2 + checksum: fd3b17157c598296602bbb9d75a42d57a17d38f95035e58b08d3d996e232423a1363449cc4d372cb4219d9df0baefdae8711fa05034e054cf0eb523f2f4f5d05 + languageName: node + linkType: hard + +"secp256k1@npm:4.0.3, secp256k1@npm:^4.0.1": version: 4.0.3 resolution: "secp256k1@npm:4.0.3" dependencies: @@ -12126,6 +12523,18 @@ __metadata: languageName: node linkType: hard +"secp256k1@npm:5.0.0": + version: 5.0.0 + resolution: "secp256k1@npm:5.0.0" + dependencies: + elliptic: ^6.5.4 + node-addon-api: ^5.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + checksum: a0719dff4687c38d385b5e0b7e811c51a4ea24893128be9d097aee99f879eb0ea52582590deb15a49da627a3db23c6b028ad5c9c6ac1fca92ce760153b8cf21c + languageName: node + linkType: hard + "semver@npm:6.1.1": version: 6.1.1 resolution: "semver@npm:6.1.1" @@ -13600,6 +14009,13 @@ __metadata: languageName: node linkType: hard +"uniq@npm:^1.0.1": + version: 1.0.1 + resolution: "uniq@npm:1.0.1" + checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -13731,6 +14147,26 @@ __metadata: languageName: node linkType: hard +"utf-8-validate@npm:5.0.7": + version: 5.0.7 + resolution: "utf-8-validate@npm:5.0.7" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 588d272b359bf555a0c4c2ffe97286edc73126de132f63f4f0c80110bd06b67d3ce44d2b3d24feea6da13ced50c04d774ba4d25fe28576371cd714cd013bd3b7 + languageName: node + linkType: hard + +"utf-8-validate@npm:6.0.3": + version: 6.0.3 + resolution: "utf-8-validate@npm:6.0.3" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 5e21383c81ff7469c1912119ca69d07202d944c73ddd8a54b84dddcc546b939054e5101c78c294e494d206fe93bd43428adc635a0660816b3ec9c8ec89286ac4 + languageName: node + linkType: hard + "utf-8-validate@npm:^5.0.2": version: 5.0.9 resolution: "utf-8-validate@npm:5.0.9" @@ -14125,6 +14561,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + "ws@npm:^7.4.5, ws@npm:^7.4.6, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9"