@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.
- package/dist/node/index.mjs +119 -155
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/server/routes/address/get/get.d.ts +1 -1
- package/dist/node/server/routes/address/get/get.d.ts.map +1 -1
- package/dist/node/server/routes/address/post/post.d.ts +1 -1
- package/dist/node/server/routes/address/post/post.d.ts.map +1 -1
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts.map +1 -1
- package/dist/node/server/routes/healthz/get.d.ts +1 -1
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -1
- package/package.json +62 -62
- package/src/server/routes/dataLake/archivistMiddleware.ts +9 -7
package/dist/node/index.mjs
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var
|
|
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 {
|
|
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 =
|
|
15
|
-
const instrumentations = [
|
|
16
|
-
|
|
17
|
-
|
|
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 =
|
|
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
|
-
}
|
|
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 {
|
|
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 =
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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 =
|
|
94
|
-
const returnError =
|
|
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
|
-
}
|
|
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
|
-
|
|
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
|
-
}
|
|
143
|
+
};
|
|
157
144
|
var postAddress = asyncHandler2(handler2);
|
|
158
145
|
|
|
159
146
|
// src/server/routes/address/addNodeRoutes.ts
|
|
160
|
-
var addNodeRoutes =
|
|
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
|
-
}
|
|
161
|
+
};
|
|
175
162
|
|
|
176
163
|
// src/server/routes/dataLake/archivistMiddleware.ts
|
|
177
164
|
import { setRawResponseFormat } from "@xylabs/express";
|
|
178
|
-
import { asHash
|
|
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 =
|
|
171
|
+
var resolveArchivist = async (node, archivistModuleIdentifier) => {
|
|
185
172
|
const mod = await node.resolve(archivistModuleIdentifier);
|
|
186
|
-
return asArchivistInstance(mod, {
|
|
187
|
-
|
|
188
|
-
});
|
|
189
|
-
}, "resolveArchivist");
|
|
173
|
+
return asArchivistInstance(mod, { required: true });
|
|
174
|
+
};
|
|
190
175
|
var archivistInstance;
|
|
191
|
-
var getArchivist =
|
|
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
|
-
}
|
|
196
|
-
var archivistMiddleware =
|
|
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 =
|
|
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
|
-
}
|
|
230
|
+
};
|
|
252
231
|
|
|
253
232
|
// src/server/routes/dataLake/addDataLakeRoutes.ts
|
|
254
|
-
var addDataLakeRoutes =
|
|
233
|
+
var addDataLakeRoutes = (app) => {
|
|
255
234
|
const { node } = app;
|
|
256
235
|
const archivistModuleIdentifier = "Chain:Finalized";
|
|
257
|
-
app.use("/chain", archivistMiddleware({
|
|
258
|
-
|
|
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 {
|
|
267
|
-
|
|
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
|
-
}
|
|
259
|
+
};
|
|
283
260
|
|
|
284
261
|
// src/server/routes/addRoutes.ts
|
|
285
|
-
var addRoutes =
|
|
262
|
+
var addRoutes = (app) => {
|
|
286
263
|
addRpcRoutes(app);
|
|
287
264
|
addDataLakeRoutes(app);
|
|
288
265
|
addNodeRoutes(app);
|
|
289
|
-
}
|
|
266
|
+
};
|
|
290
267
|
|
|
291
268
|
// src/server/app.ts
|
|
292
|
-
var getApp =
|
|
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
|
-
}
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 =
|
|
356
|
+
MongoMap = __decorateClass([
|
|
398
357
|
creatable()
|
|
399
358
|
], MongoMap);
|
|
400
359
|
|
|
401
360
|
// src/manifest/getLocator.ts
|
|
402
|
-
var getLocator =
|
|
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 {
|
|
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
|
-
|
|
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
|
-
}
|
|
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 =
|
|
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
|
-
}
|
|
666
|
+
};
|
|
707
667
|
|
|
708
668
|
// src/server/server.ts
|
|
709
669
|
var hostname = "::";
|
|
710
|
-
var getSeedPhrase =
|
|
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
|
-
}
|
|
730
|
-
var getServer =
|
|
731
|
-
const {
|
|
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
|
-
}
|
|
709
|
+
};
|
|
746
710
|
export {
|
|
747
711
|
getApp,
|
|
748
712
|
getServer
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -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<
|
|
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,
|
|
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<
|
|
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,
|
|
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":"
|
|
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,
|
|
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.
|
|
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": "
|
|
50
|
-
"@opentelemetry/instrumentation-express": "
|
|
51
|
-
"@opentelemetry/instrumentation-http": "
|
|
52
|
-
"@xylabs/assert": "
|
|
53
|
-
"@xylabs/creatable": "
|
|
54
|
-
"@xylabs/express": "
|
|
55
|
-
"@xylabs/hex": "
|
|
56
|
-
"@xylabs/logger": "
|
|
57
|
-
"@xylabs/mongo": "
|
|
58
|
-
"@xylabs/typeof": "
|
|
59
|
-
"@xyo-network/archivist-memory": "
|
|
60
|
-
"@xyo-network/archivist-model": "
|
|
61
|
-
"@xyo-network/archivist-mongodb": "
|
|
62
|
-
"@xyo-network/archivist-view": "
|
|
63
|
-
"@xyo-network/bios": "
|
|
64
|
-
"@xyo-network/boundwitness-model": "
|
|
65
|
-
"@xyo-network/chain-modules": "
|
|
66
|
-
"@xyo-network/chain-protocol": "
|
|
67
|
-
"@xyo-network/chain-rpc": "
|
|
68
|
-
"@xyo-network/chain-telemetry": "
|
|
69
|
-
"@xyo-network/manifest-model": "
|
|
70
|
-
"@xyo-network/manifest-wrapper": "
|
|
71
|
-
"@xyo-network/module-abstract": "
|
|
72
|
-
"@xyo-network/module-factory-locator": "
|
|
73
|
-
"@xyo-network/module-model": "
|
|
74
|
-
"@xyo-network/node-model": "
|
|
75
|
-
"@xyo-network/payload-builder": "
|
|
76
|
-
"@xyo-network/payload-model": "
|
|
77
|
-
"@xyo-network/sentinel-memory": "
|
|
78
|
-
"@xyo-network/wallet": "
|
|
79
|
-
"@xyo-network/wallet-model": "
|
|
80
|
-
"@xyo-network/xl1-protocol-sdk": "
|
|
81
|
-
"@xyo-network/xl1-rpc": "
|
|
82
|
-
"compression": "
|
|
83
|
-
"cors": "
|
|
84
|
-
"express": "
|
|
85
|
-
"http-status-codes": "
|
|
86
|
-
"mongodb": "
|
|
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": "
|
|
90
|
-
"@types/cors": "
|
|
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": "
|
|
93
|
-
"@types/node": "
|
|
94
|
-
"@xylabs/base": "
|
|
95
|
-
"@xylabs/object": "
|
|
96
|
-
"@xylabs/ts-scripts-yarn3": "
|
|
97
|
-
"@xylabs/tsconfig": "
|
|
98
|
-
"@xyo-network/account": "
|
|
99
|
-
"@xyo-network/account-model": "
|
|
100
|
-
"@xyo-network/archivist-abstract": "
|
|
101
|
-
"@xyo-network/bios-model": "
|
|
102
|
-
"@xyo-network/boundwitness-builder": "
|
|
103
|
-
"@xyo-network/module-abstract-mongodb": "
|
|
104
|
-
"@xyo-network/module-model-mongodb": "
|
|
105
|
-
"@xyo-network/node-memory": "
|
|
106
|
-
"@xyo-network/xl1-protocol-sdk": "
|
|
107
|
-
"dotenv": "
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"typescript": "
|
|
111
|
-
"vitest": "
|
|
112
|
-
"vitest-mock-extended": "
|
|
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
|
|
2
|
+
import { asHash } from '@xylabs/hex'
|
|
3
3
|
import { isDefined } from '@xylabs/typeof'
|
|
4
|
-
import {
|
|
5
|
-
|
|
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 =
|
|
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:
|
|
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<{}, {},
|
|
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)
|