diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7d9a7ec7c..bad8b161c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,6 +31,7 @@ jobs: runs-on: ubuntu-latest if: github.event.pull_request.merged == true outputs: + hydra-version-updated: ${{ steps.compare-versions.outputs.hydra-version-updated }} common-version-updated: ${{ steps.compare-versions.outputs.common-version-updated }} contract-version-updated: ${{ steps.compare-versions.outputs.contract-version-updated }} core-version-updated: ${{ steps.compare-versions.outputs.core-version-updated }} @@ -51,6 +52,7 @@ jobs: - name: Get package version from main branch before merge id: pre-merge-version run: | + HYDRA_PRE_MERGE_VERSION=$(node -p "require('./packages/hydra/package.json').version") COMMON_PRE_MERGE_VERSION=$(node -p "require('./packages/mesh-common/package.json').version") CONTRACT_PRE_MERGE_VERSION=$(node -p "require('./packages/mesh-contract/package.json').version") CORE_PRE_MERGE_VERSION=$(node -p "require('./packages/mesh-core/package.json').version") @@ -82,6 +84,7 @@ jobs: - name: Get package version from main branch after merge id: post-merge-version run: | + HYDRA_POST_MERGE_VERSION=$(node -p "require('./packages/hydra/package.json').version") COMMON_POST_MERGE_VERSION=$(node -p "require('./packages/mesh-common/package.json').version") CONTRACT_POST_MERGE_VERSION=$(node -p "require('./packages/mesh-contract/package.json').version") CORE_POST_MERGE_VERSION=$(node -p "require('./packages/mesh-core/package.json').version") @@ -93,6 +96,7 @@ jobs: TRANSACTION_POST_MERGE_VERSION=$(node -p "require('./packages/mesh-transaction/package.json').version") WALLET_POST_MERGE_VERSION=$(node -p "require('./packages/mesh-wallet/package.json').version") CLI_POST_MERGE_VERSION=$(node -p "require('./scripts/mesh-cli/package.json').version") + echo "hydra_post_merge_version=$HYDRA_POST_MERGE_VERSION" >> "$GITHUB_OUTPUT" echo "common_post_merge_version=$COMMON_POST_MERGE_VERSION" >> "$GITHUB_OUTPUT" echo "contract_post_merge_version=$CONTRACT_POST_MERGE_VERSION" >> "$GITHUB_OUTPUT" echo "core_post_merge_version=$CORE_POST_MERGE_VERSION" >> "$GITHUB_OUTPUT" @@ -108,6 +112,11 @@ jobs: - name: Compare versions id: compare-versions run: | + if [[ "${{ steps.pre-merge-version.outputs.hydra_pre_merge_version }}" != "${{ steps.post-merge-version.outputs.hydra_post_merge_version }}" ]]; then + echo "hydra-version-updated=true" >> "$GITHUB_OUTPUT" + else + echo "common-version-updated=false" >> "$GITHUB_OUTPUT" + fi if [[ "${{ steps.pre-merge-version.outputs.common_pre_merge_version }}" != "${{ steps.post-merge-version.outputs.common_post_merge_version }}" ]]; then echo "common-version-updated=true" >> "$GITHUB_OUTPUT" else @@ -164,6 +173,21 @@ jobs: echo "cli-version-updated=false" >> "$GITHUB_OUTPUT" fi + publish-meshsdk-hydra: + needs: [build, check-version] + if: needs.check-version.outputs.hydra-version-updated == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: https://registry.npmjs.org/ + - run: npm install && npm run build + - run: cd packages/hydra && npm publish --access public + env: + NODE_AUTH_TOKEN: ${{secrets.npm_token}} + publish-meshsdk-common: needs: [build, check-version] if: needs.check-version.outputs.common-version-updated == 'true' diff --git a/apps/playground/package.json b/apps/playground/package.json index e57fbe611..726213754 100644 --- a/apps/playground/package.json +++ b/apps/playground/package.json @@ -16,6 +16,7 @@ "@mdx-js/react": "^3.0.1", "@meshsdk/contract": "*", "@meshsdk/core": "*", + "@meshsdk/hydra": "*", "@meshsdk/react": "*", "@next/mdx": "^14.2.3", "@next/third-parties": "^14.2.5", diff --git a/apps/playground/src/pages/apis/txbuilder/governance/vote-delegation.tsx b/apps/playground/src/pages/apis/txbuilder/governance/vote-delegation.tsx index 357a015e3..be69a89d3 100644 --- a/apps/playground/src/pages/apis/txbuilder/governance/vote-delegation.tsx +++ b/apps/playground/src/pages/apis/txbuilder/governance/vote-delegation.tsx @@ -34,7 +34,7 @@ function Left() { codeTx += ` rewardAddress,\n`; codeTx += ` )\n`; codeTx += ` .changeAddress(changeAddress)\n`; - codeTx += ` .selectUtxos(utxos, "keepRelevant", "10000000")`; + codeTx += ` .selectUtxosFrom(utxos, "keepRelevant", "10000000")`; let codeBuildSign = `const unsignedTx = await txBuilder.complete();\n`; codeBuildSign += `const signedTx = await wallet.signTx(unsignedTx);\n`; diff --git a/apps/playground/src/pages/hydra/tutorial/index.tsx b/apps/playground/src/pages/hydra/tutorial/index.tsx index 81fbf7c0e..d484e3d9a 100644 --- a/apps/playground/src/pages/hydra/tutorial/index.tsx +++ b/apps/playground/src/pages/hydra/tutorial/index.tsx @@ -1,7 +1,8 @@ import type { NextPage } from "next"; import { useState } from "react"; -import { HydraInstance, HydraProvider, MeshWallet } from "@meshsdk/core"; +import { MeshWallet } from "@meshsdk/core"; +import { HydraInstance, HydraProvider } from "@meshsdk/hydra"; import SidebarFullwidth from "~/components/layouts/sidebar-fullwidth"; import Link from "~/components/link"; @@ -23,7 +24,9 @@ const ReactPage: NextPage = () => { const [bobNode, setBobNode] = useState(undefined); const [bobFunds, setBobFunds] = useState(undefined); - const hydraProvider = new HydraProvider({ url: "http://35.189.158.126:4001" }); + const hydraProvider = new HydraProvider({ + url: "http://35.189.158.126:4001", + }); const hydraInstance = new HydraInstance({ provider: hydraProvider, }); diff --git a/apps/playground/src/pages/hydra/tutorial/step3.tsx b/apps/playground/src/pages/hydra/tutorial/step3.tsx index fc8b1cade..bdfa8c1dd 100644 --- a/apps/playground/src/pages/hydra/tutorial/step3.tsx +++ b/apps/playground/src/pages/hydra/tutorial/step3.tsx @@ -39,6 +39,28 @@ function Left( async function startNode() {} + let codeOnMessage = ``; + codeOnMessage += `hydraProvider.onMessage((message) => {\n`; + codeOnMessage += ` console.log(message);\n`; + codeOnMessage += `});\n`; + + let codeGreetingsMessage = `{\n`; + codeGreetingsMessage += ` "peer": "bob-node",\n`; + codeGreetingsMessage += ` "seq": 0,\n`; + codeGreetingsMessage += ` "tag": "PeerConnected",\n`; + codeGreetingsMessage += ` "timestamp": "2023-08-17T18:25:02.903974459Z"\n`; + codeGreetingsMessage += `}\n`; + codeGreetingsMessage += `{\n`; + codeGreetingsMessage += ` "headStatus": "Idle",\n`; + codeGreetingsMessage += ` "hydraNodeVersion": "0.12.0-54db2265c257c755df98773c64754c9854d879e8",\n`; + codeGreetingsMessage += ` "me": {\n`; + codeGreetingsMessage += ` "vkey": "ab159b29b87b498fa060f6045cccf84ecd20cf623f7820ed130ffc849633a120"\n`; + codeGreetingsMessage += ` },\n`; + codeGreetingsMessage += ` "seq": 1,\n`; + codeGreetingsMessage += ` "tag": "Greetings",\n`; + codeGreetingsMessage += ` "timestamp": "2023-08-17T18:32:29.092329511Z"\n`; + codeGreetingsMessage += `};\n`; + return ( <>

