@xyo-network/chain-api 1.20.14 → 1.20.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.
Files changed (47) hide show
  1. package/README.md +9 -97
  2. package/dist/node/index.mjs +51 -7
  3. package/dist/node/index.mjs.map +1 -1
  4. package/dist/node/server/routes/addProbeRoutes.d.ts +3 -0
  5. package/dist/node/server/routes/addProbeRoutes.d.ts.map +1 -0
  6. package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
  7. package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts.map +1 -1
  8. package/dist/node/server/routes/index.d.ts +0 -1
  9. package/dist/node/server/routes/index.d.ts.map +1 -1
  10. package/dist/node/server/routes/{healthz → livez}/get.d.ts +1 -1
  11. package/dist/node/server/routes/livez/get.d.ts.map +1 -0
  12. package/dist/node/server/routes/livez/index.d.ts.map +1 -0
  13. package/dist/node/server/routes/readyz/get.d.ts +4 -0
  14. package/dist/node/server/routes/readyz/get.d.ts.map +1 -0
  15. package/dist/node/server/routes/readyz/index.d.ts +2 -0
  16. package/dist/node/server/routes/readyz/index.d.ts.map +1 -0
  17. package/dist/node/server/routes/startupz/get.d.ts +4 -0
  18. package/dist/node/server/routes/startupz/get.d.ts.map +1 -0
  19. package/dist/node/server/routes/startupz/index.d.ts +2 -0
  20. package/dist/node/server/routes/startupz/index.d.ts.map +1 -0
  21. package/package.json +137 -46
  22. package/dist/node/server/routes/healthz/get.d.ts.map +0 -1
  23. package/dist/node/server/routes/healthz/index.d.ts.map +0 -1
  24. package/src/ApiActor.ts +0 -42
  25. package/src/global.d.ts +0 -13
  26. package/src/helpers/index.ts +0 -3
  27. package/src/helpers/initChainId.ts +0 -20
  28. package/src/helpers/initInfuraProvider.ts +0 -27
  29. package/src/helpers/initJsonRpcProvider.ts +0 -20
  30. package/src/index.ts +0 -4
  31. package/src/model.ts +0 -5
  32. package/src/runApi.ts +0 -35
  33. package/src/server/app.ts +0 -18
  34. package/src/server/index.ts +0 -2
  35. package/src/server/instrumentation.ts +0 -15
  36. package/src/server/routes/addRoutes.ts +0 -11
  37. package/src/server/routes/dataLake/addDataLakeRoutes.ts +0 -9
  38. package/src/server/routes/dataLake/archivistMiddleware.ts +0 -83
  39. package/src/server/routes/dataLake/index.ts +0 -1
  40. package/src/server/routes/healthz/get.ts +0 -20
  41. package/src/server/routes/healthz/index.ts +0 -1
  42. package/src/server/routes/index.ts +0 -3
  43. package/src/server/routes/rpc/index.ts +0 -1
  44. package/src/server/routes/rpc/routes/addRpcRoutes.ts +0 -20
  45. package/src/server/routes/rpc/routes/index.ts +0 -1
  46. package/src/server/server.ts +0 -21
  47. /package/dist/node/server/routes/{healthz → livez}/index.d.ts +0 -0
package/README.md CHANGED
@@ -1,112 +1,24 @@
1
1
  # @xyo-network/chain-api
2
2
 
