From 1037b623a18f8ddfcc8bf46d1a8bdadc75462669 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Wed, 6 Nov 2024 19:09:28 +0000 Subject: [PATCH 1/7] WIP --- components/choices/index.js | 25 +++++++++---------------- components/daos/index.js | 4 ++-- components/polls/index.js | 4 ++-- components/tokens/index.js | 9 ++++++++- routes/blocks.js | 25 +++++++++++++++++++++++++ server.js | 1 + utils-eth.js | 31 +++++++++++++++++++++++++------ 7 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 routes/blocks.js diff --git a/components/choices/index.js b/components/choices/index.js index 141745a..e67dca6 100644 --- a/components/choices/index.js +++ b/components/choices/index.js @@ -15,6 +15,7 @@ const DAOModel = require("../../db/models/Dao.model"); const TokenModel = require("../../db/models/Token.model"); const PollModel = require("../../db/models/Poll.model"); const ChoiceModel = require("../../db/models/Choice.model"); +const { getEthUserBalanceAtLevel } = require("../../utils-eth"); // This help convert the id from string to ObjectId for the _id. const ObjectId = require("mongodb").ObjectId; @@ -82,24 +83,17 @@ const updateChoiceById = async (req, response) => { ); if (duplicates.length > 0) throw new Error("Duplicate choices found"); - // TODO: Check if the user has enough balance to vote - // const total = await getUserTotalVotingPowerAtReferenceBlock( - // dao.network, - // dao.tokenAddress, - // dao.daoContract, - // token.tokenID, - // block, - // address, - // poll.isXTZ - // ); - - // if (!total) { - // throw new Error("Could not get total power at reference block"); - // } + const total = await getEthUserBalanceAtLevel(dao.network, address, dao.tokenAddress, block) + console.log("EthTotal_UserBalance: ", total) + + if (!total) { + throw new Error("Could not get total power at reference block"); + } // if (total.eq(0)) { // throw new Error("No balance at proposal level"); // } + const isVoted = await ChoiceModel.find({ pollId: poll._id, walletAddresses: { $elemMatch: { address: address } } @@ -108,8 +102,7 @@ const updateChoiceById = async (req, response) => { const walletVote = { address, - balanceAtReferenceBlock: 1, - // balanceAtReferenceBlock: total.toString(), + balanceAtReferenceBlock: total.toString(), payloadBytes, payloadBytesHash: md5(payloadBytes), signature, diff --git a/components/daos/index.js b/components/daos/index.js index c3a8092..6036f15 100644 --- a/components/daos/index.js +++ b/components/daos/index.js @@ -9,7 +9,7 @@ const { } = require("../../utils"); const { getEthTokenHoldersCount, - getEthCurrentBlock, + getEthCurrentBlockNumber, getEthUserBalanceAtLevel, getEthTokenMetadata, } = require("../../utils-eth"); @@ -239,7 +239,7 @@ const createDAO = async (req, response) => { const address = publicKey - const block = await getEthCurrentBlock(network); + const block = await getEthCurrentBlockNumber(network); const userBalanceAtCurrentLevel = await getEthUserBalanceAtLevel( network, address, diff --git a/components/polls/index.js b/components/polls/index.js index 50bee1f..135976e 100644 --- a/components/polls/index.js +++ b/components/polls/index.js @@ -17,7 +17,7 @@ const TokenModel = require("../../db/models/Token.model"); const PollModel = require("../../db/models/Poll.model"); const ChoiceModel = require("../../db/models/Choice.model"); -const { getEthCurrentBlock, getEthTotalSupply } = require("../../utils-eth"); +const { getEthCurrentBlockNumber, getEthTotalSupply } = require("../../utils-eth"); const ObjectId = require("mongodb").ObjectId; @@ -100,7 +100,7 @@ const addPoll = async (req, response) => { const token = await TokenModel.findOne({ tokenAddress: dao.tokenAddress }); if (!token) throw new Error("DAO Token Does not exist in system"); - const block = await getEthCurrentBlock(dao.network); + const block = await getEthCurrentBlockNumber(dao.network); const author = publicKey; const startTime = currentTime; const totalSupply = await getEthTotalSupply( diff --git a/components/tokens/index.js b/components/tokens/index.js index f7d3a41..525b04f 100644 --- a/components/tokens/index.js +++ b/components/tokens/index.js @@ -5,7 +5,7 @@ const dbo = require("../../db/conn"); const TokenModel = require("../../db/models/Token.model"); const DAOModel = require("../../db/models/Dao.model"); const { getUserTotalVotingPowerAtReferenceBlock } = require("../../utils"); -const { getEthTokenMetadata } = require("../../utils-eth"); +const { getEthTokenMetadata, getEthUserBalanceAtLevel } = require("../../utils-eth"); const ObjectId = mongodb.ObjectId; const addToken = async (req, response) => { @@ -60,6 +60,13 @@ const getVotingPowerAtLevel = async (req, response) => { const { network, address, tokenID } = req.params; const { userAddress, level } = req.query; + const isEtherlink = network?.startsWith("etherlink") + if(isEtherlink) { + const votingWeight = await getEthUserBalanceAtLevel(network, userAddress, address, null) + console.log("EthVotingWeight: ", votingWeight) + return response.json({ votingWeight: votingWeight.toString(), votingXTZWeight: 0 }) + } + try { let db_connect = dbo.getDb(); diff --git a/routes/blocks.js b/routes/blocks.js new file mode 100644 index 0000000..8b465c8 --- /dev/null +++ b/routes/blocks.js @@ -0,0 +1,25 @@ +const express = require("express"); +const {catchAsync} = require("../services/response.util"); +const { getEthCurrentBlock, getEthBlockTimeDifference } = require("../utils-eth"); + +const blocksRoutes = express.Router(); + +blocksRoutes.get("/blocks", catchAsync(async (req, res) => { + const { network } = req.query; + if(!network) { + throw new Error("Network is required"); + } + const block = await getEthCurrentBlock(network); + res.json({ block }); +})); + +blocksRoutes.get("/blocks/stats", catchAsync(async (req, res) => { + const { network } = req.query; + if(!network) { + throw new Error("Network is required"); + } + const data = await getEthBlockTimeDifference(network); + res.json(data); +})); + +module.exports = blocksRoutes; \ No newline at end of file diff --git a/server.js b/server.js index 8ae6290..cdd8e41 100644 --- a/server.js +++ b/server.js @@ -26,6 +26,7 @@ app.use(require("./routes/daos")); app.use(require("./routes/polls")); app.use(require("./routes/tokens")); app.use(require("./routes/choices")); +app.use(require("./routes/blocks")); app.listen(port, async () => { // perform a database connection when server starts diff --git a/utils-eth.js b/utils-eth.js index 669587d..6de1efe 100644 --- a/utils-eth.js +++ b/utils-eth.js @@ -329,7 +329,7 @@ function _getEthProvider(network) { } function _getEthRestEndpoint(network) { - const rpcEndpoint = network.includes("test") ? "https://testnet.explorer.etherlink.com/api/v2" : "https://node.mainnet.etherlink.com"; + const rpcEndpoint = network.includes("test") ? "https://testnet.explorer.etherlink.com/api/v2" : "https://explorer.etherlink.com/api/v2"; return rpcEndpoint; } @@ -396,6 +396,12 @@ async function getEthTokenMetadata(network, tokenAddress) { // ✅ Working async function getEthCurrentBlock(network) { + const provider = _getEthProvider(network); + const block = await provider.getBlock('latest'); + return block; +} + +async function getEthCurrentBlockNumber(network) { const provider = _getEthProvider(network); const block = await provider.getBlock('latest'); return block.number; @@ -403,16 +409,16 @@ async function getEthCurrentBlock(network) { // ✅ Working async function getEthUserBalanceAtLevel(network, walletAddress, tokenAddress, block = 0) { - if (!block) block = await getEthCurrentBlock(network); + if (!block) block = await getEthCurrentBlockNumber(network); const provider = _getEthProvider(network); console.log({ network, walletAddress, tokenAddress, block }) const tokenContract = new ethers.Contract(tokenAddress, tokenAbiForErc20, provider); - const balance = await tokenContract.balanceOf(walletAddress, { blockTag: block }); + const balance = await tokenContract.balanceOf(walletAddress, { blockTag: Number(block) }); return balance; } async function getEthTotalSupply(network, tokenAddress, block = 0) { - if (!block) block = await getEthCurrentBlock(network); + if (!block) block = await getEthCurrentBlockNumber(network); const provider = _getEthProvider(network); const tokenContract = new ethers.Contract(tokenAddress, tokenAbiForErc20, provider); const totalSupply = await tokenContract.totalSupply({ blockTag: block }); @@ -421,7 +427,7 @@ async function getEthTotalSupply(network, tokenAddress, block = 0) { // This won't work efficiently for large block ranges, Indexer needs to be used for this async function getEthTokenHoldersCount(network, tokenAddress, block = 0) { - if (!block) block = await getEthCurrentBlock(network); + if (!block) block = await getEthCurrentBlockNumber(network); const provider = _getEthProvider(network); const contract = new ethers.Contract(tokenAddress, tokenAbiForErc20, provider); @@ -451,6 +457,17 @@ async function getEthTokenHoldersCount(network, tokenAddress, block = 0) { return holders.size; } +async function getEthBlockTimeDifference(network) { + const url = _getEthRestEndpoint(network) + const etherlinkData = await fetch(`${url}/blocks?type=block`).then(x => x.json()) + const firstTwoBlocks = [etherlinkData.items[0], etherlinkData.items[1]] + const timeDifference = Math.ceil( + (new Date(firstTwoBlocks[0].timestamp).getTime() - new Date(firstTwoBlocks[1].timestamp).getTime()) / 1000 + ) + return { + timeBetweenBlocks: timeDifference + } +} // getEthTokenMetadata("etherlink_testnet", "0x336bfd0356f6babec084f9120901c0296db1967e").then(console.log) // getEthTokenHoldersCount("etherlink_testnet","0x336bfd0356f6babec084f9120901c0296db1967e").then(console.log) @@ -464,7 +481,7 @@ async function getEthTokenHoldersCount(network, tokenAddress, block = 0) { // ✅ Working -// getEthCurrentBlock("etherlink_testnet").then(console.log) +// getEthCurrentBlockNumber("etherlink_testnet").then(console.log) console.log("from ETH") @@ -472,7 +489,9 @@ module.exports = { verityEthSignture, getEthTokenMetadata, getEthCurrentBlock, + getEthCurrentBlockNumber, getEthUserBalanceAtLevel, getEthTotalSupply, getEthTokenHoldersCount, + getEthBlockTimeDifference, } \ No newline at end of file From 46ef905f2521e37601be66c7ea0901f84c8f2603 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Sun, 12 May 2024 05:59:06 +0530 Subject: [PATCH 2/7] WIP - Arbitrary Contract Interactions --- .gitignore | 2 +- components/aci/index.js | 24 +++ routes/aci.js | 42 +++++ routes/aci.test.js | 43 +++++ server.js | 1 + services/aci.service.js | 388 ++++++++++++++++++++++++++++++++++++++ services/response.util.js | 2 + 7 files changed, 501 insertions(+), 1 deletion(-) create mode 100644 components/aci/index.js create mode 100644 routes/aci.js create mode 100644 routes/aci.test.js create mode 100644 services/aci.service.js diff --git a/.gitignore b/.gitignore index 809514e..e1c416d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,4 @@ yarn-error.log* .cosine yarn.lock test.js -.vscode \ No newline at end of file +.vscode diff --git a/components/aci/index.js b/components/aci/index.js new file mode 100644 index 0000000..ff284c0 --- /dev/null +++ b/components/aci/index.js @@ -0,0 +1,24 @@ +const { catchAsync } = require("../../services/response.util"); +const { getContractEndpoints } = require("../../services/aci.service"); + +const getContractEndpointsController = catchAsync(async(req, response) => { + const {network} = req.body; + const contractId = req.params.contract_id; + if(!contractId) throw new Error("Contract ID is required"); + + let [endpoints, error] = await getContractEndpoints(network, contractId) + if(error) throw new Error(error) + + if(endpoints){ + endpoints = { + ...endpoints, + operations: endpoints.children.map(x => x.name) + } + } + + return response.json(endpoints); +}) + +module.exports = { + getContractEndpointsController +} \ No newline at end of file diff --git a/routes/aci.js b/routes/aci.js new file mode 100644 index 0000000..9aba1a3 --- /dev/null +++ b/routes/aci.js @@ -0,0 +1,42 @@ +const express = require("express"); +const { getContractEndpointsController } = require("../components/aci"); + +/** + * TEST Contracts + * + * KT1MzN5jLkbbq9P6WEFmTffUrYtK8niZavzH + * KT1VG3ynsnyxFGzw9mdBwYnyZAF8HZvqnNkw + * + */ + +const aciRoutes = express.Router(); + +/** + * @swagger + * /aci/{contract_id}: + * post: + * summary: Get contract endpoints + * tags: [ACI] + * parameters: + * - in: path + * name: contract_id + * required: true + * description: The ID of the contract + * schema: + * type: string + * requestBody: + * required: false + * content: + * application/json: + * schema: + * type: object + * properties: + * network: + * type: string + * responses: + * 200: + * description: Contract ACI Endpoints + */ +aciRoutes.post('/aci/:contract_id', getContractEndpointsController) + +module.exports = aciRoutes; \ No newline at end of file diff --git a/routes/aci.test.js b/routes/aci.test.js new file mode 100644 index 0000000..8db4207 --- /dev/null +++ b/routes/aci.test.js @@ -0,0 +1,43 @@ +const request = require("supertest"); +const express = require("express"); +const aciRoutes = require("./aci"); + +const app = express(); +app.use(express.json()); +app.use("/", aciRoutes); + +const contractIds = [ + "KT1MzN5jLkbbq9P6WEFmTffUrYtK8niZavzH", + "KT1VG3ynsnyxFGzw9mdBwYnyZAF8HZvqnNkw", + "I_AM_INVALID_ID" +] + +describe("ACI Routes", () => { + it("should return bad status on invalid address ", async () => { + await request(app) + .post(`/aci/${contractIds[2]}`) + .expect(400) + .expect("Content-Type", /json/) + }); + it("should return valid status on valid address ", async () => { + await request(app) + .post(`/aci/${contractIds[0]}`) + .send({network:"ghostnet"}) + .expect(200) + .expect("Content-Type", /json/) + }); + it("should return valid JSON on valid address", async () => { + const res = await request(app) + .post(`/aci/${contractIds[0]}`) + .send({network:"ghostnet"}) + .expect(200) + .expect("Content-Type", /json/) + + expect(res.body).toHaveProperty("counter"); + expect(res.body).toHaveProperty("name"); + expect(res.body).toHaveProperty("type"); + expect(res.body).toHaveProperty("children"); + expect(res.body).toHaveProperty("operations"); + }); + }); + \ No newline at end of file diff --git a/server.js b/server.js index cdd8e41..71c3118 100644 --- a/server.js +++ b/server.js @@ -27,6 +27,7 @@ app.use(require("./routes/polls")); app.use(require("./routes/tokens")); app.use(require("./routes/choices")); app.use(require("./routes/blocks")); +app.use(require("./routes/aci")); app.listen(port, async () => { // perform a database connection when server starts diff --git a/services/aci.service.js b/services/aci.service.js new file mode 100644 index 0000000..da3eabf --- /dev/null +++ b/services/aci.service.js @@ -0,0 +1,388 @@ +const axios = require("axios"); +const TezosToolkit = require('@taquito/taquito').TezosToolkit; +const { Schema } = require('@taquito/michelson-encoder'); + +const networkNameMap = { + mainnet: "mainnet", + ghostnet: "ghostnet", +}; + +const rpcNodes = { + mainnet: "https://mainnet.api.tez.ie", + ghostnet: "https://ghostnet.tezos.marigold.dev", +}; + +function getFieldName(id) { + return `input-${id.toString()}`; +} + +function initTokenTable( + init, + counter, + defaultInit = "" +) { + init[getFieldName(counter)] = defaultInit; +} + + +function parseSchema(counter, token, init, name) { + switch (token.__michelsonType) { + case "bls12_381_fr": + case "bls12_381_g1": + case "bls12_381_g2": + case "chain_id": + case "key_hash": + case "key": + case "bytes": + case "signature": + case "string": + initTokenTable(init, counter); + return [ + { + counter, + name, + type: token.__michelsonType, + children: [], + placeholder: token.__michelsonType, + initValue: "", + }, + counter, + ]; + case "address": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + placeholder: token.__michelsonType, + validate(value) { + if (validateAddress(value) !== 3) { + return `invalid address ${value}`; + } + }, + initValue: "", + }, + counter, + ]; + case "contract": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + placeholder: "contract", + validate(value) { + if (validateAddress(value) !== 3) { + return `invalid address ${value}`; + } + }, + initValue: "", + }, + counter, + ]; + case "bool": + initTokenTable(init, counter, false); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + placeholder: token.__michelsonType, + initValue: false, + }, + counter, + ]; + case "int": + case "nat": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + placeholder: token.__michelsonType, + validate(value) { + if (value && isNaN(Number(value))) { + return `Invalid number, got: ${value}`; + } + }, + initValue: "", + }, + counter, + ]; + case "mutez": + case "timestamp": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + placeholder: token.__michelsonType, + validate(value) { + const n = Number(value); + if (isNaN(n)) { + return `Invalid number, got: ${value}`; + } + if (n < 0) { + return `Number should be greater or equal to 0, got ${value}`; + } + }, + initValue: "", + }, + counter, + ]; + case "never": + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + initValue: "", + }, + counter, + ]; + case "operation": + throw new Error("can't happen: operation is forbidden in the parameter"); + case "chest": + case "chest_key": + throw new Error( + "can't happen(Tezos bug): time lock related instructions is disabled in the client because of a vulnerability" + ); + case "unit": + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + initValue: "", + }, + counter, + ]; + case "tx_rollup_l2_address": + throw new Error("can't happen: this type has been disable"); + case "or": { + const schemas = Object.entries(token.schema); + let new_counter = counter; + const children = []; + let child + schemas.forEach(([k, v]) => { + [child, new_counter] = parseSchema(new_counter + 1, v, init, k); + children.push(child); + }); + initTokenTable(init, counter, schemas[0][0]); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children, + initValue: schemas[0][0], + }, + new_counter, + ]; + } + case "set": + case "list": { + initTokenTable(init, counter, []); + const [child, new_counter] = parseSchema(counter + 1, token.schema, init); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [child], + initValue: [], + }, + new_counter, + ]; + } + case "pair": { + const schemas = Object.entries(token.schema); + let new_counter = counter; + const children = []; + let child; + schemas.forEach(([k, v]) => { + [child, new_counter] = parseSchema(new_counter + 1, v, init, k); + children.push(child); + }); + initTokenTable(init, counter, []); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children, + initValue: [], + }, + new_counter, + ]; + } + case "map": + case "big_map": { + const schemas = Object.entries(token.schema); + let new_counter = counter; + const children = []; + let child; + schemas.forEach(([k, v]) => { + [child, new_counter] = parseSchema(new_counter + 1, v, init, k); + children.push(child); + }); + initTokenTable(init, counter, []); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children, + initValue: [], + }, + new_counter, + ]; + } + case "option": { + const [child, new_counter] = parseSchema(counter + 1, token.schema, init); + + initTokenTable(init, counter, "none"); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [child], + initValue: "none", + }, + new_counter, + ]; + } + case "constant": + throw new Error("can't happen: constant will never be in parameter"); + case "lambda": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + placeholder: "lambda", + children: [], + initValue: "", + }, + counter, + ]; + case "sapling_transaction_deprecated": + case "sapling_transaction": + case "sapling_state": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + placeholder: token.__michelsonType + " " + token.schema.memoSize, + children: [], + initValue: "", + }, + counter, + ]; + case "ticket_deprecated": + case "ticket": + initTokenTable(init, counter); + return [ + { + counter: counter, + name, + type: token.__michelsonType, + children: [], + initValue: "", + }, + counter, + ]; + default: + return assertNever(token); + } +} + +async function parseContractScript(c, initTokenTable = {}) { + let token, counter = 0; + const entryponts = Object.entries(c.entrypoints.entrypoints).reverse(); + if (entryponts.length == 0) { + console.log('Case 1') + // handle the case of only "default" entrypoint + [token, counter] = parseSchema( + 0, + c.parameterSchema.generateSchema(), + initTokenTable, + "entrypoint" + ); + console.log('Token:', token) + } else { + console.log('Case 2') + // handle the case of multiple entrypoints + const childrenToken = []; + let childToken; + let init; + let setInit = false; + for (let i = 0; i < entryponts.length; i++) { + const [entrypoint, type] = entryponts[i]; + const schema = new Schema(type).generateSchema(); + if (schema.__michelsonType !== "or") { + + if (!setInit) { + init = entrypoint; + setInit = true; + } + let new_counter; + [childToken, new_counter] = parseSchema( + counter, + schema, + initTokenTable, + entrypoint + ); + counter = new_counter + 1; + childrenToken.push(childToken); + } + } + counter = counter + 1; + if (typeof init === "undefined") + throw new Error("internal error: initial entrypoint is undefined"); + token = { + counter, + name: "entrypoint", + type: "or", + children: childrenToken, + initValue: init, + }; + initTokenTable[getFieldName(token.counter)] = token.initValue; + } + initTokenTable["counter"] = counter; + return token; +} + +async function getContractEndpoints(network, contractAddress) { + try { + const tezosNetwork = network === 'ghostnet' ? 'ghostnet' : 'mainnet' + const tezos = new TezosToolkit(rpcNodes[tezosNetwork]); + const contract = await tezos.contract.at(contractAddress); + const endpoints = await parseContractScript(contract); + console.log('Endpoints:', endpoints) + return [endpoints, null]; + } catch (error) { + console.error('Error fetching contract:', error); + return [null, error] + } +} + + +module.exports = { + getContractEndpoints +} \ No newline at end of file diff --git a/services/response.util.js b/services/response.util.js index 3f1b970..0d2129c 100644 --- a/services/response.util.js +++ b/services/response.util.js @@ -17,6 +17,8 @@ const catchAsync = (fn) => (req, res, next) => { let responseStatusCode = 500; if (err.statusCode) responseStatusCode = err.statusCode + if(errMessage.includes("InvalidContractAddressError")) responseStatusCode = 400 + try { errMessage = JSON.parse(errMessage) errMessage = errMessage.map(ex => ex.message).join(",") From 6daf1d3460c3f0f9d05a177fa2edc33768eb5065 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Wed, 6 Nov 2024 11:32:22 +0000 Subject: [PATCH 3/7] Added bun.lock in gitignore and updated ghostnet url --- .gitignore | 1 + services/aci.service.js | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e1c416d..3dd713d 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ yarn-error.log* yarn.lock test.js .vscode +bun.lockb diff --git a/services/aci.service.js b/services/aci.service.js index da3eabf..85b1678 100644 --- a/services/aci.service.js +++ b/services/aci.service.js @@ -1,4 +1,3 @@ -const axios = require("axios"); const TezosToolkit = require('@taquito/taquito').TezosToolkit; const { Schema } = require('@taquito/michelson-encoder'); @@ -9,7 +8,7 @@ const networkNameMap = { const rpcNodes = { mainnet: "https://mainnet.api.tez.ie", - ghostnet: "https://ghostnet.tezos.marigold.dev", + ghostnet: "https://ghostnet.smartpy.io", }; function getFieldName(id) { From c8d90b404920972d47216e4178dbb22b33d4727f Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Sun, 5 Jan 2025 16:26:55 +0000 Subject: [PATCH 4/7] XSS Attacks Fixed --- components/daos/index.js | 7 ++++++- services/index.js | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/components/daos/index.js b/components/daos/index.js index 6036f15..ca380ba 100644 --- a/components/daos/index.js +++ b/components/daos/index.js @@ -41,6 +41,7 @@ const getAllLiteOnlyDAOs = async (req, response) => { return { _id: dao._id, ...dao, + description: dao.description?.replace(/<[^>]*>/g, ''), ...token } }); @@ -102,6 +103,7 @@ const getDAOFromContractAddress = async (req, response) => { _id: result._id, ...token, ...result, + description: result.description?.replace(/<[^>]*>/g, ''), }; return response.json(newResult); @@ -121,7 +123,10 @@ const getDAOById = async (req, response) => { const daoDao = await DaoModel.findById(id); console.log({ id, daoDao }) if (daoDao) { - return response.json(daoDao); + return response.json({ + ...daoDao.toJSON(), + description: daoDao.description?.replace(/<[^>]*>/g, ''), + }); } try { diff --git a/services/index.js b/services/index.js index cf39b6c..1327bac 100644 --- a/services/index.js +++ b/services/index.js @@ -18,8 +18,10 @@ const getTokenMetadata = async (contractAddress, network, tokenId) => { const response = await axios.get(url); - if (response.status !== 201) { + if (response.status > 299) { const errorId = nanoid() + const responseData = response?.data + console.log("getTokenMetadata", contractAddress, network, tokenId, responseData, response.status) throw new Error(`Failed to fetch proposals from BakingBad API: ${errorId}`); } From c56e03992f6826dd7e4c1a3a6d7f3e17d6bee91d Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Sat, 1 Mar 2025 00:14:04 +0000 Subject: [PATCH 5/7] Backdated commit to 2025-03-01 00:14:04 --- bun.lockb | Bin 281779 -> 299666 bytes components/choices/index.js | 12 +- components/daos/index.js | 28 +- components/polls/index.js | 185 +++++-- db/models/Dao.model.js | 11 + db/models/Poll.model.js | 1 + middlewares/index.js | 2 + middlewares/secure-payload.js | 257 +++++++++ middlewares/secure-payload.test.js | 827 +++++++++++++++++++++++++++++ package.json | 5 +- server.js | 4 + services/response.util.js | 2 +- 12 files changed, 1280 insertions(+), 54 deletions(-) create mode 100644 middlewares/secure-payload.js create mode 100644 middlewares/secure-payload.test.js diff --git a/bun.lockb b/bun.lockb index 795e85f45f511547e6eaec1f7fc34951fc7694a1..3908f0d1c1f64d49deb51db782f3748da1a907f6 100755 GIT binary patch delta 68736 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 delta 59140 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 G@&5p#8@q`B diff --git a/components/choices/index.js b/components/choices/index.js index e67dca6..74c1c40 100644 --- a/components/choices/index.js +++ b/components/choices/index.js @@ -1,3 +1,4 @@ +const mongoose = require("mongoose"); const express = require("express"); const md5 = require("md5"); // This will help us connect to the database @@ -61,8 +62,13 @@ const updateChoiceById = async (req, response) => { if (timeNow > Number(poll.endTime)) { throw new Error("Proposal Already Ended"); } - - const dao = await DAOModel.findById(poll.daoID) + const daoFindQuery = {} + if(mongoose.isValidObjectId(poll.daoID)){ + daoFindQuery._id = poll.daoID + } else { + daoFindQuery.address = { $regex: new RegExp(`^${poll.daoID}$`, 'i') }; + } + const dao = await DAOModel.findOne(daoFindQuery) if (!dao) throw new Error(`DAO not found: ${poll.daoID}`) const token = await TokenModel.findOne({ tokenAddress: dao.tokenAddress }) @@ -83,7 +89,7 @@ const updateChoiceById = async (req, response) => { ); if (duplicates.length > 0) throw new Error("Duplicate choices found"); - const total = await getEthUserBalanceAtLevel(dao.network, address, dao.tokenAddress, block) + const total = await getEthUserBalanceAtLevel(dao.network || network, address, dao.tokenAddress, block) console.log("EthTotal_UserBalance: ", total) if (!total) { diff --git a/components/daos/index.js b/components/daos/index.js index ca380ba..4eaee3d 100644 --- a/components/daos/index.js +++ b/components/daos/index.js @@ -18,7 +18,7 @@ const dbo = require("../../db/conn"); const { getPkhfromPk } = require("@taquito/utils"); const DaoModel = require("../../db/models/Dao.model"); const TokenModel = require("../../db/models/Token.model"); - +const PollModel = require("../../db/models/Poll.model"); const getAllLiteOnlyDAOs = async (req, response) => { const network = req.body?.network || req.query.network; @@ -120,11 +120,31 @@ const getDAOFromContractAddress = async (req, response) => { const getDAOById = async (req, response) => { const { id } = req.params; - const daoDao = await DaoModel.findById(id); - console.log({ id, daoDao }) + const include = req.query.include + const query = {} + if(mongoose.isValidObjectId(id)) { + query._id = new mongoose.Types.ObjectId(id); + } else { + // query.type = "onchain"; + query.address = { $regex: new RegExp(`^${id}$`, 'i') }; + } + let daoDao = await DaoModel.findOne(query) + daoDao = await daoDao.toObject() + + if(include === "polls"){ + + console.log("Include Polls") + const pollIds = daoDao.polls.map(poll => poll._id); + console.log("Poll IDs", pollIds) + + const polls = await PollModel.find({ daoID: { $regex: new RegExp(`^${id}$`, 'i') } }).populate('choices').lean(); + console.log("Polls", polls) + + daoDao.polls = polls; + } if (daoDao) { return response.json({ - ...daoDao.toJSON(), + ...daoDao, description: daoDao.description?.replace(/<[^>]*>/g, ''), }); } diff --git a/components/polls/index.js b/components/polls/index.js index 135976e..6cd2173 100644 --- a/components/polls/index.js +++ b/components/polls/index.js @@ -11,6 +11,7 @@ const { getIPFSProofFromPayload, } = require("../../utils"); +const axios = require("axios"); const { uploadToIPFS } = require("../../services/ipfs.service"); const DaoModel = require("../../db/models/Dao.model"); const TokenModel = require("../../db/models/Token.model"); @@ -21,6 +22,85 @@ const { getEthCurrentBlockNumber, getEthTotalSupply } = require("../../utils-eth const ObjectId = require("mongodb").ObjectId; +async function _getPollData(mode="lite", { + daoId, network, tokenAddress = null, authorAddress = null, payloadBytes = null +}){ + if(!network?.startsWith("etherlink")) + throw new Error("Network is not supported"); + + const currentTime = new Date().valueOf(); + + if(mode == "onchain"){ + + console.log("tokenAddress", tokenAddress) + const [userTokenBalance, tokenTotalSupply, block] = await Promise.all([ + axios.get(`https://testnet.explorer.etherlink.com/api/v2/tokens/${tokenAddress}/holders`).then(res => res.data).catch(err => ({error: err.message})), + axios.get(`https://testnet.explorer.etherlink.com/api/v2/tokens/${tokenAddress}`).then(res => res.data).catch(err => ({error: err.message})), + getEthCurrentBlockNumber(network).catch(err => ({error: err.message})) + ]); + + console.log(JSON.stringify({userTokenBalance, tokenTotalSupply, block}, null, 2)); + + const payloadBytesHash = md5(payloadBytes); + const doesPollExists = await PollModel.findOne({ payloadBytesHash }); + if (doesPollExists) + throw new Error("Invalid Signature, Poll already exists"); + + + return { + startTime: currentTime, + referenceBlock: block, + totalSupplyAtReferenceBlock: tokenTotalSupply.total_supply, + payloadBytesHash, + doesPollExists + } + } + else{ + + const dao = await DaoModel.findById(daoId); + if(!dao) throw new Error("DAO Does not exist"); + + const token = await TokenModel.findOne({ tokenAddress: dao.tokenAddress }); + if (!token) throw new Error("DAO Token Does not exist in system"); + + const block = await getEthCurrentBlockNumber(dao.network); + const totalSupply = await getEthTotalSupply( + dao.network, + dao.tokenAddress, + block + ); + // TODO: @ashutoshpw To be Implemented + // const userVotingPowerAtCurrentLevel = + // await getUserTotalVotingPowerAtReferenceBlock( + // dao.network, + // dao.tokenAddress, + // dao.daoContract, + // token.tokenID, + // block, + // author + // ); + + // if (userVotingPowerAtCurrentLevel.eq(0) && dao.requiredTokenOwnership) { + // throw new Error( + // "User Doesnt have balance at this level to create proposal" + // ); + // } + const payloadBytesHash = md5(payloadBytes); + const doesPollExists = await PollModel.findOne({ payloadBytesHash }); + if (doesPollExists) + throw new Error("Invalid Signature, Poll already exists"); + + return { + daoId, + startTime: currentTime, + referenceBlock: block, + totalSupplyAtReferenceBlock: totalSupply, + payloadBytesHash, + doesPollExists + } + } +} + const getPollById = async (req, response) => { const { id } = req.params; @@ -29,7 +109,11 @@ const getPollById = async (req, response) => { let pollId = { _id: ObjectId(id) }; const result = await db_connect.collection("Polls").findOne(pollId); - response.json(result); + response.json({ + ...result, + name: result.name?.replace(/<[^>]*>/g, ''), + description: result.description?.replace(/<[^>]*>/g, ''), + }); } catch (error) { console.log("error: ", error); response.status(400).send({ @@ -65,10 +149,12 @@ const addPoll = async (req, response) => { if (network?.startsWith("etherlink")) { try { - const payload = req.payloadObj; + let payload = req.payloadObj; + if(!payload){ + payload = getInputFromSigPayload(payloadBytes); + } const { choices, - daoID, name, description, externalLink, @@ -76,7 +162,8 @@ const addPoll = async (req, response) => { votingStrategy, isXTZ, } = payload; - + const daoID = payload?.daoID || payload?.daoId; + console.log("Payload", payload) if (choices.length === 0) { throw new Error("No choices sent in the request"); } @@ -94,43 +181,29 @@ const addPoll = async (req, response) => { throw new Error("Duplicate choices found"); } - const dao = await DaoModel.findById(daoID); - if (!dao) throw new Error("DAO Does not exist"); - - const token = await TokenModel.findOne({ tokenAddress: dao.tokenAddress }); - if (!token) throw new Error("DAO Token Does not exist in system"); + /** + * @ashutoshpw + * + * For Offchain Debate + * - Get token Addresswithin the payload + * = Get the User Token Balance by following API: https://testnet.explorer.etherlink.com/api/v2/tokens/0xBDAc0fBE8cf84eA51cB9436719f6074dA474ef5D/holders + * - Get token Total Supplyw ith this: https://testnet.explorer.etherlink.com/api/v2/tokens/0xBDAc0fBE8cf84eA51cB9436719f6074dA474ef5D + */ - const block = await getEthCurrentBlockNumber(dao.network); const author = publicKey; - const startTime = currentTime; - const totalSupply = await getEthTotalSupply( - dao.network, - dao.tokenAddress, - block - ); - // TODO: @ashutoshpw To be Implemented - // const userVotingPowerAtCurrentLevel = - // await getUserTotalVotingPowerAtReferenceBlock( - // dao.network, - // dao.tokenAddress, - // dao.daoContract, - // token.tokenID, - // block, - // author - // ); - - // if (userVotingPowerAtCurrentLevel.eq(0) && dao.requiredTokenOwnership) { - // throw new Error( - // "User Doesnt have balance at this level to create proposal" - // ); - // } + const daoMode = daoID?.startsWith("0x") ? "onchain" : "lite"; + const { startTime, referenceBlock, totalSupplyAtReferenceBlock, payloadBytesHash, doesPollExists} = await _getPollData(daoMode, { + daoId: daoID, + network, + authorAddress: publicKey, + tokenAddress: payload?.tokenAddress, + payloadBytes + }); - const payloadBytesHash = md5(payloadBytes); - const doesPollExists = await PollModel.findOne({ payloadBytesHash }); - if (doesPollExists) + if(doesPollExists) throw new Error("Invalid Signature, Poll already exists"); - + const PollData = { name, author, @@ -139,10 +212,11 @@ const addPoll = async (req, response) => { startTime, endTime, daoID, - referenceBlock: block, - totalSupplyAtReferenceBlock: totalSupply, + referenceBlock, + totalSupplyAtReferenceBlock, signature, - votingStrategy, + votingStrategy: payload?.votingStrategy || 0, + isXTZ: payload?.isXTZ || false, payloadBytes, payloadBytesHash, cidLink: "", @@ -159,14 +233,35 @@ const addPoll = async (req, response) => { }; }); - await ChoiceModel.insertMany(choicesData); + const choicesObj = await ChoiceModel.insertMany(choicesData); + const choicesIds = choicesObj.map(choice => choice._id); + console.log({choicesIds}) - await DaoModel.updateOne( - { _id: ObjectId(daoID) }, - { - $push: { polls: pollId }, - } + await PollModel.updateOne( + { _id: pollId }, + { $set: { choices: choicesIds } } ); + + if(daoMode == "lite"){ + await DaoModel.updateOne( + { _id: ObjectId(daoID) }, + { + $push: { polls: pollId }, + } + ); + }else{ + await DaoModel.findOneAndUpdate( + { address: daoID }, + { + name: daoID, + tokenAddress: payload?.tokenAddress, + tokenType:"erc20", + $push: { polls: pollId }, + votingAddressesCount: 0 // TODO: @ashutoshpw + }, + { upsert: true, new: true } + ); + } return response.status(200).send({ message: "Poll Created Successfully", pollId, diff --git a/db/models/Dao.model.js b/db/models/Dao.model.js index 8354ced..35586ac 100644 --- a/db/models/Dao.model.js +++ b/db/models/Dao.model.js @@ -6,11 +6,22 @@ const Schema = mongoose.Schema; const PollSchema = new Schema({ oid: { type: mongoose.Schema.Types.ObjectId, + ref: "Poll", required: true, }, }); const DaoModelSchema = new Schema({ + type:{ + type: String, + enum:["onchain","lite"], + default: "lite", + }, + address:{ + type: String, + index: true, + sparse: true + }, name: { type: String, required: true, diff --git a/db/models/Poll.model.js b/db/models/Poll.model.js index 38c1ac9..ea2cb66 100644 --- a/db/models/Poll.model.js +++ b/db/models/Poll.model.js @@ -30,6 +30,7 @@ const PollModelSchema = new Schema({ choices: [{ type: mongoose.Schema.Types.ObjectId, required: true, + ref: 'Choice', }], totalSupplyAtReferenceBlock: { type: String, diff --git a/middlewares/index.js b/middlewares/index.js index 2eec905..4bad704 100644 --- a/middlewares/index.js +++ b/middlewares/index.js @@ -1,5 +1,6 @@ const { verifySignature, bytes2Char } = require("@taquito/utils"); const { verityEthSignture } = require("../utils-eth"); +const securePayload = require("./secure-payload"); function splitAtBrace(inputString) { const squareBracketIndex = inputString.indexOf('['); @@ -74,4 +75,5 @@ const requireSignature = async (request, response, next) => { module.exports = { requireSignature, + securePayload, }; diff --git a/middlewares/secure-payload.js b/middlewares/secure-payload.js new file mode 100644 index 0000000..f5ebfdf --- /dev/null +++ b/middlewares/secure-payload.js @@ -0,0 +1,257 @@ +const createDOMPurify = require('dompurify'); +const { JSDOM } = require('jsdom'); + +// Create a DOMPurify instance with a virtual DOM +const window = new JSDOM('').window; +const DOMPurify = createDOMPurify(window); + +/** + * Remove position:absolute and position:fixed from style strings + * Also sanitize any embedded HTML or JavaScript + * @param {string} styleString - CSS style string + * @returns {string} - Cleaned style string + */ +function removePositioningStyles(styleString) { + if (!styleString) return styleString; + + // First, remove any embedded script tags or other HTML + let cleanedString = styleString + .replace(/)<[^<]*)*<\/script>/gi, '') + .replace(/<\/?\s*script\s*>/gi, '') + .replace(/<[^>]*>/g, ''); // Remove any other HTML tags + + // Split the style string by semicolons and filter out position:absolute/fixed/relative + const cleanedStyles = cleanedString + .split(';') + .filter(style => { + const trimmed = style.trim(); + return !( + trimmed.toLowerCase().startsWith('position:absolute') || + trimmed.toLowerCase().startsWith('position:fixed') || + trimmed.toLowerCase().startsWith('position:relative') || + trimmed.toLowerCase().match(/^\s*position\s*:\s*absolute/) || + trimmed.toLowerCase().match(/^\s*position\s*:\s*fixed/) || + trimmed.toLowerCase().match(/^\s*position\s*:\s*relative/) + ); + }) + .map(style => style.trim()) // Trim each style to avoid extra spaces + .filter(Boolean) // Remove empty strings + .join('; '); + + return cleanedStyles ? cleanedStyles + ';' : ''; +} + +// Configure DOMPurify for security +DOMPurify.setConfig({ + KEEP_CONTENT: true, + RETURN_DOM: false, + RETURN_DOM_FRAGMENT: false, + RETURN_DOM_IMPORT: false, + WHOLE_DOCUMENT: false, + FORCE_BODY: false, + // Allow common HTML5 elements but restrict potentially dangerous ones + ADD_TAGS: ['summary', 'details', 'caption', 'figure', 'figcaption'], + // Restrict dangerous CSS properties beyond positioning + FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input', 'button', 'base'], + FORBID_ATTR: [ + // Event handlers + 'onerror', 'onload', 'onclick', 'onmouseover', 'onmouseout', 'onmouseenter', 'onmouseleave', + 'onfocus', 'onblur', 'onchange', 'onsubmit', 'onreset', 'onselect', 'onabort', + // Other dangerous attributes + 'ping', 'formaction', 'action', 'method' + ] +}); + +// Configure DOMPurify hooks to remove position styling +DOMPurify.addHook('afterSanitizeAttributes', node => { + // Clean style attributes + if (node.hasAttribute('style')) { + // Get the style attribute and clean it + const styleAttr = node.getAttribute('style'); + const cleanedStyle = removePositioningStyles(styleAttr); + + // Set the cleaned style back + if (cleanedStyle !== styleAttr) { + if (cleanedStyle.trim()) { + node.setAttribute('style', cleanedStyle); + } else { + node.removeAttribute('style'); + } + } + } + + // Clean href attributes to prevent javascript: URLs + if (node.hasAttribute('href')) { + const href = node.getAttribute('href'); + if (/^\s*(?:javascript|data|vbscript|file):/i.test(href)) { + node.removeAttribute('href'); + } + } + + // Clean src attributes + if (node.hasAttribute('src')) { + const src = node.getAttribute('src'); + if (/^\s*(?:javascript|data|vbscript|file):/i.test(src)) { + node.removeAttribute('src'); + } + } + + // Ensure all anchor links open in new window with security attributes + if (node.tagName === 'A') { + // Set target="_blank" to open in new window + node.setAttribute('target', '_blank'); + // Set rel attribute for security + node.setAttribute('rel', 'nofollow noopener noreferrer'); + } +}); + +// Add hook to clean CSS properties in style attributes +DOMPurify.addHook('uponSanitizeAttribute', (node, data) => { + if (data.attrName === 'style') { + // Remove potentially dangerous CSS constructs (expression, url, etc.) + data.attrValue = data.attrValue + .replace(/expression\s*\(.*\)/gi, '') + .replace(/url\s*\(\s*['"]*\s*javascript:/gi, '') + .replace(/url\s*\(\s*['"]*\s*data:/gi, '') + // Remove script tags embedded in style attributes + .replace(/)<[^<]*)*<\/script>/gi, '') + .replace(/<\/?\s*script\s*>/gi, ''); + } +}); + +/** + * Recursively sanitizes an object's string properties to prevent XSS attacks + * @param {*} obj - The object to sanitize + * @param {Set} seen - Set of already processed objects to prevent circular refs + * @returns {*} - The sanitized object + */ +function sanitizeObject(obj, seen = new WeakSet()) { + // Handle primitives + if (obj === null || typeof obj !== 'object') { + // Sanitize if it's a string + if (typeof obj === 'string') { + return DOMPurify.sanitize(obj, { + ALLOWED_TAGS: [ + 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', + 'li', 'b', 'i', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', + 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre', 'span', 'img', + 'svg', 'summary', 'details', 'figure', 'figcaption' + ], + ALLOWED_ATTR: [ + 'href', 'name', 'target', 'src', 'alt', 'class', 'id', 'style', + 'title', 'width', 'height', 'controls', 'download', 'rel', + 'border', 'colspan', 'rowspan', 'cellspacing', 'cellpadding', + // Allow basic data-* attributes but they can be restricted further if needed + 'data-id', 'data-name', 'data-value', 'data-user' + ], + // Prevent usage of JavaScript URLs and event handlers + FORBID_ATTR: [ + 'onerror', 'onload', 'onclick', 'onmouseover', 'onmouseout', 'onmouseenter', 'onmouseleave', + 'onfocus', 'onblur', 'onchange', 'onsubmit', 'onreset', 'onselect', 'onabort', + 'formaction', 'action', 'method' + ], + // Strip JS events + FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input', 'button', 'base'], + // Prevent potentially dangerous URLs + SANITIZE_DOM: true, + KEEP_CONTENT: true + }); + } + return obj; + } + + // Detect circular references + if (seen.has(obj)) { + return '[Circular Reference]'; + } + + // Add object to seen set + seen.add(obj); + + // Handle arrays + if (Array.isArray(obj)) { + return obj.map(item => sanitizeObject(item, seen)); + } + + // Handle objects + const sanitized = {}; + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + const value = obj[key]; + + if (typeof value === 'string') { + // If it looks like a CSS style string directly (not in HTML) + if (key === 'style' || key.endsWith('Style') || key.includes('style')) { + sanitized[key] = removePositioningStyles(value); + } else { + // Sanitize the string value while preserving legitimate HTML from WYSIWYG + sanitized[key] = DOMPurify.sanitize(value, { + ALLOWED_TAGS: [ + 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', + 'li', 'b', 'i', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', + 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre', 'span', 'img', + 'svg', 'summary', 'details', 'figure', 'figcaption' + ], + ALLOWED_ATTR: [ + 'href', 'name', 'target', 'src', 'alt', 'class', 'id', 'style', + 'title', 'width', 'height', 'controls', 'download', 'rel', + 'border', 'colspan', 'rowspan', 'cellspacing', 'cellpadding', + // Allow basic data-* attributes + 'data-id', 'data-name', 'data-value', 'data-user' + ], + // Prevent usage of JavaScript URLs + FORBID_ATTR: [ + 'onerror', 'onload', 'onclick', 'onmouseover', 'onmouseout', 'onmouseenter', 'onmouseleave', + 'onfocus', 'onblur', 'onchange', 'onsubmit', 'onreset', 'onselect', 'onabort', + 'formaction', 'action', 'method' + ], + // Strip JS events + FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input', 'button', 'base'], + // Prevent potentially dangerous URLs + SANITIZE_DOM: true, + KEEP_CONTENT: true + }); + } + } else if (typeof value === 'object' && value !== null) { + // Recursively sanitize nested objects, passing the seen set + sanitized[key] = sanitizeObject(value, seen); + } else { + // For non-string values, keep them as-is + sanitized[key] = value; + } + } + } + + return sanitized; +} + +/** + * Middleware to protect against XSS attacks + * Sanitizes request body, query, and params + */ +const securePayload = (req, res, next) => { + try { + // Sanitize the request body, query params, and URL params + if (req.body && typeof req.body === 'object') { + req.body = sanitizeObject(req.body); + } + + if (req.query && typeof req.query === 'object') { + req.query = sanitizeObject(req.query); + } + + if (req.params && typeof req.params === 'object') { + req.params = sanitizeObject(req.params); + } + + next(); + } catch (error) { + console.error('XSS protection error:', error); + return res.status(400).json({ + success: false, + message: 'Potentially malicious content detected' + }); + } +}; + +module.exports = securePayload; diff --git a/middlewares/secure-payload.test.js b/middlewares/secure-payload.test.js new file mode 100644 index 0000000..23b304f --- /dev/null +++ b/middlewares/secure-payload.test.js @@ -0,0 +1,827 @@ +const securePayload = require('./secure-payload'); + +const mockRequest = (body = {}, query = {}, params = {}) => ({ + body, + query, + params +}); + +const mockResponse = () => { + const res = {}; + res.status = jest.fn().mockReturnValue(res); + res.json = jest.fn().mockReturnValue(res); + return res; +}; + +const mockNext = jest.fn(); + +describe('securePayload Middleware', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + // Basic functionality tests + describe('Basic Functionality', () => { + test('should call next() for clean requests', () => { + const req = mockRequest({ text: 'clean text' }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(mockNext).toHaveBeenCalled(); + expect(req.body.text).toBe('clean text'); + }); + + test('should handle empty body', () => { + const req = mockRequest(); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(mockNext).toHaveBeenCalled(); + }); + + test('should sanitize multiple request properties', () => { + const req = mockRequest( + { bodyText: '