@@ -70,7 +92,14 @@ function Left( connection to the API port:

- + + +

+ This opens a duplex connection and you should see messages indicating + successful connections like: +

+ + ); } diff --git a/apps/playground/src/pages/hydra/tutorial/step4.tsx b/apps/playground/src/pages/hydra/tutorial/step4.tsx index 12279d17e..dc141564f 100644 --- a/apps/playground/src/pages/hydra/tutorial/step4.tsx +++ b/apps/playground/src/pages/hydra/tutorial/step4.tsx @@ -1,9 +1,9 @@ import { useState } from "react"; -import { HydraInstance, HydraProvider, MeshWallet } from "@meshsdk/core"; +import { MeshWallet } from "@meshsdk/core"; +import { HydraInstance } from "@meshsdk/hydra"; import Button from "~/components/button/button"; -import Link from "~/components/link"; import TwoColumnsScroll from "~/components/sections/two-columns-scroll"; import Codeblock from "~/components/text/codeblock"; @@ -69,7 +69,7 @@ function Left( Send this command to initialize a head through the WebSocket connection:

- + +

+ From the response, we would need to select a UTxO that is owned by alice + to spend: +

+ + +

+ Next, similar to the Cardano layer 1, build a transaction using Mesh + that spends this UTxO and sends it to an address. If you haven't done so + already, obtain the address of your partner to send the funds to. +

+ +

+ Before submission, we need to sign the transaction to authorize spending + alice's funds: +

+ +

+ Submit the transaction through the already open WebSocket connection. + Generate the NewTx command for WebSocket submission: +

+ + +

+ The transation will be validated by both hydra-nodes and either result + in a TxInvalid message with a reason, or a TxValid message and a + SnapshotConfirmed with the new UTxO available in the head shortly after. +

+

+ 🎉 Congratulations, you just processed your first Cardano transaction + off-chain in a Hydra head! +

); } diff --git a/apps/playground/src/pages/hydra/tutorial/step6.tsx b/apps/playground/src/pages/hydra/tutorial/step6.tsx new file mode 100644 index 000000000..16444d93b --- /dev/null +++ b/apps/playground/src/pages/hydra/tutorial/step6.tsx @@ -0,0 +1,105 @@ +import { useState } from "react"; + +import { MeshWallet } from "@meshsdk/core"; + +import Button from "~/components/button/button"; +import TwoColumnsScroll from "~/components/sections/two-columns-scroll"; +import Codeblock from "~/components/text/codeblock"; + +export default function HydraTutorialStep6({ + aliceNode, + aliceFunds, + bobNode, + bobFunds, +}: { + aliceNode: MeshWallet | undefined; + aliceFunds: MeshWallet | undefined; + bobNode: MeshWallet | undefined; + bobFunds: MeshWallet | undefined; +}) { + return ( + + ); +} + +function Left( + aliceNode: MeshWallet | undefined, + aliceFunds: MeshWallet | undefined, + bobNode: MeshWallet | undefined, + bobFunds: MeshWallet | undefined, +) { + const [loading, setLoading] = useState(false); + const [addresses, setAddresses] = useState(""); + const [balance, setBalance] = useState(""); + + async function queryFunds() {} + + return ( + <> +

+ Any participant can initiate closing the Hydra head. Use the WebSocket + API to submit the closing command: +

+ + + +

+ The hydra-node will then submit a protocol transaction with the last + known snapshot to the Cardano network. A smart contract on layer 1 will + check the snapshot signatures and confirm the head is closed. The + WebSocket API sends a HeadIsClosed message when this' Close' transaction + is observed. Note that this can also happen if any other hydra-node + closes the head. +

+ +

+ The message will include a contestationDeadline, set using + the configurable --contestation-period. Until this + deadline, the closing snapshot can be contested with a more recent, + multi-signed snapshot. Your hydra-node would contest automatically for + you if the closed snapshot is not the last known one. +

+ +

+ We need to wait now until the deadline has passed, which will be + notified by the hydra-node through the WebSocket API with a + ReadyToFanout message. +

+ +

+ At this point, any head member can issue distribution of funds on layer + 1. You can do this through the WebSocket API one last time: +

+ + + +

+ This will submit a transaction to layer 1. Once successful, it will be + indicated by a HeadIsFinalized message that includes the + distributed utxo. +

+ +

+ To confirm, you can query the funds of both alice and bob on layer 1: +

+ + + + + +

That's it. That's the full life cycle of a Hydra head.

+ + ); +} diff --git a/apps/playground/src/pages/providers/hydra-endpoints/index.tsx b/apps/playground/src/pages/providers/hydra-endpoints/index.tsx index b42cf4167..1a35abac1 100644 --- a/apps/playground/src/pages/providers/hydra-endpoints/index.tsx +++ b/apps/playground/src/pages/providers/hydra-endpoints/index.tsx @@ -1,4 +1,4 @@ -import { HydraProvider } from "@meshsdk/core"; +import { HydraProvider } from "@meshsdk/hydra"; import HydraInitializeHead from "./init-head"; import HydraOnMessage from "./on-message"; diff --git a/apps/playground/src/pages/providers/hydra-endpoints/init-head.tsx b/apps/playground/src/pages/providers/hydra-endpoints/init-head.tsx index db6387adc..e54254f9f 100644 --- a/apps/playground/src/pages/providers/hydra-endpoints/init-head.tsx +++ b/apps/playground/src/pages/providers/hydra-endpoints/init-head.tsx @@ -1,4 +1,5 @@ -import { HydraProvider, MeshTxBuilder, MeshWallet } from "@meshsdk/core"; +import { MeshTxBuilder, MeshWallet } from "@meshsdk/core"; +import { HydraProvider } from "@meshsdk/hydra"; import Button from "~/components/button/button"; import LiveCodeDemo from "~/components/sections/live-code-demo"; @@ -39,14 +40,16 @@ function Right(hydraProvider: HydraProvider, provider: string) { async function runDemo() { hydraProvider.onMessage((message) => { console.log("Hydra onMessage", message); + if (message.tag === "Greetings") { + console.log("Greetings", JSON.stringify(message)); + } }); hydraProvider.onStatusChange((status) => { console.log("Hydra status", status); }); - await hydraProvider.connect(); - // await hydraProvider.initializesHead(); + // await hydraProvider.init(); } async function fetchutxo() { @@ -83,7 +86,7 @@ function Right(hydraProvider: HydraProvider, provider: string) { const pp = await hydraProvider.fetchProtocolParameters(); // const utxos = await hydraProvider.fetchAddressUTxOs(walletA.addr); // console.log("utxos", utxos); - const utxos = await wallet.getUtxos('enterprise'); + const utxos = await wallet.getUtxos("enterprise"); // console.log("utxos", utxos); const changeAddress = walletA.addr; diff --git a/apps/playground/src/pages/providers/hydra-endpoints/on-message.tsx b/apps/playground/src/pages/providers/hydra-endpoints/on-message.tsx index 356f38c25..5a0d5dd61 100644 --- a/apps/playground/src/pages/providers/hydra-endpoints/on-message.tsx +++ b/apps/playground/src/pages/providers/hydra-endpoints/on-message.tsx @@ -1,6 +1,6 @@ -import { useEffect, useState } from "react"; +import { useEffect } from "react"; -import { HydraProvider } from "@meshsdk/core"; +import { HydraProvider } from "@meshsdk/hydra"; import Link from "~/components/link"; import TwoColumnsScroll from "~/components/sections/two-columns-scroll"; diff --git a/apps/playground/src/pages/providers/hydra.tsx b/apps/playground/src/pages/providers/hydra.tsx index ac5a9dd6e..feeec7995 100644 --- a/apps/playground/src/pages/providers/hydra.tsx +++ b/apps/playground/src/pages/providers/hydra.tsx @@ -1,6 +1,6 @@ import type { NextPage } from "next"; -import { HydraProvider } from "@meshsdk/core"; +import { HydraProvider } from "@meshsdk/hydra"; import ButtonFloatDocumentation from "~/components/button/button-float-documentation"; import SidebarFullwidth from "~/components/layouts/sidebar-fullwidth"; @@ -28,12 +28,15 @@ const ReactPage: NextPage = () => { { label: "Get protocol parameters", to: "AA" }, ]; - let code1 = `import { HydraProvider } from "@meshsdk/core";\n\n`; + let code1 = `import { HydraProvider } from "@meshsdk/hydra";\n\n`; code1 += `const hydraProvider = new HydraProvider('');`; code1 += `\nawait hydraProvider.connect();`; const hydraUrl = useProviders((state) => state.hydraUrl); - const hydraProvider = new HydraProvider({ url: hydraUrl }); + + const hydraProvider = new HydraProvider({ + url: hydraUrl, + }); return ( <> diff --git a/package-lock.json b/package-lock.json index 8f572d4f0..3d170d2e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -287,6 +287,7 @@ "@mdx-js/react": "^3.0.1", "@meshsdk/contract": "*", "@meshsdk/core": "*", + "@meshsdk/hydra": "*", "@meshsdk/react": "*", "@next/mdx": "^14.2.3", "@next/third-parties": "^14.2.5", @@ -5981,6 +5982,10 @@ "resolved": "packages/mesh-core-cst", "link": true }, + "node_modules/@meshsdk/hydra": { + "resolved": "packages/hydra", + "link": true + }, "node_modules/@meshsdk/provider": { "resolved": "packages/mesh-provider", "link": true @@ -8037,6 +8042,119 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@stricahq/bip32ed25519": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@stricahq/bip32ed25519/-/bip32ed25519-1.1.1.tgz", + "integrity": "sha512-BwaaH2ZhppJyB+lfd4R16NLJ0we5L2rfT+U+LcXL7h1LP1Kbf6ilxlyhCbUuc9i9U4VFb5hcOfcOZhx6mtoSOg==", + "license": "Apache-2.0", + "dependencies": { + "blakejs": "^1.1.1", + "bn.js": "^5.2.0", + "buffer": "^6.0.3", + "chai": "^4.3.4", + "elliptic": "6.6.1", + "hash.js": "^1.1.7", + "pbkdf2": "^3.1.2" + } + }, + "node_modules/@stricahq/bip32ed25519/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@stricahq/bip32ed25519/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@stricahq/cbors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stricahq/cbors/-/cbors-1.0.3.tgz", + "integrity": "sha512-FlV5DaQtTeSSgkC9S4CiO167+x1t6uSNixQ32QMWIMG7+/LhOtzv4GPf4qJR6z7C31mzx+mRlf86dJt9lfBeVw==", + "license": "Apache-2.0", + "dependencies": { + "bignumber.js": "^9.0.2", + "buffer": "^6.0.3" + } + }, + "node_modules/@stricahq/cbors/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@stricahq/cbors/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@sveltejs/adapter-auto": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz", @@ -10025,6 +10143,15 @@ "util": "^0.12.5" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -10812,7 +10939,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, "license": "MIT" }, "node_modules/browser-resolve": { @@ -11404,6 +11530,33 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -11470,6 +11623,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -11584,7 +11749,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, "funding": [ { "type": "github", @@ -12430,6 +12594,18 @@ "dev": true, "license": "MIT" }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -12756,7 +12932,6 @@ "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -12772,7 +12947,6 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true, "license": "MIT" }, "node_modules/emittery": { @@ -14927,6 +15101,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -15391,7 +15574,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -15539,7 +15721,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, "license": "MIT", "dependencies": { "hash.js": "^1.0.3", @@ -15551,7 +15732,6 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, "license": "ISC" }, "node_modules/html-escaper": { @@ -17391,7 +17571,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -17811,6 +17990,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -18980,14 +19168,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, "license": "MIT" }, "node_modules/minimatch": { @@ -19030,7 +19216,6 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, "license": "ISC", "engines": { "node": ">=8" @@ -19458,7 +19643,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", @@ -19471,7 +19655,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -22789,6 +22972,15 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -25192,7 +25384,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -25203,14 +25394,12 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -25221,7 +25410,6 @@ "version": "3.0.21", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, "license": "CC0-1.0" }, "node_modules/speed-limiter": { @@ -26943,7 +27131,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -27603,7 +27790,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", @@ -28580,7 +28766,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -28594,7 +28779,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, "license": "ISC" }, "node_modules/ws": { @@ -28843,6 +29027,3159 @@ "typescript": "^5.3.3" } }, + "packages/hydra": { + "name": "@meshsdk/hydra", + "version": "1.9.0-beta.5", + "dependencies": { + "@meshsdk/common": "1.9.0-beta.1", + "@meshsdk/core-cst": "1.9.0-beta.1", + "axios": "^1.7.2" + }, + "devDependencies": { + "@meshsdk/configs": "*", + "@swc/core": "^1.10.7", + "eslint": "^8.57.0", + "tsup": "^8.0.2", + "typescript": "^5.3.3" + } + }, + "packages/hydra/node_modules/@cardano-sdk/core": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@cardano-sdk/core/-/core-0.43.0.tgz", + "integrity": "sha512-hPnZXjObJub0eXV2dDAG2/gEg/vw092RZ1VGMZfBSqavz18Tg/K6jGQ3cOpWZ9d+MqFzZTCB+s5ctdRkYt3idA==", + "license": "Apache-2.0", + "dependencies": { + "@biglup/is-cid": "^1.0.3", + "@cardano-ogmios/client": "6.9.0", + "@cardano-ogmios/schema": "6.9.0", + "@cardano-sdk/crypto": "~0.1.32", + "@cardano-sdk/util": "~0.15.5", + "@foxglove/crc": "^0.0.3", + "@scure/base": "^1.1.1", + "fraction.js": "4.0.1", + "ip-address": "^9.0.5", + "lodash": "^4.17.21", + "ts-custom-error": "^3.2.0", + "ts-log": "^2.2.4", + "web-encoding": "^1.1.5" + }, + "engines": { + "node": ">=16.20.2" + }, + "peerDependencies": { + "rxjs": "^7.4.0" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + } + } + }, + "packages/hydra/node_modules/@cardano-sdk/crypto": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@cardano-sdk/crypto/-/crypto-0.1.32.tgz", + "integrity": "sha512-RCKFvkzD32QpKQ0jULADVRNmfBNkCwiZl2nlFbkZ3aCrfIex+6/2CizoagJ161fA7lL5/HGuzWfjOg3GX2ax6w==", + "license": "Apache-2.0", + "dependencies": { + "@cardano-sdk/util": "~0.15.5", + "blake2b": "^2.1.4", + "i": "^0.3.7", + "libsodium-wrappers-sumo": "^0.7.5", + "lodash": "^4.17.21", + "npm": "^9.3.0", + "pbkdf2": "^3.1.2", + "ts-custom-error": "^3.2.0", + "ts-log": "^2.2.4" + }, + "engines": { + "node": ">=16.20.2" + }, + "peerDependencies": { + "@dcspark/cardano-multiplatform-lib-asmjs": "^3.1.1", + "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1", + "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1" + }, + "peerDependenciesMeta": { + "@dcspark/cardano-multiplatform-lib-asmjs": { + "optional": true + }, + "@dcspark/cardano-multiplatform-lib-browser": { + "optional": true + }, + "@dcspark/cardano-multiplatform-lib-nodejs": { + "optional": true + } + } + }, + "packages/hydra/node_modules/@meshsdk/common": { + "version": "1.9.0-beta.1", + "resolved": "https://registry.npmjs.org/@meshsdk/common/-/common-1.9.0-beta.1.tgz", + "integrity": "sha512-RmKWMg60w1ZxI0jGSlYpk7bM9dO3jErtV1BjiTKx/cLaJtgDK4QfNhKZ8SMokcQ7p25uC1gC4ReqvBb+ypV+mQ==", + "license": "Apache-2.0", + "dependencies": { + "bech32": "^2.0.0", + "bip39": "3.1.0", + "blake2b": "^2.1.4" + } + }, + "packages/hydra/node_modules/@meshsdk/core-cst": { + "version": "1.9.0-beta.1", + "resolved": "https://registry.npmjs.org/@meshsdk/core-cst/-/core-cst-1.9.0-beta.1.tgz", + "integrity": "sha512-MyUf/QSMkVX33NrmLoTnGYrURthrx7GmW8P2oimDUn77OTDE0trcy7T8EPNkhSHBXpGxJIB/2E15Q5xNhRJlOQ==", + "license": "Apache-2.0", + "dependencies": { + "@cardano-sdk/core": "^0.43.0", + "@cardano-sdk/crypto": "^0.1.32", + "@cardano-sdk/util": "^0.15.5", + "@harmoniclabs/bytestring": "1.0.0", + "@harmoniclabs/cbor": "1.3.0", + "@harmoniclabs/crypto": "0.2.4", + "@harmoniclabs/pair": "1.0.0", + "@harmoniclabs/plutus-data": "1.2.4", + "@harmoniclabs/uplc": "1.2.4", + "@meshsdk/common": "1.9.0-beta.1", + "@stricahq/bip32ed25519": "^1.1.0", + "@stricahq/cbors": "^1.0.0", + "@types/base32-encoding": "^1.0.2", + "base32-encoding": "^1.0.0", + "bech32": "^2.0.0", + "bn.js": "^5.2.0", + "pbkdf2": "^3.1.2" + } + }, + "packages/hydra/node_modules/fraction.js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.1.tgz", + "integrity": "sha512-NQYzZw8MUsxSZFQo6E8tKOlmSd/BlDTNOR4puXFSHSwFwNaIlmbortQy5PDN/KnVQ4xWG2NtN0J0hjPw7eE06A==", + "license": "MIT OR GPL-2.0", + "engines": { + "node": "*" + } + }, + "packages/hydra/node_modules/npm": { + "version": "9.9.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.4.tgz", + "integrity": "sha512-NzcQiLpqDuLhavdyJ2J3tGJ/ni/ebcqHVFZkv1C4/6lblraUPbPgCJ4Vhb4oa3FFhRa2Yj9gA58jGH/ztKueNQ==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "sigstore", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.5.0", + "@npmcli/config": "^6.4.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.4", + "chalk": "^5.3.0", + "ci-info": "^4.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.3", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.1", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.20", + "libnpmexec": "^6.0.4", + "libnpmfund": "^4.2.1", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.20", + "libnpmpublish": "^7.5.1", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^7.0.4", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.1", + "nopt": "^7.2.0", + "normalize-package-data": "^5.0.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.3.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.2", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.6.0", + "sigstore": "^1.9.0", + "spdx-expression-parse": "^3.0.1", + "ssri": "^10.0.5", + "supports-color": "^9.4.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "packages/hydra/node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.5.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.1.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/config": { + "version": "6.4.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^4.0.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/git": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/package-json": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/query": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "packages/hydra/node_modules/npm/node_modules/@sigstore/bundle": { + "version": "1.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@sigstore/sign": { + "version": "1.0.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@sigstore/tuf": { + "version": "1.0.3", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "packages/hydra/node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/agentkeepalive": { + "version": "4.5.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/bin-links": { + "version": "4.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/cacache": { + "version": "17.1.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/ci-info": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/hydra/node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/hydra/node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "packages/hydra/node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "packages/hydra/node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "packages/hydra/node_modules/npm/node_modules/debug": { + "version": "4.3.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/hydra/node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/hydra/node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/diff": { + "version": "5.2.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "packages/hydra/node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "packages/hydra/node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/hydra/node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "packages/hydra/node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "packages/hydra/node_modules/npm/node_modules/foreground-child": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/function-bind": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/hydra/node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/glob": { + "version": "10.3.10", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/hasown": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/hydra/node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "packages/hydra/node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/hydra/node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/hydra/node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "packages/hydra/node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "packages/hydra/node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/ini": { + "version": "4.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/hydra/node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "packages/hydra/node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/is-core-module": { + "version": "2.13.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/hydra/node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/jackspeak": { + "version": "2.3.6", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmdiff": { + "version": "5.0.21", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmexec": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmfund": { + "version": "4.2.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.5.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.21", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmpublish": { + "version": "7.5.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmsearch": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "packages/hydra/node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minimatch": { + "version": "9.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp": { + "version": "9.4.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/nopt": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-install-checks": { + "version": "6.3.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-packlist": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-profile": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "packages/hydra/node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/hydra/node_modules/npm/node_modules/pacote": { + "version": "15.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/path-scurry": { + "version": "1.10.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "packages/hydra/node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "packages/hydra/node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "packages/hydra/node_modules/npm/node_modules/read": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/read-package-json": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/hydra/node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/hydra/node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "packages/hydra/node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "packages/hydra/node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "packages/hydra/node_modules/npm/node_modules/semver": { + "version": "7.6.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/hydra/node_modules/npm/node_modules/sigstore": { + "version": "1.9.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/socks": { + "version": "2.8.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/hydra/node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "packages/hydra/node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.17", + "inBundle": true, + "license": "CC0-1.0" + }, + "packages/hydra/node_modules/npm/node_modules/ssri": { + "version": "10.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hydra/node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/hydra/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "packages/hydra/node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/tuf-js": { + "version": "1.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "packages/hydra/node_modules/npm/node_modules/which": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/hydra/node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "packages/hydra/node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/hydra/node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, "packages/mesh-common": { "name": "@meshsdk/common", "version": "1.9.0-beta.5", diff --git a/packages/hydra/README.md b/packages/hydra/README.md new file mode 100644 index 000000000..3fbb596cb --- /dev/null +++ b/packages/hydra/README.md @@ -0,0 +1,9 @@ +# mesh-hydra + +[meshjs.dev](https://meshjs.dev/) + +## Get started + +```bash +npm install @meshsdk/hydra +``` diff --git a/packages/hydra/package.json b/packages/hydra/package.json new file mode 100644 index 000000000..91f005599 --- /dev/null +++ b/packages/hydra/package.json @@ -0,0 +1,41 @@ +{ + "name": "@meshsdk/hydra", + "version": "1.9.0-beta.5", + "description": "Mesh Hydra package", + "main": "./dist/index.cjs", + "browser": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist/**" + ], + "scripts": { + "build:mesh": "tsup src/index.ts --format esm,cjs --dts", + "clean": "rm -rf .turbo && rm -rf dist && rm -rf node_modules", + "dev": "tsup src/index.ts --format esm,cjs --watch --dts", + "format": "prettier --check . --ignore-path ../../.gitignore", + "lint": "eslint", + "pack": "npm pack --pack-destination=./dist", + "test": "jest" + }, + "dependencies": { + "@meshsdk/common": "1.9.0-beta.1", + "@meshsdk/core-cst": "1.9.0-beta.1", + "axios": "^1.7.2" + }, + "devDependencies": { + "@meshsdk/configs": "*", + "@swc/core": "^1.10.7", + "eslint": "^8.57.0", + "tsup": "^8.0.2", + "typescript": "^5.3.3" + } +} diff --git a/packages/mesh-provider/src/hydra/constants/index.ts b/packages/hydra/src/constants/index.ts similarity index 100% rename from packages/mesh-provider/src/hydra/constants/index.ts rename to packages/hydra/src/constants/index.ts diff --git a/packages/mesh-provider/src/hydra/convertor.ts b/packages/hydra/src/convertor.ts similarity index 100% rename from packages/mesh-provider/src/hydra/convertor.ts rename to packages/hydra/src/convertor.ts diff --git a/packages/mesh-provider/src/hydra/hydra-connection.ts b/packages/hydra/src/hydra-connection.ts similarity index 96% rename from packages/mesh-provider/src/hydra/hydra-connection.ts rename to packages/hydra/src/hydra-connection.ts index 4c5579639..4a2dfafd3 100644 --- a/packages/mesh-provider/src/hydra/hydra-connection.ts +++ b/packages/hydra/src/hydra-connection.ts @@ -48,8 +48,7 @@ export class HydraConnection extends EventEmitter { console.error("Hydra websocket closed", code); }; this._websocket.onmessage = (data) => { - // console.log("Received message", JSON.parse(data.data)); - const message = JSON.parse(data.data); + const message = JSON.parse(data.data as string); this._eventEmitter.emit("onmessage", message); this.processStatus(message); }; diff --git a/packages/hydra/src/hydra-instance.ts b/packages/hydra/src/hydra-instance.ts new file mode 100644 index 000000000..2a18d8d16 --- /dev/null +++ b/packages/hydra/src/hydra-instance.ts @@ -0,0 +1,58 @@ +import { HydraProvider } from "./hydra-provider"; + +/** + * todo: implement https://hydra.family/head-protocol/docs/tutorial/ + */ +export class HydraInstance { + provider: HydraProvider; + + constructor({ provider }: { provider: HydraProvider }) { + this.provider = provider; + } + + /** + * To commit funds to the head, choose which UTxO you would like to make available on layer 2. + */ + async commitFunds() { + // cardano-cli query utxo \ + // --address $(cat credentials/bob-funds.addr) \ + // --out-file bob-commit-utxo.json + // curl -X POST 127.0.0.1:4002/commit \ + // --data @bob-commit-utxo.json \ + // > bob-commit-tx.json + // cardano-cli transaction sign \ + // --tx-file bob-commit-tx.json \ + // --signing-key-file credentials/bob-funds.sk \ + // --out-file bob-commit-tx-signed.json + // cardano-cli transaction submit --tx-file bob-commit-tx-signed.json + } + + /** + * https://hydra.family/head-protocol/docs/how-to/commit-blueprint/ + * + * If you don't want to commit any funds and only want to receive on layer two, you can request an empty commit transaction.: + * @returns + */ + async commitBlueprint() { + return "txHash"; + } + + /** + * https://hydra.family/head-protocol/unstable/docs/how-to/incremental-commit + * + * If you don't want to commit any funds and only want to receive on layer two, you can request an empty commit transaction.: + * @returns + */ + async incrementalCommit() { + return "txHash"; + } + + /** + * https://hydra.family/head-protocol/docs/how-to/incremental-decommit + * + * @returns + */ + async incrementalDecommit() { + return "txHash"; + } +} diff --git a/packages/mesh-provider/src/hydra/hydra-provider.ts b/packages/hydra/src/hydra-provider.ts similarity index 57% rename from packages/mesh-provider/src/hydra/hydra-provider.ts rename to packages/hydra/src/hydra-provider.ts index ce7f1caa5..90fad5af5 100644 --- a/packages/mesh-provider/src/hydra/hydra-provider.ts +++ b/packages/hydra/src/hydra-provider.ts @@ -15,18 +15,43 @@ import { UTxO, } from "@meshsdk/common"; -import { parseHttpError } from "../utils"; +import { parseHttpError } from "./utils"; import { toUTxO } from "./convertor"; import { HydraConnection } from "./hydra-connection"; -import { IHydraTransaction } from "./interfaces"; -import { HydraStatus, HydraUTxO } from "./types"; +import { HydraStatus, HydraTransaction, HydraUTxO } from "./types"; +import { + CommandFailed, + Committed, + DecommitApproved, + DecommitFinalized, + DecommitInvalid, + DecommitRequested, + GetUTxOResponse, + Greetings, + HeadIsAborted, + HeadIsClosed, + HeadIsContested, + HeadIsFinalized, + HeadIsInitializing, + HeadIsOpen, + IgnoredHeadInitializing, + InvalidInput, + PeerConnected, + PeerDisconnected, + PeerHandshakeFailure, + PostTxOnChainFailed, + ReadyToFanout, + SnapshotConfirmed, + TxInvalid, + TxValid, +} from "./types/events"; /** * HydraProvider is a tool for administrating & interacting with Hydra Heads. * * Usage: * ``` - * import { HydraProvider } from "@meshsdk/core"; + * import { HydraProvider } from "@meshsdk/hydra"; * * const hydraProvider = new HydraProvider({url:'http://123.45.67.890:4001'}); */ @@ -170,6 +195,24 @@ export class HydraProvider implements IFetcher, ISubmitter { } } + /** + * A generic method to post data to a URL. + * @param url - The URL to post data to + * @param payload - The data to post + * @returns - The response from the URL + */ + async post(url: string, payload: any): Promise { + try { + const { data, status } = await this._axiosInstance.post(url, payload); + if (status === 200 || status == 202) { + return data; + } + throw parseHttpError(data); + } catch (error) { + throw parseHttpError(error); + } + } + /** * Submit a transaction to the Hydra node. Note, unlike other providers, Hydra does not return a transaction hash. * @param tx - The transaction in CBOR hex format @@ -177,13 +220,15 @@ export class HydraProvider implements IFetcher, ISubmitter { async submitTx(tx: string): Promise { try { await this.newTx(tx, "Witnessed Tx ConwayEra"); - const txId = await new Promise((resolve) => { this.onMessage((message) => { - if (message.transaction && message.transaction.cborHex === tx) { - if (message.tag === "TxValid") { - resolve(message.transaction.txId); - } else if (message.tag == "TxInvalid") { + if (message.tag === "TxValid") { + if (message.transaction && message.transaction.cborHex === tx) { + resolve(message.transaction.txId!); + } + } + if (message.tag === "TxInvalid") { + if (message.transaction && message.transaction.cborHex === tx) { throw JSON.stringify(message.validationError); } } @@ -195,6 +240,20 @@ export class HydraProvider implements IFetcher, ISubmitter { } } + /** + * Commands sent to the Hydra node. + * https://hydra.family/head-protocol/api-reference/#operation-publish-/ + * + * Accepts one of the following commands: + * - Init: init() + * - Abort: abort() + * - NewTx: newTx() + * - Decommit: decommit() + * - Close: close() + * - Contest: contest() + * - Fanout: fanout() + */ + /** * Initializes a new Head. This command is a no-op when a Head is already open and the server will output an CommandFailed message should this happen. */ @@ -225,7 +284,7 @@ export class HydraProvider implements IFetcher, ISubmitter { description = "", txId?: string, ) { - const transaction: IHydraTransaction = { + const transaction: HydraTransaction = { type: type, description: description, cborHex: cborHex, @@ -289,8 +348,138 @@ export class HydraProvider implements IFetcher, ISubmitter { this._connection.send(data); } - onMessage(callback: (message: any) => void) { - this._eventEmitter.on("onmessage", callback); + // todo: is this function https://hydra.family/head-protocol/api-reference/#operation-publish-/commit the same as the POST? + // curl -X POST 127.0.0.1:4001/commit \ + // --data @alice-commit-utxo.json \ + // > alice-commit-tx.json + /** + * Draft a commit transaction, which can be completed and later submitted to the L1 network. + * https://hydra.family/head-protocol/api-reference/#operation-publish-/commit + */ + async commit(){ + await this.post("/commit", { + // todo --data @alice-commit-utxo.json + }); + // return alice-commit-tx.json + +// If you don't want to commit any funds and only want to receive on layer two, you can request an empty commit transaction as shown below (example for bob): +// curl -X POST 127.0.0.1:4002/commit --data "{}" > bob-commit-tx.json +// cardano-cli transaction submit --tx-file bob-commit-tx.json + } + + /** + * Events emitted by the Hydra node. + * https://hydra.family/head-protocol/api-reference/#operation-subscribe-/ + * + * @param callback - The callback function to be called when a message is received + */ + onMessage( + callback: ( + data: + | Greetings + | PeerConnected + | PeerDisconnected + | PeerHandshakeFailure + | HeadIsInitializing + | Committed + | HeadIsOpen + | HeadIsClosed + | HeadIsContested + | ReadyToFanout + | HeadIsAborted + | HeadIsFinalized + | TxValid + | TxInvalid + | SnapshotConfirmed + | GetUTxOResponse + | InvalidInput + | PostTxOnChainFailed + | CommandFailed + | IgnoredHeadInitializing + | DecommitInvalid + | DecommitRequested + | DecommitApproved + | DecommitFinalized, + ) => void, + ) { + this._eventEmitter.on("onmessage", (message) => { + switch (message.tag) { + case "Greetings": + callback(message as Greetings); + break; + case "PeerConnected": + callback(message as PeerConnected); + break; + case "onPeerDisconnected": + callback(message as PeerDisconnected); + break; + case "PeerHandshakeFailure": + callback(message as PeerHandshakeFailure); + break; + case "HeadIsInitializing": + callback(message as HeadIsInitializing); + break; + case "Committed": + callback(message as Committed); + break; + case "HeadIsOpen": + callback(message as HeadIsOpen); + break; + case "HeadIsClosed": + callback(message as HeadIsClosed); + break; + case "HeadIsContested": + callback(message as HeadIsContested); + break; + case "ReadyToFanout": + callback(message as ReadyToFanout); + break; + case "HeadIsAborted": + callback(message as HeadIsAborted); + break; + case "HeadIsFinalized": + callback(message as HeadIsFinalized); + break; + case "TxValid": + callback(message as TxValid); + break; + case "TxInvalid": + callback(message as TxInvalid); + break; + case "SnapshotConfirmed": + callback(message as SnapshotConfirmed); + break; + case "GetUTxOResponse": + callback(message as GetUTxOResponse); + break; + case "InvalidInput": + callback(message as InvalidInput); + break; + case "PostTxOnChainFailed": + callback(message as PostTxOnChainFailed); + break; + case "CommandFailed": + callback(message as CommandFailed); + break; + case "IgnoredHeadInitializing": + callback(message as IgnoredHeadInitializing); + break; + case "DecommitInvalid": + callback(message as DecommitInvalid); + break; + case "DecommitRequested": + callback(message as DecommitRequested); + break; + case "DecommitApproved": + callback(message as DecommitApproved); + break; + case "DecommitFinalized": + callback(message as DecommitFinalized); + break; + default: + break; + } + }); } onStatusChange(callback: (status: HydraStatus) => void) { diff --git a/packages/mesh-provider/src/hydra/index.ts b/packages/hydra/src/index.ts similarity index 100% rename from packages/mesh-provider/src/hydra/index.ts rename to packages/hydra/src/index.ts diff --git a/packages/hydra/src/types/events.ts b/packages/hydra/src/types/events.ts new file mode 100644 index 000000000..48bd54d92 --- /dev/null +++ b/packages/hydra/src/types/events.ts @@ -0,0 +1,236 @@ +import { + HydraParty, + HydraSnapshot, + HydraTransaction, + HydraUTxOs, +} from "../types"; +import { PostChainTx } from "./hydra-post-chain-tx"; + +export type Greetings = { + tag: "Greetings"; + me: { + vkey: string; + }; + headStatus: + | "Idle" + | "Initializing" + | "Open" + | "Closed" + | "FanoutPossible" + | "Final"; + hydraHeadId: string; + snapshotUtxo: HydraUTxOs; + timestamp: string; + hydraNodeVersion: string; +}; + +export type PeerConnected = { + tag: "PeerConnected"; + peer: string; + seq: number; + timestamp: string; +}; + +export type PeerDisconnected = { + tag: "PeerDisconnected"; + peer: string; + seq: number; + timestamp: string; +}; + +export type PeerHandshakeFailure = { + tag: "PeerHandshakeFailure"; + remoteHost: + | { + tag: "IPv4"; + ipv4: string; + } + | { + tag: "IPv6"; + ipv6: string; + }; + ourVersion: number; + theirVersions: number[]; + seq: number; + timestamp: string; +}; + +export type HeadIsInitializing = { + tag: "HeadIsInitializing"; + headId: string; + parties: HydraParty[]; + seq: number; + timestamp: string; +}; + +export type Committed = { + tag: "Committed"; + parties: HydraParty[]; + utxo: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type HeadIsOpen = { + tag: "HeadIsOpen"; + headId: string; + utxo: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type HeadIsClosed = { + tag: "HeadIsClosed"; + headId: string; + snapshotNumber: number; + contestationDeadline: string; + seq: number; + timestamp: string; +}; + +export type HeadIsContested = { + tag: "HeadIsContested"; + headId: string; + snapshotNumber: number; + contestationDeadline: string; + seq: number; + timestamp: string; +}; + +export type ReadyToFanout = { + tag: "ReadyToFanout"; + headId: string; + seq: number; + timestamp: string; +}; + +export type HeadIsAborted = { + tag: "HeadIsAborted"; + headId: string; + utxo: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type HeadIsFinalized = { + tag: "HeadIsFinalized"; + headId: string; + utxo: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type TxValid = { + tag: "TxValid"; + headId: string; + transaction: HydraTransaction; + seq: number; + timestamp: string; +}; + +export type TxInvalid = { + tag: "TxInvalid"; + headId: string; + utxo: HydraUTxOs; + transaction: HydraTransaction; + validationError: { reason: string }; + seq: number; + timestamp: string; +}; + +export type SnapshotConfirmed = { + tag: "SnapshotConfirmed"; + headId: string; + snapshot: HydraSnapshot; + seq: number; + timestamp: string; +}; + +export type GetUTxOResponse = { + tag: "GetUTxOResponse"; + headId: string; + utxo: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type InvalidInput = { + tag: "InvalidInput"; + reason: string; + input: string; + seq: number; + timestamp: string; +}; + +export type PostTxOnChainFailed = { + tag: "PostTxOnChainFailed"; + postChainTx: PostChainTx; + postTxError: any; + seq: number; + timestamp: string; +}; + +export type CommandFailed = { + tag: "CommandFailed"; + clientInput: + | { + tag: "Abort"; + } + | { tag: "NewTx"; transaction: HydraTransaction } + | { tag: "GetUTxO" } + | { tag: "Decommit"; decommitTx: HydraTransaction } + | { tag: "Close" } + | { tag: "Contest" } + | { tag: "Fanout" }; + seq: number; + timestamp: string; +}; + +export type IgnoredHeadInitializing = { + tag: "IgnoredHeadInitializing"; + headId: string; + contestationPeriod: number; + parties: HydraParty[]; + participants: string[]; + seq: number; + timestamp: string; +}; + +export type DecommitInvalid = { + tag: "DecommitInvalid"; + headId: string; + decommitTx: HydraTransaction; + decommitInvalidReason: + | { + tag: "DecommitTxInvalid"; + localUtxo: HydraUTxOs; + validationError: { reason: string }; + } + | { tag: "DecommitAlreadyInFlight"; otherDecommitTxId: string }; +}; + +export type DecommitRequested = { + tag: "DecommitRequested"; + headId: string; + decommitTx: HydraTransaction; + utxoToDecommit: HydraUTxOs; + seq: number; + timestmap: string; +}; + +export type DecommitApproved = { + tag: "DecommitApproved"; + headId: string; + decommitTxId: string; + utxoToDecommit: HydraUTxOs; + seq: number; + timestamp: string; +}; + +export type DecommitFinalized = { + tag: "DecommitFinalized"; + headId: string; + decommitTxId: string; + seq: number; + timestamp: string; +}; diff --git a/packages/hydra/src/types/hydra-post-chain-tx.ts b/packages/hydra/src/types/hydra-post-chain-tx.ts new file mode 100644 index 000000000..ee8c9dee1 --- /dev/null +++ b/packages/hydra/src/types/hydra-post-chain-tx.ts @@ -0,0 +1,73 @@ +import { HydraHeadParameters, HydraSnapshot, HydraUTxO } from "./hydra"; + +export type PostChainTx = + | InitTx + | AbortTx + | CollectComTx + | DecrementTx + | CloseTx + | ContestTx + | FanoutTx; + +export type InitTx = { + tag: "InitTx"; + participants: string[]; + headParameters: HydraHeadParameters; +}; + +export type AbortTx = { + tag: "AbortTx"; + utxo: { [txRef: string]: HydraUTxO }; + headSeed: string; +}; + +export type CollectComTx = { + tag: "CollectComTx"; + utxo: { [txRef: string]: HydraUTxO }; + headId: string; + headParameters: HydraHeadParameters; +}; + +export type InitialSnapshot = { + headId: string; + initialUtxo: { [txRef: string]: HydraUTxO }; + tag: "InitialSnapshot"; +}; + +export type ConfirmedSnapshot = { + snapshot: HydraSnapshot; + signatures: { + mutliSignature: string[]; + }; + tag: "ConfirmedSnapshot"; +}; +export type DecrementTx = { + tag: "DecrementTx"; + headId: string; + headParameters: HydraHeadParameters; + decerementingSnapshot: InitialSnapshot | ConfirmedSnapshot; +}; + +export type CloseTx = { + tag: "CloseTx"; + headId: string; + headParameters: HydraHeadParameters; + closingSnapshot: InitialSnapshot | ConfirmedSnapshot; + openVersion: number; +}; + +export type ContestTx = { + tag: "ContestTx"; + headId: string; + headParameters: HydraHeadParameters; + contestingSnapshot: InitialSnapshot | ConfirmedSnapshot; + openVersion: number; +}; + +export type FanoutTx = { + tag: "FanoutTx"; + utxo: { [txRef: string]: HydraUTxO }; + utxoToDecommit: { [txRef: string]: HydraUTxO }; + headSeed: string; + contestationDeadline: string; +}; diff --git a/packages/mesh-provider/src/hydra/types/index.ts b/packages/hydra/src/types/hydra.ts similarity index 61% rename from packages/mesh-provider/src/hydra/types/index.ts rename to packages/hydra/src/types/hydra.ts index 4e0c4f4eb..138c1cb0b 100644 --- a/packages/mesh-provider/src/hydra/types/index.ts +++ b/packages/hydra/src/types/hydra.ts @@ -1,21 +1,5 @@ import { HYDRA_STATUS } from "../constants"; -export type HydraStatus = (typeof HYDRA_STATUS)[keyof typeof HYDRA_STATUS]; - -export type HydraUTxOs = { - [x: string]: HydraUTxO; -}; - -export type HydraUTxO = { - address: string; - value: HydraAssets; - referenceScript?: HydraReferenceScript; - datumhash?: string; - inlineDatum?: object; - inlineDatumhash?: string; - datum?: string; -}; - export type HydraAssets = { lovelace: number; } & { @@ -26,6 +10,22 @@ export type HydraAssets = { | undefined; }; +export type HydraCommitTransaction = { + cborHex: string; + description: string; + txId: string; + type: string; +}; + +export interface HydraHeadParameters { + contestationPeriod: number; + parties: HydraParty[]; +} + +export type HydraParty = { + vkey: string; +}; + export type HydraReferenceScript = { scriptLanguage: string; script: { @@ -39,9 +39,34 @@ export type HydraReferenceScript = { }; }; -export type HydraCommitTransaction = { - cborHex: string; +export type HydraStatus = (typeof HYDRA_STATUS)[keyof typeof HYDRA_STATUS]; + +export type HydraSnapshot = { + headId: string; + snapshotNumber: string; + utxo: HydraUTxOs; + confirmedTransactions: string[]; + utxoToDecommit: HydraUTxOs; + version: number; +}; + +export type HydraTransaction = { + type: "Tx ConwayEra" | "Unwitnessed Tx ConwayEra" | "Witnessed Tx ConwayEra"; description: string; - txId: string; - type: string; + cborHex: string; + txId?: string; +}; + +export type HydraUTxOs = { + [txRef: string]: HydraUTxO; +}; + +export type HydraUTxO = { + address: string; + value: HydraAssets; + referenceScript?: HydraReferenceScript; + datumhash?: string; + inlineDatum?: object; + inlineDatumhash?: string; + datum?: string; }; diff --git a/packages/hydra/src/types/index.ts b/packages/hydra/src/types/index.ts new file mode 100644 index 000000000..424de48f3 --- /dev/null +++ b/packages/hydra/src/types/index.ts @@ -0,0 +1,2 @@ +export * from "./events"; +export * from "./hydra"; diff --git a/packages/hydra/src/utils/index.ts b/packages/hydra/src/utils/index.ts new file mode 100644 index 000000000..62a725b83 --- /dev/null +++ b/packages/hydra/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./parse-http-error"; diff --git a/packages/hydra/src/utils/parse-http-error.ts b/packages/hydra/src/utils/parse-http-error.ts new file mode 100644 index 000000000..86d8a229e --- /dev/null +++ b/packages/hydra/src/utils/parse-http-error.ts @@ -0,0 +1,19 @@ +import axios from "axios"; + +export const parseHttpError = (error: unknown): string => { + if (axios.isAxiosError(error)) { + if (error.response) { + return JSON.stringify({ + data: error.response.data, + headers: error.response.headers, + status: error.response.status, + }); + } else if (error.request && !(error.request instanceof XMLHttpRequest)) { + return JSON.stringify(error.request); + } else { + return JSON.stringify({ code: error.code, message: error.message }); + } + } else { + return JSON.stringify(error); + } +}; diff --git a/packages/hydra/tsconfig.json b/packages/hydra/tsconfig.json new file mode 100644 index 000000000..44863d662 --- /dev/null +++ b/packages/hydra/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@meshsdk/configs/typescript/base.json", + "include": ["src/**/*"], + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + } +} diff --git a/packages/hydra/tsup.config.ts b/packages/hydra/tsup.config.ts new file mode 100644 index 000000000..13e90e597 --- /dev/null +++ b/packages/hydra/tsup.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm", "cjs"], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + external: [ + "bip32", + "ecpair", + "@bitcoin-js/tiny-secp256k1-asmjs", + "bitcoinjs-lib", + ], + noExternal: ["@meshsdk/bitcoin"], + esbuildOptions(options) { + options.define = { + global: "globalThis", + process: JSON.stringify({ + env: { + NODE_ENV: "production", + }, + }), + }; + options.platform = "browser"; + }, +}); \ No newline at end of file diff --git a/packages/mesh-provider/src/hydra/hydra-instance.ts b/packages/mesh-provider/src/hydra/hydra-instance.ts deleted file mode 100644 index 69c2db9a2..000000000 --- a/packages/mesh-provider/src/hydra/hydra-instance.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { HydraProvider } from "./hydra-provider"; - -/** - * todo: implement https://hydra.family/head-protocol/docs/tutorial/ - */ -export class HydraInstance { - provider: HydraProvider; - - constructor({ provider }: { provider: HydraProvider }) { - this.provider = provider; - } - - /** - * needed? - */ - async openHead() {} - - /** - * https://hydra.family/head-protocol/docs/how-to/commit-blueprint/ - * - * If you don't want to commit any funds and only want to receive on layer two, you can request an empty commit transaction.: - * @returns - */ - async commitFunds() { - return "txHash"; - } - - /** - * https://hydra.family/head-protocol/docs/how-to/incremental-decommit - * @returns - */ - async decommitFunds() { - return "txHash"; - } -} diff --git a/packages/mesh-provider/src/hydra/interfaces/index.ts b/packages/mesh-provider/src/hydra/interfaces/index.ts deleted file mode 100644 index 7372e15ad..000000000 --- a/packages/mesh-provider/src/hydra/interfaces/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface IHydraTransaction { - type: "Tx ConwayEra" | "Unwitnessed Tx ConwayEra" | "Witnessed Tx ConwayEra"; - description: string; - cborHex: string; - txId?: string; -} - -export interface ICommandFailed { - tag: "CommandFailed"; - clientInput: - | { - tag: "Init"; - } - | { - tag: "Abort"; - } - | { tag: "NewTx"; transaction: IHydraTransaction } - | { tag: "GetUTxO" } - | { tag: "Decommit"; decommitTx: IHydraTransaction } - | { tag: "Close" } - | { tag: "Contest" } - | { tag: "Fanout" }; - seq: number; - timestamp: string; -} diff --git a/packages/mesh-provider/src/index.ts b/packages/mesh-provider/src/index.ts index 72189ad0d..7470e1364 100644 --- a/packages/mesh-provider/src/index.ts +++ b/packages/mesh-provider/src/index.ts @@ -1,6 +1,5 @@ export * from "./begin"; export * from "./blockfrost"; -export * from "./hydra"; export * from "./koios"; export * from "./maestro"; export * from "./ogmios";