@xyo-network/chain-api 1.8.4 → 1.10.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,8 +1,25 @@
1
1
  var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
3
11
 
4
12
  // src/server/app.ts
5
- import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
13
+ import {
14
+ customPoweredByHeader,
15
+ disableCaseSensitiveRouting,
16
+ disableExpressDefaultPoweredByHeader,
17
+ getJsonBodyParser,
18
+ getJsonBodyParserOptions,
19
+ responseProfiler,
20
+ standardErrors,
21
+ standardResponses
22
+ } from "@xylabs/express";
6
23
  import compression from "compression";
7
24
  import cors from "cors";
8
25
  import express2 from "express";
@@ -11,15 +28,10 @@ import express2 from "express";
11
28
  import { registerInstrumentations } from "@opentelemetry/instrumentation";
12
29
  import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
13
30
  import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
14
- var addInstrumentation = /* @__PURE__ */ __name(() => {
15
- const instrumentations = [
16
- new HttpInstrumentation(),
17
- new ExpressInstrumentation()
18
- ];
19
- registerInstrumentations({
20
- instrumentations
21
- });
22
- }, "addInstrumentation");
31
+ var addInstrumentation = () => {
32
+ const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()];
33
+ registerInstrumentations({ instrumentations });
34
+ };
23
35
 
24
36
  // src/server/routes/address/addNodeRoutes.ts
25
37
  import { StatusCodes as StatusCodes3 } from "http-status-codes";
@@ -30,14 +42,12 @@ import { asyncHandler } from "@xylabs/express";
30
42
  import { asAddress, toAddress } from "@xylabs/hex";
31
43
  import { isModuleIdentifierPart } from "@xyo-network/module-model";
32
44
  import { StatusCodes } from "http-status-codes";
