@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.
Files changed (141) hide show
  1. package/README.md +1 -1
  2. package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts +4 -4
  3. package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts.map +1 -1
  4. package/dist/node/driver/mongo/MongoMap.d.ts +3 -2
  5. package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -1
  6. package/dist/node/index.mjs +300 -683
  7. package/dist/node/index.mjs.map +1 -1
  8. package/dist/node/interface/interface/IntentIndexerInterface.d.ts +5 -3
  9. package/dist/node/interface/interface/IntentIndexerInterface.d.ts.map +1 -1
  10. package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts +28 -0
  11. package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts.map +1 -0
  12. package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts +2 -0
  13. package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts.map +1 -0
  14. package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts +2 -0
  15. package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts.map +1 -0
  16. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts +36 -0
  17. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts.map +1 -0
  18. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts +2 -0
  19. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts.map +1 -0
  20. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts +2 -0
  21. package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts.map +1 -0
  22. package/dist/node/interface/service/Observer/Observer.d.ts +1 -1
  23. package/dist/node/interface/service/Observer/Observer.d.ts.map +1 -1
  24. package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.d.ts +1 -1
  25. package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +1 -0
  26. package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.d.ts +1 -1
  27. package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +1 -0
  28. package/dist/node/interface/service/Relay/ChainBridgeRelay/index.d.ts.map +1 -0
  29. package/dist/node/interface/service/Relay/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +1 -0
  30. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts +57 -0
  31. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts.map +1 -0
  32. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts +2 -0
  33. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts.map +1 -0
  34. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts +2 -0
  35. package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts.map +1 -0
  36. package/dist/node/interface/service/Relay/index.d.ts +2 -0
  37. package/dist/node/interface/service/Relay/index.d.ts.map +1 -0
  38. package/dist/node/interface/service/index.d.ts +1 -1
  39. package/dist/node/interface/service/index.d.ts.map +1 -1
  40. package/dist/node/manifest/getLocator.d.ts.map +1 -1
  41. package/dist/node/manifest/public/index.d.ts +6 -2
  42. package/dist/node/manifest/public/index.d.ts.map +1 -1
  43. package/dist/node/server/app.d.ts +1 -2
  44. package/dist/node/server/app.d.ts.map +1 -1
  45. package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
  46. package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts +3 -0
  47. package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts.map +1 -0
  48. package/dist/node/server/routes/bridge/index.d.ts +2 -0
  49. package/dist/node/server/routes/bridge/index.d.ts.map +1 -0
  50. package/dist/node/server/routes/bridge/middleware/index.d.ts +2 -0
  51. package/dist/node/server/routes/bridge/middleware/index.d.ts.map +1 -0
  52. package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts +32 -0
  53. package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts.map +1 -0
  54. package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts +3 -0
  55. package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts.map +1 -0
  56. package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts +2 -0
  57. package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts.map +1 -0
  58. package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts +6 -0
  59. package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts.map +1 -0
  60. package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts +2 -0
  61. package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts.map +1 -0
  62. package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts +8 -0
  63. package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts.map +1 -0
  64. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts +3 -0
  65. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts.map +1 -0
  66. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +3 -0
  67. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -0
  68. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +3 -0
  69. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -0
  70. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +3 -0
  71. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -0
  72. package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts +5 -0
  73. package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts.map +1 -0
  74. package/dist/node/server/routes/healthz/get.d.ts +2 -1
  75. package/dist/node/server/routes/healthz/get.d.ts.map +1 -1
  76. package/dist/node/server/routes/index.d.ts +0 -1
  77. package/dist/node/server/routes/index.d.ts.map +1 -1
  78. package/dist/node/server/server.d.ts.map +1 -1
  79. package/package.json +62 -55
  80. package/src/driver/indexer/ChainHydratedBlocksObservable.ts +5 -5
  81. package/src/driver/indexer/spec/ChainBlocksObservable.spec.ts +6 -3
  82. package/src/driver/indexer/spec/ChainHydratedBlocksObservable.spec.ts +10 -4
  83. package/src/driver/mongo/MongoMap.ts +13 -3
  84. package/src/interface/interface/IntentIndexerInterface.ts +5 -4
  85. package/src/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.ts +181 -0
  86. package/src/interface/service/Observer/ERC20TransferObserver/index.ts +1 -0
  87. package/src/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.ts +271 -0
  88. package/src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts +212 -0
  89. package/src/interface/service/Observer/LiquidityPoolBridgeObserver/index.ts +1 -0
  90. package/src/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.ts +313 -0
  91. package/src/interface/service/Observer/Observer.ts +1 -1
  92. package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.ts +1 -1
  93. package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.ts +1 -1
  94. package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.ts +7 -5
  95. package/src/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.ts +227 -0
  96. package/src/interface/service/Relay/LiquidityPoolBridgeRelay/index.ts +1 -0
  97. package/src/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.ts +237 -0
  98. package/src/interface/service/Relay/index.ts +1 -0
  99. package/src/interface/service/index.ts +1 -1
  100. package/src/manifest/getLocator.ts +7 -6
  101. package/src/manifest/node.json +1 -1
  102. package/src/manifest/public/Chain.json +3 -109
  103. package/src/manifest/public/Ethereum.json +88 -0
  104. package/src/manifest/public/XL1.json +88 -0
  105. package/src/manifest/public/index.ts +15 -6
  106. package/src/server/app.ts +5 -12
  107. package/src/server/routes/addRoutes.ts +2 -6
  108. package/src/server/routes/bridge/addBridgeRoutes.ts +10 -0
  109. package/src/server/routes/bridge/index.ts +1 -0
  110. package/src/server/routes/bridge/middleware/index.ts +1 -0
  111. package/src/server/routes/bridge/middleware/requestHandlerValidator.ts +120 -0
  112. package/src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts +13 -0
  113. package/src/server/routes/bridge/routeDefinitions/index.ts +1 -0
  114. package/src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts +18 -0
  115. package/src/server/routes/bridge/routeDefinitions/pathParams/index.ts +1 -0
  116. package/src/server/routes/bridge/routeDefinitions/routeDefinition.ts +18 -0
  117. package/src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts +55 -0
  118. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +58 -0
  119. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +83 -0
  120. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +55 -0
  121. package/src/server/routes/bridge/routeDefinitions/routes/index.ts +4 -0
  122. package/src/server/routes/healthz/get.ts +1 -1
  123. package/src/server/routes/index.ts +0 -2
  124. package/src/server/server.ts +11 -14
  125. package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +0 -1
  126. package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +0 -1
  127. package/dist/node/interface/service/ChainBridgeRelay/index.d.ts.map +0 -1
  128. package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +0 -1
  129. package/dist/node/server/routes/rpc/index.d.ts +0 -2
  130. package/dist/node/server/routes/rpc/index.d.ts.map +0 -1
  131. package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +0 -3
  132. package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +0 -1
  133. package/dist/node/server/routes/rpc/routes/index.d.ts +0 -2
  134. package/dist/node/server/routes/rpc/routes/index.d.ts.map +0 -1
  135. package/src/manifest/public/Pending.json +0 -35
  136. package/src/server/routes/rpc/index.ts +0 -1
  137. package/src/server/routes/rpc/routes/addRpcRoutes.ts +0 -22
  138. package/src/server/routes/rpc/routes/index.ts +0 -1
  139. /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.d.ts +0 -0
  140. /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.d.ts +0 -0
  141. /package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.ts +0 -0
@@ -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 express2 from "express";
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/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);
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/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
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
- }, "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
- });
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
- 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);
98
+ };
99
+ };
100
+ }
101
+ __name(requestHandlerValidator, "requestHandlerValidator");
158
102
 
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);
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
- }, "addNodeRoutes");
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/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
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
- 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");
151
+ res.json(observation);
152
+ })
153
+ };
252
154
 
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");
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/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);
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
- }, "addRpcRoutes");
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
- addRpcRoutes(app);
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((node) => {
331
+ var getApp = /* @__PURE__ */ __name(() => {
293
332
  addInstrumentation();
294
- const app = express2();
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 as assertEx5 } from "@xylabs/assert";
314
- import { isDefined as isDefined3, isString } from "@xylabs/typeof";
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 { 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));
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;