@xyo-network/chain-bridge 1.15.2 → 1.15.4
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/README.md +1 -1
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts +4 -4
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts.map +1 -1
- package/dist/node/driver/mongo/MongoMap.d.ts +3 -2
- package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -1
- package/dist/node/index.mjs +300 -683
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts +5 -3
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts.map +1 -1
- package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts +28 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts +2 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts +36 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts +2 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/Observer.d.ts +1 -1
- package/dist/node/interface/service/Observer/Observer.d.ts.map +1 -1
- package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.d.ts +1 -1
- package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.d.ts +1 -1
- package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/ChainBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts +57 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts +2 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts +2 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/index.d.ts +2 -0
- package/dist/node/interface/service/Relay/index.d.ts.map +1 -0
- package/dist/node/interface/service/index.d.ts +1 -1
- package/dist/node/interface/service/index.d.ts.map +1 -1
- package/dist/node/manifest/getLocator.d.ts.map +1 -1
- package/dist/node/manifest/public/index.d.ts +6 -2
- package/dist/node/manifest/public/index.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +1 -2
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts +3 -0
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/middleware/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/middleware/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts +32 -0
- package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts +6 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts +8 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts +5 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/get.d.ts +2 -1
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -1
- package/dist/node/server/routes/index.d.ts +0 -1
- package/dist/node/server/routes/index.d.ts.map +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +62 -55
- package/src/driver/indexer/ChainHydratedBlocksObservable.ts +5 -5
- package/src/driver/indexer/spec/ChainBlocksObservable.spec.ts +6 -3
- package/src/driver/indexer/spec/ChainHydratedBlocksObservable.spec.ts +10 -4
- package/src/driver/mongo/MongoMap.ts +13 -3
- package/src/interface/interface/IntentIndexerInterface.ts +5 -4
- package/src/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.ts +181 -0
- package/src/interface/service/Observer/ERC20TransferObserver/index.ts +1 -0
- package/src/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.ts +271 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts +212 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/index.ts +1 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.ts +313 -0
- package/src/interface/service/Observer/Observer.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.ts +7 -5
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.ts +227 -0
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/index.ts +1 -0
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.ts +237 -0
- package/src/interface/service/Relay/index.ts +1 -0
- package/src/interface/service/index.ts +1 -1
- package/src/manifest/getLocator.ts +7 -6
- package/src/manifest/node.json +1 -1
- package/src/manifest/public/Chain.json +3 -109
- package/src/manifest/public/Ethereum.json +88 -0
- package/src/manifest/public/XL1.json +88 -0
- package/src/manifest/public/index.ts +15 -6
- package/src/server/app.ts +5 -12
- package/src/server/routes/addRoutes.ts +2 -6
- package/src/server/routes/bridge/addBridgeRoutes.ts +10 -0
- package/src/server/routes/bridge/index.ts +1 -0
- package/src/server/routes/bridge/middleware/index.ts +1 -0
- package/src/server/routes/bridge/middleware/requestHandlerValidator.ts +120 -0
- package/src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts +13 -0
- package/src/server/routes/bridge/routeDefinitions/index.ts +1 -0
- package/src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts +18 -0
- package/src/server/routes/bridge/routeDefinitions/pathParams/index.ts +1 -0
- package/src/server/routes/bridge/routeDefinitions/routeDefinition.ts +18 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts +55 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +58 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +83 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +55 -0
- package/src/server/routes/bridge/routeDefinitions/routes/index.ts +4 -0
- package/src/server/routes/healthz/get.ts +1 -1
- package/src/server/routes/index.ts +0 -2
- package/src/server/server.ts +11 -14
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/index.d.ts +0 -2
- package/dist/node/server/routes/rpc/index.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +0 -3
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/routes/index.d.ts +0 -2
- package/dist/node/server/routes/rpc/routes/index.d.ts.map +0 -1
- package/src/manifest/public/Pending.json +0 -35
- package/src/server/routes/rpc/index.ts +0 -1
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +0 -22
- package/src/server/routes/rpc/routes/index.ts +0 -1
- /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.d.ts +0 -0
- /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.d.ts +0 -0
- /package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.ts +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
5
5
|
import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
|
|
6
6
|
import compression from "compression";
|
|
7
7
|
import cors from "cors";
|
|
8
|
-
import
|
|
8
|
+
import express from "express";
|
|
9
9
|
|
|
10
10
|
// src/server/instrumentation.ts
|
|
11
11
|
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
@@ -21,277 +21,316 @@ var addInstrumentation = /* @__PURE__ */ __name(() => {
|
|
|
21
21
|
});
|
|
22
22
|
}, "addInstrumentation");
|
|
23
23
|
|
|
24
|
-
// src/server/routes/
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
import {
|
|
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);
|
|
24
|
+
// src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts
|
|
25
|
+
import { toAddress as toAddress2, toHex } from "@xylabs/hex";
|
|
26
|
+
import { PayloadZodStrictOfSchema } from "@xyo-network/payload-model";
|
|
27
|
+
import { BridgeDestinationObservationFieldsZod, BridgeDestinationObservationSchema } from "@xyo-network/xl1-protocol";
|
|
28
|
+
import { z as z2 } from "zod";
|
|
60
29
|
|
|
61
|
-
// src/server/routes/
|
|
62
|
-
import {
|
|
63
|
-
import {
|
|
64
|
-
import {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
schema,
|
|
81
|
-
addresses
|
|
82
|
-
])) : {};
|
|
83
|
-
const security = {
|
|
84
|
-
allowed
|
|
85
|
-
};
|
|
86
|
-
return {
|
|
87
|
-
schema: ModuleConfigSchema,
|
|
88
|
-
security
|
|
30
|
+
// src/server/routes/bridge/middleware/requestHandlerValidator.ts
|
|
31
|
+
import { isPromise } from "@xylabs/typeof";
|
|
32
|
+
import { ReasonPhrases, StatusCodes } from "http-status-codes";
|
|
33
|
+
import { z } from "zod";
|
|
34
|
+
var EmptyParamsZod = z.object({}).catchall(z.string());
|
|
35
|
+
var EmptyQueryParamsZod = z.object({}).catchall(z.union([
|
|
36
|
+
z.string(),
|
|
37
|
+
z.array(z.string())
|
|
38
|
+
]));
|
|
39
|
+
var ValidateRequestDefaults = {
|
|
40
|
+
params: EmptyParamsZod,
|
|
41
|
+
query: EmptyQueryParamsZod,
|
|
42
|
+
body: z.json(),
|
|
43
|
+
response: z.json()
|
|
44
|
+
};
|
|
45
|
+
function requestHandlerValidator(schemas) {
|
|
46
|
+
const validators = {
|
|
47
|
+
...ValidateRequestDefaults,
|
|
48
|
+
...schemas
|
|
89
49
|
};
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
50
|
+
return (handler) => {
|
|
51
|
+
return async (req, res, next) => {
|
|
52
|
+
const originalJson = res.json.bind(res);
|
|
53
|
+
try {
|
|
54
|
+
const errors = [];
|
|
55
|
+
const keys = [
|
|
56
|
+
"params",
|
|
57
|
+
"query",
|
|
58
|
+
"body"
|
|
59
|
+
];
|
|
60
|
+
for (const key of keys) {
|
|
61
|
+
const validator = validators[key];
|
|
62
|
+
const result2 = validator.safeParse(req[key]);
|
|
63
|
+
if (result2.success) {
|
|
64
|
+
Object.assign(req[key], result2.data);
|
|
65
|
+
} else {
|
|
66
|
+
errors.push(...result2.error.issues.map((issue) => issue.path.length === 0 ? `${key}: ${issue.message}` : `${key}.${issue.path.join(".")}: ${issue.message}`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (errors.length > 0) {
|
|
70
|
+
const message = errors.join("; ");
|
|
71
|
+
const err = new Error(message);
|
|
72
|
+
err.name = ReasonPhrases.BAD_REQUEST;
|
|
73
|
+
err.statusCode = StatusCodes.BAD_REQUEST;
|
|
74
|
+
next(err);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
res.json = (data) => {
|
|
78
|
+
const result2 = validators.response.safeParse(data);
|
|
79
|
+
if (result2.success) {
|
|
80
|
+
return originalJson(result2.data);
|
|
81
|
+
} else {
|
|
82
|
+
const message = result2.error.issues.map((issue) => issue.path.length === 0 ? `response: ${issue.message}` : `response.${issue.path.join(".")}: ${issue.message}`).join("; ");
|
|
83
|
+
const err = new Error(message);
|
|
84
|
+
err.name = ReasonPhrases.INTERNAL_SERVER_ERROR;
|
|
85
|
+
err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR;
|
|
86
|
+
res.json = originalJson;
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const result = handler(req, res, next);
|
|
91
|
+
if (result && isPromise(result)) {
|
|
92
|
+
await result;
|
|
93
|
+
}
|
|
94
|
+
} catch (err) {
|
|
95
|
+
res.json = originalJson;
|
|
96
|
+
next(err);
|
|
137
97
|
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
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);
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
__name(requestHandlerValidator, "requestHandlerValidator");
|
|
158
102
|
|
|
159
|
-
// src/server/routes/
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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);
|
|
103
|
+
// src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts
|
|
104
|
+
import { hexFromHexString, HexZod, isAddress, toAddress } from "@xylabs/hex";
|
|
105
|
+
import { isUndefined } from "@xylabs/typeof";
|
|
106
|
+
var remoteChainId = toAddress("0x01");
|
|
107
|
+
var ChainIdPathParam = HexZod.refine((val) => {
|
|
108
|
+
const chainIdHex = hexFromHexString(val, {
|
|
109
|
+
prefix: true
|
|
173
110
|
});
|
|
174
|
-
|
|
111
|
+
if (isAddress(chainIdHex)) return false;
|
|
112
|
+
const suppliedChainId = toAddress(chainIdHex);
|
|
113
|
+
if (isUndefined(suppliedChainId)) return false;
|
|
114
|
+
return suppliedChainId === remoteChainId;
|
|
115
|
+
}, {
|
|
116
|
+
message: `Only ${remoteChainId} is supported`
|
|
117
|
+
});
|
|
175
118
|
|
|
176
|
-
// src/server/routes/
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
|
119
|
+
// src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts
|
|
120
|
+
var params = z2.object({
|
|
121
|
+
chainId: ChainIdPathParam,
|
|
122
|
+
nonce: z2.string()
|
|
123
|
+
});
|
|
124
|
+
var response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape);
|
|
125
|
+
var validateRequest = requestHandlerValidator({
|
|
126
|
+
params,
|
|
127
|
+
response
|
|
128
|
+
});
|
|
129
|
+
var bridgeFromRemoteStatus = {
|
|
130
|
+
method: "get",
|
|
131
|
+
path: "/bridge/chains/:chainId/bridgeFromRemote/status/:nonce",
|
|
132
|
+
handlers: validateRequest(async (req, res) => {
|
|
133
|
+
const { chainId } = req.params;
|
|
134
|
+
const rand = await Promise.resolve(Math.random());
|
|
135
|
+
const found = rand > 0.5;
|
|
136
|
+
if (!found) return res.sendStatus(404);
|
|
137
|
+
const confirmed = rand > 0.8;
|
|
138
|
+
if (!confirmed) return res.sendStatus(204);
|
|
139
|
+
const observation = {
|
|
140
|
+
schema: BridgeDestinationObservationSchema,
|
|
141
|
+
dest: chainId,
|
|
142
|
+
destAddress: toAddress2("0xabc"),
|
|
143
|
+
destAmount: toHex("0x100"),
|
|
144
|
+
destToken: toAddress2("0xdef"),
|
|
145
|
+
src: toAddress2("0x02"),
|
|
146
|
+
srcAddress: toAddress2("0x123"),
|
|
147
|
+
srcAmount: toHex("0x200"),
|
|
148
|
+
srcToken: toHex("0x456"),
|
|
149
|
+
destConfirmation: toHex("0x9999")
|
|
222
150
|
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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");
|
|
151
|
+
res.json(observation);
|
|
152
|
+
})
|
|
153
|
+
};
|
|
252
154
|
|
|
253
|
-
// src/server/routes/
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
155
|
+
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
|
|
156
|
+
import { asHash, toAddress as toAddress3 } from "@xylabs/hex";
|
|
157
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
158
|
+
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
|
|
159
|
+
import { BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, TransferSchema } from "@xyo-network/xl1-protocol";
|
|
160
|
+
import { z as z3 } from "zod";
|
|
161
|
+
var remoteChainId2 = toAddress3("0x01");
|
|
162
|
+
var params2 = z3.object({
|
|
163
|
+
chainId: ChainIdPathParam
|
|
164
|
+
});
|
|
165
|
+
var body = z3.tuple([
|
|
166
|
+
// TODO: TransactionBoundWitness
|
|
167
|
+
PayloadZodStrictOfSchema2(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),
|
|
168
|
+
PayloadZodLooseOfSchema(TransferSchema)
|
|
169
|
+
]);
|
|
170
|
+
var response2 = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
|
|
171
|
+
var validateRequest2 = requestHandlerValidator({
|
|
172
|
+
params: params2,
|
|
173
|
+
body,
|
|
174
|
+
response: response2
|
|
175
|
+
});
|
|
176
|
+
var bridgeToRemote = {
|
|
177
|
+
method: "post",
|
|
178
|
+
path: "/bridge/chains/:chainId/bridgeToRemote",
|
|
179
|
+
handlers: validateRequest2(async (req, res) => {
|
|
180
|
+
const { body: body3 } = req;
|
|
181
|
+
const [bridgeIntent, transfer] = body3;
|
|
182
|
+
const srcConfirmation = await Promise.resolve(asHash("0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"));
|
|
183
|
+
const bridgeCommonFieldsZod = z3.object({}).extend(BridgeSourceObservationFieldsZod.shape);
|
|
184
|
+
const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent);
|
|
185
|
+
const bridgeObservationFields = {
|
|
186
|
+
...bridgeCommonFields,
|
|
187
|
+
srcConfirmation
|
|
188
|
+
};
|
|
189
|
+
const bridgeObservation = new PayloadBuilder({
|
|
190
|
+
schema: BridgeSourceObservationSchema
|
|
191
|
+
}).fields(bridgeObservationFields).build();
|
|
192
|
+
res.json(bridgeObservation);
|
|
193
|
+
})
|
|
194
|
+
};
|
|
262
195
|
|
|
263
|
-
// src/server/routes/
|
|
264
|
-
import {
|
|
265
|
-
import {
|
|
266
|
-
import {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
196
|
+
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts
|
|
197
|
+
import { hexToBigInt, toAddress as toAddress4, toHex as toHex2 } from "@xylabs/hex";
|
|
198
|
+
import { createTransferPayload } from "@xyo-network/chain-protocol";
|
|
199
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
200
|
+
import { PayloadZodLooseOfSchema as PayloadZodLooseOfSchema2, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/payload-model";
|
|
201
|
+
import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema2, TransferSchema as TransferSchema2 } from "@xyo-network/xl1-protocol";
|
|
202
|
+
import { v4 } from "uuid";
|
|
203
|
+
import { z as z4 } from "zod";
|
|
204
|
+
var TOKEN_ADDRESS = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
|
|
205
|
+
var bridgeableTokenContract = toHex2(TOKEN_ADDRESS);
|
|
206
|
+
var xl1ChainId = toAddress4("0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9");
|
|
207
|
+
var fixedFee = 1000000000000000n;
|
|
208
|
+
var percentFee = 5n;
|
|
209
|
+
var bridgeEscrowAddress = toAddress4("0x0a");
|
|
210
|
+
var bridgeFeesAddress = toAddress4("0x0b");
|
|
211
|
+
var remoteChainId3 = toHex2("0x01");
|
|
212
|
+
var params3 = z4.object({
|
|
213
|
+
chainId: ChainIdPathParam
|
|
214
|
+
});
|
|
215
|
+
var body2 = BridgeIntentFieldsZod2.pick({
|
|
216
|
+
destAddress: true,
|
|
217
|
+
srcAddress: true,
|
|
218
|
+
srcAmount: true
|
|
219
|
+
});
|
|
220
|
+
var response3 = z4.tuple([
|
|
221
|
+
PayloadZodStrictOfSchema3(BridgeIntentSchema2).extend(BridgeIntentFieldsZod2.shape),
|
|
222
|
+
PayloadZodLooseOfSchema2(TransferSchema2)
|
|
223
|
+
]);
|
|
224
|
+
var validateRequest3 = requestHandlerValidator({
|
|
225
|
+
params: params3,
|
|
226
|
+
body: body2,
|
|
227
|
+
response: response3
|
|
228
|
+
});
|
|
229
|
+
var bridgeToRemoteEstimate = {
|
|
230
|
+
method: "post",
|
|
231
|
+
path: "/bridge/chains/:chainId/bridgeToRemote/estimate",
|
|
232
|
+
handlers: validateRequest3((req, res) => {
|
|
233
|
+
const { srcAddress, srcAmount, destAddress } = req.body;
|
|
234
|
+
const srcAmountBigInt = hexToBigInt(srcAmount);
|
|
235
|
+
const feeAmount = fixedFee + srcAmountBigInt * percentFee / 100n;
|
|
236
|
+
const destAmountBigInt = srcAmountBigInt > feeAmount ? srcAmountBigInt - feeAmount : 0n;
|
|
237
|
+
const destAmount = toHex2(destAmountBigInt);
|
|
238
|
+
const nonce = v4();
|
|
239
|
+
const sender = toAddress4(srcAddress);
|
|
240
|
+
const bridgeIntentFields = {
|
|
241
|
+
// Source
|
|
242
|
+
src: xl1ChainId,
|
|
243
|
+
srcAddress,
|
|
244
|
+
srcAmount,
|
|
245
|
+
srcToken: xl1ChainId,
|
|
246
|
+
// Destination
|
|
247
|
+
dest: remoteChainId3,
|
|
248
|
+
destAddress,
|
|
249
|
+
destAmount,
|
|
250
|
+
destToken: bridgeableTokenContract,
|
|
251
|
+
nonce
|
|
252
|
+
};
|
|
253
|
+
const bridgeIntent = new PayloadBuilder2({
|
|
254
|
+
schema: BridgeIntentSchema2
|
|
255
|
+
}).fields(bridgeIntentFields).build();
|
|
256
|
+
const transfer = createTransferPayload(sender, {
|
|
257
|
+
[bridgeEscrowAddress]: destAmountBigInt,
|
|
258
|
+
[bridgeFeesAddress]: feeAmount
|
|
280
259
|
});
|
|
281
|
-
|
|
282
|
-
|
|
260
|
+
res.json([
|
|
261
|
+
bridgeIntent,
|
|
262
|
+
transfer
|
|
263
|
+
]);
|
|
264
|
+
})
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts
|
|
268
|
+
import { toAddress as toAddress5, toHex as toHex3 } from "@xylabs/hex";
|
|
269
|
+
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema4 } from "@xyo-network/payload-model";
|
|
270
|
+
import { BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2 } from "@xyo-network/xl1-protocol";
|
|
271
|
+
import { z as z5 } from "zod";
|
|
272
|
+
var params4 = z5.object({
|
|
273
|
+
chainId: ChainIdPathParam,
|
|
274
|
+
nonce: z5.string()
|
|
275
|
+
});
|
|
276
|
+
var response4 = PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape);
|
|
277
|
+
var validateRequest4 = requestHandlerValidator({
|
|
278
|
+
params: params4,
|
|
279
|
+
response: response4
|
|
280
|
+
});
|
|
281
|
+
var bridgeToRemoteStatus = {
|
|
282
|
+
method: "get",
|
|
283
|
+
path: "/bridge/chains/:chainId/bridgeToRemote/status/:nonce",
|
|
284
|
+
handlers: validateRequest4(async (req, res) => {
|
|
285
|
+
const { chainId } = req.params;
|
|
286
|
+
const rand = await Promise.resolve(Math.random());
|
|
287
|
+
const found = rand > 0.5;
|
|
288
|
+
if (!found) return res.sendStatus(404);
|
|
289
|
+
const confirmed = rand > 0.8;
|
|
290
|
+
if (!confirmed) return res.sendStatus(204);
|
|
291
|
+
const observation = {
|
|
292
|
+
schema: BridgeDestinationObservationSchema2,
|
|
293
|
+
dest: chainId,
|
|
294
|
+
destAddress: toAddress5("0xabc"),
|
|
295
|
+
destAmount: toHex3("0x100"),
|
|
296
|
+
destToken: toAddress5("0xdef"),
|
|
297
|
+
src: toAddress5("0x02"),
|
|
298
|
+
srcAddress: toAddress5("0x123"),
|
|
299
|
+
srcAmount: toHex3("0x200"),
|
|
300
|
+
srcToken: toHex3("0x456"),
|
|
301
|
+
destConfirmation: toHex3("0x9999")
|
|
302
|
+
};
|
|
303
|
+
res.json(observation);
|
|
304
|
+
})
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
// src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts
|
|
308
|
+
var getRouteDefinitions = /* @__PURE__ */ __name(() => {
|
|
309
|
+
return [
|
|
310
|
+
bridgeFromRemoteStatus,
|
|
311
|
+
bridgeToRemote,
|
|
312
|
+
bridgeToRemoteEstimate,
|
|
313
|
+
bridgeToRemoteStatus
|
|
314
|
+
];
|
|
315
|
+
}, "getRouteDefinitions");
|
|
316
|
+
|
|
317
|
+
// src/server/routes/bridge/addBridgeRoutes.ts
|
|
318
|
+
var addBridgeRoutes = /* @__PURE__ */ __name((app) => {
|
|
319
|
+
const routeDefinitions = getRouteDefinitions();
|
|
320
|
+
for (const definition of routeDefinitions) {
|
|
321
|
+
app[definition.method](definition.path, definition.handlers);
|
|
322
|
+
}
|
|
323
|
+
}, "addBridgeRoutes");
|
|
283
324
|
|
|
284
325
|
// src/server/routes/addRoutes.ts
|
|
285
326
|
var addRoutes = /* @__PURE__ */ __name((app) => {
|
|
286
|
-
|
|
287
|
-
addDataLakeRoutes(app);
|
|
288
|
-
addNodeRoutes(app);
|
|
327
|
+
addBridgeRoutes(app);
|
|
289
328
|
}, "addRoutes");
|
|
290
329
|
|
|
291
330
|
// src/server/app.ts
|
|
292
|
-
var getApp = /* @__PURE__ */ __name((
|
|
331
|
+
var getApp = /* @__PURE__ */ __name(() => {
|
|
293
332
|
addInstrumentation();
|
|
294
|
-
const app =
|
|
333
|
+
const app = express();
|
|
295
334
|
app.set("etag", false);
|
|
296
335
|
app.use(cors());
|
|
297
336
|
app.use(compression());
|
|
@@ -303,443 +342,21 @@ var getApp = /* @__PURE__ */ __name((node) => {
|
|
|
303
342
|
disableExpressDefaultPoweredByHeader(app);
|
|
304
343
|
app.use(customPoweredByHeader);
|
|
305
344
|
disableCaseSensitiveRouting(app);
|
|
306
|
-
app.node = node;
|
|
307
345
|
addRoutes(app);
|
|
308
346
|
app.use(standardErrors);
|
|
309
347
|
return app;
|
|
310
348
|
}, "getApp");
|
|
311
349
|
|
|
312
350
|
// src/server/server.ts
|
|
313
|
-
import { assertEx
|
|
314
|
-
import {
|
|
315
|
-
import { boot } from "@xyo-network/bios";
|
|
351
|
+
import { assertEx } from "@xylabs/assert";
|
|
352
|
+
import { isString } from "@xylabs/typeof";
|
|
316
353
|
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
354
|
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
355
|
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
732
|
-
const {
|
|
733
|
-
const {
|
|
734
|
-
|
|
735
|
-
const
|
|
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));
|
|
356
|
+
const { logger } = context;
|
|
357
|
+
const { port } = context.config.bridge;
|
|
358
|
+
await Promise.resolve();
|
|
359
|
+
const app = getApp();
|
|
743
360
|
const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`));
|
|
744
361
|
server.setTimeout(2e4);
|
|
745
362
|
return server;
|