From ccef0f4740e6769ca0128de6a4e8cf6bee7ac9d0 Mon Sep 17 00:00:00 2001 From: Yash <kumaryashcse@gmail.com> Date: Wed, 19 Mar 2025 02:51:05 +0530 Subject: [PATCH 1/2] Support stylus contracts publish and deploy --- packages/thirdweb/package.json | 3 + packages/thirdweb/src/cli/bin.ts | 13 + .../commands/publish-stylus/publish-stylus.ts | 171 +++++++++ .../src/contract/actions/compiler-metadata.ts | 8 +- pnpm-lock.yaml | 363 ++++++++++++------ 5 files changed, 436 insertions(+), 122 deletions(-) mode change 100644 => 100755 packages/thirdweb/src/cli/bin.ts create mode 100644 packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 3876ccc08f8..6845f914dbf 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -221,10 +221,13 @@ "@walletconnect/ethereum-provider": "2.17.5", "@walletconnect/sign-client": "2.17.5", "abitype": "1.0.8", + "chalk": "^5.4.1", "cross-spawn": "7.0.6", "fuse.js": "7.1.0", "input-otp": "^1.4.1", "mipd": "0.0.7", + "open": "^10.1.0", + "ora": "^8.2.0", "ox": "0.6.10", "uqr": "0.1.2", "viem": "2.23.10" diff --git a/packages/thirdweb/src/cli/bin.ts b/packages/thirdweb/src/cli/bin.ts old mode 100644 new mode 100755 index 98ea2babcfb..9e2c3c62dbf --- a/packages/thirdweb/src/cli/bin.ts +++ b/packages/thirdweb/src/cli/bin.ts @@ -4,9 +4,17 @@ import { generate, isValidChainIdAndContractAddress, } from "./commands/generate/generate.js"; +import { publishStylus } from "./commands/publish-stylus/publish-stylus.js"; // skip the first two args? const [, , command = "", ...rest] = process.argv; +let secretKey: string | undefined; +const keyIndex = rest.indexOf("-k"); +if (keyIndex !== -1 && rest.length > keyIndex + 1) { + secretKey = rest[keyIndex + 1]; + rest.splice(keyIndex, 2); +} + async function main() { switch (command) { case "generate": { @@ -20,6 +28,11 @@ async function main() { break; } + case "publish-stylus": { + await publishStylus(secretKey); + break; + } + case "login": { // Not implemented yet console.info( diff --git a/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts b/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts new file mode 100644 index 00000000000..af1c9ce6f46 --- /dev/null +++ b/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts @@ -0,0 +1,171 @@ +import { spawnSync } from "node:child_process"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { join } from "node:path"; +import open from "open"; +import ora from "ora"; +import { createThirdwebClient } from "../../../client/client.js"; +import { upload } from "../../../storage/upload.js"; + +export const THIRDWEB_URL = "https://thirdweb.com"; + +export async function publishStylus(secretKey?: string) { + const spinner = ora("Checking if this is a Stylus project...").start(); + + if (!secretKey) { + spinner.fail("Error: Secret key is required."); + process.exit(1); + } + + try { + // Step 1: Validate Stylus project + const root = process.cwd(); + if (!root) { + spinner.fail("Error: No package directory found."); + process.exit(1); + } + + const cargoTomlPath = join(root, "Cargo.toml"); + if (!existsSync(cargoTomlPath)) { + spinner.fail("Error: No Cargo.toml found. Not a Rust project."); + process.exit(1); + } + + const cargoToml = readFileSync(cargoTomlPath, "utf8"); + if (!cargoToml.includes("[dependencies.stylus-sdk]")) { + // spinner.fail("Error: Not a Stylus project. Missing stylus-sdk dependency."); + // process.exit(1); + } + + spinner.succeed("Stylus project detected."); + + // Step 2: Run Stylus export commands + spinner.start("Exporting initcode..."); + const bytecodeResult = spawnSync("cargo", ["stylus", "export-initcode"], { + stdio: "inherit", + }); + + if (bytecodeResult.status !== 0) { + spinner.fail("Failed to export initcode."); + process.exit(1); + } + spinner.succeed("Initcode exported."); + + spinner.start("Exporting ABI..."); + const abiResult = spawnSync( + "cargo", + ["stylus", "export-abi", "--json", "--output", "abi.json"], + { stdio: "inherit" }, + ); + + if (abiResult.status !== 0) { + spinner.fail("Failed to export ABI."); + process.exit(1); + } + spinner.succeed("ABI exported."); + + // Step 3: Read the output files + const bytecodePath = join(root, "./initcode"); + const abiPath = join(root, "./abi.json"); + + if (!existsSync(bytecodePath) || !existsSync(abiPath)) { + spinner.fail("Error: Export failed. Bytecode or ABI file not found."); + process.exit(1); + } + const abiContent = readFileSync(abiPath, "utf8").trim(); + + const contractName = extractContractNameFromExportAbi(abiContent); + console.log("extracted contract name: ", contractName); + if (!contractName) { + spinner.fail("Error: Could not determine contract name from ABI output."); + process.exit(1); + } + + let cleanedAbi = ""; + try { + const jsonMatch = abiContent.match(/\[.*\]/s); + if (jsonMatch) { + cleanedAbi = jsonMatch[0]; + } else { + throw new Error("No valid JSON ABI found in the file."); + } + } catch (error) { + spinner.fail("Error: ABI file contains invalid format."); + console.error(error); + process.exit(1); + } + + const metadata = { + compiler: {}, + language: "", + output: { + abi: JSON.parse(cleanedAbi), + devdoc: {}, + userdoc: {}, + }, + settings: {}, + sources: {}, + }; + writeFileSync(abiPath, JSON.stringify(metadata), "utf8"); + spinner.succeed("ABI cleaned and saved."); + + spinner.succeed("Stylus contract exported successfully."); + + // Step 4: Upload to IPFS (Placeholder) + spinner.start("Uploading to IPFS..."); + const client = createThirdwebClient({ + secretKey, + }); + + const metadataUri = await upload({ + client, + files: [metadata], + }); + console.log(metadataUri); + + const bytecodeContents = readFileSync(bytecodePath, "utf8"); + + const bytecodeUri = await upload({ + client, + files: [bytecodeContents], + }); + console.log(bytecodeUri); + + const publishUri = await upload({ + client, + files: [ + { + name: contractName, + metadataUri, + bytecodeUri, + stylus: true, + }, + ], + }); + + const url = getUrl(publishUri, "publish").toString(); + spinner.succeed(`Upload complete:, ${url}`); + + await open(url); + } catch (error: any) { + spinner.fail(`Error: ${error}`); + process.exit(1); + } +} + +function extractContractNameFromExportAbi(abiRawOutput: string): string | null { + const match = abiRawOutput.match(/<stdin>:(I[A-Za-z0-9_]+)/); + if (match && match[1]) { + return match[1].replace(/^I/, ""); + } + return null; +} + +export function getUrl(hash: string, command: string) { + const url = new URL( + `${THIRDWEB_URL} + /contracts/${command}/ + ${encodeURIComponent(hash.replace("ipfs://", ""))}`, + ); + + return url; +} diff --git a/packages/thirdweb/src/contract/actions/compiler-metadata.ts b/packages/thirdweb/src/contract/actions/compiler-metadata.ts index ed15561a7e5..1cddce4d703 100644 --- a/packages/thirdweb/src/contract/actions/compiler-metadata.ts +++ b/packages/thirdweb/src/contract/actions/compiler-metadata.ts @@ -40,9 +40,11 @@ export function formatCompilerMetadata( if ("source_metadata" in metadata) { meta = metadata.source_metadata; } - const compilationTarget = meta.settings.compilationTarget; - const targets = Object.keys(compilationTarget); - const name = compilationTarget[targets[0] as keyof typeof compilationTarget]; + + // TODO: fix + // const compilationTarget = meta.settings.compilationTarget; + // const targets = Object.keys(compilationTarget); + const name = ""; const info = { title: meta.output.devdoc.title, author: meta.output.devdoc.author, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4efec5e2f3..c1fba6fee8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -132,7 +132,7 @@ importers: version: 1.1.8(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@sentry/nextjs': specifier: 9.5.0 - version: 9.5.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.98.0(esbuild@0.25.0)) + version: 9.5.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.98.0) '@shazow/whatsabi': specifier: 0.20.0 version: 0.20.0(@noble/hashes@1.7.1)(typescript@5.8.2)(zod@3.24.2) @@ -337,7 +337,7 @@ importers: version: 8.6.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.6.4 - version: 8.6.4(esbuild@0.25.0)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.37.0)(typescript@5.8.2)(webpack-hot-middleware@2.26.1)(webpack@5.98.0(esbuild@0.25.0)) + version: 8.6.4(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.37.0)(typescript@5.8.2)(webpack-hot-middleware@2.26.1)(webpack@5.98.0) '@storybook/react': specifier: 8.6.4 version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) @@ -1076,6 +1076,9 @@ importers: abitype: specifier: 1.0.8 version: 1.0.8(typescript@5.8.2)(zod@3.24.2) + chalk: + specifier: ^5.4.1 + version: 5.4.1 cross-spawn: specifier: 7.0.6 version: 7.0.6 @@ -1091,6 +1094,12 @@ importers: mipd: specifier: 0.0.7 version: 0.0.7(typescript@5.8.2) + open: + specifier: ^10.1.0 + version: 10.1.0 + ora: + specifier: ^8.2.0 + version: 8.2.0 ox: specifier: 0.6.10 version: 0.6.10(typescript@5.8.2)(zod@3.24.2) @@ -1130,7 +1139,7 @@ importers: version: 2.1.2(react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.0.10)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(utf-8-validate@5.0.10)) '@size-limit/preset-big-lib': specifier: 11.2.0 - version: 11.2.0(bufferutil@4.0.9)(size-limit@11.2.0)(utf-8-validate@5.0.10) + version: 11.2.0(bufferutil@4.0.9)(esbuild@0.25.0)(size-limit@11.2.0)(utf-8-validate@5.0.10) '@storybook/addon-essentials': specifier: 8.6.4 version: 8.6.4(@types/react@19.0.10)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.3.3)(utf-8-validate@5.0.10)) @@ -4306,7 +4315,7 @@ packages: '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4363,7 +4372,7 @@ packages: '@radix-ui/react-focus-guards@1.1.1': resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4638,7 +4647,7 @@ packages: '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4683,7 +4692,7 @@ packages: '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -7497,6 +7506,10 @@ packages: bundle-n-require@1.1.1: resolution: {integrity: sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -7745,6 +7758,10 @@ packages: 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'} + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -8240,6 +8257,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + default-gateway@4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} @@ -8259,6 +8284,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -9413,6 +9442,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -9987,6 +10020,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-empty@1.2.0: resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} @@ -10020,6 +10058,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -10140,6 +10183,10 @@ packages: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -10160,6 +10207,10 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + is-yarn-global@0.4.1: resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} engines: {node: '>=12'} @@ -10703,6 +10754,10 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + lokijs@1.5.12: resolution: {integrity: sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==} @@ -11273,6 +11328,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -11858,9 +11917,17 @@ packages: 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'} + oniguruma-to-es@1.0.0: resolution: {integrity: sha512-kihvp0O4lFwf5tZMkfanwQLIZ9ORe9OeOFgZonH0BQeThgwfJiaZFeOfvvJVnJIM9TiVmx0RDD35hUJDR0++rQ==} + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} @@ -11900,6 +11967,10 @@ packages: resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} engines: {node: '>=16'} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -13151,6 +13222,10 @@ packages: 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'} + ret@0.2.2: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} @@ -13197,6 +13272,10 @@ packages: rpc-websockets@9.1.1: resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -13588,6 +13667,10 @@ packages: 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'} + storybook@8.6.4: resolution: {integrity: sha512-XXh1Acvf1r3BQX0BDLQw6yhZ7yUGvYxIcKOBuMdetnX7iXtczipJTfw0uyFwk0ltkKEE9PpJvivYmARF3u64VQ==} hasBin: true @@ -13636,6 +13719,10 @@ packages: resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} engines: {node: '>=16'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} @@ -15231,10 +15318,10 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -15277,10 +15364,10 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -15323,10 +15410,10 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -15370,7 +15457,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0)': + '@aws-sdk/client-sso-oidc@3.592.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -15413,7 +15500,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso-oidc@3.758.0': @@ -15550,7 +15636,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15665,24 +15751,6 @@ snapshots: '@smithy/util-stream': 4.1.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': - dependencies: - '@aws-sdk/client-sts': 3.592.0 - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-sdk/client-sts': 3.592.0 @@ -15737,25 +15805,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-sdk/credential-provider-env': 3.587.0 @@ -16029,7 +16078,7 @@ snapshots: '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.592.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 @@ -19631,7 +19680,7 @@ snapshots: dependencies: playwright: 1.51.0 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-hot-middleware@2.26.1)(webpack@5.98.0(esbuild@0.25.0))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-hot-middleware@2.26.1)(webpack@5.98.0)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.41.0 @@ -19641,7 +19690,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.0 source-map: 0.7.4 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 optionalDependencies: type-fest: 4.37.0 webpack-hot-middleware: 2.26.1 @@ -20941,7 +20990,7 @@ snapshots: '@sentry/core@9.5.0': {} - '@sentry/nextjs@9.5.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.98.0(esbuild@0.25.0))': + '@sentry/nextjs@9.5.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.98.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.30.0 @@ -20952,7 +21001,7 @@ snapshots: '@sentry/opentelemetry': 9.5.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.30.0) '@sentry/react': 9.5.0(react@19.0.0) '@sentry/vercel-edge': 9.5.0 - '@sentry/webpack-plugin': 3.2.1(encoding@0.1.13)(webpack@5.98.0(esbuild@0.25.0)) + '@sentry/webpack-plugin': 3.2.1(encoding@0.1.13)(webpack@5.98.0) chalk: 3.0.0 next: 15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) resolve: 1.22.8 @@ -21029,12 +21078,12 @@ snapshots: '@opentelemetry/api': 1.9.0 '@sentry/core': 9.5.0 - '@sentry/webpack-plugin@3.2.1(encoding@0.1.13)(webpack@5.98.0(esbuild@0.25.0))': + '@sentry/webpack-plugin@3.2.1(encoding@0.1.13)(webpack@5.98.0)': dependencies: '@sentry/bundler-plugin-core': 3.2.1(encoding@0.1.13) unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 transitivePeerDependencies: - encoding - supports-color @@ -21125,11 +21174,11 @@ snapshots: dependencies: size-limit: 11.2.0 - '@size-limit/preset-big-lib@11.2.0(bufferutil@4.0.9)(size-limit@11.2.0)(utf-8-validate@5.0.10)': + '@size-limit/preset-big-lib@11.2.0(bufferutil@4.0.9)(esbuild@0.25.0)(size-limit@11.2.0)(utf-8-validate@5.0.10)': dependencies: '@size-limit/file': 11.2.0(size-limit@11.2.0) '@size-limit/time': 11.2.0(bufferutil@4.0.9)(size-limit@11.2.0)(utf-8-validate@5.0.10) - '@size-limit/webpack': 11.2.0(size-limit@11.2.0) + '@size-limit/webpack': 11.2.0(esbuild@0.25.0)(size-limit@11.2.0) size-limit: 11.2.0 transitivePeerDependencies: - '@swc/core' @@ -21151,11 +21200,11 @@ snapshots: - supports-color - utf-8-validate - '@size-limit/webpack@11.2.0(size-limit@11.2.0)': + '@size-limit/webpack@11.2.0(esbuild@0.25.0)(size-limit@11.2.0)': dependencies: nanoid: 5.1.2 size-limit: 11.2.0 - webpack: 5.98.0 + webpack: 5.98.0(esbuild@0.25.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -22110,7 +22159,7 @@ snapshots: ts-dedent: 2.2.0 vite: 6.2.1(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - '@storybook/builder-webpack5@8.6.4(esbuild@0.25.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2)': + '@storybook/builder-webpack5@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2)': dependencies: '@storybook/core-webpack': 8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@types/semver': 7.5.8 @@ -22118,23 +22167,23 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.98.0(esbuild@0.25.0)) + css-loader: 6.11.0(webpack@5.98.0) es-module-lexer: 1.6.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0)) - html-webpack-plugin: 5.6.3(webpack@5.98.0(esbuild@0.25.0)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.2)(webpack@5.98.0) + html-webpack-plugin: 5.6.3(webpack@5.98.0) magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.1 storybook: 8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.98.0(esbuild@0.25.0)) - terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.0)) + style-loader: 3.3.4(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(webpack@5.98.0) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.98.0(esbuild@0.25.0) - webpack-dev-middleware: 6.1.3(webpack@5.98.0(esbuild@0.25.0)) + webpack: 5.98.0 + webpack-dev-middleware: 6.1.3(webpack@5.98.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -22242,7 +22291,7 @@ snapshots: dependencies: storybook: 8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.6.4(esbuild@0.25.0)(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.37.0)(typescript@5.8.2)(webpack-hot-middleware@2.26.1)(webpack@5.98.0(esbuild@0.25.0))': + '@storybook/nextjs@8.6.4(next@15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.37.0)(typescript@5.8.2)(webpack-hot-middleware@2.26.1)(webpack@5.98.0)': dependencies: '@babel/core': 7.26.10 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) @@ -22257,30 +22306,30 @@ snapshots: '@babel/preset-react': 7.26.3(@babel/core@7.26.10) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.10) '@babel/runtime': 7.26.10 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-hot-middleware@2.26.1)(webpack@5.98.0(esbuild@0.25.0)) - '@storybook/builder-webpack5': 8.6.4(esbuild@0.25.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) - '@storybook/preset-react-webpack': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.37.0)(webpack-hot-middleware@2.26.1)(webpack@5.98.0) + '@storybook/builder-webpack5': 8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) + '@storybook/preset-react-webpack': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) '@storybook/react': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) '@storybook/test': 8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.0)) - css-loader: 6.11.0(webpack@5.98.0(esbuild@0.25.0)) + babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0) + css-loader: 6.11.0(webpack@5.98.0) find-up: 5.0.0 image-size: 1.2.0 loader-utils: 3.3.1 next: 15.2.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.98.0(esbuild@0.25.0)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.98.0) pnp-webpack-plugin: 1.7.0(typescript@5.8.2) postcss: 8.5.3 - postcss-loader: 8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0)) + postcss-loader: 8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 14.2.1(webpack@5.98.0(esbuild@0.25.0)) + sass-loader: 14.2.1(webpack@5.98.0) semver: 7.7.1 storybook: 8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.98.0(esbuild@0.25.0)) + style-loader: 3.3.4(webpack@5.98.0) styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -22288,7 +22337,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.8.2 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -22307,11 +22356,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2)': + '@storybook/preset-react-webpack@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2)': dependencies: '@storybook/core-webpack': 8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/react': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0) '@types/semver': 7.5.8 find-up: 5.0.0 magic-string: 0.30.17 @@ -22322,7 +22371,7 @@ snapshots: semver: 7.7.1 storybook: 8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -22341,7 +22390,7 @@ snapshots: dependencies: storybook: 8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0)': dependencies: debug: 4.4.0(supports-color@8.1.1) endent: 2.1.0 @@ -22351,7 +22400,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.8.2) tslib: 2.8.1 typescript: 5.8.2 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 transitivePeerDependencies: - supports-color @@ -23519,7 +23568,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.12 tinyrainbow: 2.0.0 - vitest: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/ui@3.0.8)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.29.2)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/ui@3.0.8)(happy-dom@17.1.8)(jiti@2.4.2)(lightningcss@1.29.2)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) '@vitest/utils@2.0.5': dependencies: @@ -24892,12 +24941,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.0)): + babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0): dependencies: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 babel-plugin-istanbul@6.1.1: dependencies: @@ -25264,6 +25313,10 @@ snapshots: esbuild: 0.20.2 node-eval: 2.0.0 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -25539,6 +25592,10 @@ snapshots: dependencies: restore-cursor: 4.0.0 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + cli-spinners@2.9.2: {} cli-welcome@2.2.3: @@ -25862,7 +25919,7 @@ snapshots: css-gradient-parser@0.0.16: {} - css-loader@6.11.0(webpack@5.98.0(esbuild@0.25.0)): + css-loader@6.11.0(webpack@5.98.0): dependencies: icss-utils: 5.1.0(postcss@8.5.3) postcss: 8.5.3 @@ -25873,7 +25930,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 css-select@4.3.0: dependencies: @@ -26032,6 +26089,13 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + default-gateway@4.2.0: dependencies: execa: 1.0.0 @@ -26051,6 +26115,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -26581,8 +26647,8 @@ snapshots: '@typescript-eslint/parser': 7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@9.22.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react: 7.37.4(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2)) @@ -26601,33 +26667,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@8.1.1) enhanced-resolve: 5.18.1 - eslint: 8.57.0 + eslint: 9.22.0(jiti@2.4.2) get-tsconfig: 4.10.0 is-bun-module: 1.3.0 stable-hash: 0.0.4 tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@8.1.1) enhanced-resolve: 5.18.1 - eslint: 9.22.0(jiti@2.4.2) + eslint: 8.57.0 get-tsconfig: 4.10.0 is-bun-module: 1.3.0 stable-hash: 0.0.4 tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -26663,14 +26729,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -26703,7 +26769,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@9.22.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -26714,7 +26780,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -27658,7 +27724,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.2)(webpack@5.98.0): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -27673,7 +27739,7 @@ snapshots: semver: 7.7.1 tapable: 2.2.1 typescript: 5.8.2 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 form-data-encoder@2.1.4: {} @@ -27796,6 +27862,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.3.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -28167,7 +28235,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.0)): + html-webpack-plugin@5.6.3(webpack@5.98.0): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28175,7 +28243,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 htmlparser2@3.10.1: dependencies: @@ -28464,6 +28532,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-empty@1.2.0: {} is-extglob@2.1.1: {} @@ -28491,6 +28561,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 @@ -28586,6 +28660,8 @@ snapshots: is-unicode-supported@1.3.0: {} + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -28603,6 +28679,10 @@ snapshots: dependencies: is-docker: 2.2.1 + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + is-yarn-global@0.4.1: {} isarray@1.0.0: {} @@ -29171,6 +29251,11 @@ snapshots: chalk: 5.4.1 is-unicode-supported: 1.3.0 + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + lokijs@1.5.12: {} longest-streak@3.1.0: {} @@ -30368,6 +30453,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + mimic-response@3.1.0: {} mimic-response@4.0.0: {} @@ -30676,7 +30763,7 @@ snapshots: node-int64@0.4.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.98.0(esbuild@0.25.0)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.98.0): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -30703,7 +30790,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 node-releases@2.0.19: {} @@ -30890,12 +30977,23 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-to-es@1.0.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 regex-recursion: 5.1.1 + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + open@7.4.2: dependencies: is-docker: 2.2.1 @@ -30955,6 +31053,18 @@ snapshots: string-width: 6.1.0 strip-ansi: 7.1.0 + ora@8.2.0: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + os-browserify@0.3.0: {} os-tmpdir@1.0.2: {} @@ -31388,14 +31498,14 @@ snapshots: tsx: 4.19.3 yaml: 2.7.0 - postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.0)): + postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0): dependencies: cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 1.21.7 postcss: 8.5.3 semver: 7.7.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 transitivePeerDependencies: - typescript @@ -32477,6 +32587,11 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + ret@0.2.2: {} retry@0.12.0: {} @@ -32566,6 +32681,8 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + run-applescript@7.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -32601,11 +32718,11 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@14.2.1(webpack@5.98.0(esbuild@0.25.0)): + sass-loader@14.2.1(webpack@5.98.0): dependencies: neo-async: 2.6.2 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 satori@0.12.1: dependencies: @@ -33027,6 +33144,8 @@ snapshots: dependencies: bl: 5.1.0 + stdin-discarder@0.2.2: {} + storybook@8.6.4(bufferutil@4.0.9)(prettier@3.3.3)(utf-8-validate@5.0.10): dependencies: '@storybook/core': 8.6.4(bufferutil@4.0.9)(prettier@3.3.3)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.3.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) @@ -33094,6 +33213,12 @@ snapshots: emoji-regex: 10.4.0 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + string.prototype.codepointat@0.2.1: {} string.prototype.includes@2.0.1: @@ -33206,9 +33331,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.98.0(esbuild@0.25.0)): + style-loader@3.3.4(webpack@5.98.0): dependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 style-to-object@0.4.4: dependencies: @@ -34462,7 +34587,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.98.0(esbuild@0.25.0)): + webpack-dev-middleware@6.1.3(webpack@5.98.0): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -34470,7 +34595,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0 webpack-hot-middleware@2.26.1: dependencies: From 62f629cf5458b2f1160251e1028926173fc93101 Mon Sep 17 00:00:00 2001 From: Yash <kumaryashcse@gmail.com> Date: Wed, 19 Mar 2025 05:04:57 +0530 Subject: [PATCH 2/2] append and resolve ipfs uri in calldata --- .../commands/publish-stylus/publish-stylus.ts | 6 +- .../src/contract/actions/compiler-metadata.ts | 7 +-- .../contract/actions/get-compiler-metadata.ts | 38 +++++++++++++ .../src/contract/actions/resolve-abi.ts | 55 ++++++++++++++++--- .../contract/deployment/deploy-with-abi.ts | 9 ++- .../extensions/prebuilts/deploy-published.ts | 19 ++++++- 6 files changed, 120 insertions(+), 14 deletions(-) diff --git a/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts b/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts index af1c9ce6f46..227887f6321 100644 --- a/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts +++ b/packages/thirdweb/src/cli/commands/publish-stylus/publish-stylus.ts @@ -102,7 +102,11 @@ export async function publishStylus(secretKey?: string) { devdoc: {}, userdoc: {}, }, - settings: {}, + settings: { + compilationTarget: { + "src/main.rs": contractName, + }, + }, sources: {}, }; writeFileSync(abiPath, JSON.stringify(metadata), "utf8"); diff --git a/packages/thirdweb/src/contract/actions/compiler-metadata.ts b/packages/thirdweb/src/contract/actions/compiler-metadata.ts index 1cddce4d703..9b3c85a452e 100644 --- a/packages/thirdweb/src/contract/actions/compiler-metadata.ts +++ b/packages/thirdweb/src/contract/actions/compiler-metadata.ts @@ -41,10 +41,9 @@ export function formatCompilerMetadata( meta = metadata.source_metadata; } - // TODO: fix - // const compilationTarget = meta.settings.compilationTarget; - // const targets = Object.keys(compilationTarget); - const name = ""; + const compilationTarget = meta.settings.compilationTarget; + const targets = Object.keys(compilationTarget); + const name = compilationTarget[targets[0] as keyof typeof compilationTarget]; const info = { title: meta.output.devdoc.title, author: meta.output.devdoc.author, diff --git a/packages/thirdweb/src/contract/actions/get-compiler-metadata.ts b/packages/thirdweb/src/contract/actions/get-compiler-metadata.ts index c60d33fe478..8ea913428c5 100644 --- a/packages/thirdweb/src/contract/actions/get-compiler-metadata.ts +++ b/packages/thirdweb/src/contract/actions/get-compiler-metadata.ts @@ -1,3 +1,7 @@ +import { eth_getTransactionByHash } from "../../rpc/actions/eth_getTransactionByHash.js"; +import { getRpcClient } from "../../rpc/rpc.js"; +import { download } from "../../storage/download.js"; +import { hexToString } from "../../utils/encoding/hex.js"; import type { ThirdwebContract } from "../contract.js"; import { formatCompilerMetadata } from "./compiler-metadata.js"; @@ -21,6 +25,40 @@ import { formatCompilerMetadata } from "./compiler-metadata.js"; */ export async function getCompilerMetadata(contract: ThirdwebContract) { const { address, chain } = contract; + + try { + const res = await fetch( + `https://contract.thirdweb-dev.com/creation/${contract.chain.id}/${contract.address}`, + ); + const creationData = await res.json(); + + if (creationData.status === "1" && creationData.result[0]?.txHash) { + const rpcClient = getRpcClient({ + client: contract.client, + chain: contract.chain, + }); + const creationTx = await eth_getTransactionByHash(rpcClient, { + hash: creationData.result[0]?.txHash, + }); + + const initCode = creationTx.input; + const lengthHex = initCode.slice(-2); + const dataLength = Number.parseInt(lengthHex, 16) * 2; + const encodedIpfsHex = initCode.slice(-dataLength - 2, -2); + const uri = hexToString(`0x${encodedIpfsHex}`); + + const res = await download({ + client: contract.client, + uri, + }); + const metadata = await res.json(); + + return formatCompilerMetadata(metadata); + } + } catch (e) { + console.debug(e); + } + const response = await fetch( `https://contract.thirdweb.com/metadata/${chain.id}/${address}`, { diff --git a/packages/thirdweb/src/contract/actions/resolve-abi.ts b/packages/thirdweb/src/contract/actions/resolve-abi.ts index 2c53edff16e..d9af5d8b762 100644 --- a/packages/thirdweb/src/contract/actions/resolve-abi.ts +++ b/packages/thirdweb/src/contract/actions/resolve-abi.ts @@ -1,5 +1,8 @@ import { type Abi, formatAbi, parseAbi } from "abitype"; +import { eth_getTransactionByHash } from "../../rpc/actions/eth_getTransactionByHash.js"; +import { getRpcClient } from "../../rpc/rpc.js"; import { download } from "../../storage/download.js"; +import { hexToString } from "../../utils/encoding/hex.js"; import { getClientFetch } from "../../utils/fetch.js"; import { withCache } from "../../utils/promise/withCache.js"; import { type ThirdwebContract, getContract } from "../contract.js"; @@ -43,15 +46,53 @@ export function resolveContractAbi<abi extends Abi>( return (await resolveCompositeAbi(contract as ThirdwebContract)) as abi; } - // try to get it from the api try { - return (await resolveAbiFromContractApi( - contract, - contractApiBaseUrl, - )) as abi; + const res = await fetch( + `https://contract.thirdweb-dev.com/creation/${contract.chain.id}/${contract.address}`, + ); + const creationData = await res.json(); + + if (creationData.status === "1" && creationData.result[0]?.txHash) { + const rpcClient = getRpcClient({ + client: contract.client, + chain: contract.chain, + }); + const creationTx = await eth_getTransactionByHash(rpcClient, { + hash: creationData.result[0]?.txHash, + }); + + const initCode = creationTx.input; + const lengthHex = initCode.slice(-2); + const dataLength = Number.parseInt(lengthHex, 16) * 2; + const encodedIpfsHex = initCode.slice(-dataLength - 2, -2); + const uri = hexToString(`0x${encodedIpfsHex}`); + + const res = await download({ + client: contract.client, + uri, + }); + const metadata = await res.json(); + + return metadata.output.abi as abi; + } else { + return (await resolveCompositeAbi( + contract as ThirdwebContract, + )) as abi; + } } catch { - // if that fails, try to resolve it from the bytecode - return (await resolveCompositeAbi(contract as ThirdwebContract)) as abi; + // try to get it from the api + try { + return (await resolveAbiFromContractApi( + contract, + contractApiBaseUrl, + )) as abi; + } catch { + // console.debug(e); + // if that fails, try to resolve it from the bytecode + return (await resolveCompositeAbi( + contract as ThirdwebContract, + )) as abi; + } } }, { diff --git a/packages/thirdweb/src/contract/deployment/deploy-with-abi.ts b/packages/thirdweb/src/contract/deployment/deploy-with-abi.ts index 73f0bd3bb5b..ff29c5ba720 100644 --- a/packages/thirdweb/src/contract/deployment/deploy-with-abi.ts +++ b/packages/thirdweb/src/contract/deployment/deploy-with-abi.ts @@ -24,6 +24,7 @@ export type PrepareDirectDeployTransactionOptions = Prettify< abi: Abi; bytecode: Hex; constructorParams?: Record<string, unknown>; + extraData?: string; } >; @@ -70,6 +71,7 @@ export function prepareDirectDeployTransaction( constructorAbi?.inputs || [], // Leave an empty array if there's no constructor normalizeFunctionParams(constructorAbi, options.constructorParams), ), + `0x${options.extraData}`, ]), }); } @@ -121,6 +123,7 @@ export async function deployContract( options: PrepareDirectDeployTransactionOptions & { account: Account; salt?: string; + extraData?: string; }, ) { if (await isZkSyncChain(options.chain)) { @@ -160,7 +163,11 @@ export async function deployContract( chain: options.chain, client: options.client, to: info.create2FactoryAddress, - data: info.initBytecodeWithsalt, + data: options.extraData + ? (info.initBytecodeWithsalt.concat( + options.extraData, + ) as `0x${string}`) + : info.initBytecodeWithsalt, }), }); return address; diff --git a/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts b/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts index 4c566380c56..05e0b84bc5b 100644 --- a/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts +++ b/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts @@ -16,7 +16,11 @@ import { fetchBytecodeFromCompilerMetadata, } from "../../utils/any-evm/deploy-metadata.js"; import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js"; -import type { Hex } from "../../utils/encoding/hex.js"; +import { + type Hex, + numberToHex, + stringToHex, +} from "../../utils/encoding/hex.js"; import type { Account } from "../../wallets/interfaces/wallet.js"; import { getAllDefaultConstructorParamsForImplementation } from "./get-required-transactions.js"; import { @@ -194,6 +198,7 @@ export async function deployContractfromDeployMetadata( compilerMetadata: deployMetadata, contractParams: processedInitializeParams, salt, + metadataUri: deployMetadata.metadataUri, }); } case "autoFactory": { @@ -311,10 +316,21 @@ async function directDeploy(options: { compilerMetadata: CompilerMetadata; contractParams?: Record<string, unknown>; salt?: string; + metadataUri?: string; }): Promise<string> { const { account, client, chain, compilerMetadata, contractParams, salt } = options; + let extraData: string | undefined; + if (options.metadataUri) { + const uriHex = stringToHex(options.metadataUri).replace("0x", ""); + const lengthHex = numberToHex(uriHex.length / 2, { size: 1 }).replace( + "0x", + "", + ); + extraData = uriHex.concat(lengthHex); + } + const { deployContract } = await import( "../../contract/deployment/deploy-with-abi.js" ); @@ -330,6 +346,7 @@ async function directDeploy(options: { abi: compilerMetadata.abi, constructorParams: contractParams, salt, + extraData, }); }