diff --git a/.github/renovate.json b/.github/renovate.json index 2392ead6c..b2eb80c83 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -2,14 +2,6 @@ "extends": ["github>fluencelabs/renovate", "github>fluencelabs/renovate:npm"], "enabledManagers": ["npm", "regex"], "regexManagers": [ - { - "fileMatch": ["^packages/cli/package/src/versions\\.json$"], - "matchStrings": [ - "\"nox\": \"(?[^:]+):(?.*)\",\n" - ], - "datasourceTemplate": "docker", - "depNameTemplate": "nox" - }, { "fileMatch": ["^packages/cli/package/src/versions\\.json$"], "matchStrings": [ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 282e7a5d7..05ce0a70c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,10 +11,6 @@ on: description: "Fluence environment to run tests against" type: string default: "local" - nox-image: - description: "nox image tag" - type: string - default: "null" chain-rpc-image: description: "chain-rpc image tag" type: string @@ -88,23 +84,6 @@ jobs: kv/docker-registry/basicauth/ci password | DOCKER_PASSWORD ; kv/npm-registry/basicauth/ci token | NODE_AUTH_TOKEN; - - name: Set nox image - run: | - # set nox image - case ${{ inputs.nox-image }} in - # if nox image is not passed from e2e read from versions.json - 'null') - nox="$(jq .nox packages/cli/package/src/versions.json -r)" - ;; - # else set nox image to snapshot passed from e2e - *) - nox=${{ inputs.nox-image }} - ;; - esac - - echo "nox image used for tests is $nox" - echo "NOX_IMAGE=${nox}" >> $GITHUB_ENV - - name: Set deal images run: | # set deal images @@ -173,7 +152,6 @@ jobs: with: versions: | { - "nox": "${{ env.NOX_IMAGE }}", "chain-rpc": "${{ env.CHAIN_RPC_IMAGE }}", "chain-deploy-script": "${{ env.CHAIN_DEPLOY_SCRIPT_IMAGE }}", "subgraph-deploy-script": "${{ env.SUBGRAPH_DEPLOY_SCRIPT_IMAGE }}" diff --git a/packages/cli/package/docs/commands/README.md b/packages/cli/package/docs/commands/README.md index 4284ea522..815c9ed3c 100644 --- a/packages/cli/package/docs/commands/README.md +++ b/packages/cli/package/docs/commands/README.md @@ -3,7 +3,6 @@ * [`fluence autocomplete [SHELL]`](#fluence-autocomplete-shell) * [`fluence chain info`](#fluence-chain-info) * [`fluence default env [ENV]`](#fluence-default-env-env) -* [`fluence default peers [ENV]`](#fluence-default-peers-env) * [`fluence help [COMMAND]`](#fluence-help-command) * [`fluence local down`](#fluence-local-down) * [`fluence local init`](#fluence-local-init) @@ -20,6 +19,7 @@ * [`fluence provider deal-list`](#fluence-provider-deal-list) * [`fluence provider deal-rewards-info [DEAL-ADDRESS] [ON-CHAIN-WORKER-ID]`](#fluence-provider-deal-rewards-info-deal-address-on-chain-worker-id) * [`fluence provider deal-rewards-withdraw`](#fluence-provider-deal-rewards-withdraw) +* [`fluence provider deploy`](#fluence-provider-deploy) * [`fluence provider gen`](#fluence-provider-gen) * [`fluence provider info`](#fluence-provider-info) * [`fluence provider init`](#fluence-provider-init) @@ -109,29 +109,6 @@ EXAMPLES _See code: [src/commands/default/env.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/default/env.ts)_ -## `fluence default peers [ENV]` - -Print default Fluence network peer addresses - -``` -USAGE - $ fluence default peers [ENV] [--no-input] - -ARGUMENTS - ENV Fluence Environment to use when running the command - -FLAGS - --no-input Don't interactively ask for any input from the user - -DESCRIPTION - Print default Fluence network peer addresses - -EXAMPLES - $ fluence default peers -``` - -_See code: [src/commands/default/peers.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/default/peers.ts)_ - ## `fluence help [COMMAND]` Display help for fluence. @@ -248,7 +225,7 @@ Run docker-compose.yaml using docker compose and set up provider using all the o ``` USAGE - $ fluence local up [--no-input] [--noxes ] [--timeout ] [--priv-key ] + $ fluence local up [--no-input] [--peers ] [--timeout ] [--priv-key ] [--quiet-pull] [-d] [--build] [--flags <--flag arg>] [-r] [--no-wait] [--no-set-up] FLAGS @@ -261,7 +238,7 @@ FLAGS --no-set-up Don't set up provider, offer, commitments and deposit collateral, so there will be no active offer on the network after command is finished --no-wait Don't wait for services to be running|healthy - --noxes= Number of Compute Peers to generate when a new provider.yaml is created + --peers= Number of peers to generate when a new provider.yaml is created --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used by default when CLI is used in non-interactive mode @@ -286,16 +263,16 @@ Add FLT collateral to capacity commitment to activate it. Alias: fluence provide ``` USAGE $ fluence provider cc-activate [--no-input] [--env ] [--priv-key ] - [--nox-names | --cc-ids ] [--offers ] + [--peer-names | --cc-ids ] [--offers ] FLAGS --cc-ids= Comma separated capacity commitment IDs --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -314,15 +291,15 @@ Create Capacity commitment. Alias: fluence provider cc ``` USAGE $ fluence provider cc-create [--no-input] [--env ] [--priv-key ] - [--nox-names ] [--offers ] + [--peer-names ] [--offers ] FLAGS --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -340,17 +317,17 @@ Move resources from deals, withdraw FLT collateral from capacity commitments, re ``` USAGE - $ fluence provider cc-finish [--no-input] [--nox-names | --cc-ids ] [--offers ] - [--env ] [--priv-key ] + $ fluence provider cc-finish [--no-input] [--peer-names | --cc-ids ] [--offers + ] [--env ] [--priv-key ] FLAGS --cc-ids= Comma separated capacity commitment IDs --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -370,17 +347,17 @@ Get info about capacity commitments. Alias: fluence provider ci ``` USAGE $ fluence provider cc-info [--no-input] [--env ] [--priv-key ] - [--nox-names | --cc-ids ] [--offers ] [--json] + [--peer-names | --cc-ids ] [--offers ] [--json] FLAGS --cc-ids= Comma separated capacity commitment IDs --env= Fluence Environment to use when running the command --json Output JSON --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -399,16 +376,16 @@ Remove Capacity commitment. You can remove it only BEFORE you activated it by de ``` USAGE $ fluence provider cc-remove [--no-input] [--env ] [--priv-key ] - [--nox-names | --cc-ids ] [--offers ] + [--peer-names | --cc-ids ] [--offers ] FLAGS --cc-ids= Comma separated capacity commitment IDs --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -427,17 +404,17 @@ Withdraw FLT rewards from capacity commitments. Alias: fluence provider crw ``` USAGE - $ fluence provider cc-rewards-withdraw [--no-input] [--nox-names | --cc-ids ] [--offers ] - [--env ] [--priv-key ] + $ fluence provider cc-rewards-withdraw [--no-input] [--peer-names | --cc-ids ] [--offers + ] [--env ] [--priv-key ] FLAGS --cc-ids= Comma separated capacity commitment IDs --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -546,6 +523,36 @@ DESCRIPTION _See code: [src/commands/provider/deal-rewards-withdraw.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/provider/deal-rewards-withdraw.ts)_ +## `fluence provider deploy` + +Deploy manifests + +``` +USAGE + $ fluence provider deploy [--no-input] [--env ] [--priv-key ] + [--peer-names ] [--offers ] + +FLAGS + --env= Fluence Environment to use when running the command + --no-input Don't interactively ask for any input from the user + --offers= Comma-separated list of offer names. To use all of your offers: --offers + all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all + --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is + unsecure. On local env + 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used + by default when CLI is used in non-interactive mode + +DESCRIPTION + Deploy manifests + +EXAMPLES + $ fluence provider deploy +``` + +_See code: [src/commands/provider/deploy.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/provider/deploy.ts)_ + ## `fluence provider gen` Generate Config.toml files according to provider.yaml and secrets according to provider-secrets.yaml @@ -553,18 +560,18 @@ Generate Config.toml files according to provider.yaml and secrets according to p ``` USAGE $ fluence provider gen [--no-input] [--env ] [--priv-key ] - [--reset-nox-secrets] [--no-withdraw] + [--reset-peer-secrets] [--no-withdraw] FLAGS --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --no-withdraw Is used only when --reset-nox-secrets flag is present. Will not withdraw - tokens from noxes (if you don't need it or it fails for some reason) + --no-withdraw Is used only when --reset-peer-secrets flag is present. Will not withdraw + tokens from peers (if you don't need it or it fails for some reason) --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used by default when CLI is used in non-interactive mode - --reset-nox-secrets Withdraw remaining tokens from your noxes, backup nox secrets from + --reset-peer-secrets Withdraw remaining tokens from your peers, backup peer secrets from .fluence/provider-secrets.yaml and .fluence/secrets (if they exist) to .fluence/backups and generate new ones @@ -579,27 +586,29 @@ _See code: [src/commands/provider/gen.ts](https://github.com/fluencelabs/cli/blo ## `fluence provider info` -Print nox signing wallets and peer ids. Alias: fluence provider i +Print peer signing wallets and peer ids. Alias: fluence provider i ``` USAGE $ fluence provider info [--no-input] [--env ] [--priv-key ] - [--nox-names ] [--json] [--address
] + [--peer-names ] [--offers ] [--json] [--address
] FLAGS --address=
Provider address --env= Fluence Environment to use when running the command --json Output JSON --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all + --offers= Comma-separated list of offer names. To use all of your offers: --offers + all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used by default when CLI is used in non-interactive mode DESCRIPTION - Print nox signing wallets and peer ids. Alias: fluence provider i + Print peer signing wallets and peer ids. Alias: fluence provider i ``` _See code: [src/commands/provider/info.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/provider/info.ts)_ @@ -610,14 +619,13 @@ Init provider config. Creates a provider.yaml file ``` USAGE - $ fluence provider init [--no-input] [--noxes ] [--env ] [--priv-key - ] [--no-vm] + $ fluence provider init [--no-input] [--peers ] [--env ] [--priv-key + ] FLAGS --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --no-vm Generate provider.yaml without vm configuration - --noxes= Number of Compute Peers to generate when a new provider.yaml is created + --peers= Number of peers to generate when a new provider.yaml is created --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used @@ -757,55 +765,57 @@ _See code: [src/commands/provider/register.ts](https://github.com/fluencelabs/cl ## `fluence provider tokens-distribute` -Distribute FLT tokens to noxes. Alias: fluence provider td +Distribute FLT tokens to peers. Alias: fluence provider td ``` USAGE $ fluence provider tokens-distribute [--no-input] [--env ] [--priv-key ] - [--nox-names ] [--offers ] [--amount ] + [--peer-names ] [--offers ] [--amount ] FLAGS - --amount= Amount of FLT tokens to distribute to noxes + --amount= Amount of FLT tokens to distribute to peers --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all --offers= Comma-separated list of offer names. To use all of your offers: --offers all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used by default when CLI is used in non-interactive mode DESCRIPTION - Distribute FLT tokens to noxes. Alias: fluence provider td + Distribute FLT tokens to peers. Alias: fluence provider td ``` _See code: [src/commands/provider/tokens-distribute.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/provider/tokens-distribute.ts)_ ## `fluence provider tokens-withdraw` -Withdraw FLT tokens from noxes. Alias: fluence provider tw +Withdraw FLT tokens from peers. Alias: fluence provider tw ``` USAGE $ fluence provider tokens-withdraw [--no-input] [--env ] [--priv-key ] - [--nox-names ] [--amount ] + [--peer-names ] [--offers ] [--amount ] FLAGS - --amount= Amount of FLT tokens to withdraw from noxes. Use --amount max to withdraw + --amount= Amount of FLT tokens to withdraw from peers. Use --amount max to withdraw maximum possible amount --env= Fluence Environment to use when running the command --no-input Don't interactively ask for any input from the user - --nox-names= Comma-separated names of noxes from provider.yaml. To use all of your - noxes: --nox-names all + --offers= Comma-separated list of offer names. To use all of your offers: --offers + all + --peer-names= Comma-separated names of peers from provider.yaml. To use all of your + peers: --peer-names all --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is unsecure. On local env 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used by default when CLI is used in non-interactive mode DESCRIPTION - Withdraw FLT tokens from noxes. Alias: fluence provider tw + Withdraw FLT tokens from peers. Alias: fluence provider tw ``` _See code: [src/commands/provider/tokens-withdraw.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.22.0/src/commands/provider/tokens-withdraw.ts)_ diff --git a/packages/cli/package/docs/configs/env.md b/packages/cli/package/docs/configs/env.md index 05ae067ab..4c4994e88 100644 --- a/packages/cli/package/docs/configs/env.md +++ b/packages/cli/package/docs/configs/env.md @@ -11,6 +11,7 @@ Defines project user's preferences | `chainId` | number | No | Chain ID to use | | `deployment` | [object](#deployment) | No | Deployed contract address overrides | | `fluenceEnv` | string | No | Fluence environment to connect to Possible values are: `testnet`, `mainnet`, `stage`, `local`. | +| `ipfsGateway` | string | No | IPFS gateway URL to use | | `relays` | string[] | No | List of custom relay multiaddresses to use when connecting to Fluence network | | `rpcUrl` | string | No | RPC URL to use | | `subgraphUrl` | string | No | Subgraph URL to use | diff --git a/packages/cli/package/docs/configs/provider.md b/packages/cli/package/docs/configs/provider.md index 5e450a093..c098c3e4b 100644 --- a/packages/cli/package/docs/configs/provider.md +++ b/packages/cli/package/docs/configs/provider.md @@ -110,11 +110,13 @@ Defines a compute peer #### Properties -| Property | Type | Required | Description | -|----------------|----------------|----------|-------------------------------------------------------------------------------------------------| -| `computeUnits` | integer | **Yes** | How many compute units should nox have. Default: 32 (each compute unit requires 2GB of RAM) | -| `ccp` | [object](#ccp) | No | Configuration to pass to the Capacity Commitment Prover | -| `nox` | [object](#nox) | No | Configuration to pass to the nox compute peer. Config.toml files are generated from this config | +| Property | Type | Required | Description | +|------------------|----------------------|----------|-------------------------------------------------------------------------------------------------| +| `computeUnits` | integer | **Yes** | How many compute units should nox have. Default: 32 (each compute unit requires 2GB of RAM) | +| `ccp` | [object](#ccp) | No | Configuration to pass to the Capacity Commitment Prover | +| `kubeconfigPath` | string | No | Path to the kubeconfig file | +| `nox` | [object](#nox) | No | Configuration to pass to the nox compute peer. Config.toml files are generated from this config | +| `resources` | [object](#resources) | No | Resources configuration | #### ccp @@ -366,6 +368,33 @@ iptables-mapped port range from Host to VM | `end` | integer | No | End of the iptables-mapped port range from Host to VM | | `start` | integer | No | Start of the iptables-mapped port range from Host to VM | +#### resources + +Resources configuration + +##### Properties + +| Property | Type | Required | Description | +|----------|---------------|----------|------------------| +| `ip` | [object](#ip) | **Yes** | IP configuration | + +##### ip + +IP configuration + +###### Properties + +| Property | Type | Required | Description | +|----------|---------------------|----------|-------------| +| `supply` | [object](#supply)[] | **Yes** | IP supply | + +###### supply + +Either specify only a `start` property (if you want a single IP) or `start` and `end` properties (if you want a range) or `cidr` property (if you want a CIDR notation) + +| Property | Type | Required | Description | +|----------|------|----------|-------------| + ## nox Configuration to pass to the nox compute peer. Config.toml files are generated from this config diff --git a/packages/cli/package/example.env b/packages/cli/package/example.env index b9bb87be2..32f62f2a8 100644 --- a/packages/cli/package/example.env +++ b/packages/cli/package/example.env @@ -13,7 +13,6 @@ # CLI Dependency override examples -# FCLI_V_NOX="fluencelabs/nox:0.4.0" # FCLI_V_CHAIN="docker.fluence.dev/aurora:0.2.11" # environment variables to be used by Fluence CLI maintainers to develop Fluence CLI: diff --git a/packages/cli/package/package.json b/packages/cli/package/package.json index 2cd567f37..d17575924 100644 --- a/packages/cli/package/package.json +++ b/packages/cli/package/package.json @@ -57,11 +57,10 @@ }, "dependencies": { "@fluencelabs/deal-ts-clients": "0.22.1", - "@fluencelabs/fluence-network-environment": "1.2.3", - "@fluencelabs/js-client": "0.9.0", - "@iarna/toml": "2.2.5", + "@kubernetes/client-node": "github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d", + "@libp2p/crypto": "4.0.1", + "@libp2p/peer-id-factory": "4.0.5", "@mswjs/interceptors": "0.29.1", - "@multiformats/multiaddr": "12.2.1", "@oclif/color": "1.0.13", "@oclif/core": "4.0.29", "@oclif/plugin-autocomplete": "3.2.6", @@ -146,8 +145,8 @@ "default": { "description": "Manage and display default CLI configurations" }, - "key": { - "description": "Manage secret keys, that define peer-ids of both nox and js-client (including the one inside this CLI itself)" + "local": { + "description": "Manage local fluence environment using docker-compose" }, "provider": { "description": "Set of commands to be used by providers or you can use them to manage your local environment" diff --git a/packages/cli/package/src/commands/default/peers.ts b/packages/cli/package/src/commands/default/peers.ts deleted file mode 100644 index 77c83ef60..000000000 --- a/packages/cli/package/src/commands/default/peers.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Fluence CLI - * Copyright (C) 2024 Fluence DAO - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { BaseCommand } from "../../baseCommand.js"; -import { setChainFlags } from "../../lib/chainFlags.js"; -import { commandObj } from "../../lib/commandObj.js"; -import { ENV_ARG, ENV_ARG_NAME, ENV_FLAG_NAME } from "../../lib/const.js"; -import { initCli } from "../../lib/lifeCycle.js"; -import { resolveDefaultRelays } from "../../lib/multiaddres.js"; - -export default class Peers extends BaseCommand { - static override description = "Print default Fluence network peer addresses"; - static override examples = ["<%= config.bin %> <%= command.id %>"]; - static override args = { - ...ENV_ARG, - }; - async run(): Promise { - const { args } = await initCli(this, await this.parse(Peers)); - setChainFlags({ [ENV_FLAG_NAME]: args[ENV_ARG_NAME] }); - const relays = await resolveDefaultRelays(); - commandObj.log(relays.join("\n")); - } -} diff --git a/packages/cli/package/src/commands/local/up.ts b/packages/cli/package/src/commands/local/up.ts index 9b89a4a77..e49e1fc1a 100644 --- a/packages/cli/package/src/commands/local/up.ts +++ b/packages/cli/package/src/commands/local/up.ts @@ -24,7 +24,7 @@ import { BaseCommand } from "../../baseCommand.js"; import { LOCAL_NET_DEFAULT_WALLET_KEY } from "../../common.js"; import { createCommitments } from "../../lib/chain/commitment.js"; import { depositCollateral } from "../../lib/chain/depositCollateral.js"; -import { distributeToNox } from "../../lib/chain/distributeToNox.js"; +import { distributeToPeer } from "../../lib/chain/distributeToNox.js"; import { createOffers } from "../../lib/chain/offer/offer.js"; import { registerProvider } from "../../lib/chain/providerInfo.js"; import { setChainFlags } from "../../lib/chainFlags.js"; @@ -35,7 +35,7 @@ import { OFFER_FLAG_NAME, ALL_FLAG_VALUE, DOCKER_COMPOSE_FULL_FILE_NAME, - NOXES_FLAG, + PEERS_FLAG, PRIV_KEY_FLAG, PROVIDER_CONFIG_FULL_FILE_NAME, type FluenceEnv, @@ -52,7 +52,7 @@ export default class Up extends BaseCommand { static override description = `Run ${DOCKER_COMPOSE_FULL_FILE_NAME} using docker compose and set up provider using all the offers from the 'offers' section in ${PROVIDER_CONFIG_FULL_FILE_NAME} config using default wallet key ${LOCAL_NET_DEFAULT_WALLET_KEY}`; static override examples = ["<%= config.bin %> <%= command.id %>"]; static override flags = { - ...NOXES_FLAG, + ...PEERS_FLAG, timeout: Flags.integer({ description: "Timeout in seconds for attempting to register local network on local peers", @@ -146,7 +146,7 @@ export default class Up extends BaseCommand { } const allOffers = { [OFFER_FLAG_NAME]: ALL_FLAG_VALUE }; - await distributeToNox({ ...flags, ...allOffers, amount: "10" }); + await distributeToPeer({ ...flags, ...allOffers, amount: "10" }); await registerProvider(); await createOffers({ force: true, ...allOffers }); await createCommitments({ ...flags, ...allOffers }); diff --git a/packages/cli/package/src/commands/provider/cc-create.ts b/packages/cli/package/src/commands/provider/cc-create.ts index 14ee6a693..e303a4279 100644 --- a/packages/cli/package/src/commands/provider/cc-create.ts +++ b/packages/cli/package/src/commands/provider/cc-create.ts @@ -17,7 +17,7 @@ import { BaseCommand } from "../../baseCommand.js"; import { createCommitments } from "../../lib/chain/commitment.js"; -import { NOX_NAMES_FLAG, CHAIN_FLAGS, OFFER_FLAG } from "../../lib/const.js"; +import { CHAIN_FLAGS, PEER_AND_OFFER_NAMES_FLAGS } from "../../lib/const.js"; import { aliasesText } from "../../lib/helpers/aliasesText.js"; import { initCli } from "../../lib/lifeCycle.js"; @@ -28,8 +28,7 @@ export default class CreateCommitment extends BaseCommand< static override description = `Create Capacity commitment${aliasesText.apply(this)}`; static override flags = { ...CHAIN_FLAGS, - ...NOX_NAMES_FLAG, - ...OFFER_FLAG, + ...PEER_AND_OFFER_NAMES_FLAGS, }; async run(): Promise { diff --git a/packages/cli/package/src/commands/provider/deploy.ts b/packages/cli/package/src/commands/provider/deploy.ts new file mode 100644 index 000000000..f97acd927 --- /dev/null +++ b/packages/cli/package/src/commands/provider/deploy.ts @@ -0,0 +1,155 @@ +/** + * Fluence CLI + * Copyright (C) 2024 Fluence DAO + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { readFile } from "node:fs/promises"; +import { isAbsolute, resolve } from "node:path"; + +import type k8s from "@kubernetes/client-node"; +import { color } from "@oclif/color"; + +import { BaseCommand } from "../../baseCommand.js"; +import { commandObj } from "../../lib/commandObj.js"; +import { ensureReadonlyProviderConfig } from "../../lib/configs/project/provider/provider.js"; +import { CHAIN_FLAGS, PEER_AND_OFFER_NAMES_FLAGS } from "../../lib/const.js"; +import { splitErrorsAndResults } from "../../lib/helpers/utils.js"; +import { initCli } from "../../lib/lifeCycle.js"; +import { projectRootDir } from "../../lib/paths.js"; +import { resolveComputePeersByNames } from "../../lib/resolveComputePeersByNames.js"; + +export default class Deploy extends BaseCommand { + static override description = "Deploy manifests"; + static override examples = ["<%= config.bin %> <%= command.id %>"]; + static override flags = { + ...CHAIN_FLAGS, + ...PEER_AND_OFFER_NAMES_FLAGS, + }; + async run(): Promise { + const { flags } = await initCli(this, await this.parse(Deploy)); + const computePeers = await resolveComputePeersByNames(flags); + + const [invalidPeers, peers] = splitErrorsAndResults( + computePeers, + ({ kubeconfigPath, ipSupplies, name, ...restPeer }) => { + return kubeconfigPath === undefined || ipSupplies.length === 0 + ? { + error: [ + kubeconfigPath === undefined && + `computePeer ${color.yellow(name)} must have a ${color.yellow("kubeconfigPath")} property`, + ipSupplies.length === 0 && + `computePeer ${color.yellow(name)} must have a ${color.yellow("resources.ip.supply")} property, which must be a non-empty array`, + ] + .filter((err) => { + return typeof err === "string"; + }) + .join("\n"), + } + : { result: { name, ipSupplies, kubeconfigPath, ...restPeer } }; + }, + ); + + if (invalidPeers.length > 0) { + const providerConfig = await ensureReadonlyProviderConfig(); + + commandObj.error( + `Invalid config at ${providerConfig.$getPath()}:\n${invalidPeers.join("\n")}`, + ); + } + + for (const { kubeconfigPath, name, manifestPath } of peers) { + await kubectlApply(kubeconfigPath, manifestPath, name); + } + } +} + +/** + * This function comes from https://github.com/kubernetes-client/javascript + * Replicate the functionality of `kubectl apply`. That is, create the resources defined in the `specFile` if they do + * not exist, patch them if they do exist. + * + * @param specPath File system path to a YAML Kubernetes spec. + * @return Array of resources created + */ +async function kubectlApply( + kubeconfigPath: string, + specPath: string, + peerName: string, +): Promise { + const kubeconfigAbsolutePath = isAbsolute(kubeconfigPath) + ? kubeconfigPath + : resolve(projectRootDir, kubeconfigPath); + + commandObj.log( + `Applying manifest for computePeer ${peerName}\nKubeconfig: ${kubeconfigAbsolutePath}\nManifest: ${specPath}`, + ); + + const k8s = await import("@kubernetes/client-node"); + const kc = new k8s.KubeConfig(kubeconfigAbsolutePath); + kc.loadFromFile(kubeconfigAbsolutePath); + + /* eslint-disable */ + const client = k8s.KubernetesObjectApi.makeApiClient(kc); + + const specString = await readFile(specPath, "utf8"); + const specs: k8s.KubernetesObject[] = k8s.loadAllYaml(specString); + + const validSpecs = specs.filter((s) => { + return s && s.kind && s.metadata; + }); + + const created: k8s.KubernetesObject[] = []; + + for (const spec of validSpecs) { + // this is to convince the old version of TypeScript that metadata exists even though we already filtered specs + // without metadata out + spec.metadata = spec.metadata || {}; + spec.metadata.annotations = spec.metadata.annotations || {}; + + delete spec.metadata.annotations[ + "kubectl.kubernetes.io/last-applied-configuration" + ]; + + spec.metadata.annotations[ + "kubectl.kubernetes.io/last-applied-configuration" + ] = JSON.stringify(spec); + + try { + // try to get the resource, if it does not exist an error will be thrown and we will end up in the catch + // block. + // @ts-expect-error + await client.read(spec); + // we got the resource, so it exists, so patch it + // + // Note that this could fail if the spec refers to a custom resource. For custom resources you may need + // to specify a different patch merge strategy in the content-type header. + // + // See: https://github.com/kubernetes/kubernetes/issues/97423 + const response = await client.patch(spec); + created.push(response.body); + } catch (err) { + // if the resource doesnt exist then create it + if (err instanceof k8s.HttpError && err.statusCode === 404) { + const response = await client.create(spec); + created.push(response.body); + } else { + throw err; + } + } + } + + return created; + /* eslint-enable */ +} diff --git a/packages/cli/package/src/commands/provider/gen.ts b/packages/cli/package/src/commands/provider/gen.ts index 4b08949e4..5719e25bf 100644 --- a/packages/cli/package/src/commands/provider/gen.ts +++ b/packages/cli/package/src/commands/provider/gen.ts @@ -22,7 +22,7 @@ import { color } from "@oclif/color"; import { Flags } from "@oclif/core"; import { BaseCommand } from "../../baseCommand.js"; -import { withdrawFromNox } from "../../lib/chain/distributeToNox.js"; +import { withdrawFromPeer } from "../../lib/chain/distributeToNox.js"; import { commandObj } from "../../lib/commandObj.js"; import { ensureComputerPeerConfigs } from "../../lib/configs/project/provider/provider.js"; import { @@ -35,20 +35,21 @@ import { ALL_FLAG_VALUE, MAX_TOKEN_AMOUNT_KEYWORD, CLI_NAME, + PEER_NAMES_FLAG_NAME, } from "../../lib/const.js"; import { stringifyUnknown } from "../../lib/helpers/stringifyUnknown.js"; import { pathExists } from "../../lib/helpers/utils.js"; import { initCli } from "../../lib/lifeCycle.js"; import { getFluenceSecretsDir, - ensureFluenceConfigsDir, ensureProviderSecretsConfigPath, getFluenceBackupsDir, ensureDir, + ensureK8sManifestsDir, } from "../../lib/paths.js"; import { confirm } from "../../lib/prompt.js"; -const RESET_NOX_SECRETS_FLAG_NAME = "reset-nox-secrets"; +const RESET_PEER_SECRETS_FLAG_NAME = "reset-peer-secrets"; const NO_WITHDRAW_FLAG_NAME = "no-withdraw"; export default class Gen extends BaseCommand { @@ -56,12 +57,12 @@ export default class Gen extends BaseCommand { static override examples = ["<%= config.bin %> <%= command.id %>"]; static override flags = { ...CHAIN_FLAGS, - [RESET_NOX_SECRETS_FLAG_NAME]: Flags.boolean({ - description: `Withdraw remaining tokens from your noxes, backup nox secrets from ${DOT_FLUENCE_DIR_NAME}/${PROVIDER_SECRETS_CONFIG_FULL_FILE_NAME} and ${DOT_FLUENCE_DIR_NAME}/${SECRETS_DIR_NAME} (if they exist) to ${DOT_FLUENCE_DIR_NAME}/${BACKUPS_DIR_NAME} and generate new ones`, + [RESET_PEER_SECRETS_FLAG_NAME]: Flags.boolean({ + description: `Withdraw remaining tokens from your peers, backup peer secrets from ${DOT_FLUENCE_DIR_NAME}/${PROVIDER_SECRETS_CONFIG_FULL_FILE_NAME} and ${DOT_FLUENCE_DIR_NAME}/${SECRETS_DIR_NAME} (if they exist) to ${DOT_FLUENCE_DIR_NAME}/${BACKUPS_DIR_NAME} and generate new ones`, default: false, }), [NO_WITHDRAW_FLAG_NAME]: Flags.boolean({ - description: `Is used only when --${RESET_NOX_SECRETS_FLAG_NAME} flag is present. Will not withdraw tokens from noxes (if you don't need it or it fails for some reason)`, + description: `Is used only when --${RESET_PEER_SECRETS_FLAG_NAME} flag is present. Will not withdraw tokens from peers (if you don't need it or it fails for some reason)`, default: false, }), }; @@ -76,28 +77,28 @@ export default class Gen extends BaseCommand { ); if ( - flags[RESET_NOX_SECRETS_FLAG_NAME] && + flags[RESET_PEER_SECRETS_FLAG_NAME] && (await confirm({ - message: `Are you sure you want to backup nox secrets ${color.yellow(providerSecretsConfigPath)} and ${color.yellow(fluenceSecretsDir)} (if they exist) to ${color.yellow(backupDirPath)} and generate new ones`, - default: flags[RESET_NOX_SECRETS_FLAG_NAME], + message: `Are you sure you want to backup peer secrets ${color.yellow(providerSecretsConfigPath)} and ${color.yellow(fluenceSecretsDir)} (if they exist) to ${color.yellow(backupDirPath)} and generate new ones`, + default: flags[RESET_PEER_SECRETS_FLAG_NAME], })) ) { if ( !flags[NO_WITHDRAW_FLAG_NAME] && (await confirm({ message: - "Do you want to withdraw remaining tokens from your noxes before continuing", + "Do you want to withdraw remaining tokens from your peers before continuing", default: !flags[NO_WITHDRAW_FLAG_NAME], })) ) { try { - await withdrawFromNox({ - "nox-names": ALL_FLAG_VALUE, + await withdrawFromPeer({ + [PEER_NAMES_FLAG_NAME]: ALL_FLAG_VALUE, amount: MAX_TOKEN_AMOUNT_KEYWORD, }); } catch (e) { return commandObj.error( - `Failed to withdraw tokens from noxes. Try using ${color.yellow(`${CLI_NAME} provider tokens-withdraw`)} command with specific nox names and amounts or don't withdraw anything if you don't need to by using --${NO_WITHDRAW_FLAG_NAME} flag. Error: ${stringifyUnknown(e)}`, + `Failed to withdraw tokens from peers. Try using ${color.yellow(`${CLI_NAME} provider tokens-withdraw`)} command with specific peer names and amounts or don't withdraw anything if you don't need to by using --${NO_WITHDRAW_FLAG_NAME} flag. Error: ${stringifyUnknown(e)}`, ); } } @@ -112,7 +113,7 @@ export default class Gen extends BaseCommand { await ensureComputerPeerConfigs(); commandObj.logToStderr( - `Config.toml files for nox are generated at:\n${await ensureFluenceConfigsDir()}\n\nsecrets are generated at:\n${getFluenceSecretsDir()}`, + `Secrets are generated at:\n${getFluenceSecretsDir()}\n\nManifest files are generated at:\n${await ensureK8sManifestsDir()}`, ); } } diff --git a/packages/cli/package/src/commands/provider/info.ts b/packages/cli/package/src/commands/provider/info.ts index 0fc12102d..7045c6475 100644 --- a/packages/cli/package/src/commands/provider/info.ts +++ b/packages/cli/package/src/commands/provider/info.ts @@ -23,12 +23,12 @@ import { getProviderInfo } from "../../lib/chain/providerInfo.js"; import { commandObj } from "../../lib/commandObj.js"; import { initNewProviderArtifactsConfig } from "../../lib/configs/project/providerArtifacts/providerArtifacts.js"; import { - NOX_NAMES_FLAG, CHAIN_FLAGS, JSON_FLAG, ADDRESS_FLAG, ADDRESS_FLAG_NAME, PRIV_KEY_FLAG_NAME, + PEER_AND_OFFER_NAMES_FLAGS, } from "../../lib/const.js"; import { aliasesText } from "../../lib/helpers/aliasesText.js"; import { initCli } from "../../lib/lifeCycle.js"; @@ -37,10 +37,10 @@ import { ensureFluenceEnv } from "../../lib/resolveFluenceEnv.js"; export default class Info extends BaseCommand { static override hiddenAliases = ["provider:i"]; - static override description = `Print nox signing wallets and peer ids${aliasesText.apply(this)}`; + static override description = `Print peer signing wallets and peer ids${aliasesText.apply(this)}`; static override flags = { ...CHAIN_FLAGS, - ...NOX_NAMES_FLAG, + ...PEER_AND_OFFER_NAMES_FLAGS, ...JSON_FLAG, ...ADDRESS_FLAG, }; @@ -56,7 +56,7 @@ export default class Info extends BaseCommand { )), computePeers: computePeers.map(({ name, peerId, walletAddress }) => { return { - nox: name, + peer: name, peerId, wallet: walletAddress, }; diff --git a/packages/cli/package/src/commands/provider/init.ts b/packages/cli/package/src/commands/provider/init.ts index 0eeeed4bc..1a1e88116 100644 --- a/packages/cli/package/src/commands/provider/init.ts +++ b/packages/cli/package/src/commands/provider/init.ts @@ -18,7 +18,6 @@ import { writeFile } from "node:fs/promises"; import { color } from "@oclif/color"; -import { Flags } from "@oclif/core"; import { BaseCommand } from "../../baseCommand.js"; import { commandObj } from "../../lib/commandObj.js"; @@ -28,7 +27,7 @@ import { } from "../../lib/configs/project/provider/provider.js"; import { CHAIN_FLAGS, - NOXES_FLAG, + PEERS_FLAG, PROVIDER_CONFIG_FULL_FILE_NAME, RECOMMENDED_GITIGNORE_CONTENT, } from "../../lib/const.js"; @@ -38,12 +37,8 @@ import { getGitignorePath } from "../../lib/paths.js"; export default class Init extends BaseCommand { static override description = `Init provider config. Creates a ${PROVIDER_CONFIG_FULL_FILE_NAME} file`; static override flags = { - ...NOXES_FLAG, + ...PEERS_FLAG, ...CHAIN_FLAGS, - "no-vm": Flags.boolean({ - description: `Generate ${PROVIDER_CONFIG_FULL_FILE_NAME} without vm configuration`, - default: false, - }), }; async run(): Promise { diff --git a/packages/cli/package/src/commands/provider/tokens-distribute.ts b/packages/cli/package/src/commands/provider/tokens-distribute.ts index 98dd1edc8..136045c6b 100644 --- a/packages/cli/package/src/commands/provider/tokens-distribute.ts +++ b/packages/cli/package/src/commands/provider/tokens-distribute.ts @@ -18,12 +18,11 @@ import { Flags } from "@oclif/core"; import { BaseCommand } from "../../baseCommand.js"; -import { distributeToNox } from "../../lib/chain/distributeToNox.js"; +import { distributeToPeer } from "../../lib/chain/distributeToNox.js"; import { CHAIN_FLAGS, FLT_SYMBOL, - NOX_NAMES_FLAG, - OFFER_FLAG, + PEER_AND_OFFER_NAMES_FLAGS, } from "../../lib/const.js"; import { aliasesText } from "../../lib/helpers/aliasesText.js"; import { initCli } from "../../lib/lifeCycle.js"; @@ -32,18 +31,17 @@ export default class TokensDistribute extends BaseCommand< typeof TokensDistribute > { static override hiddenAliases = ["provider:td"]; - static override description = `Distribute ${FLT_SYMBOL} tokens to noxes${aliasesText.apply(this)}`; + static override description = `Distribute ${FLT_SYMBOL} tokens to peers${aliasesText.apply(this)}`; static override flags = { ...CHAIN_FLAGS, - ...NOX_NAMES_FLAG, - ...OFFER_FLAG, + ...PEER_AND_OFFER_NAMES_FLAGS, amount: Flags.string({ - description: `Amount of ${FLT_SYMBOL} tokens to distribute to noxes`, + description: `Amount of ${FLT_SYMBOL} tokens to distribute to peers`, }), }; async run(): Promise { const { flags } = await initCli(this, await this.parse(TokensDistribute)); - await distributeToNox(flags); + await distributeToPeer(flags); } } diff --git a/packages/cli/package/src/commands/provider/tokens-withdraw.ts b/packages/cli/package/src/commands/provider/tokens-withdraw.ts index ba50dcf8b..27ba9d32d 100644 --- a/packages/cli/package/src/commands/provider/tokens-withdraw.ts +++ b/packages/cli/package/src/commands/provider/tokens-withdraw.ts @@ -18,12 +18,12 @@ import { Flags } from "@oclif/core"; import { BaseCommand } from "../../baseCommand.js"; -import { withdrawFromNox } from "../../lib/chain/distributeToNox.js"; +import { withdrawFromPeer } from "../../lib/chain/distributeToNox.js"; import { CHAIN_FLAGS, FLT_SYMBOL, MAX_TOKEN_AMOUNT_KEYWORD, - NOX_NAMES_FLAG, + PEER_AND_OFFER_NAMES_FLAGS, } from "../../lib/const.js"; import { aliasesText } from "../../lib/helpers/aliasesText.js"; import { initCli } from "../../lib/lifeCycle.js"; @@ -32,17 +32,17 @@ const AMOUNT_FLAG_NAME = "amount"; export default class TokensWithdraw extends BaseCommand { static override hiddenAliases = ["provider:tw"]; - static override description = `Withdraw ${FLT_SYMBOL} tokens from noxes${aliasesText.apply(this)}`; + static override description = `Withdraw ${FLT_SYMBOL} tokens from peers${aliasesText.apply(this)}`; static override flags = { ...CHAIN_FLAGS, - ...NOX_NAMES_FLAG, + ...PEER_AND_OFFER_NAMES_FLAGS, [AMOUNT_FLAG_NAME]: Flags.string({ - description: `Amount of ${FLT_SYMBOL} tokens to withdraw from noxes. Use --${AMOUNT_FLAG_NAME} ${MAX_TOKEN_AMOUNT_KEYWORD} to withdraw maximum possible amount`, + description: `Amount of ${FLT_SYMBOL} tokens to withdraw from peers. Use --${AMOUNT_FLAG_NAME} ${MAX_TOKEN_AMOUNT_KEYWORD} to withdraw maximum possible amount`, }), }; async run(): Promise { const { flags } = await initCli(this, await this.parse(TokensWithdraw)); - await withdrawFromNox(flags); + await withdrawFromPeer(flags); } } diff --git a/packages/cli/package/src/lib/chain/chainConfig.ts b/packages/cli/package/src/lib/chain/chainConfig.ts index d38b3d66b..d6341f717 100644 --- a/packages/cli/package/src/lib/chain/chainConfig.ts +++ b/packages/cli/package/src/lib/chain/chainConfig.ts @@ -17,6 +17,7 @@ import capitalize from "lodash-es/capitalize.js"; +import type { ChainENV } from "../../common.js"; import { commandObj } from "../commandObj.js"; import { initEnvConfig } from "../configs/project/env/env.js"; import { dbg } from "../dbg.js"; @@ -75,6 +76,38 @@ export async function getRpcUrl() { return rpcUrlPromise; } +let ipfsGatewayPromise: Promise | undefined; + +const IPFS_GATEWAYS: Record = { + local: "https://ipfs-gateway.fluence.dev", + testnet: "https://ipfs-gateway.fluence.dev", + mainnet: "https://ipfs-gateway.fluence.dev", + stage: "https://ipfs-gateway.fluence.dev", +}; + +export async function getIpfsGateway() { + if (ipfsGatewayPromise === undefined) { + ipfsGatewayPromise = (async () => { + const chainEnv = await ensureChainEnv(); + let ipfsGateway = IPFS_GATEWAYS[chainEnv]; + const envConfig = await initEnvConfig(); + + if (envConfig?.ipfsGateway !== undefined) { + commandObj.logToStderr( + `Using custom IPFS Gateway: ${envConfig.ipfsGateway} from ${envConfig.$getPath()}`, + ); + + ipfsGateway = envConfig.ipfsGateway; + } + + dbg(`ipfsGateway: ${ipfsGateway}`); + return ipfsGateway; + })(); + } + + return ipfsGatewayPromise; +} + let blockScoutUrlPromise: | Promise< | { diff --git a/packages/cli/package/src/lib/chain/commitment.ts b/packages/cli/package/src/lib/chain/commitment.ts index de4d1f2b5..c16d8d3ce 100644 --- a/packages/cli/package/src/lib/chain/commitment.ts +++ b/packages/cli/package/src/lib/chain/commitment.ts @@ -26,8 +26,8 @@ import { commandObj } from "../commandObj.js"; import { initProviderConfig } from "../configs/project/provider/provider.js"; import { CLI_NAME, - NOX_NAMES_FLAG_NAME, - OFFER_FLAG_NAME, + PEER_NAMES_FLAG_NAME, + type PeerAndOfferNameFlags, CC_IDS_FLAG_NAME, FINISH_COMMITMENT_FLAG_NAME, } from "../const.js"; @@ -137,7 +137,7 @@ async function getComputePeersWithCCIds( commandObj.warn( `Some of the commitments were not found for:\n${computePeersWithoutCC .map(({ name, peerId }) => { - return `Nox: ${name}, PeerId: ${peerId}`; + return `Peer: ${name}, PeerId: ${peerId}`; }) .join( "\n", @@ -215,9 +215,7 @@ async function getCCs( return [firstCCInfo, ...restCCInfos]; } -export type CCFlags = { - [NOX_NAMES_FLAG_NAME]?: string | undefined; - [OFFER_FLAG_NAME]?: string | undefined; +export type CCFlags = PeerAndOfferNameFlags & { [CC_IDS_FLAG_NAME]?: string | undefined; }; @@ -229,7 +227,7 @@ async function getCommitmentsIds( } if ( - flags[NOX_NAMES_FLAG_NAME] === undefined && + flags[PEER_NAMES_FLAG_NAME] === undefined && (await initProviderConfig()) === null ) { return getCCs( @@ -248,10 +246,7 @@ async function getCommitmentsIds( return getComputePeersWithCCIds(await resolveComputePeersByNames(flags)); } -export async function createCommitments(flags: { - [NOX_NAMES_FLAG_NAME]?: string | undefined; - [OFFER_FLAG_NAME]?: string | undefined; -}) { +export async function createCommitments(flags: PeerAndOfferNameFlags) { const computePeers = await resolveComputePeersByNames(flags); const { contracts } = await getContracts(); const precision = await contracts.diamond.precision(); @@ -342,9 +337,9 @@ export async function createCommitments(flags: { try { createCommitmentsTxReceipts = await signBatch( - `Create commitments for the following noxes:\n\n${computePeers + `Create commitments for the following peers:\n\n${computePeers .map(({ name, peerId }) => { - return `Nox: ${name}\nPeerId: ${peerId}`; + return `Peer: ${name}\nPeerId: ${peerId}`; }) .join("\n\n")}`, [firstCommitmentTx, ...restCommitmentTxs], @@ -400,7 +395,7 @@ export async function createCommitments(flags: { commandObj.logToStderr( stringifyDetailedCommitmentsInfo( await getDetailedCommitmentsInfoGroupedByStatus({ - "nox-names": computePeers + [PEER_NAMES_FLAG_NAME]: computePeers .map(({ name }) => { return name; }) @@ -498,7 +493,7 @@ export async function collateralWithdraw( for (const commitment of commitments.flatMap(({ ccInfos }) => { return ccInfos; })) { - const { ccId, name: noxName } = commitment; + const { ccId, name: peerName } = commitment; const [unitIds, isExitedStatuses] = await contracts.diamond.getUnitExitStatuses(ccId); @@ -624,7 +619,7 @@ export async function collateralWithdraw( ); await signBatch( - `${firstNotExitedUnit === undefined ? "F" : "Remove compute units from capacity commitments and f"}inish commitment ${noxName === undefined ? ccId : `for ${noxName} (${ccId})`} ${ccId}`, + `${firstNotExitedUnit === undefined ? "Finish" : "Remove compute units from capacity commitments and finish"} commitment ${peerName === undefined ? ccId : `for ${peerName} (${ccId})`} ${ccId}`, firstNotExitedUnit === undefined ? [populateTx(contracts.diamond.finishCommitment, ccId)] : [ @@ -667,8 +662,8 @@ export function stringifyBasicCommitmentInfo({ peerId, ccId, }: CapacityCommitment) { - const noxName = name === undefined ? "" : `Nox: ${name}\n`; - return `${color.yellow(`${noxName}PeerId: ${peerId}`)}\nCommitmentId: ${ccId}`; + const peerName = name === undefined ? "" : `Peer: ${name}\n`; + return `${color.yellow(`${peerName}PeerId: ${peerId}`)}\nCommitmentId: ${ccId}`; } type CapacityCommitment = { @@ -989,10 +984,10 @@ export function stringifyDetailedCommitmentsInfo( return detailedCommitmentsInfoGroupedByStatus .map(({ statusInfo, CCs }) => { return `${getStatusHeading(statusInfo)}${CCs.map((cc) => { - const noxNameString = - "noxName" in cc ? color.yellow(`Nox: ${cc.noxName}\n`) : ""; + const peerNameString = + "peerName" in cc ? color.yellow(`Peer: ${cc.peerName}\n`) : ""; - return `${noxNameString}${getDetailedCommitmentInfoString(cc)}`; + return `${peerNameString}${getDetailedCommitmentInfoString(cc)}`; }).join("\n\n")}`; }) .join("\n\n"); @@ -1014,7 +1009,7 @@ async function getDetailedCommitmentInfo({ status, peerId, ccId, - name: noxName, + name: peerName, currentEpoch, epochDuration, initTimestamp, @@ -1079,7 +1074,7 @@ async function getDetailedCommitmentInfo({ : undefined; return { - ...(noxName === undefined ? {} : { noxName }), + ...(peerName === undefined ? {} : { peerName }), peerId, commitmentId: ccId, status, diff --git a/packages/cli/package/src/lib/chain/conversions.ts b/packages/cli/package/src/lib/chain/conversions.ts index 0b3b70f0f..126d896e6 100644 --- a/packages/cli/package/src/lib/chain/conversions.ts +++ b/packages/cli/package/src/lib/chain/conversions.ts @@ -17,6 +17,8 @@ import type { CIDV1Struct } from "@fluencelabs/deal-ts-clients/dist/typechain-types/Config.js"; +import { bufferToBase64 } from "../helpers/typesafeStringify.js"; + const PREFIX = new Uint8Array([0, 36, 8, 1, 18, 32]); const BASE_58_PREFIX = "z"; @@ -64,3 +66,11 @@ export async function cidHexStringToBase32(cidHex: string): Promise { const { base32 } = await import("multiformats/bases/base32"); return base32.encode(new Uint8Array(Buffer.from(cidHex, "hex"))); } + +export function hexStringToUTF8ToBase64String(hexString: string): string { + const cleanHexString = hexString.startsWith("0x") + ? hexString.slice(2) + : hexString; + + return bufferToBase64(Buffer.from(cleanHexString, "utf-8")); +} diff --git a/packages/cli/package/src/lib/chain/distributeToNox.ts b/packages/cli/package/src/lib/chain/distributeToNox.ts index 4b353577e..63494fc9c 100644 --- a/packages/cli/package/src/lib/chain/distributeToNox.ts +++ b/packages/cli/package/src/lib/chain/distributeToNox.ts @@ -21,10 +21,9 @@ import { color } from "@oclif/color"; import { commandObj } from "../commandObj.js"; import { - NOX_NAMES_FLAG_NAME, FLT_SYMBOL, - OFFER_FLAG_NAME, MAX_TOKEN_AMOUNT_KEYWORD, + type PeerAndOfferNameFlags, } from "../const.js"; import { getWallet, @@ -36,17 +35,15 @@ import { resolveComputePeersByNames } from "../resolveComputePeersByNames.js"; import { fltFormatWithSymbol, fltParse } from "./currencies.js"; -export async function distributeToNox(flags: { - amount?: string | undefined; - [NOX_NAMES_FLAG_NAME]?: string | undefined; - [OFFER_FLAG_NAME]?: string | undefined; -}) { +export async function distributeToPeer( + flags: { amount?: string | undefined } & PeerAndOfferNameFlags, +) { const computePeers = await resolveComputePeersByNames(flags); const amount = flags.amount ?? (await input({ - message: `Enter the amount of ${FLT_SYMBOL} tokens to distribute to noxes`, + message: `Enter the amount of ${FLT_SYMBOL} tokens to distribute to peers`, })); const parsedAmount = await fltParse(amount); @@ -69,16 +66,17 @@ export async function distributeToNox(flags: { } } -export async function withdrawFromNox(flags: { - amount?: string | undefined; - [NOX_NAMES_FLAG_NAME]?: string | undefined; -}) { +export async function withdrawFromPeer( + flags: { + amount?: string | undefined; + } & PeerAndOfferNameFlags, +) { const computePeers = await resolveComputePeersByNames(flags); const amount = flags.amount ?? (await input({ - message: `Enter the amount of ${FLT_SYMBOL} tokens to distribute to noxes. Use ${color.yellow( + message: `Enter the amount of ${FLT_SYMBOL} tokens to distribute to peers. Use ${color.yellow( MAX_TOKEN_AMOUNT_KEYWORD, )} to withdraw maximum possible amount`, async validate(val: string) { @@ -102,13 +100,16 @@ export async function withdrawFromNox(flags: { }, })); - for (const { walletKey: noxWalletKey, name: noxName } of computePeers) { - const { amountBigInt, txReceipt, noxAddress } = + for (const { walletKey: peerWalletKey, name: peerName } of computePeers) { + const { amountBigInt, txReceipt, peerAddress } = amount === MAX_TOKEN_AMOUNT_KEYWORD - ? await withdrawMaxAmount({ noxWalletKey, noxName }) + ? await withdrawMaxAmount({ + peerWalletKey, + peerName, + }) : await withdrawSpecificAmount({ - noxWalletKey, - noxName, + peerWalletKey, + peerName, amountBigInt: await fltParse(amount), }); @@ -119,33 +120,33 @@ export async function withdrawFromNox(flags: { `Successfully withdrawn ${color.yellow( await fltFormatWithSymbol(amountBigInt), )} from ${color.yellow( - noxName, - )} (${noxAddress}) to ${color.yellow(providerAddress)} with tx hash: ${color.yellow(txReceipt.hash)}\n`, + peerName, + )} (${peerAddress}) to ${color.yellow(providerAddress)} with tx hash: ${color.yellow(txReceipt.hash)}\n`, ); } } } type WithdrawMaxAmountArgs = { - noxWalletKey: string; - noxName: string; + peerWalletKey: string; + peerName: string; }; async function withdrawMaxAmount({ - noxWalletKey, - noxName, + peerWalletKey, + peerName, }: WithdrawMaxAmountArgs) { - const noxWallet = await getWallet(noxWalletKey); - const noxAddress = await getSignerAddress(); + const peerWallet = await getWallet(peerWalletKey); + const peerAddress = await getSignerAddress(); - const gasLimit = await noxWallet.estimateGas({ - to: noxAddress, + const gasLimit = await peerWallet.estimateGas({ + to: peerAddress, value: 0n, }); - const noxProvider = noxWallet.provider; - assert(noxProvider !== null, "Unreachable. We ensure provider is not null"); - const gasPrice = await noxProvider.getFeeData(); + const peerProvider = peerWallet.provider; + assert(peerProvider !== null, "Unreachable. We ensure provider is not null"); + const gasPrice = await peerProvider.getFeeData(); if ( gasPrice.maxFeePerGas === null || @@ -159,18 +160,18 @@ async function withdrawMaxAmount({ const feeAmount = (gasPrice.maxFeePerGas + gasPrice.maxPriorityFeePerGas) * gasLimit; - const totalBalance = await noxProvider.getBalance(noxAddress); + const totalBalance = await peerProvider.getBalance(peerAddress); const amountBigInt = totalBalance - feeAmount; if (amountBigInt <= 0n) { commandObj.logToStderr( - `No ${FLT_SYMBOL} tokens to withdraw from ${noxName} (${noxAddress})`, + `No ${FLT_SYMBOL} tokens to withdraw from ${peerName} (${peerAddress})`, ); return { txReceipt: undefined, amountBigInt: undefined, - noxAddress: undefined, + peerAddress: undefined, }; } @@ -178,7 +179,7 @@ async function withdrawMaxAmount({ const result = { txReceipt: await sendRawTransaction( - `Withdraw max amount of ${await fltFormatWithSymbol(amountBigInt)} from ${noxName} (${noxAddress}) to ${providerAddress}`, + `Withdraw max amount of ${await fltFormatWithSymbol(amountBigInt)} from ${peerName} (${peerAddress}) to ${providerAddress}`, { to: providerAddress, value: amountBigInt, @@ -186,29 +187,29 @@ async function withdrawMaxAmount({ maxFeePerGas: gasPrice.maxFeePerGas, maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas, }, - noxWallet, + peerWallet, ), amountBigInt, - noxAddress, + peerAddress, }; return result; } async function withdrawSpecificAmount({ - noxWalletKey, - noxName, + peerWalletKey, + peerName, amountBigInt, }: WithdrawMaxAmountArgs & { amountBigInt: bigint }) { const providerAddress = await getSignerAddress(); - const { address: noxAddress } = await getWallet(noxWalletKey); + const { address: peerAddress } = await getWallet(peerWalletKey); return { txReceipt: await sendRawTransaction( - `Withdraw ${await fltFormatWithSymbol(amountBigInt)} from ${noxName} (${noxAddress}) to ${providerAddress}`, + `Withdraw ${await fltFormatWithSymbol(amountBigInt)} from ${peerName} (${peerAddress}) to ${providerAddress}`, { to: providerAddress, value: amountBigInt }, ), amountBigInt, - noxAddress, + peerAddress, }; } diff --git a/packages/cli/package/src/lib/configs/project/chainContainers.ts b/packages/cli/package/src/lib/configs/project/chainContainers.ts index 79cabf4df..7129b24cd 100644 --- a/packages/cli/package/src/lib/configs/project/chainContainers.ts +++ b/packages/cli/package/src/lib/configs/project/chainContainers.ts @@ -17,7 +17,7 @@ import { versions } from "../../../versions.js"; -export type Service = { +type Service = { image?: string; ports?: string[]; pull_policy?: string; @@ -29,24 +29,24 @@ export type Service = { healthcheck?: Record; }; -export type Config = { +type Config = { services: Record; volumes?: Record; include?: string[]; secrets?: Record; }; -export const CHAIN_DEPLOY_SCRIPT_NAME = "chain-deploy-script"; +const CHAIN_DEPLOY_SCRIPT_NAME = "chain-deploy-script"; export const CHAIN_RPC_CONTAINER_NAME = "chain-rpc"; export const CHAIN_RPC_PORT = "8545"; const GRAPH_NODE_CONTAINER_NAME = "graph-node"; const GRAPH_NODE_PORT = "8020"; -export const IPFS_CONTAINER_NAME = "ipfs"; -export const IPFS_PORT = "5001"; +const IPFS_CONTAINER_NAME = "ipfs"; +const IPFS_PORT = "5001"; const POSTGRES_CONTAINER_NAME = "postgres"; const SUBGRAPH_DEPLOY_SCRIPT_NAME = "subgraph-deploy-script"; -export const chainContainers: Config = { +export const chainContainers = { volumes: { "chain-rpc": null, [IPFS_CONTAINER_NAME]: null, @@ -150,4 +150,4 @@ export const chainContainers: Config = { depends_on: [GRAPH_NODE_CONTAINER_NAME], }, }, -}; +} as const satisfies Config; diff --git a/packages/cli/package/src/lib/configs/project/dockerCompose.ts b/packages/cli/package/src/lib/configs/project/dockerCompose.ts index 8ca368bba..c8f95e83f 100644 --- a/packages/cli/package/src/lib/configs/project/dockerCompose.ts +++ b/packages/cli/package/src/lib/configs/project/dockerCompose.ts @@ -15,192 +15,20 @@ * along with this program. If not, see . */ -import assert from "assert"; import { writeFile } from "fs/promises"; -import { join, relative } from "path"; import { yamlDiffPatch } from "yaml-diff-patch"; -import { versions } from "../../../versions.js"; -import { - CONFIGS_DIR_NAME, - HTTP_PORT_START, - PROVIDER_CONFIG_FULL_FILE_NAME, - TCP_PORT_START, - WEB_SOCKET_PORT_START, -} from "../../const.js"; -import { numToStr } from "../../helpers/typesafeStringify.js"; import { pathExists } from "../../helpers/utils.js"; -import { genSecretKeyOrReturnExisting } from "../../keyPairs.js"; -import { ensureFluenceConfigsDir, getFluenceDir } from "../../paths.js"; import { ensureDockerComposeConfigPath } from "../../paths.js"; -import { CHAIN_RPC_CONTAINER_NAME } from "./chainContainers.js"; -import { IPFS_CONTAINER_NAME } from "./chainContainers.js"; -import { CHAIN_DEPLOY_SCRIPT_NAME } from "./chainContainers.js"; -import { - chainContainers, - type Config, - type Service, -} from "./chainContainers.js"; -import { - ensureComputerPeerConfigs, - getConfigTomlName, -} from "./provider/provider.js"; - -type GenNoxImageArgs = { - name: string; - tcpPort: number; - webSocketPort: number; - httpPort: number; - bootstrapName: string; - bootstrapTcpPort?: number; -}; - -function genNox({ - name, - tcpPort, - webSocketPort, - httpPort, - bootstrapName, - bootstrapTcpPort, -}: GenNoxImageArgs): [name: string, service: Service] { - const configTomlName = getConfigTomlName(name); - const configLocation = `/run/${CONFIGS_DIR_NAME}/${configTomlName}`; - const tcpPortString = numToStr(tcpPort); - const websocketPortString = numToStr(webSocketPort); - return [ - name, - { - image: versions.nox, - ports: [ - `${tcpPortString}:${tcpPortString}`, - `${websocketPortString}:${websocketPortString}`, - ], - environment: { - WASM_LOG: "debug", - FLUENCE_MAX_SPELL_PARTICLE_TTL: "30s", - FLUENCE_ROOT_KEY_PAIR__PATH: `/run/secrets/${name}`, - RUST_LOG: - "info,chain_connector=debug,run-console=trace,aquamarine::log=debug,network=trace,worker_inactive=trace,expired=info,spell=debug,ipfs_effector=debug,ipfs_pure=debug,spell_event_bus=trace,system_services=debug,particle_reap=debug,aquamarine::actor=debug,aquamarine::aqua_runtime=off,aquamarine=warn,chain_listener=debug,chain-connector=debug,execution=trace", - }, - command: [ - `--config=${configLocation}`, - "--dev-mode", - "--external-maddrs", - `/dns4/${name}/tcp/${tcpPortString}`, - `/dns4/${name}/tcp/${websocketPortString}/ws`, - "--allow-private-ips", - bootstrapTcpPort === undefined - ? "--local" - : `--bootstraps=/dns/${bootstrapName}/tcp/${numToStr(bootstrapTcpPort)}`, - "--print-config", - ], - depends_on: { - [IPFS_CONTAINER_NAME]: { condition: "service_healthy" }, - [CHAIN_RPC_CONTAINER_NAME]: { condition: "service_healthy" }, - [CHAIN_DEPLOY_SCRIPT_NAME]: { - condition: "service_completed_successfully", - }, - }, - volumes: [ - `./${CONFIGS_DIR_NAME}/${configTomlName}:${configLocation}`, - `${name}:/.fluence`, - ], - secrets: [name], - healthcheck: { - test: `curl -f http://localhost:${numToStr(httpPort)}/health`, - interval: "5s", - timeout: "2s", - retries: 10, - }, - }, - ]; -} - -async function genDefaultDockerCompose(): Promise { - const configsDir = await ensureFluenceConfigsDir(); - const fluenceDir = getFluenceDir(); - const computePeers = await ensureComputerPeerConfigs(); - - const peers = await Promise.all( - computePeers.map(async ({ name, overriddenNoxConfig }) => { - return { - ...(await genSecretKeyOrReturnExisting(name)), - webSocketPort: overriddenNoxConfig.websocketPort, - tcpPort: overriddenNoxConfig.tcpPort, - httpPort: overriddenNoxConfig.httpPort, - relativeConfigFilePath: relative( - fluenceDir, - join(configsDir, getConfigTomlName(name)), - ), - }; - }), - ); - - const [bootstrap, ...restNoxes] = peers; - - assert( - bootstrap !== undefined, - `Unreachable. 'computePeers' non-emptiness is checked during ${PROVIDER_CONFIG_FULL_FILE_NAME} validation`, - ); - - const { - name: bootstrapName, - webSocketPort: bootstrapWebSocketPort = WEB_SOCKET_PORT_START, - tcpPort: bootstrapTcpPort = TCP_PORT_START, - httpPort: bootstrapHttpPort = HTTP_PORT_START, - } = bootstrap; - - return { - volumes: { - ...chainContainers.volumes, - ...Object.fromEntries( - peers.map(({ name }) => { - return [name, null] as const; - }), - ), - }, - secrets: Object.fromEntries( - peers.map(({ name, relativeSecretFilePath: file }) => { - return [name, { file }] as const; - }), - ), - services: { - ...chainContainers.services, - ...Object.fromEntries([ - genNox({ - name: bootstrapName, - tcpPort: bootstrapTcpPort, - webSocketPort: bootstrapWebSocketPort, - httpPort: bootstrapHttpPort, - bootstrapName: bootstrapName, - }), - ]), - ...Object.fromEntries( - restNoxes.map(({ name, tcpPort, webSocketPort, httpPort }) => { - return genNox({ - name, - tcpPort, - webSocketPort, - httpPort, - bootstrapName, - bootstrapTcpPort, - }); - }), - ), - }, - }; -} +import { chainContainers } from "./chainContainers.js"; export async function ensureDockerComposeConfig() { const configPath = await ensureDockerComposeConfigPath(); if (!(await pathExists(configPath))) { - await writeFile( - configPath, - yamlDiffPatch("", {}, await genDefaultDockerCompose()), - ); + await writeFile(configPath, yamlDiffPatch("", {}, chainContainers)); } return configPath; diff --git a/packages/cli/package/src/lib/configs/project/env/env1.ts b/packages/cli/package/src/lib/configs/project/env/env1.ts index 4157901f3..a88ac361e 100644 --- a/packages/cli/package/src/lib/configs/project/env/env1.ts +++ b/packages/cli/package/src/lib/configs/project/env/env1.ts @@ -31,6 +31,7 @@ export type Config = { blockScoutUrl?: string; chainId?: number; deployment?: Partial; + ipfsGateway?: string; }; export default { @@ -86,6 +87,12 @@ export default { diamond: { type: "string", nullable: true }, }, }, + ipfsGateway: { + type: "string", + description: `IPFS gateway URL to use`, + format: "uri", + nullable: true, + }, }, additionalProperties: false, }, diff --git a/packages/cli/package/src/lib/configs/project/provider/provider.ts b/packages/cli/package/src/lib/configs/project/provider/provider.ts index 583b5ca93..4ae86faeb 100644 --- a/packages/cli/package/src/lib/configs/project/provider/provider.ts +++ b/packages/cli/package/src/lib/configs/project/provider/provider.ts @@ -18,42 +18,42 @@ import { writeFile } from "fs/promises"; import { join } from "path"; -import { type JsonMap } from "@iarna/toml"; -import kebabCase from "lodash-es/kebabCase.js"; -import mapKeys from "lodash-es/mapKeys.js"; -import snakeCase from "lodash-es/snakeCase.js"; import times from "lodash-es/times.js"; -import { type ChainENV } from "../../../../common.js"; -import { ajv } from "../../../ajvInstance.js"; +import { + getChainId, + getIpfsGateway, + getRpcUrl, +} from "../../../chain/chainConfig.js"; +import { hexStringToUTF8ToBase64String } from "../../../chain/conversions.js"; +import { peerIdBase58ToHexString } from "../../../chain/conversions.js"; import { commandObj, isInteractive } from "../../../commandObj.js"; import { DEFAULT_OFFER_NAME, PROVIDER_CONFIG_FULL_FILE_NAME, TCP_PORT_START, WEB_SOCKET_PORT_START, - TOML_EXT, defaultNumberProperties, DEFAULT_CC_DURATION, DEFAULT_CC_STAKER_REWARD, - DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, - DEFAULT_CURL_EFFECTOR_CID, + DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, CLI_NAME, - DEFAULT_NUMBER_OF_LOCAL_NET_NOXES, - DEFAULT_VM_EFFECTOR_CID, + DEFAULT_NUMBER_OF_LOCAL_NET_PEERS, + WS_CHAIN_URLS, } from "../../../const.js"; +import { resolveDeployment } from "../../../dealClient.js"; import { ensureChainEnv } from "../../../ensureChainNetwork.js"; import { type ProviderConfigArgs } from "../../../generateUserProviderConfig.js"; +import { genManifest } from "../../../genManifest.js"; import { getPeerIdFromSecretKey } from "../../../helpers/getPeerIdFromSecretKey.js"; import { numToStr } from "../../../helpers/typesafeStringify.js"; import { splitErrorsAndResults } from "../../../helpers/utils.js"; import { genSecretKeyOrReturnExisting } from "../../../keyPairs.js"; import { - ensureFluenceConfigsDir, getProviderConfigPath, getFluenceDir, ensureFluenceSecretsFilePath, - ensureFluenceCCPConfigsDir, + ensureK8sManifestsDir, } from "../../../paths.js"; import { input } from "../../../prompt.js"; import { getConfigInitFunction } from "../../initConfigNew.js"; @@ -63,23 +63,11 @@ import { initNewProviderSecretsConfig } from "../providerSecrets/providerSecrets import configOptions0, { type Config as Config0 } from "./provider0.js"; import configOptions1, { - DEFAULT_LOG_LEVEL, - DEFAULT_PROMETHEUS_ENDPOINT_HOST, - DEFAULT_PROMETHEUS_ENDPOINT_PORT, - DEFAULT_REPORT_HASHRATE, - DEFAULT_RPC_ENDPOINT_HOST, - DEFAULT_RPC_ENDPOINT_PORT, - type CCPConfigYAML, type ComputePeer, type Config as Config1, - type NoxConfigYAML, } from "./provider1.js"; import configOptions2, { type Config as Config2 } from "./provider2.js"; -import configOptions3, { - mergeConfigYAMLWithRawConfig, - resolveNoxConfigYAML, - type Config as Config3, -} from "./provider3.js"; +import configOptions3, { type Config as Config3 } from "./provider3.js"; export const options: InitConfigOptions = { description: "Defines config used for provider set up", @@ -90,24 +78,14 @@ export const options: InitConfigOptions = { export type ProviderConfig = Awaited>; -const ipValidator = ajv.compile({ - type: "string", - format: "ipv4", -}); - -function validateIp(value: string) { - return ipValidator(value) ? true : "Must be a valid IPv4 address"; -} - function getDefault(args: ProviderConfigArgs) { return async () => { const chainEnv = await ensureChainEnv(); await initNewEnvConfig(chainEnv); const isLocal = chainEnv === "local"; - const hasVM = !isLocal && args["no-vm"] !== true; - const numberOfNoxes = - args.noxes ?? + const numberOfPeers = + args.peers ?? (isInteractive && !isLocal ? Number( await input({ @@ -119,33 +97,15 @@ function getDefault(args: ProviderConfigArgs) { }, }), ) - : DEFAULT_NUMBER_OF_LOCAL_NET_NOXES); + : DEFAULT_NUMBER_OF_LOCAL_NET_PEERS); const computePeerEntries: [string, ComputePeer][] = []; - for (const i of times(numberOfNoxes)) { - const peerConfig = hasVM - ? { - nox: { - vm: { - network: { - publicIp: isInteractive - ? await input({ - message: `Enter public IP address for nox-${numToStr(i)}`, - validate: validateIp, - }) - : "", - }, - }, - }, - } - : {}; - + for (const i of times(numberOfPeers)) { computePeerEntries.push([ - `nox-${numToStr(i)}`, + `peer-${numToStr(i)}`, { - computeUnits: DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, - ...peerConfig, + computeUnits: DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, }, ] as const); } @@ -154,30 +114,17 @@ function getDefault(args: ProviderConfigArgs) { return { providerName: "defaultProvider", - nox: { - effectors: { - curl: { - wasmCID: DEFAULT_CURL_EFFECTOR_CID, - allowedBinaries: { curl: "/usr/bin/curl" }, - }, - ...(hasVM ? { vm: { wasmCID: DEFAULT_VM_EFFECTOR_CID } } : {}), - }, - }, computePeers, offers: { [DEFAULT_OFFER_NAME]: { ...defaultNumberProperties, computePeers: Object.keys(computePeers), - effectors: [ - DEFAULT_CURL_EFFECTOR_CID, - ...(hasVM ? [DEFAULT_VM_EFFECTOR_CID] : []), - ], }, }, capacityCommitments: Object.fromEntries( - Object.keys(computePeers).map((noxName) => { + Object.keys(computePeers).map((peerName) => { return [ - noxName, + peerName, { duration: DEFAULT_CC_DURATION, stakerReward: DEFAULT_CC_STAKER_REWARD, @@ -207,163 +154,6 @@ export async function ensureReadonlyProviderConfig() { return providerConfig; } -function resolveCCPConfigYAML( - globalCCPConfig: CCPConfigYAML | undefined = {}, - computePeerCCPConfig: CCPConfigYAML | undefined = {}, -) { - const config = mergeConfigYAMLWithRawConfig( - getDefaultCCPConfigYAML(), - globalCCPConfig, - ); - - return mergeConfigYAMLWithRawConfig(config, computePeerCCPConfig); -} - -function getObjByKey(obj: Record, key: string): object { - if (!(key in obj)) { - return {}; - } - - const value = obj[key]; - return typeof value === "object" && value !== null ? value : {}; -} - -function noxConfigYAMLToConfigToml( - { - chain: { diamondContract, walletPrivateKey, ...chain } = {}, - ccp, - listenIp, - metrics, - effectors, - ...config - }: NoxConfigYAML, - ccpConfig: CCPConfigYAML, - env: ChainENV, -) { - const chainConfig = { - httpEndpoint: chain.httpEndpoint, - diamondContractAddress: diamondContract, - networkId: chain.networkId, - walletKey: walletPrivateKey, - defaultBaseFee: chain.defaultBaseFee, - defaultPriorityFee: chain.defaultPriorityFee, - ...getObjByKey(config, "chain_config"), - }; - - // Would be too hard to properly type this - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - return camelCaseKeysToSnakeCase({ - ...config, - ...(listenIp === undefined - ? {} - : { - listenConfig: { - listenIp, - ...getObjByKey(config, "listen_config"), - }, - }), - chainConfig, - ...(env === "local" - ? {} - : { - chainListenerConfig: { - wsEndpoint: chain.wsEndpoint, - ccpEndpoint: - ccp?.ccpEndpoint ?? - `http://${ - ccpConfig.rpcEndpoint?.host ?? DEFAULT_RPC_ENDPOINT_HOST - }:${numToStr( - ccpConfig.rpcEndpoint?.port ?? DEFAULT_RPC_ENDPOINT_PORT, - )}`, - proofPollPeriod: ccp?.proofPollPeriod, - ...getObjByKey(config, "chain_listener_config"), - }, - }), - tokioMetricsEnabled: metrics?.tokioMetricsEnabled, - tokioDetailedMetricsEnabled: metrics?.tokioDetailedMetricsEnabled, - metricsEnabled: metrics?.enabled, - metricsTimerResolution: metrics?.timerResolution, - ...(effectors === undefined - ? {} - : { - effectors: Object.fromEntries( - Object.entries(effectors).map( - ([name, { wasmCID, allowedBinaries }]) => { - return [ - name, - { wasmCID, allowedBinaries: allowedBinaries ?? {} }, - ] as const; - }, - ), - ), - }), - }) as JsonMap; -} - -function ccpConfigYAMLToConfigToml(config: CCPConfigYAML) { - // Would be too hard to properly type this - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - return camelCaseKeysToKebabCase(config) as JsonMap; -} - -function camelCaseToDifferentCase(caseFn: (str: string) => string) { - const camelCaseToDifferentCaseImpl = (val: unknown): unknown => { - if (typeof val === "object" && val !== null) { - if (Array.isArray(val)) { - return val.map(camelCaseToDifferentCaseImpl); - } - - const objWithSnakeCaseKeys = mapKeys(val, (_, key) => { - return caseFn(key); - }); - - return Object.fromEntries( - Object.entries(objWithSnakeCaseKeys).map(([key, value]) => { - return [key, camelCaseToDifferentCaseImpl(value)]; - }), - ); - } - - return val; - }; - - return camelCaseToDifferentCaseImpl; -} - -function camelCaseKeysToSnakeCase(val: unknown): unknown { - return camelCaseToDifferentCase(snakeCase)(val); -} - -function camelCaseKeysToKebabCase(val: unknown): unknown { - return camelCaseToDifferentCase(kebabCase)(val); -} - -function getDefaultCCPConfigYAML(): CCPConfigYAML { - return { - rpcEndpoint: { - host: DEFAULT_RPC_ENDPOINT_HOST, - port: DEFAULT_RPC_ENDPOINT_PORT, - utilityThreadIds: [1], - }, - prometheusEndpoint: { - host: DEFAULT_PROMETHEUS_ENDPOINT_HOST, - port: DEFAULT_PROMETHEUS_ENDPOINT_PORT, - }, - logs: { - reportHashrate: DEFAULT_REPORT_HASHRATE, - logLevel: DEFAULT_LOG_LEVEL, - }, - }; -} - -export function getConfigTomlName(noxName: string) { - return `${noxName}_Config.${TOML_EXT}`; -} - -function getCCPConfigTomlName(noxName: string) { - return `${noxName}_Config.${TOML_EXT}`; -} - export type EnsureComputerPeerConfig = Awaited< ReturnType >[number]; @@ -465,9 +255,6 @@ export async function ensureComputerPeerConfigs(computePeerNames?: string[]) { ); } - const { stringify } = await import("@iarna/toml"); - const configsDir = await ensureFluenceConfigsDir(); - const ccpConfigsDir = await ensureFluenceCCPConfigsDir(); const env = await ensureChainEnv(); if (env === "local") { @@ -495,59 +282,54 @@ export async function ensureComputerPeerConfigs(computePeerNames?: string[]) { } } + const k8sManifestsDir = await ensureK8sManifestsDir(); + const { diamond: diamondContract } = await resolveDeployment(); + const networkId = numToStr(await getChainId()); + const ipfsGatewayEndpoint = await getIpfsGateway(); + const wsEndpoint = WS_CHAIN_URLS[env]; + const httpEndpoint = await getRpcUrl(); + return Promise.all( computePeersWithCC.map( - async ( - { - computePeerName, - computePeer, - secretKey, - signingWallet, - capacityCommitment, - }, - i, - ) => { + async ({ + computePeerName, + computePeer, + secretKey, + signingWallet, + capacityCommitment, + }) => { await writeFile( await ensureFluenceSecretsFilePath(computePeerName), secretKey, "utf8", ); - const overridenCCPConfig = resolveCCPConfigYAML( - providerConfig.ccp, - computePeer.ccp, - ); + const peerId = await getPeerIdFromSecretKey(secretKey); - await writeFile( - join(ccpConfigsDir, getCCPConfigTomlName(computePeerName)), - stringify(ccpConfigYAMLToConfigToml(overridenCCPConfig)), - "utf8", - ); + const ipSupplies = computePeer.resources?.ip.supply ?? []; - const overriddenNoxConfig = await resolveNoxConfigYAML( - providerConfig.nox, - computePeer.nox, - { i, signingWallet }, - ); + const manifest = genManifest({ + chainPrivateKey: hexStringToUTF8ToBase64String(signingWallet), + ipSupplies, + httpEndpoint, + wsEndpoint, + ipfsGatewayEndpoint, + peerIdHex: await peerIdBase58ToHexString(peerId), + networkId, + diamondContract, + }); - await writeFile( - join(configsDir, getConfigTomlName(computePeerName)), - stringify( - noxConfigYAMLToConfigToml( - overriddenNoxConfig, - overridenCCPConfig, - env, - ), - ), - "utf8", - ); + const manifestPath = join(k8sManifestsDir, `${computePeerName}.yaml`); + await writeFile(manifestPath, manifest, "utf8"); return { name: computePeerName, - overriddenNoxConfig, secretKey, - peerId: await getPeerIdFromSecretKey(secretKey), + peerId, computeUnits: computePeer.computeUnits, + kubeconfigPath: computePeer.kubeconfigPath, + ipSupplies, + manifestPath, walletKey: signingWallet, walletAddress: await new Wallet(signingWallet).getAddress(), capacityCommitment, diff --git a/packages/cli/package/src/lib/configs/project/provider/provider0.ts b/packages/cli/package/src/lib/configs/project/provider/provider0.ts index 6e814ce9b..2d0474efa 100644 --- a/packages/cli/package/src/lib/configs/project/provider/provider0.ts +++ b/packages/cli/package/src/lib/configs/project/provider/provider0.ts @@ -27,7 +27,7 @@ import { DEFAULT_CC_DURATION, DEFAULT_CC_STAKER_REWARD, DURATION_EXAMPLE, - DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, + DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, PT_SYMBOL, } from "../../../const.js"; import { numToStr } from "../../../helpers/typesafeStringify.js"; @@ -394,7 +394,7 @@ const computePeerSchema = { computeUnits: { type: "integer", description: `How many compute units should nox have. Default: ${numToStr( - DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, + DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, )} (each compute unit requires ${COMPUTE_UNIT_MEMORY_STR} of RAM)`, }, nox: noxConfigYAMLSchema, diff --git a/packages/cli/package/src/lib/configs/project/provider/provider1.ts b/packages/cli/package/src/lib/configs/project/provider/provider1.ts index ab9086e65..fe605aa73 100644 --- a/packages/cli/package/src/lib/configs/project/provider/provider1.ts +++ b/packages/cli/package/src/lib/configs/project/provider/provider1.ts @@ -26,7 +26,7 @@ import { HTTP_PORT_START, TCP_PORT_START, WEB_SOCKET_PORT_START, - DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, + DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, } from "../../../const.js"; import { boolToStr, numToStr } from "../../../helpers/typesafeStringify.js"; import type { ConfigOptions } from "../../initConfigNewTypes.js"; @@ -120,9 +120,9 @@ export type NoxConfigYAML = { }; }; -export const DEFAULT_TIMER_RESOLUTION = "1 minute"; -export const DEFAULT_PROOF_POLL_PERIOD = "60 seconds"; -export const DEFAULT_IPFS_BINARY_PATH = "/usr/bin/ipfs"; +const DEFAULT_TIMER_RESOLUTION = "1 minute"; +const DEFAULT_PROOF_POLL_PERIOD = "60 seconds"; +const DEFAULT_IPFS_BINARY_PATH = "/usr/bin/ipfs"; export const noxConfigYAMLSchema = { type: "object", @@ -530,12 +530,12 @@ export type CCPConfigYAML = { rawConfig?: string; }; -export const DEFAULT_RPC_ENDPOINT_HOST = "0.0.0.0"; -export const DEFAULT_RPC_ENDPOINT_PORT = 9389; -export const DEFAULT_PROMETHEUS_ENDPOINT_HOST = "0.0.0.0"; -export const DEFAULT_PROMETHEUS_ENDPOINT_PORT = 9384; -export const DEFAULT_REPORT_HASHRATE = false; -export const DEFAULT_LOG_LEVEL = "debug"; +const DEFAULT_RPC_ENDPOINT_HOST = "0.0.0.0"; +const DEFAULT_RPC_ENDPOINT_PORT = 9389; +const DEFAULT_PROMETHEUS_ENDPOINT_HOST = "0.0.0.0"; +const DEFAULT_PROMETHEUS_ENDPOINT_PORT = 9384; +const DEFAULT_REPORT_HASHRATE = false; +const DEFAULT_LOG_LEVEL = "debug"; const DEFAULT_STATE_PATH = "./state"; export const ccpConfigYAMLSchema = { @@ -642,8 +642,92 @@ export const ccpConfigYAMLSchema = { additionalProperties: false, } as const satisfies JSONSchemaType; +type IPSupply = + | { + start: string; + end?: string; + } + | { + cidr: string; + }; + +const supplySchema = { + type: "object", + description: + "Either specify only a `start` property (if you want a single IP) or `start` and `end` properties (if you want a range) or `cidr` property (if you want a CIDR notation)", + oneOf: [ + { + additionalProperties: false, + properties: { + start: { + type: "string", + format: "ipv4", + description: "Start of the IP range or individual IP", + }, + end: { + nullable: true, + type: "string", + format: "ipv4", + description: "End of the IP range", + }, + }, + required: ["start"], + }, + { + additionalProperties: false, + properties: { + cidr: { + type: "string", + description: "CIDR notation of the IP range", + }, + }, + required: ["cidr"], + }, + ], + required: [], + nullable: true, +} as const satisfies JSONSchemaType; + +export type IPSupplies = Array; + +type IP = { + supply: IPSupplies; +}; + +const ipSchema = { + type: "object", + description: "IP configuration", + additionalProperties: false, + properties: { + supply: { + type: "array", + items: supplySchema, + description: "IP supply", + minItems: 1, + }, + }, + required: ["supply"], +} as const satisfies JSONSchemaType; + +type Resources = { + ip: IP; +}; + +const resourcesSchema = { + type: "object", + description: "Resources configuration", + additionalProperties: false, + properties: { + ip: ipSchema, + }, + required: ["ip"], + nullable: true, +} as const satisfies JSONSchemaType; + export type ComputePeer = { computeUnits: number; + resources?: Resources; + kubeconfigPath?: string; nox?: NoxConfigYAML; ccp?: CCPConfigYAML; }; @@ -656,9 +740,15 @@ const computePeerSchema = { computeUnits: { type: "integer", description: `How many compute units should nox have. Default: ${numToStr( - DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX, + DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER, )} (each compute unit requires ${COMPUTE_UNIT_MEMORY_STR} of RAM)`, }, + resources: resourcesSchema, + kubeconfigPath: { + nullable: true, + type: "string", + description: `Path to the kubeconfig file`, + }, nox: noxConfigYAMLSchema, ccp: ccpConfigYAMLSchema, }, diff --git a/packages/cli/package/src/lib/configs/project/provider/provider2.ts b/packages/cli/package/src/lib/configs/project/provider/provider2.ts index 75c25db1d..3e2e1388f 100644 --- a/packages/cli/package/src/lib/configs/project/provider/provider2.ts +++ b/packages/cli/package/src/lib/configs/project/provider/provider2.ts @@ -38,7 +38,7 @@ import { type Config as PrevConfig, } from "./provider1.js"; -export type Offer = { +type Offer = { minPricePerCuPerEpoch: string; computePeers: Array; effectors?: Array; diff --git a/packages/cli/package/src/lib/configs/project/provider/provider3.ts b/packages/cli/package/src/lib/configs/project/provider/provider3.ts index bec0bca64..723ff5907 100644 --- a/packages/cli/package/src/lib/configs/project/provider/provider3.ts +++ b/packages/cli/package/src/lib/configs/project/provider/provider3.ts @@ -15,17 +15,12 @@ * along with this program. If not, see . */ -import { parse } from "@iarna/toml"; import { color } from "@oclif/color"; import type { JSONSchemaType } from "ajv"; -import cloneDeep from "lodash-es/cloneDeep.js"; import isEmpty from "lodash-es/isEmpty.js"; import mapValues from "lodash-es/mapValues.js"; -import mergeWith from "lodash-es/mergeWith.js"; -import { jsonStringify, type ChainENV } from "../../../../common.js"; import { versions } from "../../../../versions.js"; -import { getChainId } from "../../../chain/chainConfig.js"; import { ccDurationValidator, validateAddress, @@ -33,38 +28,21 @@ import { } from "../../../chain/chainValidators.js"; import { PROVIDER_CONFIG_FULL_FILE_NAME, - DEFAULT_AQUAVM_POOL_SIZE, - HTTP_PORT_START, - TCP_PORT_START, - WEB_SOCKET_PORT_START, - LOCAL_IPFS_ADDRESS, DEFAULT_CC_DURATION, DEFAULT_CC_STAKER_REWARD, DURATION_EXAMPLE, - WS_CHAIN_URLS, - DEFAULT_VM_EFFECTOR_CID, } from "../../../const.js"; -import { resolveDeployment } from "../../../dealClient.js"; -import { ensureChainEnv } from "../../../ensureChainNetwork.js"; import { type ValidationResult, validateCIDs, } from "../../../helpers/validations.js"; import { validateBatchAsync } from "../../../helpers/validations.js"; -import { resolveRelaysWithoutLocal } from "../../../multiaddresWithoutLocal.js"; import type { ConfigOptions } from "../../initConfigNewTypes.js"; -import { CHAIN_RPC_CONTAINER_NAME } from "../chainContainers.js"; -import { IPFS_CONTAINER_NAME } from "../chainContainers.js"; -import { CHAIN_RPC_PORT, IPFS_PORT } from "../chainContainers.js"; -import { initEnvConfig } from "../env/env.js"; import { providerNameSchema } from "./provider0.js"; import { ccpConfigYAMLSchema, computePeersSchema, - DEFAULT_IPFS_BINARY_PATH, - DEFAULT_PROOF_POLL_PERIOD, - DEFAULT_TIMER_RESOLUTION, noxConfigYAMLSchema, type CCPConfigYAML, type ComputePeers, @@ -191,7 +169,6 @@ export default { }, ), ), - validateEffectors(config), validateCC(config), validateMissingComputePeers(config), validateNoDuplicateNoxNamesInOffers(config), @@ -255,82 +232,6 @@ async function validateProtocolVersions(providerConfig: Config) { return true; } -async function validateEffectors( - providerConfig: Config, -): Promise { - const errors = ( - await Promise.all( - Object.entries(providerConfig.offers).flatMap( - ([offerName, { effectors = [], computePeers: computePeerNames }]) => { - const offerEffectorsString = jsonStringify([...effectors].sort()); - - return computePeerNames.map(async (computePeerName) => { - const computePeer = providerConfig.computePeers[computePeerName]; - - if (computePeer === undefined) { - return true; - } - - const noxConfig = await resolveNoxConfigYAML( - providerConfig.nox, - computePeer.nox, - ); - - const computePeerEffectors = [ - ...Object.values(noxConfig.effectors ?? {}).map(({ wasmCID }) => { - return wasmCID; - }), - ].sort(); - - const hasDefaultVmEffector = computePeerEffectors.includes( - DEFAULT_VM_EFFECTOR_CID, - ); - - if ( - noxConfig.vm?.network.publicIp !== undefined && - !hasDefaultVmEffector - ) { - return `Compute peer ${color.yellow( - computePeerName, - )} has a defined publicIp property:\n\nvm:\n network:\n publicIp: ${noxConfig.vm.network.publicIp}\n\nso it is expected to also have a vm effector:\n\neffectors:\n vm:\n wasmCID: ${DEFAULT_VM_EFFECTOR_CID}`; - } - - if ( - noxConfig.vm?.network.publicIp === undefined && - hasDefaultVmEffector - ) { - return `Compute peer ${color.yellow( - computePeerName, - )} has a vm effector:\n\neffectors:\n vm:\n wasmCID: ${DEFAULT_VM_EFFECTOR_CID}\n\nso it is expected to also have a defined publicIp property:\n\nvm:\n network:\n publicIp: `; - } - - const computePeerEffectorsString = - jsonStringify(computePeerEffectors); - - if (computePeerEffectorsString !== offerEffectorsString) { - return `Offer ${color.yellow( - offerName, - )} contains computePeer ${color.yellow( - computePeerName, - )}, that has effectors ${color.yellow( - computePeerEffectorsString, - )} which doesn't match effectors that are specified in the offer ${color.yellow( - offerEffectorsString, - )}`; - } - - return true; - }); - }, - ), - ) - ).filter((result): result is string => { - return typeof result === "string"; - }); - - return errors.length > 0 ? errors.join("\n\n") : true; -} - function validateNoDuplicateNoxNamesInOffers(config: Config): ValidationResult { const noxNamesInOffers: Record = {}; @@ -355,7 +256,7 @@ function validateNoDuplicateNoxNamesInOffers(config: Config): ValidationResult { if (duplicateNoxNames.length > 0) { return duplicateNoxNames .map(([noxName, offerNames]) => { - return `Nox ${color.yellow( + return `Peer ${color.yellow( noxName, )} is present in multiple offers: ${color.yellow( offerNames.join(", "), @@ -444,165 +345,3 @@ function validateMissingComputePeers(config: Config): ValidationResult { return true; } - -function mergeConfigYAML(a: T, b: Record) { - return mergeWith(cloneDeep(a), b, (objValue, srcValue) => { - if (Array.isArray(objValue) && Array.isArray(srcValue)) { - return srcValue; - } - - return undefined; - }); -} - -export function mergeConfigYAMLWithRawConfig< - T extends { rawConfig?: string | undefined } & Record, ->(a: T, b: T) { - const { rawConfig: rawConfigB, ...configB } = b; - let config = mergeConfigYAML(a, configB); - - const parsedRawConfigB = - rawConfigB === undefined ? undefined : parse(rawConfigB); - - if (parsedRawConfigB !== undefined) { - config = mergeConfigYAML(config, parsedRawConfigB); - } - - return config; -} - -export async function resolveNoxConfigYAML( - globalNoxConfig: NoxConfigYAML | undefined = {}, - computePeerNoxConfig: NoxConfigYAML | undefined = {}, - { i = 0, signingWallet = "" }: { i?: number; signingWallet?: string } = {}, -) { - const env = await ensureChainEnv(); - const isLocal = env === "local"; - - let config = mergeConfigYAMLWithRawConfig( - await getDefaultNoxConfigYAML(), - globalNoxConfig, - ); - - config = mergeConfigYAMLWithRawConfig(config, computePeerNoxConfig); - - /* eslint-disable @typescript-eslint/consistent-type-assertions */ - - const tcpPort = - (config["tcp_port"] as number | undefined) ?? - config.tcpPort ?? - (isLocal ? TCP_PORT_START - i : TCP_PORT_START); - - const websocketPort = - (config["websocket_port"] as number | undefined) ?? - config.websocketPort ?? - (isLocal ? WEB_SOCKET_PORT_START - i : WEB_SOCKET_PORT_START); - - const httpPort = - (config["http_port"] as number | undefined) ?? - config.httpPort ?? - (isLocal ? HTTP_PORT_START - i : HTTP_PORT_START); - - const walletPrivateKey = - // @ts-expect-error we allow user to put anything in raw config - (config["chain_config"]?.["wallet_key"] as string | undefined) ?? - config.chain?.walletPrivateKey ?? - signingWallet; - - /* eslint-enable @typescript-eslint/consistent-type-assertions */ - - if (config.chain?.walletPrivateKey === undefined) { - config.chain = { ...config.chain, walletPrivateKey }; - } - - let ipfs: undefined | NoxConfigYAML["ipfs"]; - // eslint-disable-next-line prefer-const - ({ ipfs, ...config } = config); - - config.systemServices = { - ...config.systemServices, - aquaIpfs: { - ...config.systemServices?.aquaIpfs, - externalApiMultiaddr: - config.systemServices?.aquaIpfs?.externalApiMultiaddr ?? - ipfs?.externalApiMultiaddr ?? - EXTERNAL_API_MULTIADDRS[env], - localApiMultiaddr: - config.systemServices?.aquaIpfs?.localApiMultiaddr ?? - ipfs?.localApiMultiaddr ?? - LOCAL_API_MULTIADDRS[env], - ipfsBinaryPath: - config.systemServices?.aquaIpfs?.ipfsBinaryPath ?? - ipfs?.ipfsBinaryPath ?? - DEFAULT_IPFS_BINARY_PATH, - }, - }; - - return { ...config, tcpPort, websocketPort, httpPort }; -} - -const EXTERNAL_API_MULTIADDRS: Record = { - mainnet: "/dns4/ipfs.kras.fluence.dev/tcp/5020", - testnet: "/dns4/ipfs.dar.fluence.dev/tcp/5020", - stage: "/dns4/ipfs.fluence.dev/tcp/5001", - local: LOCAL_IPFS_ADDRESS, -}; - -const NOX_IPFS_MULTIADDR = `/dns4/${IPFS_CONTAINER_NAME}/tcp/${IPFS_PORT}`; - -const LOCAL_API_MULTIADDRS: Record = { - ...EXTERNAL_API_MULTIADDRS, - local: NOX_IPFS_MULTIADDR, -}; - -async function getDefaultNoxConfigYAML(): Promise { - const env = await ensureChainEnv(); - const networkId = await getChainId(); - const { RPC_URLS } = await import("@fluencelabs/deal-ts-clients"); - const envConfig = await initEnvConfig(); - - const CHAIN_URLS_FOR_CONTAINERS = { - ...RPC_URLS, - local: `http://${CHAIN_RPC_CONTAINER_NAME}:${CHAIN_RPC_PORT}`, - }; - - return { - aquavmPoolSize: DEFAULT_AQUAVM_POOL_SIZE, - ipfs: { - externalApiMultiaddr: EXTERNAL_API_MULTIADDRS[env], - localApiMultiaddr: LOCAL_API_MULTIADDRS[env], - ipfsBinaryPath: DEFAULT_IPFS_BINARY_PATH, - }, - systemServices: { - enable: ["aqua-ipfs", "decider"], - decider: { - deciderPeriodSec: 30, - workerIpfsMultiaddr: - env === "local" - ? NOX_IPFS_MULTIADDR - : "/dns4/ipfs.fluence.dev/tcp/5001", - }, - }, - chain: { - httpEndpoint: - envConfig?.rpcUrl === undefined - ? CHAIN_URLS_FOR_CONTAINERS[env] - : envConfig.rpcUrl, - wsEndpoint: WS_CHAIN_URLS[env], - diamondContract: (await resolveDeployment()).diamond, - networkId, - defaultPriorityFee: 0, - }, - ccp: { - proofPollPeriod: DEFAULT_PROOF_POLL_PERIOD, - }, - ...(env === "local" - ? {} - : { bootstrapNodes: await resolveRelaysWithoutLocal(env) }), - metrics: { - enabled: true, - timerResolution: DEFAULT_TIMER_RESOLUTION, - tokioMetricsEnabled: true, - }, - }; -} diff --git a/packages/cli/package/src/lib/const.ts b/packages/cli/package/src/lib/const.ts index 3d011e74b..04834546f 100644 --- a/packages/cli/package/src/lib/const.ts +++ b/packages/cli/package/src/lib/const.ts @@ -27,7 +27,6 @@ import { import { CHAIN_RPC_CONTAINER_NAME, CHAIN_RPC_PORT, - IPFS_PORT, } from "./configs/project/chainContainers.js"; export const CLI_NAME = "fluence"; @@ -47,13 +46,7 @@ export const defaultNumberProperties: Record<"minPricePerCuPerEpoch", string> = export const COMPUTE_UNIT_MEMORY_STR = "2GB"; -export const DEFAULT_CURL_EFFECTOR_CID = - "bafybeicorj3sl6fhqpuubmt5r2n7plkjkmto6jxqckgte2624dj5zvzufm"; - -export const DEFAULT_VM_EFFECTOR_CID = - "bafkreidfw2so3evkkkky7bodnamzg32zweunfkthna362r7e6a63cnqxiy"; - -export const DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_NOX = 32; +export const DEFAULT_NUMBER_OF_COMPUTE_UNITS_ON_PEER = 32; export type FluenceEnv = (typeof CHAIN_ENV)[number]; export const isFluenceEnv = getIsUnion(CHAIN_ENV); @@ -72,12 +65,11 @@ export function fluenceOldEnvToNewEnv(env: FluenceEnvOld): FluenceEnv { )[env]; } -export const LOCAL_IPFS_ADDRESS = `/ip4/127.0.0.1/tcp/${IPFS_PORT}`; export const TCP_PORT_START = 977; export const WEB_SOCKET_PORT_START = 999; export const HTTP_PORT_START = 918; export const DEFAULT_AQUAVM_POOL_SIZE = 2; -export const DEFAULT_NUMBER_OF_LOCAL_NET_NOXES = 3; +export const DEFAULT_NUMBER_OF_LOCAL_NET_PEERS = 3; export const WS_CHAIN_URLS: Record = { mainnet: "wss://ws.mainnet.fluence.dev", @@ -89,7 +81,6 @@ export const WS_CHAIN_URLS: Record = { export const JSON_EXT = "json"; export const YAML_EXT = "yaml"; export const YML_EXT = "yml"; -export const TOML_EXT = "toml"; export const CLI_CONNECTOR_DIR_NAME = "cli-connector"; export const DOT_FLUENCE_DIR_NAME = ".fluence"; @@ -97,8 +88,6 @@ export const SCHEMAS_DIR_NAME = "schemas"; export const COUNTLY_DIR_NAME = "countly"; export const SECRETS_DIR_NAME = "secrets"; export const BACKUPS_DIR_NAME = "backups"; -export const CONFIGS_DIR_NAME = "configs"; -export const CCP_CONFIGS_DIR_NAME = "ccp-configs"; export const PROVIDER_CONFIG_FILE_NAME = `provider`; export const PROVIDER_SECRETS_CONFIG_FILE_NAME = `provider-secrets`; @@ -144,20 +133,22 @@ export const ENV_ARG = { export const ALL_FLAG_VALUE = "all"; -export const NOX_NAMES_FLAG_NAME = "nox-names"; +export const PEER_NAMES_FLAG_NAME = "peer-names"; -const NOX_NAMES_FLAG_CONFIG = { - description: `Comma-separated names of noxes from ${PROVIDER_CONFIG_FULL_FILE_NAME}. To use all of your noxes: --${NOX_NAMES_FLAG_NAME} ${ALL_FLAG_VALUE}`, - helpValue: "", +const PEER_NAMES_FLAG_CONFIG = { + description: `Comma-separated names of peers from ${PROVIDER_CONFIG_FULL_FILE_NAME}. To use all of your peers: --${PEER_NAMES_FLAG_NAME} ${ALL_FLAG_VALUE}`, + helpValue: "", }; -export const NOX_NAMES_FLAG = { - [NOX_NAMES_FLAG_NAME]: Flags.string(NOX_NAMES_FLAG_CONFIG), +const PEER_NAMES_FLAG = { + [PEER_NAMES_FLAG_NAME]: Flags.string(PEER_NAMES_FLAG_CONFIG), }; -export const NOXES_FLAG = { - noxes: Flags.integer({ - description: `Number of Compute Peers to generate when a new ${PROVIDER_CONFIG_FULL_FILE_NAME} is created`, +export const PEERS_FLAG_NAME = "peers"; + +export const PEERS_FLAG = { + [PEERS_FLAG_NAME]: Flags.integer({ + description: `Number of peers to generate when a new ${PROVIDER_CONFIG_FULL_FILE_NAME} is created`, }), }; @@ -185,6 +176,16 @@ export const OFFER_FLAGS = { }), }; +export const PEER_AND_OFFER_NAMES_FLAGS = { + ...PEER_NAMES_FLAG, + ...OFFER_FLAG, +}; + +export type PeerAndOfferNameFlags = { + [PEER_NAMES_FLAG_NAME]?: string | undefined; + [OFFER_FLAG_NAME]?: string | undefined; +}; + export const PRIV_KEY_FLAG_NAME = "priv-key"; export const PRIV_KEY_FLAG = { @@ -227,13 +228,13 @@ export const DOCKER_COMPOSE_FLAGS = { export const CC_IDS_FLAG_NAME = "cc-ids"; export const CC_FLAGS = { - [NOX_NAMES_FLAG_NAME]: Flags.string({ - ...NOX_NAMES_FLAG_CONFIG, + [PEER_NAMES_FLAG_NAME]: Flags.string({ + ...PEER_NAMES_FLAG_CONFIG, exclusive: [CC_IDS_FLAG_NAME], }), [CC_IDS_FLAG_NAME]: Flags.string({ description: "Comma separated capacity commitment IDs", - exclusive: [NOX_NAMES_FLAG_NAME], + exclusive: [PEER_NAMES_FLAG_NAME], }), ...OFFER_FLAG, }; @@ -251,6 +252,8 @@ export const RECOMMENDED_GITIGNORE_CONTENT = `.idea /${DOT_FLUENCE_DIR_NAME}/${SECRETS_DIR_NAME} /${DOT_FLUENCE_DIR_NAME}/${PROVIDER_SECRETS_CONFIG_FULL_FILE_NAME} /${DOT_FLUENCE_DIR_NAME}/${SCHEMAS_DIR_NAME} +.terraform +.terraform.lock.hcl `; export const IS_TTY = Boolean(process.stdout.isTTY && process.stdin.isTTY); export const IS_DEVELOPMENT = process.env["NODE_ENV"] === "development"; diff --git a/packages/cli/package/src/lib/genManifest.ts b/packages/cli/package/src/lib/genManifest.ts new file mode 100644 index 000000000..0ced6507f --- /dev/null +++ b/packages/cli/package/src/lib/genManifest.ts @@ -0,0 +1,160 @@ +/** + * Fluence CLI + * Copyright (C) 2024 Fluence DAO + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { stringify } from "yaml"; + +import type { IPSupplies } from "./configs/project/provider/provider1.js"; + +const PRIVATE_KEY_SECRET_REF = "private-key-secret"; + +type GenManifestsArgs = { + chainPrivateKey: string; + ipSupplies: IPSupplies; + httpEndpoint: string; + wsEndpoint: string; + ipfsGatewayEndpoint: string; + peerIdHex: string; + networkId: string; + diamondContract: string; +}; + +export function genManifest({ + chainPrivateKey, + ipSupplies, + httpEndpoint, + wsEndpoint, + ipfsGatewayEndpoint, + peerIdHex, + networkId, + diamondContract, +}: GenManifestsArgs) { + return `--- +# if VM is enabled +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: kubevirt + namespace: flux-system +spec: + interval: 1m + path: "./flux/components/kubevirt/app" + prune: true + sourceRef: + kind: GitRepository + name: spectrum + namespace: flux-system + +--- +# l2 magic +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: cilium-l2 + namespace: flux-system +${stringify({ + spec: { + interval: "1m", + path: "./flux/components/cilium-l2", + prune: true, + sourceRef: { + kind: "GitRepository", + name: "spectrum", + namespace: "flux-system", + }, + patches: [ + { + patch: stringify([ + { + op: "add", + path: "/spec/blocks", + value: ipSupplies, + }, + ]), + target: { + kind: "CiliumLoadBalancerIPPool", + name: "fluence-l2", + namespace: "kube-system", + }, + }, + ], + }, +})} +--- +apiVersion: v1 +kind: Namespace +metadata: + name: lightmare +--- +# lightmare config +apiVersion: v1 +kind: ConfigMap +metadata: + name: chain-adapter-config + namespace: lightmare +${stringify({ + data: { + "values.yaml": stringify({ + operator: { + config: { + chainAdapter: { + httpEndpoint, + wsEndpoint, + ipfsGatewayEndpoint, + peerId: peerIdHex, + networkId, + diamondContract, + privateKeySecretRef: PRIVATE_KEY_SECRET_REF, + }, + }, + image: { + repository: "fluencelabs/lightmare", // optional + tag: "main", // optional + }, + }, + }), + }, +})} +--- +# chain private key +apiVersion: v1 +kind: Secret +metadata: + name: ${PRIVATE_KEY_SECRET_REF} + namespace: lightmare +type: Opaque +${stringify({ + data: { + "chain-private-key": chainPrivateKey, + }, +})} +--- +# lightmare deployment +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: lightmare + namespace: flux-system +spec: + interval: 1m + path: "./flux/core/lightmare/app" + prune: true + sourceRef: + kind: GitRepository + name: spectrum + namespace: flux-system +`; +} diff --git a/packages/cli/package/src/lib/generateUserProviderConfig.ts b/packages/cli/package/src/lib/generateUserProviderConfig.ts index 2baefd5e2..7e2c75691 100644 --- a/packages/cli/package/src/lib/generateUserProviderConfig.ts +++ b/packages/cli/package/src/lib/generateUserProviderConfig.ts @@ -15,7 +15,8 @@ * along with this program. If not, see . */ +import { PEERS_FLAG_NAME } from "./const.js"; + export type ProviderConfigArgs = { - noxes?: number | undefined; - "no-vm"?: boolean | undefined; + [PEERS_FLAG_NAME]?: number | undefined; }; diff --git a/packages/cli/package/src/lib/helpers/getPeerIdFromSecretKey.ts b/packages/cli/package/src/lib/helpers/getPeerIdFromSecretKey.ts index 74431487d..5db6cedef 100644 --- a/packages/cli/package/src/lib/helpers/getPeerIdFromSecretKey.ts +++ b/packages/cli/package/src/lib/helpers/getPeerIdFromSecretKey.ts @@ -18,7 +18,15 @@ import { base64ToUint8Array } from "../keyPairs.js"; export async function getPeerIdFromSecretKey(secretKey: string) { - const { KeyPair } = await import("@fluencelabs/js-client"); - const keyPair = await KeyPair.fromEd25519SK(base64ToUint8Array(secretKey)); - return keyPair.getPeerId(); + const { generateKeyPairFromSeed } = await import("@libp2p/crypto/keys"); + const { createFromPrivKey } = await import("@libp2p/peer-id-factory"); + + const key = await generateKeyPairFromSeed( + "Ed25519", + base64ToUint8Array(secretKey), + 256, + ); + + // eslint-disable-next-line no-restricted-syntax + return (await createFromPrivKey(key)).toString(); } diff --git a/packages/cli/package/src/lib/keyPairs.ts b/packages/cli/package/src/lib/keyPairs.ts index 8afabf0c7..d3dec4c24 100644 --- a/packages/cli/package/src/lib/keyPairs.ts +++ b/packages/cli/package/src/lib/keyPairs.ts @@ -41,10 +41,11 @@ export async function genSecretKeyOrReturnExisting(name: string) { } async function genSecretKeyString(): Promise { - const { KeyPair } = await import("@fluencelabs/js-client"); - const keyPair = await KeyPair.randomEd25519(); - const privateKey = keyPair.toEd25519PrivateKey(); - return bufferToBase64(Buffer.from(privateKey)); + const { generateKeyPair } = await import("@libp2p/crypto/keys"); + + return bufferToBase64( + Buffer.from((await generateKeyPair("Ed25519")).marshal().subarray(0, 32)), + ); } export function base64ToUint8Array(base64: string) { diff --git a/packages/cli/package/src/lib/multiaddres.ts b/packages/cli/package/src/lib/multiaddres.ts deleted file mode 100644 index ec22b0ac7..000000000 --- a/packages/cli/package/src/lib/multiaddres.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Fluence CLI - * Copyright (C) 2024 Fluence DAO - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { type Node as AddrAndPeerId } from "@fluencelabs/fluence-network-environment"; - -import { ensureComputerPeerConfigs } from "./configs/project/provider/provider.js"; -import { numToStr } from "./helpers/typesafeStringify.js"; -import { resolveAddrsAndPeerIdsWithoutLocal } from "./multiaddresWithoutLocal.js"; -import { ensureFluenceEnv } from "./resolveFluenceEnv.js"; - -async function ensureLocalAddrsAndPeerIds() { - return (await ensureComputerPeerConfigs()).map( - ({ peerId, overriddenNoxConfig }): AddrAndPeerId => { - return { - multiaddr: `/ip4/127.0.0.1/tcp/${numToStr(overriddenNoxConfig.websocketPort)}/ws/p2p/${peerId}`, - peerId, - }; - }, - ); -} - -async function resolveDefaultAddrsAndPeerIds(): Promise { - const env = await ensureFluenceEnv(); - return env === "local" - ? ensureLocalAddrsAndPeerIds() - : resolveAddrsAndPeerIdsWithoutLocal(env); -} - -export async function resolveDefaultRelays(): Promise> { - return (await resolveDefaultAddrsAndPeerIds()).map((node) => { - return node.multiaddr; - }); -} diff --git a/packages/cli/package/src/lib/multiaddresWithoutLocal.ts b/packages/cli/package/src/lib/multiaddresWithoutLocal.ts deleted file mode 100644 index 38880099c..000000000 --- a/packages/cli/package/src/lib/multiaddresWithoutLocal.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Fluence CLI - * Copyright (C) 2024 Fluence DAO - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { - type Node as AddrAndPeerId, - stage, - testNet, - kras, -} from "@fluencelabs/fluence-network-environment"; -import { multiaddr } from "@multiformats/multiaddr"; -import { color } from "@oclif/color"; - -import { type PublicFluenceEnv } from "../common.js"; - -import { commandObj } from "./commandObj.js"; -import { initEnvConfig } from "./configs/project/env/env.js"; -import type { FluenceEnv } from "./const.js"; - -function getPeerId(addr: string): string { - const id = multiaddr(addr).getPeerId(); - - if (id === null) { - return commandObj.error( - `Can't extract peer id from multiaddr ${color.yellow(addr)}`, - ); - } - - return id; -} - -export function addrsToNodes(multiaddrs: string[]): AddrAndPeerId[] { - return multiaddrs.map((multiaddr) => { - return { - peerId: getPeerId(multiaddr), - multiaddr, - }; - }); -} - -const ADDR_MAP: Record> = { - mainnet: kras, - testnet: testNet, - stage, -}; - -let loggedAboutCustomAddrs = false; - -export async function resolveCustomAddrsAndPeerIds() { - const envConfig = await initEnvConfig(); - - if (envConfig !== null && envConfig.relays !== undefined) { - if (!loggedAboutCustomAddrs) { - commandObj.log( - `Using custom relays from ${color.yellow(envConfig.$getPath())}`, - ); - - loggedAboutCustomAddrs = true; - } - - return addrsToNodes(envConfig.relays); - } - - return null; -} - -export async function resolveAddrsAndPeerIdsWithoutLocal( - env: Exclude, -): Promise { - return (await resolveCustomAddrsAndPeerIds()) ?? ADDR_MAP[env]; -} - -export async function resolveRelaysWithoutLocal( - env: Exclude, -): Promise> { - return (await resolveAddrsAndPeerIdsWithoutLocal(env)).map((node) => { - return node.multiaddr; - }); -} diff --git a/packages/cli/package/src/lib/paths.ts b/packages/cli/package/src/lib/paths.ts index f34caf994..dfb6cb897 100644 --- a/packages/cli/package/src/lib/paths.ts +++ b/packages/cli/package/src/lib/paths.ts @@ -25,11 +25,9 @@ import { DOT_FLUENCE_DIR_NAME, GITIGNORE_FILE_NAME, SECRETS_DIR_NAME, - CONFIGS_DIR_NAME, PROVIDER_CONFIG_FULL_FILE_NAME, PROVIDER_SECRETS_CONFIG_FULL_FILE_NAME, PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME, - CCP_CONFIGS_DIR_NAME, BACKUPS_DIR_NAME, ENV_CONFIG_FULL_FILE_NAME, USER_CONFIG_FULL_FILE_NAME, @@ -110,6 +108,14 @@ export const getGitignorePath = (): string => { return join(projectRootDir, GITIGNORE_FILE_NAME); }; +function k8sManifestsDir() { + return join(projectRootDir, "k8s-manifests"); +} + +export function ensureK8sManifestsDir() { + return ensureDir(k8sManifestsDir()); +} + // Project .fluence paths: export const getFluenceDir = (cwd?: string): string => { @@ -156,11 +162,3 @@ export const ensureFluenceSecretsFilePath = async ( ): Promise => { return join(await ensureFluenceSecretsDir(), `${name}.txt`); }; - -export async function ensureFluenceConfigsDir(): Promise { - return ensureDir(join(getFluenceDir(), CONFIGS_DIR_NAME)); -} - -export async function ensureFluenceCCPConfigsDir(): Promise { - return ensureDir(join(getFluenceDir(), CCP_CONFIGS_DIR_NAME)); -} diff --git a/packages/cli/package/src/lib/resolveComputePeersByNames.ts b/packages/cli/package/src/lib/resolveComputePeersByNames.ts index 36ce1c122..7db8a50cb 100644 --- a/packages/cli/package/src/lib/resolveComputePeersByNames.ts +++ b/packages/cli/package/src/lib/resolveComputePeersByNames.ts @@ -25,7 +25,8 @@ import { type EnsureComputerPeerConfig, } from "./configs/project/provider/provider.js"; import { - NOX_NAMES_FLAG_NAME, + type PeerAndOfferNameFlags, + PEER_NAMES_FLAG_NAME, ALL_FLAG_VALUE, OFFER_FLAG_NAME, } from "./const.js"; @@ -33,14 +34,11 @@ import { commaSepStrToArr, splitErrorsAndResults } from "./helpers/utils.js"; import { checkboxes } from "./prompt.js"; export async function resolveComputePeersByNames( - flags: { - [NOX_NAMES_FLAG_NAME]?: string | undefined; - [OFFER_FLAG_NAME]?: string | undefined; - } = {}, + flags: PeerAndOfferNameFlags, ): Promise<[ResolvedComputePeer, ...ResolvedComputePeer[]]> { const computePeers = await ensureComputerPeerConfigs(); - if (flags[NOX_NAMES_FLAG_NAME] === ALL_FLAG_VALUE) { + if (flags[PEER_NAMES_FLAG_NAME] === ALL_FLAG_VALUE) { const [firstComputePeer, ...restComputePeers] = computePeers; if (firstComputePeer === undefined) { @@ -82,12 +80,12 @@ export async function resolveComputePeersByNames( return [firstComputerPeer, ...restComputerPeers]; } - if (flags[NOX_NAMES_FLAG_NAME] === undefined) { + if (flags[PEER_NAMES_FLAG_NAME] === undefined) { const [firstComputePeer, ...restComputePeers] = await checkboxes< EnsureComputerPeerConfig, never >({ - message: `Select one or more nox names from ${providerConfig.$getPath()}`, + message: `Select one or more peer names from ${providerConfig.$getPath()}`, options: computePeers.map((computePeer) => { return { name: computePeer.name, @@ -102,16 +100,16 @@ export async function resolveComputePeersByNames( return true; }, oneChoiceMessage(choice) { - return `One nox found at ${providerConfig.$getPath()}: ${color.yellow( + return `One peer found at ${providerConfig.$getPath()}: ${color.yellow( choice, )}. Do you want to select it`; }, onNoChoices() { commandObj.error( - `You must have at least one nox specified in ${providerConfig.$getPath()}`, + `You must have at least one peer specified in ${providerConfig.$getPath()}`, ); }, - flagName: NOX_NAMES_FLAG_NAME, + flagName: PEER_NAMES_FLAG_NAME, }); if (firstComputePeer === undefined) { @@ -123,10 +121,10 @@ export async function resolveComputePeersByNames( return [firstComputePeer, ...restComputePeers]; } - const noxNames = commaSepStrToArr(flags[NOX_NAMES_FLAG_NAME]); + const peerNames = commaSepStrToArr(flags[PEER_NAMES_FLAG_NAME]); - const [unknownNoxNames, validNoxNames] = splitErrorsAndResults( - noxNames, + const [unknownPeerNames, validPeerNames] = splitErrorsAndResults( + peerNames, (name) => { if ( computePeers.find((cp) => { @@ -140,10 +138,10 @@ export async function resolveComputePeersByNames( }, ); - if (unknownNoxNames.length > 0) { + if (unknownPeerNames.length > 0) { commandObj.error( - `nox names: ${color.yellow( - unknownNoxNames.join(", "), + `peer names: ${color.yellow( + unknownPeerNames.join(", "), )} not found in ${color.yellow( "computePeers", )} property of ${providerConfig.$getPath()}`, @@ -152,13 +150,13 @@ export async function resolveComputePeersByNames( const [firstComputePeer, ...restComputePeers] = computePeers.filter( ({ name }) => { - return validNoxNames.includes(name); + return validPeerNames.includes(name); }, ); if (firstComputePeer === undefined) { commandObj.error( - `No compute peers found for nox names: ${validNoxNames.join(", ")}`, + `No compute peers found by names: ${validPeerNames.join(", ")} in ${providerConfig.$getPath()}`, ); } diff --git a/packages/cli/package/src/versions.json b/packages/cli/package/src/versions.json index ef95cbeba..a45e5c9e3 100644 --- a/packages/cli/package/src/versions.json +++ b/packages/cli/package/src/versions.json @@ -1,6 +1,5 @@ { "protocolVersion": 1, - "nox": "fluencelabs/nox:0.26.1", "chain-rpc": "fluencelabs/chain-rpc:0.22.0", "chain-deploy-script": "fluencelabs/chain-deploy-script:0.22.0", "subgraph-deploy-script": "fluencelabs/subgraph-deploy-script:0.22.0" diff --git a/packages/cli/package/test/tests/provider.test.ts b/packages/cli/package/test/tests/provider.test.ts index ba0be8806..8bdaaf9f9 100644 --- a/packages/cli/package/test/tests/provider.test.ts +++ b/packages/cli/package/test/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("provider tests", () => { providerConfig.capacityCommitments = Object.fromEntries( Object.values(providerConfig.capacityCommitments).map((config, i) => { return [ - `nox-${numToStr(i)}`, + `peer-${numToStr(i)}`, { ...config, duration: `${numToStr(CC_DURATION_SECONDS)} seconds` }, ] as const; }), diff --git a/packages/cli/package/yarn.lock b/packages/cli/package/yarn.lock index 072db089d..f9354243e 100644 --- a/packages/cli/package/yarn.lock +++ b/packages/cli/package/yarn.lock @@ -1513,68 +1513,13 @@ __metadata: languageName: node linkType: hard -"@chainsafe/as-chacha20poly1305@npm:^0.1.0": - version: 0.1.0 - resolution: "@chainsafe/as-chacha20poly1305@npm:0.1.0" - checksum: 10c0/a537dce48829484488c8e55678dec55f8d47b40bf27f0909dfd8d3b49d5a8e154a4a8433e76c787f9a60ef74524137b7f3fbf2bac10a20e698b30cfd6fe22257 - languageName: node - linkType: hard - -"@chainsafe/as-sha256@npm:^0.4.1": - version: 0.4.2 - resolution: "@chainsafe/as-sha256@npm:0.4.2" - checksum: 10c0/af1abf43340e93fb67b570b85dc88e71c97d00dbc3e68f1d54fe3bb0d99fd8ad7f9047f3f1aeb4c27900698e6653382e123c58b888b0c3946afb9f2067e35c55 - languageName: node - linkType: hard - -"@chainsafe/is-ip@npm:^2.0.1, @chainsafe/is-ip@npm:^2.0.2": +"@chainsafe/is-ip@npm:^2.0.1": version: 2.0.2 resolution: "@chainsafe/is-ip@npm:2.0.2" checksum: 10c0/0bb8b9d0babe583642d31ffafad603ac5e5dc48884266feae57479d81f4e81ef903628527d81b39d5305657a957bf435bd2ef38b98a4526a7aab366febf793ad languageName: node linkType: hard -"@chainsafe/libp2p-noise@npm:14.0.0": - version: 14.0.0 - resolution: "@chainsafe/libp2p-noise@npm:14.0.0" - dependencies: - "@chainsafe/as-chacha20poly1305": "npm:^0.1.0" - "@chainsafe/as-sha256": "npm:^0.4.1" - "@libp2p/crypto": "npm:^3.0.0" - "@libp2p/interface": "npm:^1.0.0" - "@libp2p/peer-id": "npm:^4.0.0" - "@noble/ciphers": "npm:^0.4.0" - "@noble/curves": "npm:^1.1.0" - "@noble/hashes": "npm:^1.3.1" - it-byte-stream: "npm:^1.0.0" - it-length-prefixed: "npm:^9.0.1" - it-length-prefixed-stream: "npm:^1.0.0" - it-pair: "npm:^2.0.6" - it-pipe: "npm:^3.0.1" - it-stream-types: "npm:^2.0.1" - protons-runtime: "npm:^5.0.0" - uint8arraylist: "npm:^2.4.3" - uint8arrays: "npm:^4.0.4" - wherearewe: "npm:^2.0.1" - checksum: 10c0/57fd418736a4a07f6f67c0f759e633e87b8d545e183d6e185f206d47cd0d9557af2b0b4b102234983e8e86d7bb36acf8483b01784d90ae07a0824d9eb9bda3ae - languageName: node - linkType: hard - -"@chainsafe/libp2p-yamux@npm:6.0.1": - version: 6.0.1 - resolution: "@chainsafe/libp2p-yamux@npm:6.0.1" - dependencies: - "@libp2p/interface": "npm:^1.0.0" - "@libp2p/utils": "npm:^5.0.0" - get-iterator: "npm:^2.0.1" - it-foreach: "npm:^2.0.3" - it-pipe: "npm:^3.0.1" - it-pushable: "npm:^3.2.0" - uint8arraylist: "npm:^2.4.3" - checksum: 10c0/aea6941931365c43d76b8344bff45ee0b6c641c2f8883c855309b93279f5abb88f995277512a96af9b102f44199521fae61ca3863b4083b316855666ba763354 - languageName: node - linkType: hard - "@chainsafe/netmask@npm:^2.0.0": version: 2.0.0 resolution: "@chainsafe/netmask@npm:2.0.0" @@ -2013,16 +1958,6 @@ __metadata: languageName: node linkType: hard -"@fluencelabs/avm@npm:0.62.0": - version: 0.62.0 - resolution: "@fluencelabs/avm@npm:0.62.0" - dependencies: - msgpack-lite: "npm:^0.1.26" - multicodec: "npm:^3.2.1" - checksum: 10c0/23941445c2318a5677b6993f2ae5e26b9ed6d89aca1e3d7722ce564f362c5ce4d72562278a51eb6833d026f1de0ed70cf51e4f2ba92ccf188b8a43fcde1e6ca6 - languageName: node - linkType: hard - "@fluencelabs/cli@workspace:.": version: 0.0.0-use.local resolution: "@fluencelabs/cli@workspace:." @@ -2030,15 +1965,14 @@ __metadata: "@actions/core": "npm:1.11.1" "@aws-sdk/lib-storage": "npm:^3.501.0" "@fluencelabs/deal-ts-clients": "npm:0.22.1" - "@fluencelabs/fluence-network-environment": "npm:1.2.3" - "@fluencelabs/js-client": "npm:0.9.0" "@graphql-codegen/cli": "npm:^5.0.3" "@graphql-codegen/typescript": "npm:^4.1.1" "@graphql-codegen/typescript-graphql-request": "npm:^6.2.0" "@graphql-codegen/typescript-operations": "npm:^4.3.1" - "@iarna/toml": "npm:2.2.5" + "@kubernetes/client-node": "github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d" + "@libp2p/crypto": "npm:4.0.1" + "@libp2p/peer-id-factory": "npm:4.0.5" "@mswjs/interceptors": "npm:0.29.1" - "@multiformats/multiaddr": "npm:12.2.1" "@oclif/color": "npm:1.0.13" "@oclif/core": "npm:4.0.29" "@oclif/plugin-autocomplete": "npm:3.2.6" @@ -2122,107 +2056,6 @@ __metadata: languageName: node linkType: hard -"@fluencelabs/fluence-network-environment@npm:1.2.3": - version: 1.2.3 - resolution: "@fluencelabs/fluence-network-environment@npm:1.2.3" - checksum: 10c0/5ae802a4cf2e5f2656527f2fc57b6c45bbdc106a64a7a4cebf7b15eed390d0e57f487cde73e57676686ac98775a7d94a6280436cc457a675fc3d746580ff84ea - languageName: node - linkType: hard - -"@fluencelabs/interfaces@npm:0.12.0": - version: 0.12.0 - resolution: "@fluencelabs/interfaces@npm:0.12.0" - checksum: 10c0/f9daf04484d34c7dd3fd6e6385baedbbabd0883164307afa43d9c20479d74965bb0857967e86797b5a4ef02b0aec244ab6191feb0b4268dfb687532b98667ed1 - languageName: node - linkType: hard - -"@fluencelabs/js-client-isomorphic@npm:0.6.0": - version: 0.6.0 - resolution: "@fluencelabs/js-client-isomorphic@npm:0.6.0" - dependencies: - "@fluencelabs/avm": "npm:0.62.0" - "@fluencelabs/marine-js": "npm:0.13.0" - "@fluencelabs/marine-worker": "npm:0.6.0" - "@fluencelabs/threads": "npm:^2.0.0" - checksum: 10c0/d644e9116da0d715ec4673e5b908d84ea448665718e428916c75514e9a114f026fc59b4a09c197b65f20abd09e01786e5bc4cf6ad71f67583cfca98ab2e9a0f9 - languageName: node - linkType: hard - -"@fluencelabs/js-client@npm:0.9.0": - version: 0.9.0 - resolution: "@fluencelabs/js-client@npm:0.9.0" - dependencies: - "@chainsafe/libp2p-noise": "npm:14.0.0" - "@chainsafe/libp2p-yamux": "npm:6.0.1" - "@fluencelabs/avm": "npm:0.62.0" - "@fluencelabs/interfaces": "npm:0.12.0" - "@fluencelabs/js-client-isomorphic": "npm:0.6.0" - "@fluencelabs/marine-worker": "npm:0.6.0" - "@fluencelabs/threads": "npm:^2.0.0" - "@libp2p/crypto": "npm:4.0.1" - "@libp2p/identify": "npm:1.0.11" - "@libp2p/interface": "npm:1.1.2" - "@libp2p/peer-id": "npm:4.0.5" - "@libp2p/peer-id-factory": "npm:4.0.5" - "@libp2p/ping": "npm:1.0.10" - "@libp2p/utils": "npm:5.2.2" - "@libp2p/websockets": "npm:8.0.12" - "@multiformats/multiaddr": "npm:12.1.12" - bs58: "npm:5.0.0" - debug: "npm:4.3.4" - int64-buffer: "npm:1.0.1" - it-length-prefixed: "npm:9.0.3" - it-map: "npm:3.0.5" - it-pipe: "npm:3.0.1" - js-base64: "npm:3.7.5" - libp2p: "npm:1.2.0" - multiformats: "npm:11.0.1" - rxjs: "npm:7.5.5" - uint8arrays: "npm:4.0.3" - uuid: "npm:8.3.2" - zod: "npm:3.22.4" - checksum: 10c0/e238b5682e8017e100527d2d9c8182212319d1ecbb90483934602470c2aa1b45a3a5e2650dfd281a47f1aab3f3eb27d6f6564c9f8f3bf87e7d7e50956146a6e2 - languageName: node - linkType: hard - -"@fluencelabs/marine-js@npm:0.13.0": - version: 0.13.0 - resolution: "@fluencelabs/marine-js@npm:0.13.0" - dependencies: - "@wasmer/wasi": "npm:0.12.0" - "@wasmer/wasmfs": "npm:0.12.0" - default-import: "npm:1.1.5" - checksum: 10c0/c8a36875bfbd890eb8afab61bbce8bc98f32b6bbe4bc58c23e402996491499cdac77ef757959191d5148aef1a200196b29a7a42de805aa6dc8418c638a620717 - languageName: node - linkType: hard - -"@fluencelabs/marine-worker@npm:0.6.0": - version: 0.6.0 - resolution: "@fluencelabs/marine-worker@npm:0.6.0" - dependencies: - "@fluencelabs/marine-js": "npm:0.13.0" - "@fluencelabs/threads": "npm:^2.0.0" - observable-fns: "npm:0.6.1" - checksum: 10c0/c91c282caf829613437384d9ac6df26283b73f6af1a810a6c4b77603ed659f9187576928b9ce67a6c99ff20ab353b6ce5ac56fa4fc38dbc50adee37a60961aa4 - languageName: node - linkType: hard - -"@fluencelabs/threads@npm:^2.0.0": - version: 2.0.0 - resolution: "@fluencelabs/threads@npm:2.0.0" - dependencies: - callsites: "npm:^3.1.0" - debug: "npm:^4.2.0" - is-observable: "npm:^2.1.0" - observable-fns: "npm:^0.6.1" - tiny-worker: "npm:>= 2" - dependenciesMeta: - tiny-worker: - optional: true - checksum: 10c0/1a7f73048f3f69da328386bbc3727b480f77907e779796d7485d172c35f484f4daa7592df4701ab8dd3142a34f4ea39d2495da48d9deabf830e32cfb846e7d64 - languageName: node - linkType: hard - "@graphql-codegen/add@npm:^5.0.3": version: 5.0.3 resolution: "@graphql-codegen/add@npm:5.0.3" @@ -2966,13 +2799,6 @@ __metadata: languageName: node linkType: hard -"@iarna/toml@npm:2.2.5": - version: 2.2.5 - resolution: "@iarna/toml@npm:2.2.5" - checksum: 10c0/d095381ad4554aca233b7cf5a91f243ef619e5e15efd3157bc640feac320545450d14b394aebbf6f02a2047437ced778ae598d5879a995441ab7b6c0b2c2f201 - languageName: node - linkType: hard - "@inquirer/confirm@npm:^3.1.22, @inquirer/confirm@npm:^3.2.0": version: 3.2.0 resolution: "@inquirer/confirm@npm:3.2.0" @@ -3145,6 +2971,24 @@ __metadata: languageName: node linkType: hard +"@jsep-plugin/assignment@npm:^1.3.0": + version: 1.3.0 + resolution: "@jsep-plugin/assignment@npm:1.3.0" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/d749554dc691798116eb068eebe2d9bcb0b0d89ef6c7cc7c2a9f37d03da15fdbf8053407e97008090cd1bd6f256ea6c26abbada7399cf79f0b6b502e164b084b + languageName: node + linkType: hard + +"@jsep-plugin/regex@npm:^1.0.4": + version: 1.0.4 + resolution: "@jsep-plugin/regex@npm:1.0.4" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/bec7eb7ea6ab453a2672edc808644c5be3dc06b2a9d77182e18cd595b37deba6dcdb3760849d8684afc5779a86b7d2604dd525cb612a548f9ed9f31a8032ec24 + languageName: node + linkType: hard + "@kamilkisiela/fast-url-parser@npm:^1.1.4": version: 1.1.4 resolution: "@kamilkisiela/fast-url-parser@npm:1.1.4" @@ -3152,6 +2996,29 @@ __metadata: languageName: node linkType: hard +"@kubernetes/client-node@github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d": + version: 0.22.3 + resolution: "@kubernetes/client-node@https://github.com/fluencelabs/kubernetes-client-javascript.git#commit=e72ee00a52fec4eb4a8327632895d888ee504f4d" + dependencies: + byline: "npm:^5.0.0" + isomorphic-ws: "npm:^5.0.0" + js-yaml: "npm:^4.1.0" + jsonpath-plus: "npm:^10.2.0" + openid-client: "npm:^6.1.3" + request: "npm:^2.88.0" + rfc4648: "npm:^1.3.0" + socks-proxy-agent: "npm:^8.0.4" + stream-buffers: "npm:^3.0.2" + tar: "npm:^7.0.0" + tslib: "npm:^2.4.1" + ws: "npm:^8.18.0" + dependenciesMeta: + openid-client: + optional: true + checksum: 10c0/176ce11a8351b53cae4ac7738a4e694b2d972d707c3b5b5ab1c5474e176667d4500bd663b76204154a3cd4eaf3edf6808f0d0855f1b8fcb3448d1405afea8199 + languageName: node + linkType: hard + "@leichtgewicht/ip-codec@npm:^2.0.1": version: 2.0.5 resolution: "@leichtgewicht/ip-codec@npm:2.0.5" @@ -3175,23 +3042,7 @@ __metadata: languageName: node linkType: hard -"@libp2p/crypto@npm:^3.0.0": - version: 3.0.4 - resolution: "@libp2p/crypto@npm:3.0.4" - dependencies: - "@libp2p/interface": "npm:^1.1.1" - "@noble/curves": "npm:^1.1.0" - "@noble/hashes": "npm:^1.3.1" - multiformats: "npm:^13.0.0" - node-forge: "npm:^1.1.0" - protons-runtime: "npm:^5.0.0" - uint8arraylist: "npm:^2.4.3" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/a2cdcbd85051e6c64a3babab0bfae63afb67a5bfe5e27075748a637f94e45014d756c50aea6d46adc57867a6b3138fad684aa2692f341f84eb82791d917e0a61 - languageName: node - linkType: hard - -"@libp2p/crypto@npm:^4.0.1, @libp2p/crypto@npm:^4.1.9": +"@libp2p/crypto@npm:^4.0.1": version: 4.1.9 resolution: "@libp2p/crypto@npm:4.1.9" dependencies: @@ -3207,25 +3058,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/identify@npm:1.0.11": - version: 1.0.11 - resolution: "@libp2p/identify@npm:1.0.11" - dependencies: - "@libp2p/interface": "npm:^1.1.2" - "@libp2p/interface-internal": "npm:^1.0.7" - "@libp2p/peer-id": "npm:^4.0.5" - "@libp2p/peer-record": "npm:^7.0.6" - "@multiformats/multiaddr": "npm:^12.1.10" - "@multiformats/multiaddr-matcher": "npm:^1.1.0" - it-protobuf-stream: "npm:^1.1.1" - protons-runtime: "npm:^5.0.0" - uint8arraylist: "npm:^2.4.7" - uint8arrays: "npm:^5.0.0" - wherearewe: "npm:^2.0.1" - checksum: 10c0/1fb61da6eaeb276168dd9bff518a9bcd4e9308adf7c4841e585a071e5d9e38db10042ba746c0b4b19cb99e573df563d1f2a248b64761ba7f9c6c9bf3429b0527 - languageName: node - linkType: hard - "@libp2p/interface-connection@npm:^4.0.0": version: 4.0.0 resolution: "@libp2p/interface-connection@npm:4.0.0" @@ -3239,19 +3071,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/interface-internal@npm:^1.0.7": - version: 1.3.4 - resolution: "@libp2p/interface-internal@npm:1.3.4" - dependencies: - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/peer-collections": "npm:^5.2.9" - "@multiformats/multiaddr": "npm:^12.2.3" - progress-events: "npm:^1.0.0" - uint8arraylist: "npm:^2.4.8" - checksum: 10c0/331653a39239f99a2b3f8aef6e6645159904f0949854de8725c6f097dcefc542c8832fd1e2662ec04230f049bfb76e748e767652d9e29d4e8a07db48c4addbe9 - languageName: node - linkType: hard - "@libp2p/interface-keychain@npm:^2.0.0": version: 2.0.5 resolution: "@libp2p/interface-keychain@npm:2.0.5" @@ -3294,20 +3113,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/interface@npm:1.1.2": - version: 1.1.2 - resolution: "@libp2p/interface@npm:1.1.2" - dependencies: - "@multiformats/multiaddr": "npm:^12.1.10" - it-pushable: "npm:^3.2.3" - it-stream-types: "npm:^2.0.1" - multiformats: "npm:^13.0.0" - progress-events: "npm:^1.0.0" - uint8arraylist: "npm:^2.4.7" - checksum: 10c0/feadd8c7160759bd33215b0573b564ac130861b2474d8e15ad6308ce4e6ab9ecc1af04d7d5e1a9622165e25c9088dd27ffbf3eb1da3328157b5fafccb05026fc - languageName: node - linkType: hard - "@libp2p/interface@npm:^1.0.0": version: 1.4.1 resolution: "@libp2p/interface@npm:1.4.1" @@ -3322,7 +3127,7 @@ __metadata: languageName: node linkType: hard -"@libp2p/interface@npm:^1.1.1, @libp2p/interface@npm:^1.1.2, @libp2p/interface@npm:^1.7.0": +"@libp2p/interface@npm:^1.1.2, @libp2p/interface@npm:^1.7.0": version: 1.7.0 resolution: "@libp2p/interface@npm:1.7.0" dependencies: @@ -3356,47 +3161,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/logger@npm:^4.0.20, @libp2p/logger@npm:^4.0.5, @libp2p/logger@npm:^4.0.6": - version: 4.0.20 - resolution: "@libp2p/logger@npm:4.0.20" - dependencies: - "@libp2p/interface": "npm:^1.7.0" - "@multiformats/multiaddr": "npm:^12.2.3" - interface-datastore: "npm:^8.2.11" - multiformats: "npm:^13.1.0" - weald: "npm:^1.0.2" - checksum: 10c0/0c70b579db29201a5c829c098cce1cfac5d8bfc5df501a76facaee9d2e853972d6bd6ab1baef5e79aed8e1d7cd1c7ea2241bafebad95bd686144a630a4eabe78 - languageName: node - linkType: hard - -"@libp2p/multistream-select@npm:^5.1.2": - version: 5.1.17 - resolution: "@libp2p/multistream-select@npm:5.1.17" - dependencies: - "@libp2p/interface": "npm:^1.7.0" - it-length-prefixed: "npm:^9.0.4" - it-length-prefixed-stream: "npm:^1.1.7" - it-stream-types: "npm:^2.0.1" - p-defer: "npm:^4.0.1" - race-signal: "npm:^1.0.2" - uint8-varint: "npm:^2.0.4" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/67a44268fdf4b29ae7d68ee652234f564f4f7ba0db789955da5aa62142504cf18bc9851651b47fada7cea7218b460af9e048c7a9b9f792b1070b0217a627d2ca - languageName: node - linkType: hard - -"@libp2p/peer-collections@npm:^5.1.5, @libp2p/peer-collections@npm:^5.2.9": - version: 5.2.9 - resolution: "@libp2p/peer-collections@npm:5.2.9" - dependencies: - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/peer-id": "npm:^4.2.4" - "@libp2p/utils": "npm:^5.4.9" - checksum: 10c0/1ba2fca907fd19d9218c662a09bae110da0b12a6c4e759cf1381241eda05603b037fd0cd536c1a9ba80c610f0bb1fc71cc7997b6fc58e6dfbf1ad30262c72605 - languageName: node - linkType: hard - "@libp2p/peer-id-factory@npm:4.0.5": version: 4.0.5 resolution: "@libp2p/peer-id-factory@npm:4.0.5" @@ -3411,31 +3175,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/peer-id-factory@npm:^4.0.5": - version: 4.2.4 - resolution: "@libp2p/peer-id-factory@npm:4.2.4" - dependencies: - "@libp2p/crypto": "npm:^4.1.9" - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/peer-id": "npm:^4.2.4" - protons-runtime: "npm:^5.4.0" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/5c7f5010eb176aaff487ff54ecb3efa62fd8578ee3675318dd61b5bbfb61a99c8415c9a3d3563ef7b1c6af3eb868a203d33ab1ffe32524d3dfe4321bb5b4a023 - languageName: node - linkType: hard - -"@libp2p/peer-id@npm:4.0.5": - version: 4.0.5 - resolution: "@libp2p/peer-id@npm:4.0.5" - dependencies: - "@libp2p/interface": "npm:^1.1.2" - multiformats: "npm:^13.0.0" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/6d896b9d7700b4921802b94ffc90783d3ee30df99710daecdf6b0a45994ff6034f9be8b417064fc93ab8d026f5907b699428810813e61a1a1c48daff91a64dbd - languageName: node - linkType: hard - "@libp2p/peer-id@npm:^2.0.0": version: 2.0.4 resolution: "@libp2p/peer-id@npm:2.0.4" @@ -3448,7 +3187,7 @@ __metadata: languageName: node linkType: hard -"@libp2p/peer-id@npm:^4.0.0, @libp2p/peer-id@npm:^4.0.5, @libp2p/peer-id@npm:^4.2.4": +"@libp2p/peer-id@npm:^4.0.5": version: 4.2.4 resolution: "@libp2p/peer-id@npm:4.2.4" dependencies: @@ -3459,128 +3198,6 @@ __metadata: languageName: node linkType: hard -"@libp2p/peer-record@npm:^7.0.25, @libp2p/peer-record@npm:^7.0.6": - version: 7.0.25 - resolution: "@libp2p/peer-record@npm:7.0.25" - dependencies: - "@libp2p/crypto": "npm:^4.1.9" - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/peer-id": "npm:^4.2.4" - "@libp2p/utils": "npm:^5.4.9" - "@multiformats/multiaddr": "npm:^12.2.3" - protons-runtime: "npm:^5.4.0" - uint8-varint: "npm:^2.0.4" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/2f44d2f17be1b1a9863cfb2b34ee99129ec1c3b152a06ae9b2af004bc29031019eecdbf17507beb3ab4bdecf28b423d4691c9a72f2c85ff260b114457726fa7c - languageName: node - linkType: hard - -"@libp2p/peer-store@npm:^10.0.7": - version: 10.1.5 - resolution: "@libp2p/peer-store@npm:10.1.5" - dependencies: - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/peer-collections": "npm:^5.2.9" - "@libp2p/peer-id": "npm:^4.2.4" - "@libp2p/peer-record": "npm:^7.0.25" - "@multiformats/multiaddr": "npm:^12.2.3" - interface-datastore: "npm:^8.2.11" - it-all: "npm:^3.0.6" - mortice: "npm:^3.0.4" - multiformats: "npm:^13.1.0" - protons-runtime: "npm:^5.4.0" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/6e36186377770a7df12f5a6a34e45cf9fe11e99ec58a6c14eb47947a40f8a466a0770d86ce7b4636f3f590f499d883ef280e053e8371de07ef373f244f830306 - languageName: node - linkType: hard - -"@libp2p/ping@npm:1.0.10": - version: 1.0.10 - resolution: "@libp2p/ping@npm:1.0.10" - dependencies: - "@libp2p/crypto": "npm:^4.0.1" - "@libp2p/interface": "npm:^1.1.2" - "@libp2p/interface-internal": "npm:^1.0.7" - "@multiformats/multiaddr": "npm:^12.1.10" - it-first: "npm:^3.0.3" - it-pipe: "npm:^3.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/f77b345eb1d9c8f9ac9c2fc1fe5e0453faea9cc424250582aec0df214f55ef90f1d6e9b7a2cae9c03e47bda6163f8f105a85639388aefba66aad91cd5f2bf468 - languageName: node - linkType: hard - -"@libp2p/utils@npm:5.2.2": - version: 5.2.2 - resolution: "@libp2p/utils@npm:5.2.2" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.2" - "@libp2p/interface": "npm:^1.1.2" - "@libp2p/logger": "npm:^4.0.5" - "@multiformats/multiaddr": "npm:^12.1.10" - "@multiformats/multiaddr-matcher": "npm:^1.1.0" - delay: "npm:^6.0.0" - get-iterator: "npm:^2.0.1" - is-loopback-addr: "npm:^2.0.1" - it-pushable: "npm:^3.2.3" - it-stream-types: "npm:^2.0.1" - p-defer: "npm:^4.0.0" - private-ip: "npm:^3.0.1" - race-event: "npm:^1.1.0" - race-signal: "npm:^1.0.2" - uint8arraylist: "npm:^2.4.7" - checksum: 10c0/6315ced9d642de85c22ec634d3fef613355492b465568e9d5a0081ed53736a476bee294254aa0d6b89d34e95e313a24d955d8729a7fced02216faee9c46bba92 - languageName: node - linkType: hard - -"@libp2p/utils@npm:^5.0.0, @libp2p/utils@npm:^5.2.2, @libp2p/utils@npm:^5.4.9": - version: 5.4.9 - resolution: "@libp2p/utils@npm:5.4.9" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.2" - "@libp2p/crypto": "npm:^4.1.9" - "@libp2p/interface": "npm:^1.7.0" - "@libp2p/logger": "npm:^4.0.20" - "@multiformats/multiaddr": "npm:^12.2.3" - "@multiformats/multiaddr-matcher": "npm:^1.2.1" - "@sindresorhus/fnv1a": "npm:^3.1.0" - "@types/murmurhash3js-revisited": "npm:^3.0.3" - any-signal: "npm:^4.1.1" - delay: "npm:^6.0.0" - get-iterator: "npm:^2.0.1" - is-loopback-addr: "npm:^2.0.2" - it-pushable: "npm:^3.2.3" - it-stream-types: "npm:^2.0.1" - murmurhash3js-revisited: "npm:^3.0.0" - netmask: "npm:^2.0.2" - p-defer: "npm:^4.0.1" - race-event: "npm:^1.3.0" - race-signal: "npm:^1.0.2" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/d0df001aa3abdea65b8fea6bc01d934a4c12deb6fd5668e0c9f1216f4aa3f31242243ca080590fb3a47c7cd94d9c1add65fc4459505ccc052cce9cfe1f313d7f - languageName: node - linkType: hard - -"@libp2p/websockets@npm:8.0.12": - version: 8.0.12 - resolution: "@libp2p/websockets@npm:8.0.12" - dependencies: - "@libp2p/interface": "npm:^1.1.2" - "@libp2p/utils": "npm:^5.2.2" - "@multiformats/mafmt": "npm:^12.1.6" - "@multiformats/multiaddr": "npm:^12.1.10" - "@multiformats/multiaddr-to-uri": "npm:^9.0.2" - "@types/ws": "npm:^8.5.4" - it-ws: "npm:^6.1.0" - p-defer: "npm:^4.0.0" - wherearewe: "npm:^2.0.1" - ws: "npm:^8.12.1" - checksum: 10c0/0bccb3be96fd2a02a8fde950e7d866790228d06f742cbba367efe2f98f0a0de231b9aabcbb208ec90c169c5d88fc7671ecfb8392b65e65cfa0a976d94ec1f290 - languageName: node - linkType: hard - "@ljharb/through@npm:^2.3.13": version: 2.3.13 resolution: "@ljharb/through@npm:2.3.13" @@ -3619,27 +3236,7 @@ __metadata: languageName: node linkType: hard -"@multiformats/mafmt@npm:^12.1.6": - version: 12.1.6 - resolution: "@multiformats/mafmt@npm:12.1.6" - dependencies: - "@multiformats/multiaddr": "npm:^12.0.0" - checksum: 10c0/aedae1275263b7350afdd8581b337c803420aee116fdd537f1ec0160b8333d58b51c19c45dcdf9a82c0188064c8aa0ce8f1a16bb7130a17f3b5b4d53177fe6da - languageName: node - linkType: hard - -"@multiformats/multiaddr-matcher@npm:^1.1.0, @multiformats/multiaddr-matcher@npm:^1.2.1": - version: 1.6.0 - resolution: "@multiformats/multiaddr-matcher@npm:1.6.0" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - "@multiformats/multiaddr": "npm:^12.0.0" - multiformats: "npm:^13.0.0" - checksum: 10c0/32d5f3264816452a71825848f74ebd67b8baef5bdf2337fb3caa1a280e572a60cadcf6d7d2f7031194bd126668fee5d00bed24fbc0ca77894eb5bdfeadc118b7 - languageName: node - linkType: hard - -"@multiformats/multiaddr-to-uri@npm:^9.0.1, @multiformats/multiaddr-to-uri@npm:^9.0.2": +"@multiformats/multiaddr-to-uri@npm:^9.0.1": version: 9.0.8 resolution: "@multiformats/multiaddr-to-uri@npm:9.0.8" dependencies: @@ -3648,36 +3245,6 @@ __metadata: languageName: node linkType: hard -"@multiformats/multiaddr@npm:12.1.12": - version: 12.1.12 - resolution: "@multiformats/multiaddr@npm:12.1.12" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - "@chainsafe/netmask": "npm:^2.0.0" - "@libp2p/interface": "npm:^1.0.0" - dns-over-http-resolver: "npm:3.0.0" - multiformats: "npm:^13.0.0" - uint8-varint: "npm:^2.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/10faf23157f25d5a525df694a0722df73509461116b16d1a786bf83132f1fd2b5829fdda0beae7638d4bfffbd0a8f0e7ce81acd3ee2d1070623beff6b8c40d45 - languageName: node - linkType: hard - -"@multiformats/multiaddr@npm:12.2.1": - version: 12.2.1 - resolution: "@multiformats/multiaddr@npm:12.2.1" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - "@chainsafe/netmask": "npm:^2.0.0" - "@libp2p/interface": "npm:^1.0.0" - "@multiformats/dns": "npm:^1.0.3" - multiformats: "npm:^13.0.0" - uint8-varint: "npm:^2.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/b32026406ee3635ce3a8e919663bf2e911e139890f1c18c74e64f5043966f14d6396280f198b7aa11d0faf2c0b27f3e6db0d546167832657b01b9769a7143abc - languageName: node - linkType: hard - "@multiformats/multiaddr@npm:^11.1.5": version: 11.6.1 resolution: "@multiformats/multiaddr@npm:11.6.1" @@ -3707,27 +3274,6 @@ __metadata: languageName: node linkType: hard -"@multiformats/multiaddr@npm:^12.1.10": - version: 12.3.4 - resolution: "@multiformats/multiaddr@npm:12.3.4" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - "@chainsafe/netmask": "npm:^2.0.0" - "@multiformats/dns": "npm:^1.0.3" - multiformats: "npm:^13.0.0" - uint8-varint: "npm:^2.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/0fd1522e5e6e7ab5aa288188b33f958c866f32c754e8ad9270b232ee0842282a4572c15a7fd5480e7c35c237b53ab19862129a87acbf09aa38ea47a5619ae700 - languageName: node - linkType: hard - -"@noble/ciphers@npm:^0.4.0": - version: 0.4.1 - resolution: "@noble/ciphers@npm:0.4.1" - checksum: 10c0/b5d87c56382484511a50bd41891eb013e41587c10c867cdc1d9cd322860a8d831d9196c53bb1d8cab82043bfe3a4e4097e5e641a309ee3d129ae8c65c587acf4 - languageName: node - linkType: hard - "@noble/curves@npm:^1.1.0, @noble/curves@npm:^1.4.0": version: 1.7.0 resolution: "@noble/curves@npm:1.7.0" @@ -3751,7 +3297,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.4.0": +"@noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.4.0": version: 1.6.1 resolution: "@noble/hashes@npm:1.6.1" checksum: 10c0/27643cd8b551bc933b57cc29aa8c8763d586552fc4c3e06ecf7897f55be3463c0c9dff7f6ebacd88e5ce6d0cdb5415ca4874d0cf4359b5ea4a85be21ada03aab @@ -4218,13 +3764,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/fnv1a@npm:^3.1.0": - version: 3.1.0 - resolution: "@sindresorhus/fnv1a@npm:3.1.0" - checksum: 10c0/75b31084b4d886eb774266c546ecd06744758d26e1b89c9a2ee11d5f8f84541c1e1befa4b37d8548fd78c03a617dcfe92730a65178510369a73ecf4cda4c341b - languageName: node - linkType: hard - "@sindresorhus/is@npm:^5.2.0": version: 5.6.0 resolution: "@sindresorhus/is@npm:5.6.0" @@ -5085,13 +4624,6 @@ __metadata: languageName: node linkType: hard -"@types/murmurhash3js-revisited@npm:^3.0.3": - version: 3.0.3 - resolution: "@types/murmurhash3js-revisited@npm:3.0.3" - checksum: 10c0/6d604012f7dc6c4a7352cdfefebd301f0d1d525459bcff649fc63c6a715729db8ac0944425de9efbff4a05be9ebbc0eedae39886a1a88687ed1607dcc5d9ee5f - languageName: node - linkType: hard - "@types/mute-stream@npm:^0.0.4": version: 0.0.4 resolution: "@types/mute-stream@npm:0.0.4" @@ -5250,7 +4782,7 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.0.0, @types/ws@npm:^8.2.2, @types/ws@npm:^8.5.4": +"@types/ws@npm:^8.0.0": version: 8.5.13 resolution: "@types/ws@npm:8.5.13" dependencies: @@ -5550,29 +5082,6 @@ __metadata: languageName: node linkType: hard -"@wasmer/wasi@npm:0.12.0": - version: 0.12.0 - resolution: "@wasmer/wasi@npm:0.12.0" - dependencies: - browser-process-hrtime: "npm:^1.0.0" - buffer-es6: "npm:^4.9.3" - path-browserify: "npm:^1.0.0" - randomfill: "npm:^1.0.4" - checksum: 10c0/8f803118b159485eb9931a59f6af00662ca7535d8bd9ebb8f27614089410a64b767b1d2e2b02130289dcbd3f06e277ec0dd76e0684ffa05d541b03dfa0444a2e - languageName: node - linkType: hard - -"@wasmer/wasmfs@npm:0.12.0": - version: 0.12.0 - resolution: "@wasmer/wasmfs@npm:0.12.0" - dependencies: - memfs: "npm:3.0.4" - pako: "npm:^1.0.11" - tar-stream: "npm:^2.1.0" - checksum: 10c0/7adb3c7cc8cf21735dd245ea9ccc4de18b8e42ab416e78ca850879ce22c3077b273fbc8027fe575dbd76e6b52ae4369cc9d1ba0a65bf58b0449187a6f31c5e9b - languageName: node - linkType: hard - "@whatwg-node/fetch@npm:^0.9.0, @whatwg-node/fetch@npm:^0.9.20": version: 0.9.22 resolution: "@whatwg-node/fetch@npm:0.9.22" @@ -5691,7 +5200,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": +"ajv@npm:^6.12.3, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -5788,13 +5297,6 @@ __metadata: languageName: node linkType: hard -"any-signal@npm:^4.1.1": - version: 4.1.1 - resolution: "any-signal@npm:4.1.1" - checksum: 10c0/44066b59b5c5c3639147d792486c3fca64f17aba8d4c307a81e2b8d19abf4485a9122efae058f690f0c8af6f677da41968c28b64d91e68b8e535e341b609b674 - languageName: node - linkType: hard - "app-module-path@npm:^2.2.0": version: 2.2.0 resolution: "app-module-path@npm:2.2.0" @@ -5908,6 +5410,15 @@ __metadata: languageName: node linkType: hard +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 + languageName: node + linkType: hard + "asn1js@npm:^3.0.5": version: 3.0.5 resolution: "asn1js@npm:3.0.5" @@ -5919,6 +5430,13 @@ __metadata: languageName: node linkType: hard +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 + languageName: node + linkType: hard + "assertion-error@npm:^2.0.1": version: 2.0.1 resolution: "assertion-error@npm:2.0.1" @@ -5965,6 +5483,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "auto-bind@npm:^5.0.1": version: 5.0.1 resolution: "auto-bind@npm:5.0.1" @@ -5988,6 +5513,20 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + languageName: node + linkType: hard + "babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": version: 7.0.0-beta.0 resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" @@ -6039,13 +5578,6 @@ __metadata: languageName: node linkType: hard -"base-x@npm:^4.0.0": - version: 4.0.0 - resolution: "base-x@npm:4.0.0" - checksum: 10c0/0cb47c94535144ab138f70bb5aa7e6e03049ead88615316b62457f110fc204f2c3baff5c64a1c1b33aeb068d79a68092c08a765c7ccfa133eee1e70e4c6eb903 - languageName: node - linkType: hard - "base64-js@npm:^1.0.2, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -6060,6 +5592,15 @@ __metadata: languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 + languageName: node + linkType: hard + "bl@npm:^4.0.3, bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -6135,13 +5676,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: 10c0/65da78e51e9d7fa5909147f269c54c65ae2e03d1cf797cc3cfbbe49f475578b8160ce4a76c36c1a2ffbff26c74f937d73096c508057491ddf1a6dfd11143f72d - languageName: node - linkType: hard - "browser-readablestream-to-it@npm:^1.0.0": version: 1.0.3 resolution: "browser-readablestream-to-it@npm:1.0.3" @@ -6164,18 +5698,9 @@ __metadata: electron-to-chromium: "npm:^1.5.41" node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.1" - bin: - browserslist: cli.js - checksum: 10c0/d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a - languageName: node - linkType: hard - -"bs58@npm:5.0.0": - version: 5.0.0 - resolution: "bs58@npm:5.0.0" - dependencies: - base-x: "npm:^4.0.0" - checksum: 10c0/0d1b05630b11db48039421b5975cb2636ae0a42c62f770eec257b2e5c7d94cb5f015f440785f3ec50870a6e9b1132b35bd0a17c7223655b22229f24b2a3491d1 + bin: + browserslist: cli.js + checksum: 10c0/d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a languageName: node linkType: hard @@ -6188,13 +5713,6 @@ __metadata: languageName: node linkType: hard -"buffer-es6@npm:^4.9.3": - version: 4.9.3 - resolution: "buffer-es6@npm:4.9.3" - checksum: 10c0/2051c923c2c23fc51ef694cc39c7f3965a5cb827a5bd46bfa51afe6d36a1cee57088a7b3fd2d9ccada104c58a3ff86643d339f5cd7e6b5627ca310638555feb2 - languageName: node - linkType: hard - "buffer@npm:5.6.0": version: 5.6.0 resolution: "buffer@npm:5.6.0" @@ -6234,6 +5752,13 @@ __metadata: languageName: node linkType: hard +"byline@npm:^5.0.0": + version: 5.0.0 + resolution: "byline@npm:5.0.0" + checksum: 10c0/33fb64cd84440b3652a99a68d732c56ef18a748ded495ba38e7756a242fab0d4654b9b8ce269fd0ac14c5f97aa4e3c369613672b280a1f60b559b34223105c85 + languageName: node + linkType: hard + "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -6303,7 +5828,7 @@ __metadata: languageName: node linkType: hard -"callsites@npm:^3.0.0, callsites@npm:^3.1.0": +"callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 @@ -6345,6 +5870,13 @@ __metadata: languageName: node linkType: hard +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 + languageName: node + linkType: hard + "cborg@npm:^4.0.0": version: 4.2.1 resolution: "cborg@npm:4.2.1" @@ -6668,6 +6200,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "commander@npm:^12.0.0, commander@npm:^12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" @@ -6775,6 +6316,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 + languageName: node + linkType: hard + "cosmiconfig@npm:^7.0.1": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" @@ -6875,6 +6423,15 @@ __metadata: languageName: node linkType: hard +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a + languageName: node + linkType: hard + "data-uri-to-buffer@npm:^6.0.2": version: 6.0.2 resolution: "data-uri-to-buffer@npm:6.0.2" @@ -6922,26 +6479,6 @@ __metadata: languageName: node linkType: hard -"datastore-core@npm:^9.0.1": - version: 9.2.9 - resolution: "datastore-core@npm:9.2.9" - dependencies: - "@libp2p/logger": "npm:^4.0.6" - err-code: "npm:^3.0.1" - interface-datastore: "npm:^8.0.0" - interface-store: "npm:^5.0.0" - it-drain: "npm:^3.0.5" - it-filter: "npm:^3.0.4" - it-map: "npm:^3.0.5" - it-merge: "npm:^3.0.3" - it-pipe: "npm:^3.0.1" - it-pushable: "npm:^3.2.3" - it-sort: "npm:^3.0.4" - it-take: "npm:^3.0.4" - checksum: 10c0/cf03367c330dc6a593aa29a18d9bc17d91a955e9ee6ff828b2dc7fe30c8c2b44262b2926f56c80222115828a236646dadc29fdedf9c076ab7ec72c06c55147f1 - languageName: node - linkType: hard - "debounce@npm:^1.2.0": version: 1.2.1 resolution: "debounce@npm:1.2.1" @@ -6970,18 +6507,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 - languageName: node - linkType: hard - "debug@npm:4.3.7, debug@npm:^4.1.0, debug@npm:^4.3.6, debug@npm:^4.3.7": version: 4.3.7 resolution: "debug@npm:4.3.7" @@ -7003,18 +6528,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.2.0": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de - languageName: node - linkType: hard - "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -7052,13 +6565,6 @@ __metadata: languageName: node linkType: hard -"default-import@npm:1.1.5": - version: 1.1.5 - resolution: "default-import@npm:1.1.5" - checksum: 10c0/ee8e3cc53ff0a47a11c686b5f585b81b63c37fa751cdb5a1652d4f55fdd393f0cab8e76881699689ed4624e1d59b86a6b7996b605b9f1150d3f94080c8367d7b - languageName: node - linkType: hard - "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" @@ -7108,10 +6614,10 @@ __metadata: languageName: node linkType: hard -"delay@npm:^6.0.0": - version: 6.0.0 - resolution: "delay@npm:6.0.0" - checksum: 10c0/5175e887512d65b2bfe9e1168b5ce7a488de99c1d0af52cb4f799bb13dd7cb0bbbba8a4f5c500a5b03fb42bec8621d6ab59244bd8dfbe9a2bf7b173f25621a10 +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 languageName: node linkType: hard @@ -7281,16 +6787,6 @@ __metadata: languageName: node linkType: hard -"dns-over-http-resolver@npm:3.0.0": - version: 3.0.0 - resolution: "dns-over-http-resolver@npm:3.0.0" - dependencies: - debug: "npm:^4.3.4" - receptacle: "npm:^1.3.2" - checksum: 10c0/fd65ffa574b76b696fe720a4686793a76d523863c85063910e49ae1ef510399ae3c445f94bf20514403cbc1e65beb140a57053d02de6d658cba05433add3e960 - languageName: node - linkType: hard - "dns-over-http-resolver@npm:^2.1.0": version: 2.1.3 resolution: "dns-over-http-resolver@npm:2.1.3" @@ -7352,6 +6848,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -7985,13 +7491,6 @@ __metadata: languageName: node linkType: hard -"esm@npm:^3.2.25": - version: 3.2.25 - resolution: "esm@npm:3.2.25" - checksum: 10c0/8e60e8075506a7ce28681c30c8f54623fe18a251c364cd481d86719fc77f58aa055b293d80632d9686d5408aaf865ffa434897dc9fd9153c8b3f469fad23f094 - languageName: node - linkType: hard - "espree@npm:^10.0.1": version: 10.0.1 resolution: "espree@npm:10.0.1" @@ -8094,20 +7593,6 @@ __metadata: languageName: node linkType: hard -"event-iterator@npm:^2.0.0": - version: 2.0.0 - resolution: "event-iterator@npm:2.0.0" - checksum: 10c0/fc1ca17a003cc7c2489ab1448f6b7cb2c34924a82de6f8b2faf189af4bc66cd3469ecd9ccdac493233a74dee63df2a753238d60d80a8936b1756bd78863bfe74 - languageName: node - linkType: hard - -"event-lite@npm:^0.1.1": - version: 0.1.3 - resolution: "event-lite@npm:0.1.3" - checksum: 10c0/68d11a1e9001d713d673866fe07f6c310fa9054fc0a936dd5eacc37a793aa6b3331ddb1d85dbcb88ddbe6b04944566a0f1c5b515118e1ec2e640ffcb30858b3f - languageName: node - linkType: hard - "eventemitter3@npm:^5.0.1": version: 5.0.1 resolution: "eventemitter3@npm:5.0.1" @@ -8168,6 +7653,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + "external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -8186,6 +7678,20 @@ __metadata: languageName: node linkType: hard +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 + languageName: node + linkType: hard + "fast-decode-uri-component@npm:^1.0.1": version: 1.0.1 resolution: "fast-decode-uri-component@npm:1.0.1" @@ -8200,13 +7706,6 @@ __metadata: languageName: node linkType: hard -"fast-extend@npm:1.0.2": - version: 1.0.2 - resolution: "fast-extend@npm:1.0.2" - checksum: 10c0/efc82c5f877f28b8110a862a9cb2ccfb738b76b50aeba26a2cff718e2dfb29382ab42176079f6dc6cf77e5b9c08396bdf03a75f8149a3e721c1673dc58334aa1 - languageName: node - linkType: hard - "fast-fifo@npm:^1.0.0": version: 1.3.2 resolution: "fast-fifo@npm:1.3.2" @@ -8491,6 +7990,13 @@ __metadata: languageName: node linkType: hard +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c + languageName: node + linkType: hard + "form-data-encoder@npm:^2.1.2": version: 2.1.4 resolution: "form-data-encoder@npm:2.1.4" @@ -8498,6 +8004,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -8559,13 +8076,6 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:0.3.3": - version: 0.3.3 - resolution: "fs-monkey@npm:0.3.3" - checksum: 10c0/c01686ecbeaff2d89643510677149543f54c8ddcea5dac0cec0d7f80379f59e9522dfa77d98eddea93344a4688b1414c7cf128143bf32c4b0eef35457ac402a0 - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -8669,13 +8179,6 @@ __metadata: languageName: node linkType: hard -"get-iterator@npm:^2.0.1": - version: 2.0.1 - resolution: "get-iterator@npm:2.0.1" - checksum: 10c0/400d90d39bac5dc137176fc7a48a5d7267f85c1b653e8b14548e0e99f25fad4dab24efc4bca44c7d79d808c6ed3ce2e5779703a2f205fc230a25bb134aa524f7 - languageName: node - linkType: hard - "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.2 resolution: "get-own-enumerable-property-symbols@npm:3.0.2" @@ -8736,6 +8239,15 @@ __metadata: languageName: node linkType: hard +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f + languageName: node + linkType: hard + "git-hooks-list@npm:^3.0.0": version: 3.1.0 resolution: "git-hooks-list@npm:3.1.0" @@ -9015,6 +8527,23 @@ __metadata: languageName: node linkType: hard +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: "npm:^6.12.3" + har-schema: "npm:^2.0.0" + checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -9147,6 +8676,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^1.2.2" + sshpk: "npm:^1.7.0" + checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 + languageName: node + linkType: hard + "http2-wrapper@npm:^2.1.10": version: 2.2.1 resolution: "http2-wrapper@npm:2.2.1" @@ -9195,7 +8735,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.1.8, ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -9365,20 +8905,6 @@ __metadata: languageName: node linkType: hard -"int64-buffer@npm:1.0.1": - version: 1.0.1 - resolution: "int64-buffer@npm:1.0.1" - checksum: 10c0/8226f1cb1c1c80ab54bc1a21cac786cfe7869b80043509204122c32f95a23f9556b62e265fa43cd5450424b788a2cd4ccc72e29d7e74dc10a83d71b500dc4ffd - languageName: node - linkType: hard - -"int64-buffer@npm:^0.1.9": - version: 0.1.10 - resolution: "int64-buffer@npm:0.1.10" - checksum: 10c0/22688f6d1f4db11eaacbf8e7f0b80a23690c29d023987302c367f8c071a53b84fa1cef6f8db0a347e9326f94ff76aa3529e8e9964e99d37fc675f5dcd835ee50 - languageName: node - linkType: hard - "interface-datastore@npm:^7.0.0": version: 7.0.4 resolution: "interface-datastore@npm:7.0.4" @@ -9390,16 +8916,6 @@ __metadata: languageName: node linkType: hard -"interface-datastore@npm:^8.0.0, interface-datastore@npm:^8.2.11": - version: 8.3.1 - resolution: "interface-datastore@npm:8.3.1" - dependencies: - interface-store: "npm:^6.0.0" - uint8arrays: "npm:^5.1.0" - checksum: 10c0/7b7fbe94fe00ed8a69e2197a0b58fa7db733d7a7110dfaa259fc19c9cb1761402a9f31063d4d87676e4d2213ed94b06d3f2b9dd65bc727e89bd0dbfbc17882a1 - languageName: node - linkType: hard - "interface-datastore@npm:^8.2.0": version: 8.2.11 resolution: "interface-datastore@npm:8.2.11" @@ -9424,13 +8940,6 @@ __metadata: languageName: node linkType: hard -"interface-store@npm:^6.0.0": - version: 6.0.2 - resolution: "interface-store@npm:6.0.2" - checksum: 10c0/26650c98c411fcf5dfeec76d4433f9ca594c2d27cc7afb285b618132d512b62d684471054b2fb4e687b477ab36f1ca21fd81caad404925502a4a54160a7158c4 - languageName: node - linkType: hard - "internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" @@ -9468,13 +8977,6 @@ __metadata: languageName: node linkType: hard -"ip-regex@npm:^5.0.0": - version: 5.0.0 - resolution: "ip-regex@npm:5.0.0" - checksum: 10c0/23f07cf393436627b3a91f7121eee5bc831522d07c95ddd13f5a6f7757698b08551480f12e5dbb3bf248724da135d54405c9687733dba7314f74efae593bdf06 - languageName: node - linkType: hard - "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -9482,13 +8984,6 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:^2.1.0": - version: 2.2.0 - resolution: "ipaddr.js@npm:2.2.0" - checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 - languageName: node - linkType: hard - "ipfs-core-types@npm:^0.14.1": version: 0.14.1 resolution: "ipfs-core-types@npm:0.14.1" @@ -9783,13 +9278,6 @@ __metadata: languageName: node linkType: hard -"is-loopback-addr@npm:^2.0.1, is-loopback-addr@npm:^2.0.2": - version: 2.0.2 - resolution: "is-loopback-addr@npm:2.0.2" - checksum: 10c0/574ce2f8f9c9f4543295a6e1979c4f9dcc96e353c48e8bcd4f1089b05a88ad9e87e3e6131c977fcd1dab0a775d8bf9e456284dda119317b9b901cd7d6a995494 - languageName: node - linkType: hard - "is-lower-case@npm:^2.0.2": version: 2.0.2 resolution: "is-lower-case@npm:2.0.2" @@ -9836,13 +9324,6 @@ __metadata: languageName: node linkType: hard -"is-observable@npm:^2.1.0": - version: 2.1.0 - resolution: "is-observable@npm:2.1.0" - checksum: 10c0/f6ae9e136f66ad59c4faa4661112c389b398461cdeb0ef5bc3c505989469b77b2ba4602e2abc54a635d65f616eec9b5a40cd7d2c1f96b2cc4748b56635eba1c6 - languageName: node - linkType: hard - "is-plain-obj@npm:^2.1.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" @@ -9933,6 +9414,13 @@ __metadata: languageName: node linkType: hard +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + "is-unc-path@npm:^1.0.0": version: 1.0.0 resolution: "is-unc-path@npm:1.0.0" @@ -10006,13 +9494,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:^1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -10050,6 +9531,13 @@ __metadata: languageName: node linkType: hard +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f + languageName: node + linkType: hard + "it-all@npm:^1.0.4": version: 1.0.6 resolution: "it-all@npm:1.0.6" @@ -10064,40 +9552,6 @@ __metadata: languageName: node linkType: hard -"it-all@npm:^3.0.0, it-all@npm:^3.0.6": - version: 3.0.6 - resolution: "it-all@npm:3.0.6" - checksum: 10c0/b615dcbc8dcda46f192a19f8ffeb526054e325d0301a1434ad821bcb71d102c6b3ff61a658f9b92091b14e5e53803ddec92669a5ae82f1afd2f4aeb34fceb517 - languageName: node - linkType: hard - -"it-byte-stream@npm:^1.0.0": - version: 1.1.0 - resolution: "it-byte-stream@npm:1.1.0" - dependencies: - it-queueless-pushable: "npm:^1.0.0" - it-stream-types: "npm:^2.0.1" - uint8arraylist: "npm:^2.4.8" - checksum: 10c0/df7e7bd26d726b91306a7181c1880e18cc21c43df843d279522923ef4cd080b0b91a4d0bd4eb929b6d597392402ce9c3fceebae31f429dee8a4b84b30c519fc8 - languageName: node - linkType: hard - -"it-drain@npm:^3.0.5": - version: 3.0.7 - resolution: "it-drain@npm:3.0.7" - checksum: 10c0/d5f59a48060bcceabbc8122cd9d8e48de5725f60556ca7e3336917b9b0a5aaedfca986a9125d223b33a2b09971bf95027c03dc8bdc8b502af0e8566bc3c48b93 - languageName: node - linkType: hard - -"it-filter@npm:^3.0.4": - version: 3.1.1 - resolution: "it-filter@npm:3.1.1" - dependencies: - it-peekable: "npm:^3.0.0" - checksum: 10c0/810288d93c16423f87fe04b8e5773e101382260cad8056023817262454b7e0efbc87b3158a17c23420d61d3e4b7c81e263fd34d4971ea3189a5cb670f764796f - languageName: node - linkType: hard - "it-first@npm:^2.0.0": version: 2.0.1 resolution: "it-first@npm:2.0.1" @@ -10105,22 +9559,6 @@ __metadata: languageName: node linkType: hard -"it-first@npm:^3.0.3": - version: 3.0.6 - resolution: "it-first@npm:3.0.6" - checksum: 10c0/c2a57a341e0862c947bc7ae430d32a8c1e764bd1f66a299fa1840c2ddc3bddd1bc61d05f03d0a157a6f07cc117227d40ba835826b2486774bac289ec2cf94c50 - languageName: node - linkType: hard - -"it-foreach@npm:^2.0.3": - version: 2.1.1 - resolution: "it-foreach@npm:2.1.1" - dependencies: - it-peekable: "npm:^3.0.0" - checksum: 10c0/93f90f7a8a474b747c7ba4c701363bdb9427329aaac6c5657d24d9d89dd8bddd1ca2590807129bb60184982da2e70fd4120fd8752578ecd722eb31ba83c66d0f - languageName: node - linkType: hard - "it-glob@npm:^1.0.1": version: 1.0.2 resolution: "it-glob@npm:1.0.2" @@ -10138,95 +9576,10 @@ __metadata: languageName: node linkType: hard -"it-length-prefixed-stream@npm:^1.0.0, it-length-prefixed-stream@npm:^1.1.7": - version: 1.2.0 - resolution: "it-length-prefixed-stream@npm:1.2.0" - dependencies: - it-byte-stream: "npm:^1.0.0" - it-stream-types: "npm:^2.0.1" - uint8-varint: "npm:^2.0.4" - uint8arraylist: "npm:^2.4.8" - checksum: 10c0/093644881c73ab76b4074c65605f25b22892d1267fa9a2ec8c2a4731f4e51d86b54be0a6e2bc9772b81cc7c3f2f3d705695304fe33eeac32849076bdebb46829 - languageName: node - linkType: hard - -"it-length-prefixed@npm:9.0.3": - version: 9.0.3 - resolution: "it-length-prefixed@npm:9.0.3" - dependencies: - err-code: "npm:^3.0.1" - it-reader: "npm:^6.0.1" - it-stream-types: "npm:^2.0.1" - uint8-varint: "npm:^2.0.1" - uint8arraylist: "npm:^2.0.0" - uint8arrays: "npm:^4.0.2" - checksum: 10c0/7a752adc1083215ee3a2b5941ba1eaadd0d998867a032baf8552120436e712dc0a659809509c5a44a398b698aa8c8a58b21183ac1cd9e7bb292a775a2d0ee7d7 - languageName: node - linkType: hard - -"it-length-prefixed@npm:^9.0.1, it-length-prefixed@npm:^9.0.4": - version: 9.1.0 - resolution: "it-length-prefixed@npm:9.1.0" - dependencies: - it-reader: "npm:^6.0.1" - it-stream-types: "npm:^2.0.1" - uint8-varint: "npm:^2.0.1" - uint8arraylist: "npm:^2.0.0" - uint8arrays: "npm:^5.0.1" - checksum: 10c0/4a64c51a14a50e65e502dc65aafc1f867c08aad0e7a82f8e0245c378e1484287d0d0f8ae73b451f96f8221f32c6b9db5f93f88f6be3ef992de23d92d0dc7a9ea - languageName: node - linkType: hard - -"it-map@npm:3.0.5": - version: 3.0.5 - resolution: "it-map@npm:3.0.5" - dependencies: - it-peekable: "npm:^3.0.0" - checksum: 10c0/6b90658587a1f44e2214052852d65a94ee62dd60175af3e9d8a8fbbb5a0360a57989f503fe8e659b82962acbb1a324251aefdc0153aa66998a7a9ced117ec6f3 - languageName: node - linkType: hard - "it-map@npm:^2.0.0": version: 2.0.1 resolution: "it-map@npm:2.0.1" - checksum: 10c0/d03d27dd11b76acb30392d394b1f5254cd98963cb8c4f8303899f66046149d3393afaa5e72040ed37802af4e162d3fe19a9059a503767001f1413058f8a1afd9 - languageName: node - linkType: hard - -"it-map@npm:^3.0.5": - version: 3.1.1 - resolution: "it-map@npm:3.1.1" - dependencies: - it-peekable: "npm:^3.0.0" - checksum: 10c0/d18f8a71dee320e38efde0d8787011e1213e4261bb3161541a2a0915ded5b0950d5ac09d6b81aa56c408ea727be8096cd84502e40810f81e6acbf3af2c970a65 - languageName: node - linkType: hard - -"it-merge@npm:^3.0.0, it-merge@npm:^3.0.3": - version: 3.0.5 - resolution: "it-merge@npm:3.0.5" - dependencies: - it-pushable: "npm:^3.2.3" - checksum: 10c0/3c8ac84f440571b6679b88d5d8bb90468cd449706b02cb2dce264bee5eec334cddfa546f9a68b14461cdda1d0bdd53663bb40b1dba26164e79700cc78388ae52 - languageName: node - linkType: hard - -"it-pair@npm:^2.0.6": - version: 2.0.6 - resolution: "it-pair@npm:2.0.6" - dependencies: - it-stream-types: "npm:^2.0.1" - p-defer: "npm:^4.0.0" - checksum: 10c0/211ebcef17d9853763c1762171a194132ceeb3afe2bee11fa71d98cd98d25fac2af50968e4a0c21a76f898191819bf0f4f951dd0cb0cbdf2b1fadf8a6185d8c1 - languageName: node - linkType: hard - -"it-parallel@npm:^3.0.6": - version: 3.0.8 - resolution: "it-parallel@npm:3.0.8" - dependencies: - p-defer: "npm:^4.0.1" - checksum: 10c0/b0fc9d042058e644ebf40044cb7f7f71133c994caa76af87087453cee4bdb608f4e6200966adb9d1af6fb674118e6c9d1ebf5fdd616b918e69b8fe8b026b744f + checksum: 10c0/d03d27dd11b76acb30392d394b1f5254cd98963cb8c4f8303899f66046149d3393afaa5e72040ed37802af4e162d3fe19a9059a503767001f1413058f8a1afd9 languageName: node linkType: hard @@ -10237,36 +9590,7 @@ __metadata: languageName: node linkType: hard -"it-peekable@npm:^3.0.0": - version: 3.0.5 - resolution: "it-peekable@npm:3.0.5" - checksum: 10c0/6c220b65f73c3e776ba4a457054b91258f81ad68cfc7c56f7f93489361ba3bd1156aeb1f981d40d842d9b736f3eedb42d229a877f13af8292f196569fefdc9c7 - languageName: node - linkType: hard - -"it-pipe@npm:3.0.1, it-pipe@npm:^3.0.1": - version: 3.0.1 - resolution: "it-pipe@npm:3.0.1" - dependencies: - it-merge: "npm:^3.0.0" - it-pushable: "npm:^3.1.2" - it-stream-types: "npm:^2.0.1" - checksum: 10c0/342b7dec98fb3a7247f576091cbf3c3b121eb32ceb0480ca39b5a757f56658aba852d35d78a59472ce3d6502af1b6b43a19b2311134f67800404d74da7cf4e43 - languageName: node - linkType: hard - -"it-protobuf-stream@npm:^1.1.1": - version: 1.1.5 - resolution: "it-protobuf-stream@npm:1.1.5" - dependencies: - it-length-prefixed-stream: "npm:^1.0.0" - it-stream-types: "npm:^2.0.1" - uint8arraylist: "npm:^2.4.8" - checksum: 10c0/4d21b82fd287797edcb8caf94dd91cffe568084799d82f8cccd1030cc3102cab8f911658aa37d154759b2866036f37e15530a8be1e1551d04af7b28e2f9eec5a - languageName: node - linkType: hard - -"it-pushable@npm:^3.0.0, it-pushable@npm:^3.1.2, it-pushable@npm:^3.2.0, it-pushable@npm:^3.2.3": +"it-pushable@npm:^3.0.0, it-pushable@npm:^3.2.3": version: 3.2.3 resolution: "it-pushable@npm:3.2.3" dependencies: @@ -10275,35 +9599,6 @@ __metadata: languageName: node linkType: hard -"it-queueless-pushable@npm:^1.0.0": - version: 1.0.0 - resolution: "it-queueless-pushable@npm:1.0.0" - dependencies: - p-defer: "npm:^4.0.1" - race-signal: "npm:^1.0.2" - checksum: 10c0/93d7601515f32c01cc9ca0f77addcda57e3524516747716a0101e54f44d6cad5037bc9f7005f21837822fb154e47868f19f9c89dcc3e8fd255d72455a0b95e73 - languageName: node - linkType: hard - -"it-reader@npm:^6.0.1": - version: 6.0.4 - resolution: "it-reader@npm:6.0.4" - dependencies: - it-stream-types: "npm:^2.0.1" - uint8arraylist: "npm:^2.0.0" - checksum: 10c0/7c87be7df0d573fa2fc3bd29ec7b5c34e3ec722bb65d7f19a25c52f3bfd2e0170073850f2ebde2c8b48156c4fd9cc684583f63ca601c6dad53c31859f6b1c275 - languageName: node - linkType: hard - -"it-sort@npm:^3.0.4": - version: 3.0.6 - resolution: "it-sort@npm:3.0.6" - dependencies: - it-all: "npm:^3.0.0" - checksum: 10c0/3bae0be054858c9bb75d258d505f3f166dc32b46c0e1db0cc98a05ea29e9804f55ca56b1a94e82b2ab61b4d74cd4d06654448ff54f49801fa13faeb5a11fe4da - languageName: node - linkType: hard - "it-stream-types@npm:^1.0.4": version: 1.0.5 resolution: "it-stream-types@npm:1.0.5" @@ -10318,13 +9613,6 @@ __metadata: languageName: node linkType: hard -"it-take@npm:^3.0.4": - version: 3.0.6 - resolution: "it-take@npm:3.0.6" - checksum: 10c0/8fca59578e93700067b785a53303ba2ad10df7f5b4c3fc4929b1f9d9052365d0f8fe4050089b47e50aed67cafd714e295aea9c51797659b43ded13be90f030e1 - languageName: node - linkType: hard - "it-to-stream@npm:^1.0.0": version: 1.0.0 resolution: "it-to-stream@npm:1.0.0" @@ -10339,19 +9627,6 @@ __metadata: languageName: node linkType: hard -"it-ws@npm:^6.1.0": - version: 6.1.5 - resolution: "it-ws@npm:6.1.5" - dependencies: - "@types/ws": "npm:^8.2.2" - event-iterator: "npm:^2.0.0" - it-stream-types: "npm:^2.0.1" - uint8arrays: "npm:^5.0.0" - ws: "npm:^8.4.0" - checksum: 10c0/3bb97cda258adb64f79ea1c7ddc5f0d6c3d73d979f7a4a3a02894957661aec1e5d8749564ee103de821143779268c5e3494223f20466bfed2e3734753401966f - languageName: node - linkType: hard - "jackspeak@npm:^3.1.2": version: 3.4.0 resolution: "jackspeak@npm:3.4.0" @@ -10397,20 +9672,13 @@ __metadata: languageName: node linkType: hard -"jose@npm:^5.0.0": +"jose@npm:^5.0.0, jose@npm:^5.9.6": version: 5.9.6 resolution: "jose@npm:5.9.6" checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d languageName: node linkType: hard -"js-base64@npm:3.7.5": - version: 3.7.5 - resolution: "js-base64@npm:3.7.5" - checksum: 10c0/641f4979fc5cf90b897e265a158dfcbef483219c76bc9a755875cb03ff73efdb1bd468a42e0343e05a3af7226f9d333c08ee4bb10f42a4c526988845ce1dcf1b - languageName: node - linkType: hard - "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -10436,6 +9704,20 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 + languageName: node + linkType: hard + +"jsep@npm:^1.4.0": + version: 1.4.0 + resolution: "jsep@npm:1.4.0" + checksum: 10c0/fe60adf47e050e22eadced42514a51a15a3cf0e2d147896584486acd8ee670fc16641101b9aeb81f4aaba382043d29744b7aac41171e8106515b14f27e0c7116 + languageName: node + linkType: hard + "jsesc@npm:^3.0.2": version: 3.0.2 resolution: "jsesc@npm:3.0.2" @@ -10480,6 +9762,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -10487,6 +9776,13 @@ __metadata: languageName: node linkType: hard +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + "json-to-pretty-yaml@npm:^1.2.2": version: 1.2.2 resolution: "json-to-pretty-yaml@npm:1.2.2" @@ -10542,6 +9838,32 @@ __metadata: languageName: node linkType: hard +"jsonpath-plus@npm:^10.2.0": + version: 10.2.0 + resolution: "jsonpath-plus@npm:10.2.0" + dependencies: + "@jsep-plugin/assignment": "npm:^1.3.0" + "@jsep-plugin/regex": "npm:^1.0.4" + jsep: "npm:^1.4.0" + bin: + jsonpath: bin/jsonpath-cli.js + jsonpath-plus: bin/jsonpath-cli.js + checksum: 10c0/46480781a0a0b5347dc592fd69ef7ff0fa5a5e322a3f1f23997319e77ee937762366d722facafcc5e8d16101e9cdf1ae14df1f1777b2933990aadd0cdb20d8f5 + languageName: node + linkType: hard + +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af + languageName: node + linkType: hard + "keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -10561,34 +9883,6 @@ __metadata: languageName: node linkType: hard -"libp2p@npm:1.2.0": - version: 1.2.0 - resolution: "libp2p@npm:1.2.0" - dependencies: - "@libp2p/crypto": "npm:^4.0.1" - "@libp2p/interface": "npm:^1.1.2" - "@libp2p/interface-internal": "npm:^1.0.7" - "@libp2p/logger": "npm:^4.0.5" - "@libp2p/multistream-select": "npm:^5.1.2" - "@libp2p/peer-collections": "npm:^5.1.5" - "@libp2p/peer-id": "npm:^4.0.5" - "@libp2p/peer-id-factory": "npm:^4.0.5" - "@libp2p/peer-store": "npm:^10.0.7" - "@libp2p/utils": "npm:^5.2.2" - "@multiformats/multiaddr": "npm:^12.1.10" - any-signal: "npm:^4.1.1" - datastore-core: "npm:^9.0.1" - interface-datastore: "npm:^8.2.0" - it-merge: "npm:^3.0.0" - it-parallel: "npm:^3.0.6" - merge-options: "npm:^3.0.4" - multiformats: "npm:^13.0.0" - private-ip: "npm:^3.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10c0/0eab8dbe1c50265d853b974c5affcf4f287dd7e71792725b7e33c3319684237b09216871f6e5691ce654a84b14ce7e06c889613d2ed0986cfea0531ff8bb0dc7 - languageName: node - linkType: hard - "lilconfig@npm:^3.1.2": version: 3.1.2 resolution: "lilconfig@npm:3.1.2" @@ -10835,16 +10129,6 @@ __metadata: languageName: node linkType: hard -"memfs@npm:3.0.4": - version: 3.0.4 - resolution: "memfs@npm:3.0.4" - dependencies: - fast-extend: "npm:1.0.2" - fs-monkey: "npm:0.3.3" - checksum: 10c0/06184359c243d6e1a616bdd60637b3de07a7a6f75377d47ccae7385295a99d7f4061d541786f64838e968daa80df802acd582b97c7e5976769ddf17c5527c1dd - languageName: node - linkType: hard - "merge-descriptors@npm:1.0.3": version: 1.0.3 resolution: "merge-descriptors@npm:1.0.3" @@ -10914,7 +10198,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -11148,17 +10432,6 @@ __metadata: languageName: node linkType: hard -"mortice@npm:^3.0.4": - version: 3.0.6 - resolution: "mortice@npm:3.0.6" - dependencies: - observable-webworkers: "npm:^2.0.1" - p-queue: "npm:^8.0.1" - p-timeout: "npm:^6.0.0" - checksum: 10c0/4fbacc709193e0a365c34b8022e8337575efa60f349eb4d1d4409b11291140101fdfb753b4ae6a061cffa8795ec420e9d02e3328e22db90b119d9a5c97d34231 - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -11180,44 +10453,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:^3.0.0-canary.1": - version: 3.0.0-canary.1 - resolution: "ms@npm:3.0.0-canary.1" - checksum: 10c0/81040c55778c01b6cb8fd35aee71465b765a8ab5daa2f8d46a59f9fde0f86c668483232c82c9e8fb7d9379a3671b3bdd5f34b38e54dcedb608d791d149bb2815 - languageName: node - linkType: hard - -"msgpack-lite@npm:^0.1.26": - version: 0.1.26 - resolution: "msgpack-lite@npm:0.1.26" - dependencies: - event-lite: "npm:^0.1.1" - ieee754: "npm:^1.1.8" - int64-buffer: "npm:^0.1.9" - isarray: "npm:^1.0.0" - bin: - msgpack: ./bin/msgpack - checksum: 10c0/ba571dca7d789fa033523b74c1aae52bbd023834bcad3f397f481889a8df6cdb6b163b73307be8b744c420ce6d3c0e697f588bb96984c04f9dcf09370b9f12d4 - languageName: node - linkType: hard - -"multicodec@npm:^3.2.1": - version: 3.2.1 - resolution: "multicodec@npm:3.2.1" - dependencies: - uint8arrays: "npm:^3.0.0" - varint: "npm:^6.0.0" - checksum: 10c0/3ab585bfebc472057b6cdd50c4bdf3c2eae1d92bdb63b865eeb3963908c15f038b5778cd2a7db6530f56f47efec10aa075200cf7251c29f517d7a82ee8303c6a - languageName: node - linkType: hard - -"multiformats@npm:11.0.1": - version: 11.0.1 - resolution: "multiformats@npm:11.0.1" - checksum: 10c0/a99a5c66c684c82e26511a726988acd6f714159c4d9dcabdedf0a718fede13b1764f14dc801d089998972da5e03c5017f0ba90d9f96241b0564c4fa22f803087 - languageName: node - linkType: hard - "multiformats@npm:13.3.0": version: 13.3.0 resolution: "multiformats@npm:13.3.0" @@ -11246,20 +10481,6 @@ __metadata: languageName: node linkType: hard -"multiformats@npm:^9.4.2": - version: 9.9.0 - resolution: "multiformats@npm:9.9.0" - checksum: 10c0/1fdb34fd2fb085142665e8bd402570659b50a5fae5994027e1df3add9e1ce1283ed1e0c2584a5c63ac0a58e871b8ee9665c4a99ca36ce71032617449d48aa975 - languageName: node - linkType: hard - -"murmurhash3js-revisited@npm:^3.0.0": - version: 3.0.0 - resolution: "murmurhash3js-revisited@npm:3.0.0" - checksum: 10c0/53e14df6b123f1ff402952eaf51caa5e803316fbaa176b13cc522efa1d5261156319f0d2d87ba9f67dbc9b4e00f72296b975e1b92643faf88b8a8a8725a58e5f - languageName: node - linkType: hard - "mute-stream@npm:0.0.8": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" @@ -11362,13 +10583,6 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1.1.0": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 10c0/e882819b251a4321f9fc1d67c85d1501d3004b4ee889af822fd07f64de3d1a8e272ff00b689570af0465d65d6bf5074df9c76e900e0aff23e60b847f2a46fbe8 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 10.1.0 resolution: "node-gyp@npm:10.1.0" @@ -11467,6 +10681,20 @@ __metadata: languageName: node linkType: hard +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 + languageName: node + linkType: hard + +"oauth4webapi@npm:^3.1.4": + version: 3.1.4 + resolution: "oauth4webapi@npm:3.1.4" + checksum: 10c0/81e471750f4903121efcef4edb1b73d725ae6d3b9646a0febd45e29ed05b62faba14a69e433181eae441913684a02d681c4e561dcac578de9cb45dd719f53464 + languageName: node + linkType: hard + "object-assign@npm:^4.1.0": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -11541,20 +10769,6 @@ __metadata: languageName: node linkType: hard -"observable-fns@npm:0.6.1, observable-fns@npm:^0.6.1": - version: 0.6.1 - resolution: "observable-fns@npm:0.6.1" - checksum: 10c0/bf25d5b3e4040233e886800c48b347361d9c7a1179f345590e671c2dd5ea9b4447bd5037f8ed40b2bb6fd7e205f0c5450eff15f48efdf91b3dec027007cf2834 - languageName: node - linkType: hard - -"observable-webworkers@npm:^2.0.1": - version: 2.0.1 - resolution: "observable-webworkers@npm:2.0.1" - checksum: 10c0/fc7607392aa38320f43278a5e17bbcdfe2c7fb8796ddb5b2836184856663a7af2d611fdaf8db7897e4fe2b436e620c6865d40feb4fc715391ae2cb3977fbf235 - languageName: node - linkType: hard - "oclif@npm:4.15.9": version: 4.15.9 resolution: "oclif@npm:4.15.9" @@ -11684,6 +10898,16 @@ __metadata: languageName: node linkType: hard +"openid-client@npm:^6.1.3": + version: 6.1.7 + resolution: "openid-client@npm:6.1.7" + dependencies: + jose: "npm:^5.9.6" + oauth4webapi: "npm:^3.1.4" + checksum: 10c0/195d26897bf6eb95cfd5b9e91e8bcac46c56b0570713cef6f74b78f9d3a23df0869b2f26e7d78ae6d511e8f3b50f33298aa1bdc7bc32a46d41ca7d4ea10df460 + languageName: node + linkType: hard + "oppa@npm:^0.4.0": version: 0.4.0 resolution: "oppa@npm:0.4.0" @@ -11759,7 +10983,7 @@ __metadata: languageName: node linkType: hard -"p-defer@npm:^4.0.0, p-defer@npm:^4.0.1": +"p-defer@npm:^4.0.0": version: 4.0.1 resolution: "p-defer@npm:4.0.1" checksum: 10c0/592f5bd32f8c6a57f892b00976e5272b3bbbd792b503f4cf3bc22094d08d7a973413c59c15deccff4759d860b38467a08b5b3363e865da6f00f44a031777118c @@ -11831,13 +11055,6 @@ __metadata: languageName: node linkType: hard -"p-timeout@npm:^6.0.0": - version: 6.1.3 - resolution: "p-timeout@npm:6.1.3" - checksum: 10c0/6dcd1efc1a18afac08dd4f8e09797bbe635110e597d27026b478f884b867616871499427643a6b2e11f0404b2936d17db69da2b5e58d5fe99e1fac80a53f0250 - languageName: node - linkType: hard - "p-timeout@npm:^6.1.2": version: 6.1.2 resolution: "p-timeout@npm:6.1.2" @@ -11889,13 +11106,6 @@ __metadata: languageName: node linkType: hard -"pako@npm:^1.0.11": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 10c0/86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe - languageName: node - linkType: hard - "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -11986,7 +11196,7 @@ __metadata: languageName: node linkType: hard -"path-browserify@npm:^1.0.0, path-browserify@npm:^1.0.1": +"path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 @@ -12092,6 +11302,13 @@ __metadata: languageName: node linkType: hard +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.1 resolution: "picocolors@npm:1.0.1" @@ -12210,18 +11427,6 @@ __metadata: languageName: node linkType: hard -"private-ip@npm:^3.0.1": - version: 3.0.2 - resolution: "private-ip@npm:3.0.2" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - ip-regex: "npm:^5.0.0" - ipaddr.js: "npm:^2.1.0" - netmask: "npm:^2.0.2" - checksum: 10c0/7c3f8d4ccc5b18f0d48119faa70b5e2793f0ab4f9469a654c12a78d341b189e8fd315ba3670cfb1d698849b7753c243bb14cf08708495e907bcd9173090e5908 - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -12345,6 +11550,15 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.28": + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -12355,7 +11569,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -12387,6 +11601,13 @@ __metadata: languageName: node linkType: hard +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12408,39 +11629,6 @@ __metadata: languageName: node linkType: hard -"race-event@npm:^1.1.0, race-event@npm:^1.3.0": - version: 1.3.0 - resolution: "race-event@npm:1.3.0" - checksum: 10c0/ec7cb815ac5b4714eea59c2831e951f1d43e1c7ec34f9aadf1a4a941f460bb7721f23aa82e61fc96efb3049bbcfc11df9b4db82408f80a1be46c3564205aacab - languageName: node - linkType: hard - -"race-signal@npm:^1.0.2": - version: 1.1.0 - resolution: "race-signal@npm:1.1.0" - checksum: 10c0/b640d5ee8769044b5a5155fad993b03a19b68f26c627d1af77c21caf71f12563187f8e8ac36523ee88627d8efeefede011657c40f4bc4ac7f563a7339187ee4c - languageName: node - linkType: hard - -"randombytes@npm:^2.0.5": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: "npm:^5.1.0" - checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 - languageName: node - linkType: hard - -"randomfill@npm:^1.0.4": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: "npm:^2.0.5" - safe-buffer: "npm:^5.1.0" - checksum: 10c0/11aeed35515872e8f8a2edec306734e6b74c39c46653607f03c68385ab8030e2adcc4215f76b5e4598e028c4750d820afd5c65202527d831d2a5f207fe2bc87c - languageName: node - linkType: hard - "range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -12618,6 +11806,34 @@ __metadata: languageName: node linkType: hard +"request@npm:^2.88.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~2.3.2" + har-validator: "npm:~5.1.3" + http-signature: "npm:~1.2.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + oauth-sign: "npm:~0.9.0" + performance-now: "npm:^2.1.0" + qs: "npm:~6.5.2" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:~2.5.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^3.3.2" + checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -12784,6 +12000,13 @@ __metadata: languageName: node linkType: hard +"rfc4648@npm:^1.3.0": + version: 1.5.4 + resolution: "rfc4648@npm:1.5.4" + checksum: 10c0/8683e82ed9c3cb23844720d04eaeee12025146bfdfdf250b1cce80d56e16c6431530ba3033cbb0e7ca3a25223107847f14c6cac11a255ea7d219dc7ba11cd43d + languageName: node + linkType: hard + "rfdc@npm:^1.3.0": version: 1.4.1 resolution: "rfdc@npm:1.4.1" @@ -12888,15 +12111,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.5.5": - version: 7.5.5 - resolution: "rxjs@npm:7.5.5" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/bc84ba51aa1fffb03a2622a406d8a5d5074a543054a60a813302e39b6d3cb485d6738c4aad567e8f2f0c58839a3c3c272a336487951b44013b99eb731a0453bf - languageName: node - linkType: hard - "rxjs@npm:^7.2.0, rxjs@npm:^7.5.5, rxjs@npm:^7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" @@ -12918,7 +12132,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -12936,7 +12150,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -13402,6 +12616,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.6 resolution: "ssri@npm:10.0.6" @@ -13451,6 +12686,13 @@ __metadata: languageName: node linkType: hard +"stream-buffers@npm:^3.0.2": + version: 3.0.3 + resolution: "stream-buffers@npm:3.0.3" + checksum: 10c0/d052e6344fba340b27dfbe8d6568f600b7f81fdc57b2659e82c8d58a3ef855a4852c56736b1078a511a7f4458db96ee89b11c42c96d116b9073a99deb29a6f05 + languageName: node + linkType: hard + "stream-to-array@npm:^2.3.0": version: 2.3.0 resolution: "stream-to-array@npm:2.3.0" @@ -13661,13 +12903,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^9.4.0": - version: 9.4.0 - resolution: "supports-color@npm:9.4.0" - checksum: 10c0/6c24e6b2b64c6a60e5248490cfa50de5924da32cf09ae357ad8ebbf305cc5d2717ba705a9d4cb397d80bbf39417e8fdc8d7a0ce18bd0041bf7b5b456229164e4 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -13703,7 +12938,7 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.1.0, tar-stream@npm:^2.1.4": +"tar-stream@npm:^2.1.4": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -13716,7 +12951,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:7.4.3": +"tar@npm:7.4.3, tar@npm:^7.0.0": version: 7.4.3 resolution: "tar@npm:7.4.3" dependencies: @@ -13774,15 +13009,6 @@ __metadata: languageName: node linkType: hard -"tiny-worker@npm:>= 2": - version: 2.3.0 - resolution: "tiny-worker@npm:2.3.0" - dependencies: - esm: "npm:^3.2.25" - checksum: 10c0/3106cace86e673216426a517e96fb72ce642ba79002554e4c6bceb585ba77cf5e5e68b452c752cada6136ae94fdbf11c56943a70de6c6bc6a2a3a9ae439746c9 - languageName: node - linkType: hard - "tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" @@ -13859,6 +13085,16 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: "npm:^1.1.28" + punycode: "npm:^2.1.1" + checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 + languageName: node + linkType: hard + "tr46@npm:^5.0.0": version: 5.0.0 resolution: "tr46@npm:5.0.0" @@ -13990,7 +13226,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.6.3, tslib@npm:^2.8.1": +"tslib@npm:^2.4.1, tslib@npm:^2.6.3, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -14036,6 +13272,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -14184,7 +13427,7 @@ __metadata: languageName: node linkType: hard -"uint8-varint@npm:^2.0.1, uint8-varint@npm:^2.0.2, uint8-varint@npm:^2.0.4": +"uint8-varint@npm:^2.0.1, uint8-varint@npm:^2.0.2": version: 2.0.4 resolution: "uint8-varint@npm:2.0.4" dependencies: @@ -14203,25 +13446,7 @@ __metadata: languageName: node linkType: hard -"uint8arrays@npm:4.0.3": - version: 4.0.3 - resolution: "uint8arrays@npm:4.0.3" - dependencies: - multiformats: "npm:^11.0.0" - checksum: 10c0/46cef39e76db5a0ff636dc5376814d9e9dd36e50f140474e248e1182e106a0cef0409e361de7e4b2fc0eb982a661a2be8eea3e7c43ea4ad69ce4a75df76758ed - languageName: node - linkType: hard - -"uint8arrays@npm:^3.0.0": - version: 3.1.1 - resolution: "uint8arrays@npm:3.1.1" - dependencies: - multiformats: "npm:^9.4.2" - checksum: 10c0/9946668e04f29b46bbb73cca3d190f63a2fbfe5452f8e6551ef4257d9d597b72da48fa895c15ef2ef772808a5335b3305f69da5f13a09f8c2924896b409565ff - languageName: node - linkType: hard - -"uint8arrays@npm:^4.0.2, uint8arrays@npm:^4.0.4": +"uint8arrays@npm:^4.0.2": version: 4.0.10 resolution: "uint8arrays@npm:4.0.10" dependencies: @@ -14398,12 +13623,12 @@ __metadata: languageName: node linkType: hard -"uuid@npm:8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" bin: - uuid: dist/bin/uuid - checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + uuid: ./bin/uuid + checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 languageName: node linkType: hard @@ -14454,6 +13679,17 @@ __metadata: languageName: node linkType: hard +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d + languageName: node + linkType: hard + "vite-node@npm:2.1.3": version: 2.1.3 resolution: "vite-node@npm:2.1.3" @@ -14573,16 +13809,6 @@ __metadata: languageName: node linkType: hard -"weald@npm:^1.0.2": - version: 1.0.4 - resolution: "weald@npm:1.0.4" - dependencies: - ms: "npm:^3.0.0-canary.1" - supports-color: "npm:^9.4.0" - checksum: 10c0/6f705176549ffa9a8b14c589cc72b0a64d8bae3eed154d133d46e429f7156bc809a10416ea804b80acbf5cb108b144b8a1af20d5a22c60d1c283c69a3bd8233d - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -14600,15 +13826,6 @@ __metadata: languageName: node linkType: hard -"wherearewe@npm:^2.0.1": - version: 2.0.1 - resolution: "wherearewe@npm:2.0.1" - dependencies: - is-electron: "npm:^2.2.0" - checksum: 10c0/a6193319688972890597342108b083fe35505ad0501a9c6c56926b6897f478f66d76436951005e24637265df717f81bc70ea511bd684972be5a966310581b872 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -14774,7 +13991,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.12.1, ws@npm:^8.15.0, ws@npm:^8.17.1, ws@npm:^8.4.0": +"ws@npm:^8.15.0, ws@npm:^8.17.1, ws@npm:^8.18.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -14949,10 +14166,3 @@ __metadata: checksum: 10c0/d46ae3a436409e89eb0ea3b8c7624dafaf2c846d9038fdf8aa0cc839f73a2577b679bdc22997596177de74c580a6cdc3206c98fd2acd91b66f85462d9d9d260a languageName: node linkType: hard - -"zod@npm:3.22.4": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 10c0/7578ab283dac0eee66a0ad0fc4a7f28c43e6745aadb3a529f59a4b851aa10872b3890398b3160f257f4b6817b4ce643debdda4fb21a2c040adda7862cab0a587 - languageName: node - linkType: hard