@xyo-network/chain-api 1.20.29 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACtG,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAc1D,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,SAAS,CAAA;CAClB,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,OAAO,CAAC,cAAc,CAAC;IACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAU1C;IAED,OAAO,CAAC,MAAM,CAAC,CAAQ;IAER,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAC/C,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAc1D,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,SAAS,CAAA;CAClB,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,OAAO,CAAC,cAAc,CAAC;IACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAU1C;IAED,OAAO,CAAC,MAAM,CAAC,CAAQ;IAER,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,5 @@
1
+ import type { GetLocatorsFromConfig } from '@xyo-network/chain-orchestration';
2
+ import type { Config } from '@xyo-network/xl1-sdk';
3
+ import type { CommandModule } from 'yargs';
4
+ export declare function apiCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule;
5
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAK7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAI1C,wBAAgB,UAAU,CAAC,gBAAgB,EAAE,MAAM,MAAM,EAAE,qBAAqB,EAAE,qBAAqB,GAAG,aAAa,CA0BtH"}
@@ -1,5 +1,6 @@
1
1
  export * from './ApiActor.ts';
2
+ export * from './command.ts';
2
3
  export * from './model.ts';
3
- export * from './runApi.ts';
4
+ export * from './run.ts';
4
5
  export * from './server/index.ts';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA"}
@@ -155,17 +155,48 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
155
155
  // src/server/routes/rpc/routes/addRpcRoutes.ts
156
156
  import { setRawResponseFormat as setRawResponseFormat5 } from "@xylabs/express";
157
157
  import { rpcServerFromConnection, XyoConnectionMoniker } from "@xyo-network/xl1-sdk";
158
+
159
+ // src/server/routes/rpc/connectionSubsetBySurface.ts
160
+ import { connectionSubsetBySurface } from "@xyo-network/xl1-sdk";
161
+
162
+ // src/server/routes/rpc/routes/addRpcRoutes.ts
158
163
  var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
159
164
  const { context } = app;
160
165
  const { locator } = context;
166
+ const apiConfig = context.config;
167
+ const useLegacyMixed = apiConfig.legacyMixedRpc !== false;
161
168
  const connection = await locator.getInstance(XyoConnectionMoniker);
162
- const rpcServer = rpcServerFromConnection(connection);
169
+ const indexedPresent = hasAnyIndexedBranch(connection);
170
+ if (useLegacyMixed && indexedPresent) {
171
+ context.logger?.warn("[api] /rpc is serving indexed methods (LEGACY_MIXED_RPC=true). Indexed clients should migrate to /rpc/indexed; flip XL1_ACTORS__API__LEGACY_MIXED_RPC=false to enforce strict node-surface-only at /rpc.");
172
+ }
173
+ const rpcConnection = useLegacyMixed ? connection : connectionSubsetBySurface(connection, "node");
174
+ const rpcServer = rpcServerFromConnection(rpcConnection);
163
175
  app.post("/rpc", async (req, res) => {
164
176
  setRawResponseFormat5(res);
165
177
  const rpcResponse = await rpcServer.handle(req.body);
166
178
  res.json(rpcResponse);
167
179
  });
180
+ if (indexedPresent) {
181
+ const indexedConnection = connectionSubsetBySurface(connection, "indexed");
182
+ const indexedRpcServer = rpcServerFromConnection(indexedConnection);
183
+ app.post("/rpc/indexed", async (req, res) => {
184
+ setRawResponseFormat5(res);
185
+ const rpcResponse = await indexedRpcServer.handle(req.body);
186
+ res.json(rpcResponse);
187
+ });
188
+ }
168
189
  }, "addRpcRoutes");
190
+ function hasAnyIndexedBranch(connection) {
191
+ if (connection.networkStake) return true;
192
+ if (connection.storage) return true;
193
+ if (connection.viewer) {
194
+ const v = connection.viewer;
195
+ if (v.networkStake || v.stake || v.step) return true;
196
+ }
197
+ return false;
198
+ }
199
+ __name(hasAnyIndexedBranch, "hasAnyIndexedBranch");
169
200
 
