@xyo-network/chain-api 1.19.13 → 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.
- package/dist/node/ApiActor.d.ts +3 -2
- package/dist/node/ApiActor.d.ts.map +1 -1
- package/dist/node/index.mjs +17 -15
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/runApi.d.ts +5 -3
- package/dist/node/runApi.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +2 -2
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/server.d.ts +2 -2
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +42 -28
- package/src/ApiActor.ts +4 -3
- package/src/runApi.ts +17 -12
- package/src/server/app.ts +2 -2
- package/src/server/routes/dataLake/archivistMiddleware.ts +1 -1
- package/src/server/server.ts +4 -4
package/dist/node/ApiActor.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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,
|
|
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"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -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 } =
|
|
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 {
|
|
208
|
-
|
|
209
|
-
|
|
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
|
-
|
|
211
|
+
singletons: {},
|
|
212
|
+
caches: {}
|
|
213
213
|
});
|
|
214
214
|
const params = {
|
|
215
215
|
account,
|
|
216
216
|
config,
|
|
217
217
|
locator
|
|
218
218
|
};
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport {\n ActorParamsV3, ActorV3, Config,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParamsV3<{\n config: Config\n}>\n\n@creatable()\nexport class ApiActor extends ActorV3<ApiActorParams> {\n private server?: Server\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(this.context)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { CreatableProviderContext } from '@xyo-network/xl1-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (context: CreatableProviderContext): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.context = context\n await addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app.context\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcEngineFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n const engine = rpcEngineFromConnection(connection)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n await addRpcRoutes(app)\n addDataLakeRoutes(app)\n}\n","import type { CreatableProviderContext } from '@xyo-network/xl1-sdk'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n\nexport async function getServer(context: CreatableProviderContext) {\n const { logger } = context\n const { port } = context.config.actors.api\n\n const app = await getApp(context)\n const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { MempoolActor } from '@xyo-network/chain-mempool'\nimport type { OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { initApiWallet, ValidatorActor } from '@xyo-network/chain-orchestration'\nimport type {\n Config,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport { ApiActor } from './ApiActor.ts'\n\nexport const runApi = async (\n config: Config,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initApiWallet({ config, logger: locator.context.logger })\n const params = {\n account, config, locator,\n }\n // Create actors\n const actors = await Promise.all([ApiActor.create(params), MempoolActor.create(params), ValidatorActor.create(params)])\n\n // Register the actors with the orchestrator\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n // Start the orchestrator => automatically activates the actors\n await orchestrator.start()\n}\n"],"mappings":"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","names":["creatable","ActorV3","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","context","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","rpcEngineFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","hostname","getServer","context","logger","port","config","actors","api","app","getApp","server","listen","info","setTimeout","ApiActor","ActorV3","server","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","context","close","undefined","MempoolActor","initApiWallet","ValidatorActor","runApi","config","orchestrator","locator","account","initApiWallet","logger","context","params","actors","Promise","all","ApiActor","create","MempoolActor","ValidatorActor","actor","registerActor","start"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport { ApiConfig } from '@xyo-network/chain-orchestration'\nimport {\n ActorParamsV3, ActorV3, asHostActorConfigContext,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParamsV3<{\n config: ApiConfig\n}>\n\n@creatable()\nexport class ApiActor extends ActorV3<ApiActorParams> {\n private server?: Server\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true))\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { HostActorConfigContext } from '@xyo-network/xl1-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (context: HostActorConfigContext): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.context = context\n await addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, 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"]}
|
package/dist/node/runApi.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { OrchestratorInstance } from '@xyo-network/chain-orchestration';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
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":"
|
|
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 {
|
|
1
|
+
import type { HostActorConfigContext } from '@xyo-network/xl1-sdk';
|
|
2
2
|
import type { Express } from 'express';
|
|
3
|
-
export declare const getApp: (context:
|
|
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,
|
|
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 {
|
|
2
|
-
export declare function getServer(context:
|
|
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,
|
|
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.
|
|
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.
|
|
52
|
+
"@opentelemetry/instrumentation": "~0.212.0",
|
|
53
53
|
"@opentelemetry/instrumentation-express": "~0.59.0",
|
|
54
|
-
"@opentelemetry/instrumentation-http": "~0.
|
|
55
|
-
"@
|
|
56
|
-
"@
|
|
57
|
-
"@xyo-network/
|
|
58
|
-
"@xyo-network/
|
|
59
|
-
"@xyo-network/
|
|
60
|
-
"@xyo-network/
|
|
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.
|
|
81
|
-
"@xyo-network/account-model": "~5.3.
|
|
82
|
-
"@xyo-network/archivist-abstract": "~5.3.
|
|
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.
|
|
85
|
-
"@xyo-network/chain-services": "~1.19.
|
|
86
|
-
"@xyo-network/module-abstract-mongodb": "~5.3.
|
|
87
|
-
"@xyo-network/module-model-mongodb": "~5.3.
|
|
88
|
-
"@xyo-network/node-memory": "~5.3.
|
|
89
|
-
"@xyo-network/
|
|
90
|
-
"
|
|
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,
|
|
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:
|
|
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 {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
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
|
|
12
|
-
config:
|
|
13
|
-
orchestrator: OrchestratorInstance,
|
|
7
|
+
export const getApiActor = async (
|
|
8
|
+
config: ApiConfig,
|
|
14
9
|
locator: ProviderFactoryLocatorInstance,
|
|
15
10
|
) => {
|
|
16
|
-
const account = await
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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'
|
package/src/server/server.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
8
|
-
const { logger } = context
|
|
9
|
-
const { port } =
|
|
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}`))
|