33
- var handler = /* @__PURE__ */ __name(async (req, res, next) => {
45
+ var handler = async (req, res, next) => {
34
46
  const { address: rawAddress } = req.params;
35
47
  const { node } = req.app;
36
48
  const address = asAddress(rawAddress);
37
49
  if (address !== void 0) {
38
- let mod = node.address === address ? node : await node.resolve(address, {
39
- direction: "down"
40
- });
50
+ let mod = node.address === address ? node : await node.resolve(address, { direction: "down" });
41
51
  if (mod) {
42
52
  res.json(await mod.state());
43
53
  return;
@@ -45,9 +55,7 @@ var handler = /* @__PURE__ */ __name(async (req, res, next) => {
45
55
  }
46
56
  if (isModuleIdentifierPart(rawAddress)) {
47
57
  const moduleIdentifier = toAddress(rawAddress);
48
- const mod = await node.resolve(moduleIdentifier, {
49
- direction: "down"
50
- });
58
+ const mod = await node.resolve(moduleIdentifier, { direction: "down" });
51
59
  if (mod) {
52
60
  const moduleAddress = assertEx(mod?.address, () => "Error redirecting to module by address");
53
61
  res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`);
@@ -55,13 +63,17 @@ var handler = /* @__PURE__ */ __name(async (req, res, next) => {
55
63
  }
56
64
  }
57
65
  next("route");
58
- }, "handler");
66
+ };
59
67
  var getAddress = asyncHandler(handler);
60
68
 
61
69
  // src/server/routes/address/post/post.ts
62
70
  import { assertEx as assertEx2 } from "@xylabs/assert";
63
71
  import { asyncHandler as asyncHandler2 } from "@xylabs/express";
64
- import { asAddress as asAddress2, isAddress, toAddress as toAddress2 } from "@xylabs/hex";
72
+ import {
73
+ asAddress as asAddress2,
74
+ isAddress,
75
+ toAddress as toAddress2
76
+ } from "@xylabs/hex";
65
77
  import { isQueryBoundWitness } from "@xyo-network/boundwitness-model";
66
78
  import { ModuleErrorBuilder } from "@xyo-network/module-abstract";
67
79
  import { StatusCodes as StatusCodes2 } from "http-status-codes";
@@ -70,33 +82,22 @@ import { StatusCodes as StatusCodes2 } from "http-status-codes";
70
82
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
71
83
  import { ModuleConfigSchema } from "@xyo-network/module-model";
72
84
  var DEFAULT_DEPTH = 5;
73
- var getQueryConfig = /* @__PURE__ */ __name((mod, req, bw, payloads) => {
85
+ var getQueryConfig = (mod, req, bw, payloads) => {
74
86
  const nestedBwAddresses = payloads?.flat(DEFAULT_DEPTH).filter((payload) => payload?.schema === BoundWitnessSchema).map((bw2) => bw2.addresses) || [];
75
- const addresses = [
76
- bw.addresses,
77
- ...nestedBwAddresses
78
- ].filter((address) => address.length > 0);
79
- const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map((schema) => [
80
- schema,
81
- addresses
82
- ])) : {};
83
- const security = {
84
- allowed
85
- };
86
- return {
87
- schema: ModuleConfigSchema,
88
- security
89
- };
90
- }, "getQueryConfig");
87
+ const addresses = [bw.addresses, ...nestedBwAddresses].filter((address) => address.length > 0);
88
+ const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map((schema) => [schema, addresses])) : {};
89
+ const security = { allowed };
90
+ return { schema: ModuleConfigSchema, security };
91
+ };
91
92
 
92
93
  // src/server/routes/address/post/post.ts
93
- var handler2 = /* @__PURE__ */ __name(async (req, res, next) => {
94
- const returnError = /* @__PURE__ */ __name((code, message = "An error occurred", details) => {
94
+ var handler2 = async (req, res, next) => {
95
+ const returnError = (code, message = "An error occurred", details) => {
95
96
  const error = new ModuleErrorBuilder().message(message).details(details).build();
96
97
  res.locals.rawResponse = false;
97
98
  res.status(code).json(error);
98
99
  next();
99
- }, "returnError");
100
+ };
100
101
  const { address } = req.params;
101
102
  const { node } = req.app;
102
103
  const [bw, payloads] = Array.isArray(req.body) ? req.body : [];
@@ -111,29 +112,19 @@ var handler2 = /* @__PURE__ */ __name(async (req, res, next) => {
111
112
  }
112
113
  let modules = [];
113
114
  const normalizedAddress = toAddress2(address);
114
- if (node.address === normalizedAddress) modules = [
115
- node
116
- ];
115
+ if (node.address === normalizedAddress) modules = [node];
117
116
  else {
118
117
  const typedAddress = asAddress2(address);
119
- const byAddress = typedAddress === void 0 ? void 0 : await node.resolve(typedAddress, {
120
- maxDepth: 10
121
- });
122
- if (byAddress) modules = [
123
- byAddress
124
- ];
118
+ const byAddress = typedAddress === void 0 ? void 0 : await node.resolve(typedAddress, { maxDepth: 10 });
119
+ if (byAddress) modules = [byAddress];
125
120
  else {
126
- const byName = await node.resolve(address, {
127
- direction: "down"
128
- });
121
+ const byName = await node.resolve(address, { direction: "down" });
129
122
  if (byName) {
130
123
  const moduleAddress = assertEx2(byName?.address, () => "Error redirecting to module by address");
131
124
  res.redirect(StatusCodes2.TEMPORARY_REDIRECT, `/${moduleAddress}`);
132
125
  return;
133
126
  } else {
134
- return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
135
- address
136
- });
127
+ return returnError(StatusCodes2.NOT_FOUND, "Module not found", { address });
137
128
  }
138
129
  }
139
130
  }
@@ -144,20 +135,16 @@ var handler2 = /* @__PURE__ */ __name(async (req, res, next) => {
144
135
  const queryResult = await mod.query(bw, payloads, queryConfig);
145
136
  res.json(queryResult);
146
137
  } catch (ex) {
147
- return returnError(StatusCodes2.INTERNAL_SERVER_ERROR, "Query Failed", {
148
- message: ex?.message ?? "Unknown Error"
149
- });
138
+ return returnError(StatusCodes2.INTERNAL_SERVER_ERROR, "Query Failed", { message: ex?.message ?? "Unknown Error" });
150
139
  }
151
140
  } else {
152
- return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
153
- address
154
- });
141
+ return returnError(StatusCodes2.NOT_FOUND, "Module not found", { address });
155
142
  }
156
- }, "handler");
143
+ };
157
144
  var postAddress = asyncHandler2(handler2);
158
145
 
159
146
  // src/server/routes/address/addNodeRoutes.ts
160
- var addNodeRoutes = /* @__PURE__ */ __name((app) => {
147
+ var addNodeRoutes = (app) => {
161
148
  const defaultModule = app.node;
162
149
  const address = defaultModule.address;
163
150
  const defaultModuleEndpoint = `/${address}`;
@@ -171,38 +158,32 @@ var addNodeRoutes = /* @__PURE__ */ __name((app) => {
171
158
  app.post("/:hash", (_req, res) => {
172
159
  res.sendStatus(StatusCodes3.NOT_FOUND);
173
160
  });
174
- }, "addNodeRoutes");
161
+ };
175
162
 
176
163
  // src/server/routes/dataLake/archivistMiddleware.ts
177
164
  import { setRawResponseFormat } from "@xylabs/express";
178
- import { asHash, isHash } from "@xylabs/hex";
165
+ import { asHash } from "@xylabs/hex";
179
166
  import { isDefined } from "@xylabs/typeof";
180
167
  import { asArchivistInstance } from "@xyo-network/archivist-model";
181
168
  import { PayloadBuilder } from "@xyo-network/payload-builder";
182
- import { isAnyPayload } from "@xyo-network/payload-model";
169
+ import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
183
170
  import express from "express";
184
- var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
171
+ var resolveArchivist = async (node, archivistModuleIdentifier) => {
185
172
  const mod = await node.resolve(archivistModuleIdentifier);
186
- return asArchivistInstance(mod, {
187
- required: true
188
- });
189
- }, "resolveArchivist");
173
+ return asArchivistInstance(mod, { required: true });
174
+ };
190
175
  var archivistInstance;
191
- var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
176
+ var getArchivist = async (node, archivistModuleIdentifier) => {
192
177
  if (isDefined(archivistInstance)) return archivistInstance;
193
178
  archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
194
179
  return archivistInstance;
195
- }, "getArchivist");
196
- var archivistMiddleware = /* @__PURE__ */ __name((options) => {
180
+ };
181
+ var archivistMiddleware = (options) => {
197
182
  const { node, archivistModuleIdentifier } = options;
198
- const router = express.Router({
199
- mergeParams: true
200
- });
183
+ const router = express.Router({ mergeParams: true });
201
184
  router.post("/insert", async (req, res) => {
202
185
  setRawResponseFormat(res);
203
- const body = Array.isArray(req.body) ? req.body : [
204
- req.body
205
- ];
186
+ const body = Array.isArray(req.body) ? req.body : [req.body];
206
187
  const payloads = (await PayloadBuilder.hashPairs(body)).map((p) => p[0]);
207
188
  const archivist = await getArchivist(node, archivistModuleIdentifier);
208
189
  const result = await archivist.insert(payloads);
@@ -210,7 +191,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
210
191
  });
211
192
  router.get("/next", async (req, res) => {
212
193
  setRawResponseFormat(res);
213
- const cursor = isHash(req.query.cursor) ? asHash(req.query.cursor) : void 0;
194
+ const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
214
195
  const limit = isDefined(req.query.limit) ? Number(req.query.limit) : void 0;
215
196
  const open = isDefined(req.query.open) ? Boolean(req.query.open) : void 0;
216
197
  const order = req.query.order === "asc" ? "asc" : "desc";
@@ -237,9 +218,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
237
218
  const hash = asHash(rawHash);
238
219
  if (isDefined(hash)) {
239
220
  const archivist = await getArchivist(node, archivistModuleIdentifier);
240
- const [payload] = await archivist.get([
241
- hash
242
- ]);
221
+ const [payload] = await archivist.get([hash]);
243
222
  if (isAnyPayload(payload)) {
244
223
  res.json(payload);
245
224
  return;
@@ -248,30 +227,28 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
248
227
  res.status(400).send();
249
228
  });
250
229
  return router;
251
- }, "archivistMiddleware");
230
+ };
252
231
 
253
232
  // src/server/routes/dataLake/addDataLakeRoutes.ts
254
- var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
233
+ var addDataLakeRoutes = (app) => {
255
234
  const { node } = app;
256
235
  const archivistModuleIdentifier = "Chain:Finalized";
257
- app.use("/chain", archivistMiddleware({
258
- node,
259
- archivistModuleIdentifier
260
- }));
261
- }, "addDataLakeRoutes");
236
+ app.use("/chain", archivistMiddleware({ node, archivistModuleIdentifier }));
237
+ };
262
238
 
263
239
  // src/server/routes/rpc/routes/addRpcRoutes.ts
264
240
  import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
265
241
  import { NodeXyoViewer } from "@xyo-network/chain-rpc";
266
- import { NodeXyoRunner, rpcEngineFromProvider, XyoConnection } from "@xyo-network/xl1-rpc";
267
- var addRpcRoutes = /* @__PURE__ */ __name((app) => {
242
+ import {
243
+ NodeXyoRunner,
244
+ rpcEngineFromProvider,
245
+ XyoConnection
246
+ } from "@xyo-network/xl1-rpc";
247
+ var addRpcRoutes = (app) => {
268
248
  const { node } = app;
269
249
  const runner = new NodeXyoRunner(node);
270
250
  const viewer = new NodeXyoViewer(node);
271
- const provider = new XyoConnection({
272
- runner,
273
- viewer
274
- });
251
+ const provider = new XyoConnection({ runner, viewer });
275
252
  const engine = rpcEngineFromProvider(provider);
276
253
  app.post("/rpc", (req, res) => {
277
254
  setRawResponseFormat2(res);
@@ -279,26 +256,24 @@ var addRpcRoutes = /* @__PURE__ */ __name((app) => {
279
256
  res.json(rpcResponse);
280
257
  });
281
258
  });
282
- }, "addRpcRoutes");
259
+ };
283
260
 
284
261
  // src/server/routes/addRoutes.ts
285
- var addRoutes = /* @__PURE__ */ __name((app) => {
262
+ var addRoutes = (app) => {
286
263
  addRpcRoutes(app);
287
264
  addDataLakeRoutes(app);
288
265
  addNodeRoutes(app);
289
- }, "addRoutes");
266
+ };
290
267
 
291
268
  // src/server/app.ts
292
- var getApp = /* @__PURE__ */ __name((node) => {
269
+ var getApp = (node) => {
293
270
  addInstrumentation();
294
271
  const app = express2();
295
272
  app.set("etag", false);
296
273
  app.use(cors());
297
274
  app.use(compression());
298
275
  app.use(responseProfiler);
299
- app.use(getJsonBodyParser(getJsonBodyParserOptions({
300
- limit: "1mb"
301
- })));
276
+ app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: "1mb" })));
302
277
  app.use(standardResponses);
303
278
  disableExpressDefaultPoweredByHeader(app);
304
279
  app.use(customPoweredByHeader);
@@ -307,7 +282,7 @@ var getApp = /* @__PURE__ */ __name((node) => {
307
282
  addRoutes(app);
308
283
  app.use(standardErrors);
309
284
  return app;
310
- }, "getApp");
285
+ };
311
286
 
312
287
  // src/server/server.ts
313
288
  import { assertEx as assertEx5 } from "@xylabs/assert";
@@ -323,7 +298,12 @@ import { isDefined as isDefined2 } from "@xylabs/typeof";
323
298
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
324
299
  import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
325
300
  import { ViewArchivist } from "@xyo-network/archivist-view";
326
- import { AddressBalanceDivinerV2, ArchivistSyncDiviner, balanceSummaryRepositoryFromMap, HeadValidationDiviner } from "@xyo-network/chain-modules";
301
+ import {
302
+ AddressBalanceDivinerV2,
303
+ ArchivistSyncDiviner,
304
+ balanceSummaryRepositoryFromMap,
305
+ HeadValidationDiviner
306
+ } from "@xyo-network/chain-modules";
327
307
  import { initTelemetry } from "@xyo-network/chain-telemetry";
328
308
  import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
329
309
  import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
@@ -332,24 +312,16 @@ import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
332
312
 
333
313
  // src/driver/mongo/MongoMap.ts
334
314
  import { assertEx as assertEx3 } from "@xylabs/assert";
335
- import { AbstractCreatable, creatable } from "@xylabs/creatable";
315
+ import {
316
+ AbstractCreatable,
317
+ creatable
318
+ } from "@xylabs/creatable";
336
319
  import { isNull } from "@xylabs/typeof";
337
- function _ts_decorate(decorators, target, key, desc) {
338
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
339
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
340
- 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;
341
- return c > 3 && r && Object.defineProperty(target, key, r), r;
342
- }
343
- __name(_ts_decorate, "_ts_decorate");
344
320
  function stripMongoId(doc) {
345
321
  const { _id, ...rest } = doc;
346
322
  return rest;
347
323
  }
348
- __name(stripMongoId, "stripMongoId");
349
324
  var MongoMap = class extends AbstractCreatable {
350
- static {
351
- __name(this, "MongoMap");
352
- }
353
325
  get sdk() {
354
326
  return assertEx3(this.params.sdk, () => "No sdk specified");
355
327
  }
@@ -357,49 +329,36 @@ var MongoMap = class extends AbstractCreatable {
357
329
  await this.sdk.deleteMany({});
358
330
  }
359
331
  async delete(id) {
360
- const filter = {
361
- _id: id
362
- };
332
+ const filter = { _id: id };
363
333
  const result = await this.sdk.deleteOne(filter);
364
334
  return result.deletedCount > 0;
365
335
  }
366
336
  async get(id) {
367
- const filter = {
368
- _id: id
369
- };
337
+ const filter = { _id: id };
370
338
  const doc = await this.sdk.findOne(filter);
371
339
  return isNull(doc) ? void 0 : stripMongoId(doc);
372
340
  }
373
341
  async has(id) {
374
- const filter = {
375
- _id: id
376
- };
342
+ const filter = { _id: id };
377
343
  const exists = await this.sdk.findOne(filter);
378
344
  return isNull(exists) ? false : true;
379
345
  }
380
346
  async set(id, data) {
381
- const filter = {
382
- _id: id
383
- };
384
- const value = {
385
- ...data,
386
- _id: id
387
- };
388
- await this.sdk.replaceOne(filter, value, {
389
- upsert: true
390
- });
347
+ const filter = { _id: id };
348
+ const value = { ...data, _id: id };
349
+ await this.sdk.replaceOne(filter, value, { upsert: true });
391
350
  return this;
392
351
  }
393
352
  async startHandler() {
394
353
  await super.startHandler();
395
354
  }
396
355
  };
397
- MongoMap = _ts_decorate([
356
+ MongoMap = __decorateClass([
398
357
  creatable()
399
358
  ], MongoMap);
400
359
 
401
360
  // src/manifest/getLocator.ts
402
- var getLocator = /* @__PURE__ */ __name(async (context) => {
361
+ var getLocator = async (context) => {
403
362
  const { config, logger } = context;
404
363
  const { otlpEndpoint } = config.telemetry?.otel ?? {};
405
364
  const { traceProvider, meterProvider } = await initTelemetry({
@@ -419,7 +378,13 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
419
378
  let summaryMap = /* @__PURE__ */ new Map();
420
379
  const mongoConfig = config.storage?.mongo;
421
380
  if (hasMongoConfig(mongoConfig)) {
422
- const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
381
+ const {
382
+ connectionString: dbConnectionString,
383
+ database: dbName,
384
+ domain: dbDomain,
385
+ password: dbPassword,
386
+ username: dbUserName
387
+ } = mongoConfig;
423
388
  const payloadSdkConfig = {
424
389
  dbConnectionString,
425
390
  dbDomain,
@@ -434,13 +399,8 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
434
399
  traceProvider
435
400
  };
436
401
  locator.register(MongoDBArchivistV2.factory(params), void 0, true);
437
- const sdk = new BaseMongoSdk({
438
- ...payloadSdkConfig,
439
- collection: "balance_summary_map"
440
- });
441
- summaryMap = await MongoMap.create({
442
- sdk
443
- });
402
+ const sdk = new BaseMongoSdk({ ...payloadSdkConfig, collection: "balance_summary_map" });
403
+ summaryMap = await MongoMap.create({ sdk });
444
404
  }
445
405
  const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap);
446
406
  locator.register(AddressBalanceDivinerV2.factory({
@@ -477,7 +437,7 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
477
437
  statusReporter
478
438
  }));
479
439
  return locator;
480
- }, "getLocator");
440
+ };
481
441
 
482
442
  // src/manifest/getNode.ts
483
443
  import { ManifestWrapper } from "@xyo-network/manifest-wrapper";
@@ -693,7 +653,7 @@ var PublicChildManifests = [
693
653
  ];
694
654
 
695
655
  // src/manifest/getNode.ts
696
- var getNode = /* @__PURE__ */ __name(async (context) => {
656
+ var getNode = async (context) => {
697
657
  const { wallet } = context;
698
658
  const locator = await getLocator(context);
699
659
  const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
@@ -703,11 +663,11 @@ var getNode = /* @__PURE__ */ __name(async (context) => {
703
663
  await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
704
664
  }
705
665
  return node;
706
- }, "getNode");
666
+ };
707
667
 
708
668
  // src/server/server.ts
709
669
  var hostname = "::";
710
- var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
670
+ var getSeedPhrase = async (bios, config, logger) => {
711
671
  const storedSeedPhrase = await bios.seedPhraseStore.get("os");
712
672
  logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`);
713
673
  const { mnemonic } = config.api;
@@ -726,9 +686,13 @@ var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
726
686
  await bios.seedPhraseStore.set("os", seedPhrase);
727
687
  }
728
688
  return assertEx5(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
729
- }, "getSeedPhrase");
730
- var getServer = /* @__PURE__ */ __name(async (context) => {
731
- const { config, logger, node } = context;
689
+ };
690
+ var getServer = async (context) => {
691
+ const {
692
+ config,
693
+ logger,
694
+ node
695
+ } = context;
732
696
  const { mnemonic, port } = context.config.api;
733
697
  const bios = await boot();
734
698
  const seedPhrase = isDefined3(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
@@ -742,7 +706,7 @@ var getServer = /* @__PURE__ */ __name(async (context) => {
742
706
  const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`));
743
707
  server.setTimeout(2e4);
744
708
  return server;
745
- }, "getServer");
709
+ };
746
710
  export {
747
711
  getApp,
748
712
  getServer
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/address/addNodeRoutes.ts","../../src/server/routes/address/get/get.ts","../../src/server/routes/address/post/post.ts","../../src/server/routes/address/post/getQueryConfig.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/manifest/getLocator.ts","../../src/driver/mongo/MongoMap.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n 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 { Express } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { getAddress } from './get/index.ts'\nimport { postAddress } from './post/index.ts'\n\nexport const addNodeRoutes = (app: Express) => {\n const defaultModule = app.node\n const address = defaultModule.address\n const defaultModuleEndpoint = `/${address}`\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, defaultModuleEndpoint))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, defaultModuleEndpoint))\n app.get('/:address', getAddress)\n app.post('/:address', postAddress)\n app.get('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n app.post('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport { asAddress, toAddress } from '@xylabs/hex'\nimport { isModuleIdentifierPart } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\n\nconst handler: RequestHandler<AddressPathParams, Payload[]> = async (req, res, next) => {\n const { address: rawAddress } = req.params\n const { node } = req.app\n const address = asAddress(rawAddress)\n if (address !== undefined) {\n let mod = node.address === address ? node : (await node.resolve(address, { direction: 'down' }))\n if (mod) {\n res.json(await mod.state())\n return\n }\n }\n if (isModuleIdentifierPart(rawAddress)) {\n const moduleIdentifier = toAddress(rawAddress)\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n const moduleAddress = assertEx(mod?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport {\n asAddress, isAddress,\n toAddress,\n} from '@xylabs/hex'\nimport type { JsonObject } from '@xylabs/object'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleErrorBuilder } from '@xyo-network/module-abstract'\nimport type { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport type { ModuleError, Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\nimport { getQueryConfig } from './getQueryConfig.ts'\n\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\nconst handler: RequestHandler<AddressPathParams, ModuleQueryResult | ModuleError, PostAddressRequestBody> = async (req, res, next) => {\n const returnError = (code: number, message = 'An error occurred', details?: JsonObject) => {\n const error = new ModuleErrorBuilder().message(message).details(details).build()\n res.locals.rawResponse = false\n res.status(code).json(error)\n next()\n }\n\n const { address } = req.params\n const { node } = req.app\n const [bw, payloads] = Array.isArray(req.body) ? req.body : []\n if (!isAddress(address)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing address')\n }\n\n if (!bw) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing boundwitness')\n }\n\n if (!isQueryBoundWitness(bw)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Invalid query boundwitness')\n }\n\n let modules: ModuleInstance[] = []\n const normalizedAddress = toAddress(address)\n if (node.address === normalizedAddress) modules = [node]\n else {\n const typedAddress = asAddress(address)\n const byAddress = (typedAddress === undefined) ? undefined : await node.resolve(typedAddress, { maxDepth: 10 })\n\n if (byAddress) modules = [byAddress]\n else {\n const byName = await node.resolve(address, { direction: 'down' })\n if (byName) {\n const moduleAddress = assertEx(byName?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${moduleAddress}`)\n return\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n }\n }\n\n if (modules.length > 0) {\n const mod = modules[0]\n const queryConfig = getQueryConfig(mod, req, bw, payloads)\n try {\n const queryResult = await mod.query(bw, payloads, queryConfig)\n res.json(queryResult)\n } catch (ex) {\n return returnError(StatusCodes.INTERNAL_SERVER_ERROR, 'Query Failed', { message: (ex as Error)?.message ?? 'Unknown Error' })\n }\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n}\n\nexport const postAddress = asyncHandler(handler)\n","import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model'\nimport { ModuleConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { Request } from 'express'\n\nconst DEFAULT_DEPTH = 5 as const\n\nexport const getQueryConfig = (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]): ModuleConfig | undefined => {\n // TODO: Filter based on query addresses?\n // Recurse through payloads for nested BWs\n const nestedBwAddresses\n = payloads\n ?.flat(DEFAULT_DEPTH)\n .filter<BoundWitness>((payload): payload is BoundWitness => payload?.schema === BoundWitnessSchema)\n .map(bw => bw.addresses) || []\n // TODO: Do we want to end up with a list of addresses or a list of address lists?\n const addresses = [bw.addresses, ...nestedBwAddresses].filter(address => address.length > 0)\n const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map(schema => [schema, addresses])) : {}\n const security = { allowed }\n return { schema: ModuleConfigSchema, security }\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport {\n type ArchivistInstance, asArchivistInstance, type NextOptions,\n} from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isHash(req.query.cursor) ? asHash(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: NextOptions = {\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<{}, {}, NextOptions | 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\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { NodeXyoViewer } from '@xyo-network/chain-rpc'\nimport {\n NodeXyoRunner, rpcEngineFromProvider,\n XyoConnection,\n} from '@xyo-network/xl1-rpc'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = (app: Express) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n const viewer = new NodeXyoViewer(node)\n const provider = new XyoConnection({ runner, viewer })\n const engine = rpcEngineFromProvider(provider)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { Express } from 'express'\n\nimport { addNodeRoutes } from './address/index.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addRpcRoutes(app)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const {\n config, logger, node,\n } = context\n const { mnemonic, port } = context.config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const app = getApp(node ?? await getNode(nodeContext))\n const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asAddress, ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport {\n AddressBalanceDivinerV2, ArchivistSyncDiviner, balanceSummaryRepositoryFromMap, HeadValidationDiviner,\n} from '@xyo-network/chain-modules'\nimport type { MapType } from '@xyo-network/chain-protocol'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type { BalancesStepSummary, Config } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { MongoMap } from '../driver/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // Initialize with an in-memory map for backing the summary repository\n let summaryMap: MapType<Hash, WithStorageMeta<BalancesStepSummary>> = new Map<Hash, WithStorageMeta<BalancesStepSummary>>()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n\n // Use a persistent MongoMap for the summary repository if MongoDB is configured\n const sdk = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n summaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({ sdk })\n }\n\n const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap)\n locator.register(AddressBalanceDivinerV2.factory<AddressBalanceDivinerV2>({\n traceProvider, meterProvider, statusReporter, summaryRepository,\n }))\n\n const chainId = isDefined(config.chain.id)\n ? assertEx(asAddress(config.chain.id), () => 'chain.id must be an Address')\n : ZERO_ADDRESS\n locator.register(HeadValidationDiviner.factory<HeadValidationDiviner>({\n traceProvider,\n meterProvider,\n statusReporter,\n chainId,\n }))\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ArchivistSyncDiviner.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { assertEx } from '@xylabs/assert'\nimport {\n AbstractCreatable, creatable, CreatableParams,\n} from '@xylabs/creatable'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { isNull } from '@xylabs/typeof'\nimport { AsynchronousMap } from '@xyo-network/chain-protocol'\nimport {\n Document, Filter, OptionalUnlessRequiredId, WithId,\n} from 'mongodb'\n\nexport interface MongoMapParams<TData extends Document = Document> extends CreatableParams {\n sdk: BaseMongoSdk<TData>\n}\n\nfunction stripMongoId<V extends Document>(doc: WithId<V>): V {\n const { _id, ...rest } = doc\n return rest as unknown as V\n}\n\n@creatable()\nexport class MongoMap<K = string, V extends Document = Document>\n extends AbstractCreatable<MongoMapParams<V>>\n implements AsynchronousMap<K, V> {\n get sdk(): BaseMongoSdk<V> {\n return assertEx(this.params.sdk, () => 'No sdk specified')\n }\n\n async clear(): Promise<void> {\n await this.sdk.deleteMany({})\n }\n\n async delete(id: K): Promise<boolean> {\n const filter = { _id: id } as Filter<V>\n const result = await this.sdk.deleteOne(filter)\n return result.deletedCount > 0\n }\n\n async get(id: K): Promise<V | undefined> {\n const filter = { _id: id } as Filter<V>\n const doc = await this.sdk.findOne(filter)\n return isNull(doc) ? undefined : stripMongoId(doc)\n }\n\n async has(id: K): Promise<boolean> {\n const filter = { _id: id } as Filter<V>\n const exists = await this.sdk.findOne(filter)\n return isNull(exists) ? false : true\n }\n\n async set(id: K, data: V): Promise<this> {\n const filter = { _id: id } as Filter<V>\n const value = { ...data, _id: id } as OptionalUnlessRequiredId<V>\n await this.sdk.replaceOne(filter, value, { upsert: true })\n return this\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n // TODO: Ensure index\n }\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"schema\": \"network.xyo.diviner.chain.head.validation.config\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Chain:Submissions\",\n \"targetModuleFunction\": \"divine\"\n }\n ],\n \"inArchivist\": \"Chain:Submissions\",\n \"outArchivist\": \"Chain:Validated\",\n \"name\": \"HeadValidationDiviner\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainValidationSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"HeadValidationDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressBalancePollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressBalanceDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Submissions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_submissions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/2\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"Chain:Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/3\",\n \"schema\": \"network.xyo.diviner.chain.address.balance.config\",\n \"archivist\": \"Chain:Validated\",\n \"name\": \"AddressBalanceDiviner\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Chain:Validated\",\n \"targetModuleFunction\": \"divine\"\n }\n ]\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"PendingTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nexport const ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nexport const PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","StatusCodes","assertEx","asyncHandler","asAddress","toAddress","isModuleIdentifierPart","StatusCodes","handler","req","res","next","address","rawAddress","params","node","app","asAddress","undefined","mod","resolve","direction","json","state","isModuleIdentifierPart","moduleIdentifier","toAddress","moduleAddress","assertEx","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","assertEx","asyncHandler","asAddress","isAddress","toAddress","isQueryBoundWitness","ModuleErrorBuilder","StatusCodes","BoundWitnessSchema","ModuleConfigSchema","DEFAULT_DEPTH","getQueryConfig","mod","req","bw","payloads","nestedBwAddresses","flat","filter","payload","schema","BoundWitnessSchema","map","addresses","address","length","allowed","Object","fromEntries","queries","security","ModuleConfigSchema","handler","req","res","next","returnError","code","message","details","error","ModuleErrorBuilder","build","locals","rawResponse","status","json","address","params","node","app","bw","payloads","Array","isArray","body","isAddress","StatusCodes","BAD_REQUEST","isQueryBoundWitness","modules","normalizedAddress","toAddress","typedAddress","asAddress","byAddress","undefined","resolve","maxDepth","byName","direction","moduleAddress","assertEx","redirect","TEMPORARY_REDIRECT","NOT_FOUND","length","mod","queryConfig","getQueryConfig","queryResult","query","ex","INTERNAL_SERVER_ERROR","postAddress","asyncHandler","addNodeRoutes","app","defaultModule","node","address","defaultModuleEndpoint","get","_req","res","redirect","StatusCodes","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","getAddress","postAddress","sendStatus","NOT_FOUND","setRawResponseFormat","asHash","isHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","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","isHash","query","asHash","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","NodeXyoViewer","NodeXyoRunner","rpcEngineFromProvider","XyoConnection","addRpcRoutes","app","node","runner","NodeXyoRunner","viewer","NodeXyoViewer","provider","XyoConnection","engine","rpcEngineFromProvider","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","node","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","assertEx","asAddress","ZERO_ADDRESS","BaseMongoSdk","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","AddressBalanceDivinerV2","ArchivistSyncDiviner","balanceSummaryRepositoryFromMap","HeadValidationDiviner","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","assertEx","AbstractCreatable","creatable","isNull","stripMongoId","doc","_id","rest","MongoMap","AbstractCreatable","sdk","assertEx","params","clear","deleteMany","delete","id","filter","result","deleteOne","deletedCount","get","findOne","isNull","undefined","has","exists","set","data","value","replaceOne","upsert","startHandler","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","summaryMap","Map","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","sdk","BaseMongoSdk","collection","MongoMap","create","summaryRepository","balanceSummaryRepositoryFromMap","AddressBalanceDivinerV2","chainId","chain","id","assertEx","asAddress","ZERO_ADDRESS","HeadValidationDiviner","MemoryArchivist","MemorySentinel","ViewArchivist","ArchivistSyncDiviner","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","node","port","boot","isDefined","wallet","fromPhrase","nodeContext","app","getApp","getNode","server","listen","setTimeout"]}
1
+ {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/address/addNodeRoutes.ts","../../src/server/routes/address/get/get.ts","../../src/server/routes/address/post/post.ts","../../src/server/routes/address/post/getQueryConfig.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/manifest/getLocator.ts","../../src/driver/mongo/MongoMap.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n 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 { Express } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { getAddress } from './get/index.ts'\nimport { postAddress } from './post/index.ts'\n\nexport const addNodeRoutes = (app: Express) => {\n const defaultModule = app.node\n const address = defaultModule.address\n const defaultModuleEndpoint = `/${address}`\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, defaultModuleEndpoint))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, defaultModuleEndpoint))\n app.get('/:address', getAddress)\n app.post('/:address', postAddress)\n app.get('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n app.post('/:hash', (_req, res) => {\n res.sendStatus(StatusCodes.NOT_FOUND)\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport { asAddress, toAddress } from '@xylabs/hex'\nimport { isModuleIdentifierPart } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\n\nconst handler: RequestHandler<AddressPathParams, Payload[]> = async (req, res, next) => {\n const { address: rawAddress } = req.params\n const { node } = req.app\n const address = asAddress(rawAddress)\n if (address !== undefined) {\n let mod = node.address === address ? node : (await node.resolve(address, { direction: 'down' }))\n if (mod) {\n res.json(await mod.state())\n return\n }\n }\n if (isModuleIdentifierPart(rawAddress)) {\n const moduleIdentifier = toAddress(rawAddress)\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n const moduleAddress = assertEx(mod?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { assertEx } from '@xylabs/assert'\nimport { asyncHandler } from '@xylabs/express'\nimport {\n asAddress, isAddress,\n toAddress,\n} from '@xylabs/hex'\nimport type { JsonObject } from '@xylabs/object'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleErrorBuilder } from '@xyo-network/module-abstract'\nimport type { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport type { ModuleError, Payload } from '@xyo-network/payload-model'\nimport type { RequestHandler } from 'express'\nimport { StatusCodes } from 'http-status-codes'\n\nimport type { AddressPathParams } from '../AddressPathParams.ts'\nimport { getQueryConfig } from './getQueryConfig.ts'\n\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\nconst handler: RequestHandler<AddressPathParams, ModuleQueryResult | ModuleError, PostAddressRequestBody> = async (req, res, next) => {\n const returnError = (code: number, message = 'An error occurred', details?: JsonObject) => {\n const error = new ModuleErrorBuilder().message(message).details(details).build()\n res.locals.rawResponse = false\n res.status(code).json(error)\n next()\n }\n\n const { address } = req.params\n const { node } = req.app\n const [bw, payloads] = Array.isArray(req.body) ? req.body : []\n if (!isAddress(address)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing address')\n }\n\n if (!bw) {\n return returnError(StatusCodes.BAD_REQUEST, 'Missing boundwitness')\n }\n\n if (!isQueryBoundWitness(bw)) {\n return returnError(StatusCodes.BAD_REQUEST, 'Invalid query boundwitness')\n }\n\n let modules: ModuleInstance[] = []\n const normalizedAddress = toAddress(address)\n if (node.address === normalizedAddress) modules = [node]\n else {\n const typedAddress = asAddress(address)\n const byAddress = (typedAddress === undefined) ? undefined : await node.resolve(typedAddress, { maxDepth: 10 })\n\n if (byAddress) modules = [byAddress]\n else {\n const byName = await node.resolve(address, { direction: 'down' })\n if (byName) {\n const moduleAddress = assertEx(byName?.address, () => 'Error redirecting to module by address')\n res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${moduleAddress}`)\n return\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n }\n }\n\n if (modules.length > 0) {\n const mod = modules[0]\n const queryConfig = getQueryConfig(mod, req, bw, payloads)\n try {\n const queryResult = await mod.query(bw, payloads, queryConfig)\n res.json(queryResult)\n } catch (ex) {\n return returnError(StatusCodes.INTERNAL_SERVER_ERROR, 'Query Failed', { message: (ex as Error)?.message ?? 'Unknown Error' })\n }\n } else {\n return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })\n }\n}\n\nexport const postAddress = asyncHandler(handler)\n","import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model'\nimport { ModuleConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { Request } from 'express'\n\nconst DEFAULT_DEPTH = 5 as const\n\nexport const getQueryConfig = (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]): ModuleConfig | undefined => {\n // TODO: Filter based on query addresses?\n // Recurse through payloads for nested BWs\n const nestedBwAddresses\n = payloads\n ?.flat(DEFAULT_DEPTH)\n .filter<BoundWitness>((payload): payload is BoundWitness => payload?.schema === BoundWitnessSchema)\n .map(bw => bw.addresses) || []\n // TODO: Do we want to end up with a list of addresses or a list of address lists?\n const addresses = [bw.addresses, ...nestedBwAddresses].filter(address => address.length > 0)\n const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map(schema => [schema, addresses])) : {}\n const security = { allowed }\n return { schema: ModuleConfigSchema, security }\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { NodeXyoViewer } from '@xyo-network/chain-rpc'\nimport {\n NodeXyoRunner, rpcEngineFromProvider,\n XyoConnection,\n} from '@xyo-network/xl1-rpc'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = (app: Express) => {\n const { node } = app\n const runner = new NodeXyoRunner(node)\n const viewer = new NodeXyoViewer(node)\n const provider = new XyoConnection({ runner, viewer })\n const engine = rpcEngineFromProvider(provider)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { Express } from 'express'\n\nimport { addNodeRoutes } from './address/index.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addRpcRoutes(app)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const {\n config, logger, node,\n } = context\n const { mnemonic, port } = context.config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const app = getApp(node ?? await getNode(nodeContext))\n const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asAddress, ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport {\n AddressBalanceDivinerV2, ArchivistSyncDiviner, balanceSummaryRepositoryFromMap, HeadValidationDiviner,\n} from '@xyo-network/chain-modules'\nimport type { MapType } from '@xyo-network/chain-protocol'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type { BalancesStepSummary, Config } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport { MongoMap } from '../driver/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // Initialize with an in-memory map for backing the summary repository\n let summaryMap: MapType<Hash, WithStorageMeta<BalancesStepSummary>> = new Map<Hash, WithStorageMeta<BalancesStepSummary>>()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n\n // Use a persistent MongoMap for the summary repository if MongoDB is configured\n const sdk = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n summaryMap = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({ sdk })\n }\n\n const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap)\n locator.register(AddressBalanceDivinerV2.factory<AddressBalanceDivinerV2>({\n traceProvider, meterProvider, statusReporter, summaryRepository,\n }))\n\n const chainId = isDefined(config.chain.id)\n ? assertEx(asAddress(config.chain.id), () => 'chain.id must be an Address')\n : ZERO_ADDRESS\n locator.register(HeadValidationDiviner.factory<HeadValidationDiviner>({\n traceProvider,\n meterProvider,\n statusReporter,\n chainId,\n }))\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ArchivistSyncDiviner.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { assertEx } from '@xylabs/assert'\nimport {\n AbstractCreatable, creatable, CreatableParams,\n} from '@xylabs/creatable'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { isNull } from '@xylabs/typeof'\nimport { AsynchronousMap } from '@xyo-network/chain-protocol'\nimport {\n Document, Filter, OptionalUnlessRequiredId, WithId,\n} from 'mongodb'\n\nexport interface MongoMapParams<TData extends Document = Document> extends CreatableParams {\n sdk: BaseMongoSdk<TData>\n}\n\nfunction stripMongoId<V extends Document>(doc: WithId<V>): V {\n const { _id, ...rest } = doc\n return rest as unknown as V\n}\n\n@creatable()\nexport class MongoMap<K = string, V extends Document = Document>\n extends AbstractCreatable<MongoMapParams<V>>\n implements AsynchronousMap<K, V> {\n get sdk(): BaseMongoSdk<V> {\n return assertEx(this.params.sdk, () => 'No sdk specified')\n }\n\n async clear(): Promise<void> {\n await this.sdk.deleteMany({})\n }\n\n async delete(id: K): Promise<boolean> {\n const filter = { _id: id } as Filter<V>\n const result = await this.sdk.deleteOne(filter)\n return result.deletedCount > 0\n }\n\n async get(id: K): Promise<V | undefined> {\n const filter = { _id: id } as Filter<V>\n const doc = await this.sdk.findOne(filter)\n return isNull(doc) ? undefined : stripMongoId(doc)\n }\n\n async has(id: K): Promise<boolean> {\n const filter = { _id: id } as Filter<V>\n const exists = await this.sdk.findOne(filter)\n return isNull(exists) ? false : true\n }\n\n async set(id: K, data: V): Promise<this> {\n const filter = { _id: id } as Filter<V>\n const value = { ...data, _id: id } as OptionalUnlessRequiredId<V>\n await this.sdk.replaceOne(filter, value, { upsert: true })\n return this\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n // TODO: Ensure index\n }\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"schema\": \"network.xyo.diviner.chain.head.validation.config\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Chain:Submissions\",\n \"targetModuleFunction\": \"divine\"\n }\n ],\n \"inArchivist\": \"Chain:Submissions\",\n \"outArchivist\": \"Chain:Validated\",\n \"name\": \"HeadValidationDiviner\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 10000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainValidationSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"HeadValidationDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"AddressBalancePollingSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"AddressBalanceDiviner\",\n \"endPoint\": \"divine\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Submissions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_submissions\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/2\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"Chain:Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1/3\",\n \"schema\": \"network.xyo.diviner.chain.address.balance.config\",\n \"archivist\": \"Chain:Validated\",\n \"name\": \"AddressBalanceDiviner\",\n \"eventSubscriptions\": [\n {\n \"sourceEvent\": \"inserted\",\n \"sourceModule\": \"Chain:Validated\",\n \"targetModuleFunction\": \"divine\"\n }\n ]\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"PendingTransactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nexport const ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nexport const PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n"],"mappings":"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","names":["express","StatusCodes","assertEx","asyncHandler","asAddress","toAddress","StatusCodes","bw","handler","StatusCodes","toAddress","asAddress","assertEx","asyncHandler","StatusCodes","options","setRawResponseFormat","express","assertEx","isDefined","assertEx","asAddress","isDefined","assertEx","assertEx","isDefined","assertEx","asAddress","assertEx","isDefined"]}
@@ -1,4 +1,4 @@
1
1
  import type { Payload } from '@xyo-network/payload-model';
2
2
  import type { AddressPathParams } from '../AddressPathParams.ts';
3
- export declare const getAddress: (req: import("express").Request<AddressPathParams, Payload[], any, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<Payload[], Record<string, any>>, next: import("express").NextFunction) => Promise<void>;
3
+ export declare const getAddress: (req: import("express").Request<AddressPathParams, Payload[], any, import(".store/@types-qs-npm-6.14.0-e27d9ca044/package").ParsedQs, Record<string, any>>, res: import("express").Response<Payload[], Record<string, any>>, next: import("express").NextFunction) => Promise<unknown>;
4
4
  //# sourceMappingURL=get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/get/get.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAwBhE,eAAO,MAAM,UAAU,yOAAwB,CAAA"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/get/get.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAwBhE,eAAO,MAAM,UAAU,wRAAwB,CAAA"}
@@ -3,6 +3,6 @@ import type { ModuleQueryResult } from '@xyo-network/module-model';
3
3
  import type { ModuleError, Payload } from '@xyo-network/payload-model';
4
4
  import type { AddressPathParams } from '../AddressPathParams.ts';
5
5
  type PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]];
6
- export declare const postAddress: (req: import("express").Request<AddressPathParams, ModuleError | ModuleQueryResult, PostAddressRequestBody, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<ModuleError | ModuleQueryResult, Record<string, any>>, next: import("express").NextFunction) => Promise<void>;
6
+ export declare const postAddress: (req: import("express").Request<AddressPathParams, ModuleError | ModuleQueryResult, PostAddressRequestBody, import(".store/@types-qs-npm-6.14.0-e27d9ca044/package").ParsedQs, Record<string, any>>, res: import("express").Response<ModuleError | ModuleQueryResult, Record<string, any>>, next: import("express").NextFunction) => Promise<unknown>;
7
7
  export {};
8
8
  //# sourceMappingURL=post.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/post/post.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAItE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhE,KAAK,sBAAsB,GAAG,CAAC,iBAAiB,EAAE,SAAS,GAAG,OAAO,EAAE,CAAC,CAAA;AA2DxE,eAAO,MAAM,WAAW,wSAAwB,CAAA"}
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/post/post.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAItE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhE,KAAK,sBAAsB,GAAG,CAAC,iBAAiB,EAAE,SAAS,GAAG,OAAO,EAAE,CAAC,CAAA;AA2DxE,eAAO,MAAM,WAAW,uVAAwB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"archivistMiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/archivistMiddleware.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAiBrC,KAAK,0BAA0B,GAAG;IAChC,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,MAkDzE,CAAA"}
1
+ {"version":3,"file":"archivistMiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/archivistMiddleware.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAiBrC,KAAK,0BAA0B,GAAG;IAChC,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,MAkDzE,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import type { RequestHandler } from 'express';
2
- export declare const getHealthz: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
2
+ export declare const getHealthz: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import(".store/@types-qs-npm-6.14.0-e27d9ca044/package").ParsedQs, Record<string, any>>;
3
3
  //# sourceMappingURL=get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/get.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiB7C,eAAO,MAAM,UAAU,4HAAU,CAAA"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/get.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiB7C,eAAO,MAAM,UAAU,wKAAU,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-api",
3
- "version": "1.8.4",
3
+ "version": "1.10.0",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -46,70 +46,70 @@
46
46
  "types": "tsc --noEmit -p tsconfig.test.json"
47
47
  },
48
48
  "dependencies": {
49
- "@opentelemetry/instrumentation": "^0.203.0",
50
- "@opentelemetry/instrumentation-express": "^0.52.0",
51
- "@opentelemetry/instrumentation-http": "^0.203.0",
52
- "@xylabs/assert": "^4.15.3",
53
- "@xylabs/creatable": "^4.15.3",
54
- "@xylabs/express": "^4.15.3",
55
- "@xylabs/hex": "^4.15.3",
56
- "@xylabs/logger": "^4.15.3",
57
- "@xylabs/mongo": "^4.15.3",
58
- "@xylabs/typeof": "^4.15.3",
59
- "@xyo-network/archivist-memory": "^4.3.0",
60
- "@xyo-network/archivist-model": "^4.3.0",
61
- "@xyo-network/archivist-mongodb": "^4.3.0",
62
- "@xyo-network/archivist-view": "^4.3.0",
63
- "@xyo-network/bios": "^6.1.0",
64
- "@xyo-network/boundwitness-model": "^4.3.0",
65
- "@xyo-network/chain-modules": "^1.8.4",
66
- "@xyo-network/chain-protocol": "^1.8.4",
67
- "@xyo-network/chain-rpc": "^1.8.4",
68
- "@xyo-network/chain-telemetry": "^1.8.4",
69
- "@xyo-network/manifest-model": "^4.3.0",
70
- "@xyo-network/manifest-wrapper": "^4.3.0",
71
- "@xyo-network/module-abstract": "^4.3.0",
72
- "@xyo-network/module-factory-locator": "^4.3.0",
73
- "@xyo-network/module-model": "^4.3.0",
74
- "@xyo-network/node-model": "^4.3.0",
75
- "@xyo-network/payload-builder": "^4.3.0",
76
- "@xyo-network/payload-model": "^4.3.0",
77
- "@xyo-network/sentinel-memory": "^4.3.0",
78
- "@xyo-network/wallet": "^4.3.0",
79
- "@xyo-network/wallet-model": "^4.3.0",
80
- "@xyo-network/xl1-protocol-sdk": "^1.8.4",
81
- "@xyo-network/xl1-rpc": "^1.8.4",
82
- "compression": "^1.8.1",
83
- "cors": "^2.8.5",
84
- "express": "^5.1.0",
85
- "http-status-codes": "^2.3.0",
86
- "mongodb": "^6.18.0"
49
+ "@opentelemetry/instrumentation": "~0.203.0",
50
+ "@opentelemetry/instrumentation-express": "~0.52.0",
51
+ "@opentelemetry/instrumentation-http": "~0.203.0",
52
+ "@xylabs/assert": "~5.0.2",
53
+ "@xylabs/creatable": "~5.0.2",
54
+ "@xylabs/express": "~5.0.2",
55
+ "@xylabs/hex": "~5.0.2",
56
+ "@xylabs/logger": "~5.0.2",
57
+ "@xylabs/mongo": "~5.0.2",
58
+ "@xylabs/typeof": "~5.0.2",
59
+ "@xyo-network/archivist-memory": "~5.0.0",
60
+ "@xyo-network/archivist-model": "~5.0.0",
61
+ "@xyo-network/archivist-mongodb": "~5.0.0",
62
+ "@xyo-network/archivist-view": "~5.0.0",
63
+ "@xyo-network/bios": "~7.0.1",
64
+ "@xyo-network/boundwitness-model": "~5.0.0",
65
+ "@xyo-network/chain-modules": "~1.10.0",
66
+ "@xyo-network/chain-protocol": "~1.10.0",
67
+ "@xyo-network/chain-rpc": "~1.10.0",
68
+ "@xyo-network/chain-telemetry": "~1.10.0",
69
+ "@xyo-network/manifest-model": "~5.0.0",
70
+ "@xyo-network/manifest-wrapper": "~5.0.0",
71
+ "@xyo-network/module-abstract": "~5.0.0",
72
+ "@xyo-network/module-factory-locator": "~5.0.0",
73
+ "@xyo-network/module-model": "~5.0.0",
74
+ "@xyo-network/node-model": "~5.0.0",
75
+ "@xyo-network/payload-builder": "~5.0.0",
76
+ "@xyo-network/payload-model": "~5.0.0",
77
+ "@xyo-network/sentinel-memory": "~5.0.0",
78
+ "@xyo-network/wallet": "~5.0.0",
79
+ "@xyo-network/wallet-model": "~5.0.0",
80
+ "@xyo-network/xl1-protocol-sdk": "~1.10.0",
81
+ "@xyo-network/xl1-rpc": "~1.10.0",
82
+ "compression": "~1.8.1",
83
+ "cors": "~2.8.5",
84
+ "express": "~5.1.0",
85
+ "http-status-codes": "~2.3.0",
86
+ "mongodb": "~6.18.0"
87
87
  },
88
88
  "devDependencies": {
89
- "@types/compression": "^1.8.1",
90
- "@types/cors": "^2.8.19",
89
+ "@types/compression": "~1.8.1",
90
+ "@types/cors": "~2.8.19",
91
91
  "@types/express": "5.0.3",
92
- "@types/express-serve-static-core": "^5.0.7",
93
- "@types/node": "^24.1.0",
94
- "@xylabs/base": "^4.15.3",
95
- "@xylabs/object": "^4.15.3",
96
- "@xylabs/ts-scripts-yarn3": "^7.0.2",
97
- "@xylabs/tsconfig": "^7.0.2",
98
- "@xyo-network/account": "^4.3.0",
99
- "@xyo-network/account-model": "^4.3.0",
100
- "@xyo-network/archivist-abstract": "^4.3.0",
101
- "@xyo-network/bios-model": "^6.1.0",
102
- "@xyo-network/boundwitness-builder": "^4.3.0",
103
- "@xyo-network/module-abstract-mongodb": "^4.3.0",
104
- "@xyo-network/module-model-mongodb": "^4.3.0",
105
- "@xyo-network/node-memory": "^4.3.0",
106
- "@xyo-network/xl1-protocol-sdk": "^1.8.4",
107
- "dotenv": "^17.2.1",
108
- "knip": "^5.62.0",
109
- "nodemon": "^3.1.10",
110
- "typescript": "^5.8.3",
111
- "vitest": "^3.2.4",
112
- "vitest-mock-extended": "^3.1.0"
92
+ "@types/express-serve-static-core": "~5.0.7",
93
+ "@types/node": "~24.2.0",
94
+ "@xylabs/base": "~5.0.2",
95
+ "@xylabs/object": "~5.0.2",
96
+ "@xylabs/ts-scripts-yarn3": "~7.0.3",
97
+ "@xylabs/tsconfig": "~7.0.3",
98
+ "@xyo-network/account": "~5.0.0",
99
+ "@xyo-network/account-model": "~5.0.0",
100
+ "@xyo-network/archivist-abstract": "~5.0.0",
101
+ "@xyo-network/bios-model": "~7.0.1",
102
+ "@xyo-network/boundwitness-builder": "~5.0.0",
103
+ "@xyo-network/module-abstract-mongodb": "~5.0.0",
104
+ "@xyo-network/module-model-mongodb": "~5.0.0",
105
+ "@xyo-network/node-memory": "~5.0.0",
106
+ "@xyo-network/xl1-protocol-sdk": "~1.10.0",
107
+ "dotenv": "~17.2.1",
108
+ "nodemon": "~3.1.10",
109
+ "tslib": "~2.8.1",
110
+ "typescript": "~5.9.2",
111
+ "vitest": "~3.2.4",
112
+ "vitest-mock-extended": "~3.1.0"
113
113
  },
114
114
  "engines": {
115
115
  "node": ">=22.3 <23"
@@ -1,14 +1,16 @@
1
1
  import { setRawResponseFormat } from '@xylabs/express'
2
- import { asHash, isHash } from '@xylabs/hex'
2
+ import { asHash } from '@xylabs/hex'
3
3
  import { isDefined } from '@xylabs/typeof'
4
- import {
5
- type ArchivistInstance, asArchivistInstance, type NextOptions,
4
+ import type {
5
+ ArchivistInstance,
6
+ ArchivistNextOptions, NextOptions,
6
7
  } from '@xyo-network/archivist-model'
8
+ import { asArchivistInstance } from '@xyo-network/archivist-model'
7
9
  import type { ModuleIdentifier } from '@xyo-network/module-model'
8
10
  import type { NodeInstance } from '@xyo-network/node-model'
9
11
  import { PayloadBuilder } from '@xyo-network/payload-builder'
10
12
  import type { Payload } from '@xyo-network/payload-model'
11
- import { isAnyPayload } from '@xyo-network/payload-model'
13
+ import { isAnyPayload, isSequence } from '@xyo-network/payload-model'
12
14
  import type { Router } from 'express'
13
15
  import express from 'express'
14
16
  import type { Request } from 'express-serve-static-core'
@@ -46,18 +48,18 @@ export const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router
46
48
 
47
49
  router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {
48
50
  setRawResponseFormat(res)
49
- const cursor = isHash(req.query.cursor) ? asHash(req.query.cursor) : undefined
51
+ const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined
50
52
  const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined
51
53
  const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined
52
54
  const order = req.query.order === 'asc' ? 'asc' : 'desc'
53
- const options: NextOptions = {
55
+ const options: ArchivistNextOptions = {
54
56
  limit, open, order, cursor,
55
57
  }
56
58
  const archivist = await getArchivist(node, archivistModuleIdentifier)
57
59
  const result = await archivist.next(options)
58
60
  res.status(200).json(result)
59
61
  })
60
- router.post('/next', async (req: Request<{}, {}, NextOptions | undefined>, res) => {
62
+ router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {
61
63
  setRawResponseFormat(res)
62
64
  const options = req.body
63
65
  const archivist = await getArchivist(node, archivistModuleIdentifier)