@xyo-network/chain-api 1.19.8 → 1.19.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/node/ApiActor.d.ts +4 -25
  2. package/dist/node/ApiActor.d.ts.map +1 -1
  3. package/dist/node/index.mjs +20 -306
  4. package/dist/node/index.mjs.map +1 -1
  5. package/dist/node/runApi.d.ts +2 -6
  6. package/dist/node/runApi.d.ts.map +1 -1
  7. package/dist/node/server/app.d.ts +2 -2
  8. package/dist/node/server/app.d.ts.map +1 -1
  9. package/dist/node/server/index.d.ts +0 -1
  10. package/dist/node/server/index.d.ts.map +1 -1
  11. package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
  12. package/dist/node/server/routes/index.d.ts +0 -1
  13. package/dist/node/server/routes/index.d.ts.map +1 -1
  14. package/dist/node/server/server.d.ts +2 -2
  15. package/dist/node/server/server.d.ts.map +1 -1
  16. package/package.json +10 -16
  17. package/src/ApiActor.ts +5 -40
  18. package/src/runApi.ts +15 -20
  19. package/src/server/app.ts +2 -2
  20. package/src/server/index.ts +0 -1
  21. package/src/server/routes/addRoutes.ts +0 -2
  22. package/src/server/routes/index.ts +0 -2
  23. package/src/server/server.ts +4 -3
  24. package/dist/node/ApiContext.d.ts +0 -6
  25. package/dist/node/ApiContext.d.ts.map +0 -1
  26. package/dist/node/server/initApiParams.d.ts +0 -12
  27. package/dist/node/server/initApiParams.d.ts.map +0 -1
  28. package/dist/node/server/routes/address/AddressPathParams.d.ts +0 -4
  29. package/dist/node/server/routes/address/AddressPathParams.d.ts.map +0 -1
  30. package/dist/node/server/routes/address/addNodeRoutes.d.ts +0 -3
  31. package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +0 -1
  32. package/dist/node/server/routes/address/get/get.d.ts +0 -4
  33. package/dist/node/server/routes/address/get/get.d.ts.map +0 -1
  34. package/dist/node/server/routes/address/get/index.d.ts +0 -2
  35. package/dist/node/server/routes/address/get/index.d.ts.map +0 -1
  36. package/dist/node/server/routes/address/index.d.ts +0 -2
  37. package/dist/node/server/routes/address/index.d.ts.map +0 -1
  38. package/dist/node/server/routes/address/post/getQueryConfig.d.ts +0 -6
  39. package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +0 -1
  40. package/dist/node/server/routes/address/post/index.d.ts +0 -2
  41. package/dist/node/server/routes/address/post/index.d.ts.map +0 -1
  42. package/dist/node/server/routes/address/post/post.d.ts +0 -8
  43. package/dist/node/server/routes/address/post/post.d.ts.map +0 -1
  44. package/src/ApiContext.ts +0 -6
  45. package/src/server/initApiParams.ts +0 -170
  46. package/src/server/routes/address/AddressPathParams.ts +0 -3
  47. package/src/server/routes/address/addNodeRoutes.ts +0 -21
  48. package/src/server/routes/address/get/get.ts +0 -30
  49. package/src/server/routes/address/get/index.ts +0 -1
  50. package/src/server/routes/address/index.ts +0 -1
  51. package/src/server/routes/address/post/getQueryConfig.ts +0 -23
  52. package/src/server/routes/address/post/index.ts +0 -1
  53. package/src/server/routes/address/post/post.ts +0 -77