170
201
  // src/server/routes/addRoutes.ts
171
202
  var addRoutes = /* @__PURE__ */ __name(async (app) => {
@@ -251,7 +282,12 @@ ApiActor = _ts_decorate([
251
282
  creatable()
252
283
  ], ApiActor);
253
284
 
254
- // src/runApi.ts
285
+ // src/command.ts
286
+ import { getFinalizerActor } from "@xyo-network/chain-finalizer";
287
+ import { getMempoolActor } from "@xyo-network/chain-mempool";
288
+ import { ApiConfigZod, FinalizerConfigZod, MempoolConfigZod } from "@xyo-network/chain-orchestration";
289
+
290
+ // src/run.ts
255
291
  import { initActorWallet } from "@xyo-network/chain-orchestration";
256
292
  var getApiActor = /* @__PURE__ */ __name(async (config, locator) => {
257
293
  const account = await initActorWallet({
@@ -275,8 +311,36 @@ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
275
311
  }
276
312
  await orchestrator.start();
277
313
  }, "runApi");
314
+
315
+ // src/command.ts
316
+ function apiCommand(getConfiguration, getLocatorsFromConfig) {
317
+ return {
318
+ command: "api",
319
+ deprecated: 'Use "start api" instead',
320
+ describe: "Run a XL1 API Node",
321
+ handler: /* @__PURE__ */ __name(async () => {
322
+ const configuration = getConfiguration();
323
+ const { locators, orchestrator } = await getLocatorsFromConfig([
324
+ "api",
325
+ "mempool",
326
+ "finalizer"
327
+ ], configuration);
328
+ const actors = await Promise.all([
329
+ getApiActor(ApiConfigZod.parse(locators["api"].context.config), locators["api"]),
330
+ getMempoolActor(MempoolConfigZod.parse(locators["mempool"].context.config), locators["mempool"]),
331
+ getFinalizerActor(FinalizerConfigZod.parse(locators["finalizer"].context.config), locators["finalizer"])
332
+ ]);
333
+ for (const actor of actors) {
334
+ await orchestrator.registerActor(actor);
335
+ }
336
+ await orchestrator.start();
337
+ }, "handler")
338
+ };
339
+ }
340
+ __name(apiCommand, "apiCommand");
278
341
  export {
279
342
  ApiActor,
343
+ apiCommand,
280
344
  getApiActor,
281
345
  getApp,
282
346
  getServer,
@@ -1 +1 @@
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 type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type { ActorCapabilityNeeds, ActorParamsV3, ApiConfig } from '@xyo-network/chain-orchestration'\nimport { ActorV3 } from '@xyo-network/chain-orchestration'\nimport {\n AccountBalanceViewerMoniker,\n asHostActorConfigContext,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\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 static readonly needs: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n }\n\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\ninterface 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","AccountBalanceViewerMoniker","asHostActorConfigContext","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","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","needs","required","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","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/rpc/connectionSubsetBySurface.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/command.ts","../../src/run.ts"],"sourcesContent":["import type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type {\n ActorCapabilityNeeds, ActorParamsV3, ApiConfig,\n} from '@xyo-network/chain-orchestration'\nimport { ActorV3 } from '@xyo-network/chain-orchestration'\nimport {\n AccountBalanceViewerMoniker,\n asHostActorConfigContext,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\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 static readonly needs: ActorCapabilityNeeds = {\n required: [\n AccountBalanceViewerMoniker,\n BlockViewerMoniker,\n FinalizationViewerMoniker,\n MempoolViewerMoniker,\n TransactionViewerMoniker,\n XyoConnectionMoniker,\n XyoViewerMoniker,\n ],\n }\n\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\ninterface 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 { ApiConfigContext } from '@xyo-network/chain-orchestration'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcServerFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { connectionSubsetBySurface } from '../connectionSubsetBySurface.ts'\n\n/**\n * Mounts the JSON-RPC route(s) on the Express app.\n *\n * Two endpoints are exposed:\n * - `POST /rpc` — gated by `ApiConfig.legacyMixedRpc`:\n * - `legacyMixedRpc=true` (default): serves the full `XyoConnection`\n * including indexed-surface methods (stake/networkStake/step). Preserves\n * pre-Phase-7 behavior for clients that haven't migrated to `/rpc/indexed`.\n * - `legacyMixedRpc=false`: serves only node-surface methods\n * (block, transaction, mempool, finality, account-balance, time-sync).\n * - `POST /rpc/indexed` — indexed-surface methods only (cross-key/aggregate\n * queries). Mounted independently of `legacyMixedRpc` whenever the locator's\n * connection has indexed branches; omitted otherwise to keep the advertised\n * surface honest.\n *\n * Both endpoints share the same underlying `XyoConnection`; surface filters\n * are applied via `connectionSubsetBySurface` immediately before constructing\n * each endpoint's RPC server. The downstream `rpcMethodHandlersFromConnection`\n * walker doesn't need to know about surfaces — it naturally produces a smaller\n * method set when handed a smaller connection.\n */\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n const apiConfig = (context as unknown as ApiConfigContext).config\n const useLegacyMixed = apiConfig.legacyMixedRpc !== false\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n const indexedPresent = hasAnyIndexedBranch(connection)\n\n if (useLegacyMixed && indexedPresent) {\n context.logger?.warn(\n '[api] /rpc is serving indexed methods (LEGACY_MIXED_RPC=true). '\n + 'Indexed clients should migrate to /rpc/indexed; flip XL1_ACTORS__API__LEGACY_MIXED_RPC=false to enforce strict node-surface-only at /rpc.',\n )\n }\n\n const rpcConnection = useLegacyMixed ? connection : connectionSubsetBySurface(connection, 'node')\n const rpcServer = rpcServerFromConnection(rpcConnection)\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 if (indexedPresent) {\n const indexedConnection = connectionSubsetBySurface(connection, 'indexed')\n const indexedRpcServer = rpcServerFromConnection(indexedConnection)\n app.post('/rpc/indexed', async (req, res) => {\n setRawResponseFormat(res)\n const rpcResponse = await indexedRpcServer.handle(req.body)\n res.json(rpcResponse)\n })\n }\n}\n\nfunction hasAnyIndexedBranch(connection: XyoConnection): boolean {\n if (connection.networkStake) return true\n if (connection.storage) return true\n if (connection.viewer) {\n const v = connection.viewer\n if (v.networkStake || v.stake || v.step) return true\n }\n return false\n}\n","/**\n * The canonical implementation of `connectionSubsetBySurface` lives in\n * `@xyo-network/xl1-protocol-sdk` (re-exported via `@xyo-network/xl1-sdk`).\n * This file re-exports it so existing imports inside this package keep\n * working without churn.\n */\nexport { connectionSubsetBySurface } from '@xyo-network/xl1-sdk'\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 { getFinalizerActor } from '@xyo-network/chain-finalizer'\nimport { getMempoolActor } from '@xyo-network/chain-mempool'\nimport type { GetLocatorsFromConfig } from '@xyo-network/chain-orchestration'\nimport {\n ApiConfigZod, FinalizerConfigZod,\n MempoolConfigZod,\n} from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { CommandModule } from 'yargs'\n\nimport { getApiActor } from './run.ts'\n\nexport function apiCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: 'api',\n deprecated: 'Use \"start api\" instead',\n describe: 'Run a XL1 API Node',\n handler: async () => {\n const configuration = getConfiguration()\n const { locators, orchestrator } = await getLocatorsFromConfig(['api', 'mempool', 'finalizer'], configuration)\n const actors = await Promise.all([getApiActor(\n ApiConfigZod.parse(locators['api'].context.config),\n locators['api'],\n ), getMempoolActor(\n MempoolConfigZod.parse(locators['mempool'].context.config),\n locators['mempool'],\n ), getFinalizerActor(\n FinalizerConfigZod.parse(locators['finalizer'].context.config),\n locators['finalizer'],\n )])\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n\n await orchestrator.start()\n },\n }\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","AccountBalanceViewerMoniker","asHostActorConfigContext","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","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","connectionSubsetBySurface","addRpcRoutes","app","context","locator","apiConfig","config","useLegacyMixed","legacyMixedRpc","connection","getInstance","XyoConnectionMoniker","indexedPresent","hasAnyIndexedBranch","logger","warn","rpcConnection","connectionSubsetBySurface","rpcServer","rpcServerFromConnection","post","req","res","setRawResponseFormat","rpcResponse","handle","body","json","indexedConnection","indexedRpcServer","networkStake","storage","viewer","v","stake","step","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","needs","required","AccountBalanceViewerMoniker","BlockViewerMoniker","FinalizationViewerMoniker","MempoolViewerMoniker","TransactionViewerMoniker","XyoConnectionMoniker","XyoViewerMoniker","server","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","asHostActorConfigContext","context","close","undefined","getFinalizerActor","getMempoolActor","ApiConfigZod","FinalizerConfigZod","MempoolConfigZod","initActorWallet","getApiActor","config","locator","account","initActorWallet","singletons","caches","params","ApiActor","create","runApi","orchestrator","actors","actor","registerActor","start","apiCommand","getConfiguration","getLocatorsFromConfig","command","deprecated","describe","handler","configuration","locators","orchestrator","actors","Promise","all","getApiActor","ApiConfigZod","parse","context","config","getMempoolActor","MempoolConfigZod","getFinalizerActor","FinalizerConfigZod","actor","registerActor","start"]}
@@ -3,4 +3,4 @@ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
3
  import { ApiActor } from './ApiActor.ts';
4
4
  export declare const getApiActor: (config: ApiConfig, locator: ProviderFactoryLocatorInstance) => Promise<ApiActor>;
5
5
  export declare const runApi: (config: ApiConfig, orchestrator: OrchestratorInstance, locator: ProviderFactoryLocatorInstance) => Promise<void>;
6
- //# sourceMappingURL=runApi.d.ts.map
6
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The canonical implementation of `connectionSubsetBySurface` lives in
3
+ * `@xyo-network/xl1-protocol-sdk` (re-exported via `@xyo-network/xl1-sdk`).
4
+ * This file re-exports it so existing imports inside this package keep
5
+ * working without churn.
6
+ */
7
+ export { connectionSubsetBySurface } from '@xyo-network/xl1-sdk';
8
+ //# sourceMappingURL=connectionSubsetBySurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionSubsetBySurface.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/rpc/connectionSubsetBySurface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -1,3 +1,24 @@
1
1
  import type { Express } from 'express';
2
+ /**
3
+ * Mounts the JSON-RPC route(s) on the Express app.
4
+ *
5
+ * Two endpoints are exposed:
6
+ * - `POST /rpc` — gated by `ApiConfig.legacyMixedRpc`:
7
+ * - `legacyMixedRpc=true` (default): serves the full `XyoConnection`
8
+ * including indexed-surface methods (stake/networkStake/step). Preserves
9
+ * pre-Phase-7 behavior for clients that haven't migrated to `/rpc/indexed`.
10
+ * - `legacyMixedRpc=false`: serves only node-surface methods
11
+ * (block, transaction, mempool, finality, account-balance, time-sync).
12
+ * - `POST /rpc/indexed` — indexed-surface methods only (cross-key/aggregate
13
+ * queries). Mounted independently of `legacyMixedRpc` whenever the locator's
14
+ * connection has indexed branches; omitted otherwise to keep the advertised
15
+ * surface honest.
16
+ *
17
+ * Both endpoints share the same underlying `XyoConnection`; surface filters
18
+ * are applied via `connectionSubsetBySurface` immediately before constructing
19
+ * each endpoint's RPC server. The downstream `rpcMethodHandlersFromConnection`
20
+ * walker doesn't need to know about surfaces — it naturally produces a smaller
21
+ * method set when handed a smaller connection.
22
+ */
2
23
  export declare const addRpcRoutes: (app: Express) => Promise<void>;
3
24
  //# sourceMappingURL=addRpcRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,kBAab,CAAA"}
1
+ {"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,kBAkCb,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The canonical surface map lives in `@xyo-network/xl1-protocol-sdk`
3
+ * (re-exported via `@xyo-network/xl1-sdk`). This file re-exports the
4
+ * artifacts so existing imports inside this package keep working.
5
+ */
6
+ export type { Surface } from '@xyo-network/xl1-sdk';
7
+ export { surfaceForBranch, VIEWER_BRANCH_KEYS } from '@xyo-network/xl1-sdk';
8
+ //# sourceMappingURL=surfaceMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceMap.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/rpc/surfaceMap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.20.29",
3
+ "version": "1.21.0",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -35,11 +35,13 @@
35
35
  "README.md"
36
36
  ],
37
37
  "dependencies": {
38
- "@xyo-network/chain-orchestration": "~1.20.29"
38
+ "@xyo-network/chain-finalizer": "~1.21.0",
39
+ "@xyo-network/chain-mempool": "~1.21.0",
40
+ "@xyo-network/chain-orchestration": "~1.21.0"
39
41
  },
40
42
  "devDependencies": {
41
43
  "@bitauth/libauth": "~3.0.0",
42
- "@metamask/json-rpc-engine": "^10.2.4",
44
+ "@metamask/json-rpc-engine": "^10.3.0",
43
45
  "@metamask/providers": "^22.1.1",
44
46
  "@metamask/utils": "~11.11.0",
45
47
  "@opentelemetry/api": "^1.9.1",
@@ -62,42 +64,43 @@
62
64
  "@scure/bip39": "~2.2.0",
63
65
  "@types/express": "^5.0.6",
64
66
  "@types/node": "^25.6.0",
65
- "@xylabs/express": "^5.0.101",
66
- "@xylabs/geo": "^5.0.101",
67
- "@xylabs/mongo": "^5.0.101",
68
- "@xylabs/sdk-js": "^5.0.101",
69
- "@xylabs/threads": "~5.0.101",
70
- "@xylabs/toolchain": "~7.12.3",
71
- "@xylabs/tsconfig": "~7.12.3",
72
- "@xyo-network/account": "~5.5.2",
73
- "@xyo-network/account-model": "~5.5.2",
74
- "@xyo-network/api": "~5.5.2",
75
- "@xyo-network/api-models": "~5.5.2",
76
- "@xyo-network/archivist-lmdb": "~5.5.6",
77
- "@xyo-network/archivist-mongodb": "~5.5.6",
78
- "@xyo-network/archivist-view": "~5.5.6",
67
+ "@types/yargs": "^17.0.35",
68
+ "@xylabs/express": "^5.1.1",
69
+ "@xylabs/fetch": "~5.1.1",
70
+ "@xylabs/geo": "^5.1.1",
71
+ "@xylabs/mongo": "^5.1.1",
72
+ "@xylabs/sdk-js": "^5.1.1",
73
+ "@xylabs/threads": "~5.1.1",
74
+ "@xylabs/toolchain": "~7.13.7",
75
+ "@xylabs/tsconfig": "~7.13.7",
76
+ "@xyo-network/account": "~5.6.1",
77
+ "@xyo-network/account-model": "~5.6.2",
78
+ "@xyo-network/api": "~5.6.1",
79
+ "@xyo-network/api-models": "~5.6.2",
80
+ "@xyo-network/archivist-lmdb": "~5.6.3",
81
+ "@xyo-network/archivist-mongodb": "~5.6.3",
82
+ "@xyo-network/archivist-view": "~5.6.3",
79
83
  "@xyo-network/bios-model": "~7.3.0",
80
- "@xyo-network/boundwitness-builder": "~5.5.2",
81
- "@xyo-network/boundwitness-model": "~5.5.2",
82
- "@xyo-network/boundwitness-validator": "~5.5.2",
83
- "@xyo-network/boundwitness-wrapper": "~5.5.2",
84
- "@xyo-network/config-payload-plugin": "~5.5.2",
85
- "@xyo-network/huri": "~5.5.2",
86
- "@xyo-network/manifest-model": "~5.5.2",
87
- "@xyo-network/payload-builder": "~5.5.2",
88
- "@xyo-network/payload-model": "~5.5.2",
89
- "@xyo-network/payload-plugin": "~5.5.2",
90
- "@xyo-network/payload-wrapper": "~5.5.2",
91
- "@xyo-network/query-payload-plugin": "~5.5.2",
92
- "@xyo-network/sdk-js": "^5.5.6",
93
- "@xyo-network/sdk-protocol-js": "~5.5.2",
84
+ "@xyo-network/boundwitness-builder": "~5.6.1",
85
+ "@xyo-network/boundwitness-model": "~5.6.2",
86
+ "@xyo-network/boundwitness-wrapper": "~5.6.1",
87
+ "@xyo-network/config-payload-plugin": "~5.6.2",
88
+ "@xyo-network/huri": "~5.6.1",
89
+ "@xyo-network/manifest-model": "~5.6.2",
90
+ "@xyo-network/payload-builder": "~5.6.1",
91
+ "@xyo-network/payload-model": "~5.6.2",
92
+ "@xyo-network/payload-plugin": "~5.6.2",
93
+ "@xyo-network/payload-wrapper": "~5.6.1",
94
+ "@xyo-network/query-payload-plugin": "~5.6.2",
95
+ "@xyo-network/sdk-js": "^5.6.3",
96
+ "@xyo-network/sdk-protocol-js": "~5.6.2",
94
97
  "@xyo-network/typechain": "^4.1.3",
95
- "@xyo-network/wallet": "~5.5.2",
96
- "@xyo-network/wallet-model": "^5.5.2",
97
- "@xyo-network/xl1-sdk": "^1.26.44",
98
+ "@xyo-network/wallet": "~5.6.1",
99
+ "@xyo-network/wallet-model": "^5.6.2",
100
+ "@xyo-network/xl1-protocol-sdk": "~1.27.1",
101
+ "@xyo-network/xl1-sdk": "^1.27.1",
98
102
  "ajv": "^8.20.0",
99
103
  "async-mutex": "^0.5.0",
100
- "axios": "^1.15.2",
101
104
  "bn.js": "^5.2.3",
102
105
  "body-parser": "~2.2.2",
103
106
  "buffer": "^6.0.3",
@@ -108,8 +111,7 @@
108
111
  "cosmiconfig": "^9.0.1",
109
112
  "debug": "~4.4.3",
110
113
  "dotenv": "~17.4.2",
111
- "esbuild": "^0.28.0",
112
- "eslint": "^10.2.1",
114
+ "eslint": "^10.3.0",
113
115
  "ethers": "^6.16.0",
114
116
  "express": "^5.2.1",
115
117
  "express-mung": "~0.5.1",
@@ -117,8 +119,8 @@
117
119
  "http-status-codes": "~2.3.0",
118
120
  "idb": "^8.0.3",
119
121
  "lmdb": "^3.5.4",
120
- "lru-cache": "^11.3.5",
121
- "mapbox-gl": "^3.23.0",
122
+ "lru-cache": "^11.3.6",
123
+ "mapbox-gl": "^3.23.1",
122
124
  "mongodb": "^7.2.0",
123
125
  "nodemon": "~3.1.14",
124
126
  "observable-fns": "~0.6.1",
@@ -136,11 +138,12 @@
136
138
  "webextension-polyfill": "^0.12.0",
137
139
  "winston": "~3.19.0",
138
140
  "winston-transport": "~4.9.0",
139
- "zod": "~4.4.2"
141
+ "yargs": "~18.0.0",
142
+ "zod": "~4.4.3"
140
143
  },
141
144
  "peerDependencies": {
142
145
  "@bitauth/libauth": ">=3.0.0 <3.1",
143
- "@metamask/json-rpc-engine": ">=10.2.4 <11",
146
+ "@metamask/json-rpc-engine": ">=10.3.0 <11",
144
147
  "@metamask/providers": ">=22.1.1 <23",
145
148
  "@metamask/utils": ">=11.11.0 <11.12",
146
149
  "@opentelemetry/api": ">=1.9.1 <2",
@@ -161,40 +164,40 @@
161
164
  "@opentelemetry/semantic-conventions": ">=1.40.0 <1.41",
162
165
  "@scure/base": ">=2.2.0 <2.3",
163
166
  "@scure/bip39": ">=2.2.0 <2.3",
164
- "@xylabs/express": ">=5.0.101 <6",
165
- "@xylabs/geo": ">=5.0.101 <6",
166
- "@xylabs/mongo": ">=5.0.101 <6",
167
- "@xylabs/sdk-js": ">=5.0.101 <6",
168
- "@xylabs/threads": ">=5.0.101 <5.1",
169
- "@xyo-network/account": ">=5.5.2 <5.6",
170
- "@xyo-network/account-model": ">=5.5.2 <5.6",
171
- "@xyo-network/api": ">=5.5.2 <5.6",
172
- "@xyo-network/api-models": ">=5.5.2 <5.6",
173
- "@xyo-network/archivist-lmdb": ">=5.5.6 <5.6",
174
- "@xyo-network/archivist-mongodb": ">=5.5.6 <5.6",
175
- "@xyo-network/archivist-view": ">=5.5.6 <5.6",
167
+ "@xylabs/express": ">=5.1.1 <6",
168
+ "@xylabs/fetch": ">=5.1.1 <5.2",
169
+ "@xylabs/geo": ">=5.1.1 <6",
170
+ "@xylabs/mongo": ">=5.1.1 <6",
171
+ "@xylabs/sdk-js": ">=5.1.1 <6",
172
+ "@xylabs/threads": ">=5.1.1 <5.2",
173
+ "@xyo-network/account": ">=5.6.1 <5.7",
174
+ "@xyo-network/account-model": ">=5.6.2 <5.7",
175
+ "@xyo-network/api": ">=5.6.1 <5.7",
176
+ "@xyo-network/api-models": ">=5.6.2 <5.7",
177
+ "@xyo-network/archivist-lmdb": ">=5.6.3 <5.7",
178
+ "@xyo-network/archivist-mongodb": ">=5.6.3 <5.7",
179
+ "@xyo-network/archivist-view": ">=5.6.3 <5.7",
176
180
  "@xyo-network/bios-model": ">=7.3.0 <7.4",
177
- "@xyo-network/boundwitness-builder": ">=5.5.2 <5.6",
178
- "@xyo-network/boundwitness-model": ">=5.5.2 <5.6",
179
- "@xyo-network/boundwitness-validator": ">=5.5.2 <5.6",
180
- "@xyo-network/boundwitness-wrapper": ">=5.5.2 <5.6",
181
- "@xyo-network/config-payload-plugin": ">=5.5.2 <5.6",
182
- "@xyo-network/huri": ">=5.5.2 <5.6",
183
- "@xyo-network/manifest-model": ">=5.5.2 <5.6",
184
- "@xyo-network/payload-builder": ">=5.5.2 <5.6",
185
- "@xyo-network/payload-model": ">=5.5.2 <5.6",
186
- "@xyo-network/payload-plugin": ">=5.5.2 <5.6",
187
- "@xyo-network/payload-wrapper": ">=5.5.2 <5.6",
188
- "@xyo-network/query-payload-plugin": ">=5.5.2 <5.6",
189
- "@xyo-network/sdk-js": ">=5.5.6 <6",
190
- "@xyo-network/sdk-protocol-js": ">=5.5.2 <5.6",
181
+ "@xyo-network/boundwitness-builder": ">=5.6.1 <5.7",
182
+ "@xyo-network/boundwitness-model": ">=5.6.2 <5.7",
183
+ "@xyo-network/boundwitness-wrapper": ">=5.6.1 <5.7",
184
+ "@xyo-network/config-payload-plugin": ">=5.6.2 <5.7",
185
+ "@xyo-network/huri": ">=5.6.1 <5.7",
186
+ "@xyo-network/manifest-model": ">=5.6.2 <5.7",
187
+ "@xyo-network/payload-builder": ">=5.6.1 <5.7",
188
+ "@xyo-network/payload-model": ">=5.6.2 <5.7",
189
+ "@xyo-network/payload-plugin": ">=5.6.2 <5.7",
190
+ "@xyo-network/payload-wrapper": ">=5.6.1 <5.7",
191
+ "@xyo-network/query-payload-plugin": ">=5.6.2 <5.7",
192
+ "@xyo-network/sdk-js": ">=5.6.3 <6",
193
+ "@xyo-network/sdk-protocol-js": ">=5.6.2 <5.7",
191
194
  "@xyo-network/typechain": ">=4.1.3 <5",
192
- "@xyo-network/wallet": ">=5.5.2 <5.6",
193
- "@xyo-network/wallet-model": ">=5.5.2 <6",
194
- "@xyo-network/xl1-sdk": ">=1.26.44 <2",
195
+ "@xyo-network/wallet": ">=5.6.1 <5.7",
196
+ "@xyo-network/wallet-model": ">=5.6.2 <6",
197
+ "@xyo-network/xl1-protocol-sdk": ">=1.27.1 <1.28",
198
+ "@xyo-network/xl1-sdk": ">=1.27.1 <2",
195
199
  "ajv": ">=8.20.0 <9",
196
200
  "async-mutex": ">=0.5.0 <1",
197
- "axios": ">=1.15.2 <2",
198
201
  "bn.js": ">=5.2.3 <6",
199
202
  "body-parser": ">=2.2.2 <2.3",
200
203
  "buffer": ">=6.0.3 <7",
@@ -211,21 +214,22 @@
211
214
  "http-status-codes": ">=2.3.0 <2.4",
212
215
  "idb": ">=8.0.3 <9",
213
216
  "lmdb": ">=3.5.4 <4",
214
- "lru-cache": ">=11.3.5 <12",
215
- "mapbox-gl": ">=3.23.0 <4",
217
+ "lru-cache": ">=11.3.6 <12",
218
+ "mapbox-gl": ">=3.23.1 <4",
216
219
  "mongodb": ">=7.2.0 <8",
217
220
  "observable-fns": ">=0.6.1 <0.7",
218
221
  "pako": ">=2.1.0 <3",
219
222
  "rollbar": ">=3.1.0 <4",
220
223
  "shallowequal": ">=1.1.0 <1.2",
221
224
  "store2": ">=2.14.4 <2.15",
222
- "typescript": ">=5.9.3 <5.10",
223
225
  "uuid": ">=14.0.0 <14.1",
224
226
  "wasm-feature-detect": ">=1.8.0 <1.9",
225
227
  "web3-types": ">=1.10.0 <1.11",
228
+ "webextension-polyfill": ">=0.12.0 <1",
226
229
  "winston": ">=3.19.0 <3.20",
227
230
  "winston-transport": ">=4.9.0 <4.10",
228
- "zod": ">=4.4.2 <4.5"
231
+ "yargs": ">=18.0.0 <18.1",
232
+ "zod": ">=4.4.3 <4.5"
229
233
  },
230
234
  "engines": {
231
235
  "node": ">=24"
@@ -1 +0,0 @@
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"}