@xyo-network/chain-api 1.22.0 → 1.23.2

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,10 +1,29 @@
1
1
  var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
9
+ if (kind && result) __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3
13
 
4
14
  // src/ApiActor.ts
5
15
  import { creatable } from "@xylabs/sdk-js";
6
16
  import { ActorV3 } from "@xyo-network/chain-orchestration";
7
- import { AccountBalanceViewerMoniker, asHostActorConfigContext, BlockViewerMoniker, FinalizationViewerMoniker, MempoolViewerMoniker, TransactionViewerMoniker, XyoConnectionMoniker as XyoConnectionMoniker2, XyoViewerMoniker } from "@xyo-network/xl1-sdk";
17
+ import {
18
+ AccountBalanceViewerMoniker,
19
+ asHostActorConfigContext,
20
+ BlockViewerMoniker,
21
+ FinalizationViewerMoniker,
22
+ MempoolViewerMoniker,
23
+ TransactionViewerMoniker,
24
+ XyoConnectionMoniker as XyoConnectionMoniker2,
25
+ XyoViewerMoniker
26
+ } from "@xyo-network/xl1-sdk";
8
27
 
9
28
  // src/server/app.ts
10
29
  import { standardErrors } from "@xylabs/express";
@@ -15,86 +34,74 @@ import express2 from "express";
15
34
  import { registerInstrumentations } from "@opentelemetry/instrumentation";
16
35
  import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
17
36
  import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
18
- var addInstrumentation = /* @__PURE__ */ __name(() => {
19
- const instrumentations = [
20
- new HttpInstrumentation(),
21
- new ExpressInstrumentation()
22
- ];
23
- registerInstrumentations({
24
- instrumentations
25
- });
26
- }, "addInstrumentation");
37
+ var addInstrumentation = () => {
38
+ const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()];
39
+ registerInstrumentations({ instrumentations });
40
+ };
27
41
 
28
42
  // src/server/routes/livez/get.ts
29
43
  import { setRawResponseFormat } from "@xylabs/express";
30
44
  import { ReasonPhrases } from "http-status-codes";
31
45
  var message = ReasonPhrases.OK;
32
- var handler = /* @__PURE__ */ __name((_req, res) => {
46
+ var handler = (_req, res) => {
33
47
  setRawResponseFormat(res);
34
- res.status(200).send({
35
- message
36
- });
37
- }, "handler");
48
+ res.status(200).send({ message });
49
+ };
38
50
  var getLivez = handler;
39
51
 
40
52
  // src/server/routes/readyz/get.ts
41
53
  import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
42
54
  import { ReasonPhrases as ReasonPhrases2 } from "http-status-codes";
43
55
  var message2 = ReasonPhrases2.OK;
44
- var handler2 = /* @__PURE__ */ __name((_req, res) => {
56
+ var handler2 = (_req, res) => {
45
57
  setRawResponseFormat2(res);
46
- res.status(200).send({
47
- message: message2
48
- });
49
- }, "handler");
58
+ res.status(200).send({ message: message2 });
59
+ };
50
60
  var getReadyz = handler2;
51
61
 
52
62
  // src/server/routes/startupz/get.ts
53
63
  import { setRawResponseFormat as setRawResponseFormat3 } from "@xylabs/express";
54
64
  import { ReasonPhrases as ReasonPhrases3 } from "http-status-codes";
55
65
  var message3 = ReasonPhrases3.OK;
56
- var handler3 = /* @__PURE__ */ __name((_req, res) => {
66
+ var handler3 = (_req, res) => {
57
67
  setRawResponseFormat3(res);
58
- res.status(200).send({
59
- message: message3
60
- });
61
- }, "handler");
68
+ res.status(200).send({ message: message3 });
69
+ };
62
70
  var getStartupz = handler3;
63
71
 
64
72
  // src/server/routes/addProbeRoutes.ts
65
- var addProbeRoutes = /* @__PURE__ */ __name((app) => {
73
+ var addProbeRoutes = (app) => {
66
74
  app.get("/livez", getLivez);
67
75
  app.get("/readyz", getReadyz);
68
76
  app.get("/startupz", getStartupz);
69
- }, "addProbeRoutes");
77
+ };
70
78
 
