solforge 0.2.4 → 0.2.6

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.
Files changed (82) hide show
  1. package/README.md +471 -79
  2. package/cli.cjs +106 -78
  3. package/package.json +1 -1
  4. package/scripts/install.sh +1 -1
  5. package/scripts/postinstall.cjs +69 -61
  6. package/server/lib/base58.ts +1 -1
  7. package/server/methods/account/get-account-info.ts +3 -7
  8. package/server/methods/account/get-balance.ts +3 -7
  9. package/server/methods/account/get-multiple-accounts.ts +2 -1
  10. package/server/methods/account/get-parsed-account-info.ts +3 -7
  11. package/server/methods/account/parsers/index.ts +2 -2
  12. package/server/methods/account/parsers/loader-upgradeable.ts +14 -1
  13. package/server/methods/account/parsers/spl-token.ts +29 -10
  14. package/server/methods/account/request-airdrop.ts +44 -31
  15. package/server/methods/block/get-block.ts +3 -7
  16. package/server/methods/block/get-blocks-with-limit.ts +3 -7
  17. package/server/methods/block/is-blockhash-valid.ts +3 -7
  18. package/server/methods/get-address-lookup-table.ts +3 -7
  19. package/server/methods/program/get-program-accounts.ts +9 -9
  20. package/server/methods/program/get-token-account-balance.ts +3 -7
  21. package/server/methods/program/get-token-accounts-by-delegate.ts +4 -3
  22. package/server/methods/program/get-token-accounts-by-owner.ts +61 -35
  23. package/server/methods/program/get-token-largest-accounts.ts +3 -2
  24. package/server/methods/program/get-token-supply.ts +3 -2
  25. package/server/methods/solforge/index.ts +9 -6
  26. package/server/methods/transaction/get-parsed-transaction.ts +3 -7
  27. package/server/methods/transaction/get-signature-statuses.ts +14 -7
  28. package/server/methods/transaction/get-signatures-for-address.ts +3 -7
  29. package/server/methods/transaction/get-transaction.ts +167 -81
  30. package/server/methods/transaction/send-transaction.ts +29 -16
  31. package/server/methods/transaction/simulate-transaction.ts +3 -2
  32. package/server/rpc-server.ts +47 -34
  33. package/server/types.ts +9 -6
  34. package/server/ws-server.ts +15 -8
  35. package/src/api-server-entry.ts +91 -91
  36. package/src/cli/commands/airdrop.ts +2 -2
  37. package/src/cli/commands/config.ts +2 -2
  38. package/src/cli/commands/mint.ts +3 -3
  39. package/src/cli/commands/program-clone.ts +9 -11
  40. package/src/cli/commands/program-load.ts +3 -3
  41. package/src/cli/commands/rpc-start.ts +8 -5
  42. package/src/cli/commands/token-adopt-authority.ts +1 -1
  43. package/src/cli/commands/token-clone.ts +5 -6
  44. package/src/cli/commands/token-create.ts +5 -5
  45. package/src/cli/main.ts +38 -37
  46. package/src/cli/run-solforge.ts +20 -6
  47. package/src/cli/setup-wizard.ts +8 -6
  48. package/src/commands/add-program.ts +324 -328
  49. package/src/commands/init.ts +106 -106
  50. package/src/commands/list.ts +125 -125
  51. package/src/commands/mint.ts +247 -248
  52. package/src/commands/start.ts +837 -833
  53. package/src/commands/status.ts +80 -80
  54. package/src/commands/stop.ts +381 -382
  55. package/src/config/index.ts +33 -17
  56. package/src/config/manager.ts +150 -150
  57. package/src/db/index.ts +2 -2
  58. package/src/db/tx-store.ts +12 -8
  59. package/src/gui/public/app.css +1556 -1
  60. package/src/gui/public/build/main.css +1569 -1
  61. package/src/gui/server.ts +21 -22
  62. package/src/gui/src/api.ts +1 -1
  63. package/src/gui/src/app.tsx +96 -45
  64. package/src/gui/src/components/airdrop-mint-form.tsx +49 -19
  65. package/src/gui/src/components/clone-program-modal.tsx +31 -12
  66. package/src/gui/src/components/clone-token-modal.tsx +32 -13
  67. package/src/gui/src/components/modal.tsx +18 -11
  68. package/src/gui/src/components/programs-panel.tsx +27 -15
  69. package/src/gui/src/components/status-panel.tsx +32 -18
  70. package/src/gui/src/components/tokens-panel.tsx +25 -19
  71. package/src/gui/src/index.css +491 -463
  72. package/src/index.ts +177 -149
  73. package/src/rpc/start.ts +1 -1
  74. package/src/services/api-server.ts +494 -475
  75. package/src/services/port-manager.ts +164 -167
  76. package/src/services/process-registry.ts +144 -145
  77. package/src/services/program-cloner.ts +312 -312
  78. package/src/services/token-cloner.ts +799 -797
  79. package/src/services/validator.ts +288 -290
  80. package/src/types/config.ts +72 -72
  81. package/src/utils/shell.ts +75 -75
  82. package/src/utils/token-loader.ts +78 -78