@@ -1,30 +1,9 @@
1
- import { WithStorageMeta } from '@xyo-network/payload-model';
2
- import { Actor, ActorParams, BalancesStepSummary, CreatableProviderFactory, MapType, TransfersStepSummary } from '@xyo-network/xl1-sdk';
3
- import { ApiContext } from './ApiContext.ts';
4
- export type ApiActorParams = ActorParams<{
5
- balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>;
6
- context: ApiContext;
7
- transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>;
1
+ import { ActorParamsV3, ActorV3, Config } from '@xyo-network/xl1-sdk';
2
+ export type ApiActorParams = ActorParamsV3<{
3
+ config: Config;
8
4
  }>;
9
- export declare class ApiActor extends Actor<ApiActorParams> {
5
+ export declare class ApiActor extends ActorV3<ApiActorParams> {
10
6
  private server?;
11
- protected get context(): import("@xyo-network/xl1-sdk").ActorContext & ApiContext;
12
- static defaultFactories(): CreatableProviderFactory[];
13
- static paramsHandler<T extends ApiActor>(params: T['params']): Promise<{
14
- context: import("@xyo-network/xl1-sdk").ActorContext & ApiContext;
15
- account: import("@xyo-network/account-model").AccountInstance;
16
- name?: import("@xylabs/sdk-js").CreatableName;
17
- statusReporter?: import("@xylabs/sdk-js").CreatableStatusReporter<void> | undefined;
18
- logger: import("@xylabs/sdk-js").Logger;
19
- meterProvider?: import("@opentelemetry/api").MeterProvider;
20
- traceProvider?: import("@opentelemetry/api").TracerProvider;
21
- displayName: string | (string & {
22
- __baseClassName: true;
23
- }) | undefined;
24
- id: string | (string & {
25
- __baseClassName: true;
26
- });
27
- }>;
28
7
  createHandler(): Promise<void>;
29
8
  startHandler(): Promise<void>;
30
9
  stopHandler(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EACL,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,wBAAwB,EACjE,OAAO,EACP,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;IACvC,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzE,OAAO,EAAE,UAAU,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAA;CAC5E,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,KAAK,CAAC,cAAc,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,CAAQ;IAEvB,cAAuB,OAAO,6DAE7B;WAEe,gBAAgB,IAAI,wBAAwB,EAAE;WAMxC,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;IAkB5D,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"ApiActor.d.ts","sourceRoot":"","sources":["../../src/ApiActor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EAAE,OAAO,EAAE,MAAM,EAC/B,MAAM,sBAAsB,CAAA;AAI7B,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAEF,qBACa,QAAS,SAAQ,OAAO,CAAC,cAAc,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,CAAQ;IAER,aAAa;IAIb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
@@ -2,9 +2,8 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/ApiActor.ts
5
- import { assertEx as assertEx3, creatable } from "@xylabs/sdk-js";
6
- import { Account } from "@xyo-network/account";
7
- import { Actor } from "@xyo-network/xl1-sdk";
5
+ import { creatable } from "@xylabs/sdk-js";
6
+ import { ActorV3 } from "@xyo-network/xl1-sdk";
8
7
 
9
8
  // src/server/app.ts
10
9
  import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
@@ -26,157 +25,9 @@ var addInstrumentation = /* @__PURE__ */ __name(() => {
26
25
  });
27
26
  }, "addInstrumentation");
28
27
 
29
- // src/server/routes/address/addNodeRoutes.ts
30
- import { StatusCodes as StatusCodes3 } from "http-status-codes";
31
-
32
- // src/server/routes/address/get/get.ts
33
- import { asyncHandler } from "@xylabs/express";
34
- import { asAddress, isDefined } from "@xylabs/sdk-js";
35
- import { isModuleName } from "@xyo-network/module-model";
36
- import { StatusCodes } from "http-status-codes";
37
- var handler = /* @__PURE__ */ __name(async (req, res, next) => {
38
- const { address: moduleIdentifier } = req.params;
39
- const { node } = req.app.context;
40
- const address = asAddress(moduleIdentifier);
41
- if (isDefined(address)) {
42
- let mod = node.address === address ? node : await node.resolve(address, {
43
- direction: "down"
44
- });
45
- if (mod) {
46
- res.json(await mod.state());
47
- return;
48
- }
49
- }
50
- if (isModuleName(moduleIdentifier)) {
51
- const mod = await node.resolve(moduleIdentifier, {
52
- direction: "down"
53
- });
54
- if (mod) {
55
- res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${mod.address}`);
56
- return;
57
- }
58
- }
59
- next("route");
60
- }, "handler");
61
- var getAddress = asyncHandler(handler);
62
-
63
- // src/server/routes/address/post/post.ts
64
- import { asyncHandler as asyncHandler2 } from "@xylabs/express";
65
- import { asAddress as asAddress2, assertEx, isAddress, toAddress } from "@xylabs/sdk-js";
66
- import { isQueryBoundWitness } from "@xyo-network/boundwitness-model";
67
- import { ModuleErrorBuilder } from "@xyo-network/module-abstract";
68
- import { StatusCodes as StatusCodes2 } from "http-status-codes";
69
-
70
- // src/server/routes/address/post/getQueryConfig.ts
71
- import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
72
- import { ModuleConfigSchema } from "@xyo-network/module-model";
73
- var DEFAULT_DEPTH = 5;
74
- var getQueryConfig = /* @__PURE__ */ __name((mod, req, bw, payloads) => {
75
- const nestedBwAddresses = payloads?.flat(DEFAULT_DEPTH).filter((payload) => payload?.schema === BoundWitnessSchema).map((bw2) => bw2.addresses) ?? [];
76
- const addresses = [
77
- bw.addresses,
78
- ...nestedBwAddresses
79
- ].filter((address) => address.length > 0);
80
- const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map((schema) => [
81
- schema,
82
- addresses
83
- ])) : {};
84
- const security = {
85
- allowed
86
- };
87
- return {
88
- schema: ModuleConfigSchema,
89
- security
90
- };
91
- }, "getQueryConfig");
92
-
93
- // src/server/routes/address/post/post.ts
94
- var handler2 = /* @__PURE__ */ __name(async (req, res, next) => {
95
- const returnError = /* @__PURE__ */ __name((code, message = "An error occurred", details) => {
96
- const error = new ModuleErrorBuilder().message(message).details(details).build();
97
- res.locals.rawResponse = false;
98
- res.status(code).json(error);
99
- next();
100
- }, "returnError");
101
- const { address } = req.params;
102
- const { node } = req.app.context;
103
- const [bw, payloads] = Array.isArray(req.body) ? req.body : [];
104
- if (!isAddress(address)) {
105
- return returnError(StatusCodes2.BAD_REQUEST, "Missing address");
106
- }
107
- if (!bw) {
108
- return returnError(StatusCodes2.BAD_REQUEST, "Missing boundwitness");
109
- }
110
- if (!isQueryBoundWitness(bw)) {
111
- return returnError(StatusCodes2.BAD_REQUEST, "Invalid query boundwitness");
112
- }
113
- let modules = [];
114
- const normalizedAddress = toAddress(address);
115
- if (node.address === normalizedAddress) modules = [
116
- node
117
- ];
118
- else {
119
- const typedAddress = asAddress2(address);
120
- const byAddress = typedAddress === void 0 ? void 0 : await node.resolve(typedAddress, {
121
- maxDepth: 10
122
- });
123
- if (byAddress) modules = [
124
- byAddress
125
- ];
126
- else {
127
- const byName = await node.resolve(address, {
128
- direction: "down"
129
- });
130
- if (byName) {
131
- const moduleAddress = assertEx(byName?.address, () => "Error redirecting to module by address");
132
- res.redirect(StatusCodes2.TEMPORARY_REDIRECT, `/${moduleAddress}`);
133
- return;
134
- } else {
135
- return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
136
- address
137
- });
138
- }
139
- }
140
- }
141
- if (modules.length > 0) {
142
- const mod = modules[0];
143
- const queryConfig = getQueryConfig(mod, req, bw, payloads);
144
- try {
145
- const queryResult = await mod.query(bw, payloads, queryConfig);
146
- res.json(queryResult);
147
- } catch (ex) {
148
- return returnError(StatusCodes2.INTERNAL_SERVER_ERROR, "Query Failed", {
149
- message: ex?.message ?? "Unknown Error"
150
- });
151
- }
152
- } else {
153
- return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
154
- address
155
- });
156
- }
157
- }, "handler");
158
- var postAddress = asyncHandler2(handler2);
159
-
160
- // src/server/routes/address/addNodeRoutes.ts
161
- var addNodeRoutes = /* @__PURE__ */ __name((app) => {
162
- const defaultModule = app.context.node;
163
- const address = defaultModule.address;
164
- const defaultModuleEndpoint = `/${address}`;
165
- app.get("/", (_req, res) => res.redirect(StatusCodes3.MOVED_TEMPORARILY, defaultModuleEndpoint));
166
- app.post("/", (_req, res) => res.redirect(StatusCodes3.TEMPORARY_REDIRECT, defaultModuleEndpoint));
167
- app.get("/:address", getAddress);
168
- app.post("/:address", postAddress);
169
- app.get("/:hash", (_req, res) => {
170
- res.sendStatus(StatusCodes3.NOT_FOUND);
171
- });
172
- app.post("/:hash", (_req, res) => {
173
- res.sendStatus(StatusCodes3.NOT_FOUND);
174
- });
175
- }, "addNodeRoutes");
176
-
177
28
  // src/server/routes/dataLake/archivistMiddleware.ts
178
29
  import { setRawResponseFormat } from "@xylabs/express";
179
- import { asHash, isDefined as isDefined2 } from "@xylabs/sdk-js";
30
+ import { asHash, isDefined } from "@xylabs/sdk-js";
180
31
  import { asArchivistInstance } from "@xyo-network/archivist-model";
181
32
  import { PayloadBuilder } from "@xyo-network/payload-builder";
182
33
  import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
@@ -189,7 +40,7 @@ var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdenti
189
40
  }, "resolveArchivist");
190
41
  var archivistInstance;
191
42
  var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
192
- if (isDefined2(archivistInstance)) return archivistInstance;
43
+ if (isDefined(archivistInstance)) return archivistInstance;
193
44
  archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
194
45
  return archivistInstance;
195
46
  }, "getArchivist");
@@ -211,8 +62,8 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
211
62
  router.get("/next", async (req, res) => {
212
63
  setRawResponseFormat(res);
213
64
  const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
214
- const limit = isDefined2(req.query.limit) ? Number(req.query.limit) : void 0;
215
- const open = isDefined2(req.query.open) ? Boolean(req.query.open) : void 0;
65
+ const limit = isDefined(req.query.limit) ? Number(req.query.limit) : void 0;
66
+ const open = isDefined(req.query.open) ? Boolean(req.query.open) : void 0;
216
67
  const order = req.query.order === "asc" ? "asc" : "desc";
217
68
  const options2 = {
218
69
  limit,
@@ -228,14 +79,14 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
228
79
  setRawResponseFormat(res);
229
80
  const options2 = req.body;
230
81
  const archivist = await getArchivist(node, archivistModuleIdentifier);
231
- const result = await (isDefined2(options2) ? archivist.next(options2) : archivist.next());
82
+ const result = await (isDefined(options2) ? archivist.next(options2) : archivist.next());
232
83
  res.status(200).json(result);
233
84
  });
234
85
  router.get("/get/:hash", async (req, res) => {
235
86
  setRawResponseFormat(res);
236
87
  const { hash: rawHash } = req.params;
237
88
  const hash = asHash(rawHash);
238
- if (isDefined2(hash)) {
89
+ if (isDefined(hash)) {
239
90
  const archivist = await getArchivist(node, archivistModuleIdentifier);
240
91
  const [payload] = await archivist.get([
241
92
  hash
@@ -280,7 +131,6 @@ var addRpcRoutes = /* @__PURE__ */ __name(async (app) => {
280
131
  var addRoutes = /* @__PURE__ */ __name(async (app) => {
281
132
  await addRpcRoutes(app);
282
133
  addDataLakeRoutes(app);
283
- addNodeRoutes(app);
284
134
  }, "addRoutes");
285
135
 
286
136
  // src/server/app.ts
@@ -304,126 +154,13 @@ var getApp = /* @__PURE__ */ __name(async (context) => {
304
154
  return app;
305
155
  }, "getApp");
306
156
 
307
- // src/server/initApiParams.ts
308
- import { assertEx as assertEx2 } from "@xylabs/sdk-js";
309
- import { buildTelemetryConfig, initApiWallet, initBalanceSummaryMap, initEvmProvidersIfAvailable, initFinalizationArchivistIfNeeded, initHealthEndpoints, initServerNode, initStatusReporter, initTransferSummaryMap, MempoolActor, ValidatorActor } from "@xyo-network/chain-orchestration";
310
- import { initTelemetry } from "@xyo-network/chain-telemetry";
311
- import { startupSpanAsync } from "@xyo-network/chain-utils";
312
- import { validateHydratedBlock, validateHydratedBlockState } from "@xyo-network/chain-validation";
313
- import { AccountBalanceViewerMoniker, BlockViewerMoniker, buildLocalProviderLocator, DefaultMetricsScrapePorts, MempoolRunnerMoniker, MempoolViewerMoniker, SimpleBlockValidationViewer, SimpleXyoConnection, XyoViewerMoniker } from "@xyo-network/xl1-sdk";
314
- async function initApiParams(params) {
315
- const { config, node: providedNode } = params;
316
- const logger = assertEx2(params.logger, () => "Logger is required to init server");
317
- const statusReporter = initStatusReporter({
318
- logger
319
- });
320
- await startupSpanAsync("initHealthEndpoints", () => initHealthEndpoints({
321
- config,
322
- logger,
323
- statusReporter
324
- }));
325
- const telemetryConfig = buildTelemetryConfig(config, "xl1-api", "1.0.0", DefaultMetricsScrapePorts.api);
326
- const { traceProvider, meterProvider } = await startupSpanAsync("initTelemetry", () => initTelemetry(telemetryConfig));
327
- const initContext = {
328
- _id: "init-context",
329
- config,
330
- logger,
331
- statusReporter,
332
- timeBudgetLimit: 1e3,
333
- meterProvider,
334
- traceProvider,
335
- singletons: {},
336
- caches: {}
337
- };
338
- const wallet = await initApiWallet(initContext);
339
- const balancesSummaryMap = assertEx2(await initBalanceSummaryMap(initContext), () => "Balance Summary Map not initialized");
340
- const transfersSummaryMap = assertEx2(await initTransferSummaryMap(initContext), () => "Transfer Summary Map not initialized");
341
- const { node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist } = await initServerNode({
342
- ...initContext,
343
- wallet,
344
- node: providedNode,
345
- transfersSummaryMap,
346
- balancesSummaryMap
347
- });
348
- await writableChainArchivist.start();
349
- await readonlyChainArchivist.start();
350
- await pendingTransactionsArchivist.start();
351
- await pendingBlocksArchivist.start();
352
- const [head, chainId] = await initFinalizationArchivistIfNeeded(writableChainArchivist, config, wallet);
353
- assertEx2(head.chain === chainId, () => `Chain ID does not match head block chain ID [init] [${head.chain} !== ${chainId}]`);
354
- const mods = await node.resolve("*");
355
- await Promise.all(mods.map((mod) => {
356
- return mod.start?.() ?? (() => true);
357
- }));
358
- const locator = buildLocalProviderLocator({
359
- context: initContext,
360
- finalizedArchivist: writableChainArchivist,
361
- pendingTransactionsArchivist,
362
- pendingBlocksArchivist,
363
- balancesSummaryMap,
364
- transfersSummaryMap,
365
- node
366
- });
367
- await initEvmProvidersIfAvailable(locator);
368
- locator.register(SimpleBlockValidationViewer.factory(SimpleBlockValidationViewer.dependencies, {
369
- state: validateHydratedBlockState,
370
- protocol: validateHydratedBlock
371
- }));
372
- locator.register(SimpleXyoConnection.factory(SimpleXyoConnection.dependencies, {}));
373
- const apiContext = {
374
- ...initContext,
375
- ...locator.context,
376
- _id: "api-context",
377
- node
378
- };
379
- const blockViewer = await locator.getInstance(BlockViewerMoniker);
380
- assertEx2(await blockViewer.start(), () => "Failed to start BlockViewer");
381
- const blk = await blockViewer.currentBlock();
382
- assertEx2(blk, () => "No blocks found after initialization");
383
- const accountBalanceViewer = await locator.getInstance(AccountBalanceViewerMoniker);
384
- assertEx2(await accountBalanceViewer.start(), () => "Failed to start AccountBalanceViewer");
385
- const xyoViewer = await locator.getInstance(XyoViewerMoniker);
386
- assertEx2(await xyoViewer.start(), () => "Failed to start XyoViewer");
387
- const mempoolViewer = await locator.getInstance(MempoolViewerMoniker);
388
- assertEx2(await mempoolViewer.start(), () => "Failed to start MempoolViewer");
389
- const mempoolRunner = await locator.getInstance(MempoolRunnerMoniker);
390
- assertEx2(await mempoolRunner.start(), () => "Failed to start MempoolRunner");
391
- console.info(`[API] Current block after initialization: #${blk[0].block} (${blk[0]._hash})`);
392
- const validatorActor = config.actors.mempool.enabled ? void 0 : await ValidatorActor.create({
393
- id: "validator-mempool-server",
394
- account: wallet,
395
- context: locator.context,
396
- finalizedArchivist: writableChainArchivist,
397
- mempoolViewer,
398
- blockViewer
399
- });
400
- await validatorActor?.start();
401
- const mempoolActor = config.actors.mempool.enabled ? void 0 : await MempoolActor.create({
402
- id: "mempool-mempool-server",
403
- account: wallet,
404
- context: locator.context,
405
- mempoolRunner,
406
- pendingBlocksArchivist,
407
- pendingTransactionsArchivist
408
- });
409
- await mempoolActor?.start();
410
- return {
411
- id: "api-actor",
412
- account: wallet,
413
- context: apiContext,
414
- transfersSummaryMap,
415
- balancesSummaryMap
416
- };
417
- }
418
- __name(initApiParams, "initApiParams");
419
-
420
157
  // src/server/server.ts
421
158
  var hostname = "::";
422
159
  async function getServer(context) {
423
160
  const { logger } = context;
424
161
  const { port } = context.config.actors.api;
425
162
  const app = await getApp(context);
426
- const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`));
163
+ const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`));
427
164
  server.setTimeout(2e4);
428
165
  return server;
429
166
  }
@@ -437,34 +174,11 @@ function _ts_decorate(decorators, target, key, desc) {
437
174
  return c > 3 && r && Object.defineProperty(target, key, r), r;
438
175
  }
439
176
  __name(_ts_decorate, "_ts_decorate");
440
- var ApiActor = class extends Actor {
177
+ var ApiActor = class extends ActorV3 {
441
178
  static {
442
179
  __name(this, "ApiActor");
443
180
  }
444
181
  server;
445
- get context() {
446
- return this.params.context;
447
- }
448
- static defaultFactories() {
449
- return [
450
- ...super.defaultFactories()
451
- ];
452
- }
453
- static async paramsHandler(params) {
454
- const logger = params?.context?.logger;
455
- let account = params?.account;
456
- if (account === void 0) {
457
- const newAccount = await Account.random();
458
- logger?.warn(`No account provided to ApiActor, generating random account ${newAccount.address}`);
459
- account = newAccount;
460
- }
461
- logger?.info(`Running api for account ${account.address}`);
462
- return {
463
- ...await super.paramsHandler(params),
464
- context: params.context,
465
- account: assertEx3(account, () => "ApiActor requires an account to run")
466
- };
467
- }
468
182
  async createHandler() {
469
183
  await super.createHandler();
470
184
  }
@@ -490,17 +204,18 @@ ApiActor = _ts_decorate([
490
204
  ], ApiActor);
491
205
 
492
206
  // src/runApi.ts
493
- import { exists, IdLogger } from "@xylabs/sdk-js";
494
- import { Account as Account2 } from "@xyo-network/account";
495
- var runApi = /* @__PURE__ */ __name(async ({ config, orchestrator, ...params }) => {
496
- const logger = new IdLogger(params.logger ?? console, () => "API");
497
- const account = await Account2.random();
498
- logger.info(`Running api for account ${account.address} [random]`);
499
- const actorParams = await initApiParams({
207
+ import { exists } from "@xylabs/sdk-js";
208
+ import { initApiWallet } from "@xyo-network/chain-orchestration";
209
+ var runApi = /* @__PURE__ */ __name(async (config, orchestrator, locator) => {
210
+ const account = await initApiWallet({
211
+ config,
212
+ logger: locator.context.logger
213
+ });
214
+ const api = await ApiActor.create({
215
+ account,
500
216
  config,
501
- logger
217
+ locator
502
218
  });
503
- const api = await ApiActor.create(actorParams);
504
219
  const actors = [
505
220
  api
506
221
  ].filter(exists);
@@ -513,7 +228,6 @@ export {
513
228
  ApiActor,
514
229
  getApp,
515
230
  getServer,
516
- initApiParams,
517
231
  runApi
518
232
  };
519
233
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ApiActor.ts","../../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/initApiParams.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { assertEx, creatable } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n Actor, ActorParams, BalancesStepSummary, CreatableProviderFactory,\n MapType,\n TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\n\nimport { ApiContext } from './ApiContext.ts'\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParams<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n context: ApiContext\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n}>\n\n@creatable()\nexport class ApiActor extends Actor<ApiActorParams> {\n private server?: Server\n\n protected override get context() {\n return this.params.context!\n }\n\n static override defaultFactories(): CreatableProviderFactory[] {\n return [\n ...super.defaultFactories(),\n ]\n }\n\n static override async paramsHandler<T extends ApiActor>(params: T['params']) {\n const logger = params?.context?.logger\n\n let account = params?.account\n if (account === undefined) {\n const newAccount = await Account.random()\n logger?.warn(`No account provided to ApiActor, generating random account ${newAccount.address}`)\n account = newAccount\n }\n logger?.info(`Running api for account ${account.address}`)\n\n return {\n ...await super.paramsHandler(params),\n context: params.context,\n account: assertEx(account, () => 'ApiActor requires an account to run'),\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(this.context)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport type { ApiContext } from '../ApiContext.ts'\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (context: ApiContext): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.context = context\n await addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import 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.context.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 { asyncHandler } from '@xylabs/express'\nimport { asAddress, isDefined } from '@xylabs/sdk-js'\nimport { isModuleName } 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: moduleIdentifier } = req.params\n const { node } = req.app.context\n const address = asAddress(moduleIdentifier)\n if (isDefined(address)) {\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 (isModuleName(moduleIdentifier)) {\n const mod = await node.resolve(moduleIdentifier, { direction: 'down' })\n if (mod) {\n res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${mod.address}`)\n return\n }\n }\n next('route')\n}\nexport const getAddress = asyncHandler(handler)\n","import { asyncHandler } from '@xylabs/express'\nimport type { JsonObject } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx,\n isAddress,\n toAddress,\n} from '@xylabs/sdk-js'\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.context\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, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app.context\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcEngineFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n const engine = rpcEngineFromConnection(connection)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { Express } from 'express'\n\nimport { addNodeRoutes } from './address/index.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n await addRpcRoutes(app)\n addDataLakeRoutes(app)\n addNodeRoutes(app)\n}\n","/* eslint-disable max-statements */\nimport type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { MempoolActorParams, ValidatorActorParams } from '@xyo-network/chain-orchestration'\nimport {\n buildTelemetryConfig, initApiWallet, initBalanceSummaryMap, initEvmProvidersIfAvailable,\n initFinalizationArchivistIfNeeded, initHealthEndpoints, initServerNode,\n initStatusReporter, initTransferSummaryMap, MempoolActor, ValidatorActor,\n} from '@xyo-network/chain-orchestration'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { validateHydratedBlock, validateHydratedBlockState } from '@xyo-network/chain-validation'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n AccountBalanceViewer, BlockViewer, Config,\n MempoolRunner,\n MempoolViewer,\n XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n AccountBalanceViewerMoniker, BlockViewerMoniker, buildLocalProviderLocator, DefaultMetricsScrapePorts,\n MempoolRunnerMoniker, MempoolViewerMoniker, SimpleBlockValidationViewer, SimpleXyoConnection,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ApiActorParams } from '../ApiActor.ts'\nimport type { ApiContext } from '../ApiContext.ts'\n\ninterface InitServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport async function initApiParams(params: InitServerContext): Promise<ApiActorParams> {\n const { config, node: providedNode } = params\n\n const logger = assertEx(params.logger, () => 'Logger is required to init server')\n\n const statusReporter = initStatusReporter({ logger })\n\n await startupSpanAsync('initHealthEndpoints', () => initHealthEndpoints({\n config, logger, statusReporter,\n }))\n\n const telemetryConfig = buildTelemetryConfig(config, 'xl1-api', '1.0.0', DefaultMetricsScrapePorts.api)\n\n const { traceProvider, meterProvider } = await startupSpanAsync('initTelemetry', () => initTelemetry(telemetryConfig))\n\n const initContext = {\n _id: 'init-context',\n config,\n logger,\n statusReporter,\n timeBudgetLimit: 1000,\n meterProvider,\n traceProvider,\n singletons: {},\n caches: {},\n }\n\n const wallet = await initApiWallet(initContext)\n\n const balancesSummaryMap = assertEx(await initBalanceSummaryMap(initContext), () => 'Balance Summary Map not initialized')\n const transfersSummaryMap = assertEx(await initTransferSummaryMap(initContext), () => 'Transfer Summary Map not initialized')\n\n const {\n node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n } = await initServerNode({\n ...initContext,\n wallet,\n node: providedNode,\n transfersSummaryMap,\n balancesSummaryMap,\n })\n\n await writableChainArchivist.start()\n await readonlyChainArchivist.start()\n await pendingTransactionsArchivist.start()\n await pendingBlocksArchivist.start()\n\n const [head, chainId] = await initFinalizationArchivistIfNeeded(writableChainArchivist, config, wallet)\n\n assertEx(head.chain === chainId, () => `Chain ID does not match head block chain ID [init] [${head.chain} !== ${chainId}]`)\n\n const mods = await node.resolve('*')\n await Promise.all(mods.map((mod) => {\n return mod.start?.() ?? (() => true)\n }))\n\n const locator = buildLocalProviderLocator({\n context: initContext,\n finalizedArchivist: writableChainArchivist,\n pendingTransactionsArchivist,\n pendingBlocksArchivist,\n balancesSummaryMap,\n transfersSummaryMap,\n node,\n })\n\n await initEvmProvidersIfAvailable(locator)\n\n locator.register(SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(\n SimpleBlockValidationViewer.dependencies,\n { state: validateHydratedBlockState, protocol: validateHydratedBlock },\n ))\n\n locator.register(SimpleXyoConnection.factory<SimpleXyoConnection>(SimpleXyoConnection.dependencies, {}))\n\n const apiContext = {\n ...initContext,\n ...locator.context,\n _id: 'api-context',\n node,\n } satisfies ApiContext\n\n const blockViewer = (await locator.getInstance<BlockViewer>(BlockViewerMoniker))\n assertEx(await blockViewer.start(), () => 'Failed to start BlockViewer')\n\n const blk = await blockViewer.currentBlock()\n assertEx(blk, () => 'No blocks found after initialization')\n\n const accountBalanceViewer = (await locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker))\n assertEx(await accountBalanceViewer.start(), () => 'Failed to start AccountBalanceViewer')\n\n const xyoViewer = (await locator.getInstance<XyoViewer>(XyoViewerMoniker))\n assertEx(await xyoViewer.start(), () => 'Failed to start XyoViewer')\n\n const mempoolViewer = (await locator.getInstance<MempoolViewer>(MempoolViewerMoniker))\n assertEx(await mempoolViewer.start(), () => 'Failed to start MempoolViewer')\n\n const mempoolRunner = (await locator.getInstance<MempoolRunner>(MempoolRunnerMoniker))\n assertEx(await mempoolRunner.start(), () => 'Failed to start MempoolRunner')\n\n console.info(`[API] Current block after initialization: #${blk[0].block} (${blk[0]._hash})`)\n\n const validatorActor = config.actors.mempool.enabled\n ? undefined\n : await ValidatorActor.create({\n id: 'validator-mempool-server',\n account: wallet,\n context: locator.context,\n finalizedArchivist: writableChainArchivist,\n mempoolViewer,\n blockViewer,\n } satisfies ValidatorActorParams)\n\n await validatorActor?.start()\n\n const mempoolActor = config.actors.mempool.enabled\n ? undefined\n : await MempoolActor.create({\n id: 'mempool-mempool-server',\n account: wallet,\n context: locator.context,\n mempoolRunner,\n pendingBlocksArchivist,\n pendingTransactionsArchivist,\n } satisfies MempoolActorParams)\n\n await mempoolActor?.start()\n\n return {\n id: 'api-actor',\n account: wallet,\n context: apiContext,\n transfersSummaryMap,\n balancesSummaryMap,\n }\n}\n","import type { ApiContext } from '../ApiContext.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n\nexport async function getServer(context: ApiContext) {\n const { logger } = context\n const { port } = context.config.actors.api\n\n const app = await getApp(context)\n const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { exists, IdLogger } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport { type OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport { type BaseContext, type Config } from '@xyo-network/xl1-sdk'\n\nimport { ApiActor } from './ApiActor.ts'\nimport { initApiParams } from './server/index.ts'\n\nexport interface RunApiContext extends BaseContext {\n config: Config\n orchestrator: OrchestratorInstance\n}\n\nexport const runApi = async ({\n config, orchestrator, ...params\n}: RunApiContext) => {\n const logger = new IdLogger(params.logger ?? console, () => 'API')\n const account = await Account.random()\n logger.info(`Running api for account ${account.address} [random]`)\n\n const actorParams = await initApiParams({ config, logger })\n\n // Create actors\n const api = await ApiActor.create(actorParams)\n const actors = [api].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n"],"mappings":"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","names":["assertEx","creatable","Account","Actor","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","StatusCodes","asyncHandler","asAddress","isDefined","isModuleName","StatusCodes","handler","req","res","next","address","moduleIdentifier","params","node","app","context","asAddress","isDefined","mod","resolve","direction","json","state","isModuleName","redirect","StatusCodes","MOVED_TEMPORARILY","getAddress","asyncHandler","asyncHandler","asAddress","assertEx","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","context","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","context","node","address","defaultModuleEndpoint","get","_req","res","redirect","StatusCodes","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","getAddress","postAddress","sendStatus","NOT_FOUND","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","context","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","rpcEngineFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","addNodeRoutes","getApp","context","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","buildTelemetryConfig","initApiWallet","initBalanceSummaryMap","initEvmProvidersIfAvailable","initFinalizationArchivistIfNeeded","initHealthEndpoints","initServerNode","initStatusReporter","initTransferSummaryMap","MempoolActor","ValidatorActor","initTelemetry","startupSpanAsync","validateHydratedBlock","validateHydratedBlockState","AccountBalanceViewerMoniker","BlockViewerMoniker","buildLocalProviderLocator","DefaultMetricsScrapePorts","MempoolRunnerMoniker","MempoolViewerMoniker","SimpleBlockValidationViewer","SimpleXyoConnection","XyoViewerMoniker","initApiParams","params","config","node","providedNode","logger","assertEx","statusReporter","initStatusReporter","startupSpanAsync","initHealthEndpoints","telemetryConfig","buildTelemetryConfig","DefaultMetricsScrapePorts","api","traceProvider","meterProvider","initTelemetry","initContext","_id","timeBudgetLimit","singletons","caches","wallet","initApiWallet","balancesSummaryMap","initBalanceSummaryMap","transfersSummaryMap","initTransferSummaryMap","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","initServerNode","start","head","chainId","initFinalizationArchivistIfNeeded","chain","mods","resolve","Promise","all","map","mod","locator","buildLocalProviderLocator","context","finalizedArchivist","initEvmProvidersIfAvailable","register","SimpleBlockValidationViewer","factory","dependencies","state","validateHydratedBlockState","protocol","validateHydratedBlock","SimpleXyoConnection","apiContext","blockViewer","getInstance","BlockViewerMoniker","blk","currentBlock","accountBalanceViewer","AccountBalanceViewerMoniker","xyoViewer","XyoViewerMoniker","mempoolViewer","MempoolViewerMoniker","mempoolRunner","MempoolRunnerMoniker","console","info","block","_hash","validatorActor","actors","mempool","enabled","undefined","ValidatorActor","create","id","account","mempoolActor","MempoolActor","hostname","getServer","context","logger","port","config","actors","api","app","getApp","server","listen","log","setTimeout","ApiActor","Actor","server","context","params","defaultFactories","paramsHandler","logger","account","undefined","newAccount","Account","random","warn","address","info","assertEx","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","close","exists","IdLogger","Account","runApi","config","orchestrator","params","logger","IdLogger","console","account","Account","random","info","address","actorParams","initApiParams","api","ApiActor","create","actors","filter","exists","actor","registerActor","start"]}
1
+ {"version":3,"sources":["../../src/ApiActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rpc/routes/addRpcRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/runApi.ts"],"sourcesContent":["import { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport {\n ActorParamsV3, ActorV3, Config,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type ApiActorParams = ActorParamsV3<{\n config: Config\n}>\n\n@creatable()\nexport class ApiActor extends ActorV3<ApiActorParams> {\n private server?: Server\n\n override async createHandler() {\n await super.createHandler()\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(this.context)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import {\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n getJsonBodyParser,\n getJsonBodyParserOptions,\n responseProfiler,\n standardErrors,\n standardResponses,\n} from '@xylabs/express'\nimport type { CreatableProviderContext } from '@xyo-network/xl1-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = async (context: CreatableProviderContext): Promise<Express> => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.context = context\n await addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app.context\n const archivistModuleIdentifier = 'Chain:Finalized'\n app.use('/chain', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport type { XyoConnection } from '@xyo-network/xl1-sdk'\nimport { rpcEngineFromConnection, XyoConnectionMoniker } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nexport const addRpcRoutes = async (\n app: Express,\n) => {\n const { context } = app\n const { locator } = context\n\n const connection = await locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n const engine = rpcEngineFromConnection(connection)\n\n app.post('/rpc', (req, res) => {\n setRawResponseFormat(res)\n engine.handle(req.body, (_, rpcResponse) => {\n res.json(rpcResponse)\n })\n })\n}\n","import type { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRpcRoutes } from './rpc/index.ts'\n\nexport const addRoutes = async (\n app: Express,\n) => {\n await addRpcRoutes(app)\n addDataLakeRoutes(app)\n}\n","import type { CreatableProviderContext } from '@xyo-network/xl1-sdk'\n\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n\nexport async function getServer(context: CreatableProviderContext) {\n const { logger } = context\n const { port } = context.config.actors.api\n\n const app = await getApp(context)\n const server = app.listen(port, hostname, () => logger?.info(`[API] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { exists } from '@xylabs/sdk-js'\nimport { initApiWallet, type OrchestratorInstance } from '@xyo-network/chain-orchestration'\nimport type {\n Config,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport { ApiActor } from './ApiActor.ts'\n\nexport const runApi = async (\n config: Config,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) => {\n const account = await initApiWallet({ config, logger: locator.context.logger })\n // Create actors\n const api = await ApiActor.create({\n account, config, locator,\n })\n const actors = [api].filter(exists)\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n"],"mappings":"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","names":["creatable","ActorV3","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","context","archivistModuleIdentifier","use","archivistMiddleware","setRawResponseFormat","rpcEngineFromConnection","XyoConnectionMoniker","addRpcRoutes","app","context","locator","connection","getInstance","XyoConnectionMoniker","engine","rpcEngineFromConnection","post","req","res","setRawResponseFormat","handle","body","_","rpcResponse","json","addRoutes","app","addRpcRoutes","addDataLakeRoutes","getApp","context","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","hostname","getServer","context","logger","port","config","actors","api","app","getApp","server","listen","info","setTimeout","ApiActor","ActorV3","server","createHandler","startHandler","stopServer","startServer","stopHandler","getServer","context","close","undefined","exists","initApiWallet","runApi","config","orchestrator","locator","account","initApiWallet","logger","context","api","ApiActor","create","actors","filter","exists","actor","registerActor","start"]}
@@ -1,8 +1,4 @@
1
1
  import { type OrchestratorInstance } from '@xyo-network/chain-orchestration';
2
- import { type BaseContext, type Config } from '@xyo-network/xl1-sdk';
3
- export interface RunApiContext extends BaseContext {
4
- config: Config;
5
- orchestrator: OrchestratorInstance;
6
- }
7
- export declare const runApi: ({ config, orchestrator, ...params }: RunApiContext) => Promise<void>;
2
+ import type { Config, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
+ export declare const runApi: (config: Config, orchestrator: OrchestratorInstance, locator: ProviderFactoryLocatorInstance) => Promise<void>;
8
4
  //# sourceMappingURL=runApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runApi.d.ts","sourceRoot":"","sources":["../../src/runApi.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAKpE,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,oBAAoB,CAAA;CACnC;AAED,eAAO,MAAM,MAAM,GAAU,qCAE1B,aAAa,kBAiBf,CAAA"}
1
+ {"version":3,"file":"runApi.d.ts","sourceRoot":"","sources":["../../src/runApi.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,OAAO,KAAK,EACV,MAAM,EACN,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAI7B,eAAO,MAAM,MAAM,GACjB,QAAQ,MAAM,EACd,cAAc,oBAAoB,EAClC,SAAS,8BAA8B,kBAexC,CAAA"}
@@ -1,4 +1,4 @@
1
+ import type { CreatableProviderContext } from '@xyo-network/xl1-sdk';
1
2
  import type { Express } from 'express';
2
- import type { ApiContext } from '../ApiContext.ts';
3
- export declare const getApp: (context: ApiContext) => Promise<Express>;
3
+ export declare const getApp: (context: CreatableProviderContext) => Promise<Express>;
4
4
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAIlD,eAAO,MAAM,MAAM,GAAU,SAAS,UAAU,KAAG,OAAO,CAAC,OAAO,CAiBjE,CAAA"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GAAU,SAAS,wBAAwB,KAAG,OAAO,CAAC,OAAO,CAiB/E,CAAA"}
@@ -1,4 +1,3 @@
1
1
  export * from './app.ts';
2
- export * from './initApiParams.ts';
3
2
  export * from './server.ts';
4
3
  //# sourceMappingURL=index.d.ts.map