71
79
  // src/server/routes/dataLake/archivistMiddleware.ts
72
80
  import { setRawResponseFormat as setRawResponseFormat4 } from "@xylabs/express";
73
81
  import { asHash, isDefined } from "@xylabs/sdk-js";
74
- import { asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder } from "@xyo-network/sdk-js";
82
+ import {
83
+ asArchivistInstance,
84
+ isAnyPayload,
85
+ isSequence,
86
+ PayloadBuilder
87
+ } from "@xyo-network/sdk-js";
75
88
  import express from "express";
76
- var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
89
+ var resolveArchivist = async (node, archivistModuleIdentifier) => {
77
90
  const mod = await node.resolve(archivistModuleIdentifier);
78
- return asArchivistInstance(mod, {
79
- required: true
80
- });
81
- }, "resolveArchivist");
91
+ return asArchivistInstance(mod, { required: true });
92
+ };
82
93
  var archivistInstance;
83
- var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
94
+ var getArchivist = async (node, archivistModuleIdentifier) => {
84
95
  if (isDefined(archivistInstance)) return archivistInstance;
85
96
  archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
86
97
  return archivistInstance;
87
- }, "getArchivist");
88
- var archivistMiddleware = /* @__PURE__ */ __name((options) => {
98
+ };
99
+ var archivistMiddleware = (options) => {
89
100
  const { node, archivistModuleIdentifier } = options;
90
- const router = express.Router({
91
- mergeParams: true
92
- });
101
+ const router = express.Router({ mergeParams: true });
93
102
  router.post("/insert", async (req, res) => {
94
103
  setRawResponseFormat4(res);
95
- const body = Array.isArray(req.body) ? req.body : [
96
- req.body
97
- ];
104
+ const body = Array.isArray(req.body) ? req.body : [req.body];
98
105
  const payloads = (await PayloadBuilder.hashPairs(body)).map((p) => p[0]);
99
106
  const archivist = await getArchivist(node, archivistModuleIdentifier);
100
107
  const result = await archivist.insert(payloads);
@@ -129,9 +136,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
129
136
  const hash = asHash(rawHash);
130
137
  if (isDefined(hash)) {
131
138
  const archivist = await getArchivist(node, archivistModuleIdentifier);
132
- const [payload] = await archivist.get([
133
- hash
134
- ]);
139
+ const [payload] = await archivist.get([hash]);
135
140
  if (isAnyPayload(payload)) {
136
141
  res.json(payload);
137
142
  return;
@@ -140,17 +145,14 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
140
145
  res.status(400).send();
141
146
  });
142
147
  return router;
143
- }, "archivistMiddleware");
148
+ };
144
149
 
145
150
  // src/server/routes/dataLake/addDataLakeRoutes.ts
146
- var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
151
+ var addDataLakeRoutes = (app) => {
147
152
  const { node } = app.context;
148
153
  const archivistModuleIdentifier = "Chain:Finalized";
149
- app.use("/chain", archivistMiddleware({
150
- node,
151
- archivistModuleIdentifier
152
- }));
153
- }, "addDataLakeRoutes");
154
+ app.use("/chain", archivistMiddleware({ node, archivistModuleIdentifier }));
155
+ };
154
156
 
155
157
  // src/server/routes/rpc/routes/addRpcRoutes.ts
156
158
  import { setRawResponseFormat as setRawResponseFormat5 } from "@xylabs/express";
@@ -160,7 +162,7 @@ import { rpcServerFromConnection, XyoConnectionMoniker } from "@xyo-network/xl1-
160
162
  import { connectionSubsetBySurface } from "@xyo-network/xl1-sdk";
161
163
 
162
164
  // src/server/routes/rpc/routes/addRpcRoutes.ts
163
- var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
165
+ var addRpcRoutes = async (app) => {
164
166
  const { context } = app;
165
167
  const { locator } = context;
166
168
  const apiConfig = context.config;
@@ -168,7 +170,9 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
168
170
  const connection = await locator.getInstance(XyoConnectionMoniker);
169
171
  const indexedPresent = hasAnyIndexedBranch(connection);
170
172
  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.");
173
+ context.logger?.warn(
174
+ "[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."
175
+ );
172
176
  }
