ovtools 0.0.0-stage → 1.0.0

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 (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +121 -2
  3. package/assets/common/bond-inspect.sh +368 -0
  4. package/assets/common/config.sh +263 -0
  5. package/assets/common/extract-data.sh +197 -0
  6. package/assets/common/harden-host.sh +37 -0
  7. package/assets/common/install-deps.sh +93 -0
  8. package/assets/common/node-enroll.sh +65 -0
  9. package/assets/common/node-setup.sh +150 -0
  10. package/assets/common/node-start.sh +90 -0
  11. package/assets/common/node-stop.sh +18 -0
  12. package/assets/common/node-upgrade.sh +45 -0
  13. package/assets/common/pre-run.sh +497 -0
  14. package/assets/common/promote-validator.sh +104 -0
  15. package/assets/deploy/10-prepare-host.sh +98 -0
  16. package/assets/deploy/20-install-toolchain.sh +93 -0
  17. package/assets/deploy/30-setup-node.sh +82 -0
  18. package/assets/deploy/40-start-node.sh +75 -0
  19. package/assets/deploy/50-verify.sh +259 -0
  20. package/assets/deploy/60-enroll.sh +304 -0
  21. package/assets/deploy/70-promote.sh +152 -0
  22. package/assets/deploy/lib.sh +398 -0
  23. package/assets/manage/10-bond-increase.sh +149 -0
  24. package/assets/manage/10-diagnose-node.sh +169 -0
  25. package/assets/manage/20-exit-validator.sh +259 -0
  26. package/assets/manage/25-recover-node.sh +291 -0
  27. package/assets/manage/30-status.sh +64 -0
  28. package/assets/manage/40-exit-withdraw.sh +133 -0
  29. package/assets/manage/bond_inc.sh +318 -0
  30. package/assets/manage/dashboard_monitor/app.js +1544 -0
  31. package/assets/manage/dashboard_monitor/assets/v2.2/css/base.css +113 -0
  32. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/content.css +133 -0
  33. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/controls.css +229 -0
  34. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/data.css +374 -0
  35. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/icons.css +35 -0
  36. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/motion.css +57 -0
  37. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/shell.css +51 -0
  38. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/sidebar.css +242 -0
  39. package/assets/manage/dashboard_monitor/assets/v2.2/css/components/topbar.css +138 -0
  40. package/assets/manage/dashboard_monitor/assets/v2.2/css/fonts.css +30 -0
  41. package/assets/manage/dashboard_monitor/assets/v2.2/css/synteq-ui-v2.css +25 -0
  42. package/assets/manage/dashboard_monitor/assets/v2.2/css/theme-dark.css +38 -0
  43. package/assets/manage/dashboard_monitor/assets/v2.2/css/theme-light.css +36 -0
  44. package/assets/manage/dashboard_monitor/assets/v2.2/css/tokens.css +61 -0
  45. package/assets/manage/dashboard_monitor/assets/v2.2/fonts/GoogleSansCode-Medium.ttf +0 -0
  46. package/assets/manage/dashboard_monitor/assets/v2.2/fonts/GoogleSansCode-Regular.ttf +0 -0
  47. package/assets/manage/dashboard_monitor/assets/v2.2/fonts/GoogleSansCode-SemiBold.ttf +0 -0
  48. package/assets/manage/dashboard_monitor/assets/v2.2/js/synteq-ui-v2.js +869 -0
  49. package/assets/manage/dashboard_monitor/deploy-dashboard.sh +230 -0
  50. package/assets/manage/dashboard_monitor/favicon.svg +13 -0
  51. package/assets/manage/dashboard_monitor/index.html +1197 -0
  52. package/assets/manage/dashboard_monitor/nginx-octra.conf +76 -0
  53. package/assets/manage/dashboard_monitor/octra-dashboard.service +29 -0
  54. package/assets/manage/dashboard_monitor/octra-node-prune.cron +12 -0
  55. package/assets/manage/dashboard_monitor/octra-node-prune.service +16 -0
  56. package/assets/manage/dashboard_monitor/octra-node-prune.timer +12 -0
  57. package/assets/manage/dashboard_monitor/prune-node-junk.sh +329 -0
  58. package/assets/manage/dashboard_monitor/server.py +1887 -0
  59. package/assets/manage/dashboard_monitor/ssl-certbot.sh +90 -0
  60. package/assets/manage/dashboard_monitor/styles.css +327 -0
  61. package/assets/manage/lib.sh +347 -0
  62. package/assets/manifest.json +143 -0
  63. package/assets/migrate/00-backup-identity.sh +67 -0
  64. package/assets/migrate/01-prepare-target.sh +145 -0
  65. package/assets/migrate/02-authorize-pull.sh +43 -0
  66. package/assets/migrate/03-pull-state.sh +102 -0
  67. package/assets/migrate/04-stop-source.sh +85 -0
  68. package/assets/migrate/05-finalize-target.sh +140 -0
  69. package/assets/migrate/06-start-target.sh +57 -0
  70. package/assets/migrate/07-verify.sh +237 -0
  71. package/assets/migrate/08-rollback.sh +54 -0
  72. package/assets/migrate/lib.sh +149 -0
  73. package/assets/upgrade/10-preflight.sh +120 -0
  74. package/assets/upgrade/20-upgrade.sh +142 -0
  75. package/assets/upgrade/30-manual-upgrade.sh +129 -0
  76. package/assets/upgrade/40-storage-prune.sh +65 -0
  77. package/assets/upgrade/50-status.sh +58 -0
  78. package/assets/upgrade/lib.sh +232 -0
  79. package/bin/ovtools.js +32 -0
  80. package/dist/api/checks.d.ts +6 -0
  81. package/dist/api/checks.d.ts.map +1 -0
  82. package/dist/api/checks.js +173 -0
  83. package/dist/api/checks.js.map +1 -0
  84. package/dist/api/hostkeys.d.ts +10 -0
  85. package/dist/api/hostkeys.d.ts.map +1 -0
  86. package/dist/api/hostkeys.js +58 -0
  87. package/dist/api/hostkeys.js.map +1 -0
  88. package/dist/api/jobs.d.ts +33 -0
  89. package/dist/api/jobs.d.ts.map +1 -0
  90. package/dist/api/jobs.js +483 -0
  91. package/dist/api/jobs.js.map +1 -0
  92. package/dist/api/nodes.d.ts +16 -0
  93. package/dist/api/nodes.d.ts.map +1 -0
  94. package/dist/api/nodes.js +126 -0
  95. package/dist/api/nodes.js.map +1 -0
  96. package/dist/api/server.d.ts +3 -0
  97. package/dist/api/server.d.ts.map +1 -0
  98. package/dist/api/server.js +443 -0
  99. package/dist/api/server.js.map +1 -0
  100. package/dist/cli.d.ts +3 -0
  101. package/dist/cli.d.ts.map +1 -0
  102. package/dist/cli.js +301 -0
  103. package/dist/cli.js.map +1 -0
  104. package/dist/constants.d.ts +76 -0
  105. package/dist/constants.d.ts.map +1 -0
  106. package/dist/constants.js +150 -0
  107. package/dist/constants.js.map +1 -0
  108. package/dist/index.d.ts +18 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +60 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/orchestrator/base.d.ts +52 -0
  113. package/dist/orchestrator/base.d.ts.map +1 -0
  114. package/dist/orchestrator/base.js +219 -0
  115. package/dist/orchestrator/base.js.map +1 -0
  116. package/dist/orchestrator/deploy.d.ts +33 -0
  117. package/dist/orchestrator/deploy.d.ts.map +1 -0
  118. package/dist/orchestrator/deploy.js +313 -0
  119. package/dist/orchestrator/deploy.js.map +1 -0
  120. package/dist/orchestrator/manage.d.ts +28 -0
  121. package/dist/orchestrator/manage.d.ts.map +1 -0
  122. package/dist/orchestrator/manage.js +267 -0
  123. package/dist/orchestrator/manage.js.map +1 -0
  124. package/dist/orchestrator/migrate.d.ts +31 -0
  125. package/dist/orchestrator/migrate.d.ts.map +1 -0
  126. package/dist/orchestrator/migrate.js +442 -0
  127. package/dist/orchestrator/migrate.js.map +1 -0
  128. package/dist/ssh/client.d.ts +39 -0
  129. package/dist/ssh/client.d.ts.map +1 -0
  130. package/dist/ssh/client.js +418 -0
  131. package/dist/ssh/client.js.map +1 -0
  132. package/dist/test/core.test.d.ts +2 -0
  133. package/dist/test/core.test.d.ts.map +1 -0
  134. package/dist/test/core.test.js +188 -0
  135. package/dist/test/core.test.js.map +1 -0
  136. package/dist/types.d.ts +267 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +3 -0
  139. package/dist/types.js.map +1 -0
  140. package/dist/utils/assets.d.ts +28 -0
  141. package/dist/utils/assets.d.ts.map +1 -0
  142. package/dist/utils/assets.js +583 -0
  143. package/dist/utils/assets.js.map +1 -0
  144. package/dist/utils/browser.d.ts +2 -0
  145. package/dist/utils/browser.d.ts.map +1 -0
  146. package/dist/utils/browser.js +23 -0
  147. package/dist/utils/browser.js.map +1 -0
  148. package/dist/utils/dashboard.d.ts +16 -0
  149. package/dist/utils/dashboard.d.ts.map +1 -0
  150. package/dist/utils/dashboard.js +177 -0
  151. package/dist/utils/dashboard.js.map +1 -0
  152. package/dist/utils/helpers.d.ts +29 -0
  153. package/dist/utils/helpers.d.ts.map +1 -0
  154. package/dist/utils/helpers.js +204 -0
  155. package/dist/utils/helpers.js.map +1 -0
  156. package/dist/utils/scripts.d.ts +60 -0
  157. package/dist/utils/scripts.d.ts.map +1 -0
  158. package/dist/utils/scripts.js +174 -0
  159. package/dist/utils/scripts.js.map +1 -0
  160. package/dist/utils/state.d.ts +12 -0
  161. package/dist/utils/state.d.ts.map +1 -0
  162. package/dist/utils/state.js +44 -0
  163. package/dist/utils/state.js.map +1 -0
  164. package/dist/utils/tar.d.ts +11 -0
  165. package/dist/utils/tar.d.ts.map +1 -0
  166. package/dist/utils/tar.js +93 -0
  167. package/dist/utils/tar.js.map +1 -0
  168. package/dist/utils/update.d.ts +9 -0
  169. package/dist/utils/update.d.ts.map +1 -0
  170. package/dist/utils/update.js +134 -0
  171. package/dist/utils/update.js.map +1 -0
  172. package/dist/utils/websocket.d.ts +10 -0
  173. package/dist/utils/websocket.d.ts.map +1 -0
  174. package/dist/utils/websocket.js +203 -0
  175. package/dist/utils/websocket.js.map +1 -0
  176. package/package.json +55 -4
  177. package/public/app.js +2712 -0
  178. package/public/assets/v2.2/css/base.css +113 -0
  179. package/public/assets/v2.2/css/components/content.css +133 -0
  180. package/public/assets/v2.2/css/components/controls.css +229 -0
  181. package/public/assets/v2.2/css/components/data.css +373 -0
  182. package/public/assets/v2.2/css/components/icons.css +35 -0
  183. package/public/assets/v2.2/css/components/motion.css +57 -0
  184. package/public/assets/v2.2/css/components/shell.css +51 -0
  185. package/public/assets/v2.2/css/components/sidebar.css +242 -0
  186. package/public/assets/v2.2/css/components/topbar.css +138 -0
  187. package/public/assets/v2.2/css/fonts.css +30 -0
  188. package/public/assets/v2.2/css/synteq-ui-v2.css +25 -0
  189. package/public/assets/v2.2/css/theme-dark.css +38 -0
  190. package/public/assets/v2.2/css/theme-light.css +36 -0
  191. package/public/assets/v2.2/css/tokens.css +61 -0
  192. package/public/assets/v2.2/fonts/GoogleSansCode-Medium.ttf +0 -0
  193. package/public/assets/v2.2/fonts/GoogleSansCode-Regular.ttf +0 -0
  194. package/public/assets/v2.2/fonts/GoogleSansCode-SemiBold.ttf +0 -0
  195. package/public/assets/v2.2/js/synteq-ui-v2.js +869 -0
  196. package/public/favicon.svg +7 -0
  197. package/public/index.html +1080 -0
  198. package/public/styles.css +552 -0
package/dist/cli.js ADDED
@@ -0,0 +1,301 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.main = main;
5
+ const helpers_1 = require("./utils/helpers");
6
+ const deploy_1 = require("./orchestrator/deploy");
7
+ const migrate_1 = require("./orchestrator/migrate");
8
+ const manage_1 = require("./orchestrator/manage");
9
+ const server_1 = require("./api/server");
10
+ const browser_1 = require("./utils/browser");
11
+ const update_1 = require("./utils/update");
12
+ const constants_1 = require("./constants");
13
+ const jobs_1 = require("./api/jobs");
14
+ function parse(argv) {
15
+ const out = { _: [] };
16
+ for (let i = 0; i < argv.length; i++) {
17
+ const token = argv[i];
18
+ if (!token.startsWith('--')) {
19
+ out._.push(token);
20
+ continue;
21
+ }
22
+ const body = token.slice(2);
23
+ const eq = body.indexOf('=');
24
+ if (eq >= 0) {
25
+ out[body.slice(0, eq)] = body.slice(eq + 1);
26
+ continue;
27
+ }
28
+ const next = argv[i + 1];
29
+ if (next && !next.startsWith('--')) {
30
+ out[body] = next;
31
+ i++;
32
+ }
33
+ else {
34
+ out[body] = true;
35
+ }
36
+ }
37
+ return out;
38
+ }
39
+ function str(p, key) {
40
+ const value = p[key];
41
+ return typeof value === 'string' ? value : undefined;
42
+ }
43
+ function num(p, key) {
44
+ const value = str(p, key);
45
+ if (value === undefined)
46
+ return undefined;
47
+ const n = Number(value);
48
+ return Number.isFinite(n) ? n : undefined;
49
+ }
50
+ function bool(p, key) {
51
+ return p[key] === true || p[key] === 'true' || p[key] === '1';
52
+ }
53
+ function auth(p, passwordKey, keyKey) {
54
+ const keyPath = str(p, keyKey);
55
+ if (keyPath)
56
+ return { method: 'key', keyPath };
57
+ return { method: 'password', password: str(p, passwordKey) };
58
+ }
59
+ function requireOption(p, key, hint) {
60
+ const value = str(p, key);
61
+ if (!value)
62
+ throw new Error(`${hint} (--${key})`);
63
+ return value;
64
+ }
65
+ function printHelp() {
66
+ process.stdout.write(`
67
+ ovtools - Octra Validator Tools
68
+
69
+ Usage:
70
+ ovtools start the web console and open the browser
71
+ ovtools deploy --ip <ip> [--password <pass> | --key <path>] [options]
72
+ ovtools migrate --old-ip <ip> --new-ip <ip> [credentials] [options]
73
+ ovtools manage --ip <ip> --phase <phase> [options]
74
+ ovtools upgrade --ip <ip> --phase <status|upgrade|manual|storage> [options]
75
+ ovtools web [--port 9091] [--host 127.0.0.1] [--no-open]
76
+ ovtools config [--assets-repo <git-url>] [--assets-ref <branch>]
77
+
78
+ Config:
79
+ --assets-repo <url> GitHub/Git URL the VPS clones assets from
80
+ --assets-ref <ref> branch, tag or commit (default main)
81
+ (no flags: print the current settings)
82
+
83
+ Deploy options:
84
+ --phase <deploy|prep|toolchain|setup|start|verify|enroll|promote|dashboard|status>
85
+ --role <validator|observer> --bond <raw units> --bond-oct <OCT>
86
+ --node-name <name> --domain <host> --swap <GB> --data-device </dev/sdb>
87
+ --data-min <GB> --reset --wipe --keep-data --skip-dashboard
88
+
89
+ Migrate options:
90
+ --phase <all|backup|prep|pull|switch|finalize|verify|rollback|status>
91
+ --samples <n> --interval <sec> --reset --wipe-target --keep-target-data
92
+
93
+ Manage options:
94
+ --phase <status|bond|exit|dashboard|diagnose|recover|upgrade|manual|storage>
95
+ --amount <OCT> --domain <host> --ssl-mode <auto|cloudflare|certbot>
96
+ --cert-dir <path> --email <addr> --test-only --no-restart --reset
97
+ --wait <sec> --extra "<flags>"
98
+
99
+ Environment:
100
+ OVTOOLS_HOME state directory (default ~/.ovtools)
101
+ OVTOOLS_TOKEN require this token for the web API
102
+ OVTOOLS_ASSETS_REPO override the assets Git URL
103
+ OVTOOLS_ASSETS_REF override the assets branch/tag/commit
104
+ OVTOOLS_ASSET_TRANSPORT auto (default), clone, git bundle, or tar
105
+ OVTOOLS_NO_BROWSER set to 1 to start the console without opening a browser
106
+ OVTOOLS_NO_UPDATE_CHECK set to 1 to skip the npm update notice
107
+ `);
108
+ }
109
+ async function runConfig(p) {
110
+ const current = (await (0, helpers_1.readJSON)(constants_1.SETTINGS_FILE)) || {};
111
+ const repo = str(p, 'assets-repo');
112
+ const ref = str(p, 'assets-ref');
113
+ if (repo === undefined && ref === undefined) {
114
+ const settings = (0, jobs_1.normalizeSettings)(current);
115
+ process.stdout.write(`settings : ${constants_1.SETTINGS_FILE}\n`);
116
+ process.stdout.write(`assetsRepo: ${process.env.OVTOOLS_ASSETS_REPO || settings.assetsRepo || constants_1.DEFAULT_ASSETS_REPO}${settings.assetsRepo ? '' : ' (default)'}\n`);
117
+ process.stdout.write(`assetsRef : ${settings.assetsRef || 'main'}\n`);
118
+ process.stdout.write(`transport : ${process.env.OVTOOLS_ASSET_TRANSPORT || 'auto'}\n`);
119
+ return;
120
+ }
121
+ const next = (0, jobs_1.normalizeSettings)({
122
+ ...current,
123
+ ...(repo !== undefined ? { assetsRepo: repo } : {}),
124
+ ...(ref !== undefined ? { assetsRef: ref } : {}),
125
+ });
126
+ await (0, helpers_1.writeJSON)(constants_1.SETTINGS_FILE, next);
127
+ process.stdout.write(`saved ${constants_1.SETTINGS_FILE}\n`);
128
+ process.stdout.write(`assetsRepo: ${next.assetsRepo || constants_1.DEFAULT_ASSETS_REPO}${next.assetsRepo ? '' : ' (default)'}\n`);
129
+ process.stdout.write(`assetsRef : ${next.assetsRef || 'main'}\n`);
130
+ }
131
+ async function runDeploy(p) {
132
+ const rawBond = num(p, 'bond') ?? (num(p, 'bond-oct') !== undefined ? Math.round(num(p, 'bond-oct') * 1_000_000) : 0);
133
+ const config = {
134
+ ip: requireOption(p, 'ip', 'the target IP is required'),
135
+ auth: auth(p, 'password', 'key'),
136
+ role: str(p, 'role') === 'observer' ? 'observer' : constants_1.DEFAULT_ROLE,
137
+ bond: rawBond,
138
+ nodeName: str(p, 'node-name'),
139
+ domain: str(p, 'domain'),
140
+ swapGB: num(p, 'swap') ?? 8,
141
+ dataDevice: str(p, 'data-device') || '/dev/sdb',
142
+ dataMinGB: num(p, 'data-min') ?? 1000,
143
+ phase: str(p, 'phase') || 'deploy',
144
+ reset: bool(p, 'reset'),
145
+ wipeVolume: bool(p, 'wipe'),
146
+ keepData: bool(p, 'keep-data'),
147
+ skipDashboard: bool(p, 'skip-dashboard'),
148
+ };
149
+ const logger = (0, helpers_1.createLogger)('deploy', true);
150
+ const orchestrator = (0, deploy_1.createDeployOrchestrator)(config, logger);
151
+ await orchestrator.run();
152
+ await logger.flush();
153
+ }
154
+ async function runMigrate(p) {
155
+ const config = {
156
+ oldIp: requireOption(p, 'old-ip', 'the source IP is required'),
157
+ newIp: requireOption(p, 'new-ip', 'the target IP is required'),
158
+ oldAuth: auth(p, 'old-password', 'old-key'),
159
+ newAuth: auth(p, 'new-password', 'new-key'),
160
+ wipeTargetVolume: bool(p, 'wipe-target'),
161
+ keepTargetData: bool(p, 'keep-target-data'),
162
+ phase: str(p, 'phase') || 'all',
163
+ samples: num(p, 'samples') ?? 3,
164
+ interval: num(p, 'interval') ?? 30,
165
+ reset: bool(p, 'reset'),
166
+ };
167
+ const logger = (0, helpers_1.createLogger)('migrate', true);
168
+ const orchestrator = (0, migrate_1.createMigrateOrchestrator)(config, logger);
169
+ await orchestrator.run();
170
+ await logger.flush();
171
+ }
172
+ async function runManage(p, defaultPhase) {
173
+ const phase = (str(p, 'phase') || defaultPhase || 'status');
174
+ const config = {
175
+ ip: requireOption(p, 'ip', 'the node IP is required'),
176
+ auth: auth(p, 'password', 'key'),
177
+ phase,
178
+ amount: str(p, 'amount'),
179
+ newBond: bool(p, 'new-bond'),
180
+ domain: str(p, 'domain'),
181
+ sslMode: str(p, 'ssl-mode') || 'auto',
182
+ certDir: str(p, 'cert-dir'),
183
+ email: str(p, 'email'),
184
+ testOnly: bool(p, 'test-only'),
185
+ noRestart: bool(p, 'no-restart'),
186
+ reset: bool(p, 'reset'),
187
+ waitSeconds: num(p, 'wait') ?? 900,
188
+ extra: str(p, 'extra'),
189
+ };
190
+ const logger = (0, helpers_1.createLogger)(phase === 'upgrade' || phase === 'manual' || phase === 'storage' ? 'upgrade' : 'manage', true);
191
+ const orchestrator = (0, manage_1.createManageOrchestrator)(config, logger);
192
+ await orchestrator.run();
193
+ await logger.flush();
194
+ }
195
+ async function launchConsole(port, host, autoPort, open) {
196
+ let server = null;
197
+ let chosen = port;
198
+ const attempts = autoPort ? 10 : 1;
199
+ for (let i = 0; i < attempts; i++) {
200
+ try {
201
+ server = await (0, server_1.startWebServer)(chosen, host);
202
+ break;
203
+ }
204
+ catch (err) {
205
+ if (autoPort && err && (err.code === 'EADDRINUSE' || /EADDRINUSE/.test(String(err.message)))) {
206
+ chosen++;
207
+ continue;
208
+ }
209
+ throw err;
210
+ }
211
+ }
212
+ if (!server) {
213
+ throw new Error(`could not find a free port starting at ${port}`);
214
+ }
215
+ if (autoPort && chosen !== port) {
216
+ process.stdout.write(`port ${port} is busy - using ${chosen}\n`);
217
+ }
218
+ const browserHost = host === '0.0.0.0' || host === '::' ? '127.0.0.1' : host;
219
+ let url = `http://${browserHost}:${chosen}/`;
220
+ if (process.env.OVTOOLS_TOKEN)
221
+ url += `?token=${encodeURIComponent(process.env.OVTOOLS_TOKEN)}`;
222
+ process.stdout.write(`Opening ${url}\n`);
223
+ if (open)
224
+ (0, browser_1.openBrowser)(url);
225
+ await new Promise(resolve => {
226
+ const stop = () => server.close(() => resolve());
227
+ process.once('SIGINT', stop);
228
+ process.once('SIGTERM', stop);
229
+ });
230
+ return 0;
231
+ }
232
+ async function main(argv = process.argv.slice(2)) {
233
+ if (argv[0] === 'help' || argv[0] === '--help' || argv[0] === '-h') {
234
+ printHelp();
235
+ return 0;
236
+ }
237
+ if (argv[0] === 'version' || argv[0] === '--version' || argv[0] === '-v') {
238
+ process.stdout.write('ovtools 1.0.0\n');
239
+ return 0;
240
+ }
241
+ if (!argv.length) {
242
+ if (process.env.OVTOOLS_NO_UPDATE_CHECK !== '1' && process.env.OVTOOLS_NO_UPDATE_CHECK !== 'true') {
243
+ try {
244
+ const update = await (0, update_1.checkForUpdate)();
245
+ if (update) {
246
+ process.stdout.write((0, update_1.updateNotice)(update));
247
+ return 0;
248
+ }
249
+ }
250
+ catch {
251
+ // update checks never block the console
252
+ }
253
+ }
254
+ return launchConsole(9091, '127.0.0.1', true, true);
255
+ }
256
+ const command = argv[0];
257
+ const parsed = parse(argv.slice(1));
258
+ try {
259
+ switch (command) {
260
+ case 'deploy':
261
+ await runDeploy(parsed);
262
+ return 0;
263
+ case 'migrate':
264
+ await runMigrate(parsed);
265
+ return 0;
266
+ case 'manage':
267
+ await runManage(parsed);
268
+ return 0;
269
+ case 'upgrade':
270
+ await runManage(parsed, 'upgrade');
271
+ return 0;
272
+ case 'config':
273
+ await runConfig(parsed);
274
+ return 0;
275
+ case 'web': {
276
+ const explicitPort = num(parsed, 'port');
277
+ const port = explicitPort ?? 9091;
278
+ const host = str(parsed, 'host') || '127.0.0.1';
279
+ const open = !bool(parsed, 'no-open');
280
+ return launchConsole(port, host, explicitPort === undefined, open);
281
+ }
282
+ default:
283
+ process.stderr.write(`unknown command: ${command}\n\n`);
284
+ printHelp();
285
+ return 1;
286
+ }
287
+ }
288
+ catch (err) {
289
+ process.stderr.write(`\nERROR: ${err.message}\n`);
290
+ return 1;
291
+ }
292
+ }
293
+ if (require.main === module) {
294
+ main().then(code => {
295
+ process.exitCode = code;
296
+ }).catch(err => {
297
+ process.stderr.write(`ERROR: ${err.message}\n`);
298
+ process.exitCode = 1;
299
+ });
300
+ }
301
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { PhaseMeta } from './types';
2
+ export declare const PROJECT_ROOT: string;
3
+ export declare const PUBLIC_DIR: string;
4
+ export declare const ASSETS_DIR: string;
5
+ export declare const COMMON_ASSETS_DIR: string;
6
+ export declare const DASHBOARD_DIR: string;
7
+ export declare const TASK_ASSET_DIRS: Record<'deploy' | 'migrate' | 'manage' | 'upgrade', string>;
8
+ export declare const DEFAULT_ASSETS_REPO = "https://github.com/m-tq/ovtools.git";
9
+ export declare const OVTOOLS_HOME: string;
10
+ export declare const LOGS_DIR: string;
11
+ export declare const BACKUP_DIR: string;
12
+ export declare const TMP_DIR: string;
13
+ export declare const KEYS_DIR: string;
14
+ export declare const CERTS_DIR: string;
15
+ export declare const SETTINGS_FILE: string;
16
+ export declare const HOST_KEYS_FILE: string;
17
+ export declare const KNOWN_HOSTS_FILE: string;
18
+ export declare const NODE_API_PORT = 8080;
19
+ export declare const NODE_DATA_ROOT = "/var/lib/octra";
20
+ export declare const NODE_DATA_DIR = "/var/lib/octra/devnet";
21
+ export declare const NODE_SRC_DIR = "/opt/octra/libv_litecore";
22
+ export declare const NODE_USER = "octra";
23
+ export declare const NODE_WALLET_PATH = "/opt/octra/libv_litecore/.keys/validator/wallet.json";
24
+ export declare const DATA_LABEL = "octra-data";
25
+ export declare const DATA_MIN_GB = 1000;
26
+ export declare const TOKEN_DECIMALS = 6;
27
+ export declare const TOKEN_UNIT: number;
28
+ export declare const PROBE_TTL_MS = 8000;
29
+ export declare const RETRY_PAUSE = 5;
30
+ export declare const VERIFY_SAMPLES = 3;
31
+ export declare const VERIFY_INTERVAL = 20;
32
+ export declare const DEFAULT_ROLE = "validator";
33
+ export declare const DASHBOARD_DOMAIN_SUFFIX = "example.com";
34
+ export declare const SSH_CONNECT_TIMEOUT = 20000;
35
+ export declare const SSH_EXEC_TIMEOUT = 300000;
36
+ export declare const SSH_HEARTBEAT = 30000;
37
+ export declare const BUFFER_MAX = 6000;
38
+ export declare const LOG_BUFFER_MAX = 4000;
39
+ export declare const REMOTE: {
40
+ readonly deploy: "/root/deploy";
41
+ readonly migrate: "/root/migration";
42
+ readonly manage: "/root/manage";
43
+ readonly upgrade: "/root/upgrade";
44
+ readonly dashboard: "/root/dashboard";
45
+ readonly dashboardInstall: "/opt/octra/dashboard";
46
+ };
47
+ export declare const STATE_FILES: {
48
+ readonly deploy: string;
49
+ readonly migrate: string;
50
+ readonly manage: string;
51
+ readonly upgrade: string;
52
+ };
53
+ export declare const MIGRATE_PHASES: PhaseMeta[];
54
+ export declare const DEPLOY_PHASES: PhaseMeta[];
55
+ export declare const MANAGE_PHASES: PhaseMeta[];
56
+ export declare const PROGRAMS: ({
57
+ id: "deploy";
58
+ label: string;
59
+ desc: string;
60
+ hosts: "single";
61
+ phases: PhaseMeta[];
62
+ } | {
63
+ id: "migrate";
64
+ label: string;
65
+ desc: string;
66
+ hosts: "pair";
67
+ phases: PhaseMeta[];
68
+ } | {
69
+ id: "manage";
70
+ label: string;
71
+ desc: string;
72
+ hosts: "single";
73
+ phases: PhaseMeta[];
74
+ })[];
75
+ export declare function phaseMeta(program: string, phase: string): PhaseMeta | undefined;
76
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,YAAY,QAAgC,CAAC;AAC1D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AACjE,eAAO,MAAM,aAAa,QAAuD,CAAC;AAClF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,MAAM,CAKvF,CAAC;AACF,eAAO,MAAM,mBAAmB,wCAAwC,CAAC;AAIzE,eAAO,MAAM,YAAY,QAEc,CAAC;AACxC,eAAO,MAAM,QAAQ,QAAkC,CAAC;AACxD,eAAO,MAAM,UAAU,QAAqC,CAAC;AAC7D,eAAO,MAAM,OAAO,QAAiC,CAAC;AACtD,eAAO,MAAM,QAAQ,QAA6B,CAAC;AACnD,eAAO,MAAM,SAAS,QAA8B,CAAC;AACrD,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,cAAc,QAA2C,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAGvE,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,aAAa,0BAA6B,CAAC;AACxD,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,gBAAgB,yDAAgD,CAAC;AAC9E,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,WAAW,OAAO,CAAC;AAGhC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,UAAU,QAA+B,CAAC;AAGvD,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAGrD,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,aAAa,QAAQ,CAAC;AAGnC,eAAO,MAAM,UAAU,OAAO,CAAC;AAC/B,eAAO,MAAM,cAAc,OAAO,CAAC;AAGnC,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,SAAS,EAWrC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,EAUpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,EAUpC,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;IAIpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG/E"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PROGRAMS = exports.MANAGE_PHASES = exports.DEPLOY_PHASES = exports.MIGRATE_PHASES = exports.STATE_FILES = exports.REMOTE = exports.LOG_BUFFER_MAX = exports.BUFFER_MAX = exports.SSH_HEARTBEAT = exports.SSH_EXEC_TIMEOUT = exports.SSH_CONNECT_TIMEOUT = exports.DASHBOARD_DOMAIN_SUFFIX = exports.DEFAULT_ROLE = exports.VERIFY_INTERVAL = exports.VERIFY_SAMPLES = exports.RETRY_PAUSE = exports.PROBE_TTL_MS = exports.TOKEN_UNIT = exports.TOKEN_DECIMALS = exports.DATA_MIN_GB = exports.DATA_LABEL = exports.NODE_WALLET_PATH = exports.NODE_USER = exports.NODE_SRC_DIR = exports.NODE_DATA_DIR = exports.NODE_DATA_ROOT = exports.NODE_API_PORT = exports.KNOWN_HOSTS_FILE = exports.HOST_KEYS_FILE = exports.SETTINGS_FILE = exports.CERTS_DIR = exports.KEYS_DIR = exports.TMP_DIR = exports.BACKUP_DIR = exports.LOGS_DIR = exports.OVTOOLS_HOME = exports.DEFAULT_ASSETS_REPO = exports.TASK_ASSET_DIRS = exports.DASHBOARD_DIR = exports.COMMON_ASSETS_DIR = exports.ASSETS_DIR = exports.PUBLIC_DIR = exports.PROJECT_ROOT = void 0;
37
+ exports.phaseMeta = phaseMeta;
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ // Package layout. dist/constants.js -> package root (ovtools/).
41
+ exports.PROJECT_ROOT = path.resolve(__dirname, '..');
42
+ exports.PUBLIC_DIR = path.join(exports.PROJECT_ROOT, 'public');
43
+ exports.ASSETS_DIR = path.join(exports.PROJECT_ROOT, 'assets');
44
+ exports.COMMON_ASSETS_DIR = path.join(exports.ASSETS_DIR, 'common');
45
+ exports.DASHBOARD_DIR = path.join(exports.ASSETS_DIR, 'manage', 'dashboard_monitor');
46
+ exports.TASK_ASSET_DIRS = {
47
+ deploy: path.join(exports.ASSETS_DIR, 'deploy'),
48
+ migrate: path.join(exports.ASSETS_DIR, 'migrate'),
49
+ manage: path.join(exports.ASSETS_DIR, 'manage'),
50
+ upgrade: path.join(exports.ASSETS_DIR, 'upgrade'),
51
+ };
52
+ exports.DEFAULT_ASSETS_REPO = 'https://github.com/m-tq/ovtools.git';
53
+ // Writable state lives in the user's home so a global npm install works on
54
+ // Windows and Linux without touching the package directory.
55
+ exports.OVTOOLS_HOME = process.env.OVTOOLS_HOME
56
+ ? path.resolve(process.env.OVTOOLS_HOME)
57
+ : path.join(os.homedir(), '.ovtools');
58
+ exports.LOGS_DIR = path.join(exports.OVTOOLS_HOME, 'logs');
59
+ exports.BACKUP_DIR = path.join(exports.OVTOOLS_HOME, 'backups');
60
+ exports.TMP_DIR = path.join(exports.OVTOOLS_HOME, 'tmp');
61
+ exports.KEYS_DIR = path.join(exports.TMP_DIR, 'keys');
62
+ exports.CERTS_DIR = path.join(exports.TMP_DIR, 'certs');
63
+ exports.SETTINGS_FILE = path.join(exports.OVTOOLS_HOME, 'settings.json');
64
+ exports.HOST_KEYS_FILE = path.join(exports.OVTOOLS_HOME, 'hostkeys.json');
65
+ exports.KNOWN_HOSTS_FILE = path.join(exports.OVTOOLS_HOME, 'known_hosts');
66
+ // VPS constants
67
+ exports.NODE_API_PORT = 8080;
68
+ exports.NODE_DATA_ROOT = '/var/lib/octra';
69
+ exports.NODE_DATA_DIR = `${exports.NODE_DATA_ROOT}/devnet`;
70
+ exports.NODE_SRC_DIR = '/opt/octra/libv_litecore';
71
+ exports.NODE_USER = 'octra';
72
+ exports.NODE_WALLET_PATH = `${exports.NODE_SRC_DIR}/.keys/validator/wallet.json`;
73
+ exports.DATA_LABEL = 'octra-data';
74
+ exports.DATA_MIN_GB = 1000;
75
+ // Token decimals
76
+ exports.TOKEN_DECIMALS = 6;
77
+ exports.TOKEN_UNIT = Math.pow(10, exports.TOKEN_DECIMALS);
78
+ // Timeouts and intervals
79
+ exports.PROBE_TTL_MS = 8000;
80
+ exports.RETRY_PAUSE = 5;
81
+ exports.VERIFY_SAMPLES = 3;
82
+ exports.VERIFY_INTERVAL = 20;
83
+ exports.DEFAULT_ROLE = 'validator';
84
+ exports.DASHBOARD_DOMAIN_SUFFIX = 'example.com';
85
+ // SSH timeouts
86
+ exports.SSH_CONNECT_TIMEOUT = 20000;
87
+ exports.SSH_EXEC_TIMEOUT = 300000;
88
+ exports.SSH_HEARTBEAT = 30000;
89
+ // Buffer limits
90
+ exports.BUFFER_MAX = 6000;
91
+ exports.LOG_BUFFER_MAX = 4000;
92
+ // Remote program state directories
93
+ exports.REMOTE = {
94
+ deploy: '/root/deploy',
95
+ migrate: '/root/migration',
96
+ manage: '/root/manage',
97
+ upgrade: '/root/upgrade',
98
+ dashboard: '/root/dashboard',
99
+ dashboardInstall: '/opt/octra/dashboard',
100
+ };
101
+ exports.STATE_FILES = {
102
+ deploy: path.join(exports.LOGS_DIR, 'deploy-state.json'),
103
+ migrate: path.join(exports.LOGS_DIR, 'all-state.json'),
104
+ manage: path.join(exports.LOGS_DIR, 'manage-state.json'),
105
+ upgrade: path.join(exports.LOGS_DIR, 'upgrade-state.json'),
106
+ };
107
+ exports.MIGRATE_PHASES = [
108
+ { id: 'auto', label: 'Migrate node', desc: 'check -> backup -> prep -> pull -> switch -> finalize -> verify, then watch the chain activate the migrated validator. The monitoring dashboard is a Manage active node action.', risk: 'critical', confirm: 'MIGRATE' },
109
+ { id: 'backup', label: 'Backup identity', desc: 'Snapshot wallet/keys on the source and copy the archive here.', risk: 'safe', confirm: null },
110
+ { id: 'prep', label: 'Prepare target', desc: 'pre-run.sh (8 GB swap + 1 TB volume) plus tooling on the new VPS.', risk: 'safe', confirm: null },
111
+ { id: 'pull', label: 'Pull state', desc: 'Copy ~41 GB while the source keeps voting. No downtime.', risk: 'safe', confirm: null },
112
+ { id: 'switch', label: 'Switch', desc: 'STOP the source node, then sync the delta. Downtime starts here.', risk: 'critical', confirm: 'STOP SOURCE' },
113
+ { id: 'finalize', label: 'Finalize target', desc: 'Advertise endpoint, hash gate, pm2 install, --check-runtime.', risk: 'safe', confirm: null },
114
+ { id: 'verify', label: 'Start + verify', desc: 'Start the node, wait for RPC + set-fold re-admission, assert voting.', risk: 'safe', confirm: null },
115
+ { id: 'all', label: 'Run everything', desc: 'backup -> prep -> pull -> switch -> finalize -> verify, in order.', risk: 'critical', confirm: 'MIGRATE' },
116
+ { id: 'rollback', label: 'Rollback', desc: 'Stop the target and bring the source validator back.', risk: 'critical', confirm: 'ROLLBACK' },
117
+ { id: 'status', label: 'Status', desc: 'Read both hosts and print the migration status markers.', risk: 'readonly', confirm: null },
118
+ ];
119
+ exports.DEPLOY_PHASES = [
120
+ { id: 'deploy', label: 'Deploy node', desc: 'check -> prep -> toolchain -> setup -> start -> verify, then the top-up popup and enroll/promote when funded.', risk: 'critical', confirm: 'DEPLOY' },
121
+ { id: 'prep', label: 'Prepare host', desc: '8 GB swap + data store (pre-run.sh) + base tooling + directory layout.', risk: 'safe', confirm: null },
122
+ { id: 'toolchain', label: 'Build runtime', desc: 'install-deps.sh: apt deps + OCaml/dune toolchain (15-30 min, detached).', risk: 'safe', confirm: null },
123
+ { id: 'setup', label: 'Configure node', desc: 'node-setup.sh: wallet.json + node.env, build + ~38 GB chain sync.', risk: 'safe', confirm: null },
124
+ { id: 'start', label: 'Start node', desc: 'Start via pm2 and wait until rpc = ready.', risk: 'safe', confirm: null },
125
+ { id: 'verify', label: 'Verify node', desc: 'process/rpc/role/p2p + epoch advancing (validator: voting + active).', risk: 'safe', confirm: null },
126
+ { id: 'enroll', label: 'Enroll validator', desc: 'controls/enroll.sh join --amount <raw> - needs a funded wallet. The chain then admits the validator at the set fold.', risk: 'critical', confirm: 'ENROLL' },
127
+ { id: 'promote', label: 'Promote', desc: 'Wait for the set fold and the first duty epoch, then switch observer -> validator.', risk: 'critical', confirm: 'PROMOTE' },
128
+ { id: 'status', label: 'Status', desc: 'Print the deploy status marker of the target.', risk: 'readonly', confirm: null },
129
+ ];
130
+ exports.MANAGE_PHASES = [
131
+ { id: 'bond', label: 'Increase bond', desc: 'Run bond_inc.sh as the octra user (+OCT on the bond), then verify the registry. The first increase runs plain, every later one with --new (added automatically).', risk: 'critical', confirm: 'BOND' },
132
+ { id: 'exit', label: 'Exit validator', desc: 'controls/enroll.sh exit -> wait for the set fold + unbonding -> withdraw -> wait until the stake is back in the wallet. The node is NOT deleted.', risk: 'critical', confirm: 'EXIT' },
133
+ { id: 'upgrade', label: 'Update node', desc: 'controls/upgrade.sh (test run first, then --apply): pull, build, restart, wait and verify. The verdict is the tool\'s own: validator_active / observer_synced = done, pending = re-run later (never restart by hand), refused = see the reason.', risk: 'critical', confirm: 'UPGRADE' },
134
+ { id: 'manual', label: 'Manual update (fallback)', desc: 'The README\'s manual path when the tool cannot run: git pull --ff-only, controls/check.sh, make -C mcl, dune build (5 targets), stop.sh, run.sh --rebind-runtime, stat.sh.', risk: 'critical', confirm: 'UPDATE' },
135
+ { id: 'storage', label: 'Remove preserved states', desc: 'controls/storage.sh report -> --prune-prior --yes -> report: drops the states of the previous epochs.', risk: 'critical', confirm: 'PRUNE' },
136
+ { id: 'dashboard', label: 'Deploy monitor (read-only)', desc: 'nginx + octra-dashboard, read-only: graphs, logs, wallet and consensus. The manage actions stay in this tab, never on the public page.', risk: 'safe', confirm: null },
137
+ { id: 'diagnose', label: 'Diagnose node (why is it not voting?)', desc: 'Read-only evidence: pm2 state, /rpc vs /status, head_epoch moving or frozen, how far behind, last catch-up refusal, rejoin.sh --check and enrollment state.', risk: 'safe', confirm: null },
138
+ { id: 'recover', label: 'Fix a stuck node (ready / outside set)', desc: 'Bounded repair path: clean pm2 restart when frozen, pm2 re-create when the data directory is used outside PM2, bounded catch-up wait, rejoin/join. Never signs a new bond, never exits, never replaces the store.', risk: 'critical', confirm: 'RECOVER' },
139
+ { id: 'status', label: 'Read status', desc: 'Identity, membership, bond, wallet balance, the running version and the saved bond-increase record.', risk: 'readonly', confirm: null },
140
+ ];
141
+ exports.PROGRAMS = [
142
+ { id: 'deploy', label: 'Deploy fresh node', desc: 'Turn one fresh VPS into an Octra node, observer or validator.', hosts: 'single', phases: exports.DEPLOY_PHASES },
143
+ { id: 'migrate', label: 'Migrate node', desc: 'Move the running validator to a new VPS (source + target).', hosts: 'pair', phases: exports.MIGRATE_PHASES },
144
+ { id: 'manage', label: 'Manage active node', desc: 'Operate the node that already runs: increase the bond, exit it (stake back), update its software, prune preserved states, or deploy the read-only monitoring dashboard.', hosts: 'single', phases: exports.MANAGE_PHASES },
145
+ ];
146
+ function phaseMeta(program, phase) {
147
+ const p = exports.PROGRAMS.find(x => x.id === program) || exports.PROGRAMS[0];
148
+ return p.phases.find(x => x.id === phase);
149
+ }
150
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { createSSHClient, SSHClient, execWithRetry } from './ssh/client';
2
+ export { StateManager, createStateManager } from './utils/state';
3
+ export { Logger, createLogger } from './utils/helpers';
4
+ export { ScriptManager, createScriptManager } from './utils/scripts';
5
+ export { AssetSync } from './utils/assets';
6
+ export { createTarGz } from './utils/tar';
7
+ export { deployDashboard } from './utils/dashboard';
8
+ export { BaseOrchestrator } from './orchestrator/base';
9
+ export { DeployOrchestrator, createDeployOrchestrator } from './orchestrator/deploy';
10
+ export { MigrateOrchestrator, createMigrateOrchestrator } from './orchestrator/migrate';
11
+ export { ManageOrchestrator, createManageOrchestrator } from './orchestrator/manage';
12
+ export { startWebServer } from './api/server';
13
+ export { JobManager, jobs } from './api/jobs';
14
+ export { runCheck } from './api/checks';
15
+ export { nodeSummary, probeNode } from './api/nodes';
16
+ export * from './types';
17
+ export * from './constants';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}