@xyo-network/xl1-cli-lib 2.0.17 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/commands/start/startCommand.d.ts +2 -3
- package/dist/node/commands/start/startCommand.d.ts.map +1 -1
- package/dist/node/configMiddleware.d.ts +2 -2
- package/dist/node/configMiddleware.d.ts.map +1 -1
- package/dist/node/dumpProviders.d.ts.map +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.mjs +67 -57
- package/dist/node/index.mjs.map +4 -4
- package/dist/node/initLogger.d.ts +2 -2
- package/dist/node/initLogger.d.ts.map +1 -1
- package/dist/node/{runCLI.d.ts → runCli.d.ts} +1 -1
- package/dist/node/runCli.d.ts.map +1 -0
- package/dist/node/xl1.mjs +71 -59
- package/dist/node/xl1.mjs.map +4 -4
- package/package.json +60 -58
- package/dist/node/runCLI.d.ts.map +0 -1
package/dist/node/xl1.mjs
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
// src/start.ts
|
|
2
2
|
import { config } from "dotenv";
|
|
3
3
|
|
|
4
|
-
// src/
|
|
4
|
+
// src/runCli.ts
|
|
5
5
|
import { stdin as input, stdout as output } from "node:process";
|
|
6
6
|
import { createInterface } from "node:readline/promises";
|
|
7
7
|
import { isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
8
8
|
import { apiCommand } from "@xyo-network/chain-api";
|
|
9
9
|
import { bridgeCommand } from "@xyo-network/chain-bridge";
|
|
10
10
|
import { finalizerCommand } from "@xyo-network/chain-finalizer";
|
|
11
|
+
import { indexerCommand } from "@xyo-network/chain-indexer";
|
|
11
12
|
import { mempoolCommand } from "@xyo-network/chain-mempool";
|
|
12
13
|
import {
|
|
13
14
|
contextFromConfigWithoutLocator,
|
|
@@ -15,11 +16,11 @@ import {
|
|
|
15
16
|
formatWalletReport,
|
|
16
17
|
initializeResolvedWalletReport,
|
|
17
18
|
locatorsFromConfig,
|
|
18
|
-
Orchestrator
|
|
19
|
+
Orchestrator,
|
|
20
|
+
stripOrchestrationOnlyConnections as stripOrchestrationOnlyConnections2
|
|
19
21
|
} from "@xyo-network/chain-orchestration";
|
|
20
22
|
import { initHealthEndpoints } from "@xyo-network/chain-orchestration-express";
|
|
21
23
|
import { producerCommand } from "@xyo-network/chain-producer";
|
|
22
|
-
import { publisherCommand } from "@xyo-network/chain-publisher";
|
|
23
24
|
import { rewardRedemptionCommand } from "@xyo-network/chain-reward-redemption";
|
|
24
25
|
import {
|
|
25
26
|
ActorConfigZod,
|
|
@@ -34,18 +35,10 @@ import { z } from "zod/mini";
|
|
|
34
35
|
import { getApiActor } from "@xyo-network/chain-api";
|
|
35
36
|
import { getBridgeActor } from "@xyo-network/chain-bridge";
|
|
36
37
|
import { getFinalizerActor } from "@xyo-network/chain-finalizer";
|
|
38
|
+
import { getIndexerActor } from "@xyo-network/chain-indexer";
|
|
37
39
|
import { getMempoolActor } from "@xyo-network/chain-mempool";
|
|
38
|
-
import {
|
|
39
|
-
ApiConfigZod,
|
|
40
|
-
BridgeConfigZod,
|
|
41
|
-
FinalizerConfigZod,
|
|
42
|
-
MempoolConfigZod,
|
|
43
|
-
ProducerConfigZod,
|
|
44
|
-
PublisherConfigZod,
|
|
45
|
-
RewardRedemptionConfigZod
|
|
46
|
-
} from "@xyo-network/chain-orchestration";
|
|
40
|
+
import { buildActorFromConfiguration } from "@xyo-network/chain-orchestration";
|
|
47
41
|
import { getProducerActor } from "@xyo-network/chain-producer";
|
|
48
|
-
import { getPublisherActor } from "@xyo-network/chain-publisher";
|
|
49
42
|
import { getRewardRedemptionActor } from "@xyo-network/chain-reward-redemption";
|
|
50
43
|
|
|
51
44
|
// src/initLogger.ts
|
|
@@ -73,7 +66,7 @@ var initLogger = (config2) => {
|
|
|
73
66
|
};
|
|
74
67
|
|
|
75
68
|
// src/commands/start/startCommand.ts
|
|
76
|
-
var KNOWN_ACTORS = ["api", "bridge", "finalizer", "
|
|
69
|
+
var KNOWN_ACTORS = ["api", "bridge", "finalizer", "indexer", "mempool", "producer", "rewardRedemption"];
|
|
77
70
|
var BOOT_TIMEOUT_MS = 6e4;
|
|
78
71
|
function getActorsFromConfig(configuration2) {
|
|
79
72
|
const enabledActors = configuration2.actors.filter((actor) => actor.enabled !== false).map((actor) => actor.name);
|
|
@@ -82,35 +75,28 @@ function getActorsFromConfig(configuration2) {
|
|
|
82
75
|
function getDefaultActors() {
|
|
83
76
|
return ["api", "producer", "finalizer"];
|
|
84
77
|
}
|
|
85
|
-
async function buildActor(name, locator) {
|
|
78
|
+
async function buildActor(name, locator, configuration2) {
|
|
86
79
|
switch (name) {
|
|
87
80
|
case "api": {
|
|
88
|
-
|
|
89
|
-
return await getApiActor(config2, locator);
|
|
81
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getApiActor);
|
|
90
82
|
}
|
|
91
83
|
case "bridge": {
|
|
92
|
-
|
|
93
|
-
return await getBridgeActor(config2, locator);
|
|
84
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getBridgeActor);
|
|
94
85
|
}
|
|
95
86
|
case "mempool": {
|
|
96
|
-
|
|
97
|
-
return await getMempoolActor(config2, locator);
|
|
87
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getMempoolActor);
|
|
98
88
|
}
|
|
99
89
|
case "producer": {
|
|
100
|
-
|
|
101
|
-
return await getProducerActor(config2, locator);
|
|
90
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getProducerActor);
|
|
102
91
|
}
|
|
103
92
|
case "rewardRedemption": {
|
|
104
|
-
|
|
105
|
-
return await getRewardRedemptionActor(config2, locator);
|
|
93
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getRewardRedemptionActor);
|
|
106
94
|
}
|
|
107
95
|
case "finalizer": {
|
|
108
|
-
|
|
109
|
-
return await getFinalizerActor(config2, locator);
|
|
96
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getFinalizerActor);
|
|
110
97
|
}
|
|
111
|
-
case "
|
|
112
|
-
|
|
113
|
-
return await getPublisherActor(config2, locator);
|
|
98
|
+
case "indexer": {
|
|
99
|
+
return await buildActorFromConfiguration(name, configuration2, locator, getIndexerActor);
|
|
114
100
|
}
|
|
115
101
|
default: {
|
|
116
102
|
throw new Error(`Unknown actor: ${name}`);
|
|
@@ -119,7 +105,7 @@ async function buildActor(name, locator) {
|
|
|
119
105
|
}
|
|
120
106
|
async function bootActors(requestedActors, locators, orchestrator, configuration2) {
|
|
121
107
|
const startedAt = Date.now();
|
|
122
|
-
const actors = await Promise.all(requestedActors.map((name) => buildActor(name, locators[name])));
|
|
108
|
+
const actors = await Promise.all(requestedActors.map((name) => buildActor(name, locators[name], configuration2)));
|
|
123
109
|
for (const actor of actors) {
|
|
124
110
|
await orchestrator.registerActor(actor);
|
|
125
111
|
}
|
|
@@ -178,6 +164,8 @@ import {
|
|
|
178
164
|
ActorMnemonicNotAllowedError,
|
|
179
165
|
assertNoActorMnemonics,
|
|
180
166
|
ConfigFileNotFoundError,
|
|
167
|
+
finalizeConfig,
|
|
168
|
+
stripOrchestrationOnlyConnections,
|
|
181
169
|
tryParseConfig
|
|
182
170
|
} from "@xyo-network/chain-orchestration";
|
|
183
171
|
import {
|
|
@@ -218,7 +206,7 @@ function coerceActorsArray(argv) {
|
|
|
218
206
|
if (actors === void 0 || Array.isArray(actors)) return argv;
|
|
219
207
|
if (typeof actors !== "object" || actors === null) return argv;
|
|
220
208
|
const entries = Object.entries(actors);
|
|
221
|
-
const numericEntries = entries.map(([key, value]) => [Number(key), value]).filter(([key]) => Number.
|
|
209
|
+
const numericEntries = entries.map(([key, value]) => [Number(key), value]).filter(([key]) => Number.isSafeInteger(key) && key >= 0);
|
|
222
210
|
if (numericEntries.length !== entries.length) return argv;
|
|
223
211
|
const asArray = [];
|
|
224
212
|
for (const [key, value] of numericEntries) asArray[key] = value;
|
|
@@ -231,22 +219,45 @@ function safeParseOrThrow(input2) {
|
|
|
231
219
|
}
|
|
232
220
|
async function buildFinalConfig(argv) {
|
|
233
221
|
const configPath = argv.config;
|
|
234
|
-
const
|
|
235
|
-
const rootMnemonicFromFile = typeof
|
|
222
|
+
const parsedConfigFileRaw = await tryParseConfig({ configPath });
|
|
223
|
+
const rootMnemonicFromFile = typeof parsedConfigFileRaw.mnemonic === "string" ? parsedConfigFileRaw.mnemonic : void 0;
|
|
236
224
|
const normalizedArgv = coerceActorsArray(argv);
|
|
237
|
-
const
|
|
225
|
+
const argsForSdk = stripOrchestrationOnlyConnections(normalizedArgv);
|
|
226
|
+
const parsedConfigArgs = ConfigZod.safeParse(argsForSdk).data ?? {};
|
|
238
227
|
const rootMnemonicFromArgs = typeof normalizedArgv.mnemonic === "string" ? normalizedArgv.mnemonic : void 0;
|
|
239
|
-
const
|
|
240
|
-
|
|
228
|
+
const parsedFileRecord = parsedConfigFileRaw;
|
|
229
|
+
let fileForMerge = parsedFileRecord;
|
|
230
|
+
const argvActors = normalizedArgv.actors;
|
|
231
|
+
if (Array.isArray(argvActors) && argvActors.length > 0) {
|
|
232
|
+
const { actors: _dropped, ...rest } = parsedFileRecord;
|
|
233
|
+
fileForMerge = rest;
|
|
234
|
+
}
|
|
235
|
+
const rawMerged = deepMerge(fileForMerge, parsedConfigArgs);
|
|
236
|
+
const mergedForSdk = stripOrchestrationOnlyConnections(rawMerged);
|
|
237
|
+
const mergedConfig = safeParseOrThrow(mergedForSdk);
|
|
241
238
|
const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile;
|
|
242
|
-
|
|
239
|
+
const finalized = finalizeConfig({
|
|
240
|
+
...mergedConfig,
|
|
241
|
+
...isDefined2(rootMnemonic) && { mnemonic: rootMnemonic }
|
|
242
|
+
});
|
|
243
|
+
const strippedForResolve = stripOrchestrationOnlyConnections(finalized);
|
|
244
|
+
const preResolve = safeParseOrThrow(strippedForResolve);
|
|
245
|
+
const resolved = resolveConfig(preResolve);
|
|
246
|
+
const strippedResolved = stripOrchestrationOnlyConnections(resolved);
|
|
247
|
+
const validated = safeParseOrThrow(strippedResolved);
|
|
248
|
+
const toFinalize = {
|
|
249
|
+
...validated,
|
|
250
|
+
...isDefined2(rootMnemonic) && { mnemonic: rootMnemonic }
|
|
251
|
+
};
|
|
252
|
+
const finalWithConnections = finalizeConfig(toFinalize);
|
|
253
|
+
return finalWithConnections;
|
|
243
254
|
}
|
|
244
255
|
async function configMiddleware(argv, setConfiguration) {
|
|
245
256
|
try {
|
|
246
257
|
const finalConfig = await buildFinalConfig(argv);
|
|
247
258
|
assertNoActorMnemonics(finalConfig);
|
|
248
259
|
setConfiguration(finalConfig);
|
|
249
|
-
if (argv["dump-config"]) {
|
|
260
|
+
if (argv["dump-config"] === true) {
|
|
250
261
|
const withSecrets = Boolean(argv["with-secrets"]);
|
|
251
262
|
const output2 = withSecrets ? finalConfig : redactConfig(finalConfig);
|
|
252
263
|
console.log(JSON.stringify(output2, null, 2));
|
|
@@ -260,7 +271,7 @@ async function configMiddleware(argv, setConfiguration) {
|
|
|
260
271
|
} else if (isZodError(err)) {
|
|
261
272
|
console.error(`Zod error: ${err.message}`);
|
|
262
273
|
} else {
|
|
263
|
-
console.error(`Error parsing configuration: ${err}`);
|
|
274
|
+
console.error(`Error parsing configuration: ${String(err)}`);
|
|
264
275
|
}
|
|
265
276
|
if (!(err instanceof ConfigFileNotFoundError) && !(err instanceof ActorMnemonicNotAllowedError)) {
|
|
266
277
|
console.error(`Stack: ${err instanceof Error ? err.stack : "N/A"}`);
|
|
@@ -271,7 +282,6 @@ async function configMiddleware(argv, setConfiguration) {
|
|
|
271
282
|
|
|
272
283
|
// src/dumpProviders.ts
|
|
273
284
|
var CANONICAL_ACTOR_ORDER = [
|
|
274
|
-
"_root",
|
|
275
285
|
"producer",
|
|
276
286
|
"finalizer",
|
|
277
287
|
"api",
|
|
@@ -282,8 +292,7 @@ var CANONICAL_ACTOR_ORDER = [
|
|
|
282
292
|
function enumerateLocator(locator) {
|
|
283
293
|
const collapsed = /* @__PURE__ */ new Map();
|
|
284
294
|
const registry = locator.registry;
|
|
285
|
-
for (const moniker of Object.
|
|
286
|
-
const factories = registry[moniker];
|
|
295
|
+
for (const [moniker, factories] of Object.entries(registry)) {
|
|
287
296
|
if (!factories) continue;
|
|
288
297
|
for (const factory of factories) {
|
|
289
298
|
const f = factory;
|
|
@@ -305,7 +314,7 @@ function enumerateLocator(locator) {
|
|
|
305
314
|
}
|
|
306
315
|
}
|
|
307
316
|
}
|
|
308
|
-
return
|
|
317
|
+
return collapsed.values().toArray().toSorted((a, b) => a.moniker.localeCompare(b.moniker) || a.providerName.localeCompare(b.providerName));
|
|
309
318
|
}
|
|
310
319
|
function buildOwnerIndex(perActor) {
|
|
311
320
|
const monikerOwners = /* @__PURE__ */ new Map();
|
|
@@ -322,7 +331,7 @@ function buildOwnerIndex(perActor) {
|
|
|
322
331
|
return monikerOwners;
|
|
323
332
|
}
|
|
324
333
|
function renderDuplicatesSummary(monikerOwners) {
|
|
325
|
-
const duplicates = [...monikerOwners
|
|
334
|
+
const duplicates = [...monikerOwners].filter(([, owners]) => owners.size > 1).map(([moniker, owners]) => ({ moniker, owners: [...owners].toSorted((a, b) => a.localeCompare(b)).map(formatGroupForDisplay) })).toSorted((a, b) => a.moniker.localeCompare(b.moniker));
|
|
326
335
|
if (duplicates.length === 0) return [];
|
|
327
336
|
const lines = ["Duplicate monikers (registered by more than one locator):"];
|
|
328
337
|
for (const { moniker, owners } of duplicates) {
|
|
@@ -333,8 +342,7 @@ function renderDuplicatesSummary(monikerOwners) {
|
|
|
333
342
|
}
|
|
334
343
|
function groupActorsBySharedRegistry(locators) {
|
|
335
344
|
const groups = [];
|
|
336
|
-
for (const actorName of Object.
|
|
337
|
-
const locator = locators[actorName];
|
|
345
|
+
for (const [actorName, locator] of Object.entries(locators)) {
|
|
338
346
|
const existing = groups.find((g) => g.registry === locator.registry);
|
|
339
347
|
if (existing) {
|
|
340
348
|
existing.actorNames.push(actorName);
|
|
@@ -349,14 +357,14 @@ function groupActorsBySharedRegistry(locators) {
|
|
|
349
357
|
return groups;
|
|
350
358
|
}
|
|
351
359
|
function groupId(actorNames) {
|
|
352
|
-
return
|
|
360
|
+
return actorNames.toSorted((a, b) => a.localeCompare(b)).join(",");
|
|
353
361
|
}
|
|
354
362
|
function formatGroupForDisplay(groupKey) {
|
|
355
363
|
const members = groupKey.split(",");
|
|
356
364
|
return members.length === 1 ? members[0] : `(${members.join(", ")})`;
|
|
357
365
|
}
|
|
358
366
|
function renderGroupSection(actorNames, entries, monikerOwners) {
|
|
359
|
-
const sortedActors =
|
|
367
|
+
const sortedActors = actorNames.toSorted((a, b) => a.localeCompare(b));
|
|
360
368
|
const ownGroupKey = groupId(sortedActors);
|
|
361
369
|
const heading = sortedActors.length === 1 ? `Providers for actor: ${sortedActors[0]} (${entries.length} registered)` : `Providers shared by actors: ${sortedActors.join(", ")} (${entries.length} registered)`;
|
|
362
370
|
const lines = [heading];
|
|
@@ -369,7 +377,7 @@ function renderGroupSection(actorNames, entries, monikerOwners) {
|
|
|
369
377
|
const isLast = i === entries.length - 1;
|
|
370
378
|
const branch = isLast ? "\u2514\u2500\u2500" : "\u251C\u2500\u2500";
|
|
371
379
|
const owners = monikerOwners.get(entry.moniker) ?? /* @__PURE__ */ new Set();
|
|
372
|
-
const otherOwners = [...owners].filter((o) => o !== ownGroupKey).toSorted().map(formatGroupForDisplay);
|
|
380
|
+
const otherOwners = [...owners].filter((o) => o !== ownGroupKey).toSorted((a, b) => a.localeCompare(b)).map(formatGroupForDisplay);
|
|
373
381
|
const dupNote = otherOwners.length > 0 ? ` \u26A0 also in: ${otherOwners.join(", ")}` : "";
|
|
374
382
|
const depsNote = entry.dependencies.length > 0 ? `, deps: [${entry.dependencies.join(", ")}]` : "";
|
|
375
383
|
const countNote = entry.count > 1 ? ` (\xD7${entry.count})` : "";
|
|
@@ -395,7 +403,7 @@ function formatProviderTree(locators) {
|
|
|
395
403
|
});
|
|
396
404
|
const lines = ["XL1 Provider Dump", "=================", ""];
|
|
397
405
|
for (const g of orderedGroups) {
|
|
398
|
-
lines.push(...renderGroupSection(g.actorNames.toSorted(), perGroup.get(g.key) ?? [], monikerOwners));
|
|
406
|
+
lines.push(...renderGroupSection(g.actorNames.toSorted((a, b) => a.localeCompare(b)), perGroup.get(g.key) ?? [], monikerOwners));
|
|
399
407
|
}
|
|
400
408
|
lines.push(...renderDuplicatesSummary(monikerOwners));
|
|
401
409
|
return lines.join("\n");
|
|
@@ -431,14 +439,14 @@ var optionsFromGlobalZodRegistry = () => {
|
|
|
431
439
|
const opts = {};
|
|
432
440
|
for (const schema of Object.values(globalRegistry._map)) {
|
|
433
441
|
if (isUsageMeta(schema)) {
|
|
434
|
-
if (schema.hidden) continue;
|
|
442
|
+
if (schema.hidden === true) continue;
|
|
435
443
|
opts[schema.title] = usageMetaToOptions(schema);
|
|
436
444
|
}
|
|
437
445
|
}
|
|
438
446
|
return opts;
|
|
439
447
|
};
|
|
440
448
|
|
|
441
|
-
// src/
|
|
449
|
+
// src/runCli.ts
|
|
442
450
|
var DEFAULT_HEALTH_CHECK_PORT = 9099;
|
|
443
451
|
function defaultScrapePortForActors(actors) {
|
|
444
452
|
const primary = actors[0];
|
|
@@ -448,7 +456,7 @@ function defaultScrapePortForActors(actors) {
|
|
|
448
456
|
var configuration;
|
|
449
457
|
var skipInsecureConfirm = false;
|
|
450
458
|
var dumpProviders = false;
|
|
451
|
-
var version = isDefined3("
|
|
459
|
+
var version = isDefined3("3.0.0") ? "3.0.0" : "unknown";
|
|
452
460
|
function getConfiguration() {
|
|
453
461
|
return configuration;
|
|
454
462
|
}
|
|
@@ -475,7 +483,9 @@ async function getLocatorsFromConfig(actors, configuration2) {
|
|
|
475
483
|
actorConfigs.push(actorConfig);
|
|
476
484
|
}
|
|
477
485
|
}
|
|
478
|
-
const
|
|
486
|
+
const fullConfig = { ...configuration2, actors: actorConfigs };
|
|
487
|
+
const configForSdk = stripOrchestrationOnlyConnections2(fullConfig);
|
|
488
|
+
const config2 = ConfigZod2.parse(configForSdk);
|
|
479
489
|
const logger = initLogger(configuration2);
|
|
480
490
|
const orchestrator = await Orchestrator.create({ logger });
|
|
481
491
|
const collision = detectDerivationPathCollisions(actors, configuration2);
|
|
@@ -488,7 +498,7 @@ async function getLocatorsFromConfig(actors, configuration2) {
|
|
|
488
498
|
logger.warn("Insecure genesis reward wallet is active. Interactive confirmation skipped via --skip-insecure-confirm.");
|
|
489
499
|
}
|
|
490
500
|
const onInsecureGenesisConfirm = skipInsecureConfirm ? void 0 : async () => await promptForInsecureGenesisConfirmation(logger);
|
|
491
|
-
const locators = await locatorsFromConfig(context,
|
|
501
|
+
const locators = await locatorsFromConfig(context, fullConfig, onInsecureGenesisConfirm);
|
|
492
502
|
if (dumpProviders) {
|
|
493
503
|
console.log(formatProviderTree(locators));
|
|
494
504
|
process.exit(0);
|
|
@@ -537,7 +547,7 @@ $0 <command> [options]`).parserConfiguration({
|
|
|
537
547
|
});
|
|
538
548
|
skipInsecureConfirm = Boolean(argv2["skip-insecure-confirm"]);
|
|
539
549
|
dumpProviders = Boolean(argv2["dump-providers"]);
|
|
540
|
-
}).options(optionsFromGlobalZodRegistry()).wrap(y.terminalWidth()).command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(
|
|
550
|
+
}).options(optionsFromGlobalZodRegistry()).wrap(y.terminalWidth()).command(withDeprecationWarning(apiCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(bridgeCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(finalizerCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(indexerCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(mempoolCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(producerCommand(getConfiguration, getLocatorsFromConfig))).command(withDeprecationWarning(rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig))).command(startCommand(getConfiguration, getLocatorsFromConfig)).options({
|
|
541
551
|
"config": {
|
|
542
552
|
type: "string",
|
|
543
553
|
description: "Path to a config file to use instead of the default search.",
|
|
@@ -578,8 +588,10 @@ var start = async () => {
|
|
|
578
588
|
};
|
|
579
589
|
|
|
580
590
|
// src/xl1.ts
|
|
581
|
-
|
|
591
|
+
try {
|
|
592
|
+
await start();
|
|
593
|
+
} catch (err) {
|
|
582
594
|
if (process.env.NODE_ENV === "development") console.error("An error occurred during startup:", err);
|
|
583
595
|
process.exit(1);
|
|
584
|
-
}
|
|
596
|
+
}
|
|
585
597
|
//# sourceMappingURL=xl1.mjs.map
|
package/dist/node/xl1.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/start.ts", "../../src/
|
|
4
|
-
"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 { publisherCommand } from '@xyo-network/chain-publisher'\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'\nimport { z } from 'zod/mini'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { formatProviderTree } from './dumpProviders.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rolldown at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9099\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\nlet dumpProviders = 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 = z.looseObject(ActorConfigZod.shape).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 // `--dump-providers`: render the locator map and halt before the actor's\n // runner starts. Health endpoints and the SIGINT handler below are skipped.\n if (dumpProviders) {\n console.log(formatProviderTree(locators))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\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\uD83D\uDE80 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 \u2192 { 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 dumpProviders = Boolean(argv['dump-providers'])\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(publisherCommand(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. Secrets are redacted unless --with-secrets is also passed.',\n default: false,\n },\n 'with-secrets': {\n type: 'boolean',\n description: 'When used with --dump-config, print raw secret values (mnemonic, private keys, passwords) instead of \"[REDACTED]\". Use only on a developer machine.',\n default: false,\n },\n 'dump-providers': {\n type: 'boolean',\n description: 'Run the normal command flow up to provider locator construction, print the per-actor provider tree (with duplicate detection), 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 PublisherConfigZod,\n RewardRedemptionConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getPublisherActor } from '@xyo-network/chain-publisher'\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', 'publisher', '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 case 'publisher': {\n const config = PublisherConfigZod.parse(locator.context.config)\n return await getPublisherActor(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.join('/')} in ${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\nconst REDACTED = '[REDACTED]'\n\n/**\n * Names that always redact, regardless of nesting level. `connectionString` is\n * included because Mongo connection URIs commonly embed `user:password@host`.\n */\nconst REDACTED_KEY_NAMES = new Set<string>(['mnemonic', 'connectionString'])\n\n/**\n * Suffix-matched key names that redact. Catches any future `*PrivateKey`,\n * `*Secret`, or `*Password` field without us having to enumerate them here.\n */\nconst REDACTED_KEY_SUFFIX = /(PrivateKey|Secret|Password)$/i\n\nfunction shouldRedactKey(key: string): boolean {\n if (REDACTED_KEY_NAMES.has(key)) return true\n return REDACTED_KEY_SUFFIX.test(key)\n}\n\n/**\n * Returns a deep clone of `config` with secret-bearing leaf values replaced by\n * `'[REDACTED]'`. Walks plain objects and arrays. Leaves primitives, dates,\n * and other non-plain values untouched (other than via `structuredClone`).\n */\nexport function redactConfig<T>(config: T): T {\n const cloned = structuredClone(config) as unknown\n redactInPlace(cloned)\n return cloned as T\n}\n\nfunction redactInPlace(node: unknown): void {\n if (Array.isArray(node)) {\n for (const item of node) redactInPlace(item)\n return\n }\n if (node === null || typeof node !== 'object') return\n const obj = node as Record<string, unknown>\n for (const key of Object.keys(obj)) {\n if (shouldRedactKey(key) && obj[key] !== undefined && obj[key] !== null) {\n obj[key] = REDACTED\n } else {\n redactInPlace(obj[key])\n }\n }\n}\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` \u2014 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. Default behavior redacts\n // secrets (mnemonics, private keys, passwords, connection strings). Pass\n // `--with-secrets` to see the raw values \u2014 useful only on a developer box.\n if (argv['dump-config']) {\n const withSecrets = Boolean(argv['with-secrets'])\n const output = withSecrets ? finalConfig : redactConfig(finalConfig)\n console.log(JSON.stringify(output, 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 { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\n/**\n * One row in the per-actor provider tree. Captures the moniker (registry key),\n * the implementation class, the dependency monikers the factory declared, the\n * factory scope, and a `count` of how many times an identical fingerprint\n * appeared in the same moniker bucket. The registry can hold the same factory\n * more than once (e.g. via merges or multi-moniker registrations); collapsing\n * keeps the tree readable while still surfacing the multiplicity.\n */\ninterface ProviderEntry {\n count: number\n dependencies: readonly string[]\n moniker: string\n providerName: string\n scope: string\n}\n\nconst CANONICAL_ACTOR_ORDER: readonly string[] = [\n '_root', 'producer', 'finalizer', 'api', 'mempool', 'bridge', 'rewardRedemption',\n]\n\n/**\n * Enumerates the providers registered directly on a single locator. Does not\n * walk the parent chain \u2014 each locator is reported on its own so that a reader\n * can see exactly which providers a given actor contributed versus what it\n * inherits from `_root`.\n */\nfunction enumerateLocator(locator: ProviderFactoryLocatorInstance): ProviderEntry[] {\n const collapsed = new Map<string, ProviderEntry>()\n const registry = locator.registry as Record<string, unknown[] | undefined>\n for (const moniker of Object.keys(registry)) {\n const factories = registry[moniker]\n if (!factories) continue\n for (const factory of factories) {\n const f = factory as { dependencies?: readonly string[]; providerName?: string; scope?: string }\n const providerName = f.providerName ?? '<unknown>'\n const scope = f.scope ?? '<unknown>'\n const dependencies = f.dependencies ?? []\n const fingerprint = `${moniker}|${providerName}|${scope}|${dependencies.join(',')}`\n const existing = collapsed.get(fingerprint)\n if (existing) {\n existing.count += 1\n } else {\n collapsed.set(fingerprint, {\n count: 1, dependencies, moniker, providerName, scope,\n })\n }\n }\n }\n return [...collapsed.values()].toSorted((a, b) => a.moniker.localeCompare(b.moniker) || a.providerName.localeCompare(b.providerName))\n}\n\nfunction buildOwnerIndex(perActor: ReadonlyMap<string, readonly ProviderEntry[]>): Map<string, Set<string>> {\n const monikerOwners = new Map<string, Set<string>>()\n for (const [actorName, entries] of perActor) {\n for (const entry of entries) {\n let owners = monikerOwners.get(entry.moniker)\n if (!owners) {\n owners = new Set()\n monikerOwners.set(entry.moniker, owners)\n }\n owners.add(actorName)\n }\n }\n return monikerOwners\n}\n\nfunction renderDuplicatesSummary(monikerOwners: ReadonlyMap<string, ReadonlySet<string>>): string[] {\n const duplicates = [...monikerOwners.entries()]\n .filter(([, owners]) => owners.size > 1)\n .map(([moniker, owners]) => ({ moniker, owners: [...owners].toSorted().map(formatGroupForDisplay) }))\n .toSorted((a, b) => a.moniker.localeCompare(b.moniker))\n if (duplicates.length === 0) return []\n const lines = ['Duplicate monikers (registered by more than one locator):']\n for (const { moniker, owners } of duplicates) {\n lines.push(` - ${moniker}: ${owners.join(', ')}`)\n }\n lines.push('')\n return lines\n}\n\n/**\n * Groups actor names whose locators share the same `registry` object reference.\n * Under the shared-locator architecture (Option B), api/mempool/finalizer all\n * point to view locators that share one underlying registry \u2014 without this\n * grouping, the dump would print the same factory set N times and falsely\n * report every moniker as \"duplicate across actors.\"\n */\nfunction groupActorsBySharedRegistry(\n locators: Record<string, ProviderFactoryLocatorInstance>,\n): { actorNames: readonly string[]; locator: ProviderFactoryLocatorInstance }[] {\n const groups: { actorNames: string[]; locator: ProviderFactoryLocatorInstance; registry: unknown }[] = []\n for (const actorName of Object.keys(locators)) {\n const locator = locators[actorName]\n const existing = groups.find(g => g.registry === locator.registry)\n if (existing) {\n existing.actorNames.push(actorName)\n } else {\n groups.push({\n actorNames: [actorName], locator, registry: locator.registry,\n })\n }\n }\n return groups\n}\n\n/**\n * Stable id for a registry-sharing group: sorted, comma-joined actor names.\n * Used as the key in `monikerOwners`. Multi-actor group ids contain commas;\n * we display them parenthesized in the `also in:` annotation.\n */\nfunction groupId(actorNames: readonly string[]): string {\n return [...actorNames].toSorted().join(',')\n}\n\nfunction formatGroupForDisplay(groupKey: string): string {\n const members = groupKey.split(',')\n return members.length === 1 ? members[0] : `(${members.join(', ')})`\n}\n\nfunction renderGroupSection(\n actorNames: readonly string[],\n entries: readonly ProviderEntry[],\n monikerOwners: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n const sortedActors = [...actorNames].toSorted()\n const ownGroupKey = groupId(sortedActors)\n const heading = sortedActors.length === 1\n ? `Providers for actor: ${sortedActors[0]} (${entries.length} registered)`\n : `Providers shared by actors: ${sortedActors.join(', ')} (${entries.length} registered)`\n const lines: string[] = [heading]\n if (entries.length === 0) {\n lines.push(' (none)', '')\n return lines\n }\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n const isLast = i === entries.length - 1\n const branch = isLast ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'\n const owners = monikerOwners.get(entry.moniker) ?? new Set<string>()\n const otherOwners = [...owners]\n .filter(o => o !== ownGroupKey)\n .toSorted()\n .map(formatGroupForDisplay)\n const dupNote = otherOwners.length > 0 ? ` \u26A0 also in: ${otherOwners.join(', ')}` : ''\n const depsNote = entry.dependencies.length > 0 ? `, deps: [${entry.dependencies.join(', ')}]` : ''\n const countNote = entry.count > 1 ? ` (\u00D7${entry.count})` : ''\n lines.push(` ${branch} ${entry.moniker}${countNote} [impl: ${entry.providerName}, scope: ${entry.scope}${depsNote}]${dupNote}`)\n }\n lines.push('')\n return lines\n}\n\n/**\n * Renders the locator map as a tree grouped by registry identity, annotating\n * any moniker that appears in more than one *registry* with `\u26A0 also in: ...`.\n *\n * - When all input locators share one registry (shared-locator path), a single\n * \"Providers shared by actors: \u2026\" section is rendered.\n * - When some actors have distinct registries (legacy `_root` + per-actor\n * child architecture), each registry is rendered separately. `_root` is\n * ordered first.\n *\n * The \"Duplicate monikers\" summary at the bottom only flags monikers\n * registered by *different* registries \u2014 duplicates within one registry are\n * already collapsed into per-entry `(\u00D7N)` counts by `enumerateLocator`.\n */\nexport function formatProviderTree(locators: Record<string, ProviderFactoryLocatorInstance>): string {\n const groups = groupActorsBySharedRegistry(locators)\n\n // Per-actor moniker ownership (used for the \"also in:\" annotation), but\n // attribute each moniker to the GROUP it belongs to \u2014 the \"actor name\" the\n // index uses is the joined group key, so two actors that share a registry\n // never appear as duplicates of each other.\n const groupKeys = groups.map(g => ({ ...g, key: groupId(g.actorNames) }))\n const perGroup = new Map<string, ProviderEntry[]>()\n for (const g of groupKeys) perGroup.set(g.key, enumerateLocator(g.locator))\n const monikerOwners = buildOwnerIndex(perGroup)\n\n // Order: legacy `_root` first when present; otherwise alphabetical by sorted\n // actor names within the group, with the canonical actor order applied to\n // the *primary* (sorted-first) actor name in each group.\n const orderedGroups = [...groupKeys].toSorted((a, b) => {\n const aHasRoot = a.actorNames.includes('_root')\n const bHasRoot = b.actorNames.includes('_root')\n if (aHasRoot !== bHasRoot) return aHasRoot ? -1 : 1\n const ai = CANONICAL_ACTOR_ORDER.indexOf(a.actorNames[0])\n const bi = CANONICAL_ACTOR_ORDER.indexOf(b.actorNames[0])\n if (ai !== bi) return (ai === -1 ? Number.MAX_SAFE_INTEGER : ai) - (bi === -1 ? Number.MAX_SAFE_INTEGER : bi)\n return a.key.localeCompare(b.key)\n })\n\n const lines: string[] = ['XL1 Provider Dump', '=================', '']\n for (const g of orderedGroups) {\n lines.push(...renderGroupSection(g.actorNames.toSorted(), perGroup.get(g.key) ?? [], monikerOwners))\n }\n lines.push(...renderDuplicatesSummary(monikerOwners))\n return lines.join('\\n')\n}\n", "/* eslint-disable no-irregular-whitespace, @stylistic/max-len */\nexport const XL1LogoColorizedAscii = `\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;118;111;144m_\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;72;32;223m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u2560\u2560\u001B[0m\u001B[38;2;103;85;170m_\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;79;121;152m\u2566\u001B[0m\u001B[38;2;82;121;151m\u2566\u001B[0m\u001B[38;2;112;125;136m_\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;88;59;196m[\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;73;34;221m\u2592\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;121;121;127m_\u001B[0m\u001B[38;2;100;101;128m\u2554\u001B[0m\u001B[38;2;93;94;127m\u2566\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;82;121;151m\u00B2\u001B[0m\u001B[38;2;44;116;170m\u2560\u001B[0m\u001B[38;2;44;116;171m\u2592\u001B[0m\u001B[38;2;51;117;167mD\u001B[0m\u001B[38;2;80;121;152m\u2566\u001B[0m\u001B[38;2;111;125;136m_\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;67;23;232m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;120;121;128m_\u001B[0m\u001B[38;2;100;101;127m\u2554\u001B[0m\u001B[38;2;79;81;127mR\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;88;90;127m\u2559\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;55;117;165m\u255A\u001B[0m\u001B[38;2;44;116;171m\u2592\u001B[0m\u001B[38;2;44;116;171m\u2592\u2592\u001B[0m\u001B[38;2;50;116;167mD\u001B[0m\u001B[38;2;80;121;152m\u2566\u00A0\u001B[0m\u001B[38;2;106;90;165mj\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u001B[0m\u001B[38;2;89;61;194mH\u00A0\u001B[0m\u001B[38;2;99;100;127m\u2554\u001B[0m\u001B[38;2;79;80;127mD\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;71;73;128m\u2592\u2592\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;83;121;150m\u00B2\u001B[0m\u001B[38;2;44;116;170m\u2592\u001B[0m\u001B[38;2;44;116;171m\u2592\u2592\u2592\u00A0\u001B[0m\u001B[38;2;76;38;217m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u00A0\u001B[0m\u001B[38;2;74;76;128m\u2560\u001B[0m\u001B[38;2;71;73;128m\u2592\u2592\u2592\u001B[0m\u001B[38;2;89;90;128m\u2559\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\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\u2553\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;95;72;183m\u2553\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\u00A0\u001B[0m\u001B[38;2;122;118;137m_\u001B[0m\u001B[38;2;113;102;153m,\u001B[0m\u001B[38;2;108;94;161m\u2553\u001B[0m\u001B[38;2;104;86;169m\u2553\u001B[0m\u001B[38;2;98;77;178m\u2554\u001B[0m\u001B[38;2;93;67;188m\u2557\u001B[0m\u001B[38;2;88;59;196m\u03C6\u001B[0m\u001B[38;2;83;51;204m@\u001B[0m\u001B[38;2;78;42;213mD\u001B[0m\u001B[38;2;72;32;223m\u2592\u001B[0m\u001B[38;2;68;24;231m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;71;30;225m\u2592\u001B[0m\u001B[38;2;77;40;215m\u2592\u001B[0m\u001B[38;2;82;49;206mK\u001B[0m\u001B[38;2;87;57;198m\u03C6\u001B[0m\u001B[38;2;91;65;190m\u2557\u001B[0m\u001B[38;2;97;75;180m\u2566\u001B[0m\u001B[38;2;103;84;171m\u2556\u001B[0m\u001B[38;2;107;92;163m\u00B2\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\u00A0\u001B[0m\u001B[38;2;106;91;164m\\`\u001B[0m\u001B[38;2;94;70;185m^\u001B[0m\u001B[38;2;89;62;193m\u2559\u001B[0m\u001B[38;2;85;54;201m\u2559\u001B[0m\u001B[38;2;80;45;210m\u255A\u001B[0m\u001B[38;2;74;35;220m\u255D\u001B[0m\u001B[38;2;69;26;229m\u2560\u001B[0m\u001B[38;2;66;22;233m\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;73;33;222m\u255D\u001B[0m\u001B[38;2;79;43;212m\u2569\u001B[0m\u001B[38;2;84;52;203m\u255C\u001B[0m\u001B[38;2;88;60;195m\u2559\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\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\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\u2559\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;80;46;209m\u255C\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\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;145;116;107m,\u001B[0m\u001B[38;2;199;82;45m\u2560\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u2560\u00A0\u001B[0m\u001B[38;2;70;28;227m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u00A0\u001B[0m\u001B[38;2;189;49;97m\u00E5\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u001B[0m\u001B[38;2;155;92;114m,\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;175;98;73m\u2554\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u2592\u2592\u001B[0m\u001B[38;2;197;83;47m\u2569\u00A0\u001B[0m\u001B[38;2;98;76;179m[\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u001B[0m\u001B[38;2;81;48;207mH\u00A0\u001B[0m\u001B[38;2;188;51;98m\u255A\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u2560\u001B[0m\u001B[38;2;183;57;100mH\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;146;116;106m,\u001B[0m\u001B[38;2;199;82;44m\u2560\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;196;84;48m\u2569\u001B[0m\u001B[38;2;168;102;81m^\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;160;87;111m'\u001B[0m\u001B[38;2;187;52;98m\u255A\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u001B[0m\u001B[38;2;156;91;113m,\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;198;83;46m\u2569\u001B[0m\u001B[38;2;194;85;50m\u2569\u001B[0m\u001B[38;2;167;102;82m^\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;81;46;209m\u255A\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;159;88;112m'\u001B[0m\u001B[38;2;186;53;98m\u255A\u001B[0m\u001B[38;2;197;40;93m\u2569\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;110;97;158m'\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;94;69;186mH\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;68;25;230m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;108;93;162m\u00B2\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/mini'\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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["isDefined", "
|
|
3
|
+
"sources": ["../../src/start.ts", "../../src/runCli.ts", "../../src/commands/start/startCommand.ts", "../../src/initLogger.ts", "../../src/commands/withDeprecationWarning.ts", "../../src/configMiddleware.ts", "../../src/dumpProviders.ts", "../../src/images.ts", "../../src/optionsFromGlobalZodRegistry.ts", "../../src/xl1.ts"],
|
|
4
|
+
"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 { indexerCommand } from '@xyo-network/chain-indexer'\nimport { mempoolCommand } from '@xyo-network/chain-mempool'\nimport {\n type ConfigWithMnemonic,\n contextFromConfigWithoutLocator, detectDerivationPathCollisions, formatWalletReport, initializeResolvedWalletReport,\n locatorsFromConfig, Orchestrator, stripOrchestrationOnlyConnections,\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'\nimport { z } from 'zod/mini'\n\nimport { startCommand, withDeprecationWarning } from './commands/index.ts'\nimport { configMiddleware } from './configMiddleware.ts'\nimport { formatProviderTree } from './dumpProviders.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromGlobalZodRegistry } from './optionsFromGlobalZodRegistry.ts'\n\n/** Version string injected by Rolldown at build time. */\ndeclare const __VERSION__: string\n\nconst DEFAULT_HEALTH_CHECK_PORT = 9099\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: ConfigWithMnemonic\nlet skipInsecureConfirm = false\nlet dumpProviders = false\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nfunction getConfiguration(): ConfigWithMnemonic {\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: ConfigWithMnemonic) {\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 = z.looseObject(ActorConfigZod.shape).parse({ name: actorName })\n actorConfigs.push(actorConfig)\n }\n }\n\n const fullConfig = { ...configuration, actors: actorConfigs }\n // Strip only for SDK Zod parse / context (wallets/memory are orchestration-only).\n // Pass the full config (with synthesized wallets) to locators so that\n // ensureSigningActorWalletConnections sees producer-wallet etc. before\n // descriptor builds that require them (e.g. SimpleBlockRunner).\n const configForSdk = stripOrchestrationOnlyConnections(fullConfig)\n const config = ConfigZod.parse(configForSdk)\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, fullConfig, onInsecureGenesisConfirm)\n\n // `--dump-providers`: render the locator map and halt before the actor's\n // runner starts. Health endpoints and the SIGINT handler below are skipped.\n if (dumpProviders) {\n console.log(formatProviderTree(locators))\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }\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\uD83D\uDE80 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 \u2192 { 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 dumpProviders = Boolean(argv['dump-providers'])\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(indexerCommand(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. Secrets are redacted unless --with-secrets is also passed.',\n default: false,\n },\n 'with-secrets': {\n type: 'boolean',\n description: 'When used with --dump-config, print raw secret values (mnemonic, private keys, passwords) instead of \"[REDACTED]\". Use only on a developer machine.',\n default: false,\n },\n 'dump-providers': {\n type: 'boolean',\n description: 'Run the normal command flow up to provider locator construction, print the per-actor provider tree (with duplicate detection), 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 { getIndexerActor } from '@xyo-network/chain-indexer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type {\n ActorInstanceV3, ConfigWithMnemonic, GetLocatorsFromConfig, OrchestratorInstance,\n} from '@xyo-network/chain-orchestration'\nimport { buildActorFromConfiguration } from '@xyo-network/chain-orchestration'\nimport { getProducerActor } from '@xyo-network/chain-producer'\nimport { getRewardRedemptionActor } from '@xyo-network/chain-reward-redemption'\nimport type { 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', 'indexer', 'mempool', 'producer', 'rewardRedemption'] as const\n\nconst BOOT_TIMEOUT_MS = 60_000\n\nfunction getActorsFromConfig(configuration: ConfigWithMnemonic): 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 configuration: ConfigWithMnemonic,\n): Promise<ActorInstanceV3> {\n switch (name) {\n case 'api': {\n return await buildActorFromConfiguration(name, configuration, locator, getApiActor)\n }\n case 'bridge': {\n return await buildActorFromConfiguration(name, configuration, locator, getBridgeActor)\n }\n case 'mempool': {\n return await buildActorFromConfiguration(name, configuration, locator, getMempoolActor)\n }\n case 'producer': {\n return await buildActorFromConfiguration(name, configuration, locator, getProducerActor)\n }\n case 'rewardRedemption': {\n return await buildActorFromConfiguration(name, configuration, locator, getRewardRedemptionActor)\n }\n case 'finalizer': {\n return await buildActorFromConfiguration(name, configuration, locator, getFinalizerActor)\n }\n case 'indexer': {\n return await buildActorFromConfiguration(name, configuration, locator, getIndexerActor)\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: ConfigWithMnemonic,\n): Promise<void> {\n const startedAt = Date.now()\n const actors = await Promise.all(requestedActors.map(name => buildActor(name, locators[name], configuration)))\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.join('/')} in ${ms}ms)`)\n}\n\nexport function startCommand(getConfiguration: () => ConfigWithMnemonic, 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 { ConfigWithMnemonic } from '@xyo-network/chain-orchestration'\n\nexport const initLogger = (config: Pick<ConfigWithMnemonic, 'log'>): 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 type ConfigWithMnemonic,\n finalizeConfig,\n stripOrchestrationOnlyConnections,\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' })\n\nconst REDACTED = '[REDACTED]'\n\n/**\n * Names that always redact, regardless of nesting level. `connectionString` is\n * included because Mongo connection URIs commonly embed `user:password@host`.\n */\nconst REDACTED_KEY_NAMES = new Set<string>(['mnemonic', 'connectionString'])\n\n/**\n * Suffix-matched key names that redact. Catches any future `*PrivateKey`,\n * `*Secret`, or `*Password` field without us having to enumerate them here.\n */\nconst REDACTED_KEY_SUFFIX = /(PrivateKey|Secret|Password)$/i\n\nfunction shouldRedactKey(key: string): boolean {\n if (REDACTED_KEY_NAMES.has(key)) return true\n return REDACTED_KEY_SUFFIX.test(key)\n}\n\n/**\n * Returns a deep clone of `config` with secret-bearing leaf values replaced by\n * `'[REDACTED]'`. Walks plain objects and arrays. Leaves primitives, dates,\n * and other non-plain values untouched (other than via `structuredClone`).\n */\nexport function redactConfig<T>(config: T): T {\n const cloned = structuredClone(config) as unknown\n redactInPlace(cloned)\n return cloned as T\n}\n\nfunction redactInPlace(node: unknown): void {\n if (Array.isArray(node)) {\n for (const item of node) redactInPlace(item)\n return\n }\n if (node === null || typeof node !== 'object') return\n const obj = node as Record<string, unknown>\n for (const key of Object.keys(obj)) {\n if (shouldRedactKey(key) && obj[key] !== undefined && obj[key] !== null) {\n obj[key] = REDACTED\n } else {\n redactInPlace(obj[key])\n }\n }\n}\n\n/**\n * Yargs `.env()` with `dot-notation` turns `XL1_ACTORS__0__NAME=foo` into\n * `{ actors: { '0': { name: 'foo' } } }` \u2014 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.isSafeInteger(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\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 parsedConfigFileRaw = await tryParseConfig({ configPath }) // Config file (may contain orchestration extensions like wallet connections)\n const rootMnemonicFromFile = typeof parsedConfigFileRaw.mnemonic === 'string' ? parsedConfigFileRaw.mnemonic : undefined\n const normalizedArgv = coerceActorsArray(argv)\n const argsForSdk = stripOrchestrationOnlyConnections(normalizedArgv)\n const parsedConfigArgs = ConfigZod.safeParse(argsForSdk).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 // If argv/env provides an actors list, prefer it over default/file actors to avoid concat\n // (deepMerge uses array concat; providing explicit actors should replace rather than append defaults)\n const parsedFileRecord = parsedConfigFileRaw as Record<string, unknown>\n let fileForMerge: Record<string, unknown> = parsedFileRecord\n const argvActors = normalizedArgv.actors\n if (Array.isArray(argvActors) && argvActors.length > 0) {\n const { actors: _dropped, ...rest } = parsedFileRecord\n fileForMerge = rest\n }\n const rawMerged = deepMerge(fileForMerge, parsedConfigArgs)\n const mergedForSdk = stripOrchestrationOnlyConnections(rawMerged)\n const mergedConfig = safeParseOrThrow(mergedForSdk)\n const rootMnemonic = rootMnemonicFromArgs ?? rootMnemonicFromFile\n const finalized = finalizeConfig({\n ...mergedConfig,\n ...(isDefined(rootMnemonic) && { mnemonic: rootMnemonic }),\n })\n // Strip orchestration-only connection types (wallet, memory) before passing to SDK's ConfigZod/resolveConfig,\n // which do not yet include them in TransportConfigZod. Re-finalize afterwards to re-synthesize them.\n const strippedForResolve = stripOrchestrationOnlyConnections(finalized)\n const preResolve = safeParseOrThrow(strippedForResolve)\n const resolved = resolveConfig(preResolve)\n const strippedResolved = stripOrchestrationOnlyConnections(resolved)\n const validated = safeParseOrThrow(strippedResolved)\n // Re-apply finalize to ensure wallet/memory connections + providerBindings are present in the returned config\n const toFinalize = {\n ...validated,\n ...(isDefined(rootMnemonic) && { mnemonic: rootMnemonic }),\n }\n const finalWithConnections = finalizeConfig(toFinalize)\n return finalWithConnections\n}\n\nexport async function configMiddleware(argv: Record<string, unknown>, setConfiguration: (config: ConfigWithMnemonic) => 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)\n\n // Check if user wants to dump config and exit. Default behavior redacts\n // secrets (mnemonics, private keys, passwords, connection strings). Pass\n // `--with-secrets` to see the raw values \u2014 useful only on a developer box.\n if (argv['dump-config'] === true) {\n const withSecrets = Boolean(argv['with-secrets'])\n const output = withSecrets ? finalConfig : redactConfig(finalConfig)\n console.log(JSON.stringify(output, 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: ${String(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 { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\n/**\n * One row in the per-actor provider tree. Captures the moniker (registry key),\n * the implementation class, the dependency monikers the factory declared, the\n * factory scope, and a `count` of how many times an identical fingerprint\n * appeared in the same moniker bucket. The registry can hold the same factory\n * more than once (e.g. via merges or multi-moniker registrations); collapsing\n * keeps the tree readable while still surfacing the multiplicity.\n */\ninterface ProviderEntry {\n count: number\n dependencies: readonly string[]\n moniker: string\n providerName: string\n scope: string\n}\n\nconst CANONICAL_ACTOR_ORDER: readonly string[] = [\n 'producer', 'finalizer', 'api', 'mempool', 'bridge', 'rewardRedemption',\n]\n\n/**\n * Enumerates the providers registered directly on a single locator. Does not\n * walk the parent chain \u2014 each locator is reported on its own so that a reader\n * can see exactly which providers a given actor contributed.\n */\nfunction enumerateLocator(locator: ProviderFactoryLocatorInstance): ProviderEntry[] {\n const collapsed = new Map<string, ProviderEntry>()\n const registry = locator.registry as Record<string, unknown[] | undefined>\n for (const [moniker, factories] of Object.entries(registry)) {\n if (!factories) continue\n for (const factory of factories) {\n const f = factory as { dependencies?: readonly string[]; providerName?: string; scope?: string }\n const providerName = f.providerName ?? '<unknown>'\n const scope = f.scope ?? '<unknown>'\n const dependencies = f.dependencies ?? []\n const fingerprint = `${moniker}|${providerName}|${scope}|${dependencies.join(',')}`\n const existing = collapsed.get(fingerprint)\n if (existing) {\n existing.count += 1\n } else {\n collapsed.set(fingerprint, {\n count: 1, dependencies, moniker, providerName, scope,\n })\n }\n }\n }\n return collapsed.values().toArray().toSorted((a, b) => a.moniker.localeCompare(b.moniker) || a.providerName.localeCompare(b.providerName))\n}\n\nfunction buildOwnerIndex(perActor: ReadonlyMap<string, readonly ProviderEntry[]>): Map<string, Set<string>> {\n const monikerOwners = new Map<string, Set<string>>()\n for (const [actorName, entries] of perActor) {\n for (const entry of entries) {\n let owners = monikerOwners.get(entry.moniker)\n if (!owners) {\n owners = new Set()\n monikerOwners.set(entry.moniker, owners)\n }\n owners.add(actorName)\n }\n }\n return monikerOwners\n}\n\nfunction renderDuplicatesSummary(monikerOwners: ReadonlyMap<string, ReadonlySet<string>>): string[] {\n const duplicates = [...monikerOwners]\n .filter(([, owners]) => owners.size > 1)\n .map(([moniker, owners]) => ({ moniker, owners: [...owners].toSorted((a, b) => a.localeCompare(b)).map(formatGroupForDisplay) }))\n .toSorted((a, b) => a.moniker.localeCompare(b.moniker))\n if (duplicates.length === 0) return []\n const lines = ['Duplicate monikers (registered by more than one locator):']\n for (const { moniker, owners } of duplicates) {\n lines.push(` - ${moniker}: ${owners.join(', ')}`)\n }\n lines.push('')\n return lines\n}\n\n/**\n * Groups actor names whose locators share the same `registry` object reference.\n * Under the shared-locator architecture, API/mempool/finalizer etc. may\n * point to view locators that share one underlying registry \u2014 without this\n * grouping, the dump would print the same factory set N times and falsely\n * report every moniker as \"duplicate across actors.\"\n */\nfunction groupActorsBySharedRegistry(\n locators: Record<string, ProviderFactoryLocatorInstance>,\n): { actorNames: readonly string[]; locator: ProviderFactoryLocatorInstance }[] {\n const groups: { actorNames: string[]; locator: ProviderFactoryLocatorInstance; registry: unknown }[] = []\n for (const [actorName, locator] of Object.entries(locators)) {\n const existing = groups.find(g => g.registry === locator.registry)\n if (existing) {\n existing.actorNames.push(actorName)\n } else {\n groups.push({\n actorNames: [actorName], locator, registry: locator.registry,\n })\n }\n }\n return groups\n}\n\n/**\n * Stable id for a registry-sharing group: sorted, comma-joined actor names.\n * Used as the key in `monikerOwners`. Multi-actor group ids contain commas;\n * we display them parenthesized in the `also in:` annotation.\n */\nfunction groupId(actorNames: readonly string[]): string {\n return actorNames.toSorted((a, b) => a.localeCompare(b)).join(',')\n}\n\nfunction formatGroupForDisplay(groupKey: string): string {\n const members = groupKey.split(',')\n return members.length === 1 ? members[0] : `(${members.join(', ')})`\n}\n\nfunction renderGroupSection(\n actorNames: readonly string[],\n entries: readonly ProviderEntry[],\n monikerOwners: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n const sortedActors = actorNames.toSorted((a, b) => a.localeCompare(b))\n const ownGroupKey = groupId(sortedActors)\n const heading = sortedActors.length === 1\n ? `Providers for actor: ${sortedActors[0]} (${entries.length} registered)`\n : `Providers shared by actors: ${sortedActors.join(', ')} (${entries.length} registered)`\n const lines: string[] = [heading]\n if (entries.length === 0) {\n lines.push(' (none)', '')\n return lines\n }\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n const isLast = i === entries.length - 1\n const branch = isLast ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'\n const owners = monikerOwners.get(entry.moniker) ?? new Set<string>()\n const otherOwners = [...owners]\n .filter(o => o !== ownGroupKey)\n .toSorted((a, b) => a.localeCompare(b))\n .map(formatGroupForDisplay)\n const dupNote = otherOwners.length > 0 ? ` \u26A0 also in: ${otherOwners.join(', ')}` : ''\n const depsNote = entry.dependencies.length > 0 ? `, deps: [${entry.dependencies.join(', ')}]` : ''\n const countNote = entry.count > 1 ? ` (\u00D7${entry.count})` : ''\n lines.push(` ${branch} ${entry.moniker}${countNote} [impl: ${entry.providerName}, scope: ${entry.scope}${depsNote}]${dupNote}`)\n }\n lines.push('')\n return lines\n}\n\n/**\n * Renders the locator map as a tree grouped by registry identity, annotating\n * any moniker that appears in more than one *registry* with `\u26A0 also in: ...`.\n *\n * - When all input locators share one registry (shared-locator path), a single\n * \"Providers shared by actors: \u2026\" section is rendered.\n * - When some actors have distinct registries (legacy `_root` + per-actor\n * child architecture), each registry is rendered separately. `_root` is\n * ordered first.\n *\n * The \"Duplicate monikers\" summary at the bottom only flags monikers\n * registered by *different* registries \u2014 duplicates within one registry are\n * already collapsed into per-entry `(\u00D7N)` counts by `enumerateLocator`.\n */\nexport function formatProviderTree(locators: Record<string, ProviderFactoryLocatorInstance>): string {\n const groups = groupActorsBySharedRegistry(locators)\n\n // Per-actor moniker ownership (used for the \"also in:\" annotation), but\n // attribute each moniker to the GROUP it belongs to \u2014 the \"actor name\" the\n // index uses is the joined group key, so two actors that share a registry\n // never appear as duplicates of each other.\n const groupKeys = groups.map(g => ({ ...g, key: groupId(g.actorNames) }))\n const perGroup = new Map<string, ProviderEntry[]>()\n for (const g of groupKeys) perGroup.set(g.key, enumerateLocator(g.locator))\n const monikerOwners = buildOwnerIndex(perGroup)\n\n // Order: legacy `_root` first when present; otherwise alphabetical by sorted\n // actor names within the group, with the canonical actor order applied to\n // the *primary* (sorted-first) actor name in each group.\n const orderedGroups = [...groupKeys].toSorted((a, b) => {\n const aHasRoot = a.actorNames.includes('_root')\n const bHasRoot = b.actorNames.includes('_root')\n if (aHasRoot !== bHasRoot) return aHasRoot ? -1 : 1\n const ai = CANONICAL_ACTOR_ORDER.indexOf(a.actorNames[0])\n const bi = CANONICAL_ACTOR_ORDER.indexOf(b.actorNames[0])\n if (ai !== bi) return (ai === -1 ? Number.MAX_SAFE_INTEGER : ai) - (bi === -1 ? Number.MAX_SAFE_INTEGER : bi)\n return a.key.localeCompare(b.key)\n })\n\n const lines: string[] = ['XL1 Provider Dump', '=================', '']\n for (const g of orderedGroups) {\n lines.push(...renderGroupSection(g.actorNames.toSorted((a, b) => a.localeCompare(b)), perGroup.get(g.key) ?? [], monikerOwners))\n }\n lines.push(...renderDuplicatesSummary(monikerOwners))\n return lines.join('\\n')\n}\n", "/* eslint-disable no-irregular-whitespace, @stylistic/max-len */\nexport const XL1LogoColorizedAscii = `\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;118;111;144m_\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;72;32;223m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u2560\u2560\u001B[0m\u001B[38;2;103;85;170m_\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;79;121;152m\u2566\u001B[0m\u001B[38;2;82;121;151m\u2566\u001B[0m\u001B[38;2;112;125;136m_\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;88;59;196m[\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;73;34;221m\u2592\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;121;121;127m_\u001B[0m\u001B[38;2;100;101;128m\u2554\u001B[0m\u001B[38;2;93;94;127m\u2566\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;82;121;151m\u00B2\u001B[0m\u001B[38;2;44;116;170m\u2560\u001B[0m\u001B[38;2;44;116;171m\u2592\u001B[0m\u001B[38;2;51;117;167mD\u001B[0m\u001B[38;2;80;121;152m\u2566\u001B[0m\u001B[38;2;111;125;136m_\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;67;23;232m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;120;121;128m_\u001B[0m\u001B[38;2;100;101;127m\u2554\u001B[0m\u001B[38;2;79;81;127mR\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;88;90;127m\u2559\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;55;117;165m\u255A\u001B[0m\u001B[38;2;44;116;171m\u2592\u001B[0m\u001B[38;2;44;116;171m\u2592\u2592\u001B[0m\u001B[38;2;50;116;167mD\u001B[0m\u001B[38;2;80;121;152m\u2566\u00A0\u001B[0m\u001B[38;2;106;90;165mj\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u001B[0m\u001B[38;2;89;61;194mH\u00A0\u001B[0m\u001B[38;2;99;100;127m\u2554\u001B[0m\u001B[38;2;79;80;127mD\u001B[0m\u001B[38;2;71;73;128m\u2592\u001B[0m\u001B[38;2;71;73;128m\u2592\u2592\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;83;121;150m\u00B2\u001B[0m\u001B[38;2;44;116;170m\u2592\u001B[0m\u001B[38;2;44;116;171m\u2592\u2592\u2592\u00A0\u001B[0m\u001B[38;2;76;38;217m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u00A0\u001B[0m\u001B[38;2;74;76;128m\u2560\u001B[0m\u001B[38;2;71;73;128m\u2592\u2592\u2592\u001B[0m\u001B[38;2;89;90;128m\u2559\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\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\u2553\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;95;72;183m\u2553\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\u00A0\u001B[0m\u001B[38;2;122;118;137m_\u001B[0m\u001B[38;2;113;102;153m,\u001B[0m\u001B[38;2;108;94;161m\u2553\u001B[0m\u001B[38;2;104;86;169m\u2553\u001B[0m\u001B[38;2;98;77;178m\u2554\u001B[0m\u001B[38;2;93;67;188m\u2557\u001B[0m\u001B[38;2;88;59;196m\u03C6\u001B[0m\u001B[38;2;83;51;204m@\u001B[0m\u001B[38;2;78;42;213mD\u001B[0m\u001B[38;2;72;32;223m\u2592\u001B[0m\u001B[38;2;68;24;231m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;71;30;225m\u2592\u001B[0m\u001B[38;2;77;40;215m\u2592\u001B[0m\u001B[38;2;82;49;206mK\u001B[0m\u001B[38;2;87;57;198m\u03C6\u001B[0m\u001B[38;2;91;65;190m\u2557\u001B[0m\u001B[38;2;97;75;180m\u2566\u001B[0m\u001B[38;2;103;84;171m\u2556\u001B[0m\u001B[38;2;107;92;163m\u00B2\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\u00A0\u001B[0m\u001B[38;2;106;91;164m\\`\u001B[0m\u001B[38;2;94;70;185m^\u001B[0m\u001B[38;2;89;62;193m\u2559\u001B[0m\u001B[38;2;85;54;201m\u2559\u001B[0m\u001B[38;2;80;45;210m\u255A\u001B[0m\u001B[38;2;74;35;220m\u255D\u001B[0m\u001B[38;2;69;26;229m\u2560\u001B[0m\u001B[38;2;66;22;233m\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;73;33;222m\u255D\u001B[0m\u001B[38;2;79;43;212m\u2569\u001B[0m\u001B[38;2;84;52;203m\u255C\u001B[0m\u001B[38;2;88;60;195m\u2559\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\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\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\u2559\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u2560\u001B[0m\u001B[38;2;80;46;209m\u255C\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\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;145;116;107m,\u001B[0m\u001B[38;2;199;82;45m\u2560\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u2560\u00A0\u001B[0m\u001B[38;2;70;28;227m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u2560\u00A0\u001B[0m\u001B[38;2;189;49;97m\u00E5\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u001B[0m\u001B[38;2;155;92;114m,\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;175;98;73m\u2554\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u2592\u2592\u001B[0m\u001B[38;2;197;83;47m\u2569\u00A0\u001B[0m\u001B[38;2;98;76;179m[\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u001B[0m\u001B[38;2;81;48;207mH\u00A0\u001B[0m\u001B[38;2;188;51;98m\u255A\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u2560\u001B[0m\u001B[38;2;183;57;100mH\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;146;116;106m,\u001B[0m\u001B[38;2;199;82;44m\u2560\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;207;77;35m\u2592\u001B[0m\u001B[38;2;196;84;48m\u2569\u001B[0m\u001B[38;2;168;102;81m^\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;160;87;111m'\u001B[0m\u001B[38;2;187;52;98m\u255A\u001B[0m\u001B[38;2;203;32;90m\u2560\u001B[0m\u001B[38;2;203;32;90m\u2560\u2560\u001B[0m\u001B[38;2;156;91;113m,\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;198;83;46m\u2569\u001B[0m\u001B[38;2;194;85;50m\u2569\u001B[0m\u001B[38;2;167;102;82m^\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;81;46;209m\u255A\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u2560\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;159;88;112m'\u001B[0m\u001B[38;2;186;53;98m\u255A\u001B[0m\u001B[38;2;197;40;93m\u2569\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;110;97;158m'\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\u001B[38;2;94;69;186mH\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;68;25;230m\u2560\u001B[0m\u001B[38;2;66;21;234m\u2560\u001B[0m\n\u001B[38;2;128;128;128m\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u001B[0m\u001B[38;2;108;93;162m\u00B2\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/mini'\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 === true) continue // skip hidden options\n opts[schema.title] = usageMetaToOptions(schema)\n }\n }\n return opts\n}\n", "import { start } from './start.ts'\n\ntry {\n await start()\n} 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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["isDefined", "stripOrchestrationOnlyConnections", "ConfigZod", "config", "configuration", "getConfiguration", "getLocatorsFromConfig", "yargs", "isDefined", "config", "input", "output", "isDefined", "configuration", "stripOrchestrationOnlyConnections", "config", "ConfigZod", "argv"]
|
|
7
7
|
}
|