173
177
  const rpcConnection = useLegacyMixed ? connection : connectionSubsetBySurface(connection, "node");
174
178
  const rpcServer = rpcServerFromConnection(rpcConnection);
@@ -186,7 +190,7 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
186
190
  res.json(rpcResponse);
187
191
  });
188
192
  }
189
- }, "addRpcRoutes");
193
+ };
190
194
  function hasAnyIndexedBranch(connection) {
191
195
  if (connection.networkStake) return true;
192
196
  if (connection.storage) return true;
@@ -196,17 +200,16 @@ function hasAnyIndexedBranch(connection) {
196
200
  }
197
201
  return false;
198
202
  }
199
- __name(hasAnyIndexedBranch, "hasAnyIndexedBranch");
200
203
 
201
204
  // src/server/routes/addRoutes.ts
202
- var addRoutes = /* @__PURE__ */ __name(async (app) => {
205
+ var addRoutes = async (app) => {
203
206
  addProbeRoutes(app);
204
207
  await addRpcRoutes(app);
205
208
  addDataLakeRoutes(app);
206
- }, "addRoutes");
209
+ };
207
210
 
208
211
  // src/server/app.ts
209
- var getApp = /* @__PURE__ */ __name(async (context) => {
212
+ var getApp = async (context) => {
210
213
  addInstrumentation();
211
214
  const app = express2();
212
215
  sharedMiddleware(app);
@@ -214,7 +217,7 @@ var getApp = /* @__PURE__ */ __name(async (context) => {
214
217
  await addRoutes(app);
215
218
  app.use(standardErrors);
216
219
  return app;
217
- }, "getApp");
220
+ };
218
221
 
219
222
  // src/server/server.ts
220
223
  var hostname = "::";
@@ -232,31 +235,9 @@ async function getServer(context) {
232
235
  server.setTimeout(2e4);
233
236
  return server;
234
237
  }
235
- __name(getServer, "getServer");
236
238
 
237
239
  // src/ApiActor.ts
238
- function _ts_decorate(decorators, target, key, desc) {
239
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
240
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
241
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
242
- return c > 3 && r && Object.defineProperty(target, key, r), r;
243
- }
244
- __name(_ts_decorate, "_ts_decorate");
245
240
  var ApiActor = class extends ActorV3 {
246
- static {
247
- __name(this, "ApiActor");
248
- }
249
- static needs = {
250
- required: [
251
- AccountBalanceViewerMoniker,
252
- BlockViewerMoniker,
253
- FinalizationViewerMoniker,
254
- MempoolViewerMoniker,
255
- TransactionViewerMoniker,
256
- XyoConnectionMoniker2,
257
- XyoViewerMoniker
258
- ]
259
- };
260
241
  server;
261
242
  async createHandler() {
262
243
  await super.createHandler();
@@ -278,18 +259,33 @@ var ApiActor = class extends ActorV3 {
278
259
  this.server = void 0;
279
260
  }
280
261
  };
281
- ApiActor = _ts_decorate([
262
+ __publicField(ApiActor, "needs", {
263
+ required: [
264
+ AccountBalanceViewerMoniker,
265
+ BlockViewerMoniker,
266
+ FinalizationViewerMoniker,
267
+ MempoolViewerMoniker,
268
+ TransactionViewerMoniker,
269
+ XyoConnectionMoniker2,
270
+ XyoViewerMoniker
271
+ ]
272
+ });
273
+ ApiActor = __decorateClass([
282
274
  creatable()
283
275
  ], ApiActor);
284
276
 
285
277
  // src/command.ts
286
278
  import { getFinalizerActor } from "@xyo-network/chain-finalizer";
287
279
  import { getMempoolActor } from "@xyo-network/chain-mempool";
288
- import { ApiConfigZod, FinalizerConfigZod, MempoolConfigZod } from "@xyo-network/chain-orchestration";
280
+ import {
281
+ ApiConfigZod,
282
+ FinalizerConfigZod,
283
+ MempoolConfigZod
284
+ } from "@xyo-network/chain-orchestration";
289
285
 
290
286
  // src/run.ts
291
287
  import { initActorWallet } from "@xyo-network/chain-orchestration";
292
- var getApiActor = /* @__PURE__ */ __name(async (config, locator) => {
288
+ var getApiActor = async (config, locator) => {
293
289
  const account = await initActorWallet({
294
290
  config,
295
291
  singletons: {},
@@ -301,16 +297,14 @@ var getApiActor = /* @__PURE__ */ __name(async (config, locator) => {
301
297
  locator
302
298
  };
303
299
  return await ApiActor.create(params);
304
- }, "getApiActor");
305
- var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
306
- const actors = [
307
- await getApiActor(config, locator)
308
- ];
300
+ };
301
+ var runApi = async (config, orchestrator, locator) => {
302
+ const actors = [await getApiActor(config, locator)];
309
303
  for (const actor of actors) {
310
304
  await orchestrator.registerActor(actor);
311
305
  }
312
306
  await orchestrator.start();
313
- }, "runApi");
307
+ };
314
308
 
315
309
  // src/command.ts
316
310
  function apiCommand(getConfiguration, getLocatorsFromConfig) {
@@ -318,26 +312,26 @@ function apiCommand(getConfiguration, getLocatorsFromConfig) {
318
312
  command: "api",
319
313
  deprecated: 'Use "start api" instead',
320
314
  describe: "Run a XL1 API Node",
321
- handler: /* @__PURE__ */ __name(async () => {
315
+ handler: async () => {
322
316
  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
- ]);
317
+ const { locators, orchestrator } = await getLocatorsFromConfig(["api", "mempool", "finalizer"], configuration);
318
+ const actors = await Promise.all([getApiActor(
319
+ ApiConfigZod.parse(locators["api"].context.config),
320
+ locators["api"]
321
+ ), getMempoolActor(
322
+ MempoolConfigZod.parse(locators["mempool"].context.config),
323
+ locators["mempool"]
324
+ ), getFinalizerActor(
325
+ FinalizerConfigZod.parse(locators["finalizer"].context.config),
326
+ locators["finalizer"]
327
+ )]);
333
328
  for (const actor of actors) {
334
329
  await orchestrator.registerActor(actor);
335
330
  }
336
331
  await orchestrator.start();
337
- }, "handler")
332
+ }
338
333
  };
339
334
  }
340
- __name(apiCommand, "apiCommand");
341
335
  export {
342
336
  ApiActor,
343
337
  apiCommand,
@@ -346,4 +340,4 @@ export {
346
340
  getServer,
347
341
  runApi
348
342
  };
349
- //# sourceMappingURL=index.mjs.map
343
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1,7 @@
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"]}
1
+ {
2
+ "version": 3,
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"],
4
+ "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` \u2014 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` \u2014 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 \u2014 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"],
5
+ "mappings": "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",
6
+ "names": ["XyoConnectionMoniker", "express", "setRawResponseFormat", "ReasonPhrases", "message", "handler", "setRawResponseFormat", "ReasonPhrases", "message", "handler", "setRawResponseFormat", "options", "setRawResponseFormat", "setRawResponseFormat", "express", "XyoConnectionMoniker"]
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.22.0",
3
+ "version": "1.23.2",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -35,35 +35,35 @@
35
35
  "README.md"
36
36
  ],
37
37
  "dependencies": {
38
- "@xyo-network/chain-finalizer": "~1.22.0",
39
- "@xyo-network/chain-mempool": "~1.22.0",
40
- "@xyo-network/chain-orchestration": "~1.22.0"
38
+ "@xyo-network/chain-finalizer": "~1.23.2",
39
+ "@xyo-network/chain-orchestration": "~1.23.2",
40
+ "@xyo-network/chain-mempool": "~1.23.2"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@bitauth/libauth": "~3.0.0",
44
- "@metamask/json-rpc-engine": "^10.4.0",
44
+ "@metamask/json-rpc-engine": "^10.5.0",
45
45
  "@metamask/providers": "^22.1.1",
46
46
  "@metamask/utils": "~11.11.0",
47
47
  "@opentelemetry/api": "^1.9.1",
48
48
  "@opentelemetry/context-async-hooks": "~2.7.1",
49
49
  "@opentelemetry/context-zone": "~2.7.1",
50
50
  "@opentelemetry/core": "~2.7.1",
51
- "@opentelemetry/exporter-prometheus": "~0.217",
52
- "@opentelemetry/exporter-trace-otlp-grpc": "~0.217",
53
- "@opentelemetry/exporter-trace-otlp-http": "~0.217",
51
+ "@opentelemetry/exporter-prometheus": "~0.218",
52
+ "@opentelemetry/exporter-trace-otlp-grpc": "~0.218",
53
+ "@opentelemetry/exporter-trace-otlp-http": "~0.218",
54
54
  "@opentelemetry/host-metrics": "~0.38.3",
55
- "@opentelemetry/instrumentation": "~0.217",
56
- "@opentelemetry/instrumentation-express": "~0.65",
57
- "@opentelemetry/instrumentation-http": "~0.217",
58
- "@opentelemetry/instrumentation-runtime-node": "~0.30",
55
+ "@opentelemetry/instrumentation": "~0.218",
56
+ "@opentelemetry/instrumentation-express": "~0.66",
57
+ "@opentelemetry/instrumentation-http": "~0.218",
58
+ "@opentelemetry/instrumentation-runtime-node": "~0.31",
59
59
  "@opentelemetry/resources": "~2.7.1",
60
60
  "@opentelemetry/sdk-metrics": "~2.7.1",
61
61
  "@opentelemetry/sdk-trace-base": "^2.7.1",
62
- "@opentelemetry/semantic-conventions": "~1.40.0",
62
+ "@opentelemetry/semantic-conventions": "~1.41.1",
63
63
  "@scure/base": "~2.2.0",
64
64
  "@scure/bip39": "~2.2.0",
65
65
  "@types/express": "^5.0.6",
66
- "@types/node": "^25.6.2",
66
+ "@types/node": "^25.7.0",
67
67
  "@types/yargs": "^17.0.35",
68
68
  "@xylabs/express": "^5.1.2",
69
69
  "@xylabs/fetch": "~5.1.2",
@@ -71,8 +71,8 @@
71
71
  "@xylabs/mongo": "^5.1.2",
72
72
  "@xylabs/sdk-js": "^5.1.2",
73
73
  "@xylabs/threads": "~5.1.2",
74
- "@xylabs/toolchain": "~7.13.22",
75
- "@xylabs/tsconfig": "~7.13.22",
74
+ "@xylabs/toolchain": "~8.0.4",
75
+ "@xylabs/tsconfig": "~8.0.4",
76
76
  "@xyo-network/account": "~5.6.2",
77
77
  "@xyo-network/account-model": "~5.6.3",
78
78
  "@xyo-network/api": "~5.6.2",
@@ -97,12 +97,10 @@
97
97
  "@xyo-network/typechain": "^4.1.3",
98
98
  "@xyo-network/wallet": "~5.6.2",
99
99
  "@xyo-network/wallet-model": "^5.6.3",
100
- "@xyo-network/xl1-protocol-sdk": "~1.28.5",
101
- "@xyo-network/xl1-sdk": "^1.28.5",
102
- "acorn": "^8",
100
+ "@xyo-network/xl1-protocol-sdk": "~1.30.2",
101
+ "@xyo-network/xl1-sdk": "^1.30.2",
103
102
  "ajv": "^8.20.0",
104
103
  "async-mutex": "^0.5.0",
105
- "axios": "^1",
106
104
  "bn.js": "^5.2.3",
107
105
  "body-parser": "~2.2.2",
108
106
  "buffer": "^6.0.3",
@@ -117,7 +115,6 @@
117
115
  "ethers": "^6.16.0",
118
116
  "express": "^5.2.1",
119
117
  "express-mung": "~0.5.1",
120
- "firebase": "^12",
121
118
  "hash-wasm": "~4.12.0",
122
119
  "http-status-codes": "~2.3.0",
123
120
  "idb": "^8.0.3",
@@ -129,22 +126,20 @@
129
126
  "observable-fns": "~0.6.1",
130
127
  "pako": "^2.1.0",
131
128
  "rollbar": "^3.1.0",
132
- "rollup": "^3.29.4 || ^4",
133
129
  "shallowequal": "~1.1.0",
134
130
  "store2": "~2.14.4",
135
131
  "tslib": "^2.8.1",
136
- "typescript": "~5.9.3",
132
+ "typescript": "~6.0.3",
137
133
  "uuid": "~14.0.0",
138
- "vite": "^8.0.11",
139
- "vitest": "^4.1.5",
134
+ "vite": "^8.0.13",
135
+ "vitest": "^4.1.6",
140
136
  "wasm-feature-detect": "~1.8.0",
141
137
  "web3-types": "~1.10.0",
142
138
  "webextension-polyfill": "^0.12.0",
143
139
  "winston": "~3.19.0",
144
140
  "winston-transport": "~4.9.0",
145
141
  "yargs": "~18.0.0",
146
- "zod": "~4.4.3",
147
- "zone.js": "^0.10.2 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 || ^0.16.0"
142
+ "zod": "~4.4.3"
148
143
  },
149
144
  "peerDependencies": {
150
145
  "@bitauth/libauth": "~3.0",
@@ -155,18 +150,18 @@
155
150
  "@opentelemetry/context-async-hooks": "~2.7",
156
151
  "@opentelemetry/context-zone": "~2.7",
157
152
  "@opentelemetry/core": "~2.7",
158
- "@opentelemetry/exporter-prometheus": "~0.217",
159
- "@opentelemetry/exporter-trace-otlp-grpc": "~0.217",
160
- "@opentelemetry/exporter-trace-otlp-http": "~0.217",
153
+ "@opentelemetry/exporter-prometheus": "~0.218",
154
+ "@opentelemetry/exporter-trace-otlp-grpc": "~0.218",
155
+ "@opentelemetry/exporter-trace-otlp-http": "~0.218",
161
156
  "@opentelemetry/host-metrics": "~0.38",
162
- "@opentelemetry/instrumentation": "~0.217",
163
- "@opentelemetry/instrumentation-express": "~0.65",
164
- "@opentelemetry/instrumentation-http": "~0.217",
165
- "@opentelemetry/instrumentation-runtime-node": "~0.30",
157
+ "@opentelemetry/instrumentation": "~0.218",
158
+ "@opentelemetry/instrumentation-express": "~0.66",
159
+ "@opentelemetry/instrumentation-http": "~0.218",
160
+ "@opentelemetry/instrumentation-runtime-node": "~0.31",
166
161
  "@opentelemetry/resources": "~2.7",
167
162
  "@opentelemetry/sdk-metrics": "~2.7",
168
163
  "@opentelemetry/sdk-trace-base": "^2.7",
169
- "@opentelemetry/semantic-conventions": "~1.40",
164
+ "@opentelemetry/semantic-conventions": "~1.41",
170
165
  "@scure/base": "~2.2",
171
166
  "@scure/bip39": "~2.2",
172
167
  "@xylabs/express": "^5.1",
@@ -199,12 +194,10 @@
199
194
  "@xyo-network/typechain": "^4.1",
200
195
  "@xyo-network/wallet": "~5.6",
201
196
  "@xyo-network/wallet-model": "^5.6",
202
- "@xyo-network/xl1-protocol-sdk": "~1.28",
197
+ "@xyo-network/xl1-protocol-sdk": "~1.30.1",
203
198
  "@xyo-network/xl1-sdk": "^1.28",
204
- "acorn": "^8",
205
199
  "ajv": "^8.20",
206
200
  "async-mutex": "^0.5",
207
- "axios": "^1",
208
201
  "bn.js": "^5.2",
209
202
  "body-parser": "~2.2",
210
203
  "buffer": "^6.0",
@@ -217,7 +210,6 @@
217
210
  "ethers": "^6.16",
218
211
  "express": "^5.2",
219
212
  "express-mung": "~0.5",
220
- "firebase": "^12",
221
213
  "hash-wasm": "~4.12",
222
214
  "http-status-codes": "~2.3",
223
215
  "idb": "^8.0",
@@ -237,8 +229,7 @@
237
229
  "winston": "~3.19",
238
230
  "winston-transport": "~4.9",
239
231
  "yargs": "~18.0",
240
- "zod": "~4.4",
241
- "zone.js": "^0.10.2 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 || ^0.16.0"
232
+ "zod": "~4.4"
242
233
  },
243
234
  "engines": {
244
235
  "node": ">=24"