@xyo-network/chain-reward-redemption 1.16.5 → 1.16.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/index.mjs +37 -107
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.d.ts.map +1 -1
- package/dist/node/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.d.ts +1 -9
- package/dist/node/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.d.ts.map +1 -1
- package/dist/node/server/routes/rewardRedemption/addRewardRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.d.ts +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.d.ts.map +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.d.ts +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.d.ts.map +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/redeem.d.ts +1 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routes/redeem.d.ts.map +1 -1
- package/package.json +55 -56
- package/src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts +6 -4
- package/src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts +2 -10
- package/src/server/routes/rewardRedemption/addRewardRoutes.ts +2 -3
- package/src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts +2 -1
- package/src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts +6 -6
- package/src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts +2 -3
- package/dist/node/server/routes/rewardRedemption/middleware/index.d.ts +0 -2
- package/dist/node/server/routes/rewardRedemption/middleware/index.d.ts.map +0 -1
- package/dist/node/server/routes/rewardRedemption/middleware/requestHandlerValidator.d.ts +0 -32
- package/dist/node/server/routes/rewardRedemption/middleware/requestHandlerValidator.d.ts.map +0 -1
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routeDefinition.d.ts +0 -8
- package/dist/node/server/routes/rewardRedemption/routeDefinitions/routeDefinition.d.ts.map +0 -1
- package/src/server/routes/rewardRedemption/middleware/index.ts +0 -1
- package/src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts +0 -120
- package/src/server/routes/rewardRedemption/routeDefinitions/routeDefinition.ts +0 -18
package/dist/node/index.mjs
CHANGED
|
@@ -111,15 +111,19 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
|
111
111
|
}));
|
|
112
112
|
}, "addDataLakeRoutes");
|
|
113
113
|
|
|
114
|
+
// src/server/routes/rewardRedemption/addRewardRoutes.ts
|
|
115
|
+
import { addRouteDefinitions } from "@xylabs/express";
|
|
116
|
+
|
|
114
117
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
|
|
115
118
|
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
116
|
-
import {
|
|
119
|
+
import { requestHandlerValidator } from "@xylabs/express";
|
|
120
|
+
import { isDefined as isDefined5 } from "@xylabs/typeof";
|
|
117
121
|
import { blockRangeSteps as blockRangeSteps2 } from "@xyo-network/chain-protocol";
|
|
118
122
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
119
123
|
import { PayloadZodLoose } from "@xyo-network/payload-model";
|
|
120
124
|
import { asSentinelInstance } from "@xyo-network/sentinel-model";
|
|
121
|
-
import {
|
|
122
|
-
import { z as
|
|
125
|
+
import { asXL1BlockRange as asXL1BlockRange2 } from "@xyo-network/xl1-protocol";
|
|
126
|
+
import { z as z2 } from "zod";
|
|
123
127
|
|
|
124
128
|
// src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts
|
|
125
129
|
import { assertEx } from "@xylabs/assert";
|
|
@@ -128,14 +132,14 @@ import { toAddress } from "@xylabs/hex";
|
|
|
128
132
|
import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
|
|
129
133
|
import { blockRangeSteps, createTransferPayload } from "@xyo-network/chain-protocol";
|
|
130
134
|
import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
|
|
131
|
-
import { asXL1BlockNumber, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
135
|
+
import { asXL1BlockNumber, asXL1BlockRange, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
132
136
|
import { completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions, SimpleXyoGatewayRunner } from "@xyo-network/xl1-protocol-sdk";
|
|
133
137
|
import { Mutex } from "async-mutex";
|
|
134
138
|
|
|
135
139
|
// src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts
|
|
136
140
|
import { AsObjectFactory } from "@xylabs/object";
|
|
137
141
|
import { isPayloadOfZodType } from "@xyo-network/payload-model";
|
|
138
|
-
import { StepIdentityZod } from "@xyo-network/xl1-
|
|
142
|
+
import { StepIdentityZod } from "@xyo-network/xl1-protocol";
|
|
139
143
|
var StepIdentitySchema = "network.xyo.chain.step.identity";
|
|
140
144
|
var isStepIdentityPayload = isPayloadOfZodType(StepIdentityZod, StepIdentitySchema);
|
|
141
145
|
var asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload);
|
|
@@ -213,7 +217,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
213
217
|
} else {
|
|
214
218
|
const stepIdentities = payloads.filter(isStepIdentityPayload).map((p) => {
|
|
215
219
|
const { step, block: blockNumber } = p;
|
|
216
|
-
const block = asXL1BlockNumber(blockNumber);
|
|
220
|
+
const block = asXL1BlockNumber(blockNumber, true);
|
|
217
221
|
return {
|
|
218
222
|
step,
|
|
219
223
|
block
|
|
@@ -250,10 +254,10 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
250
254
|
for (const step of RewardableSteps) {
|
|
251
255
|
const from = 0;
|
|
252
256
|
const to = await this.viewer.currentBlockNumber();
|
|
253
|
-
const range = [
|
|
257
|
+
const range = asXL1BlockRange([
|
|
254
258
|
asXL1BlockNumber(from),
|
|
255
259
|
asXL1BlockNumber(to)
|
|
256
|
-
];
|
|
260
|
+
], true);
|
|
257
261
|
const stepIdentities = blockRangeSteps(range, [
|
|
258
262
|
step
|
|
259
263
|
]);
|
|
@@ -419,85 +423,12 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
|
|
|
419
423
|
}, "submitRewardDistributionTransaction");
|
|
420
424
|
};
|
|
421
425
|
|
|
422
|
-
// src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts
|
|
423
|
-
import { isDefined as isDefined4, isPromise } from "@xylabs/typeof";
|
|
424
|
-
import { ReasonPhrases, StatusCodes } from "http-status-codes";
|
|
425
|
-
import { z as z2 } from "zod";
|
|
426
|
-
var EmptyParamsZod = z2.object({}).catchall(z2.string());
|
|
427
|
-
var EmptyQueryParamsZod = z2.object({}).catchall(z2.union([
|
|
428
|
-
z2.string(),
|
|
429
|
-
z2.array(z2.string())
|
|
430
|
-
]));
|
|
431
|
-
var ValidateRequestDefaults = {
|
|
432
|
-
params: EmptyParamsZod,
|
|
433
|
-
query: EmptyQueryParamsZod,
|
|
434
|
-
body: z2.json().optional(),
|
|
435
|
-
response: z2.json().optional()
|
|
436
|
-
};
|
|
437
|
-
function requestHandlerValidator(schemas) {
|
|
438
|
-
const validators = {
|
|
439
|
-
...ValidateRequestDefaults,
|
|
440
|
-
...schemas
|
|
441
|
-
};
|
|
442
|
-
return (handler) => {
|
|
443
|
-
return async (req, res, next) => {
|
|
444
|
-
const originalJson = res.json.bind(res);
|
|
445
|
-
try {
|
|
446
|
-
const errors = [];
|
|
447
|
-
const keys = [
|
|
448
|
-
"params",
|
|
449
|
-
"query",
|
|
450
|
-
"body"
|
|
451
|
-
];
|
|
452
|
-
for (const key of keys) {
|
|
453
|
-
const validator = validators[key];
|
|
454
|
-
const result2 = validator.safeParse(req[key]);
|
|
455
|
-
if (result2.success) {
|
|
456
|
-
if (isDefined4(result2.data)) Object.assign(req[key], result2.data);
|
|
457
|
-
} else {
|
|
458
|
-
errors.push(...result2.error.issues.map((issue) => issue.path.length === 0 ? `${key}: ${issue.message}` : `${key}.${issue.path.join(".")}: ${issue.message}`));
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
if (errors.length > 0) {
|
|
462
|
-
const message = errors.join("; ");
|
|
463
|
-
const err = new Error(message);
|
|
464
|
-
err.name = ReasonPhrases.BAD_REQUEST;
|
|
465
|
-
err.statusCode = StatusCodes.BAD_REQUEST;
|
|
466
|
-
next(err);
|
|
467
|
-
return false;
|
|
468
|
-
}
|
|
469
|
-
res.json = (data) => {
|
|
470
|
-
const result2 = validators.response.safeParse(data);
|
|
471
|
-
if (result2.success) {
|
|
472
|
-
return originalJson(result2.data);
|
|
473
|
-
} else {
|
|
474
|
-
const message = result2.error.issues.map((issue) => issue.path.length === 0 ? `response: ${issue.message}` : `response.${issue.path.join(".")}: ${issue.message}`).join("; ");
|
|
475
|
-
const err = new Error(message);
|
|
476
|
-
err.name = ReasonPhrases.INTERNAL_SERVER_ERROR;
|
|
477
|
-
err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR;
|
|
478
|
-
res.json = originalJson;
|
|
479
|
-
throw err;
|
|
480
|
-
}
|
|
481
|
-
};
|
|
482
|
-
const result = handler(req, res, next);
|
|
483
|
-
if (result && isPromise(result)) {
|
|
484
|
-
await result;
|
|
485
|
-
}
|
|
486
|
-
} catch (err) {
|
|
487
|
-
res.json = originalJson;
|
|
488
|
-
next(err);
|
|
489
|
-
}
|
|
490
|
-
};
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
__name(requestHandlerValidator, "requestHandlerValidator");
|
|
494
|
-
|
|
495
426
|
// src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.ts
|
|
496
|
-
import { isDefined as
|
|
427
|
+
import { isDefined as isDefined4 } from "@xylabs/typeof";
|
|
497
428
|
import { HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
498
429
|
var viewer;
|
|
499
430
|
var getViewerFromConfig = /* @__PURE__ */ __name((config) => {
|
|
500
|
-
if (
|
|
431
|
+
if (isDefined4(viewer)) return viewer;
|
|
501
432
|
const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, {
|
|
502
433
|
...XyoViewerRpcSchemas,
|
|
503
434
|
...NetworkStakeViewerRpcSchemas
|
|
@@ -520,12 +451,12 @@ var RewardableSteps2 = [
|
|
|
520
451
|
];
|
|
521
452
|
|
|
522
453
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
|
|
523
|
-
var query =
|
|
524
|
-
fromBlock:
|
|
525
|
-
toBlock:
|
|
526
|
-
step:
|
|
454
|
+
var query = z2.object({
|
|
455
|
+
fromBlock: z2.coerce.number().int().nonnegative().optional(),
|
|
456
|
+
toBlock: z2.coerce.number().int().nonnegative().optional(),
|
|
457
|
+
step: z2.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps2)).max(Math.max(...RewardableSteps2)).optional().default(3)
|
|
527
458
|
});
|
|
528
|
-
var response =
|
|
459
|
+
var response = z2.array(PayloadZodLoose);
|
|
529
460
|
var validateRequest = requestHandlerValidator({
|
|
530
461
|
query,
|
|
531
462
|
response
|
|
@@ -540,20 +471,20 @@ var postClaimRange = {
|
|
|
540
471
|
path: "/rewards/claimRange",
|
|
541
472
|
handlers: validateRequest(async (req, res) => {
|
|
542
473
|
const { config, node } = req.app;
|
|
543
|
-
const { fromBlock, toBlock, step } =
|
|
474
|
+
const { fromBlock, toBlock, step } = z2.parse(query, req.query);
|
|
544
475
|
const viewer2 = getViewerFromConfig(config);
|
|
545
|
-
const from =
|
|
476
|
+
const from = isDefined5(fromBlock) ? fromBlock : 0;
|
|
546
477
|
const currentBlock = await viewer2.currentBlockNumber();
|
|
547
|
-
const to =
|
|
478
|
+
const to = isDefined5(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock;
|
|
548
479
|
if (to <= from) {
|
|
549
480
|
res.status(400);
|
|
550
481
|
res.json([]);
|
|
551
482
|
return;
|
|
552
483
|
}
|
|
553
|
-
const range = [
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
];
|
|
484
|
+
const range = asXL1BlockRange2([
|
|
485
|
+
from,
|
|
486
|
+
to
|
|
487
|
+
], true);
|
|
557
488
|
const stepIdentities = blockRangeSteps2(range, [
|
|
558
489
|
step
|
|
559
490
|
]);
|
|
@@ -575,16 +506,17 @@ var postClaimRange = {
|
|
|
575
506
|
|
|
576
507
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts
|
|
577
508
|
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
509
|
+
import { requestHandlerValidator as requestHandlerValidator2 } from "@xylabs/express";
|
|
578
510
|
import { PayloadZodLoose as PayloadZodLoose2, PayloadZodStrictOfSchema } from "@xyo-network/payload-model";
|
|
579
511
|
import { asSentinelInstance as asSentinelInstance2 } from "@xyo-network/sentinel-model";
|
|
580
512
|
import { EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod, EIP712SignaturePayloadSchema } from "@xyo-network/xl1-protocol-sdk";
|
|
581
|
-
import { z as
|
|
582
|
-
var body =
|
|
513
|
+
import { z as z3 } from "zod";
|
|
514
|
+
var body = z3.tuple([
|
|
583
515
|
PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),
|
|
584
516
|
PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape)
|
|
585
517
|
]);
|
|
586
|
-
var response2 =
|
|
587
|
-
var validateRequest2 =
|
|
518
|
+
var response2 = z3.array(PayloadZodLoose2);
|
|
519
|
+
var validateRequest2 = requestHandlerValidator2({
|
|
588
520
|
body,
|
|
589
521
|
response: response2
|
|
590
522
|
});
|
|
@@ -617,9 +549,7 @@ var getRouteDefinitions = /* @__PURE__ */ __name(() => {
|
|
|
617
549
|
// src/server/routes/rewardRedemption/addRewardRoutes.ts
|
|
618
550
|
var addRewardRedemptionRoutes = /* @__PURE__ */ __name((app) => {
|
|
619
551
|
const routeDefinitions = getRouteDefinitions();
|
|
620
|
-
|
|
621
|
-
app[definition.method](definition.path, definition.handlers);
|
|
622
|
-
}
|
|
552
|
+
addRouteDefinitions(app, routeDefinitions);
|
|
623
553
|
}, "addRewardRedemptionRoutes");
|
|
624
554
|
|
|
625
555
|
// src/server/routes/addRoutes.ts
|
|
@@ -652,12 +582,12 @@ var getApp = /* @__PURE__ */ __name((node, config) => {
|
|
|
652
582
|
|
|
653
583
|
// src/server/server.ts
|
|
654
584
|
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
655
|
-
import { isDefined as
|
|
585
|
+
import { isDefined as isDefined7, isString } from "@xylabs/typeof";
|
|
656
586
|
import { boot } from "@xyo-network/bios";
|
|
657
587
|
import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
|
|
658
588
|
|
|
659
589
|
// src/manifest/getLocator.ts
|
|
660
|
-
import { isDefined as
|
|
590
|
+
import { isDefined as isDefined6 } from "@xylabs/typeof";
|
|
661
591
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
662
592
|
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
663
593
|
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
@@ -682,7 +612,7 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
682
612
|
port: 9465
|
|
683
613
|
}
|
|
684
614
|
});
|
|
685
|
-
if (
|
|
615
|
+
if (isDefined6(logger)) AbstractModule.defaultLogger = logger;
|
|
686
616
|
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
687
617
|
const locator = new ModuleFactoryLocator();
|
|
688
618
|
const mongoConfig = config.storage?.mongo;
|
|
@@ -737,7 +667,7 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
737
667
|
}, "getLocator");
|
|
738
668
|
var getGateway = /* @__PURE__ */ __name(async (config) => {
|
|
739
669
|
const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi;
|
|
740
|
-
const walletPromise =
|
|
670
|
+
const walletPromise = isDefined6(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random();
|
|
741
671
|
const account = await walletPromise;
|
|
742
672
|
const signer = new SimpleXyoSigner(account);
|
|
743
673
|
const connection = new HttpRpcXyoConnection({
|
|
@@ -885,7 +815,7 @@ var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
|
885
815
|
const { logger, config } = context;
|
|
886
816
|
const { port, mnemonic } = config.rewardRedemptionApi;
|
|
887
817
|
const bios = await boot();
|
|
888
|
-
const seedPhrase =
|
|
818
|
+
const seedPhrase = isDefined7(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
889
819
|
const wallet = await HDWallet2.fromPhrase(seedPhrase);
|
|
890
820
|
const nodeContext = {
|
|
891
821
|
wallet,
|