@xyo-network/chain-reward-redemption 1.16.1 → 1.16.2

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.
@@ -129,7 +129,7 @@ import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
129
129
  import { blockRangeSteps, createTransferPayload } from "@xyo-network/chain-protocol";
130
130
  import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
131
131
  import { asXL1BlockNumber, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
132
- import { completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions } from "@xyo-network/xl1-protocol-sdk";
132
+ import { completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions, SimpleXyoGatewayRunner } from "@xyo-network/xl1-protocol-sdk";
133
133
  import { Mutex } from "async-mutex";
134
134
 
135
135
  // src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts
@@ -172,7 +172,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
172
172
  return assertEx(this._connection, () => "Connection is not defined");
173
173
  }
174
174
  get gateway() {
175
- return assertEx(this._gateway, () => "Gateway is not defined");
175
+ return new SimpleXyoGatewayRunner(assertEx(this._gateway, () => "Gateway is not defined"));
176
176
  }
177
177
  get stepClaimIntervalMs() {
178
178
  return isDefined2(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs;
@@ -195,7 +195,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
195
195
  description: "Number of claim errors"
196
196
  });
197
197
  const gateway = assertEx(this.params.gateway, () => "Gateway parameter is required");
198
- const connection = assertEx(await gateway.connection(), () => "Gateway connection is required");
198
+ const connection = assertEx(gateway.connection, () => "Gateway connection is required");
199
199
  const viewer2 = assertEx(connection.viewer, () => "Viewer is not defined in gateway connection");
200
200
  this._gateway = gateway;
201
201
  this._connection = connection;
