@xyo-network/chain-orchestration 1.21.3 → 1.23.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/browser/index.mjs +15 -1
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/node/config/capabilities/defaultCapabilityRegistry.d.ts.map +1 -1
- package/dist/browser/node/config/capabilities/descriptors.d.ts.map +1 -1
- package/dist/browser/node/config/locators/index.d.ts +1 -0
- package/dist/browser/node/config/locators/index.d.ts.map +1 -1
- package/dist/browser/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
- package/dist/browser/node/config/locators/sharedLocatorFromConfig.d.ts +68 -0
- package/dist/browser/node/config/locators/sharedLocatorFromConfig.d.ts.map +1 -0
- package/dist/browser/shared/config/actors/Mempool.d.ts +14 -0
- package/dist/browser/shared/config/actors/Mempool.d.ts.map +1 -1
- package/dist/neutral/index.mjs +15 -1
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/node/config/capabilities/defaultCapabilityRegistry.d.ts.map +1 -1
- package/dist/neutral/node/config/capabilities/descriptors.d.ts.map +1 -1
- package/dist/neutral/node/config/locators/index.d.ts +1 -0
- package/dist/neutral/node/config/locators/index.d.ts.map +1 -1
- package/dist/neutral/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
- package/dist/neutral/node/config/locators/sharedLocatorFromConfig.d.ts +68 -0
- package/dist/neutral/node/config/locators/sharedLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/shared/config/actors/Mempool.d.ts +14 -0
- package/dist/neutral/shared/config/actors/Mempool.d.ts.map +1 -1
- package/dist/node/index.mjs +221 -17
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/node/config/capabilities/defaultCapabilityRegistry.d.ts.map +1 -1
- package/dist/node/node/config/capabilities/descriptors.d.ts.map +1 -1
- package/dist/node/node/config/locators/index.d.ts +1 -0
- package/dist/node/node/config/locators/index.d.ts.map +1 -1
- package/dist/node/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
- package/dist/node/node/config/locators/sharedLocatorFromConfig.d.ts +68 -0
- package/dist/node/node/config/locators/sharedLocatorFromConfig.d.ts.map +1 -0
- package/dist/node/shared/config/actors/Mempool.d.ts +14 -0
- package/dist/node/shared/config/actors/Mempool.d.ts.map +1 -1
- package/package.json +26 -26
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/actor/v3/ActorV3.ts","../../src/shared/buildTelemetryConfig.ts","../../src/shared/config/actors/Api.ts","../../src/shared/config/actors/Bridge.ts","../../src/shared/config/actors/Finalizer.ts","../../src/shared/config/actors/Mempool.ts","../../src/shared/config/actors/Producer.ts","../../src/shared/config/actors/RewardRedemption.ts","../../src/shared/config/mergeConfig.ts","../../src/shared/createDeclarationIntentBlock.ts","../../src/shared/host/implementation/DefaultHost.ts","../../src/shared/host/implementation/DefaultServiceProvider.ts","../../src/shared/host/model/ServiceCollection.ts","../../src/shared/init/initActorSeedPhrase.ts","../../src/shared/init/walletResolution.ts","../../src/shared/init/initBridgedModule.ts","../../src/shared/init/initStatusReporter.ts","../../src/shared/init/initWallet.ts","../../src/shared/orchestrator/Orchestrator.ts","../../src/shared/provider/SimpleRejectedTransactionsArchivistProvider.ts","../../src/node/config/capabilities/Backing.ts","../../src/node/config/capabilities/Capability.ts","../../src/node/config/capabilities/defaultCapabilityRegistry.ts","../../src/node/config/capabilities/descriptors.ts","../../src/node/config/capabilities/locatorFromActorNeeds.ts","../../src/node/config/capabilities/networkTier3Descriptors.ts","../../src/node/init/initBalanceSummaryMap.ts","../../src/node/init/initEvmProvidersIfAvailable.ts","../../src/node/init/initFinalizationArchivistIfNeeded.ts","../../src/node/init/initFinalizedArchivist.ts","../../src/node/init/initServerNode.ts","../../src/node/manifest/getLocator.ts","../../src/node/manifest/NamedLmdbArchivist.ts","../../src/node/manifest/loadNode.ts","../../src/node/manifest/node.json","../../src/node/manifest/nodeManifest.ts","../../src/node/manifest/private/index.ts","../../src/node/manifest/public/Chain.json","../../src/node/manifest/public/DeadLetterQueue.json","../../src/node/manifest/public/Pending.json","../../src/node/manifest/public/index.ts","../../src/node/init/initTransferSummaryMap.ts","../../src/node/config/capabilities/backings/buildChainStoreBacking.ts","../../src/node/config/capabilities/backings/buildDlqStoreBacking.ts","../../src/node/config/capabilities/backings/buildIndexerStoreBacking.ts","../../src/node/config/capabilities/backings/buildMempoolStoreBacking.ts","../../src/node/config/capabilities/backings/buildValidators.ts","../../src/node/config/capabilities/ProcessSharedResources.ts","../../src/node/config/capabilities/resolveProviders.ts","../../src/node/config/locators/basicRemoteRunnerLocator.ts","../../src/node/config/locators/basicRemoteViewerLocator.ts","../../src/node/config/locators/buildStatelessApiLocator.ts","../../src/node/config/locators/telemetryContextFromConfig.ts","../../src/node/config/locators/contextFromConfigWithoutLocator.ts","../../src/node/config/locators/localLocatorFromConfig.ts","../../src/node/config/locators/locatorsFromConfig.ts","../../src/node/config/locators/actors/apiLocatorFromConfig.ts","../../src/node/config/locators/actors/bridgeLocatorFromConfig.ts","../../src/node/config/locators/actors/finalizerLocatorFromConfig.ts","../../src/node/config/locators/actors/mempoolLocatorFromConfig.ts","../../src/node/config/locators/actors/producerLocatorFromConfig.ts","../../src/node/config/locators/actors/rewardRedemptionLocatorFromConfig.ts","../../src/node/config/locators/rootLocatorFromConfig.ts","../../src/node/config/tryParseConfig.ts","../../src/node/index.ts"],"sourcesContent":["import type {\n Counter, Gauge, Histogram, UpDownCounter,\n} from '@opentelemetry/api'\nimport type {\n CreatableInstance, CreatableName, CreatableParams,\n CreatableStatusReporter, EmptyObject, Logger,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx, delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport type { CreatableProviderContextType, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { Semaphore } from 'async-mutex'\nimport z from 'zod'\n\n/**\n * No-op `Counter` returned when `this.meter` is unavailable. Lets call sites\n * drop the optional-chain on `.add()` without checking whether instrumentation\n * is wired.\n */\n/* eslint-disable @typescript-eslint/no-empty-function */\nconst noopCounter: Counter = { add: () => {} }\nconst noopUpDownCounter: UpDownCounter = { add: () => {} }\nconst noopGauge: Gauge = { record: () => {} }\nconst noopHistogram: Histogram = { record: () => {} }\n/* eslint-enable @typescript-eslint/no-empty-function */\n\nconst CreatableNameZod = z.custom<CreatableName>(val => typeof val === 'string' && val.length > 0)\nconst StatusReporterInstanceZod = z.custom<CreatableStatusReporter<void>>(\n val => val !== null && typeof val === 'object' && 'report' in (val as Record<string, unknown>),\n)\nconst AccountInstanceZod = z.custom<AccountInstance>(\n val => val !== null && typeof val === 'object' && 'address' in (val as Record<string, unknown>),\n)\n\nexport const ActorParamsV3Zod = z.object({\n account: AccountInstanceZod,\n locator: z.unknown(),\n name: CreatableNameZod,\n statusReporter: StatusReporterInstanceZod.optional(),\n})\n\nexport type ActorParamsV3<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n locator: ProviderFactoryLocatorInstance\n} & (T extends void ? EmptyObject : T)\n\nexport type ActorInstanceV3<T extends ActorParamsV3 = ActorParamsV3> = CreatableInstance<T>\n\nexport type ReadyState = 'pending' | 'ready' | 'failed'\n\nexport interface ReadinessSignal {\n readonly readyError?: Error\n readonly readyState: ReadyState\n whenReady(timeoutMs?: number): Promise<void>\n}\n\n/**\n * Declarative description of the providers an actor needs from a locator.\n * Surfaced as `static readonly needs` on each `ActorV3` subclass; consumed\n * by `locatorFromActorNeeds` to plan which providers to register in a\n * shared per-process locator.\n *\n * `required` monikers must resolve or boot fails fast.\n * `optional` monikers are looked up via `tryGetInstance` and tolerate absence.\n */\nexport interface ActorCapabilityNeeds {\n readonly optional?: readonly string[]\n readonly required: readonly string[]\n}\n\ninterface Deferred<T> {\n promise: Promise<T>\n reject: (reason: unknown) => void\n resolve: (value: T) => void\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void\n let reject!: (reason: unknown) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise, resolve, reject,\n }\n}\n\n/**\n * In-repo fork of `ActorV3` from `@xyo-network/xl1-sdk`, extended with a\n * readiness contract.\n *\n * - `start()` (inherited from `AbstractCreatable`) brings up machinery: timers\n * registered, servers bound. Status transitions to `started`.\n * - `runReadyHandler()` is invoked by the `Orchestrator` after `start()` to\n * run a warm-pass via `readyHandler()`. Subclasses override `readyHandler`\n * if they need to prove they can do useful work (first block produced,\n * first finalization pass, first prune, etc).\n * - `whenReady()` resolves once `readyHandler` resolves; rejects on warm-pass\n * failure.\n */\nexport abstract class ActorV3<TParams extends ActorParamsV3 = ActorParamsV3>\n extends AbstractCreatable<TParams>\n implements ReadinessSignal {\n protected readonly _intervals = new Map<string, NodeJS.Timeout>()\n protected readonly _semaphores = new Map<string, Semaphore>()\n protected readonly _timeouts = new Map<string, NodeJS.Timeout>()\n\n private _logger?: Logger\n private _readyDeferred = createDeferred<void>()\n private _readyError?: Error\n private _readyState: ReadyState = 'pending'\n\n override get logger(): Logger {\n this._logger = new IdLogger(\n assertEx(this.context.logger, () => `Logger is required in context for actor ${this.name}.`),\n () => this.name,\n )\n return this._logger\n }\n\n get readyError(): Error | undefined {\n return this._readyError\n }\n\n get readyState(): ReadyState {\n return this._readyState\n }\n\n protected get account(): AccountInstance {\n return this.params.account\n }\n\n protected get context(): CreatableProviderContextType {\n return this.locator.context\n }\n\n protected get locator(): ProviderFactoryLocatorInstance {\n return this.params.locator\n }\n\n static override async paramsHandler<T extends ActorInstanceV3>(\n params: Partial<T['params']>,\n ): Promise<T['params']> {\n const baseParams = await super.paramsHandler(\n { ...params, name: params.name ?? 'UnknownActor' },\n ) as T['params']\n const account = assertEx(params.account, () => `params.account is required for actor ${baseParams.name}.`)\n const locator = assertEx(params.locator, () => `params.locator is required for actor ${baseParams.name}.`)\n return {\n ...baseParams, account, locator,\n } as T['params']\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number): void {\n if (this.status !== 'starting') {\n this.logger?.warn(`Cannot register timer '${timerName}' because actor is not starting.`)\n return\n }\n let running = false\n this._semaphores.set(timerName, new Semaphore(1))\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (this.status !== 'started' || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(`Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`)\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback().then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(`Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`)\n } else if (duration > 5000) {\n this.logger?.warn(`Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`)\n }\n }).catch((error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error))\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${err.message}`)\n if (err.stack) this.logger?.error(err.stack)\n }).finally(() => {\n release()\n running = false\n })\n }).catch((error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error))\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${err.message}`)\n })\n }, periodMs)\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n this._timeouts.set(timerName, timeoutId)\n this.logger?.debug(`Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`)\n }\n\n /**\n * Invoked by the Orchestrator after `start()` to run the warm-pass.\n * Idempotent: returns immediately if already invoked.\n * Throws if `readyHandler` throws; resolves once `readyHandler` resolves.\n */\n async runReadyHandler(): Promise<void> {\n if (this._readyState !== 'pending') return\n try {\n await this.readyHandler()\n this._readyState = 'ready'\n this._readyDeferred.resolve()\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n this._readyState = 'failed'\n this._readyError = error\n this._readyDeferred.reject(error)\n throw error\n }\n }\n\n override async stopHandler(): Promise<void> {\n await super.stopHandler()\n this.logger?.debug('Stopping all timers...')\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n while (semaphore.isLocked()) {\n this.logger?.debug('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n this._semaphores.clear()\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n this.logger?.debug('Stopped.')\n }\n\n async whenReady(timeoutMs?: number): Promise<void> {\n if (timeoutMs === undefined) {\n await this._readyDeferred.promise\n return\n }\n let timer: NodeJS.Timeout | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`Actor ${this.name} did not become ready within ${timeoutMs}ms`))\n }, timeoutMs)\n })\n try {\n await Promise.race([this._readyDeferred.promise, timeout])\n } finally {\n if (timer) clearTimeout(timer)\n }\n }\n\n /**\n * Create a `Counter` instrument bound to this actor's meter, or a no-op\n * stub if telemetry is not wired. Always returns a non-undefined value so\n * call sites can drop the optional-chain on `.add()`.\n *\n * TODO: in a future pass, consider folding these single-instrument helpers\n * into a declarative `createActorMeters({ counters: {...}, gauges: {...} })`\n * spec API for actors with many instruments.\n */\n protected counter(name: string, description: string): Counter {\n return this.meter?.createCounter(name, { description }) ?? noopCounter\n }\n\n /** Create a synchronous `Gauge` instrument, or a no-op stub if telemetry is not wired. */\n protected gauge(name: string, description: string): Gauge {\n return this.meter?.createGauge(name, { description }) ?? noopGauge\n }\n\n /** Create a `Histogram` instrument, or a no-op stub if telemetry is not wired. */\n protected histogram(name: string, description: string): Histogram {\n return this.meter?.createHistogram(name, { description }) ?? noopHistogram\n }\n\n /**\n * Override in subclasses to prove the actor can do useful work.\n * Default: no-op (the actor declares itself ready as soon as `start()` returns).\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected async readyHandler(): Promise<void> {}\n\n /** Create an `UpDownCounter` instrument, or a no-op stub if telemetry is not wired. */\n protected upDownCounter(name: string, description: string): UpDownCounter {\n return this.meter?.createUpDownCounter(name, { description }) ?? noopUpDownCounter\n }\n}\n\nexport abstract class Actor<TParams extends ActorParamsV3 = ActorParamsV3> extends ActorV3<TParams> {}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string, defaultMetricsScrapePort = 9464) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultMetricsScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: { serviceName, serviceVersion }, otlpEndpoint, metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const ApiConfigZod = HostActorConfigZod.extend(z.object({\n initRewardsCache: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v !== '0' && v !== 'false' && v !== false && v != 0,\n ).default(true).register(globalRegistry, {\n description: 'Whether to initialize the rewards cache on startup',\n title: 'api.initRewardsCache',\n type: 'boolean',\n }),\n /**\n * When `true`, the API actor runs in stateless mode: it holds no local\n * backing-store ownership, never loads the local LMDB/MongoDB node, and\n * federates every JSON-RPC request to upstream owner-actors via `JsonRpc*`\n * providers. Multiple stateless API instances can run behind a load\n * balancer for horizontal scaling. Requires `remote.rpc` to point at the\n * upstream API/Finalizer/Mempool/Indexer surfaces.\n */\n stateless: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v === '1' || v === 'true' || v === true || v == 1,\n ).default(false).register(globalRegistry, {\n description: 'Run the API actor as a stateless federation node (availableBackings: [network])',\n title: 'api.stateless',\n type: 'boolean',\n }),\n /**\n * Back-compat for the surface-aware route split. When `true`, `POST /rpc`\n * serves the full `XyoConnection` (both node-surface and indexed-surface\n * methods), preserving pre-Phase-7 behavior for clients that haven't yet\n * migrated to `POST /rpc/indexed`. When `false`, `/rpc` is strictly\n * node-surface only and indexed methods are 404 at `/rpc`.\n *\n * `/rpc/indexed` mounts independently of this flag whenever the locator's\n * connection has any indexed branch.\n *\n * Default `true` for the first release that includes Phase 7 — flip to\n * `false` per environment once external clients (explorers, wallets, dApps)\n * have moved their indexed-method calls to `/rpc/indexed`.\n */\n legacyMixedRpc: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v !== '0' && v !== 'false' && v !== false && v != 0,\n ).default(true).register(globalRegistry, {\n description: 'Serve the full XyoConnection at POST /rpc (no surface filter). Set false to enforce node-surface-only at /rpc; indexed methods always available at /rpc/indexed regardless.',\n title: 'api.legacyMixedRpc',\n type: 'boolean',\n }),\n}).shape)\n\nexport type ApiConfig = z.infer<typeof ApiConfigZod>\n\nexport const isApiConfig = zodIsFactory(ApiConfigZod)\nexport const asApiConfig = zodAsFactory(ApiConfigZod, 'asApiConfig')\nexport const toApiConfig = zodToFactory(ApiConfigZod, 'toApiConfig')\n\nexport interface ApiConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: ApiConfig\n}\n\nexport const ApiConfigContext: z.ZodType<ApiConfigContext> = BaseConfigContextZod.extend({ config: ApiConfigZod })\n\nexport const isApiConfigContext: <T>(value: T) => value is T & ApiConfigContext = zodIsFactory(ApiConfigContext)\nexport const asApiConfigContext: ReturnType<typeof zodAsFactory<ApiConfigContext>> = zodAsFactory(ApiConfigContext, 'asApiConfigContext')\nexport const toApiConfigContext: ReturnType<typeof zodToFactory<ApiConfigContext>> = zodToFactory(ApiConfigContext, 'toApiConfigContext')\n","import {\n AddressZod, HexZod, toAddress, toHex, zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext, ChainId } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1ConvertFactor, BaseConfigContextZod, HostActorConfigZod, XL1,\n} from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nconst DEFAULT_FIXED_FEE = toHex(XL1(1000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_VARIABLE_FEE_BASIS_POINTS = 300 // 3%\nconst DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')\nconst DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')\nconst DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80')\nconst DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')\nconst DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(1_000_000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(1500n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_SCANNER_INTERVAL_MS = 30_000\n\nexport const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)\nexport type BasisPoints = z.infer<typeof BasisPointsZod>\n\nexport const BridgeConfigZod = HostActorConfigZod.extend({\n escrowAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge escrow will be sent',\n title: 'bridge.escrowAddress',\n type: 'string',\n }),\n feesAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge fees will be sent',\n title: 'bridge.feesAddress',\n type: 'string',\n }),\n feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {\n default: DEFAULT_FIXED_FEE,\n description: 'Fixed fee (in AttoXL1) applied to bridge transfers',\n title: 'bridge.feeFixed',\n type: 'bigint',\n }),\n feeRateBasisPoints: BasisPointsZod.default(DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry, {\n default: DEFAULT_VARIABLE_FEE_BASIS_POINTS,\n description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',\n title: 'bridge.feeRateBasisPoints',\n type: 'number',\n }),\n maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MAX_BRIDGE_AMOUNT,\n description: 'Maximum amount allowed for a bridge transfer',\n title: 'bridge.maxBridgeAmount',\n type: 'string',\n }),\n minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MIN_BRIDGE_AMOUNT,\n description: 'Minimum amount required for a bridge transfer',\n title: 'bridge.minBridgeAmount',\n type: 'string',\n }),\n redisHost: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge Redis instance',\n title: 'bridge.redisHost',\n type: 'string',\n }),\n redisPort: z.coerce.number().int().positive().default(6379).register(globalRegistry, {\n default: 6379,\n description: 'Port for the Bridge Redis instance',\n title: 'bridge.redisPort',\n type: 'number',\n }),\n scannerIntervalMs: z.coerce.number().int().positive().default(DEFAULT_SCANNER_INTERVAL_MS).register(globalRegistry, {\n default: DEFAULT_SCANNER_INTERVAL_MS,\n description: 'How often (ms) the EVM->XL1 scanner polls the remote bridge contract for new BridgedToRemote ids confirmed at depth.',\n title: 'bridge.scannerIntervalMs',\n type: 'number',\n }),\n remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteBridgeContractAddress',\n type: 'string',\n }),\n remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {\n default: DEFAULT_HARDHAT_CHAIN_ID,\n description: 'Remote chain ID',\n title: 'bridge.remoteChainId',\n type: 'string',\n }),\n remoteConfirmationDepth: z.union([\n z.coerce.number().int().nonnegative(),\n z.literal('finalized'),\n ]).optional().register(globalRegistry, {\n description: 'Block depth or BlockTag at which the remote (EVM) chain is read as canonical. Numeric: number of confirmations behind head. '\n + \"\\'finalized\\': Casper FFG finalized block. Resolved per-chain by getRemoteConfirmationDepth when unset.\",\n title: 'bridge.remoteConfirmationDepth',\n type: 'string',\n }),\n remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_TOKEN_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteTokenAddress',\n type: 'string',\n }),\n remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry, {\n description: 'Private key for the wallet to use for the remote chain wallet',\n title: 'bridge.remoteChainWalletPrivateKey',\n type: 'string',\n }),\n xl1ChainId: HexZod.optional().register(globalRegistry, {\n description: 'XL1 chain id used for bridging',\n title: 'bridge.xl1ChainId',\n type: 'string',\n }),\n xl1TokenAddress: HexZod.optional().register(globalRegistry, {\n description: 'XL1 token address used for bridging',\n title: 'bridge.xl1TokenAddress',\n type: 'string',\n }),\n})\n\nexport type BridgeConfig = z.infer<typeof BridgeConfigZod>\n\nexport const BridgeSettingsZod = BridgeConfigZod.pick({\n feeFixed: true,\n feeRateBasisPoints: true,\n feesAddress: true,\n escrowAddress: true,\n maxBridgeAmount: true,\n minBridgeAmount: true,\n remoteChainId: true,\n remoteTokenAddress: true,\n xl1TokenAddress: true,\n xl1ChainId: true,\n}).required()\n\nexport type BridgeSettings = z.infer<typeof BridgeSettingsZod>\n\nexport const isBridgeConfig = zodIsFactory(BridgeConfigZod)\nexport const asBridgeConfig = zodAsFactory(BridgeConfigZod, 'asBridgeConfig')\nexport const toBridgeConfig = zodToFactory(BridgeConfigZod, 'toBridgeConfig')\n\nexport interface BridgeConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: BridgeConfig\n}\n\nexport const BridgeConfigContext: z.ZodType<BridgeConfigContext> = BaseConfigContextZod.extend({ config: BridgeConfigZod })\n\nexport const isBridgeConfigContext: <T>(value: T) => value is T & BridgeConfigContext = zodIsFactory(BridgeConfigContext)\nexport const asBridgeConfigContext: ReturnType<typeof zodAsFactory<BridgeConfigContext>> = zodAsFactory(BridgeConfigContext, 'asBridgeConfigContext')\nexport const toBridgeConfigContext: ReturnType<typeof zodToFactory<BridgeConfigContext>> = zodToFactory(BridgeConfigContext, 'toBridgeConfigContext')\n","import {\n AddressZod,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport {\n BaseConfigContextZod, DEFAULT_MIN_CANDIDATES, HostActorConfigZod,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nexport const FinalizerConfigZod = HostActorConfigZod.extend({\n allowedProducers: z.array(AddressZod).optional(),\n // Period (ms) between finalizer ticks. Default matches the historical\n // hardcoded value in FinalizerActor; tests can lower it to drive faster\n // block finalization.\n finalizationCheckInterval: z.coerce.number().default(500),\n minCandidates: z.number().int().min(0).default(DEFAULT_MIN_CANDIDATES),\n})\n\nexport type FinalizerConfig = z.infer<typeof FinalizerConfigZod>\n\nexport const isFinalizerConfig = zodIsFactory(FinalizerConfigZod)\nexport const asFinalizerConfig = zodAsFactory(FinalizerConfigZod, 'asFinalizerConfig')\nexport const toFinalizerConfig = zodToFactory(FinalizerConfigZod, 'toFinalizerConfig')\n\nexport interface FinalizerConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: FinalizerConfig\n}\n\nexport const FinalizerConfigContext: z.ZodType<FinalizerConfigContext> = BaseConfigContextZod.extend({ config: FinalizerConfigZod })\n\nexport const isFinalizerConfigContext: <T>(value: T) => value is T & FinalizerConfigContext = zodIsFactory(FinalizerConfigContext)\nexport const asFinalizerConfigContext: ReturnType<typeof zodAsFactory<FinalizerConfigContext>> = zodAsFactory(FinalizerConfigContext, 'asFinalizerConfigContext')\nexport const toFinalizerConfigContext: ReturnType<typeof zodToFactory<FinalizerConfigContext>> = zodToFactory(FinalizerConfigContext, 'toFinalizerConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL = 1000\nexport const DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL = 1000\n\nexport const MempoolConfigZod = HostActorConfigZod.extend({\n enabled: z.union([z.string(), z.boolean()]).default('false').transform((val, ctx) => {\n if (typeof val === 'boolean') return val\n const normalized = val.toLowerCase().trim()\n if (['true', '1', 'yes', 'on'].includes(normalized)) return true\n if (['false', '0', 'no', 'off'].includes(normalized)) return false\n ctx.addIssue({\n code: 'invalid_type',\n expected: 'boolean',\n message: `Invalid boolean value: \"${val}\". Use true/false, 1/0, yes/no.`,\n })\n return z.NEVER\n }).register(globalRegistry, {\n default: 'false',\n description: 'Enable the Mempool',\n title: 'mempool.enabled',\n type: 'boolean',\n }),\n blockPruneInterval: z.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between pending block prune attempts',\n title: 'mempool.blockPruneInterval',\n type: 'number',\n }),\n transactionPruneInterval: z.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between pending transaction prune attempts',\n title: 'mempool.transactionPruneInterval',\n type: 'number',\n }),\n})\n\nexport type MempoolConfig = z.infer<typeof MempoolConfigZod>\n\nexport const isMempoolConfig = zodIsFactory(MempoolConfigZod)\nexport const asMempoolConfig = zodAsFactory(MempoolConfigZod, 'asMempoolConfig')\nexport const toMempoolConfig = zodToFactory(MempoolConfigZod, 'toMempoolConfig')\n\nexport interface MempoolConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: MempoolConfig\n}\n\nexport const MempoolConfigContext: z.ZodType<MempoolConfigContext> = BaseConfigContextZod.extend({ config: MempoolConfigZod })\n\nexport const isMempoolConfigContext: <T>(value: T) => value is T & MempoolConfigContext = zodIsFactory(MempoolConfigContext)\nexport const asMempoolConfigContext: ReturnType<typeof zodAsFactory<MempoolConfigContext>> = zodAsFactory(MempoolConfigContext, 'asMempoolConfigContext')\nexport const toMempoolConfigContext: ReturnType<typeof zodToFactory<MempoolConfigContext>> = zodToFactory(MempoolConfigContext, 'toMempoolConfigContext')\n","import {\n AddressZod,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { ActorConfigZod, BaseConfigContextZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL = 10_000 // 10 seconds\n\nexport const ProducerConfigZod = ActorConfigZod.extend(z.object({\n allowlist: z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed producer addresses, if undefined anyone can participate',\n title: 'allowlist',\n type: 'array',\n }),\n\n blockProductionCheckInterval: z.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between block production attempts',\n title: 'producer.blockProductionCheckInterval',\n type: 'number',\n }),\n disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {\n description: 'Should the producer skip redeclaring their intent to continue producing blocks',\n title: 'producer.disableIntentRedeclaration',\n type: 'boolean',\n }),\n heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {\n description: 'The number of milliseconds between heartbeats if no blocks are produced',\n title: 'producer.heartbeatInterval',\n type: 'number',\n }),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).register(globalRegistry, {\n description: 'Minimum stake required to be a Producer',\n title: 'producer.minStake',\n type: 'number',\n }),\n // TODO: Address schema\n rewardAddress: z.string().optional().register(globalRegistry, {\n description: 'Address to receive block rewards',\n title: 'producer.rewardAddress',\n type: 'string',\n }),\n}).shape)\n\nexport type ProducerConfig = z.infer<typeof ProducerConfigZod>\n\nexport const isProducerConfig = zodIsFactory(ProducerConfigZod)\nexport const asProducerConfig = zodAsFactory(ProducerConfigZod, 'asProducerConfig')\nexport const toProducerConfig = zodToFactory(ProducerConfigZod, 'toProducerConfig')\n\nexport interface ProducerConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: ProducerConfig\n}\n\nexport const ProducerConfigContext: z.ZodType<ProducerConfigContext> = BaseConfigContextZod.extend({ config: ProducerConfigZod })\n\nexport const isProducerConfigContext: <T>(value: T) => value is T & ProducerConfigContext = zodIsFactory(ProducerConfigContext)\nexport const asProducerConfigContext: ReturnType<typeof zodAsFactory<ProducerConfigContext>> = zodAsFactory(ProducerConfigContext, 'asProducerConfigContext')\nexport const toProducerConfigContext: ReturnType<typeof zodToFactory<ProducerConfigContext>> = zodToFactory(ProducerConfigContext, 'toProducerConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport type { z } from 'zod'\n\nexport const RewardRedemptionConfigZod = HostActorConfigZod.extend({})\n\nexport type RewardRedemptionConfig = z.infer<typeof RewardRedemptionConfigZod>\n\nexport const isRewardRedemptionConfig = zodIsFactory(RewardRedemptionConfigZod)\nexport const asRewardRedemptionConfig = zodAsFactory(RewardRedemptionConfigZod, 'asRewardRedemptionConfig')\nexport const toRewardRedemptionConfig = zodToFactory(RewardRedemptionConfigZod, 'toRewardRedemptionConfig')\n\nexport interface RewardRedemptionConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: RewardRedemptionConfig\n}\n\nexport const RewardRedemptionConfigContext: z.ZodType<RewardRedemptionConfigContext> = BaseConfigContextZod.extend({ config: RewardRedemptionConfigZod })\n\nexport const isRewardRedemptionConfigContext: <T>(value: T) => value is T & RewardRedemptionConfigContext = zodIsFactory(RewardRedemptionConfigContext)\nexport const asRewardRedemptionConfigContext: ReturnType<typeof zodAsFactory<RewardRedemptionConfigContext>> = zodAsFactory(RewardRedemptionConfigContext, 'asRewardRedemptionConfigContext')\nexport const toRewardRedemptionConfigContext: ReturnType<typeof zodToFactory<RewardRedemptionConfigContext>> = zodToFactory(RewardRedemptionConfigContext, 'toRewardRedemptionConfigContext')\n","import { deepMerge } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport function mergeConfig({ actors, ...baseConfig }: Config) {\n return {\n ...baseConfig,\n actors: actors.map((actor) => {\n return deepMerge(baseConfig, actor)\n }),\n }\n}\n","import { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { AccountInstance, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-sdk'\nimport { createDeclarationIntent } from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { WalletKind } from '@xyo-network/storage-model'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { getBuiltInDevMnemonic, getResolvedWalletReport } from './walletResolution.ts'\n\nexport async function initActorSeedPhrase(context: ActorConfigContext, bios: BiosExternalInterface): Promise<string> {\n const { logger, config } = context\n const walletKind = config.name as WalletKind\n void bios\n const report = getResolvedWalletReport()\n if (isString(report?.root.mnemonic)) return report.root.mnemonic\n const fallback = getBuiltInDevMnemonic()\n logger?.debug(`[${walletKind}] Falling back to built-in development mnemonic`)\n return assertEx(fallback, () => 'Unable to resolve mnemonic')\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport { DEFAULT_WALLET_PATH, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\nimport { HDNodeWallet, Mnemonic } from 'ethers'\n\n/**\n * Default BIP-32 derivation path per actor, expressed as a *relative* path\n * (the consumer appends it to the root wallet base path). Each actor resolves\n * to a distinct slot to avoid collisions out of the box.\n */\nexport const DEFAULT_ACTOR_ACCOUNT_PATH: Record<string, string> = {\n api: '3',\n bridge: '1',\n finalizer: '5',\n mempool: '4',\n producer: '0',\n rewardRedemption: '2',\n}\n\nexport const BUILT_IN_DEV_MNEMONIC = 'crane ribbon cook cousin tobacco vital moral protect merit knock veteran hint knee ocean nurse'\nexport const INSECURE_GENESIS_REWARD_MNEMONIC = 'test test test test test test test test test test test junk'\nexport const GENESIS_REWARD_AMOUNT = 20_000_000_000_000_000_000_000n\nconst ATTO_XL1_PER_XL1 = 1_000_000_000_000_000_000n\n\nexport const ROOT_WALLET_RUNTIME_ID = '_root'\nexport const SHARED_ACCOUNT_REPORT_COUNT = 10\nexport type RootMnemonicConfig = Config & { mnemonic?: string }\ntype ActorWalletConfig = Partial<ActorConfig> & { accountPath?: string }\n\nexport type MnemonicKind = 'built-in-dev' | 'configured-root' | 'insecure-genesis-reward'\n\nexport interface ResolvedRootWallet {\n basePath: string\n isBuiltInDevMnemonic: boolean\n isConfigured: boolean\n mnemonic: string\n mnemonicKind: Extract<MnemonicKind, 'built-in-dev' | 'configured-root'>\n}\n\nexport interface ResolvedWalletMetadata {\n accountPath: string\n actorName: string\n address: string\n derivationPath: string\n label: string\n mnemonic: string\n mnemonicKind: MnemonicKind\n privateKey?: string\n usesBuiltInDevMnemonic: boolean\n}\n\nexport interface ResolvedWalletReport {\n requestedActors: string[]\n root: ResolvedRootWallet\n sharedAccounts: ResolvedWalletMetadata[]\n}\n\nconst ACTOR_LABELS: Record<string, string> = {\n [ROOT_WALLET_RUNTIME_ID]: 'root/local-node',\n api: 'api',\n bridge: 'bridge',\n finalizer: 'finalizer',\n mempool: 'mempool',\n producer: 'producer',\n rewardRedemption: 'rewardRedemption',\n}\n\nlet activeWalletReport: ResolvedWalletReport | undefined\n\nfunction getAccountLabel(actorName: string): string {\n return ACTOR_LABELS[actorName] ?? actorName\n}\n\nexport function clearResolvedWalletReport() {\n activeWalletReport = undefined\n}\n\n/**\n * Resolve the effective BIP-32 derivation path for an actor.\n *\n * - If the actor config specifies `accountPath`, use it.\n * - Otherwise fall back to `DEFAULT_ACTOR_ACCOUNT_PATH[actorName]`.\n * - Otherwise fall back to `\"0\"` (a relative path that derives to the first slot\n * under the root wallet's base path).\n *\n * The returned value is exactly what the user provided (or the default) —\n * absolute paths keep their `m/` prefix; relative paths do not.\n */\nexport function resolveActorAccountPath(actorName: string, actorConfig?: ActorWalletConfig): string {\n if (actorConfig?.accountPath !== undefined) return actorConfig.accountPath\n return DEFAULT_ACTOR_ACCOUNT_PATH[actorName] ?? '0'\n}\n\nexport function isAbsoluteAccountPath(accountPath: string): boolean {\n return accountPath.startsWith('m/')\n}\n\n/**\n * Expand a (possibly relative) actor accountPath into a fully qualified BIP-32\n * derivation path. Used for reporting and collision detection.\n */\nexport function expandAccountPath(accountPath: string, basePath: string = DEFAULT_WALLET_PATH): string {\n return isAbsoluteAccountPath(accountPath) ? accountPath : `${basePath}/${accountPath}`\n}\n\nasync function deriveWalletAtPath(mnemonic: string, accountPath: string): Promise<WalletInstance> {\n if (isAbsoluteAccountPath(accountPath)) {\n // `HDWallet.fromPhrase` defaults to a derived path, not the root, so an\n // arbitrary absolute path (e.g. m/44'/60'/1'/0/0) can't be derived through\n // it. Build a true root node via ethers, derive the full path, then wrap.\n const seed = Mnemonic.fromPhrase(mnemonic).computeSeed()\n const rootNode = HDNodeWallet.fromSeed(seed)\n const derivedNode = rootNode.derivePath(accountPath)\n return await HDWallet.createFromNode(derivedNode)\n }\n const baseWallet = await generateXyoBaseWalletFromPhrase(mnemonic)\n return await baseWallet.derivePath(accountPath)\n}\n\nexport function getBuiltInDevMnemonic(): string {\n return BUILT_IN_DEV_MNEMONIC\n}\n\nexport function getInsecureGenesisRewardMnemonic(): string {\n return INSECURE_GENESIS_REWARD_MNEMONIC\n}\n\nexport function resolveRootWallet(configuration: RootMnemonicConfig): ResolvedRootWallet {\n const isConfigured = configuration.mnemonic !== undefined\n const mnemonic = configuration.mnemonic ?? BUILT_IN_DEV_MNEMONIC\n const isBuiltInDevMnemonic = mnemonic === BUILT_IN_DEV_MNEMONIC\n return {\n basePath: DEFAULT_WALLET_PATH,\n isBuiltInDevMnemonic,\n isConfigured,\n mnemonic,\n mnemonicKind: isBuiltInDevMnemonic ? 'built-in-dev' : 'configured-root',\n }\n}\n\nasync function resolveWalletMetadata({\n accountPath,\n actorName,\n mnemonic,\n mnemonicKind,\n}: {\n accountPath: string\n actorName: string\n mnemonic: string\n mnemonicKind: MnemonicKind\n}): Promise<ResolvedWalletMetadata> {\n const account = await deriveWalletAtPath(mnemonic, accountPath)\n return {\n accountPath,\n actorName,\n address: account.address,\n derivationPath: expandAccountPath(accountPath),\n label: getAccountLabel(actorName),\n mnemonic,\n mnemonicKind,\n privateKey: account.privateKey,\n usesBuiltInDevMnemonic: mnemonic === BUILT_IN_DEV_MNEMONIC,\n }\n}\n\nexport async function resolveActorWallet(\n actorName: string,\n actorConfig: ActorWalletConfig | undefined,\n root: ResolvedRootWallet,\n): Promise<ResolvedWalletMetadata> {\n return await resolveWalletMetadata({\n accountPath: resolveActorAccountPath(actorName, actorConfig),\n actorName,\n mnemonic: root.mnemonic,\n mnemonicKind: root.mnemonicKind,\n })\n}\n\nexport class ActorMnemonicNotAllowedError extends Error {\n readonly actors: string[]\n constructor(actors: string[]) {\n super([\n `Per-actor mnemonics are no longer allowed (found on: ${actors.join(', ')}).`,\n 'Move the mnemonic to the root (XL1_MNEMONIC, --mnemonic, or config file \"xl1.mnemonic\") and give each actor a distinct accountPath.',\n ].join('\\n'))\n this.name = 'ActorMnemonicNotAllowedError'\n this.actors = actors\n }\n}\n\nexport function assertNoActorMnemonics(configuration: RootMnemonicConfig): void {\n const offenders = configuration.actors\n .filter((actor): actor is ActorConfig & { mnemonic: string } => typeof (actor as { mnemonic?: unknown }).mnemonic === 'string')\n .map(actor => actor.name)\n if (offenders.length > 0) throw new ActorMnemonicNotAllowedError(offenders)\n}\n\nexport class DerivationPathCollisionError extends Error {\n readonly collisions: Record<string, string[]>\n constructor(collisions: Record<string, string[]>) {\n const lines = Object.entries(collisions).map(\n ([path, actors]) => ` - ${actors.join(', ')} → ${path}`,\n )\n super([\n 'Two or more actors resolve to the same wallet derivation path:',\n ...lines,\n 'Change each actor\\'s accountPath so every actor has a distinct path.',\n ].join('\\n'))\n this.name = 'DerivationPathCollisionError'\n this.collisions = collisions\n }\n}\n\nexport function detectDerivationPathCollisions(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): DerivationPathCollisionError | undefined {\n const actorConfigMap = new Map(configuration.actors.map(actor => [actor.name, actor]))\n const bucketsByPath = new Map<string, string[]>()\n for (const actorName of requestedActors) {\n const accountPath = resolveActorAccountPath(actorName, actorConfigMap.get(actorName))\n const fullPath = expandAccountPath(accountPath)\n const bucket = bucketsByPath.get(fullPath) ?? []\n bucket.push(actorName)\n bucketsByPath.set(fullPath, bucket)\n }\n const collisions: Record<string, string[]> = {}\n for (const [path, actors] of bucketsByPath) {\n if (actors.length > 1) collisions[path] = actors\n }\n if (Object.keys(collisions).length === 0) return undefined\n return new DerivationPathCollisionError(collisions)\n}\n\nexport async function resolveWalletReport(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): Promise<ResolvedWalletReport> {\n const root = resolveRootWallet(configuration)\n const actorConfigMap = new Map(configuration.actors.map(actor => [actor.name, actor]))\n\n const resolvedActors = await Promise.all(\n requestedActors.map(async actorName => await resolveActorWallet(actorName, actorConfigMap.get(actorName), root)),\n )\n\n const labelMap = new Map<string, string[]>()\n for (const actor of resolvedActors) {\n const labels = labelMap.get(actor.derivationPath) ?? []\n labels.push(actor.label)\n labelMap.set(actor.derivationPath, labels)\n }\n\n const sharedAccounts = await Promise.all(\n Array.from({ length: SHARED_ACCOUNT_REPORT_COUNT }, (_, index) => index).map(async (sharedIndex) => {\n const account = await resolveWalletMetadata({\n accountPath: `${sharedIndex}`,\n actorName: ROOT_WALLET_RUNTIME_ID,\n mnemonic: root.mnemonic,\n mnemonicKind: root.mnemonicKind,\n })\n const labels = labelMap.get(account.derivationPath)\n return { ...account, label: labels?.join(', ') ?? `shared[${sharedIndex}]` }\n }),\n )\n\n return {\n requestedActors: [...requestedActors],\n root,\n sharedAccounts,\n }\n}\n\nexport async function buildInsecureGenesisRewardAccounts(): Promise<ResolvedWalletMetadata[]> {\n const accounts = await Promise.all(\n Array.from({ length: SHARED_ACCOUNT_REPORT_COUNT }, (_, index) => index).map(async (sharedIndex) => {\n const account = await resolveWalletMetadata({\n accountPath: `${sharedIndex}`,\n actorName: 'genesisReward',\n mnemonic: INSECURE_GENESIS_REWARD_MNEMONIC,\n mnemonicKind: 'insecure-genesis-reward',\n })\n return { ...account, label: sharedIndex === 0 ? 'genesisRewardAddress' : `genesisReward[${sharedIndex}]` }\n }),\n )\n return accounts\n}\n\nexport async function initializeResolvedWalletReport(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): Promise<ResolvedWalletReport> {\n activeWalletReport = await resolveWalletReport(requestedActors, configuration)\n return activeWalletReport\n}\n\nexport function getResolvedWalletReport(): ResolvedWalletReport | undefined {\n return activeWalletReport\n}\n\nfunction formatSharedAccount(account: ResolvedWalletMetadata, showPrivateKey: boolean) {\n const lines = [\n `[${account.accountPath}] ${account.label}`,\n `source: ${account.mnemonicKind === 'built-in-dev' ? 'built-in dev mnemonic' : 'configured root mnemonic'}`,\n `path: ${account.derivationPath}`,\n `address: ${account.address}`,\n ]\n if (showPrivateKey) lines.push(`privateKey: ${account.privateKey ?? 'unavailable'}`)\n return lines.join('\\n')\n}\n\nfunction formatGenesisRewardAccount(account: ResolvedWalletMetadata) {\n const balance = account.accountPath === '0' ? GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1 : 0n\n return [\n `[${account.accountPath}] ${account.label}`,\n `path: ${account.derivationPath}`,\n `address: ${account.address}`,\n `privateKey: ${account.privateKey ?? 'unavailable'}`,\n `balance: ${balance.toString()} XL1`,\n ].join('\\n')\n}\n\nexport function formatWalletReport(report: ResolvedWalletReport): string {\n const sections: string[] = []\n const showSecrets = report.root.isBuiltInDevMnemonic\n\n sections.push(showSecrets ? 'Development wallet detected.' : 'Wallet summary')\n\n if (showSecrets) {\n sections.push([\n 'DEVELOPMENT WALLET WARNING',\n '',\n 'XL1 is using the built-in development mnemonic.',\n 'This mnemonic is fixed, public, and does not change between runs.',\n 'The addresses and private keys below are unsafe and must never be used for real funds, production systems, or shared environments.',\n 'Anyone with this information can fully control these accounts.',\n '',\n 'Mnemonic:',\n report.root.mnemonic,\n ].join('\\n'))\n }\n\n sections.push([\n `Shared wallet accounts from ${report.root.basePath}:`,\n '',\n report.sharedAccounts.map(account => formatSharedAccount(account, showSecrets)).join('\\n\\n'),\n ].join('\\n'))\n\n return sections.join('\\n\\n')\n}\n\nexport function formatInsecureGenesisRewardWarning(accounts: ResolvedWalletMetadata[]): string {\n return [\n 'INSECURE GENESIS REWARD WALLET WARNING',\n '',\n 'XL1 is using a public, insecure fallback wallet for the genesis reward address.',\n 'This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.',\n 'Anyone with this information can fully control the genesis reward wallet.',\n '',\n 'Genesis reward phrase:',\n INSECURE_GENESIS_REWARD_MNEMONIC,\n '',\n `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,\n '',\n `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,\n '',\n accounts.map(account => formatGenesisRewardAccount(account)).join('\\n\\n'),\n ].join('\\n')\n}\n\nexport async function resolveGenesisRewardAddress(config: Pick<Config, 'chain'>): Promise<Address> {\n if (config.chain.genesisRewardAddress) return config.chain.genesisRewardAddress\n const wallet = await generateXyoBaseWalletFromPhrase(INSECURE_GENESIS_REWARD_MNEMONIC)\n const account = await wallet.derivePath('0')\n return account.address\n}\n\nexport async function resolveWalletForActor(actorName: string, accountPath?: string): Promise<WalletInstance> {\n const report = activeWalletReport\n const mnemonic = report?.root.mnemonic ?? BUILT_IN_DEV_MNEMONIC\n const resolvedAccountPath = accountPath ?? resolveActorAccountPath(actorName)\n return await deriveWalletAtPath(mnemonic, resolvedAccountPath)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type {\n AttachableArchivistInstance, AttachableModuleInstance, BridgeInstance, ModuleIdentifier,\n} from '@xyo-network/sdk-js'\nimport { asAttachableArchivistInstance, asAttachableModuleInstance } from '@xyo-network/sdk-js'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport async function initBridgedModule({ bridge, moduleName }: { bridge: BridgeInstance; moduleName: ModuleIdentifier }): Promise<AttachableModuleInstance> {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport async function initBridgedArchivistModule({ bridge, moduleName }: {\n bridge: BridgeInstance\n moduleName: ModuleIdentifier\n}): Promise<AttachableArchivistInstance> {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { resolveWalletForActor } from './walletResolution.ts'\n\n/**\n * Process-global singleton cache, keyed by actor name. Preserves referential\n * identity of the resolved wallet across repeated calls (e.g. locator rebuilds\n * during tests) and avoids redundant HD-derivation work.\n */\nconst actorAccountSingletons: Record<string, Promisable<WalletInstance>> = {}\n\n/**\n * Resolve the `WalletInstance` for an actor, deriving it from the active\n * root mnemonic at the actor's configured account path.\n *\n * Memoized by `context.config.name` for the lifetime of the process.\n */\nexport async function initActorWallet(context: ActorConfigContext): Promise<WalletInstance> {\n const actorName = context.config.name\n if (isDefined(actorAccountSingletons[actorName])) return actorAccountSingletons[actorName]\n const accountPath = typeof context.config.accountPath === 'string' ? context.config.accountPath : undefined\n const account = await resolveWalletForActor(actorName, accountPath)\n context.logger?.debug(`[${actorName}] Using wallet address ${account.address}`)\n actorAccountSingletons[actorName] = account\n return actorAccountSingletons[actorName]\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\n\nimport type { ActorInstanceV3, ReadyState } from '../actor/v3/index.ts'\nimport { ActorV3 } from '../actor/v3/index.ts'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n readonly readyState: ReadyState\n isReady(): boolean\n isShuttingDown(): boolean\n registerActor(actor: ActorInstanceV3): Promise<void>\n whenReady(timeoutMs?: number): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: (ActorInstanceV3)[] = []\n protected running = false\n protected shuttingDown = false\n\n get readyState(): ReadyState {\n if (this.actors.length === 0) return 'pending'\n if (this.actors.some(a => isLocalActor(a) && a.readyState === 'failed')) return 'failed'\n if (this.actors.every(a => isLocalActor(a) && a.readyState === 'ready')) return 'ready'\n return 'pending'\n }\n\n isReady(): boolean {\n return this.readyState === 'ready' && !this.shuttingDown\n }\n\n isShuttingDown(): boolean {\n return this.shuttingDown\n }\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstanceV3) {\n this.actors.push(actor)\n if (this.running) {\n // Already running — bring this actor up immediately and trigger its ready handler.\n await actor.start()\n if (isLocalActor(actor)) {\n actor.runReadyHandler().catch((err: unknown) => {\n this.logger?.error(`[Orchestrator] Actor [${actor.name}] readyHandler failed: ${formatError(err)}`)\n })\n }\n }\n }\n\n /**\n * Starts the orchestrator: activates all actors in parallel and kicks off their warm-pass.\n * `whenReady()` resolves once every actor's `readyHandler` has succeeded.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log(`[Orchestrator] Starting ${this.actors.length} actor(s) in parallel...`)\n this.running = true\n\n const startResults = await Promise.allSettled(this.actors.map(a => a.start()))\n const startFailures = startResults.flatMap((r, i) => (r.status === 'rejected' ? [{ actor: this.actors[i], reason: r.reason as unknown }] : []))\n if (startFailures.length > 0) {\n for (const f of startFailures) this.logger?.error(`[Orchestrator] Actor [${f.actor?.name ?? '?'}] failed to start: ${formatError(f.reason)}`)\n throw new Error(`[Orchestrator] ${startFailures.length} actor(s) failed to start`)\n }\n\n // Kick off readyHandlers in parallel; do not await — `whenReady()` is the join point.\n for (const actor of this.actors) {\n if (isLocalActor(actor)) {\n actor.runReadyHandler().catch((err: unknown) => {\n this.logger?.error(`[Orchestrator] Actor [${actor.name}] readyHandler failed: ${formatError(err)}`)\n })\n }\n }\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n this.shuttingDown = true\n await Promise.allSettled(this.actors.map(a => a.stop()))\n this.running = false\n this.shuttingDown = false\n this.logger?.log('[Orchestrator] Stopped.')\n }\n\n /**\n * Resolves once every actor reports ready. Rejects if any actor's `readyHandler` throws,\n * or after `timeoutMs` if provided.\n */\n async whenReady(timeoutMs?: number): Promise<void> {\n const localActors = this.actors.filter(isLocalActor)\n if (localActors.length === 0) return\n if (timeoutMs === undefined) {\n await Promise.all(localActors.map(a => a.whenReady()))\n return\n }\n let timer: NodeJS.Timeout | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`[Orchestrator] Not ready within ${timeoutMs}ms`))\n }, timeoutMs)\n })\n try {\n await Promise.race([Promise.all(localActors.map(a => a.whenReady())), timeout])\n } finally {\n if (timer) clearTimeout(timer)\n }\n }\n}\n\nfunction isLocalActor(actor: ActorInstanceV3): actor is ActorInstanceV3 & ActorV3 {\n return actor instanceof ActorV3\n}\n\nfunction formatError(err: unknown): string {\n if (err instanceof Error) return `${err.message}${err.stack ? `\\n${err.stack}` : ''}`\n return String(err)\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport type { CreatableProviderParams } from '@xyo-network/xl1-sdk'\nimport { AbstractCreatableProvider, creatableProvider } from '@xyo-network/xl1-sdk'\n\n/**\n * Moniker used to resolve a SimpleRejectedTransactionsArchivistProvider\n * from a ProviderFactoryLocator. Actor-local locators (e.g. the producer)\n * resolve this from the root locator to reuse the shared rejected-transactions\n * archivist that the DLQ runner and viewer also write to.\n */\nexport const RejectedTransactionsArchivistProviderMoniker = 'RejectedTransactionsArchivistProvider'\n\n/**\n * Parameters for SimpleRejectedTransactionsArchivistProvider.\n */\nexport interface SimpleRejectedTransactionsArchivistProviderParams extends CreatableProviderParams {\n archivist: ArchivistInstance\n}\n\n/**\n * Pass-through provider that exposes the shared rejected-transactions\n * archivist under a locator moniker so downstream actor locators can\n * reuse the same backing store rather than constructing their own\n * ephemeral MemoryArchivist.\n */\n@creatableProvider()\nexport class SimpleRejectedTransactionsArchivistProvider extends AbstractCreatableProvider<SimpleRejectedTransactionsArchivistProviderParams> {\n static readonly defaultMoniker = RejectedTransactionsArchivistProviderMoniker\n static readonly dependencies: string[] = []\n static readonly monikers = [RejectedTransactionsArchivistProviderMoniker]\n\n moniker = SimpleRejectedTransactionsArchivistProvider.defaultMoniker\n\n get archivist(): ArchivistInstance {\n return this.params.archivist\n }\n\n static override async paramsHandler(\n params?: Partial<SimpleRejectedTransactionsArchivistProviderParams>,\n ): Promise<SimpleRejectedTransactionsArchivistProviderParams> {\n return {\n ...(await super.paramsHandler(params)),\n archivist: assertEx(params?.archivist, () => 'archivist is required'),\n }\n }\n}\n","/**\n * Backing types are owned by `@xyo-network/xl1-protocol-sdk`. This file is a\n * re-export shim so existing imports inside this package keep working without\n * a churn-y rename.\n *\n * - `Backing`, `BackingNeed`, `Surface` — the type axes.\n * - `backingsSatisfied`, `unmetBackings` — the subset/diagnostic helpers.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type {\n Backing, BackingNeed, Surface,\n} from '@xyo-network/xl1-protocol-sdk'\nexport { backingsSatisfied, unmetBackings } from '@xyo-network/xl1-protocol-sdk'\n","/**\n * Capability types and registry are owned by `@xyo-network/xl1-protocol-sdk`.\n * This file re-exports them so existing imports in this package keep working.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type { Capability, CapabilityRegistryInstance } from '@xyo-network/xl1-protocol-sdk'\nexport { createCapabilityRegistry } from '@xyo-network/xl1-protocol-sdk'\nexport type { ProviderMoniker } from '@xyo-network/xl1-sdk'\n","import {\n AccountBalanceViewerMoniker,\n BlockRunnerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n ChainContractViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n StakeTotalsViewerMoniker,\n TimeSyncViewerMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { RejectedTransactionsArchivistProviderMoniker } from '../../../shared/index.ts'\nimport type { Capability, CapabilityRegistryInstance } from './Capability.ts'\nimport { createCapabilityRegistry } from './Capability.ts'\n\nconst XyoConnectionMoniker = 'XyoConnection'\nconst XyoGatewayRunnerMoniker = 'XyoGatewayRunner'\n\n/**\n * Capability metadata for the monikers consumed by the in-repo actors.\n *\n * `implies` records the static dependencies a runner pulls in transitively\n * — e.g. `BlockRunner` requires the seven viewers `SimpleBlockRunner` reads\n * from to produce a block. The resolver uses `implies` to expand the wanted\n * set so callers only need to declare the top-level capability.\n */\nconst capabilities: readonly Capability[] = [\n {\n id: BlockViewerMoniker, label: 'Block viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: WindowedBlockViewerMoniker, label: 'Windowed block viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: MempoolViewerMoniker, label: 'Mempool viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: MempoolRunnerMoniker, label: 'Mempool runner', kind: 'runner', surface: 'node',\n },\n {\n id: AccountBalanceViewerMoniker, label: 'Account balance viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: FinalizationViewerMoniker, label: 'Finalization viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: FinalizationRunnerMoniker, label: 'Finalization runner', kind: 'runner', surface: 'node',\n },\n {\n id: TransactionViewerMoniker, label: 'Transaction viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: BlockValidationViewerMoniker, label: 'Block validation viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: TransactionValidationViewerMoniker, label: 'Transaction validation viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: DeadLetterQueueViewerMoniker, label: 'Dead-letter queue viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: DeadLetterQueueRunnerMoniker, label: 'Dead-letter queue runner', kind: 'runner', surface: 'node',\n },\n {\n id: ChainContractViewerMoniker, label: 'Chain contract viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: StakeTotalsViewerMoniker, label: 'Stake totals viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: TimeSyncViewerMoniker, label: 'Time sync viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: XyoViewerMoniker, label: 'XYO viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: XyoConnectionMoniker, label: 'XYO connection', kind: 'gateway', surface: 'node',\n },\n {\n id: XyoGatewayRunnerMoniker, label: 'XYO gateway runner', kind: 'gateway', surface: 'node',\n },\n {\n id: RejectedTransactionsArchivistProviderMoniker, label: 'Rejected transactions archivist provider', kind: 'archivist', surface: 'node',\n },\n {\n id: BlockRunnerMoniker,\n label: 'Block runner',\n kind: 'runner',\n surface: 'node',\n implies: [\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n ChainContractViewerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n TimeSyncViewerMoniker,\n ],\n },\n]\n\n/**\n * Builds a fresh registry seeded with all known XL1 capabilities.\n * Callers may add more (`registry.register(...)`) before passing it to\n * `resolveProviders`.\n */\nexport function createDefaultCapabilityRegistry(): CapabilityRegistryInstance {\n const registry = createCapabilityRegistry()\n for (const cap of capabilities) registry.register(cap)\n return registry\n}\n","import {\n SimpleAccountBalanceViewer,\n SimpleBlockValidationViewer,\n SimpleBlockViewer,\n SimpleDeadLetterQueueRunner,\n SimpleDeadLetterQueueViewer,\n SimpleFinalizationRunner,\n SimpleFinalizationViewer,\n SimpleMempoolRunner,\n SimpleMempoolViewer,\n SimpleTransactionValidationViewer,\n SimpleTransactionViewer,\n SimpleWindowedBlockViewer,\n SimpleXyoConnectionViewer,\n SimpleXyoViewer,\n} from '@xyo-network/xl1-sdk'\n\nimport { SimpleRejectedTransactionsArchivistProvider } from '../../../shared/index.ts'\nimport type { ProviderDescriptor } from './Provider.ts'\nimport type { XL1ResolutionContext } from './XL1ResolutionContext.ts'\n\nconst passes = (): boolean => true\n\n/**\n * Tier-1 descriptors mirroring today's `localLocatorFromConfig` registrations.\n * These produce a behavior-equivalent locator when no remote config is set.\n *\n * Conventions:\n * - `id` is the provider class name (used for snapshot diffing).\n * - `tier: 1` — direct in-process backing-store access.\n * - `preconditions` always returns true here because the constituent resources\n * (archivists, summary maps) are required by the local node anyway; if they\n * were missing, `buildProcessSharedResources` would have already thrown.\n * - `backings` declares which backing resources `build()` reads from `ctx`.\n * The resolver uses this to skip descriptors whose backings aren't a subset\n * of the locator's `availableBackings`.\n * - `surface` declares which API surface the capability is exposed under.\n */\nexport const localTier1Descriptors: readonly ProviderDescriptor<XL1ResolutionContext>[] = [\n {\n id: 'SimpleMempoolViewer',\n satisfies: [SimpleMempoolViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'mempool-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleMempoolViewer.factory<SimpleMempoolViewer>(\n SimpleMempoolViewer.dependencies,\n {\n pendingTransactionsArchivist: ctx.process.pendingTransactionsArchivist,\n pendingBlocksArchivist: ctx.process.pendingBlocksArchivist,\n },\n ),\n },\n {\n id: 'SimpleMempoolRunner',\n satisfies: [SimpleMempoolRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'mempool-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleMempoolRunner.factory<SimpleMempoolRunner>(\n SimpleMempoolRunner.dependencies,\n {\n pendingTransactionsArchivist: ctx.process.pendingTransactionsArchivist,\n pendingBlocksArchivist: ctx.process.pendingBlocksArchivist,\n },\n ),\n },\n {\n id: 'SimpleAccountBalanceViewer',\n satisfies: [SimpleAccountBalanceViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'indexer-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(\n SimpleAccountBalanceViewer.dependencies,\n {\n balancesSummaryMap: ctx.process.balancesSummaryMap,\n transfersSummaryMap: ctx.process.transfersSummaryMap,\n },\n ),\n },\n {\n id: 'SimpleFinalizationViewer',\n satisfies: [SimpleFinalizationViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(\n SimpleFinalizationViewer.dependencies,\n { finalizedArchivist: ctx.process.readonlyChainArchivist },\n ),\n },\n {\n id: 'SimpleBlockViewer',\n satisfies: [SimpleBlockViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleBlockViewer.factory<SimpleBlockViewer>(\n SimpleBlockViewer.dependencies,\n { finalizedArchivist: ctx.process.readonlyChainArchivist },\n ),\n },\n {\n id: 'SimpleWindowedBlockViewer',\n satisfies: [SimpleWindowedBlockViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(\n SimpleWindowedBlockViewer.dependencies,\n { maxWindowSize: 1000, syncInterval: 10_000 },\n ),\n },\n {\n id: 'SimpleXyoConnectionViewer',\n satisfies: [SimpleXyoConnectionViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleXyoConnectionViewer.factory<SimpleXyoConnectionViewer>(SimpleXyoConnectionViewer.dependencies, {}),\n },\n {\n id: 'SimpleTransactionViewer',\n satisfies: [SimpleTransactionViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleTransactionViewer.factory<SimpleTransactionViewer>(SimpleTransactionViewer.dependencies, {}),\n },\n {\n id: 'SimpleXyoViewer',\n satisfies: [SimpleXyoViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, {}),\n },\n {\n id: 'SimpleFinalizationRunner',\n satisfies: [SimpleFinalizationRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleFinalizationRunner.factory<SimpleFinalizationRunner>(\n SimpleFinalizationRunner.dependencies,\n { finalizedArchivist: ctx.process.writableChainArchivist },\n ),\n },\n {\n id: 'SimpleBlockValidationViewer',\n satisfies: [SimpleBlockValidationViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(\n SimpleBlockValidationViewer.dependencies,\n {\n state: ctx.process.blockStateValidator,\n protocol: ctx.process.blockProtocolValidator,\n },\n ),\n },\n {\n id: 'SimpleTransactionValidationViewer',\n satisfies: [SimpleTransactionValidationViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleTransactionValidationViewer.factory<SimpleTransactionValidationViewer>(\n SimpleTransactionValidationViewer.dependencies,\n {\n protocol: ctx.process.transactionProtocolValidator,\n state: ctx.process.transactionStateValidator,\n },\n ),\n },\n {\n id: 'SimpleDeadLetterQueueRunner',\n satisfies: [SimpleDeadLetterQueueRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleDeadLetterQueueRunner.factory<SimpleDeadLetterQueueRunner>(\n SimpleDeadLetterQueueRunner.dependencies,\n {\n rejectedBlocksArchivist: ctx.process.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: ctx.process.rejectedTransactionsArchivist,\n },\n ),\n },\n {\n id: 'SimpleDeadLetterQueueViewer',\n satisfies: [SimpleDeadLetterQueueViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleDeadLetterQueueViewer.factory<SimpleDeadLetterQueueViewer>(\n SimpleDeadLetterQueueViewer.dependencies,\n {\n rejectedBlocksArchivist: ctx.process.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: ctx.process.rejectedTransactionsArchivist,\n },\n ),\n },\n {\n id: 'SimpleRejectedTransactionsArchivistProvider',\n satisfies: [SimpleRejectedTransactionsArchivistProvider.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleRejectedTransactionsArchivistProvider.factory<SimpleRejectedTransactionsArchivistProvider>(\n SimpleRejectedTransactionsArchivistProvider.dependencies,\n { archivist: ctx.process.rejectedTransactionsArchivist },\n ),\n },\n]\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport type { BackingNeed } from './Backing.ts'\nimport type { ProviderMoniker } from './Capability.ts'\nimport { createDefaultCapabilityRegistry } from './defaultCapabilityRegistry.ts'\nimport { localTier1Descriptors } from './descriptors.ts'\nimport { networkTier3Descriptors } from './networkTier3Descriptors.ts'\nimport type { BuildProcessSharedResourcesOptions } from './ProcessSharedResources.ts'\nimport { buildProcessSharedResources } from './ProcessSharedResources.ts'\nimport type { ProviderDescriptor } from './Provider.ts'\nimport type { ResolutionPlan } from './resolveProviders.ts'\nimport { resolveProviders } from './resolveProviders.ts'\nimport type { XL1ResolutionContext } from './XL1ResolutionContext.ts'\n\nexport interface LocatorFromActorNeedsOptions extends BuildProcessSharedResourcesOptions {\n /**\n * The backings the locator's process holds. If provided, the resolver filters\n * out any candidate whose `backings` are not a subset of `availableBackings`.\n * If omitted, defaults to the all-backings set (single-process developer path)\n * to preserve back-compat — every tier-1 descriptor is eligible.\n */\n availableBackings?: readonly BackingNeed[]\n /**\n * Additional descriptors beyond the built-in tier-1 + tier-3 sets. Use to\n * inject actor-specific extras (e.g. `SimpleBlockRunner` for the producer).\n */\n extraDescriptors?: readonly ProviderDescriptor<XL1ResolutionContext>[]\n /**\n * Pre-built process resources. When provided, `buildProcessSharedResources`\n * is skipped and this object is used directly as `XL1ResolutionContext.process`.\n * Required for stateless paths (e.g. a stateless API actor with\n * `availableBackings: [{ backing: 'network', mode: 'read' }]`) where\n * loading the local node would be wrong — the resolver picks tier-3\n * `JsonRpc*` descriptors which don't reference `ctx.process` anyway.\n */\n process?: XL1ResolutionContext['process']\n /**\n * Whether the underlying `ProviderFactoryLocator` should validate\n * dependencies at register time. Off by default (matches today's behavior\n * in `localLocatorFromConfig`).\n */\n validateDepsOnRegister?: boolean\n}\n\nexport interface LocatorFromActorNeedsResult {\n readonly locator: ProviderFactoryLocatorInstance\n readonly plan: ResolutionPlan\n readonly process: XL1ResolutionContext['process']\n}\n\n/**\n * Builds a single shared `ProviderFactoryLocator` driven by the union of all\n * actors' declared `needs`. Replaces the imperative pattern in\n * `localLocatorFromConfig` with a data-driven plan.\n *\n * - Builds `ProcessSharedResources` once (or accepts a pre-built `process` via\n * `options.process` for stateless paths that skip the local node).\n * - Walks `Capability.implies` to expand transitive needs.\n * - Filters candidates by `availableBackings` if provided.\n * - Picks one descriptor per moniker by tier/priority.\n * - Registers exactly those descriptors and freezes the locator.\n */\nexport async function locatorFromActorNeeds(\n context: ActorConfigContext,\n actorNeeds: readonly ActorCapabilityNeeds[],\n options: LocatorFromActorNeedsOptions = {},\n): Promise<LocatorFromActorNeedsResult> {\n const process = options.process ?? await buildProcessSharedResources(context, options)\n const capabilities = createDefaultCapabilityRegistry()\n const resolutionContext: XL1ResolutionContext = {\n actorContext: context, capabilities, process,\n }\n\n const needs = unionNeeds(actorNeeds)\n const candidates = [\n ...localTier1Descriptors,\n ...networkTier3Descriptors,\n ...(options.extraDescriptors ?? []),\n ]\n const plan = resolveProviders<XL1ResolutionContext>(\n needs,\n candidates,\n resolutionContext,\n { availableBackings: options.availableBackings },\n )\n\n const locator = new ProviderFactoryLocator(context, {}, options.validateDepsOnRegister ?? false)\n const factories = plan.selected\n .map(d => d.build(resolutionContext))\n .filter((f): f is NonNullable<typeof f> => f !== undefined)\n locator.registerMany(factories)\n\n return {\n locator, plan, process,\n }\n}\n\nfunction unionNeeds(actorNeeds: readonly ActorCapabilityNeeds[]): Set<ProviderMoniker> {\n const result = new Set<ProviderMoniker>()\n for (const needs of actorNeeds) {\n for (const moniker of needs.required) result.add(moniker)\n if (needs.optional) for (const moniker of needs.optional) result.add(moniker)\n }\n return result\n}\n","/**\n * Tier-3 `JsonRpc*` descriptors are owned by `@xyo-network/xl1-rpc` (the\n * package that defines the JsonRpc provider classes). This file re-exports\n * them so existing imports inside this package keep working without churn.\n *\n * The upstream pool ships more entries than the original local copy:\n * - Node-surface adds `JsonRpcStakeTotalsViewer` and `JsonRpcTimeSyncViewer`.\n * - Indexed-surface adds `JsonRpcStakeViewer`, `JsonRpcNetworkStakeViewer`,\n * and `JsonRpcNetworkStakeStepRewardsViewer`.\n *\n * `locatorFromActorNeeds` consumes the full union by default.\n */\nexport {\n indexedNetworkDescriptors, networkTier3Descriptors, nodeNetworkDescriptors,\n} from '@xyo-network/xl1-sdk'\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol-driver-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BalancesStepSummary, BaseConfigContext, MapType,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nexport async function initBalanceSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import { asEthAddress } from '@xylabs/sdk-js'\nimport {\n EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeTotalsViewer, EvmStakeViewer,\n} from '@xyo-network/chain-ethereum'\nimport { canUseEvmProvider, initEvmProvider } from '@xyo-network/chain-orchestration-evm'\nimport type {\n ChainId,\n Position,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n SimpleChainContractViewer,\n SimpleStakeEventsViewer, SimpleStakeTotalsViewer, SimpleStakeViewer, SimpleTimeSyncViewer,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\n/* TODO: Rename function since it initializes both EVM and non-EVM providers */\nexport async function initEvmProvidersIfAvailable(\n locator: ProviderFactoryLocatorInstance,\n): Promise<ProviderFactoryLocatorInstance> {\n const context = locator.context\n const { logger } = context\n if (canUseEvmProvider(context) && context.config.chain.id) {\n const chainId = context.config.chain.id as ChainId\n const provider = await initEvmProvider(context)\n const address = asEthAddress(chainId, true)\n\n // Register the contract events viewer\n locator.register(EvmStakeEventsViewer.factory<EvmStakeEventsViewer>(\n EvmStakeEventsViewer.dependencies,\n { address, provider },\n ))\n\n // Register the stake viewer\n locator.register(EvmStakeViewer.factory<EvmStakeViewer>(\n EvmStakeViewer.dependencies,\n { address, provider },\n ))\n\n // Register the stake totals viewer\n locator.register(EvmStakeTotalsViewer.factory<EvmStakeTotalsViewer>(\n EvmStakeTotalsViewer.dependencies,\n { address, provider },\n ))\n\n // Register the contract viewer\n locator.register(EvmChainContractViewer.factory<EvmChainContractViewer>(\n EvmChainContractViewer.dependencies,\n { address, provider },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n { ethProvider: provider },\n ))\n } else {\n logger?.warn('EVM provider not available - running with memory based contract/stake viewers')\n const positions: Position[] = []\n\n // Register the contract events viewer\n locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(\n SimpleStakeEventsViewer.dependencies,\n { positions },\n ))\n\n // Register the stake viewer\n locator.register(SimpleStakeViewer.factory<SimpleStakeViewer>(\n SimpleStakeViewer.dependencies,\n { positions },\n ))\n\n // Register the stake totals viewer\n locator.register(SimpleStakeTotalsViewer.factory<SimpleStakeTotalsViewer>(\n SimpleStakeTotalsViewer.dependencies,\n {},\n ))\n\n // Register the contract viewer\n locator.register(SimpleChainContractViewer.factory<SimpleChainContractViewer>(\n SimpleChainContractViewer.dependencies,\n {\n minWithdrawalBlocks: 10, stakingTokenAddress: XYO_ZERO_ADDRESS, rewardsContract: XYO_ZERO_ADDRESS,\n },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n {},\n ))\n }\n return locator\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { createBootstrapHead } from '@xyo-network/chain-sdk'\nimport type { AccountInstance, ArchivistInstance } from '@xyo-network/sdk-js'\nimport { Account } from '@xyo-network/sdk-js'\nimport type {\n ActorConfig,\n ChainId,\n SignedBlockBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n asAttoXL1, findMostRecentBlock,\n flattenHydratedBlock,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n buildInsecureGenesisRewardAccounts,\n formatInsecureGenesisRewardWarning,\n GENESIS_REWARD_AMOUNT,\n resolveGenesisRewardAddress,\n} from '../../shared/index.ts'\n\nexport interface InitFinalizationOptions {\n logger?: Logger\n onInsecureGenesisConfirm?: () => Promise<void>\n}\n\nexport async function initFinalizationArchivistIfNeeded(\n archivist: ArchivistInstance,\n config: ActorConfig,\n account: AccountInstance,\n options: InitFinalizationOptions = {},\n): Promise<[SignedBlockBoundWitnessWithHashMeta, ChainId]> {\n const configuredChainId = config.chain.id\n const possibleHead = await findMostRecentBlock(archivist)\n if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {\n throw new Error(`Configured chain ID (${configuredChainId}) does not match the existing chain ID (${possibleHead.chain})`)\n }\n\n let possibleChainId: ChainId | undefined = configuredChainId\n\n // if there is no configured chain ID and no head, create a new chain\n if (!possibleHead) {\n possibleChainId = possibleChainId ?? (await Account.random()).address\n if (!config.chain.genesisRewardAddress) {\n const accounts = await buildInsecureGenesisRewardAccounts()\n options.logger?.warn(formatInsecureGenesisRewardWarning(accounts))\n if (options.onInsecureGenesisConfirm) await options.onInsecureGenesisConfirm()\n }\n const genesisRewardAddress = await resolveGenesisRewardAddress(config)\n // If there is no head, create one\n const chain = await createBootstrapHead(\n account,\n possibleChainId,\n asAttoXL1(GENESIS_REWARD_AMOUNT),\n genesisRewardAddress,\n )\n const payloads = chain.flatMap(block => flattenHydratedBlock(block))\n await archivist.insert(payloads)\n }\n const head = possibleHead ?? assertEx(await findMostRecentBlock(archivist), () => 'No blocks found in chain archivist')\n const chainId = assertEx(possibleChainId, () => 'Chain ID could not be determined')\n return [head, chainId]\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nasync function rejectedBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedBlocks'),\n { required: true },\n )\n}\n\nasync function rejectedTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedTransactions'),\n { required: true },\n )\n}\n\nexport async function initServerNode(\n context: BaseConfigContext,\n wallet: WalletInstance,\n providedNode?: NodeInstance,\n) {\n const node: NodeInstance = providedNode ?? await loadNode(context, wallet)\n assertEx(await node.start(), () => 'Failed to start node')\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n const rejectedBlocksArchivist = await rejectedBlocksArchivistFromNode(node)\n const rejectedTransactionsArchivist = await rejectedTransactionsArchivistFromNode(node)\n return {\n node,\n writableChainArchivist,\n readonlyChainArchivist,\n pendingTransactionsArchivist,\n pendingBlocksArchivist,\n rejectedBlocksArchivist,\n rejectedTransactionsArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport { MongoDBArchivistV2, MongoDBArchivistV2Deletable } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport { NamedLmdbArchivist } from './NamedLmdbArchivist.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory). Telemetry providers are taken from\n * the calling context so a single Prometheus exporter is shared per process —\n * `contextFromConfigWithoutLocator` is the canonical place that boots them.\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (\n {\n logger, traceProvider, meterProvider, config,\n }: BaseConfigContext,\n) => {\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n locator.register(MongoDBArchivistV2Deletable.factory(params), { 'network.xyo.storage.capabilities.delete': 'enabled' }, false)\n } else if (isDefined(config.storage?.root)) {\n // LMDB-backed disk storage when no mongo is configured.\n // Multi-process-safe (LMDB lockfile/MVCC), so the same storage.root can be\n // shared across separate Node processes running different actors.\n const lmdbLocation = config.storage.root\n const lmdbConfig = {\n clearStoreOnStart: false,\n location: lmdbLocation,\n schema: LmdbArchivistConfigSchema,\n }\n locator.register(\n NamedLmdbArchivist.factory({\n config: lmdbConfig,\n meterProvider,\n statusReporter,\n traceProvider,\n }),\n undefined,\n true,\n )\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { LmdbArchivist } from '@xyo-network/archivist-lmdb'\n\n/**\n * LMDB-backed archivist that derives its on-disk location, database name, and\n * store name from `config.location` / `config.dbName` / `config.storeName`,\n * and — critically — falls back to `config.payloadSdkConfig.collection` or\n * `config.name` when `config.storeName` is not explicitly set.\n *\n * This lets the manifest-driven archivist factories (see `public/Pending.json`,\n * `public/Chain.json`, `public/DeadLetterQueue.json`) share a single LMDB root\n * while each archivist gets its own per-store LMDB env — the same separation\n * that `payloadSdkConfig.collection` provides for mongo.\n */\nexport class NamedLmdbArchivist extends LmdbArchivist {\n override get dbName(): string {\n return (this.config as { dbName?: string }).dbName ?? 'xyo-chain'\n }\n\n override get location(): string {\n const cfgLocation = (this.config as { location?: string }).location\n const paramsLocation = (this.params as { location?: string } | undefined)?.location\n if (cfgLocation) return cfgLocation\n if (paramsLocation) return paramsLocation\n throw new Error('NamedLmdbArchivist: no location configured (set storage.root or pass location in factory params)')\n }\n\n override get storeName(): string {\n const cfg = this.config as {\n name?: string\n payloadSdkConfig?: { collection?: string }\n storeName?: string\n }\n const derived = cfg.storeName ?? cfg.payloadSdkConfig?.collection ?? cfg.name\n if (!derived) throw new Error('NamedLmdbArchivist: no storeName (or payloadSdkConfig.collection / name) configured')\n return derived\n }\n}\n","import { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async (\n context: BaseConfigContext,\n wallet: WalletInstance,\n) => {\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"3\",\n \"name\": \"DeadLetterQueue\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"3/1/1\",\n \"name\": \"RejectedBlocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"rejected_blocks\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"3/1/2\",\n \"name\": \"RejectedTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"rejected_transactions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport DeadLetterQueue from './DeadLetterQueue.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\nconst ChainNodeManifest = Chain as unknown as PackageManifestPayload\nconst DeadLetterQueueNodeManifest = DeadLetterQueue as unknown as PackageManifestPayload\nconst PendingNodeManifest = Pending as unknown as PackageManifestPayload\n\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...DeadLetterQueueNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol-driver-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseConfigContext, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nexport async function initTransferSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfig } from '@xyo-network/xl1-sdk'\n\nimport { initFinalizationArchivistIfNeeded } from '../../../init/index.ts'\n\n/**\n * Resources for the `chain-store` backing — finalized/canonical chain archivists.\n *\n * - `read` mode exposes only `readonlyArchivist`.\n * - `write` mode additionally exposes `writableArchivist` and runs genesis\n * initialization (`initFinalizationArchivistIfNeeded`) — this is the only\n * path that can create the genesis block(s). The chain-store has exactly one\n * writer per deployment: the Finalizer. All other actors hold it as `read`\n * or not at all.\n */\nexport interface ChainStoreReadBacking {\n readonly mode: 'read'\n readonly readonlyArchivist: ArchivistInstance\n}\n\nexport interface ChainStoreWriteBacking {\n readonly mode: 'write'\n readonly readonlyArchivist: ArchivistInstance\n readonly writableArchivist: ArchivistInstance\n}\n\nexport type ChainStoreBacking = ChainStoreReadBacking | ChainStoreWriteBacking\n\nexport interface BuildChainStoreWriteOptions {\n /** Actor config — needed by genesis initialization (chain id, genesis reward address). */\n readonly actorConfig: ActorConfig\n readonly logger?: Logger\n /** Called when about to use insecure default genesis reward accounts; throws to abort. */\n readonly onInsecureGenesisConfirm?: () => Promise<void>\n /** Wallet of the actor that owns chain-store write — signs the genesis block if one is created. */\n readonly wallet: WalletInstance\n}\n\nexport async function buildChainStoreBacking(node: NodeInstance, mode: 'read'): Promise<ChainStoreReadBacking>\nexport async function buildChainStoreBacking(node: NodeInstance, mode: 'write', options: BuildChainStoreWriteOptions): Promise<ChainStoreWriteBacking>\nexport async function buildChainStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n options?: BuildChainStoreWriteOptions,\n): Promise<ChainStoreBacking> {\n const readonlyArchivist = asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ) as ArchivistInstance\n if (mode === 'read') {\n return { mode, readonlyArchivist }\n }\n if (!options) {\n throw new Error('buildChainStoreBacking(write) requires options { actorConfig, wallet }')\n }\n const writableArchivist = asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ) as ArchivistInstance\n await initFinalizationArchivistIfNeeded(writableArchivist, options.actorConfig, options.wallet, {\n logger: options.logger,\n onInsecureGenesisConfirm: options.onInsecureGenesisConfirm,\n })\n return {\n mode, readonlyArchivist, writableArchivist,\n }\n}\n","import type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\n\n/**\n * Resources for the `dlq-store` backing — rejected blocks and rejected\n * transactions archivists. Owned by the Finalizer in a multi-process\n * deployment (the actor that performs rejection).\n */\nexport interface DlqStoreBacking {\n readonly mode: 'read' | 'write'\n readonly rejectedBlocksArchivist: ArchivistInstance\n readonly rejectedTransactionsArchivist: ArchivistInstance\n}\n\nexport async function buildDlqStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n): Promise<DlqStoreBacking> {\n const rejectedBlocksArchivist = asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedBlocks'),\n { required: true },\n ) as ArchivistInstance\n const rejectedTransactionsArchivist = asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedTransactions'),\n { required: true },\n ) as ArchivistInstance\n return {\n mode, rejectedBlocksArchivist, rejectedTransactionsArchivist,\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { initBalanceSummaryMap, initTransferSummaryMap } from '../../../init/index.ts'\n\n/**\n * Resources for the `indexer-store` backing — derived summary maps that\n * back account-balance and transfer-history queries.\n *\n * These maps are **lazy read-through caches**, not write-through indexes.\n * Whoever queries `SimpleAccountBalanceViewer.qualifiedAccountBalances()`\n * (or any other consumer of `balancesSummary()` / `transfersSummary()` in\n * `@xyo-network/xl1-protocol-sdk`) computes the missing summary on demand\n * and writes it back via `summaryMap.set(...)` inside\n * `balancesStepSummaryFromRange` / `transfersStepSummaryFromRange`.\n *\n * Today the cache is co-located with whichever process builds\n * `ProcessSharedResources` (single-process dev/test, or any actor process\n * that holds the indexer-store backing).\n *\n * TODO: Extract `IndexerActor` for horizontal-scale deployments\n * ----------------------------------------------------------------\n * When N stateless API instances run behind a load balancer, each\n * currently maintains its own cold cache and re-warms on first query.\n * A dedicated IndexerActor process would own the cache backing and serve\n * indexed queries; the stateless APIs would federate via\n * `JsonRpcAccountBalanceViewer` / `JsonRpcStakeViewer` pointed at it.\n *\n * Crucially there is **no separate writer to extract** — the summary maps\n * are populated entirely from the read path. The IndexerActor's role is\n * purely deployment shape: own the cache and answer queries.\n *\n * Implementation outline:\n * 1. New package `packages/cli/packages/indexer/` (mirror `chain-mempool`):\n * - `IndexerActor` extending `ActorV3` with `needs`:\n * `{ required: [AccountBalanceViewerMoniker, BlockViewerMoniker, FinalizationViewerMoniker] }`\n * - `command.ts` + `run.ts` CLI entry\n * 2. New `IndexerConfigZod` in `shared/config/actors/Indexer.ts`\n * + `IndexerConfigContext`.\n * 3. New `indexerLocatorFromConfig` that builds via `locatorFromActorNeeds`\n * with `availableBackings: [{ indexer-store, write }, { chain-store, read }]`\n * in single-process or `[{ indexer-store, write }, { network, read }]`\n * in split-deployment.\n * 4. Add `'indexer'` case to `locatorsFromConfig` dispatch.\n * 5. Possibly update `allActorsAreSelfSufficient` if the indexer can run\n * standalone (it can, when chain reads come via `network`).\n * 6. Add `pnpm run-indexer` script to root `package.json`.\n * 7. Wire `indexerCommand` into `runCLI` alongside the other actors.\n *\n * Operationally, stateless API actors then point `remote.rpc` at the\n * indexer's RPC endpoint (or an LB in front of one) so balance and\n * indexed-surface queries land on the warm cache.\n */\nexport interface IndexerStoreBacking {\n readonly balancesSummaryMap: Awaited<ReturnType<typeof initBalanceSummaryMap>>\n readonly mode: 'read' | 'write'\n readonly transfersSummaryMap: Awaited<ReturnType<typeof initTransferSummaryMap>>\n}\n\nexport async function buildIndexerStoreBacking(\n context: ActorConfigContext,\n mode: 'read' | 'write',\n): Promise<IndexerStoreBacking> {\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')\n return {\n balancesSummaryMap, mode, transfersSummaryMap,\n }\n}\n","import type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\n\n/**\n * Resources for the `mempool-store` backing — pending transactions and pending\n * blocks archivists. Owned by the Mempool actor in a multi-process deployment.\n */\nexport interface MempoolStoreBacking {\n readonly mode: 'read' | 'write'\n readonly pendingBlocksArchivist: ArchivistInstance\n readonly pendingTransactionsArchivist: ArchivistInstance\n}\n\nexport async function buildMempoolStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n): Promise<MempoolStoreBacking> {\n const pendingTransactionsArchivist = asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n ) as ArchivistInstance\n const pendingBlocksArchivist = asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n ) as ArchivistInstance\n return {\n mode, pendingBlocksArchivist, pendingTransactionsArchivist,\n }\n}\n","import {\n validateHydratedBlock, validateHydratedBlockState, validateHydratedTransactionState,\n} from '@xyo-network/chain-validation'\nimport type {\n HydratedBlockStateValidationFunction,\n HydratedBlockValidationFunction,\n HydratedTransactionStateValidationFunction,\n HydratedTransactionValidationFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockCumulativeBalanceValidatorFactory, validateTransaction } from '@xyo-network/xl1-sdk'\n\nconst cumulativeBalanceValidator = BlockCumulativeBalanceValidatorFactory()\n\nconst validateHydratedBlockStateWithCumulativeBalance: HydratedBlockStateValidationFunction = async (context, block) => {\n const [stateErrors, cumulativeErrors] = await Promise.all([\n validateHydratedBlockState(context, block),\n cumulativeBalanceValidator(context, block),\n ])\n return [...stateErrors, ...cumulativeErrors]\n}\n\n/**\n * Pure-compute validator functions injected into validation viewers. No\n * backing required — these are stateless functions that operate on the data\n * passed to them.\n */\nexport interface Validators {\n readonly blockProtocolValidator: HydratedBlockValidationFunction\n readonly blockStateValidator: HydratedBlockStateValidationFunction\n readonly transactionProtocolValidator: HydratedTransactionValidationFunction\n readonly transactionStateValidator: HydratedTransactionStateValidationFunction\n}\n\nexport function buildValidators(): Validators {\n return {\n blockProtocolValidator: validateHydratedBlock,\n blockStateValidator: validateHydratedBlockStateWithCumulativeBalance,\n transactionProtocolValidator: validateTransaction,\n transactionStateValidator: validateHydratedTransactionState,\n }\n}\n","import type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { initActorWallet } from '../../../shared/index.ts'\nimport { initServerNode } from '../../init/index.ts'\nimport {\n buildChainStoreBacking,\n buildDlqStoreBacking,\n buildIndexerStoreBacking,\n buildMempoolStoreBacking,\n buildValidators,\n} from './backings/index.ts'\n\n/**\n * Live runtime resources that providers need to construct.\n * Built once per process; descriptors look these up via `XL1ResolutionContext.process`.\n *\n * This struct is the union of everything `localLocatorFromConfig` builds before\n * registering providers — extracted so descriptors can reference it without\n * each one having to re-derive the archivists / summary maps / wallet.\n *\n * The flat shape is preserved for back-compat with existing descriptor `build()`\n * functions. Internally, this is composed from per-backing builders in\n * `./backings/` — each backing can be loaded independently by an actor that\n * only owns or reads that backing. Genesis initialization lives inside\n * `buildChainStoreBacking('write')` so it only runs on the chain-store owner\n * (the Finalizer) — not every actor that incidentally builds this struct.\n */\nexport type ProcessSharedResources = Awaited<ReturnType<typeof buildProcessSharedResources>>\n\nexport interface BuildProcessSharedResourcesOptions {\n onInsecureGenesisConfirm?: () => Promise<void>\n}\n\nexport async function buildProcessSharedResources(\n context: ActorConfigContext,\n options?: BuildProcessSharedResourcesOptions,\n) {\n // Single-process developer path: every backing is owned/read by this process.\n // Per-backing builders extract slices from the shared node.\n const wallet = await initActorWallet(context)\n const serverNode = await initServerNode(context, wallet)\n const { node } = serverNode\n\n const [chainStore, mempoolStore, dlqStore, indexerStore] = await Promise.all([\n buildChainStoreBacking(node, 'write', {\n actorConfig: context.config,\n logger: context.logger,\n onInsecureGenesisConfirm: options?.onInsecureGenesisConfirm,\n wallet,\n }),\n buildMempoolStoreBacking(node, 'write'),\n buildDlqStoreBacking(node, 'write'),\n buildIndexerStoreBacking(context, 'write'),\n ])\n\n const validators = buildValidators()\n\n return {\n balancesSummaryMap: indexerStore.balancesSummaryMap,\n blockProtocolValidator: validators.blockProtocolValidator,\n blockStateValidator: validators.blockStateValidator,\n node,\n pendingBlocksArchivist: mempoolStore.pendingBlocksArchivist,\n pendingTransactionsArchivist: mempoolStore.pendingTransactionsArchivist,\n readonlyChainArchivist: chainStore.readonlyArchivist,\n rejectedBlocksArchivist: dlqStore.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: dlqStore.rejectedTransactionsArchivist,\n transactionProtocolValidator: validators.transactionProtocolValidator,\n transactionStateValidator: validators.transactionStateValidator,\n transfersSummaryMap: indexerStore.transfersSummaryMap,\n wallet,\n writableChainArchivist: chainStore.writableArchivist,\n }\n}\n","/**\n * The capability resolver is owned by `@xyo-network/xl1-protocol-sdk`. This\n * file re-exports it so existing imports in this package keep working.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type {\n RejectedDescriptor,\n ResolutionPlan, ResolveProvidersOptions,\n} from '@xyo-network/xl1-protocol-sdk'\nexport { MissingCapabilityError, resolveProviders } from '@xyo-network/xl1-protocol-sdk'\n","import type { AccountInstance } from '@xyo-network/sdk-js'\nimport { isAccountInstance } from '@xyo-network/sdk-js'\nimport type {\n BlockValidators,\n RemoteConfig, RpcTransport, XyoSignerRpcSchemas,\n} from '@xyo-network/xl1-sdk'\nimport {\n basicRemoteRunnerLocator as sdkBasicRemoteRunnerLocator,\n JsonRpcAccountBalanceViewer,\n JsonRpcXyoSigner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nfunction signerFactoryFromParam(signer: RpcTransport<XyoSignerRpcSchemas> | AccountInstance) {\n if (isAccountInstance(signer)) {\n return SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account: signer })\n }\n return JsonRpcXyoSigner.factory<JsonRpcXyoSigner>(JsonRpcXyoSigner.dependencies, { transport: signer })\n}\n\nexport function basicRemoteRunnerLocator(\n name: string,\n remoteConfig: RemoteConfig,\n signer: RpcTransport<XyoSignerRpcSchemas> | AccountInstance,\n dataLakeEndpoint?: string,\n validators?: BlockValidators,\n) {\n const transport = isAccountInstance(signer) ? undefined as never : signer\n return sdkBasicRemoteRunnerLocator(name, remoteConfig, transport, dataLakeEndpoint, {\n additionalProviders: [\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n ],\n signerFactory: signerFactoryFromParam(signer),\n skipGatewayRunner: true,\n validators,\n })\n}\n","import type { BlockValidators, RemoteConfig } from '@xyo-network/xl1-sdk'\nimport {\n basicRemoteViewerLocator as sdkBasicRemoteViewerLocator,\n JsonRpcAccountBalanceViewer,\n} from '@xyo-network/xl1-sdk'\n\nexport function basicRemoteViewerLocator(\n name: string,\n remoteConfig: RemoteConfig,\n dataLakeEndpoint?: string,\n validators?: BlockValidators,\n) {\n return sdkBasicRemoteViewerLocator(name, remoteConfig, dataLakeEndpoint, {\n additionalProviders: [\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n ],\n validators,\n })\n}\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport type { BackingNeed, XL1ResolutionContext } from '../capabilities/index.ts'\nimport { locatorFromActorNeeds } from '../capabilities/index.ts'\n\nconst STATELESS_BACKINGS: readonly BackingNeed[] = [\n { backing: 'network', mode: 'read' },\n]\n\n/**\n * Builds a network-only locator for a stateless API actor.\n *\n * The stateless API holds no local backing-store ownership — every required\n * moniker resolves through `networkTier3Descriptors` to a `JsonRpc*` provider\n * pointed at the owner-actors over the wire (Finalizer for chain state,\n * Mempool actor for mempool state, IndexerActor for indexed state, etc.).\n *\n * Crucially this path skips `buildProcessSharedResources` so the API process\n * never loads the local LMDB/MongoDB node — N copies of this actor can run\n * behind a load balancer for horizontal scaling of client/standalone-actor\n * traffic.\n *\n * The returned locator declares `availableBackings: [{ network, read }]` and\n * a stub `process` (no descriptor with these backings reads from `ctx.process`).\n */\nexport async function buildStatelessApiLocator(\n context: ActorConfigContext,\n needs: readonly ActorCapabilityNeeds[],\n): Promise<ProviderFactoryLocatorInstance> {\n const stubProcess = {} as XL1ResolutionContext['process']\n const result = await locatorFromActorNeeds(context, needs, {\n availableBackings: STATELESS_BACKINGS,\n process: stubProcess,\n })\n return result.locator\n}\n","import { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport async function telemetryContextFromConfig(\n config: Config,\n serviceName: string,\n serviceVersion: string,\n defaultScrapePort = 9464,\n) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n return await initTelemetry({\n attributes: {\n serviceName,\n serviceVersion,\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport type { Config, CreatableProviderContext } from '@xyo-network/xl1-sdk'\n\nimport { initStatusReporter } from '../../../shared/index.ts'\nimport { telemetryContextFromConfig } from './telemetryContextFromConfig.ts'\n\nexport async function contextFromConfigWithoutLocator(\n config: Config,\n logger: Logger,\n serviceName: string,\n serviceVersion: string,\n defaultScrapePort?: number,\n): Promise<Omit<CreatableProviderContext, 'locator'>> {\n const singletons = {}\n const caches = {}\n const telemetryConfig = await telemetryContextFromConfig(config, serviceName, serviceVersion, defaultScrapePort)\n const statusReporter = initStatusReporter({ logger })\n return {\n ...telemetryConfig,\n config,\n singletons,\n caches,\n logger,\n statusReporter,\n }\n}\n","import type { ActorConfigContext } from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport { RejectedTransactionsArchivistProviderMoniker } from '../../../shared/index.ts'\nimport { locatorFromActorNeeds } from '../capabilities/index.ts'\n\nconst XyoConnectionMoniker = 'XyoConnection'\n\n/**\n * Synthetic \"needs\" set that mirrors the registrations historically performed\n * by `localLocatorFromConfig`. Used by the legacy entry point so callers that\n * still ask for a \"kitchen-sink local locator\" get the same set of providers\n * registered as before.\n *\n * As actors fully migrate to declaring their own needs (see each\n * `ActorV3.needs`), this list becomes the upper bound — the planner will\n * never wire up more than what's listed here.\n */\nconst LOCAL_LEGACY_NEEDS: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n RejectedTransactionsArchivistProviderMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n}\n\n/**\n * Builds a locator with all Tier-1 in-process providers registered.\n *\n * As of the capability-registry refactor this is a thin shim over\n * `locatorFromActorNeeds`. The first parameter is preserved for\n * backward-compat; `validateDepsOnRegister` is forwarded to the underlying\n * locator. `onInsecureGenesisConfirm` is forwarded to\n * `buildProcessSharedResources`.\n */\nexport async function localLocatorFromConfig(\n context: ActorConfigContext,\n validateDepsOnRegister = false,\n onInsecureGenesisConfirm?: () => Promise<void>,\n) {\n const result = await locatorFromActorNeeds(context, [LOCAL_LEGACY_NEEDS], {\n onInsecureGenesisConfirm,\n validateDepsOnRegister,\n })\n return result.locator\n}\n","import { deepMerge } from '@xylabs/sdk-js'\nimport {\n type ActorConfig,\n type CachingContext,\n type Config, type ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n ApiConfigZod, BridgeConfigZod, FinalizerConfigZod, MempoolConfigZod, ProducerConfigZod, RewardRedemptionConfigZod,\n} from '../../../shared/index.ts'\nimport {\n apiLocatorFromConfig, bridgeLocatorFromConfig, finalizerLocatorFromConfig,\n mempoolLocatorFromConfig, producerLocatorFromConfig, rewardRedemptionLocatorFromConfig,\n} from './actors/index.ts'\nimport { rootLocatorFromConfig } from './rootLocatorFromConfig.ts'\n\n/**\n * Returns true iff every configured actor is a self-sufficient build that\n * doesn't consume the root locator. Today only stateless API qualifies — its\n * `apiLocatorFromConfig` branch builds its own resolver-driven locator and\n * ignores the parent. When this is true for all actors, we can skip\n * `rootLocatorFromConfig` entirely (which would otherwise load the local\n * LMDB/Mongo node when `remote.rpc` is unset).\n */\nfunction allActorsAreSelfSufficient(actors: readonly ActorConfig[], config: Omit<Config, 'actors'>): boolean {\n if (actors.length === 0) return false\n return actors.every((actor) => {\n if (actor.name !== 'api') return false\n const merged = ApiConfigZod.parse(deepMerge(config, actor))\n return merged.stateless === true\n })\n}\n\nexport async function locatorsFromConfig(\n context: CachingContext,\n { actors, ...config }: Config,\n onInsecureGenesisConfirm?: () => Promise<void>,\n): Promise<Record<string, ProviderFactoryLocatorInstance>> {\n const result: Record<string, ProviderFactoryLocatorInstance> = {}\n // Skip root construction when every actor is self-sufficient (e.g. all\n // stateless API instances). Saves the local-node load when `remote.rpc`\n // is unset, and is a no-op for self-sufficient locators that ignore the\n // parent anyway.\n const skipRoot = allActorsAreSelfSufficient(actors, config)\n if (!skipRoot) {\n const rootContext = { ...context, config: { ...config, name: '_root' } }\n result._root = await rootLocatorFromConfig(rootContext, false, onInsecureGenesisConfirm)\n }\n\n for (const actorConfig of actors) {\n switch (actorConfig.name) {\n case 'producer': {\n result[actorConfig.name] = await producerLocatorFromConfig(\n { ...context, config: ProducerConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'api': {\n result[actorConfig.name] = await apiLocatorFromConfig(\n { ...context, config: ApiConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n\n break\n }\n case 'mempool': {\n result[actorConfig.name] = await mempoolLocatorFromConfig(\n { ...context, config: MempoolConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'finalizer': {\n result[actorConfig.name] = await finalizerLocatorFromConfig(\n { ...context, config: FinalizerConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'bridge': {\n result[actorConfig.name] = await bridgeLocatorFromConfig(\n { ...context, config: BridgeConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n\n break\n }\n case 'rewardRedemption': {\n result[actorConfig.name] = await rewardRedemptionLocatorFromConfig(\n {\n ...context,\n config: RewardRedemptionConfigZod.parse(deepMerge(config, actorConfig)),\n },\n result._root,\n )\n break\n }\n // No default\n }\n }\n return result\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGateway,\n SimpleXyoRunner,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ApiConfigContext } from '../../../../neutral/index.ts'\nimport type { ActorCapabilityNeeds } from '../../../../shared/actor/v3/index.ts'\nimport { buildStatelessApiLocator } from '../buildStatelessApiLocator.ts'\n\n/**\n * Mirrors `ApiActor.needs` so this orchestration-side builder can stand up\n * the right set of providers without importing the actor package (which would\n * create a circular dep). If `ApiActor.needs` changes, update this list too.\n */\nconst API_NEEDS: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n}\n\nexport async function apiLocatorFromConfig(\n context: ApiConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promisable<ProviderFactoryLocatorInstance>> {\n if (context.config.stateless) {\n // Stateless mode: the API holds no local backing-store ownership. Build a\n // network-only locator via the resolver so every needed moniker maps to a\n // `JsonRpc*` provider pointed at upstream owner-actors. The parent locator\n // is intentionally ignored — N stateless API instances can run independently\n // behind a load balancer.\n const locator = await buildStatelessApiLocator(context, [API_NEEDS])\n locator.registerMany([\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),\n ])\n locator.freeze()\n return locator\n }\n\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n locator.registerMany([\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance, RestDataLakeRunnerParams } from '@xyo-network/xl1-sdk'\nimport {\n JsonRpcAccountBalanceViewer,\n JsonRpcBlockViewer,\n JsonRpcFinalizationViewer,\n JsonRpcMempoolRunner,\n JsonRpcMempoolViewer,\n JsonRpcXyoRunner,\n JsonRpcXyoViewer,\n ProviderFactoryLocator,\n RestDataLakeRunner,\n RestDataLakeViewer,\n SimpleStakeEventsViewer,\n SimpleXyoConnectionRunner,\n SimpleXyoGatewayRunner,\n SimpleXyoRunner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport { type BridgeConfigContext, initActorWallet } from '../../../../neutral/index.ts'\n\nexport async function bridgeLocatorFromConfig(\n context: BridgeConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promise<Promisable<ProviderFactoryLocatorInstance>>> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n const { config } = context\n\n const { dataLake } = config\n const signerAccount = await initActorWallet(context)\n\n if (config.remote.rpc) {\n locator.registerMany([\n JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, {}),\n JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, {}),\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(\n JsonRpcFinalizationViewer.dependencies,\n {},\n ),\n JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, {}),\n JsonRpcXyoRunner.factory<JsonRpcXyoRunner>(JsonRpcXyoRunner.dependencies, {}),\n JsonRpcXyoViewer.factory<JsonRpcXyoViewer>(JsonRpcXyoViewer.dependencies, {}),\n ])\n }\n if (isDefined(dataLake)) {\n const { driver } = dataLake\n switch (driver) {\n case 'rest': {\n const { url: endpoint } = dataLake\n locator.registerMany([\n RestDataLakeRunner.factory<RestDataLakeRunner<RestDataLakeRunnerParams>>(RestDataLakeRunner.dependencies, { endpoint }),\n RestDataLakeViewer.factory<RestDataLakeViewer>(RestDataLakeViewer.dependencies, { endpoint }),\n ])\n break\n }\n default: {\n throw new Error(`Unsupported data lake protocol: ${driver}`)\n }\n }\n }\n\n locator.registerMany([\n SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(SimpleStakeEventsViewer.dependencies, { positions: [] }),\n SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account: signerAccount }),\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nexport function finalizerLocatorFromConfig(\n context: ActorConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promisable<ProviderFactoryLocatorInstance> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n locator.registerMany([\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { MempoolConfigContext } from '../../../../neutral/index.ts'\n\nexport function mempoolLocatorFromConfig(\n context: MempoolConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promisable<ProviderFactoryLocatorInstance> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n locator.registerMany([\n ])\n locator.freeze()\n return locator\n}\n","import { asAddress } from '@xylabs/sdk-js'\nimport { SimpleBlockRunner } from '@xyo-network/chain-services'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { ProducerConfigContext } from '../../../../neutral/index.ts'\nimport { initActorWallet } from '../../../../neutral/index.ts'\nimport {\n RejectedTransactionsArchivistProviderMoniker,\n type SimpleRejectedTransactionsArchivistProvider,\n} from '../../../../shared/index.ts'\n\nexport async function producerLocatorFromConfig(\n context: ProducerConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<ProviderFactoryLocatorInstance> {\n const { logger, config } = context\n const account = await initActorWallet(context)\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n const rewardAddress = asAddress(config.rewardAddress ?? account.address, true)\n logger?.info(`Using reward address ${rewardAddress}`)\n if (rewardAddress === account.address) {\n logger?.warn(`Using producer account address as reward address: ${account.address}`)\n }\n\n // Resolve the shared rejected-transactions archivist from the root locator so\n // SimpleBlockRunner's legacy fallback path (when DLQRunner is unavailable)\n // writes to the same backing store as the DLQ runner/viewer instead of\n // allocating an orphan MemoryArchivist with a random account.\n const rejectedTransactionsProvider = await parent?.tryGetInstance<SimpleRejectedTransactionsArchivistProvider>(\n RejectedTransactionsArchivistProviderMoniker,\n )\n const rejectedTransactionsArchivist = rejectedTransactionsProvider?.archivist\n\n locator.registerMany([\n SimpleBlockRunner.factory<SimpleBlockRunner>(\n SimpleBlockRunner.dependencies,\n {\n account,\n rewardAddress,\n rejectedTransactionsArchivist,\n // ProducerConfigZod has always exposed `heartbeatInterval`, but until now\n // it was not wired anywhere. Threading it into the BlockRunner lets tests\n // (and operators who want denser heartbeat blocks) override the 1-h default.\n heartbeatInterval: config.heartbeatInterval,\n },\n )])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport {\n JsonRpcAccountBalanceViewer,\n JsonRpcBlockViewer,\n JsonRpcFinalizationViewer,\n JsonRpcMempoolRunner,\n JsonRpcMempoolViewer,\n JsonRpcXyoRunner,\n JsonRpcXyoViewer,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGatewayRunner,\n SimpleXyoRunner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport { initActorWallet, type RewardRedemptionConfigContext } from '../../../../neutral/index.ts'\n\nexport async function rewardRedemptionLocatorFromConfig(\n context: RewardRedemptionConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promisable<ProviderFactoryLocatorInstance>> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n const { config } = context\n\n const account = await initActorWallet(context)\n\n if (config.remote.rpc) {\n locator.registerMany([\n JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, {}),\n JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, {}),\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(\n JsonRpcFinalizationViewer.dependencies,\n {},\n ),\n JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, {}),\n JsonRpcXyoRunner.factory<JsonRpcXyoRunner>(JsonRpcXyoRunner.dependencies, {}),\n JsonRpcXyoViewer.factory<JsonRpcXyoViewer>(JsonRpcXyoViewer.dependencies, {}),\n ])\n }\n\n locator.registerMany([\n SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }),\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { commonLocatorFromConfig, remoteLocatorFromConfig } from '@xyo-network/xl1-sdk'\n\nimport { initEvmProvidersIfAvailable } from '../../init/index.ts'\nimport { localLocatorFromConfig } from './localLocatorFromConfig.ts'\n\nexport async function rootLocatorFromConfig(\n context: ActorConfigContext,\n validateDepsOnRegister = false,\n onInsecureGenesisConfirm?: () => Promise<void>,\n): Promise<ProviderFactoryLocatorInstance> {\n const { config } = context\n let locator = await commonLocatorFromConfig(context, validateDepsOnRegister)\n\n const newLocator = await (config.remote.rpc\n ? remoteLocatorFromConfig(locator.context, validateDepsOnRegister)\n : localLocatorFromConfig(\n { ...locator.context, config: { ...locator.context.config, ...context.config } },\n validateDepsOnRegister,\n onInsecureGenesisConfirm,\n ))\n locator = newLocator\n locator = await initEvmProvidersIfAvailable(locator)\n locator.freeze()\n return locator\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport { ConfigZod } from '@xyo-network/xl1-sdk'\nimport { cosmiconfig } from 'cosmiconfig'\n\n/**\n * The name of the configuration file to search for.\n */\nconst configName = 'xyo'\n\n/**\n * The name of the section within the configuration file to parse.\n */\nconst configSection = 'xl1' // Default section in the config file\n\nexport class ConfigFileNotFoundError extends Error {\n constructor(configPath: string) {\n super(`Config file not found: ${configPath}`)\n this.name = 'ConfigFileNotFoundError'\n }\n}\n\nconst isMissingFileError = (error: unknown): error is NodeJS.ErrnoException => {\n return error instanceof Error && 'code' in error && error.code === 'ENOENT'\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null\n}\n\n/**\n * Attempts to parse the configuration from a file using cosmiconfig.\n * @param options - Optional config loading options.\n * @param options.configPath - Explicit path to a config file to load instead of searching.\n * @param options.searchPlaces - Custom search places for cosmiconfig.\n * @returns The parsed configuration object if found and valid, otherwise undefined.\n */\nexport async function tryParseConfig(options?: { configPath?: string; searchPlaces?: string[] }) {\n const { configPath, searchPlaces } = options ?? {}\n const explorer = cosmiconfig(\n configName,\n {\n cache: true,\n // loaders: { '.ts': TypeScriptLoader() },\n searchPlaces,\n },\n )\n let result: unknown\n if (isDefined(configPath)) {\n try {\n result = (await explorer.load(configPath))?.config\n } catch (error) {\n if (isMissingFileError(error)) {\n throw new ConfigFileNotFoundError(configPath)\n }\n throw error\n }\n if (!isDefined(result) || isNull(result)) {\n throw new ConfigFileNotFoundError(configPath)\n }\n } else {\n result = (await explorer.search())?.config\n }\n if (isRecord(result)) {\n const section = result[configSection]\n if (isRecord(section)) {\n const parsed = ConfigZod.loose().parse(section)\n return typeof section.mnemonic === 'string' ? { ...parsed, mnemonic: section.mnemonic } : parsed\n }\n }\n return ConfigZod.parse({})\n}\n","export * from '../shared/index.ts'\nexport * from './config/index.ts'\nexport * from './init/index.ts'\nexport * from './manifest/index.ts'\nexport * from '@xyo-network/chain-orchestration-evm'\nexport * from '@xyo-network/chain-orchestration-express'\nexport * from '@xyo-network/chain-orchestration-storage'\n"],"mappings":"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","names":["AbstractCreatable","assertEx","delay","IdLogger","Semaphore","z","noopCounter","add","noopUpDownCounter","noopGauge","record","noopHistogram","CreatableNameZod","z","custom","val","length","StatusReporterInstanceZod","AccountInstanceZod","ActorParamsV3Zod","object","account","locator","unknown","name","statusReporter","optional","createDeferred","resolve","reject","promise","Promise","res","rej","ActorV3","AbstractCreatable","_intervals","Map","_semaphores","_timeouts","_logger","_readyDeferred","_readyError","_readyState","logger","IdLogger","assertEx","context","readyError","readyState","params","paramsHandler","baseParams","registerTimer","timerName","callback","dueTimeMs","periodMs","status","warn","running","set","Semaphore","timeoutId","setTimeout","intervalId","setInterval","semaphore","get","has","isLocked","acquire","then","release","startTime","Date","now","duration","catch","error","err","Error","String","message","stack","finally","debug","runReadyHandler","readyHandler","stopHandler","all","values","map","delay","clear","timeoutRef","entries","clearTimeout","intervalRef","clearInterval","whenReady","timeoutMs","undefined","timer","timeout","_","race","counter","description","meter","createCounter","gauge","createGauge","histogram","createHistogram","upDownCounter","createUpDownCounter","Actor","buildTelemetryConfig","config","serviceName","serviceVersion","defaultMetricsScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","globalRegistry","z","ApiConfigZod","extend","object","initRewardsCache","union","number","string","boolean","transform","v","default","register","description","title","type","stateless","legacyMixedRpc","shape","isApiConfig","asApiConfig","toApiConfig","ApiConfigContext","config","isApiConfigContext","asApiConfigContext","toApiConfigContext","AddressZod","HexZod","toAddress","toHex","zodAsFactory","zodIsFactory","zodToFactory","AttoXL1ConvertFactor","BaseConfigContextZod","HostActorConfigZod","XL1","globalRegistry","z","DEFAULT_FIXED_FEE","xl1","DEFAULT_VARIABLE_FEE_BASIS_POINTS","DEFAULT_HARDHAT_BRIDGE_CONTRACT","DEFAULT_HARDHAT_CHAIN_ID","DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY","DEFAULT_HARDHAT_TOKEN_CONTRACT","DEFAULT_MAX_BRIDGE_AMOUNT","DEFAULT_MIN_BRIDGE_AMOUNT","DEFAULT_SCANNER_INTERVAL_MS","BasisPointsZod","coerce","number","int","nonnegative","max","BridgeConfigZod","extend","escrowAddress","optional","register","description","title","type","feesAddress","feeFixed","default","feeRateBasisPoints","maxBridgeAmount","minBridgeAmount","redisHost","string","redisPort","positive","scannerIntervalMs","remoteBridgeContractAddress","remoteChainId","remoteConfirmationDepth","union","literal","remoteTokenAddress","remoteChainWalletPrivateKey","xl1ChainId","xl1TokenAddress","BridgeSettingsZod","pick","required","isBridgeConfig","asBridgeConfig","toBridgeConfig","BridgeConfigContext","config","isBridgeConfigContext","asBridgeConfigContext","toBridgeConfigContext","AddressZod","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","DEFAULT_MIN_CANDIDATES","HostActorConfigZod","z","FinalizerConfigZod","extend","allowedProducers","array","optional","finalizationCheckInterval","coerce","number","default","minCandidates","int","min","isFinalizerConfig","asFinalizerConfig","toFinalizerConfig","FinalizerConfigContext","config","isFinalizerConfigContext","asFinalizerConfigContext","toFinalizerConfigContext","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","globalRegistry","z","DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL","DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL","MempoolConfigZod","extend","enabled","union","string","boolean","default","transform","val","ctx","normalized","toLowerCase","trim","includes","addIssue","code","expected","message","NEVER","register","description","title","type","blockPruneInterval","coerce","number","transactionPruneInterval","isMempoolConfig","asMempoolConfig","toMempoolConfig","MempoolConfigContext","config","isMempoolConfigContext","asMempoolConfigContext","toMempoolConfigContext","AddressZod","zodAsFactory","zodIsFactory","zodToFactory","ActorConfigZod","BaseConfigContextZod","globalRegistry","z","DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL","ProducerConfigZod","extend","object","allowlist","array","optional","register","description","title","type","blockProductionCheckInterval","coerce","number","default","disableIntentRedeclaration","boolean","heartbeatInterval","minStake","rewardAddress","string","shape","isProducerConfig","asProducerConfig","toProducerConfig","ProducerConfigContext","config","isProducerConfigContext","asProducerConfigContext","toProducerConfigContext","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","RewardRedemptionConfigZod","extend","isRewardRedemptionConfig","asRewardRedemptionConfig","toRewardRedemptionConfig","RewardRedemptionConfigContext","config","isRewardRedemptionConfigContext","asRewardRedemptionConfigContext","toRewardRedemptionConfigContext","deepMerge","mergeConfig","actors","baseConfig","map","actor","deepMerge","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","assertEx","isString","HDWallet","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","HDNodeWallet","Mnemonic","DEFAULT_ACTOR_ACCOUNT_PATH","api","bridge","finalizer","mempool","producer","rewardRedemption","BUILT_IN_DEV_MNEMONIC","INSECURE_GENESIS_REWARD_MNEMONIC","GENESIS_REWARD_AMOUNT","ATTO_XL1_PER_XL1","ROOT_WALLET_RUNTIME_ID","SHARED_ACCOUNT_REPORT_COUNT","ACTOR_LABELS","activeWalletReport","getAccountLabel","actorName","clearResolvedWalletReport","undefined","resolveActorAccountPath","actorConfig","accountPath","isAbsoluteAccountPath","startsWith","expandAccountPath","basePath","DEFAULT_WALLET_PATH","deriveWalletAtPath","mnemonic","seed","Mnemonic","fromPhrase","computeSeed","rootNode","HDNodeWallet","fromSeed","derivedNode","derivePath","HDWallet","createFromNode","baseWallet","generateXyoBaseWalletFromPhrase","getBuiltInDevMnemonic","getInsecureGenesisRewardMnemonic","resolveRootWallet","configuration","isConfigured","isBuiltInDevMnemonic","mnemonicKind","resolveWalletMetadata","account","address","derivationPath","label","privateKey","usesBuiltInDevMnemonic","resolveActorWallet","root","ActorMnemonicNotAllowedError","Error","actors","join","name","assertNoActorMnemonics","offenders","filter","actor","map","length","DerivationPathCollisionError","collisions","lines","Object","entries","path","detectDerivationPathCollisions","requestedActors","actorConfigMap","Map","bucketsByPath","get","fullPath","bucket","push","set","keys","resolveWalletReport","resolvedActors","Promise","all","labelMap","labels","sharedAccounts","Array","from","_","index","sharedIndex","buildInsecureGenesisRewardAccounts","accounts","initializeResolvedWalletReport","getResolvedWalletReport","formatSharedAccount","showPrivateKey","formatGenesisRewardAccount","balance","toString","formatWalletReport","report","sections","showSecrets","formatInsecureGenesisRewardWarning","resolveGenesisRewardAddress","config","chain","genesisRewardAddress","wallet","resolveWalletForActor","resolvedAccountPath","initActorSeedPhrase","context","bios","logger","config","walletKind","name","report","getResolvedWalletReport","isString","root","mnemonic","fallback","getBuiltInDevMnemonic","debug","assertEx","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","isDefined","actorAccountSingletons","initActorWallet","context","actorName","config","name","isDefined","accountPath","undefined","account","resolveWalletForActor","logger","debug","address","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","running","shuttingDown","readyState","length","some","a","isLocalActor","every","isReady","isShuttingDown","registerActor","actor","push","start","runReadyHandler","catch","err","logger","error","name","formatError","startHandler","warn","log","startResults","Promise","allSettled","map","startFailures","flatMap","r","i","status","reason","f","Error","stopHandler","stop","whenReady","timeoutMs","localActors","filter","undefined","all","timer","timeout","_","reject","setTimeout","race","clearTimeout","ActorV3","message","stack","String","assertEx","AbstractCreatableProvider","creatableProvider","RejectedTransactionsArchivistProviderMoniker","SimpleRejectedTransactionsArchivistProvider","AbstractCreatableProvider","defaultMoniker","dependencies","monikers","moniker","archivist","params","paramsHandler","assertEx","backingsSatisfied","unmetBackings","createCapabilityRegistry","AccountBalanceViewerMoniker","BlockRunnerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","ChainContractViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","StakeTotalsViewerMoniker","TimeSyncViewerMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","XyoConnectionMoniker","XyoGatewayRunnerMoniker","capabilities","id","BlockViewerMoniker","label","kind","surface","WindowedBlockViewerMoniker","MempoolViewerMoniker","MempoolRunnerMoniker","AccountBalanceViewerMoniker","FinalizationViewerMoniker","FinalizationRunnerMoniker","TransactionViewerMoniker","BlockValidationViewerMoniker","TransactionValidationViewerMoniker","DeadLetterQueueViewerMoniker","DeadLetterQueueRunnerMoniker","ChainContractViewerMoniker","StakeTotalsViewerMoniker","TimeSyncViewerMoniker","XyoViewerMoniker","RejectedTransactionsArchivistProviderMoniker","BlockRunnerMoniker","implies","createDefaultCapabilityRegistry","registry","createCapabilityRegistry","cap","register","SimpleAccountBalanceViewer","SimpleBlockValidationViewer","SimpleBlockViewer","SimpleDeadLetterQueueRunner","SimpleDeadLetterQueueViewer","SimpleFinalizationRunner","SimpleFinalizationViewer","SimpleMempoolRunner","SimpleMempoolViewer","SimpleTransactionValidationViewer","SimpleTransactionViewer","SimpleWindowedBlockViewer","SimpleXyoConnectionViewer","SimpleXyoViewer","passes","localTier1Descriptors","id","satisfies","SimpleMempoolViewer","defaultMoniker","tier","backings","backing","mode","surface","preconditions","build","ctx","factory","dependencies","pendingTransactionsArchivist","process","pendingBlocksArchivist","SimpleMempoolRunner","SimpleAccountBalanceViewer","balancesSummaryMap","transfersSummaryMap","SimpleFinalizationViewer","finalizedArchivist","readonlyChainArchivist","SimpleBlockViewer","SimpleWindowedBlockViewer","maxWindowSize","syncInterval","SimpleXyoConnectionViewer","SimpleTransactionViewer","SimpleXyoViewer","SimpleFinalizationRunner","writableChainArchivist","SimpleBlockValidationViewer","state","blockStateValidator","protocol","blockProtocolValidator","SimpleTransactionValidationViewer","transactionProtocolValidator","transactionStateValidator","SimpleDeadLetterQueueRunner","rejectedBlocksArchivist","rejectedTransactionsArchivist","SimpleDeadLetterQueueViewer","SimpleRejectedTransactionsArchivistProvider","archivist","ProviderFactoryLocator","indexedNetworkDescriptors","networkTier3Descriptors","nodeNetworkDescriptors","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","logger","config","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","asEthAddress","EvmChainContractViewer","EvmStakeEventsViewer","EvmStakeTotalsViewer","EvmStakeViewer","canUseEvmProvider","initEvmProvider","SimpleChainContractViewer","SimpleStakeEventsViewer","SimpleStakeTotalsViewer","SimpleStakeViewer","SimpleTimeSyncViewer","XYO_ZERO_ADDRESS","initEvmProvidersIfAvailable","locator","context","logger","canUseEvmProvider","config","chain","id","chainId","provider","initEvmProvider","address","asEthAddress","register","EvmStakeEventsViewer","factory","dependencies","EvmStakeViewer","EvmStakeTotalsViewer","EvmChainContractViewer","SimpleTimeSyncViewer","ethProvider","warn","positions","SimpleStakeEventsViewer","SimpleStakeViewer","SimpleStakeTotalsViewer","SimpleChainContractViewer","minWithdrawalBlocks","stakingTokenAddress","XYO_ZERO_ADDRESS","rewardsContract","assertEx","createBootstrapHead","Account","asAttoXL1","findMostRecentBlock","flattenHydratedBlock","initFinalizationArchivistIfNeeded","archivist","config","account","options","configuredChainId","chain","id","possibleHead","findMostRecentBlock","Error","possibleChainId","Account","random","address","genesisRewardAddress","accounts","buildInsecureGenesisRewardAccounts","logger","warn","formatInsecureGenesisRewardWarning","onInsecureGenesisConfirm","resolveGenesisRewardAddress","createBootstrapHead","asAttoXL1","GENESIS_REWARD_AMOUNT","payloads","flatMap","block","flattenHydratedBlock","insert","head","assertEx","chainId","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","assertEx","asArchivistInstance","isDefined","LmdbArchivistConfigSchema","MongoDBArchivistV2","MongoDBArchivistV2Deletable","ViewArchivist","AbstractModule","LoggerModuleStatusReporter","MemoryArchivist","MemorySentinel","ModuleFactoryLocator","hasMongoConfig","LmdbArchivist","NamedLmdbArchivist","LmdbArchivist","dbName","config","location","cfgLocation","paramsLocation","params","Error","storeName","cfg","derived","payloadSdkConfig","collection","name","getLocator","logger","traceProvider","meterProvider","config","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MongoDBArchivistV2Deletable","root","lmdbLocation","lmdbConfig","clearStoreOnStart","location","schema","LmdbArchivistConfigSchema","NamedLmdbArchivist","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","DeadLetterQueueNodeManifest","DeadLetterQueue","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","rejectedBlocksArchivistFromNode","rejectedTransactionsArchivistFromNode","initServerNode","context","wallet","providedNode","loadNode","start","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","rejectedBlocksArchivist","rejectedTransactionsArchivist","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","logger","config","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","asArchivistInstance","buildChainStoreBacking","node","mode","options","readonlyArchivist","asArchivistInstance","resolve","required","Error","writableArchivist","initFinalizationArchivistIfNeeded","actorConfig","wallet","logger","onInsecureGenesisConfirm","asArchivistInstance","buildDlqStoreBacking","node","mode","rejectedBlocksArchivist","asArchivistInstance","resolve","required","rejectedTransactionsArchivist","assertEx","buildIndexerStoreBacking","context","mode","balancesSummaryMap","assertEx","initBalanceSummaryMap","transfersSummaryMap","initTransferSummaryMap","asArchivistInstance","buildMempoolStoreBacking","node","mode","pendingTransactionsArchivist","asArchivistInstance","resolve","required","pendingBlocksArchivist","validateHydratedBlock","validateHydratedBlockState","validateHydratedTransactionState","BlockCumulativeBalanceValidatorFactory","validateTransaction","cumulativeBalanceValidator","BlockCumulativeBalanceValidatorFactory","validateHydratedBlockStateWithCumulativeBalance","context","block","stateErrors","cumulativeErrors","Promise","all","validateHydratedBlockState","buildValidators","blockProtocolValidator","validateHydratedBlock","blockStateValidator","transactionProtocolValidator","validateTransaction","transactionStateValidator","validateHydratedTransactionState","buildProcessSharedResources","context","options","wallet","initActorWallet","serverNode","initServerNode","node","chainStore","mempoolStore","dlqStore","indexerStore","Promise","all","buildChainStoreBacking","actorConfig","config","logger","onInsecureGenesisConfirm","buildMempoolStoreBacking","buildDlqStoreBacking","buildIndexerStoreBacking","validators","buildValidators","balancesSummaryMap","blockProtocolValidator","blockStateValidator","pendingBlocksArchivist","pendingTransactionsArchivist","readonlyChainArchivist","readonlyArchivist","rejectedBlocksArchivist","rejectedTransactionsArchivist","transactionProtocolValidator","transactionStateValidator","transfersSummaryMap","writableChainArchivist","writableArchivist","MissingCapabilityError","resolveProviders","locatorFromActorNeeds","context","actorNeeds","options","process","buildProcessSharedResources","capabilities","createDefaultCapabilityRegistry","resolutionContext","actorContext","needs","unionNeeds","candidates","localTier1Descriptors","networkTier3Descriptors","extraDescriptors","plan","resolveProviders","availableBackings","locator","ProviderFactoryLocator","validateDepsOnRegister","factories","selected","map","d","build","filter","f","undefined","registerMany","result","Set","moniker","required","add","optional","isAccountInstance","basicRemoteRunnerLocator","sdkBasicRemoteRunnerLocator","JsonRpcAccountBalanceViewer","JsonRpcXyoSigner","SimpleXyoSigner","signerFactoryFromParam","signer","isAccountInstance","SimpleXyoSigner","factory","dependencies","account","JsonRpcXyoSigner","transport","basicRemoteRunnerLocator","name","remoteConfig","dataLakeEndpoint","validators","undefined","sdkBasicRemoteRunnerLocator","additionalProviders","JsonRpcAccountBalanceViewer","signerFactory","skipGatewayRunner","basicRemoteViewerLocator","sdkBasicRemoteViewerLocator","JsonRpcAccountBalanceViewer","basicRemoteViewerLocator","name","remoteConfig","dataLakeEndpoint","validators","sdkBasicRemoteViewerLocator","additionalProviders","JsonRpcAccountBalanceViewer","factory","dependencies","STATELESS_BACKINGS","backing","mode","buildStatelessApiLocator","context","needs","stubProcess","result","locatorFromActorNeeds","availableBackings","process","locator","initTelemetry","telemetryContextFromConfig","config","serviceName","serviceVersion","defaultScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","initTelemetry","attributes","metricsConfig","contextFromConfigWithoutLocator","config","logger","serviceName","serviceVersion","defaultScrapePort","singletons","caches","telemetryConfig","telemetryContextFromConfig","statusReporter","initStatusReporter","AccountBalanceViewerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","XyoConnectionMoniker","LOCAL_LEGACY_NEEDS","required","AccountBalanceViewerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","RejectedTransactionsArchivistProviderMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","localLocatorFromConfig","context","validateDepsOnRegister","onInsecureGenesisConfirm","result","locatorFromActorNeeds","locator","deepMerge","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","ProviderFactoryLocator","SimpleXyoConnectionRunner","SimpleXyoGateway","SimpleXyoRunner","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","API_NEEDS","required","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","apiLocatorFromConfig","context","parent","config","stateless","locator","buildStatelessApiLocator","registerMany","SimpleXyoRunner","factory","dependencies","SimpleXyoConnectionRunner","SimpleXyoGateway","freeze","ProviderFactoryLocator","isDefined","JsonRpcAccountBalanceViewer","JsonRpcBlockViewer","JsonRpcFinalizationViewer","JsonRpcMempoolRunner","JsonRpcMempoolViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","ProviderFactoryLocator","RestDataLakeRunner","RestDataLakeViewer","SimpleStakeEventsViewer","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","SimpleXyoRunner","SimpleXyoSigner","bridgeLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","config","dataLake","signerAccount","initActorWallet","remote","rpc","registerMany","JsonRpcMempoolViewer","factory","dependencies","JsonRpcMempoolRunner","JsonRpcAccountBalanceViewer","JsonRpcFinalizationViewer","JsonRpcBlockViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","isDefined","driver","url","endpoint","RestDataLakeRunner","RestDataLakeViewer","Error","SimpleStakeEventsViewer","positions","SimpleXyoSigner","account","SimpleXyoRunner","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","freeze","ProviderFactoryLocator","finalizerLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","registerMany","freeze","ProviderFactoryLocator","mempoolLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","registerMany","freeze","asAddress","SimpleBlockRunner","ProviderFactoryLocator","producerLocatorFromConfig","context","parent","logger","config","account","initActorWallet","locator","ProviderFactoryLocator","rewardAddress","asAddress","address","info","warn","rejectedTransactionsProvider","tryGetInstance","RejectedTransactionsArchivistProviderMoniker","rejectedTransactionsArchivist","archivist","registerMany","SimpleBlockRunner","factory","dependencies","heartbeatInterval","freeze","JsonRpcAccountBalanceViewer","JsonRpcBlockViewer","JsonRpcFinalizationViewer","JsonRpcMempoolRunner","JsonRpcMempoolViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","ProviderFactoryLocator","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","SimpleXyoRunner","SimpleXyoSigner","rewardRedemptionLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","config","account","initActorWallet","remote","rpc","registerMany","JsonRpcMempoolViewer","factory","dependencies","JsonRpcMempoolRunner","JsonRpcAccountBalanceViewer","JsonRpcFinalizationViewer","JsonRpcBlockViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","SimpleXyoSigner","SimpleXyoRunner","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","freeze","commonLocatorFromConfig","remoteLocatorFromConfig","rootLocatorFromConfig","context","validateDepsOnRegister","onInsecureGenesisConfirm","config","locator","commonLocatorFromConfig","newLocator","remote","rpc","remoteLocatorFromConfig","localLocatorFromConfig","initEvmProvidersIfAvailable","freeze","allActorsAreSelfSufficient","actors","config","length","every","actor","name","merged","ApiConfigZod","parse","deepMerge","stateless","locatorsFromConfig","context","onInsecureGenesisConfirm","result","skipRoot","rootContext","_root","rootLocatorFromConfig","actorConfig","producerLocatorFromConfig","ProducerConfigZod","apiLocatorFromConfig","mempoolLocatorFromConfig","MempoolConfigZod","finalizerLocatorFromConfig","FinalizerConfigZod","bridgeLocatorFromConfig","BridgeConfigZod","rewardRedemptionLocatorFromConfig","RewardRedemptionConfigZod","isDefined","isNull","ConfigZod","cosmiconfig","configName","configSection","ConfigFileNotFoundError","Error","configPath","name","isMissingFileError","error","code","isRecord","value","tryParseConfig","options","searchPlaces","explorer","cosmiconfig","cache","result","isDefined","load","config","isNull","search","section","parsed","ConfigZod","loose","parse","mnemonic"]}
|
|
1
|
+
{"version":3,"sources":["../../src/shared/actor/v3/ActorV3.ts","../../src/shared/buildTelemetryConfig.ts","../../src/shared/config/actors/Api.ts","../../src/shared/config/actors/Bridge.ts","../../src/shared/config/actors/Finalizer.ts","../../src/shared/config/actors/Mempool.ts","../../src/shared/config/actors/Producer.ts","../../src/shared/config/actors/RewardRedemption.ts","../../src/shared/config/mergeConfig.ts","../../src/shared/createDeclarationIntentBlock.ts","../../src/shared/host/implementation/DefaultHost.ts","../../src/shared/host/implementation/DefaultServiceProvider.ts","../../src/shared/host/model/ServiceCollection.ts","../../src/shared/init/initActorSeedPhrase.ts","../../src/shared/init/walletResolution.ts","../../src/shared/init/initBridgedModule.ts","../../src/shared/init/initStatusReporter.ts","../../src/shared/init/initWallet.ts","../../src/shared/orchestrator/Orchestrator.ts","../../src/shared/provider/SimpleRejectedTransactionsArchivistProvider.ts","../../src/node/config/capabilities/Backing.ts","../../src/node/config/capabilities/Capability.ts","../../src/node/config/capabilities/defaultCapabilityRegistry.ts","../../src/node/config/capabilities/descriptors.ts","../../src/node/config/capabilities/locatorFromActorNeeds.ts","../../src/node/config/capabilities/networkTier3Descriptors.ts","../../src/node/init/initBalanceSummaryMap.ts","../../src/node/init/initEvmProvidersIfAvailable.ts","../../src/node/init/initFinalizationArchivistIfNeeded.ts","../../src/node/init/initFinalizedArchivist.ts","../../src/node/init/initServerNode.ts","../../src/node/manifest/getLocator.ts","../../src/node/manifest/NamedLmdbArchivist.ts","../../src/node/manifest/loadNode.ts","../../src/node/manifest/node.json","../../src/node/manifest/nodeManifest.ts","../../src/node/manifest/private/index.ts","../../src/node/manifest/public/Chain.json","../../src/node/manifest/public/DeadLetterQueue.json","../../src/node/manifest/public/Pending.json","../../src/node/manifest/public/index.ts","../../src/node/init/initTransferSummaryMap.ts","../../src/node/config/capabilities/backings/buildChainStoreBacking.ts","../../src/node/config/capabilities/backings/buildDlqStoreBacking.ts","../../src/node/config/capabilities/backings/buildIndexerStoreBacking.ts","../../src/node/config/capabilities/backings/buildMempoolStoreBacking.ts","../../src/node/config/capabilities/backings/buildValidators.ts","../../src/node/config/capabilities/ProcessSharedResources.ts","../../src/node/config/capabilities/resolveProviders.ts","../../src/node/config/locators/basicRemoteRunnerLocator.ts","../../src/node/config/locators/basicRemoteViewerLocator.ts","../../src/node/config/locators/buildStatelessApiLocator.ts","../../src/node/config/locators/telemetryContextFromConfig.ts","../../src/node/config/locators/contextFromConfigWithoutLocator.ts","../../src/node/config/locators/localLocatorFromConfig.ts","../../src/node/config/locators/locatorsFromConfig.ts","../../src/node/config/locators/actors/apiLocatorFromConfig.ts","../../src/node/config/locators/actors/bridgeLocatorFromConfig.ts","../../src/node/config/locators/actors/finalizerLocatorFromConfig.ts","../../src/node/config/locators/actors/mempoolLocatorFromConfig.ts","../../src/node/config/locators/actors/producerLocatorFromConfig.ts","../../src/node/config/locators/actors/rewardRedemptionLocatorFromConfig.ts","../../src/node/config/locators/rootLocatorFromConfig.ts","../../src/node/config/locators/sharedLocatorFromConfig.ts","../../src/node/config/tryParseConfig.ts","../../src/node/index.ts"],"sourcesContent":["import type {\n Counter, Gauge, Histogram, UpDownCounter,\n} from '@opentelemetry/api'\nimport type {\n CreatableInstance, CreatableName, CreatableParams,\n CreatableStatusReporter, EmptyObject, Logger,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx, delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport type { CreatableProviderContextType, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { Semaphore } from 'async-mutex'\nimport z from 'zod'\n\n/**\n * No-op `Counter` returned when `this.meter` is unavailable. Lets call sites\n * drop the optional-chain on `.add()` without checking whether instrumentation\n * is wired.\n */\n/* eslint-disable @typescript-eslint/no-empty-function */\nconst noopCounter: Counter = { add: () => {} }\nconst noopUpDownCounter: UpDownCounter = { add: () => {} }\nconst noopGauge: Gauge = { record: () => {} }\nconst noopHistogram: Histogram = { record: () => {} }\n/* eslint-enable @typescript-eslint/no-empty-function */\n\nconst CreatableNameZod = z.custom<CreatableName>(val => typeof val === 'string' && val.length > 0)\nconst StatusReporterInstanceZod = z.custom<CreatableStatusReporter<void>>(\n val => val !== null && typeof val === 'object' && 'report' in (val as Record<string, unknown>),\n)\nconst AccountInstanceZod = z.custom<AccountInstance>(\n val => val !== null && typeof val === 'object' && 'address' in (val as Record<string, unknown>),\n)\n\nexport const ActorParamsV3Zod = z.object({\n account: AccountInstanceZod,\n locator: z.unknown(),\n name: CreatableNameZod,\n statusReporter: StatusReporterInstanceZod.optional(),\n})\n\nexport type ActorParamsV3<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n locator: ProviderFactoryLocatorInstance\n} & (T extends void ? EmptyObject : T)\n\nexport type ActorInstanceV3<T extends ActorParamsV3 = ActorParamsV3> = CreatableInstance<T>\n\nexport type ReadyState = 'pending' | 'ready' | 'failed'\n\nexport interface ReadinessSignal {\n readonly readyError?: Error\n readonly readyState: ReadyState\n whenReady(timeoutMs?: number): Promise<void>\n}\n\n/**\n * Declarative description of the providers an actor needs from a locator.\n * Surfaced as `static readonly needs` on each `ActorV3` subclass; consumed\n * by `locatorFromActorNeeds` to plan which providers to register in a\n * shared per-process locator.\n *\n * `required` monikers must resolve or boot fails fast.\n * `optional` monikers are looked up via `tryGetInstance` and tolerate absence.\n */\nexport interface ActorCapabilityNeeds {\n readonly optional?: readonly string[]\n readonly required: readonly string[]\n}\n\ninterface Deferred<T> {\n promise: Promise<T>\n reject: (reason: unknown) => void\n resolve: (value: T) => void\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void\n let reject!: (reason: unknown) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise, resolve, reject,\n }\n}\n\n/**\n * In-repo fork of `ActorV3` from `@xyo-network/xl1-sdk`, extended with a\n * readiness contract.\n *\n * - `start()` (inherited from `AbstractCreatable`) brings up machinery: timers\n * registered, servers bound. Status transitions to `started`.\n * - `runReadyHandler()` is invoked by the `Orchestrator` after `start()` to\n * run a warm-pass via `readyHandler()`. Subclasses override `readyHandler`\n * if they need to prove they can do useful work (first block produced,\n * first finalization pass, first prune, etc).\n * - `whenReady()` resolves once `readyHandler` resolves; rejects on warm-pass\n * failure.\n */\nexport abstract class ActorV3<TParams extends ActorParamsV3 = ActorParamsV3>\n extends AbstractCreatable<TParams>\n implements ReadinessSignal {\n protected readonly _intervals = new Map<string, NodeJS.Timeout>()\n protected readonly _semaphores = new Map<string, Semaphore>()\n protected readonly _timeouts = new Map<string, NodeJS.Timeout>()\n\n private _logger?: Logger\n private _readyDeferred = createDeferred<void>()\n private _readyError?: Error\n private _readyState: ReadyState = 'pending'\n\n override get logger(): Logger {\n this._logger = new IdLogger(\n assertEx(this.context.logger, () => `Logger is required in context for actor ${this.name}.`),\n () => this.name,\n )\n return this._logger\n }\n\n get readyError(): Error | undefined {\n return this._readyError\n }\n\n get readyState(): ReadyState {\n return this._readyState\n }\n\n protected get account(): AccountInstance {\n return this.params.account\n }\n\n protected get context(): CreatableProviderContextType {\n return this.locator.context\n }\n\n protected get locator(): ProviderFactoryLocatorInstance {\n return this.params.locator\n }\n\n static override async paramsHandler<T extends ActorInstanceV3>(\n params: Partial<T['params']>,\n ): Promise<T['params']> {\n const baseParams = await super.paramsHandler(\n { ...params, name: params.name ?? 'UnknownActor' },\n ) as T['params']\n const account = assertEx(params.account, () => `params.account is required for actor ${baseParams.name}.`)\n const locator = assertEx(params.locator, () => `params.locator is required for actor ${baseParams.name}.`)\n return {\n ...baseParams, account, locator,\n } as T['params']\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number): void {\n if (this.status !== 'starting') {\n this.logger?.warn(`Cannot register timer '${timerName}' because actor is not starting.`)\n return\n }\n let running = false\n this._semaphores.set(timerName, new Semaphore(1))\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (this.status !== 'started' || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(`Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`)\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback().then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(`Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`)\n } else if (duration > 5000) {\n this.logger?.warn(`Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`)\n }\n }).catch((error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error))\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${err.message}`)\n if (err.stack) this.logger?.error(err.stack)\n }).finally(() => {\n release()\n running = false\n })\n }).catch((error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error))\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${err.message}`)\n })\n }, periodMs)\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n this._timeouts.set(timerName, timeoutId)\n this.logger?.debug(`Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`)\n }\n\n /**\n * Invoked by the Orchestrator after `start()` to run the warm-pass.\n * Idempotent: returns immediately if already invoked.\n * Throws if `readyHandler` throws; resolves once `readyHandler` resolves.\n */\n async runReadyHandler(): Promise<void> {\n if (this._readyState !== 'pending') return\n try {\n await this.readyHandler()\n this._readyState = 'ready'\n this._readyDeferred.resolve()\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n this._readyState = 'failed'\n this._readyError = error\n this._readyDeferred.reject(error)\n throw error\n }\n }\n\n override async stopHandler(): Promise<void> {\n await super.stopHandler()\n this.logger?.debug('Stopping all timers...')\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n while (semaphore.isLocked()) {\n this.logger?.debug('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n this._semaphores.clear()\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n this.logger?.debug('Stopped.')\n }\n\n async whenReady(timeoutMs?: number): Promise<void> {\n if (timeoutMs === undefined) {\n await this._readyDeferred.promise\n return\n }\n let timer: NodeJS.Timeout | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`Actor ${this.name} did not become ready within ${timeoutMs}ms`))\n }, timeoutMs)\n })\n try {\n await Promise.race([this._readyDeferred.promise, timeout])\n } finally {\n if (timer) clearTimeout(timer)\n }\n }\n\n /**\n * Create a `Counter` instrument bound to this actor's meter, or a no-op\n * stub if telemetry is not wired. Always returns a non-undefined value so\n * call sites can drop the optional-chain on `.add()`.\n *\n * TODO: in a future pass, consider folding these single-instrument helpers\n * into a declarative `createActorMeters({ counters: {...}, gauges: {...} })`\n * spec API for actors with many instruments.\n */\n protected counter(name: string, description: string): Counter {\n return this.meter?.createCounter(name, { description }) ?? noopCounter\n }\n\n /** Create a synchronous `Gauge` instrument, or a no-op stub if telemetry is not wired. */\n protected gauge(name: string, description: string): Gauge {\n return this.meter?.createGauge(name, { description }) ?? noopGauge\n }\n\n /** Create a `Histogram` instrument, or a no-op stub if telemetry is not wired. */\n protected histogram(name: string, description: string): Histogram {\n return this.meter?.createHistogram(name, { description }) ?? noopHistogram\n }\n\n /**\n * Override in subclasses to prove the actor can do useful work.\n * Default: no-op (the actor declares itself ready as soon as `start()` returns).\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected async readyHandler(): Promise<void> {}\n\n /** Create an `UpDownCounter` instrument, or a no-op stub if telemetry is not wired. */\n protected upDownCounter(name: string, description: string): UpDownCounter {\n return this.meter?.createUpDownCounter(name, { description }) ?? noopUpDownCounter\n }\n}\n\nexport abstract class Actor<TParams extends ActorParamsV3 = ActorParamsV3> extends ActorV3<TParams> {}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string, defaultMetricsScrapePort = 9464) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultMetricsScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: { serviceName, serviceVersion }, otlpEndpoint, metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const ApiConfigZod = HostActorConfigZod.extend(z.object({\n initRewardsCache: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v !== '0' && v !== 'false' && v !== false && v != 0,\n ).default(true).register(globalRegistry, {\n description: 'Whether to initialize the rewards cache on startup',\n title: 'api.initRewardsCache',\n type: 'boolean',\n }),\n /**\n * When `true`, the API actor runs in stateless mode: it holds no local\n * backing-store ownership, never loads the local LMDB/MongoDB node, and\n * federates every JSON-RPC request to upstream owner-actors via `JsonRpc*`\n * providers. Multiple stateless API instances can run behind a load\n * balancer for horizontal scaling. Requires `remote.rpc` to point at the\n * upstream API/Finalizer/Mempool/Indexer surfaces.\n */\n stateless: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v === '1' || v === 'true' || v === true || v == 1,\n ).default(false).register(globalRegistry, {\n description: 'Run the API actor as a stateless federation node (availableBackings: [network])',\n title: 'api.stateless',\n type: 'boolean',\n }),\n /**\n * Back-compat for the surface-aware route split. When `true`, `POST /rpc`\n * serves the full `XyoConnection` (both node-surface and indexed-surface\n * methods), preserving pre-Phase-7 behavior for clients that haven't yet\n * migrated to `POST /rpc/indexed`. When `false`, `/rpc` is strictly\n * node-surface only and indexed methods are 404 at `/rpc`.\n *\n * `/rpc/indexed` mounts independently of this flag whenever the locator's\n * connection has any indexed branch.\n *\n * Default `true` for the first release that includes Phase 7 — flip to\n * `false` per environment once external clients (explorers, wallets, dApps)\n * have moved their indexed-method calls to `/rpc/indexed`.\n */\n legacyMixedRpc: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v !== '0' && v !== 'false' && v !== false && v != 0,\n ).default(true).register(globalRegistry, {\n description: 'Serve the full XyoConnection at POST /rpc (no surface filter). Set false to enforce node-surface-only at /rpc; indexed methods always available at /rpc/indexed regardless.',\n title: 'api.legacyMixedRpc',\n type: 'boolean',\n }),\n}).shape)\n\nexport type ApiConfig = z.infer<typeof ApiConfigZod>\n\nexport const isApiConfig = zodIsFactory(ApiConfigZod)\nexport const asApiConfig = zodAsFactory(ApiConfigZod, 'asApiConfig')\nexport const toApiConfig = zodToFactory(ApiConfigZod, 'toApiConfig')\n\nexport interface ApiConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: ApiConfig\n}\n\nexport const ApiConfigContext: z.ZodType<ApiConfigContext> = BaseConfigContextZod.extend({ config: ApiConfigZod })\n\nexport const isApiConfigContext: <T>(value: T) => value is T & ApiConfigContext = zodIsFactory(ApiConfigContext)\nexport const asApiConfigContext: ReturnType<typeof zodAsFactory<ApiConfigContext>> = zodAsFactory(ApiConfigContext, 'asApiConfigContext')\nexport const toApiConfigContext: ReturnType<typeof zodToFactory<ApiConfigContext>> = zodToFactory(ApiConfigContext, 'toApiConfigContext')\n","import {\n AddressZod, HexZod, toAddress, toHex, zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext, ChainId } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1ConvertFactor, BaseConfigContextZod, HostActorConfigZod, XL1,\n} from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nconst DEFAULT_FIXED_FEE = toHex(XL1(1000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_VARIABLE_FEE_BASIS_POINTS = 300 // 3%\nconst DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')\nconst DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')\nconst DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex('0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d')\nconst DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')\nconst DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(1_000_000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(1500n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_SCANNER_INTERVAL_MS = 30_000\n\nexport const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)\nexport type BasisPoints = z.infer<typeof BasisPointsZod>\n\nexport const BridgeConfigZod = HostActorConfigZod.extend({\n escrowAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge escrow will be sent',\n title: 'bridge.escrowAddress',\n type: 'string',\n }),\n feesAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge fees will be sent',\n title: 'bridge.feesAddress',\n type: 'string',\n }),\n feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {\n default: DEFAULT_FIXED_FEE,\n description: 'Fixed fee (in AttoXL1) applied to bridge transfers',\n title: 'bridge.feeFixed',\n type: 'bigint',\n }),\n feeRateBasisPoints: BasisPointsZod.default(DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry, {\n default: DEFAULT_VARIABLE_FEE_BASIS_POINTS,\n description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',\n title: 'bridge.feeRateBasisPoints',\n type: 'number',\n }),\n maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MAX_BRIDGE_AMOUNT,\n description: 'Maximum amount allowed for a bridge transfer',\n title: 'bridge.maxBridgeAmount',\n type: 'string',\n }),\n minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MIN_BRIDGE_AMOUNT,\n description: 'Minimum amount required for a bridge transfer',\n title: 'bridge.minBridgeAmount',\n type: 'string',\n }),\n redisHost: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge Redis instance',\n title: 'bridge.redisHost',\n type: 'string',\n }),\n redisPort: z.coerce.number().int().positive().default(6379).register(globalRegistry, {\n default: 6379,\n description: 'Port for the Bridge Redis instance',\n title: 'bridge.redisPort',\n type: 'number',\n }),\n scannerIntervalMs: z.coerce.number().int().positive().default(DEFAULT_SCANNER_INTERVAL_MS).register(globalRegistry, {\n default: DEFAULT_SCANNER_INTERVAL_MS,\n description: 'How often (ms) the EVM->XL1 scanner polls the remote bridge contract for new BridgedToRemote ids confirmed at depth.',\n title: 'bridge.scannerIntervalMs',\n type: 'number',\n }),\n remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteBridgeContractAddress',\n type: 'string',\n }),\n remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {\n default: DEFAULT_HARDHAT_CHAIN_ID,\n description: 'Remote chain ID',\n title: 'bridge.remoteChainId',\n type: 'string',\n }),\n remoteConfirmationDepth: z.union([\n z.coerce.number().int().nonnegative(),\n z.literal('finalized'),\n ]).optional().register(globalRegistry, {\n description: 'Block depth or BlockTag at which the remote (EVM) chain is read as canonical. Numeric: number of confirmations behind head. '\n + \"\\'finalized\\': Casper FFG finalized block. Resolved per-chain by getRemoteConfirmationDepth when unset.\",\n title: 'bridge.remoteConfirmationDepth',\n type: 'string',\n }),\n remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_TOKEN_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteTokenAddress',\n type: 'string',\n }),\n remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry, {\n description: 'Private key for the wallet to use for the remote chain wallet',\n title: 'bridge.remoteChainWalletPrivateKey',\n type: 'string',\n }),\n xl1ChainId: HexZod.optional().register(globalRegistry, {\n description: 'XL1 chain id used for bridging',\n title: 'bridge.xl1ChainId',\n type: 'string',\n }),\n xl1TokenAddress: HexZod.optional().register(globalRegistry, {\n description: 'XL1 token address used for bridging',\n title: 'bridge.xl1TokenAddress',\n type: 'string',\n }),\n})\n\nexport type BridgeConfig = z.infer<typeof BridgeConfigZod>\n\nexport const BridgeSettingsZod = BridgeConfigZod.pick({\n feeFixed: true,\n feeRateBasisPoints: true,\n feesAddress: true,\n escrowAddress: true,\n maxBridgeAmount: true,\n minBridgeAmount: true,\n remoteChainId: true,\n remoteTokenAddress: true,\n xl1TokenAddress: true,\n xl1ChainId: true,\n}).required()\n\nexport type BridgeSettings = z.infer<typeof BridgeSettingsZod>\n\nexport const isBridgeConfig = zodIsFactory(BridgeConfigZod)\nexport const asBridgeConfig = zodAsFactory(BridgeConfigZod, 'asBridgeConfig')\nexport const toBridgeConfig = zodToFactory(BridgeConfigZod, 'toBridgeConfig')\n\nexport interface BridgeConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: BridgeConfig\n}\n\nexport const BridgeConfigContext: z.ZodType<BridgeConfigContext> = BaseConfigContextZod.extend({ config: BridgeConfigZod })\n\nexport const isBridgeConfigContext: <T>(value: T) => value is T & BridgeConfigContext = zodIsFactory(BridgeConfigContext)\nexport const asBridgeConfigContext: ReturnType<typeof zodAsFactory<BridgeConfigContext>> = zodAsFactory(BridgeConfigContext, 'asBridgeConfigContext')\nexport const toBridgeConfigContext: ReturnType<typeof zodToFactory<BridgeConfigContext>> = zodToFactory(BridgeConfigContext, 'toBridgeConfigContext')\n","import {\n AddressZod,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport {\n BaseConfigContextZod, DEFAULT_MIN_CANDIDATES, HostActorConfigZod,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nexport const FinalizerConfigZod = HostActorConfigZod.extend({\n allowedProducers: z.array(AddressZod).optional(),\n // Period (ms) between finalizer ticks. Default matches the historical\n // hardcoded value in FinalizerActor; tests can lower it to drive faster\n // block finalization.\n finalizationCheckInterval: z.coerce.number().default(500),\n minCandidates: z.number().int().min(0).default(DEFAULT_MIN_CANDIDATES),\n})\n\nexport type FinalizerConfig = z.infer<typeof FinalizerConfigZod>\n\nexport const isFinalizerConfig = zodIsFactory(FinalizerConfigZod)\nexport const asFinalizerConfig = zodAsFactory(FinalizerConfigZod, 'asFinalizerConfig')\nexport const toFinalizerConfig = zodToFactory(FinalizerConfigZod, 'toFinalizerConfig')\n\nexport interface FinalizerConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: FinalizerConfig\n}\n\nexport const FinalizerConfigContext: z.ZodType<FinalizerConfigContext> = BaseConfigContextZod.extend({ config: FinalizerConfigZod })\n\nexport const isFinalizerConfigContext: <T>(value: T) => value is T & FinalizerConfigContext = zodIsFactory(FinalizerConfigContext)\nexport const asFinalizerConfigContext: ReturnType<typeof zodAsFactory<FinalizerConfigContext>> = zodAsFactory(FinalizerConfigContext, 'asFinalizerConfigContext')\nexport const toFinalizerConfigContext: ReturnType<typeof zodToFactory<FinalizerConfigContext>> = zodToFactory(FinalizerConfigContext, 'toFinalizerConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL = 1000\nexport const DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL = 1000\nexport const DEFAULT_MEMPOOL_DEMOTION_THRESHOLD = 3\nexport const DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS = 0\n\nexport const MempoolConfigZod = HostActorConfigZod.extend({\n enabled: z.union([z.string(), z.boolean()]).default('false').transform((val, ctx) => {\n if (typeof val === 'boolean') return val\n const normalized = val.toLowerCase().trim()\n if (['true', '1', 'yes', 'on'].includes(normalized)) return true\n if (['false', '0', 'no', 'off'].includes(normalized)) return false\n ctx.addIssue({\n code: 'invalid_type',\n expected: 'boolean',\n message: `Invalid boolean value: \"${val}\". Use true/false, 1/0, yes/no.`,\n })\n return z.NEVER\n }).register(globalRegistry, {\n default: 'false',\n description: 'Enable the Mempool',\n title: 'mempool.enabled',\n type: 'boolean',\n }),\n blockPruneInterval: z.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between pending block prune attempts',\n title: 'mempool.blockPruneInterval',\n type: 'number',\n }),\n demotionThreshold: z.coerce.number().int().positive().default(DEFAULT_MEMPOOL_DEMOTION_THRESHOLD).register(globalRegistry, {\n description: 'Number of times a transaction may be handed out to producers without being included in a block before it is considered demoted',\n title: 'mempool.demotionThreshold',\n type: 'number',\n }),\n maxPendingTransactions: z.coerce.number().int().nonnegative().default(DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS).register(globalRegistry, {\n description: 'Maximum number of pending transactions in the pool. When exceeded, demoted transactions are evicted first, then oldest by sequence. 0 disables the cap.',\n title: 'mempool.maxPendingTransactions',\n type: 'number',\n }),\n transactionPruneInterval: z.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between pending transaction prune attempts',\n title: 'mempool.transactionPruneInterval',\n type: 'number',\n }),\n})\n\nexport type MempoolConfig = z.infer<typeof MempoolConfigZod>\n\nexport const isMempoolConfig = zodIsFactory(MempoolConfigZod)\nexport const asMempoolConfig = zodAsFactory(MempoolConfigZod, 'asMempoolConfig')\nexport const toMempoolConfig = zodToFactory(MempoolConfigZod, 'toMempoolConfig')\n\nexport interface MempoolConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: MempoolConfig\n}\n\nexport const MempoolConfigContext: z.ZodType<MempoolConfigContext> = BaseConfigContextZod.extend({ config: MempoolConfigZod })\n\nexport const isMempoolConfigContext: <T>(value: T) => value is T & MempoolConfigContext = zodIsFactory(MempoolConfigContext)\nexport const asMempoolConfigContext: ReturnType<typeof zodAsFactory<MempoolConfigContext>> = zodAsFactory(MempoolConfigContext, 'asMempoolConfigContext')\nexport const toMempoolConfigContext: ReturnType<typeof zodToFactory<MempoolConfigContext>> = zodToFactory(MempoolConfigContext, 'toMempoolConfigContext')\n","import {\n AddressZod,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { ActorConfigZod, BaseConfigContextZod } from '@xyo-network/xl1-sdk'\nimport { globalRegistry, z } from 'zod'\n\nexport const DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL = 10_000 // 10 seconds\n\nexport const ProducerConfigZod = ActorConfigZod.extend(z.object({\n allowlist: z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed producer addresses, if undefined anyone can participate',\n title: 'allowlist',\n type: 'array',\n }),\n\n blockProductionCheckInterval: z.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry, {\n description: 'The interval time (in milliseconds) between block production attempts',\n title: 'producer.blockProductionCheckInterval',\n type: 'number',\n }),\n disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {\n description: 'Should the producer skip redeclaring their intent to continue producing blocks',\n title: 'producer.disableIntentRedeclaration',\n type: 'boolean',\n }),\n heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {\n description: 'The number of milliseconds between heartbeats if no blocks are produced',\n title: 'producer.heartbeatInterval',\n type: 'number',\n }),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).register(globalRegistry, {\n description: 'Minimum stake required to be a Producer',\n title: 'producer.minStake',\n type: 'number',\n }),\n // TODO: Address schema\n rewardAddress: z.string().optional().register(globalRegistry, {\n description: 'Address to receive block rewards',\n title: 'producer.rewardAddress',\n type: 'string',\n }),\n}).shape)\n\nexport type ProducerConfig = z.infer<typeof ProducerConfigZod>\n\nexport const isProducerConfig = zodIsFactory(ProducerConfigZod)\nexport const asProducerConfig = zodAsFactory(ProducerConfigZod, 'asProducerConfig')\nexport const toProducerConfig = zodToFactory(ProducerConfigZod, 'toProducerConfig')\n\nexport interface ProducerConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: ProducerConfig\n}\n\nexport const ProducerConfigContext: z.ZodType<ProducerConfigContext> = BaseConfigContextZod.extend({ config: ProducerConfigZod })\n\nexport const isProducerConfigContext: <T>(value: T) => value is T & ProducerConfigContext = zodIsFactory(ProducerConfigContext)\nexport const asProducerConfigContext: ReturnType<typeof zodAsFactory<ProducerConfigContext>> = zodAsFactory(ProducerConfigContext, 'asProducerConfigContext')\nexport const toProducerConfigContext: ReturnType<typeof zodToFactory<ProducerConfigContext>> = zodToFactory(ProducerConfigContext, 'toProducerConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'\nimport type { z } from 'zod'\n\nexport const RewardRedemptionConfigZod = HostActorConfigZod.extend({})\n\nexport type RewardRedemptionConfig = z.infer<typeof RewardRedemptionConfigZod>\n\nexport const isRewardRedemptionConfig = zodIsFactory(RewardRedemptionConfigZod)\nexport const asRewardRedemptionConfig = zodAsFactory(RewardRedemptionConfigZod, 'asRewardRedemptionConfig')\nexport const toRewardRedemptionConfig = zodToFactory(RewardRedemptionConfigZod, 'toRewardRedemptionConfig')\n\nexport interface RewardRedemptionConfigContext extends Omit<BaseConfigContext, 'config'> {\n config: RewardRedemptionConfig\n}\n\nexport const RewardRedemptionConfigContext: z.ZodType<RewardRedemptionConfigContext> = BaseConfigContextZod.extend({ config: RewardRedemptionConfigZod })\n\nexport const isRewardRedemptionConfigContext: <T>(value: T) => value is T & RewardRedemptionConfigContext = zodIsFactory(RewardRedemptionConfigContext)\nexport const asRewardRedemptionConfigContext: ReturnType<typeof zodAsFactory<RewardRedemptionConfigContext>> = zodAsFactory(RewardRedemptionConfigContext, 'asRewardRedemptionConfigContext')\nexport const toRewardRedemptionConfigContext: ReturnType<typeof zodToFactory<RewardRedemptionConfigContext>> = zodToFactory(RewardRedemptionConfigContext, 'toRewardRedemptionConfigContext')\n","import { deepMerge } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport function mergeConfig({ actors, ...baseConfig }: Config) {\n return {\n ...baseConfig,\n actors: actors.map((actor) => {\n return deepMerge(baseConfig, actor)\n }),\n }\n}\n","import { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { AccountInstance, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-sdk'\nimport { createDeclarationIntent } from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { WalletKind } from '@xyo-network/storage-model'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { getBuiltInDevMnemonic, getResolvedWalletReport } from './walletResolution.ts'\n\nexport async function initActorSeedPhrase(context: ActorConfigContext, bios: BiosExternalInterface): Promise<string> {\n const { logger, config } = context\n const walletKind = config.name as WalletKind\n void bios\n const report = getResolvedWalletReport()\n if (isString(report?.root.mnemonic)) return report.root.mnemonic\n const fallback = getBuiltInDevMnemonic()\n logger?.debug(`[${walletKind}] Falling back to built-in development mnemonic`)\n return assertEx(fallback, () => 'Unable to resolve mnemonic')\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfig, Config } from '@xyo-network/xl1-sdk'\nimport { DEFAULT_WALLET_PATH, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\nimport { HDNodeWallet, Mnemonic } from 'ethers'\n\n/**\n * Default BIP-32 derivation path per actor, expressed as a *relative* path\n * (the consumer appends it to the root wallet base path). Each actor resolves\n * to a distinct slot to avoid collisions out of the box.\n */\nexport const DEFAULT_ACTOR_ACCOUNT_PATH: Record<string, string> = {\n api: '3',\n bridge: '1',\n finalizer: '5',\n mempool: '4',\n producer: '0',\n rewardRedemption: '2',\n}\n\nexport const BUILT_IN_DEV_MNEMONIC = 'crane ribbon cook cousin tobacco vital moral protect merit knock veteran hint knee ocean nurse'\nexport const INSECURE_GENESIS_REWARD_MNEMONIC = 'test test test test test test test test test test test junk'\nexport const GENESIS_REWARD_AMOUNT = 20_000_000_000_000_000_000_000n\nconst ATTO_XL1_PER_XL1 = 1_000_000_000_000_000_000n\n\nexport const ROOT_WALLET_RUNTIME_ID = '_root'\nexport const SHARED_ACCOUNT_REPORT_COUNT = 10\nexport type RootMnemonicConfig = Config & { mnemonic?: string }\ntype ActorWalletConfig = Partial<ActorConfig> & { accountPath?: string }\n\nexport type MnemonicKind = 'built-in-dev' | 'configured-root' | 'insecure-genesis-reward'\n\nexport interface ResolvedRootWallet {\n basePath: string\n isBuiltInDevMnemonic: boolean\n isConfigured: boolean\n mnemonic: string\n mnemonicKind: Extract<MnemonicKind, 'built-in-dev' | 'configured-root'>\n}\n\nexport interface ResolvedWalletMetadata {\n accountPath: string\n actorName: string\n address: string\n derivationPath: string\n label: string\n mnemonic: string\n mnemonicKind: MnemonicKind\n privateKey?: string\n usesBuiltInDevMnemonic: boolean\n}\n\nexport interface ResolvedWalletReport {\n requestedActors: string[]\n root: ResolvedRootWallet\n sharedAccounts: ResolvedWalletMetadata[]\n}\n\nconst ACTOR_LABELS: Record<string, string> = {\n [ROOT_WALLET_RUNTIME_ID]: 'root/local-node',\n api: 'api',\n bridge: 'bridge',\n finalizer: 'finalizer',\n mempool: 'mempool',\n producer: 'producer',\n rewardRedemption: 'rewardRedemption',\n}\n\nlet activeWalletReport: ResolvedWalletReport | undefined\n\nfunction getAccountLabel(actorName: string): string {\n return ACTOR_LABELS[actorName] ?? actorName\n}\n\nexport function clearResolvedWalletReport() {\n activeWalletReport = undefined\n}\n\n/**\n * Resolve the effective BIP-32 derivation path for an actor.\n *\n * - If the actor config specifies `accountPath`, use it.\n * - Otherwise fall back to `DEFAULT_ACTOR_ACCOUNT_PATH[actorName]`.\n * - Otherwise fall back to `\"0\"` (a relative path that derives to the first slot\n * under the root wallet's base path).\n *\n * The returned value is exactly what the user provided (or the default) —\n * absolute paths keep their `m/` prefix; relative paths do not.\n */\nexport function resolveActorAccountPath(actorName: string, actorConfig?: ActorWalletConfig): string {\n if (actorConfig?.accountPath !== undefined) return actorConfig.accountPath\n return DEFAULT_ACTOR_ACCOUNT_PATH[actorName] ?? '0'\n}\n\nexport function isAbsoluteAccountPath(accountPath: string): boolean {\n return accountPath.startsWith('m/')\n}\n\n/**\n * Expand a (possibly relative) actor accountPath into a fully qualified BIP-32\n * derivation path. Used for reporting and collision detection.\n */\nexport function expandAccountPath(accountPath: string, basePath: string = DEFAULT_WALLET_PATH): string {\n return isAbsoluteAccountPath(accountPath) ? accountPath : `${basePath}/${accountPath}`\n}\n\nasync function deriveWalletAtPath(mnemonic: string, accountPath: string): Promise<WalletInstance> {\n if (isAbsoluteAccountPath(accountPath)) {\n // `HDWallet.fromPhrase` defaults to a derived path, not the root, so an\n // arbitrary absolute path (e.g. m/44'/60'/1'/0/0) can't be derived through\n // it. Build a true root node via ethers, derive the full path, then wrap.\n const seed = Mnemonic.fromPhrase(mnemonic).computeSeed()\n const rootNode = HDNodeWallet.fromSeed(seed)\n const derivedNode = rootNode.derivePath(accountPath)\n return await HDWallet.createFromNode(derivedNode)\n }\n const baseWallet = await generateXyoBaseWalletFromPhrase(mnemonic)\n return await baseWallet.derivePath(accountPath)\n}\n\nexport function getBuiltInDevMnemonic(): string {\n return BUILT_IN_DEV_MNEMONIC\n}\n\nexport function getInsecureGenesisRewardMnemonic(): string {\n return INSECURE_GENESIS_REWARD_MNEMONIC\n}\n\nexport function resolveRootWallet(configuration: RootMnemonicConfig): ResolvedRootWallet {\n const isConfigured = configuration.mnemonic !== undefined\n const mnemonic = configuration.mnemonic ?? BUILT_IN_DEV_MNEMONIC\n const isBuiltInDevMnemonic = mnemonic === BUILT_IN_DEV_MNEMONIC\n return {\n basePath: DEFAULT_WALLET_PATH,\n isBuiltInDevMnemonic,\n isConfigured,\n mnemonic,\n mnemonicKind: isBuiltInDevMnemonic ? 'built-in-dev' : 'configured-root',\n }\n}\n\nasync function resolveWalletMetadata({\n accountPath,\n actorName,\n mnemonic,\n mnemonicKind,\n}: {\n accountPath: string\n actorName: string\n mnemonic: string\n mnemonicKind: MnemonicKind\n}): Promise<ResolvedWalletMetadata> {\n const account = await deriveWalletAtPath(mnemonic, accountPath)\n return {\n accountPath,\n actorName,\n address: account.address,\n derivationPath: expandAccountPath(accountPath),\n label: getAccountLabel(actorName),\n mnemonic,\n mnemonicKind,\n privateKey: account.privateKey,\n usesBuiltInDevMnemonic: mnemonic === BUILT_IN_DEV_MNEMONIC,\n }\n}\n\nexport async function resolveActorWallet(\n actorName: string,\n actorConfig: ActorWalletConfig | undefined,\n root: ResolvedRootWallet,\n): Promise<ResolvedWalletMetadata> {\n return await resolveWalletMetadata({\n accountPath: resolveActorAccountPath(actorName, actorConfig),\n actorName,\n mnemonic: root.mnemonic,\n mnemonicKind: root.mnemonicKind,\n })\n}\n\nexport class ActorMnemonicNotAllowedError extends Error {\n readonly actors: string[]\n constructor(actors: string[]) {\n super([\n `Per-actor mnemonics are no longer allowed (found on: ${actors.join(', ')}).`,\n 'Move the mnemonic to the root (XL1_MNEMONIC, --mnemonic, or config file \"xl1.mnemonic\") and give each actor a distinct accountPath.',\n ].join('\\n'))\n this.name = 'ActorMnemonicNotAllowedError'\n this.actors = actors\n }\n}\n\nexport function assertNoActorMnemonics(configuration: RootMnemonicConfig): void {\n const offenders = configuration.actors\n .filter((actor): actor is ActorConfig & { mnemonic: string } => typeof (actor as { mnemonic?: unknown }).mnemonic === 'string')\n .map(actor => actor.name)\n if (offenders.length > 0) throw new ActorMnemonicNotAllowedError(offenders)\n}\n\nexport class DerivationPathCollisionError extends Error {\n readonly collisions: Record<string, string[]>\n constructor(collisions: Record<string, string[]>) {\n const lines = Object.entries(collisions).map(\n ([path, actors]) => ` - ${actors.join(', ')} → ${path}`,\n )\n super([\n 'Two or more actors resolve to the same wallet derivation path:',\n ...lines,\n 'Change each actor\\'s accountPath so every actor has a distinct path.',\n ].join('\\n'))\n this.name = 'DerivationPathCollisionError'\n this.collisions = collisions\n }\n}\n\nexport function detectDerivationPathCollisions(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): DerivationPathCollisionError | undefined {\n const actorConfigMap = new Map(configuration.actors.map(actor => [actor.name, actor]))\n const bucketsByPath = new Map<string, string[]>()\n for (const actorName of requestedActors) {\n const accountPath = resolveActorAccountPath(actorName, actorConfigMap.get(actorName))\n const fullPath = expandAccountPath(accountPath)\n const bucket = bucketsByPath.get(fullPath) ?? []\n bucket.push(actorName)\n bucketsByPath.set(fullPath, bucket)\n }\n const collisions: Record<string, string[]> = {}\n for (const [path, actors] of bucketsByPath) {\n if (actors.length > 1) collisions[path] = actors\n }\n if (Object.keys(collisions).length === 0) return undefined\n return new DerivationPathCollisionError(collisions)\n}\n\nexport async function resolveWalletReport(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): Promise<ResolvedWalletReport> {\n const root = resolveRootWallet(configuration)\n const actorConfigMap = new Map(configuration.actors.map(actor => [actor.name, actor]))\n\n const resolvedActors = await Promise.all(\n requestedActors.map(async actorName => await resolveActorWallet(actorName, actorConfigMap.get(actorName), root)),\n )\n\n const labelMap = new Map<string, string[]>()\n for (const actor of resolvedActors) {\n const labels = labelMap.get(actor.derivationPath) ?? []\n labels.push(actor.label)\n labelMap.set(actor.derivationPath, labels)\n }\n\n const sharedAccounts = await Promise.all(\n Array.from({ length: SHARED_ACCOUNT_REPORT_COUNT }, (_, index) => index).map(async (sharedIndex) => {\n const account = await resolveWalletMetadata({\n accountPath: `${sharedIndex}`,\n actorName: ROOT_WALLET_RUNTIME_ID,\n mnemonic: root.mnemonic,\n mnemonicKind: root.mnemonicKind,\n })\n const labels = labelMap.get(account.derivationPath)\n return { ...account, label: labels?.join(', ') ?? `shared[${sharedIndex}]` }\n }),\n )\n\n return {\n requestedActors: [...requestedActors],\n root,\n sharedAccounts,\n }\n}\n\nexport async function buildInsecureGenesisRewardAccounts(): Promise<ResolvedWalletMetadata[]> {\n const accounts = await Promise.all(\n Array.from({ length: SHARED_ACCOUNT_REPORT_COUNT }, (_, index) => index).map(async (sharedIndex) => {\n const account = await resolveWalletMetadata({\n accountPath: `${sharedIndex}`,\n actorName: 'genesisReward',\n mnemonic: INSECURE_GENESIS_REWARD_MNEMONIC,\n mnemonicKind: 'insecure-genesis-reward',\n })\n return { ...account, label: sharedIndex === 0 ? 'genesisRewardAddress' : `genesisReward[${sharedIndex}]` }\n }),\n )\n return accounts\n}\n\nexport async function initializeResolvedWalletReport(\n requestedActors: string[],\n configuration: RootMnemonicConfig,\n): Promise<ResolvedWalletReport> {\n activeWalletReport = await resolveWalletReport(requestedActors, configuration)\n return activeWalletReport\n}\n\nexport function getResolvedWalletReport(): ResolvedWalletReport | undefined {\n return activeWalletReport\n}\n\nfunction formatSharedAccount(account: ResolvedWalletMetadata, showPrivateKey: boolean) {\n const lines = [\n `[${account.accountPath}] ${account.label}`,\n `source: ${account.mnemonicKind === 'built-in-dev' ? 'built-in dev mnemonic' : 'configured root mnemonic'}`,\n `path: ${account.derivationPath}`,\n `address: ${account.address}`,\n ]\n if (showPrivateKey) lines.push(`privateKey: ${account.privateKey ?? 'unavailable'}`)\n return lines.join('\\n')\n}\n\nfunction formatGenesisRewardAccount(account: ResolvedWalletMetadata) {\n const balance = account.accountPath === '0' ? GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1 : 0n\n return [\n `[${account.accountPath}] ${account.label}`,\n `path: ${account.derivationPath}`,\n `address: ${account.address}`,\n `privateKey: ${account.privateKey ?? 'unavailable'}`,\n `balance: ${balance.toString()} XL1`,\n ].join('\\n')\n}\n\nexport function formatWalletReport(report: ResolvedWalletReport): string {\n const sections: string[] = []\n const showSecrets = report.root.isBuiltInDevMnemonic\n\n sections.push(showSecrets ? 'Development wallet detected.' : 'Wallet summary')\n\n if (showSecrets) {\n sections.push([\n 'DEVELOPMENT WALLET WARNING',\n '',\n 'XL1 is using the built-in development mnemonic.',\n 'This mnemonic is fixed, public, and does not change between runs.',\n 'The addresses and private keys below are unsafe and must never be used for real funds, production systems, or shared environments.',\n 'Anyone with this information can fully control these accounts.',\n '',\n 'Mnemonic:',\n report.root.mnemonic,\n ].join('\\n'))\n }\n\n sections.push([\n `Shared wallet accounts from ${report.root.basePath}:`,\n '',\n report.sharedAccounts.map(account => formatSharedAccount(account, showSecrets)).join('\\n\\n'),\n ].join('\\n'))\n\n return sections.join('\\n\\n')\n}\n\nexport function formatInsecureGenesisRewardWarning(accounts: ResolvedWalletMetadata[]): string {\n return [\n 'INSECURE GENESIS REWARD WALLET WARNING',\n '',\n 'XL1 is using a public, insecure fallback wallet for the genesis reward address.',\n 'This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.',\n 'Anyone with this information can fully control the genesis reward wallet.',\n '',\n 'Genesis reward phrase:',\n INSECURE_GENESIS_REWARD_MNEMONIC,\n '',\n `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,\n '',\n `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,\n '',\n accounts.map(account => formatGenesisRewardAccount(account)).join('\\n\\n'),\n ].join('\\n')\n}\n\nexport async function resolveGenesisRewardAddress(config: Pick<Config, 'chain'>): Promise<Address> {\n if (config.chain.genesisRewardAddress) return config.chain.genesisRewardAddress\n const wallet = await generateXyoBaseWalletFromPhrase(INSECURE_GENESIS_REWARD_MNEMONIC)\n const account = await wallet.derivePath('0')\n return account.address\n}\n\nexport async function resolveWalletForActor(actorName: string, accountPath?: string): Promise<WalletInstance> {\n const report = activeWalletReport\n const mnemonic = report?.root.mnemonic ?? BUILT_IN_DEV_MNEMONIC\n const resolvedAccountPath = accountPath ?? resolveActorAccountPath(actorName)\n return await deriveWalletAtPath(mnemonic, resolvedAccountPath)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type {\n AttachableArchivistInstance, AttachableModuleInstance, BridgeInstance, ModuleIdentifier,\n} from '@xyo-network/sdk-js'\nimport { asAttachableArchivistInstance, asAttachableModuleInstance } from '@xyo-network/sdk-js'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport async function initBridgedModule({ bridge, moduleName }: { bridge: BridgeInstance; moduleName: ModuleIdentifier }): Promise<AttachableModuleInstance> {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport async function initBridgedArchivistModule({ bridge, moduleName }: {\n bridge: BridgeInstance\n moduleName: ModuleIdentifier\n}): Promise<AttachableArchivistInstance> {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { resolveWalletForActor } from './walletResolution.ts'\n\n/**\n * Process-global singleton cache, keyed by actor name. Preserves referential\n * identity of the resolved wallet across repeated calls (e.g. locator rebuilds\n * during tests) and avoids redundant HD-derivation work.\n */\nconst actorAccountSingletons: Record<string, Promisable<WalletInstance>> = {}\n\n/**\n * Resolve the `WalletInstance` for an actor, deriving it from the active\n * root mnemonic at the actor's configured account path.\n *\n * Memoized by `context.config.name` for the lifetime of the process.\n */\nexport async function initActorWallet(context: ActorConfigContext): Promise<WalletInstance> {\n const actorName = context.config.name\n if (isDefined(actorAccountSingletons[actorName])) return actorAccountSingletons[actorName]\n const accountPath = typeof context.config.accountPath === 'string' ? context.config.accountPath : undefined\n const account = await resolveWalletForActor(actorName, accountPath)\n context.logger?.debug(`[${actorName}] Using wallet address ${account.address}`)\n actorAccountSingletons[actorName] = account\n return actorAccountSingletons[actorName]\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\n\nimport type { ActorInstanceV3, ReadyState } from '../actor/v3/index.ts'\nimport { ActorV3 } from '../actor/v3/index.ts'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n readonly readyState: ReadyState\n isReady(): boolean\n isShuttingDown(): boolean\n registerActor(actor: ActorInstanceV3): Promise<void>\n whenReady(timeoutMs?: number): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: (ActorInstanceV3)[] = []\n protected running = false\n protected shuttingDown = false\n\n get readyState(): ReadyState {\n if (this.actors.length === 0) return 'pending'\n if (this.actors.some(a => isLocalActor(a) && a.readyState === 'failed')) return 'failed'\n if (this.actors.every(a => isLocalActor(a) && a.readyState === 'ready')) return 'ready'\n return 'pending'\n }\n\n isReady(): boolean {\n return this.readyState === 'ready' && !this.shuttingDown\n }\n\n isShuttingDown(): boolean {\n return this.shuttingDown\n }\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstanceV3) {\n this.actors.push(actor)\n if (this.running) {\n // Already running — bring this actor up immediately and trigger its ready handler.\n await actor.start()\n if (isLocalActor(actor)) {\n actor.runReadyHandler().catch((err: unknown) => {\n this.logger?.error(`[Orchestrator] Actor [${actor.name}] readyHandler failed: ${formatError(err)}`)\n })\n }\n }\n }\n\n /**\n * Starts the orchestrator: activates all actors in parallel and kicks off their warm-pass.\n * `whenReady()` resolves once every actor's `readyHandler` has succeeded.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log(`[Orchestrator] Starting ${this.actors.length} actor(s) in parallel...`)\n this.running = true\n\n const startResults = await Promise.allSettled(this.actors.map(a => a.start()))\n const startFailures = startResults.flatMap((r, i) => (r.status === 'rejected' ? [{ actor: this.actors[i], reason: r.reason as unknown }] : []))\n if (startFailures.length > 0) {\n for (const f of startFailures) this.logger?.error(`[Orchestrator] Actor [${f.actor?.name ?? '?'}] failed to start: ${formatError(f.reason)}`)\n throw new Error(`[Orchestrator] ${startFailures.length} actor(s) failed to start`)\n }\n\n // Kick off readyHandlers in parallel; do not await — `whenReady()` is the join point.\n for (const actor of this.actors) {\n if (isLocalActor(actor)) {\n actor.runReadyHandler().catch((err: unknown) => {\n this.logger?.error(`[Orchestrator] Actor [${actor.name}] readyHandler failed: ${formatError(err)}`)\n })\n }\n }\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n this.shuttingDown = true\n await Promise.allSettled(this.actors.map(a => a.stop()))\n this.running = false\n this.shuttingDown = false\n this.logger?.log('[Orchestrator] Stopped.')\n }\n\n /**\n * Resolves once every actor reports ready. Rejects if any actor's `readyHandler` throws,\n * or after `timeoutMs` if provided.\n */\n async whenReady(timeoutMs?: number): Promise<void> {\n const localActors = this.actors.filter(isLocalActor)\n if (localActors.length === 0) return\n if (timeoutMs === undefined) {\n await Promise.all(localActors.map(a => a.whenReady()))\n return\n }\n let timer: NodeJS.Timeout | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`[Orchestrator] Not ready within ${timeoutMs}ms`))\n }, timeoutMs)\n })\n try {\n await Promise.race([Promise.all(localActors.map(a => a.whenReady())), timeout])\n } finally {\n if (timer) clearTimeout(timer)\n }\n }\n}\n\nfunction isLocalActor(actor: ActorInstanceV3): actor is ActorInstanceV3 & ActorV3 {\n return actor instanceof ActorV3\n}\n\nfunction formatError(err: unknown): string {\n if (err instanceof Error) return `${err.message}${err.stack ? `\\n${err.stack}` : ''}`\n return String(err)\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport type { CreatableProviderParams } from '@xyo-network/xl1-sdk'\nimport { AbstractCreatableProvider, creatableProvider } from '@xyo-network/xl1-sdk'\n\n/**\n * Moniker used to resolve a SimpleRejectedTransactionsArchivistProvider\n * from a ProviderFactoryLocator. Actor-local locators (e.g. the producer)\n * resolve this from the root locator to reuse the shared rejected-transactions\n * archivist that the DLQ runner and viewer also write to.\n */\nexport const RejectedTransactionsArchivistProviderMoniker = 'RejectedTransactionsArchivistProvider'\n\n/**\n * Parameters for SimpleRejectedTransactionsArchivistProvider.\n */\nexport interface SimpleRejectedTransactionsArchivistProviderParams extends CreatableProviderParams {\n archivist: ArchivistInstance\n}\n\n/**\n * Pass-through provider that exposes the shared rejected-transactions\n * archivist under a locator moniker so downstream actor locators can\n * reuse the same backing store rather than constructing their own\n * ephemeral MemoryArchivist.\n */\n@creatableProvider()\nexport class SimpleRejectedTransactionsArchivistProvider extends AbstractCreatableProvider<SimpleRejectedTransactionsArchivistProviderParams> {\n static readonly defaultMoniker = RejectedTransactionsArchivistProviderMoniker\n static readonly dependencies: string[] = []\n static readonly monikers = [RejectedTransactionsArchivistProviderMoniker]\n\n moniker = SimpleRejectedTransactionsArchivistProvider.defaultMoniker\n\n get archivist(): ArchivistInstance {\n return this.params.archivist\n }\n\n static override async paramsHandler(\n params?: Partial<SimpleRejectedTransactionsArchivistProviderParams>,\n ): Promise<SimpleRejectedTransactionsArchivistProviderParams> {\n return {\n ...(await super.paramsHandler(params)),\n archivist: assertEx(params?.archivist, () => 'archivist is required'),\n }\n }\n}\n","/**\n * Backing types are owned by `@xyo-network/xl1-protocol-sdk`. This file is a\n * re-export shim so existing imports inside this package keep working without\n * a churn-y rename.\n *\n * - `Backing`, `BackingNeed`, `Surface` — the type axes.\n * - `backingsSatisfied`, `unmetBackings` — the subset/diagnostic helpers.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type {\n Backing, BackingNeed, Surface,\n} from '@xyo-network/xl1-protocol-sdk'\nexport { backingsSatisfied, unmetBackings } from '@xyo-network/xl1-protocol-sdk'\n","/**\n * Capability types and registry are owned by `@xyo-network/xl1-protocol-sdk`.\n * This file re-exports them so existing imports in this package keep working.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type { Capability, CapabilityRegistryInstance } from '@xyo-network/xl1-protocol-sdk'\nexport { createCapabilityRegistry } from '@xyo-network/xl1-protocol-sdk'\nexport type { ProviderMoniker } from '@xyo-network/xl1-sdk'\n","import {\n AccountBalanceViewerMoniker,\n BlockRunnerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n ChainContractViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n StakeTotalsViewerMoniker,\n TimeSyncViewerMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { RejectedTransactionsArchivistProviderMoniker } from '../../../shared/index.ts'\nimport type { Capability, CapabilityRegistryInstance } from './Capability.ts'\nimport { createCapabilityRegistry } from './Capability.ts'\n\nconst XyoConnectionMoniker = 'XyoConnection'\nconst XyoGatewayRunnerMoniker = 'XyoGatewayRunner'\n\n/**\n * Capability metadata for the monikers consumed by the in-repo actors.\n *\n * `implies` records the static dependencies a runner pulls in transitively\n * — e.g. `BlockRunner` requires the seven viewers `SimpleBlockRunner` reads\n * from to produce a block. The resolver uses `implies` to expand the wanted\n * set so callers only need to declare the top-level capability.\n */\nconst capabilities: readonly Capability[] = [\n {\n id: BlockViewerMoniker, label: 'Block viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: WindowedBlockViewerMoniker, label: 'Windowed block viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: MempoolViewerMoniker, label: 'Mempool viewer', kind: 'viewer', surface: 'node',\n // Note: `SimpleMempoolViewer.dependencies` lists `WindowedBlockViewer`,\n // but the runtime constructor does NOT actually resolve it — the\n // dependencies field is informational for `validateDepsOnRegister`.\n // Adding `implies: [WindowedBlockViewerMoniker]` here would over-provision\n // (selected by `locatorPlan.spec.ts`); leave it off intentionally.\n },\n {\n id: MempoolRunnerMoniker, label: 'Mempool runner', kind: 'runner', surface: 'node',\n // Note: `SimpleMempoolRunner.dependencies` lists BlockValidationViewer,\n // ChainContractViewer, FinalizationViewer, TransactionValidationViewer —\n // but the same \"informational deps\" principle applies: the runtime\n // constructor does not eagerly resolve them. Adding them as `implies`\n // would over-provision (selected by `locatorPlan.spec.ts`).\n },\n {\n id: AccountBalanceViewerMoniker, label: 'Account balance viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: FinalizationViewerMoniker, label: 'Finalization viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: FinalizationRunnerMoniker, label: 'Finalization runner', kind: 'runner', surface: 'node',\n },\n {\n id: TransactionViewerMoniker, label: 'Transaction viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: BlockValidationViewerMoniker, label: 'Block validation viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: TransactionValidationViewerMoniker, label: 'Transaction validation viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: DeadLetterQueueViewerMoniker, label: 'Dead-letter queue viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: DeadLetterQueueRunnerMoniker, label: 'Dead-letter queue runner', kind: 'runner', surface: 'node',\n },\n {\n id: ChainContractViewerMoniker, label: 'Chain contract viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: StakeTotalsViewerMoniker, label: 'Stake totals viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: TimeSyncViewerMoniker, label: 'Time sync viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: XyoViewerMoniker, label: 'XYO viewer', kind: 'viewer', surface: 'node',\n },\n {\n id: XyoConnectionMoniker, label: 'XYO connection', kind: 'gateway', surface: 'node',\n },\n {\n id: XyoGatewayRunnerMoniker, label: 'XYO gateway runner', kind: 'gateway', surface: 'node',\n },\n {\n id: RejectedTransactionsArchivistProviderMoniker, label: 'Rejected transactions archivist provider', kind: 'archivist', surface: 'node',\n },\n {\n id: BlockRunnerMoniker,\n label: 'Block runner',\n kind: 'runner',\n surface: 'node',\n implies: [\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n ChainContractViewerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n TimeSyncViewerMoniker,\n ],\n },\n]\n\n/**\n * Builds a fresh registry seeded with all known XL1 capabilities.\n * Callers may add more (`registry.register(...)`) before passing it to\n * `resolveProviders`.\n */\nexport function createDefaultCapabilityRegistry(): CapabilityRegistryInstance {\n const registry = createCapabilityRegistry()\n for (const cap of capabilities) registry.register(cap)\n return registry\n}\n","import {\n SimpleAccountBalanceViewer,\n SimpleBlockValidationViewer,\n SimpleBlockViewer,\n SimpleDeadLetterQueueRunner,\n SimpleDeadLetterQueueViewer,\n SimpleFinalizationRunner,\n SimpleFinalizationViewer,\n SimpleMempoolRunner,\n SimpleMempoolViewer,\n SimpleTransactionValidationViewer,\n SimpleTransactionViewer,\n SimpleWindowedBlockViewer,\n SimpleXyoConnectionViewer,\n SimpleXyoViewer,\n} from '@xyo-network/xl1-sdk'\n\nimport type { MempoolConfig } from '../../../shared/index.ts'\nimport { SimpleRejectedTransactionsArchivistProvider } from '../../../shared/index.ts'\nimport type { ProviderDescriptor } from './Provider.ts'\nimport type { XL1ResolutionContext } from './XL1ResolutionContext.ts'\n\ninterface ConfigWithMempool {\n mempool?: Pick<MempoolConfig, 'demotionThreshold' | 'maxPendingTransactions'>\n}\n\nfunction readMempoolTuning(ctx: XL1ResolutionContext): { demotionThreshold?: number; maxPendingTransactions?: number } {\n const cfg = ctx.actorContext.config as unknown as ConfigWithMempool | undefined\n return {\n demotionThreshold: cfg?.mempool?.demotionThreshold,\n maxPendingTransactions: cfg?.mempool?.maxPendingTransactions,\n }\n}\n\nconst passes = (): boolean => true\n\n/**\n * Tier-1 descriptors mirroring today's `localLocatorFromConfig` registrations.\n * These produce a behavior-equivalent locator when no remote config is set.\n *\n * Conventions:\n * - `id` is the provider class name (used for snapshot diffing).\n * - `tier: 1` — direct in-process backing-store access.\n * - `preconditions` always returns true here because the constituent resources\n * (archivists, summary maps) are required by the local node anyway; if they\n * were missing, `buildProcessSharedResources` would have already thrown.\n * - `backings` declares which backing resources `build()` reads from `ctx`.\n * The resolver uses this to skip descriptors whose backings aren't a subset\n * of the locator's `availableBackings`.\n * - `surface` declares which API surface the capability is exposed under.\n */\nexport const localTier1Descriptors: readonly ProviderDescriptor<XL1ResolutionContext>[] = [\n {\n id: 'SimpleMempoolViewer',\n satisfies: [SimpleMempoolViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'mempool-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: (ctx) => {\n const { demotionThreshold } = readMempoolTuning(ctx)\n return SimpleMempoolViewer.factory<SimpleMempoolViewer>(\n SimpleMempoolViewer.dependencies,\n {\n pendingTransactionsArchivist: ctx.process.pendingTransactionsArchivist,\n pendingBlocksArchivist: ctx.process.pendingBlocksArchivist,\n demotionThreshold,\n },\n )\n },\n },\n {\n id: 'SimpleMempoolRunner',\n satisfies: [SimpleMempoolRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'mempool-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: (ctx) => {\n const { maxPendingTransactions } = readMempoolTuning(ctx)\n return SimpleMempoolRunner.factory<SimpleMempoolRunner>(\n SimpleMempoolRunner.dependencies,\n {\n pendingTransactionsArchivist: ctx.process.pendingTransactionsArchivist,\n pendingBlocksArchivist: ctx.process.pendingBlocksArchivist,\n maxPendingTransactions,\n },\n )\n },\n },\n {\n id: 'SimpleAccountBalanceViewer',\n satisfies: [SimpleAccountBalanceViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'indexer-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(\n SimpleAccountBalanceViewer.dependencies,\n {\n balancesSummaryMap: ctx.process.balancesSummaryMap,\n transfersSummaryMap: ctx.process.transfersSummaryMap,\n },\n ),\n },\n {\n id: 'SimpleFinalizationViewer',\n satisfies: [SimpleFinalizationViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(\n SimpleFinalizationViewer.dependencies,\n { finalizedArchivist: ctx.process.readonlyChainArchivist },\n ),\n },\n {\n id: 'SimpleBlockViewer',\n satisfies: [SimpleBlockViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleBlockViewer.factory<SimpleBlockViewer>(\n SimpleBlockViewer.dependencies,\n { finalizedArchivist: ctx.process.readonlyChainArchivist },\n ),\n },\n {\n id: 'SimpleWindowedBlockViewer',\n satisfies: [SimpleWindowedBlockViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(\n SimpleWindowedBlockViewer.dependencies,\n { maxWindowSize: 1000, syncInterval: 10_000 },\n ),\n },\n {\n id: 'SimpleXyoConnectionViewer',\n satisfies: [SimpleXyoConnectionViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleXyoConnectionViewer.factory<SimpleXyoConnectionViewer>(SimpleXyoConnectionViewer.dependencies, {}),\n },\n {\n id: 'SimpleTransactionViewer',\n satisfies: [SimpleTransactionViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleTransactionViewer.factory<SimpleTransactionViewer>(SimpleTransactionViewer.dependencies, {}),\n },\n {\n id: 'SimpleXyoViewer',\n satisfies: [SimpleXyoViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: () => SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, {}),\n },\n {\n id: 'SimpleFinalizationRunner',\n satisfies: [SimpleFinalizationRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'chain-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleFinalizationRunner.factory<SimpleFinalizationRunner>(\n SimpleFinalizationRunner.dependencies,\n { finalizedArchivist: ctx.process.writableChainArchivist },\n ),\n },\n {\n id: 'SimpleBlockValidationViewer',\n satisfies: [SimpleBlockValidationViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(\n SimpleBlockValidationViewer.dependencies,\n {\n state: ctx.process.blockStateValidator,\n protocol: ctx.process.blockProtocolValidator,\n },\n ),\n },\n {\n id: 'SimpleTransactionValidationViewer',\n satisfies: [SimpleTransactionValidationViewer.defaultMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleTransactionValidationViewer.factory<SimpleTransactionValidationViewer>(\n SimpleTransactionValidationViewer.dependencies,\n {\n protocol: ctx.process.transactionProtocolValidator,\n state: ctx.process.transactionStateValidator,\n },\n ),\n },\n {\n id: 'SimpleDeadLetterQueueRunner',\n satisfies: [SimpleDeadLetterQueueRunner.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'write' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleDeadLetterQueueRunner.factory<SimpleDeadLetterQueueRunner>(\n SimpleDeadLetterQueueRunner.dependencies,\n {\n rejectedBlocksArchivist: ctx.process.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: ctx.process.rejectedTransactionsArchivist,\n },\n ),\n },\n {\n id: 'SimpleDeadLetterQueueViewer',\n satisfies: [SimpleDeadLetterQueueViewer.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleDeadLetterQueueViewer.factory<SimpleDeadLetterQueueViewer>(\n SimpleDeadLetterQueueViewer.dependencies,\n {\n rejectedBlocksArchivist: ctx.process.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: ctx.process.rejectedTransactionsArchivist,\n },\n ),\n },\n {\n id: 'SimpleRejectedTransactionsArchivistProvider',\n satisfies: [SimpleRejectedTransactionsArchivistProvider.defaultMoniker],\n tier: 1,\n backings: [{ backing: 'dlq-store', mode: 'read' }],\n surface: 'node',\n preconditions: passes,\n build: ctx => SimpleRejectedTransactionsArchivistProvider.factory<SimpleRejectedTransactionsArchivistProvider>(\n SimpleRejectedTransactionsArchivistProvider.dependencies,\n { archivist: ctx.process.rejectedTransactionsArchivist },\n ),\n },\n]\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport type { BackingNeed } from './Backing.ts'\nimport type { ProviderMoniker } from './Capability.ts'\nimport { createDefaultCapabilityRegistry } from './defaultCapabilityRegistry.ts'\nimport { localTier1Descriptors } from './descriptors.ts'\nimport { networkTier3Descriptors } from './networkTier3Descriptors.ts'\nimport type { BuildProcessSharedResourcesOptions } from './ProcessSharedResources.ts'\nimport { buildProcessSharedResources } from './ProcessSharedResources.ts'\nimport type { ProviderDescriptor } from './Provider.ts'\nimport type { ResolutionPlan } from './resolveProviders.ts'\nimport { resolveProviders } from './resolveProviders.ts'\nimport type { XL1ResolutionContext } from './XL1ResolutionContext.ts'\n\nexport interface LocatorFromActorNeedsOptions extends BuildProcessSharedResourcesOptions {\n /**\n * The backings the locator's process holds. If provided, the resolver filters\n * out any candidate whose `backings` are not a subset of `availableBackings`.\n * If omitted, defaults to the all-backings set (single-process developer path)\n * to preserve back-compat — every tier-1 descriptor is eligible.\n */\n availableBackings?: readonly BackingNeed[]\n /**\n * Additional descriptors beyond the built-in tier-1 + tier-3 sets. Use to\n * inject actor-specific extras (e.g. `SimpleBlockRunner` for the producer).\n */\n extraDescriptors?: readonly ProviderDescriptor<XL1ResolutionContext>[]\n /**\n * Pre-built process resources. When provided, `buildProcessSharedResources`\n * is skipped and this object is used directly as `XL1ResolutionContext.process`.\n * Required for stateless paths (e.g. a stateless API actor with\n * `availableBackings: [{ backing: 'network', mode: 'read' }]`) where\n * loading the local node would be wrong — the resolver picks tier-3\n * `JsonRpc*` descriptors which don't reference `ctx.process` anyway.\n */\n process?: XL1ResolutionContext['process']\n /**\n * Whether the underlying `ProviderFactoryLocator` should validate\n * dependencies at register time. Off by default (matches today's behavior\n * in `localLocatorFromConfig`).\n */\n validateDepsOnRegister?: boolean\n}\n\nexport interface LocatorFromActorNeedsResult {\n readonly locator: ProviderFactoryLocatorInstance\n readonly plan: ResolutionPlan\n readonly process: XL1ResolutionContext['process']\n}\n\n/**\n * Builds a single shared `ProviderFactoryLocator` driven by the union of all\n * actors' declared `needs`. Replaces the imperative pattern in\n * `localLocatorFromConfig` with a data-driven plan.\n *\n * - Builds `ProcessSharedResources` once (or accepts a pre-built `process` via\n * `options.process` for stateless paths that skip the local node).\n * - Walks `Capability.implies` to expand transitive needs.\n * - Filters candidates by `availableBackings` if provided.\n * - Picks one descriptor per moniker by tier/priority.\n * - Registers exactly those descriptors and freezes the locator.\n */\nexport async function locatorFromActorNeeds(\n context: ActorConfigContext,\n actorNeeds: readonly ActorCapabilityNeeds[],\n options: LocatorFromActorNeedsOptions = {},\n): Promise<LocatorFromActorNeedsResult> {\n const process = options.process ?? (await buildProcessSharedResources(context, options))\n const capabilities = createDefaultCapabilityRegistry()\n const resolutionContext: XL1ResolutionContext = {\n actorContext: context, capabilities, process,\n }\n\n const needs = unionNeeds(actorNeeds)\n const candidates = [\n ...localTier1Descriptors,\n ...networkTier3Descriptors,\n ...(options.extraDescriptors ?? []),\n ]\n const plan = resolveProviders<XL1ResolutionContext>(\n needs,\n candidates,\n resolutionContext,\n { availableBackings: options.availableBackings },\n )\n\n const locator = new ProviderFactoryLocator(context, {}, options.validateDepsOnRegister ?? false)\n const factories = plan.selected\n .map(d => d.build(resolutionContext))\n .filter((f): f is NonNullable<typeof f> => f !== undefined)\n locator.registerMany(factories)\n\n return {\n locator, plan, process,\n }\n}\n\nfunction unionNeeds(actorNeeds: readonly ActorCapabilityNeeds[]): Set<ProviderMoniker> {\n const result = new Set<ProviderMoniker>()\n for (const needs of actorNeeds) {\n for (const moniker of needs.required) result.add(moniker)\n if (needs.optional) for (const moniker of needs.optional) result.add(moniker)\n }\n return result\n}\n","/**\n * Tier-3 `JsonRpc*` descriptors are owned by `@xyo-network/xl1-rpc` (the\n * package that defines the JsonRpc provider classes). This file re-exports\n * them so existing imports inside this package keep working without churn.\n *\n * The upstream pool ships more entries than the original local copy:\n * - Node-surface adds `JsonRpcStakeTotalsViewer` and `JsonRpcTimeSyncViewer`.\n * - Indexed-surface adds `JsonRpcStakeViewer`, `JsonRpcNetworkStakeViewer`,\n * and `JsonRpcNetworkStakeStepRewardsViewer`.\n *\n * `locatorFromActorNeeds` consumes the full union by default.\n */\nexport {\n indexedNetworkDescriptors, networkTier3Descriptors, nodeNetworkDescriptors,\n} from '@xyo-network/xl1-sdk'\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol-driver-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BalancesStepSummary, BaseConfigContext, MapType,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nexport async function initBalanceSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import { asEthAddress } from '@xylabs/sdk-js'\nimport {\n EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeTotalsViewer, EvmStakeViewer,\n} from '@xyo-network/chain-ethereum'\nimport { canUseEvmProvider, initEvmProvider } from '@xyo-network/chain-orchestration-evm'\nimport type {\n ChainId,\n Position,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n SimpleChainContractViewer,\n SimpleStakeEventsViewer, SimpleStakeTotalsViewer, SimpleStakeViewer, SimpleTimeSyncViewer,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\n/* TODO: Rename function since it initializes both EVM and non-EVM providers */\nexport async function initEvmProvidersIfAvailable(\n locator: ProviderFactoryLocatorInstance,\n): Promise<ProviderFactoryLocatorInstance> {\n const context = locator.context\n const { logger } = context\n if (canUseEvmProvider(context) && context.config.chain.id) {\n const chainId = context.config.chain.id as ChainId\n const provider = await initEvmProvider(context)\n const address = asEthAddress(chainId, true)\n\n // Register the contract events viewer\n locator.register(EvmStakeEventsViewer.factory<EvmStakeEventsViewer>(\n EvmStakeEventsViewer.dependencies,\n { address, provider },\n ))\n\n // Register the stake viewer\n locator.register(EvmStakeViewer.factory<EvmStakeViewer>(\n EvmStakeViewer.dependencies,\n { address, provider },\n ))\n\n // Register the stake totals viewer\n locator.register(EvmStakeTotalsViewer.factory<EvmStakeTotalsViewer>(\n EvmStakeTotalsViewer.dependencies,\n { address, provider },\n ))\n\n // Register the contract viewer\n locator.register(EvmChainContractViewer.factory<EvmChainContractViewer>(\n EvmChainContractViewer.dependencies,\n { address, provider },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n { ethProvider: provider },\n ))\n } else {\n logger?.warn('EVM provider not available - running with memory based contract/stake viewers')\n const positions: Position[] = []\n\n // Register the contract events viewer\n locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(\n SimpleStakeEventsViewer.dependencies,\n { positions },\n ))\n\n // Register the stake viewer\n locator.register(SimpleStakeViewer.factory<SimpleStakeViewer>(\n SimpleStakeViewer.dependencies,\n { positions },\n ))\n\n // Register the stake totals viewer\n locator.register(SimpleStakeTotalsViewer.factory<SimpleStakeTotalsViewer>(\n SimpleStakeTotalsViewer.dependencies,\n {},\n ))\n\n // Register the contract viewer\n locator.register(SimpleChainContractViewer.factory<SimpleChainContractViewer>(\n SimpleChainContractViewer.dependencies,\n {\n minWithdrawalBlocks: 10, stakingTokenAddress: XYO_ZERO_ADDRESS, rewardsContract: XYO_ZERO_ADDRESS,\n },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n {},\n ))\n }\n return locator\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { createBootstrapHead } from '@xyo-network/chain-sdk'\nimport type { AccountInstance, ArchivistInstance } from '@xyo-network/sdk-js'\nimport { Account } from '@xyo-network/sdk-js'\nimport type {\n ActorConfig,\n ChainId,\n SignedBlockBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n asAttoXL1, findMostRecentBlock,\n flattenHydratedBlock,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n buildInsecureGenesisRewardAccounts,\n formatInsecureGenesisRewardWarning,\n GENESIS_REWARD_AMOUNT,\n resolveGenesisRewardAddress,\n} from '../../shared/index.ts'\n\nexport interface InitFinalizationOptions {\n logger?: Logger\n onInsecureGenesisConfirm?: () => Promise<void>\n}\n\nexport async function initFinalizationArchivistIfNeeded(\n archivist: ArchivistInstance,\n config: ActorConfig,\n account: AccountInstance,\n options: InitFinalizationOptions = {},\n): Promise<[SignedBlockBoundWitnessWithHashMeta, ChainId]> {\n const configuredChainId = config.chain.id\n const possibleHead = await findMostRecentBlock(archivist)\n if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {\n throw new Error(`Configured chain ID (${configuredChainId}) does not match the existing chain ID (${possibleHead.chain})`)\n }\n\n let possibleChainId: ChainId | undefined = configuredChainId\n\n // if there is no configured chain ID and no head, create a new chain\n if (!possibleHead) {\n possibleChainId = possibleChainId ?? (await Account.random()).address\n if (!config.chain.genesisRewardAddress) {\n const accounts = await buildInsecureGenesisRewardAccounts()\n options.logger?.warn(formatInsecureGenesisRewardWarning(accounts))\n if (options.onInsecureGenesisConfirm) await options.onInsecureGenesisConfirm()\n }\n const genesisRewardAddress = await resolveGenesisRewardAddress(config)\n // If there is no head, create one\n const chain = await createBootstrapHead(\n account,\n possibleChainId,\n asAttoXL1(GENESIS_REWARD_AMOUNT),\n genesisRewardAddress,\n )\n const payloads = chain.flatMap(block => flattenHydratedBlock(block))\n await archivist.insert(payloads)\n }\n const head = possibleHead ?? assertEx(await findMostRecentBlock(archivist), () => 'No blocks found in chain archivist')\n const chainId = assertEx(possibleChainId, () => 'Chain ID could not be determined')\n return [head, chainId]\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nasync function rejectedBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedBlocks'),\n { required: true },\n )\n}\n\nasync function rejectedTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedTransactions'),\n { required: true },\n )\n}\n\nexport async function initServerNode(\n context: BaseConfigContext,\n wallet: WalletInstance,\n providedNode?: NodeInstance,\n) {\n const node: NodeInstance = providedNode ?? (await loadNode(context, wallet))\n assertEx(await node.start(), () => 'Failed to start node')\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n const rejectedBlocksArchivist = await rejectedBlocksArchivistFromNode(node)\n const rejectedTransactionsArchivist = await rejectedTransactionsArchivistFromNode(node)\n return {\n node,\n writableChainArchivist,\n readonlyChainArchivist,\n pendingTransactionsArchivist,\n pendingBlocksArchivist,\n rejectedBlocksArchivist,\n rejectedTransactionsArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport { MongoDBArchivistV2, MongoDBArchivistV2Deletable } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport { NamedLmdbArchivist } from './NamedLmdbArchivist.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory). Telemetry providers are taken from\n * the calling context so a single Prometheus exporter is shared per process —\n * `contextFromConfigWithoutLocator` is the canonical place that boots them.\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (\n {\n logger, traceProvider, meterProvider, config,\n }: BaseConfigContext,\n) => {\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n locator.register(MongoDBArchivistV2Deletable.factory(params), { 'network.xyo.storage.capabilities.delete': 'enabled' }, false)\n } else if (isDefined(config.storage?.root)) {\n // LMDB-backed disk storage when no mongo is configured.\n // Multi-process-safe (LMDB lockfile/MVCC), so the same storage.root can be\n // shared across separate Node processes running different actors.\n const lmdbLocation = config.storage.root\n const lmdbConfig = {\n clearStoreOnStart: false,\n location: lmdbLocation,\n schema: LmdbArchivistConfigSchema,\n }\n locator.register(\n NamedLmdbArchivist.factory({\n config: lmdbConfig,\n meterProvider,\n statusReporter,\n traceProvider,\n }),\n undefined,\n true,\n )\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { LmdbArchivist } from '@xyo-network/archivist-lmdb'\n\n/**\n * LMDB-backed archivist that derives its on-disk location, database name, and\n * store name from `config.location` / `config.dbName` / `config.storeName`,\n * and — critically — falls back to `config.payloadSdkConfig.collection` or\n * `config.name` when `config.storeName` is not explicitly set.\n *\n * This lets the manifest-driven archivist factories (see `public/Pending.json`,\n * `public/Chain.json`, `public/DeadLetterQueue.json`) share a single LMDB root\n * while each archivist gets its own per-store LMDB env — the same separation\n * that `payloadSdkConfig.collection` provides for mongo.\n */\nexport class NamedLmdbArchivist extends LmdbArchivist {\n override get dbName(): string {\n return (this.config as { dbName?: string }).dbName ?? 'xyo-chain'\n }\n\n override get location(): string {\n const cfgLocation = (this.config as { location?: string }).location\n const paramsLocation = (this.params as { location?: string } | undefined)?.location\n if (cfgLocation) return cfgLocation\n if (paramsLocation) return paramsLocation\n throw new Error('NamedLmdbArchivist: no location configured (set storage.root or pass location in factory params)')\n }\n\n override get storeName(): string {\n const cfg = this.config as {\n name?: string\n payloadSdkConfig?: { collection?: string }\n storeName?: string\n }\n const derived = cfg.storeName ?? cfg.payloadSdkConfig?.collection ?? cfg.name\n if (!derived) throw new Error('NamedLmdbArchivist: no storeName (or payloadSdkConfig.collection / name) configured')\n return derived\n }\n}\n","import { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { BaseConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async (\n context: BaseConfigContext,\n wallet: WalletInstance,\n) => {\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"3\",\n \"name\": \"DeadLetterQueue\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"3/1/1\",\n \"name\": \"RejectedBlocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"rejected_blocks\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"3/1/2\",\n \"name\": \"RejectedTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"rejected_transactions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport DeadLetterQueue from './DeadLetterQueue.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\nconst ChainNodeManifest = Chain as unknown as PackageManifestPayload\nconst DeadLetterQueueNodeManifest = DeadLetterQueue as unknown as PackageManifestPayload\nconst PendingNodeManifest = Pending as unknown as PackageManifestPayload\n\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...DeadLetterQueueNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol-driver-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseConfigContext, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nexport async function initTransferSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { ActorConfig } from '@xyo-network/xl1-sdk'\n\nimport { initFinalizationArchivistIfNeeded } from '../../../init/index.ts'\n\n/**\n * Resources for the `chain-store` backing — finalized/canonical chain archivists.\n *\n * - `read` mode exposes only `readonlyArchivist`.\n * - `write` mode additionally exposes `writableArchivist` and runs genesis\n * initialization (`initFinalizationArchivistIfNeeded`) — this is the only\n * path that can create the genesis block(s). The chain-store has exactly one\n * writer per deployment: the Finalizer. All other actors hold it as `read`\n * or not at all.\n */\nexport interface ChainStoreReadBacking {\n readonly mode: 'read'\n readonly readonlyArchivist: ArchivistInstance\n}\n\nexport interface ChainStoreWriteBacking {\n readonly mode: 'write'\n readonly readonlyArchivist: ArchivistInstance\n readonly writableArchivist: ArchivistInstance\n}\n\nexport type ChainStoreBacking = ChainStoreReadBacking | ChainStoreWriteBacking\n\nexport interface BuildChainStoreWriteOptions {\n /** Actor config — needed by genesis initialization (chain id, genesis reward address). */\n readonly actorConfig: ActorConfig\n readonly logger?: Logger\n /** Called when about to use insecure default genesis reward accounts; throws to abort. */\n readonly onInsecureGenesisConfirm?: () => Promise<void>\n /** Wallet of the actor that owns chain-store write — signs the genesis block if one is created. */\n readonly wallet: WalletInstance\n}\n\nexport async function buildChainStoreBacking(node: NodeInstance, mode: 'read'): Promise<ChainStoreReadBacking>\nexport async function buildChainStoreBacking(node: NodeInstance, mode: 'write', options: BuildChainStoreWriteOptions): Promise<ChainStoreWriteBacking>\nexport async function buildChainStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n options?: BuildChainStoreWriteOptions,\n): Promise<ChainStoreBacking> {\n const readonlyArchivist = asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ) as ArchivistInstance\n if (mode === 'read') {\n return { mode, readonlyArchivist }\n }\n if (!options) {\n throw new Error('buildChainStoreBacking(write) requires options { actorConfig, wallet }')\n }\n const writableArchivist = asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ) as ArchivistInstance\n await initFinalizationArchivistIfNeeded(writableArchivist, options.actorConfig, options.wallet, {\n logger: options.logger,\n onInsecureGenesisConfirm: options.onInsecureGenesisConfirm,\n })\n return {\n mode, readonlyArchivist, writableArchivist,\n }\n}\n","import type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\n\n/**\n * Resources for the `dlq-store` backing — rejected blocks and rejected\n * transactions archivists. Owned by the Finalizer in a multi-process\n * deployment (the actor that performs rejection).\n */\nexport interface DlqStoreBacking {\n readonly mode: 'read' | 'write'\n readonly rejectedBlocksArchivist: ArchivistInstance\n readonly rejectedTransactionsArchivist: ArchivistInstance\n}\n\nexport async function buildDlqStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n): Promise<DlqStoreBacking> {\n const rejectedBlocksArchivist = asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedBlocks'),\n { required: true },\n ) as ArchivistInstance\n const rejectedTransactionsArchivist = asArchivistInstance(\n await node.resolve('XYOChain:DeadLetterQueue:RejectedTransactions'),\n { required: true },\n ) as ArchivistInstance\n return {\n mode, rejectedBlocksArchivist, rejectedTransactionsArchivist,\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { initBalanceSummaryMap, initTransferSummaryMap } from '../../../init/index.ts'\n\n/**\n * Resources for the `indexer-store` backing — derived summary maps that\n * back account-balance and transfer-history queries.\n *\n * These maps are **lazy read-through caches**, not write-through indexes.\n * Whoever queries `SimpleAccountBalanceViewer.qualifiedAccountBalances()`\n * (or any other consumer of `balancesSummary()` / `transfersSummary()` in\n * `@xyo-network/xl1-protocol-sdk`) computes the missing summary on demand\n * and writes it back via `summaryMap.set(...)` inside\n * `balancesStepSummaryFromRange` / `transfersStepSummaryFromRange`.\n *\n * Today the cache is co-located with whichever process builds\n * `ProcessSharedResources` (single-process dev/test, or any actor process\n * that holds the indexer-store backing).\n *\n * TODO: Extract `IndexerActor` for horizontal-scale deployments\n * ----------------------------------------------------------------\n * When N stateless API instances run behind a load balancer, each\n * currently maintains its own cold cache and re-warms on first query.\n * A dedicated IndexerActor process would own the cache backing and serve\n * indexed queries; the stateless APIs would federate via\n * `JsonRpcAccountBalanceViewer` / `JsonRpcStakeViewer` pointed at it.\n *\n * Crucially there is **no separate writer to extract** — the summary maps\n * are populated entirely from the read path. The IndexerActor's role is\n * purely deployment shape: own the cache and answer queries.\n *\n * Implementation outline:\n * 1. New package `packages/cli/packages/indexer/` (mirror `chain-mempool`):\n * - `IndexerActor` extending `ActorV3` with `needs`:\n * `{ required: [AccountBalanceViewerMoniker, BlockViewerMoniker, FinalizationViewerMoniker] }`\n * - `command.ts` + `run.ts` CLI entry\n * 2. New `IndexerConfigZod` in `shared/config/actors/Indexer.ts`\n * + `IndexerConfigContext`.\n * 3. New `indexerLocatorFromConfig` that builds via `locatorFromActorNeeds`\n * with `availableBackings: [{ indexer-store, write }, { chain-store, read }]`\n * in single-process or `[{ indexer-store, write }, { network, read }]`\n * in split-deployment.\n * 4. Add `'indexer'` case to `locatorsFromConfig` dispatch.\n * 5. Possibly update `allActorsAreSelfSufficient` if the indexer can run\n * standalone (it can, when chain reads come via `network`).\n * 6. Add `pnpm run-indexer` script to root `package.json`.\n * 7. Wire `indexerCommand` into `runCLI` alongside the other actors.\n *\n * Operationally, stateless API actors then point `remote.rpc` at the\n * indexer's RPC endpoint (or an LB in front of one) so balance and\n * indexed-surface queries land on the warm cache.\n */\nexport interface IndexerStoreBacking {\n readonly balancesSummaryMap: Awaited<ReturnType<typeof initBalanceSummaryMap>>\n readonly mode: 'read' | 'write'\n readonly transfersSummaryMap: Awaited<ReturnType<typeof initTransferSummaryMap>>\n}\n\nexport async function buildIndexerStoreBacking(\n context: ActorConfigContext,\n mode: 'read' | 'write',\n): Promise<IndexerStoreBacking> {\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')\n return {\n balancesSummaryMap, mode, transfersSummaryMap,\n }\n}\n","import type { ArchivistInstance, NodeInstance } from '@xyo-network/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/sdk-js'\n\n/**\n * Resources for the `mempool-store` backing — pending transactions and pending\n * blocks archivists. Owned by the Mempool actor in a multi-process deployment.\n */\nexport interface MempoolStoreBacking {\n readonly mode: 'read' | 'write'\n readonly pendingBlocksArchivist: ArchivistInstance\n readonly pendingTransactionsArchivist: ArchivistInstance\n}\n\nexport async function buildMempoolStoreBacking(\n node: NodeInstance,\n mode: 'read' | 'write',\n): Promise<MempoolStoreBacking> {\n const pendingTransactionsArchivist = asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n ) as ArchivistInstance\n const pendingBlocksArchivist = asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n ) as ArchivistInstance\n return {\n mode, pendingBlocksArchivist, pendingTransactionsArchivist,\n }\n}\n","import {\n validateHydratedBlock, validateHydratedBlockState, validateHydratedTransactionState,\n} from '@xyo-network/chain-validation'\nimport type {\n HydratedBlockStateValidationFunction,\n HydratedBlockValidationFunction,\n HydratedTransactionStateValidationFunction,\n HydratedTransactionValidationFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockCumulativeBalanceValidatorFactory, validateTransaction } from '@xyo-network/xl1-sdk'\n\nconst cumulativeBalanceValidator = BlockCumulativeBalanceValidatorFactory()\n\nconst validateHydratedBlockStateWithCumulativeBalance: HydratedBlockStateValidationFunction = async (context, block) => {\n const [stateErrors, cumulativeErrors] = await Promise.all([\n validateHydratedBlockState(context, block),\n cumulativeBalanceValidator(context, block),\n ])\n return [...stateErrors, ...cumulativeErrors]\n}\n\n/**\n * Pure-compute validator functions injected into validation viewers. No\n * backing required — these are stateless functions that operate on the data\n * passed to them.\n */\nexport interface Validators {\n readonly blockProtocolValidator: HydratedBlockValidationFunction\n readonly blockStateValidator: HydratedBlockStateValidationFunction\n readonly transactionProtocolValidator: HydratedTransactionValidationFunction\n readonly transactionStateValidator: HydratedTransactionStateValidationFunction\n}\n\nexport function buildValidators(): Validators {\n return {\n blockProtocolValidator: validateHydratedBlock,\n blockStateValidator: validateHydratedBlockStateWithCumulativeBalance,\n transactionProtocolValidator: validateTransaction,\n transactionStateValidator: validateHydratedTransactionState,\n }\n}\n","import type { ActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { initActorWallet } from '../../../shared/index.ts'\nimport { initServerNode } from '../../init/index.ts'\nimport {\n buildChainStoreBacking,\n buildDlqStoreBacking,\n buildIndexerStoreBacking,\n buildMempoolStoreBacking,\n buildValidators,\n} from './backings/index.ts'\n\n/**\n * Live runtime resources that providers need to construct.\n * Built once per process; descriptors look these up via `XL1ResolutionContext.process`.\n *\n * This struct is the union of everything `localLocatorFromConfig` builds before\n * registering providers — extracted so descriptors can reference it without\n * each one having to re-derive the archivists / summary maps / wallet.\n *\n * The flat shape is preserved for back-compat with existing descriptor `build()`\n * functions. Internally, this is composed from per-backing builders in\n * `./backings/` — each backing can be loaded independently by an actor that\n * only owns or reads that backing. Genesis initialization lives inside\n * `buildChainStoreBacking('write')` so it only runs on the chain-store owner\n * (the Finalizer) — not every actor that incidentally builds this struct.\n */\nexport type ProcessSharedResources = Awaited<ReturnType<typeof buildProcessSharedResources>>\n\nexport interface BuildProcessSharedResourcesOptions {\n onInsecureGenesisConfirm?: () => Promise<void>\n}\n\nexport async function buildProcessSharedResources(\n context: ActorConfigContext,\n options?: BuildProcessSharedResourcesOptions,\n) {\n // Single-process developer path: every backing is owned/read by this process.\n // Per-backing builders extract slices from the shared node.\n const wallet = await initActorWallet(context)\n const serverNode = await initServerNode(context, wallet)\n const { node } = serverNode\n\n const [chainStore, mempoolStore, dlqStore, indexerStore] = await Promise.all([\n buildChainStoreBacking(node, 'write', {\n actorConfig: context.config,\n logger: context.logger,\n onInsecureGenesisConfirm: options?.onInsecureGenesisConfirm,\n wallet,\n }),\n buildMempoolStoreBacking(node, 'write'),\n buildDlqStoreBacking(node, 'write'),\n buildIndexerStoreBacking(context, 'write'),\n ])\n\n const validators = buildValidators()\n\n return {\n balancesSummaryMap: indexerStore.balancesSummaryMap,\n blockProtocolValidator: validators.blockProtocolValidator,\n blockStateValidator: validators.blockStateValidator,\n node,\n pendingBlocksArchivist: mempoolStore.pendingBlocksArchivist,\n pendingTransactionsArchivist: mempoolStore.pendingTransactionsArchivist,\n readonlyChainArchivist: chainStore.readonlyArchivist,\n rejectedBlocksArchivist: dlqStore.rejectedBlocksArchivist,\n rejectedTransactionsArchivist: dlqStore.rejectedTransactionsArchivist,\n transactionProtocolValidator: validators.transactionProtocolValidator,\n transactionStateValidator: validators.transactionStateValidator,\n transfersSummaryMap: indexerStore.transfersSummaryMap,\n wallet,\n writableChainArchivist: chainStore.writableArchivist,\n }\n}\n","/**\n * The capability resolver is owned by `@xyo-network/xl1-protocol-sdk`. This\n * file re-exports it so existing imports in this package keep working.\n *\n * New code may import these directly from `@xyo-network/xl1-protocol-sdk`.\n */\nexport type {\n RejectedDescriptor,\n ResolutionPlan, ResolveProvidersOptions,\n} from '@xyo-network/xl1-protocol-sdk'\nexport { MissingCapabilityError, resolveProviders } from '@xyo-network/xl1-protocol-sdk'\n","import type { AccountInstance } from '@xyo-network/sdk-js'\nimport { isAccountInstance } from '@xyo-network/sdk-js'\nimport type {\n BlockValidators,\n RemoteConfig, RpcTransport, XyoSignerRpcSchemas,\n} from '@xyo-network/xl1-sdk'\nimport {\n basicRemoteRunnerLocator as sdkBasicRemoteRunnerLocator,\n JsonRpcAccountBalanceViewer,\n JsonRpcXyoSigner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nfunction signerFactoryFromParam(signer: RpcTransport<XyoSignerRpcSchemas> | AccountInstance) {\n if (isAccountInstance(signer)) {\n return SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account: signer })\n }\n return JsonRpcXyoSigner.factory<JsonRpcXyoSigner>(JsonRpcXyoSigner.dependencies, { transport: signer })\n}\n\nexport function basicRemoteRunnerLocator(\n name: string,\n remoteConfig: RemoteConfig,\n signer: RpcTransport<XyoSignerRpcSchemas> | AccountInstance,\n dataLakeEndpoint?: string,\n validators?: BlockValidators,\n) {\n const transport = isAccountInstance(signer) ? undefined as never : signer\n return sdkBasicRemoteRunnerLocator(name, remoteConfig, transport, dataLakeEndpoint, {\n additionalProviders: [\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n ],\n signerFactory: signerFactoryFromParam(signer),\n skipGatewayRunner: true,\n validators,\n })\n}\n","import type { BlockValidators, RemoteConfig } from '@xyo-network/xl1-sdk'\nimport {\n basicRemoteViewerLocator as sdkBasicRemoteViewerLocator,\n JsonRpcAccountBalanceViewer,\n} from '@xyo-network/xl1-sdk'\n\nexport function basicRemoteViewerLocator(\n name: string,\n remoteConfig: RemoteConfig,\n dataLakeEndpoint?: string,\n validators?: BlockValidators,\n) {\n return sdkBasicRemoteViewerLocator(name, remoteConfig, dataLakeEndpoint, {\n additionalProviders: [\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n ],\n validators,\n })\n}\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport type { BackingNeed, XL1ResolutionContext } from '../capabilities/index.ts'\nimport { locatorFromActorNeeds } from '../capabilities/index.ts'\n\nconst STATELESS_BACKINGS: readonly BackingNeed[] = [\n { backing: 'network', mode: 'read' },\n]\n\n/**\n * Builds a network-only locator for a stateless API actor.\n *\n * The stateless API holds no local backing-store ownership — every required\n * moniker resolves through `networkTier3Descriptors` to a `JsonRpc*` provider\n * pointed at the owner-actors over the wire (Finalizer for chain state,\n * Mempool actor for mempool state, IndexerActor for indexed state, etc.).\n *\n * Crucially this path skips `buildProcessSharedResources` so the API process\n * never loads the local LMDB/MongoDB node — N copies of this actor can run\n * behind a load balancer for horizontal scaling of client/standalone-actor\n * traffic.\n *\n * The returned locator declares `availableBackings: [{ network, read }]` and\n * a stub `process` (no descriptor with these backings reads from `ctx.process`).\n */\nexport async function buildStatelessApiLocator(\n context: ActorConfigContext,\n needs: readonly ActorCapabilityNeeds[],\n): Promise<ProviderFactoryLocatorInstance> {\n const stubProcess = {} as XL1ResolutionContext['process']\n const result = await locatorFromActorNeeds(context, needs, {\n availableBackings: STATELESS_BACKINGS,\n process: stubProcess,\n })\n return result.locator\n}\n","import { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport async function telemetryContextFromConfig(\n config: Config,\n serviceName: string,\n serviceVersion: string,\n defaultScrapePort = 9464,\n) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n return await initTelemetry({\n attributes: {\n serviceName,\n serviceVersion,\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport type { Config, CreatableProviderContext } from '@xyo-network/xl1-sdk'\n\nimport { initStatusReporter } from '../../../shared/index.ts'\nimport { telemetryContextFromConfig } from './telemetryContextFromConfig.ts'\n\nexport async function contextFromConfigWithoutLocator(\n config: Config,\n logger: Logger,\n serviceName: string,\n serviceVersion: string,\n defaultScrapePort?: number,\n): Promise<Omit<CreatableProviderContext, 'locator'>> {\n const singletons = {}\n const caches = {}\n const telemetryConfig = await telemetryContextFromConfig(config, serviceName, serviceVersion, defaultScrapePort)\n const statusReporter = initStatusReporter({ logger })\n return {\n ...telemetryConfig,\n config,\n singletons,\n caches,\n logger,\n statusReporter,\n }\n}\n","import type { ActorConfigContext } from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport { RejectedTransactionsArchivistProviderMoniker } from '../../../shared/index.ts'\nimport { locatorFromActorNeeds } from '../capabilities/index.ts'\n\nconst XyoConnectionMoniker = 'XyoConnection'\n\n/**\n * Synthetic \"needs\" set that mirrors the registrations historically performed\n * by `localLocatorFromConfig`. Used by the legacy entry point so callers that\n * still ask for a \"kitchen-sink local locator\" get the same set of providers\n * registered as before.\n *\n * As actors fully migrate to declaring their own needs (see each\n * `ActorV3.needs`), this list becomes the upper bound — the planner will\n * never wire up more than what's listed here.\n */\nconst LOCAL_LEGACY_NEEDS: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n DeadLetterQueueRunnerMoniker,\n DeadLetterQueueViewerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n RejectedTransactionsArchivistProviderMoniker,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n}\n\n/**\n * Builds a locator with all Tier-1 in-process providers registered.\n *\n * As of the capability-registry refactor this is a thin shim over\n * `locatorFromActorNeeds`. The first parameter is preserved for\n * backward-compat; `validateDepsOnRegister` is forwarded to the underlying\n * locator. `onInsecureGenesisConfirm` is forwarded to\n * `buildProcessSharedResources`.\n */\nexport async function localLocatorFromConfig(\n context: ActorConfigContext,\n validateDepsOnRegister = false,\n onInsecureGenesisConfirm?: () => Promise<void>,\n) {\n const result = await locatorFromActorNeeds(context, [LOCAL_LEGACY_NEEDS], {\n onInsecureGenesisConfirm,\n validateDepsOnRegister,\n })\n return result.locator\n}\n","import { deepMerge } from '@xylabs/sdk-js'\nimport {\n type ActorConfig,\n type CachingContext,\n type Config, type ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n ApiConfigZod, BridgeConfigZod, FinalizerConfigZod, MempoolConfigZod, ProducerConfigZod, RewardRedemptionConfigZod,\n} from '../../../shared/index.ts'\nimport {\n apiLocatorFromConfig, bridgeLocatorFromConfig, finalizerLocatorFromConfig,\n mempoolLocatorFromConfig, producerLocatorFromConfig, rewardRedemptionLocatorFromConfig,\n} from './actors/index.ts'\nimport { rootLocatorFromConfig } from './rootLocatorFromConfig.ts'\nimport { canUseSharedLocator, sharedLocatorFromConfig } from './sharedLocatorFromConfig.ts'\n\n/**\n * Returns true iff every configured actor is a self-sufficient build that\n * doesn't consume the root locator. Today only stateless API qualifies — its\n * `apiLocatorFromConfig` branch builds its own resolver-driven locator and\n * ignores the parent. When this is true for all actors, we can skip\n * `rootLocatorFromConfig` entirely (which would otherwise load the local\n * LMDB/Mongo node when `remote.rpc` is unset).\n */\nfunction allActorsAreSelfSufficient(actors: readonly ActorConfig[], config: Omit<Config, 'actors'>): boolean {\n if (actors.length === 0) return false\n return actors.every((actor) => {\n if (actor.name !== 'api') return false\n const merged = ApiConfigZod.parse(deepMerge(config, actor))\n return merged.stateless === true\n })\n}\n\nexport async function locatorsFromConfig(\n context: CachingContext,\n { actors, ...config }: Config,\n onInsecureGenesisConfirm?: () => Promise<void>,\n): Promise<Record<string, ProviderFactoryLocatorInstance>> {\n const result: Record<string, ProviderFactoryLocatorInstance> = {}\n\n // Single shared-locator path (Option B): one locator per process driven by\n // the union of actors' declared `needs`. Eliminates the cross-locator\n // duplicate registrations that appear under the legacy `_root` + per-actor\n // child-locator architecture. Currently routed only for the canary actor\n // combo (api+mempool+finalizer subset, in-memory, non-stateless).\n if (canUseSharedLocator(actors, config)) {\n const { perActor } = await sharedLocatorFromConfig(context, actors, config, { onInsecureGenesisConfirm })\n return perActor\n }\n\n // Skip root construction when every actor is self-sufficient (e.g. all\n // stateless API instances). Saves the local-node load when `remote.rpc`\n // is unset, and is a no-op for self-sufficient locators that ignore the\n // parent anyway.\n const skipRoot = allActorsAreSelfSufficient(actors, config)\n if (!skipRoot) {\n const rootContext = { ...context, config: { ...config, name: '_root' } }\n result._root = await rootLocatorFromConfig(rootContext, false, onInsecureGenesisConfirm)\n }\n\n for (const actorConfig of actors) {\n switch (actorConfig.name) {\n case 'producer': {\n result[actorConfig.name] = await producerLocatorFromConfig(\n { ...context, config: ProducerConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'api': {\n result[actorConfig.name] = await apiLocatorFromConfig(\n { ...context, config: ApiConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n\n break\n }\n case 'mempool': {\n result[actorConfig.name] = await mempoolLocatorFromConfig(\n { ...context, config: MempoolConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'finalizer': {\n result[actorConfig.name] = await finalizerLocatorFromConfig(\n { ...context, config: FinalizerConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n break\n }\n case 'bridge': {\n result[actorConfig.name] = await bridgeLocatorFromConfig(\n { ...context, config: BridgeConfigZod.parse(deepMerge(config, actorConfig)) },\n result._root,\n )\n\n break\n }\n case 'rewardRedemption': {\n result[actorConfig.name] = await rewardRedemptionLocatorFromConfig(\n {\n ...context,\n config: RewardRedemptionConfigZod.parse(deepMerge(config, actorConfig)),\n },\n result._root,\n )\n break\n }\n // No default\n }\n }\n return result\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGateway,\n SimpleXyoRunner,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ApiConfigContext } from '../../../../neutral/index.ts'\nimport type { ActorCapabilityNeeds } from '../../../../shared/actor/v3/index.ts'\nimport { buildStatelessApiLocator } from '../buildStatelessApiLocator.ts'\n\n/**\n * Mirrors `ApiActor.needs` so this orchestration-side builder can stand up\n * the right set of providers without importing the actor package (which would\n * create a circular dep). If `ApiActor.needs` changes, update this list too.\n */\nconst API_NEEDS: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n}\n\nexport async function apiLocatorFromConfig(\n context: ApiConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promisable<ProviderFactoryLocatorInstance>> {\n if (context.config.stateless) {\n // Stateless mode: the API holds no local backing-store ownership. Build a\n // network-only locator via the resolver so every needed moniker maps to a\n // `JsonRpc*` provider pointed at upstream owner-actors. The parent locator\n // is intentionally ignored — N stateless API instances can run independently\n // behind a load balancer.\n const locator = await buildStatelessApiLocator(context, [API_NEEDS])\n locator.registerMany([\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),\n ])\n locator.freeze()\n return locator\n }\n\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n locator.registerMany([\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance, RestDataLakeRunnerParams } from '@xyo-network/xl1-sdk'\nimport {\n JsonRpcAccountBalanceViewer,\n JsonRpcBlockViewer,\n JsonRpcFinalizationViewer,\n JsonRpcMempoolRunner,\n JsonRpcMempoolViewer,\n JsonRpcXyoRunner,\n JsonRpcXyoViewer,\n ProviderFactoryLocator,\n RestDataLakeRunner,\n RestDataLakeViewer,\n SimpleStakeEventsViewer,\n SimpleXyoConnectionRunner,\n SimpleXyoGatewayRunner,\n SimpleXyoRunner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport { type BridgeConfigContext, initActorWallet } from '../../../../neutral/index.ts'\n\nexport async function bridgeLocatorFromConfig(\n context: BridgeConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promise<Promisable<ProviderFactoryLocatorInstance>>> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n const { config } = context\n\n const { dataLake } = config\n const signerAccount = await initActorWallet(context)\n\n if (config.remote.rpc) {\n locator.registerMany([\n JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, {}),\n JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, {}),\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(\n JsonRpcFinalizationViewer.dependencies,\n {},\n ),\n JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, {}),\n JsonRpcXyoRunner.factory<JsonRpcXyoRunner>(JsonRpcXyoRunner.dependencies, {}),\n JsonRpcXyoViewer.factory<JsonRpcXyoViewer>(JsonRpcXyoViewer.dependencies, {}),\n ])\n }\n if (isDefined(dataLake)) {\n const { driver } = dataLake\n switch (driver) {\n case 'rest': {\n const { url: endpoint } = dataLake\n locator.registerMany([\n RestDataLakeRunner.factory<RestDataLakeRunner<RestDataLakeRunnerParams>>(RestDataLakeRunner.dependencies, { endpoint }),\n RestDataLakeViewer.factory<RestDataLakeViewer>(RestDataLakeViewer.dependencies, { endpoint }),\n ])\n break\n }\n default: {\n throw new Error(`Unsupported data lake protocol: ${driver}`)\n }\n }\n }\n\n locator.registerMany([\n SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(SimpleStakeEventsViewer.dependencies, { positions: [] }),\n SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account: signerAccount }),\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nexport function finalizerLocatorFromConfig(\n context: ActorConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promisable<ProviderFactoryLocatorInstance> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n locator.registerMany([\n ])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { MempoolConfigContext } from '../../../../neutral/index.ts'\n\nexport function mempoolLocatorFromConfig(\n context: MempoolConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promisable<ProviderFactoryLocatorInstance> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n locator.registerMany([\n ])\n locator.freeze()\n return locator\n}\n","import { asAddress } from '@xylabs/sdk-js'\nimport { SimpleBlockRunner } from '@xyo-network/chain-services'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'\n\nimport type { ProducerConfigContext } from '../../../../neutral/index.ts'\nimport { initActorWallet } from '../../../../neutral/index.ts'\nimport {\n RejectedTransactionsArchivistProviderMoniker,\n type SimpleRejectedTransactionsArchivistProvider,\n} from '../../../../shared/index.ts'\n\nexport async function producerLocatorFromConfig(\n context: ProducerConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<ProviderFactoryLocatorInstance> {\n const { logger, config } = context\n const account = await initActorWallet(context)\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n const rewardAddress = asAddress(config.rewardAddress ?? account.address, true)\n logger?.info(`Using reward address ${rewardAddress}`)\n if (rewardAddress === account.address) {\n logger?.warn(`Using producer account address as reward address: ${account.address}`)\n }\n\n // Resolve the shared rejected-transactions archivist from the root locator so\n // SimpleBlockRunner's legacy fallback path (when DLQRunner is unavailable)\n // writes to the same backing store as the DLQ runner/viewer instead of\n // allocating an orphan MemoryArchivist with a random account.\n const rejectedTransactionsProvider = await parent?.tryGetInstance<SimpleRejectedTransactionsArchivistProvider>(\n RejectedTransactionsArchivistProviderMoniker,\n )\n const rejectedTransactionsArchivist = rejectedTransactionsProvider?.archivist\n\n locator.registerMany([\n SimpleBlockRunner.factory<SimpleBlockRunner>(\n SimpleBlockRunner.dependencies,\n {\n account,\n rewardAddress,\n rejectedTransactionsArchivist,\n // ProducerConfigZod has always exposed `heartbeatInterval`, but until now\n // it was not wired anywhere. Threading it into the BlockRunner lets tests\n // (and operators who want denser heartbeat blocks) override the 1-h default.\n heartbeatInterval: config.heartbeatInterval,\n },\n )])\n locator.freeze()\n return locator\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport {\n JsonRpcAccountBalanceViewer,\n JsonRpcBlockViewer,\n JsonRpcFinalizationViewer,\n JsonRpcMempoolRunner,\n JsonRpcMempoolViewer,\n JsonRpcXyoRunner,\n JsonRpcXyoViewer,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGatewayRunner,\n SimpleXyoRunner,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport { initActorWallet, type RewardRedemptionConfigContext } from '../../../../neutral/index.ts'\n\nexport async function rewardRedemptionLocatorFromConfig(\n context: RewardRedemptionConfigContext,\n parent?: ProviderFactoryLocatorInstance,\n): Promise<Promisable<ProviderFactoryLocatorInstance>> {\n const locator = new ProviderFactoryLocator({ ...context, locator: parent })\n\n const { config } = context\n\n const account = await initActorWallet(context)\n\n if (config.remote.rpc) {\n locator.registerMany([\n JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, {}),\n JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, {}),\n JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(\n JsonRpcAccountBalanceViewer.dependencies,\n {},\n ),\n JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(\n JsonRpcFinalizationViewer.dependencies,\n {},\n ),\n JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, {}),\n JsonRpcXyoRunner.factory<JsonRpcXyoRunner>(JsonRpcXyoRunner.dependencies, {}),\n JsonRpcXyoViewer.factory<JsonRpcXyoViewer>(JsonRpcXyoViewer.dependencies, {}),\n ])\n }\n\n locator.registerMany([\n SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }),\n SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),\n ])\n locator.freeze()\n return locator\n}\n","import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport { commonLocatorFromConfig, remoteLocatorFromConfig } from '@xyo-network/xl1-sdk'\n\nimport { initEvmProvidersIfAvailable } from '../../init/index.ts'\nimport { localLocatorFromConfig } from './localLocatorFromConfig.ts'\n\nexport async function rootLocatorFromConfig(\n context: ActorConfigContext,\n validateDepsOnRegister = false,\n onInsecureGenesisConfirm?: () => Promise<void>,\n): Promise<ProviderFactoryLocatorInstance> {\n const { config } = context\n let locator = await commonLocatorFromConfig(context, validateDepsOnRegister)\n\n const newLocator = await (config.remote.rpc\n ? remoteLocatorFromConfig(locator.context, validateDepsOnRegister)\n : localLocatorFromConfig(\n { ...locator.context, config: { ...locator.context.config, ...context.config } },\n validateDepsOnRegister,\n onInsecureGenesisConfirm,\n ))\n locator = newLocator\n locator = await initEvmProvidersIfAvailable(locator)\n locator.freeze()\n return locator\n}\n","import { deepMerge } from '@xylabs/sdk-js'\nimport type {\n ActorConfig,\n ActorConfigContext,\n CachingContext,\n Config,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n commonLocatorFromConfig,\n DeadLetterQueueRunnerMoniker,\n FinalizationRunnerMoniker,\n FinalizationViewerMoniker,\n MempoolRunnerMoniker,\n MempoolViewerMoniker,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGateway,\n SimpleXyoRunner,\n TransactionValidationViewerMoniker,\n TransactionViewerMoniker,\n WindowedBlockViewerMoniker,\n XyoConnectionMoniker,\n XyoGatewayMoniker,\n XyoRunnerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ActorCapabilityNeeds } from '../../../shared/actor/v3/index.ts'\nimport {\n ApiConfigZod, FinalizerConfigZod, MempoolConfigZod,\n} from '../../../shared/index.ts'\nimport { initEvmProvidersIfAvailable } from '../../init/index.ts'\nimport type { ProviderDescriptor, XL1ResolutionContext } from '../capabilities/index.ts'\nimport { locatorFromActorNeeds } from '../capabilities/index.ts'\n\n/**\n * Orchestration-side mirrors of each in-memory actor's `static needs` (the\n * monikers the actor resolves at runtime). Kept here — rather than imported\n * from the actor packages — to avoid an orchestration ↔ actor circular dep.\n *\n * **Keep these in sync with the corresponding `*Actor.needs` declaration.**\n *\n * Each mirror is a SUPERSET of the actor's runtime `needs`: it also includes\n * any monikers that the actor's resolved providers transitively depend on\n * but the actor doesn't resolve directly. For example, the API does not\n * itself resolve `XyoRunner` or `XyoGateway`, but the in-memory\n * `SimpleXyoConnectionRunner` instance built when API resolves\n * `XyoConnection` requires both at construction time. The descriptor planner\n * needs every transitively-required moniker in `wanted` to pick a winning\n * descriptor, so we list them here.\n */\nconst apiNeeds: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoGatewayMoniker,\n XyoRunnerMoniker,\n XyoViewerMoniker,\n ],\n}\n\nconst mempoolNeeds: ActorCapabilityNeeds = {\n required: [\n MempoolRunnerMoniker,\n // SimpleMempoolRunner.dependencies includes TransactionValidationViewer\n // — not resolved by the actor directly but pulled in at construction.\n TransactionValidationViewerMoniker,\n // SimpleMempoolViewer.dependencies includes WindowedBlockViewer — the\n // mempool viewer is built when api/finalizer resolve MempoolViewer.\n WindowedBlockViewerMoniker,\n ],\n}\n\nconst finalizerNeeds: ActorCapabilityNeeds = {\n required: [\n BlockValidationViewerMoniker,\n BlockViewerMoniker,\n FinalizationRunnerMoniker,\n MempoolViewerMoniker,\n ],\n optional: [DeadLetterQueueRunnerMoniker],\n}\n\nconst ACTOR_MIRRORS: Record<string, ActorCapabilityNeeds> = {\n api: apiNeeds,\n mempool: mempoolNeeds,\n finalizer: finalizerNeeds,\n}\n\n/**\n * Per-actor extra descriptors registered in addition to `localTier1Descriptors`\n * /`networkTier3Descriptors`. Used for in-memory implementations that beat\n * the default tier-1 viewer for a moniker the actor needs in runner shape.\n *\n * Today only the API needs this (`SimpleXyoConnectionRunner` shadows the\n * tier-1 `SimpleXyoConnectionViewer` for the `XyoConnection` moniker). Higher\n * `priority` wins when two descriptors satisfy the same moniker.\n */\nconst apiExtraDescriptors: readonly ProviderDescriptor<XL1ResolutionContext>[] = [\n {\n id: 'SimpleXyoRunner',\n satisfies: [XyoRunnerMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: () => true,\n build: () => SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),\n },\n {\n id: 'SimpleXyoConnectionRunner',\n satisfies: [XyoConnectionMoniker],\n // Same tier as `SimpleXyoConnectionViewer`; higher priority wins the\n // `XyoConnection` moniker in any actor mix that includes the API.\n tier: 1,\n priority: 100,\n backings: [],\n surface: 'node',\n preconditions: () => true,\n build: () => SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),\n },\n {\n id: 'SimpleXyoGateway',\n satisfies: [XyoGatewayMoniker],\n tier: 1,\n backings: [],\n surface: 'node',\n preconditions: () => true,\n build: () => SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),\n },\n]\n\nconst ACTOR_EXTRA_DESCRIPTORS: Record<string, readonly ProviderDescriptor<XL1ResolutionContext>[]> = { api: apiExtraDescriptors }\n\n/**\n * Per-actor Zod schema used to derive an actor-specific config from the\n * global config + the actor's per-actor config block.\n */\nconst ACTOR_CONFIG_PARSERS: Record<string, { parse: (value: unknown) => ActorConfig }> = {\n api: ApiConfigZod,\n mempool: MempoolConfigZod,\n finalizer: FinalizerConfigZod,\n}\n\n/**\n * Names of the actors this builder supports. Outside this set, `locatorsFromConfig`\n * routes to the legacy per-actor child-locator path.\n */\nexport const SHARED_LOCATOR_SUPPORTED_ACTORS: readonly string[] = ['api', 'mempool', 'finalizer']\n\n/**\n * Returns true iff the configured actors are exactly the full canary trio\n * (`api`, `mempool`, `finalizer`) running in one process AND the run is\n * in-memory (no `remote.rpc`) AND no actor opts into stateless mode.\n *\n * The shared path was designed for the canary case where all three actors\n * co-locate and share a single registry, so each provider is instantiated\n * exactly once. Any subset has a transitive-dependency problem the union\n * of `ACTOR_MIRRORS` cannot satisfy:\n *\n * - Solo `api` — `SimpleXyoConnectionRunner` (chosen for `XyoConnection`)\n * requires a local `MempoolRunner`, only registered when `mempool` is in\n * the union. Crash:\n * \"No provider instance for the supplied config moniker [MempoolRunner]\"\n * - Solo `mempool` — `SimpleMempoolRunner` requires a local\n * `BlockValidationViewer`, only registered when `finalizer` is in the\n * union. Crash:\n * \"No provider instance for the supplied config moniker [BlockValidationViewer]\"\n * - Solo `finalizer` and `[api, finalizer]` etc. — same class of mismatch.\n *\n * Multi-process deployments (`xl1 start api` in one proc, `xl1 start mempool`\n * in another) fall under \"subset\" and must therefore route to the legacy\n * `_root` path. `localLocatorFromConfig` registers `LOCAL_LEGACY_NEEDS`\n * (every canary moniker) on `_root`, which the per-actor child locators\n * inherit — so each subset finds its transitive deps via `_root`.\n */\nexport function canUseSharedLocator(actors: readonly ActorConfig[], config: Omit<Config, 'actors'>): boolean {\n if (actors.length === 0) return false\n if (config.remote?.rpc) return false\n // Shared path is only safe when the full canary trio is co-located.\n // Subsets crash on transitive dep lookups — see the doc block above.\n const names = new Set(actors.map(a => a.name))\n const fullCanary = SHARED_LOCATOR_SUPPORTED_ACTORS.every(name => names.has(name))\n if (!fullCanary) return false\n return actors.every((actor) => {\n if (!SHARED_LOCATOR_SUPPORTED_ACTORS.includes(actor.name)) return false\n if (actor.name === 'api') {\n const merged = ApiConfigZod.parse(deepMerge(config, actor))\n if (merged.stateless === true) return false\n }\n return true\n })\n}\n\nexport interface SharedLocatorFromConfigResult {\n /**\n * Per-actor view locators. Each is a thin wrapper that shares `shared`'s\n * registry by reference (`registry === shared.registry`) but has its own\n * `context` carrying the actor-specific config block. Hand these to the\n * actor constructors — `getApiActor`, `getMempoolActor`, `getFinalizerActor`\n * pull their actor-specific config from `locator.context.config`.\n */\n readonly perActor: Record<string, ProviderFactoryLocatorInstance>\n /**\n * The single underlying locator that owns the shared registry. Tests and\n * the dump tool can introspect this directly to see the unique factory set.\n */\n readonly shared: ProviderFactoryLocatorInstance\n}\n\nexport interface SharedLocatorFromConfigOptions {\n readonly onInsecureGenesisConfirm?: () => Promise<void>\n}\n\n/**\n * Builds a single shared locator driven by the union of the configured actors'\n * declared `needs`, plus the EVM/memory contract+stake providers from\n * `initEvmProvidersIfAvailable`. Each actor receives a thin view locator that\n * shares the registry by reference, so every provider exists exactly once\n * per process.\n *\n * Replaces the legacy `_root` + per-actor child-locator layering for the\n * canary actor combos (api+mempool+finalizer subset). Eliminates Symptoms 2\n * and 3 from the double-loading findings: no cross-locator duplicates, no\n * empty actor-locator shells.\n *\n * Stateless API and remote-RPC paths are NOT supported here — the caller\n * (`locatorsFromConfig`) routes those to the existing builders.\n */\nexport async function sharedLocatorFromConfig(\n context: CachingContext,\n actors: readonly ActorConfig[],\n config: Omit<Config, 'actors'>,\n options: SharedLocatorFromConfigOptions = {},\n): Promise<SharedLocatorFromConfigResult> {\n const unionNeeds: ActorCapabilityNeeds = {\n required: dedupe(actors.flatMap(a => ACTOR_MIRRORS[a.name]?.required ?? [])),\n optional: dedupe(actors.flatMap(a => ACTOR_MIRRORS[a.name]?.optional ?? [])),\n }\n const extraDescriptors = actors.flatMap(a => ACTOR_EXTRA_DESCRIPTORS[a.name] ?? [])\n\n // Build a `commonLocatorFromConfig` parent first so the shared locator can\n // resolve providers like `NetworkStakeViewer`, `StepViewer`, etc. that are\n // declared as dependencies of `SimpleXyoViewer` but are not in any canary\n // actor's `needs` mirror. The legacy `rootLocatorFromConfig` relies on the\n // same parent chain (via `context.locator` carrying through\n // `ProviderFactoryLocator`'s constructor) — the shared path was missing it.\n const commonContext: ActorConfigContext = { ...context, config: { ...config, name: '_shared_common' } as ActorConfigContext['config'] }\n const commonLocator = await commonLocatorFromConfig(commonContext)\n\n // The shared locator carries the global config (no per-actor overrides) and\n // chains its parent to the common locator via `context.locator` — the\n // `ProviderFactoryLocator` constructor reads that into `_parent`, so\n // unresolved monikers fall through.\n const sharedContext: ActorConfigContext = {\n ...commonLocator.context,\n config: { ...config, name: '_shared' } as ActorConfigContext['config'],\n }\n\n const result = await locatorFromActorNeeds(sharedContext, [unionNeeds], {\n extraDescriptors,\n onInsecureGenesisConfirm: options.onInsecureGenesisConfirm,\n validateDepsOnRegister: false,\n })\n\n // initEvmProvidersIfAvailable adds the EVM/memory contract+stake+timesync\n // providers that aren't part of the descriptor system today. Equivalent to\n // the post-step that runs at the end of the legacy `rootLocatorFromConfig`.\n const sharedWithEvm = await initEvmProvidersIfAvailable(result.locator)\n sharedWithEvm.freeze()\n\n const perActor: Record<string, ProviderFactoryLocatorInstance> = {}\n for (const actor of actors) {\n const parser = ACTOR_CONFIG_PARSERS[actor.name]\n const actorConfig = parser ? parser.parse(deepMerge(config, actor)) : actor\n // Spread from `sharedWithEvm.context` so the view locator inherits\n // `locator: sharedWithEvm` via the context — `ProviderFactoryLocator`'s\n // constructor reads that into `_parent`, giving views a fallback chain\n // (view → shared → common) for monikers registered only on parents\n // (e.g. `NetworkStakeViewer` on the common locator).\n const actorContext: ActorConfigContext = {\n ...sharedWithEvm.context,\n config: actorConfig as ActorConfigContext['config'],\n }\n // Pass `sharedWithEvm.registry` by reference. The view locator shares\n // registry storage with the shared locator — every actor sees the same\n // factory set with no duplication.\n const view = new ProviderFactoryLocator(actorContext, sharedWithEvm.registry)\n view.freeze()\n perActor[actor.name] = view\n }\n\n return { shared: sharedWithEvm, perActor }\n}\n\nfunction dedupe<T>(items: readonly T[]): readonly T[] {\n return [...new Set(items)]\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport { ConfigZod } from '@xyo-network/xl1-sdk'\nimport { cosmiconfig } from 'cosmiconfig'\n\n/**\n * The name of the configuration file to search for.\n */\nconst configName = 'xyo'\n\n/**\n * The name of the section within the configuration file to parse.\n */\nconst configSection = 'xl1' // Default section in the config file\n\nexport class ConfigFileNotFoundError extends Error {\n constructor(configPath: string) {\n super(`Config file not found: ${configPath}`)\n this.name = 'ConfigFileNotFoundError'\n }\n}\n\nconst isMissingFileError = (error: unknown): error is NodeJS.ErrnoException => {\n return error instanceof Error && 'code' in error && error.code === 'ENOENT'\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null\n}\n\n/**\n * Attempts to parse the configuration from a file using cosmiconfig.\n * @param options - Optional config loading options.\n * @param options.configPath - Explicit path to a config file to load instead of searching.\n * @param options.searchPlaces - Custom search places for cosmiconfig.\n * @returns The parsed configuration object if found and valid, otherwise undefined.\n */\nexport async function tryParseConfig(options?: { configPath?: string; searchPlaces?: string[] }) {\n const { configPath, searchPlaces } = options ?? {}\n const explorer = cosmiconfig(\n configName,\n {\n cache: true,\n // loaders: { '.ts': TypeScriptLoader() },\n searchPlaces,\n },\n )\n let result: unknown\n if (isDefined(configPath)) {\n try {\n result = (await explorer.load(configPath))?.config\n } catch (error) {\n if (isMissingFileError(error)) {\n throw new ConfigFileNotFoundError(configPath)\n }\n throw error\n }\n if (!isDefined(result) || isNull(result)) {\n throw new ConfigFileNotFoundError(configPath)\n }\n } else {\n result = (await explorer.search())?.config\n }\n if (isRecord(result)) {\n const section = result[configSection]\n if (isRecord(section)) {\n const parsed = ConfigZod.loose().parse(section)\n return typeof section.mnemonic === 'string' ? { ...parsed, mnemonic: section.mnemonic } : parsed\n }\n }\n return ConfigZod.parse({})\n}\n","export * from '../shared/index.ts'\nexport * from './config/index.ts'\nexport * from './init/index.ts'\nexport * from './manifest/index.ts'\nexport * from '@xyo-network/chain-orchestration-evm'\nexport * from '@xyo-network/chain-orchestration-express'\nexport * from '@xyo-network/chain-orchestration-storage'\n"],"mappings":"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","names":["AbstractCreatable","assertEx","delay","IdLogger","Semaphore","z","noopCounter","add","noopUpDownCounter","noopGauge","record","noopHistogram","CreatableNameZod","z","custom","val","length","StatusReporterInstanceZod","AccountInstanceZod","ActorParamsV3Zod","object","account","locator","unknown","name","statusReporter","optional","createDeferred","resolve","reject","promise","Promise","res","rej","ActorV3","AbstractCreatable","_intervals","Map","_semaphores","_timeouts","_logger","_readyDeferred","_readyError","_readyState","logger","IdLogger","assertEx","context","readyError","readyState","params","paramsHandler","baseParams","registerTimer","timerName","callback","dueTimeMs","periodMs","status","warn","running","set","Semaphore","timeoutId","setTimeout","intervalId","setInterval","semaphore","get","has","isLocked","acquire","then","release","startTime","Date","now","duration","catch","error","err","Error","String","message","stack","finally","debug","runReadyHandler","readyHandler","stopHandler","all","values","map","delay","clear","timeoutRef","entries","clearTimeout","intervalRef","clearInterval","whenReady","timeoutMs","undefined","timer","timeout","_","race","counter","description","meter","createCounter","gauge","createGauge","histogram","createHistogram","upDownCounter","createUpDownCounter","Actor","buildTelemetryConfig","config","serviceName","serviceVersion","defaultMetricsScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","globalRegistry","z","ApiConfigZod","extend","object","initRewardsCache","union","number","string","boolean","transform","v","default","register","description","title","type","stateless","legacyMixedRpc","shape","isApiConfig","asApiConfig","toApiConfig","ApiConfigContext","config","isApiConfigContext","asApiConfigContext","toApiConfigContext","AddressZod","HexZod","toAddress","toHex","zodAsFactory","zodIsFactory","zodToFactory","AttoXL1ConvertFactor","BaseConfigContextZod","HostActorConfigZod","XL1","globalRegistry","z","DEFAULT_FIXED_FEE","xl1","DEFAULT_VARIABLE_FEE_BASIS_POINTS","DEFAULT_HARDHAT_BRIDGE_CONTRACT","DEFAULT_HARDHAT_CHAIN_ID","DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY","DEFAULT_HARDHAT_TOKEN_CONTRACT","DEFAULT_MAX_BRIDGE_AMOUNT","DEFAULT_MIN_BRIDGE_AMOUNT","DEFAULT_SCANNER_INTERVAL_MS","BasisPointsZod","coerce","number","int","nonnegative","max","BridgeConfigZod","extend","escrowAddress","optional","register","description","title","type","feesAddress","feeFixed","default","feeRateBasisPoints","maxBridgeAmount","minBridgeAmount","redisHost","string","redisPort","positive","scannerIntervalMs","remoteBridgeContractAddress","remoteChainId","remoteConfirmationDepth","union","literal","remoteTokenAddress","remoteChainWalletPrivateKey","xl1ChainId","xl1TokenAddress","BridgeSettingsZod","pick","required","isBridgeConfig","asBridgeConfig","toBridgeConfig","BridgeConfigContext","config","isBridgeConfigContext","asBridgeConfigContext","toBridgeConfigContext","AddressZod","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","DEFAULT_MIN_CANDIDATES","HostActorConfigZod","z","FinalizerConfigZod","extend","allowedProducers","array","optional","finalizationCheckInterval","coerce","number","default","minCandidates","int","min","isFinalizerConfig","asFinalizerConfig","toFinalizerConfig","FinalizerConfigContext","config","isFinalizerConfigContext","asFinalizerConfigContext","toFinalizerConfigContext","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","globalRegistry","z","DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL","DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL","DEFAULT_MEMPOOL_DEMOTION_THRESHOLD","DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS","MempoolConfigZod","extend","enabled","union","string","boolean","default","transform","val","ctx","normalized","toLowerCase","trim","includes","addIssue","code","expected","message","NEVER","register","description","title","type","blockPruneInterval","coerce","number","demotionThreshold","int","positive","maxPendingTransactions","nonnegative","transactionPruneInterval","isMempoolConfig","asMempoolConfig","toMempoolConfig","MempoolConfigContext","config","isMempoolConfigContext","asMempoolConfigContext","toMempoolConfigContext","AddressZod","zodAsFactory","zodIsFactory","zodToFactory","ActorConfigZod","BaseConfigContextZod","globalRegistry","z","DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL","ProducerConfigZod","extend","object","allowlist","array","optional","register","description","title","type","blockProductionCheckInterval","coerce","number","default","disableIntentRedeclaration","boolean","heartbeatInterval","minStake","rewardAddress","string","shape","isProducerConfig","asProducerConfig","toProducerConfig","ProducerConfigContext","config","isProducerConfigContext","asProducerConfigContext","toProducerConfigContext","zodAsFactory","zodIsFactory","zodToFactory","BaseConfigContextZod","HostActorConfigZod","RewardRedemptionConfigZod","extend","isRewardRedemptionConfig","asRewardRedemptionConfig","toRewardRedemptionConfig","RewardRedemptionConfigContext","config","isRewardRedemptionConfigContext","asRewardRedemptionConfigContext","toRewardRedemptionConfigContext","deepMerge","mergeConfig","actors","baseConfig","map","actor","deepMerge","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","assertEx","isString","HDWallet","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","HDNodeWallet","Mnemonic","DEFAULT_ACTOR_ACCOUNT_PATH","api","bridge","finalizer","mempool","producer","rewardRedemption","BUILT_IN_DEV_MNEMONIC","INSECURE_GENESIS_REWARD_MNEMONIC","GENESIS_REWARD_AMOUNT","ATTO_XL1_PER_XL1","ROOT_WALLET_RUNTIME_ID","SHARED_ACCOUNT_REPORT_COUNT","ACTOR_LABELS","activeWalletReport","getAccountLabel","actorName","clearResolvedWalletReport","undefined","resolveActorAccountPath","actorConfig","accountPath","isAbsoluteAccountPath","startsWith","expandAccountPath","basePath","DEFAULT_WALLET_PATH","deriveWalletAtPath","mnemonic","seed","Mnemonic","fromPhrase","computeSeed","rootNode","HDNodeWallet","fromSeed","derivedNode","derivePath","HDWallet","createFromNode","baseWallet","generateXyoBaseWalletFromPhrase","getBuiltInDevMnemonic","getInsecureGenesisRewardMnemonic","resolveRootWallet","configuration","isConfigured","isBuiltInDevMnemonic","mnemonicKind","resolveWalletMetadata","account","address","derivationPath","label","privateKey","usesBuiltInDevMnemonic","resolveActorWallet","root","ActorMnemonicNotAllowedError","Error","actors","join","name","assertNoActorMnemonics","offenders","filter","actor","map","length","DerivationPathCollisionError","collisions","lines","Object","entries","path","detectDerivationPathCollisions","requestedActors","actorConfigMap","Map","bucketsByPath","get","fullPath","bucket","push","set","keys","resolveWalletReport","resolvedActors","Promise","all","labelMap","labels","sharedAccounts","Array","from","_","index","sharedIndex","buildInsecureGenesisRewardAccounts","accounts","initializeResolvedWalletReport","getResolvedWalletReport","formatSharedAccount","showPrivateKey","formatGenesisRewardAccount","balance","toString","formatWalletReport","report","sections","showSecrets","formatInsecureGenesisRewardWarning","resolveGenesisRewardAddress","config","chain","genesisRewardAddress","wallet","resolveWalletForActor","resolvedAccountPath","initActorSeedPhrase","context","bios","logger","config","walletKind","name","report","getResolvedWalletReport","isString","root","mnemonic","fallback","getBuiltInDevMnemonic","debug","assertEx","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","isDefined","actorAccountSingletons","initActorWallet","context","actorName","config","name","isDefined","accountPath","undefined","account","resolveWalletForActor","logger","debug","address","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","running","shuttingDown","readyState","length","some","a","isLocalActor","every","isReady","isShuttingDown","registerActor","actor","push","start","runReadyHandler","catch","err","logger","error","name","formatError","startHandler","warn","log","startResults","Promise","allSettled","map","startFailures","flatMap","r","i","status","reason","f","Error","stopHandler","stop","whenReady","timeoutMs","localActors","filter","undefined","all","timer","timeout","_","reject","setTimeout","race","clearTimeout","ActorV3","message","stack","String","assertEx","AbstractCreatableProvider","creatableProvider","RejectedTransactionsArchivistProviderMoniker","SimpleRejectedTransactionsArchivistProvider","AbstractCreatableProvider","defaultMoniker","dependencies","monikers","moniker","archivist","params","paramsHandler","assertEx","backingsSatisfied","unmetBackings","createCapabilityRegistry","AccountBalanceViewerMoniker","BlockRunnerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","ChainContractViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","StakeTotalsViewerMoniker","TimeSyncViewerMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","XyoConnectionMoniker","XyoGatewayRunnerMoniker","capabilities","id","BlockViewerMoniker","label","kind","surface","WindowedBlockViewerMoniker","MempoolViewerMoniker","MempoolRunnerMoniker","AccountBalanceViewerMoniker","FinalizationViewerMoniker","FinalizationRunnerMoniker","TransactionViewerMoniker","BlockValidationViewerMoniker","TransactionValidationViewerMoniker","DeadLetterQueueViewerMoniker","DeadLetterQueueRunnerMoniker","ChainContractViewerMoniker","StakeTotalsViewerMoniker","TimeSyncViewerMoniker","XyoViewerMoniker","RejectedTransactionsArchivistProviderMoniker","BlockRunnerMoniker","implies","createDefaultCapabilityRegistry","registry","createCapabilityRegistry","cap","register","SimpleAccountBalanceViewer","SimpleBlockValidationViewer","SimpleBlockViewer","SimpleDeadLetterQueueRunner","SimpleDeadLetterQueueViewer","SimpleFinalizationRunner","SimpleFinalizationViewer","SimpleMempoolRunner","SimpleMempoolViewer","SimpleTransactionValidationViewer","SimpleTransactionViewer","SimpleWindowedBlockViewer","SimpleXyoConnectionViewer","SimpleXyoViewer","readMempoolTuning","ctx","cfg","actorContext","config","demotionThreshold","mempool","maxPendingTransactions","passes","localTier1Descriptors","id","satisfies","SimpleMempoolViewer","defaultMoniker","tier","backings","backing","mode","surface","preconditions","build","factory","dependencies","pendingTransactionsArchivist","process","pendingBlocksArchivist","SimpleMempoolRunner","SimpleAccountBalanceViewer","balancesSummaryMap","transfersSummaryMap","SimpleFinalizationViewer","finalizedArchivist","readonlyChainArchivist","SimpleBlockViewer","SimpleWindowedBlockViewer","maxWindowSize","syncInterval","SimpleXyoConnectionViewer","SimpleTransactionViewer","SimpleXyoViewer","SimpleFinalizationRunner","writableChainArchivist","SimpleBlockValidationViewer","state","blockStateValidator","protocol","blockProtocolValidator","SimpleTransactionValidationViewer","transactionProtocolValidator","transactionStateValidator","SimpleDeadLetterQueueRunner","rejectedBlocksArchivist","rejectedTransactionsArchivist","SimpleDeadLetterQueueViewer","SimpleRejectedTransactionsArchivistProvider","archivist","ProviderFactoryLocator","indexedNetworkDescriptors","networkTier3Descriptors","nodeNetworkDescriptors","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","logger","config","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","asEthAddress","EvmChainContractViewer","EvmStakeEventsViewer","EvmStakeTotalsViewer","EvmStakeViewer","canUseEvmProvider","initEvmProvider","SimpleChainContractViewer","SimpleStakeEventsViewer","SimpleStakeTotalsViewer","SimpleStakeViewer","SimpleTimeSyncViewer","XYO_ZERO_ADDRESS","initEvmProvidersIfAvailable","locator","context","logger","canUseEvmProvider","config","chain","id","chainId","provider","initEvmProvider","address","asEthAddress","register","EvmStakeEventsViewer","factory","dependencies","EvmStakeViewer","EvmStakeTotalsViewer","EvmChainContractViewer","SimpleTimeSyncViewer","ethProvider","warn","positions","SimpleStakeEventsViewer","SimpleStakeViewer","SimpleStakeTotalsViewer","SimpleChainContractViewer","minWithdrawalBlocks","stakingTokenAddress","XYO_ZERO_ADDRESS","rewardsContract","assertEx","createBootstrapHead","Account","asAttoXL1","findMostRecentBlock","flattenHydratedBlock","initFinalizationArchivistIfNeeded","archivist","config","account","options","configuredChainId","chain","id","possibleHead","findMostRecentBlock","Error","possibleChainId","Account","random","address","genesisRewardAddress","accounts","buildInsecureGenesisRewardAccounts","logger","warn","formatInsecureGenesisRewardWarning","onInsecureGenesisConfirm","resolveGenesisRewardAddress","createBootstrapHead","asAttoXL1","GENESIS_REWARD_AMOUNT","payloads","flatMap","block","flattenHydratedBlock","insert","head","assertEx","chainId","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","assertEx","asArchivistInstance","isDefined","LmdbArchivistConfigSchema","MongoDBArchivistV2","MongoDBArchivistV2Deletable","ViewArchivist","AbstractModule","LoggerModuleStatusReporter","MemoryArchivist","MemorySentinel","ModuleFactoryLocator","hasMongoConfig","LmdbArchivist","NamedLmdbArchivist","LmdbArchivist","dbName","config","location","cfgLocation","paramsLocation","params","Error","storeName","cfg","derived","payloadSdkConfig","collection","name","getLocator","logger","traceProvider","meterProvider","config","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MongoDBArchivistV2Deletable","root","lmdbLocation","lmdbConfig","clearStoreOnStart","location","schema","LmdbArchivistConfigSchema","NamedLmdbArchivist","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","DeadLetterQueueNodeManifest","DeadLetterQueue","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","rejectedBlocksArchivistFromNode","rejectedTransactionsArchivistFromNode","initServerNode","context","wallet","providedNode","loadNode","start","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","rejectedBlocksArchivist","rejectedTransactionsArchivist","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","logger","config","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","asArchivistInstance","buildChainStoreBacking","node","mode","options","readonlyArchivist","asArchivistInstance","resolve","required","Error","writableArchivist","initFinalizationArchivistIfNeeded","actorConfig","wallet","logger","onInsecureGenesisConfirm","asArchivistInstance","buildDlqStoreBacking","node","mode","rejectedBlocksArchivist","asArchivistInstance","resolve","required","rejectedTransactionsArchivist","assertEx","buildIndexerStoreBacking","context","mode","balancesSummaryMap","assertEx","initBalanceSummaryMap","transfersSummaryMap","initTransferSummaryMap","asArchivistInstance","buildMempoolStoreBacking","node","mode","pendingTransactionsArchivist","asArchivistInstance","resolve","required","pendingBlocksArchivist","validateHydratedBlock","validateHydratedBlockState","validateHydratedTransactionState","BlockCumulativeBalanceValidatorFactory","validateTransaction","cumulativeBalanceValidator","BlockCumulativeBalanceValidatorFactory","validateHydratedBlockStateWithCumulativeBalance","context","block","stateErrors","cumulativeErrors","Promise","all","validateHydratedBlockState","buildValidators","blockProtocolValidator","validateHydratedBlock","blockStateValidator","transactionProtocolValidator","validateTransaction","transactionStateValidator","validateHydratedTransactionState","buildProcessSharedResources","context","options","wallet","initActorWallet","serverNode","initServerNode","node","chainStore","mempoolStore","dlqStore","indexerStore","Promise","all","buildChainStoreBacking","actorConfig","config","logger","onInsecureGenesisConfirm","buildMempoolStoreBacking","buildDlqStoreBacking","buildIndexerStoreBacking","validators","buildValidators","balancesSummaryMap","blockProtocolValidator","blockStateValidator","pendingBlocksArchivist","pendingTransactionsArchivist","readonlyChainArchivist","readonlyArchivist","rejectedBlocksArchivist","rejectedTransactionsArchivist","transactionProtocolValidator","transactionStateValidator","transfersSummaryMap","writableChainArchivist","writableArchivist","MissingCapabilityError","resolveProviders","locatorFromActorNeeds","context","actorNeeds","options","process","buildProcessSharedResources","capabilities","createDefaultCapabilityRegistry","resolutionContext","actorContext","needs","unionNeeds","candidates","localTier1Descriptors","networkTier3Descriptors","extraDescriptors","plan","resolveProviders","availableBackings","locator","ProviderFactoryLocator","validateDepsOnRegister","factories","selected","map","d","build","filter","f","undefined","registerMany","result","Set","moniker","required","add","optional","isAccountInstance","basicRemoteRunnerLocator","sdkBasicRemoteRunnerLocator","JsonRpcAccountBalanceViewer","JsonRpcXyoSigner","SimpleXyoSigner","signerFactoryFromParam","signer","isAccountInstance","SimpleXyoSigner","factory","dependencies","account","JsonRpcXyoSigner","transport","basicRemoteRunnerLocator","name","remoteConfig","dataLakeEndpoint","validators","undefined","sdkBasicRemoteRunnerLocator","additionalProviders","JsonRpcAccountBalanceViewer","signerFactory","skipGatewayRunner","basicRemoteViewerLocator","sdkBasicRemoteViewerLocator","JsonRpcAccountBalanceViewer","basicRemoteViewerLocator","name","remoteConfig","dataLakeEndpoint","validators","sdkBasicRemoteViewerLocator","additionalProviders","JsonRpcAccountBalanceViewer","factory","dependencies","STATELESS_BACKINGS","backing","mode","buildStatelessApiLocator","context","needs","stubProcess","result","locatorFromActorNeeds","availableBackings","process","locator","initTelemetry","telemetryContextFromConfig","config","serviceName","serviceVersion","defaultScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","initTelemetry","attributes","metricsConfig","contextFromConfigWithoutLocator","config","logger","serviceName","serviceVersion","defaultScrapePort","singletons","caches","telemetryConfig","telemetryContextFromConfig","statusReporter","initStatusReporter","AccountBalanceViewerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","XyoConnectionMoniker","LOCAL_LEGACY_NEEDS","required","AccountBalanceViewerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","DeadLetterQueueRunnerMoniker","DeadLetterQueueViewerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","RejectedTransactionsArchivistProviderMoniker","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoViewerMoniker","localLocatorFromConfig","context","validateDepsOnRegister","onInsecureGenesisConfirm","result","locatorFromActorNeeds","locator","deepMerge","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","ProviderFactoryLocator","SimpleXyoConnectionRunner","SimpleXyoGateway","SimpleXyoRunner","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","API_NEEDS","required","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","apiLocatorFromConfig","context","parent","config","stateless","locator","buildStatelessApiLocator","registerMany","SimpleXyoRunner","factory","dependencies","SimpleXyoConnectionRunner","SimpleXyoGateway","freeze","ProviderFactoryLocator","isDefined","JsonRpcAccountBalanceViewer","JsonRpcBlockViewer","JsonRpcFinalizationViewer","JsonRpcMempoolRunner","JsonRpcMempoolViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","ProviderFactoryLocator","RestDataLakeRunner","RestDataLakeViewer","SimpleStakeEventsViewer","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","SimpleXyoRunner","SimpleXyoSigner","bridgeLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","config","dataLake","signerAccount","initActorWallet","remote","rpc","registerMany","JsonRpcMempoolViewer","factory","dependencies","JsonRpcMempoolRunner","JsonRpcAccountBalanceViewer","JsonRpcFinalizationViewer","JsonRpcBlockViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","isDefined","driver","url","endpoint","RestDataLakeRunner","RestDataLakeViewer","Error","SimpleStakeEventsViewer","positions","SimpleXyoSigner","account","SimpleXyoRunner","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","freeze","ProviderFactoryLocator","finalizerLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","registerMany","freeze","ProviderFactoryLocator","mempoolLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","registerMany","freeze","asAddress","SimpleBlockRunner","ProviderFactoryLocator","producerLocatorFromConfig","context","parent","logger","config","account","initActorWallet","locator","ProviderFactoryLocator","rewardAddress","asAddress","address","info","warn","rejectedTransactionsProvider","tryGetInstance","RejectedTransactionsArchivistProviderMoniker","rejectedTransactionsArchivist","archivist","registerMany","SimpleBlockRunner","factory","dependencies","heartbeatInterval","freeze","JsonRpcAccountBalanceViewer","JsonRpcBlockViewer","JsonRpcFinalizationViewer","JsonRpcMempoolRunner","JsonRpcMempoolViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","ProviderFactoryLocator","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","SimpleXyoRunner","SimpleXyoSigner","rewardRedemptionLocatorFromConfig","context","parent","locator","ProviderFactoryLocator","config","account","initActorWallet","remote","rpc","registerMany","JsonRpcMempoolViewer","factory","dependencies","JsonRpcMempoolRunner","JsonRpcAccountBalanceViewer","JsonRpcFinalizationViewer","JsonRpcBlockViewer","JsonRpcXyoRunner","JsonRpcXyoViewer","SimpleXyoSigner","SimpleXyoRunner","SimpleXyoConnectionRunner","SimpleXyoGatewayRunner","freeze","commonLocatorFromConfig","remoteLocatorFromConfig","rootLocatorFromConfig","context","validateDepsOnRegister","onInsecureGenesisConfirm","config","locator","commonLocatorFromConfig","newLocator","remote","rpc","remoteLocatorFromConfig","localLocatorFromConfig","initEvmProvidersIfAvailable","freeze","deepMerge","AccountBalanceViewerMoniker","BlockValidationViewerMoniker","BlockViewerMoniker","commonLocatorFromConfig","DeadLetterQueueRunnerMoniker","FinalizationRunnerMoniker","FinalizationViewerMoniker","MempoolRunnerMoniker","MempoolViewerMoniker","ProviderFactoryLocator","SimpleXyoConnectionRunner","SimpleXyoGateway","SimpleXyoRunner","TransactionValidationViewerMoniker","TransactionViewerMoniker","WindowedBlockViewerMoniker","XyoConnectionMoniker","XyoGatewayMoniker","XyoRunnerMoniker","XyoViewerMoniker","apiNeeds","required","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoGatewayMoniker","XyoRunnerMoniker","XyoViewerMoniker","mempoolNeeds","MempoolRunnerMoniker","TransactionValidationViewerMoniker","WindowedBlockViewerMoniker","finalizerNeeds","BlockValidationViewerMoniker","FinalizationRunnerMoniker","optional","DeadLetterQueueRunnerMoniker","ACTOR_MIRRORS","api","mempool","finalizer","apiExtraDescriptors","id","satisfies","tier","backings","surface","preconditions","build","SimpleXyoRunner","factory","dependencies","priority","SimpleXyoConnectionRunner","SimpleXyoGateway","ACTOR_EXTRA_DESCRIPTORS","ACTOR_CONFIG_PARSERS","ApiConfigZod","MempoolConfigZod","FinalizerConfigZod","SHARED_LOCATOR_SUPPORTED_ACTORS","canUseSharedLocator","actors","config","length","remote","rpc","names","Set","map","a","name","fullCanary","every","has","actor","includes","merged","parse","deepMerge","stateless","sharedLocatorFromConfig","context","options","unionNeeds","dedupe","flatMap","extraDescriptors","commonContext","commonLocator","commonLocatorFromConfig","sharedContext","result","locatorFromActorNeeds","onInsecureGenesisConfirm","validateDepsOnRegister","sharedWithEvm","initEvmProvidersIfAvailable","locator","freeze","perActor","parser","actorConfig","actorContext","view","ProviderFactoryLocator","registry","shared","items","allActorsAreSelfSufficient","actors","config","length","every","actor","name","merged","ApiConfigZod","parse","deepMerge","stateless","locatorsFromConfig","context","onInsecureGenesisConfirm","result","canUseSharedLocator","perActor","sharedLocatorFromConfig","skipRoot","rootContext","_root","rootLocatorFromConfig","actorConfig","producerLocatorFromConfig","ProducerConfigZod","apiLocatorFromConfig","mempoolLocatorFromConfig","MempoolConfigZod","finalizerLocatorFromConfig","FinalizerConfigZod","bridgeLocatorFromConfig","BridgeConfigZod","rewardRedemptionLocatorFromConfig","RewardRedemptionConfigZod","isDefined","isNull","ConfigZod","cosmiconfig","configName","configSection","ConfigFileNotFoundError","Error","configPath","name","isMissingFileError","error","code","isRecord","value","tryParseConfig","options","searchPlaces","explorer","cosmiconfig","cache","result","isDefined","load","config","isNull","search","section","parsed","ConfigZod","loose","parse","mnemonic"]}
|