@xyo-network/chain-api 1.16.25 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -258,36 +258,59 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
258
258
  // src/server/routes/rpc/routes/addRpcRoutes.ts
259
259
  import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
260
260
  import { assertEx as assertEx2 } from "@xylabs/sdk-js";
261
+ import { asArchivistInstance as asArchivistInstance2 } from "@xyo-network/archivist-model";
261
262
  import { NodeXyoViewer } from "@xyo-network/chain-rpc";
262
- import { SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer } from "@xyo-network/chain-viewers";
263
+ import { SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer, SimpleStepViewer } from "@xyo-network/chain-viewers";
263
264
  import { StepSizes } from "@xyo-network/xl1-protocol";
264
- import { RewardMultipliers } from "@xyo-network/xl1-protocol-sdk";
265
+ import { RewardMultipliers, SimpleAccountBalanceViewer, SimpleBlockViewer } from "@xyo-network/xl1-protocol-sdk";
265
266
  import { NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection } from "@xyo-network/xl1-rpc";
266
267
  import { Semaphore } from "async-mutex";
267
- var addRpcRoutes = /* @__PURE__ */ __name(async (app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache) => {
268
+ async function chainArchivistFromNode(node) {
269
+ const chainArchivist = assertEx2(asArchivistInstance2(await node.resolve("Chain:Validated"), {
270
+ required: true
271
+ }), () => "FinalizedArchivist not found in node");
272
+ return chainArchivist;
273
+ }
274
+ __name(chainArchivistFromNode, "chainArchivistFromNode");
275
+ var addRpcRoutes = /* @__PURE__ */ __name(async (app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache) => {
268
276
  const { node } = app;
269
277
  const runner = new NodeXyoRunner(node);
278
+ const finalizedArchivist = await chainArchivistFromNode(node);
279
+ const balancesStepSummaryContext = {
280
+ head: stakedChainContext.head,
281
+ stepSemaphores: StepSizes.map(() => new Semaphore(20)),
282
+ store: stakedChainContext.store,
283
+ chainId: stakedChainContext.chainId,
284
+ summaryMap: balancesSummaryMap
285
+ };
286
+ const transfersSummaryContext = {
287
+ head: stakedChainContext.head,
288
+ stepSemaphores: StepSizes.map(() => new Semaphore(20)),
289
+ store: stakedChainContext.store,
290
+ chainId: stakedChainContext.chainId,
291
+ summaryMap: transfersSummaryMap
292
+ };
270
293
  const networkStakeViewer = await SimpleNetworkStakeViewer.create({
271
294
  context: stakedChainContext
272
295
  });
273
296
  console.log("Initializing SimpleNetworkStakeViewer...");
274
297
  assertEx2(await networkStakeViewer.start(), () => "Failed to start SimpleNetworkStakeViewer");
275
298
  console.log("Initialized SimpleNetworkStakeViewer.");
276
- const viewer = await NodeXyoViewer.create({
277
- node,
278
- rewardMultipliers: RewardMultipliers,
279
- initRewardsCache,
280
- accountBalanceViewer,
299
+ const blockViewer = await SimpleBlockViewer.create({
281
300
  context: stakedChainContext,
282
- transfersSummaryContext: {
283
- ...stakedChainContext,
284
- stepSemaphores: StepSizes.map(() => new Semaphore(20)),
285
- summaryMap: transferSummaryMap
286
- }
301
+ finalizedArchivist
287
302
  });
288
- console.log("Initializing NodeXyoViewer...");
289
- assertEx2(await viewer.start(), () => "Failed to start NodeXyoViewer");
290
- console.log("Initialized NodeXyoViewer.");
303
+ console.log("Initializing SimpleBlockViewer...");
304
+ assertEx2(await blockViewer.start(), () => "Failed to start SimpleBlockViewer");
305
+ console.log("Initialized SimpleBlockViewer.");
306
+ const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
307
+ blockViewer,
308
+ context: balancesStepSummaryContext,
309
+ transfersSummaryContext
310
+ });
311
+ console.log("Initializing SimpleAccountBalanceViewer...");
312
+ assertEx2(await accountBalanceViewer.start(), () => "Failed to start SimpleAccountBalanceViewer");
313
+ console.log("Initialized SimpleAccountBalanceViewer.");
291
314
  const stepRewardsByPositionViewer = await SimpleStepRewardsByPositionViewer.create({
292
315
  context: stakedChainContext,
293
316
  rewardMultipliers: RewardMultipliers
@@ -295,11 +318,35 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app, transferSummaryMap, staked
295
318
  console.log("Initializing SimpleStepRewardsByPositionViewer...");
296
319
  assertEx2(await stepRewardsByPositionViewer.start(), () => "Failed to start SimpleStepRewardsByPositionViewer");
297
320
  console.log("Initialized SimpleStepRewardsByPositionViewer.");
321
+ const networkStakeStepRewardsViewer = {
322
+ position: stepRewardsByPositionViewer
323
+ };
324
+ const stepViewer = await SimpleStepViewer.create({
325
+ chainContext: stakedChainContext,
326
+ networkStakeStepRewardsViewer
327
+ });
328
+ console.log("Initializing SimpleStepViewer...");
329
+ assertEx2(await stepViewer.start(), () => "Failed to start SimpleStepViewer");
330
+ console.log("Initialized SimpleStepViewer.");
331
+ const viewer = await NodeXyoViewer.create({
332
+ node,
333
+ rewardMultipliers: RewardMultipliers,
334
+ initRewardsCache,
335
+ blockViewer,
336
+ context: stakedChainContext,
337
+ networkStakeViewer,
338
+ accountBalanceViewer,
339
+ stepViewer,
340
+ transfersSummaryContext
341
+ });
342
+ console.log("Initializing NodeXyoViewer...");
343
+ assertEx2(await viewer.start(), () => "Failed to start NodeXyoViewer");
344
+ console.log("Initialized NodeXyoViewer.");
298
345
  const connection = new XyoBaseConnection({
299
346
  runner,
300
347
  viewer
301
348
  });
302
- const engine = rpcEngineFromConnection(connection, networkStakeViewer);
349
+ const engine = rpcEngineFromConnection(connection);
303
350
  app.post("/rpc", (req, res) => {
304
351
  setRawResponseFormat2(res);
305
352
  engine.handle(req.body, (_, rpcResponse) => {
@@ -309,14 +356,14 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app, transferSummaryMap, staked
309
356
  }, "addRpcRoutes");
310
357
 
311
358
  // src/server/routes/addRoutes.ts
312
- var addRoutes = /* @__PURE__ */ __name(async (app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache) => {
313
- await addRpcRoutes(app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache);
359
+ var addRoutes = /* @__PURE__ */ __name(async (app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache) => {
360
+ await addRpcRoutes(app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache);
314
361
  addDataLakeRoutes(app);
315
362
  addNodeRoutes(app);
316
363
  }, "addRoutes");
317
364
 
318
365
  // src/server/app.ts
319
- var getApp = /* @__PURE__ */ __name(async (node, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache) => {
366
+ var getApp = /* @__PURE__ */ __name(async (node, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache) => {
320
367
  addInstrumentation();
321
368
  const app = express2();
322
369
  app.set("etag", false);
@@ -331,19 +378,17 @@ var getApp = /* @__PURE__ */ __name(async (node, transferSummaryMap, stakedChain
331
378
  app.use(customPoweredByHeader);
332
379
  disableCaseSensitiveRouting(app);
333
380
  app.node = node;
334
- await addRoutes(app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache);
381
+ await addRoutes(app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache);
335
382
  app.use(standardErrors);
336
383
  return app;
337
384
  }, "getApp");
338
385
 
339
386
  // src/server/server.ts
340
387
  import { assertEx as assertEx3 } from "@xylabs/sdk-js";
341
- import { createProducerChainStakeIntentBlock, initBalanceSummaryMap, initChainIterator, initChainStakeViewer, initProducerAccount, initServerNode, initServerWallet, initTransferSummaryMap } from "@xyo-network/chain-orchestration";
342
- import { createGenesisBlock, findMostRecentBlock } from "@xyo-network/chain-protocol";
343
- import { blockViewerFromChainIteratorAndArchivist } from "@xyo-network/chain-services";
344
- import { asXL1, asXL1BlockRange, StepSizes as StepSizes2, XL1Amount } from "@xyo-network/xl1-protocol";
345
- import { readPayloadMapFromStore, SimpleAccountBalanceViewer } from "@xyo-network/xl1-protocol-sdk";
346
- import { Semaphore as Semaphore2 } from "async-mutex";
388
+ import { createProducerChainStakeIntentBlock, initBalanceSummaryMap, initChainStakeViewer, initProducerAccount, initServerNode, initServerWallet, initTransferSummaryMap } from "@xyo-network/chain-orchestration";
389
+ import { createGenesisBlock } from "@xyo-network/chain-protocol";
390
+ import { asXL1, asXL1BlockRange, XL1Amount } from "@xyo-network/xl1-protocol";
391
+ import { findMostRecentBlock, readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
347
392
  var hostname = "::";
348
393
  async function getServer(context) {
349
394
  const { config, logger, node: providedNode } = context;
@@ -353,11 +398,11 @@ async function getServer(context) {
353
398
  logger
354
399
  });
355
400
  const stakeChainViewer = await initChainStakeViewer(config, logger);
356
- const balanceSummaryMap = assertEx3(await initBalanceSummaryMap({
401
+ const balancesSummaryMap = assertEx3(await initBalanceSummaryMap({
357
402
  config,
358
403
  logger
359
404
  }), () => "Balance Summary Map not initialized");
360
- const transferSummaryMap = assertEx3(await initTransferSummaryMap({
405
+ const transfersSummaryMap = assertEx3(await initTransferSummaryMap({
361
406
  config,
362
407
  logger
363
408
  }), () => "Transfer Summary Map not initialized");
@@ -366,8 +411,8 @@ async function getServer(context) {
366
411
  logger,
367
412
  wallet,
368
413
  node: providedNode,
369
- transferSummaryMap,
370
- balanceSummaryMap
414
+ transfersSummaryMap,
415
+ balancesSummaryMap
371
416
  });
372
417
  const chainMap = readPayloadMapFromStore(chainArchivist);
373
418
  const payloads = await chainArchivist.next();
@@ -413,32 +458,7 @@ async function getServer(context) {
413
458
  await Promise.all(mods.map((mod) => {
414
459
  return mod.start?.() ?? (() => true);
415
460
  }));
416
- const chainIterator = await initChainIterator({
417
- config,
418
- logger,
419
- chainMap,
420
- head: assertEx3(await findMostRecentBlock(chainArchivist), () => "No head found in chainArchivist")
421
- });
422
- const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist);
423
- const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
424
- context: {
425
- chainId: stakedChainContext.chainId,
426
- store: stakedChainContext.store,
427
- head: stakedChainContext.head,
428
- stepSemaphores: StepSizes2.map(() => new Semaphore2(20)),
429
- summaryMap: balanceSummaryMap
430
- },
431
- transferContext: {
432
- chainId: stakedChainContext.chainId,
433
- store: stakedChainContext.store,
434
- head: stakedChainContext.head,
435
- stepSemaphores: StepSizes2.map(() => new Semaphore2(20)),
436
- summaryMap: transferSummaryMap
437
- },
438
- blockViewer
439
- });
440
- assertEx3(await accountBalanceViewer.start(), () => "Failed to start SimpleAccountBalanceViewer");
441
- const app = await getApp(node, transferSummaryMap, stakedChainContext, accountBalanceViewer, config.api.initRewardsCache);
461
+ const app = await getApp(node, transfersSummaryMap, balancesSummaryMap, stakedChainContext, config.api.initRewardsCache);
442
462
  const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`));
443
463
  server.setTimeout(2e4);
444
464
  return server;
@@ -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"],"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 { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AccountBalanceViewer,\n MapType, StakedChainContextRead, TransfersStepSummary,\n} 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 transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n stakedChainContext: StakedChainContextRead,\n accountBalanceViewer: AccountBalanceViewer,\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, transferSummaryMap, stakedChainContext, accountBalanceViewer, 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 { asyncHandler } from '@xylabs/express'\nimport { asAddress, isDefined } from '@xylabs/sdk-js'\nimport { isModuleName } 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: moduleIdentifier } = req.params\n const { node } = req.app\n const address = asAddress(moduleIdentifier)\n if (isDefined(address)) {\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 (isModuleName(moduleIdentifier)) {\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${mod.address}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { asyncHandler } from '@xylabs/express'\nimport type { JsonObject } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx,\n isAddress,\n toAddress,\n} from '@xylabs/sdk-js'\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, isDefined } from '@xylabs/sdk-js'\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 { assertEx } from '@xylabs/sdk-js'\nimport { NodeXyoViewer } from '@xyo-network/chain-rpc'\nimport { SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer } from '@xyo-network/chain-viewers'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\nimport type {\n AccountBalanceViewer,\n MapType, StakedChainContextRead, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { RewardMultipliers } from '@xyo-network/xl1-protocol-sdk'\nimport {\n NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\nimport { Semaphore } from 'async-mutex'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n stakedChainContext: StakedChainContextRead,\n accountBalanceViewer: AccountBalanceViewer,\n initRewardsCache?: boolean,\n) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n const networkStakeViewer = await SimpleNetworkStakeViewer.create({ context: stakedChainContext })\n\n console.log('Initializing SimpleNetworkStakeViewer...')\n assertEx(await networkStakeViewer.start(), () => 'Failed to start SimpleNetworkStakeViewer')\n console.log('Initialized SimpleNetworkStakeViewer.')\n\n const viewer = await NodeXyoViewer.create({\n node,\n rewardMultipliers: RewardMultipliers,\n initRewardsCache,\n accountBalanceViewer,\n context: stakedChainContext,\n transfersSummaryContext: {\n ...stakedChainContext, stepSemaphores: StepSizes.map(() => new Semaphore(20)), summaryMap: transferSummaryMap,\n },\n })\n\n console.log('Initializing NodeXyoViewer...')\n assertEx(await viewer.start(), () => 'Failed to start NodeXyoViewer')\n console.log('Initialized NodeXyoViewer.')\n\n const stepRewardsByPositionViewer = await SimpleStepRewardsByPositionViewer.create({\n context: stakedChainContext,\n rewardMultipliers: RewardMultipliers,\n })\n\n console.log('Initializing SimpleStepRewardsByPositionViewer...')\n assertEx(await stepRewardsByPositionViewer.start(), () => 'Failed to start SimpleStepRewardsByPositionViewer')\n console.log('Initialized SimpleStepRewardsByPositionViewer.')\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 { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AccountBalanceViewer,\n MapType, StakedChainContextRead, TransfersStepSummary,\n} 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 (\n app: Express,\n transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n stakedChainContext: StakedChainContextRead,\n accountBalanceViewer: AccountBalanceViewer,\n initRewardsCache?: boolean,\n) => {\n await addRpcRoutes(app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n createProducerChainStakeIntentBlock,\n initBalanceSummaryMap,\n initChainIterator,\n initChainStakeViewer, initProducerAccount,\n initServerNode,\n initServerWallet,\n initTransferSummaryMap,\n} from '@xyo-network/chain-orchestration'\nimport { createGenesisBlock, findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport { blockViewerFromChainIteratorAndArchivist } from '@xyo-network/chain-services'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asXL1, asXL1BlockRange, StepSizes, XL1Amount,\n} from '@xyo-network/xl1-protocol'\nimport type { Config, StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport { readPayloadMapFromStore, SimpleAccountBalanceViewer } from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport async function getServer(context: GetServerContext) {\n const {\n config, logger, node: providedNode,\n } = context\n const { port } = context.config.api\n const wallet = await initServerWallet({ config, logger })\n const stakeChainViewer = await initChainStakeViewer(config, logger)\n\n const balanceSummaryMap = assertEx(await initBalanceSummaryMap({ config, logger }), () => 'Balance Summary Map not initialized')\n const transferSummaryMap = assertEx(await initTransferSummaryMap({ config, logger }), () => 'Transfer Summary Map not initialized')\n\n const { node, chainArchivist } = await initServerNode({\n config,\n logger,\n wallet,\n node: providedNode,\n transferSummaryMap,\n balanceSummaryMap,\n })\n\n const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)\n\n const payloads = await chainArchivist.next()\n\n if (payloads.length === 0) {\n logger?.warn('[API] No blocks found in chain archivist, creating genesis block')\n const producerAccount = await initProducerAccount({ config, logger })\n const chainId = stakeChainViewer.chainId\n const genesisRewardAddress = config.chain.genesisRewardAddress ?? producerAccount.address\n const block0 = await createGenesisBlock(producerAccount, chainId, XL1Amount.fromXL1(asXL1(1_000_000n)).atto, genesisRewardAddress)\n await chainArchivist.insert([...block0[1].flat(), block0[0]])\n console.log('[API] Genesis block created and inserted into chain archivist')\n const block1 = await createProducerChainStakeIntentBlock(block0[0], producerAccount, asXL1BlockRange([0, 10_000], true))\n await chainArchivist.insert([...block1[1].flat(), block1[0]])\n console.log(`[API] Producer declared: ${producerAccount.address}`)\n }\n\n const stakedChainContext: StakedChainContextRead = {\n chainId: stakeChainViewer.chainId,\n stake: stakeChainViewer,\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'), head?.block ?? 0]\n },\n }\n const mods = await node.resolve('*')\n await Promise.all(mods.map((mod) => {\n return mod.start?.() ?? (() => true)\n }))\n\n const chainIterator = await initChainIterator({\n config,\n logger,\n chainMap,\n head: assertEx(await findMostRecentBlock(chainArchivist), () => 'No head found in chainArchivist'),\n })\n\n const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)\n\n const accountBalanceViewer = await SimpleAccountBalanceViewer.create({\n context: {\n chainId: stakedChainContext.chainId,\n store: stakedChainContext.store,\n head: stakedChainContext.head,\n stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n summaryMap: balanceSummaryMap,\n },\n transferContext: {\n chainId: stakedChainContext.chainId,\n store: stakedChainContext.store,\n head: stakedChainContext.head,\n stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n summaryMap: transferSummaryMap,\n },\n blockViewer,\n })\n\n assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')\n\n const app = await getApp(node, transferSummaryMap, stakedChainContext, accountBalanceViewer, 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"],"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","asyncHandler","asAddress","isDefined","isModuleName","StatusCodes","handler","req","res","next","address","moduleIdentifier","params","node","app","asAddress","isDefined","mod","resolve","direction","json","state","isModuleName","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","asyncHandler","asAddress","assertEx","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","assertEx","NodeXyoViewer","SimpleNetworkStakeViewer","SimpleStepRewardsByPositionViewer","StepSizes","RewardMultipliers","NodeXyoRunner","rpcEngineFromConnection","XyoBaseConnection","Semaphore","addRpcRoutes","app","transferSummaryMap","stakedChainContext","accountBalanceViewer","initRewardsCache","node","runner","NodeXyoRunner","networkStakeViewer","SimpleNetworkStakeViewer","create","context","console","log","assertEx","start","viewer","NodeXyoViewer","rewardMultipliers","RewardMultipliers","transfersSummaryContext","stepSemaphores","StepSizes","map","Semaphore","summaryMap","stepRewardsByPositionViewer","SimpleStepRewardsByPositionViewer","connection","XyoBaseConnection","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","transferSummaryMap","stakedChainContext","accountBalanceViewer","initRewardsCache","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","node","transferSummaryMap","stakedChainContext","accountBalanceViewer","initRewardsCache","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","createProducerChainStakeIntentBlock","initBalanceSummaryMap","initChainIterator","initChainStakeViewer","initProducerAccount","initServerNode","initServerWallet","initTransferSummaryMap","createGenesisBlock","findMostRecentBlock","blockViewerFromChainIteratorAndArchivist","asXL1","asXL1BlockRange","StepSizes","XL1Amount","readPayloadMapFromStore","SimpleAccountBalanceViewer","Semaphore","hostname","getServer","context","config","logger","node","providedNode","port","api","wallet","initServerWallet","stakeChainViewer","initChainStakeViewer","balanceSummaryMap","assertEx","initBalanceSummaryMap","transferSummaryMap","initTransferSummaryMap","chainArchivist","initServerNode","chainMap","readPayloadMapFromStore","payloads","next","length","warn","producerAccount","initProducerAccount","chainId","genesisRewardAddress","chain","address","block0","createGenesisBlock","XL1Amount","fromXL1","asXL1","atto","insert","flat","console","log","block1","createProducerChainStakeIntentBlock","asXL1BlockRange","stakedChainContext","stake","store","head","findMostRecentBlock","_hash","block","mods","resolve","Promise","all","map","mod","start","chainIterator","initChainIterator","blockViewer","blockViewerFromChainIteratorAndArchivist","accountBalanceViewer","SimpleAccountBalanceViewer","create","stepSemaphores","StepSizes","Semaphore","summaryMap","transferContext","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"],"sourcesContent":["import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AccountBalanceViewer,\n BalancesStepSummary,\n MapType, StakedChainContextRead, TransfersStepSummary,\n} 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 transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,\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, transfersSummaryMap, balancesSummaryMap, 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 { asyncHandler } from '@xylabs/express'\nimport { asAddress, isDefined } from '@xylabs/sdk-js'\nimport { isModuleName } 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: moduleIdentifier } = req.params\n const { node } = req.app\n const address = asAddress(moduleIdentifier)\n if (isDefined(address)) {\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 (isModuleName(moduleIdentifier)) {\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${mod.address}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { asyncHandler } from '@xylabs/express'\nimport type { JsonObject } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx,\n isAddress,\n toAddress,\n} from '@xylabs/sdk-js'\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, isDefined } from '@xylabs/sdk-js'\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 { assertEx } from '@xylabs/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { NodeXyoViewer } from '@xyo-network/chain-rpc'\nimport {\n SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer, SimpleStepViewer,\n} from '@xyo-network/chain-viewers'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\nimport type {\n BalancesStepSummary,\n BalanceStepSummaryContext,\n MapType, NetworkStakeStepRewardsViewer, StakedChainContextRead, TransfersStepSummary,\n TransfersStepSummaryContext,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n RewardMultipliers, SimpleAccountBalanceViewer, SimpleBlockViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\nimport { Semaphore } from 'async-mutex'\nimport type { Express } from 'express'\n\nasync function chainArchivistFromNode(node: NodeInstance) {\n const chainArchivist = assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ), () => 'FinalizedArchivist not found in node')\n return chainArchivist\n}\n\n// eslint-disable-next-line max-statements\nexport const addRpcRoutes = async (\n app: Express,\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,\n stakedChainContext: StakedChainContextRead,\n initRewardsCache?: boolean,\n) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n\n const finalizedArchivist = await chainArchivistFromNode(node)\n\n const balancesStepSummaryContext = {\n head: stakedChainContext.head,\n stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n store: stakedChainContext.store,\n chainId: stakedChainContext.chainId,\n summaryMap: balancesSummaryMap,\n } satisfies BalanceStepSummaryContext\n\n const transfersSummaryContext = {\n head: stakedChainContext.head,\n stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n store: stakedChainContext.store,\n chainId: stakedChainContext.chainId,\n summaryMap: transfersSummaryMap,\n } satisfies TransfersStepSummaryContext\n\n const networkStakeViewer = await SimpleNetworkStakeViewer.create({ context: stakedChainContext })\n\n console.log('Initializing SimpleNetworkStakeViewer...')\n assertEx(await networkStakeViewer.start(), () => 'Failed to start SimpleNetworkStakeViewer')\n console.log('Initialized SimpleNetworkStakeViewer.')\n\n const blockViewer = await SimpleBlockViewer.create({ context: stakedChainContext, finalizedArchivist })\n\n console.log('Initializing SimpleBlockViewer...')\n assertEx(await blockViewer.start(), () => 'Failed to start SimpleBlockViewer')\n console.log('Initialized SimpleBlockViewer.')\n\n const accountBalanceViewer = await SimpleAccountBalanceViewer.create({\n blockViewer,\n context: balancesStepSummaryContext,\n transfersSummaryContext,\n })\n\n console.log('Initializing SimpleAccountBalanceViewer...')\n assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')\n console.log('Initialized SimpleAccountBalanceViewer.')\n\n const stepRewardsByPositionViewer = await SimpleStepRewardsByPositionViewer.create({\n context: stakedChainContext,\n rewardMultipliers: RewardMultipliers,\n })\n\n console.log('Initializing SimpleStepRewardsByPositionViewer...')\n assertEx(await stepRewardsByPositionViewer.start(), () => 'Failed to start SimpleStepRewardsByPositionViewer')\n console.log('Initialized SimpleStepRewardsByPositionViewer.')\n\n const networkStakeStepRewardsViewer: NetworkStakeStepRewardsViewer = { position: stepRewardsByPositionViewer }\n const stepViewer = await SimpleStepViewer.create({ chainContext: stakedChainContext, networkStakeStepRewardsViewer })\n\n console.log('Initializing SimpleStepViewer...')\n assertEx(await stepViewer.start(), () => 'Failed to start SimpleStepViewer')\n console.log('Initialized SimpleStepViewer.')\n\n const viewer = await NodeXyoViewer.create({\n node,\n rewardMultipliers: RewardMultipliers,\n initRewardsCache,\n blockViewer,\n context: stakedChainContext,\n networkStakeViewer,\n accountBalanceViewer,\n stepViewer,\n transfersSummaryContext,\n })\n\n console.log('Initializing NodeXyoViewer...')\n assertEx(await viewer.start(), () => 'Failed to start NodeXyoViewer')\n console.log('Initialized NodeXyoViewer.')\n\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 { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BalancesStepSummary,\n MapType, StakedChainContextRead, TransfersStepSummary,\n} 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 (\n app: Express,\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,\n stakedChainContext: StakedChainContextRead,\n initRewardsCache?: boolean,\n) => {\n await addRpcRoutes(app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n createProducerChainStakeIntentBlock,\n initBalanceSummaryMap,\n initChainStakeViewer, initProducerAccount,\n initServerNode,\n initServerWallet,\n initTransferSummaryMap,\n} from '@xyo-network/chain-orchestration'\nimport { createGenesisBlock } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asXL1, asXL1BlockRange, XL1Amount,\n} from '@xyo-network/xl1-protocol'\nimport type { Config, StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'\nimport { findMostRecentBlock, readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport async function getServer(context: GetServerContext) {\n const {\n config, logger, node: providedNode,\n } = context\n const { port } = context.config.api\n const wallet = await initServerWallet({ config, logger })\n const stakeChainViewer = await initChainStakeViewer(config, logger)\n\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap({ config, logger }), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap({ config, logger }), () => 'Transfer Summary Map not initialized')\n\n const { node, chainArchivist } = await initServerNode({\n config,\n logger,\n wallet,\n node: providedNode,\n transfersSummaryMap,\n balancesSummaryMap,\n })\n\n const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)\n\n const payloads = await chainArchivist.next()\n\n if (payloads.length === 0) {\n logger?.warn('[API] No blocks found in chain archivist, creating genesis block')\n const producerAccount = await initProducerAccount({ config, logger })\n const chainId = stakeChainViewer.chainId\n const genesisRewardAddress = config.chain.genesisRewardAddress ?? producerAccount.address\n const block0 = await createGenesisBlock(producerAccount, chainId, XL1Amount.fromXL1(asXL1(1_000_000n)).atto, genesisRewardAddress)\n await chainArchivist.insert([...block0[1].flat(), block0[0]])\n console.log('[API] Genesis block created and inserted into chain archivist')\n const block1 = await createProducerChainStakeIntentBlock(block0[0], producerAccount, asXL1BlockRange([0, 10_000], true))\n await chainArchivist.insert([...block1[1].flat(), block1[0]])\n console.log(`[API] Producer declared: ${producerAccount.address}`)\n }\n\n const stakedChainContext: StakedChainContextRead = {\n chainId: stakeChainViewer.chainId,\n stake: stakeChainViewer,\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'), head?.block ?? 0]\n },\n }\n const mods = await node.resolve('*')\n await Promise.all(mods.map((mod) => {\n return mod.start?.() ?? (() => true)\n }))\n\n // const chainIterator = await initChainIterator({\n // config,\n // logger,\n // chainMap,\n // head: assertEx(await findMostRecentBlock(chainArchivist), () => 'No head found in chainArchivist'),\n // })\n\n // const blockViewer = chainIterator\n\n // const accountBalanceViewer = await SimpleAccountBalanceViewer.create({\n // context: {\n // chainId: stakedChainContext.chainId,\n // store: stakedChainContext.store,\n // head: stakedChainContext.head,\n // stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n // summaryMap: balanceSummaryMap,\n // },\n // transferContext: {\n // chainId: stakedChainContext.chainId,\n // store: stakedChainContext.store,\n // head: stakedChainContext.head,\n // stepSemaphores: StepSizes.map(() => new Semaphore(20)),\n // summaryMap: transferSummaryMap,\n // },\n // blockViewer,\n // })\n\n // assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')\n\n const app = await getApp(node, transfersSummaryMap, balancesSummaryMap, 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"],"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","asyncHandler","asAddress","isDefined","isModuleName","StatusCodes","handler","req","res","next","address","moduleIdentifier","params","node","app","asAddress","isDefined","mod","resolve","direction","json","state","isModuleName","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","asyncHandler","asAddress","assertEx","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","assertEx","asArchivistInstance","NodeXyoViewer","SimpleNetworkStakeViewer","SimpleStepRewardsByPositionViewer","SimpleStepViewer","StepSizes","RewardMultipliers","SimpleAccountBalanceViewer","SimpleBlockViewer","NodeXyoRunner","rpcEngineFromConnection","XyoBaseConnection","Semaphore","chainArchivistFromNode","node","chainArchivist","assertEx","asArchivistInstance","resolve","required","addRpcRoutes","app","transfersSummaryMap","balancesSummaryMap","stakedChainContext","initRewardsCache","runner","NodeXyoRunner","finalizedArchivist","balancesStepSummaryContext","head","stepSemaphores","StepSizes","map","Semaphore","store","chainId","summaryMap","transfersSummaryContext","networkStakeViewer","SimpleNetworkStakeViewer","create","context","console","log","start","blockViewer","SimpleBlockViewer","accountBalanceViewer","SimpleAccountBalanceViewer","stepRewardsByPositionViewer","SimpleStepRewardsByPositionViewer","rewardMultipliers","RewardMultipliers","networkStakeStepRewardsViewer","position","stepViewer","SimpleStepViewer","chainContext","viewer","NodeXyoViewer","connection","XyoBaseConnection","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","transfersSummaryMap","balancesSummaryMap","stakedChainContext","initRewardsCache","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","node","transfersSummaryMap","balancesSummaryMap","stakedChainContext","initRewardsCache","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","createProducerChainStakeIntentBlock","initBalanceSummaryMap","initChainStakeViewer","initProducerAccount","initServerNode","initServerWallet","initTransferSummaryMap","createGenesisBlock","asXL1","asXL1BlockRange","XL1Amount","findMostRecentBlock","readPayloadMapFromStore","hostname","getServer","context","config","logger","node","providedNode","port","api","wallet","initServerWallet","stakeChainViewer","initChainStakeViewer","balancesSummaryMap","assertEx","initBalanceSummaryMap","transfersSummaryMap","initTransferSummaryMap","chainArchivist","initServerNode","chainMap","readPayloadMapFromStore","payloads","next","length","warn","producerAccount","initProducerAccount","chainId","genesisRewardAddress","chain","address","block0","createGenesisBlock","XL1Amount","fromXL1","asXL1","atto","insert","flat","console","log","block1","createProducerChainStakeIntentBlock","asXL1BlockRange","stakedChainContext","stake","store","head","findMostRecentBlock","_hash","block","mods","resolve","Promise","all","map","mod","start","app","getApp","initRewardsCache","server","listen","setTimeout"]}
@@ -1,6 +1,6 @@
1
1
  import type { NodeInstance } from '@xyo-network/node-model';
2
2
  import type { WithStorageMeta } from '@xyo-network/payload-model';
3
- import type { AccountBalanceViewer, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
3
+ import type { BalancesStepSummary, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
4
4
  import type { Express } from 'express';
5
- export declare const getApp: (node: NodeInstance, transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, stakedChainContext: StakedChainContextRead, accountBalanceViewer: AccountBalanceViewer, initRewardsCache?: boolean) => Promise<Express>;
5
+ export declare const getApp: (node: NodeInstance, transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => Promise<Express>;
6
6
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EACtD,MAAM,+BAA+B,CAAA;AAGtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GACjB,MAAM,YAAY,EAClB,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC1E,oBAAoB,sBAAsB,EAC1C,sBAAsB,oBAAoB,EAC1C,mBAAmB,OAAO,KACzB,OAAO,CAAC,OAAO,CAiBjB,CAAA"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAEV,mBAAmB,EACnB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EACtD,MAAM,+BAA+B,CAAA;AAGtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GACjB,MAAM,YAAY,EAClB,qBAAqB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC3E,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,EACzE,oBAAoB,sBAAsB,EAC1C,mBAAmB,OAAO,KACzB,OAAO,CAAC,OAAO,CAiBjB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { WithStorageMeta } from '@xyo-network/payload-model';
2
- import type { AccountBalanceViewer, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
2
+ import type { BalancesStepSummary, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
3
3
  import type { Express } from 'express';
4
- export declare const addRoutes: (app: Express, transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, stakedChainContext: StakedChainContextRead, accountBalanceViewer: AccountBalanceViewer, initRewardsCache?: boolean) => Promise<void>;
4
+ export declare const addRoutes: (app: Express, transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => Promise<void>;
5
5
  //# 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,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EACtD,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,SAAS,GACpB,KAAK,OAAO,EACZ,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC1E,oBAAoB,sBAAsB,EAC1C,sBAAsB,oBAAoB,EAC1C,mBAAmB,OAAO,kBAK3B,CAAA"}
1
+ {"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EACtD,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,SAAS,GACpB,KAAK,OAAO,EACZ,qBAAqB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC3E,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,EACzE,oBAAoB,sBAAsB,EAC1C,mBAAmB,OAAO,kBAK3B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { WithStorageMeta } from '@xyo-network/payload-model';
2
- import type { AccountBalanceViewer, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
2
+ import type { BalancesStepSummary, MapType, StakedChainContextRead, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk';
3
3
  import type { Express } from 'express';
4
- export declare const addRpcRoutes: (app: Express, transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, stakedChainContext: StakedChainContextRead, accountBalanceViewer: AccountBalanceViewer, initRewardsCache?: boolean) => Promise<void>;
4
+ export declare const addRpcRoutes: (app: Express, transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>, balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>, stakedChainContext: StakedChainContextRead, initRewardsCache?: boolean) => Promise<void>;
5
5
  //# 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":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EACtD,MAAM,+BAA+B,CAAA;AAMtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,EACZ,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC1E,oBAAoB,sBAAsB,EAC1C,sBAAsB,oBAAoB,EAC1C,mBAAmB,OAAO,kBA2C3B,CAAA"}
1
+ {"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EACV,mBAAmB,EAEnB,OAAO,EAAiC,sBAAsB,EAAE,oBAAoB,EAErF,MAAM,+BAA+B,CAAA;AAQtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAWtC,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,EACZ,qBAAqB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAC3E,oBAAoB,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,EACzE,oBAAoB,sBAAsB,EAC1C,mBAAmB,OAAO,kBAsF3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAalD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAK3D,OAAO,KAAK,EAAE,MAAM,EAA0B,MAAM,+BAA+B,CAAA;AASnF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,+GAoFxD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAWlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAK3D,OAAO,KAAK,EAAE,MAAM,EAA0B,MAAM,+BAA+B,CAAA;AAQnF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,+GAoFxD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.16.25",
3
+ "version": "1.17.0",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -52,23 +52,22 @@
52
52
  "@opentelemetry/instrumentation": "~0.208.0",
53
53
  "@opentelemetry/instrumentation-express": "~0.57.0",
54
54
  "@opentelemetry/instrumentation-http": "~0.208.0",
55
- "@xylabs/express": "~5.0.42",
56
- "@xylabs/sdk-js": "~5.0.42",
55
+ "@xylabs/express": "~5.0.46",
56
+ "@xylabs/sdk-js": "~5.0.46",
57
57
  "@xyo-network/archivist-model": "~5.2.10",
58
58
  "@xyo-network/boundwitness-model": "~5.2.10",
59
- "@xyo-network/chain-orchestration": "~1.16.25",
60
- "@xyo-network/chain-protocol": "~1.16.25",
61
- "@xyo-network/chain-rpc": "~1.16.25",
62
- "@xyo-network/chain-services": "~1.16.25",
63
- "@xyo-network/chain-viewers": "~1.16.25",
59
+ "@xyo-network/chain-orchestration": "~1.17.0",
60
+ "@xyo-network/chain-protocol": "~1.17.0",
61
+ "@xyo-network/chain-rpc": "~1.17.0",
62
+ "@xyo-network/chain-viewers": "~1.17.0",
64
63
  "@xyo-network/module-abstract": "~5.2.10",
65
64
  "@xyo-network/module-model": "~5.2.10",
66
65
  "@xyo-network/node-model": "~5.2.10",
67
66
  "@xyo-network/payload-builder": "~5.2.10",
68
67
  "@xyo-network/payload-model": "~5.2.10",
69
- "@xyo-network/xl1-protocol": "~1.14.13",
70
- "@xyo-network/xl1-protocol-sdk": "~1.16.25",
71
- "@xyo-network/xl1-rpc": "~1.16.25",
68
+ "@xyo-network/xl1-protocol": "~1.14.15",
69
+ "@xyo-network/xl1-protocol-sdk": "~1.17.0",
70
+ "@xyo-network/xl1-rpc": "~1.17.0",
72
71
  "async-mutex": "~0.5.0",
73
72
  "compression": "~1.8.1",
74
73
  "cors": "~2.8.5",
@@ -82,7 +81,7 @@
82
81
  "@types/express": "5.0.5",
83
82
  "@types/express-serve-static-core": "~5.1.0",
84
83
  "@types/node": "~24.10.1",
85
- "@xylabs/sdk-js": "~5.0.42",
84
+ "@xylabs/sdk-js": "~5.0.46",
86
85
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
87
86
  "@xylabs/tsconfig": "~7.2.8",
88
87
  "@xyo-network/account": "~5.2.10",
@@ -90,16 +89,17 @@
90
89
  "@xyo-network/archivist-abstract": "~5.2.10",
91
90
  "@xyo-network/bios-model": "~7.2.0",
92
91
  "@xyo-network/boundwitness-builder": "~5.2.10",
92
+ "@xyo-network/chain-services": "~1.17.0",
93
93
  "@xyo-network/module-abstract-mongodb": "~5.2.10",
94
94
  "@xyo-network/module-model-mongodb": "~5.2.10",
95
95
  "@xyo-network/node-memory": "~5.2.10",
96
- "@xyo-network/xl1-protocol": "~1.14.13",
96
+ "@xyo-network/xl1-protocol": "~1.14.15",
97
97
  "dotenv": "~17.2.3",
98
98
  "eslint": "^9.39.1",
99
99
  "nodemon": "~3.1.11",
100
100
  "tslib": "~2.8.1",
101
101
  "typescript": "~5.9.3",
102
- "vitest": "~4.0.13",
102
+ "vitest": "~4.0.14",
103
103
  "vitest-mock-extended": "~3.1.0"
104
104
  },
105
105
  "engines": {
package/src/server/app.ts CHANGED
@@ -8,10 +8,12 @@ import {
8
8
  standardErrors,
9
9
  standardResponses,
10
10
  } from '@xylabs/express'
11
+ import type { ReadArchivist } from '@xyo-network/archivist-model'
11
12
  import type { NodeInstance } from '@xyo-network/node-model'
12
13
  import type { WithStorageMeta } from '@xyo-network/payload-model'
13
14
  import type {
14
15
  AccountBalanceViewer,
16
+ BalancesStepSummary,
15
17
  MapType, StakedChainContextRead, TransfersStepSummary,
16
18
  } from '@xyo-network/xl1-protocol-sdk'
17
19
  import compression from 'compression'
@@ -24,9 +26,9 @@ import { addRoutes } from './routes/index.ts'
24
26
 
25
27
  export const getApp = async (
26
28
  node: NodeInstance,
27
- transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
29
+ transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
30
+ balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,
28
31
  stakedChainContext: StakedChainContextRead,
29
- accountBalanceViewer: AccountBalanceViewer,
30
32
  initRewardsCache?: boolean,
31
33
  ): Promise<Express> => {
32
34
  addInstrumentation()
@@ -42,7 +44,7 @@ export const getApp = async (
42
44
  app.use(customPoweredByHeader)
43
45
  disableCaseSensitiveRouting(app)
44
46
  app.node = node
45
- await addRoutes(app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache)
47
+ await addRoutes(app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache)
46
48
  app.use(standardErrors)
47
49
  return app
48
50
  }
@@ -1,6 +1,6 @@
1
1
  import type { WithStorageMeta } from '@xyo-network/payload-model'
2
2
  import type {
3
- AccountBalanceViewer,
3
+ BalancesStepSummary,
4
4
  MapType, StakedChainContextRead, TransfersStepSummary,
5
5
  } from '@xyo-network/xl1-protocol-sdk'
6
6
  import type { Express } from 'express'
@@ -11,12 +11,12 @@ import { addRpcRoutes } from './rpc/index.ts'
11
11
 
12
12
  export const addRoutes = async (
13
13
  app: Express,
14
- transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
14
+ transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
15
+ balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,
15
16
  stakedChainContext: StakedChainContextRead,
16
- accountBalanceViewer: AccountBalanceViewer,
17
17
  initRewardsCache?: boolean,
18
18
  ) => {
19
- await addRpcRoutes(app, transferSummaryMap, stakedChainContext, accountBalanceViewer, initRewardsCache)
19
+ await addRpcRoutes(app, transfersSummaryMap, balancesSummaryMap, stakedChainContext, initRewardsCache)
20
20
  addDataLakeRoutes(app)
21
21
  addNodeRoutes(app)
22
22
  }
@@ -1,49 +1,86 @@
1
1
  import { setRawResponseFormat } from '@xylabs/express'
2
2
  import { assertEx } from '@xylabs/sdk-js'
3
+ import { asArchivistInstance } from '@xyo-network/archivist-model'
3
4
  import { NodeXyoViewer } from '@xyo-network/chain-rpc'
4
- import { SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer } from '@xyo-network/chain-viewers'
5
+ import {
6
+ SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer, SimpleStepViewer,
7
+ } from '@xyo-network/chain-viewers'
8
+ import type { NodeInstance } from '@xyo-network/node-model'
5
9
  import type { WithStorageMeta } from '@xyo-network/payload-model'
6
10
  import { StepSizes } from '@xyo-network/xl1-protocol'
7
11
  import type {
8
- AccountBalanceViewer,
9
- MapType, StakedChainContextRead, TransfersStepSummary,
12
+ BalancesStepSummary,
13
+ BalanceStepSummaryContext,
14
+ MapType, NetworkStakeStepRewardsViewer, StakedChainContextRead, TransfersStepSummary,
15
+ TransfersStepSummaryContext,
16
+ } from '@xyo-network/xl1-protocol-sdk'
17
+ import {
18
+ RewardMultipliers, SimpleAccountBalanceViewer, SimpleBlockViewer,
10
19
  } from '@xyo-network/xl1-protocol-sdk'
11
- import { RewardMultipliers } from '@xyo-network/xl1-protocol-sdk'
12
20
  import {
13
21
  NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection,
14
22
  } from '@xyo-network/xl1-rpc'
15
23
  import { Semaphore } from 'async-mutex'
16
24
  import type { Express } from 'express'
17
25
 
26
+ async function chainArchivistFromNode(node: NodeInstance) {
27
+ const chainArchivist = assertEx(asArchivistInstance(
28
+ await node.resolve('Chain:Validated'),
29
+ { required: true },
30
+ ), () => 'FinalizedArchivist not found in node')
31
+ return chainArchivist
32
+ }
33
+
34
+ // eslint-disable-next-line max-statements
18
35
  export const addRpcRoutes = async (
19
36
  app: Express,
20
- transferSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
37
+ transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>,
38
+ balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>,
21
39
  stakedChainContext: StakedChainContextRead,
22
- accountBalanceViewer: AccountBalanceViewer,
23
40
  initRewardsCache?: boolean,
24
41
  ) => {
25
42
  const { node } = app
26
43
  const runner = new NodeXyoRunner(node)
44
+
45
+ const finalizedArchivist = await chainArchivistFromNode(node)
46
+
47
+ const balancesStepSummaryContext = {
48
+ head: stakedChainContext.head,
49
+ stepSemaphores: StepSizes.map(() => new Semaphore(20)),
50
+ store: stakedChainContext.store,
51
+ chainId: stakedChainContext.chainId,
52
+ summaryMap: balancesSummaryMap,
53
+ } satisfies BalanceStepSummaryContext
54
+
55
+ const transfersSummaryContext = {
56
+ head: stakedChainContext.head,
57
+ stepSemaphores: StepSizes.map(() => new Semaphore(20)),
58
+ store: stakedChainContext.store,
59
+ chainId: stakedChainContext.chainId,
60
+ summaryMap: transfersSummaryMap,
61
+ } satisfies TransfersStepSummaryContext
62
+
27
63
  const networkStakeViewer = await SimpleNetworkStakeViewer.create({ context: stakedChainContext })
28
64
 
29
65
  console.log('Initializing SimpleNetworkStakeViewer...')
30
66
  assertEx(await networkStakeViewer.start(), () => 'Failed to start SimpleNetworkStakeViewer')
31
67
  console.log('Initialized SimpleNetworkStakeViewer.')
32
68
 
33
- const viewer = await NodeXyoViewer.create({
34
- node,
35
- rewardMultipliers: RewardMultipliers,
36
- initRewardsCache,
37
- accountBalanceViewer,
38
- context: stakedChainContext,
39
- transfersSummaryContext: {
40
- ...stakedChainContext, stepSemaphores: StepSizes.map(() => new Semaphore(20)), summaryMap: transferSummaryMap,
41
- },
69
+ const blockViewer = await SimpleBlockViewer.create({ context: stakedChainContext, finalizedArchivist })
70
+
71
+ console.log('Initializing SimpleBlockViewer...')
72
+ assertEx(await blockViewer.start(), () => 'Failed to start SimpleBlockViewer')
73
+ console.log('Initialized SimpleBlockViewer.')
74
+
75
+ const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
76
+ blockViewer,
77
+ context: balancesStepSummaryContext,
78
+ transfersSummaryContext,
42
79
  })
43
80
 
44
- console.log('Initializing NodeXyoViewer...')
45
- assertEx(await viewer.start(), () => 'Failed to start NodeXyoViewer')
46
- console.log('Initialized NodeXyoViewer.')
81
+ console.log('Initializing SimpleAccountBalanceViewer...')
82
+ assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')
83
+ console.log('Initialized SimpleAccountBalanceViewer.')
47
84
 
48
85
  const stepRewardsByPositionViewer = await SimpleStepRewardsByPositionViewer.create({
49
86
  context: stakedChainContext,
@@ -54,8 +91,31 @@ export const addRpcRoutes = async (
54
91
  assertEx(await stepRewardsByPositionViewer.start(), () => 'Failed to start SimpleStepRewardsByPositionViewer')
55
92
  console.log('Initialized SimpleStepRewardsByPositionViewer.')
56
93
 
94
+ const networkStakeStepRewardsViewer: NetworkStakeStepRewardsViewer = { position: stepRewardsByPositionViewer }
95
+ const stepViewer = await SimpleStepViewer.create({ chainContext: stakedChainContext, networkStakeStepRewardsViewer })
96
+
97
+ console.log('Initializing SimpleStepViewer...')
98
+ assertEx(await stepViewer.start(), () => 'Failed to start SimpleStepViewer')
99
+ console.log('Initialized SimpleStepViewer.')
100
+
101
+ const viewer = await NodeXyoViewer.create({
102
+ node,
103
+ rewardMultipliers: RewardMultipliers,
104
+ initRewardsCache,
105
+ blockViewer,
106
+ context: stakedChainContext,
107
+ networkStakeViewer,
108
+ accountBalanceViewer,
109
+ stepViewer,
110
+ transfersSummaryContext,
111
+ })
112
+
113
+ console.log('Initializing NodeXyoViewer...')
114
+ assertEx(await viewer.start(), () => 'Failed to start NodeXyoViewer')
115
+ console.log('Initialized NodeXyoViewer.')
116
+
57
117
  const connection = new XyoBaseConnection({ runner, viewer })
58
- const engine = rpcEngineFromConnection(connection, networkStakeViewer)
118
+ const engine = rpcEngineFromConnection(connection)
59
119
 
60
120
  app.post('/rpc', (req, res) => {
61
121
  setRawResponseFormat(res)
@@ -3,22 +3,19 @@ import { assertEx } from '@xylabs/sdk-js'
3
3
  import {
4
4
  createProducerChainStakeIntentBlock,
5
5
  initBalanceSummaryMap,
6
- initChainIterator,
7
6
  initChainStakeViewer, initProducerAccount,
8
7
  initServerNode,
9
8
  initServerWallet,
10
9
  initTransferSummaryMap,
11
10
  } from '@xyo-network/chain-orchestration'
12
- import { createGenesisBlock, findMostRecentBlock } from '@xyo-network/chain-protocol'
13
- import { blockViewerFromChainIteratorAndArchivist } from '@xyo-network/chain-services'
11
+ import { createGenesisBlock } from '@xyo-network/chain-protocol'
14
12
  import type { NodeInstance } from '@xyo-network/node-model'
15
13
  import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
16
14
  import {
17
- asXL1, asXL1BlockRange, StepSizes, XL1Amount,
15
+ asXL1, asXL1BlockRange, XL1Amount,
18
16
  } from '@xyo-network/xl1-protocol'
19
17
  import type { Config, StakedChainContextRead } from '@xyo-network/xl1-protocol-sdk'
20
- import { readPayloadMapFromStore, SimpleAccountBalanceViewer } from '@xyo-network/xl1-protocol-sdk'
21
- import { Semaphore } from 'async-mutex'
18
+ import { findMostRecentBlock, readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'
22
19
 
23
20
  import { getApp } from './app.ts'
24
21
 
@@ -39,16 +36,16 @@ export async function getServer(context: GetServerContext) {
39
36
  const wallet = await initServerWallet({ config, logger })
40
37
  const stakeChainViewer = await initChainStakeViewer(config, logger)
41
38
 
42
- const balanceSummaryMap = assertEx(await initBalanceSummaryMap({ config, logger }), () => 'Balance Summary Map not initialized')
43
- const transferSummaryMap = assertEx(await initTransferSummaryMap({ config, logger }), () => 'Transfer Summary Map not initialized')
39
+ const balancesSummaryMap = assertEx(await initBalanceSummaryMap({ config, logger }), () => 'Balance Summary Map not initialized')
40
+ const transfersSummaryMap = assertEx(await initTransferSummaryMap({ config, logger }), () => 'Transfer Summary Map not initialized')
44
41
 
45
42
  const { node, chainArchivist } = await initServerNode({
46
43
  config,
47
44
  logger,
48
45
  wallet,
49
46
  node: providedNode,
50
- transferSummaryMap,
51
- balanceSummaryMap,
47
+ transfersSummaryMap,
48
+ balancesSummaryMap,
52
49
  })
53
50
 
54
51
  const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)
@@ -82,36 +79,36 @@ export async function getServer(context: GetServerContext) {
82
79
  return mod.start?.() ?? (() => true)
83
80
  }))
84
81
 
85
- const chainIterator = await initChainIterator({
86
- config,
87
- logger,
88
- chainMap,
89
- head: assertEx(await findMostRecentBlock(chainArchivist), () => 'No head found in chainArchivist'),
90
- })
82
+ // const chainIterator = await initChainIterator({
83
+ // config,
84
+ // logger,
85
+ // chainMap,
86
+ // head: assertEx(await findMostRecentBlock(chainArchivist), () => 'No head found in chainArchivist'),
87
+ // })
91
88
 
92
- const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
89
+ // const blockViewer = chainIterator
93
90
 
94
- const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
95
- context: {
96
- chainId: stakedChainContext.chainId,
97
- store: stakedChainContext.store,
98
- head: stakedChainContext.head,
99
- stepSemaphores: StepSizes.map(() => new Semaphore(20)),
100
- summaryMap: balanceSummaryMap,
101
- },
102
- transferContext: {
103
- chainId: stakedChainContext.chainId,
104
- store: stakedChainContext.store,
105
- head: stakedChainContext.head,
106
- stepSemaphores: StepSizes.map(() => new Semaphore(20)),
107
- summaryMap: transferSummaryMap,
108
- },
109
- blockViewer,
110
- })
91
+ // const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
92
+ // context: {
93
+ // chainId: stakedChainContext.chainId,
94
+ // store: stakedChainContext.store,
95
+ // head: stakedChainContext.head,
96
+ // stepSemaphores: StepSizes.map(() => new Semaphore(20)),
97
+ // summaryMap: balanceSummaryMap,
98
+ // },
99
+ // transferContext: {
100
+ // chainId: stakedChainContext.chainId,
101
+ // store: stakedChainContext.store,
102
+ // head: stakedChainContext.head,
103
+ // stepSemaphores: StepSizes.map(() => new Semaphore(20)),
104
+ // summaryMap: transferSummaryMap,
105
+ // },
106
+ // blockViewer,
107
+ // })
111
108
 
112
- assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')
109
+ // assertEx(await accountBalanceViewer.start(), () => 'Failed to start SimpleAccountBalanceViewer')
113
110
 
114
- const app = await getApp(node, transferSummaryMap, stakedChainContext, accountBalanceViewer, config.api.initRewardsCache)
111
+ const app = await getApp(node, transfersSummaryMap, balancesSummaryMap, stakedChainContext, config.api.initRewardsCache)
115
112
  const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))
116
113
  server.setTimeout(20_000)
117
114
  return server