diff --git a/.changeset/eighty-clowns-buy.md b/.changeset/eighty-clowns-buy.md
new file mode 100644
index 00000000..a05e488f
--- /dev/null
+++ b/.changeset/eighty-clowns-buy.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+DEPRECATED: cartesi deploy build
diff --git a/.changeset/flat-ears-explain.md b/.changeset/flat-ears-explain.md
new file mode 100644
index 00000000..242e8359
--- /dev/null
+++ b/.changeset/flat-ears-explain.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": minor
+---
+
+improve doctor command
diff --git a/.changeset/floppy-eggs-rescue.md b/.changeset/floppy-eggs-rescue.md
new file mode 100644
index 00000000..63d3613c
--- /dev/null
+++ b/.changeset/floppy-eggs-rescue.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+new: cartesi rollups deploy
diff --git a/.changeset/huge-jeans-love.md b/.changeset/huge-jeans-love.md
new file mode 100644
index 00000000..f348eabf
--- /dev/null
+++ b/.changeset/huge-jeans-love.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+DEPRECATED: cartesi run
diff --git a/.changeset/kind-mice-help.md b/.changeset/kind-mice-help.md
new file mode 100644
index 00000000..51f34fa6
--- /dev/null
+++ b/.changeset/kind-mice-help.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+new: cartesi rollups stop
diff --git a/.changeset/soft-bats-pump.md b/.changeset/soft-bats-pump.md
new file mode 100644
index 00000000..f94397bf
--- /dev/null
+++ b/.changeset/soft-bats-pump.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+new: cartesi rollups start
diff --git a/.changeset/solid-owls-burn.md b/.changeset/solid-owls-burn.md
new file mode 100644
index 00000000..afd29626
--- /dev/null
+++ b/.changeset/solid-owls-burn.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+new: cartesi rollups status
diff --git a/.changeset/upset-news-ask.md b/.changeset/upset-news-ask.md
new file mode 100644
index 00000000..8458f004
--- /dev/null
+++ b/.changeset/upset-news-ask.md
@@ -0,0 +1,5 @@
+---
+"@cartesi/cli": major
+---
+
+DEPRECATED: cartesi deploy
diff --git a/apps/cli/package.json b/apps/cli/package.json
index c8f519c2..53894783 100644
--- a/apps/cli/package.json
+++ b/apps/cli/package.json
@@ -18,50 +18,50 @@
],
"dependencies": {
"@commander-js/extra-typings": "^13.1.0",
- "@inquirer/confirm": "^5.0.0",
- "@inquirer/core": "^10.0.0",
- "@inquirer/input": "^4.0.0",
- "@inquirer/select": "^4.0.0",
- "@inquirer/type": "^3.0.0",
+ "@inquirer/confirm": "^5.1.6",
+ "@inquirer/core": "^10.1.7",
+ "@inquirer/input": "^4.1.6",
+ "@inquirer/select": "^4.0.9",
+ "@inquirer/type": "^3.0.4",
"bytes": "^3.1.2",
- "chalk": "^5.3.0",
+ "chalk": "^5.4.1",
"cli-table3": "^0.6.5",
"commander": "^13.1.0",
- "execa": "^9.4.1",
- "fs-extra": "^11.2.0",
- "giget": "^1.2.3",
- "lookpath": "^1.2.2",
+ "execa": "^9.5.2",
+ "fs-extra": "^11.3.0",
+ "giget": "^2.0.0",
+ "lookpath": "^1.2.3",
"open": "^10.1.0",
- "ora": "^8.1.0",
+ "ora": "^8.2.0",
"progress-stream": "^2.0.0",
- "semver": "^7.6.3",
- "smol-toml": "^1.3.0",
+ "semver": "^7.7.1",
+ "smol-toml": "^1.3.1",
"tmp": "^0.2.3",
- "viem": "^2.21.27"
+ "viem": "^2.23.6"
},
"devDependencies": {
"@cartesi/devnet": "workspace:*",
"@cartesi/eslint-config": "workspace:*",
"@sunodo/wagmi-plugin-hardhat-deploy": "^0.3.0",
- "@types/bytes": "^3.1.4",
+ "@types/bytes": "^3.1.5",
"@types/fs-extra": "^11.0.4",
"@types/inquirer": "^9.0.7",
- "@types/node": "^22.7.6",
- "@types/node-fetch": "^2.6.11",
+ "@types/node": "^22.13.9",
+ "@types/node-fetch": "^2.6.12",
"@types/progress-stream": "^2.0.5",
"@types/prompts": "^2.4.9",
"@types/semver": "^7.5.8",
"@types/tmp": "^0.2.6",
"@vitest/coverage-istanbul": "^2.1.3",
- "@wagmi/cli": "^2.1.16",
+ "@wagmi/cli": "^2.2.0",
"copyfiles": "^2.4.1",
"eslint": "^8.57.0",
"npm-run-all": "^4.1.5",
"rimraf": "^6.0.1",
"ts-node": "^10.9.2",
"tsconfig": "workspace:*",
- "tslib": "^2.8.0",
- "typescript": "^5.6.3",
+ "tslib": "^2.8.1",
+ "typescript": "^5.8.2",
"vitest": "^2.1.3"
},
"scripts": {
diff --git a/apps/cli/src/base.ts b/apps/cli/src/base.ts
index dfef2eca..54cab2ea 100644
--- a/apps/cli/src/base.ts
+++ b/apps/cli/src/base.ts
@@ -1,8 +1,9 @@
+import { InvalidArgumentError } from "@commander-js/extra-typings";
import chalk from "chalk";
import { execa } from "execa";
import fs from "fs";
import path from "path";
-import { Address, getAddress, Hash, isHash } from "viem";
+import { Address, getAddress, Hash, isAddress, isHash, zeroHash } from "viem";
import { Config, parse } from "./config.js";
import {
applicationFactoryAddress,
@@ -18,6 +19,7 @@ import {
testNftAddress,
testTokenAddress,
} from "./contracts.js";
+import { getApplicationAddress } from "./exec/rollups.js";
import { PsResponse } from "./types/docker.js";
export const getContextPath = (...paths: string[]): string => {
@@ -42,11 +44,6 @@ export const getApplicationConfig = (configPath: string): Config => {
: parse("");
};
-export const getApplicationAddress = async (): Promise
=> {
- // fixed value, as we do deterministic deployment with a zero hash
- return getAddress("0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e");
-};
-
export type AddressBook = Record;
export const getAddressBook = async (): Promise => {
@@ -54,7 +51,6 @@ export const getAddressBook = async (): Promise => {
// build rollups contracts address book
const contracts: AddressBook = {
- Application: applicationAddress,
ApplicationFactory: applicationFactoryAddress,
AuthorityFactory: authorityFactoryAddress,
EntryPointV06: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
@@ -79,6 +75,10 @@ export const getAddressBook = async (): Promise => {
VerifyingPaymasterV07: "0xc5c97885C67F7361aBAfD2B95067a5bBdA603608",
};
+ if (applicationAddress) {
+ contracts.Application = applicationAddress;
+ }
+
return contracts;
};
@@ -109,3 +109,28 @@ export const getServiceState = async (
const ps = stdout ? (JSON.parse(stdout) as PsResponse) : undefined;
return ps?.State;
};
+
+export const parseAddress = (
+ value: string,
+ _previous: Address | undefined,
+): Address | undefined => {
+ if (isAddress(value)) {
+ return getAddress(value);
+ } else {
+ if (value !== "") {
+ throw new InvalidArgumentError(`Invalid address: ${value}`);
+ }
+ return undefined;
+ }
+};
+
+export const parseHash = (value: string, _previous: Hash): Hash => {
+ if (isHash(value)) {
+ return value;
+ } else {
+ if (value !== "") {
+ throw new InvalidArgumentError(`Invalid hash: ${value}`);
+ }
+ return zeroHash;
+ }
+};
diff --git a/apps/cli/src/commands/address-book.ts b/apps/cli/src/commands/address-book.ts
index 609b6a62..cca474df 100755
--- a/apps/cli/src/commands/address-book.ts
+++ b/apps/cli/src/commands/address-book.ts
@@ -2,9 +2,8 @@ import { Command } from "@commander-js/extra-typings";
import Table from "cli-table3";
import { getAddressBook } from "../base.js";
-export const registerAddressBookCommand = (program: Command) => {
- program
- .command("address-book")
+export const createAddressBookCommand = () => {
+ return new Command("address-book")
.description(
"Prints the addresses of all smart contracts deployed to the runtime environment of the application.",
)
diff --git a/apps/cli/src/commands/build.ts b/apps/cli/src/commands/build.ts
index 73c4c106..58a776b5 100755
--- a/apps/cli/src/commands/build.ts
+++ b/apps/cli/src/commands/build.ts
@@ -38,9 +38,8 @@ const buildDrive = async (
}
};
-export const registerBuildCommand = (program: Command) => {
- program
- .command("build")
+export const createBuildCommand = () => {
+ return new Command("build")
.description(
"Build application by building Cartesi machine drives, configuring a machine and booting it.",
)
diff --git a/apps/cli/src/commands/clean.ts b/apps/cli/src/commands/clean.ts
index 7deccfc9..71bd0824 100755
--- a/apps/cli/src/commands/clean.ts
+++ b/apps/cli/src/commands/clean.ts
@@ -2,9 +2,8 @@ import { Command } from "@commander-js/extra-typings";
import fs from "fs-extra";
import { getContextPath } from "../base.js";
-export const registerCleanCommand = (program: Command) => {
- program
- .command("clean")
+export const createCleanCommand = () => {
+ return new Command("clean")
.description("Deletes all cached build artifacts of application.")
.action(async () => {
await fs.emptyDir(getContextPath());
diff --git a/apps/cli/src/commands/create.ts b/apps/cli/src/commands/create.ts
index d3370d48..ce3af435 100755
--- a/apps/cli/src/commands/create.ts
+++ b/apps/cli/src/commands/create.ts
@@ -39,9 +39,8 @@ const download = async (
});
};
-export const registerCreateCommand = (program: Command) => {
- program
- .command("create")
+export const createCreateCommand = () => {
+ return new Command("create")
.argument("", "application and directory name")
.addOption(
new Option("-t, --template ", "template name to use")
diff --git a/apps/cli/src/commands/deploy.ts b/apps/cli/src/commands/deploy.ts
index 9697bbfe..d547b627 100755
--- a/apps/cli/src/commands/deploy.ts
+++ b/apps/cli/src/commands/deploy.ts
@@ -1,97 +1,19 @@
-import { Command, Option } from "@commander-js/extra-typings";
-import confirm from "@inquirer/confirm";
-import select from "@inquirer/select";
+import { Command } from "@commander-js/extra-typings";
import chalk from "chalk";
-import open, { apps } from "open";
-import { getMachineHash, logPrompt } from "../base.js";
-import { registerBuildCommand } from "./deploy/build.js";
+import { createBuildCommand } from "./deploy/build.js";
-export const registerDeployCommand = (program: Command) => {
- const deployCommand = program
- .command("deploy")
+export const createDeployCommand = () => {
+ const command = new Command("deploy")
.description(
- "Package and deploy the application to a supported live network.",
+ "DEPRECATED: Package and deploy the application to a supported live network.",
)
- .addOption(
- new Option("--hosting ", "hosting type").choices([
- "self-hosted",
- "third-party",
- ]),
- )
- .addOption(
- new Option(
- "--webapp ",
- "webapp address",
- ).makeOptionMandatory(),
- )
- .action(async (options, command) => {
- // print machine hash
- const templateHash = getMachineHash();
- if (!templateHash) {
- command.error(
- `Cartesi machine snapshot not found, run 'build'`,
- );
- return;
- }
- logPrompt({
- title: "Cartesi machine templateHash",
- value: templateHash,
- });
-
- // ask for deployment type
- const hosting =
- options.hosting ||
- (await select<"self-hosted" | "third-party">({
- message: "Select hosting type",
- choices: [
- {
- name: "Self-hosting",
- description: `Select this option if you want to run the node for your application.
-You will need the following infrastructure:
-
-- a cloud server for the application node
-- a postgres database
-- a web3 node provider
-- a funded wallet
-`,
- value: "self-hosted",
- },
- {
- name: "Use third-party provider",
- description:
- "Select this option to use a third-party service provider to run a node for your application.",
- value: "third-party",
- disabled: "(coming soon)",
- },
- ],
- }));
-
- let queryString = "";
- switch (hosting) {
- case "self-hosted": {
- // build docker image
- // Execute the build subcommand
- program.commands
- .find((cmd) => cmd.name() === "build")
- ?.parseAsync(program.args);
-
- queryString = `?templateHash=${templateHash}`;
- break;
- }
- case "third-party": {
- command.error(
- "Third-party provider deployment not supported yet",
- );
- }
- }
-
- // prompt user to open webapp for onchain deployment
- const deployUrl = `${options.webapp}${queryString}`;
- if (await confirm({ message: `Open ${chalk.cyan(deployUrl)}?` })) {
- open(deployUrl, { app: { name: apps.chrome } });
- }
-
- return;
+ .action(async () => {
+ console.warn(
+ chalk.yellow(
+ "deploy command is deprecated, use 'rollups deploy' instead",
+ ),
+ );
});
- registerBuildCommand(deployCommand);
+ command.addCommand(createBuildCommand(), { hidden: true });
+ return command;
};
diff --git a/apps/cli/src/commands/deploy/build.ts b/apps/cli/src/commands/deploy/build.ts
index 4c8b2ebe..6c0a413e 100755
--- a/apps/cli/src/commands/deploy/build.ts
+++ b/apps/cli/src/commands/deploy/build.ts
@@ -1,75 +1,12 @@
-import { Command, Option } from "@commander-js/extra-typings";
-import { execa } from "execa";
-import fs from "fs-extra";
-import path from "path";
-import { tmpNameSync } from "tmp";
-import { getContextPath, getMachineHash, logPrompt } from "../../base.js";
+import { Command } from "@commander-js/extra-typings";
+import chalk from "chalk";
-const buildRollupsImage = async (platform?: string) => {
- const buildResult = tmpNameSync();
- const imagePath = getContextPath("image");
- const binPath = path.join(
- path.dirname(new URL(import.meta.url).pathname),
- "..",
- "..",
- );
- const dockerfile = path.join(binPath, "node", "DockerfileDeploy.txt");
- const args = [
- "buildx",
- "build",
- "-f",
- dockerfile,
- "--load",
- "--iidfile",
- buildResult,
- imagePath,
- ];
-
- // optional platform, default to not defining, which will build for the host platform
- if (platform) {
- args.push("--platform", platform);
- }
-
- await execa("docker", args, { stdio: "inherit" });
- return fs.readFileSync(buildResult, "utf8");
-};
-
-export const registerBuildCommand = (program: Command) => {
- program
- .command("build")
+export const createBuildCommand = () => {
+ return new Command("build")
.description(
- "Package the application in a Docker image ready to be deployed.",
+ "DEPRECATED: Package the application in a Docker image ready to be deployed.",
)
- .addOption(
- new Option(
- "--platform ",
- "Docker image target platform",
- ).choices(["linux/amd64", "linux/arm64"]),
- )
- .option("--json", "Format output as json.")
- .action(async ({ platform, json }, command) => {
- // print machine hash
- const templateHash = getMachineHash();
- if (!templateHash) {
- command.error(
- `Cartesi machine snapshot not found, run 'build'`,
- );
- return;
- }
- logPrompt({
- title: "Cartesi machine templateHash",
- value: templateHash,
- });
- console.log("Building application node Docker image...");
-
- const image = await buildRollupsImage(platform);
- logPrompt({
- title: "Application node Docker image",
- value: image,
- });
-
- if (json) {
- process.stdout.write(JSON.stringify({ image }));
- }
+ .action(async () => {
+ console.warn(chalk.yellow("deploy build command is deprecated"));
});
};
diff --git a/apps/cli/src/commands/doctor.ts b/apps/cli/src/commands/doctor.ts
index 6fe64390..f7cb45cb 100755
--- a/apps/cli/src/commands/doctor.ts
+++ b/apps/cli/src/commands/doctor.ts
@@ -1,13 +1,16 @@
import { Command } from "@commander-js/extra-typings";
+import chalk from "chalk";
import { execa } from "execa";
+import ora, { Ora } from "ora";
import semver from "semver";
const MINIMUM_DOCKER_VERSION = "23.0.0"; // Replace with our minimum required Docker version
const MINIMUM_DOCKER_COMPOSE_VERSION = "2.21.0"; // Replace with our minimum required Docker Compose version
const MINIMUM_BUILDX_VERSION = "0.13.0"; // Replace with our minimum required Buildx version
-const checkDocker = async (): Promise => {
+const checkDocker = async (progress: Ora): Promise => {
try {
+ progress.start("Checking Docker Engine version...");
const { stdout: dockerVersion } = await execa("docker", [
"version",
"--format",
@@ -20,6 +23,7 @@ const checkDocker = async (): Promise => {
`Unsupported Docker version. Minimum required version is ${MINIMUM_DOCKER_VERSION}. Installed version is ${v}.`,
);
}
+ progress.succeed(`Docker Engine ${chalk.cyan(v)}`);
} catch (e: unknown) {
if (
e instanceof Error &&
@@ -34,8 +38,9 @@ const checkDocker = async (): Promise => {
return true;
};
-const checkCompose = async (): Promise => {
+const checkCompose = async (progress: Ora): Promise => {
try {
+ progress.start("Checking Docker Compose version...");
const { stdout: dockerComposeVersion } = await execa("docker", [
"compose",
"version",
@@ -48,6 +53,7 @@ const checkCompose = async (): Promise => {
`Unsupported Docker Compose version. Minimum required version is ${MINIMUM_DOCKER_COMPOSE_VERSION}. Installed version is ${v}.`,
);
}
+ progress.succeed(`Docker Compose ${chalk.cyan(dockerComposeVersion)}`);
} catch (e: unknown) {
if (
e instanceof Error &&
@@ -64,8 +70,9 @@ const checkCompose = async (): Promise => {
return true;
};
-const checkBuildx = async (): Promise => {
+const checkBuildx = async (progress: Ora): Promise => {
try {
+ progress.start("Checking Docker Buildx version...");
const { stdout: buildxOutput } = await execa("docker", [
"buildx",
"version",
@@ -77,7 +84,9 @@ const checkBuildx = async (): Promise => {
`Unsupported Docker Buildx version. Minimum required version is ${MINIMUM_BUILDX_VERSION}. Installed version is ${v}.`,
);
}
+ progress.succeed(`Docker Buildx ${chalk.cyan(v)}`);
+ progress.start("Checking Docker RISC-V support...");
const { stdout: platformsOutput } = await execa("docker", [
"buildx",
"ls",
@@ -94,6 +103,9 @@ const checkBuildx = async (): Promise => {
"Your system does not support riscv64 architecture. Run `docker run --privileged --rm tonistiigi/binfmt:riscv` to enable riscv64 support.",
);
}
+ progress.succeed(
+ `Docker RISC-V support ${chalk.cyan("linux/riscv64")}`,
+ );
} catch (e: unknown) {
if (
e instanceof Error &&
@@ -110,17 +122,17 @@ const checkBuildx = async (): Promise => {
return true;
};
-export const registerDoctorCommand = (program: Command) => {
- program.command("doctor").action(async (_, command) => {
+export const createDoctorCommand = () => {
+ return new Command("doctor").action(async () => {
+ const progress = ora();
try {
- if (await checkDocker()) {
- await checkCompose();
- await checkBuildx();
- }
+ await checkDocker(progress);
+ await checkCompose(progress);
+ await checkBuildx(progress);
+ progress.succeed("Your system is ready.");
} catch (e: unknown) {
- command.error((e as Error).message);
+ progress.fail((e as Error).message);
+ process.exit(1);
}
-
- console.log("Your system is ready.");
});
};
diff --git a/apps/cli/src/commands/hash.ts b/apps/cli/src/commands/hash.ts
index cea2b12b..8fd80462 100755
--- a/apps/cli/src/commands/hash.ts
+++ b/apps/cli/src/commands/hash.ts
@@ -2,9 +2,8 @@ import { Command } from "@commander-js/extra-typings";
import chalk from "chalk";
import { getMachineHash } from "../base.js";
-export const registerHashCommand = (program: Command) => {
- program
- .command("hash")
+export const createHashCommand = () => {
+ return new Command("hash")
.description(
"Converts the binary generated by the build command to hexadecimal and prints out the result to console.",
)
diff --git a/apps/cli/src/commands/rollups.ts b/apps/cli/src/commands/rollups.ts
new file mode 100644
index 00000000..2b75be20
--- /dev/null
+++ b/apps/cli/src/commands/rollups.ts
@@ -0,0 +1,26 @@
+import { Command } from "@commander-js/extra-typings";
+import { createDeployCommand } from "./rollups/deploy.js";
+import { createStartCommand } from "./rollups/start.js";
+import { createStatusCommand } from "./rollups/status.js";
+import { createStopCommand } from "./rollups/stop.js";
+
+export const createRollupsCommand = () => {
+ const command = new Command("rollups")
+ .option(
+ "--project-name ",
+ "name of environment",
+ "cartesi-rollups",
+ )
+ .action(async (_options, program) => {
+ program.help();
+ });
+ command.addCommand(createStartCommand());
+ command.addCommand(createStatusCommand());
+ command.addCommand(createStopCommand());
+ command.addCommand(createDeployCommand());
+ return command;
+};
+
+export type RollupsCommandOpts = ReturnType<
+ ReturnType["opts"]
+>;
diff --git a/apps/cli/src/commands/rollups/deploy.ts b/apps/cli/src/commands/rollups/deploy.ts
new file mode 100644
index 00000000..fb89094b
--- /dev/null
+++ b/apps/cli/src/commands/rollups/deploy.ts
@@ -0,0 +1,323 @@
+import { Command, Option } from "@commander-js/extra-typings";
+import input from "@inquirer/input";
+import chalk from "chalk";
+import { execa } from "execa";
+import ora, { Ora } from "ora";
+import { Address, Hash, PublicClient, WalletClient, zeroHash } from "viem";
+import { anvil } from "viem/chains";
+import {
+ getContextPath,
+ getMachineHash,
+ parseAddress,
+ parseHash,
+} from "../../base.js";
+import {
+ applicationFactoryAbi,
+ applicationFactoryAddress,
+ authorityFactoryAbi,
+ authorityFactoryAddress,
+} from "../../contracts.js";
+import { addressInput } from "../../prompts.js";
+import { RollupsCommandOpts } from "../rollups.js";
+import { connect } from "../send.js";
+
+/**
+ * Deploy authority contract (if not already deployed)
+ * @param options
+ * @returns address of the authority
+ */
+const deployAuthority = async (
+ publicClient: PublicClient,
+ walletClient: WalletClient,
+ options: {
+ authorityOwner?: Address;
+ epochLength: number;
+ progress: Ora;
+ salt: Hash;
+ },
+): Promise => {
+ const { epochLength, progress, salt } = options;
+
+ // deploy authority contract (if not already deployed)
+ const authorityOwner =
+ options.authorityOwner ||
+ (await addressInput({
+ message: "Authority Owner",
+ default: walletClient.account?.address,
+ }));
+
+ const authorityAddress = await publicClient.readContract({
+ abi: authorityFactoryAbi,
+ address: authorityFactoryAddress,
+ functionName: "calculateAuthorityAddress",
+ args: [authorityOwner, BigInt(epochLength), salt],
+ });
+
+ // check if authority is already deployed
+ const authorityCode = await publicClient.getCode({
+ address: authorityAddress,
+ });
+ if (authorityCode === undefined) {
+ // deploy authority
+ const { request } = await publicClient.simulateContract({
+ abi: authorityFactoryAbi,
+ address: authorityFactoryAddress,
+ account: walletClient.account,
+ functionName: "newAuthority",
+ args: [authorityOwner, BigInt(epochLength), salt],
+ });
+ progress.start("Deploying authority...");
+ const hash = await walletClient.writeContract(request);
+ await publicClient.waitForTransactionReceipt({ hash });
+ progress.succeed(`Authority ${chalk.cyan(authorityAddress)}`);
+ }
+
+ return authorityAddress;
+};
+
+/**
+ * Deploy application contract
+ * @param options
+ * @returns address of the application
+ */
+const deployApplication = async (
+ publicClient: PublicClient,
+ walletClient: WalletClient,
+ options: {
+ applicationOwner?: Address;
+ authorityAddress: Address;
+ progress: Ora;
+ salt: Hash;
+ templateHash: Hash;
+ },
+): Promise => {
+ const { authorityAddress, progress, salt, templateHash } = options;
+
+ const applicationOwner =
+ options.applicationOwner ||
+ (await addressInput({
+ message: "Application Owner",
+ default: walletClient.account?.address,
+ }));
+
+ const applicationAddress = await publicClient.readContract({
+ abi: applicationFactoryAbi,
+ address: applicationFactoryAddress,
+ functionName: "calculateApplicationAddress",
+ args: [
+ authorityAddress,
+ applicationOwner,
+ templateHash,
+ // "0x", // XXX: update to latest rollups contract
+ salt,
+ ],
+ });
+
+ // check if application is already deployed
+ const applicationCode = await publicClient.getCode({
+ address: applicationAddress,
+ });
+
+ if (applicationCode === undefined) {
+ // deploy application
+ const { request } = await publicClient.simulateContract({
+ abi: applicationFactoryAbi,
+ address: applicationFactoryAddress,
+ account: walletClient.account,
+ functionName: "newApplication",
+ args: [authorityAddress, applicationOwner, templateHash, salt],
+ });
+ progress.start("Deploying application...");
+ const hash = await walletClient.writeContract(request);
+ await publicClient.waitForTransactionReceipt({ hash });
+ progress.succeed(`Application ${chalk.cyan(applicationAddress)}`);
+ } else {
+ // abort, because application is already deployed
+ throw new Error(
+ `Application ${chalk.cyan(templateHash)} already deployed to ${chalk.cyan(applicationAddress)}`,
+ );
+ }
+ return applicationAddress;
+};
+
+/**
+ * Publish machine snapshot to rollups node by copying it to the rollups node container
+ * @param options
+ * @returns path to the snapshot in the rollups node
+ */
+const publishMachine = async (options: {
+ progress: Ora;
+ projectName: string;
+ templateHash: Hash;
+}): Promise => {
+ const { progress, projectName, templateHash } = options;
+ const snapshotPath = getContextPath("image");
+ const containerSnapshotPath = `/var/lib/cartesi-rollups-node/snapshots/${templateHash}/`;
+ progress.start("Publishing machine snapshot...");
+ await execa("docker", [
+ "compose",
+ "--project-name",
+ projectName,
+ "cp",
+ snapshotPath,
+ `rollups-node:${containerSnapshotPath}`,
+ ]);
+ progress.succeed(`Machine snapshot ${chalk.cyan(containerSnapshotPath)}`);
+ return containerSnapshotPath;
+};
+
+/**
+ * Register application in rollups node
+ * @param options
+ * @returns name of the application
+ */
+const registerApplication = async (options: {
+ applicationAddress: Address;
+ name?: string;
+ progress: Ora;
+ projectName: string;
+ snapshotPath: string;
+}): Promise => {
+ const { applicationAddress, progress, projectName, snapshotPath } = options;
+
+ // use template hash as the name of the deployment
+ const name =
+ options.name ??
+ (await input({
+ message: "Application Name",
+ default: applicationAddress.toLowerCase(),
+ }));
+
+ // deploy application
+ progress.start("Registering application...");
+ const { stdout } = await execa("docker", [
+ "compose",
+ "--project-name",
+ projectName,
+ "exec",
+ "rollups-node",
+ "cartesi-rollups-cli",
+ "app",
+ "register",
+ "--name",
+ name,
+ "--address",
+ applicationAddress,
+ "--template-path",
+ snapshotPath,
+ "--print-json",
+ ]);
+ const registration = stdout ? JSON.parse(stdout) : undefined;
+ if (registration) {
+ if (registration.State !== "ENABLED") {
+ throw new Error(registration.Reason);
+ }
+ progress.succeed(`Registration ${chalk.cyan(name)}`);
+ } else {
+ throw new Error("Failed to deploy application");
+ }
+ return name;
+};
+
+export const createDeployCommand = () => {
+ return new Command<[], {}, RollupsCommandOpts>("deploy")
+ .description("Deploy a rollups application to a rollups node.")
+ .configureHelp({ showGlobalOptions: true })
+ .option("--chain-id ", "Chain ID", parseInt, 31337)
+ .option("--rpc-url ", "RPC URL")
+ .option("--mnemonic ", "Mnemonic passphrase")
+ .option(
+ "--mnemonic-index ",
+ "Mnemonic account index",
+ parseInt,
+ 0,
+ )
+ .option("--name ", "application name")
+ .option(
+ "--authority-owner ",
+ "authority owner",
+ parseAddress,
+ undefined,
+ )
+ .option(
+ "--application-owner ",
+ "application owner",
+ parseAddress,
+ undefined,
+ )
+ .addOption(
+ new Option(
+ "--epoch-length ",
+ "length of an epoch (in blocks)",
+ )
+ .argParser(Number)
+ .default(720),
+ )
+ .option("--salt ", "salt for deployment", parseHash, zeroHash)
+ .option("--json", "output in JSON format")
+ .action(async (options, command) => {
+ const rollupsOptions = command.optsWithGlobals();
+ const { projectName } = rollupsOptions;
+ const { json } = options;
+ // XXX: json support is not implemented yet
+ // if case of json maybe we should not support interactive mode
+
+ const progress = ora();
+
+ // get cartesi machine snapshot hash, produced by 'build'
+ const templateHash = getMachineHash();
+ if (!templateHash) {
+ progress.fail(
+ `Cartesi machine snapshot not found, run 'build'`,
+ );
+ return;
+ }
+
+ progress.succeed(
+ `Cartesi machine template hash ${chalk.cyan(templateHash)}`,
+ );
+
+ // connect to some chain
+ const { publicClient, walletClient } = await connect(options);
+
+ try {
+ // deploy authority contract (if not already deployed)
+ const authorityAddress = await deployAuthority(
+ publicClient,
+ walletClient,
+ { progress, ...options },
+ );
+
+ // deploy application contract
+ const applicationAddress = await deployApplication(
+ publicClient,
+ walletClient,
+ { authorityAddress, progress, templateHash, ...options },
+ );
+
+ if (publicClient.chain?.id === anvil.id) {
+ // copy machine snapshot to rollups node container
+ const containerSnapshotPath = await publishMachine({
+ progress,
+ templateHash,
+ projectName,
+ });
+
+ const name = await registerApplication({
+ applicationAddress,
+ progress,
+ snapshotPath: containerSnapshotPath,
+ ...options,
+ ...rollupsOptions,
+ });
+ } else {
+ const snapshotPath = getContextPath("image");
+ progress.succeed(
+ `Done. Manually copy machine to rollups node ${chalk.cyan(snapshotPath)}`,
+ );
+ }
+ } catch (e: unknown) {
+ progress.fail(e instanceof Error ? e.message : "Unknown error");
+ }
+ });
+};
diff --git a/apps/cli/src/commands/rollups/start.ts b/apps/cli/src/commands/rollups/start.ts
new file mode 100644
index 00000000..f18acc51
--- /dev/null
+++ b/apps/cli/src/commands/rollups/start.ts
@@ -0,0 +1,194 @@
+import { Command, Option } from "@commander-js/extra-typings";
+import chalk from "chalk";
+import { execa } from "execa";
+import path from "path";
+import { DEFAULT_SDK } from "../../config.js";
+import { RollupsCommandOpts } from "../rollups.js";
+
+const commaSeparatedList = (value: string, _previous: string[]) =>
+ value.split(",");
+
+const availableServices = [
+ "bundler",
+ "explorer",
+ "graphql",
+ // "otterscan",
+ "paymaster",
+];
+
+export const createStartCommand = () => {
+ return new Command<[], {}, RollupsCommandOpts>("start")
+ .description("Start a local rollups node environment.")
+ .configureHelp({ showGlobalOptions: true })
+ .addOption(
+ new Option(
+ "--block-time ",
+ "interval between blocks (in seconds)",
+ )
+ .argParser(Number)
+ .default(5),
+ )
+ .addOption(
+ new Option(
+ "--default-block ",
+ "default block to be used when fetching new blocks.",
+ )
+ .choices(["latest", "safe", "pending", "finalized"])
+ .default("finalized"),
+ )
+ .addOption(
+ new Option(
+ "--cpus ",
+ "number of cpu limits for the rollups-node",
+ ).argParser(Number),
+ )
+ .addOption(
+ new Option(
+ "--memory ",
+ "memory limit for the rollups-node in MB",
+ ).argParser(Number),
+ )
+ .option(
+ "--services ",
+ `optional services to start, comma separated list from [${availableServices.join(", ")}]`,
+ commaSeparatedList,
+ [],
+ )
+ .option("-p, --port ", "port to listen on", parseInt, 8080)
+ .option("-d, --detach", "run in detached mode", false)
+ .option("--dry-run", "show the docker compose configuration", false)
+ .option("-v, --verbose", "verbose output", false)
+ .action(async (options, command) => {
+ const { projectName } = command.optsWithGlobals();
+ const {
+ blockTime,
+ cpus,
+ defaultBlock,
+ detach,
+ dryRun,
+ memory,
+ port,
+ services,
+ verbose,
+ } = options;
+ // path of the tool instalation
+ const binPath = path.join(
+ path.dirname(new URL(import.meta.url).pathname),
+ "../..",
+ );
+
+ // setup the environment variable used in docker compose
+ const listenPort = port;
+ const env: NodeJS.ProcessEnv = {
+ ANVIL_VERBOSITY: verbose ? "--steps-tracing" : "--silent",
+ BLOCK_TIME: blockTime.toString(),
+ CARTESI_BLOCKCHAIN_DEFAULT_BLOCK: defaultBlock,
+ CARTESI_LOG_LEVEL: verbose ? "info" : "error",
+ CARTESI_BIN_PATH: binPath,
+ CARTESI_LISTEN_PORT: listenPort.toString(),
+ CARTESI_ROLLUPS_NODE_CPUS: cpus?.toString(),
+ CARTESI_ROLLUPS_NODE_MEMORY: memory?.toString(),
+ CARTESI_SDK_IMAGE: DEFAULT_SDK,
+ };
+
+ const composeFiles = [
+ "docker-compose-anvil.yaml",
+ "docker-compose-proxy.yaml",
+ "docker-compose-database.yaml",
+ "docker-compose-node.yaml",
+ "docker-compose-prompt.yaml",
+ ];
+
+ // cpu and memory limits, mostly for testing and debuggingpurposes
+ if (cpus) {
+ composeFiles.push("docker-compose-node-cpus.yaml");
+ }
+ if (memory) {
+ composeFiles.push("docker-compose-node-memory.yaml");
+ }
+
+ const optionalServices =
+ services.length === 1 && services[0] === "all"
+ ? availableServices
+ : services;
+
+ // validate services and add to compose files
+ for (const service of optionalServices) {
+ if (!availableServices.includes(service)) {
+ throw new Error(
+ `Service ${chalk.cyan(service)} not available`,
+ );
+ } else {
+ composeFiles.push(`docker-compose-${service}.yaml`);
+ }
+ }
+
+ // create the "--file " list
+ const files = composeFiles
+ .map((f) => [
+ "--file",
+ path.join(binPath, "compose", "rollups", f),
+ ])
+ .flat();
+
+ const compose_args = [
+ "compose",
+ ...files,
+ "--project-name",
+ projectName,
+ ];
+
+ const up_args = [];
+
+ if (detach) {
+ // run in detached mode (background)
+ // will need to check logs using docker
+ up_args.push("--detach");
+ } else {
+ if (!verbose) {
+ // attach only to rollups-node and prompt
+ compose_args.push("--progress", "quiet");
+ up_args.push("--attach", "rollups-node");
+ up_args.push("--attach", "prompt");
+ }
+ }
+
+ // XXX: need this handler, so SIGINT can still call the finally block below
+ process.on("SIGINT", () => {});
+
+ try {
+ if (dryRun) {
+ // show the docker compose configuration
+ await execa("docker", [...compose_args, "config"], {
+ env,
+ stdio: "inherit",
+ });
+ return;
+ }
+
+ // run compose environment
+ await execa("docker", [...compose_args, "up", ...up_args], {
+ env,
+ stdio: "inherit",
+ });
+ } catch (e: unknown) {
+ // 130 is a graceful shutdown, so we can swallow it
+ if ((e as any).exitCode !== 130) {
+ throw e;
+ }
+ } finally {
+ // if it's detached, exit silently, because it's running in the background
+ if (!detach) {
+ // shut it down, including volumes
+ await execa(
+ "docker",
+ [...compose_args, "down", "--volumes"],
+ {
+ env,
+ stdio: "inherit",
+ },
+ );
+ }
+ }
+ });
+};
diff --git a/apps/cli/src/commands/rollups/status.ts b/apps/cli/src/commands/rollups/status.ts
new file mode 100644
index 00000000..86989557
--- /dev/null
+++ b/apps/cli/src/commands/rollups/status.ts
@@ -0,0 +1,51 @@
+import { Command } from "@commander-js/extra-typings";
+import chalk from "chalk";
+import Table from "cli-table3";
+import { getServiceState } from "../../base.js";
+import { getDeployments } from "../../exec/rollups.js";
+import { RollupsCommandOpts } from "../rollups.js";
+
+export const createStatusCommand = () => {
+ return new Command<[], {}, RollupsCommandOpts>("status")
+ .description("Shows the status of a local rollups node environment.")
+ .configureHelp({ showGlobalOptions: true })
+ .option("--json", "output in JSON format")
+ .action(async ({ json }, command) => {
+ const { projectName } = command.optsWithGlobals();
+ const status = await getServiceState(projectName, "rollups-node");
+ const deployments = await getDeployments({ projectName });
+
+ if (json) {
+ process.stdout.write(
+ JSON.stringify({
+ status,
+ deployments,
+ }),
+ );
+ } else {
+ console.log(
+ `${chalk.cyan(projectName)} is ${status == "running" ? chalk.green("running") : chalk.red("not running")}`,
+ );
+
+ if (status === "running") {
+ if (deployments.length === 0) {
+ console.log(chalk.red("no applications deployed"));
+ } else {
+ // print as a table
+ const table = new Table({
+ head: ["Machine", "Address", "State"],
+ style: { border: [], head: [] },
+ });
+ table.push(
+ ...deployments.map((deployment) => [
+ deployment.templateHash,
+ deployment.address,
+ deployment.state,
+ ]),
+ );
+ console.log(table.toString());
+ }
+ }
+ }
+ });
+};
diff --git a/apps/cli/src/commands/rollups/stop.ts b/apps/cli/src/commands/rollups/stop.ts
new file mode 100644
index 00000000..9123d659
--- /dev/null
+++ b/apps/cli/src/commands/rollups/stop.ts
@@ -0,0 +1,31 @@
+import { Command } from "@commander-js/extra-typings";
+import chalk from "chalk";
+import { execa } from "execa";
+import ora from "ora";
+import { RollupsCommandOpts } from "../rollups";
+
+export const createStopCommand = () => {
+ return new Command<[], {}, RollupsCommandOpts>("stop")
+ .description("Stop a local rollups node environment.")
+ .configureHelp({ showGlobalOptions: true })
+ .action(async (_options, command) => {
+ const { projectName } = command.optsWithGlobals();
+ const progress = ora(
+ `Stopping ${chalk.cyan(projectName)} environment...`,
+ ).start();
+ try {
+ await execa("docker", [
+ "compose",
+ "-p",
+ projectName,
+ "down",
+ "--volumes",
+ ]);
+ progress.succeed(
+ `${chalk.cyan(projectName)} environment stopped.`,
+ );
+ } catch (e: unknown) {
+ progress.fail((e as Error).message);
+ }
+ });
+};
diff --git a/apps/cli/src/commands/run.ts b/apps/cli/src/commands/run.ts
index 5074e754..7f4e6e94 100755
--- a/apps/cli/src/commands/run.ts
+++ b/apps/cli/src/commands/run.ts
@@ -1,240 +1,15 @@
-import { Command, Option } from "@commander-js/extra-typings";
-import { execa } from "execa";
-import fs from "fs-extra";
-import path from "path";
-import { getMachineHash } from "../base.js";
+import { Command } from "@commander-js/extra-typings";
+import chalk from "chalk";
-export const registerRunCommand = (program: Command) => {
- program
- .command("run")
+export const createRunCommand = () => {
+ return new Command("run")
.description("Run a local cartesi node for the application.")
- .addOption(
- new Option(
- "--block-time ",
- "interval between blocks (in seconds)",
- )
- .argParser(Number)
- .default(5),
- )
- .addOption(
- new Option(
- "--epoch-length ",
- "length of an epoch (in blocks)",
- )
- .argParser(Number)
- .default(720),
- )
- .option(
- "--disable-explorer",
- "disable local explorer service to save machine resources",
- false,
- )
- .option(
- "--disable-bundler",
- "disable local bundler service to save machine resources",
- false,
- )
- .option(
- "--disable-paymaster",
- "disable local paymaster service to save machine resources",
- false,
- )
- .option("--enable-espresso", "enable espresso development node", false)
- .option(
- "--no-backend",
- "run a node without the application code",
- false,
- )
- .option("-v, --verbose", "verbose output", false)
- .addOption(
- new Option(
- "--port ",
- "port to listen for incoming connections",
- )
- .argParser(Number)
- .default(8080),
- )
- .addOption(
- new Option(
- "--cpus ",
- "number of cpu limits for the rollups-node",
- ).argParser(Number),
- )
- .addOption(
- new Option(
- "--memory ",
- "memory limit for the rollups-node in MB",
- ).argParser(Number),
- )
- .option("--dry-run", "show the docker compose configuration", false)
- .action(
- async ({
- blockTime,
- epochLength,
- disableExplorer,
- disableBundler,
- disablePaymaster,
- enableEspresso,
- backend,
- verbose,
- port,
- dryRun,
- cpus,
- memory,
- }) => {
- let projectName: string;
-
- if (backend) {
- projectName = "cartesi-node";
- } else {
- // get machine hash
- const hash = getMachineHash();
- // Check if snapshot exists
- if (!hash) {
- throw new Error(
- `Cartesi machine snapshot not found, run 'build'`,
- );
- }
- projectName = hash.substring(2, 10);
- }
-
- // path of the tool instalation
- const binPath = path.join(
- path.dirname(new URL(import.meta.url).pathname),
- "..",
- );
-
- // setup the environment variable used in docker compose
- const blockInterval = blockTime;
- const listenPort = port;
- const env: NodeJS.ProcessEnv = {
- ANVIL_VERBOSITY: verbose ? "--steps-tracing" : "--silent",
- BLOCK_TIME: blockInterval.toString(),
- BLOCK_TIMEOUT: (blockInterval + 3).toString(),
- CARTESI_EPOCH_LENGTH: epochLength.toString(),
- CARTESI_EXPERIMENTAL_DISABLE_CONFIG_LOG: verbose
- ? "false"
- : "true",
- CARTESI_EXPERIMENTAL_SERVER_MANAGER_BYPASS_LOG: verbose
- ? "false"
- : "true",
- CARTESI_LOG_LEVEL: verbose ? "info" : "error",
- CARTESI_SNAPSHOT_DIR: "/usr/share/rollups-node/snapshot",
- CARTESI_BIN_PATH: binPath,
- CARTESI_LISTEN_PORT: listenPort.toString(),
- CARTESI_VALIDATOR_CPUS: cpus?.toString(),
- CARTESI_VALIDATOR_MEMORY: memory?.toString(),
- };
-
- // validator
- const composeFiles = ["docker-compose-validator.yaml"];
- if (cpus) {
- composeFiles.push("docker-compose-validator-cpus.yaml");
- }
- if (memory) {
- composeFiles.push("docker-compose-validator-memory.yaml");
- }
-
- // prompt
- composeFiles.push("docker-compose-prompt.yaml");
-
- // database
- composeFiles.push("docker-compose-database.yaml");
-
- // proxy
- composeFiles.push("docker-compose-proxy.yaml");
-
- // anvil
- composeFiles.push("docker-compose-anvil.yaml");
-
- // explorer
- if (!disableExplorer) {
- composeFiles.push("docker-compose-explorer.yaml");
- }
-
- // account abstraction
- if (!disableBundler) {
- composeFiles.push("docker-compose-bundler.yaml");
- }
- if (!disablePaymaster && !disableBundler) {
- // only add paymaster if bundler is enabled
- composeFiles.push("docker-compose-paymaster.yaml");
- }
-
- // espresso development node
- if (enableEspresso) {
- composeFiles.push("docker-compose-espresso.yaml");
- }
-
- // load the no-backend compose file
- if (backend) {
- composeFiles.push("docker-compose-host.yaml");
- } else {
- // snapshot volume
- composeFiles.push("docker-compose-snapshot-volume.yaml");
- }
-
- // add project env file loading
- if (fs.existsSync("./.cartesi.env")) {
- composeFiles.push("docker-compose-envfile.yaml");
- }
-
- // create the "--file " list
- const files = composeFiles
- .map((f) => ["--file", path.join(binPath, "node", f)])
- .flat();
-
- const compose_args = [
- "compose",
- ...files,
- "--project-directory",
- ".",
- "--project-name",
- projectName,
- ];
-
- const up_args = [];
-
- if (!verbose) {
- compose_args.push("--progress", "quiet");
- up_args.push("--attach", "validator");
- up_args.push("--attach", "prompt");
- }
-
- // XXX: need this handler, so SIGINT can still call the finally block below
- process.on("SIGINT", () => {});
-
- try {
- if (dryRun) {
- // show the docker compose configuration
- await execa("docker", [...compose_args, "config"], {
- env,
- stdio: "inherit",
- });
- return;
- }
-
- // run compose environment
- await execa("docker", [...compose_args, "up", ...up_args], {
- env,
- stdio: "inherit",
- });
- } catch (e: unknown) {
- // 130 is a graceful shutdown, so we can swallow it
- if ((e as any).exitCode !== 130) {
- throw e;
- }
- } finally {
- // shut it down, including volumes
- await execa(
- "docker",
- [...compose_args, "down", "--volumes"],
- {
- env,
- stdio: "inherit",
- },
- );
- }
- },
- );
+ .summary("DEPRECATED: use 'rollups start' instead")
+ .action(async () => {
+ console.warn(
+ chalk.yellow(
+ "run command is deprecated, use 'rollups start' and 'rollups deploy' instead",
+ ),
+ );
+ });
};
diff --git a/apps/cli/src/commands/send.ts b/apps/cli/src/commands/send.ts
index eba02361..4d4af677 100755
--- a/apps/cli/src/commands/send.ts
+++ b/apps/cli/src/commands/send.ts
@@ -2,12 +2,13 @@ import { Command } from "@commander-js/extra-typings";
import input from "@inquirer/input";
import select from "@inquirer/select";
import { Address, isAddress, PublicClient, WalletClient } from "viem";
-import { getApplicationAddress } from "../base.js";
+import { parseAddress } from "../base.js";
+import { getApplicationAddress } from "../exec/rollups.js";
import createClients, { supportedChains } from "../wallet.js";
-import { registerErc20Command } from "./send/erc20.js";
-import { registerErc721Command } from "./send/erc721.js";
-import { registerEtherCommand } from "./send/ether.js";
-import { registerGenericCommand } from "./send/generic.js";
+import { createErc20Command } from "./send/erc20.js";
+import { createErc721Command } from "./send/erc721.js";
+import { createEtherCommand } from "./send/ether.js";
+import { createGenericCommand } from "./send/generic.js";
export const connect = (options: {
chainId?: number;
@@ -52,10 +53,12 @@ export const getInputApplicationAddress = async (
return applicationAddress as Address;
};
-export const addCommonOptions = (command: Command) => {
- return command
- .option("--dapp ", "Application address")
- .option("--chain-id ", "Chain ID", parseInt)
+export const createSendCommand = () => {
+ const command = new Command("send")
+ .description(
+ "Sends different kinds of input to the application in interactive mode.",
+ )
+ .option("--chain-id ", "Chain ID", parseInt, 31337)
.option("--rpc-url ", "RPC URL")
.option("--mnemonic ", "Mnemonic passphrase")
.option(
@@ -63,38 +66,40 @@ export const addCommonOptions = (command: Command) => {
"Mnemonic account index",
parseInt,
0,
- );
-};
+ )
+ .option(
+ "--dapp ",
+ "Application address",
+ parseAddress,
+ undefined,
+ )
+ .action(async (options, program) => {
+ // Get the registered subcommands from the program
+ const commands = program.commands;
-export const registerSendCommand = (program: Command) => {
- const sendCommand = addCommonOptions(
- program
- .command("send")
- .description(
- "Sends different kinds of input to the application in interactive mode.",
- ),
- ).action(async (options, program) => {
- // Get the registered subcommands from the program
- const commands = program.commands;
+ // Create choices for the select prompt based on registered commands
+ const choices = commands.map((cmd) => ({
+ name: cmd.name(),
+ value: cmd,
+ description: cmd.description(),
+ }));
- // Create choices for the select prompt based on registered commands
- const choices = commands.map((cmd) => ({
- name: cmd.name(),
- value: cmd,
- description: cmd.description(),
- }));
+ // Present the list of subcommands using @inquirer/select
+ const subcommand = await select({
+ message: "Select the type of input to send",
+ choices,
+ });
- // Present the list of subcommands using @inquirer/select
- const subcommand = await select({
- message: "Select the type of input to send",
- choices,
+ // Execute the selected subcommand
+ subcommand.parseAsync(program.args);
});
-
- // Execute the selected subcommand
- subcommand.parseAsync(program.args);
- });
- registerErc20Command(sendCommand);
- registerErc721Command(sendCommand);
- registerEtherCommand(sendCommand);
- registerGenericCommand(sendCommand);
+ command.addCommand(createGenericCommand());
+ command.addCommand(createErc20Command());
+ command.addCommand(createErc721Command());
+ command.addCommand(createEtherCommand());
+ return command;
};
+
+export type SendCommandOpts = ReturnType<
+ ReturnType["opts"]
+>;
diff --git a/apps/cli/src/commands/send/erc20.ts b/apps/cli/src/commands/send/erc20.ts
index f47abf05..be1f3b22 100755
--- a/apps/cli/src/commands/send/erc20.ts
+++ b/apps/cli/src/commands/send/erc20.ts
@@ -11,9 +11,9 @@ import {
} from "viem";
import { erc20PortalAbi, erc20PortalAddress } from "../../contracts.js";
import {
- addCommonOptions,
connect,
getInputApplicationAddress,
+ SendCommandOpts,
} from "../send.js";
type ERC20Token = {
@@ -60,22 +60,24 @@ const ercValidator =
return true;
};
-export const registerErc20Command = (program: Command) => {
- addCommonOptions(
- program
- .command("erc20")
- .description(
- "Sends ERC-20 deposits to the application, optionally in interactive mode.",
- ),
- )
+export const createErc20Command = () => {
+ return new Command<[], {}, SendCommandOpts>("erc20")
+ .description(
+ "Sends ERC-20 deposits to the application, optionally in interactive mode.",
+ )
+ .configureHelp({ showGlobalOptions: true })
.option("--token ", "token address")
.option("--amount ", "amount to send")
- .action(async (options) => {
+ .action(async (options, command) => {
+ const sendOptions = command.optsWithGlobals();
+
// connect to RPC provider
- const { publicClient, walletClient } = await connect(options);
+ const { publicClient, walletClient } = await connect(sendOptions);
// get dapp address from local node, or ask
- const applicationAddress = await getInputApplicationAddress();
+ const applicationAddress = await getInputApplicationAddress(
+ sendOptions.dapp,
+ );
const tokenAddress =
options.token && isAddress(options.token)
diff --git a/apps/cli/src/commands/send/erc721.ts b/apps/cli/src/commands/send/erc721.ts
index 492c5316..54f70a0b 100755
--- a/apps/cli/src/commands/send/erc721.ts
+++ b/apps/cli/src/commands/send/erc721.ts
@@ -4,9 +4,9 @@ import ora from "ora";
import { Address, erc721Abi, getAddress, isAddress, PublicClient } from "viem";
import { erc721PortalAbi, erc721PortalAddress } from "../../contracts.js";
import {
- addCommonOptions,
connect,
getInputApplicationAddress,
+ SendCommandOpts,
} from "../send.js";
type ERC721Token = {
@@ -47,22 +47,24 @@ const ercValidator =
return true;
};
-export const registerErc721Command = (program: Command) => {
- addCommonOptions(
- program
- .command("erc721")
- .description(
- "Sends ERC-721 deposits to the application, optionally in interactive mode.",
- ),
- )
+export const createErc721Command = () => {
+ return new Command<[], {}, SendCommandOpts>("erc721")
+ .description(
+ "Sends ERC-721 deposits to the application, optionally in interactive mode.",
+ )
+ .configureHelp({ showGlobalOptions: true })
.option("--token ", "token address")
.option("--token-id ", "token ID")
- .action(async (options) => {
+ .action(async (options, command) => {
+ const sendOptions = command.optsWithGlobals();
+
// connect to RPC provider
- const { publicClient, walletClient } = await connect(options);
+ const { publicClient, walletClient } = await connect(sendOptions);
// get dapp address from local node, or ask
- const applicationAddress = await getInputApplicationAddress();
+ const applicationAddress = await getInputApplicationAddress(
+ sendOptions.dapp,
+ );
const token =
options.token && isAddress(options.token)
diff --git a/apps/cli/src/commands/send/ether.ts b/apps/cli/src/commands/send/ether.ts
index ddd296f5..78128a44 100755
--- a/apps/cli/src/commands/send/ether.ts
+++ b/apps/cli/src/commands/send/ether.ts
@@ -4,27 +4,29 @@ import ora from "ora";
import { isHex, parseEther } from "viem";
import { etherPortalAbi, etherPortalAddress } from "../../contracts.js";
import {
- addCommonOptions,
connect,
getInputApplicationAddress,
+ SendCommandOpts,
} from "../send.js";
-export const registerEtherCommand = (program: Command) => {
- addCommonOptions(
- program
- .command("ether")
- .description(
- "Sends ether deposits to the application, optionally in interactive mode.",
- ),
- )
+export const createEtherCommand = () => {
+ return new Command<[], {}, SendCommandOpts>("ether")
+ .description(
+ "Sends ether deposits to the application, optionally in interactive mode.",
+ )
+ .configureHelp({ showGlobalOptions: true })
.option("--amount ", "amount, in ETH units")
.option("--exec-layer-data ", "exec layer data", "0x")
- .action(async (options) => {
+ .action(async (options, command) => {
+ const sendOptions = command.optsWithGlobals();
+
// connect to RPC provider
- const { publicClient, walletClient } = await connect(options);
+ const { publicClient, walletClient } = await connect(sendOptions);
// get dapp address from local node, or ask
- const applicationAddress = await getInputApplicationAddress();
+ const applicationAddress = await getInputApplicationAddress(
+ sendOptions.dapp,
+ );
const amount =
options.amount || (await input({ message: "Amount" }));
diff --git a/apps/cli/src/commands/send/generic.ts b/apps/cli/src/commands/send/generic.ts
index c6b46c91..0e6bda3c 100755
--- a/apps/cli/src/commands/send/generic.ts
+++ b/apps/cli/src/commands/send/generic.ts
@@ -11,9 +11,9 @@ import {
import { inputBoxAbi, inputBoxAddress } from "../../contracts.js";
import { bytesInput } from "../../prompts.js";
import {
- addCommonOptions,
connect,
getInputApplicationAddress,
+ SendCommandOpts,
} from "../send.js";
const getInput = async (options: {
@@ -98,14 +98,12 @@ const getInput = async (options: {
return undefined;
};
-export const registerGenericCommand = (program: Command) => {
- addCommonOptions(
- program
- .command("generic")
- .description(
- "Sends generics inputs to the application, optionally in interactive mode.",
- ),
- )
+export const createGenericCommand = () => {
+ return new Command<[], {}, SendCommandOpts>("generic")
+ .description(
+ "Sends generics inputs to the application, optionally in interactive mode.",
+ )
+ .configureHelp({ showGlobalOptions: true })
.option("--input ", "input payload")
.addOption(
new Option(
@@ -114,12 +112,16 @@ export const registerGenericCommand = (program: Command) => {
).choices(["hex", "string", "abi"]),
)
.option("--input-abi-params ", "input abi params")
- .action(async (options) => {
+ .action(async (options, command) => {
+ const sendOptions = command.optsWithGlobals();
+
// connect to RPC provider
- const { publicClient, walletClient } = await connect(options);
+ const { publicClient, walletClient } = await connect(sendOptions);
// get dapp address from local node, or ask
- const applicationAddress = await getInputApplicationAddress();
+ const applicationAddress = await getInputApplicationAddress(
+ sendOptions.dapp,
+ );
const payload =
(await getInput(options)) ||
diff --git a/apps/cli/src/commands/shell.ts b/apps/cli/src/commands/shell.ts
index b85078e8..3a259af2 100755
--- a/apps/cli/src/commands/shell.ts
+++ b/apps/cli/src/commands/shell.ts
@@ -5,9 +5,8 @@ import { getApplicationConfig, getContextPath } from "../base.js";
import { ImageInfo } from "../config.js";
import { bootMachine } from "../machine.js";
-export const registerShellCommand = (program: Command) => {
- program
- .command("shell")
+export const createShellCommand = () => {
+ return new Command("shell")
.argument("[image]", "image ID|name")
.option("--command ", "shell command to run", "/bin/sh")
.option(
diff --git a/apps/cli/src/compose/rollups/default.env b/apps/cli/src/compose/rollups/default.env
new file mode 100644
index 00000000..e285007c
--- /dev/null
+++ b/apps/cli/src/compose/rollups/default.env
@@ -0,0 +1,35 @@
+# cartesi/rollups-node
+
+#logs
+CARTESI_LOG_LEVEL="${CARTESI_LOG_LEVEL:-info}"
+
+# features
+CARTESI_FEATURE_INPUT_READER_ENABLED="${CARTESI_FEATURE_INPUT_READER_ENABLED:-true}"
+CARTESI_FEATURE_CLAIM_SUBMISSION_ENABLED="${CARTESI_FEATURE_CLAIM_SUBMISSION_ENABLED:-true}"
+CARTESI_FEATURE_MACHINE_HASH_CHECK_ENABLED="${CARTESI_FEATURE_MACHINE_HASH_CHECK_ENABLED:-false}"
+
+# rollups
+CARTESI_EVM_READER_RETRY_POLICY_MAX_RETRIES="${CARTESI_EVM_READER_RETRY_POLICY_MAX_RETRIES:-3}"
+CARTESI_EVM_READER_RETRY_POLICY_MAX_DELAY="${CARTESI_EVM_READER_RETRY_POLICY_MAX_DELAY:-3}"
+CARTESI_ADVANCER_POLLING_INTERVAL="${CARTESI_ADVANCER_POLLING_INTERVAL:-3}"
+CARTESI_VALIDATOR_POLLING_INTERVAL="${CARTESI_VALIDATOR_POLLING_INTERVAL:-3}"
+CARTESI_CLAIMER_POLLING_INTERVAL="${CARTESI_CLAIMER_POLLING_INTERVAL:-3}"
+CARTESI_MAX_STARTUP_TIME="${CARTESI_MAX_STARTUP_TIME:-15}"
+
+# blockchain
+CARTESI_BLOCKCHAIN_ID="${CARTESI_BLOCKCHAIN_ID:-31337}"
+CARTESI_BLOCKCHAIN_HTTP_ENDPOINT="${CARTESI_BLOCKCHAIN_HTTP_ENDPOINT:-http://anvil:8545}"
+CARTESI_BLOCKCHAIN_WS_ENDPOINT="${CARTESI_BLOCKCHAIN_WS_ENDPOINT:-ws://anvil:8545}"
+CARTESI_BLOCKCHAIN_DEFAULT_BLOCK="${CARTESI_BLOCKCHAIN_DEFAULT_BLOCK:-finalized}"
+
+# contracts
+CARTESI_CONTRACTS_INPUT_BOX_ADDRESS="${CARTESI_CONTRACTS_INPUT_BOX_ADDRESS:-0x593E5BCf894D6829Dd26D0810DA7F064406aebB6}"
+CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER="${CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER:-1}"
+CARTESI_CONTRACTS_APPLICATION_FACTORY_ADDRESS="${CARTESI_CONTRACTS_APPLICATION_FACTORY_ADDRESS:-0xd7d4d184b82b1a4e08f304DDaB0A2A7a301C2620}"
+CARTESI_CONTRACTS_AUTHORITY_FACTORY_ADDRESS="${CARTESI_CONTRACTS_AUTHORITY_FACTORY_ADDRESS:-0xB897F7Fe78f220aE34B7FA9493092701a873Ed45}"
+
+# auth
+CARTESI_AUTH_MNEMONIC="${CARTESI_AUTH_MNEMONIC:-test test test test test test test test test test test junk}"
+
+# postgres
+CARTESI_DATABASE_CONNECTION="postgres://postgres:password@database:5432/postgres?sslmode=disable"
diff --git a/apps/cli/src/compose/rollups/docker-compose-anvil.yaml b/apps/cli/src/compose/rollups/docker-compose-anvil.yaml
new file mode 100644
index 00000000..ddb375bb
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-anvil.yaml
@@ -0,0 +1,24 @@
+services:
+ anvil:
+ image: ${CARTESI_SDK_IMAGE}
+ command:
+ [
+ "devnet",
+ "--block-time",
+ "${BLOCK_TIME:-5}",
+ "${ANVIL_VERBOSITY:---silent}",
+ ]
+ healthcheck:
+ test: ["CMD", "eth_isready"]
+ interval: 10s
+ timeout: 1s
+ retries: 5
+ environment:
+ ANVIL_IP_ADDR: 0.0.0.0
+ ports:
+ - 8545:8545
+
+ prompt:
+ image: debian:bookworm-slim
+ environment:
+ PROMPT_TXT_01_ANVIL: "Anvil running at http://localhost:8545"
diff --git a/apps/cli/src/node/docker-compose-bundler.yaml b/apps/cli/src/compose/rollups/docker-compose-bundler.yaml
similarity index 64%
rename from apps/cli/src/node/docker-compose-bundler.yaml
rename to apps/cli/src/compose/rollups/docker-compose-bundler.yaml
index dd29c4cc..ad4eeb04 100644
--- a/apps/cli/src/node/docker-compose-bundler.yaml
+++ b/apps/cli/src/compose/rollups/docker-compose-bundler.yaml
@@ -1,6 +1,6 @@
services:
alto:
- image: cartesi/sdk:0.12.0-alpha.3
+ image: ${CARTESI_SDK_IMAGE}
command:
- "alto"
- "--entrypoints"
@@ -35,23 +35,6 @@ services:
environment:
PROMPT_TXT_06_BUNDLER: "Bundler running at http://localhost:${CARTESI_LISTEN_PORT}/bundler/rpc"
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_BUNDLER: |
- http:
- routers:
- bundler:
- rule: "PathPrefix(`/bundler`)"
- middlewares:
- - "remove-bundler-prefix"
- service: bundler
- middlewares:
- remove-bundler-prefix:
- replacePathRegex:
- regex: "^/bundler/(.*)"
- replacement: "/$1"
- services:
- bundler:
- loadBalancer:
- servers:
- - url: "http://alto:4337"
+ proxy:
+ volumes:
+ - ./proxy/bundler.yaml:/etc/traefik/conf.d/bundler.yaml
diff --git a/apps/cli/src/node/docker-compose-database.yaml b/apps/cli/src/compose/rollups/docker-compose-database.yaml
similarity index 100%
rename from apps/cli/src/node/docker-compose-database.yaml
rename to apps/cli/src/compose/rollups/docker-compose-database.yaml
diff --git a/apps/cli/src/compose/rollups/docker-compose-espresso.yaml b/apps/cli/src/compose/rollups/docker-compose-espresso.yaml
new file mode 100644
index 00000000..de155182
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-espresso.yaml
@@ -0,0 +1,57 @@
+services:
+ espresso_database_creator:
+ image: postgres:16-alpine
+ command: ["createdb", "sequencer"]
+ depends_on:
+ database:
+ condition: service_healthy
+ environment:
+ PGHOST: ${PGHOST:-database}
+ PGPORT: ${PGPORT:-5432}
+ PGUSER: ${PGUSER:-postgres}
+ PGPASSWORD: ${PGPASSWORD:-password}
+ PGDATABASE: ${PGDATABASE:-postgres}
+
+ rollups-node:
+ environment:
+ CARTESI_FEATURE_INPUT_READER_ENABLED: false
+
+ espresso:
+ image: ${CARTESI_SDK_IMAGE}
+ command: ["/usr/local/bin/espresso-dev-node"]
+ deploy:
+ resources:
+ limits:
+ cpus: "4"
+ memory: "1G"
+ ports:
+ - 8770:8770
+ - 8771:8771
+ - 8772:8772
+ - 20000:20000
+ depends_on:
+ espresso_database_creator:
+ condition: service_completed_successfully
+ database:
+ condition: service_healthy
+ environment:
+ ESPRESSO_SEQUENCER_L1_PROVIDER: ${CARTESI_BLOCKCHAIN_HTTP_ENDPOINT:-http://anvil:8545}
+ ESPRESSO_SEQUENCER_API_PORT: 8770
+ ESPRESSO_BUILDER_PORT: 8771
+ ESPRESSO_PROVER_PORT: 8772
+ ESPRESSO_DEV_NODE_PORT: 20000
+ ESPRESSO_SEQUENCER_POSTGRES_HOST: database
+ ESPRESSO_SEQUENCER_POSTGRES_PORT: 5432
+ ESPRESSO_SEQUENCER_POSTGRES_USER: postgres
+ ESPRESSO_SEQUENCER_POSTGRES_PASSWORD: password
+ ESPRESSO_SEQUENCER_POSTGRES_DATABASE: sequencer
+ ESPRESSO_SEQUENCER_ETH_MNEMONIC: ${CARTESI_AUTH_MNEMONIC:-test test test test test test test test test test test junk}
+
+ prompt:
+ image: debian:bookworm-slim
+ environment:
+ PROMPT_TXT_07_ESPRESSO: "Espresso running at http://localhost:${CARTESI_LISTEN_PORT}/espresso/"
+
+ proxy:
+ volumes:
+ - ./proxy/espresso.yaml:/etc/traefik/conf.d/espresso.yaml
diff --git a/apps/cli/src/node/docker-compose-explorer.yaml b/apps/cli/src/compose/rollups/docker-compose-explorer.yaml
similarity index 58%
rename from apps/cli/src/node/docker-compose-explorer.yaml
rename to apps/cli/src/compose/rollups/docker-compose-explorer.yaml
index 716a7a9e..9bfa17b2 100644
--- a/apps/cli/src/node/docker-compose-explorer.yaml
+++ b/apps/cli/src/compose/rollups/docker-compose-explorer.yaml
@@ -55,34 +55,7 @@ services:
environment:
PROMPT_TXT_04_EXPLORER: "Explorer running at http://localhost:${CARTESI_LISTEN_PORT}/explorer/"
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_EXPLORER_API: |
- http:
- routers:
- explorer-api:
- rule: "PathPrefix(`/explorer-api`)"
- middlewares:
- - "remove-explorer-api-prefix"
- service: explorer-api
- middlewares:
- remove-explorer-api-prefix:
- replacePathRegex:
- regex: "^/explorer-api/(.*)"
- replacement: "/$1"
- services:
- explorer-api:
- loadBalancer:
- servers:
- - url: "http://explorer_api:4350"
- TRAEFIK_CONFIG_EXPLORER: |
- http:
- routers:
- explorer:
- rule: "PathPrefix(`/explorer`)"
- service: explorer
- services:
- explorer:
- loadBalancer:
- servers:
- - url: "http://explorer:3000"
+ proxy:
+ volumes:
+ - ./proxy/explorer.yaml:/etc/traefik/conf.d/explorer.yaml
+ - ./proxy/explorer-api.yaml:/etc/traefik/conf.d/explorer-api.yaml
diff --git a/apps/cli/src/compose/rollups/docker-compose-graphql.yaml b/apps/cli/src/compose/rollups/docker-compose-graphql.yaml
new file mode 100644
index 00000000..26006440
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-graphql.yaml
@@ -0,0 +1,47 @@
+services:
+ graphql_database_creator:
+ image: postgres:16-alpine
+ command: ["createdb", "graphql"]
+ depends_on:
+ database:
+ condition: service_healthy
+ environment:
+ PGHOST: database
+ PGPORT: 5432
+ PGUSER: postgres
+ PGPASSWORD: password
+ PGDATABASE: postgres
+
+ graphql_database_migration:
+ image: ${CARTESI_SDK_IMAGE}
+ command:
+ - migrate
+ - -path
+ - /usr/share/cartesi/rollups-graphql/migrations
+ - -database
+ - postgres://postgres:password@database:5432/graphql?sslmode=disable
+ - up
+ depends_on:
+ graphql_database_creator:
+ condition: service_completed_successfully
+
+ graphql:
+ image: ${CARTESI_SDK_IMAGE}
+ environment:
+ POSTGRES_GRAPHQL_DB_URL: postgres://postgres:password@database:5432/graphql?sslmode=disable
+ POSTGRES_NODE_DB_URL: postgres://postgres:password@database:5432/postgres?sslmode=disable
+ expose:
+ - 8080
+ command: ["cartesi-rollups-graphql"]
+ depends_on:
+ graphql_database_migration:
+ condition: service_completed_successfully
+
+ prompt:
+ image: debian:bookworm-slim
+ environment:
+ PROMPT_TXT_03_GRAPHQL: "GraphQL endpoint running at http://localhost:${CARTESI_LISTEN_PORT}/graphql/"
+
+ proxy:
+ volumes:
+ - ./proxy/graphql.yaml:/etc/traefik/conf.d/graphql.yaml
diff --git a/apps/cli/src/compose/rollups/docker-compose-node-cpus.yaml b/apps/cli/src/compose/rollups/docker-compose-node-cpus.yaml
new file mode 100644
index 00000000..113b88ba
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-node-cpus.yaml
@@ -0,0 +1,7 @@
+services:
+ rollups-node:
+ ptofiles: [cpu]
+ deploy:
+ resources:
+ limits:
+ cpus: "${CARTESI_ROLLUPS_NODE_CPUS}"
diff --git a/apps/cli/src/compose/rollups/docker-compose-node-memory.yaml b/apps/cli/src/compose/rollups/docker-compose-node-memory.yaml
new file mode 100644
index 00000000..cd5c8421
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-node-memory.yaml
@@ -0,0 +1,6 @@
+services:
+ rollups-node:
+ deploy:
+ resources:
+ limits:
+ memory: "${CARTESI_ROLLUPS_NODE_MEMORY}M"
diff --git a/apps/cli/src/compose/rollups/docker-compose-node.yaml b/apps/cli/src/compose/rollups/docker-compose-node.yaml
new file mode 100644
index 00000000..fa372fee
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-node.yaml
@@ -0,0 +1,42 @@
+services:
+ rollups-node-migration:
+ image: ${CARTESI_SDK_IMAGE}
+ command: ["cartesi-rollups-cli", "db", "upgrade"]
+ depends_on:
+ database:
+ condition: service_healthy
+ restart: "no"
+ env_file:
+ - ${CARTESI_BIN_PATH}/compose/rollups/default.env
+
+ rollups-node:
+ image: ${CARTESI_SDK_IMAGE}
+ depends_on:
+ rollups-node-migration:
+ condition: service_completed_successfully
+ anvil:
+ condition: service_healthy
+ expose:
+ - "10000"
+ - "10011"
+ - "10012"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:10000/livez"]
+ interval: 10s
+ timeout: 1s
+ retries: 5
+ command: ["cartesi-rollups-node"]
+ env_file:
+ - ${CARTESI_BIN_PATH}/compose/rollups/default.env
+
+ proxy:
+ depends_on:
+ rollups-node:
+ condition: service_healthy
+ volumes:
+ - ./proxy/rollups-node.yaml:/etc/traefik/conf.d/rollups-node.yaml
+
+ prompt:
+ image: debian:bookworm-slim
+ environment:
+ PROMPT_TXT_02_INSPECT: "Inspect running at http://localhost:${CARTESI_LISTEN_PORT}/inspect//"
diff --git a/apps/cli/src/compose/rollups/docker-compose-paymaster.yaml b/apps/cli/src/compose/rollups/docker-compose-paymaster.yaml
new file mode 100644
index 00000000..f9ef12a8
--- /dev/null
+++ b/apps/cli/src/compose/rollups/docker-compose-paymaster.yaml
@@ -0,0 +1,16 @@
+services:
+ mock-verifying-paymaster:
+ image: ${CARTESI_SDK_IMAGE}
+ command: "mock-verifying-paymaster"
+ environment:
+ - ALTO_RPC=http://alto:4337
+ - ANVIL_RPC=http://anvil:8545
+
+ prompt:
+ image: debian:bookworm-slim
+ environment:
+ PROMPT_TXT_07_PAYMASTER: "Paymaster running at http://localhost:${CARTESI_LISTEN_PORT}/paymaster/"
+
+ proxy:
+ volumes:
+ - ./proxy/paymaster.yaml:/etc/traefik/conf.d/paymaster.yaml
diff --git a/apps/cli/src/node/docker-compose-prompt.yaml b/apps/cli/src/compose/rollups/docker-compose-prompt.yaml
similarity index 100%
rename from apps/cli/src/node/docker-compose-prompt.yaml
rename to apps/cli/src/compose/rollups/docker-compose-prompt.yaml
diff --git a/apps/cli/src/node/docker-compose-proxy.yaml b/apps/cli/src/compose/rollups/docker-compose-proxy.yaml
similarity index 50%
rename from apps/cli/src/node/docker-compose-proxy.yaml
rename to apps/cli/src/compose/rollups/docker-compose-proxy.yaml
index 47462a87..23971aa0 100644
--- a/apps/cli/src/node/docker-compose-proxy.yaml
+++ b/apps/cli/src/compose/rollups/docker-compose-proxy.yaml
@@ -1,24 +1,6 @@
services:
- traefik-config-generator:
- image: debian:bookworm-slim
- command:
- - /bin/bash
- - -c
- - |
- for cfg_file in $${!TRAEFIK_CONFIG_*}
- do
- declare -n cfg_content=$$cfg_file
- _cfg_file=$${cfg_file:15}
- echo "$$cfg_content" > /etc/traefik/conf.d/$${_cfg_file,,}.yaml
- done
- volumes:
- - traefik-conf:/etc/traefik/conf.d
-
proxy:
- image: traefik:v2.10
- depends_on:
- traefik-config-generator:
- condition: service_completed_successfully
+ image: traefik:v3.3.4
healthcheck:
test: ["CMD", "traefik", "healthcheck", "--ping"]
interval: 5s
@@ -36,13 +18,8 @@ services:
]
ports:
- ${CARTESI_LISTEN_PORT:-8080}:8088
- volumes:
- - traefik-conf:/etc/traefik/conf.d
prompt:
depends_on:
proxy:
condition: service_healthy
-
-volumes:
- traefik-conf: {}
diff --git a/apps/cli/src/compose/rollups/proxy/bundler.yaml b/apps/cli/src/compose/rollups/proxy/bundler.yaml
new file mode 100644
index 00000000..ff4df94d
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/bundler.yaml
@@ -0,0 +1,17 @@
+http:
+ routers:
+ bundler:
+ rule: "PathPrefix(`/bundler`)"
+ middlewares:
+ - "remove-bundler-prefix"
+ service: bundler
+ middlewares:
+ remove-bundler-prefix:
+ replacePathRegex:
+ regex: "^/bundler/(.*)"
+ replacement: "/$1"
+ services:
+ bundler:
+ loadBalancer:
+ servers:
+ - url: "http://alto:4337"
diff --git a/apps/cli/src/compose/rollups/proxy/espresso.yaml b/apps/cli/src/compose/rollups/proxy/espresso.yaml
new file mode 100644
index 00000000..6b561f98
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/espresso.yaml
@@ -0,0 +1,56 @@
+http:
+ routers:
+ espresso-builder:
+ rule: "PathPrefix(`/espresso/builder`)"
+ middlewares:
+ - "remove-espresso-builder-prefix"
+ service: espresso-builder
+ espresso-dev:
+ rule: "PathPrefix(`/espresso/dev`)"
+ middlewares:
+ - "remove-espresso-dev-prefix"
+ service: espresso-dev
+ espresso-prover:
+ rule: "PathPrefix(`/espresso/prover`)"
+ middlewares:
+ - "remove-espresso-prover-prefix"
+ service: espresso-prover
+ espresso-sequencer:
+ rule: "PathPrefix(`/espresso/sequencer`)"
+ middlewares:
+ - "remove-espresso-sequencer-prefix"
+ service: espresso-sequencer
+ middlewares:
+ remove-espresso-builder-prefix:
+ replacePathRegex:
+ regex: "^/espresso/builder/(.*)"
+ replacement: "/$1"
+ remove-espresso-dev-prefix:
+ replacePathRegex:
+ regex: "^/espresso/dev/(.*)"
+ replacement: "/$1"
+ remove-espresso-prover-prefix:
+ replacePathRegex:
+ regex: "^/espresso/prover/(.*)"
+ replacement: "/$1"
+ remove-espresso-sequencer-prefix:
+ replacePathRegex:
+ regex: "^/espresso/sequencer/(.*)"
+ replacement: "/$1"
+ services:
+ espresso-builder:
+ loadBalancer:
+ servers:
+ - url: "http://espresso:8771"
+ espresso-dev:
+ loadBalancer:
+ servers:
+ - url: "http://espresso:20000"
+ espresso-prover:
+ loadBalancer:
+ servers:
+ - url: "http://espresso:8772"
+ espresso-sequencer:
+ loadBalancer:
+ servers:
+ - url: "http://espresso:8770"
diff --git a/apps/cli/src/compose/rollups/proxy/explorer-api.yaml b/apps/cli/src/compose/rollups/proxy/explorer-api.yaml
new file mode 100644
index 00000000..f68bb632
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/explorer-api.yaml
@@ -0,0 +1,17 @@
+http:
+ routers:
+ explorer-api:
+ rule: "PathPrefix(`/explorer-api`)"
+ middlewares:
+ - "remove-explorer-api-prefix"
+ service: explorer-api
+ middlewares:
+ remove-explorer-api-prefix:
+ replacePathRegex:
+ regex: "^/explorer-api/(.*)"
+ replacement: "/$1"
+ services:
+ explorer-api:
+ loadBalancer:
+ servers:
+ - url: "http://explorer_api:4350"
diff --git a/apps/cli/src/compose/rollups/proxy/explorer.yaml b/apps/cli/src/compose/rollups/proxy/explorer.yaml
new file mode 100644
index 00000000..731f723e
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/explorer.yaml
@@ -0,0 +1,10 @@
+http:
+ routers:
+ explorer:
+ rule: "PathPrefix(`/explorer`)"
+ service: explorer
+ services:
+ explorer:
+ loadBalancer:
+ servers:
+ - url: "http://explorer:3000"
diff --git a/apps/cli/src/compose/rollups/proxy/graphql.yaml b/apps/cli/src/compose/rollups/proxy/graphql.yaml
new file mode 100644
index 00000000..e9065b4e
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/graphql.yaml
@@ -0,0 +1,10 @@
+http:
+ routers:
+ graphql:
+ rule: "PathPrefix(`/graphql`)"
+ service: graphql
+ services:
+ graphql:
+ loadBalancer:
+ servers:
+ - url: "http://graphql:8080"
diff --git a/apps/cli/src/compose/rollups/proxy/paymaster.yaml b/apps/cli/src/compose/rollups/proxy/paymaster.yaml
new file mode 100644
index 00000000..16f5c187
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/paymaster.yaml
@@ -0,0 +1,17 @@
+http:
+ routers:
+ paymaster:
+ rule: "PathPrefix(`/paymaster`)"
+ middlewares:
+ - "remove-paymaster-prefix"
+ service: paymaster
+ middlewares:
+ remove-paymaster-prefix:
+ replacePathRegex:
+ regex: "^/paymaster/(.*)"
+ replacement: "/$1"
+ services:
+ paymaster:
+ loadBalancer:
+ servers:
+ - url: "http://mock-verifying-paymaster:3000"
diff --git a/apps/cli/src/compose/rollups/proxy/rollups-node.yaml b/apps/cli/src/compose/rollups/proxy/rollups-node.yaml
new file mode 100644
index 00000000..1f254e22
--- /dev/null
+++ b/apps/cli/src/compose/rollups/proxy/rollups-node.yaml
@@ -0,0 +1,17 @@
+http:
+ routers:
+ inspect_server:
+ rule: "PathPrefix(`/inspect`)"
+ service: inspect_server
+ rpc_server:
+ rule: "PathPrefix(`/rpc`)"
+ service: rpc_server
+ services:
+ inspect_server:
+ loadBalancer:
+ servers:
+ - url: "http://rollups-node:10012/inspect"
+ rpc_server:
+ loadBalancer:
+ servers:
+ - url: "http://rollups-node:10011/inspect"
diff --git a/apps/cli/src/config.ts b/apps/cli/src/config.ts
index 19d12e78..9fde4d57 100644
--- a/apps/cli/src/config.ts
+++ b/apps/cli/src/config.ts
@@ -74,7 +74,7 @@ export class InvalidStringArrayError extends Error {
const DEFAULT_FORMAT = "ext2";
const DEFAULT_RAM = "128Mi";
const DEFAULT_RAM_IMAGE = "/usr/share/cartesi-machine/images/linux.bin";
-export const DEFAULT_SDK = "cartesi/sdk:0.12.0-alpha.3";
+export const DEFAULT_SDK = "cartesi/sdk:0.12.0-alpha.10";
type Builder = "directory" | "docker" | "empty" | "none" | "tar";
type DriveFormat = "ext2" | "sqfs";
diff --git a/apps/cli/src/exec/rollups.ts b/apps/cli/src/exec/rollups.ts
new file mode 100644
index 00000000..de144622
--- /dev/null
+++ b/apps/cli/src/exec/rollups.ts
@@ -0,0 +1,62 @@
+import { execa } from "execa";
+import { Address, Hash } from "viem";
+import { getMachineHash } from "../base.js";
+
+export type RollupsDeployment = {
+ id: number;
+ name: string;
+ address: Address;
+ templateHash: Hash;
+ epochLength: number;
+ state: "ENABLED" | "DISABLED";
+};
+
+type ComposeParams = {
+ projectName?: string;
+};
+
+export const getDeployments = async (
+ options?: ComposeParams,
+): Promise => {
+ const projectName = options?.projectName ?? "cartesi-rollups";
+ try {
+ const { stdout } = await execa("docker", [
+ "compose",
+ "--project-name",
+ projectName,
+ "exec",
+ "rollups-node",
+ "cartesi-rollups-cli",
+ "app",
+ "list",
+ ]);
+ return JSON.parse(stdout).map((deployment: any) => ({
+ id: deployment.ID,
+ name: deployment.Name,
+ address: deployment.IApplicationAddress,
+ templateHash: deployment.TemplateHash,
+ epochLength: deployment.EpochLength,
+ state: deployment.State,
+ }));
+ } catch (e: unknown) {
+ return [];
+ }
+};
+
+export const getApplicationDeployment = async (
+ options?: ComposeParams,
+): Promise => {
+ const machineHash = getMachineHash();
+ if (!machineHash) {
+ return undefined;
+ }
+ const deployments = await getDeployments(options);
+ return deployments.find(
+ (deployment) => deployment.templateHash === machineHash,
+ );
+};
+
+export const getApplicationAddress = async (): Promise => {
+ const deployment = await getApplicationDeployment();
+ return deployment?.address;
+};
diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts
index 8ce98cdb..9bfbf5b9 100755
--- a/apps/cli/src/index.ts
+++ b/apps/cli/src/index.ts
@@ -2,16 +2,17 @@
import { Command } from "@commander-js/extra-typings";
import { createRequire } from "node:module";
-import { registerAddressBookCommand } from "./commands/address-book.js";
-import { registerBuildCommand } from "./commands/build.js";
-import { registerCleanCommand } from "./commands/clean.js";
-import { registerCreateCommand } from "./commands/create.js";
-import { registerDeployCommand } from "./commands/deploy.js";
-import { registerDoctorCommand } from "./commands/doctor.js";
-import { registerHashCommand } from "./commands/hash.js";
-import { registerRunCommand } from "./commands/run.js";
-import { registerSendCommand } from "./commands/send.js";
-import { registerShellCommand } from "./commands/shell.js";
+import { createAddressBookCommand } from "./commands/address-book.js";
+import { createBuildCommand } from "./commands/build.js";
+import { createCleanCommand } from "./commands/clean.js";
+import { createCreateCommand } from "./commands/create.js";
+import { createDeployCommand } from "./commands/deploy.js";
+import { createDoctorCommand } from "./commands/doctor.js";
+import { createHashCommand } from "./commands/hash.js";
+import { createRollupsCommand } from "./commands/rollups.js";
+import { createRunCommand } from "./commands/run.js";
+import { createSendCommand } from "./commands/send.js";
+import { createShellCommand } from "./commands/shell.js";
// Use `createRequire` to import JSON in ESM
const require = createRequire(import.meta.url);
@@ -30,18 +31,18 @@ const splash = String.raw` .
const program = new Command()
.name("cartesi")
.version(pkg.version)
- .addHelpText("before", splash);
-
-registerAddressBookCommand(program);
-registerBuildCommand(program);
-registerCleanCommand(program);
-registerCreateCommand(program);
-registerDeployCommand(program);
-registerDoctorCommand(program);
-registerHashCommand(program);
-registerRunCommand(program);
-registerSendCommand(program);
-registerShellCommand(program);
+ .addHelpText("before", splash)
+ .addCommand(createAddressBookCommand())
+ .addCommand(createBuildCommand())
+ .addCommand(createCleanCommand())
+ .addCommand(createCreateCommand())
+ .addCommand(createDeployCommand(), { hidden: true })
+ .addCommand(createDoctorCommand())
+ .addCommand(createHashCommand())
+ .addCommand(createRollupsCommand())
+ .addCommand(createRunCommand(), { hidden: true })
+ .addCommand(createSendCommand())
+ .addCommand(createShellCommand());
// Global error handling
process.on("uncaughtException", (err) => {
diff --git a/apps/cli/src/node/DockerfileDeploy.txt b/apps/cli/src/node/DockerfileDeploy.txt
deleted file mode 100644
index d1412cb2..00000000
--- a/apps/cli/src/node/DockerfileDeploy.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM cartesi/rollups-node:1.5.1
-ENV CARTESI_SNAPSHOT_DIR=/usr/share/rollups-node/snapshot
-ENV CARTESI_HTTP_ADDRESS=0.0.0.0
-COPY --chown=cartesi:cartesi . ${CARTESI_SNAPSHOT_DIR}
diff --git a/apps/cli/src/node/default.env b/apps/cli/src/node/default.env
deleted file mode 100644
index a415d636..00000000
--- a/apps/cli/src/node/default.env
+++ /dev/null
@@ -1,27 +0,0 @@
-# cartesi/rollups-node
-CARTESI_LOG_LEVEL="${CARTESI_LOG_LEVEL:-error}"
-CARTESI_HTTP_ADDRESS="${CARTESI_HTTP_ADDRESS:-0.0.0.0}"
-CARTESI_HTTP_PORT="${CARTESI_HTTP_PORT:-10000}"
-CARTESI_FEATURE_HOST_MODE="${CARTESI_FEATURE_HOST_MODE:-false}"
-CARTESI_FEATURE_READER_MODE_ENABLED="${CARTESI_FEATURE_READER_MODE_ENABLED:-false}"
-CARTESI_FEATURE_DISABLE_CLAIMER="${CARTESI_FEATURE_DISABLE_CLAIMER:-false}"
-CARTESI_FEATURE_DISABLE_MACHINE_HASH_CHECK="${CARTESI_FEATURE_DISABLE_MACHINE_HASH_CHECK:-true}"
-CARTESI_EPOCH_LENGTH="${CARTESI_EPOCH_LENGTH:-720}"
-CARTESI_BLOCKCHAIN_ID="${CARTESI_BLOCKCHAIN_ID:-31337}"
-CARTESI_BLOCKCHAIN_HTTP_ENDPOINT="${CARTESI_BLOCKCHAIN_HTTP_ENDPOINT:-http://anvil:8545}"
-CARTESI_BLOCKCHAIN_WS_ENDPOINT="${CARTESI_BLOCKCHAIN_WS_ENDPOINT:-ws://anvil:8545}"
-CARTESI_BLOCKCHAIN_IS_LEGACY="${CARTESI_BLOCKCHAIN_IS_LEGACY:-false}"
-CARTESI_BLOCKCHAIN_FINALITY_OFFSET="${CARTESI_BLOCKCHAIN_FINALITY_OFFSET:-0}"
-CARTESI_BLOCKCHAIN_BLOCK_TIMEOUT="${CARTESI_BLOCKCHAIN_BLOCK_TIMEOUT:-60}"
-CARTESI_CONTRACTS_APPLICATION_ADDRESS="${CARTESI_CONTRACTS_APPLICATION_ADDRESS:-0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e}"
-CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER="${CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER:-22}"
-CARTESI_CONTRACTS_HISTORY_ADDRESS="${CARTESI_CONTRACTS_HISTORY_ADDRESS:-0x325272217ae6815b494bf38ced004c5eb8a7cda7}"
-CARTESI_CONTRACTS_AUTHORITY_ADDRESS="${CARTESI_CONTRACTS_AUTHORITY_ADDRESS:-0x58c93f83fb3304730c95aad2e360cdb88b782010}"
-CARTESI_CONTRACTS_INPUT_BOX_ADDRESS="${CARTESI_CONTRACTS_INPUT_BOX_ADDRESS:-0x59b22D57D4f067708AB0c00552767405926dc768}"
-CARTESI_SNAPSHOT_DIR="${CARTESI_SNAPSHOT_DIR:-/usr/share/cartesi/snapshot}"
-CARTESI_AUTH_MNEMONIC="${CARTESI_AUTH_MNEMONIC:-test test test test test test test test test test test junk}"
-CARTESI_POSTGRES_ENDPOINT="${CARTESI_POSTGRES_ENDPOINT:-postgres://postgres:password@database:5432/postgres}"
-CARTESI_EXPERIMENTAL_SERVER_MANAGER_BYPASS_LOG="${CARTESI_EXPERIMENTAL_SERVER_MANAGER_BYPASS_LOG:-false}"
-
-# server-manager
-SM_DEADLINE_MACHINE="${SM_DEADLINE_MACHINE:-30000}"
diff --git a/apps/cli/src/node/docker-compose-anvil.yaml b/apps/cli/src/node/docker-compose-anvil.yaml
deleted file mode 100644
index d2f64a32..00000000
--- a/apps/cli/src/node/docker-compose-anvil.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-services:
- anvil:
- image: cartesi/sdk:0.12.0-alpha.3
- command:
- [
- "devnet",
- "--block-time",
- "${BLOCK_TIME:-5}",
- "${ANVIL_VERBOSITY:---silent}",
- ]
- healthcheck:
- test: ["CMD", "eth_isready"]
- interval: 10s
- timeout: 1s
- retries: 5
- environment:
- ANVIL_IP_ADDR: 0.0.0.0
- ports:
- - 8545:8545
-
- dapp_deployer:
- image: cartesi/sdk:0.12.0-alpha.3
- restart: on-failure
- depends_on:
- anvil:
- condition: service_started
- command:
- [
- "cast",
- "send",
- "--rpc-url",
- "http://anvil:8545",
- "--private-key",
- "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
- "0x4C11C7F82D6D56a726f9B53dd99af031AFd86BB6",
- "deployContracts(address,address,bytes32,bytes32)",
- "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
- "720",
- "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- ]
-
- prompt:
- image: debian:bookworm-slim
- environment:
- PROMPT_TXT_01_ANVIL: "Anvil running at http://localhost:8545"
-
-volumes:
- blockchain-data: {}
diff --git a/apps/cli/src/node/docker-compose-envfile.yaml b/apps/cli/src/node/docker-compose-envfile.yaml
deleted file mode 100644
index 89bff152..00000000
--- a/apps/cli/src/node/docker-compose-envfile.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-services:
- validator:
- env_file:
- - ./.cartesi.env
diff --git a/apps/cli/src/node/docker-compose-espresso.yaml b/apps/cli/src/node/docker-compose-espresso.yaml
deleted file mode 100644
index f64091af..00000000
--- a/apps/cli/src/node/docker-compose-espresso.yaml
+++ /dev/null
@@ -1,127 +0,0 @@
-services:
- espresso_database_creator:
- image: postgres:16-alpine
- command: ["createdb", "sequencer"]
- depends_on:
- database:
- condition: service_healthy
- environment:
- PGHOST: ${PGHOST:-database}
- PGPORT: ${PGPORT:-5432}
- PGUSER: ${PGUSER:-postgres}
- PGPASSWORD: ${PGPASSWORD:-password}
- PGDATABASE: ${PGDATABASE:-postgres}
-
- validator:
- environment:
- CARTESI_FEATURE_INPUT_READER_ENABLED: false
- espresso:
- image: cartesi/sdk:0.12.0-alpha.3
- command: ["/usr/local/bin/espresso-dev-node"]
- deploy:
- resources:
- limits:
- cpus: "4"
- memory: "1G"
- ports:
- - 8770:8770
- - 8771:8771
- - 8772:8772
- - 20000:20000
- depends_on:
- espresso_database_creator:
- condition: service_completed_successfully
- database:
- condition: service_healthy
- environment:
- ESPRESSO_SEQUENCER_L1_PROVIDER: ${CARTESI_BLOCKCHAIN_HTTP_ENDPOINT:-http://anvil:8545}
- ESPRESSO_SEQUENCER_API_PORT: 8770
- ESPRESSO_BUILDER_PORT: 8771
- ESPRESSO_PROVER_PORT: 8772
- ESPRESSO_DEV_NODE_PORT: 20000
- ESPRESSO_SEQUENCER_POSTGRES_HOST: database
- ESPRESSO_SEQUENCER_POSTGRES_PORT: 5432
- ESPRESSO_SEQUENCER_POSTGRES_USER: postgres
- ESPRESSO_SEQUENCER_POSTGRES_PASSWORD: password
- ESPRESSO_SEQUENCER_POSTGRES_DATABASE: sequencer
- ESPRESSO_SEQUENCER_ETH_MNEMONIC: ${CARTESI_AUTH_MNEMONIC:-test test test test test test test test test test test junk}
-
- prompt:
- image: debian:bookworm-slim
- environment:
- PROMPT_TXT_07_ESPRESSO: "Espresso running at http://localhost:${CARTESI_LISTEN_PORT}/espresso/"
-
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_ESPRESSO_DEV: |
- http:
- routers:
- espresso-dev:
- rule: "PathPrefix(`/espresso/dev`)"
- middlewares:
- - "remove-espresso-dev-prefix"
- service: espresso-dev
- middlewares:
- remove-espresso-dev-prefix:
- replacePathRegex:
- regex: "^/espresso/dev/(.*)"
- replacement: "/$1"
- services:
- espresso-dev:
- loadBalancer:
- servers:
- - url: "http://espresso:20000"
- TRAEFIK_CONFIG_ESPRESSO_SEQUENCER: |
- http:
- routers:
- espresso-sequencer:
- rule: "PathPrefix(`/espresso/sequencer`)"
- middlewares:
- - "remove-espresso-sequencer-prefix"
- service: espresso-sequencer
- middlewares:
- remove-espresso-sequencer-prefix:
- replacePathRegex:
- regex: "^/espresso/sequencer/(.*)"
- replacement: "/$1"
- services:
- espresso-sequencer:
- loadBalancer:
- servers:
- - url: "http://espresso:8770"
- TRAEFIK_CONFIG_ESPRESSO_BUILDER: |
- http:
- routers:
- espresso-builder:
- rule: "PathPrefix(`/espresso/builder`)"
- middlewares:
- - "remove-espresso-builder-prefix"
- service: espresso-builder
- middlewares:
- remove-espresso-builder-prefix:
- replacePathRegex:
- regex: "^/espresso/builder/(.*)"
- replacement: "/$1"
- services:
- espresso-builder:
- loadBalancer:
- servers:
- - url: "http://espresso:8771"
- TRAEFIK_CONFIG_ESPRESSO_PROVER: |
- http:
- routers:
- espresso-prover:
- rule: "PathPrefix(`/espresso/prover`)"
- middlewares:
- - "remove-espresso-prover-prefix"
- service: espresso-prover
- middlewares:
- remove-espresso-prover-prefix:
- replacePathRegex:
- regex: "^/espresso/prover/(.*)"
- replacement: "/$1"
- services:
- espresso-prover:
- loadBalancer:
- servers:
- - url: "http://espresso:8772"
diff --git a/apps/cli/src/node/docker-compose-host.yaml b/apps/cli/src/node/docker-compose-host.yaml
deleted file mode 100644
index 67242ffd..00000000
--- a/apps/cli/src/node/docker-compose-host.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-services:
- validator:
- environment:
- CARTESI_FEATURE_HOST_MODE: true
- command: ["cartesi-rollups-node"]
-
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_HOST_RUNNER: |
- http:
- routers:
- host-runner:
- rule: "PathPrefix(`/host-runner`)"
- middlewares:
- - "replace-host-runner-prefix"
- service: host-runner
- middlewares:
- replace-host-runner-prefix:
- replacePathRegex:
- regex: "^/host-runner/(.*)"
- replacement: "/rollup/$1"
- services:
- host-runner:
- loadBalancer:
- servers:
- - url: "http://validator:10000"
-
- prompt:
- environment:
- PROMPT_TXT_05_HOST_RUNNER: "Host Runner running at http://localhost:${CARTESI_LISTEN_PORT}/host-runner"
diff --git a/apps/cli/src/node/docker-compose-paymaster.yaml b/apps/cli/src/node/docker-compose-paymaster.yaml
deleted file mode 100644
index 3b819afe..00000000
--- a/apps/cli/src/node/docker-compose-paymaster.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-services:
- mock-verifying-paymaster:
- image: cartesi/sdk:0.12.0-alpha.3
- command: "mock-verifying-paymaster"
- environment:
- - ALTO_RPC=http://alto:4337
- - ANVIL_RPC=http://anvil:8545
-
- prompt:
- image: debian:bookworm-slim
- environment:
- PROMPT_TXT_07_PAYMASTER: "Paymaster running at http://localhost:${CARTESI_LISTEN_PORT}/paymaster/"
-
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_PAYMASTER: |
- http:
- routers:
- paymaster:
- rule: "PathPrefix(`/paymaster`)"
- middlewares:
- - "remove-paymaster-prefix"
- service: paymaster
- middlewares:
- remove-paymaster-prefix:
- replacePathRegex:
- regex: "^/paymaster/(.*)"
- replacement: "/$1"
- services:
- paymaster:
- loadBalancer:
- servers:
- - url: "http://mock-verifying-paymaster:3000"
diff --git a/apps/cli/src/node/docker-compose-snapshot-volume.yaml b/apps/cli/src/node/docker-compose-snapshot-volume.yaml
deleted file mode 100644
index 0862b2a3..00000000
--- a/apps/cli/src/node/docker-compose-snapshot-volume.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-services:
- dapp_deployer:
- volumes:
- - ./.cartesi/image:/usr/share/cartesi/snapshot:ro
-
- validator:
- volumes:
- - ./.cartesi/image:/tmp/snapshot:ro
diff --git a/apps/cli/src/node/docker-compose-validator-cpus.yaml b/apps/cli/src/node/docker-compose-validator-cpus.yaml
deleted file mode 100644
index eec5a1f5..00000000
--- a/apps/cli/src/node/docker-compose-validator-cpus.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-services:
- validator:
- deploy:
- resources:
- limits:
- cpus: "${CARTESI_VALIDATOR_CPUS}"
diff --git a/apps/cli/src/node/docker-compose-validator-memory.yaml b/apps/cli/src/node/docker-compose-validator-memory.yaml
deleted file mode 100644
index 7334ef48..00000000
--- a/apps/cli/src/node/docker-compose-validator-memory.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-services:
- validator:
- deploy:
- resources:
- limits:
- memory: "${CARTESI_VALIDATOR_MEMORY}M"
diff --git a/apps/cli/src/node/docker-compose-validator.yaml b/apps/cli/src/node/docker-compose-validator.yaml
deleted file mode 100644
index 81f7dba8..00000000
--- a/apps/cli/src/node/docker-compose-validator.yaml
+++ /dev/null
@@ -1,59 +0,0 @@
-services:
- validator:
- image: cartesi/rollups-node:1.5.1
- depends_on:
- dapp_deployer:
- condition: service_completed_successfully
- expose:
- - "10000"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:10000/healthz"]
- interval: 10s
- timeout: 1s
- retries: 5
- command:
- - /bin/bash
- - -c
- - |
- mkdir -p "$CARTESI_SNAPSHOT_DIR"
- cp --recursive /tmp/snapshot/* "$CARTESI_SNAPSHOT_DIR"
- exec cartesi-rollups-node
-
- env_file:
- - ${CARTESI_BIN_PATH}/node/default.env
-
- proxy:
- depends_on:
- validator:
- condition: service_healthy
-
- prompt:
- image: debian:bookworm-slim
- environment:
- PROMPT_TXT_02_GRAPHQL: "GraphQL running at http://localhost:${CARTESI_LISTEN_PORT}/graphql"
- PROMPT_TXT_03_INSPECT: "Inspect running at http://localhost:${CARTESI_LISTEN_PORT}/inspect/"
-
- traefik-config-generator:
- environment:
- TRAEFIK_CONFIG_INSPECT_SERVER: |
- http:
- routers:
- inspect_server:
- rule: "PathPrefix(`/inspect`)"
- service: inspect_server
- services:
- inspect_server:
- loadBalancer:
- servers:
- - url: "http://validator:10000/inspect"
- TRAEFIK_CONFIG_GRAPHQL_SERVER: |
- http:
- routers:
- graphql_server:
- rule: "PathPrefix(`/graphql`)"
- service: graphql_server
- services:
- graphql_server:
- loadBalancer:
- servers:
- - url: "http://validator:10000/graphql"
diff --git a/apps/cli/src/wallet.ts b/apps/cli/src/wallet.ts
index 509c59db..d947d835 100644
--- a/apps/cli/src/wallet.ts
+++ b/apps/cli/src/wallet.ts
@@ -16,11 +16,11 @@ import {
} from "viem";
import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts";
import {
+ anvil,
arbitrum,
arbitrumSepolia,
base,
baseSepolia,
- foundry,
mainnet,
optimism,
optimismSepolia,
@@ -47,7 +47,7 @@ export const supportedChains = (options?: SupportedChainsOptions): Chain[] => {
const chains: Chain[] = [];
if (options.includeDevnet) {
- chains.push(foundry);
+ chains.push(anvil);
}
if (options.includeTestnets) {
chains.push(arbitrumSepolia, baseSepolia, optimismSepolia, sepolia);
@@ -63,7 +63,7 @@ export const DEFAULT_DEVNET_MNEMONIC =
export type WalletType = "mnemonic" | "private-key";
const walletChoices = (chain: Chain): Choice[] => {
- const dev = chain.id === foundry.id;
+ const dev = chain.id === anvil.id;
return [
{
name: `Mnemonic${dev ? "" : chalk.red(" (UNSAFE)")}`,
@@ -76,6 +76,24 @@ const walletChoices = (chain: Chain): Choice[] => {
];
};
+/**
+ * Test if the default RPC URL for a chain is working
+ * @param chain chain to test
+ * @returns true if the default RPC URL is valid, false otherwise
+ */
+const testDefaultPublicClient = async (chain: Chain): Promise => {
+ try {
+ const publicClient = viemCreatePublicClient({
+ transport: http(chain.rpcUrls.default.http[0]),
+ chain,
+ });
+ const chainId = await publicClient.getChainId();
+ return chainId === chain.id;
+ } catch (e) {
+ return false;
+ }
+};
+
export interface EthereumPromptOptions {
chain?: Chain;
rpcUrl?: string;
@@ -90,7 +108,7 @@ export type TransactionPrompt = (
) => Promise;
const selectChain = async (options: EthereumPromptOptions): Promise => {
- // if development mode, include foundry as an option
+ // if development mode, include anvil as an option
const chains = supportedChains({ includeDevnet: true });
if (options.chain) {
@@ -122,10 +140,18 @@ const selectTransport = async (
if (options.rpcUrl) {
return http(options.rpcUrl);
} else {
+ const defaultUrl = chain.rpcUrls.default.http[0];
+
+ // if the chain is anvil and the default URL is valid, use it without asking the user
+ if (chain.id === anvil.id && (await testDefaultPublicClient(chain))) {
+ return http(defaultUrl);
+ }
+
const url = await input({
message: "RPC URL",
- default: chain.rpcUrls.default.http[0],
+ default: defaultUrl,
});
+
return http(url);
}
};
@@ -215,7 +241,7 @@ const createWalletClient = async (
const mnemonic = await input({
message: "Mnemonic",
default:
- chain.id === 31337 ? DEFAULT_DEVNET_MNEMONIC : undefined,
+ chain.id === anvil.id ? DEFAULT_DEVNET_MNEMONIC : undefined,
});
// select account from mnemonic
diff --git a/package.json b/package.json
index 74c0b510..40aef320 100644
--- a/package.json
+++ b/package.json
@@ -15,12 +15,12 @@
},
"devDependencies": {
"@cartesi/eslint-config": "workspace:*",
- "@changesets/cli": "^2.27.9",
- "prettier": "^3.3.3",
- "turbo": "^2.1.3"
+ "@changesets/cli": "^2.28.1",
+ "prettier": "^3.5.3",
+ "turbo": "^2.4.4"
},
"engines": {
"node": ">=18.0.0"
},
- "packageManager": "pnpm@9.12.2"
+ "packageManager": "pnpm@10.5.2"
}
diff --git a/packages/mock-verifying-paymaster/docker-compose.yaml b/packages/mock-verifying-paymaster/docker-compose.yaml
index 722c74cb..6318f1e4 100644
--- a/packages/mock-verifying-paymaster/docker-compose.yaml
+++ b/packages/mock-verifying-paymaster/docker-compose.yaml
@@ -1,6 +1,6 @@
services:
anvil:
- image: cartesi/sdk:0.12.0-alpha.3
+ image: ${SDK_IMAGE}
command: ["devnet", "--block-time", "${BLOCK_TIME:-5}"]
healthcheck:
test: ["CMD", "eth_isready"]
@@ -13,7 +13,7 @@ services:
- 8545:8545
alto:
- image: cartesi/sdk:0.12.0-alpha.3
+ image: ${SDK_IMAGE}
command:
[
"alto",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 045dea6c..aa872471 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,14 +12,14 @@ importers:
specifier: workspace:*
version: link:packages/eslint-config
'@changesets/cli':
- specifier: ^2.27.9
- version: 2.27.9
+ specifier: ^2.28.1
+ version: 2.28.1
prettier:
- specifier: ^3.3.3
- version: 3.3.3
+ specifier: ^3.5.3
+ version: 3.5.3
turbo:
- specifier: ^2.1.3
- version: 2.2.3
+ specifier: ^2.4.4
+ version: 2.4.4
apps/cli:
dependencies:
@@ -27,26 +27,26 @@ importers:
specifier: ^13.1.0
version: 13.1.0(commander@13.1.0)
'@inquirer/confirm':
- specifier: ^5.0.0
- version: 5.0.0(@types/node@22.7.8)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@22.13.9)
'@inquirer/core':
- specifier: ^10.0.0
- version: 10.0.0(@types/node@22.7.8)
+ specifier: ^10.1.7
+ version: 10.1.7(@types/node@22.13.9)
'@inquirer/input':
- specifier: ^4.0.0
- version: 4.0.0(@types/node@22.7.8)
+ specifier: ^4.1.6
+ version: 4.1.6(@types/node@22.13.9)
'@inquirer/select':
- specifier: ^4.0.0
- version: 4.0.0(@types/node@22.7.8)
+ specifier: ^4.0.9
+ version: 4.0.9(@types/node@22.13.9)
'@inquirer/type':
- specifier: ^3.0.0
- version: 3.0.0(@types/node@22.7.8)
+ specifier: ^3.0.4
+ version: 3.0.4(@types/node@22.13.9)
bytes:
specifier: ^3.1.2
version: 3.1.2
chalk:
- specifier: ^5.3.0
- version: 5.3.0
+ specifier: ^5.4.1
+ version: 5.4.1
cli-table3:
specifier: ^0.6.5
version: 0.6.5
@@ -54,38 +54,38 @@ importers:
specifier: ^13.1.0
version: 13.1.0
execa:
- specifier: ^9.4.1
- version: 9.4.1
+ specifier: ^9.5.2
+ version: 9.5.2
fs-extra:
- specifier: ^11.2.0
- version: 11.2.0
+ specifier: ^11.3.0
+ version: 11.3.0
giget:
+ specifier: ^2.0.0
+ version: 2.0.0
+ lookpath:
specifier: ^1.2.3
version: 1.2.3
- lookpath:
- specifier: ^1.2.2
- version: 1.2.2
open:
specifier: ^10.1.0
version: 10.1.0
ora:
- specifier: ^8.1.0
- version: 8.1.0
+ specifier: ^8.2.0
+ version: 8.2.0
progress-stream:
specifier: ^2.0.0
version: 2.0.0
semver:
- specifier: ^7.6.3
- version: 7.6.3
+ specifier: ^7.7.1
+ version: 7.7.1
smol-toml:
- specifier: ^1.3.0
- version: 1.3.0
+ specifier: ^1.3.1
+ version: 1.3.1
tmp:
specifier: ^0.2.3
version: 0.2.3
viem:
- specifier: ^2.21.27
- version: 2.21.32(typescript@5.6.3)(zod@3.23.8)
+ specifier: ^2.23.6
+ version: 2.23.6(typescript@5.8.2)(zod@3.23.8)
devDependencies:
'@cartesi/devnet':
specifier: workspace:*
@@ -95,10 +95,10 @@ importers:
version: link:../../packages/eslint-config
'@sunodo/wagmi-plugin-hardhat-deploy':
specifier: ^0.3.0
- version: 0.3.0(abitype@1.0.6(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)
+ version: 0.3.0(abitype@1.0.8(typescript@5.8.2)(zod@3.23.8))(typescript@5.8.2)
'@types/bytes':
- specifier: ^3.1.4
- version: 3.1.4
+ specifier: ^3.1.5
+ version: 3.1.5
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
@@ -106,11 +106,11 @@ importers:
specifier: ^9.0.7
version: 9.0.7
'@types/node':
- specifier: ^22.7.6
- version: 22.7.8
+ specifier: ^22.13.9
+ version: 22.13.9
'@types/node-fetch':
- specifier: ^2.6.11
- version: 2.6.11
+ specifier: ^2.6.12
+ version: 2.6.12
'@types/progress-stream':
specifier: ^2.0.5
version: 2.0.5
@@ -125,10 +125,10 @@ importers:
version: 0.2.6
'@vitest/coverage-istanbul':
specifier: ^2.1.3
- version: 2.1.3(vitest@2.1.3(@types/node@22.7.8))
+ version: 2.1.3(vitest@2.1.3(@types/node@22.13.9))
'@wagmi/cli':
- specifier: ^2.1.16
- version: 2.1.16(typescript@5.6.3)
+ specifier: ^2.2.0
+ version: 2.2.0(typescript@5.8.2)
copyfiles:
specifier: ^2.4.1
version: 2.4.1
@@ -143,19 +143,19 @@ importers:
version: 6.0.1
ts-node:
specifier: ^10.9.2
- version: 10.9.2(@types/node@22.7.8)(typescript@5.6.3)
+ version: 10.9.2(@types/node@22.13.9)(typescript@5.8.2)
tsconfig:
specifier: workspace:*
version: link:../../packages/tsconfig
tslib:
- specifier: ^2.8.0
- version: 2.8.0
+ specifier: ^2.8.1
+ version: 2.8.1
typescript:
- specifier: ^5.6.3
- version: 5.6.3
+ specifier: ^5.8.2
+ version: 5.8.2
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@22.7.8)
+ version: 2.1.3(@types/node@22.13.9)
packages/devnet:
dependencies:
@@ -210,7 +210,7 @@ importers:
version: 7.18.0(eslint@8.57.1)(typescript@5.6.3)
'@vercel/style-guide':
specifier: ^6.0.0
- version: 6.0.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.8.4))
+ version: 6.0.0(eslint@8.57.1)(prettier@3.5.3)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.13.9))
eslint-config-prettier:
specifier: ^9
version: 9.1.0(eslint@8.57.1)
@@ -368,60 +368,60 @@ packages:
'@cartesi/rollups@2.0.0-rc.12':
resolution: {integrity: sha512-s+qguZMN+QU3123toxKVK3UOWviX0N4S52kIEabzNsVimVbShQbycrNbeLC03gC2bat5AoeXxlCvTIrZIYkDqQ==}
- '@changesets/apply-release-plan@7.0.5':
- resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==}
+ '@changesets/apply-release-plan@7.0.10':
+ resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==}
- '@changesets/assemble-release-plan@6.0.4':
- resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==}
+ '@changesets/assemble-release-plan@6.0.6':
+ resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==}
- '@changesets/changelog-git@0.2.0':
- resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
+ '@changesets/changelog-git@0.2.1':
+ resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
- '@changesets/cli@2.27.9':
- resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==}
+ '@changesets/cli@2.28.1':
+ resolution: {integrity: sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==}
hasBin: true
- '@changesets/config@3.0.3':
- resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==}
+ '@changesets/config@3.1.1':
+ resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==}
'@changesets/errors@0.2.0':
resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
- '@changesets/get-dependents-graph@2.1.2':
- resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
+ '@changesets/get-dependents-graph@2.1.3':
+ resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==}
- '@changesets/get-release-plan@4.0.4':
- resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==}
+ '@changesets/get-release-plan@4.0.8':
+ resolution: {integrity: sha512-MM4mq2+DQU1ZT7nqxnpveDMTkMBLnwNX44cX7NSxlXmr7f8hO6/S2MXNiXG54uf/0nYnefv0cfy4Czf/ZL/EKQ==}
'@changesets/get-version-range-type@0.4.0':
resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
- '@changesets/git@3.0.1':
- resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==}
+ '@changesets/git@3.0.2':
+ resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==}
'@changesets/logger@0.1.1':
resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
- '@changesets/parse@0.4.0':
- resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
+ '@changesets/parse@0.4.1':
+ resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==}
- '@changesets/pre@2.0.1':
- resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
+ '@changesets/pre@2.0.2':
+ resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==}
- '@changesets/read@0.6.1':
- resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==}
+ '@changesets/read@0.6.3':
+ resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==}
- '@changesets/should-skip-package@0.1.1':
- resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
+ '@changesets/should-skip-package@0.1.2':
+ resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==}
'@changesets/types@4.1.0':
resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
- '@changesets/types@6.0.0':
- resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
+ '@changesets/types@6.1.0':
+ resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==}
- '@changesets/write@0.3.2':
- resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
+ '@changesets/write@0.4.0':
+ resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
@@ -996,31 +996,54 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
- '@inquirer/confirm@5.0.0':
- resolution: {integrity: sha512-6QEzj6bZg8atviRIL+pR0tODC854cYSjvZxkyCarr8DVaOJPEyuGys7GmEG3W0Rb8kKSQec7P6okt0sJvNneFw==}
+ '@inquirer/confirm@5.1.6':
+ resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==}
engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@inquirer/core@10.0.0':
- resolution: {integrity: sha512-7dwoKCGvgZGHWTZfOj2KLmbIAIdiXP9NTrwGaTO/XDfKMEmyBahZpnombiG6JDHmiOrmK3GLEJRXrWExXCDLmQ==}
+ '@inquirer/core@10.1.7':
+ resolution: {integrity: sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==}
engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@inquirer/figures@1.0.7':
- resolution: {integrity: sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==}
+ '@inquirer/figures@1.0.10':
+ resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==}
engines: {node: '>=18'}
- '@inquirer/input@4.0.0':
- resolution: {integrity: sha512-LD7MNzaX+q2OpU4Fn0i/SedhnnBCAnEzRr6L0MP6ohofFFlx9kp5EXX7flbRZlUnh8icOwC3NFmXTyP76hvo0g==}
+ '@inquirer/input@4.1.6':
+ resolution: {integrity: sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==}
engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@inquirer/select@4.0.0':
- resolution: {integrity: sha512-XTN4AIFusWbNCBU1Xm2YDxbtH94e/FOrC27U3QargSsoDT1mRm+aLfqE+oOZnUuxwtTnInRT8UHRU3MVOu52wg==}
+ '@inquirer/select@4.0.9':
+ resolution: {integrity: sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==}
engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@inquirer/type@3.0.0':
- resolution: {integrity: sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==}
+ '@inquirer/type@3.0.4':
+ resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -1077,6 +1100,10 @@ packages:
resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
engines: {node: ^14.21.3 || >=16}
+ '@noble/curves@1.8.1':
+ resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
+ engines: {node: ^14.21.3 || >=16}
+
'@noble/hashes@1.2.0':
resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==}
@@ -1088,6 +1115,10 @@ packages:
resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
engines: {node: ^14.21.3 || >=16}
+ '@noble/hashes@1.7.1':
+ resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
+ engines: {node: ^14.21.3 || >=16}
+
'@noble/secp256k1@1.7.1':
resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==}
@@ -1310,6 +1341,9 @@ packages:
'@scure/base@1.1.9':
resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==}
+ '@scure/base@1.2.4':
+ resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==}
+
'@scure/bip32@1.1.5':
resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==}
@@ -1319,6 +1353,9 @@ packages:
'@scure/bip32@1.5.0':
resolution: {integrity: sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==}
+ '@scure/bip32@1.6.2':
+ resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==}
+
'@scure/bip39@1.1.1':
resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==}
@@ -1328,6 +1365,9 @@ packages:
'@scure/bip39@1.4.0':
resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==}
+ '@scure/bip39@1.5.4':
+ resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==}
+
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
@@ -1396,8 +1436,8 @@ packages:
'@types/bn.js@5.1.6':
resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
- '@types/bytes@3.1.4':
- resolution: {integrity: sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==}
+ '@types/bytes@3.1.5':
+ resolution: {integrity: sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
@@ -1420,12 +1460,15 @@ packages:
'@types/lru-cache@5.1.1':
resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==}
- '@types/node-fetch@2.6.11':
- resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
+ '@types/node-fetch@2.6.12':
+ resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==}
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ '@types/node@22.13.9':
+ resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==}
+
'@types/node@22.7.8':
resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==}
@@ -1600,8 +1643,8 @@ packages:
'@vitest/utils@2.1.3':
resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==}
- '@wagmi/cli@2.1.16':
- resolution: {integrity: sha512-uERiNCAwThM6Vwgyrimlf+X8tOF0EjDnir6NHqCoumTquJ1/nlKBvpe0CHD3aDx2RQCOWCqhkUIImtN9yk3Oag==}
+ '@wagmi/cli@2.2.0':
+ resolution: {integrity: sha512-24U9wgmeKjs+lbnswYcWjic6leuKV/JduK2T8hGXO1fxUWzcoZ3tDtb7KQq+DmgbnJm49uaa7iKcB4K7SxN4Ag==}
hasBin: true
peerDependencies:
typescript: '>=5.0.4'
@@ -1642,6 +1685,17 @@ packages:
zod:
optional: true
+ abitype@1.0.8:
+ resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3 >=3.22.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
@@ -1821,9 +1875,6 @@ packages:
base-x@3.0.10:
resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
- base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
bech32@1.1.4:
resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
@@ -1835,9 +1886,6 @@ packages:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
- bl@5.1.0:
- resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
-
blakejs@1.2.1:
resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==}
@@ -1887,9 +1935,6 @@ packages:
buffer-xor@1.0.3:
resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
builtin-modules@3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
@@ -1945,8 +1990,8 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- chalk@5.3.0:
- resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
change-case@5.4.4:
@@ -1967,10 +2012,6 @@ packages:
resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
engines: {node: '>= 14.16.0'}
- chownr@2.0.0:
- resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
- engines: {node: '>=10'}
-
ci-info@2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
@@ -2000,10 +2041,6 @@ packages:
resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
engines: {node: '>=6'}
- cli-cursor@4.0.0:
- resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
@@ -2023,10 +2060,6 @@ packages:
cliui@7.0.4:
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
- clone@1.0.4:
- resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
- engines: {node: '>=0.8'}
-
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -2066,13 +2099,17 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ confbox@0.2.1:
+ resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
consola@3.2.3:
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
engines: {node: ^14.18.0 || >=16.10.0}
+ consola@3.4.0:
+ resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -2103,9 +2140,6 @@ packages:
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
- cross-spawn@5.1.0:
- resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
-
cross-spawn@6.0.5:
resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
engines: {node: '>=4.8'}
@@ -2114,6 +2148,10 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
@@ -2168,9 +2206,6 @@ packages:
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
engines: {node: '>=18'}
- defaults@1.0.4:
- resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
-
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -2562,6 +2597,9 @@ packages:
resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==}
engines: {node: '>=6.5.0', npm: '>=3'}
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
evp_bytestokey@1.0.3:
resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
@@ -2569,14 +2607,13 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
- execa@9.4.1:
- resolution: {integrity: sha512-5eo/BRqZm3GYce+1jqX/tJ7duA2AnE39i88fuedNFUV8XxGxUpF3aWkBRfbUcjV49gCkvS/pzc0YrCPhaIewdg==}
+ execa@9.5.2:
+ resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==}
engines: {node: ^18.19.0 || >=20.5.0}
+ exsolve@1.0.1:
+ resolution: {integrity: sha512-Smf0iQtkQVJLaph8r/qS8C8SWfQkaq9Q/dFcD44MLbJj6DNhlWefVuaS21SjfqOsBbjVlKtbCj6L9ekXK6EZUg==}
+
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -2664,10 +2701,6 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- find-up@6.3.0:
- resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -2713,8 +2746,8 @@ packages:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
- fs-extra@11.2.0:
- resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
engines: {node: '>=14.14'}
fs-extra@7.0.1:
@@ -2725,10 +2758,6 @@ packages:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
- fs-minipass@2.1.0:
- resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
- engines: {node: '>= 8'}
-
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -2771,10 +2800,6 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
@@ -2786,8 +2811,8 @@ packages:
get-tsconfig@4.8.1:
resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
- giget@1.2.3:
- resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==}
+ giget@2.0.0:
+ resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
hasBin: true
git-hooks-list@3.1.0:
@@ -2931,17 +2956,14 @@ packages:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
- human-id@1.0.2:
- resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
+ human-id@4.1.1:
+ resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==}
+ hasBin: true
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
human-signals@8.0.0:
resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==}
engines: {node: '>=18.18.0'}
@@ -2950,9 +2972,6 @@ packages:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
- ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -3120,10 +3139,6 @@ packages:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
- is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
is-stream@4.0.1:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
engines: {node: '>=18'}
@@ -3354,10 +3369,6 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
@@ -3377,16 +3388,12 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
- log-symbols@5.1.0:
- resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
- engines: {node: '>=12'}
-
log-symbols@6.0.0:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
- lookpath@1.2.2:
- resolution: {integrity: sha512-k2Gmn8iV6qdME3ztZC2spubmQISimFOPLuQKiPaLcVdRz0IpdxrNClVepMlyTJlhodm/zG/VfbkWERm3kUIh+Q==}
+ lookpath@1.2.3:
+ resolution: {integrity: sha512-kthRVhf4kH4+HW3anM4UBHxsw/XFESf13euCEldhXr6GpBdmBoa7rDd7WO5G0Mhd4G5XtKTcEy8OR0iRZXpS3Q==}
engines: {npm: '>=6.13.4'}
hasBin: true
@@ -3404,9 +3411,6 @@ packages:
resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
engines: {node: 20 || >=22}
- lru-cache@4.1.5:
- resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -3459,10 +3463,6 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
- mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
-
mimic-function@5.0.1:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
@@ -3495,30 +3495,15 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- minipass@3.3.6:
- resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
- engines: {node: '>=8'}
-
- minipass@5.0.0:
- resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
- engines: {node: '>=8'}
-
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
- minizlib@2.1.2:
- resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
- engines: {node: '>= 8'}
-
mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
- mlly@1.7.2:
- resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==}
-
mnemonist@0.38.5:
resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==}
@@ -3552,6 +3537,9 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanospinner@1.2.2:
+ resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==}
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -3564,8 +3552,8 @@ packages:
node-addon-api@5.1.0:
resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==}
- node-fetch-native@1.6.4:
- resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
+ node-fetch-native@1.6.6:
+ resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
node-gyp-build@4.8.2:
resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
@@ -3593,16 +3581,12 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
npm-run-path@6.0.0:
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
engines: {node: '>=18'}
- nypm@0.3.12:
- resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==}
+ nypm@0.6.0:
+ resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==}
engines: {node: ^14.16.0 || >=16.10.0}
hasBin: true
@@ -3641,9 +3625,6 @@ packages:
obliterator@2.0.4:
resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==}
- ohash@1.1.4:
- resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
-
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
@@ -3655,10 +3636,6 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
-
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
@@ -3671,12 +3648,8 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
- ora@6.3.1:
- resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- ora@8.1.0:
- resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==}
+ ora@8.2.0:
+ resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
engines: {node: '>=18'}
os-tmpdir@1.0.2:
@@ -3686,6 +3659,14 @@ packages:
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
+ ox@0.6.7:
+ resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
p-filter@2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
engines: {node: '>=8'}
@@ -3702,10 +3683,6 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-locate@2.0.0:
resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
engines: {node: '>=4'}
@@ -3718,10 +3695,6 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-map@2.1.0:
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
engines: {node: '>=6'}
@@ -3768,10 +3741,6 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
@@ -3814,6 +3783,9 @@ packages:
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
@@ -3869,8 +3841,8 @@ packages:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
- pkg-types@1.2.1:
- resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
+ pkg-types@2.1.0:
+ resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
@@ -3919,8 +3891,8 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
- prettier@3.3.3:
- resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
+ prettier@3.5.3:
+ resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
engines: {node: '>=14'}
hasBin: true
@@ -3947,9 +3919,6 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
- pseudomap@1.0.2:
- resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
-
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -4064,10 +4033,6 @@ packages:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
- restore-cursor@4.0.0:
- resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
@@ -4162,8 +4127,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.6.3:
- resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
engines: {node: '>=10'}
hasBin: true
@@ -4232,8 +4197,8 @@ packages:
resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
engines: {node: '>=12'}
- smol-toml@1.3.0:
- resolution: {integrity: sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==}
+ smol-toml@1.3.1:
+ resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==}
engines: {node: '>= 18'}
solc@0.8.26:
@@ -4266,8 +4231,8 @@ packages:
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
engines: {node: '>= 8'}
- spawndamnit@2.0.0:
- resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
+ spawndamnit@3.0.1:
+ resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
@@ -4305,10 +4270,6 @@ packages:
std-env@3.7.0:
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
- stdin-discarder@0.1.0:
- resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
stdin-discarder@0.2.2:
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
engines: {node: '>=18'}
@@ -4376,10 +4337,6 @@ packages:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
- strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
-
strip-final-newline@4.0.0:
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
engines: {node: '>=18'}
@@ -4425,10 +4382,6 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
- tar@6.2.1:
- resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
- engines: {node: '>=10'}
-
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
@@ -4459,6 +4412,9 @@ packages:
tinyexec@0.3.1:
resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
tinyglobby@0.2.9:
resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==}
engines: {node: '>=12.0.0'}
@@ -4534,6 +4490,9 @@ packages:
tslib@2.8.0:
resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
tsort@0.0.1:
resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==}
@@ -4562,38 +4521,38 @@ packages:
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
- turbo-darwin-64@2.2.3:
- resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==}
+ turbo-darwin-64@2.4.4:
+ resolution: {integrity: sha512-5kPvRkLAfmWI0MH96D+/THnDMGXlFNmjeqNRj5grLKiry+M9pKj3pRuScddAXPdlxjO5Ptz06UNaOQrrYGTx1g==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.2.3:
- resolution: {integrity: sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA==}
+ turbo-darwin-arm64@2.4.4:
+ resolution: {integrity: sha512-/gtHPqbGQXDFhrmy+Q/MFW2HUTUlThJ97WLLSe4bxkDrKHecDYhAjbZ4rN3MM93RV9STQb3Tqy4pZBtsd4DfCw==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.2.3:
- resolution: {integrity: sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ==}
+ turbo-linux-64@2.4.4:
+ resolution: {integrity: sha512-SR0gri4k0bda56hw5u9VgDXLKb1Q+jrw4lM7WAhnNdXvVoep4d6LmnzgMHQQR12Wxl3KyWPbkz9d1whL6NTm2Q==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.2.3:
- resolution: {integrity: sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ==}
+ turbo-linux-arm64@2.4.4:
+ resolution: {integrity: sha512-COXXwzRd3vslQIfJhXUklgEqlwq35uFUZ7hnN+AUyXx7hUOLIiD5NblL+ETrHnhY4TzWszrbwUMfe2BYWtaPQg==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.2.3:
- resolution: {integrity: sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ==}
+ turbo-windows-64@2.4.4:
+ resolution: {integrity: sha512-PV9rYNouGz4Ff3fd6sIfQy5L7HT9a4fcZoEv8PKRavU9O75G7PoDtm8scpHU10QnK0QQNLbE9qNxOAeRvF0fJg==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.2.3:
- resolution: {integrity: sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw==}
+ turbo-windows-arm64@2.4.4:
+ resolution: {integrity: sha512-403sqp9t5sx6YGEC32IfZTVWkRAixOQomGYB8kEc6ZD+//LirSxzeCHCnM8EmSXw7l57U1G+Fb0kxgTcKPU/Lg==}
cpu: [arm64]
os: [win32]
- turbo@2.2.3:
- resolution: {integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ==}
+ turbo@2.4.4:
+ resolution: {integrity: sha512-N9FDOVaY3yz0YCOhYIgOGYad7+m2ptvinXygw27WPLQvcZDl3+0Sa77KGVlLSiuPDChOUEnTKE9VJwLSi9BPGQ==}
hasBin: true
tweetnacl-util@0.15.1:
@@ -4652,8 +4611,10 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ typescript@5.8.2:
+ resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
@@ -4661,6 +4622,9 @@ packages:
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
undici@5.28.4:
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
engines: {node: '>=14.0'}
@@ -4715,16 +4679,16 @@ packages:
typescript:
optional: true
- viem@2.21.32:
- resolution: {integrity: sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ==}
+ viem@2.21.37:
+ resolution: {integrity: sha512-JupwyttT4aJNnP9+kD7E8jorMS5VmgpC3hm3rl5zXsO8WNBTsP3JJqZUSg4AG6s2lTrmmpzS/qpmXMZu5gJw5Q==}
peerDependencies:
typescript: '>=5.0.4'
peerDependenciesMeta:
typescript:
optional: true
- viem@2.21.37:
- resolution: {integrity: sha512-JupwyttT4aJNnP9+kD7E8jorMS5VmgpC3hm3rl5zXsO8WNBTsP3JJqZUSg4AG6s2lTrmmpzS/qpmXMZu5gJw5Q==}
+ viem@2.23.6:
+ resolution: {integrity: sha512-+yUeK8rktbGFQaLIvY4Tki22HUjian9Z4eKGAUT72RF9bcfkYgK8CJZz9P83tgoeLpiTyX3xcBM4xJZrJyKmsA==}
peerDependencies:
typescript: '>=5.0.4'
peerDependenciesMeta:
@@ -4797,9 +4761,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
- wcwidth@1.0.1:
- resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
-
webauthn-p256@0.0.10:
resolution: {integrity: sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==}
@@ -4923,15 +4884,9 @@ packages:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- yallist@2.1.2:
- resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'}
@@ -4952,10 +4907,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.1.1:
- resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
- engines: {node: '>=12.20'}
-
yoctocolors-cjs@2.1.2:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
@@ -5117,13 +5068,13 @@ snapshots:
dependencies:
'@openzeppelin/contracts': 5.0.2
- '@changesets/apply-release-plan@7.0.5':
+ '@changesets/apply-release-plan@7.0.10':
dependencies:
- '@changesets/config': 3.0.3
+ '@changesets/config': 3.1.1
'@changesets/get-version-range-type': 0.4.0
- '@changesets/git': 3.0.1
- '@changesets/should-skip-package': 0.1.1
- '@changesets/types': 6.0.0
+ '@changesets/git': 3.0.2
+ '@changesets/should-skip-package': 0.1.2
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
detect-indent: 6.1.0
fs-extra: 7.0.1
@@ -5131,37 +5082,37 @@ snapshots:
outdent: 0.5.0
prettier: 2.8.8
resolve-from: 5.0.0
- semver: 7.6.3
+ semver: 7.7.1
- '@changesets/assemble-release-plan@6.0.4':
+ '@changesets/assemble-release-plan@6.0.6':
dependencies:
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
- '@changesets/should-skip-package': 0.1.1
- '@changesets/types': 6.0.0
+ '@changesets/get-dependents-graph': 2.1.3
+ '@changesets/should-skip-package': 0.1.2
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
- semver: 7.6.3
+ semver: 7.7.1
- '@changesets/changelog-git@0.2.0':
+ '@changesets/changelog-git@0.2.1':
dependencies:
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
- '@changesets/cli@2.27.9':
+ '@changesets/cli@2.28.1':
dependencies:
- '@changesets/apply-release-plan': 7.0.5
- '@changesets/assemble-release-plan': 6.0.4
- '@changesets/changelog-git': 0.2.0
- '@changesets/config': 3.0.3
+ '@changesets/apply-release-plan': 7.0.10
+ '@changesets/assemble-release-plan': 6.0.6
+ '@changesets/changelog-git': 0.2.1
+ '@changesets/config': 3.1.1
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
- '@changesets/get-release-plan': 4.0.4
- '@changesets/git': 3.0.1
+ '@changesets/get-dependents-graph': 2.1.3
+ '@changesets/get-release-plan': 4.0.8
+ '@changesets/git': 3.0.2
'@changesets/logger': 0.1.1
- '@changesets/pre': 2.0.1
- '@changesets/read': 0.6.1
- '@changesets/should-skip-package': 0.1.1
- '@changesets/types': 6.0.0
- '@changesets/write': 0.3.2
+ '@changesets/pre': 2.0.2
+ '@changesets/read': 0.6.3
+ '@changesets/should-skip-package': 0.1.2
+ '@changesets/types': 6.1.0
+ '@changesets/write': 0.4.0
'@manypkg/get-packages': 1.1.3
ansi-colors: 4.1.3
ci-info: 3.9.0
@@ -5173,16 +5124,16 @@ snapshots:
package-manager-detector: 0.2.2
picocolors: 1.1.1
resolve-from: 5.0.0
- semver: 7.6.3
- spawndamnit: 2.0.0
+ semver: 7.7.1
+ spawndamnit: 3.0.1
term-size: 2.2.1
- '@changesets/config@3.0.3':
+ '@changesets/config@3.1.1':
dependencies:
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
+ '@changesets/get-dependents-graph': 2.1.3
'@changesets/logger': 0.1.1
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
micromatch: 4.0.8
@@ -5191,72 +5142,72 @@ snapshots:
dependencies:
extendable-error: 0.1.7
- '@changesets/get-dependents-graph@2.1.2':
+ '@changesets/get-dependents-graph@2.1.3':
dependencies:
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
picocolors: 1.1.1
- semver: 7.6.3
+ semver: 7.7.1
- '@changesets/get-release-plan@4.0.4':
+ '@changesets/get-release-plan@4.0.8':
dependencies:
- '@changesets/assemble-release-plan': 6.0.4
- '@changesets/config': 3.0.3
- '@changesets/pre': 2.0.1
- '@changesets/read': 0.6.1
- '@changesets/types': 6.0.0
+ '@changesets/assemble-release-plan': 6.0.6
+ '@changesets/config': 3.1.1
+ '@changesets/pre': 2.0.2
+ '@changesets/read': 0.6.3
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
'@changesets/get-version-range-type@0.4.0': {}
- '@changesets/git@3.0.1':
+ '@changesets/git@3.0.2':
dependencies:
'@changesets/errors': 0.2.0
'@manypkg/get-packages': 1.1.3
is-subdir: 1.2.0
micromatch: 4.0.8
- spawndamnit: 2.0.0
+ spawndamnit: 3.0.1
'@changesets/logger@0.1.1':
dependencies:
picocolors: 1.1.1
- '@changesets/parse@0.4.0':
+ '@changesets/parse@0.4.1':
dependencies:
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
js-yaml: 3.14.1
- '@changesets/pre@2.0.1':
+ '@changesets/pre@2.0.2':
dependencies:
'@changesets/errors': 0.2.0
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
- '@changesets/read@0.6.1':
+ '@changesets/read@0.6.3':
dependencies:
- '@changesets/git': 3.0.1
+ '@changesets/git': 3.0.2
'@changesets/logger': 0.1.1
- '@changesets/parse': 0.4.0
- '@changesets/types': 6.0.0
+ '@changesets/parse': 0.4.1
+ '@changesets/types': 6.1.0
fs-extra: 7.0.1
p-filter: 2.1.0
picocolors: 1.1.1
- '@changesets/should-skip-package@0.1.1':
+ '@changesets/should-skip-package@0.1.2':
dependencies:
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
'@changesets/types@4.1.0': {}
- '@changesets/types@6.0.0': {}
+ '@changesets/types@6.1.0': {}
- '@changesets/write@0.3.2':
+ '@changesets/write@0.4.0':
dependencies:
- '@changesets/types': 6.0.0
+ '@changesets/types': 6.1.0
fs-extra: 7.0.1
- human-id: 1.0.2
+ human-id: 4.1.1
prettier: 2.8.8
'@colors/colors@1.5.0':
@@ -5793,49 +5744,48 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
- '@inquirer/confirm@5.0.0(@types/node@22.7.8)':
+ '@inquirer/confirm@5.1.6(@types/node@22.13.9)':
dependencies:
- '@inquirer/core': 10.0.0(@types/node@22.7.8)
- '@inquirer/type': 3.0.0(@types/node@22.7.8)
- transitivePeerDependencies:
- - '@types/node'
+ '@inquirer/core': 10.1.7(@types/node@22.13.9)
+ '@inquirer/type': 3.0.4(@types/node@22.13.9)
+ optionalDependencies:
+ '@types/node': 22.13.9
- '@inquirer/core@10.0.0(@types/node@22.7.8)':
+ '@inquirer/core@10.1.7(@types/node@22.13.9)':
dependencies:
- '@inquirer/figures': 1.0.7
- '@inquirer/type': 3.0.0(@types/node@22.7.8)
+ '@inquirer/figures': 1.0.10
+ '@inquirer/type': 3.0.4(@types/node@22.13.9)
ansi-escapes: 4.3.2
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
- strip-ansi: 6.0.1
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.2
- transitivePeerDependencies:
- - '@types/node'
+ optionalDependencies:
+ '@types/node': 22.13.9
- '@inquirer/figures@1.0.7': {}
+ '@inquirer/figures@1.0.10': {}
- '@inquirer/input@4.0.0(@types/node@22.7.8)':
+ '@inquirer/input@4.1.6(@types/node@22.13.9)':
dependencies:
- '@inquirer/core': 10.0.0(@types/node@22.7.8)
- '@inquirer/type': 3.0.0(@types/node@22.7.8)
- transitivePeerDependencies:
- - '@types/node'
+ '@inquirer/core': 10.1.7(@types/node@22.13.9)
+ '@inquirer/type': 3.0.4(@types/node@22.13.9)
+ optionalDependencies:
+ '@types/node': 22.13.9
- '@inquirer/select@4.0.0(@types/node@22.7.8)':
+ '@inquirer/select@4.0.9(@types/node@22.13.9)':
dependencies:
- '@inquirer/core': 10.0.0(@types/node@22.7.8)
- '@inquirer/figures': 1.0.7
- '@inquirer/type': 3.0.0(@types/node@22.7.8)
+ '@inquirer/core': 10.1.7(@types/node@22.13.9)
+ '@inquirer/figures': 1.0.10
+ '@inquirer/type': 3.0.4(@types/node@22.13.9)
ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2
- transitivePeerDependencies:
- - '@types/node'
+ optionalDependencies:
+ '@types/node': 22.13.9
- '@inquirer/type@3.0.0(@types/node@22.7.8)':
- dependencies:
- '@types/node': 22.7.8
+ '@inquirer/type@3.0.4(@types/node@22.13.9)':
+ optionalDependencies:
+ '@types/node': 22.13.9
'@isaacs/cliui@8.0.2':
dependencies:
@@ -5915,12 +5865,18 @@ snapshots:
dependencies:
'@noble/hashes': 1.5.0
+ '@noble/curves@1.8.1':
+ dependencies:
+ '@noble/hashes': 1.7.1
+
'@noble/hashes@1.2.0': {}
'@noble/hashes@1.4.0': {}
'@noble/hashes@1.5.0': {}
+ '@noble/hashes@1.7.1': {}
+
'@noble/secp256k1@1.7.1': {}
'@nodelib/fs.scandir@2.1.5':
@@ -6087,6 +6043,8 @@ snapshots:
'@scure/base@1.1.9': {}
+ '@scure/base@1.2.4': {}
+
'@scure/bip32@1.1.5':
dependencies:
'@noble/hashes': 1.2.0
@@ -6105,6 +6063,12 @@ snapshots:
'@noble/hashes': 1.5.0
'@scure/base': 1.1.9
+ '@scure/bip32@1.6.2':
+ dependencies:
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/base': 1.2.4
+
'@scure/bip39@1.1.1':
dependencies:
'@noble/hashes': 1.2.0
@@ -6120,6 +6084,11 @@ snapshots:
'@noble/hashes': 1.5.0
'@scure/base': 1.1.9
+ '@scure/bip39@1.5.4':
+ dependencies:
+ '@noble/hashes': 1.7.1
+ '@scure/base': 1.2.4
+
'@sec-ant/readable-stream@0.4.1': {}
'@sentry/core@5.30.0':
@@ -6173,11 +6142,11 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
- '@sunodo/wagmi-plugin-hardhat-deploy@0.3.0(abitype@1.0.6(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)':
+ '@sunodo/wagmi-plugin-hardhat-deploy@0.3.0(abitype@1.0.8(typescript@5.8.2)(zod@3.23.8))(typescript@5.8.2)':
dependencies:
- abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8)
+ abitype: 1.0.8(typescript@5.8.2)(zod@3.23.8)
optionalDependencies:
- typescript: 5.6.3
+ typescript: 5.8.2
'@tsconfig/node10@1.0.11': {}
@@ -6189,20 +6158,20 @@ snapshots:
'@types/bn.js@4.11.6':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
'@types/bn.js@5.1.6':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
- '@types/bytes@3.1.4': {}
+ '@types/bytes@3.1.5': {}
'@types/estree@1.0.6': {}
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
'@types/inquirer@9.0.7':
dependencies:
@@ -6215,17 +6184,21 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
'@types/lru-cache@5.1.1': {}
- '@types/node-fetch@2.6.11':
+ '@types/node-fetch@2.6.12':
dependencies:
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
form-data: 4.0.1
'@types/node@12.20.55': {}
+ '@types/node@22.13.9':
+ dependencies:
+ undici-types: 6.20.0
+
'@types/node@22.7.8':
dependencies:
undici-types: 6.19.8
@@ -6238,28 +6211,28 @@ snapshots:
'@types/pbkdf2@3.1.2':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
'@types/progress-stream@2.0.5':
dependencies:
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
'@types/prompts@2.4.9':
dependencies:
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
kleur: 3.0.3
'@types/qs@6.9.16': {}
'@types/secp256k1@4.0.6':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
'@types/semver@7.5.8': {}
'@types/through@0.0.33':
dependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
'@types/tmp@0.2.6': {}
@@ -6327,7 +6300,7 @@ snapshots:
debug: 4.3.7(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
- semver: 7.6.3
+ semver: 7.7.1
tsutils: 3.21.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
@@ -6342,7 +6315,7 @@ snapshots:
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.5
- semver: 7.6.3
+ semver: 7.7.1
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
@@ -6359,7 +6332,7 @@ snapshots:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3)
eslint: 8.57.1
eslint-scope: 5.1.1
- semver: 7.6.3
+ semver: 7.7.1
transitivePeerDependencies:
- supports-color
- typescript
@@ -6387,7 +6360,7 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
- '@vercel/style-guide@6.0.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.8.4))':
+ '@vercel/style-guide@6.0.0(eslint@8.57.1)(prettier@3.5.3)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.13.9))':
dependencies:
'@babel/core': 7.25.9
'@babel/eslint-parser': 7.25.9(@babel/core@7.25.9)(eslint@8.57.1)
@@ -6407,11 +6380,11 @@ snapshots:
eslint-plugin-testing-library: 6.4.0(eslint@8.57.1)(typescript@5.6.3)
eslint-plugin-tsdoc: 0.2.17
eslint-plugin-unicorn: 51.0.1(eslint@8.57.1)
- eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.8.4))
- prettier-plugin-packagejson: 2.5.3(prettier@3.3.3)
+ eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.13.9))
+ prettier-plugin-packagejson: 2.5.3(prettier@3.5.3)
optionalDependencies:
eslint: 8.57.1
- prettier: 3.3.3
+ prettier: 3.5.3
typescript: 5.6.3
transitivePeerDependencies:
- eslint-import-resolver-node
@@ -6421,7 +6394,7 @@ snapshots:
- supports-color
- vitest
- '@vitest/coverage-istanbul@2.1.3(vitest@2.1.3(@types/node@22.7.8))':
+ '@vitest/coverage-istanbul@2.1.3(vitest@2.1.3(@types/node@22.13.9))':
dependencies:
'@istanbuljs/schema': 0.1.3
debug: 4.3.7(supports-color@8.1.1)
@@ -6433,7 +6406,7 @@ snapshots:
magicast: 0.3.5
test-exclude: 7.0.1
tinyrainbow: 1.2.0
- vitest: 2.1.3(@types/node@22.7.8)
+ vitest: 2.1.3(@types/node@22.13.9)
transitivePeerDependencies:
- supports-color
@@ -6444,22 +6417,13 @@ snapshots:
chai: 5.1.1
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8))':
+ '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.13.9))':
dependencies:
'@vitest/spy': 2.1.3
estree-walker: 3.0.3
magic-string: 0.30.12
optionalDependencies:
- vite: 5.4.9(@types/node@22.7.8)
-
- '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.8.4))':
- dependencies:
- '@vitest/spy': 2.1.3
- estree-walker: 3.0.3
- magic-string: 0.30.12
- optionalDependencies:
- vite: 5.4.9(@types/node@22.8.4)
- optional: true
+ vite: 5.4.9(@types/node@22.13.9)
'@vitest/pretty-format@2.1.3':
dependencies:
@@ -6486,30 +6450,28 @@ snapshots:
loupe: 3.1.2
tinyrainbow: 1.2.0
- '@wagmi/cli@2.1.16(typescript@5.6.3)':
+ '@wagmi/cli@2.2.0(typescript@5.8.2)':
dependencies:
- abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8)
+ abitype: 1.0.8(typescript@5.8.2)(zod@3.23.8)
bundle-require: 4.2.1(esbuild@0.19.12)
cac: 6.7.14
change-case: 5.4.4
- chokidar: 3.6.0
+ chokidar: 4.0.1
dedent: 0.7.0
dotenv: 16.4.5
dotenv-expand: 10.0.0
esbuild: 0.19.12
- execa: 8.0.1
+ escalade: 3.2.0
fdir: 6.4.2(picomatch@3.0.1)
- find-up: 6.3.0
- fs-extra: 11.2.0
- ora: 6.3.1
+ nanospinner: 1.2.2
pathe: 1.1.2
picocolors: 1.1.1
picomatch: 3.0.1
- prettier: 3.3.3
- viem: 2.21.32(typescript@5.6.3)(zod@3.23.8)
+ prettier: 3.5.3
+ viem: 2.23.6(typescript@5.8.2)(zod@3.23.8)
zod: 3.23.8
optionalDependencies:
- typescript: 5.6.3
+ typescript: 5.8.2
transitivePeerDependencies:
- bufferutil
- utf-8-validate
@@ -6529,6 +6491,11 @@ snapshots:
typescript: 5.6.3
zod: 3.23.8
+ abitype@1.0.8(typescript@5.8.2)(zod@3.23.8):
+ optionalDependencies:
+ typescript: 5.8.2
+ zod: 3.23.8
+
abstract-logging@2.0.1: {}
acorn-jsx@5.3.2(acorn@8.13.0):
@@ -6719,8 +6686,6 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- base64-js@1.5.1: {}
-
bech32@1.1.4: {}
better-path-resolve@1.0.0:
@@ -6729,12 +6694,6 @@ snapshots:
binary-extensions@2.3.0: {}
- bl@5.1.0:
- dependencies:
- buffer: 6.0.3
- inherits: 2.0.4
- readable-stream: 3.6.2
-
blakejs@1.2.1: {}
bn.js@4.12.0: {}
@@ -6799,11 +6758,6 @@ snapshots:
buffer-xor@1.0.3: {}
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
builtin-modules@3.3.0: {}
bundle-name@4.1.0:
@@ -6857,7 +6811,7 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- chalk@5.3.0: {}
+ chalk@5.4.1: {}
change-case@5.4.4: {}
@@ -6881,8 +6835,6 @@ snapshots:
dependencies:
readdirp: 4.0.2
- chownr@2.0.0: {}
-
ci-info@2.0.0: {}
ci-info@3.9.0: {}
@@ -6896,7 +6848,7 @@ snapshots:
citty@0.1.6:
dependencies:
- consola: 3.2.3
+ consola: 3.4.0
clean-regexp@1.0.0:
dependencies:
@@ -6906,10 +6858,6 @@ snapshots:
cli-boxes@2.2.1: {}
- cli-cursor@4.0.0:
- dependencies:
- restore-cursor: 4.0.0
-
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
@@ -6930,8 +6878,6 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
- clone@1.0.4: {}
-
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -6960,10 +6906,12 @@ snapshots:
concat-map@0.0.1: {}
- confbox@0.1.8: {}
+ confbox@0.2.1: {}
consola@3.2.3: {}
+ consola@3.4.0: {}
+
convert-source-map@2.0.0: {}
cookie@0.4.2: {}
@@ -7005,12 +6953,6 @@ snapshots:
create-require@1.1.1: {}
- cross-spawn@5.1.0:
- dependencies:
- lru-cache: 4.1.5
- shebang-command: 1.2.0
- which: 1.3.1
-
cross-spawn@6.0.5:
dependencies:
nice-try: 1.0.5
@@ -7025,6 +6967,12 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
damerau-levenshtein@1.0.8: {}
data-view-buffer@1.0.1:
@@ -7070,10 +7018,6 @@ snapshots:
bundle-name: 4.1.0
default-browser-id: 5.0.0
- defaults@1.0.4:
- dependencies:
- clone: 1.0.4
-
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.0
@@ -7540,18 +7484,18 @@ snapshots:
read-pkg-up: 7.0.1
regexp-tree: 0.1.27
regjsparser: 0.10.0
- semver: 7.6.3
+ semver: 7.7.1
strip-indent: 3.0.0
transitivePeerDependencies:
- supports-color
- eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.8.4)):
+ eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)(vitest@2.1.3(@types/node@22.13.9)):
dependencies:
'@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3)
eslint: 8.57.1
optionalDependencies:
'@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)
- vitest: 2.1.3(@types/node@22.8.4)
+ vitest: 2.1.3(@types/node@22.13.9)
transitivePeerDependencies:
- supports-color
- typescript
@@ -7720,6 +7664,8 @@ snapshots:
is-hex-prefixed: 1.0.0
strip-hex-prefix: 1.0.0
+ eventemitter3@5.0.1: {}
+
evp_bytestokey@1.0.3:
dependencies:
md5.js: 1.3.5
@@ -7737,19 +7683,7 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.3
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
- execa@9.4.1:
+ execa@9.5.2:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
cross-spawn: 7.0.3
@@ -7764,6 +7698,8 @@ snapshots:
strip-final-newline: 4.0.0
yoctocolors: 2.1.1
+ exsolve@1.0.1: {}
+
extendable-error@0.1.7: {}
external-editor@3.1.0:
@@ -7828,7 +7764,7 @@ snapshots:
proxy-addr: 2.0.7
rfdc: 1.4.1
secure-json-parse: 2.7.0
- semver: 7.6.3
+ semver: 7.7.1
toad-cache: 3.7.0
fastq@1.17.1:
@@ -7875,11 +7811,6 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
- find-up@6.3.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
-
flat-cache@3.2.0:
dependencies:
flatted: 3.3.1
@@ -7923,7 +7854,7 @@ snapshots:
jsonfile: 6.1.0
universalify: 2.0.1
- fs-extra@11.2.0:
+ fs-extra@11.3.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.1.0
@@ -7941,10 +7872,6 @@ snapshots:
jsonfile: 4.0.0
universalify: 0.1.2
- fs-minipass@2.1.0:
- dependencies:
- minipass: 3.3.6
-
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@@ -7979,8 +7906,6 @@ snapshots:
get-stream@6.0.1: {}
- get-stream@8.0.1: {}
-
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
@@ -7996,16 +7921,14 @@ snapshots:
dependencies:
resolve-pkg-maps: 1.0.0
- giget@1.2.3:
+ giget@2.0.0:
dependencies:
citty: 0.1.6
- consola: 3.2.3
+ consola: 3.4.0
defu: 6.1.4
- node-fetch-native: 1.6.4
- nypm: 0.3.12
- ohash: 1.1.4
- pathe: 1.1.2
- tar: 6.2.1
+ node-fetch-native: 1.6.6
+ nypm: 0.6.0
+ pathe: 2.0.3
git-hooks-list@3.1.0: {}
@@ -8249,20 +8172,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- human-id@1.0.2: {}
+ human-id@4.1.1: {}
human-signals@2.1.0: {}
- human-signals@5.0.0: {}
-
human-signals@8.0.0: {}
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
- ieee754@1.2.1: {}
-
ignore@5.3.2: {}
immutable@4.3.7: {}
@@ -8327,7 +8246,7 @@ snapshots:
is-bun-module@1.2.1:
dependencies:
- semver: 7.6.3
+ semver: 7.7.1
is-callable@1.2.7: {}
@@ -8398,8 +8317,6 @@ snapshots:
is-stream@2.0.1: {}
- is-stream@3.0.0: {}
-
is-stream@4.0.1: {}
is-string@1.0.7:
@@ -8465,7 +8382,7 @@ snapshots:
'@babel/parser': 7.25.9
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
- semver: 7.6.3
+ semver: 7.7.1
transitivePeerDependencies:
- supports-color
@@ -8623,10 +8540,6 @@ snapshots:
dependencies:
p-locate: 5.0.0
- locate-path@7.2.0:
- dependencies:
- p-locate: 6.0.0
-
lodash.memoize@4.1.2: {}
lodash.merge@4.6.2: {}
@@ -8642,17 +8555,12 @@ snapshots:
chalk: 4.1.2
is-unicode-supported: 0.1.0
- log-symbols@5.1.0:
- dependencies:
- chalk: 5.3.0
- is-unicode-supported: 1.3.0
-
log-symbols@6.0.0:
dependencies:
- chalk: 5.3.0
+ chalk: 5.4.1
is-unicode-supported: 1.3.0
- lookpath@1.2.2: {}
+ lookpath@1.2.3: {}
loose-envify@1.4.0:
dependencies:
@@ -8664,11 +8572,6 @@ snapshots:
lru-cache@11.0.1: {}
- lru-cache@4.1.5:
- dependencies:
- pseudomap: 1.0.2
- yallist: 2.1.2
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -8687,7 +8590,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.6.3
+ semver: 7.7.1
make-error@1.3.6: {}
@@ -8718,8 +8621,6 @@ snapshots:
mimic-fn@2.1.0: {}
- mimic-fn@4.0.0: {}
-
mimic-function@5.0.1: {}
min-indent@1.0.1: {}
@@ -8746,28 +8647,10 @@ snapshots:
minimist@1.2.8: {}
- minipass@3.3.6:
- dependencies:
- yallist: 4.0.0
-
- minipass@5.0.0: {}
-
minipass@7.1.2: {}
- minizlib@2.1.2:
- dependencies:
- minipass: 3.3.6
- yallist: 4.0.0
-
mkdirp@1.0.4: {}
- mlly@1.7.2:
- dependencies:
- acorn: 8.13.0
- pathe: 1.1.2
- pkg-types: 1.2.1
- ufo: 1.5.4
-
mnemonist@0.38.5:
dependencies:
obliterator: 2.0.4
@@ -8819,6 +8702,10 @@ snapshots:
nanoid@3.3.7: {}
+ nanospinner@1.2.2:
+ dependencies:
+ picocolors: 1.1.1
+
natural-compare@1.4.0: {}
nice-try@1.0.5: {}
@@ -8827,7 +8714,7 @@ snapshots:
node-addon-api@5.1.0: {}
- node-fetch-native@1.6.4: {}
+ node-fetch-native@1.6.6: {}
node-gyp-build@4.8.2: {}
@@ -8863,23 +8750,18 @@ snapshots:
dependencies:
path-key: 3.1.1
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
-
npm-run-path@6.0.0:
dependencies:
path-key: 4.0.0
unicorn-magic: 0.3.0
- nypm@0.3.12:
+ nypm@0.6.0:
dependencies:
citty: 0.1.6
- consola: 3.2.3
- execa: 8.0.1
- pathe: 1.1.2
- pkg-types: 1.2.1
- ufo: 1.5.4
+ consola: 3.4.0
+ pathe: 2.0.3
+ pkg-types: 2.1.0
+ tinyexec: 0.3.2
object-assign@4.1.1: {}
@@ -8921,8 +8803,6 @@ snapshots:
obliterator@2.0.4: {}
- ohash@1.1.4: {}
-
on-exit-leak-free@2.1.2: {}
once@1.4.0:
@@ -8933,10 +8813,6 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- onetime@6.0.0:
- dependencies:
- mimic-fn: 4.0.0
-
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
@@ -8957,21 +8833,9 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
- ora@6.3.1:
+ ora@8.2.0:
dependencies:
- chalk: 5.3.0
- cli-cursor: 4.0.0
- cli-spinners: 2.9.2
- is-interactive: 2.0.0
- is-unicode-supported: 1.3.0
- log-symbols: 5.1.0
- stdin-discarder: 0.1.0
- strip-ansi: 7.1.0
- wcwidth: 1.0.1
-
- ora@8.1.0:
- dependencies:
- chalk: 5.3.0
+ chalk: 5.4.1
cli-cursor: 5.0.0
cli-spinners: 2.9.2
is-interactive: 2.0.0
@@ -8985,6 +8849,20 @@ snapshots:
outdent@0.5.0: {}
+ ox@0.6.7(typescript@5.8.2)(zod@3.23.8):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.0
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ abitype: 1.0.8(typescript@5.8.2)(zod@3.23.8)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - zod
+
p-filter@2.1.0:
dependencies:
p-map: 2.1.0
@@ -9001,10 +8879,6 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.1.1
-
p-locate@2.0.0:
dependencies:
p-limit: 1.3.0
@@ -9017,10 +8891,6 @@ snapshots:
dependencies:
p-limit: 3.1.0
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
p-map@2.1.0: {}
p-map@4.0.0:
@@ -9057,8 +8927,6 @@ snapshots:
path-exists@4.0.0: {}
- path-exists@5.0.0: {}
-
path-is-absolute@1.0.1: {}
path-key@2.0.1: {}
@@ -9089,6 +8957,8 @@ snapshots:
pathe@1.1.2: {}
+ pathe@2.0.3: {}
+
pathval@2.0.0: {}
pbkdf2@3.1.2:
@@ -9139,11 +9009,11 @@ snapshots:
pirates@4.0.6: {}
- pkg-types@1.2.1:
+ pkg-types@2.1.0:
dependencies:
- confbox: 0.1.8
- mlly: 1.7.2
- pathe: 1.1.2
+ confbox: 0.2.1
+ exsolve: 1.0.1
+ pathe: 2.0.3
pluralize@8.0.0: {}
@@ -9163,16 +9033,16 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier-plugin-packagejson@2.5.3(prettier@3.3.3):
+ prettier-plugin-packagejson@2.5.3(prettier@3.5.3):
dependencies:
sort-package-json: 2.10.1
synckit: 0.9.2
optionalDependencies:
- prettier: 3.3.3
+ prettier: 3.5.3
prettier@2.8.8: {}
- prettier@3.3.3: {}
+ prettier@3.5.3: {}
pretty-ms@9.1.0:
dependencies:
@@ -9200,8 +9070,6 @@ snapshots:
forwarded: 0.2.0
ipaddr.js: 1.9.1
- pseudomap@1.0.2: {}
-
punycode@2.3.1: {}
qs@6.13.0:
@@ -9338,11 +9206,6 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- restore-cursor@4.0.0:
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
-
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
@@ -9406,7 +9269,7 @@ snapshots:
rxjs@7.8.1:
dependencies:
- tslib: 2.8.0
+ tslib: 2.8.1
safe-array-concat@1.1.2:
dependencies:
@@ -9447,7 +9310,7 @@ snapshots:
semver@6.3.1: {}
- semver@7.6.3: {}
+ semver@7.7.1: {}
serialize-javascript@6.0.2:
dependencies:
@@ -9511,7 +9374,7 @@ snapshots:
slash@4.0.0: {}
- smol-toml@1.3.0: {}
+ smol-toml@1.3.1: {}
solc@0.8.26(debug@4.3.7):
dependencies:
@@ -9539,7 +9402,7 @@ snapshots:
git-hooks-list: 3.1.0
globby: 13.2.2
is-plain-obj: 4.1.0
- semver: 7.6.3
+ semver: 7.7.1
sort-object-keys: 1.1.3
source-map-js@1.2.1: {}
@@ -9555,10 +9418,10 @@ snapshots:
dependencies:
whatwg-url: 7.1.0
- spawndamnit@2.0.0:
+ spawndamnit@3.0.1:
dependencies:
- cross-spawn: 5.1.0
- signal-exit: 3.0.7
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
spdx-correct@3.2.0:
dependencies:
@@ -9590,10 +9453,6 @@ snapshots:
std-env@3.7.0: {}
- stdin-discarder@0.1.0:
- dependencies:
- bl: 5.1.0
-
stdin-discarder@0.2.2: {}
string-width@4.2.3:
@@ -9688,8 +9547,6 @@ snapshots:
strip-final-newline@2.0.0: {}
- strip-final-newline@3.0.0: {}
-
strip-final-newline@4.0.0: {}
strip-hex-prefix@1.0.0:
@@ -9729,19 +9586,10 @@ snapshots:
synckit@0.9.2:
dependencies:
'@pkgr/core': 0.1.1
- tslib: 2.8.0
+ tslib: 2.8.1
tapable@2.2.1: {}
- tar@6.2.1:
- dependencies:
- chownr: 2.0.0
- fs-minipass: 2.1.0
- minipass: 5.0.0
- minizlib: 2.1.2
- mkdirp: 1.0.4
- yallist: 4.0.0
-
term-size@2.2.1: {}
test-exclude@7.0.1:
@@ -9773,6 +9621,8 @@ snapshots:
tinyexec@0.3.1: {}
+ tinyexec@0.3.2: {}
+
tinyglobby@0.2.9:
dependencies:
fdir: 6.4.2(picomatch@4.0.2)
@@ -9810,25 +9660,25 @@ snapshots:
ts-interface-checker@0.1.13: {}
- ts-node@10.9.2(@types/node@22.7.8)(typescript@5.5.4):
+ ts-node@10.9.2(@types/node@22.13.9)(typescript@5.8.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
acorn: 8.13.0
acorn-walk: 8.3.4
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.5.4
+ typescript: 5.8.2
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
- ts-node@10.9.2(@types/node@22.7.8)(typescript@5.6.3):
+ ts-node@10.9.2(@types/node@22.7.8)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
@@ -9842,7 +9692,7 @@ snapshots:
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.6.3
+ typescript: 5.5.4
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
@@ -9876,6 +9726,8 @@ snapshots:
tslib@2.8.0: {}
+ tslib@2.8.1: {}
+
tsort@0.0.1: {}
tsup@8.3.0(postcss@8.4.47)(typescript@5.5.4):
@@ -9910,32 +9762,32 @@ snapshots:
tslib: 1.14.1
typescript: 5.6.3
- turbo-darwin-64@2.2.3:
+ turbo-darwin-64@2.4.4:
optional: true
- turbo-darwin-arm64@2.2.3:
+ turbo-darwin-arm64@2.4.4:
optional: true
- turbo-linux-64@2.2.3:
+ turbo-linux-64@2.4.4:
optional: true
- turbo-linux-arm64@2.2.3:
+ turbo-linux-arm64@2.4.4:
optional: true
- turbo-windows-64@2.2.3:
+ turbo-windows-64@2.4.4:
optional: true
- turbo-windows-arm64@2.2.3:
+ turbo-windows-arm64@2.4.4:
optional: true
- turbo@2.2.3:
+ turbo@2.4.4:
optionalDependencies:
- turbo-darwin-64: 2.2.3
- turbo-darwin-arm64: 2.2.3
- turbo-linux-64: 2.2.3
- turbo-linux-arm64: 2.2.3
- turbo-windows-64: 2.2.3
- turbo-windows-arm64: 2.2.3
+ turbo-darwin-64: 2.4.4
+ turbo-darwin-arm64: 2.4.4
+ turbo-linux-64: 2.4.4
+ turbo-linux-arm64: 2.4.4
+ turbo-windows-64: 2.4.4
+ turbo-windows-arm64: 2.4.4
tweetnacl-util@0.15.1: {}
@@ -9991,7 +9843,7 @@ snapshots:
typescript@5.6.3: {}
- ufo@1.5.4: {}
+ typescript@5.8.2: {}
unbox-primitive@1.0.2:
dependencies:
@@ -10002,6 +9854,8 @@ snapshots:
undici-types@6.19.8: {}
+ undici-types@6.20.0: {}
+
undici@5.28.4:
dependencies:
'@fastify/busboy': 2.1.1
@@ -10055,7 +9909,7 @@ snapshots:
- utf-8-validate
- zod
- viem@2.21.32(typescript@5.6.3)(zod@3.23.8):
+ viem@2.21.37(typescript@5.6.3)(zod@3.23.8):
dependencies:
'@adraffy/ens-normalize': 1.11.0
'@noble/curves': 1.6.0
@@ -10073,30 +9927,29 @@ snapshots:
- utf-8-validate
- zod
- viem@2.21.37(typescript@5.6.3)(zod@3.23.8):
+ viem@2.23.6(typescript@5.8.2)(zod@3.23.8):
dependencies:
- '@adraffy/ens-normalize': 1.11.0
- '@noble/curves': 1.6.0
- '@noble/hashes': 1.5.0
- '@scure/bip32': 1.5.0
- '@scure/bip39': 1.4.0
- abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8)
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ abitype: 1.0.8(typescript@5.8.2)(zod@3.23.8)
isows: 1.0.6(ws@8.18.0)
- webauthn-p256: 0.0.10
+ ox: 0.6.7(typescript@5.8.2)(zod@3.23.8)
ws: 8.18.0
optionalDependencies:
- typescript: 5.6.3
+ typescript: 5.8.2
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- zod
- vite-node@2.1.3(@types/node@22.7.8):
+ vite-node@2.1.3(@types/node@22.13.9):
dependencies:
cac: 6.7.14
debug: 4.3.7(supports-color@8.1.1)
pathe: 1.1.2
- vite: 5.4.9(@types/node@22.7.8)
+ vite: 5.4.9(@types/node@22.13.9)
transitivePeerDependencies:
- '@types/node'
- less
@@ -10108,81 +9961,19 @@ snapshots:
- supports-color
- terser
- vite-node@2.1.3(@types/node@22.8.4):
- dependencies:
- cac: 6.7.14
- debug: 4.3.7(supports-color@8.1.1)
- pathe: 1.1.2
- vite: 5.4.9(@types/node@22.8.4)
- transitivePeerDependencies:
- - '@types/node'
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- optional: true
-
- vite@5.4.9(@types/node@22.7.8):
+ vite@5.4.9(@types/node@22.13.9):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.24.0
optionalDependencies:
- '@types/node': 22.7.8
+ '@types/node': 22.13.9
fsevents: 2.3.3
- vite@5.4.9(@types/node@22.8.4):
- dependencies:
- esbuild: 0.21.5
- postcss: 8.4.47
- rollup: 4.24.0
- optionalDependencies:
- '@types/node': 22.8.4
- fsevents: 2.3.3
- optional: true
-
- vitest@2.1.3(@types/node@22.7.8):
- dependencies:
- '@vitest/expect': 2.1.3
- '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8))
- '@vitest/pretty-format': 2.1.3
- '@vitest/runner': 2.1.3
- '@vitest/snapshot': 2.1.3
- '@vitest/spy': 2.1.3
- '@vitest/utils': 2.1.3
- chai: 5.1.1
- debug: 4.3.7(supports-color@8.1.1)
- magic-string: 0.30.12
- pathe: 1.1.2
- std-env: 3.7.0
- tinybench: 2.9.0
- tinyexec: 0.3.1
- tinypool: 1.0.1
- tinyrainbow: 1.2.0
- vite: 5.4.9(@types/node@22.7.8)
- vite-node: 2.1.3(@types/node@22.7.8)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/node': 22.7.8
- transitivePeerDependencies:
- - less
- - lightningcss
- - msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
- vitest@2.1.3(@types/node@22.8.4):
+ vitest@2.1.3(@types/node@22.13.9):
dependencies:
'@vitest/expect': 2.1.3
- '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.8.4))
+ '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.13.9))
'@vitest/pretty-format': 2.1.3
'@vitest/runner': 2.1.3
'@vitest/snapshot': 2.1.3
@@ -10197,11 +9988,11 @@ snapshots:
tinyexec: 0.3.1
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.9(@types/node@22.8.4)
- vite-node: 2.1.3(@types/node@22.8.4)
+ vite: 5.4.9(@types/node@22.13.9)
+ vite-node: 2.1.3(@types/node@22.13.9)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 22.8.4
+ '@types/node': 22.13.9
transitivePeerDependencies:
- less
- lightningcss
@@ -10212,7 +10003,6 @@ snapshots:
- sugarss
- supports-color
- terser
- optional: true
wait-port@1.1.0:
dependencies:
@@ -10222,10 +10012,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- wcwidth@1.0.1:
- dependencies:
- defaults: 1.0.4
-
webauthn-p256@0.0.10:
dependencies:
'@noble/curves': 1.6.0
@@ -10233,8 +10019,8 @@ snapshots:
webauthn-p256@0.0.5:
dependencies:
- '@noble/curves': 1.4.0
- '@noble/hashes': 1.4.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
webidl-conversions@4.0.2: {}
@@ -10335,12 +10121,8 @@ snapshots:
y18n@5.0.8: {}
- yallist@2.1.2: {}
-
yallist@3.1.1: {}
- yallist@4.0.0: {}
-
yargs-parser@20.2.9: {}
yargs-unparser@2.0.0:
@@ -10364,8 +10146,6 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-queue@1.1.1: {}
-
yoctocolors-cjs@2.1.2: {}
yoctocolors@2.1.1: {}