From 525bdcf68c8658eb5a6a8579e6b0c813439774d0 Mon Sep 17 00:00:00 2001 From: Arseniy Klempner Date: Thu, 20 Nov 2025 15:10:42 -0800 Subject: [PATCH] fix: use js for generate abi script --- package-lock.json | 23 +++++++++- packages/rln/generate_contract_abi.js | 66 +++++++++++++++++++++++++++ packages/rln/generate_contract_abi.sh | 42 ----------------- packages/rln/package.json | 2 +- 4 files changed, 89 insertions(+), 44 deletions(-) create mode 100644 packages/rln/generate_contract_abi.js delete mode 100755 packages/rln/generate_contract_abi.sh diff --git a/package-lock.json b/package-lock.json index 5af6364b73..912a4f0258 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31414,6 +31414,26 @@ "devOptional": true, "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -34761,7 +34781,8 @@ "@waku/message-encryption": "^0.0.37", "deep-equal-in-any-order": "^2.0.6", "fast-check": "^3.23.2", - "rollup-plugin-copy": "^3.5.0" + "rollup-plugin-copy": "^3.5.0", + "tsx": "^4.19.2" }, "engines": { "node": ">=22" diff --git a/packages/rln/generate_contract_abi.js b/packages/rln/generate_contract_abi.js new file mode 100644 index 0000000000..5044cb5b41 --- /dev/null +++ b/packages/rln/generate_contract_abi.js @@ -0,0 +1,66 @@ +import { execSync } from "child_process"; +import { existsSync, rmSync } from "fs"; +import { dirname, join } from "path"; +import process from "process"; +import { fileURLToPath } from "url"; + +// Get script directory (equivalent to BASH_SOURCE in bash) +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const CONTRACT_DIR = join(__dirname, "waku-rlnv2-contract"); +const REPO_URL = "git@github.com:waku-org/waku-rlnv2-contract.git"; + +/** + * Execute a shell command and print output in real-time + * @param {string} command - The command to execute + * @param {object} options - Options for execSync + */ +function exec(command, options = {}) { + execSync(command, { + stdio: "inherit", + cwd: options.cwd || __dirname, + ...options + }); +} + +async function main() { + try { + console.log("📦 Setting up waku-rlnv2-contract..."); + + // Remove existing directory if it exists + if (existsSync(CONTRACT_DIR)) { + console.log("🗑️ Removing existing waku-rlnv2-contract directory..."); + rmSync(CONTRACT_DIR, { recursive: true, force: true }); + } + + // Clone the repository + console.log("📥 Cloning waku-rlnv2-contract..."); + exec(`git clone ${REPO_URL} ${CONTRACT_DIR}`); + + // Install dependencies + console.log("📦 Installing dependencies..."); + exec("npm install", { cwd: CONTRACT_DIR }); + + // Build contracts with Foundry + console.log("🔨 Building contracts with Foundry..."); + exec("forge build", { cwd: CONTRACT_DIR }); + + // Generate ABIs with wagmi + console.log("⚙️ Generating ABIs with wagmi..."); + exec("npx wagmi generate"); + + console.log("✅ Contract ABIs generated successfully!"); + } catch (error) { + console.log( + "❌ Error generating contract ABIs:", + error instanceof Error ? error.message : error + ); + process.exit(1); + } +} + +main().catch((error) => { + console.log(error); + process.exit(1); +}); diff --git a/packages/rln/generate_contract_abi.sh b/packages/rln/generate_contract_abi.sh deleted file mode 100755 index 3a41c7c4fa..0000000000 --- a/packages/rln/generate_contract_abi.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -set -e - -# Script to generate contract ABIs from waku-rlnv2-contract - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -CONTRACT_DIR="$SCRIPT_DIR/waku-rlnv2-contract" -REPO_URL="git@github.com:waku-org/waku-rlnv2-contract.git" - -echo "📦 Setting up waku-rlnv2-contract..." - -# Remove existing directory if it exists -if [ -d "$CONTRACT_DIR" ]; then - echo "🗑️ Removing existing waku-rlnv2-contract directory..." - rm -rf "$CONTRACT_DIR" -fi - -# Clone the repository -echo "📥 Cloning waku-rlnv2-contract..." -git clone "$REPO_URL" "$CONTRACT_DIR" - -# Navigate to contract directory -cd "$CONTRACT_DIR" - -# Install dependencies -echo "📦 Installing dependencies..." -npm install - -# Build contracts with Foundry -echo "🔨 Building contracts with Foundry..." -forge build - -# Navigate back to rln package -cd "$SCRIPT_DIR" - -# Generate ABIs with wagmi -echo "⚙️ Generating ABIs with wagmi..." -npx wagmi generate - -echo "✅ Contract ABIs generated successfully!" -echo "📄 Output: src/contract/wagmi/generated.ts" diff --git a/packages/rln/package.json b/packages/rln/package.json index 9eb5beaecd..45f074cf29 100644 --- a/packages/rln/package.json +++ b/packages/rln/package.json @@ -44,7 +44,7 @@ "watch:test": "mocha --watch", "prepublish": "npm run build", "reset-hard": "git clean -dfx -e .idea && git reset --hard && npm i && npm run build", - "setup:contract-abi": "./generate_contract_abi.sh" + "setup:contract-abi": "node generate_contract_abi.js" }, "engines": { "node": ">=22"