@xyo-network/chain-bridge 1.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +165 -0
- package/README.md +96 -0
- package/dist/node/driver/index.d.ts +2 -0
- package/dist/node/driver/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlockIteration/ChainHashIterationService.d.ts +24 -0
- package/dist/node/driver/indexer/ChainBlockIteration/ChainHashIterationService.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlockIteration/index.d.ts +2 -0
- package/dist/node/driver/indexer/ChainBlockIteration/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlocksObservable.d.ts +5 -0
- package/dist/node/driver/indexer/ChainBlocksObservable.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts +11 -0
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts.map +1 -0
- package/dist/node/driver/indexer/index.d.ts +2 -0
- package/dist/node/driver/indexer/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/spec/ChainBlocksObservable.spec.d.ts +2 -0
- package/dist/node/driver/indexer/spec/ChainBlocksObservable.spec.d.ts.map +1 -0
- package/dist/node/driver/indexer/spec/ChainHydratedBlocksObservable.spec.d.ts +2 -0
- package/dist/node/driver/indexer/spec/ChainHydratedBlocksObservable.spec.d.ts.map +1 -0
- package/dist/node/driver/mongo/MongoMap.d.ts +17 -0
- package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -0
- package/dist/node/driver/mongo/index.d.ts +2 -0
- package/dist/node/driver/mongo/index.d.ts.map +1 -0
- package/dist/node/driver/mongo/spec/MongoMap.spec.d.ts +2 -0
- package/dist/node/driver/mongo/spec/MongoMap.spec.d.ts.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.mjs +751 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/interface/index.d.ts +5 -0
- package/dist/node/interface/index.d.ts.map +1 -0
- package/dist/node/interface/interface/ChainBridgeRelayInterface.d.ts +9 -0
- package/dist/node/interface/interface/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts +6 -0
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/LockingProcessorInterface.d.ts +9 -0
- package/dist/node/interface/interface/LockingProcessorInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/ObservationIndexerInterface.d.ts +7 -0
- package/dist/node/interface/interface/ObservationIndexerInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/Params.d.ts +26 -0
- package/dist/node/interface/interface/Params.d.ts.map +1 -0
- package/dist/node/interface/interface/RelayInterface.d.ts +8 -0
- package/dist/node/interface/interface/RelayInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/index.d.ts +7 -0
- package/dist/node/interface/interface/index.d.ts.map +1 -0
- package/dist/node/interface/repository/RepositoryInterface.d.ts +22 -0
- package/dist/node/interface/repository/RepositoryInterface.d.ts.map +1 -0
- package/dist/node/interface/repository/index.d.ts +2 -0
- package/dist/node/interface/repository/index.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts +9 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts +31 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts +2 -0
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts +2 -0
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/Observer.d.ts +15 -0
- package/dist/node/interface/service/Observer/Observer.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/index.d.ts.map +1 -0
- package/dist/node/interface/service/index.d.ts +3 -0
- package/dist/node/interface/service/index.d.ts.map +1 -0
- package/dist/node/interface/util/getBridgeIntentIdentifier.d.ts +5 -0
- package/dist/node/interface/util/getBridgeIntentIdentifier.d.ts.map +1 -0
- package/dist/node/interface/util/index.d.ts +2 -0
- package/dist/node/interface/util/index.d.ts.map +1 -0
- package/dist/node/manifest/getLocator.d.ts +14 -0
- package/dist/node/manifest/getLocator.d.ts.map +1 -0
- package/dist/node/manifest/getNode.d.ts +15 -0
- package/dist/node/manifest/getNode.d.ts.map +1 -0
- package/dist/node/manifest/index.d.ts +6 -0
- package/dist/node/manifest/index.d.ts.map +1 -0
- package/dist/node/manifest/nodeManifest.d.ts +6 -0
- package/dist/node/manifest/nodeManifest.d.ts.map +1 -0
- package/dist/node/manifest/private/index.d.ts +5 -0
- package/dist/node/manifest/private/index.d.ts.map +1 -0
- package/dist/node/manifest/public/index.d.ts +14 -0
- package/dist/node/manifest/public/index.d.ts.map +1 -0
- package/dist/node/manifest/public/spec/Node.spec.d.ts +2 -0
- package/dist/node/manifest/public/spec/Node.spec.d.ts.map +1 -0
- package/dist/node/server/app.d.ts +4 -0
- package/dist/node/server/app.d.ts.map +1 -0
- package/dist/node/server/index.d.ts +11 -0
- package/dist/node/server/index.d.ts.map +1 -0
- package/dist/node/server/instrumentation.d.ts +9 -0
- package/dist/node/server/instrumentation.d.ts.map +1 -0
- package/dist/node/server/routes/addRoutes.d.ts +3 -0
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts +4 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts.map +1 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts +3 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/get.d.ts +4 -0
- package/dist/node/server/routes/address/get/get.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/index.d.ts +2 -0
- package/dist/node/server/routes/address/get/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/index.d.ts +2 -0
- package/dist/node/server/routes/address/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts +6 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/index.d.ts +2 -0
- package/dist/node/server/routes/address/post/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/post.d.ts +8 -0
- package/dist/node/server/routes/address/post/post.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts +3 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts +10 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/index.d.ts +2 -0
- package/dist/node/server/routes/dataLake/index.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/get.d.ts +3 -0
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/index.d.ts +2 -0
- package/dist/node/server/routes/healthz/index.d.ts.map +1 -0
- package/dist/node/server/routes/index.d.ts +5 -0
- package/dist/node/server/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/index.d.ts +2 -0
- package/dist/node/server/routes/rpc/index.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +3 -0
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/routes/index.d.ts +2 -0
- package/dist/node/server/routes/rpc/routes/index.d.ts.map +1 -0
- package/dist/node/server/server.d.ts +11 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/package.json +125 -0
- package/src/driver/index.ts +1 -0
- package/src/driver/indexer/ChainBlockIteration/ChainHashIterationService.ts +87 -0
- package/src/driver/indexer/ChainBlockIteration/index.ts +1 -0
- package/src/driver/indexer/ChainBlocksObservable.ts +47 -0
- package/src/driver/indexer/ChainHydratedBlocksObservable.ts +23 -0
- package/src/driver/indexer/index.ts +1 -0
- package/src/driver/indexer/spec/ChainBlocksObservable.spec.ts +58 -0
- package/src/driver/indexer/spec/ChainHydratedBlocksObservable.spec.ts +58 -0
- package/src/driver/mongo/MongoMap.ts +62 -0
- package/src/driver/mongo/index.ts +1 -0
- package/src/driver/mongo/spec/MongoMap.spec.ts +67 -0
- package/src/index.ts +1 -0
- package/src/interface/index.ts +4 -0
- package/src/interface/interface/ChainBridgeRelayInterface.ts +9 -0
- package/src/interface/interface/IntentIndexerInterface.ts +7 -0
- package/src/interface/interface/LockingProcessorInterface.ts +10 -0
- package/src/interface/interface/ObservationIndexerInterface.ts +12 -0
- package/src/interface/interface/Params.ts +26 -0
- package/src/interface/interface/RelayInterface.ts +8 -0
- package/src/interface/interface/index.ts +6 -0
- package/src/interface/repository/RepositoryInterface.ts +28 -0
- package/src/interface/repository/index.ts +1 -0
- package/src/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.ts +11 -0
- package/src/interface/service/ChainBridgeRelay/ChainBridgeRelayService.ts +116 -0
- package/src/interface/service/ChainBridgeRelay/index.ts +1 -0
- package/src/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.ts +264 -0
- package/src/interface/service/Observer/Observer.ts +48 -0
- package/src/interface/service/Observer/index.ts +1 -0
- package/src/interface/service/index.ts +2 -0
- package/src/interface/util/getBridgeIntentIdentifier.ts +18 -0
- package/src/interface/util/index.ts +1 -0
- package/src/manifest/getLocator.ts +105 -0
- package/src/manifest/getNode.ts +32 -0
- package/src/manifest/index.ts +5 -0
- package/src/manifest/node.json +17 -0
- package/src/manifest/nodeManifest.ts +8 -0
- package/src/manifest/private/index.ts +4 -0
- package/src/manifest/public/Chain.json +138 -0
- package/src/manifest/public/Pending.json +35 -0
- package/src/manifest/public/index.ts +20 -0
- package/src/manifest/public/spec/Node.spec.ts +32 -0
- package/src/server/app.ts +37 -0
- package/src/server/index.ts +13 -0
- package/src/server/instrumentation.ts +15 -0
- package/src/server/routes/addRoutes.ts +11 -0
- package/src/server/routes/address/AddressPathParams.ts +3 -0
- package/src/server/routes/address/addNodeRoutes.ts +21 -0
- package/src/server/routes/address/get/get.ts +33 -0
- package/src/server/routes/address/get/index.ts +1 -0
- package/src/server/routes/address/index.ts +1 -0
- package/src/server/routes/address/post/getQueryConfig.ts +23 -0
- package/src/server/routes/address/post/index.ts +1 -0
- package/src/server/routes/address/post/post.ts +77 -0
- package/src/server/routes/dataLake/addDataLakeRoutes.ts +9 -0
- package/src/server/routes/dataLake/archivistMiddleware.ts +86 -0
- package/src/server/routes/dataLake/index.ts +1 -0
- package/src/server/routes/healthz/get.ts +20 -0
- package/src/server/routes/healthz/index.ts +1 -0
- package/src/server/routes/index.ts +5 -0
- package/src/server/routes/rpc/index.ts +1 -0
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +22 -0
- package/src/server/routes/rpc/routes/index.ts +1 -0
- package/src/server/server.ts +59 -0
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/server/app.ts
|
|
5
|
+
import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
|
|
6
|
+
import compression from "compression";
|
|
7
|
+
import cors from "cors";
|
|
8
|
+
import express2 from "express";
|
|
9
|
+
|
|
10
|
+
// src/server/instrumentation.ts
|
|
11
|
+
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
12
|
+
import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
|
|
13
|
+
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
|
|
14
|
+
var addInstrumentation = /* @__PURE__ */ __name(() => {
|
|
15
|
+
const instrumentations = [
|
|
16
|
+
new HttpInstrumentation(),
|
|
17
|
+
new ExpressInstrumentation()
|
|
18
|
+
];
|
|
19
|
+
registerInstrumentations({
|
|
20
|
+
instrumentations
|
|
21
|
+
});
|
|
22
|
+
}, "addInstrumentation");
|
|
23
|
+
|
|
24
|
+
// src/server/routes/address/addNodeRoutes.ts
|
|
25
|
+
import { StatusCodes as StatusCodes3 } from "http-status-codes";
|
|
26
|
+
|
|
27
|
+
// src/server/routes/address/get/get.ts
|
|
28
|
+
import { assertEx } from "@xylabs/assert";
|
|
29
|
+
import { asyncHandler } from "@xylabs/express";
|
|
30
|
+
import { asAddress, toAddress } from "@xylabs/hex";
|
|
31
|
+
import { isModuleIdentifierPart } from "@xyo-network/module-model";
|
|
32
|
+
import { StatusCodes } from "http-status-codes";
|
|
33
|
+
var handler = /* @__PURE__ */ __name(async (req, res, next) => {
|
|
34
|
+
const { address: rawAddress } = req.params;
|
|
35
|
+
const { node } = req.app;
|
|
36
|
+
const address = asAddress(rawAddress);
|
|
37
|
+
if (address !== void 0) {
|
|
38
|
+
let mod = node.address === address ? node : await node.resolve(address, {
|
|
39
|
+
direction: "down"
|
|
40
|
+
});
|
|
41
|
+
if (mod) {
|
|
42
|
+
res.json(await mod.state());
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (isModuleIdentifierPart(rawAddress)) {
|
|
47
|
+
const moduleIdentifier = toAddress(rawAddress);
|
|
48
|
+
const mod = await node.resolve(moduleIdentifier, {
|
|
49
|
+
direction: "down"
|
|
50
|
+
});
|
|
51
|
+
if (mod) {
|
|
52
|
+
const moduleAddress = assertEx(mod?.address, () => "Error redirecting to module by address");
|
|
53
|
+
res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${moduleAddress}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
next("route");
|
|
58
|
+
}, "handler");
|
|
59
|
+
var getAddress = asyncHandler(handler);
|
|
60
|
+
|
|
61
|
+
// src/server/routes/address/post/post.ts
|
|
62
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
63
|
+
import { asyncHandler as asyncHandler2 } from "@xylabs/express";
|
|
64
|
+
import { asAddress as asAddress2, isAddress, toAddress as toAddress2 } from "@xylabs/hex";
|
|
65
|
+
import { isQueryBoundWitness } from "@xyo-network/boundwitness-model";
|
|
66
|
+
import { ModuleErrorBuilder } from "@xyo-network/module-abstract";
|
|
67
|
+
import { StatusCodes as StatusCodes2 } from "http-status-codes";
|
|
68
|
+
|
|
69
|
+
// src/server/routes/address/post/getQueryConfig.ts
|
|
70
|
+
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
71
|
+
import { ModuleConfigSchema } from "@xyo-network/module-model";
|
|
72
|
+
var DEFAULT_DEPTH = 5;
|
|
73
|
+
var getQueryConfig = /* @__PURE__ */ __name((mod, req, bw, payloads) => {
|
|
74
|
+
const nestedBwAddresses = payloads?.flat(DEFAULT_DEPTH).filter((payload) => payload?.schema === BoundWitnessSchema).map((bw2) => bw2.addresses) || [];
|
|
75
|
+
const addresses = [
|
|
76
|
+
bw.addresses,
|
|
77
|
+
...nestedBwAddresses
|
|
78
|
+
].filter((address) => address.length > 0);
|
|
79
|
+
const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map((schema) => [
|
|
80
|
+
schema,
|
|
81
|
+
addresses
|
|
82
|
+
])) : {};
|
|
83
|
+
const security = {
|
|
84
|
+
allowed
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
schema: ModuleConfigSchema,
|
|
88
|
+
security
|
|
89
|
+
};
|
|
90
|
+
}, "getQueryConfig");
|
|
91
|
+
|
|
92
|
+
// src/server/routes/address/post/post.ts
|
|
93
|
+
var handler2 = /* @__PURE__ */ __name(async (req, res, next) => {
|
|
94
|
+
const returnError = /* @__PURE__ */ __name((code, message = "An error occurred", details) => {
|
|
95
|
+
const error = new ModuleErrorBuilder().message(message).details(details).build();
|
|
96
|
+
res.locals.rawResponse = false;
|
|
97
|
+
res.status(code).json(error);
|
|
98
|
+
next();
|
|
99
|
+
}, "returnError");
|
|
100
|
+
const { address } = req.params;
|
|
101
|
+
const { node } = req.app;
|
|
102
|
+
const [bw, payloads] = Array.isArray(req.body) ? req.body : [];
|
|
103
|
+
if (!isAddress(address)) {
|
|
104
|
+
return returnError(StatusCodes2.BAD_REQUEST, "Missing address");
|
|
105
|
+
}
|
|
106
|
+
if (!bw) {
|
|
107
|
+
return returnError(StatusCodes2.BAD_REQUEST, "Missing boundwitness");
|
|
108
|
+
}
|
|
109
|
+
if (!isQueryBoundWitness(bw)) {
|
|
110
|
+
return returnError(StatusCodes2.BAD_REQUEST, "Invalid query boundwitness");
|
|
111
|
+
}
|
|
112
|
+
let modules = [];
|
|
113
|
+
const normalizedAddress = toAddress2(address);
|
|
114
|
+
if (node.address === normalizedAddress) modules = [
|
|
115
|
+
node
|
|
116
|
+
];
|
|
117
|
+
else {
|
|
118
|
+
const typedAddress = asAddress2(address);
|
|
119
|
+
const byAddress = typedAddress === void 0 ? void 0 : await node.resolve(typedAddress, {
|
|
120
|
+
maxDepth: 10
|
|
121
|
+
});
|
|
122
|
+
if (byAddress) modules = [
|
|
123
|
+
byAddress
|
|
124
|
+
];
|
|
125
|
+
else {
|
|
126
|
+
const byName = await node.resolve(address, {
|
|
127
|
+
direction: "down"
|
|
128
|
+
});
|
|
129
|
+
if (byName) {
|
|
130
|
+
const moduleAddress = assertEx2(byName?.address, () => "Error redirecting to module by address");
|
|
131
|
+
res.redirect(StatusCodes2.TEMPORARY_REDIRECT, `/${moduleAddress}`);
|
|
132
|
+
return;
|
|
133
|
+
} else {
|
|
134
|
+
return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
|
|
135
|
+
address
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (modules.length > 0) {
|
|
141
|
+
const mod = modules[0];
|
|
142
|
+
const queryConfig = getQueryConfig(mod, req, bw, payloads);
|
|
143
|
+
try {
|
|
144
|
+
const queryResult = await mod.query(bw, payloads, queryConfig);
|
|
145
|
+
res.json(queryResult);
|
|
146
|
+
} catch (ex) {
|
|
147
|
+
return returnError(StatusCodes2.INTERNAL_SERVER_ERROR, "Query Failed", {
|
|
148
|
+
message: ex?.message ?? "Unknown Error"
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
return returnError(StatusCodes2.NOT_FOUND, "Module not found", {
|
|
153
|
+
address
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}, "handler");
|
|
157
|
+
var postAddress = asyncHandler2(handler2);
|
|
158
|
+
|
|
159
|
+
// src/server/routes/address/addNodeRoutes.ts
|
|
160
|
+
var addNodeRoutes = /* @__PURE__ */ __name((app) => {
|
|
161
|
+
const defaultModule = app.node;
|
|
162
|
+
const address = defaultModule.address;
|
|
163
|
+
const defaultModuleEndpoint = `/${address}`;
|
|
164
|
+
app.get("/", (_req, res) => res.redirect(StatusCodes3.MOVED_TEMPORARILY, defaultModuleEndpoint));
|
|
165
|
+
app.post("/", (_req, res) => res.redirect(StatusCodes3.TEMPORARY_REDIRECT, defaultModuleEndpoint));
|
|
166
|
+
app.get("/:address", getAddress);
|
|
167
|
+
app.post("/:address", postAddress);
|
|
168
|
+
app.get("/:hash", (_req, res) => {
|
|
169
|
+
res.sendStatus(StatusCodes3.NOT_FOUND);
|
|
170
|
+
});
|
|
171
|
+
app.post("/:hash", (_req, res) => {
|
|
172
|
+
res.sendStatus(StatusCodes3.NOT_FOUND);
|
|
173
|
+
});
|
|
174
|
+
}, "addNodeRoutes");
|
|
175
|
+
|
|
176
|
+
// src/server/routes/dataLake/archivistMiddleware.ts
|
|
177
|
+
import { setRawResponseFormat } from "@xylabs/express";
|
|
178
|
+
import { asHash } from "@xylabs/hex";
|
|
179
|
+
import { isDefined } from "@xylabs/typeof";
|
|
180
|
+
import { asArchivistInstance } from "@xyo-network/archivist-model";
|
|
181
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
182
|
+
import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
|
|
183
|
+
import express from "express";
|
|
184
|
+
var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
|
|
185
|
+
const mod = await node.resolve(archivistModuleIdentifier);
|
|
186
|
+
return asArchivistInstance(mod, {
|
|
187
|
+
required: true
|
|
188
|
+
});
|
|
189
|
+
}, "resolveArchivist");
|
|
190
|
+
var archivistInstance;
|
|
191
|
+
var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
|
|
192
|
+
if (isDefined(archivistInstance)) return archivistInstance;
|
|
193
|
+
archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
|
|
194
|
+
return archivistInstance;
|
|
195
|
+
}, "getArchivist");
|
|
196
|
+
var archivistMiddleware = /* @__PURE__ */ __name((options) => {
|
|
197
|
+
const { node, archivistModuleIdentifier } = options;
|
|
198
|
+
const router = express.Router({
|
|
199
|
+
mergeParams: true
|
|
200
|
+
});
|
|
201
|
+
router.post("/insert", async (req, res) => {
|
|
202
|
+
setRawResponseFormat(res);
|
|
203
|
+
const body = Array.isArray(req.body) ? req.body : [
|
|
204
|
+
req.body
|
|
205
|
+
];
|
|
206
|
+
const payloads = (await PayloadBuilder.hashPairs(body)).map((p) => p[0]);
|
|
207
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
208
|
+
const result = await archivist.insert(payloads);
|
|
209
|
+
res.status(200).json(result);
|
|
210
|
+
});
|
|
211
|
+
router.get("/next", async (req, res) => {
|
|
212
|
+
setRawResponseFormat(res);
|
|
213
|
+
const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
|
|
214
|
+
const limit = isDefined(req.query.limit) ? Number(req.query.limit) : void 0;
|
|
215
|
+
const open = isDefined(req.query.open) ? Boolean(req.query.open) : void 0;
|
|
216
|
+
const order = req.query.order === "asc" ? "asc" : "desc";
|
|
217
|
+
const options2 = {
|
|
218
|
+
limit,
|
|
219
|
+
open,
|
|
220
|
+
order,
|
|
221
|
+
cursor
|
|
222
|
+
};
|
|
223
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
224
|
+
const result = await archivist.next(options2);
|
|
225
|
+
res.status(200).json(result);
|
|
226
|
+
});
|
|
227
|
+
router.post("/next", async (req, res) => {
|
|
228
|
+
setRawResponseFormat(res);
|
|
229
|
+
const options2 = req.body;
|
|
230
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
231
|
+
const result = await (isDefined(options2) ? archivist.next(options2) : archivist.next());
|
|
232
|
+
res.status(200).json(result);
|
|
233
|
+
});
|
|
234
|
+
router.get("/get/:hash", async (req, res) => {
|
|
235
|
+
setRawResponseFormat(res);
|
|
236
|
+
const { hash: rawHash } = req.params;
|
|
237
|
+
const hash = asHash(rawHash);
|
|
238
|
+
if (isDefined(hash)) {
|
|
239
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
240
|
+
const [payload] = await archivist.get([
|
|
241
|
+
hash
|
|
242
|
+
]);
|
|
243
|
+
if (isAnyPayload(payload)) {
|
|
244
|
+
res.json(payload);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
res.status(400).send();
|
|
249
|
+
});
|
|
250
|
+
return router;
|
|
251
|
+
}, "archivistMiddleware");
|
|
252
|
+
|
|
253
|
+
// src/server/routes/dataLake/addDataLakeRoutes.ts
|
|
254
|
+
var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
255
|
+
const { node } = app;
|
|
256
|
+
const archivistModuleIdentifier = "Chain:Finalized";
|
|
257
|
+
app.use("/chain", archivistMiddleware({
|
|
258
|
+
node,
|
|
259
|
+
archivistModuleIdentifier
|
|
260
|
+
}));
|
|
261
|
+
}, "addDataLakeRoutes");
|
|
262
|
+
|
|
263
|
+
// src/server/routes/rpc/routes/addRpcRoutes.ts
|
|
264
|
+
import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
|
|
265
|
+
import { NodeXyoViewer } from "@xyo-network/chain-rpc";
|
|
266
|
+
import { NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection } from "@xyo-network/xl1-rpc";
|
|
267
|
+
var addRpcRoutes = /* @__PURE__ */ __name((app) => {
|
|
268
|
+
const { node } = app;
|
|
269
|
+
const runner = new NodeXyoRunner(node);
|
|
270
|
+
const viewer = new NodeXyoViewer(node);
|
|
271
|
+
const connection = new XyoBaseConnection({
|
|
272
|
+
runner,
|
|
273
|
+
viewer
|
|
274
|
+
});
|
|
275
|
+
const engine = rpcEngineFromConnection(connection);
|
|
276
|
+
app.post("/rpc", (req, res) => {
|
|
277
|
+
setRawResponseFormat2(res);
|
|
278
|
+
engine.handle(req.body, (_, rpcResponse) => {
|
|
279
|
+
res.json(rpcResponse);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}, "addRpcRoutes");
|
|
283
|
+
|
|
284
|
+
// src/server/routes/addRoutes.ts
|
|
285
|
+
var addRoutes = /* @__PURE__ */ __name((app) => {
|
|
286
|
+
addRpcRoutes(app);
|
|
287
|
+
addDataLakeRoutes(app);
|
|
288
|
+
addNodeRoutes(app);
|
|
289
|
+
}, "addRoutes");
|
|
290
|
+
|
|
291
|
+
// src/server/app.ts
|
|
292
|
+
var getApp = /* @__PURE__ */ __name((node) => {
|
|
293
|
+
addInstrumentation();
|
|
294
|
+
const app = express2();
|
|
295
|
+
app.set("etag", false);
|
|
296
|
+
app.use(cors());
|
|
297
|
+
app.use(compression());
|
|
298
|
+
app.use(responseProfiler);
|
|
299
|
+
app.use(getJsonBodyParser(getJsonBodyParserOptions({
|
|
300
|
+
limit: "1mb"
|
|
301
|
+
})));
|
|
302
|
+
app.use(standardResponses);
|
|
303
|
+
disableExpressDefaultPoweredByHeader(app);
|
|
304
|
+
app.use(customPoweredByHeader);
|
|
305
|
+
disableCaseSensitiveRouting(app);
|
|
306
|
+
app.node = node;
|
|
307
|
+
addRoutes(app);
|
|
308
|
+
app.use(standardErrors);
|
|
309
|
+
return app;
|
|
310
|
+
}, "getApp");
|
|
311
|
+
|
|
312
|
+
// src/server/server.ts
|
|
313
|
+
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
314
|
+
import { isDefined as isDefined3, isString } from "@xylabs/typeof";
|
|
315
|
+
import { boot } from "@xyo-network/bios";
|
|
316
|
+
import { HDWallet } from "@xyo-network/wallet";
|
|
317
|
+
|
|
318
|
+
// src/manifest/getLocator.ts
|
|
319
|
+
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
320
|
+
import { asAddress as asAddress3, ZERO_ADDRESS } from "@xylabs/hex";
|
|
321
|
+
import { BaseMongoSdk } from "@xylabs/mongo";
|
|
322
|
+
import { isDefined as isDefined2 } from "@xylabs/typeof";
|
|
323
|
+
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
324
|
+
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
325
|
+
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
326
|
+
import { AddressBalanceDivinerV2, ArchivistSyncDiviner, balanceSummaryRepositoryFromMap, HeadValidationDiviner } from "@xyo-network/chain-modules";
|
|
327
|
+
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
328
|
+
import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
|
|
329
|
+
import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
|
|
330
|
+
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
331
|
+
import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
|
|
332
|
+
|
|
333
|
+
// src/driver/mongo/MongoMap.ts
|
|
334
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
335
|
+
import { AbstractCreatable, creatable } from "@xylabs/creatable";
|
|
336
|
+
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
|
+
function stripMongoId(doc) {
|
|
345
|
+
const { _id, ...rest } = doc;
|
|
346
|
+
return rest;
|
|
347
|
+
}
|
|
348
|
+
__name(stripMongoId, "stripMongoId");
|
|
349
|
+
var MongoMap = class extends AbstractCreatable {
|
|
350
|
+
static {
|
|
351
|
+
__name(this, "MongoMap");
|
|
352
|
+
}
|
|
353
|
+
get sdk() {
|
|
354
|
+
return assertEx3(this.params.sdk, () => "No sdk specified");
|
|
355
|
+
}
|
|
356
|
+
async clear() {
|
|
357
|
+
await this.sdk.deleteMany({});
|
|
358
|
+
}
|
|
359
|
+
async delete(id) {
|
|
360
|
+
const filter = {
|
|
361
|
+
_id: id
|
|
362
|
+
};
|
|
363
|
+
const result = await this.sdk.deleteOne(filter);
|
|
364
|
+
return result.deletedCount > 0;
|
|
365
|
+
}
|
|
366
|
+
async get(id) {
|
|
367
|
+
const filter = {
|
|
368
|
+
_id: id
|
|
369
|
+
};
|
|
370
|
+
const doc = await this.sdk.findOne(filter);
|
|
371
|
+
return isNull(doc) ? void 0 : stripMongoId(doc);
|
|
372
|
+
}
|
|
373
|
+
async has(id) {
|
|
374
|
+
const filter = {
|
|
375
|
+
_id: id
|
|
376
|
+
};
|
|
377
|
+
const exists = await this.sdk.findOne(filter);
|
|
378
|
+
return isNull(exists) ? false : true;
|
|
379
|
+
}
|
|
380
|
+
async set(id, data) {
|
|
381
|
+
const filter = {
|
|
382
|
+
_id: id
|
|
383
|
+
};
|
|
384
|
+
const value = {
|
|
385
|
+
...data,
|
|
386
|
+
_id: id
|
|
387
|
+
};
|
|
388
|
+
await this.sdk.replaceOne(filter, value, {
|
|
389
|
+
upsert: true
|
|
390
|
+
});
|
|
391
|
+
return this;
|
|
392
|
+
}
|
|
393
|
+
async startHandler() {
|
|
394
|
+
await super.startHandler();
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
MongoMap = _ts_decorate([
|
|
398
|
+
creatable()
|
|
399
|
+
], MongoMap);
|
|
400
|
+
|
|
401
|
+
// src/manifest/getLocator.ts
|
|
402
|
+
var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
403
|
+
const { config, logger } = context;
|
|
404
|
+
const { otlpEndpoint } = config.telemetry?.otel ?? {};
|
|
405
|
+
const { traceProvider, meterProvider } = await initTelemetry({
|
|
406
|
+
attributes: {
|
|
407
|
+
serviceName: "xl1-bridge",
|
|
408
|
+
serviceVersion: "1.0.0"
|
|
409
|
+
},
|
|
410
|
+
otlpEndpoint,
|
|
411
|
+
metricsConfig: {
|
|
412
|
+
endpoint: "/metrics",
|
|
413
|
+
port: 9465
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
if (isDefined2(logger)) AbstractModule.defaultLogger = logger;
|
|
417
|
+
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
418
|
+
const locator = new ModuleFactoryLocator();
|
|
419
|
+
let summaryMap = /* @__PURE__ */ new Map();
|
|
420
|
+
const mongoConfig = config.storage?.mongo;
|
|
421
|
+
if (hasMongoConfig(mongoConfig)) {
|
|
422
|
+
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
423
|
+
const payloadSdkConfig = {
|
|
424
|
+
dbConnectionString,
|
|
425
|
+
dbDomain,
|
|
426
|
+
dbName,
|
|
427
|
+
dbPassword,
|
|
428
|
+
dbUserName
|
|
429
|
+
};
|
|
430
|
+
const params = {
|
|
431
|
+
meterProvider,
|
|
432
|
+
payloadSdkConfig,
|
|
433
|
+
statusReporter,
|
|
434
|
+
traceProvider
|
|
435
|
+
};
|
|
436
|
+
locator.register(MongoDBArchivistV2.factory(params), void 0, true);
|
|
437
|
+
const sdk = new BaseMongoSdk({
|
|
438
|
+
...payloadSdkConfig,
|
|
439
|
+
collection: "balance_summary_map"
|
|
440
|
+
});
|
|
441
|
+
summaryMap = await MongoMap.create({
|
|
442
|
+
sdk
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap);
|
|
446
|
+
locator.register(AddressBalanceDivinerV2.factory({
|
|
447
|
+
traceProvider,
|
|
448
|
+
meterProvider,
|
|
449
|
+
statusReporter,
|
|
450
|
+
summaryRepository
|
|
451
|
+
}));
|
|
452
|
+
const chainId = isDefined2(config.chain.id) ? assertEx4(asAddress3(config.chain.id), () => "chain.id must be an Address") : ZERO_ADDRESS;
|
|
453
|
+
locator.register(HeadValidationDiviner.factory({
|
|
454
|
+
traceProvider,
|
|
455
|
+
meterProvider,
|
|
456
|
+
statusReporter,
|
|
457
|
+
chainId,
|
|
458
|
+
allowedProducers: config.producer.allowlist
|
|
459
|
+
}));
|
|
460
|
+
locator.register(MemoryArchivist.factory({
|
|
461
|
+
traceProvider,
|
|
462
|
+
meterProvider,
|
|
463
|
+
statusReporter
|
|
464
|
+
}));
|
|
465
|
+
locator.register(MemorySentinel.factory({
|
|
466
|
+
traceProvider,
|
|
467
|
+
meterProvider,
|
|
468
|
+
statusReporter
|
|
469
|
+
}));
|
|
470
|
+
locator.register(ViewArchivist.factory({
|
|
471
|
+
traceProvider,
|
|
472
|
+
meterProvider,
|
|
473
|
+
statusReporter
|
|
474
|
+
}));
|
|
475
|
+
locator.register(ArchivistSyncDiviner.factory({
|
|
476
|
+
traceProvider,
|
|
477
|
+
meterProvider,
|
|
478
|
+
statusReporter
|
|
479
|
+
}));
|
|
480
|
+
return locator;
|
|
481
|
+
}, "getLocator");
|
|
482
|
+
|
|
483
|
+
// src/manifest/getNode.ts
|
|
484
|
+
import { ManifestWrapper } from "@xyo-network/manifest-wrapper";
|
|
485
|
+
|
|
486
|
+
// src/manifest/node.json
|
|
487
|
+
var node_default = {
|
|
488
|
+
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
489
|
+
nodes: [
|
|
490
|
+
{
|
|
491
|
+
config: {
|
|
492
|
+
accountPath: "44'/60'/1",
|
|
493
|
+
name: "XYOChain",
|
|
494
|
+
schema: "network.xyo.node.config"
|
|
495
|
+
},
|
|
496
|
+
modules: {
|
|
497
|
+
private: [],
|
|
498
|
+
public: []
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
],
|
|
502
|
+
schema: "network.xyo.manifest"
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
// src/manifest/nodeManifest.ts
|
|
506
|
+
var NodeManifest = node_default;
|
|
507
|
+
|
|
508
|
+
// src/manifest/private/index.ts
|
|
509
|
+
var PrivateChildManifests = [];
|
|
510
|
+
|
|
511
|
+
// src/manifest/public/Chain.json
|
|
512
|
+
var Chain_default = {
|
|
513
|
+
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
514
|
+
nodes: [
|
|
515
|
+
{
|
|
516
|
+
config: {
|
|
517
|
+
accountPath: "1",
|
|
518
|
+
name: "Chain",
|
|
519
|
+
schema: "network.xyo.node.config"
|
|
520
|
+
},
|
|
521
|
+
modules: {
|
|
522
|
+
private: [
|
|
523
|
+
{
|
|
524
|
+
config: {
|
|
525
|
+
accountPath: "1/1'/1'",
|
|
526
|
+
name: "Validated",
|
|
527
|
+
getCache: {
|
|
528
|
+
enabled: true,
|
|
529
|
+
maxEntries: 5e3
|
|
530
|
+
},
|
|
531
|
+
payloadSdkConfig: {
|
|
532
|
+
collection: "chain_validated"
|
|
533
|
+
},
|
|
534
|
+
schema: "network.xyo.archivist.config"
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
config: {
|
|
539
|
+
accountPath: "1/1'/2'",
|
|
540
|
+
schema: "network.xyo.diviner.chain.head.validation.config",
|
|
541
|
+
eventSubscriptions: [
|
|
542
|
+
{
|
|
543
|
+
sourceEvent: "inserted",
|
|
544
|
+
sourceModule: "Chain:Submissions",
|
|
545
|
+
targetModuleFunction: "divine"
|
|
546
|
+
}
|
|
547
|
+
],
|
|
548
|
+
inArchivist: "Chain:Submissions",
|
|
549
|
+
outArchivist: "Chain:Validated",
|
|
550
|
+
name: "HeadValidationDiviner"
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
config: {
|
|
555
|
+
accountPath: "1/1'/3'",
|
|
556
|
+
automations: [
|
|
557
|
+
{
|
|
558
|
+
frequency: 1e3,
|
|
559
|
+
frequencyUnits: "millis",
|
|
560
|
+
schema: "network.xyo.automation.interval",
|
|
561
|
+
type: "interval"
|
|
562
|
+
}
|
|
563
|
+
],
|
|
564
|
+
name: "ChainValidationSentinel",
|
|
565
|
+
schema: "network.xyo.sentinel.config",
|
|
566
|
+
synchronous: true,
|
|
567
|
+
tasks: [
|
|
568
|
+
{
|
|
569
|
+
mod: "HeadValidationDiviner",
|
|
570
|
+
endPoint: "divine"
|
|
571
|
+
}
|
|
572
|
+
]
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
config: {
|
|
577
|
+
accountPath: "1/1'/4'",
|
|
578
|
+
automations: [
|
|
579
|
+
{
|
|
580
|
+
frequency: 6e4,
|
|
581
|
+
frequencyUnits: "millis",
|
|
582
|
+
schema: "network.xyo.automation.interval",
|
|
583
|
+
type: "interval"
|
|
584
|
+
}
|
|
585
|
+
],
|
|
586
|
+
name: "AddressBalancePollingSentinel",
|
|
587
|
+
schema: "network.xyo.sentinel.config",
|
|
588
|
+
synchronous: true,
|
|
589
|
+
tasks: [
|
|
590
|
+
{
|
|
591
|
+
mod: "AddressBalanceDiviner",
|
|
592
|
+
endPoint: "divine"
|
|
593
|
+
}
|
|
594
|
+
]
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
],
|
|
598
|
+
public: [
|
|
599
|
+
{
|
|
600
|
+
config: {
|
|
601
|
+
accountPath: "1/1/1",
|
|
602
|
+
name: "Submissions",
|
|
603
|
+
getCache: {
|
|
604
|
+
enabled: true,
|
|
605
|
+
maxEntries: 5e3
|
|
606
|
+
},
|
|
607
|
+
payloadSdkConfig: {
|
|
608
|
+
collection: "chain_submissions"
|
|
609
|
+
},
|
|
610
|
+
schema: "network.xyo.archivist.config"
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
config: {
|
|
615
|
+
accountPath: "1/1/2",
|
|
616
|
+
name: "Finalized",
|
|
617
|
+
allowedQueries: [
|
|
618
|
+
"network.xyo.query.archivist.get",
|
|
619
|
+
"network.xyo.query.archivist.next"
|
|
620
|
+
],
|
|
621
|
+
getCache: {
|
|
622
|
+
enabled: true,
|
|
623
|
+
maxEntries: 5e3
|
|
624
|
+
},
|
|
625
|
+
originArchivist: "Chain:Validated",
|
|
626
|
+
schema: "network.xyo.archivist.view.config"
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
config: {
|
|
631
|
+
accountPath: "1/1/3",
|
|
632
|
+
schema: "network.xyo.diviner.chain.address.balance.config",
|
|
633
|
+
archivist: "Chain:Validated",
|
|
634
|
+
name: "AddressBalanceDiviner",
|
|
635
|
+
eventSubscriptions: [
|
|
636
|
+
{
|
|
637
|
+
sourceEvent: "inserted",
|
|
638
|
+
sourceModule: "Chain:Validated",
|
|
639
|
+
targetModuleFunction: "divine"
|
|
640
|
+
}
|
|
641
|
+
]
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
]
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
],
|
|
648
|
+
schema: "network.xyo.manifest"
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
// src/manifest/public/Pending.json
|
|
652
|
+
var Pending_default = {
|
|
653
|
+
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
654
|
+
nodes: [
|
|
655
|
+
{
|
|
656
|
+
config: {
|
|
657
|
+
accountPath: "2",
|
|
658
|
+
name: "Pending",
|
|
659
|
+
schema: "network.xyo.node.config"
|
|
660
|
+
},
|
|
661
|
+
modules: {
|
|
662
|
+
private: [],
|
|
663
|
+
public: [
|
|
664
|
+
{
|
|
665
|
+
config: {
|
|
666
|
+
accountPath: "2/1/2",
|
|
667
|
+
name: "PendingTransactions",
|
|
668
|
+
getCache: {
|
|
669
|
+
enabled: true,
|
|
670
|
+
maxEntries: 5e3
|
|
671
|
+
},
|
|
672
|
+
labels: {
|
|
673
|
+
"network.xyo.storage.class": "mongodb"
|
|
674
|
+
},
|
|
675
|
+
payloadSdkConfig: {
|
|
676
|
+
collection: "pending_bundles"
|
|
677
|
+
},
|
|
678
|
+
schema: "network.xyo.archivist.config"
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
]
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
],
|
|
685
|
+
schema: "network.xyo.manifest"
|
|
686
|
+
};
|
|
687
|
+
|
|
688
|
+
// src/manifest/public/index.ts
|
|
689
|
+
var ChainNodeManifest = Chain_default;
|
|
690
|
+
var PendingNodeManifest = Pending_default;
|
|
691
|
+
var PublicChildManifests = [
|
|
692
|
+
...ChainNodeManifest.nodes,
|
|
693
|
+
...PendingNodeManifest.nodes
|
|
694
|
+
];
|
|
695
|
+
|
|
696
|
+
// src/manifest/getNode.ts
|
|
697
|
+
var getNode = /* @__PURE__ */ __name(async (context) => {
|
|
698
|
+
const { wallet } = context;
|
|
699
|
+
const locator = await getLocator(context);
|
|
700
|
+
const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
|
|
701
|
+
const [node, ...childNodes] = await wrapper.loadNodes();
|
|
702
|
+
if (childNodes?.length > 0) {
|
|
703
|
+
await Promise.all(childNodes.map((childNode) => node.register(childNode)));
|
|
704
|
+
await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
|
|
705
|
+
}
|
|
706
|
+
return node;
|
|
707
|
+
}, "getNode");
|
|
708
|
+
|
|
709
|
+
// src/server/server.ts
|
|
710
|
+
var hostname = "::";
|
|
711
|
+
var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
712
|
+
const storedSeedPhrase = await bios.seedPhraseStore.get("os");
|
|
713
|
+
logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`);
|
|
714
|
+
const { mnemonic } = config.api;
|
|
715
|
+
if (isString(storedSeedPhrase) && isString(mnemonic)) {
|
|
716
|
+
logger?.warn("[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
|
|
717
|
+
await bios.seedPhraseStore.set("os", mnemonic);
|
|
718
|
+
} else {
|
|
719
|
+
let seedPhrase;
|
|
720
|
+
if (isString(mnemonic)) {
|
|
721
|
+
seedPhrase = mnemonic;
|
|
722
|
+
} else {
|
|
723
|
+
seedPhrase = HDWallet.generateMnemonic();
|
|
724
|
+
logger?.log("[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.");
|
|
725
|
+
logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`);
|
|
726
|
+
}
|
|
727
|
+
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
728
|
+
}
|
|
729
|
+
return assertEx5(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
730
|
+
}, "getSeedPhrase");
|
|
731
|
+
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
732
|
+
const { config, logger, node } = context;
|
|
733
|
+
const { mnemonic, port } = context.config.api;
|
|
734
|
+
const bios = await boot();
|
|
735
|
+
const seedPhrase = isDefined3(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
736
|
+
const wallet = await HDWallet.fromPhrase(seedPhrase);
|
|
737
|
+
const nodeContext = {
|
|
738
|
+
wallet,
|
|
739
|
+
logger,
|
|
740
|
+
config
|
|
741
|
+
};
|
|
742
|
+
const app = getApp(node ?? await getNode(nodeContext));
|
|
743
|
+
const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`));
|
|
744
|
+
server.setTimeout(2e4);
|
|
745
|
+
return server;
|
|
746
|
+
}, "getServer");
|
|
747
|
+
export {
|
|
748
|
+
getApp,
|
|
749
|
+
getServer
|
|
750
|
+
};
|
|
751
|
+
//# sourceMappingURL=index.mjs.map
|