@xyo-network/xl1-cli-lib 1.20.2 → 1.20.3
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/commands/validator/runValidator.d.ts +4 -4
- package/dist/node/commands/validator/runValidator.d.ts.map +1 -1
- package/dist/node/index.mjs +12 -4
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/runCLI.d.ts.map +1 -1
- package/dist/node/xl1.mjs +12 -4
- package/dist/node/xl1.mjs.map +1 -1
- package/package.json +11 -11
- package/src/commands/validator/runValidator.ts +4 -4
- package/src/runCLI.ts +9 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { OrchestratorInstance } from '@xyo-network/chain-orchestration';
|
|
1
|
+
import type { OrchestratorInstance, ValidatorConfig } from '@xyo-network/chain-orchestration';
|
|
2
2
|
import { ValidatorActor } from '@xyo-network/chain-orchestration';
|
|
3
|
-
import type {
|
|
4
|
-
export declare const getValidatorActor: (config:
|
|
5
|
-
export declare const runValidator: (config:
|
|
3
|
+
import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
|
|
4
|
+
export declare const getValidatorActor: (config: ValidatorConfig, locator: ProviderFactoryLocatorInstance) => Promise<ValidatorActor>;
|
|
5
|
+
export declare const runValidator: (config: ValidatorConfig, orchestrator: OrchestratorInstance, locator: ProviderFactoryLocatorInstance) => Promise<void>;
|
|
6
6
|
//# sourceMappingURL=runValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runValidator.d.ts","sourceRoot":"","sources":["../../../../src/commands/validator/runValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"runValidator.d.ts","sourceRoot":"","sources":["../../../../src/commands/validator/runValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EAAmB,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAClF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAA;AAE1E,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,eAAe,EACvB,SAAS,8BAA8B,4BASxC,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,QAAQ,eAAe,EACvB,cAAc,oBAAoB,EAClC,SAAS,8BAA8B,kBAWxC,CAAA"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -23,7 +23,7 @@ var initLogger = /* @__PURE__ */ __name((config2) => {
|
|
|
23
23
|
import { createDeepMerge, isDefined as isDefined2 } from "@xylabs/sdk-js";
|
|
24
24
|
import { getApiActor, runApi } from "@xyo-network/chain-api";
|
|
25
25
|
import { getMempoolActor, runMempool } from "@xyo-network/chain-mempool";
|
|
26
|
-
import { ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod, RewardRedemptionConfigZod, tryParseConfig } from "@xyo-network/chain-orchestration";
|
|
26
|
+
import { ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod, RewardRedemptionConfigZod, tryParseConfig, ValidatorConfigZod } from "@xyo-network/chain-orchestration";
|
|
27
27
|
import { runProducer } from "@xyo-network/chain-producer";
|
|
28
28
|
import { ActorConfigZod, ConfigZod, isZodError, resolveConfig } from "@xyo-network/xl1-sdk";
|
|
29
29
|
import yargs from "yargs";
|
|
@@ -164,7 +164,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
164
164
|
|
|
165
165
|
// src/runCLI.ts
|
|
166
166
|
var configuration;
|
|
167
|
-
var version = isDefined2("1.20.
|
|
167
|
+
var version = isDefined2("1.20.3") ? "1.20.3" : "unknown";
|
|
168
168
|
var deepMerge = createDeepMerge({
|
|
169
169
|
arrayStrategy: "concat"
|
|
170
170
|
});
|
|
@@ -218,7 +218,10 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
218
218
|
"populate--": true
|
|
219
219
|
}).env("XL1").scriptName("xl1").middleware(async (argv2) => {
|
|
220
220
|
try {
|
|
221
|
-
const
|
|
221
|
+
const configPath = argv2.config;
|
|
222
|
+
const parsedConfigFile = await tryParseConfig({
|
|
223
|
+
configPath
|
|
224
|
+
});
|
|
222
225
|
const parsedConfigArgs = ConfigZod.safeParse(argv2).data ?? {};
|
|
223
226
|
const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs));
|
|
224
227
|
if (!parseResult.success) {
|
|
@@ -259,7 +262,7 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
259
262
|
const actors = await Promise.all([
|
|
260
263
|
getApiActor(ApiConfigZod.parse(locators["api"].context.config), locators["api"]),
|
|
261
264
|
getMempoolActor(MempoolConfigZod.parse(locators["mempool"].context.config), locators["mempool"]),
|
|
262
|
-
getValidatorActor(
|
|
265
|
+
getValidatorActor(ValidatorConfigZod.parse(locators["validator"].context.config), locators["validator"])
|
|
263
266
|
]);
|
|
264
267
|
for (const actor of actors) {
|
|
265
268
|
await orchestrator.registerActor(actor);
|
|
@@ -323,6 +326,11 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
323
326
|
const producerConfig = ProducerConfigZod.parse(locators["producer"].context.config);
|
|
324
327
|
await runProducer(producerConfig, orchestrator, locators["producer"]);
|
|
325
328
|
}).options({
|
|
329
|
+
"config": {
|
|
330
|
+
type: "string",
|
|
331
|
+
description: "Path to a config file to use instead of the default search.",
|
|
332
|
+
alias: "c"
|
|
333
|
+
},
|
|
326
334
|
"dump-config": {
|
|
327
335
|
type: "boolean",
|
|
328
336
|
description: "Just process the configuration and print the resolved config to stdout, then exit.",
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/initLogger.ts","../../src/runCLI.ts","../../src/commands/bridge/runBridge.ts","../../src/commands/rewardRedemption/runRewardRedemptionApi.ts","../../src/commands/validator/runValidator.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/waitForHostPort.ts","../../src/start.ts"],"sourcesContent":["import type { Logger, LogLevelValue } from '@xylabs/sdk-js'\nimport {\n Base,\n ConsoleLogger, isDefined,\n LogLevel, SilentLogger,\n} from '@xylabs/sdk-js'\nimport type { BaseConfig } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: BaseConfig): 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 { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport { getApiActor, runApi } from '@xyo-network/chain-api'\nimport { getMempoolActor, runMempool } from '@xyo-network/chain-mempool'\nimport {\n ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod,\n RewardRedemptionConfigZod, tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, isZodError,\n resolveConfig,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n getValidatorActor, runBridge, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\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\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\n\nconst getLocatorsFromConfig = async (actors: string[], configuration: Config) => {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const rawConfig = configuration.actors.find(actor => actor.name === actorName) ?? { name: actorName }\n const actorConfig = ActorConfigZod.loose().parse(rawConfig)\n actorConfigs.push(actorConfig)\n }\n const config = ConfigZod.parse(deepMerge(configuration, { actors: actorConfigs }))\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n const locators = await locatorsFromConfig(context, config)\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(async (argv) => {\n try {\n // Parse the various config sources\n const parsedConfigFile = await tryParseConfig() // Config file\n const parsedConfigArgs = ConfigZod.safeParse(argv).data ?? {} // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs))\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 = parseResult.data\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 // 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 { locators, orchestrator } = await getLocatorsFromConfig(['api', 'mempool', 'validator'], configuration)\n const actors = await Promise.all([getApiActor(\n ApiConfigZod.parse(locators['api'].context.config),\n locators['api'],\n ), getMempoolActor(\n MempoolConfigZod.parse(locators['mempool'].context.config),\n locators['mempool'],\n ), getValidatorActor(\n ActorConfigZod.parse(locators['validator'].context.config),\n locators['validator'],\n )])\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n await orchestrator.start()\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 { locators, orchestrator } = await getLocatorsFromConfig(['bridge'], configuration)\n await runBridge(BridgeConfigZod.parse(locators['bridge'].context.config), orchestrator, locators['bridge'])\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 { locators, orchestrator } = await getLocatorsFromConfig(['mempool'], configuration)\n await runMempool(MempoolConfigZod.parse(locators['mempool'].context.config), orchestrator, locators['mempool'])\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(ProducerConfigZod.parse(locators['producer'].context.config), 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 { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const actors = ['producer', 'api']\n const mempoolEnabled = configuration.actors.find(actor => actor.name === 'mempool')?.enabled\n if (mempoolEnabled) {\n actors.push('mempool')\n }\n const { locators, orchestrator } = await getLocatorsFromConfig(['api', 'producer'], configuration)\n if (mempoolEnabled) {\n const mempoolConfig = MempoolConfigZod.parse(locators['mempool'].context.config)\n // Start Mempool but do not block\n await runMempool(mempoolConfig, orchestrator, locators['mempool'])\n // Wait for Mempool to be ready\n await waitForHostPort(mempoolConfig.host, mempoolConfig.port)\n }\n // Start API but do not block\n const apiConfig = ApiConfigZod.parse(locators['api'].context.config)\n await runApi(apiConfig, orchestrator, locators['api'])\n // Wait for API to be ready\n await waitForHostPort(apiConfig.host, apiConfig.port)\n // Start Producer and block on it\n const producerConfig = ProducerConfigZod.parse(locators['producer'].context.config)\n await runProducer(producerConfig, 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 { exists } from '@xylabs/sdk-js'\nimport { BridgeActor } from '@xyo-network/chain-bridge'\nimport type { BridgeConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getBridgeActor = async (\n config: BridgeConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await BridgeActor.create({\n account, config, locator,\n })\n}\n\nexport const runBridge = async (\n config: BridgeConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const bridge = await getBridgeActor(config, locator)\n const actors = [bridge].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type { OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type { ActorConfig, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getValidatorActor = async (\n config: ActorConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await ValidatorActor.create({\n account, config, locator,\n })\n}\n\nexport const runValidator = async (\n config: ActorConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const validator = await getValidatorActor(config, locator)\n const actors = [validator].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\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 { 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 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 { config } from 'dotenv'\n\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n config({ quiet: true })\n await runCLI()\n}\n"],"mappings":"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","names":["Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","createDeepMerge","isDefined","getApiActor","runApi","getMempoolActor","runMempool","ApiConfigZod","BridgeConfigZod","contextFromConfigWithoutLocator","locatorsFromConfig","MempoolConfigZod","Orchestrator","ProducerConfigZod","RewardRedemptionConfigZod","tryParseConfig","runProducer","ActorConfigZod","ConfigZod","isZodError","resolveConfig","yargs","hideBin","exists","BridgeActor","initActorWallet","getBridgeActor","config","locator","account","initActorWallet","logger","context","singletons","caches","BridgeActor","create","runBridge","orchestrator","bridge","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","RewardRedemptionActor","getRewardRedemptionActor","config","locator","account","initActorWallet","logger","context","singletons","caches","RewardRedemptionActor","create","runRewardRedemptionApi","orchestrator","rewardRedemption","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","ValidatorActor","getValidatorActor","config","locator","account","initActorWallet","logger","context","singletons","caches","ValidatorActor","create","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","deepMerge","createDeepMerge","arrayStrategy","getLocatorsFromConfig","actors","actorConfigs","actorName","rawConfig","find","actor","name","actorConfig","ActorConfigZod","loose","parse","push","config","ConfigZod","logger","initLogger","orchestrator","Orchestrator","create","context","contextFromConfigWithoutLocator","locators","locatorsFromConfig","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","parsedConfigFile","tryParseConfig","parsedConfigArgs","safeParse","data","parseResult","success","mergedConfig","validatedMergedConfigResult","resolvedConfig","resolveConfig","validatedConfigResult","console","JSON","stringify","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","Promise","all","getApiActor","ApiConfigZod","getMempoolActor","MempoolConfigZod","getValidatorActor","registerActor","start","runBridge","BridgeConfigZod","runMempool","runProducer","ProducerConfigZod","runRewardRedemptionApi","RewardRedemptionConfigZod","mempoolEnabled","enabled","mempoolConfig","waitForHostPort","host","port","apiConfig","runApi","producerConfig","type","description","default","help","alias","config","start","config","quiet","runCLI"]}
|
|
1
|
+
{"version":3,"sources":["../../src/initLogger.ts","../../src/runCLI.ts","../../src/commands/bridge/runBridge.ts","../../src/commands/rewardRedemption/runRewardRedemptionApi.ts","../../src/commands/validator/runValidator.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/waitForHostPort.ts","../../src/start.ts"],"sourcesContent":["import type { Logger, LogLevelValue } from '@xylabs/sdk-js'\nimport {\n Base,\n ConsoleLogger, isDefined,\n LogLevel, SilentLogger,\n} from '@xylabs/sdk-js'\nimport type { BaseConfig } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: BaseConfig): 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 { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport { getApiActor, runApi } from '@xyo-network/chain-api'\nimport { getMempoolActor, runMempool } from '@xyo-network/chain-mempool'\nimport {\n ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod,\n RewardRedemptionConfigZod, tryParseConfig,\n ValidatorConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, isZodError,\n resolveConfig,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n getValidatorActor, runBridge, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\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\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\n\nconst getLocatorsFromConfig = async (actors: string[], configuration: Config) => {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const rawConfig = configuration.actors.find(actor => actor.name === actorName) ?? { name: actorName }\n const actorConfig = ActorConfigZod.loose().parse(rawConfig)\n actorConfigs.push(actorConfig)\n }\n const config = ConfigZod.parse(deepMerge(configuration, { actors: actorConfigs }))\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n const locators = await locatorsFromConfig(context, config)\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(async (argv) => {\n try {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) // Config file\n const parsedConfigArgs = ConfigZod.safeParse(argv).data ?? {} // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs))\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 = parseResult.data\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 // 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 { locators, orchestrator } = await getLocatorsFromConfig(['api', 'mempool', 'validator'], configuration)\n const actors = await Promise.all([getApiActor(\n ApiConfigZod.parse(locators['api'].context.config),\n locators['api'],\n ), getMempoolActor(\n MempoolConfigZod.parse(locators['mempool'].context.config),\n locators['mempool'],\n ), getValidatorActor(\n ValidatorConfigZod.parse(locators['validator'].context.config),\n locators['validator'],\n )])\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n await orchestrator.start()\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 { locators, orchestrator } = await getLocatorsFromConfig(['bridge'], configuration)\n await runBridge(BridgeConfigZod.parse(locators['bridge'].context.config), orchestrator, locators['bridge'])\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 { locators, orchestrator } = await getLocatorsFromConfig(['mempool'], configuration)\n await runMempool(MempoolConfigZod.parse(locators['mempool'].context.config), orchestrator, locators['mempool'])\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(ProducerConfigZod.parse(locators['producer'].context.config), 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 { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const actors = ['producer', 'api']\n const mempoolEnabled = configuration.actors.find(actor => actor.name === 'mempool')?.enabled\n if (mempoolEnabled) {\n actors.push('mempool')\n }\n const { locators, orchestrator } = await getLocatorsFromConfig(['api', 'producer'], configuration)\n if (mempoolEnabled) {\n const mempoolConfig = MempoolConfigZod.parse(locators['mempool'].context.config)\n // Start Mempool but do not block\n await runMempool(mempoolConfig, orchestrator, locators['mempool'])\n // Wait for Mempool to be ready\n await waitForHostPort(mempoolConfig.host, mempoolConfig.port)\n }\n // Start API but do not block\n const apiConfig = ApiConfigZod.parse(locators['api'].context.config)\n await runApi(apiConfig, orchestrator, locators['api'])\n // Wait for API to be ready\n await waitForHostPort(apiConfig.host, apiConfig.port)\n // Start Producer and block on it\n const producerConfig = ProducerConfigZod.parse(locators['producer'].context.config)\n await runProducer(producerConfig, orchestrator, locators['producer'])\n })\n .options({\n 'config': {\n type: 'string',\n description: 'Path to a config file to use instead of the default search.',\n alias: 'c',\n },\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 { exists } from '@xylabs/sdk-js'\nimport { BridgeActor } from '@xyo-network/chain-bridge'\nimport type { BridgeConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getBridgeActor = async (\n config: BridgeConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await BridgeActor.create({\n account, config, locator,\n })\n}\n\nexport const runBridge = async (\n config: BridgeConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const bridge = await getBridgeActor(config, locator)\n const actors = [bridge].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type { OrchestratorInstance, ValidatorConfig } from '@xyo-network/chain-orchestration'\nimport { initActorWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getValidatorActor = async (\n config: ValidatorConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await ValidatorActor.create({\n account, config, locator,\n })\n}\n\nexport const runValidator = async (\n config: ValidatorConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const validator = await getValidatorActor(config, locator)\n const actors = [validator].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\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 { 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 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 { config } from 'dotenv'\n\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n config({ quiet: true })\n await runCLI()\n}\n"],"mappings":"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","names":["Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","createDeepMerge","isDefined","getApiActor","runApi","getMempoolActor","runMempool","ApiConfigZod","BridgeConfigZod","contextFromConfigWithoutLocator","locatorsFromConfig","MempoolConfigZod","Orchestrator","ProducerConfigZod","RewardRedemptionConfigZod","tryParseConfig","ValidatorConfigZod","runProducer","ActorConfigZod","ConfigZod","isZodError","resolveConfig","yargs","hideBin","exists","BridgeActor","initActorWallet","getBridgeActor","config","locator","account","initActorWallet","logger","context","singletons","caches","BridgeActor","create","runBridge","orchestrator","bridge","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","RewardRedemptionActor","getRewardRedemptionActor","config","locator","account","initActorWallet","logger","context","singletons","caches","RewardRedemptionActor","create","runRewardRedemptionApi","orchestrator","rewardRedemption","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","ValidatorActor","getValidatorActor","config","locator","account","initActorWallet","logger","context","singletons","caches","ValidatorActor","create","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","deepMerge","createDeepMerge","arrayStrategy","getLocatorsFromConfig","actors","actorConfigs","actorName","rawConfig","find","actor","name","actorConfig","ActorConfigZod","loose","parse","push","config","ConfigZod","logger","initLogger","orchestrator","Orchestrator","create","context","contextFromConfigWithoutLocator","locators","locatorsFromConfig","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configPath","parsedConfigFile","tryParseConfig","parsedConfigArgs","safeParse","data","parseResult","success","mergedConfig","validatedMergedConfigResult","resolvedConfig","resolveConfig","validatedConfigResult","console","JSON","stringify","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","Promise","all","getApiActor","ApiConfigZod","getMempoolActor","MempoolConfigZod","getValidatorActor","ValidatorConfigZod","registerActor","start","runBridge","BridgeConfigZod","runMempool","runProducer","ProducerConfigZod","runRewardRedemptionApi","RewardRedemptionConfigZod","mempoolEnabled","enabled","mempoolConfig","waitForHostPort","host","port","apiConfig","runApi","producerConfig","type","description","alias","default","help","config","start","config","quiet","runCLI"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runCLI.d.ts","sourceRoot":"","sources":["../../src/runCLI.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runCLI.d.ts","sourceRoot":"","sources":["../../src/runCLI.ts"],"names":[],"mappings":"AAsEA,wBAAsB,MAAM,kBA8J3B"}
|
package/dist/node/xl1.mjs
CHANGED
|
@@ -8,7 +8,7 @@ import { config } from "dotenv";
|
|
|
8
8
|
import { createDeepMerge, isDefined as isDefined2 } from "@xylabs/sdk-js";
|
|
9
9
|
import { getApiActor, runApi } from "@xyo-network/chain-api";
|
|
10
10
|
import { getMempoolActor, runMempool } from "@xyo-network/chain-mempool";
|
|
11
|
-
import { ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod, RewardRedemptionConfigZod, tryParseConfig } from "@xyo-network/chain-orchestration";
|
|
11
|
+
import { ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod, RewardRedemptionConfigZod, tryParseConfig, ValidatorConfigZod } from "@xyo-network/chain-orchestration";
|
|
12
12
|
import { runProducer } from "@xyo-network/chain-producer";
|
|
13
13
|
import { ActorConfigZod, ConfigZod, isZodError, resolveConfig } from "@xyo-network/xl1-sdk";
|
|
14
14
|
import yargs from "yargs";
|
|
@@ -167,7 +167,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
167
167
|
|
|
168
168
|
// src/runCLI.ts
|
|
169
169
|
var configuration;
|
|
170
|
-
var version = isDefined2("1.20.
|
|
170
|
+
var version = isDefined2("1.20.3") ? "1.20.3" : "unknown";
|
|
171
171
|
var deepMerge = createDeepMerge({
|
|
172
172
|
arrayStrategy: "concat"
|
|
173
173
|
});
|
|
@@ -221,7 +221,10 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
221
221
|
"populate--": true
|
|
222
222
|
}).env("XL1").scriptName("xl1").middleware(async (argv2) => {
|
|
223
223
|
try {
|
|
224
|
-
const
|
|
224
|
+
const configPath = argv2.config;
|
|
225
|
+
const parsedConfigFile = await tryParseConfig({
|
|
226
|
+
configPath
|
|
227
|
+
});
|
|
225
228
|
const parsedConfigArgs = ConfigZod.safeParse(argv2).data ?? {};
|
|
226
229
|
const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs));
|
|
227
230
|
if (!parseResult.success) {
|
|
@@ -262,7 +265,7 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
262
265
|
const actors = await Promise.all([
|
|
263
266
|
getApiActor(ApiConfigZod.parse(locators["api"].context.config), locators["api"]),
|
|
264
267
|
getMempoolActor(MempoolConfigZod.parse(locators["mempool"].context.config), locators["mempool"]),
|
|
265
|
-
getValidatorActor(
|
|
268
|
+
getValidatorActor(ValidatorConfigZod.parse(locators["validator"].context.config), locators["validator"])
|
|
266
269
|
]);
|
|
267
270
|
for (const actor of actors) {
|
|
268
271
|
await orchestrator.registerActor(actor);
|
|
@@ -326,6 +329,11 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
326
329
|
const producerConfig = ProducerConfigZod.parse(locators["producer"].context.config);
|
|
327
330
|
await runProducer(producerConfig, orchestrator, locators["producer"]);
|
|
328
331
|
}).options({
|
|
332
|
+
"config": {
|
|
333
|
+
type: "string",
|
|
334
|
+
description: "Path to a config file to use instead of the default search.",
|
|
335
|
+
alias: "c"
|
|
336
|
+
},
|
|
329
337
|
"dump-config": {
|
|
330
338
|
type: "boolean",
|
|
331
339
|
description: "Just process the configuration and print the resolved config to stdout, then exit.",
|
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/rewardRedemption/runRewardRedemptionApi.ts","../../src/commands/validator/runValidator.ts","../../src/images.ts","../../src/initLogger.ts","../../src/optionsFromGlobalZodRegistry.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 { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport { getApiActor, runApi } from '@xyo-network/chain-api'\nimport { getMempoolActor, runMempool } from '@xyo-network/chain-mempool'\nimport {\n ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod,\n RewardRedemptionConfigZod, tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, isZodError,\n resolveConfig,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n getValidatorActor, runBridge, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\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\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\n\nconst getLocatorsFromConfig = async (actors: string[], configuration: Config) => {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const rawConfig = configuration.actors.find(actor => actor.name === actorName) ?? { name: actorName }\n const actorConfig = ActorConfigZod.loose().parse(rawConfig)\n actorConfigs.push(actorConfig)\n }\n const config = ConfigZod.parse(deepMerge(configuration, { actors: actorConfigs }))\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n const locators = await locatorsFromConfig(context, config)\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(async (argv) => {\n try {\n // Parse the various config sources\n const parsedConfigFile = await tryParseConfig() // Config file\n const parsedConfigArgs = ConfigZod.safeParse(argv).data ?? {} // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs))\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 = parseResult.data\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 // 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 { locators, orchestrator } = await getLocatorsFromConfig(['api', 'mempool', 'validator'], configuration)\n const actors = await Promise.all([getApiActor(\n ApiConfigZod.parse(locators['api'].context.config),\n locators['api'],\n ), getMempoolActor(\n MempoolConfigZod.parse(locators['mempool'].context.config),\n locators['mempool'],\n ), getValidatorActor(\n ActorConfigZod.parse(locators['validator'].context.config),\n locators['validator'],\n )])\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n await orchestrator.start()\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 { locators, orchestrator } = await getLocatorsFromConfig(['bridge'], configuration)\n await runBridge(BridgeConfigZod.parse(locators['bridge'].context.config), orchestrator, locators['bridge'])\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 { locators, orchestrator } = await getLocatorsFromConfig(['mempool'], configuration)\n await runMempool(MempoolConfigZod.parse(locators['mempool'].context.config), orchestrator, locators['mempool'])\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(ProducerConfigZod.parse(locators['producer'].context.config), 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 { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const actors = ['producer', 'api']\n const mempoolEnabled = configuration.actors.find(actor => actor.name === 'mempool')?.enabled\n if (mempoolEnabled) {\n actors.push('mempool')\n }\n const { locators, orchestrator } = await getLocatorsFromConfig(['api', 'producer'], configuration)\n if (mempoolEnabled) {\n const mempoolConfig = MempoolConfigZod.parse(locators['mempool'].context.config)\n // Start Mempool but do not block\n await runMempool(mempoolConfig, orchestrator, locators['mempool'])\n // Wait for Mempool to be ready\n await waitForHostPort(mempoolConfig.host, mempoolConfig.port)\n }\n // Start API but do not block\n const apiConfig = ApiConfigZod.parse(locators['api'].context.config)\n await runApi(apiConfig, orchestrator, locators['api'])\n // Wait for API to be ready\n await waitForHostPort(apiConfig.host, apiConfig.port)\n // Start Producer and block on it\n const producerConfig = ProducerConfigZod.parse(locators['producer'].context.config)\n await runProducer(producerConfig, 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 { exists } from '@xylabs/sdk-js'\nimport { BridgeActor } from '@xyo-network/chain-bridge'\nimport type { BridgeConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getBridgeActor = async (\n config: BridgeConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await BridgeActor.create({\n account, config, locator,\n })\n}\n\nexport const runBridge = async (\n config: BridgeConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const bridge = await getBridgeActor(config, locator)\n const actors = [bridge].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type { OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type { ActorConfig, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getValidatorActor = async (\n config: ActorConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await ValidatorActor.create({\n account, config, locator,\n })\n}\n\nexport const runValidator = async (\n config: ActorConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const validator = await getValidatorActor(config, locator)\n const actors = [validator].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\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 { BaseConfig } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: BaseConfig): 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 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 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","createDeepMerge","isDefined","getApiActor","runApi","getMempoolActor","runMempool","ApiConfigZod","BridgeConfigZod","contextFromConfigWithoutLocator","locatorsFromConfig","MempoolConfigZod","Orchestrator","ProducerConfigZod","RewardRedemptionConfigZod","tryParseConfig","runProducer","ActorConfigZod","ConfigZod","isZodError","resolveConfig","yargs","hideBin","exists","BridgeActor","initActorWallet","getBridgeActor","config","locator","account","initActorWallet","logger","context","singletons","caches","BridgeActor","create","runBridge","orchestrator","bridge","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","RewardRedemptionActor","getRewardRedemptionActor","config","locator","account","initActorWallet","logger","context","singletons","caches","RewardRedemptionActor","create","runRewardRedemptionApi","orchestrator","rewardRedemption","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","ValidatorActor","getValidatorActor","config","locator","account","initActorWallet","logger","context","singletons","caches","ValidatorActor","create","XL1LogoColorizedAscii","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","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","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","deepMerge","createDeepMerge","arrayStrategy","getLocatorsFromConfig","actors","actorConfigs","actorName","rawConfig","find","actor","name","actorConfig","ActorConfigZod","loose","parse","push","config","ConfigZod","logger","initLogger","orchestrator","Orchestrator","create","context","contextFromConfigWithoutLocator","locators","locatorsFromConfig","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","parsedConfigFile","tryParseConfig","parsedConfigArgs","safeParse","data","parseResult","success","mergedConfig","validatedMergedConfigResult","resolvedConfig","resolveConfig","validatedConfigResult","console","JSON","stringify","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","Promise","all","getApiActor","ApiConfigZod","getMempoolActor","MempoolConfigZod","getValidatorActor","registerActor","start","runBridge","BridgeConfigZod","runMempool","runProducer","ProducerConfigZod","runRewardRedemptionApi","RewardRedemptionConfigZod","mempoolEnabled","enabled","mempoolConfig","waitForHostPort","host","port","apiConfig","runApi","producerConfig","type","description","default","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/rewardRedemption/runRewardRedemptionApi.ts","../../src/commands/validator/runValidator.ts","../../src/images.ts","../../src/initLogger.ts","../../src/optionsFromGlobalZodRegistry.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 { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport { getApiActor, runApi } from '@xyo-network/chain-api'\nimport { getMempoolActor, runMempool } from '@xyo-network/chain-mempool'\nimport {\n ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod,\n RewardRedemptionConfigZod, tryParseConfig,\n ValidatorConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { runProducer } from '@xyo-network/chain-producer'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, isZodError,\n resolveConfig,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n getValidatorActor, runBridge, runRewardRedemptionApi,\n} from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\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\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\n\nconst getLocatorsFromConfig = async (actors: string[], configuration: Config) => {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const rawConfig = configuration.actors.find(actor => actor.name === actorName) ?? { name: actorName }\n const actorConfig = ActorConfigZod.loose().parse(rawConfig)\n actorConfigs.push(actorConfig)\n }\n const config = ConfigZod.parse(deepMerge(configuration, { actors: actorConfigs }))\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n const locators = await locatorsFromConfig(context, config)\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(async (argv) => {\n try {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) // Config file\n const parsedConfigArgs = ConfigZod.safeParse(argv).data ?? {} // Command-line arguments & ENV VARs\n const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs))\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 = parseResult.data\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 // 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 { locators, orchestrator } = await getLocatorsFromConfig(['api', 'mempool', 'validator'], configuration)\n const actors = await Promise.all([getApiActor(\n ApiConfigZod.parse(locators['api'].context.config),\n locators['api'],\n ), getMempoolActor(\n MempoolConfigZod.parse(locators['mempool'].context.config),\n locators['mempool'],\n ), getValidatorActor(\n ValidatorConfigZod.parse(locators['validator'].context.config),\n locators['validator'],\n )])\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n await orchestrator.start()\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 { locators, orchestrator } = await getLocatorsFromConfig(['bridge'], configuration)\n await runBridge(BridgeConfigZod.parse(locators['bridge'].context.config), orchestrator, locators['bridge'])\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 { locators, orchestrator } = await getLocatorsFromConfig(['mempool'], configuration)\n await runMempool(MempoolConfigZod.parse(locators['mempool'].context.config), orchestrator, locators['mempool'])\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(ProducerConfigZod.parse(locators['producer'].context.config), 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 { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const actors = ['producer', 'api']\n const mempoolEnabled = configuration.actors.find(actor => actor.name === 'mempool')?.enabled\n if (mempoolEnabled) {\n actors.push('mempool')\n }\n const { locators, orchestrator } = await getLocatorsFromConfig(['api', 'producer'], configuration)\n if (mempoolEnabled) {\n const mempoolConfig = MempoolConfigZod.parse(locators['mempool'].context.config)\n // Start Mempool but do not block\n await runMempool(mempoolConfig, orchestrator, locators['mempool'])\n // Wait for Mempool to be ready\n await waitForHostPort(mempoolConfig.host, mempoolConfig.port)\n }\n // Start API but do not block\n const apiConfig = ApiConfigZod.parse(locators['api'].context.config)\n await runApi(apiConfig, orchestrator, locators['api'])\n // Wait for API to be ready\n await waitForHostPort(apiConfig.host, apiConfig.port)\n // Start Producer and block on it\n const producerConfig = ProducerConfigZod.parse(locators['producer'].context.config)\n await runProducer(producerConfig, orchestrator, locators['producer'])\n })\n .options({\n 'config': {\n type: 'string',\n description: 'Path to a config file to use instead of the default search.',\n alias: 'c',\n },\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 { exists } from '@xylabs/sdk-js'\nimport { BridgeActor } from '@xyo-network/chain-bridge'\nimport type { BridgeConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getBridgeActor = async (\n config: BridgeConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await BridgeActor.create({\n account, config, locator,\n })\n}\n\nexport const runBridge = async (\n config: BridgeConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const bridge = await getBridgeActor(config, locator)\n const actors = [bridge].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type { OrchestratorInstance, ValidatorConfig } from '@xyo-network/chain-orchestration'\nimport { initActorWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nexport const getValidatorActor = async (\n config: ValidatorConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n // Create actors\n return await ValidatorActor.create({\n account, config, locator,\n })\n}\n\nexport const runValidator = async (\n config: ValidatorConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const validator = await getValidatorActor(config, locator)\n const actors = [validator].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\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 { BaseConfig } from '@xyo-network/xl1-sdk'\n\nexport const initLogger = (config: BaseConfig): 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 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 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":";;;;AAAA,SAASA,cAAc;;;ACAvB,SAASC,iBAAiBC,aAAAA,kBAAiB;AAC3C,SAASC,aAAaC,cAAc;AACpC,SAASC,iBAAiBC,kBAAkB;AAC5C,SACEC,cAAcC,iBAAiBC,iCAAiCC,oBAAoBC,kBAAkBC,cAAcC,mBACpHC,2BAA2BC,gBAC3BC,0BACK;AACP,SAASC,mBAAmB;AAE5B,SACEC,gBAAgBC,WAAWC,YAC3BC,qBACK;AAEP,OAAOC,WAAW;AAClB,SAASC,eAAe;;;AChBxB,SAASC,cAAc;AACvB,SAASC,mBAAmB;AAE5B,SAASC,uBAAuB;AAGzB,IAAMC,iBAAiB,8BAC5BC,SACAC,YAAAA;AAEA,QAAMC,UAAU,MAAMC,gBAAgB;IACpCH,QAAAA;IAAQI,QAAQH,QAAQI,QAAQD;IAAQE,YAAY,CAAC;IAAGC,QAAQ,CAAC;EACnE,CAAA;AAEA,SAAO,MAAMC,YAAYC,OAAO;IAC9BP;IAASF,QAAAA;IAAQC;EACnB,CAAA;AACF,GAX8B;AAavB,IAAMS,YAAY,8BACvBV,SACAW,cACAV,YAAAA;AAEA,QAAMW,SAAS,MAAMb,eAAeC,SAAQC,OAAAA;AAC5C,QAAMY,SAAS;IAACD;IAAQE,OAAOC,MAAAA;AAE/B,aAAWC,SAASH,QAAQ;AAE1B,UAAMF,aAAaM,cAAcD,KAAAA;EACnC;AAEA,QAAML,aAAaO,MAAK;AAC1B,GAdyB;;;ACnBzB,SAASC,UAAAA,eAAc;AAKvB,SAASC,mBAAAA,wBAAuB;AAChC,SAASC,6BAA6B;AAGtC,eAAsBC,yBACpBC,SACAC,SAAuC;AAEvC,QAAMC,UAAU,MAAMC,iBAAgB;IACpCH,QAAAA;IAAQI,QAAQH,QAAQI,QAAQD;IAAQE,YAAY,CAAC;IAAGC,QAAQ,CAAC;EACnE,CAAA;AACA,SAAO,MAAMC,sBAAsBC,OAAO;IACxCP;IAASF,QAAAA;IAAQC;EACnB,CAAA;AACF;AAVsBF;AAYtB,eAAsBW,uBACpBV,SACAW,cACAV,SAAuC;AAEvC,QAAMW,mBAAmB,MAAMb,yBAAyBC,SAAQC,OAAAA;AAChE,QAAMY,SAAS;IAACD;IAAkBE,OAAOC,OAAAA;AAEzC,aAAWC,SAASH,QAAQ;AAE1B,UAAMF,aAAaM,cAAcD,KAAAA;EACnC;AAEA,QAAML,aAAaO,MAAK;AAC1B;AAdsBR;;;ACrBtB,SAASS,UAAAA,eAAc;AAEvB,SAASC,mBAAAA,kBAAiBC,sBAAsB;AAGzC,IAAMC,oBAAoB,8BAC/BC,SACAC,YAAAA;AAEA,QAAMC,UAAU,MAAMC,iBAAgB;IACpCH,QAAAA;IAAQI,QAAQH,QAAQI,QAAQD;IAAQE,YAAY,CAAC;IAAGC,QAAQ,CAAC;EACnE,CAAA;AAEA,SAAO,MAAMC,eAAeC,OAAO;IACjCP;IAASF,QAAAA;IAAQC;EACnB,CAAA;AACF,GAXiC;;;ACJ1B,IAAMS,wBAAwB;;;;;;;;;;;;;;;;;;;;ACArC,SACEC,MACAC,eAAeC,WACfC,UAAUC,oBACL;AAGA,IAAMC,aAAa,wBAACC,YAAAA;AACzB,MAAIC;AACJ,MAAID,QAAOE,IAAIC,QAAQ;AACrBF,aAAS,IAAIG,aAAAA;EACf,OAAO;AACL,QAAIC;AACJ,QAAIC,UAAUN,QAAOE,IAAIK,QAAQ,GAAG;AAClC,YAAMC,SAASC,SAAST,QAAOE,IAAIK,SAASG,YAAW,CAAA;AACvD,UAAIJ,UAAUE,MAAAA,EAASH,SAAQG;IACjC;AACAP,aAAS,IAAIU,cAAcN,KAAAA;EAC7B;AACAO,OAAKC,gBAAgBZ;AACrB,SAAOA;AACT,GAd0B;;;ACP1B,SAASa,mBAAmB;AAE5B,SAASC,sBAAsB;AAE/B,IAAMC,qBAAqB,wBAACC,SAAAA;AAC1B,SAAOA;AACT,GAF2B;AAIpB,IAAMC,+BAA+B,6BAAA;AAC1C,QAAMC,OAAgC,CAAC;AACvC,aAAWC,UAAUC,OAAOC,OAAOC,eAAeC,IAAI,GAAG;AACvD,QAAIC,YAAYL,MAAAA,GAAS;AACvB,UAAIA,OAAOM,OAAQ;AACnBP,WAAKC,OAAOO,KAAK,IAAIX,mBAAmBI,MAAAA;IAC1C;EACF;AACA,SAAOD;AACT,GAT4C;;;ACT5C,OAAOS,SAAS;AAET,IAAMC,kBAAkB,wBAACC,MAAcC,SAAAA;AAC5C,SAAO,IAAIC,QAAQ,CAACC,YAAAA;AAClB,UAAMC,aAAa,6BAAA;AACjB,YAAMC,SAAS,IAAIC,IAAIC,OAAM;AAE7BF,aACGG,WAAW,GAAA,EACXC,KAAK,SAAS,MAAA;AACbJ,eAAOK,QAAO;AACdF,mBAAWJ,YAAY,GAAA;MACzB,CAAA,EACCK,KAAK,WAAW,MAAA;AACfJ,eAAOK,QAAO;AACdF,mBAAWJ,YAAY,GAAA;MACzB,CAAA,EACCO,QAAQV,MAAMD,MAAM,MAAA;AACnBK,eAAOO,IAAG;AACVT,gBAAAA;MACF,CAAA;IACJ,GAjBmB;AAmBnBC,eAAAA;EACF,CAAA;AACF,GAvB+B;;;APgC/B,IAAIS;AAEJ,IAAMC,UAAUC,WAAUC,QAAAA,IAAeA,WAAc;AAEvD,IAAMC,YAAYC,gBAAgB;EAAEC,eAAe;AAAS,CAAA;AAE5D,IAAMC,wBAAwB,8BAAOC,QAAkBR,mBAAAA;AACrD,QAAMS,eAA8B,CAAA;AACpC,aAAWC,aAAaF,QAAQ;AAC9B,UAAMG,YAAYX,eAAcQ,OAAOI,KAAKC,CAAAA,UAASA,MAAMC,SAASJ,SAAAA,KAAc;MAAEI,MAAMJ;IAAU;AACpG,UAAMK,cAAcC,eAAeC,MAAK,EAAGC,MAAMP,SAAAA;AACjDF,iBAAaU,KAAKJ,WAAAA;EACpB;AACA,QAAMK,UAASC,UAAUH,MAAMd,UAAUJ,gBAAe;IAAEQ,QAAQC;EAAa,CAAA,CAAA;AAC/E,QAAMa,SAASC,WAAWvB,cAAAA;AAC1B,QAAMwB,eAAe,MAAMC,aAAaC,OAAO;IAAEJ;EAAO,CAAA;AACxD,QAAMK,UAAU,MAAMC,gCAAgCR,SAAQE,QAAQ,WAAWrB,OAAAA;AACjF,QAAM4B,WAAW,MAAMC,mBAAmBH,SAASP,OAAAA;AAEnDW,UAAQC,GAAG,UAAU,MAAA;AACnB,UAAM,YAAA;AACJ,UAAI;AACFV,eAAOW,IAAI,oDAAA;AACX,cAAMT,cAAcU,KAAAA;AACpBZ,eAAOW,IAAI,oCAAA;AACXF,gBAAQI,KAAK,CAAA;MACf,SAASC,KAAK;AACZd,eAAOe,MAAM,gCAAgCD,GAAAA;AAC7CL,gBAAQI,KAAK,CAAA;MACf;IACF,GAAA;EACF,CAAA;AACA,SAAO;IAAEN;IAAUL;EAAa;AAClC,GA3B8B;AA8B9B,eAAsBc,SAAAA;AAEpB,QAAMC,IAAIC,MAAMC,QAAQV,QAAQW,IAAI,CAAA;AACpC,QAAMA,OAAOH,EACVI,MAAM;0BACQ1C,OAAAA;EACjB2C,qBAAAA;;;;uBAIqB,EAClBC,oBAAoB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;EAChB,CAAA,EACCC,IAAI,KAAA,EACJC,WAAW,KAAA,EACXC,WAAW,OAAON,UAAAA;AACjB,QAAI;AAEF,YAAMO,aAAaP,MAAKtB;AACxB,YAAM8B,mBAAmB,MAAMC,eAAe;QAAEF;MAAW,CAAA;AAC3D,YAAMG,mBAAmB/B,UAAUgC,UAAUX,KAAAA,EAAMY,QAAQ,CAAC;AAC5D,YAAMC,cAAclC,UAAUgC,UAAUjD,UAAU8C,kBAAkBE,gBAAAA,CAAAA;AACpE,UAAI,CAACG,YAAYC,SAAS;AACxB,cAAMD,YAAYlB;MACpB;AAQA,YAAMoB,eAAeF,YAAYD;AACjC,YAAMI,8BAA8BrC,UAAUgC,UAAUI,YAAAA;AACxD,UAAI,CAACC,4BAA4BF,SAAS;AACxC,cAAME,4BAA4BrB;MACpC;AACA,YAAMsB,iBAAiBC,cAAcF,4BAA4BJ,IAAI;AAErE,YAAMO,wBAAwBxC,UAAUgC,UAAUM,cAAAA;AAClD,UAAI,CAACE,sBAAsBL,SAAS;AAClC,cAAMK,sBAAsBxB;MAC9B;AACArC,sBAAgB6D,sBAAsBP;AAGtC,UAAIZ,MAAK,aAAA,GAAgB;AACvBoB,gBAAQ7B,IAAI8B,KAAKC,UAAUhE,eAAe,MAAM,CAAA,CAAA;AAEhD+B,gBAAQI,KAAK,CAAA;MACf;IACF,SAASC,KAAK;AACZ,UAAI6B,WAAW7B,GAAAA,GAAM;AACnB0B,gBAAQzB,MAAM,cAAcD,IAAI8B,OAAO,EAAE;MAC3C,OAAO;AACLJ,gBAAQzB,MAAM,gCAAgCD,GAAAA,EAAK;MACrD;AACA0B,cAAQzB,MAAM,UAAUD,eAAe+B,QAAQ/B,IAAIgC,QAAQ,KAAA,EAAO;AAClE,YAAM,IAAID,MAAM,uBAAA;IAClB;EACF,CAAA,EACCE,QAAQC,6BAAAA,CAAAA,EAERC,KAAKhC,EAAEiC,cAAa,CAAA,EACpBC,QAAQ,OAAO,sBAAsB,CAACjC,WAAAA;AACrC,WAAOA,OACJiC,QAAQ,MAAM,sBAAsB,MAAA;IAAO,GAAG,YAAA;AAC7C,YAAM,EAAE5C,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;QAAC;QAAO;QAAW;SAAcP,aAAAA;AAChG,YAAMQ,SAAS,MAAMkE,QAAQC,IAAI;QAACC,YAChCC,aAAa3D,MAAMW,SAAS,KAAA,EAAOF,QAAQP,MAAM,GACjDS,SAAS,KAAA,CAAM;QACdiD,gBACDC,iBAAiB7D,MAAMW,SAAS,SAAA,EAAWF,QAAQP,MAAM,GACzDS,SAAS,SAAA,CAAU;QAClBmD,kBACDC,mBAAmB/D,MAAMW,SAAS,WAAA,EAAaF,QAAQP,MAAM,GAC7DS,SAAS,WAAA,CAAY;OACrB;AAEF,iBAAWhB,SAASL,QAAQ;AAC1B,cAAMgB,aAAa0D,cAAcrE,KAAAA;MACnC;AAEA,YAAMW,aAAa2D,MAAK;IAC1B,CAAA;EACJ,CAAA,EACCV,QAAQ,UAAU,yBAAyB,CAACjC,WAAAA;AAC3C,WAAOA,OACJiC,QAAQ,MAAM,yBAAyB,MAAA;IAAO,GAAG,YAAA;AAChD,YAAM,EAAE5C,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;QAAC;SAAWP,aAAAA;AAC3E,YAAMoF,UAAUC,gBAAgBnE,MAAMW,SAAS,QAAA,EAAUF,QAAQP,MAAM,GAAGI,cAAcK,SAAS,QAAA,CAAS;IAC5G,CAAA;EACJ,CAAA,EACC4C,QAAQ,WAAW,0BAA0B,CAACjC,WAAAA;AAC7C,WAAOA,OACJiC,QAAQ,MAAM,0BAA0B,MAAA;IAAO,GAAG,YAAA;AACjD,YAAM,EAAE5C,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;QAAC;SAAYP,aAAAA;AAC5E,YAAMsF,WAAWP,iBAAiB7D,MAAMW,SAAS,SAAA,EAAWF,QAAQP,MAAM,GAAGI,cAAcK,SAAS,SAAA,CAAU;IAChH,CAAA;EACJ,CAAA,EACC4C,QAAQ,YAAY,2BAA2B,CAACjC,WAAAA;AAC/C,WAAOA,OACJiC,QAAQ,MAAM,2BAA2B,MAAA;IAAO,GAAG,YAAA;AAClD,YAAM,EAAE5C,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;QAAC;SAAaP,aAAAA;AAC7E,YAAMuF,YAAYC,kBAAkBtE,MAAMW,SAAS,UAAA,EAAYF,QAAQP,MAAM,GAAGI,cAAcK,SAAS,UAAA,CAAW;IACpH,CAAA;EACJ,CAAA,EACC4C,QAAQ,yBAAyB,yCAAyC,CAACjC,WAAAA;AAC1E,WAAOA,OACJiC,QAAQ,MAAM,yCAAyC,MAAA;IAAO,GAAG,YAAA;AAChE,YAAM,EAAE5C,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;QAAC;SAAqBP,aAAAA;AACrF,YAAMyF,uBAAuBC,0BAA0BxE,MAAMW,SAAS,kBAAA,EAAoBF,QAAQP,MAAM,GAAGI,cAAcK,SAAS,kBAAA,CAAmB;IACvJ,CAAA;EACJ,CAAA,EACC4C,QAAQ,MAAM,uBAAuB,MAAA;EAAO,GAAG,YAAA;AAC9C,UAAMjE,SAAS;MAAC;MAAY;;AAC5B,UAAMmF,iBAAiB3F,cAAcQ,OAAOI,KAAKC,CAAAA,UAASA,MAAMC,SAAS,SAAA,GAAY8E;AACrF,QAAID,gBAAgB;AAClBnF,aAAOW,KAAK,SAAA;IACd;AACA,UAAM,EAAEU,UAAUL,aAAY,IAAK,MAAMjB,sBAAsB;MAAC;MAAO;OAAaP,aAAAA;AACpF,QAAI2F,gBAAgB;AAClB,YAAME,gBAAgBd,iBAAiB7D,MAAMW,SAAS,SAAA,EAAWF,QAAQP,MAAM;AAE/E,YAAMkE,WAAWO,eAAerE,cAAcK,SAAS,SAAA,CAAU;AAEjE,YAAMiE,gBAAgBD,cAAcE,MAAMF,cAAcG,IAAI;IAC9D;AAEA,UAAMC,YAAYpB,aAAa3D,MAAMW,SAAS,KAAA,EAAOF,QAAQP,MAAM;AACnE,UAAM8E,OAAOD,WAAWzE,cAAcK,SAAS,KAAA,CAAM;AAErD,UAAMiE,gBAAgBG,UAAUF,MAAME,UAAUD,IAAI;AAEpD,UAAMG,iBAAiBX,kBAAkBtE,MAAMW,SAAS,UAAA,EAAYF,QAAQP,MAAM;AAClF,UAAMmE,YAAYY,gBAAgB3E,cAAcK,SAAS,UAAA,CAAW;EACtE,CAAA,EACCwC,QAAQ;IACP,UAAU;MACR+B,MAAM;MACNC,aAAa;MACbC,OAAO;IACT;IACA,eAAe;MACbF,MAAM;MACNC,aAAa;MACbE,SAAS;IACX;EACF,CAAA,EACCC,KAAI,EACJF,MAAM,QAAQ,GAAA,EACdrG,QAAQA,OAAAA,EACRyC;AAEH,QAAMA;AACR;AA9JsBJ;;;ADlEf,IAAMmE,QAAQ,mCAAA;AACnBC,SAAO;IAAEC,OAAO;EAAK,CAAA;AACrB,QAAMC,OAAAA;AACR,GAHqB;;;ASFrBC,MAAAA,EAAQC,MAAM,CAACC,QAAAA;AAEb,MAAIC,QAAQC,IAAIC,aAAa,cAAeC,SAAQC,MAAM,qCAAqCL,GAAAA;AAE/FC,UAAQK,KAAK,CAAA;AACf,CAAA;","names":["config","createDeepMerge","isDefined","getApiActor","runApi","getMempoolActor","runMempool","ApiConfigZod","BridgeConfigZod","contextFromConfigWithoutLocator","locatorsFromConfig","MempoolConfigZod","Orchestrator","ProducerConfigZod","RewardRedemptionConfigZod","tryParseConfig","ValidatorConfigZod","runProducer","ActorConfigZod","ConfigZod","isZodError","resolveConfig","yargs","hideBin","exists","BridgeActor","initActorWallet","getBridgeActor","config","locator","account","initActorWallet","logger","context","singletons","caches","BridgeActor","create","runBridge","orchestrator","bridge","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","RewardRedemptionActor","getRewardRedemptionActor","config","locator","account","initActorWallet","logger","context","singletons","caches","RewardRedemptionActor","create","runRewardRedemptionApi","orchestrator","rewardRedemption","actors","filter","exists","actor","registerActor","start","exists","initActorWallet","ValidatorActor","getValidatorActor","config","locator","account","initActorWallet","logger","context","singletons","caches","ValidatorActor","create","XL1LogoColorizedAscii","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","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","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","configuration","version","isDefined","__VERSION__","deepMerge","createDeepMerge","arrayStrategy","getLocatorsFromConfig","actors","actorConfigs","actorName","rawConfig","find","actor","name","actorConfig","ActorConfigZod","loose","parse","push","config","ConfigZod","logger","initLogger","orchestrator","Orchestrator","create","context","contextFromConfigWithoutLocator","locators","locatorsFromConfig","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configPath","parsedConfigFile","tryParseConfig","parsedConfigArgs","safeParse","data","parseResult","success","mergedConfig","validatedMergedConfigResult","resolvedConfig","resolveConfig","validatedConfigResult","console","JSON","stringify","isZodError","message","Error","stack","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","Promise","all","getApiActor","ApiConfigZod","getMempoolActor","MempoolConfigZod","getValidatorActor","ValidatorConfigZod","registerActor","start","runBridge","BridgeConfigZod","runMempool","runProducer","ProducerConfigZod","runRewardRedemptionApi","RewardRedemptionConfigZod","mempoolEnabled","enabled","mempoolConfig","waitForHostPort","host","port","apiConfig","runApi","producerConfig","type","description","alias","default","help","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.20.
|
|
3
|
+
"version": "1.20.3",
|
|
4
4
|
"description": "XYO Layer One CLI Library",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -43,28 +43,28 @@
|
|
|
43
43
|
"start": "node ./dist/node/xl1.mjs"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@xyo-network/chain-api": "~1.20.
|
|
47
|
-
"@xyo-network/chain-bridge": "~1.20.
|
|
48
|
-
"@xyo-network/chain-mempool": "~1.20.
|
|
49
|
-
"@xyo-network/chain-orchestration": "~1.20.
|
|
50
|
-
"@xyo-network/chain-producer": "~1.20.
|
|
51
|
-
"@xyo-network/chain-reward-redemption": "~1.20.
|
|
46
|
+
"@xyo-network/chain-api": "~1.20.3",
|
|
47
|
+
"@xyo-network/chain-bridge": "~1.20.3",
|
|
48
|
+
"@xyo-network/chain-mempool": "~1.20.3",
|
|
49
|
+
"@xyo-network/chain-orchestration": "~1.20.3",
|
|
50
|
+
"@xyo-network/chain-producer": "~1.20.3",
|
|
51
|
+
"@xyo-network/chain-reward-redemption": "~1.20.3",
|
|
52
52
|
"dotenv": "~17.3.1",
|
|
53
53
|
"yargs": "~18.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@xylabs/sdk-js": "~5.0.80",
|
|
57
|
-
"@xylabs/ts-scripts-yarn3": "~7.4.
|
|
58
|
-
"@xylabs/tsconfig": "~7.4.
|
|
57
|
+
"@xylabs/ts-scripts-yarn3": "~7.4.10",
|
|
58
|
+
"@xylabs/tsconfig": "~7.4.10",
|
|
59
59
|
"@xylabs/vitest-extended": "~5.0.80",
|
|
60
60
|
"@xyo-network/account-model": "~5.3.15",
|
|
61
61
|
"@xyo-network/archivist-lmdb": "~5.3.15",
|
|
62
62
|
"@xyo-network/archivist-mongodb": "~5.3.15",
|
|
63
|
-
"@xyo-network/chain-ethereum": "~1.20.
|
|
63
|
+
"@xyo-network/chain-ethereum": "~1.20.3",
|
|
64
64
|
"@xyo-network/sdk-js": "~5.3.15",
|
|
65
65
|
"@xyo-network/typechain": "~4.1.2",
|
|
66
66
|
"@xyo-network/wallet-model": "~5.3.15",
|
|
67
|
-
"@xyo-network/xl1-sdk": "~1.25.
|
|
67
|
+
"@xyo-network/xl1-sdk": "~1.25.20",
|
|
68
68
|
"axios": "^1.13.6",
|
|
69
69
|
"eslint": "^9.39.4",
|
|
70
70
|
"ethers": "^6.16.0",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { exists } from '@xylabs/sdk-js'
|
|
2
|
-
import type { OrchestratorInstance } from '@xyo-network/chain-orchestration'
|
|
2
|
+
import type { OrchestratorInstance, ValidatorConfig } from '@xyo-network/chain-orchestration'
|
|
3
3
|
import { initActorWallet, ValidatorActor } from '@xyo-network/chain-orchestration'
|
|
4
|
-
import type {
|
|
4
|
+
import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
|
|
5
5
|
|
|
6
6
|
export const getValidatorActor = async (
|
|
7
|
-
config:
|
|
7
|
+
config: ValidatorConfig,
|
|
8
8
|
locator: ProviderFactoryLocatorInstance,
|
|
9
9
|
) => {
|
|
10
10
|
const account = await initActorWallet({
|
|
@@ -17,7 +17,7 @@ export const getValidatorActor = async (
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const runValidator = async (
|
|
20
|
-
config:
|
|
20
|
+
config: ValidatorConfig,
|
|
21
21
|
orchestrator: OrchestratorInstance,
|
|
22
22
|
locator: ProviderFactoryLocatorInstance,
|
|
23
23
|
) => {
|
package/src/runCLI.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { getMempoolActor, runMempool } from '@xyo-network/chain-mempool'
|
|
|
4
4
|
import {
|
|
5
5
|
ApiConfigZod, BridgeConfigZod, contextFromConfigWithoutLocator, locatorsFromConfig, MempoolConfigZod, Orchestrator, ProducerConfigZod,
|
|
6
6
|
RewardRedemptionConfigZod, tryParseConfig,
|
|
7
|
+
ValidatorConfigZod,
|
|
7
8
|
} from '@xyo-network/chain-orchestration'
|
|
8
9
|
import { runProducer } from '@xyo-network/chain-producer'
|
|
9
10
|
import type { ActorConfig, Config } from '@xyo-network/xl1-sdk'
|
|
@@ -88,7 +89,8 @@ $0 <command> [options]`)
|
|
|
88
89
|
.middleware(async (argv) => {
|
|
89
90
|
try {
|
|
90
91
|
// Parse the various config sources
|
|
91
|
-
const
|
|
92
|
+
const configPath = argv.config as string | undefined
|
|
93
|
+
const parsedConfigFile = await tryParseConfig({ configPath }) // Config file
|
|
92
94
|
const parsedConfigArgs = ConfigZod.safeParse(argv).data ?? {} // Command-line arguments & ENV VARs
|
|
93
95
|
const parseResult = ConfigZod.safeParse(deepMerge(parsedConfigFile, parsedConfigArgs))
|
|
94
96
|
if (!parseResult.success) {
|
|
@@ -144,7 +146,7 @@ $0 <command> [options]`)
|
|
|
144
146
|
MempoolConfigZod.parse(locators['mempool'].context.config),
|
|
145
147
|
locators['mempool'],
|
|
146
148
|
), getValidatorActor(
|
|
147
|
-
|
|
149
|
+
ValidatorConfigZod.parse(locators['validator'].context.config),
|
|
148
150
|
locators['validator'],
|
|
149
151
|
)])
|
|
150
152
|
|
|
@@ -207,6 +209,11 @@ $0 <command> [options]`)
|
|
|
207
209
|
await runProducer(producerConfig, orchestrator, locators['producer'])
|
|
208
210
|
})
|
|
209
211
|
.options({
|
|
212
|
+
'config': {
|
|
213
|
+
type: 'string',
|
|
214
|
+
description: 'Path to a config file to use instead of the default search.',
|
|
215
|
+
alias: 'c',
|
|
216
|
+
},
|
|
210
217
|
'dump-config': {
|
|
211
218
|
type: 'boolean',
|
|
212
219
|
description: 'Just process the configuration and print the resolved config to stdout, then exit.',
|