@xyo-network/chain-reward-redemption 1.20.28 → 1.20.29

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.
@@ -1,10 +1,11 @@
1
- import type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration';
2
- import type { ActorParamsV3, XyoGatewayRunner } from '@xyo-network/xl1-sdk';
3
- import { ActorV3 } from '@xyo-network/xl1-sdk';
1
+ import type { ActorCapabilityNeeds, ActorParamsV3, RewardRedemptionConfig } from '@xyo-network/chain-orchestration';
2
+ import { ActorV3 } from '@xyo-network/chain-orchestration';
3
+ import type { XyoGatewayRunner } from '@xyo-network/xl1-sdk';
4
4
  export type RewardRedemptionActorParams = ActorParamsV3<{
5
5
  config: RewardRedemptionConfig;
6
6
  }>;
7
7
  export declare class RewardRedemptionActor extends ActorV3<RewardRedemptionActorParams> {
8
+ static readonly needs: ActorCapabilityNeeds;
8
9
  protected _gatewayRunner: XyoGatewayRunner;
9
10
  private server?;
10
11
  protected get gatewayRunner(): XyoGatewayRunner;
@@ -1 +1 @@
1
- {"version":3,"file":"RewardRedemptionActor.d.ts","sourceRoot":"","sources":["../../src/RewardRedemptionActor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EAGR,MAAM,sBAAsB,CAAA;AAI7B,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC;IACtD,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAC,CAAA;AAEF,qBACa,qBAAsB,SAAQ,OAAO,CAAC,2BAA2B,CAAC;IAC7E,SAAS,CAAC,cAAc,EAAG,gBAAgB,CAAA;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAQ;IAEvB,SAAS,KAAK,aAAa,qBAE1B;IAEc,aAAa;IAKb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"RewardRedemptionActor.d.ts","sourceRoot":"","sources":["../../src/RewardRedemptionActor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAS5D,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC;IACtD,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAC,CAAA;AAEF,qBACa,qBAAsB,SAAQ,OAAO,CAAC,2BAA2B,CAAC;IAC7E,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAK1C;IAED,SAAS,CAAC,cAAc,EAAG,gBAAgB,CAAA;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAQ;IAEvB,SAAS,KAAK,aAAa,qBAE1B;IAEc,aAAa;IAKb,YAAY;IAMZ,WAAW;YAKZ,WAAW;IAIzB,OAAO,CAAC,UAAU;CAInB"}
@@ -1,3 +1,4 @@
1
+ export * from './manifest/index.ts';
1
2
  export * from './modules/index.ts';
2
3
  export * from './RewardRedemptionActor.ts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA"}
@@ -1,6 +1,14 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
+ // src/manifest/getLocator.ts
5
+ import { isDefined as isDefined3 } from "@xylabs/sdk-js";
6
+ import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
7
+ import { ViewArchivist } from "@xyo-network/archivist-view";
8
+ import { initTelemetry } from "@xyo-network/chain-telemetry";
9
+ import { AbstractModule, LoggerModuleStatusReporter, MemoryArchivist, MemorySentinel, ModuleFactoryLocator } from "@xyo-network/sdk-js";
10
+ import { hasMongoConfig } from "@xyo-network/xl1-sdk";
11
+
4
12
  // src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts
5
13
  import { assertEx, delay, isDefined, isUndefined, toAddress } from "@xylabs/sdk-js";
6
14
  import { AbstractSentinel, asSchema } from "@xyo-network/sdk-js";
@@ -9,7 +17,7 @@ import { Mutex } from "async-mutex";
9
17
  var ChainStepRewardsClaimSentinelConfigSchema = asSchema("network.xyo.sentinel.chain.step.rewards.claim.config", true);
10
18
  var defaultStepClaimIntervalMs = 15e3;
11
19
  var scope = "reward-escrow";
12
- var RewardableSteps = [
20
+ var DefaultRewardableSteps = [
13
21
  3,
14
22
  4,
15
23
  5,
@@ -39,6 +47,9 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
39
47
  get gateway() {
40
48
  return assertEx(this._gateway, () => "Gateway is not defined");
41
49
  }
50
+ get rewardableSteps() {
51
+ return isDefined(this.config.rewardableSteps) ? this.config.rewardableSteps : DefaultRewardableSteps;
52
+ }
42
53
  get stepClaimIntervalMs() {
43
54
  return isDefined(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs;
44
55
  }
@@ -85,7 +96,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
85
96
  step,
86
97
  block
87
98
  };
88
- }).filter((stepIdentity) => RewardableSteps.includes(stepIdentity.step));
99
+ }).filter((stepIdentity) => this.rewardableSteps.includes(stepIdentity.step));
89
100
  for (const stepIdentity of stepIdentities) {
90
101
  const result = await this.claimStepIdentity(stepIdentity);
91
102
  if (isDefined(result)) response3.push(...flattenHydratedTransaction(result));
@@ -114,7 +125,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
114
125
  }
115
126
  async claimAllSteps() {
116
127
  const results = [];
117
- for (const step of RewardableSteps) {
128
+ for (const step of this.rewardableSteps) {
118
129
  const from = 0;
119
130
  const to = await this.viewer.currentBlockNumber();
120
131
  const range = asXL1BlockRange([
@@ -290,9 +301,190 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
290
301
  }, "submitRewardDistributionTransaction");
291
302
  };
292
303
 
304
+ // src/manifest/getLocator.ts
305
+ var getLocator = /* @__PURE__ */ __name(async (context, gateway) => {
306
+ const { config, logger } = context;
307
+ const { otlpEndpoint } = config.telemetry?.otel ?? {};
308
+ const { path: endpoint = "/metrics", port = 9467 } = config.telemetry?.metrics?.scrape ?? {};
309
+ const { traceProvider, meterProvider } = await initTelemetry({
310
+ attributes: {
311
+ serviceName: "xl1-reward-redemption",
312
+ serviceVersion: "1.0.0"
313
+ },
314
+ otlpEndpoint,
315
+ metricsConfig: {
316
+ endpoint,
317
+ port
318
+ }
319
+ });
320
+ if (isDefined3(logger)) AbstractModule.defaultLogger = logger;
321
+ const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
322
+ const locator = new ModuleFactoryLocator();
323
+ const mongoConfig = config.storage?.mongo;
324
+ if (hasMongoConfig(mongoConfig)) {
325
+ const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
326
+ const payloadSdkConfig = {
327
+ dbConnectionString,
328
+ dbDomain,
329
+ dbName,
330
+ dbPassword,
331
+ dbUserName
332
+ };
333
+ const params = {
334
+ meterProvider,
335
+ payloadSdkConfig,
336
+ statusReporter,
337
+ traceProvider
338
+ };
339
+ locator.register(MongoDBArchivistV2.factory(params), void 0, true);
340
+ }
341
+ locator.register(MemoryArchivist.factory({
342
+ traceProvider,
343
+ meterProvider,
344
+ statusReporter
345
+ }));
346
+ locator.register(MemorySentinel.factory({
347
+ traceProvider,
348
+ meterProvider,
349
+ statusReporter
350
+ }));
351
+ locator.register(ViewArchivist.factory({
352
+ traceProvider,
353
+ meterProvider,
354
+ statusReporter
355
+ }));
356
+ const chainStepRewardsClaimSentinelParams = {
357
+ gateway,
358
+ traceProvider,
359
+ meterProvider,
360
+ statusReporter
361
+ };
362
+ locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams));
363
+ const derivedAddressWalletTransferSentinelParams = {
364
+ gateway,
365
+ traceProvider,
366
+ meterProvider,
367
+ statusReporter
368
+ };
369
+ locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams));
370
+ return locator;
371
+ }, "getLocator");
372
+
373
+ // src/manifest/getNode.ts
374
+ import { ManifestWrapper } from "@xyo-network/sdk-js";
375
+
376
+ // src/manifest/node.json
377
+ var node_default = {
378
+ $schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
379
+ nodes: [
380
+ {
381
+ config: {
382
+ accountPath: "44'/60'/1",
383
+ name: "XYORewardRedemptionNode",
384
+ schema: "network.xyo.node.config"
385
+ },
386
+ modules: {
387
+ private: [
388
+ {
389
+ config: {
390
+ accountPath: "1/1'/1'",
391
+ name: "DataPrivate",
392
+ getCache: {
393
+ enabled: true,
394
+ maxEntries: 5e3
395
+ },
396
+ payloadSdkConfig: {
397
+ collection: "reward_redemption_api_datalake"
398
+ },
399
+ schema: "network.xyo.archivist.config"
400
+ }
401
+ },
402
+ {
403
+ config: {
404
+ accountPath: "1/1'/2'",
405
+ name: "ChainStepRewardsClaimSentinel",
406
+ schema: "network.xyo.sentinel.chain.step.rewards.claim.config"
407
+ }
408
+ },
409
+ {
410
+ config: {
411
+ accountPath: "1/1'/3'",
412
+ automations: [
413
+ {
414
+ frequency: 6e4,
415
+ frequencyUnits: "millis",
416
+ schema: "network.xyo.automation.interval",
417
+ type: "interval"
418
+ }
419
+ ],
420
+ name: "ChainRewardsClaimIntervalSentinel",
421
+ schema: "network.xyo.sentinel.config",
422
+ synchronous: true,
423
+ tasks: [
424
+ {
425
+ mod: "ChainStepRewardsClaimSentinel",
426
+ endPoint: "report"
427
+ }
428
+ ]
429
+ }
430
+ },
431
+ {
432
+ config: {
433
+ accountPath: "1/1'/4'",
434
+ name: "DerivedAddressWalletTransferSentinel",
435
+ schema: "network.xyo.sentinel.chain.derived.address.wallet.transfer.config"
436
+ }
437
+ }
438
+ ],
439
+ public: [
440
+ {
441
+ config: {
442
+ accountPath: "1/1/1",
443
+ name: "Data",
444
+ allowedQueries: [
445
+ "network.xyo.query.archivist.get",
446
+ "network.xyo.query.archivist.next"
447
+ ],
448
+ getCache: {
449
+ enabled: true,
450
+ maxEntries: 5e3
451
+ },
452
+ originArchivist: "DataPrivate",
453
+ schema: "network.xyo.archivist.view.config"
454
+ }
455
+ }
456
+ ]
457
+ }
458
+ }
459
+ ],
460
+ schema: "network.xyo.manifest"
461
+ };
462
+
463
+ // src/manifest/nodeManifest.ts
464
+ var NodeManifest = node_default;
465
+
466
+ // src/manifest/private/index.ts
467
+ var PrivateChildManifests = [];
468
+
469
+ // src/manifest/public/index.ts
470
+ var PublicChildManifests = [];
471
+
472
+ // src/manifest/getNode.ts
473
+ var getNode = /* @__PURE__ */ __name(async (context, gateway, wallet) => {
474
+ const locator = await getLocator(context, gateway);
475
+ const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
476
+ const [node, ...childNodes] = await wrapper.loadNodes();
477
+ if (childNodes?.length > 0) {
478
+ await Promise.all(childNodes.map((childNode) => node.register(childNode)));
479
+ await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
480
+ }
481
+ return node;
482
+ }, "getNode");
483
+
293
484
  // src/RewardRedemptionActor.ts
294
485
  import { creatable } from "@xylabs/sdk-js";
295
- import { ActorV3, asHostActorConfigContext, XyoGatewayRunnerMoniker } from "@xyo-network/xl1-sdk";
486
+ import { ActorV3 } from "@xyo-network/chain-orchestration";
487
+ import { asHostActorConfigContext, XyoGatewayRunnerMoniker, XyoViewerMoniker as XyoViewerMoniker2 } from "@xyo-network/xl1-sdk";
296
488
 
297
489
  // src/server/app.ts
298
490
  import { standardErrors } from "@xylabs/express";
@@ -358,7 +550,7 @@ var addProbeRoutes = /* @__PURE__ */ __name((app) => {
358
550
 
359
551
  // src/server/routes/dataLake/archivistMiddleware.ts
360
552
  import { setRawResponseFormat as setRawResponseFormat4 } from "@xylabs/express";
361
- import { asHash, isDefined as isDefined3 } from "@xylabs/sdk-js";
553
+ import { asHash, isDefined as isDefined4 } from "@xylabs/sdk-js";
362
554
  import { asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder } from "@xyo-network/sdk-js";
363
555
  import express from "express";
364
556
  var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
@@ -369,7 +561,7 @@ var resolveArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdenti
369
561
  }, "resolveArchivist");
370
562
  var archivistInstance;
371
563
  var getArchivist = /* @__PURE__ */ __name(async (node, archivistModuleIdentifier) => {
372
- if (isDefined3(archivistInstance)) return archivistInstance;
564
+ if (isDefined4(archivistInstance)) return archivistInstance;
373
565
  archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
374
566
  return archivistInstance;
375
567
  }, "getArchivist");
