@xyo-network/xl1-cli-lib 1.19.7 → 1.19.8
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.
- package/dist/node/index.mjs +246 -20
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/locatorFromConfig.d.ts +10 -0
- package/dist/node/locatorFromConfig.d.ts.map +1 -0
- package/dist/node/runCLI.d.ts.map +1 -1
- package/dist/node/tryParseConfig.d.ts +373 -68
- package/dist/node/tryParseConfig.d.ts.map +1 -1
- package/dist/node/xl1.mjs +246 -20
- package/dist/node/xl1.mjs.map +1 -1
- package/package.json +17 -15
- package/src/initLogger.ts +3 -3
- package/src/locatorFromConfig.ts +197 -0
- package/src/runCLI.ts +66 -16
package/dist/node/xl1.mjs
CHANGED
|
@@ -5,12 +5,11 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
5
5
|
import { config } from "dotenv";
|
|
6
6
|
|
|
7
7
|
// src/runCLI.ts
|
|
8
|
-
import { isDefined as isDefined3, toAddress } from "@xylabs/sdk-js";
|
|
8
|
+
import { deepMerge, isDefined as isDefined3, toAddress } from "@xylabs/sdk-js";
|
|
9
9
|
import { runApi } from "@xyo-network/chain-api";
|
|
10
10
|
import { Orchestrator } from "@xyo-network/chain-orchestration";
|
|
11
11
|
import { runProducer } from "@xyo-network/chain-producer";
|
|
12
12
|
import { ConfigZod as ConfigZod2, isZodError } from "@xyo-network/xl1-sdk";
|
|
13
|
-
import { merge as deepMerge } from "ts-deepmerge";
|
|
14
13
|
import yargs from "yargs";
|
|
15
14
|
import { hideBin } from "yargs/helpers";
|
|
16
15
|
|
|
@@ -59,12 +58,12 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
|
|
|
59
58
|
import { Base, ConsoleLogger, isDefined, LogLevel, SilentLogger } from "@xylabs/sdk-js";
|
|
60
59
|
var initLogger = /* @__PURE__ */ __name((config2) => {
|
|
61
60
|
let logger;
|
|
62
|
-
if (config2.silent) {
|
|
61
|
+
if (config2.log.silent) {
|
|
63
62
|
logger = new SilentLogger();
|
|
64
63
|
} else {
|
|
65
64
|
let level;
|
|
66
|
-
if (isDefined(config2.logLevel)) {
|
|
67
|
-
const parsed = LogLevel[config2.logLevel.toLowerCase()];
|
|
65
|
+
if (isDefined(config2.log.logLevel)) {
|
|
66
|
+
const parsed = LogLevel[config2.log.logLevel.toLowerCase()];
|
|
68
67
|
if (isDefined(parsed)) level = parsed;
|
|
69
68
|
}
|
|
70
69
|
logger = new ConsoleLogger(level);
|
|
@@ -73,6 +72,189 @@ var initLogger = /* @__PURE__ */ __name((config2) => {
|
|
|
73
72
|
return logger;
|
|
74
73
|
}, "initLogger");
|
|
75
74
|
|
|
75
|
+
// src/locatorFromConfig.ts
|
|
76
|
+
import { asAddress, assertEx, isString } from "@xylabs/sdk-js";
|
|
77
|
+
import { initApiWallet, initBalanceSummaryMap, initEvmProvidersIfAvailable, initFinalizationArchivistIfNeeded, initProducerAccount, initServerNode, initStatusReporter, initTransferSummaryMap } from "@xyo-network/chain-orchestration";
|
|
78
|
+
import { SimpleBlockRunner } from "@xyo-network/chain-services";
|
|
79
|
+
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
80
|
+
import { validateHydratedBlock, validateHydratedBlockState } from "@xyo-network/chain-validation";
|
|
81
|
+
import { ProviderFactoryLocator, SimpleAccountBalanceViewer, SimpleBlockRewardViewer, SimpleBlockValidationViewer, SimpleBlockViewer, SimpleFinalizationViewer, SimpleMempoolRunner, SimpleMempoolViewer, SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer, SimpleStepRewardsByStakerViewer, SimpleStepRewardsByStepViewer, SimpleStepRewardsTotalViewer, SimpleStepRewardsViewer, SimpleStepViewer, SimpleTimeSyncViewer, SimpleWindowedBlockViewer, SimpleXyoViewer } from "@xyo-network/xl1-sdk";
|
|
82
|
+
async function telemetryContextFromConfig(config2, serviceName, serviceVersion) {
|
|
83
|
+
const { otlpEndpoint } = config2.telemetry?.otel ?? {};
|
|
84
|
+
const { path: endpoint = "/metrics", port = 9466 } = config2.telemetry?.metrics?.scrape ?? {};
|
|
85
|
+
return await initTelemetry({
|
|
86
|
+
attributes: {
|
|
87
|
+
serviceName,
|
|
88
|
+
serviceVersion
|
|
89
|
+
},
|
|
90
|
+
otlpEndpoint,
|
|
91
|
+
metricsConfig: {
|
|
92
|
+
endpoint,
|
|
93
|
+
port
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
__name(telemetryContextFromConfig, "telemetryContextFromConfig");
|
|
98
|
+
async function contextFromConfigWithoutLocator(config2, logger, serviceName, serviceVersion) {
|
|
99
|
+
const singletons = {};
|
|
100
|
+
const caches = {};
|
|
101
|
+
const telemetryConfig = await telemetryContextFromConfig(config2, serviceName, serviceVersion);
|
|
102
|
+
const statusReporter = initStatusReporter({
|
|
103
|
+
logger
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
...telemetryConfig,
|
|
107
|
+
config: config2,
|
|
108
|
+
singletons,
|
|
109
|
+
caches,
|
|
110
|
+
logger,
|
|
111
|
+
statusReporter
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
__name(contextFromConfigWithoutLocator, "contextFromConfigWithoutLocator");
|
|
115
|
+
async function rootLocatorFromConfig(config2, context) {
|
|
116
|
+
let locator = new ProviderFactoryLocator(context);
|
|
117
|
+
locator.registerMany([
|
|
118
|
+
SimpleNetworkStakeViewer.factory(SimpleNetworkStakeViewer.dependencies, {}),
|
|
119
|
+
SimpleTimeSyncViewer.factory(SimpleTimeSyncViewer.dependencies, {}),
|
|
120
|
+
SimpleStepViewer.factory(SimpleStepViewer.dependencies, {}),
|
|
121
|
+
SimpleStepRewardsViewer.factory(SimpleStepRewardsViewer.dependencies, {}),
|
|
122
|
+
SimpleStepRewardsByPositionViewer.factory(SimpleStepRewardsByPositionViewer.dependencies, {}),
|
|
123
|
+
SimpleStepRewardsByStakerViewer.factory(SimpleStepRewardsByStakerViewer.dependencies, {}),
|
|
124
|
+
SimpleStepRewardsByStepViewer.factory(SimpleStepRewardsByStepViewer.dependencies, {}),
|
|
125
|
+
SimpleStepRewardsTotalViewer.factory(SimpleStepRewardsTotalViewer.dependencies, {}),
|
|
126
|
+
SimpleBlockValidationViewer.factory(SimpleBlockValidationViewer.dependencies, {
|
|
127
|
+
state: validateHydratedBlockState,
|
|
128
|
+
protocol: validateHydratedBlock
|
|
129
|
+
})
|
|
130
|
+
]);
|
|
131
|
+
locator = await initEvmProvidersIfAvailable(locator);
|
|
132
|
+
locator = await (isString(config2.remote.rpc?.url) ? remoteLocatorFromConfig(config2, {
|
|
133
|
+
...context,
|
|
134
|
+
locator
|
|
135
|
+
}) : localLocatorFromConfig(config2, {
|
|
136
|
+
...context,
|
|
137
|
+
locator
|
|
138
|
+
}));
|
|
139
|
+
locator.freeze();
|
|
140
|
+
return locator;
|
|
141
|
+
}
|
|
142
|
+
__name(rootLocatorFromConfig, "rootLocatorFromConfig");
|
|
143
|
+
async function localLocatorFromConfig(config2, context) {
|
|
144
|
+
const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
|
|
145
|
+
const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
|
|
146
|
+
const wallet = await initApiWallet(context);
|
|
147
|
+
const { writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist } = await initServerNode({
|
|
148
|
+
...context,
|
|
149
|
+
wallet,
|
|
150
|
+
transfersSummaryMap,
|
|
151
|
+
balancesSummaryMap
|
|
152
|
+
});
|
|
153
|
+
await initFinalizationArchivistIfNeeded(writableChainArchivist, config2, wallet);
|
|
154
|
+
const locator = new ProviderFactoryLocator(context);
|
|
155
|
+
locator.registerMany([
|
|
156
|
+
SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
|
|
157
|
+
pendingTransactionsArchivist,
|
|
158
|
+
pendingBlocksArchivist
|
|
159
|
+
}),
|
|
160
|
+
SimpleMempoolRunner.factory(SimpleMempoolRunner.dependencies, {
|
|
161
|
+
pendingTransactionsArchivist,
|
|
162
|
+
pendingBlocksArchivist
|
|
163
|
+
}),
|
|
164
|
+
SimpleAccountBalanceViewer.factory(SimpleAccountBalanceViewer.dependencies, {
|
|
165
|
+
balancesSummaryMap,
|
|
166
|
+
transfersSummaryMap
|
|
167
|
+
}),
|
|
168
|
+
SimpleFinalizationViewer.factory(SimpleFinalizationViewer.dependencies, {
|
|
169
|
+
finalizedArchivist: readonlyChainArchivist
|
|
170
|
+
}),
|
|
171
|
+
SimpleBlockViewer.factory(SimpleBlockViewer.dependencies, {
|
|
172
|
+
finalizedArchivist: readonlyChainArchivist
|
|
173
|
+
}),
|
|
174
|
+
SimpleWindowedBlockViewer.factory(SimpleWindowedBlockViewer.dependencies, {
|
|
175
|
+
maxWindowSize: 1e4,
|
|
176
|
+
syncInterval: 1e4
|
|
177
|
+
}),
|
|
178
|
+
SimpleXyoViewer.factory(SimpleXyoViewer.dependencies, {})
|
|
179
|
+
]);
|
|
180
|
+
locator.freeze();
|
|
181
|
+
return locator;
|
|
182
|
+
}
|
|
183
|
+
__name(localLocatorFromConfig, "localLocatorFromConfig");
|
|
184
|
+
async function remoteLocatorFromConfig(config2, context) {
|
|
185
|
+
const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
|
|
186
|
+
const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
|
|
187
|
+
const wallet = await initApiWallet(context);
|
|
188
|
+
const { readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist } = await initServerNode({
|
|
189
|
+
...context,
|
|
190
|
+
wallet,
|
|
191
|
+
transfersSummaryMap,
|
|
192
|
+
balancesSummaryMap
|
|
193
|
+
});
|
|
194
|
+
const locator = new ProviderFactoryLocator(context);
|
|
195
|
+
locator.registerMany([
|
|
196
|
+
SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
|
|
197
|
+
pendingTransactionsArchivist,
|
|
198
|
+
pendingBlocksArchivist
|
|
199
|
+
}),
|
|
200
|
+
SimpleMempoolRunner.factory(SimpleMempoolRunner.dependencies, {
|
|
201
|
+
pendingTransactionsArchivist,
|
|
202
|
+
pendingBlocksArchivist
|
|
203
|
+
}),
|
|
204
|
+
SimpleAccountBalanceViewer.factory(SimpleAccountBalanceViewer.dependencies, {
|
|
205
|
+
balancesSummaryMap,
|
|
206
|
+
transfersSummaryMap
|
|
207
|
+
}),
|
|
208
|
+
SimpleFinalizationViewer.factory(SimpleFinalizationViewer.dependencies, {
|
|
209
|
+
finalizedArchivist: readonlyChainArchivist
|
|
210
|
+
}),
|
|
211
|
+
SimpleBlockViewer.factory(SimpleBlockViewer.dependencies, {
|
|
212
|
+
finalizedArchivist: readonlyChainArchivist
|
|
213
|
+
}),
|
|
214
|
+
SimpleWindowedBlockViewer.factory(SimpleWindowedBlockViewer.dependencies, {
|
|
215
|
+
maxWindowSize: 1e4,
|
|
216
|
+
syncInterval: 1e4
|
|
217
|
+
}),
|
|
218
|
+
SimpleXyoViewer.factory(SimpleXyoViewer.dependencies, {})
|
|
219
|
+
]);
|
|
220
|
+
locator.freeze();
|
|
221
|
+
return locator;
|
|
222
|
+
}
|
|
223
|
+
__name(remoteLocatorFromConfig, "remoteLocatorFromConfig");
|
|
224
|
+
async function producerLocatorFromConfig(config2, context) {
|
|
225
|
+
const { logger } = context;
|
|
226
|
+
const account = await initProducerAccount({
|
|
227
|
+
config: config2
|
|
228
|
+
});
|
|
229
|
+
const locator = new ProviderFactoryLocator(context);
|
|
230
|
+
const rewardAddress = asAddress(config2.actors.producer.rewardAddress ?? account.address, true);
|
|
231
|
+
logger?.info(`Using reward address ${rewardAddress}`);
|
|
232
|
+
if (rewardAddress === account.address) {
|
|
233
|
+
logger?.warn(`Using producer account address as reward address: ${account.address}`);
|
|
234
|
+
}
|
|
235
|
+
locator.registerMany([
|
|
236
|
+
SimpleBlockRewardViewer.factory(SimpleBlockRewardViewer.dependencies, {}),
|
|
237
|
+
SimpleBlockRunner.factory(SimpleBlockRunner.dependencies, {
|
|
238
|
+
account,
|
|
239
|
+
rewardAddress
|
|
240
|
+
})
|
|
241
|
+
]);
|
|
242
|
+
locator.freeze();
|
|
243
|
+
return locator;
|
|
244
|
+
}
|
|
245
|
+
__name(producerLocatorFromConfig, "producerLocatorFromConfig");
|
|
246
|
+
async function locatorsFromConfig(actors, config2, context) {
|
|
247
|
+
const result = {
|
|
248
|
+
_root: await rootLocatorFromConfig(config2, context)
|
|
249
|
+
};
|
|
250
|
+
const producer = actors.includes("producer") ? await producerLocatorFromConfig(config2, result._root.context) : void 0;
|
|
251
|
+
if (producer) {
|
|
252
|
+
result.producer = producer;
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
__name(locatorsFromConfig, "locatorsFromConfig");
|
|
257
|
+
|
|
76
258
|
// src/optionsFromGlobalZodRegistry.ts
|
|
77
259
|
import { isUsageMeta } from "@xyo-network/xl1-sdk";
|
|
78
260
|
import { globalRegistry } from "zod";
|
|
@@ -131,7 +313,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
131
313
|
|
|
132
314
|
// src/runCLI.ts
|
|
133
315
|
var configuration;
|
|
134
|
-
var version = isDefined3("1.19.
|
|
316
|
+
var version = isDefined3("1.19.7") ? "1.19.7" : "unknown";
|
|
135
317
|
function resolveConfig(config2) {
|
|
136
318
|
const logger = console;
|
|
137
319
|
const defaultChainId = toAddress("1");
|
|
@@ -166,6 +348,31 @@ var getContextFromConfig = /* @__PURE__ */ __name(async (configuration2) => {
|
|
|
166
348
|
orchestrator
|
|
167
349
|
};
|
|
168
350
|
}, "getContextFromConfig");
|
|
351
|
+
var getLocatorsFromConfig = /* @__PURE__ */ __name(async (actors, configuration2) => {
|
|
352
|
+
const logger = initLogger(configuration2);
|
|
353
|
+
const orchestrator = await Orchestrator.create({
|
|
354
|
+
logger
|
|
355
|
+
});
|
|
356
|
+
const context = await contextFromConfigWithoutLocator(configuration2, logger, "xl1-cli", version);
|
|
357
|
+
const locators = await locatorsFromConfig(actors, configuration2, context);
|
|
358
|
+
process.on("SIGINT", () => {
|
|
359
|
+
void (async () => {
|
|
360
|
+
try {
|
|
361
|
+
logger.log("\nSIGINT received. Attempting graceful shutdown...");
|
|
362
|
+
await orchestrator?.stop();
|
|
363
|
+
logger.log("Orchestrator stopped, exiting now.");
|
|
364
|
+
process.exit(0);
|
|
365
|
+
} catch (err) {
|
|
366
|
+
logger.error("Error stopping orchestrator:", err);
|
|
367
|
+
process.exit(1);
|
|
368
|
+
}
|
|
369
|
+
})();
|
|
370
|
+
});
|
|
371
|
+
return {
|
|
372
|
+
locators,
|
|
373
|
+
orchestrator
|
|
374
|
+
};
|
|
375
|
+
}, "getLocatorsFromConfig");
|
|
169
376
|
async function runCLI() {
|
|
170
377
|
const y = yargs(hideBin(process.argv));
|
|
171
378
|
const argv = y.usage(`
|
|
@@ -197,6 +404,15 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
197
404
|
throw validatedConfigResult.error;
|
|
198
405
|
}
|
|
199
406
|
configuration = validatedConfigResult.data;
|
|
407
|
+
const { actors, ...rootConfig } = configuration;
|
|
408
|
+
const actorNames = Object.keys(actors);
|
|
409
|
+
for (const actorName of actorNames) {
|
|
410
|
+
configuration.actors[actorName] = deepMerge(rootConfig ?? {}, configuration.actors[actorName] ?? {});
|
|
411
|
+
}
|
|
412
|
+
if (argv2["dump-config"]) {
|
|
413
|
+
console.log(JSON.stringify(configuration, null, 2));
|
|
414
|
+
process.exit(0);
|
|
415
|
+
}
|
|
200
416
|
} catch (err) {
|
|
201
417
|
if (isZodError(err)) {
|
|
202
418
|
console.error(`Zod error: ${err.message}`);
|
|
@@ -237,12 +453,10 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
237
453
|
}).command("producer", "Run a XL1 Producer Node", (yargs2) => {
|
|
238
454
|
return yargs2.command("$0", "Run a XL1 Producer Node", () => {
|
|
239
455
|
}, async () => {
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
singletons: {}
|
|
245
|
-
});
|
|
456
|
+
const { locators, orchestrator } = await getLocatorsFromConfig([
|
|
457
|
+
"producer"
|
|
458
|
+
], configuration);
|
|
459
|
+
await runProducer(configuration, orchestrator, locators["producer"]);
|
|
246
460
|
});
|
|
247
461
|
}).command("reward-redemption-api", "Run a XL1 Rewards Redemption API Node", (yargs2) => {
|
|
248
462
|
return yargs2.command("$0", "Run a XL1 Rewards Redemption API Node", () => {
|
|
@@ -255,25 +469,37 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
255
469
|
});
|
|
256
470
|
}).command("$0", "Run a full XL1 Node", () => {
|
|
257
471
|
}, async () => {
|
|
472
|
+
const actors = [
|
|
473
|
+
"producer",
|
|
474
|
+
"api"
|
|
475
|
+
];
|
|
476
|
+
if (configuration.actors.mempool.enabled) {
|
|
477
|
+
actors.push("mempool");
|
|
478
|
+
}
|
|
258
479
|
const context = await getContextFromConfig(configuration);
|
|
259
|
-
|
|
480
|
+
const { locators, orchestrator } = await getLocatorsFromConfig([
|
|
481
|
+
"producer"
|
|
482
|
+
], configuration);
|
|
483
|
+
if (configuration.actors.mempool.enabled) {
|
|
260
484
|
runMempool({
|
|
261
485
|
...context,
|
|
262
486
|
config: configuration
|
|
263
487
|
});
|
|
264
|
-
await waitForHostPort(configuration.mempool.host, configuration.mempool.port);
|
|
488
|
+
await waitForHostPort(configuration.actors.mempool.host, configuration.actors.mempool.port);
|
|
265
489
|
}
|
|
266
490
|
await runApi({
|
|
267
491
|
...context,
|
|
268
492
|
config: configuration,
|
|
269
493
|
singletons: {}
|
|
270
494
|
});
|
|
271
|
-
await waitForHostPort(configuration.api.host, configuration.api.port);
|
|
272
|
-
await runProducer(
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
495
|
+
await waitForHostPort(configuration.actors.api.host, configuration.actors.api.port);
|
|
496
|
+
await runProducer(configuration, orchestrator, locators["producer"]);
|
|
497
|
+
}).options({
|
|
498
|
+
"dump-config": {
|
|
499
|
+
type: "boolean",
|
|
500
|
+
description: "Just process the configuration and print the resolved config to stdout, then exit.",
|
|
501
|
+
default: false
|
|
502
|
+
}
|
|
277
503
|
}).help().alias("help", "h").version(version).argv;
|
|
278
504
|
await argv;
|
|
279
505
|
}
|
package/dist/node/xl1.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/start.ts","../../src/runCLI.ts","../../src/commands/bridge/runBridge.ts","../../src/commands/mempool/runMempool.ts","../../src/commands/rewardRedemption/runRewardRedemptionApi.ts","../../src/images.ts","../../src/initLogger.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/tryParseConfig.ts","../../src/waitForHostPort.ts","../../src/xl1.ts"],"sourcesContent":["import { config } from 'dotenv'\n\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n config({ quiet: true })\n await runCLI()\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { isDefined, toAddress } from '@xylabs/sdk-js'\nimport { runApi } from '@xyo-network/chain-api'\nimport { Orchestrator } from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { ConfigZod, isZodError } from '@xyo-network/xl1-sdk'\nimport { merge as deepMerge } from 'ts-deepmerge'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n runBridge, runMempool, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { tryParseConfig } from './tryParseConfig.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\ninterface RunCliContext {\n logger: Logger\n orchestrator: Orchestrator\n}\n\n/**\n * The configuration that will be used throughout the CLI.\n * This is materialized after parsing the command-line arguments,\n * environment variables, and defaults.\n */\nlet configuration: Config\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction resolveConfig(config: Config): Config {\n const logger = console\n const defaultChainId = toAddress('1')\n const resolved = structuredClone(config)\n if (!resolved.chain.id) {\n logger.warn(`No chain ID specified in configuration; defaulting to ${defaultChainId}`)\n resolved.chain.id = defaultChainId\n }\n return resolved\n}\n\nconst getContextFromConfig = async (configuration: Config): Promise<RunCliContext> => {\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n await orchestrator?.stop()\n logger.log('Orchestrator stopped, exiting now.')\n process.exit(0)\n } catch (err) {\n logger.error('Error stopping orchestrator:', err)\n process.exit(1)\n }\n })()\n })\n return { logger, orchestrator }\n}\n\n// Main entry point\nexport async function runCLI() {\n // Parse command-line arguments using Yargs\n const y = yargs(hideBin(process.argv)) as Argv<Config>\n const argv = y\n .usage(`\n🚀 XL1 Node CLI (${version})\n${XL1LogoColorizedAscii}\nRun various components of the XL1 ecosystem.\n\nUsage:\n$0 <command> [options]`)\n .parserConfiguration({\n 'dot-notation': true, // foo.bar → { foo: { bar } }\n 'parse-numbers': false, // Don't auto-parse numbers to allow strings like \"0x1\"\n 'populate--': true, // Populate -- with all options so we can detected user-supplied vs defaults\n })\n .env('XL1')\n .scriptName('xl1')\n .middleware((argv) => {\n try {\n // Parse the various config sources\n const parsedConfigFile = tryParseConfig() // Config file\n const parsedConfigArgs = argv // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(parsedConfigFile)\n if (!parseResult.success) {\n throw parseResult.error\n }\n // Deep merge with precedence\n // TODO: Would like precedence to be defaults < file < ENV < CLI Args\n // but there is currently no way to determine which are defaults vs\n // user-supplied CLI Args since we set the CLI args to the defaults\n // and receive a flattened object. We might need to manually invoke\n // the parser without the defaults to achieve this.\n // const mergedConfig = deepMerge(parsedConfigArgs, parsedConfigFile)\n const mergedConfig = deepMerge(parsedConfigArgs)\n const validatedMergedConfigResult = ConfigZod.safeParse(mergedConfig)\n if (!validatedMergedConfigResult.success) {\n throw validatedMergedConfigResult.error\n }\n const resolvedConfig = resolveConfig(validatedMergedConfigResult.data)\n // Validate the merged configuration\n const validatedConfigResult = ConfigZod.safeParse(resolvedConfig)\n if (!validatedConfigResult.success) {\n throw validatedConfigResult.error\n }\n configuration = validatedConfigResult.data\n } catch (err) {\n if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n throw new Error('Invalid configuration')\n }\n })\n .options(optionsFromGlobalZodRegistry())\n // .commandDir('./command/commands', opts) // Not yet supported for ESM\n .wrap(y.terminalWidth())\n .command('api', 'Run a XL1 API Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 API Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n await runApi({\n ...context, config: configuration, singletons: {},\n })\n })\n })\n .command('bridge', 'Run a XL1 Bridge Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Bridge Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runBridge({ ...context, config: configuration })\n })\n })\n .command('mempool', 'Run a XL1 Mempool Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Mempool Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runMempool({ ...context, config: configuration })\n })\n })\n .command('producer', 'Run a XL1 Producer Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Producer Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n await runProducer({\n ...context, config: configuration, singletons: {},\n })\n })\n })\n .command('reward-redemption-api', 'Run a XL1 Rewards Redemption API Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Rewards Redemption API Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runRewardRedemptionApi({ ...context, config: configuration })\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n if (configuration.mempool.enabled) {\n // Start Mempool but do not block\n runMempool({ ...context, config: configuration })\n // Wait for Mempool to be ready\n await waitForHostPort(configuration.mempool.host, configuration.mempool.port)\n }\n // Start API but do not block\n await runApi({\n ...context, config: configuration, singletons: {},\n })\n // Wait for API to be ready\n await waitForHostPort(configuration.api.host, configuration.api.port)\n // Start Producer and block on it\n await runProducer({\n ...context, config: configuration, singletons: {},\n })\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-bridge'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunBridgeContext {\n config: Config\n logger?: Logger\n}\n\nexport function runBridge(context: RunBridgeContext) {\n void getServer(context)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-mempool'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunMempoolContext {\n config: Config\n logger: Logger\n}\n\nexport function runMempool(context: RunMempoolContext) {\n void getServer(context)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-reward-redemption'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunRewardRedemptionApiContext {\n config: Config\n logger?: Logger\n}\n\nexport function runRewardRedemptionApi(context: RunRewardRedemptionApiContext) {\n void getServer(context)\n}\n","/* eslint-disable @stylistic/max-len */\nexport const XL1LogoColorizedAscii = `\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;118;111;144m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;72;32;223m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m ╠╠\u001b[0m\u001b[38;2;103;85;170m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;79;121;152m╦\u001b[0m\u001b[38;2;82;121;151m╦\u001b[0m\u001b[38;2;112;125;136m_ \u001b[0m\u001b[38;2;88;59;196m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;73;34;221m▒ \u001b[0m\u001b[38;2;121;121;127m_\u001b[0m\u001b[38;2;100;101;128m╔\u001b[0m\u001b[38;2;93;94;127m╦\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;82;121;151m²\u001b[0m\u001b[38;2;44;116;170m╠\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;51;117;167mD\u001b[0m\u001b[38;2;80;121;152m╦\u001b[0m\u001b[38;2;111;125;136m_ \u001b[0m\u001b[38;2;67;23;232m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠ \u001b[0m\u001b[38;2;120;121;128m_\u001b[0m\u001b[38;2;100;101;127m╔\u001b[0m\u001b[38;2;79;81;127mR\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;88;90;127m╙\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;55;117;165m╚\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;44;116;171m▒▒\u001b[0m\u001b[38;2;50;116;167mD\u001b[0m\u001b[38;2;80;121;152m╦ \u001b[0m\u001b[38;2;106;90;165mj\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;89;61;194mH \u001b[0m\u001b[38;2;99;100;127m╔\u001b[0m\u001b[38;2;79;80;127mD\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒▒╠\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;83;121;150m²\u001b[0m\u001b[38;2;44;116;170m▒\u001b[0m\u001b[38;2;44;116;171m▒▒▒ \u001b[0m\u001b[38;2;76;38;217m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;74;76;128m╠\u001b[0m\u001b[38;2;71;73;128m▒▒▒\u001b[0m\u001b[38;2;89;90;128m╙\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;90;118;148m\\`\u001b[0m\u001b[38;2;89;107;153m_\u001b[0m\u001b[38;2;93;97;154m,\u001b[0m\u001b[38;2;105;89;166m╓\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;95;72;183m╓\u001b[0m\u001b[38;2;106;96;152m_\u001b[0m\u001b[38;2;100;94;143m\\`\u001b[0m\u001b[38;2;101;100;133m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;122;118;137m_\u001b[0m\u001b[38;2;113;102;153m,\u001b[0m\u001b[38;2;108;94;161m╓\u001b[0m\u001b[38;2;104;86;169m╓\u001b[0m\u001b[38;2;98;77;178m╔\u001b[0m\u001b[38;2;93;67;188m╗\u001b[0m\u001b[38;2;88;59;196mφ\u001b[0m\u001b[38;2;83;51;204m@\u001b[0m\u001b[38;2;78;42;213mD\u001b[0m\u001b[38;2;72;32;223m▒\u001b[0m\u001b[38;2;68;24;231m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;71;30;225m▒\u001b[0m\u001b[38;2;77;40;215m▒\u001b[0m\u001b[38;2;82;49;206mK\u001b[0m\u001b[38;2;87;57;198mφ\u001b[0m\u001b[38;2;91;65;190m╗\u001b[0m\u001b[38;2;97;75;180m╦\u001b[0m\u001b[38;2;103;84;171m╖\u001b[0m\u001b[38;2;107;92;163m²\u001b[0m\u001b[38;2;112;101;154m_\u001b[0m\u001b[38;2;119;112;143m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;106;91;164m\\`\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;89;62;193m╙\u001b[0m\u001b[38;2;85;54;201m╙\u001b[0m\u001b[38;2;80;45;210m╚\u001b[0m\u001b[38;2;74;35;220m╝\u001b[0m\u001b[38;2;69;26;229m╠\u001b[0m\u001b[38;2;66;22;233m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;73;33;222m╝\u001b[0m\u001b[38;2;79;43;212m╩\u001b[0m\u001b[38;2;84;52;203m╜\u001b[0m\u001b[38;2;88;60;195m╙\u001b[0m\u001b[38;2;93;68;187m^\u001b[0m\u001b[38;2;100;80;175m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;113;84;152m\\`\u001b[0m\u001b[38;2;103;79;169m'\u001b[0m\u001b[38;2;95;72;183m\"\u001b[0m\u001b[38;2;87;57;198m╙\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;80;46;209m╜\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;102;77;175m^\u001b[0m\u001b[38;2;112;81;162m\\`\u001b[0m\u001b[38;2;115;92;155m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;145;116;107m,\u001b[0m\u001b[38;2;199;82;45m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒╠ \u001b[0m\u001b[38;2;70;28;227m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;189;49;97må\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;155;92;114m,\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;175;98;73m╔\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒▒▒\u001b[0m\u001b[38;2;197;83;47m╩ \u001b[0m\u001b[38;2;98;76;179m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;81;48;207mH \u001b[0m\u001b[38;2;188;51;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠╠\u001b[0m\u001b[38;2;183;57;100mH\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;146;116;106m,\u001b[0m\u001b[38;2;199;82;44m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;196;84;48m╩\u001b[0m\u001b[38;2;168;102;81m^ \u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠ \u001b[0m\u001b[38;2;160;87;111m'\u001b[0m\u001b[38;2;187;52;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;156;91;113m,\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;198;83;46m╩\u001b[0m\u001b[38;2;194;85;50m╩\u001b[0m\u001b[38;2;167;102;82m^ \u001b[0m\u001b[38;2;81;46;209m╚\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠ \u001b[0m\u001b[38;2;159;88;112m'\u001b[0m\u001b[38;2;186;53;98m╚\u001b[0m\u001b[38;2;197;40;93m╩\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;110;97;158m'\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;94;69;186mH\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;68;25;230m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;108;93;162m²\u001b[0m\u001b[38;2;99;79;176m^\u001b[0m`\n","import type { Logger, LogLevelValue } from '@xylabs/sdk-js'\nimport {\n Base,\n ConsoleLogger, isDefined,\n LogLevel, SilentLogger,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: Config): Logger => {\n let logger: Logger\n if (config.silent) {\n logger = new SilentLogger()\n } else {\n let level: LogLevelValue | undefined\n if (isDefined(config.logLevel)) {\n const parsed = LogLevel[config.logLevel.toLowerCase() as keyof typeof LogLevel]\n if (isDefined(parsed)) level = parsed\n }\n logger = new ConsoleLogger(level)\n }\n Base.defaultLogger = logger\n return logger\n}\n","import type { UsageMeta } from '@xyo-network/xl1-sdk'\nimport { isUsageMeta } from '@xyo-network/xl1-sdk'\nimport type { Options } from 'yargs'\nimport { globalRegistry } from 'zod'\n\nconst usageMetaToOptions = (meta: UsageMeta): Options => {\n return meta\n}\n\nexport const optionsFromGlobalZodRegistry = (): Record<string, Options> => {\n const opts: Record<string, Options> = {}\n for (const schema of Object.values(globalRegistry._map)) {\n if (isUsageMeta(schema)) {\n if (schema.hidden) continue // skip hidden options\n opts[schema.title] = usageMetaToOptions(schema)\n }\n }\n return opts\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport { ConfigZod } from '@xyo-network/xl1-sdk'\nimport { cosmiconfigSync } from 'cosmiconfig'\n\n/**\n * The name of the configuration file to search for.\n */\nconst configName = 'xyo'\n\n/**\n * The name of the section within the configuration file to parse.\n */\nconst configSection = 'xl1' // Default section in the config file\n\n/**\n * Attempts to parse the configuration from a file using cosmiconfig.\n * @returns The parsed configuration object if found and valid, otherwise undefined.\n */\nexport const tryParseConfig = () => {\n const explorer = cosmiconfigSync(\n configName,\n /* {\n searchPlaces: [\n 'package.json', // Looks under `xyo` key in package.json\n '.xyorc.json', // Supports common dotfile format\n 'xyo.config.json', // Supports custom-named config file\n ],\n loaders: {\n '.json': defaultLoaders['.json'],\n 'noExt': defaultLoaders['.json'],\n },\n }, */\n )\n const result = explorer.search()\n if (!isNull(result)) {\n const section = result?.config?.[configSection]\n if (isDefined(section) && typeof section === 'object') {\n return ConfigZod.parse(section)\n }\n }\n return ConfigZod.parse({})\n}\n","import net from 'node:net'\n\nexport const waitForHostPort = (host: string, port: number): Promise<void> => {\n return new Promise((resolve) => {\n const tryConnect = () => {\n const socket = new net.Socket()\n\n socket\n .setTimeout(1000)\n .once('error', () => {\n socket.destroy()\n setTimeout(tryConnect, 500) // retry after 500ms\n })\n .once('timeout', () => {\n socket.destroy()\n setTimeout(tryConnect, 500)\n })\n .connect(port, host, () => {\n socket.end()\n resolve()\n })\n }\n\n tryConnect()\n })\n}\n","import { start } from './start.ts'\n\nstart().catch((err) => {\n // If we're in development mode, log the stack trace to the console\n if (process.env.NODE_ENV === 'development') console.error('An error occurred during startup:', err)\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n})\n"],"mappings":"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","names":["config","isDefined","toAddress","runApi","Orchestrator","runProducer","ConfigZod","isZodError","merge","deepMerge","yargs","hideBin","getServer","runBridge","context","getServer","getServer","runMempool","context","getServer","getServer","runRewardRedemptionApi","context","getServer","XL1LogoColorizedAscii","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","isDefined","isNull","ConfigZod","cosmiconfigSync","configName","configSection","tryParseConfig","explorer","cosmiconfigSync","result","search","isNull","section","config","isDefined","ConfigZod","parse","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","resolveConfig","config","logger","console","defaultChainId","toAddress","resolved","structuredClone","chain","id","warn","getContextFromConfig","initLogger","orchestrator","Orchestrator","create","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","parsedConfigFile","tryParseConfig","parsedConfigArgs","parseResult","ConfigZod","safeParse","success","mergedConfig","deepMerge","validatedMergedConfigResult","resolvedConfig","data","validatedConfigResult","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","context","runApi","singletons","runBridge","runMempool","runProducer","runRewardRedemptionApi","mempool","enabled","waitForHostPort","host","port","api","help","alias","start","config","quiet","runCLI","start","catch","err","process","env","NODE_ENV","console","error","exit"]}
|
|
1
|
+
{"version":3,"sources":["../../src/start.ts","../../src/runCLI.ts","../../src/commands/bridge/runBridge.ts","../../src/commands/mempool/runMempool.ts","../../src/commands/rewardRedemption/runRewardRedemptionApi.ts","../../src/images.ts","../../src/initLogger.ts","../../src/locatorFromConfig.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/tryParseConfig.ts","../../src/waitForHostPort.ts","../../src/xl1.ts"],"sourcesContent":["import { config } from 'dotenv'\n\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n config({ quiet: true })\n await runCLI()\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport {\n deepMerge, isDefined, toAddress,\n} from '@xylabs/sdk-js'\nimport { runApi } from '@xyo-network/chain-api'\nimport { Orchestrator } from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { ActorName, Config } from '@xyo-network/xl1-sdk'\nimport { ConfigZod, isZodError } from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n runBridge, runMempool, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { contextFromConfigWithoutLocator, locatorsFromConfig } from './locatorFromConfig.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { tryParseConfig } from './tryParseConfig.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\n\ninterface RunCliContext {\n logger: Logger\n orchestrator: Orchestrator\n}\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\n/**\n * The configuration that will be used throughout the CLI.\n * This is materialized after parsing the command-line arguments,\n * environment variables, and defaults.\n */\nlet configuration: Config\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction resolveConfig(config: Config): Config {\n const logger = console\n const defaultChainId = toAddress('1')\n const resolved = structuredClone(config)\n if (!resolved.chain.id) {\n logger.warn(`No chain ID specified in configuration; defaulting to ${defaultChainId}`)\n resolved.chain.id = defaultChainId\n }\n return resolved\n}\n\nconst getContextFromConfig = async (configuration: Config): Promise<RunCliContext> => {\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n await orchestrator?.stop()\n logger.log('Orchestrator stopped, exiting now.')\n process.exit(0)\n } catch (err) {\n logger.error('Error stopping orchestrator:', err)\n process.exit(1)\n }\n })()\n })\n return { logger, orchestrator }\n}\n\nconst getLocatorsFromConfig = async (actors: string[], configuration: Config) => {\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const context = await contextFromConfigWithoutLocator(configuration, logger, 'xl1-cli', version)\n const locators = await locatorsFromConfig(actors, configuration, context)\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n await orchestrator?.stop()\n logger.log('Orchestrator stopped, exiting now.')\n process.exit(0)\n } catch (err) {\n logger.error('Error stopping orchestrator:', err)\n process.exit(1)\n }\n })()\n })\n return { locators, orchestrator }\n}\n\n// Main entry point\nexport async function runCLI() {\n // Parse command-line arguments using Yargs\n const y = yargs(hideBin(process.argv)) as Argv<Config>\n const argv = y\n .usage(`\n🚀 XL1 Node CLI (${version})\n${XL1LogoColorizedAscii}\nRun various components of the XL1 ecosystem.\n\nUsage:\n$0 <command> [options]`)\n .parserConfiguration({\n 'dot-notation': true, // foo.bar → { foo: { bar } }\n 'parse-numbers': false, // Don't auto-parse numbers to allow strings like \"0x1\"\n 'populate--': true, // Populate -- with all options so we can detected user-supplied vs defaults\n })\n .env('XL1')\n .scriptName('xl1')\n .middleware((argv) => {\n try {\n // Parse the various config sources\n const parsedConfigFile = tryParseConfig() // Config file\n const parsedConfigArgs = argv // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(parsedConfigFile)\n if (!parseResult.success) {\n throw parseResult.error\n }\n // Deep merge with precedence\n // TODO: Would like precedence to be defaults < file < ENV < CLI Args\n // but there is currently no way to determine which are defaults vs\n // user-supplied CLI Args since we set the CLI args to the defaults\n // and receive a flattened object. We might need to manually invoke\n // the parser without the defaults to achieve this.\n // const mergedConfig = deepMerge(parsedConfigArgs, parsedConfigFile)\n const mergedConfig = deepMerge(parsedConfigArgs)\n const validatedMergedConfigResult = ConfigZod.safeParse(mergedConfig)\n if (!validatedMergedConfigResult.success) {\n throw validatedMergedConfigResult.error\n }\n const resolvedConfig = resolveConfig(validatedMergedConfigResult.data)\n // Validate the merged configuration\n const validatedConfigResult = ConfigZod.safeParse(resolvedConfig)\n if (!validatedConfigResult.success) {\n throw validatedConfigResult.error\n }\n configuration = validatedConfigResult.data\n\n const { actors, ...rootConfig } = configuration\n const actorNames = Object.keys(actors) as ActorName[]\n\n for (const actorName of actorNames) {\n configuration.actors[actorName] = deepMerge(\n rootConfig ?? {},\n configuration.actors[actorName] ?? {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n }\n\n // Check if user wants to dump config and exit\n if (argv['dump-config']) {\n console.log(JSON.stringify(configuration, null, 2))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\n } catch (err) {\n if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n throw new Error('Invalid configuration')\n }\n })\n .options(optionsFromGlobalZodRegistry())\n // .commandDir('./command/commands', opts) // Not yet supported for ESM\n .wrap(y.terminalWidth())\n .command('api', 'Run a XL1 API Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 API Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n await runApi({\n ...context, config: configuration, singletons: {},\n })\n })\n })\n .command('bridge', 'Run a XL1 Bridge Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Bridge Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runBridge({ ...context, config: configuration })\n })\n })\n .command('mempool', 'Run a XL1 Mempool Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Mempool Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runMempool({ ...context, config: configuration })\n })\n })\n .command('producer', 'Run a XL1 Producer Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Producer Node', () => {}, async () => {\n const { locators, orchestrator } = await getLocatorsFromConfig(['producer'], configuration)\n await runProducer(configuration, orchestrator, locators['producer'])\n })\n })\n .command('reward-redemption-api', 'Run a XL1 Rewards Redemption API Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Rewards Redemption API Node', () => {}, async () => {\n const context = await getContextFromConfig(configuration)\n runRewardRedemptionApi({ ...context, config: configuration })\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const actors = ['producer', 'api']\n if (configuration.actors.mempool.enabled) {\n actors.push('mempool')\n }\n const context = await getContextFromConfig(configuration)\n const { locators, orchestrator } = await getLocatorsFromConfig(['producer'], configuration)\n if (configuration.actors.mempool.enabled) {\n // Start Mempool but do not block\n runMempool({ ...context, config: configuration })\n // Wait for Mempool to be ready\n await waitForHostPort(configuration.actors.mempool.host, configuration.actors.mempool.port)\n }\n // Start API but do not block\n await runApi({\n ...context, config: configuration, singletons: {},\n })\n // Wait for API to be ready\n await waitForHostPort(configuration.actors.api.host, configuration.actors.api.port)\n // Start Producer and block on it\n await runProducer(configuration, orchestrator, locators['producer'])\n })\n .options({\n 'dump-config': {\n type: 'boolean',\n description: 'Just process the configuration and print the resolved config to stdout, then exit.',\n default: false,\n },\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-bridge'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunBridgeContext {\n config: Config\n logger?: Logger\n}\n\nexport function runBridge(context: RunBridgeContext) {\n void getServer(context)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-mempool'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunMempoolContext {\n config: Config\n logger: Logger\n}\n\nexport function runMempool(context: RunMempoolContext) {\n void getServer(context)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { getServer } from '@xyo-network/chain-reward-redemption'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\ninterface RunRewardRedemptionApiContext {\n config: Config\n logger?: Logger\n}\n\nexport function runRewardRedemptionApi(context: RunRewardRedemptionApiContext) {\n void getServer(context)\n}\n","/* eslint-disable @stylistic/max-len */\nexport const XL1LogoColorizedAscii = `\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;118;111;144m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;72;32;223m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m ╠╠\u001b[0m\u001b[38;2;103;85;170m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;79;121;152m╦\u001b[0m\u001b[38;2;82;121;151m╦\u001b[0m\u001b[38;2;112;125;136m_ \u001b[0m\u001b[38;2;88;59;196m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;73;34;221m▒ \u001b[0m\u001b[38;2;121;121;127m_\u001b[0m\u001b[38;2;100;101;128m╔\u001b[0m\u001b[38;2;93;94;127m╦\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;82;121;151m²\u001b[0m\u001b[38;2;44;116;170m╠\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;51;117;167mD\u001b[0m\u001b[38;2;80;121;152m╦\u001b[0m\u001b[38;2;111;125;136m_ \u001b[0m\u001b[38;2;67;23;232m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠ \u001b[0m\u001b[38;2;120;121;128m_\u001b[0m\u001b[38;2;100;101;127m╔\u001b[0m\u001b[38;2;79;81;127mR\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;88;90;127m╙\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;55;117;165m╚\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;44;116;171m▒▒\u001b[0m\u001b[38;2;50;116;167mD\u001b[0m\u001b[38;2;80;121;152m╦ \u001b[0m\u001b[38;2;106;90;165mj\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;89;61;194mH \u001b[0m\u001b[38;2;99;100;127m╔\u001b[0m\u001b[38;2;79;80;127mD\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒▒╠\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;83;121;150m²\u001b[0m\u001b[38;2;44;116;170m▒\u001b[0m\u001b[38;2;44;116;171m▒▒▒ \u001b[0m\u001b[38;2;76;38;217m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;74;76;128m╠\u001b[0m\u001b[38;2;71;73;128m▒▒▒\u001b[0m\u001b[38;2;89;90;128m╙\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;90;118;148m\\`\u001b[0m\u001b[38;2;89;107;153m_\u001b[0m\u001b[38;2;93;97;154m,\u001b[0m\u001b[38;2;105;89;166m╓\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;95;72;183m╓\u001b[0m\u001b[38;2;106;96;152m_\u001b[0m\u001b[38;2;100;94;143m\\`\u001b[0m\u001b[38;2;101;100;133m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;122;118;137m_\u001b[0m\u001b[38;2;113;102;153m,\u001b[0m\u001b[38;2;108;94;161m╓\u001b[0m\u001b[38;2;104;86;169m╓\u001b[0m\u001b[38;2;98;77;178m╔\u001b[0m\u001b[38;2;93;67;188m╗\u001b[0m\u001b[38;2;88;59;196mφ\u001b[0m\u001b[38;2;83;51;204m@\u001b[0m\u001b[38;2;78;42;213mD\u001b[0m\u001b[38;2;72;32;223m▒\u001b[0m\u001b[38;2;68;24;231m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;71;30;225m▒\u001b[0m\u001b[38;2;77;40;215m▒\u001b[0m\u001b[38;2;82;49;206mK\u001b[0m\u001b[38;2;87;57;198mφ\u001b[0m\u001b[38;2;91;65;190m╗\u001b[0m\u001b[38;2;97;75;180m╦\u001b[0m\u001b[38;2;103;84;171m╖\u001b[0m\u001b[38;2;107;92;163m²\u001b[0m\u001b[38;2;112;101;154m_\u001b[0m\u001b[38;2;119;112;143m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;106;91;164m\\`\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;89;62;193m╙\u001b[0m\u001b[38;2;85;54;201m╙\u001b[0m\u001b[38;2;80;45;210m╚\u001b[0m\u001b[38;2;74;35;220m╝\u001b[0m\u001b[38;2;69;26;229m╠\u001b[0m\u001b[38;2;66;22;233m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;73;33;222m╝\u001b[0m\u001b[38;2;79;43;212m╩\u001b[0m\u001b[38;2;84;52;203m╜\u001b[0m\u001b[38;2;88;60;195m╙\u001b[0m\u001b[38;2;93;68;187m^\u001b[0m\u001b[38;2;100;80;175m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;113;84;152m\\`\u001b[0m\u001b[38;2;103;79;169m'\u001b[0m\u001b[38;2;95;72;183m\"\u001b[0m\u001b[38;2;87;57;198m╙\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;80;46;209m╜\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;102;77;175m^\u001b[0m\u001b[38;2;112;81;162m\\`\u001b[0m\u001b[38;2;115;92;155m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;145;116;107m,\u001b[0m\u001b[38;2;199;82;45m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒╠ \u001b[0m\u001b[38;2;70;28;227m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;189;49;97må\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;155;92;114m,\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;175;98;73m╔\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒▒▒\u001b[0m\u001b[38;2;197;83;47m╩ \u001b[0m\u001b[38;2;98;76;179m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;81;48;207mH \u001b[0m\u001b[38;2;188;51;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠╠\u001b[0m\u001b[38;2;183;57;100mH\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;146;116;106m,\u001b[0m\u001b[38;2;199;82;44m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;196;84;48m╩\u001b[0m\u001b[38;2;168;102;81m^ \u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠ \u001b[0m\u001b[38;2;160;87;111m'\u001b[0m\u001b[38;2;187;52;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;156;91;113m,\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;198;83;46m╩\u001b[0m\u001b[38;2;194;85;50m╩\u001b[0m\u001b[38;2;167;102;82m^ \u001b[0m\u001b[38;2;81;46;209m╚\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠ \u001b[0m\u001b[38;2;159;88;112m'\u001b[0m\u001b[38;2;186;53;98m╚\u001b[0m\u001b[38;2;197;40;93m╩\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;110;97;158m'\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;94;69;186mH\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;68;25;230m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;108;93;162m²\u001b[0m\u001b[38;2;99;79;176m^\u001b[0m`\n","import type { Logger, LogLevelValue } from '@xylabs/sdk-js'\nimport {\n Base,\n ConsoleLogger, isDefined,\n LogLevel, SilentLogger,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: Config): Logger => {\n let logger: Logger\n if (config.log.silent) {\n logger = new SilentLogger()\n } else {\n let level: LogLevelValue | undefined\n if (isDefined(config.log.logLevel)) {\n const parsed = LogLevel[config.log.logLevel.toLowerCase() as keyof typeof LogLevel]\n if (isDefined(parsed)) level = parsed\n }\n logger = new ConsoleLogger(level)\n }\n Base.defaultLogger = logger\n return logger\n}\n","import {\n asAddress, assertEx, isString, type Logger,\n} from '@xylabs/sdk-js'\nimport {\n initApiWallet,\n initBalanceSummaryMap,\n initEvmProvidersIfAvailable, initFinalizationArchivistIfNeeded, initProducerAccount, initServerNode, initStatusReporter,\n initTransferSummaryMap,\n} from '@xyo-network/chain-orchestration'\nimport { SimpleBlockRunner } from '@xyo-network/chain-services'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { validateHydratedBlock, validateHydratedBlockState } from '@xyo-network/chain-validation'\nimport type {\n Config, CreatableProviderContext, ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n ProviderFactoryLocator, SimpleAccountBalanceViewer, SimpleBlockRewardViewer, SimpleBlockValidationViewer,\n SimpleBlockViewer,\n SimpleFinalizationViewer,\n SimpleMempoolRunner,\n SimpleMempoolViewer,\n SimpleNetworkStakeViewer,\n SimpleStepRewardsByPositionViewer,\n SimpleStepRewardsByStakerViewer,\n SimpleStepRewardsByStepViewer,\n SimpleStepRewardsTotalViewer,\n SimpleStepRewardsViewer,\n SimpleStepViewer,\n SimpleTimeSyncViewer,\n SimpleWindowedBlockViewer,\n SimpleXyoViewer,\n} from '@xyo-network/xl1-sdk'\n\nexport async function telemetryContextFromConfig(config: Config, serviceName: string, serviceVersion: string) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9466 } = config.telemetry?.metrics?.scrape ?? {}\n return await initTelemetry({\n attributes: {\n serviceName,\n serviceVersion,\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n}\n\nexport async function contextFromConfigWithoutLocator(\n config: Config,\n logger: Logger,\n serviceName: string,\n serviceVersion: string,\n): Promise<Omit<CreatableProviderContext, 'locator'>> {\n const singletons = {}\n const caches = {}\n const telemetryConfig = await telemetryContextFromConfig(config, serviceName, serviceVersion)\n const statusReporter = initStatusReporter({ logger })\n return {\n ...telemetryConfig,\n config,\n singletons,\n caches,\n logger,\n statusReporter,\n }\n}\n\nexport async function rootLocatorFromConfig(\n config: Config,\n context: Omit<CreatableProviderContext, 'locator'>,\n): Promise<ProviderFactoryLocatorInstance> {\n let locator: ProviderFactoryLocatorInstance = new ProviderFactoryLocator(context)\n\n locator.registerMany([\n SimpleNetworkStakeViewer.factory<SimpleNetworkStakeViewer>(SimpleNetworkStakeViewer.dependencies, {}),\n SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(SimpleTimeSyncViewer.dependencies, {}),\n SimpleStepViewer.factory<SimpleStepViewer>(SimpleStepViewer.dependencies, {}),\n SimpleStepRewardsViewer.factory<SimpleStepRewardsViewer>(SimpleStepRewardsViewer.dependencies, {}),\n SimpleStepRewardsByPositionViewer.factory<SimpleStepRewardsByPositionViewer>(SimpleStepRewardsByPositionViewer.dependencies, {}),\n SimpleStepRewardsByStakerViewer.factory<SimpleStepRewardsByStakerViewer>(SimpleStepRewardsByStakerViewer.dependencies, {}),\n SimpleStepRewardsByStepViewer.factory<SimpleStepRewardsByStepViewer>(SimpleStepRewardsByStepViewer.dependencies, {}),\n SimpleStepRewardsTotalViewer.factory<SimpleStepRewardsTotalViewer>(SimpleStepRewardsTotalViewer.dependencies, {}),\n SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(\n SimpleBlockValidationViewer.dependencies,\n { state: validateHydratedBlockState, protocol: validateHydratedBlock },\n ),\n ])\n locator = await initEvmProvidersIfAvailable(locator)\n locator = await (isString(config.remote.rpc?.url)\n ? remoteLocatorFromConfig(config, { ...context, locator })\n : localLocatorFromConfig(config, { ...context, locator }))\n locator.freeze()\n return locator\n}\n\nexport async function localLocatorFromConfig(\n config: Config,\n context: CreatableProviderContext,\n): Promise<ProviderFactoryLocatorInstance> {\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')\n\n // TODO: this should not be an api wallet, but a server wallet\n const wallet = await initApiWallet(context)\n\n const {\n writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n } = await initServerNode({\n ...context,\n wallet,\n transfersSummaryMap,\n balancesSummaryMap,\n })\n\n await initFinalizationArchivistIfNeeded(writableChainArchivist, config, wallet)\n\n const locator = new ProviderFactoryLocator(context)\n locator.registerMany([\n SimpleMempoolViewer.factory<SimpleMempoolViewer>(SimpleMempoolViewer.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),\n SimpleMempoolRunner.factory<SimpleMempoolRunner>(SimpleMempoolRunner.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),\n SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(SimpleAccountBalanceViewer.dependencies, { balancesSummaryMap, transfersSummaryMap }),\n SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),\n SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),\n SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(SimpleWindowedBlockViewer.dependencies, { maxWindowSize: 10_000, syncInterval: 10_000 }),\n SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n\nexport async function remoteLocatorFromConfig(\n config: Config,\n context: CreatableProviderContext,\n): Promise<ProviderFactoryLocatorInstance> {\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')\n\n // TODO: this should not be an api wallet, but a server wallet\n const wallet = await initApiWallet(context)\n\n const {\n readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n } = await initServerNode({\n ...context,\n wallet,\n transfersSummaryMap,\n balancesSummaryMap,\n })\n\n const locator = new ProviderFactoryLocator(context)\n locator.registerMany([\n SimpleMempoolViewer.factory<SimpleMempoolViewer>(SimpleMempoolViewer.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),\n SimpleMempoolRunner.factory<SimpleMempoolRunner>(SimpleMempoolRunner.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),\n SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(SimpleAccountBalanceViewer.dependencies, { balancesSummaryMap, transfersSummaryMap }),\n SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),\n SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),\n SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(SimpleWindowedBlockViewer.dependencies, { maxWindowSize: 10_000, syncInterval: 10_000 }),\n SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n\nexport async function producerLocatorFromConfig(\n config: Config,\n context: CreatableProviderContext,\n): Promise<ProviderFactoryLocatorInstance> {\n const { logger } = context\n const account = await initProducerAccount({ config })\n const locator = new ProviderFactoryLocator(context)\n const rewardAddress = asAddress(config.actors.producer.rewardAddress ?? account.address, true)\n logger?.info(`Using reward address ${rewardAddress}`)\n if (rewardAddress === account.address) {\n logger?.warn(`Using producer account address as reward address: ${account.address}`)\n }\n\n locator.registerMany([\n SimpleBlockRewardViewer.factory<SimpleBlockRewardViewer>(SimpleBlockRewardViewer.dependencies, {}),\n SimpleBlockRunner.factory<SimpleBlockRunner>(\n SimpleBlockRunner.dependencies,\n { account, rewardAddress },\n )])\n locator.freeze()\n return locator\n}\n\nexport async function locatorsFromConfig(\n actors: string[],\n config: Config,\n context: Omit<CreatableProviderContext, 'locator'>,\n): Promise<Record<string, ProviderFactoryLocatorInstance>> {\n const result: Record<string, ProviderFactoryLocatorInstance> = { _root: await rootLocatorFromConfig(config, context) }\n const producer = actors.includes('producer') ? await producerLocatorFromConfig(config, result._root.context) : undefined\n if (producer) {\n result.producer = producer\n }\n return result\n}\n","import type { UsageMeta } from '@xyo-network/xl1-sdk'\nimport { isUsageMeta } from '@xyo-network/xl1-sdk'\nimport type { Options } from 'yargs'\nimport { globalRegistry } from 'zod'\n\nconst usageMetaToOptions = (meta: UsageMeta): Options => {\n return meta\n}\n\nexport const optionsFromGlobalZodRegistry = (): Record<string, Options> => {\n const opts: Record<string, Options> = {}\n for (const schema of Object.values(globalRegistry._map)) {\n if (isUsageMeta(schema)) {\n if (schema.hidden) continue // skip hidden options\n opts[schema.title] = usageMetaToOptions(schema)\n }\n }\n return opts\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport { ConfigZod } from '@xyo-network/xl1-sdk'\nimport { cosmiconfigSync } from 'cosmiconfig'\n\n/**\n * The name of the configuration file to search for.\n */\nconst configName = 'xyo'\n\n/**\n * The name of the section within the configuration file to parse.\n */\nconst configSection = 'xl1' // Default section in the config file\n\n/**\n * Attempts to parse the configuration from a file using cosmiconfig.\n * @returns The parsed configuration object if found and valid, otherwise undefined.\n */\nexport const tryParseConfig = () => {\n const explorer = cosmiconfigSync(\n configName,\n /* {\n searchPlaces: [\n 'package.json', // Looks under `xyo` key in package.json\n '.xyorc.json', // Supports common dotfile format\n 'xyo.config.json', // Supports custom-named config file\n ],\n loaders: {\n '.json': defaultLoaders['.json'],\n 'noExt': defaultLoaders['.json'],\n },\n }, */\n )\n const result = explorer.search()\n if (!isNull(result)) {\n const section = result?.config?.[configSection]\n if (isDefined(section) && typeof section === 'object') {\n return ConfigZod.parse(section)\n }\n }\n return ConfigZod.parse({})\n}\n","import net from 'node:net'\n\nexport const waitForHostPort = (host: string, port: number): Promise<void> => {\n return new Promise((resolve) => {\n const tryConnect = () => {\n const socket = new net.Socket()\n\n socket\n .setTimeout(1000)\n .once('error', () => {\n socket.destroy()\n setTimeout(tryConnect, 500) // retry after 500ms\n })\n .once('timeout', () => {\n socket.destroy()\n setTimeout(tryConnect, 500)\n })\n .connect(port, host, () => {\n socket.end()\n resolve()\n })\n }\n\n tryConnect()\n })\n}\n","import { start } from './start.ts'\n\nstart().catch((err) => {\n // If we're in development mode, log the stack trace to the console\n if (process.env.NODE_ENV === 'development') console.error('An error occurred during startup:', err)\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n})\n"],"mappings":"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","names":["config","deepMerge","isDefined","toAddress","runApi","Orchestrator","runProducer","ConfigZod","isZodError","yargs","hideBin","getServer","runBridge","context","getServer","getServer","runMempool","context","getServer","getServer","runRewardRedemptionApi","context","getServer","XL1LogoColorizedAscii","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","asAddress","assertEx","isString","initApiWallet","initBalanceSummaryMap","initEvmProvidersIfAvailable","initFinalizationArchivistIfNeeded","initProducerAccount","initServerNode","initStatusReporter","initTransferSummaryMap","SimpleBlockRunner","initTelemetry","validateHydratedBlock","validateHydratedBlockState","ProviderFactoryLocator","SimpleAccountBalanceViewer","SimpleBlockRewardViewer","SimpleBlockValidationViewer","SimpleBlockViewer","SimpleFinalizationViewer","SimpleMempoolRunner","SimpleMempoolViewer","SimpleNetworkStakeViewer","SimpleStepRewardsByPositionViewer","SimpleStepRewardsByStakerViewer","SimpleStepRewardsByStepViewer","SimpleStepRewardsTotalViewer","SimpleStepRewardsViewer","SimpleStepViewer","SimpleTimeSyncViewer","SimpleWindowedBlockViewer","SimpleXyoViewer","telemetryContextFromConfig","config","serviceName","serviceVersion","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","initTelemetry","attributes","metricsConfig","contextFromConfigWithoutLocator","logger","singletons","caches","telemetryConfig","statusReporter","initStatusReporter","rootLocatorFromConfig","context","locator","ProviderFactoryLocator","registerMany","SimpleNetworkStakeViewer","factory","dependencies","SimpleTimeSyncViewer","SimpleStepViewer","SimpleStepRewardsViewer","SimpleStepRewardsByPositionViewer","SimpleStepRewardsByStakerViewer","SimpleStepRewardsByStepViewer","SimpleStepRewardsTotalViewer","SimpleBlockValidationViewer","state","validateHydratedBlockState","protocol","validateHydratedBlock","initEvmProvidersIfAvailable","isString","remote","rpc","url","remoteLocatorFromConfig","localLocatorFromConfig","freeze","balancesSummaryMap","assertEx","initBalanceSummaryMap","transfersSummaryMap","initTransferSummaryMap","wallet","initApiWallet","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","initServerNode","initFinalizationArchivistIfNeeded","SimpleMempoolViewer","SimpleMempoolRunner","SimpleAccountBalanceViewer","SimpleFinalizationViewer","finalizedArchivist","SimpleBlockViewer","SimpleWindowedBlockViewer","maxWindowSize","syncInterval","SimpleXyoViewer","producerLocatorFromConfig","account","initProducerAccount","rewardAddress","asAddress","actors","producer","address","info","warn","SimpleBlockRewardViewer","SimpleBlockRunner","locatorsFromConfig","result","_root","includes","undefined","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","isDefined","isNull","ConfigZod","cosmiconfigSync","configName","configSection","tryParseConfig","explorer","cosmiconfigSync","result","search","isNull","section","config","isDefined","ConfigZod","parse","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","resolveConfig","config","logger","console","defaultChainId","toAddress","resolved","structuredClone","chain","id","warn","getContextFromConfig","initLogger","orchestrator","Orchestrator","create","process","on","log","stop","exit","err","error","getLocatorsFromConfig","actors","context","contextFromConfigWithoutLocator","locators","locatorsFromConfig","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","parsedConfigFile","tryParseConfig","parsedConfigArgs","parseResult","ConfigZod","safeParse","success","mergedConfig","deepMerge","validatedMergedConfigResult","resolvedConfig","data","validatedConfigResult","rootConfig","actorNames","Object","keys","actorName","JSON","stringify","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","runApi","singletons","runBridge","runMempool","runProducer","runRewardRedemptionApi","mempool","enabled","push","waitForHostPort","host","port","api","type","description","default","help","alias","start","config","quiet","runCLI","start","catch","err","process","env","NODE_ENV","console","error","exit"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/xl1-cli-lib",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.8",
|
|
4
4
|
"description": "XYO Layer One CLI Library",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -43,33 +43,35 @@
|
|
|
43
43
|
"start": "node ./dist/node/xl1.mjs"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@xylabs/sdk-js": "~5.0.
|
|
47
|
-
"@xyo-network/chain-api": "~1.19.
|
|
48
|
-
"@xyo-network/chain-bridge": "~1.19.
|
|
49
|
-
"@xyo-network/chain-mempool": "~1.19.
|
|
50
|
-
"@xyo-network/chain-orchestration": "~1.19.
|
|
51
|
-
"@xyo-network/chain-producer": "~1.19.
|
|
52
|
-
"@xyo-network/chain-reward-redemption": "~1.19.
|
|
53
|
-
"@xyo-network/
|
|
46
|
+
"@xylabs/sdk-js": "~5.0.78",
|
|
47
|
+
"@xyo-network/chain-api": "~1.19.8",
|
|
48
|
+
"@xyo-network/chain-bridge": "~1.19.8",
|
|
49
|
+
"@xyo-network/chain-mempool": "~1.19.8",
|
|
50
|
+
"@xyo-network/chain-orchestration": "~1.19.8",
|
|
51
|
+
"@xyo-network/chain-producer": "~1.19.8",
|
|
52
|
+
"@xyo-network/chain-reward-redemption": "~1.19.8",
|
|
53
|
+
"@xyo-network/chain-services": "~1.19.8",
|
|
54
|
+
"@xyo-network/chain-telemetry": "~1.19.8",
|
|
55
|
+
"@xyo-network/chain-validation": "~1.19.8",
|
|
56
|
+
"@xyo-network/xl1-sdk": "~1.23.6",
|
|
54
57
|
"cosmiconfig": "~9.0.0",
|
|
55
58
|
"dotenv": "~17.2.4",
|
|
56
|
-
"ts-deepmerge": "^7.0.3",
|
|
57
59
|
"yargs": "~18.0.0"
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|
|
60
62
|
"@xylabs/ts-scripts-yarn3": "~7.3.2",
|
|
61
63
|
"@xylabs/tsconfig": "~7.3.2",
|
|
62
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
64
|
+
"@xylabs/vitest-extended": "~5.0.78",
|
|
63
65
|
"@xyo-network/account-model": "~5.3.2",
|
|
64
66
|
"@xyo-network/archivist-lmdb": "~5.3.2",
|
|
65
67
|
"@xyo-network/archivist-mongodb": "~5.3.2",
|
|
66
|
-
"@xyo-network/chain-ethereum": "~1.19.
|
|
67
|
-
"@xyo-network/chain-services": "~1.19.
|
|
68
|
-
"@xyo-network/chain-test": "~1.19.
|
|
68
|
+
"@xyo-network/chain-ethereum": "~1.19.8",
|
|
69
|
+
"@xyo-network/chain-services": "~1.19.8",
|
|
70
|
+
"@xyo-network/chain-test": "~1.19.8",
|
|
69
71
|
"@xyo-network/typechain": "~4.1.1",
|
|
70
72
|
"@xyo-network/wallet": "~5.3.2",
|
|
71
73
|
"@xyo-network/wallet-model": "~5.3.2",
|
|
72
|
-
"@xyo-network/xl1-sdk": "~1.
|
|
74
|
+
"@xyo-network/xl1-sdk": "~1.23.6",
|
|
73
75
|
"eslint": "^9.39.2",
|
|
74
76
|
"ethers": "^6.16.0",
|
|
75
77
|
"lmdb": "~3.5.1",
|
package/src/initLogger.ts
CHANGED
|
@@ -8,12 +8,12 @@ import type { Config } from '@xyo-network/xl1-sdk'
|
|
|
8
8
|
|
|
9
9
|
export const initLogger = (config: Config): Logger => {
|
|
10
10
|
let logger: Logger
|
|
11
|
-
if (config.silent) {
|
|
11
|
+
if (config.log.silent) {
|
|
12
12
|
logger = new SilentLogger()
|
|
13
13
|
} else {
|
|
14
14
|
let level: LogLevelValue | undefined
|
|
15
|
-
if (isDefined(config.logLevel)) {
|
|
16
|
-
const parsed = LogLevel[config.logLevel.toLowerCase() as keyof typeof LogLevel]
|
|
15
|
+
if (isDefined(config.log.logLevel)) {
|
|
16
|
+
const parsed = LogLevel[config.log.logLevel.toLowerCase() as keyof typeof LogLevel]
|
|
17
17
|
if (isDefined(parsed)) level = parsed
|
|
18
18
|
}
|
|
19
19
|
logger = new ConsoleLogger(level)
|