3
- [![logo][]](https://xyo.network)
3
+ [![npm][npm-badge]][npm-link]
4
+ [![license][license-badge]][license-link]
4
5
 
5
- [![npm-badge][]][npm-link]
6
- [![npm-downloads-badge][]][npm-link]
7
- [![jsdelivr-badge][]][jsdelivr-link]
8
- [![npm-license-badge][]](LICENSE)
9
- [![socket-badge][]][socket-link]
6
+ > XYO Layer One API
10
7
 
11
- XYO Layer One API
8
+ ## Install
12
9
 
13
-
14
-
15
- ## Reference
16
-
17
- **@xyo-network/chain-api**
18
-
19
- ***
20
-
21
- ## Functions
22
-
23
- - [getApp](#functions/getApp)
24
- - [getServer](#functions/getServer)
25
-
26
- ### functions
27
-
28
- ### <a id="getApp"></a>getApp
29
-
30
- [**@xyo-network/chain-api**](#../README)
31
-
32
- ***
33
-
34
- ```ts
35
- function getApp(
36
- node,
37
- transferSummaryMap,
38
- stakedChainContext,
39
- initRewardsCache?): Promise<Express>;
40
- ```
41
-
42
- ## Parameters
43
-
44
- ### node
45
-
46
- `NodeInstance`
47
-
48
- ### transferSummaryMap
49
-
50
- `MapType`\<`string`, `WithStorageMeta`\<`TransfersStepSummary`\>\>
51
-
52
- ### stakedChainContext
53
-
54
- `StakedChainContextRead`
55
-
56
- ### initRewardsCache?
57
-
58
- `boolean`
59
-
60
- ## Returns
61
-
62
- `Promise`\<`Express`\>
63
-
64
- ### <a id="getServer"></a>getServer
65
-
66
- [**@xyo-network/chain-api**](#../README)
67
-
68
- ***
69
-
70
- ```ts
71
- function getServer(context): Promise<Server<typeof IncomingMessage, typeof ServerResponse>>;
10
+ ```sh
11
+ {{pm}} add {{name}}
72
12
  ```
73
13
 
74
- ## Parameters
75
-
76
- ### context
77
-
78
- `GetServerContext`
79
-
80
- ## Returns
81
-
82
- `Promise`\<`Server`\<*typeof* `IncomingMessage`, *typeof* `ServerResponse`\>\>
83
-
84
-
85
- ## Maintainers
86
-
87
- - [Arie Trouw](https://github.com/arietrouw) ([arietrouw.com](https://arietrouw.com))
88
- - [Matt Jones](https://github.com/jonesmac)
89
- - [Joel Carter](https://github.com/JoelBCarter)
90
- - [Jordan Trouw](https://github.com/jordantrouw)
91
14
 
92
15
  ## License
93
16
 
94
- > See the [LICENSE](LICENSE) file for license details
17
+ See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
95
18
 
96
- ## Credits
97
19
 
98
- [Made with 🔥 and ❄️ by XYO](https://xyo.network)
99
-
100
- [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
101
20
 
102
21
  [npm-badge]: https://img.shields.io/npm/v/@xyo-network/chain-api.svg
103
22
  [npm-link]: https://www.npmjs.com/package/@xyo-network/chain-api
104
-
105
- [npm-downloads-badge]: https://img.shields.io/npm/dw/@xyo-network/chain-api
106
- [npm-license-badge]: https://img.shields.io/npm/l/@xyo-network/chain-api
107
-
108
- [jsdelivr-badge]: https://data.jsdelivr.com/v1/package/npm/@xyo-network/chain-api/badge
109
- [jsdelivr-link]: https://www.jsdelivr.com/package/npm/@xyo-network/chain-api
110
-
111
- [socket-badge]: https://socket.dev/api/badge/npm/package/@xyo-network/chain-api
112
- [socket-link]: https://socket.dev/npm/package/@xyo-network/chain-api
23
+ [license-badge]: https://img.shields.io/npm/l/@xyo-network/chain-api.svg
24
+ [license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
@@ -24,8 +24,51 @@ var addInstrumentation = /* @__PURE__ */ __name(() => {
24
24
  });
25
25
  }, "addInstrumentation");
26
26
 
27
- // src/server/routes/dataLake/archivistMiddleware.ts
27
+ // src/server/routes/livez/get.ts
28
28
  import { setRawResponseFormat } from "@xylabs/express";
29
+ import { ReasonPhrases } from "http-status-codes";
30
+ var message = ReasonPhrases.OK;
31
+ var handler = /* @__PURE__ */ __name((_req, res) => {
32
+ setRawResponseFormat(res);
33
+ res.status(200).send({
34
+ message
35
+ });
36
+ }, "handler");
37
+ var getLivez = handler;
38
+
39
+ // src/server/routes/readyz/get.ts
40
+ import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
41
+ import { ReasonPhrases as ReasonPhrases2 } from "http-status-codes";
42
+ var message2 = ReasonPhrases2.OK;
43
+ var handler2 = /* @__PURE__ */ __name((_req, res) => {
44
+ setRawResponseFormat2(res);
45
+ res.status(200).send({
46
+ message: message2
47
+ });
48
+ }, "handler");
49
+ var getReadyz = handler2;
50
+
51
+ // src/server/routes/startupz/get.ts
52
+ import { setRawResponseFormat as setRawResponseFormat3 } from "@xylabs/express";
53
+ import { ReasonPhrases as ReasonPhrases3 } from "http-status-codes";
54
+ var message3 = ReasonPhrases3.OK;
55
+ var handler3 = /* @__PURE__ */ __name((_req, res) => {
56
+ setRawResponseFormat3(res);
57
+ res.status(200).send({
58
+ message: message3
59
+ });
60
+ }, "handler");
61
+ var getStartupz = handler3;
62
+
63
+ // src/server/routes/addProbeRoutes.ts
64
+ var addProbeRoutes = /* @__PURE__ */ __name((app) => {
65
+ app.get("/livez", getLivez);
66
+ app.get("/readyz", getReadyz);
67
+ app.get("/startupz", getStartupz);
68
+ }, "addProbeRoutes");
69
+
70
+ // src/server/routes/dataLake/archivistMiddleware.ts
71
+ import { setRawResponseFormat as setRawResponseFormat4 } from "@xylabs/express";
29
72
  import { asHash, isDefined } from "@xylabs/sdk-js";
30
73
  import { asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder } from "@xyo-network/sdk-js";
31
74
  import express from "express";
@@ -47,7 +90,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
47
90
  mergeParams: true
48
91
  });
49
92
  router.post("/insert", async (req, res) => {
50
- setRawResponseFormat(res);
93
+ setRawResponseFormat4(res);
51
94
  const body = Array.isArray(req.body) ? req.body : [
52
95
  req.body
53
96
  ];
@@ -57,7 +100,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
57
100
  res.status(200).json(result);
58
101
  });
59
102
  router.get("/next", async (req, res) => {
60
- setRawResponseFormat(res);
103
+ setRawResponseFormat4(res);
61
104
  const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
62
105
  const limit = isDefined(req.query.limit) ? Number(req.query.limit) : void 0;
63
106
  const open = isDefined(req.query.open) ? Boolean(req.query.open) : void 0;
@@ -73,14 +116,14 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
73
116
  res.status(200).json(result);
74
117
  });
75
118
  router.post("/next", async (req, res) => {
76
- setRawResponseFormat(res);
119
+ setRawResponseFormat4(res);
77
120
  const options2 = req.body;
78
121
  const archivist = await getArchivist(node, archivistModuleIdentifier);
79
122
  const result = await (isDefined(options2) ? archivist.next(options2) : archivist.next());
80
123
  res.status(200).json(result);
81
124
  });
82
125
  router.get("/get/:hash", async (req, res) => {
83
- setRawResponseFormat(res);
126
+ setRawResponseFormat4(res);
84
127
  const { hash: rawHash } = req.params;
85
128
  const hash = asHash(rawHash);
86
129
  if (isDefined(hash)) {
@@ -109,7 +152,7 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
109
152
  }, "addDataLakeRoutes");
110
153
 
111
154
  // src/server/routes/rpc/routes/addRpcRoutes.ts
112
- import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
155
+ import { setRawResponseFormat as setRawResponseFormat5 } from "@xylabs/express";
113
156
  import { rpcServerFromConnection, XyoConnectionMoniker } from "@xyo-network/xl1-sdk";
114
157
  var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
115
158
  const { context } = app;
@@ -117,7 +160,7 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
117
160
  const connection = await locator.getInstance(XyoConnectionMoniker);
118
161
  const rpcServer = rpcServerFromConnection(connection);
119
162
  app.post("/rpc", async (req, res) => {
120
- setRawResponseFormat2(res);
163
+ setRawResponseFormat5(res);
121
164
  const rpcResponse = await rpcServer.handle(req.body);
122
165
  res.json(rpcResponse);
123
166
  });
@@ -125,6 +168,7 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
125
168
 
126
169
  // src/server/routes/addRoutes.ts
127
170
  var addRoutes = /* @__PURE__ */ __name(async (app) => {
171
+ addProbeRoutes(app);
128
172
  await addRpcRoutes(app);
129
173
  addDataLakeRoutes(app);
130
174
  }, "addRoutes");
@@ -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 { 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 { standardErrors } from '@xylabs/express'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { HostActorConfigContext } from '@xyo-network/xl1-sdk'\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 sharedMiddleware(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 { rpcServerFromConnection, 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 rpcServer = rpcServerFromConnection(connection)\n\n app.post('/rpc', async (req, res) => {\n setRawResponseFormat(res)\n const rpcResponse = await rpcServer.handle(req.body)\n res.json(rpcResponse)\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 = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {\n const srv = app.listen(port, hostname, () => {\n logger?.info(`[API] Server listening at http://${hostname}:${port}`)\n resolve(srv)\n })\n srv.once('error', reject)\n })\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","standardErrors","sharedMiddleware","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","rpcServerFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","rpcServer","rpcServerFromConnection","post","req","res","setRawResponseFormat","rpcResponse","handle","body","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","sharedMiddleware","addRoutes","use","standardErrors","hostname","getServer","context","logger","config","port","app","getApp","server","Promise","resolve","reject","srv","listen","info","once","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
+ {"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/livez/get.ts","../../src/server/routes/readyz/get.ts","../../src/server/routes/startupz/get.ts","../../src/server/routes/addProbeRoutes.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 { standardErrors } from '@xylabs/express'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { HostActorConfigContext } from '@xyo-network/xl1-sdk'\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 sharedMiddleware(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 type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getLivez: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getReadyz: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getStartupz: RequestHandler<NoReqParams> = handler\n","import type { Express } from 'express'\n\nimport { getLivez } from './livez/index.ts'\nimport { getReadyz } from './readyz/index.ts'\nimport { getStartupz } from './startupz/index.ts'\n\nexport const addProbeRoutes = (app: Express) => {\n app.get('/livez', getLivez)\n app.get('/readyz', getReadyz)\n app.get('/startupz', getStartupz)\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 { Request, Router } from 'express'\nimport express from 'express'\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 { rpcServerFromConnection, 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 rpcServer = rpcServerFromConnection(connection)\n\n app.post('/rpc', async (req, res) => {\n setRawResponseFormat(res)\n const rpcResponse = await rpcServer.handle(req.body)\n res.json(rpcResponse)\n })\n}\n","import type { Express } from 'express'\n\nimport { addProbeRoutes } from './addProbeRoutes.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n addProbeRoutes(app)\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 = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {\n const srv = app.listen(port, hostname, () => {\n logger?.info(`[API] Server listening at http://${hostname}:${port}`)\n resolve(srv)\n })\n srv.once('error', reject)\n })\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","standardErrors","sharedMiddleware","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getLivez","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getReadyz","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getStartupz","addProbeRoutes","app","get","getLivez","getReadyz","getStartupz","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","rpcServerFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","rpcServer","rpcServerFromConnection","post","req","res","setRawResponseFormat","rpcResponse","handle","body","json","addRoutes","app","addProbeRoutes","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","sharedMiddleware","addRoutes","use","standardErrors","hostname","getServer","context","logger","config","port","app","getApp","server","Promise","resolve","reject","srv","listen","info","once","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"]}
@@ -0,0 +1,3 @@
1
+ import type { Express } from 'express';
2
+ export declare const addProbeRoutes: (app: Express) => void;
3
+ //# sourceMappingURL=addProbeRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addProbeRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addProbeRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,SAI1C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAKtC,eAAO,MAAM,SAAS,GACpB,KAAK,OAAO,kBAIb,CAAA"}
1
+ {"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,SAAS,GACpB,KAAK,OAAO,kBAKb,CAAA"}
@@ -1 +1 @@
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
+ {"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,EAAW,MAAM,EAAE,MAAM,SAAS,CAAA;AAgB9C,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,4 +1,3 @@
1
1
  export * from './addRoutes.ts';
2
- export * from './healthz/index.ts';
3
2
  export * from './rpc/index.ts';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import type { NoReqParams } from '@xylabs/express';
2
2
  import type { RequestHandler } from 'express';
3
- export declare const getHealthz: RequestHandler<NoReqParams>;
3
+ export declare const getLivez: RequestHandler<NoReqParams>;
4
4
  //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/livez/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAU7C,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,WAAW,CAAW,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/livez/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { NoReqParams } from '@xylabs/express';
2
+ import type { RequestHandler } from 'express';
3
+ export declare const getReadyz: RequestHandler<NoReqParams>;
4
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/readyz/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAU7C,eAAO,MAAM,SAAS,EAAE,cAAc,CAAC,WAAW,CAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './get.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/readyz/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { NoReqParams } from '@xylabs/express';
2
+ import type { RequestHandler } from 'express';
3
+ export declare const getStartupz: RequestHandler<NoReqParams>;
4
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/startupz/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAU7C,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,WAAW,CAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './get.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/startupz/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.20.14",
3
+ "version": "1.20.16",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -22,81 +22,172 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "types": "./dist/node/index.d.ts",
25
- "source": "./src/index.ts",
26
25
  "default": "./dist/node/index.mjs"
27
26
  },
28
27
  "./package.json": "./package.json",
29
28
  "./README.md": "./README.md"
30
29
  },
31
30
  "module": "./dist/node/index.mjs",
32
- "source": "./src/index.ts",
33
31
  "types": "./dist/node/index.d.ts",
34
32
  "files": [
35
33
  "dist",
36
- "src",
37
34
  "!**/*.bench.*",
38
35
  "!**/*.spec.*",
39
- "!**/*.test.*"
36
+ "!**/*.test.*",
37
+ "README.md"
40
38
  ],
41
- "scripts": {
42
- "build-tests": "tsc --noEmit --lib dom,esnext",
43
- "deploy": "echo Deploy not allowed!",
44
- "deploy3": "echo Deploy3 not allowed!",
45
- "start": "nodemon",
46
- "start-esm": "node ./dist/node/index.mjs",
47
- "test": "vitest run",
48
- "test:ci": "vitest run",
49
- "types": "tsc --noEmit -p tsconfig.test.json"
50
- },
51
39
  "dependencies": {
52
40
  "@opentelemetry/instrumentation": "~0.214.0",
53
41
  "@opentelemetry/instrumentation-express": "~0.62.0",
54
42
  "@opentelemetry/instrumentation-http": "~0.214.0",
55
- "@xyo-network/chain-orchestration": "~1.20.14",
56
- "@xyo-network/sdk-js": "~5.3.20",
57
- "@xyo-network/xl1-sdk": "~1.26.11"
43
+ "@xylabs/express": "~5.0.95",
44
+ "@xyo-network/sdk-js": "~5.3.30",
45
+ "@xyo-network/xl1-sdk": "~1.26.19",
46
+ "express": "^5.2.1",
47
+ "http-status-codes": "~2.3.0",
48
+ "@xyo-network/chain-orchestration": "~1.20.16"
58
49
  },
59
50
  "devDependencies": {
60
51
  "@opentelemetry/api": "^1.9.1",
61
- "@types/express-serve-static-core": "~5.1.1",
62
- "@types/node": "~25.5.0",
63
- "@xylabs/express": "~5.0.90",
64
- "@xylabs/mongo": "~5.0.90",
65
- "@xylabs/sdk-js": "~5.0.90",
66
- "@xylabs/ts-scripts-common": "~7.5.11",
67
- "@xylabs/ts-scripts-yarn3": "~7.5.11",
68
- "@xylabs/tsconfig": "~7.5.11",
69
- "@xyo-network/sdk-js": "~5.3.20",
70
- "@xyo-network/xl1-sdk": "~1.26.11",
71
- "axios": "^1.13.6",
72
- "dotenv": "~17.3.1",
52
+ "@types/express": "^5.0.6",
53
+ "@types/node": "~25.5.2",
54
+ "@xylabs/mongo": "~5.0.95",
55
+ "@xylabs/sdk-js": "~5.0.95",
56
+ "@xylabs/ts-scripts-common": "~7.9.3",
57
+ "@xylabs/ts-scripts-pnpm": "~7.9.3",
58
+ "@xylabs/tsconfig": "~7.9.3",
59
+ "@xyo-network/account": "~5.3.30",
60
+ "@xyo-network/account-model": "~5.3",
61
+ "@xyo-network/api-models": "~5.3.30",
62
+ "@xyo-network/archivist-abstract": "~5.3",
63
+ "@xyo-network/archivist-generic": "~5.3.30",
64
+ "@xyo-network/archivist-memory": "~5.3.30",
65
+ "@xyo-network/archivist-model": "~5.3",
66
+ "@xyo-network/archivist-view": "~5.3.30",
67
+ "@xyo-network/archivist-wrapper": "~5.3",
68
+ "@xyo-network/boundwitness-builder": "~5.3.30",
69
+ "@xyo-network/boundwitness-validator": "~5.3",
70
+ "@xyo-network/bridge-abstract": "~5.3.30",
71
+ "@xyo-network/bridge-model": "~5.3.30",
72
+ "@xyo-network/config-payload-plugin": "~5.3.30",
73
+ "@xyo-network/data": "~5.3.30",
74
+ "@xyo-network/diviner-abstract": "~5.3",
75
+ "@xyo-network/diviner-boundwitness-memory": "~5.3.30",
76
+ "@xyo-network/diviner-identity": "~5.3.30",
77
+ "@xyo-network/diviner-model": "~5.3.30",
78
+ "@xyo-network/diviner-payload-generic": "~5.3.30",
79
+ "@xyo-network/diviner-payload-model": "~5.3.30",
80
+ "@xyo-network/diviner-wrapper": "~5.3",
81
+ "@xyo-network/dns": "~5.3.30",
82
+ "@xyo-network/domain-payload-plugin": "~5.3.30",
83
+ "@xyo-network/elliptic": "~5.3.30",
84
+ "@xyo-network/hash": "~5.3",
85
+ "@xyo-network/huri": "~5.3.30",
86
+ "@xyo-network/manifest-model": "~5.3",
87
+ "@xyo-network/module-abstract": "~5.3",
88
+ "@xyo-network/module-model": "~5.3",
89
+ "@xyo-network/module-model-mongodb": "~5.3",
90
+ "@xyo-network/module-resolver": "~5.3.30",
91
+ "@xyo-network/module-wrapper": "~5.3",
92
+ "@xyo-network/network": "~5.3.30",
93
+ "@xyo-network/node-abstract": "~5.3.30",
94
+ "@xyo-network/node-memory": "~5.3.30",
95
+ "@xyo-network/node-model": "~5.3.30",
96
+ "@xyo-network/node-view": "~5.3.30",
97
+ "@xyo-network/node-wrapper": "~5.3",
98
+ "@xyo-network/payload-builder": "~5.3",
99
+ "@xyo-network/payload-model": "~5.3.30",
100
+ "@xyo-network/payload-validator": "~5.3",
101
+ "@xyo-network/previous-hash-store-model": "~5.3.30",
102
+ "@xyo-network/sentinel-abstract": "~5.3.30",
103
+ "@xyo-network/sentinel-memory": "~5.3.30",
104
+ "@xyo-network/sentinel-model": "~5.3.30",
105
+ "@xyo-network/wallet-model": "~5.3.30",
106
+ "@xyo-network/wasm": "~5.3.30",
107
+ "@xyo-network/witness-adhoc": "~5.3.30",
108
+ "@xyo-network/witness-model": "~5.3.30",
109
+ "ajv": "^8",
110
+ "axios": "^1.14.0",
111
+ "dotenv": "~17.4.1",
112
+ "esbuild": ">=0.18",
73
113
  "ethers": "^6.16.0",
74
- "express": "^5.2.1",
75
- "http-status-codes": "~2.3.0",
114
+ "lmdb": "^3",
76
115
  "mongodb": "~7.1.1",
77
116
  "nodemon": "~3.1.14",
117
+ "pako": "~2.1.0",
78
118
  "tslib": "~2.8.1",
79
119
  "typescript": "~5.9.3",
80
- "vitest": "^4.1.2",
81
- "zod": "^4.3.6"
120
+ "vite": "^8.0.7",
121
+ "vitest": "^4.1.3",
122
+ "zod": "^4.3.6",
123
+ "@xyo-network/chain-services": "~1.20.16",
124
+ "@xyo-network/chain-telemetry": "~1.20.16"
82
125
  },
83
126
  "peerDependencies": {
84
- "@opentelemetry/api": "^1.9.0",
85
- "@xylabs/express": "*",
86
- "@xylabs/mongo": "^5",
87
- "@xylabs/sdk-js": "^5",
88
- "@xyo-network/sdk-js": "^5",
89
- "axios": "^1",
90
- "ethers": "^6",
91
- "express": "^5",
92
- "mongodb": "^7",
93
- "zod": "^4"
127
+ "@xylabs/sdk-js": "~5.0.93",
128
+ "@xyo-network/account": "~5.3.30",
129
+ "@xyo-network/account-model": "~5.3",
130
+ "@xyo-network/api-models": "~5.3.30",
131
+ "@xyo-network/archivist-abstract": "~5.3",
132
+ "@xyo-network/archivist-generic": "~5.3.30",
133
+ "@xyo-network/archivist-memory": "~5.3.30",
134
+ "@xyo-network/archivist-model": "~5.3",
135
+ "@xyo-network/archivist-view": "~5.3.30",
136
+ "@xyo-network/boundwitness-builder": "~5.3.30",
137
+ "@xyo-network/boundwitness-validator": "~5.3",
138
+ "@xyo-network/bridge-abstract": "~5.3.30",
139
+ "@xyo-network/bridge-model": "~5.3.30",
140
+ "@xyo-network/config-payload-plugin": "~5.3.30",
141
+ "@xyo-network/data": "~5.3.30",
142
+ "@xyo-network/diviner-boundwitness-memory": "~5.3.30",
143
+ "@xyo-network/diviner-identity": "~5.3.30",
144
+ "@xyo-network/diviner-model": "~5.3.30",
145
+ "@xyo-network/diviner-payload-generic": "~5.3.30",
146
+ "@xyo-network/diviner-payload-model": "~5.3.30",
147
+ "@xyo-network/dns": "~5.3.30",
148
+ "@xyo-network/domain-payload-plugin": "~5.3.30",
149
+ "@xyo-network/elliptic": "~5.3.30",
150
+ "@xyo-network/hash": "~5.3",
151
+ "@xyo-network/huri": "~5.3.30",
152
+ "@xyo-network/manifest-model": "~5.3",
153
+ "@xyo-network/module-abstract": "~5.3",
154
+ "@xyo-network/module-model": "~5.3",
155
+ "@xyo-network/module-model-mongodb": "~5.3",
156
+ "@xyo-network/module-resolver": "~5.3.30",
157
+ "@xyo-network/network": "~5.3.30",
158
+ "@xyo-network/node-abstract": "~5.3.30",
159
+ "@xyo-network/node-memory": "~5.3.30",
160
+ "@xyo-network/node-model": "~5.3.30",
161
+ "@xyo-network/node-view": "~5.3.30",
162
+ "@xyo-network/payload-builder": "~5.3",
163
+ "@xyo-network/payload-model": "~5.3.30",
164
+ "@xyo-network/payload-validator": "~5.3",
165
+ "@xyo-network/previous-hash-store-model": "~5.3.30",
166
+ "@xyo-network/sentinel-abstract": "~5.3.30",
167
+ "@xyo-network/sentinel-memory": "~5.3.30",
168
+ "@xyo-network/sentinel-model": "~5.3.30",
169
+ "@xyo-network/wallet-model": "~5.3.30",
170
+ "@xyo-network/wasm": "~5.3.30",
171
+ "@xyo-network/witness-adhoc": "~5.3.30",
172
+ "@xyo-network/witness-model": "~5.3.30",
173
+ "ethers": "^6.16.0",
174
+ "pako": "~2.1.0",
175
+ "@xyo-network/chain-telemetry": "~1.20.16",
176
+ "@xyo-network/chain-services": "~1.20.16"
94
177
  },
95
178
  "engines": {
96
- "node": ">=22.3 <23"
179
+ "node": ">=24"
97
180
  },
98
181
  "engineStrict": true,
99
182
  "publishConfig": {
100
183
  "access": "restricted"
184
+ },
185
+ "scripts": {
186
+ "build-tests": "tsc --noEmit --lib dom,esnext",
187
+ "deploy": "echo Deploy not allowed!",
188
+ "deploy3": "echo Deploy3 not allowed!",
189
+ "start": "nodemon",
190
+ "start-esm": "node ./dist/node/index.mjs",
191
+ "types": "tsc --noEmit -p tsconfig.test.json"
101
192
  }
102
- }
193
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiB7C,eAAO,MAAM,UAAU,EAAE,cAAc,CAAC,WAAW,CAAW,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
package/src/ApiActor.ts DELETED
@@ -1,42 +0,0 @@
1
- import { Server } from 'node:http'
2
-
3
- import { creatable } from '@xylabs/sdk-js'
4
- import { ApiConfig } from '@xyo-network/chain-orchestration'
5
- import {
6
- ActorParamsV3, ActorV3, asHostActorConfigContext,
7
- } from '@xyo-network/xl1-sdk'
8
-
9
- import { getServer } from './server/index.ts'
10
-
11
- export type ApiActorParams = ActorParamsV3<{
12
- config: ApiConfig
13
- }>
14
-
15
- @creatable()
16
- export class ApiActor extends ActorV3<ApiActorParams> {
17
- private server?: Server
18
-
19
- override async createHandler() {
20
- await super.createHandler()
21
- }
22
-
23
- override async startHandler() {
24
- await super.startHandler()
25
- this.stopServer()
26
- await this.startServer()
27
- }
28
-
29
- override async stopHandler() {
30
- await super.stopHandler()
31
- this.stopServer()
32
- }
33
-
34
- private async startServer() {
35
- this.server = await getServer(asHostActorConfigContext(this.context, true))
36
- }
37
-
38
- private stopServer() {
39
- this.server?.close()
40
- this.server = undefined
41
- }
42
- }
package/src/global.d.ts DELETED
@@ -1,13 +0,0 @@
1
- export * from './app.ts'
2
- export * from './server.ts'
3
-
4
- import type { ApiContext } from './ApiContext.ts'
5
-
6
- declare global {
7
-
8
- namespace Express {
9
- interface Application {
10
- context: ApiContext
11
- }
12
- }
13
- }
@@ -1,3 +0,0 @@
1
- export * from './initChainId.ts'
2
- export * from './initInfuraProvider.ts'
3
- export * from './initJsonRpcProvider.ts'
@@ -1,20 +0,0 @@
1
- import {
2
- assertEx, hexFrom, isDefined, isHex,
3
- } from '@xylabs/sdk-js'
4
- import type { Config } from '@xyo-network/xl1-sdk'
5
-
6
- export const canUseChainId = (config: Config): boolean => {
7
- return isDefined(config.evm.chainId)
8
- }
9
-
10
- export const getChainId = (config: Config) => {
11
- const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')
12
- if (isHex(chainId, { prefix: true })) {
13
- const hex = hexFrom(chainId)
14
- const parsed = Number.parseInt(hex, 16)
15
- return parsed
16
- } else {
17
- const parsed = Number.parseInt(chainId, 10)
18
- return parsed
19
- }
20
- }
@@ -1,27 +0,0 @@
1
- import { assertEx, isDefined } from '@xylabs/sdk-js'
2
- import type { Config } from '@xyo-network/xl1-sdk'
3
- import type { Provider } from 'ethers'
4
- import { InfuraProvider } from 'ethers/providers'
5
-
6
- import { canUseChainId, getChainId } from './initChainId.ts'
7
-
8
- let instance: Promise<InfuraProvider> | undefined
9
-
10
- export const initInfuraProvider = (config: Config): Promise<Provider> => {
11
- if (instance) return instance
12
- const providerConfig = getInfuraProviderConfig(config)
13
- instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]))
14
- return instance
15
- }
16
-
17
- export const canUseInfuraProvider = (config: Config): boolean => {
18
- return canUseChainId(config)
19
- && isDefined(config.evm?.infura?.projectId)
20
- && isDefined(config.evm?.infura?.projectSecret)
21
- }
22
-
23
- export const getInfuraProviderConfig = (config: Config) => {
24
- const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')
25
- const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')
26
- return [getChainId(config), projectId, projectSecret] as const
27
- }
@@ -1,20 +0,0 @@
1
- import { assertEx, isDefined } from '@xylabs/sdk-js'
2
- import type { Config } from '@xyo-network/xl1-sdk'
3
- import { JsonRpcProvider } from 'ethers/providers'
4
-
5
- import { canUseChainId, getChainId } from './initChainId.ts'
6
-
7
- export const initJsonRpcProvider = (config: Config) => {
8
- const providerConfig = getJsonRpcProviderConfig(config)
9
- return Promise.resolve(new JsonRpcProvider(...providerConfig))
10
- }
11
-
12
- export const canUseJsonRpcProvider = (config: Config) => {
13
- return canUseChainId(config)
14
- && isDefined(config.evm.jsonRpc?.url)
15
- }
16
-
17
- export const getJsonRpcProviderConfig = (config: Config) => {
18
- const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')
19
- return [jsonRpcUrl, getChainId(config)] as const
20
- }
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './ApiActor.ts'
2
- export * from './model.ts'
3
- export * from './runApi.ts'
4
- export * from './server/index.ts'
package/src/model.ts DELETED
@@ -1,5 +0,0 @@
1
- import type { BaseContext, Config } from '@xyo-network/xl1-sdk'
2
-
3
- export interface AppContext extends BaseContext {
4
- config: Config
5
- }
package/src/runApi.ts DELETED
@@ -1,35 +0,0 @@
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'
4
-
5
- import { ApiActor } from './ApiActor.ts'
6
-
7
- export const getApiActor = async (
8
- config: ApiConfig,
9
- locator: ProviderFactoryLocatorInstance,
10
- ) => {
11
- const account = await initActorWallet({
12
- config, singletons: {}, caches: {},
13
- })
14
- const params = {
15
- account, config, locator,
16
- }
17
- // Create actors
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)]
27
-
28
- // Register the actors with the orchestrator
29
- for (const actor of actors) {
30
- await orchestrator.registerActor(actor)
31
- }
32
-
33
- // Start the orchestrator => automatically activates the actors
34
- await orchestrator.start()
35
- }
package/src/server/app.ts DELETED
@@ -1,18 +0,0 @@
1
- import { standardErrors } from '@xylabs/express'
2
- import { sharedMiddleware } from '@xyo-network/chain-orchestration'
3
- import type { HostActorConfigContext } from '@xyo-network/xl1-sdk'
4
- import type { Express } from 'express'
5
- import express from 'express'
6
-
7
- import { addInstrumentation } from './instrumentation.ts'
8
- import { addRoutes } from './routes/index.ts'
9
-
10
- export const getApp = async (context: HostActorConfigContext): Promise<Express> => {
11
- addInstrumentation()
12
- const app = express()
13
- sharedMiddleware(app)
14
- app.context = context
15
- await addRoutes(app)
16
- app.use(standardErrors)
17
- return app
18
- }
@@ -1,2 +0,0 @@
1
- export * from './app.ts'
2
- export * from './server.ts'
@@ -1,15 +0,0 @@
1
- import { registerInstrumentations } from '@opentelemetry/instrumentation'
2
- import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'
3
- import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'
4
-
5
- /**
6
- * Registers OpenTelemetry instrumentations for HTTP and Express.
7
- * This function is used to set up the necessary instrumentations for monitoring
8
- * HTTP requests and Express applications. Since it monkey patches the Express
9
- * router & middleware system, it should be called before any Express applications
10
- * are defined.
11
- */
12
- export const addInstrumentation = () => {
13
- const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]
14
- registerInstrumentations({ instrumentations })
15
- }
@@ -1,11 +0,0 @@
1
- import type { Express } from 'express'
2
-
3
- import { addDataLakeRoutes } from './dataLake/index.ts'
4
- import { addRpcRoutes } from './rpc/index.ts'
5
-
6
- export const addRoutes = async (
7
- app: Express,
8
- ) => {
9
- await addRpcRoutes(app)
10
- addDataLakeRoutes(app)
11
- }
@@ -1,9 +0,0 @@
1
- import type { Express } from 'express'
2
-
3
- import { archivistMiddleware } from './archivistMiddleware.ts'
4
-
5
- export const addDataLakeRoutes = (app: Express) => {
6
- const { node } = app.context
7
- const archivistModuleIdentifier = 'Chain:Finalized'
8
- app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))
9
- }
@@ -1,83 +0,0 @@
1
- import { setRawResponseFormat } from '@xylabs/express'
2
- import { asHash, isDefined } from '@xylabs/sdk-js'
3
- import type {
4
- ArchivistInstance,
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'
11
- import type { Router } from 'express'
12
- import express from 'express'
13
- import type { Request } from 'express-serve-static-core'
14
-
15
- const resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {
16
- const mod = await node.resolve(archivistModuleIdentifier)
17
- return asArchivistInstance(mod, { required: true })
18
- }
19
-
20
- let archivistInstance: ArchivistInstance | undefined
21
-
22
- const getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {
23
- if (isDefined(archivistInstance)) return archivistInstance
24
- archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)
25
- return archivistInstance
26
- }
27
-
28
- type ArchivistMiddlewareOptions = {
29
- archivistModuleIdentifier: ModuleIdentifier
30
- node: NodeInstance
31
- }
32
-
33
- export const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {
34
- const { node, archivistModuleIdentifier } = options
35
- const router = express.Router({ mergeParams: true })
36
-
37
- router.post('/insert', async (req, res) => {
38
- setRawResponseFormat(res)
39
- const body = Array.isArray(req.body) ? req.body : [req.body]
40
- const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])
41
- const archivist = await getArchivist(node, archivistModuleIdentifier)
42
- const result = await archivist.insert(payloads)
43
- res.status(200).json(result)
44
- })
45
-
46
- router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {
47
- setRawResponseFormat(res)
48
- const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined
49
- const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined
50
- const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined
51
- const order = req.query.order === 'asc' ? 'asc' : 'desc'
52
- const options: ArchivistNextOptions = {
53
- limit, open, order, cursor,
54
- }
55
- const archivist = await getArchivist(node, archivistModuleIdentifier)
56
- const result = await archivist.next(options)
57
- res.status(200).json(result)
58
- })
59
- router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {
60
- setRawResponseFormat(res)
61
- const options = req.body
62
- const archivist = await getArchivist(node, archivistModuleIdentifier)
63
- const result = await (isDefined(options) ? archivist.next(options) : archivist.next())
64
- res.status(200).json(result)
65
- })
66
-
67
- router.get('/get/:hash', async (req, res) => {
68
- setRawResponseFormat(res)
69
- const { hash: rawHash } = req.params
70
- const hash = asHash(rawHash)
71
- if (isDefined(hash)) {
72
- const archivist = await getArchivist(node, archivistModuleIdentifier)
73
- const [payload] = await archivist.get([hash])
74
- if (isAnyPayload(payload)) {
75
- res.json(payload)
76
- return
77
- }
78
- }
79
- res.status(400).send()
80
- })
81
-
82
- return router
83
- }
@@ -1 +0,0 @@
1
- export * from './addDataLakeRoutes.ts'
@@ -1,20 +0,0 @@
1
- import type { NoReqParams } from '@xylabs/express'
2
- import { setRawResponseFormat } from '@xylabs/express'
3
- import type { RequestHandler } from 'express'
4
- import { ReasonPhrases } from 'http-status-codes'
5
-
6
- const message = ReasonPhrases.OK
7
-
8
- const handler: RequestHandler<NoReqParams> = (_req, res) => {
9
- setRawResponseFormat(res)
10
- const date = new Date()
11
- const {
12
- cpuUsage, memoryUsage, uptime,
13
- } = process
14
- const data = {
15
- cpuUsage: cpuUsage(), date, memoryUsage: memoryUsage(), message, uptime: uptime(),
16
- }
17
- res.status(200).send(data)
18
- }
19
-
20
- export const getHealthz: RequestHandler<NoReqParams> = handler
@@ -1 +0,0 @@
1
- export * from './get.ts'
@@ -1,3 +0,0 @@
1
- export * from './addRoutes.ts'
2
- export * from './healthz/index.ts'
3
- export * from './rpc/index.ts'
@@ -1 +0,0 @@
1
- export * from './routes/index.ts'
@@ -1,20 +0,0 @@
1
- import { setRawResponseFormat } from '@xylabs/express'
2
- import type { XyoConnection } from '@xyo-network/xl1-sdk'
3
- import { rpcServerFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'
4
- import type { Express } from 'express'
5
-
6
- export const addRpcRoutes = async (
7
- app: Express,
8
- ) => {
9
- const { context } = app
10
- const { locator } = context
11
-
12
- const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)
13
- const rpcServer = rpcServerFromConnection(connection)
14
-
15
- app.post('/rpc', async (req, res) => {
16
- setRawResponseFormat(res)
17
- const rpcResponse = await rpcServer.handle(req.body)
18
- res.json(rpcResponse)
19
- })
20
- }
@@ -1 +0,0 @@
1
- export * from './addRpcRoutes.ts'
@@ -1,21 +0,0 @@
1
- import type { HostActorConfigContext } from '@xyo-network/xl1-sdk'
2
-
3
- import { getApp } from './app.ts'
4
-
5
- const hostname = '::'
6
-
7
- export async function getServer(context: HostActorConfigContext) {
8
- const { logger, config } = context
9
- const { port } = config
10
-
11
- const app = await getApp(context)
12
- const server = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {
13
- const srv = app.listen(port, hostname, () => {
14
- logger?.info(`[API] Server listening at http://${hostname}:${port}`)
15
- resolve(srv)
16
- })
17
- srv.once('error', reject)
18
- })
19
- server.setTimeout(20_000)
20
- return server
21
- }