@xyo-network/xl1-cli-lib 1.21.0 → 1.21.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.
@@ -109,7 +109,7 @@ import { contextFromConfigWithoutLocator, detectDerivationPathCollisions, format
109
109
  import { initHealthEndpoints } from "@xyo-network/chain-orchestration-express";
110
110
  import { producerCommand } from "@xyo-network/chain-producer";
111
111
  import { rewardRedemptionCommand } from "@xyo-network/chain-reward-redemption";
112
- import { ActorConfigZod, ConfigZod as ConfigZod2 } from "@xyo-network/xl1-sdk";
112
+ import { ActorConfigZod, ConfigZod as ConfigZod2, DefaultMetricsScrapePorts } from "@xyo-network/xl1-sdk";
113
113
  import yargs from "yargs";
114
114
  import { hideBin } from "yargs/helpers";
115
115
 
@@ -275,9 +275,15 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
275
275
 
276
276
  // src/runCLI.ts
277
277
  var DEFAULT_HEALTH_CHECK_PORT = 9090;
278
+ function defaultScrapePortForActors(actors) {
279
+ const primary = actors[0];
280
+ const key = primary === "rewardRedemption" ? "rewardRedemptionApi" : primary;
281
+ return DefaultMetricsScrapePorts[key] ?? DefaultMetricsScrapePorts.producer;
282
+ }
283
+ __name(defaultScrapePortForActors, "defaultScrapePortForActors");
278
284
  var configuration;
279
285
  var skipInsecureConfirm = false;
280
- var version = isDefined3("1.21.0") ? "1.21.0" : "unknown";
286
+ var version = isDefined3("1.21.3") ? "1.21.3" : "unknown";
281
287
  function getConfiguration() {
282
288
  return configuration;
283
289
  }
@@ -323,7 +329,8 @@ async function getLocatorsFromConfig(actors, configuration2) {
323
329
  if (collision) throw collision;
324
330
  const walletReport = await initializeResolvedWalletReport(actors, configuration2);
325
331
  logger.info(formatWalletReport(walletReport));
326
- const context = await contextFromConfigWithoutLocator(config2, logger, "xl1-cli", version);
332
+ const serviceName = actors.length === 1 ? `xl1-${actors[0]}` : "xl1-cli";
333
+ const context = await contextFromConfigWithoutLocator(config2, logger, serviceName, version, defaultScrapePortForActors(actors));
327
334
  if (skipInsecureConfirm) {
328
335
  logger.warn("Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.");
329
336
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/configMiddleware.ts","../../src/initLogger.ts","../../src/runCLI.ts","../../src/commands/start/startCommand.ts","../../src/commands/withDeprecationWarning.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/start.ts"],"sourcesContent":["import { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport {\n ActorMnemonicNotAllowedError,\n assertNoActorMnemonics,\n ConfigFileNotFoundError,\n tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport {\n ConfigZod, isZodError, resolveConfig,\n} from '@xyo-network/xl1-sdk'\n\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\ntype ConfigWithMnemonic = Config & { mnemonic?: string }\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` — an object keyed by string indices\n * rather than an array. Normalize that back into an array so ConfigZod's\n * `actors` array schema accepts it.\n */\nfunction coerceActorsArray(argv: Record<string, unknown>): Record<string, unknown> {\n const actors = argv.actors\n if (actors === undefined || Array.isArray(actors)) return argv\n if (typeof actors !== 'object' || actors === null) return argv\n const entries = Object.entries(actors as Record<string, unknown>)\n const numericEntries = entries\n .map(([key, value]) => [Number(key), value] as const)\n .filter(([key]) => Number.isInteger(key) && key >= 0)\n if (numericEntries.length !== entries.length) return argv\n const asArray: unknown[] = []\n for (const [key, value] of numericEntries) asArray[key] = value\n return { ...argv, actors: asArray }\n}\n\nfunction safeParseOrThrow(input: unknown): Config {\n const result = ConfigZod.safeParse(input)\n if (!result.success) throw result.error\n return result.data as Config\n}\n\nasync function buildFinalConfig(argv: Record<string, unknown>): Promise<ConfigWithMnemonic> {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) as ConfigWithMnemonic // Config file\n const rootMnemonicFromFile = typeof parsedConfigFile.mnemonic === 'string' ? parsedConfigFile.mnemonic : undefined\n const normalizedArgv = coerceActorsArray(argv)\n const parsedConfigArgs = ConfigZod.safeParse(normalizedArgv).data ?? {} // Command-line arguments & ENV VARs\n const rootMnemonicFromArgs = typeof normalizedArgv.mnemonic === 'string' ? normalizedArgv.mnemonic : undefined\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 = safeParseOrThrow(deepMerge(parsedConfigFile, parsedConfigArgs))\n const validated = safeParseOrThrow(resolveConfig(safeParseOrThrow(mergedConfig)))\n const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile\n return isDefined(rootMnemonic) ? { ...validated, mnemonic: rootMnemonic } : validated\n}\n\nexport async function configMiddleware(argv: Record<string, unknown>, setConfiguration: (config: Config) => void): Promise<void> {\n try {\n const finalConfig = await buildFinalConfig(argv)\n // Hard-fail if any actor was configured with its own mnemonic. Mnemonics\n // must live at the root; actors pick their wallet via accountPath.\n assertNoActorMnemonics(finalConfig)\n setConfiguration(finalConfig as Config)\n\n // Check if user wants to dump config and exit\n if (argv['dump-config']) {\n console.log(JSON.stringify(finalConfig, null, 2))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\n } catch (err) {\n if (err instanceof ConfigFileNotFoundError) {\n console.error(`${err.message}. Check the path passed to --config/-c and try again.`)\n } else if (err instanceof ActorMnemonicNotAllowedError) {\n console.error(err.message)\n } else if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n if (!(err instanceof ConfigFileNotFoundError) && !(err instanceof ActorMnemonicNotAllowedError)) {\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n }\n throw new Error('Invalid configuration', { cause: err })\n }\n}\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 { stdin as input, stdout as output } from 'node:process'\nimport { createInterface } from 'node:readline/promises'\n\nimport { isDefined } from '@xylabs/sdk-js'\nimport { apiCommand } from '@xyo-network/chain-api'\nimport { bridgeCommand } from '@xyo-network/chain-bridge'\nimport { finalizerCommand } from '@xyo-network/chain-finalizer'\nimport { mempoolCommand } from '@xyo-network/chain-mempool'\nimport {\n contextFromConfigWithoutLocator, detectDerivationPathCollisions, formatWalletReport, initializeResolvedWalletReport,\n locatorsFromConfig, Orchestrator,\n} from '@xyo-network/chain-orchestration'\nimport { initHealthEndpoints } from '@xyo-network/chain-orchestration-express'\nimport { producerCommand } from '@xyo-network/chain-producer'\nimport { rewardRedemptionCommand } from '@xyo-network/chain-reward-redemption'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport { ActorConfigZod, ConfigZod } from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9090\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\nlet skipInsecureConfirm = false\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction getConfiguration(): Config {\n return configuration\n}\n\nasync function promptForInsecureGenesisConfirmation(logger: ReturnType<typeof initLogger>) {\n if (!input.isTTY || !output.isTTY) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped because this session is not a TTY.')\n return\n }\n const rl = createInterface({ input, output })\n try {\n await rl.question('Insecure genesis reward wallet is active. Hit RETURN to continue.')\n } finally {\n rl.close()\n }\n}\n\nasync function getLocatorsFromConfig(actors: string[], configuration: Config) {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const existingConfig = configuration.actors.find(actor => actor.name === actorName)\n if (existingConfig) {\n actorConfigs.push(existingConfig)\n } else {\n const actorConfig = ActorConfigZod.loose().parse({ name: actorName })\n actorConfigs.push(actorConfig)\n }\n }\n\n const config = ConfigZod.parse({ ...configuration, actors: actorConfigs })\n\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const collision = detectDerivationPathCollisions(actors, configuration)\n if (collision) throw collision\n const walletReport = await initializeResolvedWalletReport(actors, configuration)\n logger.info(formatWalletReport(walletReport))\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n if (skipInsecureConfirm) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.')\n }\n const onInsecureGenesisConfirm = skipInsecureConfirm\n ? undefined\n : async () => await promptForInsecureGenesisConfirmation(logger)\n const locators = await locatorsFromConfig(context, config, onInsecureGenesisConfirm)\n\n const healthCheckPort = configuration.healthCheckPort ?? DEFAULT_HEALTH_CHECK_PORT\n const healthServer = healthCheckPort > 0 && context.statusReporter !== undefined\n ? await initHealthEndpoints({\n logger,\n port: healthCheckPort,\n readiness: orchestrator,\n statusMonitor: context.statusReporter,\n })\n : undefined\n\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n healthServer?.close()\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 await configMiddleware(argv, (config) => {\n configuration = config\n })\n skipInsecureConfirm = Boolean(argv['skip-insecure-confirm'])\n })\n .options(optionsFromGlobalZodRegistry())\n .wrap(y.terminalWidth())\n .command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(mempoolCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(producerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig)))\n .command(startCommand(getConfiguration, getLocatorsFromConfig))\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 'mnemonic': {\n type: 'string',\n description: 'Shared root mnemonic used by actors that do not define their own mnemonic.',\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 'skip-insecure-confirm': {\n type: 'boolean',\n description: 'Skip the interactive RETURN confirmation when the built-in dev mnemonic / insecure genesis reward wallet is active.',\n default: false,\n },\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import { getApiActor } from '@xyo-network/chain-api'\nimport { getBridgeActor } from '@xyo-network/chain-bridge'\nimport { getFinalizerActor } from '@xyo-network/chain-finalizer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type {\n ActorInstanceV3, GetLocatorsFromConfig, OrchestratorInstance,\n} from '@xyo-network/chain-orchestration'\nimport {\n ApiConfigZod,\n BridgeConfigZod,\n FinalizerConfigZod,\n MempoolConfigZod,\n ProducerConfigZod,\n RewardRedemptionConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getRewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type {\n ArgumentsCamelCase, Argv, CommandModule,\n} from 'yargs'\n\nimport { initLogger } from '../../initLogger.ts'\n\ninterface StartArgs {\n actors?: string[]\n}\n\nconst KNOWN_ACTORS = ['api', 'bridge', 'finalizer', 'mempool', 'producer', 'rewardRedemption'] as const\n\nconst BOOT_TIMEOUT_MS = 60_000\n\nfunction getActorsFromConfig(configuration: Config): string[] | undefined {\n const enabledActors = configuration.actors\n .filter(actor => actor.enabled !== false)\n .map(actor => actor.name)\n return enabledActors.length > 0 ? enabledActors : undefined\n}\n\nfunction getDefaultActors(): string[] {\n return ['api', 'producer', 'finalizer']\n}\n\nasync function buildActor(\n name: string,\n locator: ProviderFactoryLocatorInstance,\n): Promise<ActorInstanceV3> {\n switch (name) {\n case 'api': {\n const config = ApiConfigZod.parse(locator.context.config)\n return await getApiActor(config, locator)\n }\n case 'bridge': {\n const config = BridgeConfigZod.parse(locator.context.config)\n return await getBridgeActor(config, locator)\n }\n case 'mempool': {\n const config = MempoolConfigZod.parse(locator.context.config)\n return await getMempoolActor(config, locator)\n }\n case 'producer': {\n const config = ProducerConfigZod.parse(locator.context.config)\n return await getProducerActor(config, locator)\n }\n case 'rewardRedemption': {\n const config = RewardRedemptionConfigZod.parse(locator.context.config)\n return await getRewardRedemptionActor(config, locator)\n }\n case 'finalizer': {\n const config = FinalizerConfigZod.parse(locator.context.config)\n return await getFinalizerActor(config, locator)\n }\n default: {\n throw new Error(`Unknown actor: ${name}`)\n }\n }\n}\n\nasync function bootActors(\n requestedActors: string[],\n locators: Record<string, ProviderFactoryLocatorInstance>,\n orchestrator: OrchestratorInstance,\n configuration: Config,\n): Promise<void> {\n const startedAt = Date.now()\n const actors = await Promise.all(requestedActors.map(name => buildActor(name, locators[name])))\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n await orchestrator.whenReady(BOOT_TIMEOUT_MS)\n const ms = Date.now() - startedAt\n initLogger(configuration).info(`[xl1] system ready (${requestedActors.length} actor${requestedActors.length === 1 ? '' : 's'}, ${ms}ms)`)\n}\n\nexport function startCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: ['start [actors..]', '$0'],\n describe: 'Run a full XL1 Node',\n builder: (yargs: Argv) => {\n return yargs\n .positional('actors', {\n type: 'string',\n array: true,\n choices: KNOWN_ACTORS,\n description: 'Actors to start (e.g. xl1 start api producer or xl1 start api,producer)',\n coerce: (values: string[]) => values.flatMap(v => v.split(',')),\n })\n .option('actors', {\n type: 'array',\n string: true,\n choices: KNOWN_ACTORS,\n description: 'List of actors to start (e.g. --actors api producer finalizer). Defaults to api, producer, and finalizer.',\n })\n },\n handler: async (argv: ArgumentsCamelCase<StartArgs>) => {\n const configuration = getConfiguration()\n const requestedActors = argv.actors !== undefined && argv.actors.length > 0\n ? argv.actors\n : getActorsFromConfig(configuration) ?? getDefaultActors()\n const { locators, orchestrator } = await getLocatorsFromConfig(requestedActors, configuration)\n await bootActors(requestedActors, locators, orchestrator, configuration)\n },\n }\n}\n","import { delay } from '@xylabs/sdk-js'\nimport type { CommandModule } from 'yargs'\n\nexport function withDeprecationWarning(module: CommandModule): CommandModule {\n const { deprecated, handler } = module\n if (typeof deprecated === 'string') {\n return {\n ...module,\n handler: async (argv) => {\n console.warn(`[deprecated] ${deprecated}`)\n await delay(3000)\n return handler(argv)\n },\n }\n }\n return module\n}\n","/* eslint-disable no-irregular-whitespace, @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 { 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":["createDeepMerge","isDefined","ActorMnemonicNotAllowedError","assertNoActorMnemonics","ConfigFileNotFoundError","tryParseConfig","ConfigZod","isZodError","resolveConfig","deepMerge","createDeepMerge","arrayStrategy","coerceActorsArray","argv","actors","undefined","Array","isArray","entries","Object","numericEntries","map","key","value","Number","filter","isInteger","length","asArray","safeParseOrThrow","input","result","ConfigZod","safeParse","success","error","data","buildFinalConfig","configPath","config","parsedConfigFile","tryParseConfig","rootMnemonicFromFile","mnemonic","normalizedArgv","parsedConfigArgs","rootMnemonicFromArgs","mergedConfig","validated","resolveConfig","rootMnemonic","isDefined","configMiddleware","setConfiguration","finalConfig","assertNoActorMnemonics","console","log","JSON","stringify","process","exit","err","ConfigFileNotFoundError","message","ActorMnemonicNotAllowedError","isZodError","Error","stack","cause","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","stdin","input","stdout","output","createInterface","isDefined","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","contextFromConfigWithoutLocator","detectDerivationPathCollisions","formatWalletReport","initializeResolvedWalletReport","locatorsFromConfig","Orchestrator","initHealthEndpoints","producerCommand","rewardRedemptionCommand","ActorConfigZod","ConfigZod","yargs","hideBin","getApiActor","getBridgeActor","getFinalizerActor","getMempoolActor","ApiConfigZod","BridgeConfigZod","FinalizerConfigZod","MempoolConfigZod","ProducerConfigZod","RewardRedemptionConfigZod","getProducerActor","getRewardRedemptionActor","KNOWN_ACTORS","BOOT_TIMEOUT_MS","getActorsFromConfig","configuration","enabledActors","actors","filter","actor","enabled","map","name","length","undefined","getDefaultActors","buildActor","locator","config","ApiConfigZod","parse","context","getApiActor","BridgeConfigZod","getBridgeActor","MempoolConfigZod","getMempoolActor","ProducerConfigZod","getProducerActor","RewardRedemptionConfigZod","getRewardRedemptionActor","FinalizerConfigZod","getFinalizerActor","Error","bootActors","requestedActors","locators","orchestrator","startedAt","Date","now","Promise","all","registerActor","start","whenReady","ms","initLogger","info","startCommand","getConfiguration","getLocatorsFromConfig","command","describe","builder","yargs","positional","type","array","choices","description","coerce","values","flatMap","v","split","option","string","handler","argv","delay","withDeprecationWarning","module","deprecated","handler","argv","console","warn","delay","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","DEFAULT_HEALTH_CHECK_PORT","configuration","skipInsecureConfirm","version","isDefined","__VERSION__","getConfiguration","promptForInsecureGenesisConfirmation","logger","input","isTTY","output","warn","rl","createInterface","question","close","getLocatorsFromConfig","actors","actorConfigs","actorName","existingConfig","find","actor","name","push","actorConfig","ActorConfigZod","loose","parse","config","ConfigZod","initLogger","orchestrator","Orchestrator","create","collision","detectDerivationPathCollisions","walletReport","initializeResolvedWalletReport","info","formatWalletReport","context","contextFromConfigWithoutLocator","onInsecureGenesisConfirm","undefined","locators","locatorsFromConfig","healthCheckPort","healthServer","statusReporter","initHealthEndpoints","port","readiness","statusMonitor","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configMiddleware","Boolean","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","withDeprecationWarning","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","producerCommand","rewardRedemptionCommand","startCommand","type","description","alias","default","help","config","start","config","quiet","runCLI"]}
1
+ {"version":3,"sources":["../../src/configMiddleware.ts","../../src/initLogger.ts","../../src/runCLI.ts","../../src/commands/start/startCommand.ts","../../src/commands/withDeprecationWarning.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.ts","../../src/start.ts"],"sourcesContent":["import { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport {\n ActorMnemonicNotAllowedError,\n assertNoActorMnemonics,\n ConfigFileNotFoundError,\n tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport {\n ConfigZod, isZodError, resolveConfig,\n} from '@xyo-network/xl1-sdk'\n\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\ntype ConfigWithMnemonic = Config & { mnemonic?: string }\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` — an object keyed by string indices\n * rather than an array. Normalize that back into an array so ConfigZod's\n * `actors` array schema accepts it.\n */\nfunction coerceActorsArray(argv: Record<string, unknown>): Record<string, unknown> {\n const actors = argv.actors\n if (actors === undefined || Array.isArray(actors)) return argv\n if (typeof actors !== 'object' || actors === null) return argv\n const entries = Object.entries(actors as Record<string, unknown>)\n const numericEntries = entries\n .map(([key, value]) => [Number(key), value] as const)\n .filter(([key]) => Number.isInteger(key) && key >= 0)\n if (numericEntries.length !== entries.length) return argv\n const asArray: unknown[] = []\n for (const [key, value] of numericEntries) asArray[key] = value\n return { ...argv, actors: asArray }\n}\n\nfunction safeParseOrThrow(input: unknown): Config {\n const result = ConfigZod.safeParse(input)\n if (!result.success) throw result.error\n return result.data as Config\n}\n\nasync function buildFinalConfig(argv: Record<string, unknown>): Promise<ConfigWithMnemonic> {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) as ConfigWithMnemonic // Config file\n const rootMnemonicFromFile = typeof parsedConfigFile.mnemonic === 'string' ? parsedConfigFile.mnemonic : undefined\n const normalizedArgv = coerceActorsArray(argv)\n const parsedConfigArgs = ConfigZod.safeParse(normalizedArgv).data ?? {} // Command-line arguments & ENV VARs\n const rootMnemonicFromArgs = typeof normalizedArgv.mnemonic === 'string' ? normalizedArgv.mnemonic : undefined\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 = safeParseOrThrow(deepMerge(parsedConfigFile, parsedConfigArgs))\n const validated = safeParseOrThrow(resolveConfig(safeParseOrThrow(mergedConfig)))\n const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile\n return isDefined(rootMnemonic) ? { ...validated, mnemonic: rootMnemonic } : validated\n}\n\nexport async function configMiddleware(argv: Record<string, unknown>, setConfiguration: (config: Config) => void): Promise<void> {\n try {\n const finalConfig = await buildFinalConfig(argv)\n // Hard-fail if any actor was configured with its own mnemonic. Mnemonics\n // must live at the root; actors pick their wallet via accountPath.\n assertNoActorMnemonics(finalConfig)\n setConfiguration(finalConfig as Config)\n\n // Check if user wants to dump config and exit\n if (argv['dump-config']) {\n console.log(JSON.stringify(finalConfig, null, 2))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\n } catch (err) {\n if (err instanceof ConfigFileNotFoundError) {\n console.error(`${err.message}. Check the path passed to --config/-c and try again.`)\n } else if (err instanceof ActorMnemonicNotAllowedError) {\n console.error(err.message)\n } else if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n if (!(err instanceof ConfigFileNotFoundError) && !(err instanceof ActorMnemonicNotAllowedError)) {\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n }\n throw new Error('Invalid configuration', { cause: err })\n }\n}\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 { stdin as input, stdout as output } from 'node:process'\nimport { createInterface } from 'node:readline/promises'\n\nimport { isDefined } from '@xylabs/sdk-js'\nimport { apiCommand } from '@xyo-network/chain-api'\nimport { bridgeCommand } from '@xyo-network/chain-bridge'\nimport { finalizerCommand } from '@xyo-network/chain-finalizer'\nimport { mempoolCommand } from '@xyo-network/chain-mempool'\nimport {\n contextFromConfigWithoutLocator, detectDerivationPathCollisions, formatWalletReport, initializeResolvedWalletReport,\n locatorsFromConfig, Orchestrator,\n} from '@xyo-network/chain-orchestration'\nimport { initHealthEndpoints } from '@xyo-network/chain-orchestration-express'\nimport { producerCommand } from '@xyo-network/chain-producer'\nimport { rewardRedemptionCommand } from '@xyo-network/chain-reward-redemption'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, DefaultMetricsScrapePorts,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9090\n\n/**\n * Maps a CLI actor name to its registered Prometheus scrape port. The CLI-level\n * exporter (one per process) defaults to the port of the first requested actor\n * so that running, e.g., `xl1 start producer` and `xl1 start api` side-by-side\n * doesn't fight over a single shared default.\n */\nfunction defaultScrapePortForActors(actors: readonly string[]): number {\n const primary = actors[0]\n const key = primary === 'rewardRedemption' ? 'rewardRedemptionApi' : primary\n return (DefaultMetricsScrapePorts as Record<string, number>)[key] ?? DefaultMetricsScrapePorts.producer\n}\n\n/**\n * The configuration that will be used throughout the CLI.\n * This is materialized after parsing the command-line arguments,\n * environment variables, and defaults.\n */\nlet configuration: Config\nlet skipInsecureConfirm = false\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction getConfiguration(): Config {\n return configuration\n}\n\nasync function promptForInsecureGenesisConfirmation(logger: ReturnType<typeof initLogger>) {\n if (!input.isTTY || !output.isTTY) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped because this session is not a TTY.')\n return\n }\n const rl = createInterface({ input, output })\n try {\n await rl.question('Insecure genesis reward wallet is active. Hit RETURN to continue.')\n } finally {\n rl.close()\n }\n}\n\nasync function getLocatorsFromConfig(actors: string[], configuration: Config) {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const existingConfig = configuration.actors.find(actor => actor.name === actorName)\n if (existingConfig) {\n actorConfigs.push(existingConfig)\n } else {\n const actorConfig = ActorConfigZod.loose().parse({ name: actorName })\n actorConfigs.push(actorConfig)\n }\n }\n\n const config = ConfigZod.parse({ ...configuration, actors: actorConfigs })\n\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const collision = detectDerivationPathCollisions(actors, configuration)\n if (collision) throw collision\n const walletReport = await initializeResolvedWalletReport(actors, configuration)\n logger.info(formatWalletReport(walletReport))\n const serviceName = actors.length === 1 ? `xl1-${actors[0]}` : 'xl1-cli'\n const context = await contextFromConfigWithoutLocator(config, logger, serviceName, version, defaultScrapePortForActors(actors))\n if (skipInsecureConfirm) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.')\n }\n const onInsecureGenesisConfirm = skipInsecureConfirm\n ? undefined\n : async () => await promptForInsecureGenesisConfirmation(logger)\n const locators = await locatorsFromConfig(context, config, onInsecureGenesisConfirm)\n\n const healthCheckPort = configuration.healthCheckPort ?? DEFAULT_HEALTH_CHECK_PORT\n const healthServer = healthCheckPort > 0 && context.statusReporter !== undefined\n ? await initHealthEndpoints({\n logger,\n port: healthCheckPort,\n readiness: orchestrator,\n statusMonitor: context.statusReporter,\n })\n : undefined\n\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n healthServer?.close()\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 await configMiddleware(argv, (config) => {\n configuration = config\n })\n skipInsecureConfirm = Boolean(argv['skip-insecure-confirm'])\n })\n .options(optionsFromGlobalZodRegistry())\n .wrap(y.terminalWidth())\n .command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(mempoolCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(producerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig)))\n .command(startCommand(getConfiguration, getLocatorsFromConfig))\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 'mnemonic': {\n type: 'string',\n description: 'Shared root mnemonic used by actors that do not define their own mnemonic.',\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 'skip-insecure-confirm': {\n type: 'boolean',\n description: 'Skip the interactive RETURN confirmation when the built-in dev mnemonic / insecure genesis reward wallet is active.',\n default: false,\n },\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import { getApiActor } from '@xyo-network/chain-api'\nimport { getBridgeActor } from '@xyo-network/chain-bridge'\nimport { getFinalizerActor } from '@xyo-network/chain-finalizer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type {\n ActorInstanceV3, GetLocatorsFromConfig, OrchestratorInstance,\n} from '@xyo-network/chain-orchestration'\nimport {\n ApiConfigZod,\n BridgeConfigZod,\n FinalizerConfigZod,\n MempoolConfigZod,\n ProducerConfigZod,\n RewardRedemptionConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getRewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type {\n ArgumentsCamelCase, Argv, CommandModule,\n} from 'yargs'\n\nimport { initLogger } from '../../initLogger.ts'\n\ninterface StartArgs {\n actors?: string[]\n}\n\nconst KNOWN_ACTORS = ['api', 'bridge', 'finalizer', 'mempool', 'producer', 'rewardRedemption'] as const\n\nconst BOOT_TIMEOUT_MS = 60_000\n\nfunction getActorsFromConfig(configuration: Config): string[] | undefined {\n const enabledActors = configuration.actors\n .filter(actor => actor.enabled !== false)\n .map(actor => actor.name)\n return enabledActors.length > 0 ? enabledActors : undefined\n}\n\nfunction getDefaultActors(): string[] {\n return ['api', 'producer', 'finalizer']\n}\n\nasync function buildActor(\n name: string,\n locator: ProviderFactoryLocatorInstance,\n): Promise<ActorInstanceV3> {\n switch (name) {\n case 'api': {\n const config = ApiConfigZod.parse(locator.context.config)\n return await getApiActor(config, locator)\n }\n case 'bridge': {\n const config = BridgeConfigZod.parse(locator.context.config)\n return await getBridgeActor(config, locator)\n }\n case 'mempool': {\n const config = MempoolConfigZod.parse(locator.context.config)\n return await getMempoolActor(config, locator)\n }\n case 'producer': {\n const config = ProducerConfigZod.parse(locator.context.config)\n return await getProducerActor(config, locator)\n }\n case 'rewardRedemption': {\n const config = RewardRedemptionConfigZod.parse(locator.context.config)\n return await getRewardRedemptionActor(config, locator)\n }\n case 'finalizer': {\n const config = FinalizerConfigZod.parse(locator.context.config)\n return await getFinalizerActor(config, locator)\n }\n default: {\n throw new Error(`Unknown actor: ${name}`)\n }\n }\n}\n\nasync function bootActors(\n requestedActors: string[],\n locators: Record<string, ProviderFactoryLocatorInstance>,\n orchestrator: OrchestratorInstance,\n configuration: Config,\n): Promise<void> {\n const startedAt = Date.now()\n const actors = await Promise.all(requestedActors.map(name => buildActor(name, locators[name])))\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n await orchestrator.whenReady(BOOT_TIMEOUT_MS)\n const ms = Date.now() - startedAt\n initLogger(configuration).info(`[xl1] system ready (${requestedActors.length} actor${requestedActors.length === 1 ? '' : 's'}, ${ms}ms)`)\n}\n\nexport function startCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: ['start [actors..]', '$0'],\n describe: 'Run a full XL1 Node',\n builder: (yargs: Argv) => {\n return yargs\n .positional('actors', {\n type: 'string',\n array: true,\n choices: KNOWN_ACTORS,\n description: 'Actors to start (e.g. xl1 start api producer or xl1 start api,producer)',\n coerce: (values: string[]) => values.flatMap(v => v.split(',')),\n })\n .option('actors', {\n type: 'array',\n string: true,\n choices: KNOWN_ACTORS,\n description: 'List of actors to start (e.g. --actors api producer finalizer). Defaults to api, producer, and finalizer.',\n })\n },\n handler: async (argv: ArgumentsCamelCase<StartArgs>) => {\n const configuration = getConfiguration()\n const requestedActors = argv.actors !== undefined && argv.actors.length > 0\n ? argv.actors\n : getActorsFromConfig(configuration) ?? getDefaultActors()\n const { locators, orchestrator } = await getLocatorsFromConfig(requestedActors, configuration)\n await bootActors(requestedActors, locators, orchestrator, configuration)\n },\n }\n}\n","import { delay } from '@xylabs/sdk-js'\nimport type { CommandModule } from 'yargs'\n\nexport function withDeprecationWarning(module: CommandModule): CommandModule {\n const { deprecated, handler } = module\n if (typeof deprecated === 'string') {\n return {\n ...module,\n handler: async (argv) => {\n console.warn(`[deprecated] ${deprecated}`)\n await delay(3000)\n return handler(argv)\n },\n }\n }\n return module\n}\n","/* eslint-disable no-irregular-whitespace, @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 { 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":["createDeepMerge","isDefined","ActorMnemonicNotAllowedError","assertNoActorMnemonics","ConfigFileNotFoundError","tryParseConfig","ConfigZod","isZodError","resolveConfig","deepMerge","createDeepMerge","arrayStrategy","coerceActorsArray","argv","actors","undefined","Array","isArray","entries","Object","numericEntries","map","key","value","Number","filter","isInteger","length","asArray","safeParseOrThrow","input","result","ConfigZod","safeParse","success","error","data","buildFinalConfig","configPath","config","parsedConfigFile","tryParseConfig","rootMnemonicFromFile","mnemonic","normalizedArgv","parsedConfigArgs","rootMnemonicFromArgs","mergedConfig","validated","resolveConfig","rootMnemonic","isDefined","configMiddleware","setConfiguration","finalConfig","assertNoActorMnemonics","console","log","JSON","stringify","process","exit","err","ConfigFileNotFoundError","message","ActorMnemonicNotAllowedError","isZodError","Error","stack","cause","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","stdin","input","stdout","output","createInterface","isDefined","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","contextFromConfigWithoutLocator","detectDerivationPathCollisions","formatWalletReport","initializeResolvedWalletReport","locatorsFromConfig","Orchestrator","initHealthEndpoints","producerCommand","rewardRedemptionCommand","ActorConfigZod","ConfigZod","DefaultMetricsScrapePorts","yargs","hideBin","getApiActor","getBridgeActor","getFinalizerActor","getMempoolActor","ApiConfigZod","BridgeConfigZod","FinalizerConfigZod","MempoolConfigZod","ProducerConfigZod","RewardRedemptionConfigZod","getProducerActor","getRewardRedemptionActor","KNOWN_ACTORS","BOOT_TIMEOUT_MS","getActorsFromConfig","configuration","enabledActors","actors","filter","actor","enabled","map","name","length","undefined","getDefaultActors","buildActor","locator","config","ApiConfigZod","parse","context","getApiActor","BridgeConfigZod","getBridgeActor","MempoolConfigZod","getMempoolActor","ProducerConfigZod","getProducerActor","RewardRedemptionConfigZod","getRewardRedemptionActor","FinalizerConfigZod","getFinalizerActor","Error","bootActors","requestedActors","locators","orchestrator","startedAt","Date","now","Promise","all","registerActor","start","whenReady","ms","initLogger","info","startCommand","getConfiguration","getLocatorsFromConfig","command","describe","builder","yargs","positional","type","array","choices","description","coerce","values","flatMap","v","split","option","string","handler","argv","delay","withDeprecationWarning","module","deprecated","handler","argv","console","warn","delay","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","DEFAULT_HEALTH_CHECK_PORT","defaultScrapePortForActors","actors","primary","key","DefaultMetricsScrapePorts","producer","configuration","skipInsecureConfirm","version","isDefined","__VERSION__","getConfiguration","promptForInsecureGenesisConfirmation","logger","input","isTTY","output","warn","rl","createInterface","question","close","getLocatorsFromConfig","actorConfigs","actorName","existingConfig","find","actor","name","push","actorConfig","ActorConfigZod","loose","parse","config","ConfigZod","initLogger","orchestrator","Orchestrator","create","collision","detectDerivationPathCollisions","walletReport","initializeResolvedWalletReport","info","formatWalletReport","serviceName","length","context","contextFromConfigWithoutLocator","onInsecureGenesisConfirm","undefined","locators","locatorsFromConfig","healthCheckPort","healthServer","statusReporter","initHealthEndpoints","port","readiness","statusMonitor","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configMiddleware","Boolean","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","withDeprecationWarning","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","producerCommand","rewardRedemptionCommand","startCommand","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":"AAqHA,wBAAsB,MAAM,kBA4D3B"}
1
+ {"version":3,"file":"runCLI.d.ts","sourceRoot":"","sources":["../../src/runCLI.ts"],"names":[],"mappings":"AAoIA,wBAAsB,MAAM,kBA4D3B"}
package/dist/node/xl1.mjs CHANGED
@@ -16,7 +16,7 @@ import { contextFromConfigWithoutLocator, detectDerivationPathCollisions, format
16
16
  import { initHealthEndpoints } from "@xyo-network/chain-orchestration-express";
17
17
  import { producerCommand } from "@xyo-network/chain-producer";
18
18
  import { rewardRedemptionCommand } from "@xyo-network/chain-reward-redemption";
19
- import { ActorConfigZod, ConfigZod as ConfigZod2 } from "@xyo-network/xl1-sdk";
19
+ import { ActorConfigZod, ConfigZod as ConfigZod2, DefaultMetricsScrapePorts } from "@xyo-network/xl1-sdk";
20
20
  import yargs from "yargs";
21
21
  import { hideBin } from "yargs/helpers";
22
22
 
@@ -280,9 +280,15 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
280
280
 
281
281
  // src/runCLI.ts
282
282
  var DEFAULT_HEALTH_CHECK_PORT = 9090;
283
+ function defaultScrapePortForActors(actors) {
284
+ const primary = actors[0];
285
+ const key = primary === "rewardRedemption" ? "rewardRedemptionApi" : primary;
286
+ return DefaultMetricsScrapePorts[key] ?? DefaultMetricsScrapePorts.producer;
287
+ }
288
+ __name(defaultScrapePortForActors, "defaultScrapePortForActors");
283
289
  var configuration;
284
290
  var skipInsecureConfirm = false;
285
- var version = isDefined3("1.21.0") ? "1.21.0" : "unknown";
291
+ var version = isDefined3("1.21.3") ? "1.21.3" : "unknown";
286
292
  function getConfiguration() {
287
293
  return configuration;
288
294
  }
@@ -328,7 +334,8 @@ async function getLocatorsFromConfig(actors, configuration2) {
328
334
  if (collision) throw collision;
329
335
  const walletReport = await initializeResolvedWalletReport(actors, configuration2);
330
336
  logger.info(formatWalletReport(walletReport));
331
- const context = await contextFromConfigWithoutLocator(config2, logger, "xl1-cli", version);
337
+ const serviceName = actors.length === 1 ? `xl1-${actors[0]}` : "xl1-cli";
338
+ const context = await contextFromConfigWithoutLocator(config2, logger, serviceName, version, defaultScrapePortForActors(actors));
332
339
  if (skipInsecureConfirm) {
333
340
  logger.warn("Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.");
334
341
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/start.ts","../../src/runCLI.ts","../../src/commands/start/startCommand.ts","../../src/initLogger.ts","../../src/commands/withDeprecationWarning.ts","../../src/configMiddleware.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.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 { stdin as input, stdout as output } from 'node:process'\nimport { createInterface } from 'node:readline/promises'\n\nimport { isDefined } from '@xylabs/sdk-js'\nimport { apiCommand } from '@xyo-network/chain-api'\nimport { bridgeCommand } from '@xyo-network/chain-bridge'\nimport { finalizerCommand } from '@xyo-network/chain-finalizer'\nimport { mempoolCommand } from '@xyo-network/chain-mempool'\nimport {\n contextFromConfigWithoutLocator, detectDerivationPathCollisions, formatWalletReport, initializeResolvedWalletReport,\n locatorsFromConfig, Orchestrator,\n} from '@xyo-network/chain-orchestration'\nimport { initHealthEndpoints } from '@xyo-network/chain-orchestration-express'\nimport { producerCommand } from '@xyo-network/chain-producer'\nimport { rewardRedemptionCommand } from '@xyo-network/chain-reward-redemption'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport { ActorConfigZod, ConfigZod } from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9090\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\nlet skipInsecureConfirm = false\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction getConfiguration(): Config {\n return configuration\n}\n\nasync function promptForInsecureGenesisConfirmation(logger: ReturnType<typeof initLogger>) {\n if (!input.isTTY || !output.isTTY) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped because this session is not a TTY.')\n return\n }\n const rl = createInterface({ input, output })\n try {\n await rl.question('Insecure genesis reward wallet is active. Hit RETURN to continue.')\n } finally {\n rl.close()\n }\n}\n\nasync function getLocatorsFromConfig(actors: string[], configuration: Config) {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const existingConfig = configuration.actors.find(actor => actor.name === actorName)\n if (existingConfig) {\n actorConfigs.push(existingConfig)\n } else {\n const actorConfig = ActorConfigZod.loose().parse({ name: actorName })\n actorConfigs.push(actorConfig)\n }\n }\n\n const config = ConfigZod.parse({ ...configuration, actors: actorConfigs })\n\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const collision = detectDerivationPathCollisions(actors, configuration)\n if (collision) throw collision\n const walletReport = await initializeResolvedWalletReport(actors, configuration)\n logger.info(formatWalletReport(walletReport))\n const context = await contextFromConfigWithoutLocator(config, logger, 'xl1-cli', version)\n if (skipInsecureConfirm) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.')\n }\n const onInsecureGenesisConfirm = skipInsecureConfirm\n ? undefined\n : async () => await promptForInsecureGenesisConfirmation(logger)\n const locators = await locatorsFromConfig(context, config, onInsecureGenesisConfirm)\n\n const healthCheckPort = configuration.healthCheckPort ?? DEFAULT_HEALTH_CHECK_PORT\n const healthServer = healthCheckPort > 0 && context.statusReporter !== undefined\n ? await initHealthEndpoints({\n logger,\n port: healthCheckPort,\n readiness: orchestrator,\n statusMonitor: context.statusReporter,\n })\n : undefined\n\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n healthServer?.close()\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 await configMiddleware(argv, (config) => {\n configuration = config\n })\n skipInsecureConfirm = Boolean(argv['skip-insecure-confirm'])\n })\n .options(optionsFromGlobalZodRegistry())\n .wrap(y.terminalWidth())\n .command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(mempoolCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(producerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig)))\n .command(startCommand(getConfiguration, getLocatorsFromConfig))\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 'mnemonic': {\n type: 'string',\n description: 'Shared root mnemonic used by actors that do not define their own mnemonic.',\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 'skip-insecure-confirm': {\n type: 'boolean',\n description: 'Skip the interactive RETURN confirmation when the built-in dev mnemonic / insecure genesis reward wallet is active.',\n default: false,\n },\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import { getApiActor } from '@xyo-network/chain-api'\nimport { getBridgeActor } from '@xyo-network/chain-bridge'\nimport { getFinalizerActor } from '@xyo-network/chain-finalizer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type {\n ActorInstanceV3, GetLocatorsFromConfig, OrchestratorInstance,\n} from '@xyo-network/chain-orchestration'\nimport {\n ApiConfigZod,\n BridgeConfigZod,\n FinalizerConfigZod,\n MempoolConfigZod,\n ProducerConfigZod,\n RewardRedemptionConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getRewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type {\n ArgumentsCamelCase, Argv, CommandModule,\n} from 'yargs'\n\nimport { initLogger } from '../../initLogger.ts'\n\ninterface StartArgs {\n actors?: string[]\n}\n\nconst KNOWN_ACTORS = ['api', 'bridge', 'finalizer', 'mempool', 'producer', 'rewardRedemption'] as const\n\nconst BOOT_TIMEOUT_MS = 60_000\n\nfunction getActorsFromConfig(configuration: Config): string[] | undefined {\n const enabledActors = configuration.actors\n .filter(actor => actor.enabled !== false)\n .map(actor => actor.name)\n return enabledActors.length > 0 ? enabledActors : undefined\n}\n\nfunction getDefaultActors(): string[] {\n return ['api', 'producer', 'finalizer']\n}\n\nasync function buildActor(\n name: string,\n locator: ProviderFactoryLocatorInstance,\n): Promise<ActorInstanceV3> {\n switch (name) {\n case 'api': {\n const config = ApiConfigZod.parse(locator.context.config)\n return await getApiActor(config, locator)\n }\n case 'bridge': {\n const config = BridgeConfigZod.parse(locator.context.config)\n return await getBridgeActor(config, locator)\n }\n case 'mempool': {\n const config = MempoolConfigZod.parse(locator.context.config)\n return await getMempoolActor(config, locator)\n }\n case 'producer': {\n const config = ProducerConfigZod.parse(locator.context.config)\n return await getProducerActor(config, locator)\n }\n case 'rewardRedemption': {\n const config = RewardRedemptionConfigZod.parse(locator.context.config)\n return await getRewardRedemptionActor(config, locator)\n }\n case 'finalizer': {\n const config = FinalizerConfigZod.parse(locator.context.config)\n return await getFinalizerActor(config, locator)\n }\n default: {\n throw new Error(`Unknown actor: ${name}`)\n }\n }\n}\n\nasync function bootActors(\n requestedActors: string[],\n locators: Record<string, ProviderFactoryLocatorInstance>,\n orchestrator: OrchestratorInstance,\n configuration: Config,\n): Promise<void> {\n const startedAt = Date.now()\n const actors = await Promise.all(requestedActors.map(name => buildActor(name, locators[name])))\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n await orchestrator.whenReady(BOOT_TIMEOUT_MS)\n const ms = Date.now() - startedAt\n initLogger(configuration).info(`[xl1] system ready (${requestedActors.length} actor${requestedActors.length === 1 ? '' : 's'}, ${ms}ms)`)\n}\n\nexport function startCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: ['start [actors..]', '$0'],\n describe: 'Run a full XL1 Node',\n builder: (yargs: Argv) => {\n return yargs\n .positional('actors', {\n type: 'string',\n array: true,\n choices: KNOWN_ACTORS,\n description: 'Actors to start (e.g. xl1 start api producer or xl1 start api,producer)',\n coerce: (values: string[]) => values.flatMap(v => v.split(',')),\n })\n .option('actors', {\n type: 'array',\n string: true,\n choices: KNOWN_ACTORS,\n description: 'List of actors to start (e.g. --actors api producer finalizer). Defaults to api, producer, and finalizer.',\n })\n },\n handler: async (argv: ArgumentsCamelCase<StartArgs>) => {\n const configuration = getConfiguration()\n const requestedActors = argv.actors !== undefined && argv.actors.length > 0\n ? argv.actors\n : getActorsFromConfig(configuration) ?? getDefaultActors()\n const { locators, orchestrator } = await getLocatorsFromConfig(requestedActors, configuration)\n await bootActors(requestedActors, locators, orchestrator, configuration)\n },\n }\n}\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 { delay } from '@xylabs/sdk-js'\nimport type { CommandModule } from 'yargs'\n\nexport function withDeprecationWarning(module: CommandModule): CommandModule {\n const { deprecated, handler } = module\n if (typeof deprecated === 'string') {\n return {\n ...module,\n handler: async (argv) => {\n console.warn(`[deprecated] ${deprecated}`)\n await delay(3000)\n return handler(argv)\n },\n }\n }\n return module\n}\n","import { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport {\n ActorMnemonicNotAllowedError,\n assertNoActorMnemonics,\n ConfigFileNotFoundError,\n tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport {\n ConfigZod, isZodError, resolveConfig,\n} from '@xyo-network/xl1-sdk'\n\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\ntype ConfigWithMnemonic = Config & { mnemonic?: string }\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` — an object keyed by string indices\n * rather than an array. Normalize that back into an array so ConfigZod's\n * `actors` array schema accepts it.\n */\nfunction coerceActorsArray(argv: Record<string, unknown>): Record<string, unknown> {\n const actors = argv.actors\n if (actors === undefined || Array.isArray(actors)) return argv\n if (typeof actors !== 'object' || actors === null) return argv\n const entries = Object.entries(actors as Record<string, unknown>)\n const numericEntries = entries\n .map(([key, value]) => [Number(key), value] as const)\n .filter(([key]) => Number.isInteger(key) && key >= 0)\n if (numericEntries.length !== entries.length) return argv\n const asArray: unknown[] = []\n for (const [key, value] of numericEntries) asArray[key] = value\n return { ...argv, actors: asArray }\n}\n\nfunction safeParseOrThrow(input: unknown): Config {\n const result = ConfigZod.safeParse(input)\n if (!result.success) throw result.error\n return result.data as Config\n}\n\nasync function buildFinalConfig(argv: Record<string, unknown>): Promise<ConfigWithMnemonic> {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) as ConfigWithMnemonic // Config file\n const rootMnemonicFromFile = typeof parsedConfigFile.mnemonic === 'string' ? parsedConfigFile.mnemonic : undefined\n const normalizedArgv = coerceActorsArray(argv)\n const parsedConfigArgs = ConfigZod.safeParse(normalizedArgv).data ?? {} // Command-line arguments & ENV VARs\n const rootMnemonicFromArgs = typeof normalizedArgv.mnemonic === 'string' ? normalizedArgv.mnemonic : undefined\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 = safeParseOrThrow(deepMerge(parsedConfigFile, parsedConfigArgs))\n const validated = safeParseOrThrow(resolveConfig(safeParseOrThrow(mergedConfig)))\n const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile\n return isDefined(rootMnemonic) ? { ...validated, mnemonic: rootMnemonic } : validated\n}\n\nexport async function configMiddleware(argv: Record<string, unknown>, setConfiguration: (config: Config) => void): Promise<void> {\n try {\n const finalConfig = await buildFinalConfig(argv)\n // Hard-fail if any actor was configured with its own mnemonic. Mnemonics\n // must live at the root; actors pick their wallet via accountPath.\n assertNoActorMnemonics(finalConfig)\n setConfiguration(finalConfig as Config)\n\n // Check if user wants to dump config and exit\n if (argv['dump-config']) {\n console.log(JSON.stringify(finalConfig, null, 2))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\n } catch (err) {\n if (err instanceof ConfigFileNotFoundError) {\n console.error(`${err.message}. Check the path passed to --config/-c and try again.`)\n } else if (err instanceof ActorMnemonicNotAllowedError) {\n console.error(err.message)\n } else if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n if (!(err instanceof ConfigFileNotFoundError) && !(err instanceof ActorMnemonicNotAllowedError)) {\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n }\n throw new Error('Invalid configuration', { cause: err })\n }\n}\n","/* eslint-disable no-irregular-whitespace, @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 { 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","stdin","input","stdout","output","createInterface","isDefined","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","contextFromConfigWithoutLocator","detectDerivationPathCollisions","formatWalletReport","initializeResolvedWalletReport","locatorsFromConfig","Orchestrator","initHealthEndpoints","producerCommand","rewardRedemptionCommand","ActorConfigZod","ConfigZod","yargs","hideBin","getApiActor","getBridgeActor","getFinalizerActor","getMempoolActor","ApiConfigZod","BridgeConfigZod","FinalizerConfigZod","MempoolConfigZod","ProducerConfigZod","RewardRedemptionConfigZod","getProducerActor","getRewardRedemptionActor","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","KNOWN_ACTORS","BOOT_TIMEOUT_MS","getActorsFromConfig","configuration","enabledActors","actors","filter","actor","enabled","map","name","length","undefined","getDefaultActors","buildActor","locator","config","ApiConfigZod","parse","context","getApiActor","BridgeConfigZod","getBridgeActor","MempoolConfigZod","getMempoolActor","ProducerConfigZod","getProducerActor","RewardRedemptionConfigZod","getRewardRedemptionActor","FinalizerConfigZod","getFinalizerActor","Error","bootActors","requestedActors","locators","orchestrator","startedAt","Date","now","Promise","all","registerActor","start","whenReady","ms","initLogger","info","startCommand","getConfiguration","getLocatorsFromConfig","command","describe","builder","yargs","positional","type","array","choices","description","coerce","values","flatMap","v","split","option","string","handler","argv","delay","withDeprecationWarning","module","deprecated","handler","argv","console","warn","delay","createDeepMerge","isDefined","ActorMnemonicNotAllowedError","assertNoActorMnemonics","ConfigFileNotFoundError","tryParseConfig","ConfigZod","isZodError","resolveConfig","deepMerge","createDeepMerge","arrayStrategy","coerceActorsArray","argv","actors","undefined","Array","isArray","entries","Object","numericEntries","map","key","value","Number","filter","isInteger","length","asArray","safeParseOrThrow","input","result","ConfigZod","safeParse","success","error","data","buildFinalConfig","configPath","config","parsedConfigFile","tryParseConfig","rootMnemonicFromFile","mnemonic","normalizedArgv","parsedConfigArgs","rootMnemonicFromArgs","mergedConfig","validated","resolveConfig","rootMnemonic","isDefined","configMiddleware","setConfiguration","finalConfig","assertNoActorMnemonics","console","log","JSON","stringify","process","exit","err","ConfigFileNotFoundError","message","ActorMnemonicNotAllowedError","isZodError","Error","stack","cause","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","DEFAULT_HEALTH_CHECK_PORT","configuration","skipInsecureConfirm","version","isDefined","__VERSION__","getConfiguration","promptForInsecureGenesisConfirmation","logger","input","isTTY","output","warn","rl","createInterface","question","close","getLocatorsFromConfig","actors","actorConfigs","actorName","existingConfig","find","actor","name","push","actorConfig","ActorConfigZod","loose","parse","config","ConfigZod","initLogger","orchestrator","Orchestrator","create","collision","detectDerivationPathCollisions","walletReport","initializeResolvedWalletReport","info","formatWalletReport","context","contextFromConfigWithoutLocator","onInsecureGenesisConfirm","undefined","locators","locatorsFromConfig","healthCheckPort","healthServer","statusReporter","initHealthEndpoints","port","readiness","statusMonitor","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configMiddleware","Boolean","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","withDeprecationWarning","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","producerCommand","rewardRedemptionCommand","startCommand","type","description","alias","default","help","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/start/startCommand.ts","../../src/initLogger.ts","../../src/commands/withDeprecationWarning.ts","../../src/configMiddleware.ts","../../src/images.ts","../../src/optionsFromGlobalZodRegistry.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 { stdin as input, stdout as output } from 'node:process'\nimport { createInterface } from 'node:readline/promises'\n\nimport { isDefined } from '@xylabs/sdk-js'\nimport { apiCommand } from '@xyo-network/chain-api'\nimport { bridgeCommand } from '@xyo-network/chain-bridge'\nimport { finalizerCommand } from '@xyo-network/chain-finalizer'\nimport { mempoolCommand } from '@xyo-network/chain-mempool'\nimport {\n contextFromConfigWithoutLocator, detectDerivationPathCollisions, formatWalletReport, initializeResolvedWalletReport,\n locatorsFromConfig, Orchestrator,\n} from '@xyo-network/chain-orchestration'\nimport { initHealthEndpoints } from '@xyo-network/chain-orchestration-express'\nimport { producerCommand } from '@xyo-network/chain-producer'\nimport { rewardRedemptionCommand } from '@xyo-network/chain-reward-redemption'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport {\n ActorConfigZod, ConfigZod, DefaultMetricsScrapePorts,\n} from '@xyo-network/xl1-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9090\n\n/**\n * Maps a CLI actor name to its registered Prometheus scrape port. The CLI-level\n * exporter (one per process) defaults to the port of the first requested actor\n * so that running, e.g., `xl1 start producer` and `xl1 start api` side-by-side\n * doesn't fight over a single shared default.\n */\nfunction defaultScrapePortForActors(actors: readonly string[]): number {\n const primary = actors[0]\n const key = primary === 'rewardRedemption' ? 'rewardRedemptionApi' : primary\n return (DefaultMetricsScrapePorts as Record<string, number>)[key] ?? DefaultMetricsScrapePorts.producer\n}\n\n/**\n * The configuration that will be used throughout the CLI.\n * This is materialized after parsing the command-line arguments,\n * environment variables, and defaults.\n */\nlet configuration: Config\nlet skipInsecureConfirm = false\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction getConfiguration(): Config {\n return configuration\n}\n\nasync function promptForInsecureGenesisConfirmation(logger: ReturnType<typeof initLogger>) {\n if (!input.isTTY || !output.isTTY) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped because this session is not a TTY.')\n return\n }\n const rl = createInterface({ input, output })\n try {\n await rl.question('Insecure genesis reward wallet is active. Hit RETURN to continue.')\n } finally {\n rl.close()\n }\n}\n\nasync function getLocatorsFromConfig(actors: string[], configuration: Config) {\n const actorConfigs: ActorConfig[] = []\n for (const actorName of actors) {\n const existingConfig = configuration.actors.find(actor => actor.name === actorName)\n if (existingConfig) {\n actorConfigs.push(existingConfig)\n } else {\n const actorConfig = ActorConfigZod.loose().parse({ name: actorName })\n actorConfigs.push(actorConfig)\n }\n }\n\n const config = ConfigZod.parse({ ...configuration, actors: actorConfigs })\n\n const logger = initLogger(configuration)\n const orchestrator = await Orchestrator.create({ logger })\n const collision = detectDerivationPathCollisions(actors, configuration)\n if (collision) throw collision\n const walletReport = await initializeResolvedWalletReport(actors, configuration)\n logger.info(formatWalletReport(walletReport))\n const serviceName = actors.length === 1 ? `xl1-${actors[0]}` : 'xl1-cli'\n const context = await contextFromConfigWithoutLocator(config, logger, serviceName, version, defaultScrapePortForActors(actors))\n if (skipInsecureConfirm) {\n logger.warn('Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.')\n }\n const onInsecureGenesisConfirm = skipInsecureConfirm\n ? undefined\n : async () => await promptForInsecureGenesisConfirmation(logger)\n const locators = await locatorsFromConfig(context, config, onInsecureGenesisConfirm)\n\n const healthCheckPort = configuration.healthCheckPort ?? DEFAULT_HEALTH_CHECK_PORT\n const healthServer = healthCheckPort > 0 && context.statusReporter !== undefined\n ? await initHealthEndpoints({\n logger,\n port: healthCheckPort,\n readiness: orchestrator,\n statusMonitor: context.statusReporter,\n })\n : undefined\n\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n healthServer?.close()\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 await configMiddleware(argv, (config) => {\n configuration = config\n })\n skipInsecureConfirm = Boolean(argv['skip-insecure-confirm'])\n })\n .options(optionsFromGlobalZodRegistry())\n .wrap(y.terminalWidth())\n .command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(mempoolCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(producerCommand(getConfiguration, getLocatorsFromConfig)))\n .command(withDeprecationWarning(rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig)))\n .command(startCommand(getConfiguration, getLocatorsFromConfig))\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 'mnemonic': {\n type: 'string',\n description: 'Shared root mnemonic used by actors that do not define their own mnemonic.',\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 'skip-insecure-confirm': {\n type: 'boolean',\n description: 'Skip the interactive RETURN confirmation when the built-in dev mnemonic / insecure genesis reward wallet is active.',\n default: false,\n },\n })\n .help()\n .alias('help', 'h')\n .version(version)\n .argv\n\n await argv\n}\n","import { getApiActor } from '@xyo-network/chain-api'\nimport { getBridgeActor } from '@xyo-network/chain-bridge'\nimport { getFinalizerActor } from '@xyo-network/chain-finalizer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type {\n ActorInstanceV3, GetLocatorsFromConfig, OrchestratorInstance,\n} from '@xyo-network/chain-orchestration'\nimport {\n ApiConfigZod,\n BridgeConfigZod,\n FinalizerConfigZod,\n MempoolConfigZod,\n ProducerConfigZod,\n RewardRedemptionConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getRewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type {\n ArgumentsCamelCase, Argv, CommandModule,\n} from 'yargs'\n\nimport { initLogger } from '../../initLogger.ts'\n\ninterface StartArgs {\n actors?: string[]\n}\n\nconst KNOWN_ACTORS = ['api', 'bridge', 'finalizer', 'mempool', 'producer', 'rewardRedemption'] as const\n\nconst BOOT_TIMEOUT_MS = 60_000\n\nfunction getActorsFromConfig(configuration: Config): string[] | undefined {\n const enabledActors = configuration.actors\n .filter(actor => actor.enabled !== false)\n .map(actor => actor.name)\n return enabledActors.length > 0 ? enabledActors : undefined\n}\n\nfunction getDefaultActors(): string[] {\n return ['api', 'producer', 'finalizer']\n}\n\nasync function buildActor(\n name: string,\n locator: ProviderFactoryLocatorInstance,\n): Promise<ActorInstanceV3> {\n switch (name) {\n case 'api': {\n const config = ApiConfigZod.parse(locator.context.config)\n return await getApiActor(config, locator)\n }\n case 'bridge': {\n const config = BridgeConfigZod.parse(locator.context.config)\n return await getBridgeActor(config, locator)\n }\n case 'mempool': {\n const config = MempoolConfigZod.parse(locator.context.config)\n return await getMempoolActor(config, locator)\n }\n case 'producer': {\n const config = ProducerConfigZod.parse(locator.context.config)\n return await getProducerActor(config, locator)\n }\n case 'rewardRedemption': {\n const config = RewardRedemptionConfigZod.parse(locator.context.config)\n return await getRewardRedemptionActor(config, locator)\n }\n case 'finalizer': {\n const config = FinalizerConfigZod.parse(locator.context.config)\n return await getFinalizerActor(config, locator)\n }\n default: {\n throw new Error(`Unknown actor: ${name}`)\n }\n }\n}\n\nasync function bootActors(\n requestedActors: string[],\n locators: Record<string, ProviderFactoryLocatorInstance>,\n orchestrator: OrchestratorInstance,\n configuration: Config,\n): Promise<void> {\n const startedAt = Date.now()\n const actors = await Promise.all(requestedActors.map(name => buildActor(name, locators[name])))\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n await orchestrator.whenReady(BOOT_TIMEOUT_MS)\n const ms = Date.now() - startedAt\n initLogger(configuration).info(`[xl1] system ready (${requestedActors.length} actor${requestedActors.length === 1 ? '' : 's'}, ${ms}ms)`)\n}\n\nexport function startCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: ['start [actors..]', '$0'],\n describe: 'Run a full XL1 Node',\n builder: (yargs: Argv) => {\n return yargs\n .positional('actors', {\n type: 'string',\n array: true,\n choices: KNOWN_ACTORS,\n description: 'Actors to start (e.g. xl1 start api producer or xl1 start api,producer)',\n coerce: (values: string[]) => values.flatMap(v => v.split(',')),\n })\n .option('actors', {\n type: 'array',\n string: true,\n choices: KNOWN_ACTORS,\n description: 'List of actors to start (e.g. --actors api producer finalizer). Defaults to api, producer, and finalizer.',\n })\n },\n handler: async (argv: ArgumentsCamelCase<StartArgs>) => {\n const configuration = getConfiguration()\n const requestedActors = argv.actors !== undefined && argv.actors.length > 0\n ? argv.actors\n : getActorsFromConfig(configuration) ?? getDefaultActors()\n const { locators, orchestrator } = await getLocatorsFromConfig(requestedActors, configuration)\n await bootActors(requestedActors, locators, orchestrator, configuration)\n },\n }\n}\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 { delay } from '@xylabs/sdk-js'\nimport type { CommandModule } from 'yargs'\n\nexport function withDeprecationWarning(module: CommandModule): CommandModule {\n const { deprecated, handler } = module\n if (typeof deprecated === 'string') {\n return {\n ...module,\n handler: async (argv) => {\n console.warn(`[deprecated] ${deprecated}`)\n await delay(3000)\n return handler(argv)\n },\n }\n }\n return module\n}\n","import { createDeepMerge, isDefined } from '@xylabs/sdk-js'\nimport {\n ActorMnemonicNotAllowedError,\n assertNoActorMnemonics,\n ConfigFileNotFoundError,\n tryParseConfig,\n} from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport {\n ConfigZod, isZodError, resolveConfig,\n} from '@xyo-network/xl1-sdk'\n\nconst deepMerge = createDeepMerge({ arrayStrategy: 'concat' })\ntype ConfigWithMnemonic = Config & { mnemonic?: string }\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` — an object keyed by string indices\n * rather than an array. Normalize that back into an array so ConfigZod's\n * `actors` array schema accepts it.\n */\nfunction coerceActorsArray(argv: Record<string, unknown>): Record<string, unknown> {\n const actors = argv.actors\n if (actors === undefined || Array.isArray(actors)) return argv\n if (typeof actors !== 'object' || actors === null) return argv\n const entries = Object.entries(actors as Record<string, unknown>)\n const numericEntries = entries\n .map(([key, value]) => [Number(key), value] as const)\n .filter(([key]) => Number.isInteger(key) && key >= 0)\n if (numericEntries.length !== entries.length) return argv\n const asArray: unknown[] = []\n for (const [key, value] of numericEntries) asArray[key] = value\n return { ...argv, actors: asArray }\n}\n\nfunction safeParseOrThrow(input: unknown): Config {\n const result = ConfigZod.safeParse(input)\n if (!result.success) throw result.error\n return result.data as Config\n}\n\nasync function buildFinalConfig(argv: Record<string, unknown>): Promise<ConfigWithMnemonic> {\n // Parse the various config sources\n const configPath = argv.config as string | undefined\n const parsedConfigFile = await tryParseConfig({ configPath }) as ConfigWithMnemonic // Config file\n const rootMnemonicFromFile = typeof parsedConfigFile.mnemonic === 'string' ? parsedConfigFile.mnemonic : undefined\n const normalizedArgv = coerceActorsArray(argv)\n const parsedConfigArgs = ConfigZod.safeParse(normalizedArgv).data ?? {} // Command-line arguments & ENV VARs\n const rootMnemonicFromArgs = typeof normalizedArgv.mnemonic === 'string' ? normalizedArgv.mnemonic : undefined\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 = safeParseOrThrow(deepMerge(parsedConfigFile, parsedConfigArgs))\n const validated = safeParseOrThrow(resolveConfig(safeParseOrThrow(mergedConfig)))\n const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile\n return isDefined(rootMnemonic) ? { ...validated, mnemonic: rootMnemonic } : validated\n}\n\nexport async function configMiddleware(argv: Record<string, unknown>, setConfiguration: (config: Config) => void): Promise<void> {\n try {\n const finalConfig = await buildFinalConfig(argv)\n // Hard-fail if any actor was configured with its own mnemonic. Mnemonics\n // must live at the root; actors pick their wallet via accountPath.\n assertNoActorMnemonics(finalConfig)\n setConfiguration(finalConfig as Config)\n\n // Check if user wants to dump config and exit\n if (argv['dump-config']) {\n console.log(JSON.stringify(finalConfig, null, 2))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\n } catch (err) {\n if (err instanceof ConfigFileNotFoundError) {\n console.error(`${err.message}. Check the path passed to --config/-c and try again.`)\n } else if (err instanceof ActorMnemonicNotAllowedError) {\n console.error(err.message)\n } else if (isZodError(err)) {\n console.error(`Zod error: ${err.message}`)\n } else {\n console.error(`Error parsing configuration: ${err}`)\n }\n if (!(err instanceof ConfigFileNotFoundError) && !(err instanceof ActorMnemonicNotAllowedError)) {\n console.error(`Stack: ${err instanceof Error ? err.stack : 'N/A'}`)\n }\n throw new Error('Invalid configuration', { cause: err })\n }\n}\n","/* eslint-disable no-irregular-whitespace, @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 { 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","stdin","input","stdout","output","createInterface","isDefined","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","contextFromConfigWithoutLocator","detectDerivationPathCollisions","formatWalletReport","initializeResolvedWalletReport","locatorsFromConfig","Orchestrator","initHealthEndpoints","producerCommand","rewardRedemptionCommand","ActorConfigZod","ConfigZod","DefaultMetricsScrapePorts","yargs","hideBin","getApiActor","getBridgeActor","getFinalizerActor","getMempoolActor","ApiConfigZod","BridgeConfigZod","FinalizerConfigZod","MempoolConfigZod","ProducerConfigZod","RewardRedemptionConfigZod","getProducerActor","getRewardRedemptionActor","Base","ConsoleLogger","isDefined","LogLevel","SilentLogger","initLogger","config","logger","log","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","KNOWN_ACTORS","BOOT_TIMEOUT_MS","getActorsFromConfig","configuration","enabledActors","actors","filter","actor","enabled","map","name","length","undefined","getDefaultActors","buildActor","locator","config","ApiConfigZod","parse","context","getApiActor","BridgeConfigZod","getBridgeActor","MempoolConfigZod","getMempoolActor","ProducerConfigZod","getProducerActor","RewardRedemptionConfigZod","getRewardRedemptionActor","FinalizerConfigZod","getFinalizerActor","Error","bootActors","requestedActors","locators","orchestrator","startedAt","Date","now","Promise","all","registerActor","start","whenReady","ms","initLogger","info","startCommand","getConfiguration","getLocatorsFromConfig","command","describe","builder","yargs","positional","type","array","choices","description","coerce","values","flatMap","v","split","option","string","handler","argv","delay","withDeprecationWarning","module","deprecated","handler","argv","console","warn","delay","createDeepMerge","isDefined","ActorMnemonicNotAllowedError","assertNoActorMnemonics","ConfigFileNotFoundError","tryParseConfig","ConfigZod","isZodError","resolveConfig","deepMerge","createDeepMerge","arrayStrategy","coerceActorsArray","argv","actors","undefined","Array","isArray","entries","Object","numericEntries","map","key","value","Number","filter","isInteger","length","asArray","safeParseOrThrow","input","result","ConfigZod","safeParse","success","error","data","buildFinalConfig","configPath","config","parsedConfigFile","tryParseConfig","rootMnemonicFromFile","mnemonic","normalizedArgv","parsedConfigArgs","rootMnemonicFromArgs","mergedConfig","validated","resolveConfig","rootMnemonic","isDefined","configMiddleware","setConfiguration","finalConfig","assertNoActorMnemonics","console","log","JSON","stringify","process","exit","err","ConfigFileNotFoundError","message","ActorMnemonicNotAllowedError","isZodError","Error","stack","cause","XL1LogoColorizedAscii","isUsageMeta","globalRegistry","usageMetaToOptions","meta","optionsFromGlobalZodRegistry","opts","schema","Object","values","globalRegistry","_map","isUsageMeta","hidden","title","DEFAULT_HEALTH_CHECK_PORT","defaultScrapePortForActors","actors","primary","key","DefaultMetricsScrapePorts","producer","configuration","skipInsecureConfirm","version","isDefined","__VERSION__","getConfiguration","promptForInsecureGenesisConfirmation","logger","input","isTTY","output","warn","rl","createInterface","question","close","getLocatorsFromConfig","actorConfigs","actorName","existingConfig","find","actor","name","push","actorConfig","ActorConfigZod","loose","parse","config","ConfigZod","initLogger","orchestrator","Orchestrator","create","collision","detectDerivationPathCollisions","walletReport","initializeResolvedWalletReport","info","formatWalletReport","serviceName","length","context","contextFromConfigWithoutLocator","onInsecureGenesisConfirm","undefined","locators","locatorsFromConfig","healthCheckPort","healthServer","statusReporter","initHealthEndpoints","port","readiness","statusMonitor","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","configMiddleware","Boolean","options","optionsFromGlobalZodRegistry","wrap","terminalWidth","command","withDeprecationWarning","apiCommand","bridgeCommand","finalizerCommand","mempoolCommand","producerCommand","rewardRedemptionCommand","startCommand","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.21.0",
3
+ "version": "1.21.3",
4
4
  "description": "XYO Layer One CLI Library",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -38,14 +38,14 @@
38
38
  "README.md"
39
39
  ],
40
40
  "dependencies": {
41
- "@xyo-network/chain-bridge": "~1.21.0",
42
- "@xyo-network/chain-api": "~1.21.0",
43
- "@xyo-network/chain-mempool": "~1.21.0",
44
- "@xyo-network/chain-finalizer": "~1.21.0",
45
- "@xyo-network/chain-producer": "~1.21.0",
46
- "@xyo-network/chain-orchestration-express": "~1.21.0",
47
- "@xyo-network/chain-reward-redemption": "~1.21.0",
48
- "@xyo-network/chain-orchestration": "~1.21.0"
41
+ "@xyo-network/chain-finalizer": "~1.21.3",
42
+ "@xyo-network/chain-bridge": "~1.21.3",
43
+ "@xyo-network/chain-api": "~1.21.3",
44
+ "@xyo-network/chain-orchestration": "~1.21.3",
45
+ "@xyo-network/chain-orchestration-express": "~1.21.3",
46
+ "@xyo-network/chain-mempool": "~1.21.3",
47
+ "@xyo-network/chain-producer": "~1.21.3",
48
+ "@xyo-network/chain-reward-redemption": "~1.21.3"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@bitauth/libauth": "~3.0.0",
@@ -56,14 +56,14 @@
56
56
  "@opentelemetry/context-async-hooks": "~2.7.1",
57
57
  "@opentelemetry/context-zone": "~2.7.1",
58
58
  "@opentelemetry/core": "~2.7.1",
59
- "@opentelemetry/exporter-prometheus": "~0.216.0",
60
- "@opentelemetry/exporter-trace-otlp-grpc": "~0.216.0",
61
- "@opentelemetry/exporter-trace-otlp-http": "~0.216.0",
59
+ "@opentelemetry/exporter-prometheus": "~0.217",
60
+ "@opentelemetry/exporter-trace-otlp-grpc": "~0.217",
61
+ "@opentelemetry/exporter-trace-otlp-http": "~0.217",
62
62
  "@opentelemetry/host-metrics": "~0.38.3",
63
- "@opentelemetry/instrumentation": "~0.216.0",
64
- "@opentelemetry/instrumentation-express": "~0.64.0",
65
- "@opentelemetry/instrumentation-http": "~0.216.0",
66
- "@opentelemetry/instrumentation-runtime-node": "~0.29.0",
63
+ "@opentelemetry/instrumentation": "~0.217",
64
+ "@opentelemetry/instrumentation-express": "~0.65",
65
+ "@opentelemetry/instrumentation-http": "~0.217",
66
+ "@opentelemetry/instrumentation-runtime-node": "~0.30",
67
67
  "@opentelemetry/resources": "~2.7.1",
68
68
  "@opentelemetry/sdk-metrics": "~2.7.1",
69
69
  "@opentelemetry/sdk-trace-base": "^2.7.1",
@@ -71,48 +71,48 @@
71
71
  "@scure/base": "~2.2.0",
72
72
  "@scure/bip39": "~2.2.0",
73
73
  "@types/yargs": "^17.0.35",
74
- "@xylabs/express": "^5.1.1",
75
- "@xylabs/fetch": "~5.1.1",
76
- "@xylabs/geo": "^5.1.1",
77
- "@xylabs/mongo": "^5.1.1",
78
- "@xylabs/sdk-js": "^5.1.1",
79
- "@xylabs/threads": "~5.1.1",
80
- "@xylabs/toolchain": "~7.13.7",
81
- "@xylabs/tsconfig": "~7.13.7",
82
- "@xyo-network/account": "~5.6.1",
83
- "@xyo-network/account-model": "~5.6.2",
84
- "@xyo-network/api": "~5.6.1",
85
- "@xyo-network/api-models": "~5.6.2",
86
- "@xyo-network/archivist-lmdb": "~5.6.3",
87
- "@xyo-network/archivist-mongodb": "~5.6.3",
88
- "@xyo-network/archivist-view": "~5.6.3",
74
+ "@xylabs/express": "^5.1.2",
75
+ "@xylabs/fetch": "~5.1.2",
76
+ "@xylabs/geo": "^5.1.2",
77
+ "@xylabs/mongo": "^5.1.2",
78
+ "@xylabs/sdk-js": "^5.1.2",
79
+ "@xylabs/threads": "~5.1.2",
80
+ "@xylabs/toolchain": "~7.13.15",
81
+ "@xylabs/tsconfig": "~7.13.15",
82
+ "@xyo-network/account": "~5.6.2",
83
+ "@xyo-network/account-model": "~5.6.3",
84
+ "@xyo-network/api": "~5.6.2",
85
+ "@xyo-network/api-models": "~5.6.3",
86
+ "@xyo-network/archivist-lmdb": "~5.6.4",
87
+ "@xyo-network/archivist-mongodb": "~5.6.4",
88
+ "@xyo-network/archivist-view": "~5.6.4",
89
89
  "@xyo-network/bios": "~7.3.0",
90
90
  "@xyo-network/bios-model": "~7.3.0",
91
- "@xyo-network/boundwitness-builder": "~5.6.1",
92
- "@xyo-network/boundwitness-model": "~5.6.2",
93
- "@xyo-network/boundwitness-validator": "~5.6.1",
94
- "@xyo-network/boundwitness-wrapper": "~5.6.1",
95
- "@xyo-network/config-payload-plugin": "~5.6.2",
96
- "@xyo-network/huri": "~5.6.1",
97
- "@xyo-network/manifest-model": "~5.6.2",
98
- "@xyo-network/payload-builder": "~5.6.1",
99
- "@xyo-network/payload-model": "~5.6.2",
100
- "@xyo-network/payload-plugin": "~5.6.2",
101
- "@xyo-network/payload-wrapper": "~5.6.1",
102
- "@xyo-network/query-payload-plugin": "~5.6.2",
103
- "@xyo-network/sdk-js": "^5.6.3",
104
- "@xyo-network/sdk-protocol-js": "~5.6.2",
91
+ "@xyo-network/boundwitness-builder": "~5.6.2",
92
+ "@xyo-network/boundwitness-model": "~5.6.3",
93
+ "@xyo-network/boundwitness-validator": "~5.6.2",
94
+ "@xyo-network/boundwitness-wrapper": "~5.6.2",
95
+ "@xyo-network/config-payload-plugin": "~5.6.3",
96
+ "@xyo-network/huri": "~5.6.2",
97
+ "@xyo-network/manifest-model": "~5.6.3",
98
+ "@xyo-network/payload-builder": "~5.6.2",
99
+ "@xyo-network/payload-model": "~5.6.3",
100
+ "@xyo-network/payload-plugin": "~5.6.3",
101
+ "@xyo-network/payload-wrapper": "~5.6.2",
102
+ "@xyo-network/query-payload-plugin": "~5.6.3",
103
+ "@xyo-network/sdk-js": "^5.6.4",
104
+ "@xyo-network/sdk-protocol-js": "~5.6.3",
105
105
  "@xyo-network/typechain": "^4.1.3",
106
- "@xyo-network/wallet": "~5.6.1",
107
- "@xyo-network/wallet-model": "^5.6.2",
108
- "@xyo-network/xl1-protocol-sdk": "~1.27.1",
109
- "@xyo-network/xl1-sdk": "^1.27.1",
106
+ "@xyo-network/wallet": "~5.6.2",
107
+ "@xyo-network/wallet-model": "^5.6.3",
108
+ "@xyo-network/xl1-protocol-sdk": "~1.28.5",
109
+ "@xyo-network/xl1-sdk": "^1.28.5",
110
110
  "ajv": "^8.20.0",
111
111
  "async-mutex": "^0.5.0",
112
112
  "bn.js": "^5.2.3",
113
113
  "body-parser": "~2.2.2",
114
114
  "buffer": "^6.0.3",
115
- "bullmq": "~5.76.5",
115
+ "bullmq": "~5.76.6",
116
116
  "bullmq-otel": "~1.3.1",
117
117
  "chalk": "^5.6.2",
118
118
  "compression": "~1.8.1",
@@ -148,105 +148,103 @@
148
148
  "winston": "~3.19.0",
149
149
  "winston-transport": "~4.9.0",
150
150
  "yargs": "~18.0.0",
151
- "yargs-parser": "~22.0.0",
152
151
  "zod": "~4.4.3"
153
152
  },
154
153
  "peerDependencies": {
155
- "@bitauth/libauth": ">=3.0.0 <3.1",
156
- "@metamask/json-rpc-engine": ">=10.3.0 <11",
157
- "@metamask/providers": ">=22.1.1 <23",
158
- "@metamask/utils": ">=11.11.0 <11.12",
159
- "@opentelemetry/api": ">=1.9.1 <2",
160
- "@opentelemetry/context-async-hooks": ">=2.7.1 <2.8",
161
- "@opentelemetry/context-zone": ">=2.7.1 <2.8",
162
- "@opentelemetry/core": ">=2.7.1 <2.8",
163
- "@opentelemetry/exporter-prometheus": ">=0.216.0 <0.217",
164
- "@opentelemetry/exporter-trace-otlp-grpc": ">=0.216.0 <0.217",
165
- "@opentelemetry/exporter-trace-otlp-http": ">=0.216.0 <0.217",
166
- "@opentelemetry/host-metrics": ">=0.38.3 <0.39",
167
- "@opentelemetry/instrumentation": ">=0.216.0 <0.217",
168
- "@opentelemetry/instrumentation-express": ">=0.64.0 <0.65",
169
- "@opentelemetry/instrumentation-http": ">=0.216.0 <0.217",
170
- "@opentelemetry/instrumentation-runtime-node": ">=0.29.0 <0.30",
171
- "@opentelemetry/resources": ">=2.7.1 <2.8",
172
- "@opentelemetry/sdk-metrics": ">=2.7.1 <2.8",
173
- "@opentelemetry/sdk-trace-base": ">=2.7.1 <3",
174
- "@opentelemetry/semantic-conventions": ">=1.40.0 <1.41",
175
- "@scure/base": ">=2.2.0 <2.3",
176
- "@scure/bip39": ">=2.2.0 <2.3",
177
- "@xylabs/express": ">=5.1.1 <6",
178
- "@xylabs/fetch": ">=5.1.1 <5.2",
179
- "@xylabs/geo": ">=5.1.1 <6",
180
- "@xylabs/mongo": ">=5.1.1 <6",
181
- "@xylabs/sdk-js": ">=5.1.1 <6",
182
- "@xylabs/threads": ">=5.1.1 <5.2",
183
- "@xyo-network/account": ">=5.6.1 <5.7",
184
- "@xyo-network/account-model": ">=5.6.2 <5.7",
185
- "@xyo-network/api": ">=5.6.1 <5.7",
186
- "@xyo-network/api-models": ">=5.6.2 <5.7",
187
- "@xyo-network/archivist-lmdb": ">=5.6.3 <5.7",
188
- "@xyo-network/archivist-mongodb": ">=5.6.3 <5.7",
189
- "@xyo-network/archivist-view": ">=5.6.3 <5.7",
190
- "@xyo-network/bios": ">=7.3.0 <7.4",
191
- "@xyo-network/bios-model": ">=7.3.0 <7.4",
192
- "@xyo-network/boundwitness-builder": ">=5.6.1 <5.7",
193
- "@xyo-network/boundwitness-model": ">=5.6.2 <5.7",
194
- "@xyo-network/boundwitness-validator": ">=5.6.1 <5.7",
195
- "@xyo-network/boundwitness-wrapper": ">=5.6.1 <5.7",
196
- "@xyo-network/config-payload-plugin": ">=5.6.2 <5.7",
197
- "@xyo-network/huri": ">=5.6.1 <5.7",
198
- "@xyo-network/manifest-model": ">=5.6.2 <5.7",
199
- "@xyo-network/payload-builder": ">=5.6.1 <5.7",
200
- "@xyo-network/payload-model": ">=5.6.2 <5.7",
201
- "@xyo-network/payload-plugin": ">=5.6.2 <5.7",
202
- "@xyo-network/payload-wrapper": ">=5.6.1 <5.7",
203
- "@xyo-network/query-payload-plugin": ">=5.6.2 <5.7",
204
- "@xyo-network/sdk-js": ">=5.6.3 <6",
205
- "@xyo-network/sdk-protocol-js": ">=5.6.2 <5.7",
206
- "@xyo-network/typechain": ">=4.1.3 <5",
207
- "@xyo-network/wallet": ">=5.6.1 <5.7",
208
- "@xyo-network/wallet-model": ">=5.6.2 <6",
209
- "@xyo-network/xl1-protocol-sdk": ">=1.27.1 <1.28",
210
- "@xyo-network/xl1-sdk": ">=1.27.1 <2",
211
- "ajv": ">=8.20.0 <9",
212
- "async-mutex": ">=0.5.0 <1",
213
- "bn.js": ">=5.2.3 <6",
214
- "body-parser": ">=2.2.2 <2.3",
215
- "buffer": ">=6.0.3 <7",
216
- "bullmq": ">=5.76.5 <5.77",
217
- "bullmq-otel": ">=1.3.1 <1.4",
218
- "chalk": ">=5.6.2 <6",
219
- "compression": ">=1.8.1 <1.9",
220
- "connect": ">=3.7.0 <4",
221
- "cors": ">=2.8.6 <2.9",
222
- "cosmiconfig": ">=9.0.1 <10",
223
- "debug": ">=4.4.3 <4.5",
224
- "dotenv": ">=17.4.2 <17.5",
225
- "ethers": ">=6.16.0 <7",
226
- "express": ">=5.2.1 <6",
227
- "express-mung": ">=0.5.1 <0.6",
228
- "hash-wasm": ">=4.12.0 <4.13",
229
- "http-status-codes": ">=2.3.0 <2.4",
230
- "idb": ">=8.0.3 <9",
231
- "ioredis": ">=5.10.1 <5.11",
232
- "lmdb": ">=3.5.4 <4",
233
- "lru-cache": ">=11.3.6 <12",
234
- "mapbox-gl": ">=3.23.1 <4",
235
- "mongodb": ">=7.2.0 <8",
236
- "observable-fns": ">=0.6.1 <0.7",
237
- "pako": ">=2.1.0 <3",
238
- "rollbar": ">=3.1.0 <4",
239
- "shallowequal": ">=1.1.0 <1.2",
240
- "store2": ">=2.14.4 <2.15",
241
- "uuid": ">=14.0.0 <14.1",
242
- "wasm-feature-detect": ">=1.8.0 <1.9",
243
- "web3-types": ">=1.10.0 <1.11",
244
- "webextension-polyfill": ">=0.12.0 <1",
245
- "winston": ">=3.19.0 <3.20",
246
- "winston-transport": ">=4.9.0 <4.10",
247
- "yargs": ">=18.0.0 <18.1",
248
- "yargs-parser": ">=22.0.0 <22.1",
249
- "zod": ">=4.4.3 <4.5"
154
+ "@bitauth/libauth": "~3.0",
155
+ "@metamask/json-rpc-engine": "^10.3",
156
+ "@metamask/providers": "^22.1",
157
+ "@metamask/utils": "~11.11",
158
+ "@opentelemetry/api": "^1.9",
159
+ "@opentelemetry/context-async-hooks": "~2.7",
160
+ "@opentelemetry/context-zone": "~2.7",
161
+ "@opentelemetry/core": "~2.7",
162
+ "@opentelemetry/exporter-prometheus": "~0.217",
163
+ "@opentelemetry/exporter-trace-otlp-grpc": "~0.217",
164
+ "@opentelemetry/exporter-trace-otlp-http": "~0.217",
165
+ "@opentelemetry/host-metrics": "~0.38",
166
+ "@opentelemetry/instrumentation": "~0.217",
167
+ "@opentelemetry/instrumentation-express": "~0.65",
168
+ "@opentelemetry/instrumentation-http": "~0.217",
169
+ "@opentelemetry/instrumentation-runtime-node": "~0.30",
170
+ "@opentelemetry/resources": "~2.7",
171
+ "@opentelemetry/sdk-metrics": "~2.7",
172
+ "@opentelemetry/sdk-trace-base": "^2.7",
173
+ "@opentelemetry/semantic-conventions": "~1.40",
174
+ "@scure/base": "~2.2",
175
+ "@scure/bip39": "~2.2",
176
+ "@xylabs/express": "^5.1",
177
+ "@xylabs/fetch": "~5.1",
178
+ "@xylabs/geo": "^5.1",
179
+ "@xylabs/mongo": "^5.1",
180
+ "@xylabs/sdk-js": "^5.1",
181
+ "@xylabs/threads": "~5.1",
182
+ "@xyo-network/account": "~5.6",
183
+ "@xyo-network/account-model": "~5.6",
184
+ "@xyo-network/api": "~5.6",
185
+ "@xyo-network/api-models": "~5.6",
186
+ "@xyo-network/archivist-lmdb": "~5.6",
187
+ "@xyo-network/archivist-mongodb": "~5.6",
188
+ "@xyo-network/archivist-view": "~5.6",
189
+ "@xyo-network/bios": "~7.3",
190
+ "@xyo-network/bios-model": "~7.3",
191
+ "@xyo-network/boundwitness-builder": "~5.6",
192
+ "@xyo-network/boundwitness-model": "~5.6",
193
+ "@xyo-network/boundwitness-validator": "~5.6",
194
+ "@xyo-network/boundwitness-wrapper": "~5.6",
195
+ "@xyo-network/config-payload-plugin": "~5.6",
196
+ "@xyo-network/huri": "~5.6",
197
+ "@xyo-network/manifest-model": "~5.6",
198
+ "@xyo-network/payload-builder": "~5.6",
199
+ "@xyo-network/payload-model": "~5.6",
200
+ "@xyo-network/payload-plugin": "~5.6",
201
+ "@xyo-network/payload-wrapper": "~5.6",
202
+ "@xyo-network/query-payload-plugin": "~5.6",
203
+ "@xyo-network/sdk-js": "^5.6",
204
+ "@xyo-network/sdk-protocol-js": "~5.6",
205
+ "@xyo-network/typechain": "^4.1",
206
+ "@xyo-network/wallet": "~5.6",
207
+ "@xyo-network/wallet-model": "^5.6",
208
+ "@xyo-network/xl1-protocol-sdk": "~1.28",
209
+ "@xyo-network/xl1-sdk": "^1.28",
210
+ "ajv": "^8.20",
211
+ "async-mutex": "^0.5",
212
+ "bn.js": "^5.2",
213
+ "body-parser": "~2.2",
214
+ "buffer": "^6.0",
215
+ "bullmq": "~5.76",
216
+ "bullmq-otel": "~1.3",
217
+ "chalk": "^5.6",
218
+ "compression": "~1.8",
219
+ "connect": "^3.7",
220
+ "cors": "~2.8",
221
+ "cosmiconfig": "^9.0",
222
+ "debug": "~4.4",
223
+ "dotenv": "~17.4",
224
+ "ethers": "^6.16",
225
+ "express": "^5.2",
226
+ "express-mung": "~0.5",
227
+ "hash-wasm": "~4.12",
228
+ "http-status-codes": "~2.3",
229
+ "idb": "^8.0",
230
+ "ioredis": "~5.10",
231
+ "lmdb": "^3.5",
232
+ "lru-cache": "^11.3",
233
+ "mapbox-gl": "^3.23",
234
+ "mongodb": "^7.2",
235
+ "observable-fns": "~0.6",
236
+ "pako": "^2.1",
237
+ "rollbar": "^3.1",
238
+ "shallowequal": "~1.1",
239
+ "store2": "~2.14",
240
+ "uuid": "~14.0",
241
+ "wasm-feature-detect": "~1.8",
242
+ "web3-types": "~1.10",
243
+ "webextension-polyfill": "^0.12",
244
+ "winston": "~3.19",
245
+ "winston-transport": "~4.9",
246
+ "yargs": "~18.0",
247
+ "zod": "~4.4"
250
248
  },
251
249
  "engines": {
252
250
  "node": ">=24"