ovtools 0.0.0-stage → 1.0.1

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 +486 -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 +2736 -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 +13 -0
  197. package/public/index.html +1083 -0
  198. package/public/styles.css +580 -0
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeployOrchestrator = void 0;
4
+ exports.createDeployOrchestrator = createDeployOrchestrator;
5
+ const base_1 = require("./base");
6
+ const state_1 = require("../utils/state");
7
+ const scripts_1 = require("../utils/scripts");
8
+ const dashboard_1 = require("../utils/dashboard");
9
+ const constants_1 = require("../constants");
10
+ class DeployOrchestrator extends base_1.BaseOrchestrator {
11
+ config;
12
+ statePair;
13
+ managers = null;
14
+ awaitingEnroll = null;
15
+ softStop = null;
16
+ dashboardUrl = null;
17
+ constructor(config, logger) {
18
+ super(new state_1.StateManager(constants_1.STATE_FILES.deploy), logger);
19
+ this.config = config;
20
+ this.statePair = config.ip;
21
+ this.program = 'deploy';
22
+ }
23
+ async run() {
24
+ const sshConfig = {
25
+ host: this.config.ip,
26
+ port: 22,
27
+ username: 'root',
28
+ auth: this.config.auth,
29
+ };
30
+ try {
31
+ this.client = await this.connectSSH(sshConfig, `target ${this.config.ip}`);
32
+ this.managers = (0, scripts_1.createScriptManager)(this.client);
33
+ if (this.config.reset) {
34
+ await this.stateManager.reset(this.statePair);
35
+ this.log('resume state cleared', 'info');
36
+ }
37
+ const phase = this.config.phase || 'deploy';
38
+ if (phase === 'status') {
39
+ const st = await this.remoteStatus(this.client, 'deploy');
40
+ this.log(`target ${this.config.ip}: ${st.state} ${st.detail}`, 'info');
41
+ return;
42
+ }
43
+ await this.preflight(this.client);
44
+ await this.pushScripts(this.client, ['deploy']);
45
+ await this.ensureHostTools(this.client, undefined, 'deploy host tools');
46
+ await this.harden(this.client);
47
+ if (phase === 'deploy' || phase === 'all') {
48
+ await this.runAll();
49
+ }
50
+ else {
51
+ await this.runSingle(phase);
52
+ }
53
+ }
54
+ catch (err) {
55
+ const msg = err instanceof Error ? err.message : String(err);
56
+ this.log(`Deploy failed: ${msg}`, 'error');
57
+ throw err;
58
+ }
59
+ finally {
60
+ await this.disconnectSSH(this.client);
61
+ }
62
+ }
63
+ async runAll() {
64
+ await this.ensure('prep', () => this.stepPrep());
65
+ await this.ensure('toolchain', () => this.stepToolchain());
66
+ await this.ensure('setup', () => this.stepSetup());
67
+ await this.ensure('start', () => this.stepStart());
68
+ await this.ensure('verify', () => this.stepVerify());
69
+ if (this.config.role === 'validator' && this.config.bond > 0) {
70
+ await this.ensure('enroll', () => this.stepEnroll());
71
+ if (!this.awaitingEnroll) {
72
+ await this.ensure('promote', () => this.stepPromote());
73
+ }
74
+ else {
75
+ this.log('enrollment is waiting for funding - promote starts after the wallet is funded', 'warn');
76
+ }
77
+ }
78
+ else if (this.config.role === 'validator') {
79
+ const address = await this.walletAddress(this.client);
80
+ this.log(`no bond given: the node stays an observer - fund ${address} and enroll when ready`, 'warn');
81
+ this.awaitingEnroll = { address, bond: 1_000_000 };
82
+ }
83
+ if (this.config.domain && !this.config.skipDashboard) {
84
+ await this.ensure('dashboard', () => this.stepDashboard());
85
+ }
86
+ this.log('=== DEPLOY COMPLETE: node ready on ' + this.config.ip + ' ===', 'ok');
87
+ if (!this.config.bond || this.config.role !== 'validator') {
88
+ const address = await this.walletAddress(this.client);
89
+ this.log(`node address: ${address}`, 'info');
90
+ }
91
+ }
92
+ async runSingle(phase) {
93
+ switch (phase) {
94
+ case 'prep':
95
+ await this.stepPrep();
96
+ break;
97
+ case 'toolchain':
98
+ await this.stepToolchain();
99
+ break;
100
+ case 'setup':
101
+ await this.stepSetup();
102
+ break;
103
+ case 'start':
104
+ await this.stepStart();
105
+ break;
106
+ case 'verify':
107
+ await this.stepVerify();
108
+ break;
109
+ case 'enroll':
110
+ await this.stepEnroll();
111
+ break;
112
+ case 'promote':
113
+ await this.stepPromote();
114
+ break;
115
+ case 'dashboard':
116
+ await this.stepDashboard();
117
+ break;
118
+ default: throw new Error(`unknown deploy phase: ${phase}`);
119
+ }
120
+ }
121
+ async ensure(name, fn) {
122
+ if (this.aborted)
123
+ throw new Error('operation aborted');
124
+ if (await this.stateManager.isStepDone(this.statePair, name)) {
125
+ this.log(`${name} already completed - skipping`, 'info');
126
+ return;
127
+ }
128
+ await fn();
129
+ await this.stateManager.markStepDone(this.statePair, name);
130
+ }
131
+ async runStep(options) {
132
+ this.startPhase(options.phase);
133
+ this.log(`--> [${this.config.ip}] ${options.label} (detached unit ${options.unit})`, 'step', this.config.ip);
134
+ try {
135
+ const result = await this.managers.waitForScript({
136
+ program: 'deploy',
137
+ script: options.script,
138
+ unit: options.unit,
139
+ env: options.env,
140
+ timeoutSec: options.timeoutSec,
141
+ onLine: line => this.log(` ${line}`, 'remote', this.config.ip),
142
+ });
143
+ if (result.state === 'DONE') {
144
+ this.log(`${options.label} finished${result.detail ? ` (${result.detail})` : ''}`, 'ok', this.config.ip);
145
+ this.completePhase(true);
146
+ return result;
147
+ }
148
+ if (result.state.startsWith('WAITING-')) {
149
+ this.log(`${options.label} stopped: ${result.state} ${result.detail}`, 'warn', this.config.ip);
150
+ this.completePhase(true);
151
+ this.softStop = { state: result.state, detail: result.detail };
152
+ return result;
153
+ }
154
+ this.log(`${options.label} failed: ${result.detail}`, 'error', this.config.ip);
155
+ this.completePhase(false, result.detail);
156
+ throw new Error(`${options.label} failed: ${result.detail}`);
157
+ }
158
+ catch (err) {
159
+ this.completePhase(false, err.message);
160
+ throw err;
161
+ }
162
+ }
163
+ async stepPrep() {
164
+ // Deploy is for a fresh node: an existing wallet means migrate instead.
165
+ const pre = await this.getPrerunState(this.client, '/root/deploy/prerun.env');
166
+ const walletProbe = await this.client.exec('test -f /opt/octra/libv_litecore/.keys/validator/wallet.json && echo WALLET=yes || echo WALLET=no', { timeout: 60000 });
167
+ const hasWallet = walletProbe.stdout.includes('WALLET=yes');
168
+ if (hasWallet && !this.config.wipeVolume) {
169
+ throw new Error('this host already has a node identity (wallet.json). Deploy is for a FRESH node - use Migrate, or pass wipeVolume to start over');
170
+ }
171
+ if (pre.dataSet && !hasWallet && !this.config.keepData) {
172
+ this.log('chain data found on the data volume - keeping it: the node opens it instead of syncing 38 GB', 'warn');
173
+ }
174
+ const wipe = this.config.keepData ? '' : 'WIPE_VOLUME=1';
175
+ if (!this.config.keepData) {
176
+ this.log('the data volume will be wiped and formatted (fresh node) - keepData reuses an existing chain', 'warn');
177
+ }
178
+ const result = await this.runStep({
179
+ script: '/root/deploy/10-prepare-host.sh',
180
+ unit: 'octra-deploy-prepare-host',
181
+ label: 'prepare host (swap + data store + tooling)',
182
+ env: {
183
+ ...(wipe ? { WIPE_VOLUME: '1' } : {}),
184
+ SWAP_GB: String(this.config.swapGB),
185
+ BLOCK_DEVICE: this.config.dataDevice,
186
+ DATA_MIN_GB: String(this.config.dataMinGB),
187
+ },
188
+ timeoutSec: 1800,
189
+ phase: 'prep',
190
+ });
191
+ if (result.soft)
192
+ return;
193
+ const after = await this.getPrerunState(this.client, '/root/deploy/prerun.env');
194
+ if (after.dev) {
195
+ this.log(`data store: ${after.dev} -> ${after.mount} (${after.action}${after.dataSet ? ', data set kept' : ''})`, 'ok');
196
+ }
197
+ }
198
+ async stepToolchain() {
199
+ const result = await this.runStep({
200
+ script: '/root/deploy/20-install-toolchain.sh',
201
+ unit: 'octra-deploy-install-toolchain',
202
+ label: 'build the runtime (apt + OCaml/dune)',
203
+ timeoutSec: 7200,
204
+ phase: 'toolchain',
205
+ });
206
+ if (result.soft)
207
+ throw new Error(`the OCaml toolchain is not usable yet: ${result.detail}`);
208
+ }
209
+ async stepSetup() {
210
+ const result = await this.runStep({
211
+ script: '/root/deploy/30-setup-node.sh',
212
+ unit: 'octra-deploy-setup-node',
213
+ label: 'configure the node (identity + build + sync)',
214
+ env: this.config.nodeName ? { NODE_NAME: this.config.nodeName } : {},
215
+ timeoutSec: 7200,
216
+ phase: 'setup',
217
+ });
218
+ if (result.soft)
219
+ throw new Error(`node setup cannot run yet: ${result.detail}`);
220
+ }
221
+ async stepStart() {
222
+ await this.runStep({
223
+ script: '/root/deploy/40-start-node.sh',
224
+ unit: 'octra-deploy-start-node',
225
+ label: 'start the node (wait for rpc = ready)',
226
+ timeoutSec: 2400,
227
+ phase: 'start',
228
+ });
229
+ }
230
+ async stepVerify() {
231
+ const samples = this.config.samples || constants_1.VERIFY_SAMPLES;
232
+ const interval = this.config.interval || constants_1.VERIFY_INTERVAL;
233
+ const peerWait = this.config.peerWaitSec || 300;
234
+ const voteWait = this.config.voteWaitSec || 900;
235
+ // A validator without a bond is an observer until the enroll popup runs.
236
+ // Verifying it as a validator would sit in the fold wait for 15 minutes.
237
+ const role = this.config.role === 'validator' && this.config.bond <= 0 ? 'observer' : this.config.role;
238
+ const waitBudget = role === 'validator' ? voteWait : peerWait;
239
+ const ceiling = 600 + waitBudget + Math.max(1, samples) * Math.max(5, interval);
240
+ await this.runStep({
241
+ script: '/root/deploy/50-verify.sh',
242
+ unit: 'octra-deploy-verify',
243
+ label: `verify (role=${role})`,
244
+ env: {
245
+ SAMPLES: String(samples),
246
+ INTERVAL: String(interval),
247
+ ROLE: role,
248
+ PEER_WAIT: String(peerWait),
249
+ VOTE_WAIT: String(voteWait),
250
+ },
251
+ timeoutSec: ceiling,
252
+ phase: 'verify',
253
+ });
254
+ }
255
+ async stepEnroll() {
256
+ if (this.config.bond <= 0) {
257
+ const address = await this.walletAddress(this.client);
258
+ this.log(`no bond given: leaving the node as an observer (fund ${address})`, 'info');
259
+ this.awaitingEnroll = { address, bond: 1_000_000 };
260
+ return;
261
+ }
262
+ const result = await this.runStep({
263
+ script: '/root/deploy/60-enroll.sh',
264
+ unit: 'octra-deploy-enroll',
265
+ label: `enroll with bond ${this.config.bond}`,
266
+ env: { BOND_AMOUNT: String(this.config.bond) },
267
+ timeoutSec: 1200,
268
+ phase: 'enroll',
269
+ });
270
+ if (result.soft) {
271
+ if (result.state === 'WAITING-FUNDING') {
272
+ this.log(`enrollment needs funding: ${result.detail}`, 'warn');
273
+ this.awaitingEnroll = { address: result.detail, bond: this.config.bond };
274
+ }
275
+ else {
276
+ this.log(`enrollment is waiting for the chain: ${result.state} ${result.detail}`, 'warn');
277
+ }
278
+ }
279
+ }
280
+ async stepPromote() {
281
+ const result = await this.runStep({
282
+ script: '/root/deploy/70-promote.sh',
283
+ unit: 'octra-deploy-promote',
284
+ label: 'wait for the fold, then switch to validator',
285
+ timeoutSec: 5100,
286
+ phase: 'promote',
287
+ });
288
+ if (result.soft)
289
+ this.log(`waiting for the set fold: ${result.state} ${result.detail}`, 'warn');
290
+ }
291
+ async stepDashboard() {
292
+ this.startPhase('dashboard');
293
+ try {
294
+ const result = await (0, dashboard_1.deployDashboard)(this.client, this.logger, {
295
+ ip: this.config.ip,
296
+ domain: this.config.domain,
297
+ sslMode: 'auto',
298
+ reset: false,
299
+ }, 'deploy');
300
+ this.dashboardUrl = result.url;
301
+ this.completePhase(true);
302
+ }
303
+ catch (err) {
304
+ this.completePhase(false, err.message);
305
+ throw err;
306
+ }
307
+ }
308
+ }
309
+ exports.DeployOrchestrator = DeployOrchestrator;
310
+ function createDeployOrchestrator(config, logger) {
311
+ return new DeployOrchestrator(config, logger);
312
+ }
313
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/orchestrator/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { BaseOrchestrator } from './base';
2
+ import { Logger } from '../utils/helpers';
3
+ import type { ManageConfig } from '../types';
4
+ export declare class ManageOrchestrator extends BaseOrchestrator {
5
+ private config;
6
+ private statePair;
7
+ private managers;
8
+ softStop: {
9
+ state: string;
10
+ detail: string;
11
+ } | null;
12
+ dashboardUrl: string | null;
13
+ constructor(config: ManageConfig, logger: Logger);
14
+ run(): Promise<void>;
15
+ private runStep;
16
+ private stepStatus;
17
+ private stepBond;
18
+ private stepExit;
19
+ private stepDiagnose;
20
+ private stepRecover;
21
+ private stepPreflightUpgrade;
22
+ private stepUpgrade;
23
+ private stepManual;
24
+ private stepStorage;
25
+ private stepDashboard;
26
+ }
27
+ export declare function createManageOrchestrator(config: ManageConfig, logger: Logger): ManageOrchestrator;
28
+ //# sourceMappingURL=manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../src/orchestrator/manage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,UAAU,CAAC;AAGxD,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAQ;IAC1D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEvB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM;IAU1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA2DZ,OAAO;YAyCP,UAAU;YAWV,QAAQ;YAiBR,QAAQ;YAcR,YAAY;YAWZ,WAAW;YAaX,oBAAoB;YAWpB,WAAW;YAgBX,UAAU;YAYV,WAAW;YAaX,aAAa;CAuB5B;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAEjG"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManageOrchestrator = void 0;
4
+ exports.createManageOrchestrator = createManageOrchestrator;
5
+ const base_1 = require("./base");
6
+ const state_1 = require("../utils/state");
7
+ const scripts_1 = require("../utils/scripts");
8
+ const dashboard_1 = require("../utils/dashboard");
9
+ const constants_1 = require("../constants");
10
+ class ManageOrchestrator extends base_1.BaseOrchestrator {
11
+ config;
12
+ statePair;
13
+ managers = null;
14
+ softStop = null;
15
+ dashboardUrl = null;
16
+ constructor(config, logger) {
17
+ const stateFile = config.phase === 'upgrade' || config.phase === 'manual' || config.phase === 'storage'
18
+ ? constants_1.STATE_FILES.upgrade
19
+ : constants_1.STATE_FILES.manage;
20
+ super(new state_1.StateManager(stateFile), logger);
21
+ this.config = config;
22
+ this.statePair = config.ip;
23
+ this.program = 'manage';
24
+ }
25
+ async run() {
26
+ const sshConfig = {
27
+ host: this.config.ip,
28
+ port: 22,
29
+ username: 'root',
30
+ auth: this.config.auth,
31
+ };
32
+ try {
33
+ this.client = await this.connectSSH(sshConfig, `node ${this.config.ip}`);
34
+ this.managers = (0, scripts_1.createScriptManager)(this.client);
35
+ if (this.config.reset) {
36
+ await this.stateManager.reset(this.statePair);
37
+ this.log('resume state cleared', 'info');
38
+ }
39
+ const phase = this.config.phase;
40
+ const isUpgrade = phase === 'upgrade' || phase === 'manual' || phase === 'storage';
41
+ await this.preflight(this.client);
42
+ await this.pushScripts(this.client, isUpgrade ? ['upgrade'] : ['manage']);
43
+ if (isUpgrade) {
44
+ await this.ensureHostTools(this.client, ['bash', 'sed', 'grep', 'awk', 'tar', 'curl', 'git', 'rsync', 'jq', 'pgrep', 'nproc', 'make', 'g++', 'opam', 'du'], 'update host tools');
45
+ }
46
+ else {
47
+ await this.ensureHostTools(this.client, undefined, 'manage host tools');
48
+ }
49
+ switch (phase) {
50
+ case 'status':
51
+ await this.stepStatus();
52
+ break;
53
+ case 'bond':
54
+ await this.stepBond();
55
+ break;
56
+ case 'exit':
57
+ await this.stepExit();
58
+ break;
59
+ case 'dashboard':
60
+ await this.stepDashboard();
61
+ break;
62
+ case 'diagnose':
63
+ await this.stepDiagnose();
64
+ break;
65
+ case 'recover':
66
+ await this.stepRecover();
67
+ break;
68
+ case 'upgrade':
69
+ await this.stepPreflightUpgrade();
70
+ await this.stepUpgrade();
71
+ break;
72
+ case 'manual':
73
+ await this.stepManual();
74
+ break;
75
+ case 'storage':
76
+ await this.stepStorage();
77
+ break;
78
+ default: throw new Error(`unknown manage phase: ${phase}`);
79
+ }
80
+ if (phase !== 'dashboard') {
81
+ const st = await this.remoteStatus(this.client, isUpgrade ? 'upgrade' : 'manage').catch(() => ({ state: 'UNKNOWN', detail: '' }));
82
+ this.log(`node ${this.config.ip}: ${st.state} ${st.detail}`, 'info');
83
+ }
84
+ }
85
+ catch (err) {
86
+ const msg = err instanceof Error ? err.message : String(err);
87
+ this.log(`Manage ${this.config.phase} failed: ${msg}`, 'error');
88
+ throw err;
89
+ }
90
+ finally {
91
+ await this.disconnectSSH(this.client);
92
+ }
93
+ }
94
+ async runStep(options) {
95
+ this.startPhase(options.phase);
96
+ const dir = options.program === 'upgrade' ? 'upgrade' : 'manage';
97
+ await this.log(`--> [${this.config.ip}] ${options.label}`, 'step', this.config.ip);
98
+ try {
99
+ const result = await this.managers.waitForScript({
100
+ program: options.program,
101
+ script: `/root/${dir}/${options.script}`,
102
+ unit: options.unit,
103
+ env: options.env,
104
+ timeoutSec: options.timeoutSec,
105
+ onLine: line => this.log(` ${line}`, 'remote', this.config.ip),
106
+ });
107
+ if (result.state === 'DONE') {
108
+ this.log(`${options.label} finished${result.detail ? ` (${result.detail})` : ''}`, 'ok', this.config.ip);
109
+ this.completePhase(true);
110
+ return result;
111
+ }
112
+ if (result.state.startsWith('WAITING-')) {
113
+ this.log(`${options.label} stopped: ${result.state} ${result.detail}`, 'warn', this.config.ip);
114
+ this.softStop = result;
115
+ this.completePhase(true);
116
+ return result;
117
+ }
118
+ this.log(`${options.label} failed: ${result.detail}`, 'error', this.config.ip);
119
+ this.completePhase(false, result.detail);
120
+ throw new Error(`${options.label} failed: ${result.detail}`);
121
+ }
122
+ catch (err) {
123
+ this.completePhase(false, err.message);
124
+ throw err;
125
+ }
126
+ }
127
+ async stepStatus() {
128
+ await this.runStep({
129
+ program: 'manage',
130
+ script: '30-status.sh',
131
+ unit: 'octra-manage-status',
132
+ label: 'read the active node',
133
+ timeoutSec: 300,
134
+ phase: 'status',
135
+ });
136
+ }
137
+ async stepBond() {
138
+ const amount = (this.config.amount || '').trim();
139
+ if (!/^[0-9]+(\.[0-9]{1,6})?$/.test(amount) || Number(amount) < 1) {
140
+ throw new Error('type the amount to add in OCT (min 1, e.g. 100 or 12.5)');
141
+ }
142
+ const result = await this.runStep({
143
+ program: 'manage',
144
+ script: '10-bond-increase.sh',
145
+ unit: 'octra-manage-bond-increase',
146
+ label: `increase bond by ${amount} OCT`,
147
+ env: { BOND_OCT: amount, ...(this.config.newBond ? { BOND_NEW: '1' } : {}) },
148
+ timeoutSec: 1200,
149
+ phase: 'bond',
150
+ });
151
+ if (result.soft)
152
+ this.log(`the increase is not confirmed yet (${result.detail})`, 'warn');
153
+ }
154
+ async stepExit() {
155
+ const result = await this.runStep({
156
+ program: 'manage',
157
+ script: '20-exit-validator.sh',
158
+ unit: 'octra-manage-exit-validator',
159
+ label: 'exit the validator set',
160
+ timeoutSec: 3600,
161
+ phase: 'exit',
162
+ });
163
+ if (result.soft) {
164
+ this.log('=== exit accepted: the stake comes back on its own (unlock epoch above) ===', 'ok');
165
+ }
166
+ }
167
+ async stepDiagnose() {
168
+ await this.runStep({
169
+ program: 'manage',
170
+ script: '10-diagnose-node.sh',
171
+ unit: 'octra-manage-diagnose-node',
172
+ label: 'diagnose the node',
173
+ timeoutSec: 600,
174
+ phase: 'diagnose',
175
+ });
176
+ }
177
+ async stepRecover() {
178
+ const result = await this.runStep({
179
+ program: 'manage',
180
+ script: '25-recover-node.sh',
181
+ unit: 'octra-manage-recover-node',
182
+ label: 'repair the stuck node',
183
+ env: { ALLOW_RESTART: this.config.noRestart ? '0' : '1' },
184
+ timeoutSec: 2700,
185
+ phase: 'recover',
186
+ });
187
+ if (result.soft)
188
+ this.log(`recovery is waiting: ${result.state} ${result.detail}`, 'warn');
189
+ }
190
+ async stepPreflightUpgrade() {
191
+ await this.runStep({
192
+ program: 'upgrade',
193
+ script: '10-preflight.sh',
194
+ unit: 'octra-upgrade-preflight',
195
+ label: 'preflight (what is on this host)',
196
+ timeoutSec: 600,
197
+ phase: 'preflight',
198
+ });
199
+ }
200
+ async stepUpgrade() {
201
+ const env = { UPGRADE_WAIT_SECONDS: String(this.config.waitSeconds || 900) };
202
+ if (this.config.testOnly)
203
+ env.UPGRADE_APPLY = '0';
204
+ if (this.config.extra)
205
+ env.UPGRADE_EXTRA = this.config.extra;
206
+ const result = await this.runStep({
207
+ program: 'upgrade',
208
+ script: '20-upgrade.sh',
209
+ unit: 'octra-upgrade-upgrade',
210
+ label: 'update the node (official tool)',
211
+ env,
212
+ timeoutSec: 7500,
213
+ phase: 'upgrade',
214
+ });
215
+ if (result.soft)
216
+ this.log('the tool asked to wait (do NOT restart the node by hand) - run the update again later', 'warn');
217
+ }
218
+ async stepManual() {
219
+ const result = await this.runStep({
220
+ program: 'upgrade',
221
+ script: '30-manual-upgrade.sh',
222
+ unit: 'octra-upgrade-manual-upgrade',
223
+ label: 'update the node (manual fallback)',
224
+ timeoutSec: 8400,
225
+ phase: 'manual',
226
+ });
227
+ if (result.soft)
228
+ this.log('the manual update is not finished - re-run later', 'warn');
229
+ }
230
+ async stepStorage() {
231
+ const result = await this.runStep({
232
+ program: 'upgrade',
233
+ script: '40-storage-prune.sh',
234
+ unit: 'octra-upgrade-storage-prune',
235
+ label: 'remove preserved states',
236
+ env: this.config.testOnly ? { PRUNE_APPLY: '0' } : {},
237
+ timeoutSec: 1500,
238
+ phase: 'storage',
239
+ });
240
+ if (result.soft)
241
+ this.log('the prune stopped - re-run later', 'warn');
242
+ }
243
+ async stepDashboard() {
244
+ this.startPhase('dashboard');
245
+ try {
246
+ const result = await (0, dashboard_1.deployDashboard)(this.client, this.logger, {
247
+ ip: this.config.ip,
248
+ domain: this.config.domain,
249
+ sslMode: this.config.sslMode || 'auto',
250
+ certDir: this.config.certDir,
251
+ email: this.config.email,
252
+ reset: this.config.reset,
253
+ }, 'manage');
254
+ this.dashboardUrl = result.url;
255
+ this.completePhase(true);
256
+ }
257
+ catch (err) {
258
+ this.completePhase(false, err.message);
259
+ throw err;
260
+ }
261
+ }
262
+ }
263
+ exports.ManageOrchestrator = ManageOrchestrator;
264
+ function createManageOrchestrator(config, logger) {
265
+ return new ManageOrchestrator(config, logger);
266
+ }
267
+ //# sourceMappingURL=manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../src/orchestrator/manage.ts"],"names":[],"mappings":"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"}