@@ -315,7 +315,7 @@ import { AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress as toAddress2
315
315
  import { isDefined as isDefined3, isUndefined as isUndefined2 } from "@xylabs/typeof";
316
316
  import { createTransferPayload as createTransferPayload2 } from "@xyo-network/chain-protocol";
317
317
  import { AbstractSentinel as AbstractSentinel2 } from "@xyo-network/sentinel-abstract";
318
- import { derivedReceiveAddress as derivedReceiveAddress2, flattenHydratedTransaction as flattenHydratedTransaction2, isEIP712DataPayload, isEIP712SignaturePayload, verifyEIP712Message } from "@xyo-network/xl1-protocol-sdk";
318
+ import { derivedReceiveAddress as derivedReceiveAddress2, flattenHydratedTransaction as flattenHydratedTransaction2, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner as SimpleXyoGatewayRunner2, verifyEIP712Message } from "@xyo-network/xl1-protocol-sdk";
319
319
  import z from "zod";
320
320
  var DerivedAddressWalletTransferSentinelConfigSchema = "network.xyo.sentinel.chain.derived.address.wallet.transfer.config";
321
321
  var scope2 = "reward-escrow";
@@ -348,7 +348,7 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
348
348
  _transferErrorCounter;
349
349
  _transferSuccessCounter;
350
350
  get gateway() {
351
- return this.params.gateway;
351
+ return new SimpleXyoGatewayRunner2(this.params.gateway);
352
352
  }
353
353
  async createHandler() {
354
354
  await super.createHandler();
@@ -388,9 +388,9 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
388
388
  }
389
389
  submitRewardDistributionTransaction = /* @__PURE__ */ __name(async (claimValues) => {
390
390
  const { amount, from: address, to, nbf, exp } = claimValues;
391
- const signer = assertEx2(await this.gateway.signer(), () => "Signer is not defined in gateway");
391
+ const signer = assertEx2(await this.gateway.signer, () => "Signer is not defined in gateway");
392
392
  const signerAddress = await signer.address();
393
- const connection = await this.gateway.connection();
393
+ const connection = await this.gateway.connection;
394
394
  const viewer2 = assertEx2(connection.viewer, () => "Viewer is not defined in gateway connection");
395
395
  const currentBlock = await viewer2.currentBlockNumber();
396
396
  if (currentBlock < nbf || currentBlock > exp) throw new Error("Transaction is not within a valid block range");
@@ -666,8 +666,8 @@ import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-
666
666
  import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
667
667
  import { MemorySentinel } from "@xyo-network/sentinel-memory";
668
668
  import { HDWallet } from "@xyo-network/wallet";
669
- import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
670
- import { HttpRpcXyoConnection, MemoryXyoGateway, MemoryXyoSigner } from "@xyo-network/xl1-rpc";
669
+ import { hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner } from "@xyo-network/xl1-protocol-sdk";
670
+ import { HttpRpcXyoConnection } from "@xyo-network/xl1-rpc";
671
671
  var getLocator = /* @__PURE__ */ __name(async (context) => {
672
672
  const { config, logger } = context;
673
673
  const { otlpEndpoint } = config.telemetry?.otel ?? {};
@@ -739,11 +739,11 @@ var getGateway = /* @__PURE__ */ __name(async (config) => {
739
739
  const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi;
740
740
  const walletPromise = isDefined7(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random();
741
741
  const account = await walletPromise;
742
- const signer = new MemoryXyoSigner(account);
742
+ const signer = new SimpleXyoSigner(account);
743
743
  const connection = new HttpRpcXyoConnection({
744
744
  endpoint
745
745
  });
746
- const gateway = new MemoryXyoGateway(signer, connection);
746
+ const gateway = new SimpleXyoGateway(signer, connection);
747
747
  return gateway;
748
748
  }, "getGateway");
749
749
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts","../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.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/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/manifest/getLocator.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance, config: Config): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.config = config\n app.node = node\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n } 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 { assertEx } from '@xylabs/assert'\nimport { isDefined } from '@xylabs/typeof'\nimport { blockRangeSteps } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { PayloadZodLoose } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { type StepIdentityPayload, StepIdentitySchema } from '../../../../../modules/index.ts'\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\nimport { getViewerFromConfig, 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 { config, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = getViewerFromConfig(config)\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: XL1BlockRange = [asXL1BlockNumber(from), asXL1BlockNumber(to)]\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","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { blockRangeSteps, createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, XYO_STEP_REWARD_ADDRESS } from '@xyo-network/xl1-protocol'\nimport type {\n XyoConnection, XyoGatewayProvider, XyoViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { isStepIdentityPayload } from './StepIdentityPayload.ts'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = 'network.xyo.sentinel.chain.step.rewards.claim.config'\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\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: XyoGatewayProvider\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: XyoGatewayProvider | 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(): XyoGatewayProvider {\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(): Promise<void> {\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(await 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)\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: XL1BlockRange = [asXL1BlockNumber(from), asXL1BlockNumber(to)]\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.accountBalance(stepRewardAddress)\n if (balance > 0n) {\n this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\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: XyoGatewayProvider,\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: currentBlockNumber + 10 })\n if (isDefined(result)) return result[1]\n }\n}\n","import { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfZodType } from '@xyo-network/payload-model'\nimport { StepIdentityZod } from '@xyo-network/xl1-rpc'\nimport type { z } from 'zod'\n\nexport const StepIdentitySchema = 'network.xyo.chain.step.identity' as const\nexport type StepIdentitySchema = typeof StepIdentitySchema\n\ntype StepIdentityFieldsZod = z.infer<typeof StepIdentityZod>\n\n/**\n * A Step Identity Payload\n */\nexport type StepIdentityPayload = Payload<StepIdentityFieldsZod, StepIdentitySchema>\n\nexport const isStepIdentityPayload = isPayloadOfZodType<StepIdentityPayload>(StepIdentityZod, StepIdentitySchema)\n\nexport const asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload)\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport {\n AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoGatewayProvider } from '@xyo-network/xl1-protocol-sdk'\nimport {\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, verifyEIP712Message,\n} from '@xyo-network/xl1-protocol-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = 'network.xyo.sentinel.chain.derived.address.wallet.transfer.config'\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: XyoGatewayProvider\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: number\n from: Address\n nbf: number\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': z.number().int().nonnegative(),\n 'XL1 Not before block': z.number().int().nonnegative(),\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(): XyoGatewayProvider {\n return this.params.gateway\n }\n\n override async createHandler(): Promise<void> {\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(isEIP712DataPayload)\n const signature = payloads?.find(isEIP712SignaturePayload)\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(await this.gateway.signer(), () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = await 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.accountBalance(escrowAccount)\n // NOTE: 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.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ExpressError } from '@xylabs/express'\nimport { isDefined, isPromise } from '@xylabs/typeof'\nimport type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\nimport type { ZodType } from 'zod'\nimport { z } from 'zod'\n\n/**\n * Empty Zod schema for requests with no parameters.\n */\nexport const EmptyParamsZod = z.object({}).catchall(z.string())\n\n/**\n * Empty Zod schema for requests with no query parameters.\n */\nexport const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))\n\n/**\n * Default validation schemas for request handler validator.\n */\nexport const ValidateRequestDefaults = {\n params: EmptyParamsZod,\n query: EmptyQueryParamsZod,\n body: z.json().optional(),\n response: z.json().optional(),\n}\n\ntype ValidatableRequestKey = 'params' | 'query' | 'body'\n\n/**\n * Factory for Express middleware that validates request and response objects using Zod schemas.\n * @param schemas The Zod schemas to use for validation.\n * @returns A middleware function for validating requests and responses.\n */\nexport function requestHandlerValidator<\n TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,\n TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,\n TBody extends ZodType<unknown> = ZodType<unknown>,\n TResponse extends ZodType<unknown> = ZodType<unknown>,\n>(schemas?: Partial<{\n body: TBody\n params: TParams\n query: TQuery\n response: TResponse\n}>) {\n type Params = z.infer<TParams>\n type Query = z.infer<TQuery>\n type Body = z.infer<TBody>\n type Res = z.infer<TResponse>\n const validators = { ...ValidateRequestDefaults, ...schemas }\n\n return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const originalJson = res.json.bind(res)\n try {\n // Validate incoming request\n const errors: string[] = []\n const keys: ValidatableRequestKey[] = ['params', 'query', 'body']\n for (const key of keys) {\n const validator = validators[key]\n const result = validator.safeParse(req[key])\n if (result.success) {\n if (isDefined(result.data)) Object.assign(req[key], result.data)\n } else {\n errors.push(\n ...result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `${key}: ${issue.message}`\n : `${key}.${issue.path.join('.')}: ${issue.message}`,\n ),\n )\n }\n }\n\n // If there were validation errors, short-circuit and return Bad Request\n if (errors.length > 0) {\n const message = errors.join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.BAD_REQUEST\n err.statusCode = StatusCodes.BAD_REQUEST\n next(err)\n return false\n }\n\n // Wrap res.json to validate outgoing response\n res.json = (data: any) => {\n const result = validators.response.safeParse(data)\n if (result.success) {\n return originalJson(result.data)\n } else {\n const message = result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `response: ${issue.message}`\n : `response.${issue.path.join('.')}: ${issue.message}`,\n ).join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.INTERNAL_SERVER_ERROR\n err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR\n\n // Restore original json function in case the error handler wants to use it\n res.json = originalJson\n throw err\n }\n }\n\n // Automatically handle async errors\n const result = handler(req as any, res as any, next)\n if (result && isPromise(result)) {\n await result\n }\n } catch (err) {\n res.json = originalJson\n next(err)\n }\n }\n }\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\n\nlet viewer: JsonRpcXyoViewer | undefined\n\nexport const getViewerFromConfig = (config: Config): JsonRpcXyoViewer => {\n if (isDefined(viewer)) return viewer\n const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\n return viewer\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import { assertEx } from '@xylabs/assert'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadZodLoose, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { z } from 'zod'\n\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\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 './routeDefinition.ts'\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 { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.rewardRedemptionApi\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const node = context.node ?? await getNode(nodeContext)\n const app = getApp(node, config)\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(120_000)\n return server\n}\n","import type { Logger } from '@xylabs/logger'\nimport { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, XyoGatewayProvider } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcXyoConnection, MemoryXyoGateway, MemoryXyoSigner,\n} from '@xyo-network/xl1-rpc'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-rewards',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n 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\nconst getGateway = async (\n config: Config,\n): Promise<XyoGatewayProvider> => {\n const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const signer = new MemoryXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n const gateway = new MemoryXyoGateway(signer, connection)\n return gateway\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYORewardRedemptionNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","assertEx","isDefined","blockRangeSteps","PayloadBuilder","PayloadZodLoose","asSentinelInstance","asXL1BlockNumber","z","assertEx","delay","toAddress","isDefined","isUndefined","blockRangeSteps","createTransferPayload","AbstractSentinel","asXL1BlockNumber","XYO_STEP_REWARD_ADDRESS","completedStepRewardAddress","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","Mutex","AsObjectFactory","isPayloadOfZodType","StepIdentityZod","StepIdentitySchema","isStepIdentityPayload","asStepIdentityPayload","create","ChainStepRewardsClaimSentinelConfigSchema","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","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","blockRangeSteps","delay","flattenHydratedTransactions","info","claimCounterAttributes","toString","add","stepRewardAddress","completedStepRewardAddress","accountBalance","networkStakeStepRewardPoolRewards","addressDistributions","keys","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","assertEx","AddressZod","EthAddressZod","hexToBigInt","HexZod","toAddress","toHex","isDefined","isUndefined","createTransferPayload","AbstractSentinel","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","verifyEIP712Message","z","DerivedAddressWalletTransferSentinelConfigSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","number","int","nonnegative","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","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","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","isDefined","isPromise","ReasonPhrases","StatusCodes","z","EmptyParamsZod","z","object","catchall","string","EmptyQueryParamsZod","union","array","ValidateRequestDefaults","params","query","body","json","optional","response","requestHandlerValidator","schemas","validators","handler","req","res","next","originalJson","bind","errors","keys","key","validator","result","safeParse","success","isDefined","data","Object","assign","push","error","issues","map","issue","path","length","message","join","err","Error","name","ReasonPhrases","BAD_REQUEST","statusCode","StatusCodes","INTERNAL_SERVER_ERROR","isPromise","isDefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","viewer","getViewerFromConfig","config","isDefined","transport","HttpRpcTransport","rewardRedemptionApi","chainRpcApiUrl","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","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","config","app","parse","viewer","getViewerFromConfig","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockNumber","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","assertEx","PayloadZodLoose","PayloadZodStrictOfSchema","asSentinelInstance","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","definition","method","path","handlers","addRoutes","app","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","HDWallet","hasMongoConfig","HttpRpcXyoConnection","MemoryXyoGateway","MemoryXyoSigner","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","gateway","getGateway","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","mnemonic","chainRpcApiUrl","rewardRedemptionApi","walletPromise","HDWallet","fromPhrase","random","account","signer","MemoryXyoSigner","connection","HttpRpcXyoConnection","MemoryXyoGateway","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","rewardRedemptionApi","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
1
+ {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts","../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/server/routes/rewardRedemption/middleware/requestHandlerValidator.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.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/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/manifest/getLocator.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance, config: Config): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.config = config\n app.node = node\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ntype ArchivistMiddlewareOptions = {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n } 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 { assertEx } from '@xylabs/assert'\nimport { isDefined } from '@xylabs/typeof'\nimport { blockRangeSteps } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { PayloadZodLoose } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { type StepIdentityPayload, StepIdentitySchema } from '../../../../../modules/index.ts'\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\nimport { getViewerFromConfig, 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 { config, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = getViewerFromConfig(config)\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: XL1BlockRange = [asXL1BlockNumber(from), asXL1BlockNumber(to)]\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","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { blockRangeSteps, createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, XYO_STEP_REWARD_ADDRESS } from '@xyo-network/xl1-protocol'\nimport type {\n XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n SimpleXyoGatewayRunner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { isStepIdentityPayload } from './StepIdentityPayload.ts'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = 'network.xyo.sentinel.chain.step.rewards.claim.config'\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\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: XyoGateway\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: XyoGateway | 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 new SimpleXyoGatewayRunner(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(): Promise<void> {\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)\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: XL1BlockRange = [asXL1BlockNumber(from), asXL1BlockNumber(to)]\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.accountBalance(stepRewardAddress)\n if (balance > 0n) {\n this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\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: currentBlockNumber + 10 })\n if (isDefined(result)) return result[1]\n }\n}\n","import { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfZodType } from '@xyo-network/payload-model'\nimport { StepIdentityZod } from '@xyo-network/xl1-rpc'\nimport type { z } from 'zod'\n\nexport const StepIdentitySchema = 'network.xyo.chain.step.identity' as const\nexport type StepIdentitySchema = typeof StepIdentitySchema\n\ntype StepIdentityFieldsZod = z.infer<typeof StepIdentityZod>\n\n/**\n * A Step Identity Payload\n */\nexport type StepIdentityPayload = Payload<StepIdentityFieldsZod, StepIdentitySchema>\n\nexport const isStepIdentityPayload = isPayloadOfZodType<StepIdentityPayload>(StepIdentityZod, StepIdentitySchema)\n\nexport const asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload)\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport {\n AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk'\nimport {\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner, verifyEIP712Message,\n} from '@xyo-network/xl1-protocol-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = 'network.xyo.sentinel.chain.derived.address.wallet.transfer.config'\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: XyoGateway\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: number\n from: Address\n nbf: number\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': z.number().int().nonnegative(),\n 'XL1 Not before block': z.number().int().nonnegative(),\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 new SimpleXyoGatewayRunner(this.params.gateway)\n }\n\n override async createHandler(): Promise<void> {\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(isEIP712DataPayload)\n const signature = payloads?.find(isEIP712SignaturePayload)\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(await this.gateway.signer, () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = await 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.accountBalance(escrowAccount)\n // NOTE: 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.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ExpressError } from '@xylabs/express'\nimport { isDefined, isPromise } from '@xylabs/typeof'\nimport type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\nimport type { ZodType } from 'zod'\nimport { z } from 'zod'\n\n/**\n * Empty Zod schema for requests with no parameters.\n */\nexport const EmptyParamsZod = z.object({}).catchall(z.string())\n\n/**\n * Empty Zod schema for requests with no query parameters.\n */\nexport const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))\n\n/**\n * Default validation schemas for request handler validator.\n */\nexport const ValidateRequestDefaults = {\n params: EmptyParamsZod,\n query: EmptyQueryParamsZod,\n body: z.json().optional(),\n response: z.json().optional(),\n}\n\ntype ValidatableRequestKey = 'params' | 'query' | 'body'\n\n/**\n * Factory for Express middleware that validates request and response objects using Zod schemas.\n * @param schemas The Zod schemas to use for validation.\n * @returns A middleware function for validating requests and responses.\n */\nexport function requestHandlerValidator<\n TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,\n TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,\n TBody extends ZodType<unknown> = ZodType<unknown>,\n TResponse extends ZodType<unknown> = ZodType<unknown>,\n>(schemas?: Partial<{\n body: TBody\n params: TParams\n query: TQuery\n response: TResponse\n}>) {\n type Params = z.infer<TParams>\n type Query = z.infer<TQuery>\n type Body = z.infer<TBody>\n type Res = z.infer<TResponse>\n const validators = { ...ValidateRequestDefaults, ...schemas }\n\n return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const originalJson = res.json.bind(res)\n try {\n // Validate incoming request\n const errors: string[] = []\n const keys: ValidatableRequestKey[] = ['params', 'query', 'body']\n for (const key of keys) {\n const validator = validators[key]\n const result = validator.safeParse(req[key])\n if (result.success) {\n if (isDefined(result.data)) Object.assign(req[key], result.data)\n } else {\n errors.push(\n ...result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `${key}: ${issue.message}`\n : `${key}.${issue.path.join('.')}: ${issue.message}`,\n ),\n )\n }\n }\n\n // If there were validation errors, short-circuit and return Bad Request\n if (errors.length > 0) {\n const message = errors.join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.BAD_REQUEST\n err.statusCode = StatusCodes.BAD_REQUEST\n next(err)\n return false\n }\n\n // Wrap res.json to validate outgoing response\n res.json = (data: any) => {\n const result = validators.response.safeParse(data)\n if (result.success) {\n return originalJson(result.data)\n } else {\n const message = result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `response: ${issue.message}`\n : `response.${issue.path.join('.')}: ${issue.message}`,\n ).join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.INTERNAL_SERVER_ERROR\n err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR\n\n // Restore original json function in case the error handler wants to use it\n res.json = originalJson\n throw err\n }\n }\n\n // Automatically handle async errors\n const result = handler(req as any, res as any, next)\n if (result && isPromise(result)) {\n await result\n }\n } catch (err) {\n res.json = originalJson\n next(err)\n }\n }\n }\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\n\nlet viewer: JsonRpcXyoViewer | undefined\n\nexport const getViewerFromConfig = (config: Config): JsonRpcXyoViewer => {\n if (isDefined(viewer)) return viewer\n const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\n return viewer\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import { assertEx } from '@xylabs/assert'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadZodLoose, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { z } from 'zod'\n\nimport { requestHandlerValidator } from '../../middleware/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\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 './routeDefinition.ts'\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 { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Express } from 'express'\n\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.rewardRedemptionApi\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const node = context.node ?? await getNode(nodeContext)\n const app = getApp(node, config)\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(120_000)\n return server\n}\n","import type { Logger } from '@xylabs/logger'\nimport { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, XyoGateway } from '@xyo-network/xl1-protocol-sdk'\nimport {\n hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-rewards',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n 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\nconst getGateway = async (\n config: Config,\n): Promise<XyoGateway> => {\n const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const signer = new SimpleXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n const gateway = new SimpleXyoGateway(signer, connection)\n return gateway\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYORewardRedemptionNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","assertEx","isDefined","blockRangeSteps","PayloadBuilder","PayloadZodLoose","asSentinelInstance","asXL1BlockNumber","z","assertEx","delay","toAddress","isDefined","isUndefined","blockRangeSteps","createTransferPayload","AbstractSentinel","asXL1BlockNumber","XYO_STEP_REWARD_ADDRESS","completedStepRewardAddress","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","SimpleXyoGatewayRunner","Mutex","AsObjectFactory","isPayloadOfZodType","StepIdentityZod","StepIdentitySchema","isStepIdentityPayload","asStepIdentityPayload","create","ChainStepRewardsClaimSentinelConfigSchema","defaultStepClaimIntervalMs","scope","RewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","SimpleXyoGatewayRunner","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","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","blockRangeSteps","delay","flattenHydratedTransactions","info","claimCounterAttributes","toString","add","stepRewardAddress","completedStepRewardAddress","accountBalance","networkStakeStepRewardPoolRewards","addressDistributions","keys","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","assertEx","AddressZod","EthAddressZod","hexToBigInt","HexZod","toAddress","toHex","isDefined","isUndefined","createTransferPayload","AbstractSentinel","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","SimpleXyoGatewayRunner","verifyEIP712Message","z","DerivedAddressWalletTransferSentinelConfigSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","number","int","nonnegative","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","SimpleXyoGatewayRunner","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","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","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","isDefined","isPromise","ReasonPhrases","StatusCodes","z","EmptyParamsZod","z","object","catchall","string","EmptyQueryParamsZod","union","array","ValidateRequestDefaults","params","query","body","json","optional","response","requestHandlerValidator","schemas","validators","handler","req","res","next","originalJson","bind","errors","keys","key","validator","result","safeParse","success","isDefined","data","Object","assign","push","error","issues","map","issue","path","length","message","join","err","Error","name","ReasonPhrases","BAD_REQUEST","statusCode","StatusCodes","INTERNAL_SERVER_ERROR","isPromise","isDefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","viewer","getViewerFromConfig","config","isDefined","transport","HttpRpcTransport","rewardRedemptionApi","chainRpcApiUrl","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","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","config","app","parse","viewer","getViewerFromConfig","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockNumber","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","assertEx","PayloadZodLoose","PayloadZodStrictOfSchema","asSentinelInstance","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","definition","method","path","handlers","addRoutes","app","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","HDWallet","hasMongoConfig","SimpleXyoGateway","SimpleXyoSigner","HttpRpcXyoConnection","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","gateway","getGateway","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","mnemonic","chainRpcApiUrl","rewardRedemptionApi","walletPromise","HDWallet","fromPhrase","random","account","signer","SimpleXyoSigner","connection","HttpRpcXyoConnection","SimpleXyoGateway","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","rewardRedemptionApi","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getLocator.d.ts","sourceRoot":"","sources":["../../../src/manifest/getLocator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAI1E,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,+BAA+B,CAAA;AAS/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,kCAuD1D,CAAA"}
1
+ {"version":3,"file":"getLocator.d.ts","sourceRoot":"","sources":["../../../src/manifest/getLocator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAI1E,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,+BAA+B,CAAA;AASvE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,kCAuD1D,CAAA"}
@@ -2,7 +2,7 @@ import type { AnyConfigSchema } from '@xyo-network/module-model';
2
2
  import type { Payload } from '@xyo-network/payload-model';
3
3
  import { AbstractSentinel } from '@xyo-network/sentinel-abstract';
4
4
  import type { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
5
- import type { XyoConnection, XyoGatewayProvider, XyoViewer } from '@xyo-network/xl1-protocol-sdk';
5
+ import type { XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer } from '@xyo-network/xl1-protocol-sdk';
6
6
  export declare const ChainStepRewardsClaimSentinelConfigSchema = "network.xyo.sentinel.chain.step.rewards.claim.config";
7
7
  export type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema;
8
8
  /**
@@ -19,7 +19,7 @@ export type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{
19
19
  stepClaimIntervalMs: number;
20
20
  }>;
21
21
  interface ChainStepRewardsClaimSentinelParamFields {
22
- gateway: XyoGatewayProvider;
22
+ gateway: XyoGateway;
23
23
  }
24
24
  export type ChainStepRewardsClaimSentinelParams<TConfig extends AnyConfigSchema<ChainStepRewardsClaimSentinelConfig> = AnyConfigSchema<ChainStepRewardsClaimSentinelConfig>> = SentinelParams<TConfig> & ChainStepRewardsClaimSentinelParamFields;
25
25
  export declare class ChainStepRewardsClaimSentinel<TParams extends ChainStepRewardsClaimSentinelParams = ChainStepRewardsClaimSentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
@@ -34,7 +34,7 @@ export declare class ChainStepRewardsClaimSentinel<TParams extends ChainStepRewa
34
34
  private _reportMutex;
35
35
  private _viewer;
36
36
  protected get connection(): XyoConnection;
37
- protected get gateway(): XyoGatewayProvider;
37
+ protected get gateway(): XyoGatewayRunner;
38
38
  protected get stepClaimIntervalMs(): number;
39
39
  protected get viewer(): XyoViewer;
40
40
  createHandler(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AAKpC,OAAO,KAAK,EACV,aAAa,EAAE,kBAAkB,EAAE,SAAS,EAC7C,MAAM,+BAA+B,CAAA;AAQtC,eAAO,MAAM,yCAAyC,yDAAyD,CAAA;AAC/G,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,kBAAkB,CAAA;CAC5B;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,WAA8C;IACpF,gBAAyB,mBAAmB,0DAA4C;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,CAAgC;IAChD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,KAAK,UAAU,IAAI,aAAa,CAExC;IAED,SAAS,KAAK,OAAO,IAAI,kBAAkB,CAE1C;IAED,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA+BjB,mCAAmC;CAalD"}
1
+ {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AAKpC,OAAO,KAAK,EACV,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EACvD,MAAM,+BAA+B,CAAA;AAStC,eAAO,MAAM,yCAAyC,yDAAyD,CAAA;AAC/G,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,UAAU,CAAA;CACpB;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,WAA8C;IACpF,gBAAyB,mBAAmB,0DAA4C;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,CAAwB;IACxC,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,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA+BjB,mCAAmC;CAalD"}
@@ -4,7 +4,7 @@ import type { Payload } from '@xyo-network/payload-model';
4
4
  import { AbstractSentinel } from '@xyo-network/sentinel-abstract';
5
5
  import type { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
6
6
  import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol';
7
- import type { XyoGatewayProvider } from '@xyo-network/xl1-protocol-sdk';
7
+ import type { XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk';
8
8
  import z from 'zod';
9
9
  export declare const DerivedAddressWalletTransferSentinelConfigSchema = "network.xyo.sentinel.chain.derived.address.wallet.transfer.config";
10
10
  export type DerivedAddressWalletTransferSentinelConfigSchema = typeof DerivedAddressWalletTransferSentinelConfigSchema;
@@ -18,7 +18,7 @@ export type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{
18
18
  schema: DerivedAddressWalletTransferSentinelConfigSchema;
19
19
  }>;
20
20
  export interface DerivedAddressWalletTransferSentinelParamFields {
21
- gateway: XyoGatewayProvider;
21
+ gateway: XyoGateway;
22
22
  }
23
23
  export type DerivedAddressWalletTransferSentinelParams<TConfig extends AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig> = AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig>> = SentinelParams<TConfig> & DerivedAddressWalletTransferSentinelParamFields;
24
24
  interface ParsedClaimValues {
@@ -30,21 +30,13 @@ interface ParsedClaimValues {
30
30
  }
31
31
  export declare const ConfirmedClaimValuesZod: z.ZodObject<{
32
32
  From: z.ZodString;
33
- 'To XL1 Address': z.ZodType<import("@xylabs/typeof").Brand<import("@xylabs/typeof").Brand<Lowercase<string>, {
34
- readonly __hex: true;
35
- }>, {
33
+ 'To XL1 Address': z.ZodType<import("@xylabs/typeof").Brand<import("@xylabs/hex").Hex, {
36
34
  readonly __address: true;
37
- }>, unknown, z.z.core.$ZodTypeInternals<import("@xylabs/typeof").Brand<import("@xylabs/typeof").Brand<Lowercase<string>, {
38
- readonly __hex: true;
39
- }>, {
35
+ }>, unknown, z.z.core.$ZodTypeInternals<import("@xylabs/typeof").Brand<import("@xylabs/hex").Hex, {
40
36
  readonly __address: true;
41
37
  }>, unknown>>;
42
38
  'XL1 Amount': z.ZodString;
43
- 'XL1 Amount (Hex)': z.ZodType<import("@xylabs/typeof").Brand<Lowercase<string>, {
44
- readonly __hex: true;
45
- }>, unknown, z.z.core.$ZodTypeInternals<import("@xylabs/typeof").Brand<Lowercase<string>, {
46
- readonly __hex: true;
47
- }>, unknown>>;
39
+ 'XL1 Amount (Hex)': z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/hex").Hex, string>>;
48
40
  'XL1 Not after block': z.ZodNumber;
49
41
  'XL1 Not before block': z.ZodNumber;
50
42
  }, z.z.core.$strip>;
@@ -55,7 +47,7 @@ export declare class DerivedAddressWalletTransferSentinel<TParams extends Derive
55
47
  private _transferAttemptsCounter;
56
48
  private _transferErrorCounter;
57
49
  private _transferSuccessCounter;
58
- protected get gateway(): XyoGatewayProvider;
50
+ protected get gateway(): XyoGatewayRunner;
59
51
  createHandler(): Promise<void>;
60
52
  reportHandler(payloads?: Payload[]): Promise<Payload[]>;
61
53
  protected submitRewardDistributionTransaction: (claimValues: ParsedClaimValues) => Promise<SignedHydratedTransaction | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"DerivedAddressWalletTransferSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAIvE,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,gDAAgD,sEAAsE,CAAA;AACnI,MAAM,MAAM,gDAAgD,GAAG,OAAO,gDAAgD,CAAA;AAEtH;;GAEG;AACH,MAAM,MAAM,0CAA0C,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,gDAAgD,CAAA;CACzD,CAAC,CAAA;AAEF,MAAM,WAAW,+CAA+C;IAC9D,OAAO,EAAE,kBAAkB,CAAA;CAC5B;AAED,MAAM,MAAM,0CAA0C,CACpD,OAAO,SAAS,eAAe,CAAC,0CAA0C,CAAC,GAAG,eAAe,CAAC,0CAA0C,CAAC,IACvI,cAAc,CAAC,OAAO,CAAC,GAAG,+CAA+C,CAAA;AAI7E,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAA;IAEd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAGD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;mBAOlC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAY1E,qBAAa,oCAAoC,CAC/C,OAAO,SAAS,0CAA0C,GAAG,0CAA0C,EACvG,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,WAAqD;IAC3F,gBAAyB,mBAAmB,uEAAmD;IAC/F,OAAO,CAAC,wBAAwB,CAAiC;IACjE,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,uBAAuB,CAAiC;IAEhE,SAAS,KAAK,OAAO,IAAI,kBAAkB,CAE1C;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBtE,SAAS,CAAC,mCAAmC,GAAU,aAAa,iBAAiB,KAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAwCrI;CACF"}
1
+ {"version":3,"file":"DerivedAddressWalletTransferSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAIjF,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,gDAAgD,sEAAsE,CAAA;AACnI,MAAM,MAAM,gDAAgD,GAAG,OAAO,gDAAgD,CAAA;AAEtH;;GAEG;AACH,MAAM,MAAM,0CAA0C,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,gDAAgD,CAAA;CACzD,CAAC,CAAA;AAEF,MAAM,WAAW,+CAA+C;IAC9D,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,MAAM,0CAA0C,CACpD,OAAO,SAAS,eAAe,CAAC,0CAA0C,CAAC,GAAG,eAAe,CAAC,0CAA0C,CAAC,IACvI,cAAc,CAAC,OAAO,CAAC,GAAG,+CAA+C,CAAA;AAI7E,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAA;IAEd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAGD,eAAO,MAAM,uBAAuB;;;;;;;;;;;mBAOlC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAY1E,qBAAa,oCAAoC,CAC/C,OAAO,SAAS,0CAA0C,GAAG,0CAA0C,EACvG,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,WAAqD;IAC3F,gBAAyB,mBAAmB,uEAAmD;IAC/F,OAAO,CAAC,wBAAwB,CAAiC;IACjE,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,uBAAuB,CAAiC;IAEhE,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBtE,SAAS,CAAC,mCAAmC,GAAU,aAAa,iBAAiB,KAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAwCrI;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-reward-redemption",
3
- "version": "1.16.1",
3
+ "version": "1.16.2",
4
4
  "description": "XYO Layer One Rewards",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -49,22 +49,22 @@
49
49
  "@opentelemetry/instrumentation": "~0.208.0",
50
50
  "@opentelemetry/instrumentation-express": "~0.57.0",
51
51
  "@opentelemetry/instrumentation-http": "~0.208.0",
52
- "@xylabs/assert": "~5.0.21",
53
- "@xylabs/delay": "~5.0.21",
54
- "@xylabs/express": "~5.0.21",
55
- "@xylabs/hex": "~5.0.21",
56
- "@xylabs/logger": "~5.0.21",
57
- "@xylabs/object": "~5.0.21",
58
- "@xylabs/typeof": "~5.0.21",
59
- "@xylabs/vitest-extended": "~5.0.21",
52
+ "@xylabs/assert": "~5.0.22",
53
+ "@xylabs/delay": "~5.0.22",
54
+ "@xylabs/express": "~5.0.22",
55
+ "@xylabs/hex": "~5.0.22",
56
+ "@xylabs/logger": "~5.0.22",
57
+ "@xylabs/object": "~5.0.22",
58
+ "@xylabs/typeof": "~5.0.22",
59
+ "@xylabs/vitest-extended": "~5.0.22",
60
60
  "@xyo-network/archivist-memory": "~5.1.18",
61
61
  "@xyo-network/archivist-model": "~5.1.18",
62
62
  "@xyo-network/archivist-mongodb": "~5.1.18",
63
63
  "@xyo-network/archivist-view": "~5.1.18",
64
64
  "@xyo-network/bios": "~7.1.1",
65
65
  "@xyo-network/boundwitness-model": "~5.1.18",
66
- "@xyo-network/chain-protocol": "~1.16.1",
67
- "@xyo-network/chain-telemetry": "~1.16.1",
66
+ "@xyo-network/chain-protocol": "~1.16.2",
67
+ "@xyo-network/chain-telemetry": "~1.16.2",
68
68
  "@xyo-network/manifest-model": "~5.1.18",
69
69
  "@xyo-network/manifest-wrapper": "~5.1.18",
70
70
  "@xyo-network/module-abstract": "~5.1.18",
@@ -78,9 +78,9 @@
78
78
  "@xyo-network/sentinel-model": "~5.1.18",
79
79
  "@xyo-network/wallet": "~5.1.18",
80
80
  "@xyo-network/wallet-model": "~5.1.18",
81
- "@xyo-network/xl1-protocol": "~1.13.0",
82
- "@xyo-network/xl1-protocol-sdk": "~1.16.1",
83
- "@xyo-network/xl1-rpc": "~1.16.1",
81
+ "@xyo-network/xl1-protocol": "~1.13.1",
82
+ "@xyo-network/xl1-protocol-sdk": "~1.16.2",
83
+ "@xyo-network/xl1-rpc": "~1.16.2",
84
84
  "async-mutex": "~0.5.0",
85
85
  "compression": "~1.8.1",
86
86
  "cors": "~2.8.5",
@@ -95,11 +95,11 @@
95
95
  "@types/express": "5.0.5",
96
96
  "@types/express-serve-static-core": "~5.1.0",
97
97
  "@types/node": "~24.10.0",
98
- "@xylabs/base": "~5.0.21",
99
- "@xylabs/delay": "~5.0.21",
100
- "@xylabs/mongo": "~5.0.21",
101
- "@xylabs/object": "~5.0.21",
102
- "@xylabs/promise": "~5.0.21",
98
+ "@xylabs/base": "~5.0.22",
99
+ "@xylabs/delay": "~5.0.22",
100
+ "@xylabs/mongo": "~5.0.22",
101
+ "@xylabs/object": "~5.0.22",
102
+ "@xylabs/promise": "~5.0.22",
103
103
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
104
104
  "@xylabs/tsconfig": "~7.2.8",
105
105
  "@xyo-network/account": "~5.1.18",
@@ -109,8 +109,8 @@
109
109
  "@xyo-network/archivist-mongodb": "~5.1.18",
110
110
  "@xyo-network/bios-model": "~7.1.1",
111
111
  "@xyo-network/boundwitness-builder": "~5.1.18",
112
- "@xyo-network/chain-protocol": "~1.16.1",
113
- "@xyo-network/chain-services": "~1.16.1",
112
+ "@xyo-network/chain-protocol": "~1.16.2",
113
+ "@xyo-network/chain-services": "~1.16.2",
114
114
  "@xyo-network/manifest-wrapper": "~5.1.18",
115
115
  "@xyo-network/module-abstract": "~5.1.18",
116
116
  "@xyo-network/module-abstract-mongodb": "~5.1.18",
@@ -118,7 +118,7 @@
118
118
  "@xyo-network/node-memory": "~5.1.18",
119
119
  "@xyo-network/payload-builder": "~5.1.18",
120
120
  "@xyo-network/sentinel-memory": "~5.1.18",
121
- "@xyo-network/xl1-protocol": "~1.13.0",
121
+ "@xyo-network/xl1-protocol": "~1.13.1",
122
122
  "dotenv": "~17.2.3",
123
123
  "eslint": "^9.39.1",
124
124
  "ethers": "~6.15.0",
@@ -10,11 +10,11 @@ import { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'
10
10
  import type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'
11
11
  import { MemorySentinel } from '@xyo-network/sentinel-memory'
12
12
  import { HDWallet } from '@xyo-network/wallet'
13
- import type { Config, XyoGatewayProvider } from '@xyo-network/xl1-protocol-sdk'
14
- import { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'
13
+ import type { Config, XyoGateway } from '@xyo-network/xl1-protocol-sdk'
15
14
  import {
16
- HttpRpcXyoConnection, MemoryXyoGateway, MemoryXyoSigner,
17
- } from '@xyo-network/xl1-rpc'
15
+ hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner,
16
+ } from '@xyo-network/xl1-protocol-sdk'
17
+ import { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'
18
18
 
19
19
  import type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'
20
20
  import { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'
@@ -88,12 +88,12 @@ export const getLocator = async (context: GetLocatorContext) => {
88
88
 
89
89
  const getGateway = async (
90
90
  config: Config,
91
- ): Promise<XyoGatewayProvider> => {
91
+ ): Promise<XyoGateway> => {
92
92
  const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi
93
93
  const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()
94
94
  const account = await walletPromise
95
- const signer = new MemoryXyoSigner(account)
95
+ const signer = new SimpleXyoSigner(account)
96
96
  const connection = new HttpRpcXyoConnection({ endpoint })
97
- const gateway = new MemoryXyoGateway(signer, connection)
97
+ const gateway = new SimpleXyoGateway(signer, connection)
98
98
  return gateway
99
99
  }
@@ -16,10 +16,11 @@ import type {
16
16
  } from '@xyo-network/xl1-protocol'
17
17
  import { asXL1BlockNumber, XYO_STEP_REWARD_ADDRESS } from '@xyo-network/xl1-protocol'
18
18
  import type {
19
- XyoConnection, XyoGatewayProvider, XyoViewer,
19
+ XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer,
20
20
  } from '@xyo-network/xl1-protocol-sdk'
21
21
  import {
22
22
  completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,
23
+ SimpleXyoGatewayRunner,
23
24
  } from '@xyo-network/xl1-protocol-sdk'
24
25
  import { Mutex } from 'async-mutex'
25
26
 
@@ -43,7 +44,7 @@ export type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{
43
44
  }>
44
45
 
45
46
  interface ChainStepRewardsClaimSentinelParamFields {
46
- gateway: XyoGatewayProvider
47
+ gateway: XyoGateway
47
48
  }
48
49
 
49
50
  export type ChainStepRewardsClaimSentinelParams<
@@ -67,7 +68,7 @@ export class ChainStepRewardsClaimSentinel<
67
68
  private _claimErrorCounter: Counter<Attributes> | undefined
68
69
  private _claimSuccessCounter: Counter<Attributes> | undefined
69
70
  private _connection: XyoConnection | undefined
70
- private _gateway: XyoGatewayProvider | undefined
71
+ private _gateway: XyoGateway | undefined
71
72
  private _reportMutex = new Mutex()
72
73
  private _viewer: XyoViewer | undefined
73
74
 
@@ -75,8 +76,8 @@ export class ChainStepRewardsClaimSentinel<
75
76
  return assertEx(this._connection, () => 'Connection is not defined')
76
77
  }
77
78
 
78
- protected get gateway(): XyoGatewayProvider {
79
- return assertEx(this._gateway, () => 'Gateway is not defined')
79
+ protected get gateway(): XyoGatewayRunner {
80
+ return new SimpleXyoGatewayRunner(assertEx(this._gateway, () => 'Gateway is not defined'))
80
81
  }
81
82
 
82
83
  protected get stepClaimIntervalMs(): number {
@@ -96,7 +97,7 @@ export class ChainStepRewardsClaimSentinel<
96
97
  this._claimErrorCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_errors_total', { description: 'Number of claim errors' })
97
98
 
98
99
  const gateway = assertEx(this.params.gateway, () => 'Gateway parameter is required')
99
- const connection = assertEx(await gateway.connection(), () => 'Gateway connection is required')
100
+ const connection = assertEx(gateway.connection, () => 'Gateway connection is required')
100
101
  const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')
101
102
  // this._gateway = withRetry(gateway, retryDelayMs, retryAttempts)
102
103
  // this._connection = withRetry(connection, retryDelayMs, retryAttempts)
@@ -213,7 +214,7 @@ export class ChainStepRewardsClaimSentinel<
213
214
  stepRewardAddress: Address,
214
215
  addressDistributions: Record<Address, bigint>,
215
216
  step: StepIdentity,
216
- gateway: XyoGatewayProvider,
217
+ gateway: XyoGatewayRunner,
217
218
  ): Promise<SignedHydratedTransaction | undefined> {
218
219
  // Create single transfer payload for all claims
219
220
  const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions)
@@ -13,9 +13,9 @@ import type {
13
13
  SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,
14
14
  } from '@xyo-network/sentinel-model'
15
15
  import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
16
- import type { XyoGatewayProvider } from '@xyo-network/xl1-protocol-sdk'
16
+ import type { XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk'
17
17
  import {
18
- derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, verifyEIP712Message,
18
+ derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner, verifyEIP712Message,
19
19
  } from '@xyo-network/xl1-protocol-sdk'
20
20
  import z from 'zod'
21
21
 
@@ -33,7 +33,7 @@ export type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{
33
33
  }>
34
34
 
35
35
  export interface DerivedAddressWalletTransferSentinelParamFields {
36
- gateway: XyoGatewayProvider
36
+ gateway: XyoGateway
37
37
  }
38
38
 
39
39
  export type DerivedAddressWalletTransferSentinelParams<
@@ -83,8 +83,8 @@ export class DerivedAddressWalletTransferSentinel<
83
83
  private _transferErrorCounter: Counter<Attributes> | undefined
84
84
  private _transferSuccessCounter: Counter<Attributes> | undefined
85
85
 
86
- protected get gateway(): XyoGatewayProvider {
87
- return this.params.gateway
86
+ protected get gateway(): XyoGatewayRunner {
87
+ return new SimpleXyoGatewayRunner(this.params.gateway)
88
88
  }
89
89
 
90
90
  override async createHandler(): Promise<void> {
@@ -134,9 +134,9 @@ export class DerivedAddressWalletTransferSentinel<
134
134
  amount, from: address, to, nbf, exp,
135
135
  } = claimValues
136
136
  // Ensure necessary gateway pre-requisites are met
137
- const signer = assertEx(await this.gateway.signer(), () => 'Signer is not defined in gateway')
137
+ const signer = assertEx(await this.gateway.signer, () => 'Signer is not defined in gateway')
138
138
  const signerAddress = await signer.address()
139
- const connection = await this.gateway.connection()
139
+ const connection = await this.gateway.connection
140
140
  const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')
141
141
 
142
142
  // TODO: Validate chainId against supplied in ClaimValues to prevent replay attacks
@@ -6,12 +6,13 @@ import { TestChainId } from '@xyo-network/chain-protocol'
6
6
  import { PayloadBuilder } from '@xyo-network/payload-builder'
7
7
  import { asAttoXL1, AttoXL1ConvertFactor } from '@xyo-network/xl1-protocol'
8
8
  import type {
9
- EIP712DataPayload, XyoRunner, XyoViewer,
9
+ EIP712DataPayload, XyoGateway, XyoRunner, XyoViewer,
10
10
  } from '@xyo-network/xl1-protocol-sdk'
11
- import { EIP712DataPayloadSchema, signEIP712Message } from '@xyo-network/xl1-protocol-sdk'
12
11
  import {
13
- MemoryXyoGateway, MemoryXyoSigner, XyoBaseConnection,
14
- } from '@xyo-network/xl1-rpc'
12
+ EIP712DataPayloadSchema, signEIP712Message, SimpleXyoGateway,
13
+ SimpleXyoSigner,
14
+ } from '@xyo-network/xl1-protocol-sdk'
15
+ import { XyoBaseConnection } from '@xyo-network/xl1-rpc'
15
16
  import { Wallet } from 'ethers'
16
17
  import {
17
18
  beforeEach, describe, expect, it,
@@ -22,7 +23,7 @@ import { DerivedAddressWalletTransferSentinel } from '../DerivedAddressWalletTra
22
23
 
23
24
  describe('DerivedAddressWalletTransferSentinel', () => {
24
25
  let sentinel: DerivedAddressWalletTransferSentinel
25
- let gateway: MemoryXyoGateway
26
+ let gateway: XyoGateway
26
27
  const nbf = 1000
27
28
  const exp = 2000
28
29
  const currentBlockNumber = Math.floor((nbf + exp) / 2)
@@ -68,7 +69,7 @@ describe('DerivedAddressWalletTransferSentinel', () => {
68
69
 
69
70
  beforeEach(async () => {
70
71
  const singerAccount = await Account.random()
71
- const signer = new MemoryXyoSigner(singerAccount)
72
+ const signer = new SimpleXyoSigner(singerAccount)
72
73
  const viewer = mock<XyoViewer>()
73
74
  viewer.chainId.mockResolvedValue(TestChainId)
74
75
  viewer.currentBlockNumber.mockResolvedValue(currentBlockNumber)
@@ -76,7 +77,7 @@ describe('DerivedAddressWalletTransferSentinel', () => {
76
77
  const runner = mock<XyoRunner>()
77
78
  runner.broadcastTransaction.mockImplementation(async tx => await PayloadBuilder.hash(tx[0]))
78
79
  const connection = new XyoBaseConnection({ runner, viewer })
79
- gateway = new MemoryXyoGateway(signer, connection)
80
+ gateway = new SimpleXyoGateway(signer, connection)
80
81
  sentinel = await DerivedAddressWalletTransferSentinel.create({ gateway, account: 'random' })
81
82
  })
82
83