@@ -391,8 +583,8 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
391
583
  router.get("/next", async (req, res) => {
392
584
  setRawResponseFormat4(res);
393
585
  const cursor = isSequence(req.query.cursor) ? req.query.cursor : void 0;
394
- const limit = isDefined3(req.query.limit) ? Number(req.query.limit) : void 0;
395
- const open = isDefined3(req.query.open) ? Boolean(req.query.open) : void 0;
586
+ const limit = isDefined4(req.query.limit) ? Number(req.query.limit) : void 0;
587
+ const open = isDefined4(req.query.open) ? Boolean(req.query.open) : void 0;
396
588
  const order = req.query.order === "asc" ? "asc" : "desc";
397
589
  const options2 = {
398
590
  limit,
@@ -408,14 +600,14 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
408
600
  setRawResponseFormat4(res);
409
601
  const options2 = req.body;
410
602
  const archivist = await getArchivist(node, archivistModuleIdentifier);
411
- const result = await (isDefined3(options2) ? archivist.next(options2) : archivist.next());
603
+ const result = await (isDefined4(options2) ? archivist.next(options2) : archivist.next());
412
604
  res.status(200).json(result);
413
605
  });
414
606
  router.get("/get/:hash", async (req, res) => {
415
607
  setRawResponseFormat4(res);
416
608
  const { hash: rawHash } = req.params;
417
609
  const hash = asHash(rawHash);
418
- if (isDefined3(hash)) {
610
+ if (isDefined4(hash)) {
419
611
  const archivist = await getArchivist(node, archivistModuleIdentifier);
420
612
  const [payload] = await archivist.get([
421
613
  hash
@@ -448,13 +640,13 @@ import { addRouteDefinitions } from "@xylabs/express";
448
640
 
449
641
  // src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
450
642
  import { requestHandlerValidator } from "@xylabs/express";
451
- import { assertEx as assertEx3, isDefined as isDefined4 } from "@xylabs/sdk-js";
643
+ import { assertEx as assertEx3, isDefined as isDefined5 } from "@xylabs/sdk-js";
452
644
  import { asSentinelInstance, PayloadBuilder as PayloadBuilder2, PayloadZodLoose } from "@xyo-network/sdk-js";
453
645
  import { asXL1BlockRange as asXL1BlockRange2, blockRangeSteps as blockRangeSteps2, StepIdentitySchema, XyoViewerMoniker } from "@xyo-network/xl1-sdk";
454
646
  import { z as z2 } from "zod";
455
647
 
456
648
  // src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts
457
- var RewardableSteps2 = [
649
+ var RewardableSteps = [
458
650
  3,
459
651
  4,
460
652
  5,
@@ -467,7 +659,7 @@ var RewardableSteps2 = [
467
659
  var query = z2.object({
468
660
  fromBlock: z2.coerce.number().int().nonnegative().optional(),
469
661
  toBlock: z2.coerce.number().int().nonnegative().optional(),
470
- step: z2.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps2)).max(Math.max(...RewardableSteps2)).optional().default(3)
662
+ step: z2.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3)
471
663
  });
472
664
  var response = z2.array(PayloadZodLoose);
473
665
  var validateRequest = requestHandlerValidator({
@@ -486,9 +678,9 @@ var postClaimRange = {
486
678
  const { locator, node } = req.app;
487
679
  const { fromBlock, toBlock, step } = z2.parse(query, req.query);
488
680
  const viewer = await locator.getInstance(XyoViewerMoniker);
489
- const from = isDefined4(fromBlock) ? fromBlock : 0;
681
+ const from = isDefined5(fromBlock) ? fromBlock : 0;
490
682
  const currentBlock = await viewer.currentBlockNumber();
491
- const to = isDefined4(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock;
683
+ const to = isDefined5(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock;
492
684
  if (to <= from) {
493
685
  res.status(400);
494
686
  res.json([]);
@@ -590,194 +782,6 @@ var getApp = /* @__PURE__ */ __name((node, config, locator) => {
590
782
  import { boot } from "@xyo-network/bios";
591
783
  import { initActorSeedPhrase } from "@xyo-network/chain-orchestration";
592
784
  import { HDWallet } from "@xyo-network/sdk-js";
593
-
594
- // src/manifest/getLocator.ts
595
- import { isDefined as isDefined5 } from "@xylabs/sdk-js";
596
- import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
597
- import { ViewArchivist } from "@xyo-network/archivist-view";
598
- import { initTelemetry } from "@xyo-network/chain-telemetry";
599
- import { AbstractModule, LoggerModuleStatusReporter, MemoryArchivist, MemorySentinel, ModuleFactoryLocator } from "@xyo-network/sdk-js";
600
- import { hasMongoConfig } from "@xyo-network/xl1-sdk";
601
- var getLocator = /* @__PURE__ */ __name(async (context, gateway) => {
602
- const { config, logger } = context;
603
- const { otlpEndpoint } = config.telemetry?.otel ?? {};
604
- const { path: endpoint = "/metrics", port = 9467 } = config.telemetry?.metrics?.scrape ?? {};
605
- const { traceProvider, meterProvider } = await initTelemetry({
606
- attributes: {
607
- serviceName: "xl1-reward-redemption",
608
- serviceVersion: "1.0.0"
609
- },
610
- otlpEndpoint,
611
- metricsConfig: {
612
- endpoint,
613
- port
614
- }
615
- });
616
- if (isDefined5(logger)) AbstractModule.defaultLogger = logger;
617
- const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
618
- const locator = new ModuleFactoryLocator();
619
- const mongoConfig = config.storage?.mongo;
620
- if (hasMongoConfig(mongoConfig)) {
621
- const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
622
- const payloadSdkConfig = {
623
- dbConnectionString,
624
- dbDomain,
625
- dbName,
626
- dbPassword,
627
- dbUserName
628
- };
629
- const params = {
630
- meterProvider,
631
- payloadSdkConfig,
632
- statusReporter,
633
- traceProvider
634
- };
635
- locator.register(MongoDBArchivistV2.factory(params), void 0, true);
636
- }
637
- locator.register(MemoryArchivist.factory({
638
- traceProvider,
639
- meterProvider,
640
- statusReporter
641
- }));
642
- locator.register(MemorySentinel.factory({
643
- traceProvider,
644
- meterProvider,
645
- statusReporter
646
- }));
647
- locator.register(ViewArchivist.factory({
648
- traceProvider,
649
- meterProvider,
650
- statusReporter
651
- }));
652
- const chainStepRewardsClaimSentinelParams = {
653
- gateway,
654
- traceProvider,
655
- meterProvider,
656
- statusReporter
657
- };
658
- locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams));
659
- const derivedAddressWalletTransferSentinelParams = {
660
- gateway,
661
- traceProvider,
662
- meterProvider,
663
- statusReporter
664
- };
665
- locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams));
666
- return locator;
667
- }, "getLocator");
668
-
669
- // src/manifest/getNode.ts
670
- import { ManifestWrapper } from "@xyo-network/sdk-js";
671
-
672
- // src/manifest/node.json
673
- var node_default = {
674
- $schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
675
- nodes: [
676
- {
677
- config: {
678
- accountPath: "44'/60'/1",
679
- name: "XYORewardRedemptionNode",
680
- schema: "network.xyo.node.config"
681
- },
682
- modules: {
683
- private: [
684
- {
685
- config: {
686
- accountPath: "1/1'/1'",
687
- name: "DataPrivate",
688
- getCache: {
689
- enabled: true,
690
- maxEntries: 5e3
691
- },
692
- payloadSdkConfig: {
693
- collection: "reward_redemption_api_datalake"
694
- },
695
- schema: "network.xyo.archivist.config"
696
- }
697
- },
698
- {
699
- config: {
700
- accountPath: "1/1'/2'",
701
- name: "ChainStepRewardsClaimSentinel",
702
- schema: "network.xyo.sentinel.chain.step.rewards.claim.config"
703
- }
704
- },
705
- {
706
- config: {
707
- accountPath: "1/1'/3'",
708
- automations: [
709
- {
710
- frequency: 6e4,
711
- frequencyUnits: "millis",
712
- schema: "network.xyo.automation.interval",
713
- type: "interval"
714
- }
715
- ],
716
- name: "ChainRewardsClaimIntervalSentinel",
717
- schema: "network.xyo.sentinel.config",
718
- synchronous: true,
719
- tasks: [
720
- {
721
- mod: "ChainStepRewardsClaimSentinel",
722
- endPoint: "report"
723
- }
724
- ]
725
- }
726
- },
727
- {
728
- config: {
729
- accountPath: "1/1'/4'",
730
- name: "DerivedAddressWalletTransferSentinel",
731
- schema: "network.xyo.sentinel.chain.derived.address.wallet.transfer.config"
732
- }
733
- }
734
- ],
735
- public: [
736
- {
737
- config: {
738
- accountPath: "1/1/1",
739
- name: "Data",
740
- allowedQueries: [
741
- "network.xyo.query.archivist.get",
742
- "network.xyo.query.archivist.next"
743
- ],
744
- getCache: {
745
- enabled: true,
746
- maxEntries: 5e3
747
- },
748
- originArchivist: "DataPrivate",
749
- schema: "network.xyo.archivist.view.config"
750
- }
751
- }
752
- ]
753
- }
754
- }
755
- ],
756
- schema: "network.xyo.manifest"
757
- };
758
-
759
- // src/manifest/nodeManifest.ts
760
- var NodeManifest = node_default;
761
-
762
- // src/manifest/private/index.ts
763
- var PrivateChildManifests = [];
764
-
765
- // src/manifest/public/index.ts
766
- var PublicChildManifests = [];
767
-
768
- // src/manifest/getNode.ts
769
- var getNode = /* @__PURE__ */ __name(async (context, gateway, wallet) => {
770
- const locator = await getLocator(context, gateway);
771
- const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
772
- const [node, ...childNodes] = await wrapper.loadNodes();
773
- if (childNodes?.length > 0) {
774
- await Promise.all(childNodes.map((childNode) => node.register(childNode)));
775
- await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
776
- }
777
- return node;
778
- }, "getNode");
779
-
780
- // src/server/server.ts
781
785
  var hostname = "::";
782
786
  var getServer = /* @__PURE__ */ __name(async (context, gateway, locator, providedNode) => {
783
787
  const { logger, config } = context;
@@ -787,7 +791,13 @@ var getServer = /* @__PURE__ */ __name(async (context, gateway, locator, provide
787
791
  const wallet = await HDWallet.fromPhrase(seedPhrase);
788
792
  const node = providedNode ?? await getNode(context, gateway, wallet);
789
793
  const app = getApp(node, config, locator);
790
- const server = app.listen(port, hostname, () => logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`));
794
+ const server = await new Promise((resolve, reject) => {
795
+ const srv = app.listen(port, hostname, () => {
796
+ logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`);
797
+ resolve(srv);
798
+ });
799
+ srv.once("error", reject);
800
+ });
791
801
  server.setTimeout(12e4);
792
802
  return server;
793
803
  }, "getServer");
@@ -804,6 +814,12 @@ var RewardRedemptionActor = class extends ActorV3 {
804
814
  static {
805
815
  __name(this, "RewardRedemptionActor");
806
816
  }
817
+ static needs = {
818
+ required: [
819
+ XyoGatewayRunnerMoniker,
820
+ XyoViewerMoniker2
821
+ ]
822
+ };
807
823
  _gatewayRunner;
808
824
  server;
809
825
  get gatewayRunner() {
@@ -839,6 +855,11 @@ export {
839
855
  ConfirmedClaimValuesZod,
840
856
  DerivedAddressWalletTransferSentinel,
841
857
  DerivedAddressWalletTransferSentinelConfigSchema,
842
- RewardRedemptionActor
858
+ NodeManifest,
859
+ PrivateChildManifests,
860
+ PublicChildManifests,
861
+ RewardRedemptionActor,
862
+ getLocator,
863
+ getNode
843
864
  };
844
865
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/RewardRedemptionActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/livez/get.ts","../../src/server/routes/readyz/get.ts","../../src/server/routes/startupz/get.ts","../../src/server/routes/addProbeRoutes.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts","../../src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.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 type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isUndefined, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n XyoConnection, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, asXL1BlockRange, blockRangeSteps,\n completedStepRewardAddress, createTransferPayload, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n isStepIdentityPayload, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.step.rewards.claim.config', true)\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\n /**\n * Whether to claim steps even if there are no rewardees within the\n * step to claim. Defaults to false preventing rollovers of empty steps\n * as the nominal use case has rewardees present.\n */\n claimEmptySteps?: boolean\n /**\n * The schema for the chain step rewards claim sentinel config\n */\n schema: ChainStepRewardsClaimSentinelConfigSchema\n /**\n * The interval in milliseconds between checking for step rewards to claim\n */\n stepClaimIntervalMs: number\n}>\n\ninterface ChainStepRewardsClaimSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type ChainStepRewardsClaimSentinelParams<\n TConfig extends AnyConfigSchema<ChainStepRewardsClaimSentinelConfig> = AnyConfigSchema<ChainStepRewardsClaimSentinelConfig>,\n> = SentinelParams<TConfig> & ChainStepRewardsClaimSentinelParamFields\n\nconst defaultStepClaimIntervalMs = 15_000\n// const retryAttempts = 3\n// const retryDelayMs = 60_000\nconst scope = 'reward-escrow'\nconst RewardableSteps = [3, 4, 5, 6, 7, 8]\n\nexport class ChainStepRewardsClaimSentinel<\n TParams extends ChainStepRewardsClaimSentinelParams = ChainStepRewardsClaimSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [ChainStepRewardsClaimSentinelConfigSchema]\n static override readonly defaultConfigSchema = ChainStepRewardsClaimSentinelConfigSchema\n private _claimAttemptsCounter: Counter<Attributes> | undefined\n private _claimCheckCounter: Counter<Attributes> | undefined\n private _claimErrorCounter: Counter<Attributes> | undefined\n private _claimSuccessCounter: Counter<Attributes> | undefined\n private _connection: XyoConnection | undefined\n private _gateway: XyoGatewayRunner | undefined\n private _reportMutex = new Mutex()\n private _viewer: XyoViewer | undefined\n\n protected get connection(): XyoConnection {\n return assertEx(this._connection, () => 'Connection is not defined')\n }\n\n protected get gateway(): XyoGatewayRunner {\n return assertEx(this._gateway, () => 'Gateway is not defined')\n }\n\n protected get stepClaimIntervalMs(): number {\n return isDefined(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this._viewer, () => 'Viewer is not defined')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._claimAttemptsCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_attempts_total', { description: 'Number of claim attempts' })\n this._claimCheckCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_check_total', { description: 'Number of claim checks' })\n this._claimSuccessCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_success_total', { description: 'Number of claim successes' })\n this._claimErrorCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_errors_total', { description: 'Number of claim errors' })\n\n const gateway = assertEx(this.params.gateway, () => 'Gateway parameter is required')\n const connection = assertEx(gateway.connection, () => 'Gateway connection is required')\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n // this._gateway = withRetry(gateway, retryDelayMs, retryAttempts)\n // this._connection = withRetry(connection, retryDelayMs, retryAttempts)\n // this._viewer = withRetry(viewer, retryDelayMs, retryAttempts)\n this._gateway = gateway // withRetry(gateway, retryDelayMs, retryAttempts)\n this._connection = connection // withRetry(connection, retryDelayMs, retryAttempts)\n this._viewer = viewer // withRetry(viewer, retryDelayMs, retryAttempts)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`ChainRewardsClaimSentinel [${this.id}] is already running, skipping report [${Date.now()}]`)\n return []\n }\n return await this._reportMutex.runExclusive(async () => {\n const response: Payload[] = []\n if (isUndefined(payloads) || payloads.length === 0) {\n await this.claimAllSteps()\n } else {\n // Process provided payloads\n const stepIdentities = payloads\n .filter(isStepIdentityPayload)\n .map<StepIdentity>((p) => {\n const { step, block: blockNumber } = p\n const block = asXL1BlockNumber(blockNumber, { name: 'reportHandler' })\n return { step, block }\n }).filter(stepIdentity => RewardableSteps.includes(stepIdentity.step))\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) response.push(...flattenHydratedTransaction(result))\n }\n }\n return response\n })\n }\n\n private calculateAddressDistributions(rewardsByStaker: Record<Address, bigint>, balance: AttoXL1): Record<Address, bigint> {\n const addressClaims: Record<Address, bigint> = {}\n const totalRewards = Object.values(rewardsByStaker).reduce((acc, val) => acc + val, 0n)\n for (const [staker, amount] of Object.entries(rewardsByStaker)) {\n // Ensure they have accrued an amount\n if (amount <= 0n) continue\n const reward = (balance * amount) / totalRewards\n // Ensure they earned a reward\n if (reward <= 0n) continue\n // Accumulate rewards by address\n const receiveAddress = derivedReceiveAddress(toAddress(staker), scope)\n addressClaims[receiveAddress] = reward\n }\n const totalClaimed = Object.values(addressClaims).reduce((acc, val) => acc + val, 0n)\n assertEx(totalClaimed <= balance, () => 'Total claimed exceeds claimable balance')\n const unclaimed = balance - totalClaimed\n if (unclaimed > 0n) {\n // Return anything unclaimed (due to truncation/rounding) to step rewards pool address\n addressClaims[XYO_STEP_REWARD_ADDRESS] = unclaimed\n }\n return addressClaims\n }\n\n private async claimAllSteps(): Promise<Payload[]> {\n // No payloads to process, just do claims since last run\n const results: SignedHydratedTransaction[] = []\n\n for (const step of RewardableSteps) {\n // Fetch unclaimed rewards and process claims\n const from = 0\n const to = await this.viewer.currentBlockNumber()\n const range = asXL1BlockRange([from, to], { name: 'claimAllSteps' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) {\n results.push(result)\n }\n await delay(this.stepClaimIntervalMs)\n }\n }\n return flattenHydratedTransactions(results)\n }\n\n private async claimStepIdentity(stepIdentity: StepIdentity): Promise<SignedHydratedTransaction | undefined> {\n this.logger?.info(`Checking rewards to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n const claimCounterAttributes = { step: stepIdentity.step.toString(), block: stepIdentity.block.toString() }\n try {\n this._claimCheckCounter?.add(1, claimCounterAttributes)\n // If wallet has balance\n const stepRewardAddress = completedStepRewardAddress(stepIdentity)\n const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress)\n this.logger?.info(\n `Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` in step reward address ${stepRewardAddress}`,\n )\n if (balance > 0n) {\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\n const rewardRecipients = Object.keys(rewardsByStaker).length\n this.logger?.info(\n `Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`,\n )\n // If not configured to claim empty steps\n if (!this.config.claimEmptySteps) {\n // Ensure there are rewards recipients\n assertEx(rewardRecipients > 0, () => 'No reward recipients for step')\n }\n const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance)\n this.logger?.info(\n `Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` with ${Object.keys(addressDistributions).length} addresses`,\n )\n // Create single transaction for all claims\n const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway)\n this.logger?.info(`Claimed rewards for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimSuccessCounter?.add(1, claimCounterAttributes)\n // Return submitted transaction\n return tx\n }\n } catch (error) {\n this._claimErrorCounter?.add(1, claimCounterAttributes)\n this.logger?.error(`Error claiming rewards for step ${stepIdentity.step} at block ${stepIdentity.block}:`, error)\n }\n }\n\n private async submitRewardDistributionTransaction(\n stepRewardAddress: Address,\n addressDistributions: Record<Address, bigint>,\n step: StepIdentity,\n gateway: XyoGatewayRunner,\n ): Promise<SignedHydratedTransaction | undefined> {\n // Create single transfer payload for all claims\n const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions)\n transferPayload.context = { step }\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n const result = await gateway.addPayloadsToChain?.([transferPayload], [], { nbf: currentBlockNumber, exp: asXL1BlockNumber(currentBlockNumber + 10) })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n AddressZod, assertEx, EthAddressZod, hexToBigInt, HexZod, isDefined, isUndefined,\n toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n SignedHydratedTransaction, XL1BlockNumber, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n createTransferPayload,\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload,\n verifyEIP712Message, XL1BlockNumberZod,\n} from '@xyo-network/xl1-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.derived.address.wallet.transfer.config', true)\nexport type DerivedAddressWalletTransferSentinelConfigSchema = typeof DerivedAddressWalletTransferSentinelConfigSchema\n\n/**\n * The configuration for the derived address wallet transfer sentinel\n */\nexport type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{\n /**\n * The schema for the derived address wallet transfer sentinel config\n */\n schema: DerivedAddressWalletTransferSentinelConfigSchema\n}>\n\nexport interface DerivedAddressWalletTransferSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type DerivedAddressWalletTransferSentinelParams<\n TConfig extends AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig> = AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig>,\n> = SentinelParams<TConfig> & DerivedAddressWalletTransferSentinelParamFields\n\nconst scope = 'reward-escrow'\n\ninterface ParsedClaimValues {\n amount: string\n // chainId: ChainId\n exp: XL1BlockNumber\n from: Address\n nbf: XL1BlockNumber\n to: Address\n}\n\n// Assuming EthAddress and Hex are string-like (typical case)\nexport const ConfirmedClaimValuesZod = z.object({\n 'From': EthAddressZod,\n 'To XL1 Address': AddressZod,\n 'XL1 Amount': z.string(),\n 'XL1 Amount (Hex)': HexZod, // Hex\n 'XL1 Not after block': XL1BlockNumberZod,\n 'XL1 Not before block': XL1BlockNumberZod,\n})\n\nexport type ConfirmedClaimValues = z.infer<typeof ConfirmedClaimValuesZod>\n\nconst parseConfirmedClaimValues = (values: ConfirmedClaimValues): ParsedClaimValues => {\n return {\n amount: values['XL1 Amount (Hex)'],\n exp: values['XL1 Not after block'],\n from: toAddress(values.From),\n nbf: values['XL1 Not before block'],\n to: toAddress(values['To XL1 Address']),\n }\n}\n\nexport class DerivedAddressWalletTransferSentinel<\n TParams extends DerivedAddressWalletTransferSentinelParams = DerivedAddressWalletTransferSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [DerivedAddressWalletTransferSentinelConfigSchema]\n static override readonly defaultConfigSchema = DerivedAddressWalletTransferSentinelConfigSchema\n private _transferAttemptsCounter: Counter<Attributes> | undefined\n private _transferErrorCounter: Counter<Attributes> | undefined\n private _transferSuccessCounter: Counter<Attributes> | undefined\n\n protected get gateway(): XyoGatewayRunner {\n return this.params.gateway\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._transferAttemptsCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_attempts_total',\n { description: 'Number of transfer attempts' },\n )\n this._transferSuccessCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_success_total',\n { description: 'Number of transfer successes' },\n )\n this._transferErrorCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_errors_total',\n { description: 'Number of transfer errors' },\n )\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n const data = payloads?.find(x => isEIP712DataPayload(x))\n const signature = payloads?.find(x => isEIP712SignaturePayload(x))\n if (isUndefined(data) || isUndefined(signature)) return []\n this._transferAttemptsCounter?.add(1)\n const valid = await verifyEIP712Message(data, signature)\n if (!valid) {\n this._transferErrorCounter?.add(1)\n throw new Error('Invalid EIP712 signature')\n }\n const values = ConfirmedClaimValuesZod.parse(data.values)\n const parsed = parseConfirmedClaimValues(values)\n const signatureAddress = toAddress(signature.address)\n const parsedAddress = toAddress(parsed.from)\n if (signatureAddress === parsedAddress) {\n const tx = await this.submitRewardDistributionTransaction(parsed)\n if (isDefined(tx)) {\n this._transferSuccessCounter?.add(1)\n return flattenHydratedTransaction(tx)\n }\n }\n this._transferErrorCounter?.add(1)\n return []\n }\n\n protected submitRewardDistributionTransaction = async (claimValues: ParsedClaimValues): Promise<SignedHydratedTransaction | undefined> => {\n const {\n amount, from: address, to, nbf, exp,\n } = claimValues\n // Ensure necessary gateway pre-requisites are met\n const signer = assertEx(this.gateway.signer, () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = this.gateway.connection\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n\n // TODO: Validate chainId against supplied in ClaimValues to prevent replay attacks\n // const chainId = await viewer.chainId()\n\n // Ensure the transaction is within the valid block range\n const currentBlock = await viewer.currentBlockNumber()\n if (currentBlock < nbf || currentBlock > exp) throw new Error('Transaction is not within a valid block range')\n\n // Parse the signer's address\n const escrowAccount = derivedReceiveAddress(address, scope)\n\n // Ensure the escrow account has sufficient balance\n const balance = await viewer.account.balance.accountBalance(escrowAccount)\n // MEMO: Currently we require the full amount to be redeemed from the escrow account. We do\n // not allow partial escrow redemptions.\n const redemptionAmount = hexToBigInt(toHex(amount))\n assertEx(balance === redemptionAmount, () => 'Insufficient balance in escrow account')\n\n // Ensure we have enough allowance to transfer from the escrow account\n const allowance = await viewer.account.balance.accountBalance(signerAddress)\n assertEx(allowance > 1000n, () => 'Insufficient allowance to transfer from escrow account')\n\n // Create the transfer payload\n const transferPayload = createTransferPayload(escrowAccount, { [to]: hexToBigInt(toHex(amount)) })\n // Add required validation context\n transferPayload.context = { address, scope }\n const chain = await viewer.chainId()\n const result = await this.gateway.addPayloadsToChain?.([transferPayload], [], {\n chain, nbf, exp,\n })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport type {\n ActorParamsV3,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n ActorV3,\n asHostActorConfigContext,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type RewardRedemptionActorParams = ActorParamsV3<{\n config: RewardRedemptionConfig\n}>\n\n@creatable()\nexport class RewardRedemptionActor extends ActorV3<RewardRedemptionActorParams> {\n protected _gatewayRunner!: XyoGatewayRunner\n private server?: Server\n\n protected get gatewayRunner() {\n return this._gatewayRunner\n }\n\n override async createHandler() {\n await super.createHandler()\n this._gatewayRunner = await this.locator.getInstance(XyoGatewayRunnerMoniker)\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true), this._gatewayRunner, this.locator)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import { standardErrors } from '@xylabs/express'\nimport type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\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, config: RewardRedemptionConfig, locator: ProviderFactoryLocatorInstance): Express => {\n addInstrumentation()\n const app = express()\n sharedMiddleware(app)\n app.config = config\n app.node = node\n app.locator = locator\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 type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getLivez: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getReadyz: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getStartupz: RequestHandler<NoReqParams> = handler\n","import type { Express } from 'express'\n\nimport { getLivez } from './livez/index.ts'\nimport { getReadyz } from './readyz/index.ts'\nimport { getStartupz } from './startupz/index.ts'\n\nexport const addProbeRoutes = (app: Express) => {\n app.get('/livez', getLivez)\n app.get('/readyz', getReadyz)\n app.get('/startupz', getStartupz)\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, ModuleIdentifier,\n NextOptions, NodeInstance, Payload,\n} from '@xyo-network/sdk-js'\nimport {\n asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type { Request, Router } from 'express'\nimport express from 'express'\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\ninterface 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 } else {\n res.status(404).send()\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 = 'Data'\n app.use('/data', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { addRouteDefinitions } from '@xylabs/express'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n addRouteDefinitions(app, routeDefinitions)\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n NodeInstance, Payload, SentinelInstance,\n} from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadBuilder, PayloadZodLoose,\n} from '@xyo-network/sdk-js'\nimport type { StepIdentityPayload, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockRange, blockRangeSteps,\n StepIdentitySchema, XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { RewardableSteps } from '../util/index.ts'\n\nconst query = z.object({\n fromBlock: z.coerce.number().int().nonnegative().optional(),\n toBlock: z.coerce.number().int().nonnegative().optional(),\n step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3),\n})\nconst response = z.array(PayloadZodLoose)\n\nconst validateRequest = requestHandlerValidator({ query, response })\n\nconst getChainStepRewardsClaimSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:ChainStepRewardsClaimSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'ChainStepRewardsClaimSentinel not found on node')\n}\n\nexport const postClaimRange: RouteDefinition = {\n method: 'post',\n path: '/rewards/claimRange',\n handlers: validateRequest(async (req, res) => {\n const { locator, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = await locator.getInstance<XyoViewer>(XyoViewerMoniker)\n const from = isDefined(fromBlock) ? fromBlock : 0\n const currentBlock = await viewer.currentBlockNumber()\n const to = isDefined(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock\n if (to <= from) {\n res.status(400)\n res.json([])\n return\n }\n const range = asXL1BlockRange([from, to], { name: 'claimRange' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n const results: Payload[] = []\n for (const stepIdentity of stepIdentities) {\n const mod = await getChainStepRewardsClaimSentinel(node)\n const stepIdentityPayload = new PayloadBuilder<StepIdentityPayload>({ schema: StepIdentitySchema }).fields(stepIdentity).build()\n const result = await mod.report([stepIdentityPayload])\n results.push(...result)\n }\n res.status(200)\n res.json(results)\n }),\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance, SentinelInstance } from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadZodLoose, PayloadZodStrictOfSchema,\n} from '@xyo-network/sdk-js'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nconst body = z.tuple([\n PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),\n PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape),\n])\n\nconst response = z.array(PayloadZodLoose)\nconst validateRequest = requestHandlerValidator({\n body,\n response,\n})\n\nconst getDerivedAddressWalletTransferSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'DerivedAddressWalletTransferSentinel not found on node')\n}\n\nexport const postRedeem: RouteDefinition = {\n method: 'post',\n path: '/rewards/redeem',\n handlers: validateRequest(async (req, res) => {\n const { node } = req.app\n const { body } = req\n const sentinel = await getDerivedAddressWalletTransferSentinel(node)\n const result = await sentinel.report(body)\n res.status(200)\n res.json(result)\n }),\n}\n","import type { RouteDefinition } from '@xylabs/express'\n\nimport { postClaimRange, postRedeem } from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n postClaimRange,\n postRedeem,\n ]\n}\n","import type { Express } from 'express'\n\nimport { addProbeRoutes } from './addProbeRoutes.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addProbeRoutes(app)\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { boot } from '@xyo-network/bios'\nimport { initActorSeedPhrase } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type {\n HostActorConfigContext, ProviderFactoryLocatorInstance, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\nexport const getServer = async (context: HostActorConfigContext, gateway: XyoGatewayRunner, locator: ProviderFactoryLocatorInstance, providedNode?: NodeInstance) => {\n const { logger, config } = context\n const { port } = config\n const bios = await boot()\n const seedPhrase = await initActorSeedPhrase(context, bios)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const node = providedNode ?? await getNode(context, gateway, wallet)\n const app = getApp(node, config, locator)\n const server = app.listen(port, hostname, () => logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`))\n server.setTimeout(120_000)\n return server\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext, XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\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: BaseConfigContext, gateway: XyoGatewayRunner) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9467 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-reward-redemption',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\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 // const gateway = await getGateway(config)\n const chainStepRewardsClaimSentinelParams: Partial<ChainStepRewardsClaimSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams))\n const derivedAddressWalletTransferSentinelParams: Partial<DerivedAddressWalletTransferSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams))\n return locator\n}\n\n// const getGateway = async (config: Config): Promise<XyoGatewayRunner | undefined> => {\n// const { mnemonic, chainRpcApiUrl } = config.actors.rewardRedemption\n\n// // Create locator\n// const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(chainRpcApiUrl, schemas)\n// const locator = await buildJsonRpcProviderLocator({ transportFactory })\n\n// // Register signer\n// const phrase = mnemonic ?? HDWallet.generateMnemonic()\n// const wallet = await generateXyoBaseWalletFromPhrase(phrase)\n// const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n// locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n// locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}))\n\n// // Use locator to get gateway\n// const gateway = await locator.getInstance<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.defaultMoniker)\n// return gateway\n// }\n","import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BaseConfigContext,\n Config, XyoGatewayRunner,\n} from '@xyo-network/xl1-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: BaseConfigContext, gateway: XyoGatewayRunner, wallet: WalletInstance) => {\n const locator = await getLocator(context, gateway)\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 {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"DataPrivate\",\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 \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"name\": \"ChainStepRewardsClaimSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.step.rewards.claim.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainRewardsClaimIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"ChainStepRewardsClaimSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"name\": \"DerivedAddressWalletTransferSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.derived.address.wallet.transfer.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Data\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"DataPrivate\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest } from '@xyo-network/sdk-js'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":";;;;AAEA,SACEA,UAAUC,OAAOC,WAAWC,aAAaC,iBACpC;AAKP,SAASC,kBAAkBC,gBAAgB;AAK3C,SACEC,kBAAkBC,iBAAiBC,iBACnCC,4BAA4BC,uBAAuBC,uBAAuBC,4BAA4BC,6BACtGC,uBAAuBC,+BAClB;AACP,SAASC,aAAa;AAEf,IAAMC,4CAA4CC,SAAS,wDAAwD,IAAA;AA+B1H,IAAMC,6BAA6B;AAGnC,IAAMC,QAAQ;AACd,IAAMC,kBAAkB;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;;AAEjC,IAAMC,gCAAN,cAGGC,iBAAAA;EA3DV,OA2DUA;;;EACR,OAAyBC,gBAAgB;IAACP;;EAC1C,OAAyBQ,sBAAsBR;EACvCS;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC,eAAe,IAAIC,MAAAA;EACnBC;EAER,IAAcC,aAA4B;AACxC,WAAOC,SAAS,KAAKN,aAAa,MAAM,2BAAA;EAC1C;EAEA,IAAcO,UAA4B;AACxC,WAAOD,SAAS,KAAKL,UAAU,MAAM,wBAAA;EACvC;EAEA,IAAcO,sBAA8B;AAC1C,WAAOC,UAAU,KAAKC,OAAOF,mBAAmB,IAAI,KAAKE,OAAOF,sBAAsBnB;EACxF;EAEA,IAAcsB,SAAoB;AAChC,WAAOL,SAAS,KAAKF,SAAS,MAAM,uBAAA;EACtC;EAEA,MAAeQ,gBAAgB;AAC7B,UAAM,MAAMA,cAAAA;AAEZ,SAAKhB,wBAAwB,KAAKiB,OAAOC,cAAc,oDAAoD;MAAEC,aAAa;IAA2B,CAAA;AACrJ,SAAKlB,qBAAqB,KAAKgB,OAAOC,cAAc,iDAAiD;MAAEC,aAAa;IAAyB,CAAA;AAC7I,SAAKhB,uBAAuB,KAAKc,OAAOC,cAAc,mDAAmD;MAAEC,aAAa;IAA4B,CAAA;AACpJ,SAAKjB,qBAAqB,KAAKe,OAAOC,cAAc,kDAAkD;MAAEC,aAAa;IAAyB,CAAA;AAE9I,UAAMR,UAAUD,SAAS,KAAKU,OAAOT,SAAS,MAAM,+BAAA;AACpD,UAAMF,aAAaC,SAASC,QAAQF,YAAY,MAAM,gCAAA;AACtD,UAAMM,SAASL,SAASD,WAAWM,QAAQ,MAAM,6CAAA;AAIjD,SAAKV,WAAWM;AAChB,SAAKP,cAAcK;AACnB,SAAKD,UAAUO;EACjB;EAEA,MAAeM,cAAcC,UAA0C;AACrE,QAAI,KAAKhB,aAAaiB,SAAQ,GAAI;AAChC,WAAKC,QAAQC,MAAM,8BAA8B,KAAKC,EAAE,0CAA0CC,KAAKC,IAAG,CAAA,GAAK;AAC/G,aAAO,CAAA;IACT;AACA,WAAO,MAAM,KAAKtB,aAAauB,aAAa,YAAA;AAC1C,YAAMC,YAAsB,CAAA;AAC5B,UAAIC,YAAYT,QAAAA,KAAaA,SAASU,WAAW,GAAG;AAClD,cAAM,KAAKC,cAAa;MAC1B,OAAO;AAEL,cAAMC,iBAAiBZ,SACpBa,OAAOC,qBAAAA,EACPC,IAAkB,CAACC,MAAAA;AAClB,gBAAM,EAAEC,MAAMC,OAAOC,YAAW,IAAKH;AACrC,gBAAME,QAAQE,iBAAiBD,aAAa;YAAEE,MAAM;UAAgB,CAAA;AACpE,iBAAO;YAAEJ;YAAMC;UAAM;QACvB,CAAA,EAAGL,OAAOS,CAAAA,iBAAgBjD,gBAAgBkD,SAASD,aAAaL,IAAI,CAAA;AACtE,mBAAWK,gBAAgBV,gBAAgB;AACzC,gBAAMY,SAAS,MAAM,KAAKC,kBAAkBH,YAAAA;AAC5C,cAAI/B,UAAUiC,MAAAA,EAAShB,CAAAA,UAASkB,KAAI,GAAIC,2BAA2BH,MAAAA,CAAAA;QACrE;MACF;AACA,aAAOhB;IACT,CAAA;EACF;EAEQoB,8BAA8BC,iBAA0CC,SAA2C;AACzH,UAAMC,gBAAyC,CAAC;AAChD,UAAMC,eAAeC,OAAOC,OAAOL,eAAAA,EAAiBM,OAAO,CAACC,KAAKC,QAAQD,MAAMC,KAAK,EAAE;AACtF,eAAW,CAACC,QAAQC,MAAAA,KAAWN,OAAOO,QAAQX,eAAAA,GAAkB;AAE9D,UAAIU,UAAU,GAAI;AAClB,YAAME,SAAUX,UAAUS,SAAUP;AAEpC,UAAIS,UAAU,GAAI;AAElB,YAAMC,iBAAiBC,sBAAsBC,UAAUN,MAAAA,GAASlE,KAAAA;AAChE2D,oBAAcW,cAAAA,IAAkBD;IAClC;AACA,UAAMI,eAAeZ,OAAOC,OAAOH,aAAAA,EAAeI,OAAO,CAACC,KAAKC,QAAQD,MAAMC,KAAK,EAAE;AACpFjD,aAASyD,gBAAgBf,SAAS,MAAM,yCAAA;AACxC,UAAMgB,YAAYhB,UAAUe;AAC5B,QAAIC,YAAY,IAAI;AAElBf,oBAAcgB,uBAAAA,IAA2BD;IAC3C;AACA,WAAOf;EACT;EAEA,MAAcpB,gBAAoC;AAEhD,UAAMqC,UAAuC,CAAA;AAE7C,eAAW/B,QAAQ5C,iBAAiB;AAElC,YAAM4E,OAAO;AACb,YAAMC,KAAK,MAAM,KAAKzD,OAAO0D,mBAAkB;AAC/C,YAAMC,QAAQC,gBAAgB;QAACJ;QAAMC;SAAK;QAAE7B,MAAM;MAAgB,CAAA;AAElE,YAAMT,iBAAiB0C,gBAAgBF,OAAO;QAACnC;OAAK;AACpD,iBAAWK,gBAAgBV,gBAAgB;AACzC,cAAMY,SAAS,MAAM,KAAKC,kBAAkBH,YAAAA;AAC5C,YAAI/B,UAAUiC,MAAAA,GAAS;AACrBwB,kBAAQtB,KAAKF,MAAAA;QACf;AACA,cAAM+B,MAAM,KAAKjE,mBAAmB;MACtC;IACF;AACA,WAAOkE,4BAA4BR,OAAAA;EACrC;EAEA,MAAcvB,kBAAkBH,cAA4E;AAC1G,SAAKpB,QAAQuD,KAAK,sCAAsCnC,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,EAAE;AAC1G,UAAMwC,yBAAyB;MAAEzC,MAAMK,aAAaL,KAAK0C,SAAQ;MAAIzC,OAAOI,aAAaJ,MAAMyC,SAAQ;IAAG;AAC1G,QAAI;AACF,WAAKhF,oBAAoBiF,IAAI,GAAGF,sBAAAA;AAEhC,YAAMG,oBAAoBC,2BAA2BxC,YAAAA;AACrD,YAAMQ,UAAU,MAAM,KAAKrC,OAAOsE,QAAQjC,QAAQkC,eAAeH,iBAAAA;AACjE,WAAK3D,QAAQuD,KACX,oBAAoB3B,OAAAA,sBAA6BR,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,2BACpE2C,iBAAAA,EAAmB;AAElD,UAAI/B,UAAU,IAAI;AAChB,aAAKpD,uBAAuBkF,IAAI,GAAGF,sBAAAA;AAEnC,cAAM7B,kBAAkB,MAAM,KAAKpC,OAAOwE,kCAAkC3C,YAAAA;AAC5E,cAAM4C,mBAAmBjC,OAAOkC,KAAKtC,eAAAA,EAAiBnB;AACtD,aAAKR,QAAQuD,KACX,SAASS,gBAAAA,+BAA+C5C,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,EAAE;AAG5G,YAAI,CAAC,KAAK1B,OAAO4E,iBAAiB;AAEhChF,mBAAS8E,mBAAmB,GAAG,MAAM,+BAAA;QACvC;AACA,cAAMG,uBAAuB,KAAKzC,8BAA8BC,iBAAiBC,OAAAA;AACjF,aAAK5B,QAAQuD,KACX,6CAA6CnC,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,SAClFe,OAAOkC,KAAKE,oBAAAA,EAAsB3D,MAAM,YAAY;AAGjE,cAAM4D,KAAK,MAAM,KAAKC,oCAAoCV,mBAAmBQ,sBAAsB/C,cAAc,KAAKjC,OAAO;AAC7H,aAAKa,QAAQuD,KAAK,4BAA4BnC,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,EAAE;AAChG,aAAKrC,sBAAsB+E,IAAI,GAAGF,sBAAAA;AAElC,eAAOY;MACT;IACF,SAASE,OAAO;AACd,WAAK5F,oBAAoBgF,IAAI,GAAGF,sBAAAA;AAChC,WAAKxD,QAAQsE,MAAM,mCAAmClD,aAAaL,IAAI,aAAaK,aAAaJ,KAAK,KAAKsD,KAAAA;IAC7G;EACF;EAEA,MAAcD,oCACZV,mBACAQ,sBACApD,MACA5B,SACgD;AAEhD,UAAMoF,kBAAkBC,sBAAsBb,mBAAmBQ,oBAAAA;AACjEI,oBAAgBE,UAAU;MAAE1D;IAAK;AACjC,UAAMkC,qBAAqB,MAAM,KAAK1D,OAAO0D,mBAAkB;AAC/D,UAAM3B,SAAS,MAAMnC,QAAQuF,qBAAqB;MAACH;OAAkB,CAAA,GAAI;MAAEI,KAAK1B;MAAoB2B,KAAK1D,iBAAiB+B,qBAAqB,EAAA;IAAI,CAAA;AACnJ,QAAI5D,UAAUiC,MAAAA,EAAS,QAAOA,OAAO,CAAA;EACvC;AACF;;;AC1OA,SACEuD,YAAYC,YAAAA,WAAUC,eAAeC,aAAaC,QAAQC,aAAAA,YAAWC,eAAAA,cACrEC,aAAAA,YAAWC,aACN;AAKP,SAASC,oBAAAA,mBAAkBC,YAAAA,iBAAgB;AAI3C,SACEC,yBAAAA,wBACAC,yBAAAA,wBAAuBC,8BAAAA,6BAA4BC,qBAAqBC,0BACxEC,qBAAqBC,yBAChB;AACP,OAAOC,OAAO;AAEP,IAAMC,mDAAmDC,UAAS,qEAAqE,IAAA;AAqB9I,IAAMC,SAAQ;AAYP,IAAMC,0BAA0BC,EAAEC,OAAO;EAC9C,QAAQC;EACR,kBAAkBC;EAClB,cAAcH,EAAEI,OAAM;EACtB,oBAAoBC;EACpB,uBAAuBC;EACvB,wBAAwBA;AAC1B,CAAA;AAIA,IAAMC,4BAA4B,wBAACC,WAAAA;AACjC,SAAO;IACLC,QAAQD,OAAO,kBAAA;IACfE,KAAKF,OAAO,qBAAA;IACZG,MAAMC,WAAUJ,OAAOK,IAAI;IAC3BC,KAAKN,OAAO,sBAAA;IACZO,IAAIH,WAAUJ,OAAO,gBAAA,CAAiB;EACxC;AACF,GARkC;AAU3B,IAAMQ,uCAAN,cAGGC,kBAAAA;EA5EV,OA4EUA;;;EACR,OAAyBC,gBAAgB;IAACtB;;EAC1C,OAAyBuB,sBAAsBvB;EACvCwB;EACAC;EACAC;EAER,IAAcC,UAA4B;AACxC,WAAO,KAAKC,OAAOD;EACrB;EAEA,MAAeE,gBAAgB;AAC7B,UAAM,MAAMA,cAAAA;AAEZ,SAAKL,2BAA2B,KAAKM,OAAOC,cAC1C,2DACA;MAAEC,aAAa;IAA8B,CAAA;AAE/C,SAAKN,0BAA0B,KAAKI,OAAOC,cACzC,0DACA;MAAEC,aAAa;IAA+B,CAAA;AAEhD,SAAKP,wBAAwB,KAAKK,OAAOC,cACvC,yDACA;MAAEC,aAAa;IAA4B,CAAA;EAE/C;EAEA,MAAeC,cAAcC,UAA0C;AACrE,UAAMC,OAAOD,UAAUE,KAAKC,CAAAA,MAAKC,oBAAoBD,CAAAA,CAAAA;AACrD,UAAME,YAAYL,UAAUE,KAAKC,CAAAA,MAAKG,yBAAyBH,CAAAA,CAAAA;AAC/D,QAAII,aAAYN,IAAAA,KAASM,aAAYF,SAAAA,EAAY,QAAO,CAAA;AACxD,SAAKf,0BAA0BkB,IAAI,CAAA;AACnC,UAAMC,QAAQ,MAAMC,oBAAoBT,MAAMI,SAAAA;AAC9C,QAAI,CAACI,OAAO;AACV,WAAKlB,uBAAuBiB,IAAI,CAAA;AAChC,YAAM,IAAIG,MAAM,0BAAA;IAClB;AACA,UAAMjC,SAAST,wBAAwB2C,MAAMX,KAAKvB,MAAM;AACxD,UAAMmC,SAASpC,0BAA0BC,MAAAA;AACzC,UAAMoC,mBAAmBhC,WAAUuB,UAAUU,OAAO;AACpD,UAAMC,gBAAgBlC,WAAU+B,OAAOhC,IAAI;AAC3C,QAAIiC,qBAAqBE,eAAe;AACtC,YAAMC,KAAK,MAAM,KAAKC,oCAAoCL,MAAAA;AAC1D,UAAIM,WAAUF,EAAAA,GAAK;AACjB,aAAKzB,yBAAyBgB,IAAI,CAAA;AAClC,eAAOY,4BAA2BH,EAAAA;MACpC;IACF;AACA,SAAK1B,uBAAuBiB,IAAI,CAAA;AAChC,WAAO,CAAA;EACT;EAEUU,sCAAsC,8BAAOG,gBAAAA;AACrD,UAAM,EACJ1C,QAAQE,MAAMkC,SAAS9B,IAAID,KAAKJ,IAAG,IACjCyC;AAEJ,UAAMC,SAASC,UAAS,KAAK9B,QAAQ6B,QAAQ,MAAM,kCAAA;AACnD,UAAME,gBAAgB,MAAMF,OAAOP,QAAO;AAC1C,UAAMU,aAAa,KAAKhC,QAAQgC;AAChC,UAAMC,SAASH,UAASE,WAAWC,QAAQ,MAAM,6CAAA;AAMjD,UAAMC,eAAe,MAAMD,OAAOE,mBAAkB;AACpD,QAAID,eAAe3C,OAAO2C,eAAe/C,IAAK,OAAM,IAAI+B,MAAM,+CAAA;AAG9D,UAAMkB,gBAAgBC,uBAAsBf,SAAS/C,MAAAA;AAGrD,UAAM+D,UAAU,MAAML,OAAOM,QAAQD,QAAQE,eAAeJ,aAAAA;AAG5D,UAAMK,mBAAmBC,YAAYC,MAAMzD,MAAAA,CAAAA;AAC3C4C,IAAAA,UAASQ,YAAYG,kBAAkB,MAAM,wCAAA;AAG7C,UAAMG,YAAY,MAAMX,OAAOM,QAAQD,QAAQE,eAAeT,aAAAA;AAC9DD,IAAAA,UAASc,YAAY,OAAO,MAAM,wDAAA;AAGlC,UAAMC,kBAAkBC,uBAAsBV,eAAe;MAAE,CAAC5C,EAAAA,GAAKkD,YAAYC,MAAMzD,MAAAA,CAAAA;IAAS,CAAA;AAEhG2D,oBAAgBE,UAAU;MAAEzB;MAAS/C,OAAAA;IAAM;AAC3C,UAAMyE,QAAQ,MAAMf,OAAOgB,QAAO;AAClC,UAAMC,SAAS,MAAM,KAAKlD,QAAQmD,qBAAqB;MAACN;OAAkB,CAAA,GAAI;MAC5EG;MAAOzD;MAAKJ;IACd,CAAA;AACA,QAAIuC,WAAUwB,MAAAA,EAAS,QAAOA,OAAO,CAAA;EACvC,GAxCgD;AAyClD;;;AC1KA,SAASE,iBAAiB;AAM1B,SACEC,SACAC,0BACAC,+BACK;;;ACZP,SAASC,sBAAsB;AAE/B,SAASC,wBAAwB;AAIjC,OAAOC,cAAa;;;ACNpB,SAASC,gCAAgC;AACzC,SAASC,8BAA8B;AACvC,SAASC,2BAA2B;AAS7B,IAAMC,qBAAqB,6BAAA;AAChC,QAAMC,mBAAmB;IAAC,IAAIC,oBAAAA;IAAuB,IAAIC,uBAAAA;;AACzDC,2BAAyB;IAAEH;EAAiB,CAAA;AAC9C,GAHkC;;;ACVlC,SAASI,4BAA4B;AAErC,SAASC,qBAAqB;AAE9B,IAAMC,UAAUC,cAAcC;AAE9B,IAAMC,UAAuC,wBAACC,MAAMC,QAAAA;AAClDC,uBAAqBD,GAAAA;AACrBA,MAAIE,OAAO,GAAA,EAAKC,KAAK;IAAER;EAAQ,CAAA;AACjC,GAH6C;AAKtC,IAAMS,WAAwCN;;;ACXrD,SAASO,wBAAAA,6BAA4B;AAErC,SAASC,iBAAAA,sBAAqB;AAE9B,IAAMC,WAAUC,eAAcC;AAE9B,IAAMC,WAAuC,wBAACC,MAAMC,QAAAA;AAClDC,EAAAA,sBAAqBD,GAAAA;AACrBA,MAAIE,OAAO,GAAA,EAAKC,KAAK;IAAER,SAAAA;EAAQ,CAAA;AACjC,GAH6C;AAKtC,IAAMS,YAAyCN;;;ACXtD,SAASO,wBAAAA,6BAA4B;AAErC,SAASC,iBAAAA,sBAAqB;AAE9B,IAAMC,WAAUC,eAAcC;AAE9B,IAAMC,WAAuC,wBAACC,MAAMC,QAAAA;AAClDC,EAAAA,sBAAqBD,GAAAA;AACrBA,MAAIE,OAAO,GAAA,EAAKC,KAAK;IAAER,SAAAA;EAAQ,CAAA;AACjC,GAH6C;AAKtC,IAAMS,cAA2CN;;;ACNjD,IAAMO,iBAAiB,wBAACC,QAAAA;AAC7BA,MAAIC,IAAI,UAAUC,QAAAA;AAClBF,MAAIC,IAAI,WAAWE,SAAAA;AACnBH,MAAIC,IAAI,aAAaG,WAAAA;AACvB,GAJ8B;;;ACN9B,SAASC,wBAAAA,6BAA4B;AACrC,SAASC,QAAQC,aAAAA,kBAAiB;AAMlC,SACEC,qBAAqBC,cAAcC,YAAYC,sBAC1C;AAEP,OAAOC,aAAa;AAEpB,IAAMC,mBAAmB,8BAAOC,MAAoBC,8BAAAA;AAClD,QAAMC,MAAM,MAAMF,KAAKG,QAAQF,yBAAAA;AAC/B,SAAOG,oBAAoBF,KAAK;IAAEG,UAAU;EAAK,CAAA;AACnD,GAHyB;AAKzB,IAAIC;AAEJ,IAAMC,eAAe,8BAAOP,MAAoBC,8BAAAA;AAC9C,MAAIO,WAAUF,iBAAAA,EAAoB,QAAOA;AACzCA,sBAAoB,MAAMP,iBAAiBC,MAAMC,yBAAAA;AACjD,SAAOK;AACT,GAJqB;AAWd,IAAMG,sBAAsB,wBAACC,YAAAA;AAClC,QAAM,EAAEV,MAAMC,0BAAyB,IAAKS;AAC5C,QAAMC,SAASC,QAAQC,OAAO;IAAEC,aAAa;EAAK,CAAA;AAElDH,SAAOI,KAAK,WAAW,OAAOC,KAAKC,QAAAA;AACjCC,IAAAA,sBAAqBD,GAAAA;AACrB,UAAME,QAAOC,MAAMC,QAAQL,IAAIG,IAAI,IAAIH,IAAIG,OAAO;MAACH,IAAIG;;AACvD,UAAMG,YAAY,MAAMC,eAAeC,UAAmBL,KAAAA,GAAOM,IAAIC,CAAAA,MAAKA,EAAE,CAAA,CAAE;AAC9E,UAAMC,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,MAAMD,UAAUE,OAAOP,QAAAA;AACtCL,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AAEAjB,SAAOqB,IAAI,SAAS,OAAOhB,KAAoCC,QAAAA;AAC7DC,IAAAA,sBAAqBD,GAAAA;AACrB,UAAMgB,SAASC,WAAWlB,IAAImB,MAAMF,MAAM,IAAIjB,IAAImB,MAAMF,SAASG;AACjE,UAAMC,QAAQ7B,WAAUQ,IAAImB,MAAME,KAAK,IAAIC,OAAOtB,IAAImB,MAAME,KAAK,IAAID;AACrE,UAAMG,OAAO/B,WAAUQ,IAAImB,MAAMI,IAAI,IAAIC,QAAQxB,IAAImB,MAAMI,IAAI,IAAIH;AACnE,UAAMK,QAAQzB,IAAImB,MAAMM,UAAU,QAAQ,QAAQ;AAClD,UAAM/B,WAAgC;MACpC2B;MAAOE;MAAME;MAAOR;IACtB;AACA,UAAMN,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,MAAMD,UAAUe,KAAKhC,QAAAA;AACpCO,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AACAjB,SAAOI,KAAK,SAAS,OAAOC,KAAwDC,QAAAA;AAClFC,IAAAA,sBAAqBD,GAAAA;AACrB,UAAMP,WAAUM,IAAIG;AACpB,UAAMQ,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,UAAM2B,SAAS,OAAOpB,WAAUE,QAAAA,IAAWiB,UAAUe,KAAKhC,QAAAA,IAAWiB,UAAUe,KAAI;AACnFzB,QAAIa,OAAO,GAAA,EAAKC,KAAKH,MAAAA;EACvB,CAAA;AAEAjB,SAAOqB,IAAI,cAAc,OAAOhB,KAAKC,QAAAA;AACnCC,IAAAA,sBAAqBD,GAAAA;AACrB,UAAM,EAAE0B,MAAMC,QAAO,IAAK5B,IAAI6B;AAC9B,UAAMF,OAAOG,OAAOF,OAAAA;AACpB,QAAIpC,WAAUmC,IAAAA,GAAO;AACnB,YAAMhB,YAAY,MAAMpB,aAAaP,MAAMC,yBAAAA;AAC3C,YAAM,CAAC8C,OAAAA,IAAW,MAAMpB,UAAUK,IAAI;QAACW;OAAK;AAC5C,UAAIK,aAAaD,OAAAA,GAAU;AACzB9B,YAAIc,KAAKgB,OAAAA;AACT;MACF,OAAO;AACL9B,YAAIa,OAAO,GAAA,EAAKmB,KAAI;AACpB;MACF;IACF;AACAhC,QAAIa,OAAO,GAAA,EAAKmB,KAAI;EACtB,CAAA;AAEA,SAAOtC;AACT,GArDmC;;;AC3B5B,IAAMuC,oBAAoB,wBAACC,QAAAA;AAChC,QAAM,EAAEC,KAAI,IAAKD;AACjB,QAAME,4BAA4B;AAClCF,MAAIG,IAAI,SAASC,oBAAoB;IAAEH;IAAMC;EAA0B,CAAA,CAAA;AACzE,GAJiC;;;ACJjC,SAASG,2BAA2B;;;ACCpC,SAASC,+BAA+B;AACxC,SAASC,YAAAA,WAAUC,aAAAA,kBAAiB;AAIpC,SACEC,oBAAoBC,kBAAAA,iBAAgBC,uBAC/B;AAEP,SACEC,mBAAAA,kBAAiBC,mBAAAA,kBACjBC,oBAAoBC,wBACf;AACP,SAASC,KAAAA,UAAS;;;ACdX,IAAMC,mBAAkB;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;;;;ADkB/C,IAAMC,QAAQC,GAAEC,OAAO;EACrBC,WAAWF,GAAEG,OAAOC,OAAM,EAAGC,IAAG,EAAGC,YAAW,EAAGC,SAAQ;EACzDC,SAASR,GAAEG,OAAOC,OAAM,EAAGC,IAAG,EAAGC,YAAW,EAAGC,SAAQ;EACvDE,MAAMT,GAAEG,OAAOC,OAAM,EAAGC,IAAG,EAAGC,YAAW,EAAGI,IAAIC,KAAKD,IAAG,GAAIE,gBAAAA,CAAAA,EAAkBC,IAAIF,KAAKE,IAAG,GAAID,gBAAAA,CAAAA,EAAkBL,SAAQ,EAAGO,QAAQ,CAAA;AACrI,CAAA;AACA,IAAMC,WAAWf,GAAEgB,MAAMC,eAAAA;AAEzB,IAAMC,kBAAkBC,wBAAwB;EAAEpB;EAAOgB;AAAS,CAAA;AAElE,IAAMK,mCAAmC,8BAAOC,SAAAA;AAC9C,QAAMC,MAAM,MAAMD,KAAKE,QAAQ,uDAAA;AAC/B,QAAMC,WAAWC,mBAAmBH,GAAAA;AACpC,SAAOI,UAASF,UAAU,MAAM,iDAAA;AAClC,GAJyC;AAMlC,IAAMG,iBAAkC;EAC7CC,QAAQ;EACRC,MAAM;EACNC,UAAUZ,gBAAgB,OAAOa,KAAKC,QAAAA;AACpC,UAAM,EAAEC,SAASZ,KAAI,IAAKU,IAAIG;AAC9B,UAAM,EACJhC,WAAWM,SAASC,KAAI,IACtBT,GAAEmC,MAAMpC,OAAOgC,IAAIhC,KAAK;AAC5B,UAAMqC,SAAS,MAAMH,QAAQI,YAAuBC,gBAAAA;AACpD,UAAMC,OAAOC,WAAUtC,SAAAA,IAAaA,YAAY;AAChD,UAAMuC,eAAe,MAAML,OAAOM,mBAAkB;AACpD,UAAMC,KAAKH,WAAUhC,OAAAA,IAAWG,KAAKD,IAAIF,SAASiC,YAAAA,IAAgBA;AAClE,QAAIE,MAAMJ,MAAM;AACdP,UAAIY,OAAO,GAAA;AACXZ,UAAIa,KAAK,CAAA,CAAE;AACX;IACF;AACA,UAAMC,QAAQC,iBAAgB;MAACR;MAAMI;OAAK;MAAEK,MAAM;IAAa,CAAA;AAE/D,UAAMC,iBAAiBC,iBAAgBJ,OAAO;MAACrC;KAAK;AACpD,UAAM0C,UAAqB,CAAA;AAC3B,eAAWC,gBAAgBH,gBAAgB;AACzC,YAAM3B,MAAM,MAAMF,iCAAiCC,IAAAA;AACnD,YAAMgC,sBAAsB,IAAIC,gBAAoC;QAAEC,QAAQC;MAAmB,CAAA,EAAGC,OAAOL,YAAAA,EAAcM,MAAK;AAC9H,YAAMC,SAAS,MAAMrC,IAAIsC,OAAO;QAACP;OAAoB;AACrDF,cAAQU,KAAI,GAAIF,MAAAA;IAClB;AACA3B,QAAIY,OAAO,GAAA;AACXZ,QAAIa,KAAKM,OAAAA;EACX,CAAA;AACF;;;AE9DA,SAASW,2BAAAA,gCAA+B;AACxC,SAASC,YAAAA,iBAAgB;AAEzB,SACEC,sBAAAA,qBAAoBC,mBAAAA,kBAAiBC,gCAChC;AACP,SACEC,4BAA4BC,yBAAyBC,iCACrDC,oCACK;AACP,SAASC,KAAAA,UAAS;AAElB,IAAMC,OAAOC,GAAEC,MAAM;EACnBC,yBAAyBC,uBAAAA,EAAyBC,OAAOC,2BAA2BC,KAAK;EACzFJ,yBAAyBK,4BAAAA,EAA8BH,OAAOI,gCAAgCF,KAAK;CACpG;AAED,IAAMG,YAAWT,GAAEU,MAAMC,gBAAAA;AACzB,IAAMC,mBAAkBC,yBAAwB;EAC9Cd;EACAU,UAAAA;AACF,CAAA;AAEA,IAAMK,0CAA0C,8BAAOC,SAAAA;AACrD,QAAMC,MAAM,MAAMD,KAAKE,QAAQ,8DAAA;AAC/B,QAAMC,WAAWC,oBAAmBH,GAAAA;AACpC,SAAOI,UAASF,UAAU,MAAM,wDAAA;AAClC,GAJgD;AAMzC,IAAMG,aAA8B;EACzCC,QAAQ;EACRC,MAAM;EACNC,UAAUZ,iBAAgB,OAAOa,KAAKC,QAAAA;AACpC,UAAM,EAAEX,KAAI,IAAKU,IAAIE;AACrB,UAAM,EAAE5B,MAAAA,MAAI,IAAK0B;AACjB,UAAMP,WAAW,MAAMJ,wCAAwCC,IAAAA;AAC/D,UAAMa,SAAS,MAAMV,SAASW,OAAO9B,KAAAA;AACrC2B,QAAII,OAAO,GAAA;AACXJ,QAAIK,KAAKH,MAAAA;EACX,CAAA;AACF;;;ACrCO,IAAMI,sBAAsB,6BAAA;AACjC,SAAO;IACLC;IACAC;;AAEJ,GALmC;;;AJC5B,IAAMC,4BAA4B,wBAACC,QAAAA;AACxC,QAAMC,mBAAmBC,oBAAAA;AACzBC,sBAAoBH,KAAKC,gBAAAA;AAC3B,GAHyC;;;AKClC,IAAMG,YAAY,wBAACC,QAAAA;AACxBC,iBAAeD,GAAAA;AACfE,oBAAkBF,GAAAA;AAClBG,4BAA0BH,GAAAA;AAC5B,GAJyB;;;AbKlB,IAAMI,SAAS,wBAACC,MAAoBC,QAAgCC,YAAAA;AACzEC,qBAAAA;AACA,QAAMC,MAAMC,SAAAA;AACZC,mBAAiBF,GAAAA;AACjBA,MAAIH,SAASA;AACbG,MAAIJ,OAAOA;AACXI,MAAIF,UAAUA;AACdK,YAAUH,GAAAA;AACVA,MAAII,IAAIC,cAAAA;AACR,SAAOL;AACT,GAVsB;;;AcXtB,SAASM,YAAY;AACrB,SAASC,2BAA2B;AAEpC,SAASC,gBAAgB;;;ACFzB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,0BAA0B;AACnC,SAASC,qBAAqB;AAC9B,SAASC,qBAAqB;AAE9B,SACEC,gBAAgBC,4BAChBC,iBAAiBC,gBAAgBC,4BAC5B;AAEP,SAASC,sBAAsB;AAUxB,IAAMC,aAAa,8BAAOC,SAA4BC,YAAAA;AAC3D,QAAM,EAAEC,QAAQC,OAAM,IAAKH;AAC3B,QAAM,EAAEI,aAAY,IAAKF,OAAOG,WAAWC,QAAQ,CAAC;AACpD,QAAM,EAAEC,MAAMC,WAAW,YAAYC,OAAa,KAAI,IAAKP,OAAOG,WAAWK,SAASC,UAAU,CAAC;AACjG,QAAM,EAAEC,eAAeC,cAAa,IAAK,MAAMC,cAAc;IAC3DC,YAAY;MACVC,aAAa;MACbC,gBAAgB;IAClB;IACAb;IACAc,eAAe;MAAEV;MAAUC;IAAK;EAClC,CAAA;AAEA,MAAIU,WAAUhB,MAAAA,EAASiB,gBAAeC,gBAAgBlB;AACtD,QAAMmB,iBAAiBnB,SAAS,IAAIoB,2BAA2BpB,MAAAA,IAAUqB;AAEzE,QAAMC,UAAU,IAAIC,qBAAAA;AAEpB,QAAMC,cAAczB,OAAO0B,SAASC;AACpC,MAAIC,eAAeH,WAAAA,GAAc;AAE/B,UAAM,EACJI,kBAAkBC,oBAAoBC,UAAUC,QAAQC,QAAQC,UAAUC,UAAUC,YAAYC,UAAUC,WAAU,IAClHb;AACJ,UAAMc,mBAA8C;MAClDT;MAAoBI;MAAUF;MAAQI;MAAYE;IACpD;AACA,UAAME,SAAyC;MAC7C7B;MAAe4B;MAAkBnB;MAAgBV;IACnD;AAEAa,YAAQkB,SAASC,mBAAmBC,QAAQH,MAAAA,GAASlB,QAAW,IAAA;EAClE;AAEAC,UAAQkB,SAASG,gBAAgBD,QAAQ;IACvCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AACAG,UAAQkB,SAASI,eAAeF,QAAQ;IACtCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AACAG,UAAQkB,SAASK,cAAcH,QAAQ;IACrCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AAEA,QAAM2B,sCAAoF;IACxFhD;IAASW;IAAeC;IAAeS;EACzC;AACAG,UAAQkB,SAASO,8BAA8BL,QAAQI,mCAAAA,CAAAA;AACvD,QAAME,6CAAkG;IACtGlD;IAASW;IAAeC;IAAeS;EACzC;AACAG,UAAQkB,SAASS,qCAAqCP,QAAQM,0CAAAA,CAAAA;AAC9D,SAAO1B;AACT,GArD0B;;;ACpB1B,SAAS4B,uBAAuB;;;ACDhC;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW;AAAA,UACT;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,kBAAoB;AAAA,gBAClB,YAAc;AAAA,cAChB;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,aAAe;AAAA,gBACb;AAAA,kBACE,WAAa;AAAA,kBACb,gBAAkB;AAAA,kBAClB,QAAU;AAAA,kBACV,MAAQ;AAAA,gBACV;AAAA,cACF;AAAA,cACA,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,cACf,OAAS;AAAA,gBACP;AAAA,kBACE,KAAO;AAAA,kBACP,UAAY;AAAA,gBACd;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAU;AAAA,UACR;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,gBAAkB;AAAA,gBAChB;AAAA,gBACA;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,iBAAmB;AAAA,cACnB,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;AC7EO,IAAMC,eAAeC;;;ACJrB,IAAMC,wBAAwB,CAAA;;;ACE9B,IAAMC,uBAAyC,CAAA;;;AJmB/C,IAAMC,UAAU,8BAAOC,SAA4BC,SAA2BC,WAAAA;AACnF,QAAMC,UAAU,MAAMC,WAAWJ,SAASC,OAAAA;AAC1C,QAAMI,UAAU,IAAIC,gBAAgBC,cAAcL,QAAQC,SAASK,sBAAsBC,qBAAAA;AACzF,QAAM,CAACC,MAAM,GAAGC,UAAAA,IAAc,MAAMN,QAAQO,UAAS;AACrD,MAAID,YAAYE,SAAS,GAAG;AAC1B,UAAMC,QAAQC,IAAIJ,WAAWK,IAAIC,CAAAA,cAAaP,KAAKQ,SAASD,SAAAA,CAAAA,CAAAA;AAC5D,UAAMH,QAAQC,IAAIJ,WAAWK,IAAIC,CAAAA,cAAaP,KAAKS,OAAOF,UAAUG,SAAS,IAAA,CAAA,CAAA;EAC/E;AACA,SAAOV;AACT,GATuB;;;AFbvB,IAAMW,WAAW;AAGV,IAAMC,YAAY,8BAAOC,SAAiCC,SAA2BC,SAAyCC,iBAAAA;AACnI,QAAM,EAAEC,QAAQC,OAAM,IAAKL;AAC3B,QAAM,EAAEM,KAAI,IAAKD;AACjB,QAAME,OAAO,MAAMC,KAAAA;AACnB,QAAMC,aAAa,MAAMC,oBAAoBV,SAASO,IAAAA;AACtD,QAAMI,SAAS,MAAMC,SAASC,WAAWJ,UAAAA;AACzC,QAAMK,OAAOX,gBAAgB,MAAMY,QAAQf,SAASC,SAASU,MAAAA;AAC7D,QAAMK,MAAMC,OAAOH,MAAMT,QAAQH,OAAAA;AACjC,QAAMgB,SAASF,IAAIG,OAAOb,MAAMR,UAAU,MAAMM,QAAQgB,IAAI,kDAAkDtB,QAAAA,IAAYQ,IAAAA,EAAM,CAAA;AAChIY,SAAOG,WAAW,IAAA;AAClB,SAAOH;AACT,GAXyB;;;;;;;;;;AfOlB,IAAMI,wBAAN,cAAoCC,QAAAA;SAAAA;;;EAC/BC;EACFC;EAER,IAAcC,gBAAgB;AAC5B,WAAO,KAAKF;EACd;EAEA,MAAeG,gBAAgB;AAC7B,UAAM,MAAMA,cAAAA;AACZ,SAAKH,iBAAiB,MAAM,KAAKI,QAAQC,YAAYC,uBAAAA;EACvD;EAEA,MAAeC,eAAe;AAC5B,UAAM,MAAMA,aAAAA;AACZ,SAAKC,WAAU;AACf,UAAM,KAAKC,YAAW;EACxB;EAEA,MAAeC,cAAc;AAC3B,UAAM,MAAMA,YAAAA;AACZ,SAAKF,WAAU;EACjB;EAEA,MAAcC,cAAc;AAC1B,SAAKR,SAAS,MAAMU,UAAUC,yBAAyB,KAAKC,SAAS,IAAA,GAAO,KAAKb,gBAAgB,KAAKI,OAAO;EAC/G;EAEQI,aAAa;AACnB,SAAKP,QAAQa,MAAAA;AACb,SAAKb,SAASc;EAChB;AACF;;;;","names":["assertEx","delay","isDefined","isUndefined","toAddress","AbstractSentinel","asSchema","asXL1BlockNumber","asXL1BlockRange","blockRangeSteps","completedStepRewardAddress","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","isStepIdentityPayload","XYO_STEP_REWARD_ADDRESS","Mutex","ChainStepRewardsClaimSentinelConfigSchema","asSchema","defaultStepClaimIntervalMs","scope","RewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","stepClaimIntervalMs","isDefined","config","viewer","createHandler","meter","createCounter","description","params","reportHandler","payloads","isLocked","logger","debug","id","Date","now","runExclusive","response","isUndefined","length","claimAllSteps","stepIdentities","filter","isStepIdentityPayload","map","p","step","block","blockNumber","asXL1BlockNumber","name","stepIdentity","includes","result","claimStepIdentity","push","flattenHydratedTransaction","calculateAddressDistributions","rewardsByStaker","balance","addressClaims","totalRewards","Object","values","reduce","acc","val","staker","amount","entries","reward","receiveAddress","derivedReceiveAddress","toAddress","totalClaimed","unclaimed","XYO_STEP_REWARD_ADDRESS","results","from","to","currentBlockNumber","range","asXL1BlockRange","blockRangeSteps","delay","flattenHydratedTransactions","info","claimCounterAttributes","toString","add","stepRewardAddress","completedStepRewardAddress","account","accountBalance","networkStakeStepRewardPoolRewards","rewardRecipients","keys","claimEmptySteps","addressDistributions","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","AddressZod","assertEx","EthAddressZod","hexToBigInt","HexZod","isDefined","isUndefined","toAddress","toHex","AbstractSentinel","asSchema","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","verifyEIP712Message","XL1BlockNumberZod","z","DerivedAddressWalletTransferSentinelConfigSchema","asSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","XL1BlockNumberZod","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","x","isEIP712DataPayload","signature","isEIP712SignaturePayload","isUndefined","add","valid","verifyEIP712Message","Error","parse","parsed","signatureAddress","address","parsedAddress","tx","submitRewardDistributionTransaction","isDefined","flattenHydratedTransaction","claimValues","signer","assertEx","signerAddress","connection","viewer","currentBlock","currentBlockNumber","escrowAccount","derivedReceiveAddress","balance","account","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","creatable","ActorV3","asHostActorConfigContext","XyoGatewayRunnerMoniker","standardErrors","sharedMiddleware","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getLivez","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getReadyz","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getStartupz","addProbeRoutes","app","get","getLivez","getReadyz","getStartupz","setRawResponseFormat","asHash","isDefined","asArchivistInstance","isAnyPayload","isSequence","PayloadBuilder","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","addRouteDefinitions","requestHandlerValidator","assertEx","isDefined","asSentinelInstance","PayloadBuilder","PayloadZodLoose","asXL1BlockRange","blockRangeSteps","StepIdentitySchema","XyoViewerMoniker","z","RewardableSteps","query","z","object","fromBlock","coerce","number","int","nonnegative","optional","toBlock","step","min","Math","RewardableSteps","max","default","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getChainStepRewardsClaimSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postClaimRange","method","path","handlers","req","res","locator","app","parse","viewer","getInstance","XyoViewerMoniker","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockRange","name","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","requestHandlerValidator","assertEx","asSentinelInstance","PayloadZodLoose","PayloadZodStrictOfSchema","EIP712DataPayloadFieldsZod","EIP712DataPayloadSchema","EIP712SignaturePayloadFieldsZod","EIP712SignaturePayloadSchema","z","body","z","tuple","PayloadZodStrictOfSchema","EIP712DataPayloadSchema","extend","EIP712DataPayloadFieldsZod","shape","EIP712SignaturePayloadSchema","EIP712SignaturePayloadFieldsZod","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getDerivedAddressWalletTransferSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postRedeem","method","path","handlers","req","res","app","result","report","status","json","getRouteDefinitions","postClaimRange","postRedeem","addRewardRedemptionRoutes","app","routeDefinitions","getRouteDefinitions","addRouteDefinitions","addRoutes","app","addProbeRoutes","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","locator","addInstrumentation","app","express","sharedMiddleware","addRoutes","use","standardErrors","boot","initActorSeedPhrase","HDWallet","isDefined","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","MemoryArchivist","MemorySentinel","ModuleFactoryLocator","hasMongoConfig","getLocator","context","gateway","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","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","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","gateway","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getServer","context","gateway","locator","providedNode","logger","config","port","bios","boot","seedPhrase","initActorSeedPhrase","wallet","HDWallet","fromPhrase","node","getNode","app","getApp","server","listen","log","setTimeout","RewardRedemptionActor","ActorV3","_gatewayRunner","server","gatewayRunner","createHandler","locator","getInstance","XyoGatewayRunnerMoniker","startHandler","stopServer","startServer","stopHandler","getServer","asHostActorConfigContext","context","close","undefined"]}
1
+ {"version":3,"sources":["../../src/manifest/getLocator.ts","../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts","../../src/RewardRedemptionActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/livez/get.ts","../../src/server/routes/readyz/get.ts","../../src/server/routes/startupz/get.ts","../../src/server/routes/addProbeRoutes.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts","../../src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts"],"sourcesContent":["import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext, XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\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: BaseConfigContext, gateway: XyoGatewayRunner) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9467 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-reward-redemption',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\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 // const gateway = await getGateway(config)\n const chainStepRewardsClaimSentinelParams: Partial<ChainStepRewardsClaimSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams))\n const derivedAddressWalletTransferSentinelParams: Partial<DerivedAddressWalletTransferSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams))\n return locator\n}\n\n// const getGateway = async (config: Config): Promise<XyoGatewayRunner | undefined> => {\n// const { mnemonic, chainRpcApiUrl } = config.actors.rewardRedemption\n\n// // Create locator\n// const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(chainRpcApiUrl, schemas)\n// const locator = await buildJsonRpcProviderLocator({ transportFactory })\n\n// // Register signer\n// const phrase = mnemonic ?? HDWallet.generateMnemonic()\n// const wallet = await generateXyoBaseWalletFromPhrase(phrase)\n// const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n// locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n// locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}))\n\n// // Use locator to get gateway\n// const gateway = await locator.getInstance<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.defaultMoniker)\n// return gateway\n// }\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isUndefined, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n XyoConnection, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, asXL1BlockRange, blockRangeSteps,\n completedStepRewardAddress, createTransferPayload, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n isStepIdentityPayload, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.step.rewards.claim.config', true)\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\n /**\n * Whether to claim steps even if there are no rewardees within the\n * step to claim. Defaults to false preventing rollovers of empty steps\n * as the nominal use case has rewardees present.\n */\n claimEmptySteps?: boolean\n /**\n * Step indices to scan for claimable rewards. Defaults to [3, 4, 5, 6, 7, 8],\n * matching the steps with non-zero StepRewardFractions in the protocol.\n * Override (e.g. to a single-step subset) for tests that only care about\n * one rewardable boundary.\n */\n rewardableSteps?: number[]\n /**\n * The schema for the chain step rewards claim sentinel config\n */\n schema: ChainStepRewardsClaimSentinelConfigSchema\n /**\n * The interval in milliseconds between checking for step rewards to claim\n */\n stepClaimIntervalMs: number\n}>\n\ninterface ChainStepRewardsClaimSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type ChainStepRewardsClaimSentinelParams<\n TConfig extends AnyConfigSchema<ChainStepRewardsClaimSentinelConfig> = AnyConfigSchema<ChainStepRewardsClaimSentinelConfig>,\n> = SentinelParams<TConfig> & ChainStepRewardsClaimSentinelParamFields\n\nconst defaultStepClaimIntervalMs = 15_000\n// const retryAttempts = 3\n// const retryDelayMs = 60_000\nconst scope = 'reward-escrow'\nconst DefaultRewardableSteps = [3, 4, 5, 6, 7, 8]\n\nexport class ChainStepRewardsClaimSentinel<\n TParams extends ChainStepRewardsClaimSentinelParams = ChainStepRewardsClaimSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [ChainStepRewardsClaimSentinelConfigSchema]\n static override readonly defaultConfigSchema = ChainStepRewardsClaimSentinelConfigSchema\n private _claimAttemptsCounter: Counter<Attributes> | undefined\n private _claimCheckCounter: Counter<Attributes> | undefined\n private _claimErrorCounter: Counter<Attributes> | undefined\n private _claimSuccessCounter: Counter<Attributes> | undefined\n private _connection: XyoConnection | undefined\n private _gateway: XyoGatewayRunner | undefined\n private _reportMutex = new Mutex()\n private _viewer: XyoViewer | undefined\n\n protected get connection(): XyoConnection {\n return assertEx(this._connection, () => 'Connection is not defined')\n }\n\n protected get gateway(): XyoGatewayRunner {\n return assertEx(this._gateway, () => 'Gateway is not defined')\n }\n\n protected get rewardableSteps(): number[] {\n return isDefined(this.config.rewardableSteps) ? this.config.rewardableSteps : DefaultRewardableSteps\n }\n\n protected get stepClaimIntervalMs(): number {\n return isDefined(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this._viewer, () => 'Viewer is not defined')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._claimAttemptsCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_attempts_total', { description: 'Number of claim attempts' })\n this._claimCheckCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_check_total', { description: 'Number of claim checks' })\n this._claimSuccessCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_success_total', { description: 'Number of claim successes' })\n this._claimErrorCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_errors_total', { description: 'Number of claim errors' })\n\n const gateway = assertEx(this.params.gateway, () => 'Gateway parameter is required')\n const connection = assertEx(gateway.connection, () => 'Gateway connection is required')\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n // this._gateway = withRetry(gateway, retryDelayMs, retryAttempts)\n // this._connection = withRetry(connection, retryDelayMs, retryAttempts)\n // this._viewer = withRetry(viewer, retryDelayMs, retryAttempts)\n this._gateway = gateway // withRetry(gateway, retryDelayMs, retryAttempts)\n this._connection = connection // withRetry(connection, retryDelayMs, retryAttempts)\n this._viewer = viewer // withRetry(viewer, retryDelayMs, retryAttempts)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`ChainRewardsClaimSentinel [${this.id}] is already running, skipping report [${Date.now()}]`)\n return []\n }\n return await this._reportMutex.runExclusive(async () => {\n const response: Payload[] = []\n if (isUndefined(payloads) || payloads.length === 0) {\n await this.claimAllSteps()\n } else {\n // Process provided payloads\n const stepIdentities = payloads\n .filter(isStepIdentityPayload)\n .map<StepIdentity>((p) => {\n const { step, block: blockNumber } = p\n const block = asXL1BlockNumber(blockNumber, { name: 'reportHandler' })\n return { step, block }\n }).filter(stepIdentity => this.rewardableSteps.includes(stepIdentity.step))\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) response.push(...flattenHydratedTransaction(result))\n }\n }\n return response\n })\n }\n\n private calculateAddressDistributions(rewardsByStaker: Record<Address, bigint>, balance: AttoXL1): Record<Address, bigint> {\n const addressClaims: Record<Address, bigint> = {}\n const totalRewards = Object.values(rewardsByStaker).reduce((acc, val) => acc + val, 0n)\n for (const [staker, amount] of Object.entries(rewardsByStaker)) {\n // Ensure they have accrued an amount\n if (amount <= 0n) continue\n const reward = (balance * amount) / totalRewards\n // Ensure they earned a reward\n if (reward <= 0n) continue\n // Accumulate rewards by address\n const receiveAddress = derivedReceiveAddress(toAddress(staker), scope)\n addressClaims[receiveAddress] = reward\n }\n const totalClaimed = Object.values(addressClaims).reduce((acc, val) => acc + val, 0n)\n assertEx(totalClaimed <= balance, () => 'Total claimed exceeds claimable balance')\n const unclaimed = balance - totalClaimed\n if (unclaimed > 0n) {\n // Return anything unclaimed (due to truncation/rounding) to step rewards pool address\n addressClaims[XYO_STEP_REWARD_ADDRESS] = unclaimed\n }\n return addressClaims\n }\n\n private async claimAllSteps(): Promise<Payload[]> {\n // No payloads to process, just do claims since last run\n const results: SignedHydratedTransaction[] = []\n\n for (const step of this.rewardableSteps) {\n // Fetch unclaimed rewards and process claims\n const from = 0\n const to = await this.viewer.currentBlockNumber()\n const range = asXL1BlockRange([from, to], { name: 'claimAllSteps' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) {\n results.push(result)\n }\n await delay(this.stepClaimIntervalMs)\n }\n }\n return flattenHydratedTransactions(results)\n }\n\n private async claimStepIdentity(stepIdentity: StepIdentity): Promise<SignedHydratedTransaction | undefined> {\n this.logger?.info(`Checking rewards to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n const claimCounterAttributes = { step: stepIdentity.step.toString(), block: stepIdentity.block.toString() }\n try {\n this._claimCheckCounter?.add(1, claimCounterAttributes)\n // If wallet has balance\n const stepRewardAddress = completedStepRewardAddress(stepIdentity)\n const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress)\n this.logger?.info(\n `Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` in step reward address ${stepRewardAddress}`,\n )\n if (balance > 0n) {\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\n const rewardRecipients = Object.keys(rewardsByStaker).length\n this.logger?.info(\n `Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`,\n )\n // If not configured to claim empty steps\n if (!this.config.claimEmptySteps) {\n // Ensure there are rewards recipients\n assertEx(rewardRecipients > 0, () => 'No reward recipients for step')\n }\n const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance)\n this.logger?.info(\n `Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` with ${Object.keys(addressDistributions).length} addresses`,\n )\n // Create single transaction for all claims\n const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway)\n this.logger?.info(`Claimed rewards for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimSuccessCounter?.add(1, claimCounterAttributes)\n // Return submitted transaction\n return tx\n }\n } catch (error) {\n this._claimErrorCounter?.add(1, claimCounterAttributes)\n this.logger?.error(`Error claiming rewards for step ${stepIdentity.step} at block ${stepIdentity.block}:`, error)\n }\n }\n\n private async submitRewardDistributionTransaction(\n stepRewardAddress: Address,\n addressDistributions: Record<Address, bigint>,\n step: StepIdentity,\n gateway: XyoGatewayRunner,\n ): Promise<SignedHydratedTransaction | undefined> {\n // Create single transfer payload for all claims\n const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions)\n transferPayload.context = { step }\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n const result = await gateway.addPayloadsToChain?.([transferPayload], [], { nbf: currentBlockNumber, exp: asXL1BlockNumber(currentBlockNumber + 10) })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n AddressZod, assertEx, EthAddressZod, hexToBigInt, HexZod, isDefined, isUndefined,\n toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n SignedHydratedTransaction, XL1BlockNumber, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n createTransferPayload,\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload,\n verifyEIP712Message, XL1BlockNumberZod,\n} from '@xyo-network/xl1-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.derived.address.wallet.transfer.config', true)\nexport type DerivedAddressWalletTransferSentinelConfigSchema = typeof DerivedAddressWalletTransferSentinelConfigSchema\n\n/**\n * The configuration for the derived address wallet transfer sentinel\n */\nexport type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{\n /**\n * The schema for the derived address wallet transfer sentinel config\n */\n schema: DerivedAddressWalletTransferSentinelConfigSchema\n}>\n\nexport interface DerivedAddressWalletTransferSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type DerivedAddressWalletTransferSentinelParams<\n TConfig extends AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig> = AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig>,\n> = SentinelParams<TConfig> & DerivedAddressWalletTransferSentinelParamFields\n\nconst scope = 'reward-escrow'\n\ninterface ParsedClaimValues {\n amount: string\n // chainId: ChainId\n exp: XL1BlockNumber\n from: Address\n nbf: XL1BlockNumber\n to: Address\n}\n\n// Assuming EthAddress and Hex are string-like (typical case)\nexport const ConfirmedClaimValuesZod = z.object({\n 'From': EthAddressZod,\n 'To XL1 Address': AddressZod,\n 'XL1 Amount': z.string(),\n 'XL1 Amount (Hex)': HexZod, // Hex\n 'XL1 Not after block': XL1BlockNumberZod,\n 'XL1 Not before block': XL1BlockNumberZod,\n})\n\nexport type ConfirmedClaimValues = z.infer<typeof ConfirmedClaimValuesZod>\n\nconst parseConfirmedClaimValues = (values: ConfirmedClaimValues): ParsedClaimValues => {\n return {\n amount: values['XL1 Amount (Hex)'],\n exp: values['XL1 Not after block'],\n from: toAddress(values.From),\n nbf: values['XL1 Not before block'],\n to: toAddress(values['To XL1 Address']),\n }\n}\n\nexport class DerivedAddressWalletTransferSentinel<\n TParams extends DerivedAddressWalletTransferSentinelParams = DerivedAddressWalletTransferSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [DerivedAddressWalletTransferSentinelConfigSchema]\n static override readonly defaultConfigSchema = DerivedAddressWalletTransferSentinelConfigSchema\n private _transferAttemptsCounter: Counter<Attributes> | undefined\n private _transferErrorCounter: Counter<Attributes> | undefined\n private _transferSuccessCounter: Counter<Attributes> | undefined\n\n protected get gateway(): XyoGatewayRunner {\n return this.params.gateway\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._transferAttemptsCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_attempts_total',\n { description: 'Number of transfer attempts' },\n )\n this._transferSuccessCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_success_total',\n { description: 'Number of transfer successes' },\n )\n this._transferErrorCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_errors_total',\n { description: 'Number of transfer errors' },\n )\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n const data = payloads?.find(x => isEIP712DataPayload(x))\n const signature = payloads?.find(x => isEIP712SignaturePayload(x))\n if (isUndefined(data) || isUndefined(signature)) return []\n this._transferAttemptsCounter?.add(1)\n const valid = await verifyEIP712Message(data, signature)\n if (!valid) {\n this._transferErrorCounter?.add(1)\n throw new Error('Invalid EIP712 signature')\n }\n const values = ConfirmedClaimValuesZod.parse(data.values)\n const parsed = parseConfirmedClaimValues(values)\n const signatureAddress = toAddress(signature.address)\n const parsedAddress = toAddress(parsed.from)\n if (signatureAddress === parsedAddress) {\n const tx = await this.submitRewardDistributionTransaction(parsed)\n if (isDefined(tx)) {\n this._transferSuccessCounter?.add(1)\n return flattenHydratedTransaction(tx)\n }\n }\n this._transferErrorCounter?.add(1)\n return []\n }\n\n protected submitRewardDistributionTransaction = async (claimValues: ParsedClaimValues): Promise<SignedHydratedTransaction | undefined> => {\n const {\n amount, from: address, to, nbf, exp,\n } = claimValues\n // Ensure necessary gateway pre-requisites are met\n const signer = assertEx(this.gateway.signer, () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = this.gateway.connection\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n\n // TODO: Validate chainId against supplied in ClaimValues to prevent replay attacks\n // const chainId = await viewer.chainId()\n\n // Ensure the transaction is within the valid block range\n const currentBlock = await viewer.currentBlockNumber()\n if (currentBlock < nbf || currentBlock > exp) throw new Error('Transaction is not within a valid block range')\n\n // Parse the signer's address\n const escrowAccount = derivedReceiveAddress(address, scope)\n\n // Ensure the escrow account has sufficient balance\n const balance = await viewer.account.balance.accountBalance(escrowAccount)\n // MEMO: Currently we require the full amount to be redeemed from the escrow account. We do\n // not allow partial escrow redemptions.\n const redemptionAmount = hexToBigInt(toHex(amount))\n assertEx(balance === redemptionAmount, () => 'Insufficient balance in escrow account')\n\n // Ensure we have enough allowance to transfer from the escrow account\n const allowance = await viewer.account.balance.accountBalance(signerAddress)\n assertEx(allowance > 1000n, () => 'Insufficient allowance to transfer from escrow account')\n\n // Create the transfer payload\n const transferPayload = createTransferPayload(escrowAccount, { [to]: hexToBigInt(toHex(amount)) })\n // Add required validation context\n transferPayload.context = { address, scope }\n const chain = await viewer.chainId()\n const result = await this.gateway.addPayloadsToChain?.([transferPayload], [], {\n chain, nbf, exp,\n })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BaseConfigContext,\n Config, XyoGatewayRunner,\n} from '@xyo-network/xl1-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: BaseConfigContext, gateway: XyoGatewayRunner, wallet: WalletInstance) => {\n const locator = await getLocator(context, gateway)\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 {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"DataPrivate\",\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 \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"name\": \"ChainStepRewardsClaimSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.step.rewards.claim.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainRewardsClaimIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"ChainStepRewardsClaimSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"name\": \"DerivedAddressWalletTransferSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.derived.address.wallet.transfer.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Data\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"DataPrivate\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest } from '@xyo-network/sdk-js'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n","import type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type { ActorCapabilityNeeds, ActorParamsV3, RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport { ActorV3 } from '@xyo-network/chain-orchestration'\nimport type { XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport {\n asHostActorConfigContext,\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type RewardRedemptionActorParams = ActorParamsV3<{\n config: RewardRedemptionConfig\n}>\n\n@creatable()\nexport class RewardRedemptionActor extends ActorV3<RewardRedemptionActorParams> {\n static readonly needs: ActorCapabilityNeeds = {\n required: [\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n ],\n }\n\n protected _gatewayRunner!: XyoGatewayRunner\n private server?: Server\n\n protected get gatewayRunner() {\n return this._gatewayRunner\n }\n\n override async createHandler() {\n await super.createHandler()\n this._gatewayRunner = await this.locator.getInstance(XyoGatewayRunnerMoniker)\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true), this._gatewayRunner, this.locator)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import { standardErrors } from '@xylabs/express'\nimport type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\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, config: RewardRedemptionConfig, locator: ProviderFactoryLocatorInstance): Express => {\n addInstrumentation()\n const app = express()\n sharedMiddleware(app)\n app.config = config\n app.node = node\n app.locator = locator\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 type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getLivez: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getReadyz: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getStartupz: RequestHandler<NoReqParams> = handler\n","import type { Express } from 'express'\n\nimport { getLivez } from './livez/index.ts'\nimport { getReadyz } from './readyz/index.ts'\nimport { getStartupz } from './startupz/index.ts'\n\nexport const addProbeRoutes = (app: Express) => {\n app.get('/livez', getLivez)\n app.get('/readyz', getReadyz)\n app.get('/startupz', getStartupz)\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, ModuleIdentifier,\n NextOptions, NodeInstance, Payload,\n} from '@xyo-network/sdk-js'\nimport {\n asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type { Request, Router } from 'express'\nimport express from 'express'\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\ninterface 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 } else {\n res.status(404).send()\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 = 'Data'\n app.use('/data', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { addRouteDefinitions } from '@xylabs/express'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n addRouteDefinitions(app, routeDefinitions)\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n NodeInstance, Payload, SentinelInstance,\n} from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadBuilder, PayloadZodLoose,\n} from '@xyo-network/sdk-js'\nimport type { StepIdentityPayload, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockRange, blockRangeSteps,\n StepIdentitySchema, XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { RewardableSteps } from '../util/index.ts'\n\nconst query = z.object({\n fromBlock: z.coerce.number().int().nonnegative().optional(),\n toBlock: z.coerce.number().int().nonnegative().optional(),\n step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3),\n})\nconst response = z.array(PayloadZodLoose)\n\nconst validateRequest = requestHandlerValidator({ query, response })\n\nconst getChainStepRewardsClaimSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:ChainStepRewardsClaimSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'ChainStepRewardsClaimSentinel not found on node')\n}\n\nexport const postClaimRange: RouteDefinition = {\n method: 'post',\n path: '/rewards/claimRange',\n handlers: validateRequest(async (req, res) => {\n const { locator, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = await locator.getInstance<XyoViewer>(XyoViewerMoniker)\n const from = isDefined(fromBlock) ? fromBlock : 0\n const currentBlock = await viewer.currentBlockNumber()\n const to = isDefined(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock\n if (to <= from) {\n res.status(400)\n res.json([])\n return\n }\n const range = asXL1BlockRange([from, to], { name: 'claimRange' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n const results: Payload[] = []\n for (const stepIdentity of stepIdentities) {\n const mod = await getChainStepRewardsClaimSentinel(node)\n const stepIdentityPayload = new PayloadBuilder<StepIdentityPayload>({ schema: StepIdentitySchema }).fields(stepIdentity).build()\n const result = await mod.report([stepIdentityPayload])\n results.push(...result)\n }\n res.status(200)\n res.json(results)\n }),\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance, SentinelInstance } from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadZodLoose, PayloadZodStrictOfSchema,\n} from '@xyo-network/sdk-js'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nconst body = z.tuple([\n PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),\n PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape),\n])\n\nconst response = z.array(PayloadZodLoose)\nconst validateRequest = requestHandlerValidator({\n body,\n response,\n})\n\nconst getDerivedAddressWalletTransferSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'DerivedAddressWalletTransferSentinel not found on node')\n}\n\nexport const postRedeem: RouteDefinition = {\n method: 'post',\n path: '/rewards/redeem',\n handlers: validateRequest(async (req, res) => {\n const { node } = req.app\n const { body } = req\n const sentinel = await getDerivedAddressWalletTransferSentinel(node)\n const result = await sentinel.report(body)\n res.status(200)\n res.json(result)\n }),\n}\n","import type { RouteDefinition } from '@xylabs/express'\n\nimport { postClaimRange, postRedeem } from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n postClaimRange,\n postRedeem,\n ]\n}\n","import type { Express } from 'express'\n\nimport { addProbeRoutes } from './addProbeRoutes.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addProbeRoutes(app)\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { boot } from '@xyo-network/bios'\nimport { initActorSeedPhrase } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type {\n HostActorConfigContext, ProviderFactoryLocatorInstance, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\nexport const getServer = async (context: HostActorConfigContext, gateway: XyoGatewayRunner, locator: ProviderFactoryLocatorInstance, providedNode?: NodeInstance) => {\n const { logger, config } = context\n const { port } = config\n const bios = await boot()\n const seedPhrase = await initActorSeedPhrase(context, bios)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const node = providedNode ?? await getNode(context, gateway, wallet)\n const app = getApp(node, config, locator)\n const server = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {\n const srv = app.listen(port, hostname, () => {\n logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`)\n resolve(srv)\n })\n srv.once('error', reject)\n })\n server.setTimeout(120_000)\n return server\n}\n"],"mappings":"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","names":["isDefined","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","MemoryArchivist","MemorySentinel","ModuleFactoryLocator","hasMongoConfig","assertEx","delay","isDefined","isUndefined","toAddress","AbstractSentinel","asSchema","asXL1BlockNumber","asXL1BlockRange","blockRangeSteps","completedStepRewardAddress","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","isStepIdentityPayload","XYO_STEP_REWARD_ADDRESS","Mutex","ChainStepRewardsClaimSentinelConfigSchema","asSchema","defaultStepClaimIntervalMs","scope","DefaultRewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","rewardableSteps","isDefined","config","stepClaimIntervalMs","viewer","createHandler","meter","createCounter","description","params","reportHandler","payloads","isLocked","logger","debug","id","Date","now","runExclusive","response","isUndefined","length","claimAllSteps","stepIdentities","filter","isStepIdentityPayload","map","p","step","block","blockNumber","asXL1BlockNumber","name","stepIdentity","includes","result","claimStepIdentity","push","flattenHydratedTransaction","calculateAddressDistributions","rewardsByStaker","balance","addressClaims","totalRewards","Object","values","reduce","acc","val","staker","amount","entries","reward","receiveAddress","derivedReceiveAddress","toAddress","totalClaimed","unclaimed","XYO_STEP_REWARD_ADDRESS","results","from","to","currentBlockNumber","range","asXL1BlockRange","blockRangeSteps","delay","flattenHydratedTransactions","info","claimCounterAttributes","toString","add","stepRewardAddress","completedStepRewardAddress","account","accountBalance","networkStakeStepRewardPoolRewards","rewardRecipients","keys","claimEmptySteps","addressDistributions","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","AddressZod","assertEx","EthAddressZod","hexToBigInt","HexZod","isDefined","isUndefined","toAddress","toHex","AbstractSentinel","asSchema","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","verifyEIP712Message","XL1BlockNumberZod","z","DerivedAddressWalletTransferSentinelConfigSchema","asSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","XL1BlockNumberZod","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","x","isEIP712DataPayload","signature","isEIP712SignaturePayload","isUndefined","add","valid","verifyEIP712Message","Error","parse","parsed","signatureAddress","address","parsedAddress","tx","submitRewardDistributionTransaction","isDefined","flattenHydratedTransaction","claimValues","signer","assertEx","signerAddress","connection","viewer","currentBlock","currentBlockNumber","escrowAccount","derivedReceiveAddress","balance","account","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","getLocator","context","gateway","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","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","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","gateway","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","creatable","ActorV3","asHostActorConfigContext","XyoGatewayRunnerMoniker","XyoViewerMoniker","standardErrors","sharedMiddleware","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getLivez","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getReadyz","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getStartupz","addProbeRoutes","app","get","getLivez","getReadyz","getStartupz","setRawResponseFormat","asHash","isDefined","asArchivistInstance","isAnyPayload","isSequence","PayloadBuilder","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","addRouteDefinitions","requestHandlerValidator","assertEx","isDefined","asSentinelInstance","PayloadBuilder","PayloadZodLoose","asXL1BlockRange","blockRangeSteps","StepIdentitySchema","XyoViewerMoniker","z","RewardableSteps","query","z","object","fromBlock","coerce","number","int","nonnegative","optional","toBlock","step","min","Math","RewardableSteps","max","default","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getChainStepRewardsClaimSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postClaimRange","method","path","handlers","req","res","locator","app","parse","viewer","getInstance","XyoViewerMoniker","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockRange","name","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","requestHandlerValidator","assertEx","asSentinelInstance","PayloadZodLoose","PayloadZodStrictOfSchema","EIP712DataPayloadFieldsZod","EIP712DataPayloadSchema","EIP712SignaturePayloadFieldsZod","EIP712SignaturePayloadSchema","z","body","z","tuple","PayloadZodStrictOfSchema","EIP712DataPayloadSchema","extend","EIP712DataPayloadFieldsZod","shape","EIP712SignaturePayloadSchema","EIP712SignaturePayloadFieldsZod","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getDerivedAddressWalletTransferSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postRedeem","method","path","handlers","req","res","app","result","report","status","json","getRouteDefinitions","postClaimRange","postRedeem","addRewardRedemptionRoutes","app","routeDefinitions","getRouteDefinitions","addRouteDefinitions","addRoutes","app","addProbeRoutes","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","locator","addInstrumentation","app","express","sharedMiddleware","addRoutes","use","standardErrors","boot","initActorSeedPhrase","HDWallet","hostname","getServer","context","gateway","locator","providedNode","logger","config","port","bios","boot","seedPhrase","initActorSeedPhrase","wallet","HDWallet","fromPhrase","node","getNode","app","getApp","server","Promise","resolve","reject","srv","listen","log","once","setTimeout","RewardRedemptionActor","ActorV3","needs","required","XyoGatewayRunnerMoniker","XyoViewerMoniker","_gatewayRunner","server","gatewayRunner","createHandler","locator","getInstance","startHandler","stopServer","startServer","stopHandler","getServer","asHostActorConfigContext","context","close","undefined"]}
@@ -15,6 +15,13 @@ export type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{
15
15
  * as the nominal use case has rewardees present.
16
16
  */
17
17
  claimEmptySteps?: boolean;
18
+ /**
19
+ * Step indices to scan for claimable rewards. Defaults to [3, 4, 5, 6, 7, 8],
20
+ * matching the steps with non-zero StepRewardFractions in the protocol.
21
+ * Override (e.g. to a single-step subset) for tests that only care about
22
+ * one rewardable boundary.
23
+ */
24
+ rewardableSteps?: number[];
18
25
  /**
19
26
  * The schema for the chain step rewards claim sentinel config
20
27
  */
@@ -45,6 +52,7 @@ export declare class ChainStepRewardsClaimSentinel<TParams extends ChainStepRewa
45
52
  private _viewer;
46
53
  protected get connection(): XyoConnection;
47
54
  protected get gateway(): XyoGatewayRunner;
55
+ protected get rewardableSteps(): number[];
48
56
  protected get stepClaimIntervalMs(): number;
49
57
  protected get viewer(): XyoViewer;
50
58
  createHandler(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EAAE,OAAO,EACxB,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAY,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAEV,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAC3C,MAAM,sBAAsB,CAAA;AAQ7B,eAAO,MAAM,yCAAyC;;CAAyE,CAAA;AAC/H,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,MAAM,MAAM,mCAAmC,CAC7C,OAAO,SAAS,eAAe,CAAC,mCAAmC,CAAC,GAAG,eAAe,CAAC,mCAAmC,CAAC,IACzH,cAAc,CAAC,OAAO,CAAC,GAAG,wCAAwC,CAAA;AAQtE,qBAAa,6BAA6B,CACxC,OAAO,SAAS,mCAAmC,GAAG,mCAAmC,EACzF,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa;;SAA8C;IACpF,gBAAyB,mBAAmB;;MAA4C;IACxF,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,KAAK,UAAU,IAAI,aAAa,CAExC;IAED,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAED,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa;IAmBb,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA2CjB,mCAAmC;CAalD"}
1
+ {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EAAE,OAAO,EACxB,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAY,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAEV,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAC3C,MAAM,sBAAsB,CAAA;AAQ7B,eAAO,MAAM,yCAAyC;;CAAyE,CAAA;AAC/H,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,MAAM,MAAM,mCAAmC,CAC7C,OAAO,SAAS,eAAe,CAAC,mCAAmC,CAAC,GAAG,eAAe,CAAC,mCAAmC,CAAC,IACzH,cAAc,CAAC,OAAO,CAAC,GAAG,wCAAwC,CAAA;AAQtE,qBAAa,6BAA6B,CACxC,OAAO,SAAS,mCAAmC,GAAG,mCAAmC,EACzF,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa;;SAA8C;IACpF,gBAAyB,mBAAmB;;MAA4C;IACxF,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,KAAK,UAAU,IAAI,aAAa,CAExC;IAED,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAED,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAExC;IAED,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa;IAmBb,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA2CjB,mCAAmC;CAalD"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,KAAK,EACV,sBAAsB,EAAE,8BAA8B,EAAE,gBAAgB,EACzE,MAAM,sBAAsB,CAAA;AAQ7B,eAAO,MAAM,SAAS,GAAU,SAAS,sBAAsB,EAAE,SAAS,gBAAgB,EAAE,SAAS,8BAA8B,EAAE,eAAe,YAAY,+HAW/J,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,KAAK,EACV,sBAAsB,EAAE,8BAA8B,EAAE,gBAAgB,EACzE,MAAM,sBAAsB,CAAA;AAQ7B,eAAO,MAAM,SAAS,GAAU,SAAS,sBAAsB,EAAE,SAAS,gBAAgB,EAAE,SAAS,8BAA8B,EAAE,eAAe,YAAY,+HAiB/J,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-reward-redemption",
3
- "version": "1.20.28",
3
+ "version": "1.20.29",
4
4
  "description": "XYO Layer One Rewards",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -35,8 +35,8 @@
35
35
  "README.md"
36
36
  ],
37
37
  "dependencies": {
38
- "@xyo-network/chain-orchestration": "~1.20.28",
39
- "@xyo-network/chain-telemetry": "~1.20.28"
38
+ "@xyo-network/chain-orchestration": "~1.20.29",
39
+ "@xyo-network/chain-telemetry": "~1.20.29"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@bitauth/libauth": "~3.0.0",
@@ -44,20 +44,20 @@
44
44
  "@metamask/providers": "^22.1.1",
45
45
  "@metamask/utils": "~11.11.0",
46
46
  "@opentelemetry/api": "^1.9.1",
47
- "@opentelemetry/context-async-hooks": "~2.7.0",
48
- "@opentelemetry/context-zone": "~2.7.0",
49
- "@opentelemetry/core": "~2.7.0",
50
- "@opentelemetry/exporter-prometheus": "~0.215.0",
51
- "@opentelemetry/exporter-trace-otlp-grpc": "~0.215.0",
52
- "@opentelemetry/exporter-trace-otlp-http": "~0.215.0",
47
+ "@opentelemetry/context-async-hooks": "~2.7.1",
48
+ "@opentelemetry/context-zone": "~2.7.1",
49
+ "@opentelemetry/core": "~2.7.1",
50
+ "@opentelemetry/exporter-prometheus": "~0.216.0",
51
+ "@opentelemetry/exporter-trace-otlp-grpc": "~0.216.0",
52
+ "@opentelemetry/exporter-trace-otlp-http": "~0.216.0",
53
53
  "@opentelemetry/host-metrics": "~0.38.3",
54
- "@opentelemetry/instrumentation": "~0.215.0",
55
- "@opentelemetry/instrumentation-express": "~0.63.0",
56
- "@opentelemetry/instrumentation-http": "~0.215.0",
57
- "@opentelemetry/instrumentation-runtime-node": "~0.28.0",
58
- "@opentelemetry/resources": "~2.7.0",
59
- "@opentelemetry/sdk-metrics": "~2.7.0",
60
- "@opentelemetry/sdk-trace-base": "^2.7.0",
54
+ "@opentelemetry/instrumentation": "~0.216.0",
55
+ "@opentelemetry/instrumentation-express": "~0.64.0",
56
+ "@opentelemetry/instrumentation-http": "~0.216.0",
57
+ "@opentelemetry/instrumentation-runtime-node": "~0.29.0",
58
+ "@opentelemetry/resources": "~2.7.1",
59
+ "@opentelemetry/sdk-metrics": "~2.7.1",
60
+ "@opentelemetry/sdk-trace-base": "^2.7.1",
61
61
  "@opentelemetry/semantic-conventions": "~1.40.0",
62
62
  "@scure/base": "~2.2.0",
63
63
  "@scure/bip39": "~2.2.0",
@@ -68,8 +68,8 @@
68
68
  "@xylabs/mongo": "^5.0.101",
69
69
  "@xylabs/sdk-js": "^5.0.101",
70
70
  "@xylabs/threads": "~5.0.101",
71
- "@xylabs/toolchain": "~7.11.12",
72
- "@xylabs/tsconfig": "~7.11.12",
71
+ "@xylabs/toolchain": "~7.12.3",
72
+ "@xylabs/tsconfig": "~7.12.3",
73
73
  "@xyo-network/account": "~5.5.2",
74
74
  "@xyo-network/account-model": "~5.5.2",
75
75
  "@xyo-network/api": "~5.5.2",
@@ -97,8 +97,8 @@
97
97
  "@xyo-network/typechain": "^4.1.3",
98
98
  "@xyo-network/wallet": "~5.5.2",
99
99
  "@xyo-network/wallet-model": "^5.5.2",
100
- "@xyo-network/xl1-sdk": "^1.26.39",
101
- "ajv": "^8.18.0",
100
+ "@xyo-network/xl1-sdk": "^1.26.44",
101
+ "ajv": "^8.20.0",
102
102
  "async-mutex": "^0.5.0",
103
103
  "axios": "^1.15.2",
104
104
  "bn.js": "^5.2.3",
@@ -121,7 +121,7 @@
121
121
  "idb": "^8.0.3",
122
122
  "lmdb": "^3.5.4",
123
123
  "lru-cache": "^11.3.5",
124
- "mapbox-gl": "^3.22.0",
124
+ "mapbox-gl": "^3.23.0",
125
125
  "mongodb": "^7.2.0",
126
126
  "nodemon": "~3.1.14",
127
127
  "observable-fns": "~0.6.1",
@@ -139,92 +139,92 @@
139
139
  "webextension-polyfill": "^0.12.0",
140
140
  "winston": "~3.19.0",
141
141
  "winston-transport": "~4.9.0",
142
- "zod": "^4.3.6",
143
- "@xyo-network/chain-validation": "~1.20.28"
142
+ "zod": "~4.4.2",
143
+ "@xyo-network/chain-validation": "~1.20.29"
144
144
  },
145
145
  "peerDependencies": {
146
- "@bitauth/libauth": ">=3.0.0 <4",
146
+ "@bitauth/libauth": ">=3.0.0 <3.1",
147
147
  "@metamask/json-rpc-engine": ">=10.2.4 <11",
148
148
  "@metamask/providers": ">=22.1.1 <23",
149
- "@metamask/utils": ">=11.11.0 <12",
149
+ "@metamask/utils": ">=11.11.0 <11.12",
150
150
  "@opentelemetry/api": ">=1.9.1 <2",
151
- "@opentelemetry/context-async-hooks": ">=2.7.0 <3",
152
- "@opentelemetry/context-zone": ">=2.7.0 <3",
153
- "@opentelemetry/core": ">=2.7.0 <3",
154
- "@opentelemetry/exporter-prometheus": ">=0.215.0 <1",
155
- "@opentelemetry/exporter-trace-otlp-grpc": ">=0.215.0 <1",
156
- "@opentelemetry/exporter-trace-otlp-http": ">=0.215.0 <1",
157
- "@opentelemetry/host-metrics": ">=0.38.3 <1",
158
- "@opentelemetry/instrumentation": ">=0.215.0 <1",
159
- "@opentelemetry/instrumentation-express": ">=0.63.0 <1",
160
- "@opentelemetry/instrumentation-http": ">=0.215.0 <1",
161
- "@opentelemetry/instrumentation-runtime-node": ">=0.28.0 <1",
162
- "@opentelemetry/resources": ">=2.7.0 <3",
163
- "@opentelemetry/sdk-metrics": ">=2.7.0 <3",
164
- "@opentelemetry/sdk-trace-base": ">=2.7.0 <3",
165
- "@opentelemetry/semantic-conventions": ">=1.40.0 <2",
166
- "@scure/base": ">=2.2.0 <3",
167
- "@scure/bip39": ">=2.2.0 <3",
151
+ "@opentelemetry/context-async-hooks": ">=2.7.1 <2.8",
152
+ "@opentelemetry/context-zone": ">=2.7.1 <2.8",
153
+ "@opentelemetry/core": ">=2.7.1 <2.8",
154
+ "@opentelemetry/exporter-prometheus": ">=0.216.0 <0.217",
155
+ "@opentelemetry/exporter-trace-otlp-grpc": ">=0.216.0 <0.217",
156
+ "@opentelemetry/exporter-trace-otlp-http": ">=0.216.0 <0.217",
157
+ "@opentelemetry/host-metrics": ">=0.38.3 <0.39",
158
+ "@opentelemetry/instrumentation": ">=0.216.0 <0.217",
159
+ "@opentelemetry/instrumentation-express": ">=0.64.0 <0.65",
160
+ "@opentelemetry/instrumentation-http": ">=0.216.0 <0.217",
161
+ "@opentelemetry/instrumentation-runtime-node": ">=0.29.0 <0.30",
162
+ "@opentelemetry/resources": ">=2.7.1 <2.8",
163
+ "@opentelemetry/sdk-metrics": ">=2.7.1 <2.8",
164
+ "@opentelemetry/sdk-trace-base": ">=2.7.1 <3",
165
+ "@opentelemetry/semantic-conventions": ">=1.40.0 <1.41",
166
+ "@scure/base": ">=2.2.0 <2.3",
167
+ "@scure/bip39": ">=2.2.0 <2.3",
168
168
  "@xylabs/express": ">=5.0.101 <6",
169
169
  "@xylabs/geo": ">=5.0.101 <6",
170
170
  "@xylabs/mongo": ">=5.0.101 <6",
171
171
  "@xylabs/sdk-js": ">=5.0.101 <6",
172
- "@xylabs/threads": ">=5.0.101 <6",
173
- "@xyo-network/account": ">=5.5.2 <6",
174
- "@xyo-network/account-model": ">=5.5.2 <6",
175
- "@xyo-network/api": ">=5.5.2 <6",
176
- "@xyo-network/api-models": ">=5.5.2 <6",
177
- "@xyo-network/archivist-lmdb": ">=5.5.6 <6",
178
- "@xyo-network/archivist-mongodb": ">=5.5.6 <6",
179
- "@xyo-network/archivist-view": ">=5.5.6 <6",
180
- "@xyo-network/bios": ">=7.3.0 <8",
181
- "@xyo-network/bios-model": ">=7.3.0 <8",
182
- "@xyo-network/boundwitness-builder": ">=5.5.2 <6",
183
- "@xyo-network/boundwitness-model": ">=5.5.2 <6",
184
- "@xyo-network/boundwitness-validator": ">=5.5.2 <6",
185
- "@xyo-network/boundwitness-wrapper": ">=5.5.2 <6",
186
- "@xyo-network/config-payload-plugin": ">=5.5.2 <6",
187
- "@xyo-network/huri": ">=5.5.2 <6",
188
- "@xyo-network/manifest-model": ">=5.5.2 <6",
189
- "@xyo-network/payload-builder": ">=5.5.2 <6",
190
- "@xyo-network/payload-model": ">=5.5.2 <6",
191
- "@xyo-network/payload-plugin": ">=5.5.2 <6",
192
- "@xyo-network/payload-wrapper": ">=5.5.2 <6",
193
- "@xyo-network/query-payload-plugin": ">=5.5.2 <6",
172
+ "@xylabs/threads": ">=5.0.101 <5.1",
173
+ "@xyo-network/account": ">=5.5.2 <5.6",
174
+ "@xyo-network/account-model": ">=5.5.2 <5.6",
175
+ "@xyo-network/api": ">=5.5.2 <5.6",
176
+ "@xyo-network/api-models": ">=5.5.2 <5.6",
177
+ "@xyo-network/archivist-lmdb": ">=5.5.6 <5.6",
178
+ "@xyo-network/archivist-mongodb": ">=5.5.6 <5.6",
179
+ "@xyo-network/archivist-view": ">=5.5.6 <5.6",
180
+ "@xyo-network/bios": ">=7.3.0 <7.4",
181
+ "@xyo-network/bios-model": ">=7.3.0 <7.4",
182
+ "@xyo-network/boundwitness-builder": ">=5.5.2 <5.6",
183
+ "@xyo-network/boundwitness-model": ">=5.5.2 <5.6",
184
+ "@xyo-network/boundwitness-validator": ">=5.5.2 <5.6",
185
+ "@xyo-network/boundwitness-wrapper": ">=5.5.2 <5.6",
186
+ "@xyo-network/config-payload-plugin": ">=5.5.2 <5.6",
187
+ "@xyo-network/huri": ">=5.5.2 <5.6",
188
+ "@xyo-network/manifest-model": ">=5.5.2 <5.6",
189
+ "@xyo-network/payload-builder": ">=5.5.2 <5.6",
190
+ "@xyo-network/payload-model": ">=5.5.2 <5.6",
191
+ "@xyo-network/payload-plugin": ">=5.5.2 <5.6",
192
+ "@xyo-network/payload-wrapper": ">=5.5.2 <5.6",
193
+ "@xyo-network/query-payload-plugin": ">=5.5.2 <5.6",
194
194
  "@xyo-network/sdk-js": ">=5.5.6 <6",
195
- "@xyo-network/sdk-protocol-js": ">=5.5.2 <6",
195
+ "@xyo-network/sdk-protocol-js": ">=5.5.2 <5.6",
196
196
  "@xyo-network/typechain": ">=4.1.3 <5",
197
- "@xyo-network/wallet": ">=5.5.2 <6",
197
+ "@xyo-network/wallet": ">=5.5.2 <5.6",
198
198
  "@xyo-network/wallet-model": ">=5.5.2 <6",
199
- "@xyo-network/xl1-sdk": ">=1.26.39 <2",
200
- "ajv": ">=8.18.0 <9",
199
+ "@xyo-network/xl1-sdk": ">=1.26.44 <2",
200
+ "ajv": ">=8.20.0 <9",
201
201
  "async-mutex": ">=0.5.0 <1",
202
202
  "axios": ">=1.15.2 <2",
203
203
  "bn.js": ">=5.2.3 <6",
204
204
  "buffer": ">=6.0.3 <7",
205
205
  "chalk": ">=5.6.2 <6",
206
- "compression": ">=1.8.1 <2",
207
- "cors": ">=2.8.6 <3",
206
+ "compression": ">=1.8.1 <1.9",
207
+ "cors": ">=2.8.6 <2.9",
208
208
  "cosmiconfig": ">=9.0.1 <10",
209
- "debug": ">=4.4.3 <5",
209
+ "debug": ">=4.4.3 <4.5",
210
210
  "ethers": ">=6.16.0 <7",
211
211
  "express": ">=5.2.1 <6",
212
- "hash-wasm": ">=4.12.0 <5",
213
- "http-status-codes": ">=2.3.0 <3",
212
+ "hash-wasm": ">=4.12.0 <4.13",
213
+ "http-status-codes": ">=2.3.0 <2.4",
214
214
  "idb": ">=8.0.3 <9",
215
215
  "lmdb": ">=3.5.4 <4",
216
216
  "lru-cache": ">=11.3.5 <12",
217
- "mapbox-gl": ">=3.22.0 <4",
217
+ "mapbox-gl": ">=3.23.0 <4",
218
218
  "mongodb": ">=7.2.0 <8",
219
- "observable-fns": ">=0.6.1 <1",
219
+ "observable-fns": ">=0.6.1 <0.7",
220
220
  "pako": ">=2.1.0 <3",
221
- "shallowequal": ">=1.1.0 <2",
222
- "store2": ">=2.14.4 <3",
223
- "typescript": ">=5.9.3 <6",
224
- "uuid": ">=14.0.0 <15",
225
- "wasm-feature-detect": ">=1.8.0 <2",
226
- "web3-types": ">=1.10.0 <2",
227
- "zod": ">=4.3.6 <5"
221
+ "shallowequal": ">=1.1.0 <1.2",
222
+ "store2": ">=2.14.4 <2.15",
223
+ "typescript": ">=5.9.3 <5.10",
224
+ "uuid": ">=14.0.0 <14.1",
225
+ "wasm-feature-detect": ">=1.8.0 <1.9",
226
+ "web3-types": ">=1.10.0 <1.11",
227
+ "zod": ">=4.4.2 <4.5"
228
228
  },
229
229
  "engines": {
230
230
  "node": ">=24"