@xyo-network/chain-api 1.19.14 → 1.19.16

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.
@@ -1,6 +1,7 @@
1
- import { ActorParamsV3, ActorV3, Config } from '@xyo-network/xl1-sdk';
1
+ import { ApiConfig } from '@xyo-network/chain-orchestration';
2
+ import { ActorParamsV3, ActorV3 } from '@xyo-network/xl1-sdk';
2
3
  export type ApiActorParams = ActorParamsV3<{
3
- config: Config;
4
+ config: ApiConfig;
4
5
  }>;
5
6
  export declare class ApiActor extends ActorV3<ApiActorParams> {
6
7
  private server?;
@@ -1 +1 @@
1
- {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EAAE,OAAO,EAAE,MAAM,EAC/B,MAAM,sBAAsB,CAAA;AAI7B,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,OAAO,CAAC,cAAc,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,CAAQ;IAER,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EACL,aAAa,EAAE,OAAO,EACvB,MAAM,sBAAsB,CAAA;AAI7B,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,SAAS,CAAA;CAClB,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,OAAO,CAAC,cAAc,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,CAAQ;IAER,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
@@ -3,7 +3,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
 
4
4
  // src/ApiActor.ts
5
5
  import { creatable } from "@xylabs/sdk-js";
6
- import { ActorV3 } from "@xyo-network/xl1-sdk";
6
+ import { ActorV3, asHostActorConfigContext } from "@xyo-network/xl1-sdk";
7
7
 
8
8
  // src/server/app.ts
9
9
  import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
@@ -28,9 +28,7 @@ var addInstrumentation = /* @__PURE__ */ __name(() => {
28
28
  // src/server/routes/dataLake/archivistMiddleware.ts
29
29
  import { setRawResponseFormat } from "@xylabs/express";
30
30
  import { asHash, isDefined } from "@xylabs/sdk-js";
31
- import { asArchivistInstance } from "@xyo-network/archivist-model";
32
- import { PayloadBuilder } from "@xyo-network/payload-builder";
33
- import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
31
+ import { asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder } from "@xyo-network/sdk-js";
34
32
  import express from "express";
35
33
  var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
36
34
  const mod = await node.resolve(archivistModuleIdentifier);
@@ -157,8 +155,8 @@ var getApp = /* @__PURE__ */ __name(async (context) => {
157
155
  // src/server/server.ts
158
156
  var hostname = "::";
159
157
  async function getServer(context) {
160
- const { logger } = context;
161
- const { port } = context.config.actors.api;
158
+ const { logger, config } = context;
159
+ const { port } = config;
162
160
  const app = await getApp(context);
163
161
  const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`));
164
162
  server.setTimeout(2e4);
@@ -192,7 +190,7 @@ var ApiActor = class extends ActorV3 {
192
190
  this.stopServer();
193
191
  }
194
192
  async startServer() {
195
- this.server = await getServer(this.context);
193
+ this.server = await getServer(asHostActorConfigContext(this.context, true));
196
194
  }
197
195
  stopServer() {
198
196
  this.server?.close();
@@ -204,23 +202,24 @@ ApiActor = _ts_decorate([
204
202
  ], ApiActor);
205
203
 
206
204
  // src/runApi.ts
207
- import { MempoolActor } from "@xyo-network/chain-mempool";
208
- import { initApiWallet, ValidatorActor } from "@xyo-network/chain-orchestration";
209
- var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
210
- const account = await initApiWallet({
205
+ import { initActorWallet } from "@xyo-network/chain-orchestration";
206
+ var getApiActor = /* @__PURE__ */ __name(async (config, locator) => {
207
+ const account = await initActorWallet({
211
208
  config,
212
- logger: locator.context.logger
209
+ singletons: {},
210
+ caches: {}
213
211
  });
214
212
  const params = {
215
213
  account,
216
214
  config,
217
215
  locator
218
216
  };
219
- const actors = await Promise.all([
220
- ApiActor.create(params),
221
- MempoolActor.create(params),
222
- ValidatorActor.create(params)
223
- ]);
217
+ return await ApiActor.create(params);
218
+ }, "getApiActor");
219
+ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
220
+ const actors = [
221
+ await getApiActor(config, locator)
222
+ ];
224
223
  for (const actor of actors) {
225
224
  await orchestrator.registerActor(actor);
226
225
  }
@@ -228,6 +227,7 @@ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
228
227
  }, "runApi");
229
228
  export {
230
229
  ApiActor,
230
+ getApiActor,
231
231
  getApp,
232
232
  getServer,
233
233
  runApi
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport {\n ActorParamsV3, ActorV3, Config,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParamsV3<{\n config: Config\n}>\n\n@creatable()\nexport class ApiActor extends ActorV3<ApiActorParams> {\n private server?: Server\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(this.context)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { CreatableProviderContext } from '@xyo-network/xl1-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 (context: CreatableProviderContext): 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.context = context\n await addRoutes(app)\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 { 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.context\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcEngineFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\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 { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n await addRpcRoutes(app)\n addDataLakeRoutes(app)\n}\n","import type { CreatableProviderContext } from '@xyo-network/xl1-sdk'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n\nexport async function getServer(context: CreatableProviderContext) {\n const { logger } = context\n const { port } = context.config.actors.api\n\n const app = await getApp(context)\n const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { MempoolActor } from '@xyo-network/chain-mempool'\nimport type { OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initApiWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type {\n Config,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport { ApiActor } from './ApiActor.ts'\n\nexport const runApi = async (\n config: Config,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initApiWallet({ config, logger: locator.context.logger })\n const params = {\n account, config, locator,\n }\n // Create actors\n const actors = await Promise.all([ApiActor.create(params), MempoolActor.create(params), ValidatorActor.create(params)])\n\n // Register the actors with the orchestrator\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n // Start the orchestrator => automatically activates the actors\n await orchestrator.start()\n}\n"],"mappings":"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","names":["creatable","ActorV3","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","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","context","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","rpcEngineFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","hostname","getServer","context","logger","port","config","actors","api","app","getApp","server","listen","info","setTimeout","ApiActor","ActorV3","server","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","context","close","undefined","MempoolActor","initApiWallet","ValidatorActor","runApi","config","orchestrator","locator","account","initApiWallet","logger","context","params","actors","Promise","all","ApiActor","create","MempoolActor","ValidatorActor","actor","registerActor","start"]}
1
+ {"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport { ApiConfig } from '@xyo-network/chain-orchestration'\nimport {\n ActorParamsV3, ActorV3, asHostActorConfigContext,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParamsV3<{\n config: ApiConfig\n}>\n\n@creatable()\nexport class ApiActor extends ActorV3<ApiActorParams> {\n private server?: Server\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true))\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { HostActorConfigContext } from '@xyo-network/xl1-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 (context: HostActorConfigContext): 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.context = context\n await addRoutes(app)\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 { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, ModuleIdentifier,\n NextOptions, NodeInstance, Payload,\n} from '@xyo-network/sdk-js'\nimport {\n asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,\n} from '@xyo-network/sdk-js'\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.context\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcEngineFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\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 { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n await addRpcRoutes(app)\n addDataLakeRoutes(app)\n}\n","import type { HostActorConfigContext } from '@xyo-network/xl1-sdk'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n\nexport async function getServer(context: HostActorConfigContext) {\n const { logger, config } = context\n const { port } = config\n\n const app = await getApp(context)\n const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import type { ApiConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport { ApiActor } from './ApiActor.ts'\n\nexport const getApiActor = async (\n config: ApiConfig,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initActorWallet({\n config, singletons: {}, caches: {},\n })\n const params = {\n account, config, locator,\n }\n // Create actors\n return await ApiActor.create(params)\n}\n\nexport const runApi = async (\n config: ApiConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const actors = [await getApiActor(config, locator)]\n\n // Register the actors with the orchestrator\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n // Start the orchestrator => automatically activates the actors\n await orchestrator.start()\n}\n"],"mappings":"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","names":["creatable","ActorV3","asHostActorConfigContext","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","isAnyPayload","isSequence","PayloadBuilder","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","context","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","rpcEngineFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","hostname","getServer","context","logger","config","port","app","getApp","server","listen","info","setTimeout","ApiActor","ActorV3","server","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","asHostActorConfigContext","context","close","undefined","initActorWallet","getApiActor","config","locator","account","initActorWallet","singletons","caches","params","ApiActor","create","runApi","orchestrator","actors","actor","registerActor","start"]}
@@ -1,4 +1,6 @@
1
- import type { OrchestratorInstance } from '@xyo-network/chain-orchestration';
2
- import type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
- export declare const runApi: (config: Config, orchestrator: OrchestratorInstance, locator: ProviderFactoryLocatorInstance) => Promise<void>;
1
+ import type { ApiConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration';
2
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
+ import { ApiActor } from './ApiActor.ts';
4
+ export declare const getApiActor: (config: ApiConfig, locator: ProviderFactoryLocatorInstance) => Promise<ApiActor>;
5
+ export declare const runApi: (config: ApiConfig, orchestrator: OrchestratorInstance, locator: ProviderFactoryLocatorInstance) => Promise<void>;
4
6
  //# sourceMappingURL=runApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runApi.d.ts","sourceRoot":"","sources":["../../src/runApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAE5E,OAAO,KAAK,EACV,MAAM,EACN,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAI7B,eAAO,MAAM,MAAM,GACjB,QAAQ,MAAM,EACd,cAAc,oBAAoB,EAClC,SAAS,8BAA8B,kBAgBxC,CAAA"}
1
+ {"version":3,"file":"runApi.d.ts","sourceRoot":"","sources":["../../src/runApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAEvF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAA;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,eAAO,MAAM,WAAW,GACtB,QAAQ,SAAS,EACjB,SAAS,8BAA8B,sBAUxC,CAAA;AAED,eAAO,MAAM,MAAM,GACjB,QAAQ,SAAS,EACjB,cAAc,oBAAoB,EAClC,SAAS,8BAA8B,kBAWxC,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { CreatableProviderContext } from '@xyo-network/xl1-sdk';
1
+ import type { HostActorConfigContext } from '@xyo-network/xl1-sdk';
2
2
  import type { Express } from 'express';
3
- export declare const getApp: (context: CreatableProviderContext) => Promise<Express>;
3
+ export declare const getApp: (context: HostActorConfigContext) => Promise<Express>;
4
4
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GAAU,SAAS,wBAAwB,KAAG,OAAO,CAAC,OAAO,CAiB/E,CAAA"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAGlE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,OAAO,CAiB7E,CAAA"}
@@ -1,5 +1,4 @@
1
- import type { ModuleIdentifier } from '@xyo-network/module-model';
2
- import type { NodeInstance } from '@xyo-network/node-model';
1
+ import type { ModuleIdentifier, NodeInstance } from '@xyo-network/sdk-js';
3
2
  import type { Router } from 'express';
4
3
  type ArchivistMiddlewareOptions = {
5
4
  archivistModuleIdentifier: ModuleIdentifier;
@@ -1 +1 @@
1
- {"version":3,"file":"archivistMiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/archivistMiddleware.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAiBrC,KAAK,0BAA0B,GAAG;IAChC,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,MAkDzE,CAAA"}
1
+ {"version":3,"file":"archivistMiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/archivistMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEY,gBAAgB,EACzB,YAAY,EAC1B,MAAM,qBAAqB,CAAA;AAI5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAiBrC,KAAK,0BAA0B,GAAG;IAChC,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,MAkDzE,CAAA"}
@@ -1,3 +1,3 @@
1
- import type { CreatableProviderContext } from '@xyo-network/xl1-sdk';
2
- export declare function getServer(context: CreatableProviderContext): Promise<import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>>;
1
+ import type { HostActorConfigContext } from '@xyo-network/xl1-sdk';
2
+ export declare function getServer(context: HostActorConfigContext): Promise<import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>>;
3
3
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAMpE,wBAAsB,SAAS,CAAC,OAAO,EAAE,wBAAwB,8HAQhE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAMlE,wBAAsB,SAAS,CAAC,OAAO,EAAE,sBAAsB,8HAQ9D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.19.14",
3
+ "version": "1.19.16",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -49,52 +49,63 @@
49
49
  "types": "tsc --noEmit -p tsconfig.test.json"
50
50
  },
51
51
  "dependencies": {
52
- "@opentelemetry/instrumentation": "~0.211.0",
53
- "@opentelemetry/instrumentation-express": "~0.59.0",
54
- "@opentelemetry/instrumentation-http": "~0.211.0",
55
- "@xylabs/express": "~5.0.79",
56
- "@xylabs/sdk-js": "~5.0.79",
57
- "@xyo-network/archivist-model": "~5.3.2",
58
- "@xyo-network/boundwitness-model": "~5.3.2",
59
- "@xyo-network/chain-mempool": "~1.19.14",
60
- "@xyo-network/chain-orchestration": "~1.19.14",
61
- "@xyo-network/module-model": "~5.3.2",
62
- "@xyo-network/node-model": "~5.3.2",
63
- "@xyo-network/payload-builder": "~5.3.2",
64
- "@xyo-network/payload-model": "~5.3.2",
65
- "@xyo-network/xl1-sdk": "~1.23.21",
52
+ "@opentelemetry/instrumentation": "~0.212.0",
53
+ "@opentelemetry/instrumentation-express": "~0.60.0",
54
+ "@opentelemetry/instrumentation-http": "~0.212.0",
55
+ "@xyo-network/chain-orchestration": "~1.19.16",
56
+ "@xyo-network/sdk-js": "~5.3.7",
57
+ "@xyo-network/xl1-sdk": "~1.24.24",
66
58
  "compression": "~1.8.1",
67
- "cors": "~2.8.6",
68
- "ethers": "^6.16.0",
69
- "express": "~5.2.1"
59
+ "cors": "~2.8.6"
70
60
  },
71
61
  "devDependencies": {
62
+ "@opentelemetry/api": "^1.9.0",
72
63
  "@types/compression": "~1.8.1",
73
64
  "@types/cors": "~2.8.19",
74
65
  "@types/express": "5.0.6",
75
66
  "@types/express-serve-static-core": "~5.1.1",
76
- "@types/node": "~25.2.3",
77
- "@xylabs/sdk-js": "~5.0.79",
67
+ "@types/node": "~25.3.0",
68
+ "@xylabs/express": "~5.0.80",
69
+ "@xylabs/mongo": "~5.0.80",
70
+ "@xylabs/sdk-js": "~5.0.80",
78
71
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
79
72
  "@xylabs/tsconfig": "~7.3.2",
80
- "@xyo-network/account": "~5.3.2",
81
- "@xyo-network/account-model": "~5.3.2",
82
- "@xyo-network/archivist-abstract": "~5.3.2",
73
+ "@xyo-network/account": "~5.3.7",
74
+ "@xyo-network/account-model": "~5.3.7",
75
+ "@xyo-network/archivist-abstract": "~5.3.7",
76
+ "@xyo-network/archivist-mongodb": "~5.3.7",
83
77
  "@xyo-network/bios-model": "~7.2.1",
84
- "@xyo-network/boundwitness-builder": "~5.3.2",
85
- "@xyo-network/chain-services": "~1.19.14",
86
- "@xyo-network/module-abstract-mongodb": "~5.3.2",
87
- "@xyo-network/module-model-mongodb": "~5.3.2",
88
- "@xyo-network/node-memory": "~5.3.2",
89
- "@xyo-network/xl1-sdk": "~1.23.21",
90
- "dotenv": "~17.2.4",
78
+ "@xyo-network/boundwitness-builder": "~5.3.7",
79
+ "@xyo-network/chain-services": "~1.19.16",
80
+ "@xyo-network/module-abstract-mongodb": "~5.3.7",
81
+ "@xyo-network/node-memory": "~5.3.7",
82
+ "@xyo-network/sdk-js": "~5.3.7",
83
+ "@xyo-network/xl1-sdk": "~1.24.24",
84
+ "axios": "^1.13.5",
85
+ "dotenv": "~17.3.1",
91
86
  "eslint": "^9.39.2",
87
+ "ethers": "^6.16.0",
88
+ "express": "^5.2.1",
92
89
  "http-status-codes": "~2.3.0",
93
- "nodemon": "~3.1.11",
90
+ "mongodb": "^7.1.0",
91
+ "nodemon": "~3.1.13",
94
92
  "tslib": "~2.8.1",
95
93
  "typescript": "~5.9.3",
96
94
  "vitest": "~4.0.18",
97
- "vitest-mock-extended": "~3.1.0"
95
+ "vitest-mock-extended": "~3.1.0",
96
+ "zod": "^4.3.6"
97
+ },
98
+ "peerDependencies": {
99
+ "@opentelemetry/api": "^1.9.0",
100
+ "@xylabs/express": "*",
101
+ "@xylabs/mongo": "^5",
102
+ "@xylabs/sdk-js": "^5",
103
+ "@xyo-network/sdk-js": "^5",
104
+ "axios": "^1",
105
+ "ethers": "^6",
106
+ "express": "^5",
107
+ "mongodb": "^7",
108
+ "zod": "^4"
98
109
  },
99
110
  "engines": {
100
111
  "node": ">=22.3 <23"
package/src/ApiActor.ts CHANGED
@@ -1,14 +1,15 @@
1
1
  import { Server } from 'node:http'
2
2
 
3
3
  import { creatable } from '@xylabs/sdk-js'
4
+ import { ApiConfig } from '@xyo-network/chain-orchestration'
4
5
  import {
5
- ActorParamsV3, ActorV3, Config,
6
+ ActorParamsV3, ActorV3, asHostActorConfigContext,
6
7
  } from '@xyo-network/xl1-sdk'
7
8
 
8
9
  import { getServer } from './server/index.ts'
9
10
 
10
11
  export type ApiActorParams = ActorParamsV3<{
11
- config: Config
12
+ config: ApiConfig
12
13
  }>
13
14
 
14
15
  @creatable()
@@ -31,7 +32,7 @@ export class ApiActor extends ActorV3<ApiActorParams> {
31
32
  }
32
33
 
33
34
  private async startServer() {
34
- this.server = await getServer(this.context)
35
+ this.server = await getServer(asHostActorConfigContext(this.context, true))
35
36
  }
36
37
 
37
38
  private stopServer() {
package/src/runApi.ts CHANGED
@@ -1,24 +1,29 @@
1
- import { MempoolActor } from '@xyo-network/chain-mempool'
2
- import type { OrchestratorInstance } from '@xyo-network/chain-orchestration'
3
- import { initApiWallet, ValidatorActor } from '@xyo-network/chain-orchestration'
4
- import type {
5
- Config,
6
- ProviderFactoryLocatorInstance,
7
- } from '@xyo-network/xl1-sdk'
1
+ import type { ApiConfig, OrchestratorInstance } from '@xyo-network/chain-orchestration'
2
+ import { initActorWallet } from '@xyo-network/chain-orchestration'
3
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
8
4
 
9
5
  import { ApiActor } from './ApiActor.ts'
10
6
 
11
- export const runApi = async (
12
- config: Config,
13
- orchestrator: OrchestratorInstance,
7
+ export const getApiActor = async (
8
+ config: ApiConfig,
14
9
  locator: ProviderFactoryLocatorInstance,
15
10
  ) => {
16
- const account = await initApiWallet({ config, logger: locator.context.logger })
11
+ const account = await initActorWallet({
12
+ config, singletons: {}, caches: {},
13
+ })
17
14
  const params = {
18
15
  account, config, locator,
19
16
  }
20
17
  // Create actors
21
- const actors = await Promise.all([ApiActor.create(params), MempoolActor.create(params), ValidatorActor.create(params)])
18
+ return await ApiActor.create(params)
19
+ }
20
+
21
+ export const runApi = async (
22
+ config: ApiConfig,
23
+ orchestrator: OrchestratorInstance,
24
+ locator: ProviderFactoryLocatorInstance,
25
+ ) => {
26
+ const actors = [await getApiActor(config, locator)]
22
27
 
23
28
  // Register the actors with the orchestrator
24
29
  for (const actor of actors) {
package/src/server/app.ts CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  standardErrors,
9
9
  standardResponses,
10
10
  } from '@xylabs/express'
11
- import type { CreatableProviderContext } from '@xyo-network/xl1-sdk'
11
+ import type { HostActorConfigContext } from '@xyo-network/xl1-sdk'
12
12
  import compression from 'compression'
13
13
  import cors from 'cors'
14
14
  import type { Express } from 'express'
@@ -17,7 +17,7 @@ import express from 'express'
17
17
  import { addInstrumentation } from './instrumentation.ts'
18
18
  import { addRoutes } from './routes/index.ts'
19
19
 
20
- export const getApp = async (context: CreatableProviderContext): Promise<Express> => {
20
+ export const getApp = async (context: HostActorConfigContext): Promise<Express> => {
21
21
  addInstrumentation()
22
22
  const app = express()
23
23
  app.set('etag', false)
@@ -2,14 +2,12 @@ import { setRawResponseFormat } from '@xylabs/express'
2
2
  import { asHash, isDefined } from '@xylabs/sdk-js'
3
3
  import type {
4
4
  ArchivistInstance,
5
- ArchivistNextOptions, NextOptions,
6
- } from '@xyo-network/archivist-model'
7
- import { asArchivistInstance } from '@xyo-network/archivist-model'
8
- import type { ModuleIdentifier } from '@xyo-network/module-model'
9
- import type { NodeInstance } from '@xyo-network/node-model'
10
- import { PayloadBuilder } from '@xyo-network/payload-builder'
11
- import type { Payload } from '@xyo-network/payload-model'
12
- import { isAnyPayload, isSequence } from '@xyo-network/payload-model'
5
+ ArchivistNextOptions, ModuleIdentifier,
6
+ NextOptions, NodeInstance, Payload,
7
+ } from '@xyo-network/sdk-js'
8
+ import {
9
+ asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,
10
+ } from '@xyo-network/sdk-js'
13
11
  import type { Router } from 'express'
14
12
  import express from 'express'
15
13
  import type { Request } from 'express-serve-static-core'
@@ -1,12 +1,12 @@
1
- import type { CreatableProviderContext } from '@xyo-network/xl1-sdk'
1
+ import type { HostActorConfigContext } from '@xyo-network/xl1-sdk'
2
2
 
3
3
  import { getApp } from './app.ts'
4
4
 
5
5
  const hostname = '::'
6
6
 
7
- export async function getServer(context: CreatableProviderContext) {
8
- const { logger } = context
9
- const { port } = context.config.actors.api
7
+ export async function getServer(context: HostActorConfigContext) {
8
+ const { logger, config } = context
9
+ const { port } = config
10
10
 
11
11
  const app = await getApp(context)
12
12
  const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`))