@xyo-network/chain-api 1.15.27 → 1.15.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/index.mjs +27 -12
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts +2 -2
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +2 -2
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +48 -48
- package/src/server/app.ts +1 -1
- package/src/server/routes/addRoutes.ts +3 -3
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +25 -8
- package/src/server/server.ts +3 -2
package/dist/node/index.mjs
CHANGED
|
@@ -262,27 +262,39 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
|
262
262
|
|
|
263
263
|
// src/server/routes/rpc/routes/addRpcRoutes.ts
|
|
264
264
|
import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
|
|
265
|
-
import { NodeXyoViewer } from "@xyo-network/chain-rpc";
|
|
265
|
+
import { NodeNetworkStakeViewer, NodeStepRewardsByPositionViewer, NodeXyoViewer } from "@xyo-network/chain-rpc";
|
|
266
266
|
import { RewardMultipliers } from "@xyo-network/xl1-protocol-sdk";
|
|
267
267
|
import { NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection } from "@xyo-network/xl1-rpc";
|
|
268
|
-
var addRpcRoutes = /* @__PURE__ */ __name(async (app,
|
|
268
|
+
var addRpcRoutes = /* @__PURE__ */ __name(async (app, stakedChainContext, initRewardsCache) => {
|
|
269
269
|
const { node } = app;
|
|
270
270
|
const runner = new NodeXyoRunner(node);
|
|
271
|
+
const networkStakeViewer = await NodeNetworkStakeViewer.create({
|
|
272
|
+
context: stakedChainContext
|
|
273
|
+
});
|
|
274
|
+
console.log("Initializing NodeNetworkStakeViewer...");
|
|
275
|
+
await networkStakeViewer.start();
|
|
276
|
+
console.log("Initialized NodeNetworkStakeViewer.");
|
|
271
277
|
const viewer = await NodeXyoViewer.create({
|
|
272
278
|
node,
|
|
273
|
-
eventReader,
|
|
274
|
-
stakedChainContext,
|
|
275
279
|
rewardMultipliers: RewardMultipliers,
|
|
276
|
-
initRewardsCache
|
|
280
|
+
initRewardsCache,
|
|
281
|
+
networkStakeViewer
|
|
277
282
|
});
|
|
278
|
-
console.log("Initializing
|
|
283
|
+
console.log("Initializing NodeXyoViewer...");
|
|
279
284
|
await viewer.start();
|
|
280
|
-
console.log("Initialized
|
|
285
|
+
console.log("Initialized NodeXyoViewer.");
|
|
286
|
+
const stepRewardsByPositionViewer = await NodeStepRewardsByPositionViewer.create({
|
|
287
|
+
context: stakedChainContext,
|
|
288
|
+
rewardMultipliers: RewardMultipliers
|
|
289
|
+
});
|
|
290
|
+
console.log("Initializing NodeStepRewardsByPositionViewer...");
|
|
291
|
+
await stepRewardsByPositionViewer.start();
|
|
292
|
+
console.log("Initialized NodeStepRewardsByPositionViewer.");
|
|
281
293
|
const connection = new XyoBaseConnection({
|
|
282
294
|
runner,
|
|
283
295
|
viewer
|
|
284
296
|
});
|
|
285
|
-
const engine = rpcEngineFromConnection(connection);
|
|
297
|
+
const engine = rpcEngineFromConnection(connection, networkStakeViewer);
|
|
286
298
|
app.post("/rpc", (req, res) => {
|
|
287
299
|
setRawResponseFormat2(res);
|
|
288
300
|
engine.handle(req.body, (_, rpcResponse) => {
|
|
@@ -292,8 +304,8 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app, eventReader, stakedChainCo
|
|
|
292
304
|
}, "addRpcRoutes");
|
|
293
305
|
|
|
294
306
|
// src/server/routes/addRoutes.ts
|
|
295
|
-
var addRoutes = /* @__PURE__ */ __name(async (app,
|
|
296
|
-
await addRpcRoutes(app,
|
|
307
|
+
var addRoutes = /* @__PURE__ */ __name(async (app, stakedChainContext, initRewardsCache) => {
|
|
308
|
+
await addRpcRoutes(app, stakedChainContext, initRewardsCache);
|
|
297
309
|
addDataLakeRoutes(app);
|
|
298
310
|
addNodeRoutes(app);
|
|
299
311
|
}, "addRoutes");
|
|
@@ -314,7 +326,7 @@ var getApp = /* @__PURE__ */ __name(async (node, eventsReader, stakedChainContex
|
|
|
314
326
|
app.use(customPoweredByHeader);
|
|
315
327
|
disableCaseSensitiveRouting(app);
|
|
316
328
|
app.node = node;
|
|
317
|
-
await addRoutes(app,
|
|
329
|
+
await addRoutes(app, stakedChainContext, initRewardsCache);
|
|
318
330
|
app.use(standardErrors);
|
|
319
331
|
return app;
|
|
320
332
|
}, "getApp");
|
|
@@ -939,7 +951,10 @@ var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
|
939
951
|
},
|
|
940
952
|
head: /* @__PURE__ */ __name(async () => {
|
|
941
953
|
const head = await findMostRecentBlock(chainArchivist);
|
|
942
|
-
return
|
|
954
|
+
return [
|
|
955
|
+
assertEx7(head?._hash, () => "No head found in chainArchivist"),
|
|
956
|
+
assertEx7(head?.block, () => "No head found in chainArchivist")
|
|
957
|
+
];
|
|
943
958
|
}, "head")
|
|
944
959
|
};
|
|
945
960
|
const mods = await resolvedNode.resolve("*");
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/address/addNodeRoutes.ts","../../src/server/routes/address/get/get.ts","../../src/server/routes/address/post/post.ts","../../src/server/routes/address/post/getQueryConfig.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/helpers/initChainId.ts","../../src/helpers/initInfuraProvider.ts","../../src/manifest/getLocator.ts","../../src/driver/mongo/MongoMap.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { StakedChainContextRead, StakeEventsRead } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (\n node: NodeInstance,\n eventsReader: StakeEventsRead,\n stakedChainContext: StakedChainContextRead,\n initRewardsCache?: boolean,\n): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n await addRoutes(app, eventsReader, stakedChainContext, initRewardsCache)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { Express } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { getAddress } from './get/index.ts'\nimport { postAddress } from './post/index.ts'\n\nexport const addNodeRoutes = (app: Express) => {\n const defaultModule = app.node\n const address = defaultModule.address\n const defaultModuleEndpoint = `/${address}`\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, defaultModuleEndpoint))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, defaultModuleEndpoint))\n app.get('/:address', getAddress)\n app.post('/:address', postAddress)\n app.get('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n app.post('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport { asAddress, toAddress } from '@xylabs/hex'\nimport { isModuleIdentifierPart } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\n\nconst handler: RequestHandler<AddressPathParams, Payload[]> = async (req, res, next) => {\n const { address: rawAddress } = req.params\n const { node } = req.app\n const address = asAddress(rawAddress)\n if (address !== undefined) {\n let mod = node.address === address ? node : (await node.resolve(address, { direction: 'down' }))\n if (mod) {\n res.json(await mod.state())\n return\n }\n }\n if (isModuleIdentifierPart(rawAddress)) {\n const moduleIdentifier = toAddress(rawAddress)\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n const moduleAddress = assertEx(mod?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport {\n asAddress, isAddress,\n toAddress,\n} from '@xylabs/hex'\nimport type { JsonObject } from '@xylabs/object'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleErrorBuilder } from '@xyo-network/module-abstract'\nimport type { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport type { ModuleError, Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\nimport { getQueryConfig } from './getQueryConfig.ts'\n\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\nconst handler: RequestHandler<AddressPathParams, ModuleQueryResult | ModuleError, PostAddressRequestBody> = async (req, res, next) => {\n const returnError = (code: number, message = 'An error occurred', details?: JsonObject) => {\n const error = new ModuleErrorBuilder().message(message).details(details).build()\n res.locals.rawResponse = false\n res.status(code).json(error)\n next()\n }\n\n const { address } = req.params\n const { node } = req.app\n const [bw, payloads] = Array.isArray(req.body) ? req.body : []\n if (!isAddress(address)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing address')\n }\n\n if (!bw) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing boundwitness')\n }\n\n if (!isQueryBoundWitness(bw)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Invalid query boundwitness')\n }\n\n let modules: ModuleInstance[] = []\n const normalizedAddress = toAddress(address)\n if (node.address === normalizedAddress) modules = [node]\n else {\n const typedAddress = asAddress(address)\n const byAddress = (typedAddress === undefined) ? undefined : await node.resolve(typedAddress, { maxDepth: 10 })\n\n if (byAddress) modules = [byAddress]\n else {\n const byName = await node.resolve(address, { direction: 'down' })\n if (byName) {\n const moduleAddress = assertEx(byName?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${moduleAddress}`)\n return\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n }\n }\n\n if (modules.length > 0) {\n const mod = modules[0]\n const queryConfig = getQueryConfig(mod, req, bw, payloads)\n try {\n const queryResult = await mod.query(bw, payloads, queryConfig)\n res.json(queryResult)\n } catch (ex) {\n return returnError(StatusCodes.INTERNAL_SERVER_ERROR, 'Query Failed', { message: (ex as Error)?.message ?? 'Unknown Error' })\n }\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n}\n\nexport const postAddress = asyncHandler(handler)\n","import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model'\nimport { ModuleConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { Request } from 'express'\n\nconst DEFAULT_DEPTH = 5 as const\n\nexport const getQueryConfig = (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]): ModuleConfig | undefined => {\n // TODO: Filter based on query addresses?\n // Recurse through payloads for nested BWs\n const nestedBwAddresses\n = payloads\n ?.flat(DEFAULT_DEPTH)\n .filter<BoundWitness>((payload): payload is BoundWitness => payload?.schema === BoundWitnessSchema)\n .map(bw => bw.addresses) ?? []\n // TODO: Do we want to end up with a list of addresses or a list of address lists?\n const addresses = [bw.addresses, ...nestedBwAddresses].filter(address => address.length > 0)\n const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map(schema => [schema, addresses])) : {}\n const security = { allowed }\n return { schema: ModuleConfigSchema, security }\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { NodeXyoViewer } from '@xyo-network/chain-rpc'\nimport {\n RewardMultipliers, type StakedChainContextRead, type StakeEventsRead,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n NodeXyoRunner, rpcEngineFromConnection,\n XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (app: Express, eventReader: StakeEventsRead, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n const viewer = await NodeXyoViewer.create({\n node, eventReader, stakedChainContext, rewardMultipliers: RewardMultipliers, initRewardsCache,\n })\n console.log('Initializing Node viewer...')\n await viewer.start()\n console.log('Initialized Node viewer.')\n const connection = new XyoBaseConnection({ runner, viewer })\n const engine = rpcEngineFromConnection(connection)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { StakedChainContextRead, StakeEventsRead } from '@xyo-network/xl1-protocol-sdk'\nimport type { Express } from 'express'\n\nimport { addNodeRoutes } from './address/index.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (app: Express, eventsReader: StakeEventsRead, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {\n await addRpcRoutes(app, eventsReader, stakedChainContext, initRewardsCache)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport { toEthAddress } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { EthereumChainStake, EthereumChainStakeEvents } from '@xyo-network/chain-ethereum'\nimport { findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { StakedXyoChainV2__factory } from '@xyo-network/typechain'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport type { Config, StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport { readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'\n\nimport { initInfuraProvider } from '../helpers/index.ts'\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const {\n config, logger, node,\n } = context\n const { mnemonic, port } = context.config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const provider = await initInfuraProvider(config)\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)\n const nodeContext = {\n wallet, logger, config,\n }\n const eventsReader = await EthereumChainStakeEvents.create({ contract, logger })\n assertEx(await eventsReader.start(), () => 'Failed to start EthereumChainStakeEvents reader')\n const stakeChainReader = await EthereumChainStake.create({\n contract, eventsReader, logger,\n })\n assertEx(await stakeChainReader.start(), () => 'Failed to start EthereumChainStake reader')\n const rootNode = await getNode(nodeContext)\n const chainArchivist = assertEx(asArchivistInstance(\n await rootNode.resolve('Chain:Validated'),\n { required: true },\n ), () => 'FinalizedArchivist not found in node')\n const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)\n const resolvedNode: NodeInstance = node ?? await getNode(nodeContext)\n\n const stakedChainContext: StakedChainContextRead = {\n chainId: contractAddress,\n events: eventsReader,\n stake: stakeChainReader,\n store: { chainMap },\n head: async () => {\n const head = await findMostRecentBlock(chainArchivist)\n return assertEx(head?._hash, () => 'No head found in chainArchivist')\n },\n }\n const mods = await resolvedNode.resolve('*')\n await Promise.all(mods.map((mod) => {\n return mod.start?.() ?? (() => true)\n }))\n const app = await getApp(resolvedNode, eventsReader, stakedChainContext, config.api.initRewardsCache)\n const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { assertEx } from '@xylabs/assert'\nimport { hexFrom, isHex } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Config): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Config) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { Provider } from 'ethers'\nimport { InfuraWebSocketProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraWebSocketProvider> | undefined\n\nexport const initInfuraProvider = (config: Config): Promise<Provider> => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraWebSocketProvider(providerConfig[0], providerConfig[1]))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Config): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Config) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asAddress, ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport {\n AddressBalanceDivinerV2, AddressTransferDiviner, ArchivistSyncDiviner, HeadValidationDiviner,\n} from '@xyo-network/chain-modules'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\nimport type {\n BalancesStepSummary, Config, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nimport { MongoMap } from '../driver/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n let balanceSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>> | undefined\n let transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>> | undefined\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\n // Use a persistent MongoMap for the summary repository if MongoDB is configured\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n balanceSummaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n transferSummaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n }\n\n locator.register(AddressBalanceDivinerV2.factory<AddressBalanceDivinerV2>({\n traceProvider, meterProvider, statusReporter, summaryMap: balanceSummaryMap, stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n }))\n\n locator.register(AddressTransferDiviner.factory<AddressTransferDiviner>({\n traceProvider, meterProvider, statusReporter, summaryMap: transferSummaryMap, stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n }))\n\n const chainId = isDefined(config.chain.id)\n ? assertEx(asAddress(config.chain.id), () => 'chain.id must be an Address')\n : ZERO_ADDRESS\n locator.register(HeadValidationDiviner.factory<HeadValidationDiviner>({\n traceProvider,\n meterProvider,\n statusReporter,\n chainId,\n allowedProducers: config.producer.allowlist,\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 locator.register(ArchivistSyncDiviner.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { assertEx } from '@xylabs/assert'\nimport {\n AbstractCreatable, creatable, CreatableParams,\n} from '@xylabs/creatable'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { isNull } from '@xylabs/typeof'\nimport { AsynchronousMap } from '@xyo-network/xl1-protocol-sdk'\nimport { LRUCache } from 'lru-cache'\nimport {\n Document, Filter, OptionalUnlessRequiredId, WithId,\n} from 'mongodb'\n\nexport interface MongoMapParams<TData extends Document = Document> extends CreatableParams {\n getCache?: {\n enabled: boolean\n maxEntries?: number\n }\n sdk: BaseMongoSdk<TData>\n}\n\nfunction stripMongoId<V extends Document>(doc: WithId<V>): V {\n const { _id, ...rest } = doc\n return rest as unknown as V\n}\n\n@creatable()\nexport class MongoMap<K extends {} = string, V extends Document = Document>\n extends AbstractCreatable<MongoMapParams<V>>\n implements AsynchronousMap<K, V> {\n private _getCache: LRUCache<K, V> | undefined\n\n get sdk(): BaseMongoSdk<V> {\n return assertEx(this.params.sdk, () => 'No sdk specified')\n }\n\n async clear(): Promise<void> {\n this._getCache?.clear()\n await this.sdk.deleteMany({})\n }\n\n async delete(id: K): Promise<boolean> {\n this._getCache?.delete(id)\n\n const filter = { _id: id } as Filter<V>\n const result = await this.sdk.deleteOne(filter)\n return result.deletedCount > 0\n }\n\n async get(id: K): Promise<V | undefined> {\n if (this._getCache) {\n const getCacheResult = this._getCache.get(id)\n if (getCacheResult) {\n return getCacheResult\n }\n }\n const filter = { _id: id } as Filter<V>\n const doc = await this.sdk.findOne(filter)\n return isNull(doc) ? undefined : stripMongoId(doc)\n }\n\n async getMany(ids: K[]): Promise<V[]> {\n /* const results = await Promise.all(ids.map(async (id) => {\n return await this.get(id)\n }))\n return results.filter(exists) */\n const cache = this._getCache\n const idSet = new Set(ids)\n const results: V[] = []\n if (cache) {\n const getCacheResult = ids.map(id => ([id, cache.get(id)])).filter(([, item]) => item !== undefined) as [K, V][]\n for (const [id] of getCacheResult) {\n idSet.delete(id)\n }\n results.push(...getCacheResult.map(([, item]) => item))\n }\n const filter = { _id: { $in: [...idSet] } } as Filter<V>\n const items = await (await this.sdk.find(filter)).toArray()\n for (const item of items) {\n const id = item._id\n const stripped = stripMongoId(item)\n if (cache) {\n cache.set(id as unknown as K, stripped)\n }\n results.push(stripped)\n }\n return results\n }\n\n async has(id: K): Promise<boolean> {\n if (this._getCache) {\n const getCacheResult = this._getCache.has(id)\n if (getCacheResult) {\n return getCacheResult\n }\n }\n const filter = { _id: id } as Filter<V>\n const exists = await this.sdk.findOne(filter)\n return isNull(exists) ? false : true\n }\n\n async set(id: K, data: V): Promise<void> {\n const filter = { _id: id } as Filter<V>\n const value = { ...data, _id: id } as OptionalUnlessRequiredId<V>\n await this.sdk.replaceOne(filter, value, { upsert: true })\n this._getCache?.set(id, data)\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n // TODO: Ensure index\n\n if (this.params.getCache?.enabled === true) {\n const maxEntries = this.params.getCache?.maxEntries ?? 5000\n this._getCache = new LRUCache<K, V>({ max: maxEntries })\n }\n }\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-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\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node 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 \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"schema\": \"network.xyo.diviner.chain.head.validation.config\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Submissions\",\n \"targetModuleFunction\": \"divine\"\n }\n ],\n \"inArchivist\": \"Submissions\",\n \"outArchivist\": \"Validated\",\n \"name\": \"HeadValidationDiviner\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 1000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainValidationSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"HeadValidationDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressBalancePollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressBalanceDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/5'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressTransferPollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressTransferDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Submissions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_submissions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/2\",\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 \"config\": {\n \"accountPath\": \"1/1/3'\",\n \"name\": \"AddressBalanceDiviner\",\n \"schema\": \"network.xyo.diviner.chain.address.balance.config\",\n \"map\": {\n \"lmdb\": {\n \"dbName\": \"summaries\",\n \"storeName\": \"address_balance\",\n \"location\": \".store\"\n }\n },\n \"archivist\": \"Validated\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/4'\",\n \"name\": \"AddressTransferDiviner\",\n \"schema\": \"network.xyo.diviner.chain.address.transfer.config\",\n \"map\": {\n \"lmdb\": {\n \"dbName\": \"summaries\",\n \"storeName\": \"address_transfer\",\n \"location\": \".store\"\n }\n },\n \"archivist\": \"Validated\"\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\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"PendingTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_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/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nexport const ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nexport const PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","StatusCodes","assertEx","asyncHandler","asAddress","toAddress","isModuleIdentifierPart","StatusCodes","handler","req","res","next","address","rawAddress","params","node","app","asAddress","undefined","mod","resolve","direction","json","state","isModuleIdentifierPart","moduleIdentifier","toAddress","moduleAddress","assertEx","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","assertEx","asyncHandler","asAddress","isAddress","toAddress","isQueryBoundWitness","ModuleErrorBuilder","StatusCodes","BoundWitnessSchema","ModuleConfigSchema","DEFAULT_DEPTH","getQueryConfig","mod","req","bw","payloads","nestedBwAddresses","flat","filter","payload","schema","BoundWitnessSchema","map","addresses","address","length","allowed","Object","fromEntries","queries","security","ModuleConfigSchema","handler","req","res","next","returnError","code","message","details","error","ModuleErrorBuilder","build","locals","rawResponse","status","json","address","params","node","app","bw","payloads","Array","isArray","body","isAddress","StatusCodes","BAD_REQUEST","isQueryBoundWitness","modules","normalizedAddress","toAddress","typedAddress","asAddress","byAddress","undefined","resolve","maxDepth","byName","direction","moduleAddress","assertEx","redirect","TEMPORARY_REDIRECT","NOT_FOUND","length","mod","queryConfig","getQueryConfig","queryResult","query","ex","INTERNAL_SERVER_ERROR","postAddress","asyncHandler","addNodeRoutes","app","defaultModule","node","address","defaultModuleEndpoint","get","_req","res","redirect","StatusCodes","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","getAddress","postAddress","sendStatus","NOT_FOUND","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","NodeXyoViewer","RewardMultipliers","NodeXyoRunner","rpcEngineFromConnection","XyoBaseConnection","addRpcRoutes","app","eventReader","stakedChainContext","initRewardsCache","node","runner","NodeXyoRunner","viewer","NodeXyoViewer","create","rewardMultipliers","RewardMultipliers","console","log","start","connection","XyoBaseConnection","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","eventsReader","stakedChainContext","initRewardsCache","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","node","eventsReader","stakedChainContext","initRewardsCache","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","toEthAddress","isDefined","isString","asArchivistInstance","boot","EthereumChainStake","EthereumChainStakeEvents","findMostRecentBlock","StakedXyoChainV2__factory","HDWallet","readPayloadMapFromStore","assertEx","hexFrom","isHex","isDefined","getChainId","config","chainId","assertEx","evm","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","assertEx","isDefined","InfuraWebSocketProvider","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraWebSocketProvider","getInfuraProviderConfig","config","projectId","assertEx","evm","infura","projectSecret","getChainId","assertEx","asAddress","ZERO_ADDRESS","BaseMongoSdk","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","AddressBalanceDivinerV2","AddressTransferDiviner","ArchivistSyncDiviner","HeadValidationDiviner","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","StepSizes","hasMongoConfig","Semaphore","assertEx","AbstractCreatable","creatable","isNull","LRUCache","stripMongoId","doc","_id","rest","MongoMap","AbstractCreatable","_getCache","sdk","assertEx","params","clear","deleteMany","delete","id","filter","result","deleteOne","deletedCount","get","getCacheResult","findOne","isNull","undefined","getMany","ids","cache","idSet","Set","results","map","item","push","$in","items","find","toArray","stripped","set","has","exists","data","value","replaceOne","upsert","startHandler","getCache","enabled","maxEntries","LRUCache","max","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","balanceSummaryMap","transferSummaryMap","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","sdkBalanceSummaryMap","BaseMongoSdk","collection","MongoMap","create","sdk","getCache","enabled","maxEntries","sdkTransferSummaryMap","AddressBalanceDivinerV2","summaryMap","stepSemaphores","StepSizes","map","Semaphore","AddressTransferDiviner","chainId","chain","id","assertEx","asAddress","ZERO_ADDRESS","HeadValidationDiviner","allowedProducers","producer","allowlist","MemoryArchivist","MemorySentinel","ViewArchivist","ArchivistSyncDiviner","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","node","port","boot","isDefined","wallet","fromPhrase","provider","initInfuraProvider","contractAddress","chain","id","contract","StakedXyoChainV2__factory","connect","toEthAddress","nodeContext","eventsReader","EthereumChainStakeEvents","create","start","stakeChainReader","EthereumChainStake","rootNode","getNode","chainArchivist","asArchivistInstance","resolve","required","chainMap","readPayloadMapFromStore","resolvedNode","stakedChainContext","chainId","events","stake","store","head","findMostRecentBlock","_hash","mods","Promise","all","map","mod","app","getApp","initRewardsCache","server","listen","setTimeout"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/address/addNodeRoutes.ts","../../src/server/routes/address/get/get.ts","../../src/server/routes/address/post/post.ts","../../src/server/routes/address/post/getQueryConfig.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/helpers/initChainId.ts","../../src/helpers/initInfuraProvider.ts","../../src/manifest/getLocator.ts","../../src/driver/mongo/MongoMap.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { StakedChainContextRead, StakeEventsRead } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (\n node: NodeInstance,\n eventsReader: StakeEventsRead,\n stakedChainContext: StakedChainContextRead,\n initRewardsCache?: boolean,\n): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n await addRoutes(app, stakedChainContext, initRewardsCache)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { Express } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { getAddress } from './get/index.ts'\nimport { postAddress } from './post/index.ts'\n\nexport const addNodeRoutes = (app: Express) => {\n const defaultModule = app.node\n const address = defaultModule.address\n const defaultModuleEndpoint = `/${address}`\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, defaultModuleEndpoint))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, defaultModuleEndpoint))\n app.get('/:address', getAddress)\n app.post('/:address', postAddress)\n app.get('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n app.post('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport { asAddress, toAddress } from '@xylabs/hex'\nimport { isModuleIdentifierPart } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\n\nconst handler: RequestHandler<AddressPathParams, Payload[]> = async (req, res, next) => {\n const { address: rawAddress } = req.params\n const { node } = req.app\n const address = asAddress(rawAddress)\n if (address !== undefined) {\n let mod = node.address === address ? node : (await node.resolve(address, { direction: 'down' }))\n if (mod) {\n res.json(await mod.state())\n return\n }\n }\n if (isModuleIdentifierPart(rawAddress)) {\n const moduleIdentifier = toAddress(rawAddress)\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n const moduleAddress = assertEx(mod?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport {\n asAddress, isAddress,\n toAddress,\n} from '@xylabs/hex'\nimport type { JsonObject } from '@xylabs/object'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleErrorBuilder } from '@xyo-network/module-abstract'\nimport type { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport type { ModuleError, Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\nimport { getQueryConfig } from './getQueryConfig.ts'\n\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\nconst handler: RequestHandler<AddressPathParams, ModuleQueryResult | ModuleError, PostAddressRequestBody> = async (req, res, next) => {\n const returnError = (code: number, message = 'An error occurred', details?: JsonObject) => {\n const error = new ModuleErrorBuilder().message(message).details(details).build()\n res.locals.rawResponse = false\n res.status(code).json(error)\n next()\n }\n\n const { address } = req.params\n const { node } = req.app\n const [bw, payloads] = Array.isArray(req.body) ? req.body : []\n if (!isAddress(address)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing address')\n }\n\n if (!bw) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing boundwitness')\n }\n\n if (!isQueryBoundWitness(bw)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Invalid query boundwitness')\n }\n\n let modules: ModuleInstance[] = []\n const normalizedAddress = toAddress(address)\n if (node.address === normalizedAddress) modules = [node]\n else {\n const typedAddress = asAddress(address)\n const byAddress = (typedAddress === undefined) ? undefined : await node.resolve(typedAddress, { maxDepth: 10 })\n\n if (byAddress) modules = [byAddress]\n else {\n const byName = await node.resolve(address, { direction: 'down' })\n if (byName) {\n const moduleAddress = assertEx(byName?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${moduleAddress}`)\n return\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n }\n }\n\n if (modules.length > 0) {\n const mod = modules[0]\n const queryConfig = getQueryConfig(mod, req, bw, payloads)\n try {\n const queryResult = await mod.query(bw, payloads, queryConfig)\n res.json(queryResult)\n } catch (ex) {\n return returnError(StatusCodes.INTERNAL_SERVER_ERROR, 'Query Failed', { message: (ex as Error)?.message ?? 'Unknown Error' })\n }\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n}\n\nexport const postAddress = asyncHandler(handler)\n","import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model'\nimport { ModuleConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { Request } from 'express'\n\nconst DEFAULT_DEPTH = 5 as const\n\nexport const getQueryConfig = (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]): ModuleConfig | undefined => {\n // TODO: Filter based on query addresses?\n // Recurse through payloads for nested BWs\n const nestedBwAddresses\n = payloads\n ?.flat(DEFAULT_DEPTH)\n .filter<BoundWitness>((payload): payload is BoundWitness => payload?.schema === BoundWitnessSchema)\n .map(bw => bw.addresses) ?? []\n // TODO: Do we want to end up with a list of addresses or a list of address lists?\n const addresses = [bw.addresses, ...nestedBwAddresses].filter(address => address.length > 0)\n const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map(schema => [schema, addresses])) : {}\n const security = { allowed }\n return { schema: ModuleConfigSchema, security }\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport {\n NodeNetworkStakeViewer, NodeStepRewardsByPositionViewer, NodeXyoViewer,\n} from '@xyo-network/chain-rpc'\nimport { RewardMultipliers, type StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport {\n NodeXyoRunner, rpcEngineFromConnection,\n XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n const networkStakeViewer = await NodeNetworkStakeViewer.create({ context: stakedChainContext })\n\n console.log('Initializing NodeNetworkStakeViewer...')\n await networkStakeViewer.start()\n console.log('Initialized NodeNetworkStakeViewer.')\n\n const viewer = await NodeXyoViewer.create({\n node, rewardMultipliers: RewardMultipliers, initRewardsCache, networkStakeViewer,\n })\n\n console.log('Initializing NodeXyoViewer...')\n await viewer.start()\n console.log('Initialized NodeXyoViewer.')\n\n const stepRewardsByPositionViewer = await NodeStepRewardsByPositionViewer.create({\n context: stakedChainContext,\n rewardMultipliers: RewardMultipliers,\n })\n\n console.log('Initializing NodeStepRewardsByPositionViewer...')\n await stepRewardsByPositionViewer.start()\n console.log('Initialized NodeStepRewardsByPositionViewer.')\n\n const connection = new XyoBaseConnection({ runner, viewer })\n const engine = rpcEngineFromConnection(connection, networkStakeViewer)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport type { Express } from 'express'\n\nimport { addNodeRoutes } from './address/index.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {\n await addRpcRoutes(app, stakedChainContext, initRewardsCache)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { toEthAddress } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { EthereumChainStake, EthereumChainStakeEvents } from '@xyo-network/chain-ethereum'\nimport { findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { StakedXyoChainV2__factory } from '@xyo-network/typechain'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport type { Config, StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport { readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'\n\nimport { initInfuraProvider } from '../helpers/index.ts'\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const {\n config, logger, node,\n } = context\n const { mnemonic, port } = context.config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const provider = await initInfuraProvider(config)\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)\n const nodeContext = {\n wallet, logger, config,\n }\n const eventsReader = await EthereumChainStakeEvents.create({ contract, logger })\n assertEx(await eventsReader.start(), () => 'Failed to start EthereumChainStakeEvents reader')\n const stakeChainReader = await EthereumChainStake.create({\n contract, eventsReader, logger,\n })\n assertEx(await stakeChainReader.start(), () => 'Failed to start EthereumChainStake reader')\n const rootNode = await getNode(nodeContext)\n const chainArchivist = assertEx(asArchivistInstance(\n await rootNode.resolve('Chain:Validated'),\n { required: true },\n ), () => 'FinalizedArchivist not found in node')\n const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)\n const resolvedNode: NodeInstance = node ?? await getNode(nodeContext)\n\n const stakedChainContext: StakedChainContextRead = {\n chainId: contractAddress,\n events: eventsReader,\n stake: stakeChainReader,\n store: { chainMap },\n head: async (): Promise<[Hash, number]> => {\n const head = await findMostRecentBlock(chainArchivist)\n return [assertEx(head?._hash, () => 'No head found in chainArchivist'), assertEx(head?.block, () => 'No head found in chainArchivist')]\n },\n }\n const mods = await resolvedNode.resolve('*')\n await Promise.all(mods.map((mod) => {\n return mod.start?.() ?? (() => true)\n }))\n const app = await getApp(resolvedNode, eventsReader, stakedChainContext, config.api.initRewardsCache)\n const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { assertEx } from '@xylabs/assert'\nimport { hexFrom, isHex } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Config): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Config) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { Provider } from 'ethers'\nimport { InfuraWebSocketProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraWebSocketProvider> | undefined\n\nexport const initInfuraProvider = (config: Config): Promise<Provider> => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraWebSocketProvider(providerConfig[0], providerConfig[1]))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Config): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Config) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asAddress, ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport {\n AddressBalanceDivinerV2, AddressTransferDiviner, ArchivistSyncDiviner, HeadValidationDiviner,\n} from '@xyo-network/chain-modules'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\nimport type {\n BalancesStepSummary, Config, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nimport { MongoMap } from '../driver/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n let balanceSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>> | undefined\n let transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>> | undefined\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\n // Use a persistent MongoMap for the summary repository if MongoDB is configured\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n balanceSummaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n transferSummaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n }\n\n locator.register(AddressBalanceDivinerV2.factory<AddressBalanceDivinerV2>({\n traceProvider, meterProvider, statusReporter, summaryMap: balanceSummaryMap, stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n }))\n\n locator.register(AddressTransferDiviner.factory<AddressTransferDiviner>({\n traceProvider, meterProvider, statusReporter, summaryMap: transferSummaryMap, stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n }))\n\n const chainId = isDefined(config.chain.id)\n ? assertEx(asAddress(config.chain.id), () => 'chain.id must be an Address')\n : ZERO_ADDRESS\n locator.register(HeadValidationDiviner.factory<HeadValidationDiviner>({\n traceProvider,\n meterProvider,\n statusReporter,\n chainId,\n allowedProducers: config.producer.allowlist,\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 locator.register(ArchivistSyncDiviner.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { assertEx } from '@xylabs/assert'\nimport {\n AbstractCreatable, creatable, CreatableParams,\n} from '@xylabs/creatable'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { isNull } from '@xylabs/typeof'\nimport { AsynchronousMap } from '@xyo-network/xl1-protocol-sdk'\nimport { LRUCache } from 'lru-cache'\nimport {\n Document, Filter, OptionalUnlessRequiredId, WithId,\n} from 'mongodb'\n\nexport interface MongoMapParams<TData extends Document = Document> extends CreatableParams {\n getCache?: {\n enabled: boolean\n maxEntries?: number\n }\n sdk: BaseMongoSdk<TData>\n}\n\nfunction stripMongoId<V extends Document>(doc: WithId<V>): V {\n const { _id, ...rest } = doc\n return rest as unknown as V\n}\n\n@creatable()\nexport class MongoMap<K extends {} = string, V extends Document = Document>\n extends AbstractCreatable<MongoMapParams<V>>\n implements AsynchronousMap<K, V> {\n private _getCache: LRUCache<K, V> | undefined\n\n get sdk(): BaseMongoSdk<V> {\n return assertEx(this.params.sdk, () => 'No sdk specified')\n }\n\n async clear(): Promise<void> {\n this._getCache?.clear()\n await this.sdk.deleteMany({})\n }\n\n async delete(id: K): Promise<boolean> {\n this._getCache?.delete(id)\n\n const filter = { _id: id } as Filter<V>\n const result = await this.sdk.deleteOne(filter)\n return result.deletedCount > 0\n }\n\n async get(id: K): Promise<V | undefined> {\n if (this._getCache) {\n const getCacheResult = this._getCache.get(id)\n if (getCacheResult) {\n return getCacheResult\n }\n }\n const filter = { _id: id } as Filter<V>\n const doc = await this.sdk.findOne(filter)\n return isNull(doc) ? undefined : stripMongoId(doc)\n }\n\n async getMany(ids: K[]): Promise<V[]> {\n /* const results = await Promise.all(ids.map(async (id) => {\n return await this.get(id)\n }))\n return results.filter(exists) */\n const cache = this._getCache\n const idSet = new Set(ids)\n const results: V[] = []\n if (cache) {\n const getCacheResult = ids.map(id => ([id, cache.get(id)])).filter(([, item]) => item !== undefined) as [K, V][]\n for (const [id] of getCacheResult) {\n idSet.delete(id)\n }\n results.push(...getCacheResult.map(([, item]) => item))\n }\n const filter = { _id: { $in: [...idSet] } } as Filter<V>\n const items = await (await this.sdk.find(filter)).toArray()\n for (const item of items) {\n const id = item._id\n const stripped = stripMongoId(item)\n if (cache) {\n cache.set(id as unknown as K, stripped)\n }\n results.push(stripped)\n }\n return results\n }\n\n async has(id: K): Promise<boolean> {\n if (this._getCache) {\n const getCacheResult = this._getCache.has(id)\n if (getCacheResult) {\n return getCacheResult\n }\n }\n const filter = { _id: id } as Filter<V>\n const exists = await this.sdk.findOne(filter)\n return isNull(exists) ? false : true\n }\n\n async set(id: K, data: V): Promise<void> {\n const filter = { _id: id } as Filter<V>\n const value = { ...data, _id: id } as OptionalUnlessRequiredId<V>\n await this.sdk.replaceOne(filter, value, { upsert: true })\n this._getCache?.set(id, data)\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n // TODO: Ensure index\n\n if (this.params.getCache?.enabled === true) {\n const maxEntries = this.params.getCache?.maxEntries ?? 5000\n this._getCache = new LRUCache<K, V>({ max: maxEntries })\n }\n }\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-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\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node 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 \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"schema\": \"network.xyo.diviner.chain.head.validation.config\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Submissions\",\n \"targetModuleFunction\": \"divine\"\n }\n ],\n \"inArchivist\": \"Submissions\",\n \"outArchivist\": \"Validated\",\n \"name\": \"HeadValidationDiviner\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 1000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainValidationSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"HeadValidationDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressBalancePollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressBalanceDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/5'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressTransferPollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressTransferDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Submissions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_submissions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/2\",\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 \"config\": {\n \"accountPath\": \"1/1/3'\",\n \"name\": \"AddressBalanceDiviner\",\n \"schema\": \"network.xyo.diviner.chain.address.balance.config\",\n \"map\": {\n \"lmdb\": {\n \"dbName\": \"summaries\",\n \"storeName\": \"address_balance\",\n \"location\": \".store\"\n }\n },\n \"archivist\": \"Validated\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/4'\",\n \"name\": \"AddressTransferDiviner\",\n \"schema\": \"network.xyo.diviner.chain.address.transfer.config\",\n \"map\": {\n \"lmdb\": {\n \"dbName\": \"summaries\",\n \"storeName\": \"address_transfer\",\n \"location\": \".store\"\n }\n },\n \"archivist\": \"Validated\"\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\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"PendingTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_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/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nexport const ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nexport const PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","StatusCodes","assertEx","asyncHandler","asAddress","toAddress","isModuleIdentifierPart","StatusCodes","handler","req","res","next","address","rawAddress","params","node","app","asAddress","undefined","mod","resolve","direction","json","state","isModuleIdentifierPart","moduleIdentifier","toAddress","moduleAddress","assertEx","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","assertEx","asyncHandler","asAddress","isAddress","toAddress","isQueryBoundWitness","ModuleErrorBuilder","StatusCodes","BoundWitnessSchema","ModuleConfigSchema","DEFAULT_DEPTH","getQueryConfig","mod","req","bw","payloads","nestedBwAddresses","flat","filter","payload","schema","BoundWitnessSchema","map","addresses","address","length","allowed","Object","fromEntries","queries","security","ModuleConfigSchema","handler","req","res","next","returnError","code","message","details","error","ModuleErrorBuilder","build","locals","rawResponse","status","json","address","params","node","app","bw","payloads","Array","isArray","body","isAddress","StatusCodes","BAD_REQUEST","isQueryBoundWitness","modules","normalizedAddress","toAddress","typedAddress","asAddress","byAddress","undefined","resolve","maxDepth","byName","direction","moduleAddress","assertEx","redirect","TEMPORARY_REDIRECT","NOT_FOUND","length","mod","queryConfig","getQueryConfig","queryResult","query","ex","INTERNAL_SERVER_ERROR","postAddress","asyncHandler","addNodeRoutes","app","defaultModule","node","address","defaultModuleEndpoint","get","_req","res","redirect","StatusCodes","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","getAddress","postAddress","sendStatus","NOT_FOUND","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","NodeNetworkStakeViewer","NodeStepRewardsByPositionViewer","NodeXyoViewer","RewardMultipliers","NodeXyoRunner","rpcEngineFromConnection","XyoBaseConnection","addRpcRoutes","app","stakedChainContext","initRewardsCache","node","runner","NodeXyoRunner","networkStakeViewer","NodeNetworkStakeViewer","create","context","console","log","start","viewer","NodeXyoViewer","rewardMultipliers","RewardMultipliers","stepRewardsByPositionViewer","NodeStepRewardsByPositionViewer","connection","XyoBaseConnection","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","stakedChainContext","initRewardsCache","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","node","eventsReader","stakedChainContext","initRewardsCache","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","toEthAddress","isDefined","isString","asArchivistInstance","boot","EthereumChainStake","EthereumChainStakeEvents","findMostRecentBlock","StakedXyoChainV2__factory","HDWallet","readPayloadMapFromStore","assertEx","hexFrom","isHex","isDefined","getChainId","config","chainId","assertEx","evm","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","assertEx","isDefined","InfuraWebSocketProvider","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraWebSocketProvider","getInfuraProviderConfig","config","projectId","assertEx","evm","infura","projectSecret","getChainId","assertEx","asAddress","ZERO_ADDRESS","BaseMongoSdk","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","AddressBalanceDivinerV2","AddressTransferDiviner","ArchivistSyncDiviner","HeadValidationDiviner","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","StepSizes","hasMongoConfig","Semaphore","assertEx","AbstractCreatable","creatable","isNull","LRUCache","stripMongoId","doc","_id","rest","MongoMap","AbstractCreatable","_getCache","sdk","assertEx","params","clear","deleteMany","delete","id","filter","result","deleteOne","deletedCount","get","getCacheResult","findOne","isNull","undefined","getMany","ids","cache","idSet","Set","results","map","item","push","$in","items","find","toArray","stripped","set","has","exists","data","value","replaceOne","upsert","startHandler","getCache","enabled","maxEntries","LRUCache","max","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","balanceSummaryMap","transferSummaryMap","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","sdkBalanceSummaryMap","BaseMongoSdk","collection","MongoMap","create","sdk","getCache","enabled","maxEntries","sdkTransferSummaryMap","AddressBalanceDivinerV2","summaryMap","stepSemaphores","StepSizes","map","Semaphore","AddressTransferDiviner","chainId","chain","id","assertEx","asAddress","ZERO_ADDRESS","HeadValidationDiviner","allowedProducers","producer","allowlist","MemoryArchivist","MemorySentinel","ViewArchivist","ArchivistSyncDiviner","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","node","port","boot","isDefined","wallet","fromPhrase","provider","initInfuraProvider","contractAddress","chain","id","contract","StakedXyoChainV2__factory","connect","toEthAddress","nodeContext","eventsReader","EthereumChainStakeEvents","create","start","stakeChainReader","EthereumChainStake","rootNode","getNode","chainArchivist","asArchivistInstance","resolve","required","chainMap","readPayloadMapFromStore","resolvedNode","stakedChainContext","chainId","events","stake","store","head","findMostRecentBlock","_hash","block","mods","Promise","all","map","mod","app","getApp","initRewardsCache","server","listen","setTimeout"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StakedChainContextRead
|
|
1
|
+
import type { StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk';
|
|
2
2
|
import type { Express } from 'express';
|
|
3
|
-
export declare const addRoutes: (app: Express,
|
|
3
|
+
export declare const addRoutes: (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => Promise<void>;
|
|
4
4
|
//# sourceMappingURL=addRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,SAAS,GAAU,KAAK,OAAO,EAAE,oBAAoB,sBAAsB,EAAE,mBAAmB,OAAO,kBAInH,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type StakedChainContextRead
|
|
1
|
+
import { type StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk';
|
|
2
2
|
import type { Express } from 'express';
|
|
3
|
-
export declare const addRpcRoutes: (app: Express,
|
|
3
|
+
export declare const addRpcRoutes: (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => Promise<void>;
|
|
4
4
|
//# sourceMappingURL=addRpcRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAK9F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,eAAO,MAAM,YAAY,GAAU,KAAK,OAAO,EAAE,oBAAoB,sBAAsB,EAAE,mBAAmB,OAAO,kBAmCtH,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAO5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAK3D,OAAO,KAAK,EAAE,MAAM,EAA0B,MAAM,+BAA+B,CAAA;AAgCnF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,GAAU,SAAS,gBAAgB,gHA8CxD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/chain-api",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.28",
|
|
4
4
|
"description": "XYO Layer One API",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -49,39 +49,39 @@
|
|
|
49
49
|
"@opentelemetry/instrumentation": "~0.207.0",
|
|
50
50
|
"@opentelemetry/instrumentation-express": "~0.56.0",
|
|
51
51
|
"@opentelemetry/instrumentation-http": "~0.207.0",
|
|
52
|
-
"@xylabs/assert": "~5.0.
|
|
53
|
-
"@xylabs/creatable": "~5.0.
|
|
54
|
-
"@xylabs/express": "~5.0.
|
|
55
|
-
"@xylabs/hex": "~5.0.
|
|
56
|
-
"@xylabs/logger": "~5.0.
|
|
57
|
-
"@xylabs/mongo": "~5.0.
|
|
58
|
-
"@xylabs/typeof": "~5.0.
|
|
59
|
-
"@xyo-network/archivist-memory": "~5.1.
|
|
60
|
-
"@xyo-network/archivist-model": "~5.1.
|
|
61
|
-
"@xyo-network/archivist-mongodb": "~5.1.
|
|
62
|
-
"@xyo-network/archivist-view": "~5.1.
|
|
52
|
+
"@xylabs/assert": "~5.0.18",
|
|
53
|
+
"@xylabs/creatable": "~5.0.18",
|
|
54
|
+
"@xylabs/express": "~5.0.18",
|
|
55
|
+
"@xylabs/hex": "~5.0.18",
|
|
56
|
+
"@xylabs/logger": "~5.0.18",
|
|
57
|
+
"@xylabs/mongo": "~5.0.18",
|
|
58
|
+
"@xylabs/typeof": "~5.0.18",
|
|
59
|
+
"@xyo-network/archivist-memory": "~5.1.17",
|
|
60
|
+
"@xyo-network/archivist-model": "~5.1.17",
|
|
61
|
+
"@xyo-network/archivist-mongodb": "~5.1.17",
|
|
62
|
+
"@xyo-network/archivist-view": "~5.1.17",
|
|
63
63
|
"@xyo-network/bios": "~7.1.1",
|
|
64
|
-
"@xyo-network/boundwitness-model": "~5.1.
|
|
65
|
-
"@xyo-network/chain-ethereum": "~1.15.
|
|
66
|
-
"@xyo-network/chain-modules": "~1.15.
|
|
67
|
-
"@xyo-network/chain-protocol": "~1.15.
|
|
68
|
-
"@xyo-network/chain-rpc": "~1.15.
|
|
69
|
-
"@xyo-network/chain-telemetry": "~1.15.
|
|
70
|
-
"@xyo-network/manifest-model": "~5.1.
|
|
71
|
-
"@xyo-network/manifest-wrapper": "~5.1.
|
|
72
|
-
"@xyo-network/module-abstract": "~5.1.
|
|
73
|
-
"@xyo-network/module-factory-locator": "~5.1.
|
|
74
|
-
"@xyo-network/module-model": "~5.1.
|
|
75
|
-
"@xyo-network/node-model": "~5.1.
|
|
76
|
-
"@xyo-network/payload-builder": "~5.1.
|
|
77
|
-
"@xyo-network/payload-model": "~5.1.
|
|
78
|
-
"@xyo-network/sentinel-memory": "~5.1.
|
|
64
|
+
"@xyo-network/boundwitness-model": "~5.1.17",
|
|
65
|
+
"@xyo-network/chain-ethereum": "~1.15.28",
|
|
66
|
+
"@xyo-network/chain-modules": "~1.15.28",
|
|
67
|
+
"@xyo-network/chain-protocol": "~1.15.28",
|
|
68
|
+
"@xyo-network/chain-rpc": "~1.15.28",
|
|
69
|
+
"@xyo-network/chain-telemetry": "~1.15.28",
|
|
70
|
+
"@xyo-network/manifest-model": "~5.1.17",
|
|
71
|
+
"@xyo-network/manifest-wrapper": "~5.1.17",
|
|
72
|
+
"@xyo-network/module-abstract": "~5.1.17",
|
|
73
|
+
"@xyo-network/module-factory-locator": "~5.1.17",
|
|
74
|
+
"@xyo-network/module-model": "~5.1.17",
|
|
75
|
+
"@xyo-network/node-model": "~5.1.17",
|
|
76
|
+
"@xyo-network/payload-builder": "~5.1.17",
|
|
77
|
+
"@xyo-network/payload-model": "~5.1.17",
|
|
78
|
+
"@xyo-network/sentinel-memory": "~5.1.17",
|
|
79
79
|
"@xyo-network/typechain": "~4.0.10",
|
|
80
|
-
"@xyo-network/wallet": "~5.1.
|
|
81
|
-
"@xyo-network/wallet-model": "~5.1.
|
|
82
|
-
"@xyo-network/xl1-protocol": "~1.12.
|
|
83
|
-
"@xyo-network/xl1-protocol-sdk": "~1.15.
|
|
84
|
-
"@xyo-network/xl1-rpc": "~1.15.
|
|
80
|
+
"@xyo-network/wallet": "~5.1.17",
|
|
81
|
+
"@xyo-network/wallet-model": "~5.1.17",
|
|
82
|
+
"@xyo-network/xl1-protocol": "~1.12.102",
|
|
83
|
+
"@xyo-network/xl1-protocol-sdk": "~1.15.28",
|
|
84
|
+
"@xyo-network/xl1-rpc": "~1.15.28",
|
|
85
85
|
"async-mutex": "~0.5.0",
|
|
86
86
|
"compression": "~1.8.1",
|
|
87
87
|
"cors": "~2.8.5",
|
|
@@ -96,27 +96,27 @@
|
|
|
96
96
|
"@types/cors": "~2.8.19",
|
|
97
97
|
"@types/express": "5.0.5",
|
|
98
98
|
"@types/express-serve-static-core": "~5.1.0",
|
|
99
|
-
"@types/node": "~24.
|
|
100
|
-
"@xylabs/base": "~5.0.
|
|
101
|
-
"@xylabs/object": "~5.0.
|
|
102
|
-
"@xylabs/promise": "~5.0.
|
|
103
|
-
"@xylabs/ts-scripts-yarn3": "~7.
|
|
104
|
-
"@xylabs/tsconfig": "~7.
|
|
105
|
-
"@xyo-network/account": "~5.1.
|
|
106
|
-
"@xyo-network/account-model": "~5.1.
|
|
107
|
-
"@xyo-network/archivist-abstract": "~5.1.
|
|
99
|
+
"@types/node": "~24.10.0",
|
|
100
|
+
"@xylabs/base": "~5.0.18",
|
|
101
|
+
"@xylabs/object": "~5.0.18",
|
|
102
|
+
"@xylabs/promise": "~5.0.18",
|
|
103
|
+
"@xylabs/ts-scripts-yarn3": "~7.2.4",
|
|
104
|
+
"@xylabs/tsconfig": "~7.2.4",
|
|
105
|
+
"@xyo-network/account": "~5.1.17",
|
|
106
|
+
"@xyo-network/account-model": "~5.1.17",
|
|
107
|
+
"@xyo-network/archivist-abstract": "~5.1.17",
|
|
108
108
|
"@xyo-network/bios-model": "~7.1.1",
|
|
109
|
-
"@xyo-network/boundwitness-builder": "~5.1.
|
|
110
|
-
"@xyo-network/module-abstract-mongodb": "~5.1.
|
|
111
|
-
"@xyo-network/module-model-mongodb": "~5.1.
|
|
112
|
-
"@xyo-network/node-memory": "~5.1.
|
|
113
|
-
"@xyo-network/xl1-protocol": "~1.12.
|
|
109
|
+
"@xyo-network/boundwitness-builder": "~5.1.17",
|
|
110
|
+
"@xyo-network/module-abstract-mongodb": "~5.1.17",
|
|
111
|
+
"@xyo-network/module-model-mongodb": "~5.1.17",
|
|
112
|
+
"@xyo-network/node-memory": "~5.1.17",
|
|
113
|
+
"@xyo-network/xl1-protocol": "~1.12.102",
|
|
114
114
|
"dotenv": "~17.2.3",
|
|
115
|
-
"eslint": "^9.39.
|
|
115
|
+
"eslint": "^9.39.1",
|
|
116
116
|
"nodemon": "~3.1.10",
|
|
117
117
|
"tslib": "~2.8.1",
|
|
118
118
|
"typescript": "~5.9.3",
|
|
119
|
-
"vitest": "~
|
|
119
|
+
"vitest": "~4.0.7",
|
|
120
120
|
"vitest-mock-extended": "~3.1.0"
|
|
121
121
|
},
|
|
122
122
|
"engines": {
|
package/src/server/app.ts
CHANGED
|
@@ -37,7 +37,7 @@ export const getApp = async (
|
|
|
37
37
|
app.use(customPoweredByHeader)
|
|
38
38
|
disableCaseSensitiveRouting(app)
|
|
39
39
|
app.node = node
|
|
40
|
-
await addRoutes(app,
|
|
40
|
+
await addRoutes(app, stakedChainContext, initRewardsCache)
|
|
41
41
|
app.use(standardErrors)
|
|
42
42
|
return app
|
|
43
43
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { StakedChainContextRead
|
|
1
|
+
import type { StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'
|
|
2
2
|
import type { Express } from 'express'
|
|
3
3
|
|
|
4
4
|
import { addNodeRoutes } from './address/index.ts'
|
|
5
5
|
import { addDataLakeRoutes } from './dataLake/index.ts'
|
|
6
6
|
import { addRpcRoutes } from './rpc/index.ts'
|
|
7
7
|
|
|
8
|
-
export const addRoutes = async (app: Express,
|
|
9
|
-
await addRpcRoutes(app,
|
|
8
|
+
export const addRoutes = async (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {
|
|
9
|
+
await addRpcRoutes(app, stakedChainContext, initRewardsCache)
|
|
10
10
|
addDataLakeRoutes(app)
|
|
11
11
|
addNodeRoutes(app)
|
|
12
12
|
}
|
|
@@ -1,25 +1,42 @@
|
|
|
1
1
|
import { setRawResponseFormat } from '@xylabs/express'
|
|
2
|
-
import { NodeXyoViewer } from '@xyo-network/chain-rpc'
|
|
3
2
|
import {
|
|
4
|
-
|
|
5
|
-
} from '@xyo-network/
|
|
3
|
+
NodeNetworkStakeViewer, NodeStepRewardsByPositionViewer, NodeXyoViewer,
|
|
4
|
+
} from '@xyo-network/chain-rpc'
|
|
5
|
+
import { RewardMultipliers, type StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'
|
|
6
6
|
import {
|
|
7
7
|
NodeXyoRunner, rpcEngineFromConnection,
|
|
8
8
|
XyoBaseConnection,
|
|
9
9
|
} from '@xyo-network/xl1-rpc'
|
|
10
10
|
import type { Express } from 'express'
|
|
11
11
|
|
|
12
|
-
export const addRpcRoutes = async (app: Express,
|
|
12
|
+
export const addRpcRoutes = async (app: Express, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => {
|
|
13
13
|
const { node } = app
|
|
14
14
|
const runner = new NodeXyoRunner(node)
|
|
15
|
+
const networkStakeViewer = await NodeNetworkStakeViewer.create({ context: stakedChainContext })
|
|
16
|
+
|
|
17
|
+
console.log('Initializing NodeNetworkStakeViewer...')
|
|
18
|
+
await networkStakeViewer.start()
|
|
19
|
+
console.log('Initialized NodeNetworkStakeViewer.')
|
|
20
|
+
|
|
15
21
|
const viewer = await NodeXyoViewer.create({
|
|
16
|
-
node,
|
|
22
|
+
node, rewardMultipliers: RewardMultipliers, initRewardsCache, networkStakeViewer,
|
|
17
23
|
})
|
|
18
|
-
|
|
24
|
+
|
|
25
|
+
console.log('Initializing NodeXyoViewer...')
|
|
19
26
|
await viewer.start()
|
|
20
|
-
console.log('Initialized
|
|
27
|
+
console.log('Initialized NodeXyoViewer.')
|
|
28
|
+
|
|
29
|
+
const stepRewardsByPositionViewer = await NodeStepRewardsByPositionViewer.create({
|
|
30
|
+
context: stakedChainContext,
|
|
31
|
+
rewardMultipliers: RewardMultipliers,
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
console.log('Initializing NodeStepRewardsByPositionViewer...')
|
|
35
|
+
await stepRewardsByPositionViewer.start()
|
|
36
|
+
console.log('Initialized NodeStepRewardsByPositionViewer.')
|
|
37
|
+
|
|
21
38
|
const connection = new XyoBaseConnection({ runner, viewer })
|
|
22
|
-
const engine = rpcEngineFromConnection(connection)
|
|
39
|
+
const engine = rpcEngineFromConnection(connection, networkStakeViewer)
|
|
23
40
|
|
|
24
41
|
app.post('/rpc', (req, res) => {
|
|
25
42
|
setRawResponseFormat(res)
|
package/src/server/server.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Hash } from '@xylabs/hex'
|
|
2
3
|
import { toEthAddress } from '@xylabs/hex'
|
|
3
4
|
import type { Logger } from '@xylabs/logger'
|
|
4
5
|
import { isDefined, isString } from '@xylabs/typeof'
|
|
@@ -83,9 +84,9 @@ export const getServer = async (context: GetServerContext) => {
|
|
|
83
84
|
events: eventsReader,
|
|
84
85
|
stake: stakeChainReader,
|
|
85
86
|
store: { chainMap },
|
|
86
|
-
head: async () => {
|
|
87
|
+
head: async (): Promise<[Hash, number]> => {
|
|
87
88
|
const head = await findMostRecentBlock(chainArchivist)
|
|
88
|
-
return assertEx(head?._hash, () => 'No head found in chainArchivist')
|
|
89
|
+
return [assertEx(head?._hash, () => 'No head found in chainArchivist'), assertEx(head?.block, () => 'No head found in chainArchivist')]
|
|
89
90
|
},
|
|
90
91
|
}
|
|
91
92
|
const mods = await resolvedNode.resolve('*')
|