@xyo-network/chain-api 1.16.26 → 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.
- package/dist/node/index.mjs +77 -57
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/server/app.d.ts +2 -2
- package/dist/node/server/app.d.ts.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 +9 -9
- package/src/server/app.ts +5 -3
- package/src/server/routes/addRoutes.ts +4 -4
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +79 -19
- package/src/server/server.ts +33 -36
package/dist/node/index.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
|
277
|
-
node,
|
|
278
|
-
rewardMultipliers: RewardMultipliers,
|
|
279
|
-
initRewardsCache,
|
|
280
|
-
accountBalanceViewer,
|
|
299
|
+
const blockViewer = await SimpleBlockViewer.create({
|
|
281
300
|
context: stakedChainContext,
|
|
282
|
-
|
|
283
|
-
...stakedChainContext,
|
|
284
|
-
stepSemaphores: StepSizes.map(() => new Semaphore(20)),
|
|
285
|
-
summaryMap: transferSummaryMap
|
|
286
|
-
}
|
|
301
|
+
finalizedArchivist
|
|
287
302
|
});
|
|
288
|
-
console.log("Initializing
|
|
289
|
-
assertEx2(await
|
|
290
|
-
console.log("Initialized
|
|
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
|
|
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,
|
|
313
|
-
await addRpcRoutes(app,
|
|
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,
|
|
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,
|
|
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,
|
|
342
|
-
import { createGenesisBlock
|
|
343
|
-
import {
|
|
344
|
-
import {
|
|
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
|
|
401
|
+
const balancesSummaryMap = assertEx3(await initBalanceSummaryMap({
|
|
357
402
|
config,
|
|
358
403
|
logger
|
|
359
404
|
}), () => "Balance Summary Map not initialized");
|
|
360
|
-
const
|
|
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
|
-
|
|
370
|
-
|
|
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
|
|
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;
|
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"],"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":";;;;AAAA,SACEA,uBACAC,6BACAC,sCACAC,mBACAC,0BACAC,kBACAC,gBACAC,yBACK;AASP,OAAOC,iBAAiB;AACxB,OAAOC,UAAU;AAEjB,OAAOC,cAAa;;;ACrBpB,SAASC,gCAAgC;AACzC,SAASC,8BAA8B;AACvC,SAASC,2BAA2B;AAS7B,IAAMC,qBAAqB,6BAAA;AAChC,QAAMC,mBAAmB;IAAC,IAAIC,oBAAAA;IAAuB,IAAIC,uBAAAA;;AACzDC,2BAAyB;IAAEH;EAAiB,CAAA;AAC9C,GAHkC;;;ACVlC,SAASI,eAAAA,oBAAmB;;;ACD5B,SAASC,oBAAoB;AAC7B,SAASC,WAAWC,iBAAiB;AACrC,SAASC,oBAAoB;AAG7B,SAASC,mBAAmB;AAI5B,IAAMC,UAAwD,8BAAOC,KAAKC,KAAKC,SAAAA;AAC7E,QAAM,EAAEC,SAASC,iBAAgB,IAAKJ,IAAIK;AAC1C,QAAM,EAAEC,KAAI,IAAKN,IAAIO;AACrB,QAAMJ,UAAUK,UAAUJ,gBAAAA;AAC1B,MAAIK,UAAUN,OAAAA,GAAU;AACtB,QAAIO,MAAMJ,KAAKH,YAAYA,UAAUG,OAAQ,MAAMA,KAAKK,QAAQR,SAAS;MAAES,WAAW;IAAO,CAAA;AAC7F,QAAIF,KAAK;AACPT,UAAIY,KAAK,MAAMH,IAAII,MAAK,CAAA;AACxB;IACF;EACF;AACA,MAAIC,aAAaX,gBAAAA,GAAmB;AAClC,UAAMM,MAAM,MAAMJ,KAAKK,QAAQP,kBAAkB;MAAEQ,WAAW;IAAO,CAAA;AACrE,QAAIF,KAAK;AACPT,UAAIe,SAASC,YAAYC,mBAAmB,IAAIR,IAAIP,OAAO,EAAE;AAC7D;IACF;EACF;AACAD,OAAK,OAAA;AACP,GAnB8D;AAoBvD,IAAMiB,aAAaC,aAAarB,OAAAA;;;AC7BvC,SAASsB,gBAAAA,qBAAoB;AAE7B,SACEC,aAAAA,YAAWC,UACXC,WACAC,iBACK;AACP,SAASC,2BAAmD;AAC5D,SAASC,0BAA0B;AAInC,SAASC,eAAAA,oBAAmB;;;ACX5B,SAASC,0BAA0B;AAEnC,SAASC,0BAA0B;AAInC,IAAMC,gBAAgB;AAEf,IAAMC,iBAAiB,wBAACC,KAAqBC,KAAcC,IAAuBC,aAAAA;AAGvF,QAAMC,oBACFD,UACEE,KAAKP,aAAAA,EACNQ,OAAqB,CAACC,YAAqCA,SAASC,WAAWC,kBAAAA,EAC/EC,IAAIR,CAAAA,QAAMA,IAAGS,SAAS,KAAK,CAAA;AAEhC,QAAMA,YAAY;IAACT,GAAGS;OAAcP;IAAmBE,OAAOM,CAAAA,YAAWA,QAAQC,SAAS,CAAA;AAC1F,QAAMC,UAAUH,UAAUE,SAAS,IAAIE,OAAOC,YAAYhB,IAAIiB,QAAQP,IAAIF,CAAAA,WAAU;IAACA;IAAQG;GAAU,CAAA,IAAK,CAAC;AAC7G,QAAMO,WAAW;IAAEJ;EAAQ;AAC3B,SAAO;IAAEN,QAAQW;IAAoBD;EAAS;AAChD,GAb8B;;;ADU9B,IAAME,WAAsG,8BAAOC,KAAKC,KAAKC,SAAAA;AAC3H,QAAMC,cAAc,wBAACC,MAAcC,UAAU,qBAAqBC,YAAAA;AAChE,UAAMC,QAAQ,IAAIC,mBAAAA,EAAqBH,QAAQA,OAAAA,EAASC,QAAQA,OAAAA,EAASG,MAAK;AAC9ER,QAAIS,OAAOC,cAAc;AACzBV,QAAIW,OAAOR,IAAAA,EAAMS,KAAKN,KAAAA;AACtBL,SAAAA;EACF,GALoB;AAOpB,QAAM,EAAEY,QAAO,IAAKd,IAAIe;AACxB,QAAM,EAAEC,KAAI,IAAKhB,IAAIiB;AACrB,QAAM,CAACC,IAAIC,QAAAA,IAAYC,MAAMC,QAAQrB,IAAIsB,IAAI,IAAItB,IAAIsB,OAAO,CAAA;AAC5D,MAAI,CAACC,UAAUT,OAAAA,GAAU;AACvB,WAAOX,YAAYqB,aAAYC,aAAa,iBAAA;EAC9C;AAEA,MAAI,CAACP,IAAI;AACP,WAAOf,YAAYqB,aAAYC,aAAa,sBAAA;EAC9C;AAEA,MAAI,CAACC,oBAAoBR,EAAAA,GAAK;AAC5B,WAAOf,YAAYqB,aAAYC,aAAa,4BAAA;EAC9C;AAEA,MAAIE,UAA4B,CAAA;AAChC,QAAMC,oBAAoBC,UAAUf,OAAAA;AACpC,MAAIE,KAAKF,YAAYc,kBAAmBD,WAAU;IAACX;;OAC9C;AACH,UAAMc,eAAeC,WAAUjB,OAAAA;AAC/B,UAAMkB,YAAaF,iBAAiBG,SAAaA,SAAY,MAAMjB,KAAKkB,QAAQJ,cAAc;MAAEK,UAAU;IAAG,CAAA;AAE7G,QAAIH,UAAWL,WAAU;MAACK;;SACrB;AACH,YAAMI,SAAS,MAAMpB,KAAKkB,QAAQpB,SAAS;QAAEuB,WAAW;MAAO,CAAA;AAC/D,UAAID,QAAQ;AACV,cAAME,gBAAgBC,SAASH,QAAQtB,SAAS,MAAM,wCAAA;AACtDb,YAAIuC,SAAShB,aAAYiB,oBAAoB,IAAIH,aAAAA,EAAe;AAChE;MACF,OAAO;AACL,eAAOnC,YAAYqB,aAAYkB,WAAW,oBAAoB;UAAE5B;QAAQ,CAAA;MAC1E;IACF;EACF;AAEA,MAAIa,QAAQgB,SAAS,GAAG;AACtB,UAAMC,MAAMjB,QAAQ,CAAA;AACpB,UAAMkB,cAAcC,eAAeF,KAAK5C,KAAKkB,IAAIC,QAAAA;AACjD,QAAI;AACF,YAAM4B,cAAc,MAAMH,IAAII,MAAM9B,IAAIC,UAAU0B,WAAAA;AAClD5C,UAAIY,KAAKkC,WAAAA;IACX,SAASE,IAAI;AACX,aAAO9C,YAAYqB,aAAY0B,uBAAuB,gBAAgB;QAAE7C,SAAU4C,IAAc5C,WAAW;MAAgB,CAAA;IAC7H;EACF,OAAO;AACL,WAAOF,YAAYqB,aAAYkB,WAAW,oBAAoB;MAAE5B;IAAQ,CAAA;EAC1E;AACF,GAvD4G;AAyDrG,IAAMqC,cAAcC,cAAarD,QAAAA;;;AFtEjC,IAAMsD,gBAAgB,wBAACC,QAAAA;AAC5B,QAAMC,gBAAgBD,IAAIE;AAC1B,QAAMC,UAAUF,cAAcE;AAC9B,QAAMC,wBAAwB,IAAID,OAAAA;AAClCH,MAAIK,IAAI,KAAK,CAACC,MAAMC,QAAQA,IAAIC,SAASC,aAAYC,mBAAmBN,qBAAAA,CAAAA;AACxEJ,MAAIW,KAAK,KAAK,CAACL,MAAMC,QAAQA,IAAIC,SAASC,aAAYG,oBAAoBR,qBAAAA,CAAAA;AAC1EJ,MAAIK,IAAI,aAAaQ,UAAAA;AACrBb,MAAIW,KAAK,aAAaG,WAAAA;AACtBd,MAAIK,IAAI,UAAU,CAACC,MAAMC,QAAAA;AACvBA,QAAIQ,WAAWN,aAAYO,SAAS;EACtC,CAAA;AACAhB,MAAIW,KAAK,UAAU,CAACL,MAAMC,QAAAA;AACxBA,QAAIQ,WAAWN,aAAYO,SAAS;EACtC,CAAA;AACF,GAd6B;;;AIN7B,SAASC,4BAA4B;AACrC,SAASC,QAAQC,aAAAA,kBAAiB;AAKlC,SAASC,2BAA2B;AAGpC,SAASC,sBAAsB;AAE/B,SAASC,cAAcC,kBAAkB;AAEzC,OAAOC,aAAa;AAGpB,IAAMC,mBAAmB,8BAAOC,MAAoBC,8BAAAA;AAClD,QAAMC,MAAM,MAAMF,KAAKG,QAAQF,yBAAAA;AAC/B,SAAOG,oBAAoBF,KAAK;IAAEG,UAAU;EAAK,CAAA;AACnD,GAHyB;AAKzB,IAAIC;AAEJ,IAAMC,eAAe,8BAAOP,MAAoBC,8BAAAA;AAC9C,MAAIO,WAAUF,iBAAAA,EAAoB,QAAOA;AACzCA,sBAAoB,MAAMP,iBAAiBC,MAAMC,yBAAAA;AACjD,SAAOK;AACT,GAJqB;AAWd,IAAMG,sBAAsB,wBAACC,YAAAA;AAClC,QAAM,EAAEV,MAAMC,0BAAyB,IAAKS;AAC5C,QAAMC,SAASC,QAAQC,OAAO;IAAEC,aAAa;EAAK,CAAA;AAElDH,SAAOI,KAAK,WAAW,OAAOC,KAAKC,QAAAA;AACjCC,yBAAqBD,GAAAA;AACrB,UAAME,OAAOC,MAAMC,QAAQL,IAAIG,IAAI,IAAIH,IAAIG,OAAO;MAACH,IAAIG;;AACvD,UAAMG,YAAY,MAAMC,eAAeC,UAAmBL,IAAAA,GAAOM,IAAIC,CAAAA,MAAKA,EAAE,CAAA,CAAE;AAC9E,UAAMC,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,MAAMD,UAAUE,OAAOP,QAAAA;AACtCL,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AAEAjB,SAAOqB,IAAI,SAAS,OAAOhB,KAAoCC,QAAAA;AAC7DC,yBAAqBD,GAAAA;AACrB,UAAMgB,SAASC,WAAWlB,IAAImB,MAAMF,MAAM,IAAIjB,IAAImB,MAAMF,SAASG;AACjE,UAAMC,QAAQ7B,WAAUQ,IAAImB,MAAME,KAAK,IAAIC,OAAOtB,IAAImB,MAAME,KAAK,IAAID;AACrE,UAAMG,OAAO/B,WAAUQ,IAAImB,MAAMI,IAAI,IAAIC,QAAQxB,IAAImB,MAAMI,IAAI,IAAIH;AACnE,UAAMK,QAAQzB,IAAImB,MAAMM,UAAU,QAAQ,QAAQ;AAClD,UAAM/B,WAAgC;MACpC2B;MAAOE;MAAME;MAAOR;IACtB;AACA,UAAMN,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,MAAMD,UAAUe,KAAKhC,QAAAA;AACpCO,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AACAjB,SAAOI,KAAK,SAAS,OAAOC,KAAwDC,QAAAA;AAClFC,yBAAqBD,GAAAA;AACrB,UAAMP,WAAUM,IAAIG;AACpB,UAAMQ,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,OAAOpB,WAAUE,QAAAA,IAAWiB,UAAUe,KAAKhC,QAAAA,IAAWiB,UAAUe,KAAI;AACnFzB,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AAEAjB,SAAOqB,IAAI,cAAc,OAAOhB,KAAKC,QAAAA;AACnCC,yBAAqBD,GAAAA;AACrB,UAAM,EAAE0B,MAAMC,QAAO,IAAK5B,IAAI6B;AAC9B,UAAMF,OAAOG,OAAOF,OAAAA;AACpB,QAAIpC,WAAUmC,IAAAA,GAAO;AACnB,YAAMhB,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,YAAM,CAAC8C,OAAAA,IAAW,MAAMpB,UAAUK,IAAI;QAACW;OAAK;AAC5C,UAAIK,aAAaD,OAAAA,GAAU;AACzB9B,YAAIc,KAAKgB,OAAAA;AACT;MACF;IACF;AACA9B,QAAIa,OAAO,GAAA,EAAKmB,KAAI;EACtB,CAAA;AAEA,SAAOtC;AACT,GAlDmC;;;AC9B5B,IAAMuC,oBAAoB,wBAACC,QAAAA;AAChC,QAAM,EAAEC,KAAI,IAAKD;AACjB,QAAME,4BAA4B;AAClCF,MAAIG,IAAI,UAAUC,oBAAoB;IAAEH;IAAMC;EAA0B,CAAA,CAAA;AAC1E,GAJiC;;;ACJjC,SAASG,wBAAAA,6BAA4B;AACrC,SAASC,YAAAA,iBAAgB;AACzB,SAASC,uBAAAA,4BAA2B;AACpC,SAASC,qBAAqB;AAC9B,SACEC,0BAA0BC,mCAAmCC,wBACxD;AAGP,SAASC,iBAAiB;AAO1B,SACEC,mBAAmBC,4BAA4BC,yBAC1C;AACP,SACEC,eAAeC,yBAAyBC,yBACnC;AACP,SAASC,iBAAiB;AAG1B,eAAeC,uBAAuBC,MAAkB;AACtD,QAAMC,iBAAiBC,UAASC,qBAC9B,MAAMH,KAAKI,QAAQ,iBAAA,GACnB;IAAEC,UAAU;EAAK,CAAA,GAChB,MAAM,sCAAA;AACT,SAAOJ;AACT;AANeF;AASR,IAAMO,eAAe,8BAC1BC,KACAC,qBACAC,oBACAC,oBACAC,qBAAAA;AAEA,QAAM,EAAEX,KAAI,IAAKO;AACjB,QAAMK,SAAS,IAAIC,cAAcb,IAAAA;AAEjC,QAAMc,qBAAqB,MAAMf,uBAAuBC,IAAAA;AAExD,QAAMe,6BAA6B;IACjCC,MAAMN,mBAAmBM;IACzBC,gBAAgBC,UAAUC,IAAI,MAAM,IAAIC,UAAU,EAAA,CAAA;IAClDC,OAAOX,mBAAmBW;IAC1BC,SAASZ,mBAAmBY;IAC5BC,YAAYd;EACd;AAEA,QAAMe,0BAA0B;IAC9BR,MAAMN,mBAAmBM;IACzBC,gBAAgBC,UAAUC,IAAI,MAAM,IAAIC,UAAU,EAAA,CAAA;IAClDC,OAAOX,mBAAmBW;IAC1BC,SAASZ,mBAAmBY;IAC5BC,YAAYf;EACd;AAEA,QAAMiB,qBAAqB,MAAMC,yBAAyBC,OAAO;IAAEC,SAASlB;EAAmB,CAAA;AAE/FmB,UAAQC,IAAI,0CAAA;AACZ5B,EAAAA,UAAS,MAAMuB,mBAAmBM,MAAK,GAAI,MAAM,0CAAA;AACjDF,UAAQC,IAAI,uCAAA;AAEZ,QAAME,cAAc,MAAMC,kBAAkBN,OAAO;IAAEC,SAASlB;IAAoBI;EAAmB,CAAA;AAErGe,UAAQC,IAAI,mCAAA;AACZ5B,EAAAA,UAAS,MAAM8B,YAAYD,MAAK,GAAI,MAAM,mCAAA;AAC1CF,UAAQC,IAAI,gCAAA;AAEZ,QAAMI,uBAAuB,MAAMC,2BAA2BR,OAAO;IACnEK;IACAJ,SAASb;IACTS;EACF,CAAA;AAEAK,UAAQC,IAAI,4CAAA;AACZ5B,EAAAA,UAAS,MAAMgC,qBAAqBH,MAAK,GAAI,MAAM,4CAAA;AACnDF,UAAQC,IAAI,yCAAA;AAEZ,QAAMM,8BAA8B,MAAMC,kCAAkCV,OAAO;IACjFC,SAASlB;IACT4B,mBAAmBC;EACrB,CAAA;AAEAV,UAAQC,IAAI,mDAAA;AACZ5B,EAAAA,UAAS,MAAMkC,4BAA4BL,MAAK,GAAI,MAAM,mDAAA;AAC1DF,UAAQC,IAAI,gDAAA;AAEZ,QAAMU,gCAA+D;IAAEC,UAAUL;EAA4B;AAC7G,QAAMM,aAAa,MAAMC,iBAAiBhB,OAAO;IAAEiB,cAAclC;IAAoB8B;EAA8B,CAAA;AAEnHX,UAAQC,IAAI,kCAAA;AACZ5B,EAAAA,UAAS,MAAMwC,WAAWX,MAAK,GAAI,MAAM,kCAAA;AACzCF,UAAQC,IAAI,+BAAA;AAEZ,QAAMe,SAAS,MAAMC,cAAcnB,OAAO;IACxC3B;IACAsC,mBAAmBC;IACnB5B;IACAqB;IACAJ,SAASlB;IACTe;IACAS;IACAQ;IACAlB;EACF,CAAA;AAEAK,UAAQC,IAAI,+BAAA;AACZ5B,EAAAA,UAAS,MAAM2C,OAAOd,MAAK,GAAI,MAAM,+BAAA;AACrCF,UAAQC,IAAI,4BAAA;AAEZ,QAAMiB,aAAa,IAAIC,kBAAkB;IAAEpC;IAAQiC;EAAO,CAAA;AAC1D,QAAMI,SAASC,wBAAwBH,UAAAA;AAEvCxC,MAAI4C,KAAK,QAAQ,CAACC,KAAKC,QAAAA;AACrBC,IAAAA,sBAAqBD,GAAAA;AACrBJ,WAAOM,OAAOH,IAAII,MAAM,CAACC,GAAGC,gBAAAA;AAC1BL,UAAIM,KAAKD,WAAAA;IACX,CAAA;EACF,CAAA;AACF,GA3F4B;;;ACvBrB,IAAME,YAAY,8BACvBC,KACAC,qBACAC,oBACAC,oBACAC,qBAAAA;AAEA,QAAMC,aAAaL,KAAKC,qBAAqBC,oBAAoBC,oBAAoBC,gBAAAA;AACrFE,oBAAkBN,GAAAA;AAClBO,gBAAcP,GAAAA;AAChB,GAVyB;;;ATelB,IAAMQ,SAAS,8BACpBC,MACAC,qBACAC,oBACAC,oBACAC,qBAAAA;AAEAC,qBAAAA;AACA,QAAMC,MAAMC,SAAAA;AACZD,MAAIE,IAAI,QAAQ,KAAA;AAEhBF,MAAIG,IAAIC,KAAAA,CAAAA;AACRJ,MAAIG,IAAIE,YAAAA,CAAAA;AACRL,MAAIG,IAAIG,gBAAAA;AACRN,MAAIG,IAAII,kBAAkBC,yBAAyB;IAAEC,OAAO;EAAM,CAAA,CAAA,CAAA;AAClET,MAAIG,IAAIO,iBAAAA;AACRC,uCAAqCX,GAAAA;AACrCA,MAAIG,IAAIS,qBAAAA;AACRC,8BAA4Bb,GAAAA;AAC5BA,MAAIN,OAAOA;AACX,QAAMoB,UAAUd,KAAKL,qBAAqBC,oBAAoBC,oBAAoBC,gBAAAA;AAClFE,MAAIG,IAAIY,cAAAA;AACR,SAAOf;AACT,GAvBsB;;;AUzBtB,SAASgB,YAAAA,iBAAgB;AACzB,SACEC,qCACAC,uBACAC,sBAAsBC,qBACtBC,gBACAC,kBACAC,8BACK;AACP,SAASC,0BAA0B;AAGnC,SACEC,OAAOC,iBAAiBC,iBACnB;AAEP,SAASC,qBAAqBC,+BAA+B;AAI7D,IAAMC,WAAW;AASjB,eAAsBC,UAAUC,SAAyB;AACvD,QAAM,EACJC,QAAQC,QAAQC,MAAMC,aAAY,IAChCJ;AACJ,QAAM,EAAEK,KAAI,IAAKL,QAAQC,OAAOK;AAChC,QAAMC,SAAS,MAAMC,iBAAiB;IAAEP;IAAQC;EAAO,CAAA;AACvD,QAAMO,mBAAmB,MAAMC,qBAAqBT,QAAQC,MAAAA;AAE5D,QAAMS,qBAAqBC,UAAS,MAAMC,sBAAsB;IAAEZ;IAAQC;EAAO,CAAA,GAAI,MAAM,qCAAA;AAC3F,QAAMY,sBAAsBF,UAAS,MAAMG,uBAAuB;IAAEd;IAAQC;EAAO,CAAA,GAAI,MAAM,sCAAA;AAE7F,QAAM,EAAEC,MAAMa,eAAc,IAAK,MAAMC,eAAe;IACpDhB;IACAC;IACAK;IACAJ,MAAMC;IACNU;IACAH;EACF,CAAA;AAEA,QAAMO,WAAWC,wBAAkDH,cAAAA;AAEnE,QAAMI,WAAW,MAAMJ,eAAeK,KAAI;AAE1C,MAAID,SAASE,WAAW,GAAG;AACzBpB,YAAQqB,KAAK,kEAAA;AACb,UAAMC,kBAAkB,MAAMC,oBAAoB;MAAExB;MAAQC;IAAO,CAAA;AACnE,UAAMwB,UAAUjB,iBAAiBiB;AACjC,UAAMC,uBAAuB1B,OAAO2B,MAAMD,wBAAwBH,gBAAgBK;AAClF,UAAMC,SAAS,MAAMC,mBAAmBP,iBAAiBE,SAASM,UAAUC,QAAQC,MAAM,QAAU,CAAA,EAAGC,MAAMR,oBAAAA;AAC7G,UAAMX,eAAeoB,OAAO;SAAIN,OAAO,CAAA,EAAGO,KAAI;MAAIP,OAAO,CAAA;KAAG;AAC5DQ,YAAQC,IAAI,+DAAA;AACZ,UAAMC,SAAS,MAAMC,oCAAoCX,OAAO,CAAA,GAAIN,iBAAiBkB,gBAAgB;MAAC;MAAG;OAAS,IAAA,CAAA;AAClH,UAAM1B,eAAeoB,OAAO;SAAII,OAAO,CAAA,EAAGH,KAAI;MAAIG,OAAO,CAAA;KAAG;AAC5DF,YAAQC,IAAI,4BAA4Bf,gBAAgBK,OAAO,EAAE;EACnE;AAEA,QAAMc,qBAA6C;IACjDjB,SAASjB,iBAAiBiB;IAC1BkB,OAAOnC;IACPoC,OAAO;MAAE3B;IAAS;IAClB4B,MAAM,mCAAA;AACJ,YAAMA,OAAO,MAAMC,oBAAoB/B,cAAAA;AACvC,aAAO;QAACJ,UAASkC,MAAME,OAAO,MAAM,iCAAA;QAAoCF,MAAMG,SAAS;;IACzF,GAHM;EAIR;AACA,QAAMC,OAAO,MAAM/C,KAAKgD,QAAQ,GAAA;AAChC,QAAMC,QAAQC,IAAIH,KAAKI,IAAI,CAACC,QAAAA;AAC1B,WAAOA,IAAIC,QAAK,MAAS,MAAM;EACjC,CAAA,CAAA;AA+BA,QAAMC,MAAM,MAAMC,OAAOvD,MAAMW,qBAAqBH,oBAAoBgC,oBAAoB1C,OAAOK,IAAIqD,gBAAgB;AACvH,QAAMC,SAASH,IAAII,OAAOxD,MAAMP,UAAU,MAAMI,QAAQqC,IAAI,oCAAoCzC,QAAAA,IAAYO,IAAAA,EAAM,CAAA;AAClHuD,SAAOE,WAAW,GAAA;AAClB,SAAOF;AACT;AApFsB7D;","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 {
|
|
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,
|
|
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":"
|
|
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 {
|
|
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,
|
|
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,
|
|
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 {
|
|
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,
|
|
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":"
|
|
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;
|
|
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.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "XYO Layer One API",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -56,19 +56,18 @@
|
|
|
56
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.
|
|
60
|
-
"@xyo-network/chain-protocol": "~1.
|
|
61
|
-
"@xyo-network/chain-rpc": "~1.
|
|
62
|
-
"@xyo-network/chain-
|
|
63
|
-
"@xyo-network/chain-viewers": "~1.16.26",
|
|
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
68
|
"@xyo-network/xl1-protocol": "~1.14.15",
|
|
70
|
-
"@xyo-network/xl1-protocol-sdk": "~1.
|
|
71
|
-
"@xyo-network/xl1-rpc": "~1.
|
|
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",
|
|
@@ -90,6 +89,7 @@
|
|
|
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",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"nodemon": "~3.1.11",
|
|
100
100
|
"tslib": "~2.8.1",
|
|
101
101
|
"typescript": "~5.9.3",
|
|
102
|
-
"vitest": "~4.0.
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
45
|
-
assertEx(await
|
|
46
|
-
console.log('Initialized
|
|
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
|
|
118
|
+
const engine = rpcEngineFromConnection(connection)
|
|
59
119
|
|
|
60
120
|
app.post('/rpc', (req, res) => {
|
|
61
121
|
setRawResponseFormat(res)
|
package/src/server/server.ts
CHANGED
|
@@ -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
|
|
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,
|
|
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 {
|
|
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
|
|
43
|
-
const
|
|
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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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 =
|
|
89
|
+
// const blockViewer = chainIterator
|
|
93
90
|
|
|
94
|
-
const accountBalanceViewer = await SimpleAccountBalanceViewer.create({
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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,
|
|
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
|