@flarestudio/fcc-workbench 1.0.20 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,41 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import { spawn } from 'child_process';
4
+ import os from 'os';
5
+ const DEFAULT_FCE_SIGN_REF = process.env.FLARE_FCC_FCE_SIGN_REF || 'main';
6
+ // Default sibling refs chosen to match `fce-sign` current main (as of 2026-05-28):
7
+ // - `sign-extension/tools` go.mod requires tee-node v0.0.20 and tee-proxy v0.0.1, with replace directives.
8
+ // Users can override any of these via env vars.
9
+ const DEFAULT_TEE_NODE_REF = process.env.FLARE_FCC_TEE_NODE_REF || 'v0.0.20';
10
+ const DEFAULT_TEE_PROXY_REF = process.env.FLARE_FCC_TEE_PROXY_REF || '0.0.1';
11
+ const GLOBAL_ROOT = path.join(os.homedir(), '.flare-fcc', 'toolchains');
12
+ const TOOLCHAIN_NAME = 'fce-sign';
4
13
  const REPO_URL = 'https://github.com/flare-foundation/fce-sign.git';
5
- const TOOLS_DIR = path.join('.flare-fcc-tools', 'fce-sign');
14
+ const TEE_NODE_REPO_URL = 'https://github.com/flare-foundation/tee-node.git';
15
+ const TEE_PROXY_REPO_URL = 'https://github.com/flare-foundation/tee-proxy.git';
16
+ function detectSiblingVersions(repoPath) {
17
+ try {
18
+ const goModPath = path.join(repoPath, 'go', 'tools', 'go.mod');
19
+ if (!fs.existsSync(goModPath))
20
+ return { teeNode: null, teeProxy: null };
21
+ const text = fs.readFileSync(goModPath, 'utf8');
22
+ const teeNodeMatch = text.match(/github\.com\/flare-foundation\/tee-node\s+v([0-9]+\.[0-9]+\.[0-9]+)/);
23
+ const teeProxyMatch = text.match(/github\.com\/flare-foundation\/tee-proxy\s+v([0-9]+\.[0-9]+\.[0-9]+)/);
24
+ return {
25
+ teeNode: teeNodeMatch ? `v${teeNodeMatch[1]}` : null,
26
+ teeProxy: teeProxyMatch ? `v${teeProxyMatch[1]}` : null,
27
+ };
28
+ }
29
+ catch {
30
+ return { teeNode: null, teeProxy: null };
31
+ }
32
+ }
6
33
  function run(command, args, options) {
7
34
  return new Promise((resolve, reject) => {
8
35
  const child = spawn(command, args, {
9
36
  cwd: options.cwd,
10
37
  env: { ...process.env, ...options.env },
11
- shell: true,
38
+ shell: false,
12
39
  stdio: options.capture ? ['ignore', 'pipe', 'pipe'] : 'inherit',
13
40
  });
14
41
  let output = '';
@@ -28,27 +55,55 @@ function run(command, args, options) {
28
55
  child.on('close', (code) => {
29
56
  if (code === 0)
30
57
  resolve(output);
31
- else
32
- reject(new Error(`${command} ${args.join(' ')} exited with code ${code}`));
58
+ else {
59
+ const suffix = output.trim() ? `\n${output.trim()}` : '';
60
+ reject(new Error(`${command} ${args.join(' ')} exited with code ${code}${suffix}`));
61
+ }
33
62
  });
34
63
  });
35
64
  }
36
- export async function ensureFceSignTools(projectDir = process.cwd()) {
37
- const toolsPath = path.resolve(projectDir, TOOLS_DIR);
38
- if (fs.existsSync(path.join(toolsPath, 'go', 'tools', 'go.mod'))) {
39
- return toolsPath;
65
+ async function commandAvailable(command) {
66
+ try {
67
+ if (process.platform === 'win32') {
68
+ await run('where', [command], { cwd: process.cwd(), capture: true });
69
+ }
70
+ else {
71
+ await run('bash', ['-lc', `command -v ${command}`], { cwd: process.cwd(), capture: true });
72
+ }
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
40
77
  }
41
- fs.ensureDirSync(path.dirname(toolsPath));
42
- await run('git', ['clone', '--depth', '1', REPO_URL, toolsPath], {
43
- cwd: projectDir,
44
- });
45
- return toolsPath;
78
+ }
79
+ export async function assertE2EPrereqs() {
80
+ const missing = [];
81
+ if (!(await commandAvailable('jq')))
82
+ missing.push('jq');
83
+ if (!(await commandAvailable('forge')))
84
+ missing.push('forge');
85
+ if (missing.length === 0)
86
+ return;
87
+ const hint = process.platform === 'win32'
88
+ ? 'Install jq + Foundry in the environment where you run this command.'
89
+ : 'Install prerequisites:\n' +
90
+ ' - jq: `sudo apt-get update && sudo apt-get install -y jq`\n' +
91
+ ' - Foundry: `curl -L https://foundry.paradigm.xyz | bash && foundryup`';
92
+ throw new Error(`Missing required tools for E2E test: ${missing.join(', ')}.\n${hint}`);
46
93
  }
47
94
  function toolEnv(env) {
48
- const cleanPrivateKey = env.PRIVATE_KEY?.trim().replace(/^0x/, '');
95
+ const rawPrivateKey = env.PRIVATE_KEY?.trim();
96
+ const cleanPrivateKey = rawPrivateKey?.replace(/^0x/, '');
49
97
  return {
50
98
  LANGUAGE: env.LANGUAGE || 'typescript',
51
- PRIVATE_KEY: cleanPrivateKey,
99
+ // Keep both forms: some tools expect 0x-prefixed, others expect raw hex.
100
+ PRIVATE_KEY: rawPrivateKey ?? cleanPrivateKey,
101
+ PRIVATE_KEY_HEX: cleanPrivateKey,
102
+ DEPLOYMENT_PRIVATE_KEY: rawPrivateKey ?? cleanPrivateKey,
103
+ DEPLOYMENT_PRIVATE_KEY_HEX: cleanPrivateKey,
104
+ SIMULATED_TEE: env.SIMULATED_TEE,
105
+ LOCAL_MODE: env.LOCAL_MODE,
106
+ NORMAL_PROXY_URL: env.NORMAL_PROXY_URL,
52
107
  INITIAL_OWNER: env.INITIAL_OWNER,
53
108
  INSTRUCTION_SENDER: env.INSTRUCTION_SENDER,
54
109
  EXTENSION_ID: env.EXTENSION_ID,
@@ -57,22 +112,154 @@ function toolEnv(env) {
57
112
  RPC_URL: env.RPC_URL || 'https://coston2-api.flare.network/ext/C/rpc',
58
113
  };
59
114
  }
60
- function addressesFile(toolsPath) {
61
- return path.join(toolsPath, 'config', 'coston2', 'deployed-addresses.json');
115
+ function toolExeName(command) {
116
+ return process.platform === 'win32' ? `${command}.exe` : command;
117
+ }
118
+ function toolchainRoot(ref) {
119
+ // Single shared root for the toolchain. We keep a "current" checkout for `fce-sign`
120
+ // and sibling repos needed by its replace directives. We also keep per-ref bin outputs.
121
+ void ref;
122
+ return path.join(GLOBAL_ROOT, TOOLCHAIN_NAME);
123
+ }
124
+ function goBinDir(ref) {
125
+ const safeRef = (ref || 'main').replace(/[^a-zA-Z0-9._-]/g, '_');
126
+ return path.join(toolchainRoot(ref), 'bin', safeRef);
127
+ }
128
+ function repoDir(ref) {
129
+ void ref;
130
+ return path.join(toolchainRoot(ref), 'src');
131
+ }
132
+ function addressesFilePath(ref) {
133
+ // fce-sign repo has network configs under config/<network>/...
134
+ return path.join(repoDir(ref), 'config', 'coston2', 'deployed-addresses.json');
135
+ }
136
+ function siblingRepoDir(ref, name) {
137
+ void ref;
138
+ // replace directives in fce-sign/go/tools/go.mod go up 4 levels from `src/go/tools`
139
+ // to reach `GLOBAL_ROOT`, so sibling repos must live directly under `GLOBAL_ROOT`.
140
+ return path.join(GLOBAL_ROOT, name);
141
+ }
142
+ async function ensureRepo(ref) {
143
+ const repoPath = repoDir(ref);
144
+ if (fs.existsSync(path.join(repoPath, '.git')))
145
+ return repoPath;
146
+ await fs.ensureDir(path.dirname(repoPath));
147
+ process.stdout.write('Installing Flare toolchain (one-time)…\n');
148
+ // Shallow clone of the default branch; we can fetch/checkout refs later if needed.
149
+ await run('git', ['clone', '--depth', '1', REPO_URL, repoPath], { cwd: path.dirname(repoPath), capture: true });
150
+ return repoPath;
151
+ }
152
+ async function ensureSiblingRepo(name, repoUrl, ref) {
153
+ const repoPath = siblingRepoDir(ref, name);
154
+ if (fs.existsSync(path.join(repoPath, '.git')))
155
+ return repoPath;
156
+ await fs.ensureDir(path.dirname(repoPath));
157
+ await run('git', ['clone', '--depth', '1', repoUrl, repoPath], { cwd: path.dirname(repoPath), capture: true });
158
+ return repoPath;
159
+ }
160
+ async function ensureRepoRef(repoPath, ref) {
161
+ // If ref is "main" we can skip extra work (already cloned depth=1).
162
+ if (!ref || ref === 'main')
163
+ return;
164
+ // Fetch ref (tag/commit/branch) with minimal history then checkout.
165
+ await run('git', ['fetch', '--depth', '1', 'origin', ref], { cwd: repoPath, capture: true });
166
+ await run('git', ['checkout', '--force', 'FETCH_HEAD'], { cwd: repoPath, capture: true });
167
+ }
168
+ function bindingsDir(repoPath) {
169
+ return path.join(repoPath, 'go', 'tools', 'pkg', 'contracts', 'sign');
170
+ }
171
+ function bindingsReady(repoPath) {
172
+ const dir = bindingsDir(repoPath);
173
+ return (fs.existsSync(path.join(dir, 'InstructionSender.abi')) &&
174
+ fs.existsSync(path.join(dir, 'InstructionSender.bin')));
175
+ }
176
+ async function ensureGoToolBuilt(command) {
177
+ const ref = DEFAULT_FCE_SIGN_REF;
178
+ const binDir = goBinDir(ref);
179
+ fs.ensureDirSync(binDir);
180
+ const exePath = path.join(binDir, toolExeName(command));
181
+ if (fs.existsSync(exePath))
182
+ return exePath;
183
+ const repoPath = await ensureRepo(ref);
184
+ await ensureRepoRef(repoPath, ref);
185
+ // fce-sign uses local replace directives pointing to sibling repositories.
186
+ // Provide those repos in the expected relative locations so `go build` works.
187
+ const teeNodePath = await ensureSiblingRepo('tee-node', TEE_NODE_REPO_URL, ref);
188
+ const teeProxyPath = await ensureSiblingRepo('tee-proxy', TEE_PROXY_REPO_URL, ref);
189
+ // Prefer explicit pinning for sibling repos. Auto-detecting versions from go.mod can be noisy
190
+ // (and refs may not exist as tags), so only try to checkout when the user provided a ref.
191
+ if (DEFAULT_TEE_NODE_REF) {
192
+ await ensureRepoRef(teeNodePath, DEFAULT_TEE_NODE_REF);
193
+ }
194
+ if (DEFAULT_TEE_PROXY_REF) {
195
+ await ensureRepoRef(teeProxyPath, DEFAULT_TEE_PROXY_REF);
196
+ }
197
+ const toolsCwd = path.join(repoPath, 'go', 'tools');
198
+ try {
199
+ // Some tools rely on generated contract bindings (abigen). Ensure the ABI/BIN exist first.
200
+ // `fce-sign` provides a helper script that compiles Solidity via Foundry and extracts ABI/BIN.
201
+ if (!bindingsReady(repoPath)) {
202
+ const scriptPath = path.join(repoPath, 'scripts', 'generate-bindings.sh');
203
+ if (fs.existsSync(scriptPath)) {
204
+ // The bindings script needs jq + forge.
205
+ await assertE2EPrereqs();
206
+ await run('bash', [scriptPath], { cwd: repoPath, capture: true });
207
+ }
208
+ }
209
+ // Now run go:generate for abigen to produce autogen.go (idempotent when already generated).
210
+ await run('go', ['generate', './...'], { cwd: toolsCwd, capture: true });
211
+ // Build inside the repo's main module context so any replace directives work as intended.
212
+ await run('go', ['build', '-o', exePath, `./cmd/${command}`], { cwd: toolsCwd, capture: true });
213
+ }
214
+ catch (err) {
215
+ const detail = !bindingsReady(repoPath) && command === 'run-test'
216
+ ? '\n\nNote: Building run-test requires Foundry (forge) and jq to generate InstructionSender ABI/BIN.\n' +
217
+ 'Install prerequisites (forge + jq), or set FLARE_FCC_FCE_SIGN_REF to a ref that vendors bindings.'
218
+ : '';
219
+ throw new Error(`Failed to build Flare tool "${command}" from ${REPO_URL}@${ref}.\n` +
220
+ `Ensure Go is installed and you can reach GitHub.\n` +
221
+ `You can pin a specific version by setting FLARE_FCC_FCE_SIGN_REF.\n` +
222
+ `Original error: ${err?.message ?? String(err)}${detail}`);
223
+ }
224
+ if (!fs.existsSync(exePath)) {
225
+ throw new Error(`Tool "${command}" build finished but binary not found at ${exePath}.`);
226
+ }
227
+ return exePath;
62
228
  }
63
229
  export async function runGoTool(command, env, args = [], capture = false) {
64
- const toolsPath = await ensureFceSignTools();
65
- const cwd = path.join(toolsPath, 'go', 'tools');
230
+ const exe = await ensureGoToolBuilt(command);
231
+ const ref = DEFAULT_FCE_SIGN_REF;
66
232
  const rpc = env.RPC_URL || 'https://coston2-api.flare.network/ext/C/rpc';
67
- return run('go', [
68
- 'run',
69
- `./cmd/${command}`,
70
- '-a',
71
- addressesFile(toolsPath),
233
+ const hasAddresses = args.includes('-a') || args.some((a) => a.startsWith('-a='));
234
+ const addresses = addressesFilePath(ref);
235
+ const finalArgs = [
72
236
  '-c',
73
237
  rpc,
238
+ ...(hasAddresses ? [] : ['-a', addresses]),
74
239
  ...args,
75
- ], { cwd, env: toolEnv(env), capture });
240
+ ];
241
+ return run(exe, finalArgs, { cwd: process.cwd(), env: toolEnv(env), capture });
242
+ }
243
+ export async function toolHelp(command) {
244
+ const exe = await ensureGoToolBuilt(command);
245
+ try {
246
+ // Go `flag` package uses `-help` (not `-h`) for help output, and some tools already use `-h` for other flags.
247
+ return await run(exe, ['-help'], { cwd: process.cwd(), capture: true });
248
+ }
249
+ catch (err) {
250
+ // Many cobra/pflag CLIs exit 0 or 2 for help; we still want the output.
251
+ // Our run() throws on non-zero codes, so fall back to executing and capturing anyway via shell.
252
+ try {
253
+ return await run('bash', ['-lc', `"${exe}" -help || true`], { cwd: process.cwd(), capture: true });
254
+ }
255
+ catch {
256
+ return err?.message ?? '';
257
+ }
258
+ }
259
+ }
260
+ export async function toolSupportsFlag(command, flag) {
261
+ const help = await toolHelp(command);
262
+ return help.includes(` ${flag}`) || help.includes(`\n ${flag}`);
76
263
  }
77
264
  export function parseExtensionId(output) {
78
265
  const matches = output.match(/0x[a-fA-F0-9]{64}/g);
@@ -81,4 +268,11 @@ export function parseExtensionId(output) {
81
268
  }
82
269
  return matches[matches.length - 1];
83
270
  }
271
+ export function parseLastAddress(output) {
272
+ const matches = output.match(/0x[a-fA-F0-9]{40}/g);
273
+ if (!matches?.length) {
274
+ throw new Error('Expected an EVM address in tool output, but none was found.');
275
+ }
276
+ return matches[matches.length - 1];
277
+ }
84
278
  //# sourceMappingURL=officialTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"officialTools.js","sourceRoot":"","sources":["../../src/modules/officialTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"officialTools.js","sourceRoot":"","sources":["../../src/modules/officialTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as stateStore from './state.js';
2
+ export type Profile = 'coston2' | 'mainnet';
3
+ export interface Step {
4
+ id: string;
5
+ title: string;
6
+ requiresDoctorOk?: boolean;
7
+ run: (ctx: {
8
+ profile: Profile;
9
+ state: stateStore.RunState;
10
+ }) => Promise<void>;
11
+ }
12
+ export declare function parseProfile(value: string): Profile;
13
+ export declare function onboard(opts: {
14
+ profile: Profile;
15
+ dryRun: boolean;
16
+ }): Promise<void>;
17
+ export declare function resume(opts: {
18
+ dryRun: boolean;
19
+ }): Promise<void>;