Body

' }, + { queryText: '

Query

' }, + { paramText: '

Param

' } + ); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(mockNext).toHaveBeenCalled(); + expect(req.body.bodyText).toBe('

Body

'); + expect(req.query.queryText).toBe('

Query

'); + expect(req.params.paramText).toBe('

Param

'); + }); + }); + + // XSS Attack Handling + describe('XSS Attack Prevention', () => { + test('should remove script tags', () => { + const req = mockRequest({ text: 'Hello world' }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.text).toBe('Hello world'); + }); + + test('should remove event handlers', () => { + const req = mockRequest({ text: '' }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Updated to match DOMPurify's output format (no self-closing tags) + expect(req.body.text).toBe(''); + }); + + test('should remove javascript: URLs', () => { + const req = mockRequest({ + text: 'Click me' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // DOMPurify should remove or sanitize the javascript: URL + expect(req.body.text).not.toContain('javascript:'); + }); + + test('should handle complex nested XSS attacks', () => { + const req = mockRequest({ + text: '

Good content

' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.text).toBe('

Good content

'); + }); + }); + + // Position Styling Tests + describe('Position Style Handling', () => { + test('should remove position:absolute from style attributes', () => { + const req = mockRequest({ + html: '
Test
' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Style attribute should not contain position:absolute + expect(req.body.html).toContain('
{ + const req = mockRequest({ + html: 'Test' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Style attribute should not contain position:fixed + expect(req.body.html).toContain(' { + const req = mockRequest({ + html: '
Test
' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Style attribute should not contain position:absolute with spaces + expect(req.body.html).toContain('
{ + const req = mockRequest({ + html: '
Test
' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.html).toBe('
Test
'); + }); + + test('should clean direct style objects in request', () => { + const req = mockRequest({ + style: 'position:fixed; color:red;', + divStyle: 'width:100px; position:absolute;' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Direct style properties should not contain position + expect(req.body.style).toContain('color:red'); + expect(req.body.style).not.toContain('position:fixed'); + expect(req.body.divStyle).toContain('width:100px'); + expect(req.body.divStyle).not.toContain('position:absolute'); + }); + + test('should clean position styles in nested objects', () => { + const req = mockRequest({ + component: { + style: 'position:absolute; margin:10px;', + html: '
Nested
' + } + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Nested style properties should not contain position + expect(req.body.component.style).toContain('margin:10px'); + expect(req.body.component.style).not.toContain('position:absolute'); + expect(req.body.component.html).toBe('
Nested
'); + }); + + test('should handle embedded styles within HTML content', () => { + const req = mockRequest({ + content: ` +
+

Positioned text

+ Fixed span +
+

Heading

+ Normal text +
+
+ ` + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Check that position styles are removed but other styles remain + expect(req.body.content).toContain('

'); + expect(req.body.content).toContain(''); + expect(req.body.content).toContain('

'); + expect(req.body.content).not.toContain('position:absolute'); + expect(req.body.content).not.toContain('position:fixed'); + }); + }); + + // WYSIWYG Content Tests + describe('WYSIWYG Editor Content', () => { + test('should allow legitimate HTML from WYSIWYG editors', () => { + const wysiwygContent = ` +

Title

+

This is a formatted paragraph with emphasis.

+
    +
  • List item 1
  • +
  • List item 2
  • +
+
This is a quote
+

Link

+ Description + `; + + const req = mockRequest({ content: wysiwygContent }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // All legitimate HTML elements should be preserved + expect(req.body.content).toContain('

'); + expect(req.body.content).toContain(''); + expect(req.body.content).toContain(''); + expect(req.body.content).toContain('
    '); + expect(req.body.content).toContain('
  • '); + expect(req.body.content).toContain('
    '); + expect(req.body.content).toContain(' { + const wysiwygContent = ` +

    Title

    +

    Paragraph

    +
    Box
    + `; + + const req = mockRequest({ content: wysiwygContent }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Should preserve styling but remove position + expect(req.body.content).toContain('style="color:blue; text-align:center;"'); + expect(req.body.content).toContain('style="font-size:16px; top:0;"'); + expect(req.body.content).toContain('style="background-color:#eee; margin:10px;"'); + + // Position styles should be removed + expect(req.body.content).not.toContain('position:absolute'); + expect(req.body.content).not.toContain('position:fixed'); + }); + + test('should handle complex styled content with mixed elements', () => { + const req = mockRequest({ + content: ` +
    +

    Article Title

    +
    + John Doe + Editor +
    +

    + This is a paragraph with bold text + and emphasized text. +

    +
    + ` + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + const sanitizedContent = req.body.content; + + // Check that elements and allowed attributes exist + expect(sanitizedContent).toContain('
    '); + expect(sanitizedContent).toContain('

    '); + expect(sanitizedContent).toContain('class="author"'); + + // Check that specific style properties are present + expect(sanitizedContent).toContain('top:50px'); + expect(sanitizedContent).toContain('right:20px'); + expect(sanitizedContent).toContain('color:#333'); + expect(sanitizedContent).toContain('font-weight:bold'); + expect(sanitizedContent).toContain('font-style:italic'); + expect(sanitizedContent).toContain('bottom:10px'); + expect(sanitizedContent).toContain('margin:15px'); + expect(sanitizedContent).toContain('padding:10px'); + expect(sanitizedContent).toContain('left:5px'); + expect(sanitizedContent).toContain('right:0'); + + // Check that all position styles are removed + expect(sanitizedContent).not.toContain('position:absolute'); + expect(sanitizedContent).not.toContain('position:fixed'); + expect(sanitizedContent).not.toContain('position:relative'); + }); + }); + + // Error Handling Tests + describe('Error Handling', () => { + test('should handle errors gracefully', () => { + // Create an object that will cause an error when processed + const circularObj = {}; + circularObj.circular = circularObj; // Circular reference + + const req = mockRequest(circularObj); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Now we should successfully handle circular references + expect(mockNext).toHaveBeenCalled(); + expect(req.body.circular).toBe('[Circular Reference]'); + }); + }); + + // Complex Data Structures Tests + describe('Complex Data Structures', () => { + test('should sanitize arrays of objects', () => { + const req = mockRequest({ + items: [ + { content: '

    Item 1

    ' }, + { content: '
    Item 2
    ' }, + { content: '

    Item 3

    ' } + ] + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.items[0].content).toBe('

    Item 1

    '); + expect(req.body.items[1].content).toBe('
    Item 2
    '); + expect(req.body.items[2].content).toBe('

    Item 3

    '); + }); + + test('should handle deeply nested objects', () => { + const req = mockRequest({ + level1: { + level2: { + level3: { + level4: { + html: '

    Deep

    ', + text: '' + } + } + } + } + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.level1.level2.level3.level4.html).toBe('

    Deep

    '); + expect(req.body.level1.level2.level3.level4.text).toBe(''); + }); + + test('should handle mixed data types', () => { + const req = mockRequest({ + string: '

    Text

    ', + number: 42, + boolean: true, + null: null, + undefined: undefined, + array: [1, 2, ''], + object: { key: '
    Value
    ' } + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.string).toBe('

    Text

    '); + expect(req.body.number).toBe(42); + expect(req.body.boolean).toBe(true); + expect(req.body.null).toBeNull(); + expect(req.body.undefined).toBeUndefined(); + expect(req.body.array[0]).toBe(1); + expect(req.body.array[1]).toBe(2); + expect(req.body.array[2]).not.toContain('Value

    '); + }); + + test('should handle HTML strings in arrays', () => { + const req = mockRequest({ + htmlItems: [ + '
    Red
    ', + 'Small', + '

    Normal

    ' + ] + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.htmlItems[0]).toContain('Normal

    '); + }); + }); + + // Edge Cases + describe('Edge Cases', () => { + test('should handle empty strings', () => { + const req = mockRequest({ text: '' }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.text).toBe(''); + }); + + test('should handle non-string primitives', () => { + const req = mockRequest({ + number: 42, + boolean: true, + nullValue: null, + undefinedValue: undefined + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.number).toBe(42); + expect(req.body.boolean).toBe(true); + expect(req.body.nullValue).toBeNull(); + expect(req.body.undefinedValue).toBeUndefined(); + }); + + test('should detect and handle circular references', () => { + const circularObj = {}; + const nestedObj = { ref: circularObj }; + circularObj.back = nestedObj; + + const req = mockRequest({ + circular: circularObj + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(mockNext).toHaveBeenCalled(); + expect(req.body.circular.back.ref).toBe('[Circular Reference]'); + }); + + test('should handle style attribute with only position properties', () => { + const req = mockRequest({ + html: [ + '
    Only position
    ', + 'Position with space', + '

    Position with extra spaces

    ' + ] + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Check that position styles are removed + expect(req.body.html[0]).not.toContain('style='); + expect(req.body.html[0]).toContain('
    Only position
    '); + + expect(req.body.html[1]).not.toContain('style='); + expect(req.body.html[1]).toContain('Position with space'); + + expect(req.body.html[2]).not.toContain('style='); + expect(req.body.html[2]).toContain('

    Position with extra spaces

    '); + }); + }); + + // Add more comprehensive XSS attack pattern tests + describe('Advanced XSS Attack Prevention', () => { + test('should sanitize SVG-based XSS attacks', () => { + const req = mockRequest({ + svg: '', + svgOnload: '', + svgWithXlink: '' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.svg).not.toContain('' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.unicodeXss).not.toContain('onerror'); + expect(req.body.utf8Xss).not.toContain('onclick'); + expect(req.body.multibyteXss).not.toContain('alert'); + }); + + test('should handle dangerous URL schemes', () => { + const req = mockRequest({ + dataUri: '
    Data URI', + vbscript: 'VBScript', + jsEncode: 'Encoded JavaScript' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.dataUri).not.toContain('data:text/html'); + expect(req.body.vbscript).not.toContain('vbscript:'); + expect(req.body.jsEncode).not.toContain('javascript:'); + }); + }); + + // Test for CSS properties that could be used maliciously beyond just positioning + describe('Malicious CSS Property Handling', () => { + test('should handle CSS injection with dangerous properties', () => { + const req = mockRequest({ + zIndex: '
    High z-index
    ', + pointerEvents: '
    No pointer events
    ', + opacity: '
    Invisible div
    ', + overflow: '
    Hidden content
    ' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Position should be removed, but other properties are allowed + expect(req.body.zIndex).not.toContain('position:absolute'); + expect(req.body.zIndex).toContain('z-index:999999'); + expect(req.body.pointerEvents).toContain('pointer-events:none'); + expect(req.body.opacity).toContain('opacity:0'); + expect(req.body.overflow).toContain('overflow:hidden'); + }); + + test('should handle combined position and size manipulation', () => { + const req = mockRequest({ + combined: '
    Fullscreen overlay
    ' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Position should be removed, but size properties are maintained + expect(req.body.combined).not.toContain('position:fixed'); + expect(req.body.combined).toContain('height:100vh'); + expect(req.body.combined).toContain('width:100vw'); + expect(req.body.combined).toContain('top:0'); + expect(req.body.combined).toContain('left:0'); + }); + }); + + // Edge cases with malformed content + describe('Malformed Content Handling', () => { + test('should sanitize malformed HTML', () => { + const req = mockRequest({ + unclosed: '

    Unclosed paragraph', + unquoted: '

    Unquoted attributes
    ', + nested: '
    Nested script in attribute
    ', + multipleNestedScripts: 'Multiple scripts', + styleWithHtml: '

    HTML in style

    ' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.unclosed).toContain('

    Unclosed paragraph

    '); + expect(req.body.unquoted).not.toContain('onclick'); + expect(req.body.nested).not.toContain('After', + controlChars: 'Text with \x01 control \x02 characters \x1F and script ', + nonPrintable: 'Non-printable \u200D characters \u200C with ' + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + expect(req.body.nullByte).not.toContain('">Data Link', + }); + const res = mockResponse(); + + securePayload(req, res, mockNext); + + // Links should be sanitized but still have target/rel attributes + expect(req.body.jsLink).not.toContain('javascript:'); + expect(req.body.jsLink).toContain('target="_blank"'); + expect(req.body.jsLink).toContain('rel="nofollow noopener noreferrer"'); + + expect(req.body.dataLink).not.toContain('data:text/html'); + expect(req.body.dataLink).toContain('target="_blank"'); + expect(req.body.dataLink).toContain('rel="nofollow noopener noreferrer"'); + }); + }); +}); diff --git a/package.json b/package.json index ddba4ac..f30bc14 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "test": "jest", "start": "node ./server.js", - "dev": "nodemon ./server.js" + "dev": "nodemon ./server.js", + "test:secure-payload": "jest middlewares/secure-payload.test.js" }, "jest": { "testEnvironment": "node", @@ -22,9 +23,11 @@ "axios": "^1.1.3", "bignumber.js": "^9.1.1", "cors": "^2.8.5", + "dompurify": "^3.2.4", "dotenv": "^16.0.3", "ethers": "^6.13.2", "express": "^4.18.1", + "jsdom": "^26.0.0", "md5": "^2.3.0", "mime": "^4.0.1", "mongodb": "^4.10.0", diff --git a/server.js b/server.js index 71c3118..27bd558 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ const express = require("express"); const cors = require("cors"); const mongoose = require('mongoose'); +const { securePayload } = require("./middlewares"); require("dotenv").config({ path: "./config.env" }); @@ -18,6 +19,9 @@ app.use( app.use(express.json()); +// Apply XSS protection middleware globally +app.use(securePayload); + // Include Swagger route at the base URL app.use('/', require('./routes/swagger')); diff --git a/services/response.util.js b/services/response.util.js index 0d2129c..4a6c0b8 100644 --- a/services/response.util.js +++ b/services/response.util.js @@ -1,7 +1,7 @@ const catchAsync = (fn) => (req, res, next) => { Promise.resolve(fn(req, res, next)).catch((err) => { const errName = err.name - const errMessage = err.message; + let errMessage = err.message; console.error({ errName }) if (!errMessage) errMessage = err; From dd1de613df77395feaab024540df69652663aa24 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Tue, 4 Mar 2025 17:38:33 +0000 Subject: [PATCH 6/7] forbit style tag --- middlewares/secure-payload.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middlewares/secure-payload.js b/middlewares/secure-payload.js index f5ebfdf..a5dd626 100644 --- a/middlewares/secure-payload.js +++ b/middlewares/secure-payload.js @@ -151,7 +151,7 @@ function sanitizeObject(obj, seen = new WeakSet()) { 'formaction', 'action', 'method' ], // Strip JS events - FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input', 'button', 'base'], + FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input', 'button', 'base','style'], // Prevent potentially dangerous URLs SANITIZE_DOM: true, KEEP_CONTENT: true From 384822c1ac1a84524c04166c24cc869bfbba1105 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Tue, 25 Mar 2025 11:11:37 +0530 Subject: [PATCH 7/7] rebased on feat/secure-api --- Dockerfile | 39 + fly.toml | 22 + pnpm-lock.yaml | 7181 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 7242 insertions(+) create mode 100644 Dockerfile create mode 100644 fly.toml create mode 100644 pnpm-lock.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3ffd520 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# syntax = docker/dockerfile:1 + +# Adjust NODE_VERSION as desired +ARG NODE_VERSION=18.20.0 +FROM node:${NODE_VERSION}-slim as base + +LABEL fly_launch_runtime="Node.js" + +# Node.js app lives here +WORKDIR /app + +# Set production environment +ENV NODE_ENV="production" + + +# Throw-away build stage to reduce size of final image +FROM base as build + +# Install packages needed to build node modules +RUN apt-get update -qq && \ +apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3 + +# Install node modules +COPY --link package-lock.json package.json ./ +RUN npm ci + +# Copy application code +COPY --link . . + + +# Final stage for app image +FROM base + +# Copy built application +COPY --from=build /app /app + +# Start the server by default, this can be overwritten at runtime +EXPOSE 3000 +CMD [ "npm", "run", "start" ] \ No newline at end of file diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..5ce1630 --- /dev/null +++ b/fly.toml @@ -0,0 +1,22 @@ +# fly.toml app configuration file generated for dev-homebase on 2024-08-20T15:57:15+05:30 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = 'dev-homebase' +primary_region = 'ams' + +[build] + +[http_service] + internal_port = 5050 + force_https = true + auto_stop_machines = 'stop' + auto_start_machines = true + min_machines_running = 0 + processes = ['app'] + +[[vm]] + memory = '1gb' + cpu_kind = 'shared' + cpus = 1 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c02ceda --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,7181 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@taquito/taquito': + specifier: ^17.3.0 + version: 17.5.2(encoding@0.1.13) + '@taquito/utils': + specifier: ^14.0.0 + version: 14.2.0 + axios: + specifier: ^1.1.3 + version: 1.8.4 + bignumber.js: + specifier: ^9.1.1 + version: 9.1.2 + cors: + specifier: ^2.8.5 + version: 2.8.5 + dompurify: + specifier: ^3.2.4 + version: 3.2.4 + dotenv: + specifier: ^16.0.3 + version: 16.4.7 + ethers: + specifier: ^6.13.2 + version: 6.13.5 + express: + specifier: ^4.18.1 + version: 4.21.2 + jsdom: + specifier: ^26.0.0 + version: 26.0.0 + md5: + specifier: ^2.3.0 + version: 2.3.0 + mime: + specifier: ^4.0.1 + version: 4.0.6 + mongodb: + specifier: ^4.10.0 + version: 4.17.2 + mongoose: + specifier: ^8.5.2 + version: 8.13.0(@aws-sdk/credential-providers@3.774.0)(socks@2.8.4) + nanoid: + specifier: ^3.3.7 + version: 3.3.11 + nft.storage: + specifier: ^7.1.1 + version: 7.2.0(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)) + persistent-cache: + specifier: ^1.1.2 + version: 1.1.2 + swagger-jsdoc: + specifier: ^6.2.8 + version: 6.2.8(openapi-types@12.1.3) + swagger-ui-express: + specifier: ^5.0.0 + version: 5.0.1(express@4.21.2) + devDependencies: + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.13) + jest-mock: + specifier: ^29.7.0 + version: 29.7.0 + mongodb-memory-server: + specifier: ^9.1.4 + version: 9.5.0(@aws-sdk/credential-providers@3.774.0) + nodemon: + specifier: ^3.1.0 + version: 3.1.9 + supertest: + specifier: ^6.3.3 + version: 6.3.4 + +packages: + + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apidevtools/json-schema-ref-parser@9.1.2': + resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + + '@apidevtools/swagger-parser@10.0.3': + resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==} + peerDependencies: + openapi-types: '>=7' + + '@asamuzakjp/css-color@3.1.1': + resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + + '@assemblyscript/loader@0.9.4': + resolution: {integrity: sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-cognito-identity@3.774.0': + resolution: {integrity: sha512-lOHskgBOvufIhg/RB+MoNQnoNwvOrInXH9J7zuGcrYHsj8yOKUc/hZbT25452dlNb9NXI6ZjZVSIsYw7uqd3Bg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.774.0': + resolution: {integrity: sha512-bN+wd2gpTq+DNJ/fZdam/mX6K3TcVdZBIvxaVtg+imep6xAuRukdFhsoG0cDzk96+WHPCOhkyi+6lFljCof43Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.774.0': + resolution: {integrity: sha512-JDkAAlPyGWMX42L4Cv8mxybwHTOoFweNbNrOc5oQJhFxZAe1zkW4uLTEfr79vYhnXCFbThCyPpBotmo3U2vULA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-cognito-identity@3.774.0': + resolution: {integrity: sha512-xK1qiXH6RId+jTEPSWjRvnc47xAtGyAp2qXIQmCXWtNgoPRRsdvHAVHwkI3ND73Ze+rdpkTGK5Bbl7ZkBdQEDQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.774.0': + resolution: {integrity: sha512-FkSDBi9Ly0bmzyrMDeqQq1lGsFMrrd/bIB3c9VD4Llh0sPLxB/DU31+VTPTuQ0pBPz4sX5Vay6tLy43DStzcFQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.774.0': + resolution: {integrity: sha512-iurWGQColf52HpHeHCQs/LnSjZ0Ufq3VtSQx/6QdZwIhmgbbqvGMAaBJg41SQjWhpqdufE96HzcaCJw/lnCefQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.774.0': + resolution: {integrity: sha512-+AsJOX9pGsnGPAC8wQw7LAO8ZfXzjXTjJxSP1fvg04PX7OBk4zwhVaryH6pu5raan+9cVbfEO1Z7EEMdkweGQA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.774.0': + resolution: {integrity: sha512-/t+TNhHNW6BNyf7Lgv6I0NUfFk6/dz4+6dUjopRxpDVJtp1YvNza0Zhl25ffRkqX4CKmuXyJYusDbbObcsncUA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.774.0': + resolution: {integrity: sha512-lycBRY1NeWa46LefN258m1MRVUPQgvf6TPA6ZYajyq6/dCr6BPeuUoUAyrzePTPlxV/M25YXNiyORHjjwlK0ug==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.774.0': + resolution: {integrity: sha512-j7vbGCWF6dVpd9qiT0PQGzY4NKf8KUa86sSoosGGbtu0dV9T/Y0s/fvPZ0F8ZyuPIKUMJaBpIJYZ/ECZRfT2mg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.774.0': + resolution: {integrity: sha512-kuE5Hdqm9xXdrYBWCU6l2aM3W3HBtZrIBgyf0y41LulJHwld1nvIySus/lILdzbipmUAv9FI07B8TF5y7p/aFA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-providers@3.774.0': + resolution: {integrity: sha512-RQH18YmoYGwzx7sNDn/xlyOJWBSj89LmaGJG0XkInTiAzJhM7gLtEktYd6omum+3yMxb22YzP1ihK4giP2hieA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.774.0': + resolution: {integrity: sha512-7QHA0ZyEBVfyJqmIc0FW4MUtPdrWhDsHQudsvBCHFS+mqP5fhpU/o4e5RQ+0M7tQqDE65+8MrZRniRa+Txz3xA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.734.0': + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.772.0': + resolution: {integrity: sha512-zg0LjJa4v7fcLzn5QzZvtVS+qyvmsnu7oQnb86l6ckduZpWDCDC9+A0ZzcXTrxblPCJd3JqkoG1+Gzi4S4Ny/Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.774.0': + resolution: {integrity: sha512-SVDeBV6DESgc9zex1Wk5XYbUqRI1tmJYQor47uKqD18r6UaCpvzVOBP4x8l/6hteAYxsWER6ZZmsjBQkenEuFQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.774.0': + resolution: {integrity: sha512-00+UiYvxiZaDFVzn87kPpiZ/GiEWNaTNzC82C+bIyXt1M9AnAR6PAnnvMErTFwyG+Un6n2ai/I81wvJ1ftFmeQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.734.0': + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.774.0': + resolution: {integrity: sha512-DDERwCduWFFXj7gx3qvnaB8GlnCUpQ8ZA03qI4QFokWu3EyHNK+hjp3nN5Dg81fI0Z82LRe30Q2uDsLBwNCZDg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.734.0': + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.743.0': + resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.734.0': + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + + '@aws-sdk/util-user-agent-node@3.774.0': + resolution: {integrity: sha512-kFmnK4sf5Wco8mkzO2PszqDXEwtQ5H896tUxqWDQhk67NtOLsHYfg98ymOBWWudth2POaldiIx6KFXtg0DvLLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@csstools/color-helpers@5.0.2': + resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.2': + resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.8': + resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + + '@ipld/car@3.2.4': + resolution: {integrity: sha512-rezKd+jk8AsTGOoJKqzfjLJ3WVft7NZNH95f0pfPbicROvzTyvHCNy567HzSUd6gRXZ9im29z5ZEv9Hw49jSYw==} + + '@ipld/dag-cbor@6.0.15': + resolution: {integrity: sha512-Vm3VTSTwlmGV92a3C5aeY+r2A18zbH2amehNhsX8PBa3muXICaWrN8Uri85A5hLH7D7ElhE8PdjxD6kNqUmTZA==} + + '@ipld/dag-cbor@7.0.3': + resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} + + '@ipld/dag-pb@2.1.18': + resolution: {integrity: sha512-ZBnf2fuX9y3KccADURG5vb9FaOeMjFkCrNysB0PtftME/4iCTjxfaLoNq/IAh5fTqUOMXvryN6Jyka4ZGuMLIg==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@mongodb-js/saslprep@1.2.0': + resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} + + '@multiformats/murmur3@1.1.3': + resolution: {integrity: sha512-wAPLUErGR8g6Lt+bAZn6218k9YQPym+sjszsXL6o4zfxbA22P+gxWZuuD9wDbwL55xrKO5idpcuQUX7/E3oHcw==} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.1': + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@smithy/abort-controller@4.0.2': + resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.1.0': + resolution: {integrity: sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.2.0': + resolution: {integrity: sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.2': + resolution: {integrity: sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.2': + resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.2': + resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.2': + resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.2': + resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.1.0': + resolution: {integrity: sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.1.0': + resolution: {integrity: sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.3': + resolution: {integrity: sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.2': + resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.0.2': + resolution: {integrity: sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.4': + resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.2': + resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.1.0': + resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.2': + resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.2': + resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.2': + resolution: {integrity: sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.2': + resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.0.2': + resolution: {integrity: sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.2.0': + resolution: {integrity: sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.2.0': + resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.2': + resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.8': + resolution: {integrity: sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.8': + resolution: {integrity: sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.2': + resolution: {integrity: sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.2': + resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.2': + resolution: {integrity: sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.2.0': + resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/blake2b@1.0.1': + resolution: {integrity: sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==} + + '@stablelib/ed25519@1.0.3': + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + + '@stablelib/hash@1.0.1': + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/sha512@1.0.1': + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + + '@taquito/core@17.5.2': + resolution: {integrity: sha512-8MrQBg915r/GYSqAYIhx9b51vdrtW68S/5yMCdNvYc6xL5d92wIrXCy6gEkNkIS0kZyTQGfFgfWy6KyJZaIhNw==} + engines: {node: '>=18'} + + '@taquito/http-utils@17.5.2': + resolution: {integrity: sha512-DQnjsHsgXELeUl59gdRTXy9U72RTWa27z7h2s4mRuQ5W4EYQRCWGbb5cOlUcZlEmNjcWCuVk+JBbULvgRk6N/g==} + engines: {node: '>=18'} + + '@taquito/local-forging@17.5.2': + resolution: {integrity: sha512-QnywxtnQBRXrZDkNgIn7rSsExcPjCZx+uS0ojgiYGPI/NSUBUMDqvTy8vhuVJZVTw2CvjAFKrQpbjarF8jC5nw==} + engines: {node: '>=18'} + + '@taquito/michel-codec@17.5.2': + resolution: {integrity: sha512-E3UgpipaiL+9dHuVpvXy6meRE0n1Nfk/W37gMFjgr4pRZefG7Bd3RtPdMr0tTGipxmAT6TT2r8lDqblW4GhufA==} + engines: {node: '>=18'} + + '@taquito/michelson-encoder@17.5.2': + resolution: {integrity: sha512-GrQpAQHUdpYxcuIoDs6Er/UqAhPRu+KCnsCHkwLd/O5LUpQA/+AO+knnKIPvipAJ6ZJ/OP/eU+3fQWF0sQ2R0g==} + engines: {node: '>=18'} + + '@taquito/rpc@17.5.2': + resolution: {integrity: sha512-fyS8s+Jj/jaYwGrx/BR7KZgVRPESpI8CdHXuxYJdk5wbMms3d2UmPDXFLyeo3eVXrX75U771qqbU3m+rNK5aBQ==} + engines: {node: '>=18'} + + '@taquito/taquito@17.5.2': + resolution: {integrity: sha512-aYsyV482oQeiIz5z7mHPS5bnxMfZw3ju99EOvBZOlVxFjw5ZhuGTz1q+gjgdyUvOLAUM7890lTla41pi6Ehb9g==} + engines: {node: '>=18'} + + '@taquito/utils@14.2.0': + resolution: {integrity: sha512-nuqYdkiRPrca2/ztSPokuhvizlOqCzNHM/fX3mIXl8TWO4JiGr0hhPKeJ1Vk9NCG/Qd1A3iQqNP5PQlDAhe/mw==} + engines: {node: '>=6.0.0'} + + '@taquito/utils@17.5.2': + resolution: {integrity: sha512-gtdQzInxbmylKHDAjUIW0npYWYUAyDwhPsFXdF/r7juM6g+qxB7WFbt7vZAYlA4gwwHxPSehehvBkHvEPQ3UWQ==} + engines: {node: '>=18'} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/bs58check@2.1.2': + resolution: {integrity: sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/long@4.0.2': + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/node@22.13.13': + resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + + '@types/whatwg-url@8.2.2': + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@web-std/blob@3.0.5': + resolution: {integrity: sha512-Lm03qr0eT3PoLBuhkvFBLf0EFkAsNz/G/AYCzpOdi483aFaVX86b4iQs0OHhzHJfN5C15q17UtDbyABjlzM96A==} + + '@web-std/fetch@4.2.1': + resolution: {integrity: sha512-M6sgHDgKegcjuVsq8J6jb/4XvhPGui8uwp3EIoADGXUnBl9vKzKLk9H9iFzrPJ6fSV6zZzFWXPyziBJp9hxzBA==} + engines: {node: ^10.17 || >=12.3} + + '@web-std/file@3.0.3': + resolution: {integrity: sha512-X7YYyvEERBbaDfJeC9lBKC5Q5lIEWYCP1SNftJNwNH/VbFhdHm+3neKOQP+kWEYJmosbDFq+NEUG7+XIvet/Jw==} + + '@web-std/form-data@3.1.0': + resolution: {integrity: sha512-WkOrB8rnc2hEK2iVhDl9TFiPMptmxJA1HaIzSdc2/qk3XS4Ny4cCt6/V36U3XmoYKz0Md2YyK2uOZecoZWPAcA==} + + '@web-std/stream@1.0.0': + resolution: {integrity: sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ==} + + '@web-std/stream@1.0.3': + resolution: {integrity: sha512-5MIngxWyq4rQiGoDAC2WhjLuDraW8+ff2LD2et4NRY933K3gL8CHlUXrh8ZZ3dC9A9Xaub8c9sl5exOJE58D9Q==} + + '@web3-storage/multipart-parser@1.0.0': + resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} + + '@zxing/text-encoding@0.9.0': + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + any-signal@2.1.2: + resolution: {integrity: sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==} + + any-signal@3.0.1: + resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + async-mutex@0.4.1: + resolution: {integrity: sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + blob-to-it@1.0.4: + resolution: {integrity: sha512-iCmk0W4NdbrWgRRuxOriU8aM5ijeVLI61Zulsmg/lUHNr7pYjoj+U77opLefNagevtrrbMt3JQ5Qip7ar178kA==} + + blockstore-core@1.0.5: + resolution: {integrity: sha512-i/9CUMMvBALVbtSqUIuiWB3tk//a4Q2I2CEWiBuYNnhJvk/DWplXjLt8Sqc5VGkRVXVPSsEuH8fUtqJt5UFYcA==} + + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-readablestream-to-it@1.0.3: + resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + bson@4.7.2: + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} + engines: {node: '>=6.9.0'} + + bson@5.5.1: + resolution: {integrity: sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==} + engines: {node: '>=14.20.1'} + + bson@6.10.3: + resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} + engines: {node: '>=16.20.1'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + + carbites@1.0.6: + resolution: {integrity: sha512-dS9IQvnrb5VIRvSTNz5Ff+mB9d2MFfi5mojtJi7Rlss79VeF190jr0sZdA7eW0CGHotvHkZaWuM6wgfD9PEFRg==} + + cborg@1.10.2: + resolution: {integrity: sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==} + hasBin: true + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@6.2.0: + resolution: {integrity: sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==} + engines: {node: '>= 6'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + cssstyle@4.3.0: + resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + engines: {node: '>=18'} + + data-uri-to-buffer@3.0.1: + resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} + engines: {node: '>= 6'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dns-over-http-resolver@1.2.3: + resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-fetch@1.9.1: + resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} + engines: {node: '>=6'} + + electron-to-chromium@1.5.123: + resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + ethers@6.13.5: + resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} + engines: {node: '>=14.0.0'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-iterator@1.0.2: + resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hamt-sharding@2.0.1: + resolution: {integrity: sha512-vnjrmdXG9dDs1m/H4iJ6z0JFI2NtgsW5keRkTcM85NGak69Mkf5PHUqBz+Xs0T4sg0ppvj9O5EGAJo40FTxmmA==} + engines: {node: '>=10.0.0', npm: '>=6.0.0'} + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + interface-blockstore@2.0.3: + resolution: {integrity: sha512-OwVUnlNcx7H5HloK0Myv6c/C1q9cNG11HX6afdeU6q6kbuNj8jKCwVnmJHhC94LZaJ+9hvVOk4IUstb3Esg81w==} + + interface-datastore@6.1.1: + resolution: {integrity: sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg==} + + interface-store@2.0.2: + resolution: {integrity: sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipfs-car@0.6.2: + resolution: {integrity: sha512-tliuakkKKtCa4TTnFT3zJKjq/aD8EGKX8Y0ybCyrAW0fo/n2koZpxiLjBvtTs47Rqyji6ggXo+atPbJJ60hJmg==} + hasBin: true + + ipfs-core-types@0.8.4: + resolution: {integrity: sha512-sbRZA1QX3xJ6ywTiVQZMOxhlhp4osAZX2SXx3azOLxAtxmGWDMkHYt722VV4nZ2GyJy8qyk5GHQIZ0uvQnpaTg==} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + + ipfs-core-utils@0.12.2: + resolution: {integrity: sha512-RfxP3rPhXuqKIUmTAUhmee6fmaV3A7LMnjOUikRKpSyqESz/DR7aGK7tbttMxkZdkSEr0rFXlqbyb0vVwmn0wQ==} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + + ipfs-unixfs-exporter@7.0.11: + resolution: {integrity: sha512-qTYa69J7HbI2EIYNUddKPg9Y3rHkYZV0bNdmzZKA5+ZbwRVoUEuBW/cguEqTp22zHygh3sMnzYZFm0naVIdMgQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + ipfs-unixfs-importer@9.0.10: + resolution: {integrity: sha512-W+tQTVcSmXtFh7FWYWwPBGXJ1xDgREbIyI1E5JzDcimZLIyT5gGMfxR3oKPxxWj+GKMpP5ilvMQrbsPzWcm3Fw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + ipfs-unixfs@6.0.9: + resolution: {integrity: sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + ipfs-utils@9.0.14: + resolution: {integrity: sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is@0.2.7: + resolution: {integrity: sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iso-url@1.2.1: + resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} + engines: {node: '>=12'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + it-all@1.0.6: + resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} + + it-batch@1.0.9: + resolution: {integrity: sha512-7Q7HXewMhNFltTsAMdSz6luNhyhkhEtGGbYek/8Xb/GiqYMtwUmopE1ocPSiJKKp3rM4Dt045sNFoUu+KZGNyA==} + + it-drain@1.0.5: + resolution: {integrity: sha512-r/GjkiW1bZswC04TNmUnLxa6uovme7KKwPhc+cb1hHU65E3AByypHH6Pm91WHuvqfFsm+9ws0kPtDBV3/8vmIg==} + + it-filter@1.0.3: + resolution: {integrity: sha512-EI3HpzUrKjTH01miLHWmhNWy3Xpbx4OXMXltgrNprL5lDpF3giVpHIouFpr5l+evXw6aOfxhnt01BIB+4VQA+w==} + + it-first@1.0.7: + resolution: {integrity: sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==} + + it-glob@1.0.2: + resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} + + it-last@1.0.6: + resolution: {integrity: sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q==} + + it-map@1.0.6: + resolution: {integrity: sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==} + + it-parallel-batch@1.0.11: + resolution: {integrity: sha512-UWsWHv/kqBpMRmyZJzlmZeoAMA0F3SZr08FBdbhtbe+MtoEBgr/ZUAKrnenhXCBrsopy76QjRH2K/V8kNdupbQ==} + + it-peekable@1.0.3: + resolution: {integrity: sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ==} + + it-pipe@1.1.0: + resolution: {integrity: sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==} + + it-take@1.0.2: + resolution: {integrity: sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==} + + it-to-stream@1.0.0: + resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + meow@9.0.0: + resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} + engines: {node: '>=10'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@4.0.6: + resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} + engines: {node: '>=16'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp-no-bin@0.5.1: + resolution: {integrity: sha512-TXYKTFeoFPAhZZydgbBFE8iFnpDuS41hxwjG+XaQlz1YkzOjK/OfrxEsab8c3J0MLn3eZ/GPlYya1kdYex8Ing==} + + mongodb-connection-string-url@2.6.0: + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} + + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} + + mongodb-memory-server-core@9.5.0: + resolution: {integrity: sha512-Jb/V80JeYAKWaF4bPFme7SmTR6ew1PWgkpPUepLDfRraeN49i1cruxICeA4zz4T33W/o31N+zazP8wI8ebf7yw==} + engines: {node: '>=14.20.1'} + + mongodb-memory-server@9.5.0: + resolution: {integrity: sha512-In3zRT40cLlVtpy7FK6b96Lby6JBAdXj8Kf9YrH4p1Aa2X4ptojq7SmiRR3x47Lo0/UCXXIwhJpkdbYY8kRZAw==} + engines: {node: '>=14.20.1'} + + mongodb@4.17.2: + resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==} + engines: {node: '>=12.9.0'} + + mongodb@5.9.2: + resolution: {integrity: sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==} + engines: {node: '>=14.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.0.0 + kerberos: ^1.0.0 || ^2.0.0 + mongodb-client-encryption: '>=2.3.0 <3' + snappy: ^7.2.2 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + + mongodb@6.15.0: + resolution: {integrity: sha512-ifBhQ0rRzHDzqp9jAQP6OwHSH7dbYIQjD3SbJs9YYk9AikKEettW/9s/tbSFDTpXcRbF+u1aLrhHxDFaYtZpFQ==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose@8.13.0: + resolution: {integrity: sha512-e/iYV1mPeOkg+SWAMHzt3t42/EZyER3OB1H2pjP9C3vQ+Qb5DMeV9Kb+YCUycKgScA3fbwL7dKG4EpinGlg21g==} + engines: {node: '>=16.20.1'} + + move-file@2.1.0: + resolution: {integrity: sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA==} + engines: {node: '>=10.17'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multiaddr-to-uri@8.0.0: + resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri + + multiaddr@10.0.1: + resolution: {integrity: sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr + + multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + + murmurhash3js-revisited@3.0.0: + resolution: {integrity: sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==} + engines: {node: '>=8.0.0'} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + native-abort-controller@1.0.4: + resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} + peerDependencies: + abort-controller: '*' + + native-fetch@3.0.0: + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + new-find-package-json@2.0.0: + resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==} + engines: {node: '>=12.22.0'} + + nft.storage@7.2.0: + resolution: {integrity: sha512-OvTsGfuZqU8BVv+fYq8CQiXZlaBysrFJZGr51PbhcWXX04hfX+TynQo64/t5UoJEAW2dFC6+IshscZdtbRD0Nw==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + node.extend@1.0.8: + resolution: {integrity: sha512-yvo/DZY0kijlDF192KqLX59/Yz0S5eUrV0GnRcjsoRXVqCGt7EVK+ONq3ZlijJvH/z/447qJaOeTgOGfyFQNPA==} + engines: {'0': node >= 0.4.0} + + node.flow@1.2.3: + resolution: {integrity: sha512-f6bmAiB6wte7YTVWn5rWpz7Fh9OFHMmj8FwNkI3XnwIHRbg7H3nVncr1Kz8DnGS3idUFpRQ8D6lsecUAvjlqKA==} + engines: {'0': node >= 0.4.0} + + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} + engines: {node: '>=10'} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nwsapi@2.2.19: + resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@0.4.0: + resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + p-defer@3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + + p-fifo@1.0.0: + resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parse-duration@1.1.2: + resolution: {integrity: sha512-p8EIONG8L0u7f8GFgfVlL4n8rnChTt8O5FSxgxMz2tjc9FMP199wxVKVB6IbKx11uTbKHACSvaLVIKNnoeNR/A==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + persistent-cache@1.1.2: + resolution: {integrity: sha512-kLyEWXf3hYDv4+NHclSCnjflEGqJMVdVDurNp25zuj9uI3BpkSvRSFtiXu2X9gyh+WkjcGVgcumoR06waIbF4g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + rabin-wasm@0.1.5: + resolution: {integrity: sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==} + hasBin: true + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-native-fetch-api@3.0.0: + resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + receptacle@1.3.2: + resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + retimer@2.0.0: + resolution: {integrity: sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rmdir@1.2.0: + resolution: {integrity: sha512-nzZwoUqCVv00Z1YiRxledUM6MBSR2/Ij9ny6QsMJDl9nOAdwWD+Ak7FnVjHIKITdBZ8oqWpa71TrpiFOPCoKPw==} + engines: {'0': node >= 0.8.0} + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sparse-array@1.3.2: + resolution: {integrity: sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==} + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stream-to-it@0.2.4: + resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} + + streaming-iterables@6.2.0: + resolution: {integrity: sha512-3AYC8oB60WyD1ic7uHmN/vm2oRGzRnQ3XFBl/bFMDi1q1+nc5/vjMmiE4vroIya3jG59t87VpyAj/iXYxyw9AA==} + engines: {node: '>=10'} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + superagent@8.1.2: + resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} + engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net + + supertest@6.3.4: + resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} + engines: {node: '>=6.4.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swagger-jsdoc@6.2.8: + resolution: {integrity: sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==} + engines: {node: '>=12.0.0'} + hasBin: true + + swagger-parser@10.0.3: + resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} + engines: {node: '>=10'} + + swagger-ui-dist@5.20.1: + resolution: {integrity: sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw==} + + swagger-ui-express@5.0.1: + resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==} + engines: {node: '>= v0.10.32'} + peerDependencies: + express: '>=4.0.0 || >=5.0.0-beta' + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + throttled-queue@2.1.4: + resolution: {integrity: sha512-YGdk8sdmr4ge3g+doFj/7RLF5kLM+Mi7DEciu9PHxnMJZMeVuZeTj31g4VE7ekUffx/IdbvrtOCiz62afg0mkg==} + + timeout-abort-controller@1.1.1: + resolution: {integrity: sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==} + + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + + tldts@6.1.85: + resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + hasBin: true + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tr46@5.1.0: + resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + engines: {node: '>=18'} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedarray-to-buffer@4.0.0: + resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} + + uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validator@13.15.0: + resolution: {integrity: sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==} + engines: {node: '>= 0.10'} + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.0.0-1: + resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==} + engines: {node: '>= 6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@3.2.0: + resolution: {integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + +snapshots: + + '@adraffy/ens-normalize@1.10.1': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@apidevtools/json-schema-ref-parser@9.1.2': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 9.1.2 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + z-schema: 5.0.5 + + '@asamuzakjp/css-color@3.1.1': + dependencies: + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + + '@assemblyscript/loader@0.9.4': {} + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + optional: true + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + optional: true + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/client-cognito-identity@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-node': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/client-sso@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/core@3.774.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.2.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + optional: true + + '@aws-sdk/credential-provider-cognito-identity@3.774.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-provider-env@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/credential-provider-http@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/credential-provider-ini@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-env': 3.774.0 + '@aws-sdk/credential-provider-http': 3.774.0 + '@aws-sdk/credential-provider-process': 3.774.0 + '@aws-sdk/credential-provider-sso': 3.774.0 + '@aws-sdk/credential-provider-web-identity': 3.774.0 + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-provider-node@3.774.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.774.0 + '@aws-sdk/credential-provider-http': 3.774.0 + '@aws-sdk/credential-provider-ini': 3.774.0 + '@aws-sdk/credential-provider-process': 3.774.0 + '@aws-sdk/credential-provider-sso': 3.774.0 + '@aws-sdk/credential-provider-web-identity': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-provider-process@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/credential-provider-sso@3.774.0': + dependencies: + '@aws-sdk/client-sso': 3.774.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/token-providers': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-provider-web-identity@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-providers@3.774.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.774.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-cognito-identity': 3.774.0 + '@aws-sdk/credential-provider-env': 3.774.0 + '@aws-sdk/credential-provider-http': 3.774.0 + '@aws-sdk/credential-provider-ini': 3.774.0 + '@aws-sdk/credential-provider-node': 3.774.0 + '@aws-sdk/credential-provider-process': 3.774.0 + '@aws-sdk/credential-provider-sso': 3.774.0 + '@aws-sdk/credential-provider-web-identity': 3.774.0 + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.2.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/middleware-host-header@3.774.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/middleware-logger@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/middleware-recursion-detection@3.772.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/middleware-user-agent@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@smithy/core': 3.2.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/nested-clients@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/region-config-resolver@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + optional: true + + '@aws-sdk/token-providers@3.774.0': + dependencies: + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/types@3.734.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/util-endpoints@3.743.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.2 + tslib: 2.8.1 + optional: true + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@aws-sdk/util-user-agent-browser@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/util-user-agent-node@3.774.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.0': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@csstools/color-helpers@5.0.2': {} + + '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.2 + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@ipld/car@3.2.4': + dependencies: + '@ipld/dag-cbor': 7.0.3 + multiformats: 9.9.0 + varint: 6.0.0 + + '@ipld/dag-cbor@6.0.15': + dependencies: + cborg: 1.10.2 + multiformats: 9.9.0 + + '@ipld/dag-cbor@7.0.3': + dependencies: + cborg: 1.10.2 + multiformats: 9.9.0 + + '@ipld/dag-pb@2.1.18': + dependencies: + multiformats: 9.9.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.13.13) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.13.13 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.13.13 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.10 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.13.13 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsdevtools/ono@7.1.3': {} + + '@mongodb-js/saslprep@1.2.0': + dependencies: + sparse-bitfield: 3.0.3 + + '@multiformats/murmur3@1.1.3': + dependencies: + multiformats: 9.9.0 + murmurhash3js-revisited: 3.0.0 + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.7.1': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@scarf/scarf@1.4.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@smithy/abort-controller@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/config-resolver@4.1.0': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + optional: true + + '@smithy/core@3.2.0': + dependencies: + '@smithy/middleware-serde': 4.0.3 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/credential-provider-imds@4.0.2': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + tslib: 2.8.1 + optional: true + + '@smithy/fetch-http-handler@5.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/hash-node@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/invalid-dependency@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/middleware-content-length@4.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/middleware-endpoint@4.1.0': + dependencies: + '@smithy/core': 3.2.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/node-config-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + optional: true + + '@smithy/middleware-retry@4.1.0': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/service-error-classification': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + tslib: 2.8.1 + uuid: 9.0.1 + optional: true + + '@smithy/middleware-serde@4.0.3': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/middleware-stack@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/node-config-provider@4.0.2': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/node-http-handler@4.0.4': + dependencies: + '@smithy/abort-controller': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/property-provider@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/protocol-http@5.1.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/querystring-builder@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/querystring-parser@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/service-error-classification@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + optional: true + + '@smithy/shared-ini-file-loader@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/signature-v4@5.0.2': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/smithy-client@4.2.0': + dependencies: + '@smithy/core': 3.2.0 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-stack': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/types@4.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/url-parser@4.0.2': + dependencies: + '@smithy/querystring-parser': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-defaults-mode-browser@4.0.8': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-defaults-mode-node@4.0.8': + dependencies: + '@smithy/config-resolver': 4.1.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-endpoints@3.0.2': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-middleware@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-retry@4.0.2': + dependencies: + '@smithy/service-error-classification': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-stream@4.2.0': + dependencies: + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + optional: true + + '@stablelib/binary@1.0.1': + dependencies: + '@stablelib/int': 1.0.1 + + '@stablelib/blake2b@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/ed25519@1.0.3': + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hash@1.0.1': {} + + '@stablelib/int@1.0.1': {} + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha512@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + + '@taquito/core@17.5.2': + dependencies: + json-stringify-safe: 5.0.1 + + '@taquito/http-utils@17.5.2(encoding@0.1.13)': + dependencies: + '@taquito/core': 17.5.2 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@taquito/local-forging@17.5.2': + dependencies: + '@taquito/core': 17.5.2 + '@taquito/utils': 17.5.2 + bignumber.js: 9.1.2 + + '@taquito/michel-codec@17.5.2': + dependencies: + '@taquito/core': 17.5.2 + + '@taquito/michelson-encoder@17.5.2(encoding@0.1.13)': + dependencies: + '@taquito/core': 17.5.2 + '@taquito/rpc': 17.5.2(encoding@0.1.13) + '@taquito/utils': 17.5.2 + bignumber.js: 9.1.2 + fast-json-stable-stringify: 2.1.0 + transitivePeerDependencies: + - encoding + + '@taquito/rpc@17.5.2(encoding@0.1.13)': + dependencies: + '@taquito/core': 17.5.2 + '@taquito/http-utils': 17.5.2(encoding@0.1.13) + '@taquito/utils': 17.5.2 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - encoding + + '@taquito/taquito@17.5.2(encoding@0.1.13)': + dependencies: + '@taquito/core': 17.5.2 + '@taquito/http-utils': 17.5.2(encoding@0.1.13) + '@taquito/local-forging': 17.5.2 + '@taquito/michel-codec': 17.5.2 + '@taquito/michelson-encoder': 17.5.2(encoding@0.1.13) + '@taquito/rpc': 17.5.2(encoding@0.1.13) + '@taquito/utils': 17.5.2 + bignumber.js: 9.1.2 + rxjs: 7.8.2 + transitivePeerDependencies: + - encoding + + '@taquito/utils@14.2.0': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@types/bs58check': 2.1.2 + bignumber.js: 9.1.2 + blakejs: 1.2.1 + bs58check: 2.1.2 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + + '@taquito/utils@17.5.2': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@taquito/core': 17.5.2 + '@types/bs58check': 2.1.2 + bignumber.js: 9.1.2 + blakejs: 1.2.1 + bs58check: 3.0.1 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.27.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.27.0 + + '@types/bs58check@2.1.2': + dependencies: + '@types/node': 22.13.13 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.13.13 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/long@4.0.2': {} + + '@types/minimatch@3.0.5': {} + + '@types/minimist@1.2.5': {} + + '@types/node@22.13.13': + dependencies: + undici-types: 6.20.0 + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/normalize-package-data@2.4.4': {} + + '@types/retry@0.12.0': {} + + '@types/stack-utils@2.0.3': {} + + '@types/trusted-types@2.0.7': + optional: true + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@types/whatwg-url@8.2.2': + dependencies: + '@types/node': 22.13.13 + '@types/webidl-conversions': 7.0.3 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@web-std/blob@3.0.5': + dependencies: + '@web-std/stream': 1.0.0 + web-encoding: 1.1.5 + + '@web-std/fetch@4.2.1': + dependencies: + '@web-std/blob': 3.0.5 + '@web-std/file': 3.0.3 + '@web-std/form-data': 3.1.0 + '@web-std/stream': 1.0.3 + '@web3-storage/multipart-parser': 1.0.0 + abort-controller: 3.0.0 + data-uri-to-buffer: 3.0.1 + mrmime: 1.0.1 + + '@web-std/file@3.0.3': + dependencies: + '@web-std/blob': 3.0.5 + + '@web-std/form-data@3.1.0': + dependencies: + web-encoding: 1.1.5 + + '@web-std/stream@1.0.0': + dependencies: + web-streams-polyfill: 3.3.3 + + '@web-std/stream@1.0.3': + dependencies: + web-streams-polyfill: 3.3.3 + + '@web3-storage/multipart-parser@1.0.0': {} + + '@zxing/text-encoding@0.9.0': + optional: true + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + aes-js@4.0.0-beta.5: {} + + agent-base@7.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + any-signal@2.1.2: + dependencies: + abort-controller: 3.0.0 + native-abort-controller: 1.0.4(abort-controller@3.0.0) + + any-signal@3.0.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + arrify@1.0.1: {} + + asap@2.0.6: {} + + async-mutex@0.4.1: + dependencies: + tslib: 2.8.1 + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.8.4: + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b4a@1.6.7: {} + + babel-jest@29.7.0(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.10) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) + + babel-preset-jest@29.6.3(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) + + balanced-match@1.0.2: {} + + bare-events@2.5.4: + optional: true + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.1: {} + + base64-js@1.5.1: {} + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bl@5.1.0: + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + + blakejs@1.2.1: {} + + blob-to-it@1.0.4: + dependencies: + browser-readablestream-to-it: 1.0.3 + + blockstore-core@1.0.5: + dependencies: + err-code: 3.0.1 + interface-blockstore: 2.0.3 + interface-store: 2.0.2 + it-all: 1.0.6 + it-drain: 1.0.5 + it-filter: 1.0.3 + it-take: 1.0.2 + multiformats: 9.9.0 + + bn.js@4.12.1: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bowser@2.11.0: + optional: true + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-readablestream-to-it@1.0.3: {} + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.123 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + bs58@5.0.0: + dependencies: + base-x: 4.0.1 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + bs58check@3.0.1: + dependencies: + '@noble/hashes': 1.7.1 + bs58: 5.0.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + bson@4.7.2: + dependencies: + buffer: 5.7.1 + + bson@5.5.1: {} + + bson@6.10.3: {} + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + call-me-maybe@1.0.2: {} + + callsites@3.1.0: {} + + camelcase-keys@6.2.2: + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001707: {} + + carbites@1.0.6: + dependencies: + '@ipld/car': 3.2.4 + '@ipld/dag-cbor': 6.0.15 + '@ipld/dag-pb': 2.1.18 + multiformats: 9.9.0 + + cborg@1.10.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + charenc@0.0.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + ci-info@3.9.0: {} + + cipher-base@1.0.6: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + cjs-module-lexer@1.4.3: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@6.2.0: {} + + commander@9.5.0: + optional: true + + commondir@1.0.1: {} + + component-emitter@1.3.1: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + cookiejar@2.1.4: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-jest@29.7.0(@types/node@22.13.13): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.13) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + cssstyle@4.3.0: + dependencies: + '@asamuzakjp/css-color': 3.1.1 + rrweb-cssom: 0.8.0 + + data-uri-to-buffer@3.0.1: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.0(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + decamelize-keys@1.1.1: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + decimal.js@10.5.0: {} + + dedent@1.5.3: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diff-sequences@29.6.3: {} + + dns-over-http-resolver@1.2.3(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + debug: 4.4.0(supports-color@5.5.0) + native-fetch: 3.0.0(node-fetch@2.7.0(encoding@0.1.13)) + receptacle: 1.3.2 + transitivePeerDependencies: + - node-fetch + - supports-color + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dompurify@3.2.4: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + electron-fetch@1.9.1: + dependencies: + encoding: 0.1.13 + + electron-to-chromium@1.5.123: {} + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + + entities@4.5.0: {} + + err-code@3.0.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@2.0.0: {} + + esprima@4.0.1: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + ethers@6.13.5: + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + event-target-shim@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-fifo@1.3.2: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.1.2 + optional: true + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0(supports-color@5.5.0) + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + formidable@2.1.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.14.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-iterator@1.0.2: {} + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + hamt-sharding@2.0.1: + dependencies: + sparse-array: 1.3.2 + uint8arrays: 3.1.1 + + hard-rejection@2.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hexoid@1.0.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + hosted-git-info@2.8.9: {} + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-escaper@2.0.2: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + idb-keyval@6.2.1: {} + + ieee754@1.2.1: {} + + ignore-by-default@1.0.1: {} + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + interface-blockstore@2.0.3: + dependencies: + interface-store: 2.0.2 + multiformats: 9.9.0 + + interface-datastore@6.1.1: + dependencies: + interface-store: 2.0.2 + nanoid: 3.3.11 + uint8arrays: 3.1.1 + + interface-store@2.0.2: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ip-regex@4.3.0: {} + + ipaddr.js@1.9.1: {} + + ipfs-car@0.6.2(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + '@ipld/car': 3.2.4 + '@web-std/blob': 3.0.5 + bl: 5.1.0 + blockstore-core: 1.0.5 + browser-readablestream-to-it: 1.0.3 + idb-keyval: 6.2.1 + interface-blockstore: 2.0.3 + ipfs-core-types: 0.8.4(node-fetch@2.7.0(encoding@0.1.13)) + ipfs-core-utils: 0.12.2(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)) + ipfs-unixfs-exporter: 7.0.11 + ipfs-unixfs-importer: 9.0.10(encoding@0.1.13) + ipfs-utils: 9.0.14(encoding@0.1.13) + it-all: 1.0.6 + it-last: 1.0.6 + it-pipe: 1.1.0 + meow: 9.0.0 + move-file: 2.1.0 + multiformats: 9.9.0 + stream-to-it: 0.2.4 + streaming-iterables: 6.2.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - node-fetch + - supports-color + + ipfs-core-types@0.8.4(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + interface-datastore: 6.1.1 + multiaddr: 10.0.1(node-fetch@2.7.0(encoding@0.1.13)) + multiformats: 9.9.0 + transitivePeerDependencies: + - node-fetch + - supports-color + + ipfs-core-utils@0.12.2(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + any-signal: 2.1.2 + blob-to-it: 1.0.4 + browser-readablestream-to-it: 1.0.3 + debug: 4.4.0(supports-color@5.5.0) + err-code: 3.0.1 + ipfs-core-types: 0.8.4(node-fetch@2.7.0(encoding@0.1.13)) + ipfs-unixfs: 6.0.9 + ipfs-utils: 9.0.14(encoding@0.1.13) + it-all: 1.0.6 + it-map: 1.0.6 + it-peekable: 1.0.3 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + multiaddr: 10.0.1(node-fetch@2.7.0(encoding@0.1.13)) + multiaddr-to-uri: 8.0.0(node-fetch@2.7.0(encoding@0.1.13)) + multiformats: 9.9.0 + nanoid: 3.3.11 + parse-duration: 1.1.2 + timeout-abort-controller: 1.1.1 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - node-fetch + - supports-color + + ipfs-unixfs-exporter@7.0.11: + dependencies: + '@ipld/dag-cbor': 7.0.3 + '@ipld/dag-pb': 2.1.18 + '@multiformats/murmur3': 1.1.3 + err-code: 3.0.1 + hamt-sharding: 2.0.1 + interface-blockstore: 2.0.3 + ipfs-unixfs: 6.0.9 + it-last: 1.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + + ipfs-unixfs-importer@9.0.10(encoding@0.1.13): + dependencies: + '@ipld/dag-pb': 2.1.18 + '@multiformats/murmur3': 1.1.3 + bl: 5.1.0 + err-code: 3.0.1 + hamt-sharding: 2.0.1 + interface-blockstore: 2.0.3 + ipfs-unixfs: 6.0.9 + it-all: 1.0.6 + it-batch: 1.0.9 + it-first: 1.0.7 + it-parallel-batch: 1.0.11 + merge-options: 3.0.4 + multiformats: 9.9.0 + rabin-wasm: 0.1.5(encoding@0.1.13) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + + ipfs-unixfs@6.0.9: + dependencies: + err-code: 3.0.1 + protobufjs: 6.11.4 + + ipfs-utils@9.0.14(encoding@0.1.13): + dependencies: + any-signal: 3.0.1 + browser-readablestream-to-it: 1.0.3 + buffer: 6.0.3 + electron-fetch: 1.9.1 + err-code: 3.0.1 + is-electron: 2.2.2 + iso-url: 1.2.1 + it-all: 1.0.6 + it-glob: 1.0.2 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + nanoid: 3.3.11 + native-fetch: 3.0.0(node-fetch@2.7.0(encoding@0.1.13)) + node-fetch: 2.7.0(encoding@0.1.13) + react-native-fetch-api: 3.0.0 + stream-to-it: 0.2.4 + transitivePeerDependencies: + - encoding + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-buffer@1.1.6: {} + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-electron@2.2.2: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-ip@3.1.0: + dependencies: + ip-regex: 4.3.0 + + is-number@7.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-obj@2.1.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-stream@2.0.1: {} + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is@0.2.7: {} + + isexe@2.0.0: {} + + iso-url@1.2.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0(supports-color@5.5.0) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + it-all@1.0.6: {} + + it-batch@1.0.9: {} + + it-drain@1.0.5: {} + + it-filter@1.0.3: {} + + it-first@1.0.7: {} + + it-glob@1.0.2: + dependencies: + '@types/minimatch': 3.0.5 + minimatch: 3.1.2 + + it-last@1.0.6: {} + + it-map@1.0.6: {} + + it-parallel-batch@1.0.11: + dependencies: + it-batch: 1.0.9 + + it-peekable@1.0.3: {} + + it-pipe@1.1.0: {} + + it-take@1.0.2: {} + + it-to-stream@1.0.0: + dependencies: + buffer: 6.0.3 + fast-fifo: 1.3.2 + get-iterator: 1.0.2 + p-defer: 3.0.0 + p-fifo: 1.0.0 + readable-stream: 3.6.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.13.13): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.13) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.13) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.13.13): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.13 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.13.13 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.27.0 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.13.13 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.13.13): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.13) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsdom@26.0.0: + dependencies: + cssstyle: 4.3.0 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.2 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.19 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + kareem@2.6.3: {} + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + leven@3.1.0: {} + + lines-and-columns@1.2.4: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.mergewith@4.6.2: {} + + long@4.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + + math-intrinsics@1.1.0: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + media-typer@0.3.0: {} + + memory-pager@1.5.0: {} + + meow@9.0.0: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize: 1.2.0 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + + merge-descriptors@1.0.3: {} + + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + + merge-stream@2.0.0: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@2.6.0: {} + + mime@4.0.6: {} + + mimic-fn@2.1.0: {} + + min-indent@1.0.1: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + + minimist@1.2.8: {} + + mkdirp-no-bin@0.5.1: {} + + mongodb-connection-string-url@2.6.0: + dependencies: + '@types/whatwg-url': 8.2.2 + whatwg-url: 11.0.0 + + mongodb-connection-string-url@3.0.2: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 14.2.0 + + mongodb-memory-server-core@9.5.0(@aws-sdk/credential-providers@3.774.0): + dependencies: + async-mutex: 0.4.1 + camelcase: 6.3.0 + debug: 4.4.0(supports-color@5.5.0) + find-cache-dir: 3.3.2 + follow-redirects: 1.15.9(debug@4.4.0) + https-proxy-agent: 7.0.6 + mongodb: 5.9.2(@aws-sdk/credential-providers@3.774.0) + new-find-package-json: 2.0.0 + semver: 7.7.1 + tar-stream: 3.1.7 + tslib: 2.8.1 + yauzl: 3.2.0 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - kerberos + - mongodb-client-encryption + - snappy + - supports-color + + mongodb-memory-server@9.5.0(@aws-sdk/credential-providers@3.774.0): + dependencies: + mongodb-memory-server-core: 9.5.0(@aws-sdk/credential-providers@3.774.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - kerberos + - mongodb-client-encryption + - snappy + - supports-color + + mongodb@4.17.2: + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.4 + optionalDependencies: + '@aws-sdk/credential-providers': 3.774.0 + '@mongodb-js/saslprep': 1.2.0 + transitivePeerDependencies: + - aws-crt + + mongodb@5.9.2(@aws-sdk/credential-providers@3.774.0): + dependencies: + bson: 5.5.1 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.4 + optionalDependencies: + '@aws-sdk/credential-providers': 3.774.0 + '@mongodb-js/saslprep': 1.2.0 + + mongodb@6.15.0(@aws-sdk/credential-providers@3.774.0)(socks@2.8.4): + dependencies: + '@mongodb-js/saslprep': 1.2.0 + bson: 6.10.3 + mongodb-connection-string-url: 3.0.2 + optionalDependencies: + '@aws-sdk/credential-providers': 3.774.0 + socks: 2.8.4 + + mongoose@8.13.0(@aws-sdk/credential-providers@3.774.0)(socks@2.8.4): + dependencies: + bson: 6.10.3 + kareem: 2.6.3 + mongodb: 6.15.0(@aws-sdk/credential-providers@3.774.0)(socks@2.8.4) + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + move-file@2.1.0: + dependencies: + path-exists: 4.0.0 + + mpath@0.9.0: {} + + mquery@5.0.0: + dependencies: + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + mrmime@1.0.1: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + multiaddr-to-uri@8.0.0(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + multiaddr: 10.0.1(node-fetch@2.7.0(encoding@0.1.13)) + transitivePeerDependencies: + - node-fetch + - supports-color + + multiaddr@10.0.1(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + dns-over-http-resolver: 1.2.3(node-fetch@2.7.0(encoding@0.1.13)) + err-code: 3.0.1 + is-ip: 3.1.0 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + transitivePeerDependencies: + - node-fetch + - supports-color + + multiformats@9.9.0: {} + + murmurhash3js-revisited@3.0.0: {} + + nanoid@3.3.11: {} + + native-abort-controller@1.0.4(abort-controller@3.0.0): + dependencies: + abort-controller: 3.0.0 + + native-fetch@3.0.0(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + new-find-package-json@2.0.0: + dependencies: + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + nft.storage@7.2.0(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + '@ipld/car': 3.2.4 + '@ipld/dag-cbor': 6.0.15 + '@web-std/blob': 3.0.5 + '@web-std/fetch': 4.2.1 + '@web-std/file': 3.0.3 + '@web-std/form-data': 3.1.0 + carbites: 1.0.6 + ipfs-car: 0.6.2(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13)) + it-pipe: 1.1.0 + multiformats: 9.9.0 + p-retry: 4.6.2 + streaming-iterables: 6.2.0 + throttled-queue: 2.1.4 + transitivePeerDependencies: + - encoding + - node-fetch + - supports-color + + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + node.extend@1.0.8: + dependencies: + is: 0.2.7 + object-keys: 0.4.0 + + node.flow@1.2.3: + dependencies: + node.extend: 1.0.8 + + nodemon@3.1.9: + dependencies: + chokidar: 3.6.0 + debug: 4.4.0(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.1 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@3.0.3: + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.16.1 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nwsapi@2.2.19: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@0.4.0: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + openapi-types@12.1.3: {} + + p-defer@3.0.0: {} + + p-fifo@1.0.0: + dependencies: + fast-fifo: 1.3.2 + p-defer: 3.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-try@2.2.0: {} + + parse-duration@1.1.2: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.12: {} + + pend@1.2.0: {} + + persistent-cache@1.1.2: + dependencies: + mkdirp-no-bin: 0.5.1 + rmdir: 1.2.0 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + possible-typed-array-names@1.1.0: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + protobufjs@6.11.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 22.13.13 + long: 4.0.0 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.1.0: {} + + pstree.remy@1.1.8: {} + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quick-lru@4.0.1: {} + + rabin-wasm@0.1.5(encoding@0.1.13): + dependencies: + '@assemblyscript/loader': 0.9.4 + bl: 5.1.0 + debug: 4.4.0(supports-color@5.5.0) + minimist: 1.2.8 + node-fetch: 2.7.0(encoding@0.1.13) + readable-stream: 3.6.2 + transitivePeerDependencies: + - encoding + - supports-color + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-is@18.3.1: {} + + react-native-fetch-api@3.0.0: + dependencies: + p-defer: 3.0.0 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + receptacle@1.3.2: + dependencies: + ms: 2.1.3 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + retimer@2.0.0: {} + + retry@0.13.1: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rmdir@1.2.0: + dependencies: + node.flow: 1.2.3 + + rrweb-cssom@0.8.0: {} + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + sift@17.1.3: {} + + signal-exit@3.0.7: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.1 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + smart-buffer@4.2.0: {} + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sparse-array@1.3.2: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + sprintf-js@1.0.3: {} + + sprintf-js@1.1.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + stream-to-it@0.2.4: + dependencies: + get-iterator: 1.0.2 + + streaming-iterables@6.2.0: {} + + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@3.1.1: {} + + strnum@1.1.2: + optional: true + + superagent@8.1.2: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.0(supports-color@5.5.0) + fast-safe-stringify: 2.1.1 + form-data: 4.0.2 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.14.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + supertest@6.3.4: + dependencies: + methods: 1.1.2 + superagent: 8.1.2 + transitivePeerDependencies: + - supports-color + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + swagger-jsdoc@6.2.8(openapi-types@12.1.3): + dependencies: + commander: 6.2.0 + doctrine: 3.0.0 + glob: 7.1.6 + lodash.mergewith: 4.6.2 + swagger-parser: 10.0.3(openapi-types@12.1.3) + yaml: 2.0.0-1 + transitivePeerDependencies: + - openapi-types + + swagger-parser@10.0.3(openapi-types@12.1.3): + dependencies: + '@apidevtools/swagger-parser': 10.0.3(openapi-types@12.1.3) + transitivePeerDependencies: + - openapi-types + + swagger-ui-dist@5.20.1: + dependencies: + '@scarf/scarf': 1.4.0 + + swagger-ui-express@5.0.1(express@4.21.2): + dependencies: + express: 4.21.2 + swagger-ui-dist: 5.20.1 + + symbol-tree@3.2.4: {} + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + throttled-queue@2.1.4: {} + + timeout-abort-controller@1.1.1: + dependencies: + abort-controller: 3.0.0 + retimer: 2.0.0 + + tldts-core@6.1.85: {} + + tldts@6.1.85: + dependencies: + tldts-core: 6.1.85 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + touch@3.1.1: {} + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.85 + + tr46@0.0.3: {} + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tr46@5.1.0: + dependencies: + punycode: 2.3.1 + + trim-newlines@3.0.1: {} + + tslib@2.7.0: {} + + tslib@2.8.1: {} + + type-detect@4.0.8: {} + + type-fest@0.18.1: {} + + type-fest@0.21.3: {} + + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedarray-to-buffer@4.0.0: {} + + uint8arrays@3.1.1: + dependencies: + multiformats: 9.9.0 + + undefsafe@2.0.5: {} + + undici-types@6.19.8: {} + + undici-types@6.20.0: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + utils-merge@1.0.1: {} + + uuid@9.0.1: + optional: true + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validator@13.15.0: {} + + varint@6.0.0: {} + + vary@1.1.2: {} + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + web-encoding@1.1.5: + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@3.0.1: {} + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.0 + webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@8.17.1: {} + + ws@8.18.1: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.0.0-1: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@3.2.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + + yocto-queue@0.1.0: {} + + z-schema@5.0.5: + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.15.0 + optionalDependencies: + commander: 9.5.0