@xyo-network/chain-reward-redemption 1.15.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +165 -0
- package/README.md +96 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.mjs +461 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/manifest/getLocator.d.ts +14 -0
- package/dist/node/manifest/getLocator.d.ts.map +1 -0
- package/dist/node/manifest/getNode.d.ts +15 -0
- package/dist/node/manifest/getNode.d.ts.map +1 -0
- package/dist/node/manifest/index.d.ts +6 -0
- package/dist/node/manifest/index.d.ts.map +1 -0
- package/dist/node/manifest/nodeManifest.d.ts +6 -0
- package/dist/node/manifest/nodeManifest.d.ts.map +1 -0
- package/dist/node/manifest/private/index.d.ts +5 -0
- package/dist/node/manifest/private/index.d.ts.map +1 -0
- package/dist/node/manifest/public/index.d.ts +6 -0
- package/dist/node/manifest/public/index.d.ts.map +1 -0
- package/dist/node/server/app.d.ts +4 -0
- package/dist/node/server/app.d.ts.map +1 -0
- package/dist/node/server/index.d.ts +11 -0
- package/dist/node/server/index.d.ts.map +1 -0
- package/dist/node/server/instrumentation.d.ts +9 -0
- package/dist/node/server/instrumentation.d.ts.map +1 -0
- package/dist/node/server/routes/addRoutes.d.ts +3 -0
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts +4 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts.map +1 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts +3 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/get.d.ts +4 -0
- package/dist/node/server/routes/address/get/get.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/index.d.ts +2 -0
- package/dist/node/server/routes/address/get/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/index.d.ts +2 -0
- package/dist/node/server/routes/address/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts +6 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/index.d.ts +2 -0
- package/dist/node/server/routes/address/post/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/post.d.ts +8 -0
- package/dist/node/server/routes/address/post/post.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts +3 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts +10 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/index.d.ts +2 -0
- package/dist/node/server/routes/dataLake/index.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/get.d.ts +4 -0
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/index.d.ts +2 -0
- package/dist/node/server/routes/healthz/index.d.ts.map +1 -0
- package/dist/node/server/routes/index.d.ts +4 -0
- package/dist/node/server/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/addRewardRoutes.d.ts +3 -0
- package/dist/node/server/routes/rewardRedemption/addRewardRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/index.d.ts +2 -0
- package/dist/node/server/routes/rewardRedemption/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/middleware/index.d.ts +2 -0
- package/dist/node/server/routes/rewardRedemption/middleware/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/middleware/requestHandlerValidator.d.ts +32 -0
- package/dist/node/server/routes/rewardRedemption/middleware/requestHandlerValidator.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.d.ts +3 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/index.d.ts +2 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/pathParams/AddressPathParam.d.ts +2 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/pathParams/AddressPathParam.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/pathParams/index.d.ts +2 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/pathParams/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routeDefinition.d.ts +8 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routeDefinition.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/claim.d.ts +3 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/claim.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/index.d.ts +3 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/redeem.d.ts +3 -0
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/redeem.d.ts.map +1 -0
- package/dist/node/server/server.d.ts +11 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/package.json +137 -0
- package/src/index.ts +1 -0
- package/src/manifest/getLocator.ts +75 -0
- package/src/manifest/getNode.ts +32 -0
- package/src/manifest/index.ts +5 -0
- package/src/manifest/node.json +32 -0
- package/src/manifest/nodeManifest.ts +8 -0
- package/src/manifest/private/index.ts +4 -0
- package/src/manifest/public/index.ts +6 -0
- package/src/server/app.ts +30 -0
- package/src/server/index.ts +13 -0
- package/src/server/instrumentation.ts +15 -0
- package/src/server/routes/addRoutes.ts +9 -0
- package/src/server/routes/address/AddressPathParams.ts +3 -0
- package/src/server/routes/address/addNodeRoutes.ts +21 -0
- package/src/server/routes/address/get/get.ts +33 -0
- package/src/server/routes/address/get/index.ts +1 -0
- package/src/server/routes/address/index.ts +1 -0
- package/src/server/routes/address/post/getQueryConfig.ts +23 -0
- package/src/server/routes/address/post/index.ts +1 -0
- package/src/server/routes/address/post/post.ts +77 -0
- package/src/server/routes/dataLake/addDataLakeRoutes.ts +9 -0
- package/src/server/routes/dataLake/archivistMiddleware.ts +86 -0
- package/src/server/routes/dataLake/index.ts +1 -0
- package/src/server/routes/healthz/get.ts +20 -0
- package/src/server/routes/healthz/index.ts +1 -0
- package/src/server/routes/index.ts +3 -0
- package/src/server/routes/rewardRedemption/addRewardRoutes.ts +10 -0
- package/src/server/routes/rewardRedemption/index.ts +1 -0
- package/src/server/routes/rewardRedemption/middleware/index.ts +1 -0
- package/src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts +120 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts +9 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/index.ts +1 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/pathParams/AddressPathParam.ts +1 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/pathParams/index.ts +1 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/routeDefinition.ts +18 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/routes/claim.ts +31 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/routes/index.ts +2 -0
- package/src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts +26 -0
- package/src/server/server.ts +58 -0
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/server/app.ts
|
|
5
|
+
import { customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler, standardErrors, standardResponses } from "@xylabs/express";
|
|
6
|
+
import compression from "compression";
|
|
7
|
+
import cors from "cors";
|
|
8
|
+
import express2 from "express";
|
|
9
|
+
|
|
10
|
+
// src/server/instrumentation.ts
|
|
11
|
+
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
12
|
+
import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
|
|
13
|
+
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
|
|
14
|
+
var addInstrumentation = /* @__PURE__ */ __name(() => {
|
|
15
|
+
const instrumentations = [
|
|
16
|
+
new HttpInstrumentation(),
|
|
17
|
+
new ExpressInstrumentation()
|
|
18
|
+
];
|
|
19
|
+
registerInstrumentations({
|
|
20
|
+
instrumentations
|
|
21
|
+
});
|
|
22
|
+
}, "addInstrumentation");
|
|
23
|
+
|
|
24
|
+
// src/server/routes/dataLake/archivistMiddleware.ts
|
|
25
|
+
import { setRawResponseFormat } from "@xylabs/express";
|
|
26
|
+
import { asHash } from "@xylabs/hex";
|
|
27
|
+
import { isDefined } from "@xylabs/typeof";
|
|
28
|
+
import { asArchivistInstance } from "@xyo-network/archivist-model";
|
|
29
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
30
|
+
import { isAnyPayload, isSequence } from "@xyo-network/payload-model";
|
|
31
|
+
import express from "express";
|
|
32
|
+
var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
|
|
33
|
+
const mod = await node.resolve(archivistModuleIdentifier);
|
|
34
|
+
return asArchivistInstance(mod, {
|
|
35
|
+
required: true
|
|
36
|
+
});
|
|
37
|
+
}, "resolveArchivist");
|
|
38
|
+
var archivistInstance;
|
|
39
|
+
var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
|
|
40
|
+
if (isDefined(archivistInstance)) return archivistInstance;
|
|
41
|
+
archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
|
|
42
|
+
return archivistInstance;
|
|
43
|
+
}, "getArchivist");
|
|
44
|
+
var archivistMiddleware = /* @__PURE__ */ __name((options) => {
|
|
45
|
+
const { node, archivistModuleIdentifier } = options;
|
|
46
|
+
const router = express.Router({
|
|
47
|
+
mergeParams: true
|
|
48
|
+
});
|
|
49
|
+
router.post("/insert", async (req, res) => {
|
|
50
|
+
setRawResponseFormat(res);
|
|
51
|
+
const body3 = Array.isArray(req.body) ? req.body : [
|
|
52
|
+
req.body
|
|
53
|
+
];
|
|
54
|
+
const payloads = (await PayloadBuilder.hashPairs(body3)).map((p) => p[0]);
|
|
55
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
56
|
+
const result = await archivist.insert(payloads);
|
|
57
|
+
res.status(200).json(result);
|
|
58
|
+
});
|
|
59
|
+
router.get("/next", async (req, res) => {
|
|
60
|
+
setRawResponseFormat(res);
|
|
61
|
+
const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
|
|
62
|
+
const limit = isDefined(req.query.limit) ? Number(req.query.limit) : void 0;
|
|
63
|
+
const open = isDefined(req.query.open) ? Boolean(req.query.open) : void 0;
|
|
64
|
+
const order = req.query.order === "asc" ? "asc" : "desc";
|
|
65
|
+
const options2 = {
|
|
66
|
+
limit,
|
|
67
|
+
open,
|
|
68
|
+
order,
|
|
69
|
+
cursor
|
|
70
|
+
};
|
|
71
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
72
|
+
const result = await archivist.next(options2);
|
|
73
|
+
res.status(200).json(result);
|
|
74
|
+
});
|
|
75
|
+
router.post("/next", async (req, res) => {
|
|
76
|
+
setRawResponseFormat(res);
|
|
77
|
+
const options2 = req.body;
|
|
78
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
79
|
+
const result = await (isDefined(options2) ? archivist.next(options2) : archivist.next());
|
|
80
|
+
res.status(200).json(result);
|
|
81
|
+
});
|
|
82
|
+
router.get("/get/:hash", async (req, res) => {
|
|
83
|
+
setRawResponseFormat(res);
|
|
84
|
+
const { hash: rawHash } = req.params;
|
|
85
|
+
const hash = asHash(rawHash);
|
|
86
|
+
if (isDefined(hash)) {
|
|
87
|
+
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
88
|
+
const [payload] = await archivist.get([
|
|
89
|
+
hash
|
|
90
|
+
]);
|
|
91
|
+
if (isAnyPayload(payload)) {
|
|
92
|
+
res.json(payload);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
res.status(400).send();
|
|
97
|
+
});
|
|
98
|
+
return router;
|
|
99
|
+
}, "archivistMiddleware");
|
|
100
|
+
|
|
101
|
+
// src/server/routes/dataLake/addDataLakeRoutes.ts
|
|
102
|
+
var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
103
|
+
const { node } = app;
|
|
104
|
+
const archivistModuleIdentifier = "RewardsArchivist";
|
|
105
|
+
app.use("/data", archivistMiddleware({
|
|
106
|
+
node,
|
|
107
|
+
archivistModuleIdentifier
|
|
108
|
+
}));
|
|
109
|
+
}, "addDataLakeRoutes");
|
|
110
|
+
|
|
111
|
+
// src/server/routes/rewardRedemption/routeDefinitions/routes/claim.ts
|
|
112
|
+
import { PayloadZodLoose } from "@xyo-network/payload-model";
|
|
113
|
+
import { z as z2 } from "zod";
|
|
114
|
+
|
|
115
|
+
// src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts
|
|
116
|
+
import { isPromise } from "@xylabs/typeof";
|
|
117
|
+
import { ReasonPhrases, StatusCodes } from "http-status-codes";
|
|
118
|
+
import { z } from "zod";
|
|
119
|
+
var EmptyParamsZod = z.object({}).catchall(z.string());
|
|
120
|
+
var EmptyQueryParamsZod = z.object({}).catchall(z.union([
|
|
121
|
+
z.string(),
|
|
122
|
+
z.array(z.string())
|
|
123
|
+
]));
|
|
124
|
+
var ValidateRequestDefaults = {
|
|
125
|
+
params: EmptyParamsZod,
|
|
126
|
+
query: EmptyQueryParamsZod,
|
|
127
|
+
body: z.json(),
|
|
128
|
+
response: z.json()
|
|
129
|
+
};
|
|
130
|
+
function requestHandlerValidator(schemas) {
|
|
131
|
+
const validators = {
|
|
132
|
+
...ValidateRequestDefaults,
|
|
133
|
+
...schemas
|
|
134
|
+
};
|
|
135
|
+
return (handler) => {
|
|
136
|
+
return async (req, res, next) => {
|
|
137
|
+
const originalJson = res.json.bind(res);
|
|
138
|
+
try {
|
|
139
|
+
const errors = [];
|
|
140
|
+
const keys = [
|
|
141
|
+
"params",
|
|
142
|
+
"query",
|
|
143
|
+
"body"
|
|
144
|
+
];
|
|
145
|
+
for (const key of keys) {
|
|
146
|
+
const validator = validators[key];
|
|
147
|
+
const result2 = validator.safeParse(req[key]);
|
|
148
|
+
if (result2.success) {
|
|
149
|
+
Object.assign(req[key], result2.data);
|
|
150
|
+
} else {
|
|
151
|
+
errors.push(...result2.error.issues.map((issue) => issue.path.length === 0 ? `${key}: ${issue.message}` : `${key}.${issue.path.join(".")}: ${issue.message}`));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (errors.length > 0) {
|
|
155
|
+
const message = errors.join("; ");
|
|
156
|
+
const err = new Error(message);
|
|
157
|
+
err.name = ReasonPhrases.BAD_REQUEST;
|
|
158
|
+
err.statusCode = StatusCodes.BAD_REQUEST;
|
|
159
|
+
next(err);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
res.json = (data) => {
|
|
163
|
+
const result2 = validators.response.safeParse(data);
|
|
164
|
+
if (result2.success) {
|
|
165
|
+
return originalJson(result2.data);
|
|
166
|
+
} else {
|
|
167
|
+
const message = result2.error.issues.map((issue) => issue.path.length === 0 ? `response: ${issue.message}` : `response.${issue.path.join(".")}: ${issue.message}`).join("; ");
|
|
168
|
+
const err = new Error(message);
|
|
169
|
+
err.name = ReasonPhrases.INTERNAL_SERVER_ERROR;
|
|
170
|
+
err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR;
|
|
171
|
+
res.json = originalJson;
|
|
172
|
+
throw err;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const result = handler(req, res, next);
|
|
176
|
+
if (result && isPromise(result)) {
|
|
177
|
+
await result;
|
|
178
|
+
}
|
|
179
|
+
} catch (err) {
|
|
180
|
+
res.json = originalJson;
|
|
181
|
+
next(err);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
__name(requestHandlerValidator, "requestHandlerValidator");
|
|
187
|
+
|
|
188
|
+
// src/server/routes/rewardRedemption/routeDefinitions/pathParams/AddressPathParam.ts
|
|
189
|
+
import { EthAddressFromStringZod } from "@xylabs/hex";
|
|
190
|
+
|
|
191
|
+
// src/server/routes/rewardRedemption/routeDefinitions/routes/claim.ts
|
|
192
|
+
var params = z2.object({
|
|
193
|
+
address: EthAddressFromStringZod
|
|
194
|
+
});
|
|
195
|
+
var body = PayloadZodLoose;
|
|
196
|
+
var response = PayloadZodLoose;
|
|
197
|
+
var validateRequest = requestHandlerValidator({
|
|
198
|
+
params,
|
|
199
|
+
body,
|
|
200
|
+
response
|
|
201
|
+
});
|
|
202
|
+
var postClaim = {
|
|
203
|
+
method: "post",
|
|
204
|
+
path: "/rewards/claim/:address",
|
|
205
|
+
handlers: validateRequest(async (req, res) => {
|
|
206
|
+
const { address } = req.params;
|
|
207
|
+
await Promise.resolve();
|
|
208
|
+
const observation = {
|
|
209
|
+
schema: "network.xyo.test"
|
|
210
|
+
};
|
|
211
|
+
res.json(observation);
|
|
212
|
+
})
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts
|
|
216
|
+
import { PayloadZodLoose as PayloadZodLoose2 } from "@xyo-network/payload-model";
|
|
217
|
+
import { z as z3 } from "zod";
|
|
218
|
+
var params2 = z3.object({
|
|
219
|
+
address: EthAddressFromStringZod
|
|
220
|
+
});
|
|
221
|
+
var body2 = PayloadZodLoose2;
|
|
222
|
+
var response2 = PayloadZodLoose2;
|
|
223
|
+
var validateRequest2 = requestHandlerValidator({
|
|
224
|
+
params: params2,
|
|
225
|
+
body: body2,
|
|
226
|
+
response: response2
|
|
227
|
+
});
|
|
228
|
+
var postRedeem = {
|
|
229
|
+
method: "post",
|
|
230
|
+
path: "/rewards/redeem/:address",
|
|
231
|
+
handlers: validateRequest2(async (req, res) => {
|
|
232
|
+
const { body: body3 } = req;
|
|
233
|
+
await Promise.resolve();
|
|
234
|
+
const bridgeObservation = {
|
|
235
|
+
schema: "network.xyo.test"
|
|
236
|
+
};
|
|
237
|
+
res.json(bridgeObservation);
|
|
238
|
+
})
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts
|
|
242
|
+
var getRouteDefinitions = /* @__PURE__ */ __name(() => {
|
|
243
|
+
return [
|
|
244
|
+
postClaim,
|
|
245
|
+
postRedeem
|
|
246
|
+
];
|
|
247
|
+
}, "getRouteDefinitions");
|
|
248
|
+
|
|
249
|
+
// src/server/routes/rewardRedemption/addRewardRoutes.ts
|
|
250
|
+
var addRewardRedemptionRoutes = /* @__PURE__ */ __name((app) => {
|
|
251
|
+
const routeDefinitions = getRouteDefinitions();
|
|
252
|
+
for (const definition of routeDefinitions) {
|
|
253
|
+
app[definition.method](definition.path, definition.handlers);
|
|
254
|
+
}
|
|
255
|
+
}, "addRewardRedemptionRoutes");
|
|
256
|
+
|
|
257
|
+
// src/server/routes/addRoutes.ts
|
|
258
|
+
var addRoutes = /* @__PURE__ */ __name((app) => {
|
|
259
|
+
addDataLakeRoutes(app);
|
|
260
|
+
addRewardRedemptionRoutes(app);
|
|
261
|
+
}, "addRoutes");
|
|
262
|
+
|
|
263
|
+
// src/server/app.ts
|
|
264
|
+
var getApp = /* @__PURE__ */ __name((node) => {
|
|
265
|
+
addInstrumentation();
|
|
266
|
+
const app = express2();
|
|
267
|
+
app.set("etag", false);
|
|
268
|
+
app.use(cors());
|
|
269
|
+
app.use(compression());
|
|
270
|
+
app.use(responseProfiler);
|
|
271
|
+
app.use(getJsonBodyParser(getJsonBodyParserOptions({
|
|
272
|
+
limit: "1mb"
|
|
273
|
+
})));
|
|
274
|
+
app.use(standardResponses);
|
|
275
|
+
disableExpressDefaultPoweredByHeader(app);
|
|
276
|
+
app.use(customPoweredByHeader);
|
|
277
|
+
disableCaseSensitiveRouting(app);
|
|
278
|
+
app.node = node;
|
|
279
|
+
addRoutes(app);
|
|
280
|
+
app.use(standardErrors);
|
|
281
|
+
return app;
|
|
282
|
+
}, "getApp");
|
|
283
|
+
|
|
284
|
+
// src/server/server.ts
|
|
285
|
+
import { assertEx } from "@xylabs/assert";
|
|
286
|
+
import { isDefined as isDefined3, isString } from "@xylabs/typeof";
|
|
287
|
+
import { boot } from "@xyo-network/bios";
|
|
288
|
+
import { HDWallet } from "@xyo-network/wallet";
|
|
289
|
+
|
|
290
|
+
// src/manifest/getLocator.ts
|
|
291
|
+
import { isDefined as isDefined2 } from "@xylabs/typeof";
|
|
292
|
+
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
293
|
+
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
294
|
+
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
295
|
+
import { ArchivistSyncDiviner } from "@xyo-network/chain-modules";
|
|
296
|
+
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
297
|
+
import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
|
|
298
|
+
import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
|
|
299
|
+
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
300
|
+
import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
|
|
301
|
+
var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
302
|
+
const { config, logger } = context;
|
|
303
|
+
const { otlpEndpoint } = config.telemetry?.otel ?? {};
|
|
304
|
+
const { traceProvider, meterProvider } = await initTelemetry({
|
|
305
|
+
attributes: {
|
|
306
|
+
serviceName: "xl1-rewards",
|
|
307
|
+
serviceVersion: "1.0.0"
|
|
308
|
+
},
|
|
309
|
+
otlpEndpoint,
|
|
310
|
+
metricsConfig: {
|
|
311
|
+
endpoint: "/metrics",
|
|
312
|
+
port: 9465
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
if (isDefined2(logger)) AbstractModule.defaultLogger = logger;
|
|
316
|
+
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
317
|
+
const locator = new ModuleFactoryLocator();
|
|
318
|
+
const mongoConfig = config.storage?.mongo;
|
|
319
|
+
if (hasMongoConfig(mongoConfig)) {
|
|
320
|
+
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
321
|
+
const payloadSdkConfig = {
|
|
322
|
+
dbConnectionString,
|
|
323
|
+
dbDomain,
|
|
324
|
+
dbName,
|
|
325
|
+
dbPassword,
|
|
326
|
+
dbUserName
|
|
327
|
+
};
|
|
328
|
+
const params3 = {
|
|
329
|
+
meterProvider,
|
|
330
|
+
payloadSdkConfig,
|
|
331
|
+
statusReporter,
|
|
332
|
+
traceProvider
|
|
333
|
+
};
|
|
334
|
+
locator.register(MongoDBArchivistV2.factory(params3), void 0, true);
|
|
335
|
+
}
|
|
336
|
+
locator.register(MemoryArchivist.factory({
|
|
337
|
+
traceProvider,
|
|
338
|
+
meterProvider,
|
|
339
|
+
statusReporter
|
|
340
|
+
}));
|
|
341
|
+
locator.register(MemorySentinel.factory({
|
|
342
|
+
traceProvider,
|
|
343
|
+
meterProvider,
|
|
344
|
+
statusReporter
|
|
345
|
+
}));
|
|
346
|
+
locator.register(ViewArchivist.factory({
|
|
347
|
+
traceProvider,
|
|
348
|
+
meterProvider,
|
|
349
|
+
statusReporter
|
|
350
|
+
}));
|
|
351
|
+
locator.register(ArchivistSyncDiviner.factory({
|
|
352
|
+
traceProvider,
|
|
353
|
+
meterProvider,
|
|
354
|
+
statusReporter
|
|
355
|
+
}));
|
|
356
|
+
return locator;
|
|
357
|
+
}, "getLocator");
|
|
358
|
+
|
|
359
|
+
// src/manifest/getNode.ts
|
|
360
|
+
import { ManifestWrapper } from "@xyo-network/manifest-wrapper";
|
|
361
|
+
|
|
362
|
+
// src/manifest/node.json
|
|
363
|
+
var node_default = {
|
|
364
|
+
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
365
|
+
nodes: [
|
|
366
|
+
{
|
|
367
|
+
config: {
|
|
368
|
+
accountPath: "44'/60'/1",
|
|
369
|
+
name: "XYORewardRedemptionNode",
|
|
370
|
+
schema: "network.xyo.node.config"
|
|
371
|
+
},
|
|
372
|
+
modules: {
|
|
373
|
+
private: [],
|
|
374
|
+
public: [
|
|
375
|
+
{
|
|
376
|
+
config: {
|
|
377
|
+
accountPath: "1/1/1",
|
|
378
|
+
name: "Data",
|
|
379
|
+
getCache: {
|
|
380
|
+
enabled: true,
|
|
381
|
+
maxEntries: 5e3
|
|
382
|
+
},
|
|
383
|
+
payloadSdkConfig: {
|
|
384
|
+
collection: "reward_redemption_api_datalake"
|
|
385
|
+
},
|
|
386
|
+
schema: "network.xyo.archivist.config"
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
]
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
],
|
|
393
|
+
schema: "network.xyo.manifest"
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
// src/manifest/nodeManifest.ts
|
|
397
|
+
var NodeManifest = node_default;
|
|
398
|
+
|
|
399
|
+
// src/manifest/private/index.ts
|
|
400
|
+
var PrivateChildManifests = [];
|
|
401
|
+
|
|
402
|
+
// src/manifest/public/index.ts
|
|
403
|
+
var PublicChildManifests = [];
|
|
404
|
+
|
|
405
|
+
// src/manifest/getNode.ts
|
|
406
|
+
var getNode = /* @__PURE__ */ __name(async (context) => {
|
|
407
|
+
const { wallet } = context;
|
|
408
|
+
const locator = await getLocator(context);
|
|
409
|
+
const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
|
|
410
|
+
const [node, ...childNodes] = await wrapper.loadNodes();
|
|
411
|
+
if (childNodes?.length > 0) {
|
|
412
|
+
await Promise.all(childNodes.map((childNode) => node.register(childNode)));
|
|
413
|
+
await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
|
|
414
|
+
}
|
|
415
|
+
return node;
|
|
416
|
+
}, "getNode");
|
|
417
|
+
|
|
418
|
+
// src/server/server.ts
|
|
419
|
+
var hostname = "::";
|
|
420
|
+
var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
421
|
+
const storedSeedPhrase = await bios.seedPhraseStore.get("os");
|
|
422
|
+
logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`);
|
|
423
|
+
const { mnemonic } = config.api;
|
|
424
|
+
if (isString(storedSeedPhrase) && isString(mnemonic)) {
|
|
425
|
+
logger?.warn("[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
|
|
426
|
+
await bios.seedPhraseStore.set("os", mnemonic);
|
|
427
|
+
} else {
|
|
428
|
+
let seedPhrase;
|
|
429
|
+
if (isString(mnemonic)) {
|
|
430
|
+
seedPhrase = mnemonic;
|
|
431
|
+
} else {
|
|
432
|
+
seedPhrase = HDWallet.generateMnemonic();
|
|
433
|
+
logger?.log("[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.");
|
|
434
|
+
logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`);
|
|
435
|
+
}
|
|
436
|
+
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
437
|
+
}
|
|
438
|
+
return assertEx(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
439
|
+
}, "getSeedPhrase");
|
|
440
|
+
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
441
|
+
const { logger, config } = context;
|
|
442
|
+
const { port, mnemonic } = config.rewardRedemptionApi;
|
|
443
|
+
const bios = await boot();
|
|
444
|
+
const seedPhrase = isDefined3(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
445
|
+
const wallet = await HDWallet.fromPhrase(seedPhrase);
|
|
446
|
+
const nodeContext = {
|
|
447
|
+
wallet,
|
|
448
|
+
logger,
|
|
449
|
+
config
|
|
450
|
+
};
|
|
451
|
+
const node = context.node ?? await getNode(nodeContext);
|
|
452
|
+
const app = getApp(node);
|
|
453
|
+
const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`));
|
|
454
|
+
server.setTimeout(2e4);
|
|
455
|
+
return server;
|
|
456
|
+
}, "getServer");
|
|
457
|
+
export {
|
|
458
|
+
getApp,
|
|
459
|
+
getServer
|
|
460
|
+
};
|
|
461
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claim.ts","../../src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts","../../src/server/routes/rewardRedemption/routeDefinitions/pathParams/AddressPathParam.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts","../../src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts","../../src/server/routes/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/manifest/getLocator.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'RewardsArchivist'\n app.use('/data', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { PayloadZodLoose } from '@xyo-network/payload-model'\nimport { z } from 'zod'\n\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport { AddressPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\n\nconst params = z.object({ address: AddressPathParam })\nconst body = PayloadZodLoose\n\nconst response = PayloadZodLoose\n\nconst validateRequest = requestHandlerValidator({\n params,\n body,\n response,\n})\n\nexport const postClaim: RouteDefinition = {\n method: 'post',\n path: '/rewards/claim/:address',\n handlers: validateRequest(async (req, res) => {\n const { address } = req.params\n // TODO: Validate ETH address\n // TODO: Redeem claim for existing rewards\n // TODO: Return response payload\n await Promise.resolve()\n const observation = { schema: 'network.xyo.test' }\n res.json(observation)\n }),\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ExpressError } from '@xylabs/express'\nimport { isPromise } from '@xylabs/typeof'\nimport type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\nimport type { ZodType } from 'zod'\nimport { z } from 'zod'\n\n/**\n * Empty Zod schema for requests with no parameters.\n */\nexport const EmptyParamsZod = z.object({}).catchall(z.string())\n\n/**\n * Empty Zod schema for requests with no query parameters.\n */\nexport const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))\n\n/**\n * Default validation schemas for request handler validator.\n */\nexport const ValidateRequestDefaults = {\n params: EmptyParamsZod,\n query: EmptyQueryParamsZod,\n body: z.json(),\n response: z.json(),\n}\n\ntype ValidatableRequestKey = 'params' | 'query' | 'body'\n\n/**\n * Factory for Express middleware that validates request and response objects using Zod schemas.\n * @param schemas The Zod schemas to use for validation.\n * @returns A middleware function for validating requests and responses.\n */\nexport function requestHandlerValidator<\n TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,\n TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,\n TBody extends ZodType<unknown> = ZodType<unknown>,\n TResponse extends ZodType<unknown> = ZodType<unknown>,\n>(schemas?: Partial<{\n body: TBody\n params: TParams\n query: TQuery\n response: TResponse\n}>) {\n type Params = z.infer<TParams>\n type Query = z.infer<TQuery>\n type Body = z.infer<TBody>\n type Res = z.infer<TResponse>\n const validators = { ...ValidateRequestDefaults, ...schemas }\n\n return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const originalJson = res.json.bind(res)\n try {\n // Validate incoming request\n const errors: string[] = []\n const keys: ValidatableRequestKey[] = ['params', 'query', 'body']\n for (const key of keys) {\n const validator = validators[key]\n const result = validator.safeParse(req[key])\n if (result.success) {\n Object.assign(req[key], result.data)\n } else {\n errors.push(\n ...result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `${key}: ${issue.message}`\n : `${key}.${issue.path.join('.')}: ${issue.message}`,\n ),\n )\n }\n }\n\n // If there were validation errors, short-circuit and return Bad Request\n if (errors.length > 0) {\n const message = errors.join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.BAD_REQUEST\n err.statusCode = StatusCodes.BAD_REQUEST\n next(err)\n return false\n }\n\n // Wrap res.json to validate outgoing response\n res.json = (data: any) => {\n const result = validators.response.safeParse(data)\n if (result.success) {\n return originalJson(result.data)\n } else {\n const message = result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `response: ${issue.message}`\n : `response.${issue.path.join('.')}: ${issue.message}`,\n ).join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.INTERNAL_SERVER_ERROR\n err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR\n\n // Restore original json function in case the error handler wants to use it\n res.json = originalJson\n throw err\n }\n }\n\n // Automatically handle async errors\n const result = handler(req as any, res as any, next)\n if (result && isPromise(result)) {\n await result\n }\n } catch (err) {\n res.json = originalJson\n next(err)\n }\n }\n }\n}\n","export { EthAddressFromStringZod as AddressPathParam } from '@xylabs/hex'\n","import { PayloadZodLoose } from '@xyo-network/payload-model'\nimport { z } from 'zod'\n\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport { AddressPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\n\nconst params = z.object({ address: AddressPathParam })\nconst body = PayloadZodLoose\nconst response = PayloadZodLoose\nconst validateRequest = requestHandlerValidator({\n params,\n body,\n response,\n})\n\nexport const postRedeem: RouteDefinition = {\n method: 'post',\n path: '/rewards/redeem/:address',\n handlers: validateRequest(async (req, res) => {\n const { body } = req\n await Promise.resolve()\n const bridgeObservation = { schema: 'network.xyo.test' }\n res.json(bridgeObservation)\n }),\n}\n","import type { RouteDefinition } from './routeDefinition.ts'\nimport { postClaim, postRedeem } from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n postClaim,\n postRedeem,\n ]\n}\n","import type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.rewardRedemptionApi\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const node = context.node ?? await getNode(nodeContext)\n const app = getApp(node)\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import type { Logger } from '@xylabs/logger'\nimport { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-rewards',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ArchivistSyncDiviner.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYORewardRedemptionNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Data\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"reward_redemption_api_datalake\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","PayloadZodLoose","z","isPromise","ReasonPhrases","StatusCodes","z","EmptyParamsZod","z","object","catchall","string","EmptyQueryParamsZod","union","array","ValidateRequestDefaults","params","query","body","json","response","requestHandlerValidator","schemas","validators","handler","req","res","next","originalJson","bind","errors","keys","key","validator","result","safeParse","success","Object","assign","data","push","error","issues","map","issue","path","length","message","join","err","Error","name","ReasonPhrases","BAD_REQUEST","statusCode","StatusCodes","INTERNAL_SERVER_ERROR","isPromise","AddressPathParam","params","z","object","address","AddressPathParam","body","PayloadZodLoose","response","validateRequest","requestHandlerValidator","postClaim","method","path","handlers","req","res","Promise","resolve","observation","schema","json","PayloadZodLoose","z","params","z","object","address","AddressPathParam","body","PayloadZodLoose","response","validateRequest","requestHandlerValidator","postRedeem","method","path","handlers","req","res","Promise","resolve","bridgeObservation","schema","json","getRouteDefinitions","postClaim","postRedeem","addRewardRedemptionRoutes","app","routeDefinitions","getRouteDefinitions","definition","method","path","handlers","addRoutes","app","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","ArchivistSyncDiviner","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","ArchivistSyncDiviner","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","rewardRedemptionApi","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Logger } from '@xylabs/logger';
|
|
2
|
+
import { ModuleFactoryLocator } from '@xyo-network/module-factory-locator';
|
|
3
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
4
|
+
export interface GetLocatorContext {
|
|
5
|
+
config: Config;
|
|
6
|
+
logger?: Logger;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Used for retrieving a locator with the necessary modules registered for testing
|
|
10
|
+
* operation of the node (entirely in memory)
|
|
11
|
+
* @returns A locator with the necessary modules registered
|
|
12
|
+
*/
|
|
13
|
+
export declare const getLocator: (context: GetLocatorContext) => Promise<ModuleFactoryLocator>;
|
|
14
|
+
//# sourceMappingURL=getLocator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLocator.d.ts","sourceRoot":"","sources":["../../../src/manifest/getLocator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAS5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAG3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,kCAiD1D,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Logger } from '@xylabs/logger';
|
|
2
|
+
import type { WalletInstance } from '@xyo-network/wallet-model';
|
|
3
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
4
|
+
export interface GetNodeContext {
|
|
5
|
+
config: Config;
|
|
6
|
+
logger?: Logger;
|
|
7
|
+
wallet: WalletInstance;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a node with the xyo-chain modules registered
|
|
11
|
+
* @param context The context to use for the node
|
|
12
|
+
* @returns A node with the xyo-chain modules registered
|
|
13
|
+
*/
|
|
14
|
+
export declare const getNode: (context: GetNodeContext) => Promise<import("@xyo-network/node-memory").MemoryNode<import("@xyo-network/node-memory").MemoryNodeParams, import("@xyo-network/node-model").NodeModuleEventData>>;
|
|
15
|
+
//# sourceMappingURL=getNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNode.d.ts","sourceRoot":"","sources":["../../../src/manifest/getNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAO3D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;CACvB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAU,SAAS,cAAc,uKAUpD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeManifest.d.ts","sourceRoot":"","sources":["../../../src/manifest/nodeManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAIzE;;GAEG;AACH,eAAO,MAAM,YAAY,EAAW,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/manifest/private/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB,SAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/manifest/public/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,6BAA6B,CAAA;AAEzF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAAO,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAG3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GAAI,MAAM,YAAY,KAAG,OAgB3C,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './app.ts';
|
|
2
|
+
export * from './server.ts';
|
|
3
|
+
import type { NodeInstance } from '@xyo-network/node-model';
|
|
4
|
+
declare global {
|
|
5
|
+
namespace Express {
|
|
6
|
+
interface Application {
|
|
7
|
+
node: NodeInstance;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|