@@ -1,99 +1,99 @@
1
1
  import chalk from "chalk";
2
- import { runCommand, checkSolanaTools } from "../utils/shell.js";
3
2
  import { configManager } from "../config/manager.js";
4
3
  import { processRegistry } from "../services/process-registry.js";
4
+ import { checkSolanaTools, runCommand } from "../utils/shell.js";
5
5
 
6
6
  export async function statusCommand(): Promise<void> {
7
- console.log(chalk.blue("📊 Checking system status...\n"));
7
+ console.log(chalk.blue("📊 Checking system status...\n"));
8
8
 
9
- // Check Solana CLI tools
10
- console.log(chalk.cyan("🔧 Solana CLI Tools:"));
11
- const tools = await checkSolanaTools();
9
+ // Check Solana CLI tools
10
+ console.log(chalk.cyan("🔧 Solana CLI Tools:"));
11
+ const tools = await checkSolanaTools();
12
12
 
13
- console.log(
14
- ` ${tools.solana ? "✅" : "❌"} solana CLI: ${
15
- tools.solana ? "Available" : "Not found"
16
- }`
17
- );
18
- console.log(
19
- ` ${tools.splToken ? "✅" : "❌"} spl-token CLI: ${
20
- tools.splToken ? "Available" : "Not found"
21
- }`
22
- );
13
+ console.log(
14
+ ` ${tools.solana ? "✅" : "❌"} solana CLI: ${
15
+ tools.solana ? "Available" : "Not found"
16
+ }`,
17
+ );
18
+ console.log(
19
+ ` ${tools.splToken ? "✅" : "❌"} spl-token CLI: ${
20
+ tools.splToken ? "Available" : "Not found"
21
+ }`,
22
+ );
23
23
 
24
- if (!tools.solana || !tools.splToken) {
25
- console.log(chalk.yellow("\n💡 Install Solana CLI tools:"));
26
- console.log(
27
- chalk.gray(
28
- ' sh -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)"'
29
- )
30
- );
31
- console.log();
32
- }
24
+ if (!tools.solana || !tools.splToken) {
25
+ console.log(chalk.yellow("\n💡 Install Solana CLI tools:"));
26
+ console.log(
27
+ chalk.gray(
28
+ ' sh -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)"',
29
+ ),
30
+ );
31
+ console.log();
32
+ }
33
33
 
34
- // Check running validators
35
- console.log(chalk.cyan("\n🏗️ Validator Status:"));
34
+ // Check running validators
35
+ console.log(chalk.cyan("\n🏗️ Validator Status:"));
36
36
 
37
- // Clean up dead processes first
38
- await processRegistry.cleanup();
37
+ // Clean up dead processes first
38
+ await processRegistry.cleanup();
39
39
 
40
- const validators = processRegistry.getRunning();
40
+ const validators = processRegistry.getRunning();
41
41
 
42
- if (validators.length === 0) {
43
- console.log(` ❌ No validators running`);
44
- console.log(` 💡 Run 'solforge start' to launch a validator`);
45
- } else {
46
- console.log(
47
- ` ✅ ${validators.length} validator${
48
- validators.length > 1 ? "s" : ""
49
- } running`
50
- );
42
+ if (validators.length === 0) {
43
+ console.log(` ❌ No validators running`);
44
+ console.log(` 💡 Run 'solforge start' to launch a validator`);
45
+ } else {
46
+ console.log(
47
+ ` ✅ ${validators.length} validator${
48
+ validators.length > 1 ? "s" : ""
49
+ } running`,
50
+ );
51
51
 
52
- for (const validator of validators) {
53
- const isRunning = await processRegistry.isProcessRunning(validator.pid);
54
- if (isRunning) {
55
- console.log(` 🔹 ${validator.name} (${validator.id}):`);
56
- console.log(` 🌐 RPC: ${validator.rpcUrl}`);
57
- console.log(` 💰 Faucet: ${validator.faucetUrl}`);
58
- console.log(` 🆔 PID: ${validator.pid}`);
52
+ for (const validator of validators) {
53
+ const isRunning = await processRegistry.isProcessRunning(validator.pid);
54
+ if (isRunning) {
55
+ console.log(` 🔹 ${validator.name} (${validator.id}):`);
56
+ console.log(` 🌐 RPC: ${validator.rpcUrl}`);
57
+ console.log(` 💰 Faucet: ${validator.faucetUrl}`);
58
+ console.log(` 🆔 PID: ${validator.pid}`);
59
59
 
60
- // Get current slot for this validator
61
- try {
62
- const slotResult = await runCommand(
63
- "solana",
64
- ["slot", "--url", validator.rpcUrl, "--output", "json"],
65
- { silent: true, jsonOutput: true }
66
- );
60
+ // Get current slot for this validator
61
+ try {
62
+ const slotResult = await runCommand(
63
+ "solana",
64
+ ["slot", "--url", validator.rpcUrl, "--output", "json"],
65
+ { silent: true, jsonOutput: true },
66
+ );
67
67
 
68
- if (slotResult.success && typeof slotResult.stdout === "object") {
69
- console.log(` 📊 Current slot: ${slotResult.stdout}`);
70
- }
71
- } catch {
72
- // Ignore slot check errors
73
- }
74
- } else {
75
- processRegistry.updateStatus(validator.id, "stopped");
76
- console.log(
77
- ` ⚠️ ${validator.name} (${validator.id}): Process stopped`
78
- );
79
- }
80
- }
68
+ if (slotResult.success && typeof slotResult.stdout === "object") {
69
+ console.log(` 📊 Current slot: ${slotResult.stdout}`);
70
+ }
71
+ } catch {
72
+ // Ignore slot check errors
73
+ }
74
+ } else {
75
+ processRegistry.updateStatus(validator.id, "stopped");
76
+ console.log(
77
+ ` ⚠️ ${validator.name} (${validator.id}): Process stopped`,
78
+ );
79
+ }
80
+ }
81
81
 
82
- console.log(` 💡 Run 'solforge list' for detailed validator information`);
83
- }
82
+ console.log(` 💡 Run 'solforge list' for detailed validator information`);
83
+ }
84
84
 
85
- // Check config file
86
- console.log(chalk.cyan("\n📄 Configuration:"));
87
- try {
88
- const config = configManager.getConfig();
89
- console.log(` ✅ Config loaded: ${configManager.getConfigPath()}`);
90
- console.log(` 📝 Project: ${config.name}`);
91
- console.log(` 🪙 Tokens: ${config.tokens.length}`);
92
- console.log(` 📦 Programs: ${config.programs.length}`);
93
- } catch (error) {
94
- console.log(` ❌ No valid configuration found`);
95
- console.log(` 💡 Run 'solforge init' to create one`);
96
- }
85
+ // Check config file
86
+ console.log(chalk.cyan("\n📄 Configuration:"));
87
+ try {
88
+ const config = configManager.getConfig();
89
+ console.log(` ✅ Config loaded: ${configManager.getConfigPath()}`);
90
+ console.log(` 📝 Project: ${config.name}`);
91
+ console.log(` 🪙 Tokens: ${config.tokens.length}`);
92
+ console.log(` 📦 Programs: ${config.programs.length}`);
93
+ } catch (_error) {
94
+ console.log(` ❌ No valid configuration found`);
95
+ console.log(` 💡 Run 'solforge init' to create one`);
96
+ }
97
97
 
98
- console.log();
98
+ console.log();
99
99
  }