@xyo-network/chain-api 1.19.14 → 1.19.15

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";
@@ -29,8 +29,8 @@ var addInstrumentation = /* @__PURE__ */ __name(() => {
29
29
  import { setRawResponseFormat } from "@xylabs/express";
30
30
  import { asHash, isDefined } from "@xylabs/sdk-js";
31
31
  import { asArchivistInstance } from "@xyo-network/archivist-model";
32
- import { PayloadBuilder } from "@xyo-network/payload-builder";
33
32
  import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
33
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
34
34
  import express from "express";
35
35
  var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
36
36
  const mod = await node.resolve(archivistModuleIdentifier);
@@ -157,8 +157,8 @@ var getApp = /* @__PURE__ */ __name(async (context) => {
157
157
  // src/server/server.ts
158
158
  var hostname = "::";
159
159
  async function getServer(context) {
160
- const { logger } = context;
161
- const { port } = context.config.actors.api;
160
+ const { logger, config } = context;
161
+ const { port } = config;
162
162
  const app = await getApp(context);
163
163
  const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`));
164
164
  server.setTimeout(2e4);
@@ -192,7 +192,7 @@ var ApiActor = class extends ActorV3 {
192
192
  this.stopServer();
193
193
  }
194
194
  async startServer() {
195
- this.server = await getServer(this.context);
195
+ this.server = await getServer(asHostActorConfigContext(this.context, true));
196
196
  }
197
197
  stopServer() {
198
198
  this.server?.close();
@@ -204,23 +204,24 @@ ApiActor = _ts_decorate([
204
204
  ], ApiActor);
205
205
 
206
206
  // 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({
207
+ import { initActorWallet } from "@xyo-network/chain-orchestration";
208
+ var getApiActor = /* @__PURE__ */ __name(async (config, locator) => {
209
+ const account = await initActorWallet({
211
210
  config,
212
- logger: locator.context.logger
211
+ singletons: {},
212
+ caches: {}
213
213
  });
214
214
  const params = {
215
215
  account,
216
216
  config,
217
217
  locator
218
218
  };
219
- const actors = await Promise.all([
220
- ApiActor.create(params),
221
- MempoolActor.create(params),
222
- ValidatorActor.create(params)
223
- ]);
219
+ return await ApiActor.create(params);
220
+ }, "getApiActor");
221
+ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
222
+ const actors = [
223
+ await getApiActor(config, locator)
224
+ ];
224
225
  for (const actor of actors) {
225
226
  await orchestrator.registerActor(actor);
226
227
  }
@@ -228,6 +229,7 @@ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
228
229
  }, "runApi");
229
230
  export {
230
231
  ApiActor,
232
+ getApiActor,
231
233
  getApp,
232
234
  getServer,
233
235
  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":";;;;AAEA,SAASA,iBAAiB;AAC1B,SACiBC,eACV;;;ACLP,SACEC,uBACAC,6BACAC,sCACAC,mBACAC,0BACAC,kBACAC,gBACAC,yBACK;AAEP,OAAOC,iBAAiB;AACxB,OAAOC,UAAU;AAEjB,OAAOC,cAAa;;;ACdpB,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;;;ACXlC,SAASI,4BAA4B;AACrC,SAASC,QAAQC,iBAAiB;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,UAAUF,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,UAAUQ,IAAImB,MAAME,KAAK,IAAIC,OAAOtB,IAAImB,MAAME,KAAK,IAAID;AACrE,UAAMG,OAAO/B,UAAUQ,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,UAAUE,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,UAAUmC,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,IAAIE;AACrB,QAAMC,4BAA4B;AAClCH,MAAII,IAAI,UAAUC,oBAAoB;IAAEJ;IAAME;EAA0B,CAAA,CAAA;AAC1E,GAJiC;;;ACJjC,SAASG,wBAAAA,6BAA4B;AAErC,SAASC,yBAAyBC,4BAA4B;AAGvD,IAAMC,eAAe,8BAC1BC,QAAAA;AAEA,QAAM,EAAEC,QAAO,IAAKD;AACpB,QAAM,EAAEE,QAAO,IAAKD;AAEpB,QAAME,aAAa,MAAMD,QAAQE,YAA2BC,oBAAAA;AAC5D,QAAMC,SAASC,wBAAwBJ,UAAAA;AAEvCH,MAAIQ,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,GAf4B;;;ACArB,IAAME,YAAY,8BACvBC,QAAAA;AAEA,QAAMC,aAAaD,GAAAA;AACnBE,oBAAkBF,GAAAA;AACpB,GALyB;;;ALclB,IAAMG,SAAS,8BAAOC,YAAAA;AAC3BC,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,MAAIF,UAAUA;AACd,QAAMgB,UAAUd,GAAAA;AAChBA,MAAIG,IAAIY,cAAAA;AACR,SAAOf;AACT,GAjBsB;;;AMftB,IAAMgB,WAAW;AAEjB,eAAsBC,UAAUC,SAAiC;AAC/D,QAAM,EAAEC,OAAM,IAAKD;AACnB,QAAM,EAAEE,KAAI,IAAKF,QAAQG,OAAOC,OAAOC;AAEvC,QAAMC,MAAM,MAAMC,OAAOP,OAAAA;AACzB,QAAMQ,SAASF,IAAIG,OAAOP,MAAMJ,UAAU,MAAMG,QAAQS,KAAK,oCAAoCZ,QAAAA,IAAYI,IAAAA,EAAM,CAAA;AACnHM,SAAOG,WAAW,GAAA;AAClB,SAAOH;AACT;AARsBT;;;;;;;;;;APQf,IAAMa,WAAN,cAAuBC,QAAAA;SAAAA;;;EACpBC;EAER,MAAeC,gBAAgB;AAC7B,UAAM,MAAMA,cAAAA;EACd;EAEA,MAAeC,eAAe;AAC5B,UAAM,MAAMA,aAAAA;AACZ,SAAKC,WAAU;AACf,UAAM,KAAKC,YAAW;EACxB;EAEA,MAAeC,cAAc;AAC3B,UAAM,MAAMA,YAAAA;AACZ,SAAKF,WAAU;EACjB;EAEA,MAAcC,cAAc;AAC1B,SAAKJ,SAAS,MAAMM,UAAU,KAAKC,OAAO;EAC5C;EAEQJ,aAAa;AACnB,SAAKH,QAAQQ,MAAAA;AACb,SAAKR,SAASS;EAChB;AACF;;;;;;AQxCA,SAASC,oBAAoB;AAE7B,SAASC,eAAeC,sBAAsB;AAQvC,IAAMC,SAAS,8BACpBC,QACAC,cACAC,YAAAA;AAEA,QAAMC,UAAU,MAAMC,cAAc;IAAEJ;IAAQK,QAAQH,QAAQI,QAAQD;EAAO,CAAA;AAC7E,QAAME,SAAS;IACbJ;IAASH;IAAQE;EACnB;AAEA,QAAMM,SAAS,MAAMC,QAAQC,IAAI;IAACC,SAASC,OAAOL,MAAAA;IAASM,aAAaD,OAAOL,MAAAA;IAASO,eAAeF,OAAOL,MAAAA;GAAQ;AAGtH,aAAWQ,SAASP,QAAQ;AAC1B,UAAMP,aAAae,cAAcD,KAAAA;EACnC;AAGA,QAAMd,aAAagB,MAAK;AAC1B,GAnBsB;","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, 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 type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport { PayloadBuilder } 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,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.15",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -49,52 +49,66 @@
49
49
  "types": "tsc --noEmit -p tsconfig.test.json"
50
50
  },
51
51
  "dependencies": {
52
- "@opentelemetry/instrumentation": "~0.211.0",
52
+ "@opentelemetry/instrumentation": "~0.212.0",
53
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",
54
+ "@opentelemetry/instrumentation-http": "~0.212.0",
55
+ "@xyo-network/archivist-model": "~5.3.5",
56
+ "@xyo-network/chain-orchestration": "~1.19.15",
57
+ "@xyo-network/module-model": "~5.3.5",
58
+ "@xyo-network/node-model": "~5.3.5",
59
+ "@xyo-network/payload-model": "~5.3.5",
60
+ "@xyo-network/xl1-sdk": "~1.24.15",
66
61
  "compression": "~1.8.1",
67
- "cors": "~2.8.6",
68
- "ethers": "^6.16.0",
69
- "express": "~5.2.1"
62
+ "cors": "~2.8.6"
70
63
  },
71
64
  "devDependencies": {
65
+ "@opentelemetry/api": "^1.9.0",
72
66
  "@types/compression": "~1.8.1",
73
67
  "@types/cors": "~2.8.19",
74
68
  "@types/express": "5.0.6",
75
69
  "@types/express-serve-static-core": "~5.1.1",
76
70
  "@types/node": "~25.2.3",
71
+ "@xylabs/express": "~5.0.79",
72
+ "@xylabs/mongo": "~5.0.79",
77
73
  "@xylabs/sdk-js": "~5.0.79",
78
74
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
79
75
  "@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",
76
+ "@xyo-network/account": "~5.3.5",
77
+ "@xyo-network/account-model": "~5.3.5",
78
+ "@xyo-network/archivist-abstract": "~5.3.5",
83
79
  "@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",
80
+ "@xyo-network/boundwitness-builder": "~5.3.5",
81
+ "@xyo-network/chain-services": "~1.19.15",
82
+ "@xyo-network/module-abstract-mongodb": "~5.3.5",
83
+ "@xyo-network/module-model-mongodb": "~5.3.5",
84
+ "@xyo-network/node-memory": "~5.3.5",
85
+ "@xyo-network/sdk-js": "~5.3.5",
86
+ "@xyo-network/xl1-sdk": "~1.24.15",
87
+ "axios": "^1.13.5",
88
+ "dotenv": "~17.3.1",
91
89
  "eslint": "^9.39.2",
90
+ "ethers": "^6.16.0",
91
+ "express": "^5.2.1",
92
92
  "http-status-codes": "~2.3.0",
93
+ "mongodb": "^7.1.0",
93
94
  "nodemon": "~3.1.11",
94
95
  "tslib": "~2.8.1",
95
96
  "typescript": "~5.9.3",
96
97
  "vitest": "~4.0.18",
97
- "vitest-mock-extended": "~3.1.0"
98
+ "vitest-mock-extended": "~3.1.0",
99
+ "zod": "^4.3.6"
100
+ },
101
+ "peerDependencies": {
102
+ "@opentelemetry/api": "^1.9.0",
103
+ "@xylabs/express": "*",
104
+ "@xylabs/mongo": "^5",
105
+ "@xylabs/sdk-js": "^5",
106
+ "@xyo-network/sdk-js": "^5",
107
+ "axios": "^1",
108
+ "ethers": "^6",
109
+ "express": "^5",
110
+ "mongodb": "^7",
111
+ "zod": "^4"
98
112
  },
99
113
  "engines": {
100
114
  "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)
@@ -7,9 +7,9 @@ import type {
7
7
  import { asArchivistInstance } from '@xyo-network/archivist-model'
8
8
  import type { ModuleIdentifier } from '@xyo-network/module-model'
9
9
  import type { NodeInstance } from '@xyo-network/node-model'
10
- import { PayloadBuilder } from '@xyo-network/payload-builder'
11
10
  import type { Payload } from '@xyo-network/payload-model'
12
11
  import { isAnyPayload, isSequence } from '@xyo-network/payload-model'
12
+ import { PayloadBuilder } from '@xyo-network/sdk-js'
13
13
  import type { Router } from 'express'
14
14
  import express from 'express'
15
15
  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}`))