@xyo-network/chain-bridge 1.18.5 → 1.19.1

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.
@@ -997,13 +997,14 @@ import { hasMongoConfig, mapToMapType, XyoGatewayRunnerMoniker as XyoGatewayRunn
997
997
  // src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts
998
998
  import { asAddress as asAddress6, asHex as asHex4, assertEx as assertEx12, delay, hexFromBigInt, hexToBigInt as hexToBigInt4, isDefined as isDefined11, isUndefined as isUndefined4 } from "@xylabs/sdk-js";
999
999
  import { PayloadBuilder as PayloadBuilder11 } from "@xyo-network/payload-builder";
1000
+ import { asSchema } from "@xyo-network/payload-model";
1000
1001
  import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
1001
1002
  import { LiquidityPoolBridge__factory } from "@xyo-network/typechain";
1002
1003
  import { BridgeDestinationObservationSchema as BridgeDestinationObservationSchema3, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent as isBridgeIntent2, tryUnflattenHydratedTransaction } from "@xyo-network/xl1-sdk";
1003
1004
  import { Mutex } from "async-mutex";
1004
1005
  import { getAddress as getAddress2 } from "ethers/address";
1005
1006
  import { Wallet } from "ethers/wallet";
1006
- var EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config";
1007
+ var EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = asSchema("network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config", true);
1007
1008
  var defaultJobCheckIntervalMs = 15e3;
1008
1009
  var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends AbstractSentinel {
1009
1010
  static {
@@ -1149,10 +1150,11 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1149
1150
  // src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts
1150
1151
  import { assertEx as assertEx13, delay as delay2, isDefined as isDefined12, isNull as isNull2, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
1151
1152
  import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/payload-builder";
1153
+ import { asSchema as asSchema2 } from "@xyo-network/payload-model";
1152
1154
  import { AbstractSentinel as AbstractSentinel2 } from "@xyo-network/sentinel-abstract";
1153
1155
  import { flattenHydratedTransaction as flattenHydratedTransaction2, flattenHydratedTransactions as flattenHydratedTransactions2, tryUnflattenHydratedTransaction as tryUnflattenHydratedTransaction2 } from "@xyo-network/xl1-sdk";
1154
1156
  import { Mutex as Mutex2 } from "async-mutex";
1155
- var XL1TransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.transaction.completion.monitor.config";
1157
+ var XL1TransactionCompletionMonitorSentinelConfigSchema = asSchema2("network.xyo.sentinel.chain.transaction.completion.monitor.config", true);
1156
1158
  var defaultJobCheckIntervalMs2 = 15e3;
1157
1159
  var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
1158
1160
  static {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/app.ts","../../src/queue/connection.ts","../../src/queue/flowProducer.ts","../../src/queue/workers/ethTransactionMonitor.ts","../../src/queue/workers/ethTransactionPreparation.ts","../../src/queue/workers/ethTransactionSubmission.ts","../../src/queue/workers/xl1ToEthBridgeParent.ts","../../src/queue/workers/xl1TransactionMonitor.ts","../../src/queue/workers/xl1TransactionPreparation.ts","../../src/queue/workers/xl1TransactionSubmission.ts","../../src/queue/flows/createXl1ToEthBridgeJob.ts","../../src/server/flowProducer.ts","../../src/server/instrumentation.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts","../../src/config/asChainId.ts","../../src/config/asToken.ts","../../src/config/getBridgeEscrowAddress.ts","../../src/config/getBridgeFeesAddress.ts","../../src/config/getFeeStructure.ts","../../src/config/getMaxBridgeAmount.ts","../../src/config/getMinBridgeAmount.ts","../../src/config/getRemoteChainId.ts","../../src/config/getRemoteTokenAddress.ts","../../src/config/getBridgeWalletAccount.ts","../../src/config/getTransferAddresses.ts","../../src/config/getXl1ChainId.ts","../../src/config/getXl1TokenAddress.ts","../../src/config/getBridgeSettings.ts","../../src/config/getGateway.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts","../../src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts","../../src/util/calculateBridgeFees.ts","../../src/util/generateBridgeEstimate.ts","../../src/util/validateBridgeEstimateExact.ts","../../src/util/validateBridgeTransaction.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts","../../src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts","../../src/server/routes/bridge/addBridgeRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/manifest/getModuleLocator.ts","../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts","../../src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/XL1.json","../../src/manifest/public/Ethereum.json","../../src/manifest/public/index.ts","../../src/manifest/getServices.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-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addFlowProducer } from './flowProducer.ts'\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.node = node\n addFlowProducer(app, config)\n addRoutes(app, config)\n app.use(standardErrors)\n return app\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { Redis } from 'ioredis'\n\nlet connection: Redis | undefined\n\nconst maxRetriesPerRequest = null\n\nexport const getConnection = (config: Config) => {\n if (isDefined(connection)) return connection\n const { redisHost: host, redisPort: port } = config.bridge\n connection = new Redis({\n host, port, maxRetriesPerRequest,\n })\n return connection\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { FlowProducer } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nlet flowProducer: FlowProducer | undefined\n\nexport const getFlowProducer = (connection: Redis) => {\n if (isDefined(flowProducer)) return flowProducer\n flowProducer = new FlowProducer({ connection })\n return flowProducer\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap' | 'provider' | 'wallet'> & { tx: SignedHydratedTransaction }\ninterface ReturnType {\n blockHash: string\n blockNumber: number\n}\n\nconst name = 'Monitor Submitted ETH Transaction'\nconst queueName = 'eth-tx-monitor'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n provider, ethTxStateMap: stateMap, tx,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n const state = assertEx(await stateMap.get(hash), () => 'State not found')\n const submissionHash = assertEx(state?.submissionHash, () => 'submissionHash not found')\n const receipt = assertEx(await provider.getTransactionReceipt(submissionHash), () => 'Transaction receipt not found')\n await job.log(`[${hash}] confirmed ETH tx ${submissionHash} in block ${receipt.blockNumber}`)\n const { blockHash, blockNumber } = receipt\n state.confirmationHash = blockHash\n await stateMap.set(hash, state)\n return { blockHash, blockNumber }\n },\n { connection },\n )\n}\n\nexport const ethTransactionMonitor: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, hexToBigInt } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isBridgeIntent, type SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport { getAddress } from 'ethers'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {}\n\nconst name = 'Prepare ETH Transaction'\nconst queueName = 'eth-tx-prepare'\n\nexport const createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n bridge, ethTxStateMap: stateMap, tx,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n await job.log(`[${hash}] preparing ETH transaction`)\n await job.log(`[${hash}] building ETH transaction`)\n const bridgeIntent = assertEx(tx[1].find(isBridgeIntent), () => 'No bridge intent found')\n const amount = hexToBigInt(bridgeIntent.destAmount)\n const srcAddress = getAddress(bridgeIntent.srcAddress)\n const destAddress = getAddress(bridgeIntent.destAddress)\n const preparedTx = await bridge.getFunction('bridgeFromRemote').populateTransaction(srcAddress, destAddress, amount, 0n)\n await job.log(`[${hash}] built ETH transaction`)\n await job.log(`[${hash}] storing ETH preparedTx`)\n await stateMap.set(hash, { preparedTx })\n await job.log(`[${hash}] stored ETH preparedTx`)\n await job.log(`[${hash}] prepared ETH transaction`)\n return {}\n },\n { connection },\n )\n}\n\nexport const ethTransactionPreparation: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { EthTxState, IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap' | 'wallet'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n submissionHash: Required<EthTxState>['submissionHash']\n}\n\nconst name = 'Submit ETH Transaction'\nconst queueName = 'eth-tx-submit'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n ethTxStateMap: stateMap, tx, wallet,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n const preparedTx = assertEx(state?.preparedTx, () => `[${hash}] preparedTx not found`)\n\n // Idempotency check against resubmission\n const { submissionHash: existingSubmissionHash } = state\n if (isDefined(existingSubmissionHash)) {\n await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`)\n return { submissionHash: existingSubmissionHash }\n }\n\n // Submit the transaction to the Ethereum network\n await job.log(`[${hash}] Submitting ETH tx`)\n const submissionResponse = await wallet.sendTransaction(preparedTx)\n const submissionHash = submissionResponse.hash\n await job.log(`[${hash}] Submitted ETH tx and received submission response hash ${submissionHash}`)\n\n // Store the submission hash in the state\n await job.log(`[${hash}] Storing ETH submissionHash`)\n state.submissionHash = submissionHash\n await stateMap.set(hash, state)\n await job.log(`[${hash}] Stored ETH submissionHash`)\n\n return { submissionHash }\n // const hash = await PayloadBuilder.hash(tx[0])\n // await job.log(`[${hash}] Obtaining bridge intent from tx`)\n // const bridgeIntent = assertEx(tx[1].find(isBridgeIntent), () => 'No bridge intent found in transaction payload')\n // await job.log(`[${hash}] submitting ETH transaction`)\n // const amount = hexToBigInt(bridgeIntent.destAmount)\n // const srcAddress = getAddress(bridgeIntent.srcAddress)\n // const destAddress = getAddress(bridgeIntent.destAddress)\n // const tx = await bridge.bridgeFromRemote(srcAddress, destAddress, amount)\n // // const nonce = await wallet.getNonce()\n // // const tx = await bridge.bridgeFromRemote(srcAddress, destAddress, amount, { nonce })\n // await job.log(`[${hash}] submitted ETH transaction`)\n // const confirmation = await tx.wait()\n // const transactionResponse = await confirmation?.getTransaction()\n // const destConfirmation = asHex(transactionResponse?.hash ?? '', true)\n // const block = await transactionResponse?.getBlock()\n // await job.log(`[${hash}] confirmed ETH transaction with hash ${destConfirmation} in block ${block?.number}`)\n // const { schema, ...rest } = bridgeIntent\n // const result: BridgeDestinationObservation = new PayloadBuilder<BridgeDestinationObservation>({ schema: BridgeDestinationObservationSchema })\n // .fields({ ...rest, destConfirmation }).build()\n // return result\n },\n { connection, concurrency: 1 },\n )\n}\n\nexport const ethTransactionSubmission: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\nconst name = 'Bridge XL1 to Ethereum'\nconst queueName = 'xl1-to-eth-bridge'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job) => {\n await job.log(`[${job.name}] start`)\n // Parent job has no work other than waiting on children\n await job.log(`[${job.name}] done`)\n // const values = await job.getChildrenValues()\n return { ok: true }\n },\n { connection },\n )\n}\n\nexport const xl1ToEthBridgeParent: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import {\n assertEx, isDefined, isNull,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { UnrecoverableError, Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'gateway' | 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n}\n\nconst name = 'Monitor Submitted XL1 Transaction'\nconst queueName = 'xl1-tx-monitor'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n gateway, tx, xl1TxStateMap: stateMap,\n } = job.data\n // Get the hash of the transaction\n const hash = await PayloadBuilder.hash(tx[0])\n // Get the state of the transaction\n const viewer = assertEx(gateway.connection.viewer, () => `[${hash}] viewer not defined on gateway`)\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n\n // Check for transaction inclusion on chain\n await job.log(`[${hash}] Checking for XL1 transaction inclusion on chain`)\n const foundTx = await viewer.transactionByHash(hash)\n\n // Transaction found on chain\n if (isDefined(foundTx) && !isNull(foundTx)) {\n await job.log(`[${hash}] Found transaction on chain`)\n // TODO: For now we just store the same hash as TX hash until we have block hash confirmation capability\n state.confirmationHash = hash\n await stateMap.set(hash, state)\n return {}\n }\n\n // Check for transaction expiration\n const currentBlockNumber = await viewer.currentBlockNumber()\n if (tx[0].exp < currentBlockNumber) {\n await job.log(\n `[${hash}] Transaction expired at block ${tx[0].exp}, current block ${currentBlockNumber}`,\n )\n // Throw unrecoverable error to stop retries\n throw new UnrecoverableError(`[${hash}] Transaction expired and will never be included`)\n }\n\n // Transaction not yet found, but still valid — retry later\n await job.log(`[${hash}] Transaction not yet included, retrying later`)\n throw new Error(`[${hash}] Transaction not yet included`)\n },\n { connection },\n )\n}\n\nexport const xl1TransactionMonitor: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {}\n\nconst name = 'Prepare XL1 Transaction'\nconst queueName = 'xl1-tx-prepare'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const { tx, xl1TxStateMap: stateMap } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n await job.log(`[${hash}] preparing XL1 transaction`)\n const preparedTx = tx\n await job.log(`[${hash}] storing XL1 preparedTx`)\n await stateMap.set(hash, { preparedTx })\n await job.log(`[${hash}] stored XL1 preparedTx`)\n await job.log(`[${hash}] prepared XL1 transaction`)\n return {}\n },\n { connection },\n )\n}\n\nexport const xl1TransactionPreparation: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection, Xl1TxState } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'gateway' | 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n submissionHash: Required<Xl1TxState>['submissionHash']\n}\n\nconst name = 'Submit XL1 Transaction'\nconst queueName = 'xl1-tx-submit'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n gateway, tx, xl1TxStateMap: stateMap,\n } = job.data\n // Get the hash of the transaction\n const hash = await PayloadBuilder.hash(tx[0])\n // Get the state of the transaction\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n const preparedTx = assertEx(state?.preparedTx, () => `[${hash}] preparedTx not found`)\n\n // Idempotency check against resubmission\n const { submissionHash: existingSubmissionHash } = state\n if (isDefined(existingSubmissionHash)) {\n await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`)\n return { submissionHash: existingSubmissionHash }\n }\n\n // Submit the transaction to the XL1 network\n await job.log(`[${hash}] Submitting XL1 tx`)\n const [submissionHash] = await gateway.addTransactionToChain(preparedTx)\n // Ensure the submission hash matches the expected hash\n assertEx(submissionHash === hash, () => `[${hash}] Submitted transaction hash ${submissionHash} does not match expected hash`)\n await job.log(`[${hash}] Submitted XL1 tx`)\n\n // Store the submission hash in the state\n await job.log(`[${hash}] Storing XL1 submissionHash`)\n state.submissionHash = submissionHash\n await stateMap.set(hash, state)\n await job.log(`[${hash}] Stored XL1 submissionHash`)\n\n return { submissionHash }\n },\n { connection },\n )\n}\n\nexport const xl1TransactionSubmission: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { FlowProducer } from 'bullmq'\n\nimport {\n ethTransactionMonitor, ethTransactionPreparation, ethTransactionSubmission, xl1ToEthBridgeParent, xl1TransactionMonitor, xl1TransactionPreparation,\n xl1TransactionSubmission,\n} from '../workers/index.ts'\n\nexport const createXl1ToEthBridgeJob = async (flowProducer: FlowProducer, tx: SignedHydratedTransaction) => {\n const flow = await flowProducer.add({\n name: xl1ToEthBridgeParent.name,\n queueName: xl1ToEthBridgeParent.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionPreparation.name,\n queueName: xl1TransactionPreparation.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionSubmission.name,\n queueName: xl1TransactionSubmission.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionMonitor.name,\n queueName: xl1TransactionMonitor.queueName,\n data: { tx },\n opts: { attempts: 60, backoff: { type: 'fixed', delay: 5000 } },\n children: [\n {\n name: ethTransactionPreparation.name,\n queueName: ethTransactionPreparation.queueName,\n data: { tx },\n children: [\n {\n name: ethTransactionSubmission.name,\n queueName: ethTransactionSubmission.queueName,\n data: { tx },\n children: [\n {\n name: ethTransactionMonitor.name,\n queueName: ethTransactionMonitor.queueName,\n data: { tx },\n opts: { attempts: 60, backoff: { type: 'fixed', delay: 5000 } },\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n })\n return flow\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { getConnection, getFlowProducer } from '../queue/index.ts'\n\nexport const addFlowProducer = (app: Express, config: Config): Express => {\n const connection = getConnection(config)\n const flowProducer = getFlowProducer(connection)\n app.flowProducer = flowProducer\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { BridgeSettingsZod, type Config } from '@xyo-network/xl1-sdk'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\n\nconst response = BridgeSettingsZod\n\nconst validateRequest = requestHandlerValidator({ response })\n\nexport const makeBridgeConfigRoute = (config: Config): RouteDefinition => {\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/config',\n handlers: validateRequest(async (_, res) => {\n const {\n escrowAddress,\n feeFixed,\n feeRateBasisPoints,\n feesAddress,\n maxBridgeAmount,\n minBridgeAmount,\n remoteChainId,\n remoteTokenAddress,\n xl1ChainId,\n xl1TokenAddress,\n } = await getBridgeSettings(config)\n const sanitizedConfig = {\n escrowAddress,\n feeFixed,\n feeRateBasisPoints,\n feesAddress,\n maxBridgeAmount,\n minBridgeAmount,\n remoteChainId,\n remoteTokenAddress,\n xl1ChainId,\n xl1TokenAddress,\n }\n res.json(sanitizedConfig)\n }),\n }\n}\n","import { asHex } from '@xylabs/sdk-js'\nimport type { ChainId } from '@xyo-network/xl1-sdk'\n\nexport const asChainId = (value: unknown): ChainId | undefined => {\n const chainId = asHex(value)\n return chainId\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress } from '@xylabs/sdk-js'\n\nexport const asToken = (value: unknown): Address | undefined => {\n const token = asAddress(value)\n return token\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const tryGetBridgeEscrowAddress = (config: Config): Address | undefined => {\n const address = asAddress(config.bridge.escrowAddress)\n return address\n}\n\nexport const getBridgeEscrowAddress = (config: Config): Address => {\n const address = assertEx(tryGetBridgeEscrowAddress(config), () => `Invalid bridge escrow address: ${config.bridge.escrowAddress}`)\n return address\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const tryGetBridgeFeesAddress = (config: Config): Address | undefined => {\n const address = asAddress(config.bridge.feesAddress)\n return address\n}\n\nexport const getBridgeFeesAddress = (config: Config): Address => {\n const address = assertEx(tryGetBridgeFeesAddress(config), () => `Invalid bridge fees address: ${config.bridge.feesAddress}`)\n return address\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nimport type { FeeStructure } from '../util/index.ts'\n\nexport const getFeeStructure = (config: Config): FeeStructure => {\n const { feeFixed, feeRateBasisPoints } = config.bridge\n return { feeFixed, feeRateBasisPoints }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const getMaxBridgeAmount = (config: Config): Hex => {\n const { maxBridgeAmount } = config.bridge\n return maxBridgeAmount\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const getMinBridgeAmount = (config: Config): Hex => {\n const { minBridgeAmount } = config.bridge\n return minBridgeAmount\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { asChainId } from './asChainId.ts'\n\nexport const getRemoteChainId = (config: Config): ChainId => {\n const remoteChainId = assertEx(asChainId(config.bridge.remoteChainId), () => 'Invalid remote chain ID in config')\n return remoteChainId\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { asToken } from './asToken.ts'\n\nexport const getRemoteTokenAddress = (config: Config): Address => {\n const token = asToken(config.bridge.remoteTokenAddress)\n return assertEx(token, () => 'Remote token address is not defined in bridge configuration')\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const getBridgeWalletAccount = async (config: Config): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.bridge.mnemonic\n if (isUndefined(walletPhrase)) {\n console.log('[Bridge] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n console.log(`[Bridge] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n}\n\nexport const getAddressOrBridgeWalletAccountAddress = async (getConfigAccount: (config: Config) => Address | undefined, config: Config): Promise<Address> => {\n const address = getConfigAccount(config)\n if (isDefined(address)) return address\n const walletAccount = await getBridgeWalletAccount(config)\n return walletAccount.address\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { tryGetBridgeEscrowAddress } from './getBridgeEscrowAddress.ts'\nimport { tryGetBridgeFeesAddress } from './getBridgeFeesAddress.ts'\nimport { getBridgeWalletAccount } from './getBridgeWalletAccount.ts'\n\nexport interface TransferAddresses {\n escrowAddress: Address\n feesAddress: Address\n}\n\nexport const getTransferAddresses = async (config: Config): Promise<TransferAddresses> => {\n const escrowAddress = tryGetBridgeEscrowAddress(config) ?? (await getBridgeWalletAccount(config)).address\n const feesAddress = tryGetBridgeFeesAddress(config) ?? (await getBridgeWalletAccount(config)).address\n return { escrowAddress, feesAddress }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { asChainId } from './asChainId.ts'\n\nexport const getXl1ChainId = (config: Config): ChainId => {\n const xl1ChainId = config.bridge.xl1ChainId\n if (isDefined(xl1ChainId)) {\n return assertEx(asChainId(xl1ChainId), () => 'Invalid xl1ChainId in bridge config')\n }\n return assertEx(asChainId(config.chain.id), () => 'Invalid chain.id in config')\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { asToken } from './asToken.ts'\nimport { getXl1ChainId } from './getXl1ChainId.ts'\n\nexport const getXl1TokenAddress = (config: Config): Hex => {\n const token = asToken(config.bridge.xl1TokenAddress)\n if (isDefined(token)) return token\n return getXl1ChainId(config)\n}\n","import type { BridgeSettings, Config } from '@xyo-network/xl1-sdk'\n\nimport { getFeeStructure } from './getFeeStructure.ts'\nimport { getMaxBridgeAmount } from './getMaxBridgeAmount.ts'\nimport { getMinBridgeAmount } from './getMinBridgeAmount.ts'\nimport { getRemoteChainId } from './getRemoteChainId.ts'\nimport { getRemoteTokenAddress } from './getRemoteTokenAddress.ts'\nimport { getTransferAddresses } from './getTransferAddresses.ts'\nimport { getXl1ChainId } from './getXl1ChainId.ts'\nimport { getXl1TokenAddress } from './getXl1TokenAddress.ts'\n\nexport const getBridgeSettings = async (config: Config): Promise<BridgeSettings> => {\n const { feeFixed, feeRateBasisPoints } = getFeeStructure(config)\n const { feesAddress, escrowAddress } = await getTransferAddresses(config)\n const maxBridgeAmount = getMaxBridgeAmount(config)\n const minBridgeAmount = getMinBridgeAmount(config)\n const remoteChainId = getRemoteChainId(config)\n const remoteTokenAddress = getRemoteTokenAddress(config)\n const xl1TokenAddress = getXl1TokenAddress(config)\n const xl1ChainId = getXl1ChainId(config)\n return {\n feeFixed, feeRateBasisPoints, feesAddress, escrowAddress, maxBridgeAmount, minBridgeAmount, remoteChainId, remoteTokenAddress, xl1TokenAddress, xl1ChainId,\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type {\n Config, RpcSchemaMap, TransportFactory,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n buildJsonRpcProviderLocator,\n HttpRpcTransport,\n SimpleXyoGatewayRunner, SimpleXyoSigner,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nlet gatewayInstance: XyoGatewayRunner | undefined\n\nexport const getGateway = async (config: Config): Promise<XyoGatewayRunner> => {\n if (isDefined(gatewayInstance)) return gatewayInstance\n const { mnemonic, chainRpcApiUrl: endpoint } = config.bridge\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies))\n return await locator.getInstance<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { toAddress, toHex } from '@xylabs/sdk-js'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { BridgeDestinationObservation, Config } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationFieldsZod,\n BridgeDestinationObservationSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeFromRemoteStatusRoute = (config: Config): RouteDefinition => {\n const params = z.object({\n chainId: getRemoteChainIdZod(config),\n nonce: z.string().nonempty(),\n })\n const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(\n BridgeDestinationObservationFieldsZod.shape,\n )\n const validateRequest = requestHandlerValidator({ params, response })\n\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeFromRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const {\n remoteChainId, remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const rand = await Promise.resolve(Math.random())\n\n // TODO: Replace with actual lookup logic (e.g. database or chain query)\n const found = rand > 0.5 // simulate lookup\n if (!found) return res.sendStatus(404)\n\n const confirmed = rand > 0.8 // simulate pending/confirmed\n if (!confirmed) return res.sendStatus(204)\n\n const observation: BridgeDestinationObservation = {\n schema: BridgeDestinationObservationSchema,\n dest: xl1ChainId,\n destAddress: toAddress('0xabc'),\n destAmount: toHex('0x100'),\n destToken: xl1TokenAddress,\n src: remoteChainId,\n srcAddress: toAddress('0x123'),\n srcAmount: toHex('0x200'),\n srcToken: remoteTokenAddress,\n destConfirmation: toHex('0x9999'),\n }\n res.json(observation)\n }),\n }\n}\n","import {\n asHex, HexZod, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { getRemoteChainId } from '../../../../../config/index.ts'\n\nexport const getRemoteChainIdZod = (config: Config) => {\n const remoteChainId: ChainId = getRemoteChainId(config)\n return HexZod.superRefine((val, ctx) => {\n const chainId = asHex(val)\n if (isUndefined(chainId)) {\n ctx.addIssue('Not a valid chain id')\n return\n }\n if (chainId !== remoteChainId) {\n ctx.addIssue(`Only ${remoteChainId} is supported`)\n }\n })\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeSourceObservation, BridgeSourceObservationFields, Config,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod, TransferZod,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { createXl1ToEthBridgeJob } from '../../../../../queue/index.ts'\nimport { validateBridgeEstimateExact, validateBridgeTransaction } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteRoute = (config: Config): RouteDefinition => {\n const params = z.object({ chainId: getRemoteChainIdZod(config) })\n const body = z.tuple([\n SignedTransactionBoundWitnessZod,\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n TransferZod,\n ])\n const response = PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape)\n\n const validateRequest = requestHandlerValidator({\n params, body, response,\n })\n return {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote',\n handlers: validateRequest(async (req, res) => {\n const [signedTxBw, bridgeIntent, transfer] = req.body\n const { flowProducer } = req.app\n\n // Validate request\n const transactionValid = await validateBridgeTransaction(signedTxBw, bridgeIntent, transfer, config)\n if (!transactionValid) {\n res.status(400).send()\n return\n }\n\n // Validate estimate\n const estimateValid = await validateBridgeEstimateExact(bridgeIntent, transfer, config)\n if (!estimateValid) {\n res.status(400).send()\n return\n }\n\n // Submit to job queue\n const singedHydratedTransaction: SignedHydratedTransaction = [signedTxBw, [transfer, bridgeIntent]]\n await createXl1ToEthBridgeJob(flowProducer, singedHydratedTransaction)\n\n // Create BridgeObservation\n const srcConfirmation = await PayloadBuilder.hash(signedTxBw)\n const bridgeCommonFieldsZod = z.object({}).extend(BridgeSourceObservationFieldsZod.shape)\n const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent)\n const bridgeObservationFields: BridgeSourceObservationFields = { ...bridgeCommonFields, srcConfirmation }\n const bridgeObservation: BridgeSourceObservation = new PayloadBuilder<BridgeSourceObservation>(\n { schema: BridgeSourceObservationSchema },\n ).fields(bridgeObservationFields).build()\n\n // Return bridge observation to caller\n res.json(bridgeObservation)\n }),\n }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, toHex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport type FeeStructure = Pick<Config['bridge'], 'feeFixed' | 'feeRateBasisPoints'>\n\nexport interface FeeCalculationResult {\n destAmount: Hex\n feeFixed: Hex\n feeVariable: Hex\n}\n\nexport const calculateBridgeFees = (srcAmount: Hex, feeStructure: FeeStructure): FeeCalculationResult => {\n const { feeFixed, feeRateBasisPoints } = feeStructure\n\n // Format source input\n const srcAmountBigInt = hexToBigInt(srcAmount)\n\n // Calculate fixed fee\n const feeFixedBigInt = hexToBigInt(feeFixed)\n\n // Integer-safe basis point calculation (floor division)\n const feeVariableBigInt\n = (srcAmountBigInt * BigInt(feeRateBasisPoints)) / 10_000n\n const feeVariable = toHex(feeVariableBigInt)\n\n // Calculate total fee\n const feeTotalBigInt = feeFixedBigInt + feeVariableBigInt\n\n // Calculate destination amount\n const destAmountBigInt = srcAmountBigInt > feeTotalBigInt ? srcAmountBigInt - feeTotalBigInt : 0n\n const destAmount = toHex(destAmountBigInt)\n\n return {\n destAmount,\n feeFixed,\n feeVariable,\n }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, toAddress } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, BridgeIntentFields, Config,\n Transfer,\n} from '@xyo-network/xl1-sdk'\nimport { BridgeIntentSchema, createTransferPayload } from '@xyo-network/xl1-sdk'\nimport { v4 } from 'uuid'\n\nimport { getBridgeSettings } from '../config/index.ts'\nimport { calculateBridgeFees } from './calculateBridgeFees.ts'\n\nexport const generateBridgeEstimate = async (\n srcAddress: Hex,\n srcAmount: Hex,\n destAddress: Hex,\n config: Config,\n nonceOverride?: string,\n): Promise<[BridgeIntent, Transfer]> => {\n const {\n escrowAddress, feeFixed, feeRateBasisPoints, feesAddress, remoteChainId, remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const sender = toAddress(srcAddress)\n\n // Calculate fees and destination amount\n const fees = calculateBridgeFees(srcAmount, { feeFixed, feeRateBasisPoints })\n const {\n destAmount, feeFixed: feeFixedAmount, feeVariable,\n } = fees\n\n // Generate a unique nonce for the bridge intent\n const nonce = nonceOverride ?? v4()\n\n // Build the bridge intent\n const bridgeIntentFields: BridgeIntentFields = {\n // Source\n src: xl1ChainId,\n srcAddress: sender,\n srcAmount,\n srcToken: xl1TokenAddress,\n\n // Destination\n dest: remoteChainId,\n destAddress,\n destAmount,\n destToken: remoteTokenAddress,\n nonce,\n }\n const bridgeIntent: BridgeIntent = new PayloadBuilder<BridgeIntent>({ schema: BridgeIntentSchema }).fields(bridgeIntentFields).build()\n\n // Build the transfer\n const context = {\n destAmount, feeFixed: feeFixedAmount, feeVariable,\n }\n const transfer: Transfer = createTransferPayload(sender, {\n [escrowAddress]: hexToBigInt(destAmount),\n [feesAddress]: hexToBigInt(feeFixedAmount) + hexToBigInt(feeVariable),\n }, context)\n\n return [bridgeIntent, transfer]\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, Config, Transfer,\n} from '@xyo-network/xl1-sdk'\n\nimport { generateBridgeEstimate } from './generateBridgeEstimate.ts'\n\n/**\n * Validates a bridge estimate by checking the intent and transfer against the provided configuration. This method\n * only returns true if the bridge estimate matches exactly.\n * @param intent The BridgeIntent\n * @param transfer The Transfer\n * @param config The Config\n * @returns True if the bridge estimate satisfies bridging conditions, false otherwise.\n */\nexport const validateBridgeEstimateExact = async (\n intent: BridgeIntent,\n transfer: Transfer,\n config: Config,\n): Promise<boolean> => {\n const {\n srcAddress, srcAmount, destAddress,\n } = intent\n const [calculatedIntent, calculatedTransfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config)\n if (isUndefined(calculatedIntent) || isUndefined(calculatedTransfer)) return false\n const { nonce: expectedIntentNonce, ...expectedIntentStatic } = calculatedIntent\n const { nonce: actualIntentNonce, ...actualIntentStatic } = intent\n if (await PayloadBuilder.dataHash(expectedIntentStatic) !== await PayloadBuilder.dataHash(actualIntentStatic)) return false\n const { epoch: expectedTransferEpoch, ...expectedTransferStatic } = calculatedTransfer\n const { epoch: actualTransferEpoch, ...actualTransferStatic } = transfer\n if (await PayloadBuilder.dataHash(expectedTransferStatic) !== await PayloadBuilder.dataHash(actualTransferStatic)) return false\n\n return true\n}\n","import { asAddress, isDefined } from '@xylabs/sdk-js'\nimport {\n addressesContains, BoundWitnessValidator, payloadHashesContainsAll,\n} from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, Config,\n TransactionBoundWitness, Transfer,\n} from '@xyo-network/xl1-sdk'\n\nimport { getXl1ChainId } from '../config/index.ts'\n\n/**\n * Validates a bridge estimate by checking the intent and transfer against the provided configuration. This method\n * exists to allow for \"at least\" validation of a bridge estimates in case we want to allow for some flexibility in\n * the bridge estimate.\n * @ param signedTransaction The signed transaction bound witness\n * @param signedTxBw The signed transaction bound witness\n * @param intent The BridgeIntent\n * @param transfer The Transfer\n * @param config The Config\n * @returns True if the bridge estimate satisfies bridging conditions, false otherwise.\n */\nexport const validateBridgeTransaction = async (\n signedTxBw: TransactionBoundWitness,\n intent: BridgeIntent,\n transfer: Transfer,\n config: Config,\n): Promise<boolean> => {\n const { srcAddress } = intent\n\n const chainId = getXl1ChainId(config)\n if (signedTxBw.chain !== chainId) return false\n\n const errors = await new BoundWitnessValidator(signedTxBw).validate()\n if (isDefined(errors) && errors.length > 0) return false\n\n const sender = asAddress(srcAddress, true)\n if (!addressesContains(signedTxBw, sender)) return false\n\n const hashes = await PayloadBuilder.hashes([intent, transfer])\n if (!payloadHashesContainsAll(signedTxBw, hashes)) return false\n\n return true\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, toAddress } from '@xylabs/sdk-js'\nimport { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport { buildUnsignedTransaction, type Config } from '@xyo-network/xl1-sdk'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, toXL1BlockNumber, TransactionBoundWitnessZod, TransferSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getGateway, getXl1ChainId } from '../../../../../config/index.ts'\nimport { generateBridgeEstimate } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteEstimateRoute = (config: Config): RouteDefinition => {\n const params = z.object({ chainId: getRemoteChainIdZod(config) })\n const body = BridgeIntentFieldsZod.pick({\n destAddress: true,\n srcAddress: true,\n srcAmount: true,\n })\n const response = z.tuple([\n TransactionBoundWitnessZod,\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodLooseOfSchema(TransferSchema),\n ])\n const validateRequest = requestHandlerValidator({\n params, body, response,\n })\n\n return {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote/estimate',\n handlers: validateRequest(async (req, res) => {\n const xl1ChainId = getXl1ChainId(config)\n const {\n srcAddress, srcAmount, destAddress,\n } = req.body\n const [bridgeIntent, transfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config)\n const sender = toAddress(srcAddress)\n\n // Use viewer to get current block\n const gateway = await getGateway(config)\n const viewer = assertEx(gateway.connection.viewer, () => new Error('Viewer not available on gateway connection'))\n const currentBlockNumber = await viewer.currentBlockNumber()\n // Calculate nbf/exp\n const nbf = toXL1BlockNumber(currentBlockNumber, true)\n const exp = toXL1BlockNumber(currentBlockNumber + 1000, true)\n // Build unsigned transaction representing the transfer that will be signed by srcAddress\n const [txBw] = await buildUnsignedTransaction(xl1ChainId, [transfer], [bridgeIntent], nbf, exp, sender)\n\n // Return the TX to the caller for signing\n res.json([txBw, bridgeIntent, transfer])\n }),\n }\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport {\n asAddress, asHex, toHex,\n} from '@xylabs/sdk-js'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeDestinationObservation, BridgeSourceObservation, Config,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationFieldsZod, BridgeDestinationObservationSchema, BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod,\n BridgeSourceObservationSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\nimport { generateBridgeEstimate } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteStatusRoute = (config: Config): RouteDefinition => {\n const params = z.object({\n chainId: getRemoteChainIdZod(config),\n nonce: z.string().nonempty(),\n })\n const query = z.object({ mockStatus: z.coerce.number().default(0) })\n const response = z.union([\n z.tuple([]),\n z.tuple([PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape)]),\n z.tuple([\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape),\n ]),\n z.tuple([\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape),\n ]),\n ])\n\n const validateRequest = requestHandlerValidator({\n params, query, response,\n })\n\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeToRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const { chainId } = req.params\n const { mockStatus = 0 } = req.query\n const result: z.infer<typeof response> = [] as unknown as z.infer<typeof response>\n\n const {\n remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const src = xl1ChainId\n const srcAddress = asAddress('2222222222222222222222222222222222222222', true)\n const srcAmount = asHex('0x200', true)\n const srcToken = xl1TokenAddress\n\n const dest = chainId\n const destAddress = asAddress('3333333333333333333333333333333333333333', true)\n const destAmount = asHex('0x100', true)\n const destToken = remoteTokenAddress\n\n if (mockStatus === 0) return res.sendStatus(404)\n if (mockStatus > 0) {\n const [observation] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config, req.params.nonce)\n result[0] = observation\n }\n if (mockStatus > 1) {\n const observation: BridgeSourceObservation = {\n schema: BridgeSourceObservationSchema,\n dest,\n destAddress,\n destAmount,\n destToken,\n src,\n srcAddress,\n srcAmount,\n srcToken,\n srcConfirmation: toHex('0x8888'),\n }\n result[1] = observation\n }\n if (mockStatus > 2) {\n const observation: BridgeDestinationObservation = {\n schema: BridgeDestinationObservationSchema,\n dest,\n destAddress,\n destAmount,\n destToken,\n src,\n srcAddress,\n srcAmount,\n srcToken,\n destConfirmation: toHex('0x9999'),\n }\n result[2] = observation\n }\n\n res.json(result)\n }),\n }\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport {\n makeBridgeConfigRoute, makeBridgeFromRemoteStatusRoute, makeBridgeToRemoteEstimateRoute, makeBridgeToRemoteRoute, makeBridgeToRemoteStatusRoute,\n} from './routes/index.ts'\n\nexport const getRouteDefinitions = (config: Config): RouteDefinition[] => {\n return [\n makeBridgeConfigRoute(config),\n makeBridgeToRemoteEstimateRoute(config),\n makeBridgeToRemoteRoute(config),\n makeBridgeToRemoteStatusRoute(config),\n makeBridgeFromRemoteStatusRoute(config),\n ]\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addBridgeRoutes = (app: Express, config: Config) => {\n const routeDefinitions = getRouteDefinitions(config)\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { addBridgeRoutes } from './bridge/index.ts'\n\nexport const addRoutes = (app: Express, config: Config) => {\n addBridgeRoutes(app, config)\n}\n","import {\n assertEx, isDefined, isString, type Logger,\n} from '@xylabs/sdk-js'\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-sdk'\n\nimport { getNode, getServices } 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.bridge\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 app.services = await getServices({ config, logger })\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport { initEvmProvider } from '@xyo-network/chain-services'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BridgeDestinationObservation, Config, IterableMap, ProviderFactoryLocator, SignedHydratedTransaction,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n hasMongoConfig, mapToMapType,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport type { Document } from 'mongodb'\n\nimport type { EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams, XL1TransactionCompletionMonitorSentinelParams } from '../modules/index.ts'\nimport {\n EVMLiquidityBridgeTransactionCompletionMonitorSentinel, EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema,\n XL1TransactionCompletionMonitorSentinel, XL1TransactionCompletionMonitorSentinelConfigSchema,\n} from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n locator: ProviderFactoryLocator\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 getModuleLocator = async (context: GetLocatorContext) => {\n const {\n config, locator, logger,\n } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9468 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-bridge',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const moduleLocator = 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 moduleLocator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n moduleLocator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n moduleLocator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n moduleLocator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n\n const gateway = await locator.getInstance<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n const viewer = assertEx(gateway.connection.viewer, () => 'Gateway viewer is not defined')\n const pendingXl1ToEthXl1BridgeIntentTransactions = await getIterableMap<Hash, SignedHydratedTransaction>(\n config,\n 'liquidity_bridge_xl1_to_eth_xl1_pending',\n )\n const completedXl1ToEthXl1BridgeIntentTransactions = await getIterableMap<Hash, SignedHydratedTransaction>(\n config,\n 'liquidity_bridge_xl1_to_eth_xl1_completed',\n )\n\n const xl1TransactionCompletionMonitorSentinelParams: XL1TransactionCompletionMonitorSentinelParams = {\n completedTransactions: completedXl1ToEthXl1BridgeIntentTransactions,\n config: { schema: XL1TransactionCompletionMonitorSentinelConfigSchema },\n meterProvider,\n pendingTransactions: pendingXl1ToEthXl1BridgeIntentTransactions,\n statusReporter,\n traceProvider,\n viewer,\n }\n moduleLocator.register(XL1TransactionCompletionMonitorSentinel.factory(xl1TransactionCompletionMonitorSentinelParams))\n\n const completedEthXl1BridgeTransactions = await getIterableMap<Hash, BridgeDestinationObservation>(\n config,\n 'liquidity_bridge_eth_xl1_bridge_completed',\n )\n const provider = await initEvmProvider({ config })\n const bridgeAddress = config.bridge.remoteBridgeContractAddress\n const evmLiquidityBridgeTransactionCompletionMonitorSentinelParams: EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = {\n bridgeAddress,\n completedTransactions: completedEthXl1BridgeTransactions,\n config: { schema: EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema },\n meterProvider,\n pendingTransactions: completedXl1ToEthXl1BridgeIntentTransactions,\n provider,\n statusReporter,\n traceProvider,\n }\n moduleLocator.register(EVMLiquidityBridgeTransactionCompletionMonitorSentinel.factory(evmLiquidityBridgeTransactionCompletionMonitorSentinelParams))\n\n return moduleLocator\n}\n\n/**\n * Gets an iterable map based on the storage instructions in the config\n * @param config The config containing storage instructions\n * @param collection The collection to use if using MongoDB for persistence\n * @returns The iterable map\n */\nconst getIterableMap = async <K extends {} = string, V extends Document = Document>\n(config: Config, collection: string): Promise<IterableMap<K, V>> => {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\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 sdkBalanceSummaryMap = new BaseMongoSdk<V>({ ...payloadSdkConfig, collection })\n const result = await MongoMap.create<MongoMap<K, V>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n return result\n } else {\n return mapToMapType(new Map<K, V>())\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport {\n asAddress, asHex, assertEx, delay, hexFromBigInt, hexToBigInt, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\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 LiquidityPoolBridge, LiquidityPoolBridge__factory } from '@xyo-network/typechain'\nimport type {\n BridgeDestinationObservation, BridgeIntent, IterableMap, MapType,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent,\n tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\nimport { getAddress } from 'ethers/address'\nimport type { Provider } from 'ethers/providers'\nimport { Wallet } from 'ethers/wallet'\n\nexport const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n = 'network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config'\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = typeof EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n\n/**\n * The configuration for the sentinel\n */\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig = SentinelConfig<{\n /**\n * The interval in milliseconds between checking for jobs to fulfill\n */\n jobCheckInterval: number\n\n /**\n * The schema for the sentinel config\n */\n schema: EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n}>\n\ninterface EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields {\n /**\n * The address to watch for incoming or outgoing ERC-20 token transfers.\n */\n bridgeAddress: string\n\n /**\n * The map of completed transactions to monitor for completion\n */\n completedTransactions: MapType<Hash, BridgeDestinationObservation>\n\n /**\n * The map of pending transactions to monitor for completion\n */\n pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>\n\n /**\n * An ethers.js Provider connected to the Ethereum network to monitor for ERC-20 transfers.\n */\n provider: Provider\n}\n\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams<TConfig extends\nAnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig>,\n> = SentinelParams<TConfig> & EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields\n\nconst defaultJobCheckIntervalMs = 15_000\n\nexport class EVMLiquidityBridgeTransactionCompletionMonitorSentinel<\n TParams extends EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema]\n static override readonly defaultConfigSchema = EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n protected _attemptsCounter: Counter<Attributes> | undefined\n protected _bridge: LiquidityPoolBridge | undefined\n protected _bridgeChainId: Hex | undefined\n protected _bridgeRemoteChainId: Hex | undefined\n protected _bridgeTokenAddress: Address | undefined\n protected _checkCounter: Counter<Attributes> | undefined\n protected _errorCounter: Counter<Attributes> | undefined\n protected _reportMutex = new Mutex()\n protected _successCounter: Counter<Attributes> | undefined\n protected _wallet: Wallet | undefined\n\n protected get bridge(): LiquidityPoolBridge {\n return assertEx(this._bridge, () => new Error('Bridge contract not initialized'))\n }\n\n protected get completedTransactions(): MapType<Hash, BridgeDestinationObservation> {\n return assertEx(this.params.completedTransactions, () => 'Completed transactions map is not defined')\n }\n\n protected get jobCheckInterval(): number {\n return isDefined(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs\n }\n\n protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.pendingTransactions, () => 'Pending transactions map is not defined')\n }\n\n protected get wallet(): Wallet {\n return assertEx(this._wallet, () => 'wallet is required')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking bridge attempts, successes, and errors.\n this._attemptsCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_attempts_total',\n { description: 'Number of attempts' },\n )\n this._checkCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_check_total',\n { description: 'Number of checks' },\n )\n this._successCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_success_total',\n { description: 'Number of successes' },\n )\n this._errorCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_errors_total',\n { description: 'Number of errors' },\n )\n const { provider, bridgeAddress } = this.params\n\n // Connect to the bridge contract\n // Create a wallet bound to the provider (signer + provider)\n const key = assertEx(this.account?.private?.hex, () => new Error('Account private key is required'))\n this._wallet = new Wallet(key, provider)\n this._bridge = LiquidityPoolBridge__factory.connect(getAddress(bridgeAddress), this._wallet)\n\n // Parse bridge network chain ID\n const network = await provider.getNetwork()\n this._bridgeChainId = assertEx(hexFromBigInt(network.chainId), () => new Error('Failed to parse bridgeChainId'))\n\n // Parse bridge token address\n const tokenAddress = await this.bridge.token()\n this._bridgeTokenAddress = asAddress(tokenAddress, true)\n\n // Parse bridge remote chain ID\n const bridgeRemoteChain = await this.bridge.remoteChain()\n this._bridgeRemoteChainId = asHex(bridgeRemoteChain)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (isDefined(payloads) && payloads.length > 0) {\n const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads)\n if (isDefined(signedHydratedTransaction)) {\n // Insert into pending transactions for monitoring\n const txHash = await PayloadBuilder.hash(signedHydratedTransaction[0])\n this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`)\n await this.pendingTransactions.set(txHash, signedHydratedTransaction)\n return flattenHydratedTransaction(signedHydratedTransaction)\n }\n return []\n } else {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`EVMLiquidityBridgeTransactionCompletionMonitorSentinel [${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.processAllTransactions()\n }\n return response\n })\n }\n }\n\n private async processAllTransactions(): Promise<Payload[]> {\n const results: SignedHydratedTransaction[] = []\n for await (const [hash, signedHydratedTransaction] of this.pendingTransactions) {\n const result = await this.processTransaction([hash, signedHydratedTransaction])\n if (isDefined(result)) results.push(result[1])\n await delay(this.jobCheckInterval)\n }\n return flattenHydratedTransactions(results)\n }\n\n private async processTransaction(\n [hash, signedHydratedTransaction]: [Hash, SignedHydratedTransaction],\n ): Promise<[Hash, SignedHydratedTransaction] | undefined> {\n this.logger?.info(`Checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n try {\n let ret: [Hash, SignedHydratedTransaction] | undefined = undefined\n this._checkCounter?.add(1)\n const bridgeIntents = signedHydratedTransaction[1].filter(isBridgeIntent)\n // Only support a single intent per transaction for now\n if (bridgeIntents.length !== 1) {\n await this.pendingTransactions.delete(hash)\n return ret\n }\n const bridgeIntent = bridgeIntents[0]\n this._attemptsCounter?.add(1)\n const bridgeDestinationObservation = await this.relayBridgeIntentSync(bridgeIntent)\n await this.completedTransactions.set(hash, bridgeDestinationObservation)\n await this.pendingTransactions.delete(hash)\n this._successCounter?.add(1)\n return ret\n } catch (error) {\n this._errorCounter?.add(1)\n this.logger?.error(`Error checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}:`, error)\n }\n }\n\n /**\n * Relays a given BridgeIntent.\n * @param bridgeIntent The BridgeIntent to relay\n * @returns Relays the intent in a blocking manner, returning the resulting BridgeDestinationObservation if successful\n */\n private async relayBridgeIntentSync(bridgeIntent: BridgeIntent): Promise<BridgeDestinationObservation> {\n // Ensure source observation exists\n const amount = hexToBigInt(bridgeIntent.destAmount)\n const nonce = await this.wallet.getNonce()\n const srcAddress = getAddress(bridgeIntent.srcAddress)\n const destAddress = getAddress(bridgeIntent.destAddress)\n const tx = await this.bridge.bridgeFromRemote(srcAddress, destAddress, amount, nonce)\n const confirmation = await tx.wait()\n const transactionResponse = await confirmation?.getTransaction()\n const destConfirmation = asHex(transactionResponse?.hash ?? '', true)\n const { schema, ...rest } = bridgeIntent\n const result: BridgeDestinationObservation = new PayloadBuilder<BridgeDestinationObservation>({ schema: BridgeDestinationObservationSchema })\n .fields({ ...rest, destConfirmation }).build()\n return result\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\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 IterableMap, MapType, SignedHydratedTransaction,\n XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n flattenHydratedTransaction, flattenHydratedTransactions, tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const XL1TransactionCompletionMonitorSentinelConfigSchema = 'network.xyo.sentinel.chain.transaction.completion.monitor.config'\nexport type XL1TransactionCompletionMonitorSentinelConfigSchema = typeof XL1TransactionCompletionMonitorSentinelConfigSchema\n\n/**\n * The configuration for the sentinel\n */\nexport type XL1TransactionCompletionMonitorSentinelConfig = SentinelConfig<{\n /**\n * The interval in milliseconds between checking for jobs to fulfill\n */\n jobCheckInterval: number\n\n /**\n * The schema for the sentinel config\n */\n schema: XL1TransactionCompletionMonitorSentinelConfigSchema\n}>\n\ninterface XL1TransactionCompletionMonitorSentinelParamFields {\n /**\n * The map of completed transactions to monitor for completion\n */\n completedTransactions: MapType<Hash, SignedHydratedTransaction>\n\n /**\n * The map of pending transactions to monitor for completion\n */\n pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>\n\n /**\n * The viewer instance to use for viewing transactions\n */\n viewer: XyoViewer\n}\n\nexport type XL1TransactionCompletionMonitorSentinelParams<\n TConfig extends AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig>,\n> = SentinelParams<TConfig> & XL1TransactionCompletionMonitorSentinelParamFields\n\nconst defaultJobCheckIntervalMs = 15_000\n\nexport class XL1TransactionCompletionMonitorSentinel<\n TParams extends XL1TransactionCompletionMonitorSentinelParams = XL1TransactionCompletionMonitorSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [XL1TransactionCompletionMonitorSentinelConfigSchema]\n static override readonly defaultConfigSchema = XL1TransactionCompletionMonitorSentinelConfigSchema\n private _attemptsCounter: Counter<Attributes> | undefined\n private _checkCounter: Counter<Attributes> | undefined\n private _errorCounter: Counter<Attributes> | undefined\n private _reportMutex = new Mutex()\n private _successCounter: Counter<Attributes> | undefined\n\n protected get completedTransactions(): MapType<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.completedTransactions, () => 'Completed transactions map is not defined')\n }\n\n protected get jobCheckInterval(): number {\n return isDefined(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs\n }\n\n protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.pendingTransactions, () => 'Pending transactions map is not defined')\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this.params.viewer, () => 'Viewer is not defined in params')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking bridge attempts, successes, and errors.\n this._attemptsCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_attempts_total', { description: 'Number of attempts' })\n this._checkCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_check_total', { description: 'Number of checks' })\n this._successCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_success_total', { description: 'Number of successes' })\n this._errorCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_errors_total', { description: 'Number of errors' })\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (isDefined(payloads) && payloads.length > 0) {\n const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads)\n if (isDefined(signedHydratedTransaction)) {\n // Insert into pending transactions for monitoring\n const txHash = await PayloadBuilder.hash(signedHydratedTransaction[0])\n this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`)\n await this.pendingTransactions.set(txHash, signedHydratedTransaction)\n return flattenHydratedTransaction(signedHydratedTransaction)\n }\n return []\n } else {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`XL1TransactionCompletionMonitorSentinel [${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.processAllTransactions()\n }\n return response\n })\n }\n }\n\n private async processAllTransactions(): Promise<Payload[]> {\n const results: SignedHydratedTransaction[] = []\n for await (const [hash, signedHydratedTransaction] of this.pendingTransactions) {\n const result = await this.processTransaction([hash, signedHydratedTransaction])\n if (isDefined(result)) results.push(result[1])\n await delay(this.jobCheckInterval)\n }\n return flattenHydratedTransactions(results)\n }\n\n private async processTransaction(\n [hash, signedHydratedTransaction]: [Hash, SignedHydratedTransaction],\n ): Promise<[Hash, SignedHydratedTransaction] | undefined> {\n this.logger?.info(`Checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n try {\n let ret: [Hash, SignedHydratedTransaction] | undefined = undefined\n this._checkCounter?.add(1)\n this._attemptsCounter?.add(1)\n // Check if the transaction is already included in the chain\n const tx = await this.viewer.transactionByHash(hash)\n if (isDefined(tx) && !isNull(tx)) {\n await this.completedTransactions.set(hash, signedHydratedTransaction)\n this.logger?.info(`Found transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n this.logger?.info(`Removing completed transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n await this.pendingTransactions.delete(hash)\n ret = [hash, signedHydratedTransaction]\n } else {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n if (signedHydratedTransaction[0].exp < currentBlockNumber) {\n this.logger?.info(`Removing expired transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n await this.pendingTransactions.delete(hash)\n }\n }\n this._successCounter?.add(1)\n return ret\n } catch (error) {\n this._errorCounter?.add(1)\n this.logger?.error(`Error checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}:`, error)\n }\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n Config, RpcSchemaMap, TransportFactory,\n} from '@xyo-network/xl1-sdk'\nimport { buildJsonRpcProviderLocator, HttpRpcTransport } from '@xyo-network/xl1-sdk'\n\nimport { getModuleLocator } from './getModuleLocator.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 { chainRpcApiUrl: endpoint } = context.config.bridge\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n const moduleLocator = await getModuleLocator({ ...context, locator })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator, 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\": \"XYOEthereumBridge\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\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","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"XL1\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"XL1BridgeIntentTransactionCompletionMonitorSentinelIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"XL1BridgeIntentTransactionCompletionMonitorSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"XL1BridgeIntentTransactionCompletionMonitorSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.transaction.completion.monitor.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\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\": \"3\",\n \"name\": \"Ethereum\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinelIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport XL1Node from './XL1.json' with { type: 'json' }\nimport EthereumNode from './Ethereum.json' with { type: 'json' }\n\n\n/**\n * XL1 Node Manifest\n */\nexport const XL1NodeManifest = XL1Node as PackageManifestPayload\n\n/**\n * Ethereum Node Manifest\n */\nexport const EthereumNodeManifest = EthereumNode as PackageManifestPayload\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...XL1NodeManifest.nodes,\n ...EthereumNodeManifest.nodes,\n]\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport { initEvmProvider } from '@xyo-network/chain-services'\nimport { LiquidityPoolBridge__factory } from '@xyo-network/typechain'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, IterableMap } from '@xyo-network/xl1-sdk'\nimport {\n hasMongoConfig,\n mapToMapType,\n} from '@xyo-network/xl1-sdk'\nimport { getAddress, Wallet } from 'ethers'\nimport type { Document } from 'mongodb'\n\nimport { getGateway } from '../config/index.ts'\nimport type {\n EthTxState, IBridgeServiceCollection, Xl1TxState,\n} from '../services/index.ts'\n\nexport interface GetServicesContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a service collection\n * @returns A service collection\n */\nexport const getServices = async (context: GetServicesContext): Promise<IBridgeServiceCollection> => {\n const { config } = context\n\n const gateway = await getGateway(config)\n const ethTxStateMap = await getIterableMap<Hash, EthTxState>(config, 'liquidity_bridge_xl1_to_eth_eth_tx_state')\n const xl1TxStateMap = await getIterableMap<Hash, Xl1TxState>(config, 'liquidity_bridge_xl1_to_eth_xl1_tx_state')\n const provider = await initEvmProvider({ config })\n // TODO: Get from config\n const {\n remoteBridgeContractAddress, remoteChainWalletPrivateKey, mnemonic,\n } = config.bridge\n const account = isDefined(mnemonic) ? await HDWallet.fromPhrase(mnemonic) : await HDWallet.random()\n const wallet = new Wallet(remoteChainWalletPrivateKey, provider)\n const bridge = LiquidityPoolBridge__factory.connect(getAddress(remoteBridgeContractAddress), wallet)\n // Assert we are contract owner so we can call ownable methods\n const bridgeOwner = await bridge.owner()\n assertEx(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => 'Wallet is not the owner of the bridge contract')\n return {\n account,\n bridge,\n ethTxStateMap,\n gateway,\n provider,\n wallet,\n xl1TxStateMap,\n }\n}\n\n/**\n * Gets an iterable map based on the storage instructions in the config\n * @param config The config containing storage instructions\n * @param collection The collection to use if using MongoDB for persistence\n * @returns The iterable map\n */\nconst getIterableMap = async <K extends {} = string, V extends Document = Document>\n(config: Config, collection: string): Promise<IterableMap<K, V>> => {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\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 sdkBalanceSummaryMap = new BaseMongoSdk<V>({ ...payloadSdkConfig, collection })\n const result = await MongoMap.create<MongoMap<K, V>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n return result\n } else {\n return mapToMapType(new Map<K, V>())\n }\n}\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","isDefined","Redis","connection","maxRetriesPerRequest","getConnection","config","isDefined","redisHost","host","redisPort","port","bridge","Redis","isDefined","FlowProducer","flowProducer","getFlowProducer","connection","isDefined","FlowProducer","assertEx","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","provider","ethTxStateMap","stateMap","tx","data","hash","PayloadBuilder","state","assertEx","get","submissionHash","receipt","getTransactionReceipt","log","blockNumber","blockHash","confirmationHash","set","ethTransactionMonitor","assertEx","hexToBigInt","PayloadBuilder","isBridgeIntent","Worker","getAddress","name","queueName","createWorker","connection","Worker","job","bridge","ethTxStateMap","stateMap","tx","data","hash","PayloadBuilder","log","bridgeIntent","assertEx","find","isBridgeIntent","amount","hexToBigInt","destAmount","srcAddress","getAddress","destAddress","preparedTx","getFunction","populateTransaction","set","ethTransactionPreparation","assertEx","isDefined","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","ethTxStateMap","stateMap","tx","wallet","data","hash","PayloadBuilder","state","assertEx","get","preparedTx","submissionHash","existingSubmissionHash","isDefined","log","submissionResponse","sendTransaction","set","concurrency","ethTransactionSubmission","Worker","name","queueName","createWorker","connection","Worker","job","log","ok","xl1ToEthBridgeParent","assertEx","isDefined","isNull","PayloadBuilder","UnrecoverableError","Worker","name","queueName","createWorker","connection","Worker","job","gateway","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","viewer","assertEx","state","get","log","foundTx","transactionByHash","isDefined","isNull","confirmationHash","set","currentBlockNumber","exp","UnrecoverableError","Error","xl1TransactionMonitor","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","log","preparedTx","set","xl1TransactionPreparation","assertEx","isDefined","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","gateway","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","state","assertEx","get","preparedTx","submissionHash","existingSubmissionHash","isDefined","log","addTransactionToChain","set","xl1TransactionSubmission","createXl1ToEthBridgeJob","flowProducer","tx","flow","add","name","xl1ToEthBridgeParent","queueName","data","children","xl1TransactionPreparation","xl1TransactionSubmission","xl1TransactionMonitor","opts","attempts","backoff","type","delay","ethTransactionPreparation","ethTransactionSubmission","ethTransactionMonitor","addFlowProducer","app","config","connection","getConnection","flowProducer","getFlowProducer","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","requestHandlerValidator","BridgeSettingsZod","asHex","asChainId","value","chainId","asHex","asAddress","asToken","value","token","asAddress","asAddress","assertEx","tryGetBridgeEscrowAddress","config","address","asAddress","bridge","escrowAddress","asAddress","assertEx","tryGetBridgeFeesAddress","config","address","asAddress","bridge","feesAddress","getFeeStructure","config","feeFixed","feeRateBasisPoints","bridge","getMaxBridgeAmount","config","maxBridgeAmount","bridge","getMinBridgeAmount","config","minBridgeAmount","bridge","assertEx","getRemoteChainId","config","remoteChainId","assertEx","asChainId","bridge","assertEx","getRemoteTokenAddress","config","token","asToken","bridge","remoteTokenAddress","assertEx","isDefined","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","getBridgeWalletAccount","config","walletPhrase","bridge","mnemonic","isUndefined","console","log","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","getTransferAddresses","config","escrowAddress","tryGetBridgeEscrowAddress","getBridgeWalletAccount","address","feesAddress","tryGetBridgeFeesAddress","assertEx","isDefined","getXl1ChainId","config","xl1ChainId","bridge","isDefined","assertEx","asChainId","chain","id","isDefined","getXl1TokenAddress","config","token","asToken","bridge","xl1TokenAddress","isDefined","getXl1ChainId","getBridgeSettings","config","feeFixed","feeRateBasisPoints","getFeeStructure","feesAddress","escrowAddress","getTransferAddresses","maxBridgeAmount","getMaxBridgeAmount","minBridgeAmount","getMinBridgeAmount","remoteChainId","getRemoteChainId","remoteTokenAddress","getRemoteTokenAddress","xl1TokenAddress","getXl1TokenAddress","xl1ChainId","getXl1ChainId","isDefined","HDWallet","buildJsonRpcProviderLocator","HttpRpcTransport","SimpleXyoGatewayRunner","SimpleXyoSigner","XyoGatewayRunnerMoniker","gatewayInstance","getGateway","config","isDefined","mnemonic","chainRpcApiUrl","endpoint","bridge","walletPromise","HDWallet","fromPhrase","random","account","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","register","SimpleXyoSigner","factory","dependencies","SimpleXyoGatewayRunner","getInstance","XyoGatewayRunnerMoniker","response","BridgeSettingsZod","validateRequest","requestHandlerValidator","makeBridgeConfigRoute","config","method","path","handlers","_","res","escrowAddress","feeFixed","feeRateBasisPoints","feesAddress","maxBridgeAmount","minBridgeAmount","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","sanitizedConfig","json","requestHandlerValidator","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","asHex","HexZod","isUndefined","getRemoteChainIdZod","config","remoteChainId","getRemoteChainId","HexZod","superRefine","val","ctx","chainId","asHex","isUndefined","addIssue","makeBridgeFromRemoteStatusRoute","config","params","z","object","chainId","getRemoteChainIdZod","nonce","string","nonempty","response","PayloadZodStrictOfSchema","BridgeDestinationObservationSchema","extend","BridgeDestinationObservationFieldsZod","shape","validateRequest","requestHandlerValidator","method","path","handlers","req","res","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","rand","Promise","resolve","Math","random","found","sendStatus","confirmed","observation","schema","dest","destAddress","toAddress","destAmount","toHex","destToken","src","srcAddress","srcAmount","srcToken","destConfirmation","json","requestHandlerValidator","PayloadBuilder","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","SignedTransactionBoundWitnessZod","TransferZod","z","hexToBigInt","toHex","calculateBridgeFees","srcAmount","feeStructure","feeFixed","feeRateBasisPoints","srcAmountBigInt","hexToBigInt","feeFixedBigInt","feeVariableBigInt","BigInt","feeVariable","toHex","feeTotalBigInt","destAmountBigInt","destAmount","hexToBigInt","toAddress","PayloadBuilder","BridgeIntentSchema","createTransferPayload","v4","generateBridgeEstimate","srcAddress","srcAmount","destAddress","config","nonceOverride","escrowAddress","feeFixed","feeRateBasisPoints","feesAddress","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","sender","toAddress","fees","calculateBridgeFees","destAmount","feeFixedAmount","feeVariable","nonce","v4","bridgeIntentFields","src","srcToken","dest","destToken","bridgeIntent","PayloadBuilder","schema","BridgeIntentSchema","fields","build","context","transfer","createTransferPayload","hexToBigInt","isUndefined","PayloadBuilder","validateBridgeEstimateExact","intent","transfer","config","srcAddress","srcAmount","destAddress","calculatedIntent","calculatedTransfer","generateBridgeEstimate","isUndefined","nonce","expectedIntentNonce","expectedIntentStatic","actualIntentNonce","actualIntentStatic","PayloadBuilder","dataHash","epoch","expectedTransferEpoch","expectedTransferStatic","actualTransferEpoch","actualTransferStatic","asAddress","isDefined","addressesContains","BoundWitnessValidator","payloadHashesContainsAll","PayloadBuilder","validateBridgeTransaction","signedTxBw","intent","transfer","config","srcAddress","chainId","getXl1ChainId","chain","errors","BoundWitnessValidator","validate","isDefined","length","sender","asAddress","addressesContains","hashes","PayloadBuilder","payloadHashesContainsAll","makeBridgeToRemoteRoute","config","params","z","object","chainId","getRemoteChainIdZod","body","tuple","SignedTransactionBoundWitnessZod","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","BridgeIntentFieldsZod","shape","TransferZod","response","BridgeSourceObservationSchema","BridgeSourceObservationFieldsZod","validateRequest","requestHandlerValidator","method","path","handlers","req","res","signedTxBw","bridgeIntent","transfer","flowProducer","app","transactionValid","validateBridgeTransaction","status","send","estimateValid","validateBridgeEstimateExact","singedHydratedTransaction","createXl1ToEthBridgeJob","srcConfirmation","PayloadBuilder","hash","bridgeCommonFieldsZod","bridgeCommonFields","parse","bridgeObservationFields","bridgeObservation","schema","fields","build","json","requestHandlerValidator","assertEx","toAddress","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","buildUnsignedTransaction","BridgeIntentFieldsZod","BridgeIntentSchema","toXL1BlockNumber","TransactionBoundWitnessZod","TransferSchema","z","makeBridgeToRemoteEstimateRoute","config","params","z","object","chainId","getRemoteChainIdZod","body","BridgeIntentFieldsZod","pick","destAddress","srcAddress","srcAmount","response","tuple","TransactionBoundWitnessZod","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","shape","PayloadZodLooseOfSchema","TransferSchema","validateRequest","requestHandlerValidator","method","path","handlers","req","res","xl1ChainId","getXl1ChainId","bridgeIntent","transfer","generateBridgeEstimate","sender","toAddress","gateway","getGateway","viewer","assertEx","connection","Error","currentBlockNumber","nbf","toXL1BlockNumber","exp","txBw","buildUnsignedTransaction","json","requestHandlerValidator","asAddress","asHex","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","z","makeBridgeToRemoteStatusRoute","config","params","z","object","chainId","getRemoteChainIdZod","nonce","string","nonempty","query","mockStatus","coerce","number","default","response","union","tuple","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","BridgeIntentFieldsZod","shape","BridgeSourceObservationSchema","BridgeSourceObservationFieldsZod","BridgeDestinationObservationSchema","BridgeDestinationObservationFieldsZod","validateRequest","requestHandlerValidator","method","path","handlers","req","res","result","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","src","srcAddress","asAddress","srcAmount","asHex","srcToken","dest","destAddress","destAmount","destToken","sendStatus","observation","generateBridgeEstimate","schema","srcConfirmation","toHex","destConfirmation","json","getRouteDefinitions","config","makeBridgeConfigRoute","makeBridgeToRemoteEstimateRoute","makeBridgeToRemoteRoute","makeBridgeToRemoteStatusRoute","makeBridgeFromRemoteStatusRoute","addBridgeRoutes","app","config","routeDefinitions","getRouteDefinitions","definition","method","path","handlers","addRoutes","app","config","addBridgeRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addFlowProducer","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","BaseMongoSdk","assertEx","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","MongoMap","initEvmProvider","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","mapToMapType","XyoGatewayRunnerMoniker","asAddress","asHex","assertEx","delay","hexFromBigInt","hexToBigInt","isDefined","isUndefined","PayloadBuilder","AbstractSentinel","LiquidityPoolBridge__factory","BridgeDestinationObservationSchema","flattenHydratedTransaction","flattenHydratedTransactions","isBridgeIntent","tryUnflattenHydratedTransaction","Mutex","getAddress","Wallet","EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema","defaultJobCheckIntervalMs","EVMLiquidityBridgeTransactionCompletionMonitorSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_attemptsCounter","_bridge","_bridgeChainId","_bridgeRemoteChainId","_bridgeTokenAddress","_checkCounter","_errorCounter","_reportMutex","Mutex","_successCounter","_wallet","bridge","assertEx","Error","completedTransactions","params","jobCheckInterval","isDefined","config","pendingTransactions","wallet","createHandler","meter","createCounter","description","provider","bridgeAddress","key","account","private","hex","Wallet","LiquidityPoolBridge__factory","connect","getAddress","network","getNetwork","hexFromBigInt","chainId","tokenAddress","token","asAddress","bridgeRemoteChain","remoteChain","asHex","reportHandler","payloads","length","signedHydratedTransaction","tryUnflattenHydratedTransaction","txHash","PayloadBuilder","hash","logger","info","set","flattenHydratedTransaction","isLocked","debug","id","Date","now","runExclusive","response","isUndefined","processAllTransactions","results","result","processTransaction","push","delay","flattenHydratedTransactions","ret","undefined","add","bridgeIntents","filter","isBridgeIntent","delete","bridgeIntent","bridgeDestinationObservation","relayBridgeIntentSync","error","amount","hexToBigInt","destAmount","nonce","getNonce","srcAddress","destAddress","tx","bridgeFromRemote","confirmation","wait","transactionResponse","getTransaction","destConfirmation","schema","rest","BridgeDestinationObservationSchema","fields","build","assertEx","delay","isDefined","isNull","isUndefined","PayloadBuilder","AbstractSentinel","flattenHydratedTransaction","flattenHydratedTransactions","tryUnflattenHydratedTransaction","Mutex","XL1TransactionCompletionMonitorSentinelConfigSchema","defaultJobCheckIntervalMs","XL1TransactionCompletionMonitorSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_attemptsCounter","_checkCounter","_errorCounter","_reportMutex","Mutex","_successCounter","completedTransactions","assertEx","params","jobCheckInterval","isDefined","config","pendingTransactions","viewer","createHandler","meter","createCounter","description","reportHandler","payloads","length","signedHydratedTransaction","tryUnflattenHydratedTransaction","txHash","PayloadBuilder","hash","logger","info","set","flattenHydratedTransaction","isLocked","debug","id","Date","now","runExclusive","response","isUndefined","processAllTransactions","results","result","processTransaction","push","delay","flattenHydratedTransactions","ret","undefined","add","tx","transactionByHash","isNull","delete","currentBlockNumber","exp","error","getModuleLocator","context","config","locator","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","moduleLocator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","gateway","getInstance","XyoGatewayRunnerMoniker","viewer","assertEx","connection","pendingXl1ToEthXl1BridgeIntentTransactions","getIterableMap","completedXl1ToEthXl1BridgeIntentTransactions","xl1TransactionCompletionMonitorSentinelParams","completedTransactions","schema","XL1TransactionCompletionMonitorSentinelConfigSchema","pendingTransactions","XL1TransactionCompletionMonitorSentinel","completedEthXl1BridgeTransactions","provider","initEvmProvider","bridgeAddress","bridge","remoteBridgeContractAddress","evmLiquidityBridgeTransactionCompletionMonitorSentinelParams","EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema","EVMLiquidityBridgeTransactionCompletionMonitorSentinel","collection","sdkBalanceSummaryMap","BaseMongoSdk","result","MongoMap","create","sdk","getCache","enabled","maxEntries","mapToMapType","Map","ManifestWrapper","buildJsonRpcProviderLocator","HttpRpcTransport","NodeManifest","node","PrivateChildManifests","XL1NodeManifest","XL1Node","EthereumNodeManifest","EthereumNode","PublicChildManifests","nodes","getNode","context","wallet","chainRpcApiUrl","endpoint","config","bridge","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","moduleLocator","getModuleLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","BaseMongoSdk","assertEx","isDefined","MongoMap","initEvmProvider","LiquidityPoolBridge__factory","HDWallet","hasMongoConfig","mapToMapType","getAddress","Wallet","getServices","context","config","gateway","getGateway","ethTxStateMap","getIterableMap","xl1TxStateMap","provider","initEvmProvider","remoteBridgeContractAddress","remoteChainWalletPrivateKey","mnemonic","bridge","account","isDefined","HDWallet","fromPhrase","random","wallet","Wallet","LiquidityPoolBridge__factory","connect","getAddress","bridgeOwner","owner","assertEx","toLowerCase","address","collection","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","result","MongoMap","create","sdk","getCache","enabled","maxEntries","mapToMapType","Map","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","bridge","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","services","getServices","server","listen","setTimeout"]}
1
+ {"version":3,"sources":["../../src/server/app.ts","../../src/queue/connection.ts","../../src/queue/flowProducer.ts","../../src/queue/workers/ethTransactionMonitor.ts","../../src/queue/workers/ethTransactionPreparation.ts","../../src/queue/workers/ethTransactionSubmission.ts","../../src/queue/workers/xl1ToEthBridgeParent.ts","../../src/queue/workers/xl1TransactionMonitor.ts","../../src/queue/workers/xl1TransactionPreparation.ts","../../src/queue/workers/xl1TransactionSubmission.ts","../../src/queue/flows/createXl1ToEthBridgeJob.ts","../../src/server/flowProducer.ts","../../src/server/instrumentation.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts","../../src/config/asChainId.ts","../../src/config/asToken.ts","../../src/config/getBridgeEscrowAddress.ts","../../src/config/getBridgeFeesAddress.ts","../../src/config/getFeeStructure.ts","../../src/config/getMaxBridgeAmount.ts","../../src/config/getMinBridgeAmount.ts","../../src/config/getRemoteChainId.ts","../../src/config/getRemoteTokenAddress.ts","../../src/config/getBridgeWalletAccount.ts","../../src/config/getTransferAddresses.ts","../../src/config/getXl1ChainId.ts","../../src/config/getXl1TokenAddress.ts","../../src/config/getBridgeSettings.ts","../../src/config/getGateway.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts","../../src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts","../../src/util/calculateBridgeFees.ts","../../src/util/generateBridgeEstimate.ts","../../src/util/validateBridgeEstimateExact.ts","../../src/util/validateBridgeTransaction.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts","../../src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts","../../src/server/routes/bridge/addBridgeRoutes.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/manifest/getModuleLocator.ts","../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts","../../src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/XL1.json","../../src/manifest/public/Ethereum.json","../../src/manifest/public/index.ts","../../src/manifest/getServices.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-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addFlowProducer } from './flowProducer.ts'\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.node = node\n addFlowProducer(app, config)\n addRoutes(app, config)\n app.use(standardErrors)\n return app\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { Redis } from 'ioredis'\n\nlet connection: Redis | undefined\n\nconst maxRetriesPerRequest = null\n\nexport const getConnection = (config: Config) => {\n if (isDefined(connection)) return connection\n const { redisHost: host, redisPort: port } = config.bridge\n connection = new Redis({\n host, port, maxRetriesPerRequest,\n })\n return connection\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { FlowProducer } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nlet flowProducer: FlowProducer | undefined\n\nexport const getFlowProducer = (connection: Redis) => {\n if (isDefined(flowProducer)) return flowProducer\n flowProducer = new FlowProducer({ connection })\n return flowProducer\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap' | 'provider' | 'wallet'> & { tx: SignedHydratedTransaction }\ninterface ReturnType {\n blockHash: string\n blockNumber: number\n}\n\nconst name = 'Monitor Submitted ETH Transaction'\nconst queueName = 'eth-tx-monitor'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n provider, ethTxStateMap: stateMap, tx,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n const state = assertEx(await stateMap.get(hash), () => 'State not found')\n const submissionHash = assertEx(state?.submissionHash, () => 'submissionHash not found')\n const receipt = assertEx(await provider.getTransactionReceipt(submissionHash), () => 'Transaction receipt not found')\n await job.log(`[${hash}] confirmed ETH tx ${submissionHash} in block ${receipt.blockNumber}`)\n const { blockHash, blockNumber } = receipt\n state.confirmationHash = blockHash\n await stateMap.set(hash, state)\n return { blockHash, blockNumber }\n },\n { connection },\n )\n}\n\nexport const ethTransactionMonitor: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, hexToBigInt } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isBridgeIntent, type SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport { getAddress } from 'ethers'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {}\n\nconst name = 'Prepare ETH Transaction'\nconst queueName = 'eth-tx-prepare'\n\nexport const createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n bridge, ethTxStateMap: stateMap, tx,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n await job.log(`[${hash}] preparing ETH transaction`)\n await job.log(`[${hash}] building ETH transaction`)\n const bridgeIntent = assertEx(tx[1].find(isBridgeIntent), () => 'No bridge intent found')\n const amount = hexToBigInt(bridgeIntent.destAmount)\n const srcAddress = getAddress(bridgeIntent.srcAddress)\n const destAddress = getAddress(bridgeIntent.destAddress)\n const preparedTx = await bridge.getFunction('bridgeFromRemote').populateTransaction(srcAddress, destAddress, amount, 0n)\n await job.log(`[${hash}] built ETH transaction`)\n await job.log(`[${hash}] storing ETH preparedTx`)\n await stateMap.set(hash, { preparedTx })\n await job.log(`[${hash}] stored ETH preparedTx`)\n await job.log(`[${hash}] prepared ETH transaction`)\n return {}\n },\n { connection },\n )\n}\n\nexport const ethTransactionPreparation: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { EthTxState, IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'bridge' | 'ethTxStateMap' | 'wallet'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n submissionHash: Required<EthTxState>['submissionHash']\n}\n\nconst name = 'Submit ETH Transaction'\nconst queueName = 'eth-tx-submit'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n ethTxStateMap: stateMap, tx, wallet,\n } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n const preparedTx = assertEx(state?.preparedTx, () => `[${hash}] preparedTx not found`)\n\n // Idempotency check against resubmission\n const { submissionHash: existingSubmissionHash } = state\n if (isDefined(existingSubmissionHash)) {\n await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`)\n return { submissionHash: existingSubmissionHash }\n }\n\n // Submit the transaction to the Ethereum network\n await job.log(`[${hash}] Submitting ETH tx`)\n const submissionResponse = await wallet.sendTransaction(preparedTx)\n const submissionHash = submissionResponse.hash\n await job.log(`[${hash}] Submitted ETH tx and received submission response hash ${submissionHash}`)\n\n // Store the submission hash in the state\n await job.log(`[${hash}] Storing ETH submissionHash`)\n state.submissionHash = submissionHash\n await stateMap.set(hash, state)\n await job.log(`[${hash}] Stored ETH submissionHash`)\n\n return { submissionHash }\n // const hash = await PayloadBuilder.hash(tx[0])\n // await job.log(`[${hash}] Obtaining bridge intent from tx`)\n // const bridgeIntent = assertEx(tx[1].find(isBridgeIntent), () => 'No bridge intent found in transaction payload')\n // await job.log(`[${hash}] submitting ETH transaction`)\n // const amount = hexToBigInt(bridgeIntent.destAmount)\n // const srcAddress = getAddress(bridgeIntent.srcAddress)\n // const destAddress = getAddress(bridgeIntent.destAddress)\n // const tx = await bridge.bridgeFromRemote(srcAddress, destAddress, amount)\n // // const nonce = await wallet.getNonce()\n // // const tx = await bridge.bridgeFromRemote(srcAddress, destAddress, amount, { nonce })\n // await job.log(`[${hash}] submitted ETH transaction`)\n // const confirmation = await tx.wait()\n // const transactionResponse = await confirmation?.getTransaction()\n // const destConfirmation = asHex(transactionResponse?.hash ?? '', true)\n // const block = await transactionResponse?.getBlock()\n // await job.log(`[${hash}] confirmed ETH transaction with hash ${destConfirmation} in block ${block?.number}`)\n // const { schema, ...rest } = bridgeIntent\n // const result: BridgeDestinationObservation = new PayloadBuilder<BridgeDestinationObservation>({ schema: BridgeDestinationObservationSchema })\n // .fields({ ...rest, destConfirmation }).build()\n // return result\n },\n { connection, concurrency: 1 },\n )\n}\n\nexport const ethTransactionSubmission: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\nconst name = 'Bridge XL1 to Ethereum'\nconst queueName = 'xl1-to-eth-bridge'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job) => {\n await job.log(`[${job.name}] start`)\n // Parent job has no work other than waiting on children\n await job.log(`[${job.name}] done`)\n // const values = await job.getChildrenValues()\n return { ok: true }\n },\n { connection },\n )\n}\n\nexport const xl1ToEthBridgeParent: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import {\n assertEx, isDefined, isNull,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { UnrecoverableError, Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'gateway' | 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n}\n\nconst name = 'Monitor Submitted XL1 Transaction'\nconst queueName = 'xl1-tx-monitor'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n gateway, tx, xl1TxStateMap: stateMap,\n } = job.data\n // Get the hash of the transaction\n const hash = await PayloadBuilder.hash(tx[0])\n // Get the state of the transaction\n const viewer = assertEx(gateway.connection.viewer, () => `[${hash}] viewer not defined on gateway`)\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n\n // Check for transaction inclusion on chain\n await job.log(`[${hash}] Checking for XL1 transaction inclusion on chain`)\n const foundTx = await viewer.transactionByHash(hash)\n\n // Transaction found on chain\n if (isDefined(foundTx) && !isNull(foundTx)) {\n await job.log(`[${hash}] Found transaction on chain`)\n // TODO: For now we just store the same hash as TX hash until we have block hash confirmation capability\n state.confirmationHash = hash\n await stateMap.set(hash, state)\n return {}\n }\n\n // Check for transaction expiration\n const currentBlockNumber = await viewer.currentBlockNumber()\n if (tx[0].exp < currentBlockNumber) {\n await job.log(\n `[${hash}] Transaction expired at block ${tx[0].exp}, current block ${currentBlockNumber}`,\n )\n // Throw unrecoverable error to stop retries\n throw new UnrecoverableError(`[${hash}] Transaction expired and will never be included`)\n }\n\n // Transaction not yet found, but still valid — retry later\n await job.log(`[${hash}] Transaction not yet included, retrying later`)\n throw new Error(`[${hash}] Transaction not yet included`)\n },\n { connection },\n )\n}\n\nexport const xl1TransactionMonitor: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {}\n\nconst name = 'Prepare XL1 Transaction'\nconst queueName = 'xl1-tx-prepare'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const { tx, xl1TxStateMap: stateMap } = job.data\n const hash = await PayloadBuilder.hash(tx[0])\n await job.log(`[${hash}] preparing XL1 transaction`)\n const preparedTx = tx\n await job.log(`[${hash}] storing XL1 preparedTx`)\n await stateMap.set(hash, { preparedTx })\n await job.log(`[${hash}] stored XL1 preparedTx`)\n await job.log(`[${hash}] prepared XL1 transaction`)\n return {}\n },\n { connection },\n )\n}\n\nexport const xl1TransactionPreparation: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { Job } from 'bullmq'\nimport { Worker } from 'bullmq'\nimport type { Redis } from 'ioredis'\n\nimport type { IBridgeServiceCollection, Xl1TxState } from '../../services/index.ts'\nimport type { WorkerDescription } from './WorkerDescription.ts'\n\ntype JobData = Pick<IBridgeServiceCollection, 'gateway' | 'xl1TxStateMap'> & { tx: SignedHydratedTransaction }\n\ninterface ReturnType {\n submissionHash: Required<Xl1TxState>['submissionHash']\n}\n\nconst name = 'Submit XL1 Transaction'\nconst queueName = 'xl1-tx-submit'\nconst createWorker = (connection: Redis) => {\n new Worker(\n queueName,\n async (job: Job<JobData, ReturnType>) => {\n const {\n gateway, tx, xl1TxStateMap: stateMap,\n } = job.data\n // Get the hash of the transaction\n const hash = await PayloadBuilder.hash(tx[0])\n // Get the state of the transaction\n const state = assertEx(await stateMap.get(hash), () => `[${hash}] state not found`)\n const preparedTx = assertEx(state?.preparedTx, () => `[${hash}] preparedTx not found`)\n\n // Idempotency check against resubmission\n const { submissionHash: existingSubmissionHash } = state\n if (isDefined(existingSubmissionHash)) {\n await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`)\n return { submissionHash: existingSubmissionHash }\n }\n\n // Submit the transaction to the XL1 network\n await job.log(`[${hash}] Submitting XL1 tx`)\n const [submissionHash] = await gateway.addTransactionToChain(preparedTx)\n // Ensure the submission hash matches the expected hash\n assertEx(submissionHash === hash, () => `[${hash}] Submitted transaction hash ${submissionHash} does not match expected hash`)\n await job.log(`[${hash}] Submitted XL1 tx`)\n\n // Store the submission hash in the state\n await job.log(`[${hash}] Storing XL1 submissionHash`)\n state.submissionHash = submissionHash\n await stateMap.set(hash, state)\n await job.log(`[${hash}] Stored XL1 submissionHash`)\n\n return { submissionHash }\n },\n { connection },\n )\n}\n\nexport const xl1TransactionSubmission: WorkerDescription = {\n createWorker, name, queueName,\n}\n","import type { SignedHydratedTransaction } from '@xyo-network/xl1-sdk'\nimport type { FlowProducer } from 'bullmq'\n\nimport {\n ethTransactionMonitor, ethTransactionPreparation, ethTransactionSubmission, xl1ToEthBridgeParent, xl1TransactionMonitor, xl1TransactionPreparation,\n xl1TransactionSubmission,\n} from '../workers/index.ts'\n\nexport const createXl1ToEthBridgeJob = async (flowProducer: FlowProducer, tx: SignedHydratedTransaction) => {\n const flow = await flowProducer.add({\n name: xl1ToEthBridgeParent.name,\n queueName: xl1ToEthBridgeParent.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionPreparation.name,\n queueName: xl1TransactionPreparation.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionSubmission.name,\n queueName: xl1TransactionSubmission.queueName,\n data: { tx },\n children: [\n {\n name: xl1TransactionMonitor.name,\n queueName: xl1TransactionMonitor.queueName,\n data: { tx },\n opts: { attempts: 60, backoff: { type: 'fixed', delay: 5000 } },\n children: [\n {\n name: ethTransactionPreparation.name,\n queueName: ethTransactionPreparation.queueName,\n data: { tx },\n children: [\n {\n name: ethTransactionSubmission.name,\n queueName: ethTransactionSubmission.queueName,\n data: { tx },\n children: [\n {\n name: ethTransactionMonitor.name,\n queueName: ethTransactionMonitor.queueName,\n data: { tx },\n opts: { attempts: 60, backoff: { type: 'fixed', delay: 5000 } },\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n })\n return flow\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { getConnection, getFlowProducer } from '../queue/index.ts'\n\nexport const addFlowProducer = (app: Express, config: Config): Express => {\n const connection = getConnection(config)\n const flowProducer = getFlowProducer(connection)\n app.flowProducer = flowProducer\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { BridgeSettingsZod, type Config } from '@xyo-network/xl1-sdk'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\n\nconst response = BridgeSettingsZod\n\nconst validateRequest = requestHandlerValidator({ response })\n\nexport const makeBridgeConfigRoute = (config: Config): RouteDefinition => {\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/config',\n handlers: validateRequest(async (_, res) => {\n const {\n escrowAddress,\n feeFixed,\n feeRateBasisPoints,\n feesAddress,\n maxBridgeAmount,\n minBridgeAmount,\n remoteChainId,\n remoteTokenAddress,\n xl1ChainId,\n xl1TokenAddress,\n } = await getBridgeSettings(config)\n const sanitizedConfig = {\n escrowAddress,\n feeFixed,\n feeRateBasisPoints,\n feesAddress,\n maxBridgeAmount,\n minBridgeAmount,\n remoteChainId,\n remoteTokenAddress,\n xl1ChainId,\n xl1TokenAddress,\n }\n res.json(sanitizedConfig)\n }),\n }\n}\n","import { asHex } from '@xylabs/sdk-js'\nimport type { ChainId } from '@xyo-network/xl1-sdk'\n\nexport const asChainId = (value: unknown): ChainId | undefined => {\n const chainId = asHex(value)\n return chainId\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress } from '@xylabs/sdk-js'\n\nexport const asToken = (value: unknown): Address | undefined => {\n const token = asAddress(value)\n return token\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const tryGetBridgeEscrowAddress = (config: Config): Address | undefined => {\n const address = asAddress(config.bridge.escrowAddress)\n return address\n}\n\nexport const getBridgeEscrowAddress = (config: Config): Address => {\n const address = assertEx(tryGetBridgeEscrowAddress(config), () => `Invalid bridge escrow address: ${config.bridge.escrowAddress}`)\n return address\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const tryGetBridgeFeesAddress = (config: Config): Address | undefined => {\n const address = asAddress(config.bridge.feesAddress)\n return address\n}\n\nexport const getBridgeFeesAddress = (config: Config): Address => {\n const address = assertEx(tryGetBridgeFeesAddress(config), () => `Invalid bridge fees address: ${config.bridge.feesAddress}`)\n return address\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nimport type { FeeStructure } from '../util/index.ts'\n\nexport const getFeeStructure = (config: Config): FeeStructure => {\n const { feeFixed, feeRateBasisPoints } = config.bridge\n return { feeFixed, feeRateBasisPoints }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const getMaxBridgeAmount = (config: Config): Hex => {\n const { maxBridgeAmount } = config.bridge\n return maxBridgeAmount\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const getMinBridgeAmount = (config: Config): Hex => {\n const { minBridgeAmount } = config.bridge\n return minBridgeAmount\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { asChainId } from './asChainId.ts'\n\nexport const getRemoteChainId = (config: Config): ChainId => {\n const remoteChainId = assertEx(asChainId(config.bridge.remoteChainId), () => 'Invalid remote chain ID in config')\n return remoteChainId\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { asToken } from './asToken.ts'\n\nexport const getRemoteTokenAddress = (config: Config): Address => {\n const token = asToken(config.bridge.remoteTokenAddress)\n return assertEx(token, () => 'Remote token address is not defined in bridge configuration')\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const getBridgeWalletAccount = async (config: Config): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.bridge.mnemonic\n if (isUndefined(walletPhrase)) {\n console.log('[Bridge] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n console.log(`[Bridge] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n}\n\nexport const getAddressOrBridgeWalletAccountAddress = async (getConfigAccount: (config: Config) => Address | undefined, config: Config): Promise<Address> => {\n const address = getConfigAccount(config)\n if (isDefined(address)) return address\n const walletAccount = await getBridgeWalletAccount(config)\n return walletAccount.address\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { tryGetBridgeEscrowAddress } from './getBridgeEscrowAddress.ts'\nimport { tryGetBridgeFeesAddress } from './getBridgeFeesAddress.ts'\nimport { getBridgeWalletAccount } from './getBridgeWalletAccount.ts'\n\nexport interface TransferAddresses {\n escrowAddress: Address\n feesAddress: Address\n}\n\nexport const getTransferAddresses = async (config: Config): Promise<TransferAddresses> => {\n const escrowAddress = tryGetBridgeEscrowAddress(config) ?? (await getBridgeWalletAccount(config)).address\n const feesAddress = tryGetBridgeFeesAddress(config) ?? (await getBridgeWalletAccount(config)).address\n return { escrowAddress, feesAddress }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { asChainId } from './asChainId.ts'\n\nexport const getXl1ChainId = (config: Config): ChainId => {\n const xl1ChainId = config.bridge.xl1ChainId\n if (isDefined(xl1ChainId)) {\n return assertEx(asChainId(xl1ChainId), () => 'Invalid xl1ChainId in bridge config')\n }\n return assertEx(asChainId(config.chain.id), () => 'Invalid chain.id in config')\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport { asToken } from './asToken.ts'\nimport { getXl1ChainId } from './getXl1ChainId.ts'\n\nexport const getXl1TokenAddress = (config: Config): Hex => {\n const token = asToken(config.bridge.xl1TokenAddress)\n if (isDefined(token)) return token\n return getXl1ChainId(config)\n}\n","import type { BridgeSettings, Config } from '@xyo-network/xl1-sdk'\n\nimport { getFeeStructure } from './getFeeStructure.ts'\nimport { getMaxBridgeAmount } from './getMaxBridgeAmount.ts'\nimport { getMinBridgeAmount } from './getMinBridgeAmount.ts'\nimport { getRemoteChainId } from './getRemoteChainId.ts'\nimport { getRemoteTokenAddress } from './getRemoteTokenAddress.ts'\nimport { getTransferAddresses } from './getTransferAddresses.ts'\nimport { getXl1ChainId } from './getXl1ChainId.ts'\nimport { getXl1TokenAddress } from './getXl1TokenAddress.ts'\n\nexport const getBridgeSettings = async (config: Config): Promise<BridgeSettings> => {\n const { feeFixed, feeRateBasisPoints } = getFeeStructure(config)\n const { feesAddress, escrowAddress } = await getTransferAddresses(config)\n const maxBridgeAmount = getMaxBridgeAmount(config)\n const minBridgeAmount = getMinBridgeAmount(config)\n const remoteChainId = getRemoteChainId(config)\n const remoteTokenAddress = getRemoteTokenAddress(config)\n const xl1TokenAddress = getXl1TokenAddress(config)\n const xl1ChainId = getXl1ChainId(config)\n return {\n feeFixed, feeRateBasisPoints, feesAddress, escrowAddress, maxBridgeAmount, minBridgeAmount, remoteChainId, remoteTokenAddress, xl1TokenAddress, xl1ChainId,\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type {\n Config, RpcSchemaMap, TransportFactory,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n buildJsonRpcProviderLocator,\n HttpRpcTransport,\n SimpleXyoGatewayRunner, SimpleXyoSigner,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nlet gatewayInstance: XyoGatewayRunner | undefined\n\nexport const getGateway = async (config: Config): Promise<XyoGatewayRunner> => {\n if (isDefined(gatewayInstance)) return gatewayInstance\n const { mnemonic, chainRpcApiUrl: endpoint } = config.bridge\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies))\n return await locator.getInstance<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { toAddress, toHex } from '@xylabs/sdk-js'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { BridgeDestinationObservation, Config } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationFieldsZod,\n BridgeDestinationObservationSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeFromRemoteStatusRoute = (config: Config): RouteDefinition => {\n const params = z.object({\n chainId: getRemoteChainIdZod(config),\n nonce: z.string().nonempty(),\n })\n const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(\n BridgeDestinationObservationFieldsZod.shape,\n )\n const validateRequest = requestHandlerValidator({ params, response })\n\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeFromRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const {\n remoteChainId, remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const rand = await Promise.resolve(Math.random())\n\n // TODO: Replace with actual lookup logic (e.g. database or chain query)\n const found = rand > 0.5 // simulate lookup\n if (!found) return res.sendStatus(404)\n\n const confirmed = rand > 0.8 // simulate pending/confirmed\n if (!confirmed) return res.sendStatus(204)\n\n const observation: BridgeDestinationObservation = {\n schema: BridgeDestinationObservationSchema,\n dest: xl1ChainId,\n destAddress: toAddress('0xabc'),\n destAmount: toHex('0x100'),\n destToken: xl1TokenAddress,\n src: remoteChainId,\n srcAddress: toAddress('0x123'),\n srcAmount: toHex('0x200'),\n srcToken: remoteTokenAddress,\n destConfirmation: toHex('0x9999'),\n }\n res.json(observation)\n }),\n }\n}\n","import {\n asHex, HexZod, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { ChainId, Config } from '@xyo-network/xl1-sdk'\n\nimport { getRemoteChainId } from '../../../../../config/index.ts'\n\nexport const getRemoteChainIdZod = (config: Config) => {\n const remoteChainId: ChainId = getRemoteChainId(config)\n return HexZod.superRefine((val, ctx) => {\n const chainId = asHex(val)\n if (isUndefined(chainId)) {\n ctx.addIssue('Not a valid chain id')\n return\n }\n if (chainId !== remoteChainId) {\n ctx.addIssue(`Only ${remoteChainId} is supported`)\n }\n })\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeSourceObservation, BridgeSourceObservationFields, Config,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod, TransferZod,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { createXl1ToEthBridgeJob } from '../../../../../queue/index.ts'\nimport { validateBridgeEstimateExact, validateBridgeTransaction } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteRoute = (config: Config): RouteDefinition => {\n const params = z.object({ chainId: getRemoteChainIdZod(config) })\n const body = z.tuple([\n SignedTransactionBoundWitnessZod,\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n TransferZod,\n ])\n const response = PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape)\n\n const validateRequest = requestHandlerValidator({\n params, body, response,\n })\n return {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote',\n handlers: validateRequest(async (req, res) => {\n const [signedTxBw, bridgeIntent, transfer] = req.body\n const { flowProducer } = req.app\n\n // Validate request\n const transactionValid = await validateBridgeTransaction(signedTxBw, bridgeIntent, transfer, config)\n if (!transactionValid) {\n res.status(400).send()\n return\n }\n\n // Validate estimate\n const estimateValid = await validateBridgeEstimateExact(bridgeIntent, transfer, config)\n if (!estimateValid) {\n res.status(400).send()\n return\n }\n\n // Submit to job queue\n const singedHydratedTransaction: SignedHydratedTransaction = [signedTxBw, [transfer, bridgeIntent]]\n await createXl1ToEthBridgeJob(flowProducer, singedHydratedTransaction)\n\n // Create BridgeObservation\n const srcConfirmation = await PayloadBuilder.hash(signedTxBw)\n const bridgeCommonFieldsZod = z.object({}).extend(BridgeSourceObservationFieldsZod.shape)\n const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent)\n const bridgeObservationFields: BridgeSourceObservationFields = { ...bridgeCommonFields, srcConfirmation }\n const bridgeObservation: BridgeSourceObservation = new PayloadBuilder<BridgeSourceObservation>(\n { schema: BridgeSourceObservationSchema },\n ).fields(bridgeObservationFields).build()\n\n // Return bridge observation to caller\n res.json(bridgeObservation)\n }),\n }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, toHex } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport type FeeStructure = Pick<Config['bridge'], 'feeFixed' | 'feeRateBasisPoints'>\n\nexport interface FeeCalculationResult {\n destAmount: Hex\n feeFixed: Hex\n feeVariable: Hex\n}\n\nexport const calculateBridgeFees = (srcAmount: Hex, feeStructure: FeeStructure): FeeCalculationResult => {\n const { feeFixed, feeRateBasisPoints } = feeStructure\n\n // Format source input\n const srcAmountBigInt = hexToBigInt(srcAmount)\n\n // Calculate fixed fee\n const feeFixedBigInt = hexToBigInt(feeFixed)\n\n // Integer-safe basis point calculation (floor division)\n const feeVariableBigInt\n = (srcAmountBigInt * BigInt(feeRateBasisPoints)) / 10_000n\n const feeVariable = toHex(feeVariableBigInt)\n\n // Calculate total fee\n const feeTotalBigInt = feeFixedBigInt + feeVariableBigInt\n\n // Calculate destination amount\n const destAmountBigInt = srcAmountBigInt > feeTotalBigInt ? srcAmountBigInt - feeTotalBigInt : 0n\n const destAmount = toHex(destAmountBigInt)\n\n return {\n destAmount,\n feeFixed,\n feeVariable,\n }\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt, toAddress } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, BridgeIntentFields, Config,\n Transfer,\n} from '@xyo-network/xl1-sdk'\nimport { BridgeIntentSchema, createTransferPayload } from '@xyo-network/xl1-sdk'\nimport { v4 } from 'uuid'\n\nimport { getBridgeSettings } from '../config/index.ts'\nimport { calculateBridgeFees } from './calculateBridgeFees.ts'\n\nexport const generateBridgeEstimate = async (\n srcAddress: Hex,\n srcAmount: Hex,\n destAddress: Hex,\n config: Config,\n nonceOverride?: string,\n): Promise<[BridgeIntent, Transfer]> => {\n const {\n escrowAddress, feeFixed, feeRateBasisPoints, feesAddress, remoteChainId, remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const sender = toAddress(srcAddress)\n\n // Calculate fees and destination amount\n const fees = calculateBridgeFees(srcAmount, { feeFixed, feeRateBasisPoints })\n const {\n destAmount, feeFixed: feeFixedAmount, feeVariable,\n } = fees\n\n // Generate a unique nonce for the bridge intent\n const nonce = nonceOverride ?? v4()\n\n // Build the bridge intent\n const bridgeIntentFields: BridgeIntentFields = {\n // Source\n src: xl1ChainId,\n srcAddress: sender,\n srcAmount,\n srcToken: xl1TokenAddress,\n\n // Destination\n dest: remoteChainId,\n destAddress,\n destAmount,\n destToken: remoteTokenAddress,\n nonce,\n }\n const bridgeIntent: BridgeIntent = new PayloadBuilder<BridgeIntent>({ schema: BridgeIntentSchema }).fields(bridgeIntentFields).build()\n\n // Build the transfer\n const context = {\n destAmount, feeFixed: feeFixedAmount, feeVariable,\n }\n const transfer: Transfer = createTransferPayload(sender, {\n [escrowAddress]: hexToBigInt(destAmount),\n [feesAddress]: hexToBigInt(feeFixedAmount) + hexToBigInt(feeVariable),\n }, context)\n\n return [bridgeIntent, transfer]\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, Config, Transfer,\n} from '@xyo-network/xl1-sdk'\n\nimport { generateBridgeEstimate } from './generateBridgeEstimate.ts'\n\n/**\n * Validates a bridge estimate by checking the intent and transfer against the provided configuration. This method\n * only returns true if the bridge estimate matches exactly.\n * @param intent The BridgeIntent\n * @param transfer The Transfer\n * @param config The Config\n * @returns True if the bridge estimate satisfies bridging conditions, false otherwise.\n */\nexport const validateBridgeEstimateExact = async (\n intent: BridgeIntent,\n transfer: Transfer,\n config: Config,\n): Promise<boolean> => {\n const {\n srcAddress, srcAmount, destAddress,\n } = intent\n const [calculatedIntent, calculatedTransfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config)\n if (isUndefined(calculatedIntent) || isUndefined(calculatedTransfer)) return false\n const { nonce: expectedIntentNonce, ...expectedIntentStatic } = calculatedIntent\n const { nonce: actualIntentNonce, ...actualIntentStatic } = intent\n if (await PayloadBuilder.dataHash(expectedIntentStatic) !== await PayloadBuilder.dataHash(actualIntentStatic)) return false\n const { epoch: expectedTransferEpoch, ...expectedTransferStatic } = calculatedTransfer\n const { epoch: actualTransferEpoch, ...actualTransferStatic } = transfer\n if (await PayloadBuilder.dataHash(expectedTransferStatic) !== await PayloadBuilder.dataHash(actualTransferStatic)) return false\n\n return true\n}\n","import { asAddress, isDefined } from '@xylabs/sdk-js'\nimport {\n addressesContains, BoundWitnessValidator, payloadHashesContainsAll,\n} from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, Config,\n TransactionBoundWitness, Transfer,\n} from '@xyo-network/xl1-sdk'\n\nimport { getXl1ChainId } from '../config/index.ts'\n\n/**\n * Validates a bridge estimate by checking the intent and transfer against the provided configuration. This method\n * exists to allow for \"at least\" validation of a bridge estimates in case we want to allow for some flexibility in\n * the bridge estimate.\n * @ param signedTransaction The signed transaction bound witness\n * @param signedTxBw The signed transaction bound witness\n * @param intent The BridgeIntent\n * @param transfer The Transfer\n * @param config The Config\n * @returns True if the bridge estimate satisfies bridging conditions, false otherwise.\n */\nexport const validateBridgeTransaction = async (\n signedTxBw: TransactionBoundWitness,\n intent: BridgeIntent,\n transfer: Transfer,\n config: Config,\n): Promise<boolean> => {\n const { srcAddress } = intent\n\n const chainId = getXl1ChainId(config)\n if (signedTxBw.chain !== chainId) return false\n\n const errors = await new BoundWitnessValidator(signedTxBw).validate()\n if (isDefined(errors) && errors.length > 0) return false\n\n const sender = asAddress(srcAddress, true)\n if (!addressesContains(signedTxBw, sender)) return false\n\n const hashes = await PayloadBuilder.hashes([intent, transfer])\n if (!payloadHashesContainsAll(signedTxBw, hashes)) return false\n\n return true\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, toAddress } from '@xylabs/sdk-js'\nimport { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport { buildUnsignedTransaction, type Config } from '@xyo-network/xl1-sdk'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, toXL1BlockNumber, TransactionBoundWitnessZod, TransferSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getGateway, getXl1ChainId } from '../../../../../config/index.ts'\nimport { generateBridgeEstimate } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteEstimateRoute = (config: Config): RouteDefinition => {\n const params = z.object({ chainId: getRemoteChainIdZod(config) })\n const body = BridgeIntentFieldsZod.pick({\n destAddress: true,\n srcAddress: true,\n srcAmount: true,\n })\n const response = z.tuple([\n TransactionBoundWitnessZod,\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodLooseOfSchema(TransferSchema),\n ])\n const validateRequest = requestHandlerValidator({\n params, body, response,\n })\n\n return {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote/estimate',\n handlers: validateRequest(async (req, res) => {\n const xl1ChainId = getXl1ChainId(config)\n const {\n srcAddress, srcAmount, destAddress,\n } = req.body\n const [bridgeIntent, transfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config)\n const sender = toAddress(srcAddress)\n\n // Use viewer to get current block\n const gateway = await getGateway(config)\n const viewer = assertEx(gateway.connection.viewer, () => new Error('Viewer not available on gateway connection'))\n const currentBlockNumber = await viewer.currentBlockNumber()\n // Calculate nbf/exp\n const nbf = toXL1BlockNumber(currentBlockNumber, true)\n const exp = toXL1BlockNumber(currentBlockNumber + 1000, true)\n // Build unsigned transaction representing the transfer that will be signed by srcAddress\n const [txBw] = await buildUnsignedTransaction(xl1ChainId, [transfer], [bridgeIntent], nbf, exp, sender)\n\n // Return the TX to the caller for signing\n res.json([txBw, bridgeIntent, transfer])\n }),\n }\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport {\n asAddress, asHex, toHex,\n} from '@xylabs/sdk-js'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeDestinationObservation, BridgeSourceObservation, Config,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationFieldsZod, BridgeDestinationObservationSchema, BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod,\n BridgeSourceObservationSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { getBridgeSettings } from '../../../../../config/index.ts'\nimport { generateBridgeEstimate } from '../../../../../util/index.ts'\nimport { getRemoteChainIdZod } from '../pathParams/index.ts'\n\nexport const makeBridgeToRemoteStatusRoute = (config: Config): RouteDefinition => {\n const params = z.object({\n chainId: getRemoteChainIdZod(config),\n nonce: z.string().nonempty(),\n })\n const query = z.object({ mockStatus: z.coerce.number().default(0) })\n const response = z.union([\n z.tuple([]),\n z.tuple([PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape)]),\n z.tuple([\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape),\n ]),\n z.tuple([\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape),\n PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape),\n ]),\n ])\n\n const validateRequest = requestHandlerValidator({\n params, query, response,\n })\n\n return {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeToRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const { chainId } = req.params\n const { mockStatus = 0 } = req.query\n const result: z.infer<typeof response> = [] as unknown as z.infer<typeof response>\n\n const {\n remoteTokenAddress, xl1ChainId, xl1TokenAddress,\n } = await getBridgeSettings(config)\n\n const src = xl1ChainId\n const srcAddress = asAddress('2222222222222222222222222222222222222222', true)\n const srcAmount = asHex('0x200', true)\n const srcToken = xl1TokenAddress\n\n const dest = chainId\n const destAddress = asAddress('3333333333333333333333333333333333333333', true)\n const destAmount = asHex('0x100', true)\n const destToken = remoteTokenAddress\n\n if (mockStatus === 0) return res.sendStatus(404)\n if (mockStatus > 0) {\n const [observation] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config, req.params.nonce)\n result[0] = observation\n }\n if (mockStatus > 1) {\n const observation: BridgeSourceObservation = {\n schema: BridgeSourceObservationSchema,\n dest,\n destAddress,\n destAmount,\n destToken,\n src,\n srcAddress,\n srcAmount,\n srcToken,\n srcConfirmation: toHex('0x8888'),\n }\n result[1] = observation\n }\n if (mockStatus > 2) {\n const observation: BridgeDestinationObservation = {\n schema: BridgeDestinationObservationSchema,\n dest,\n destAddress,\n destAmount,\n destToken,\n src,\n srcAddress,\n srcAmount,\n srcToken,\n destConfirmation: toHex('0x9999'),\n }\n result[2] = observation\n }\n\n res.json(result)\n }),\n }\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nimport {\n makeBridgeConfigRoute, makeBridgeFromRemoteStatusRoute, makeBridgeToRemoteEstimateRoute, makeBridgeToRemoteRoute, makeBridgeToRemoteStatusRoute,\n} from './routes/index.ts'\n\nexport const getRouteDefinitions = (config: Config): RouteDefinition[] => {\n return [\n makeBridgeConfigRoute(config),\n makeBridgeToRemoteEstimateRoute(config),\n makeBridgeToRemoteRoute(config),\n makeBridgeToRemoteStatusRoute(config),\n makeBridgeFromRemoteStatusRoute(config),\n ]\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addBridgeRoutes = (app: Express, config: Config) => {\n const routeDefinitions = getRouteDefinitions(config)\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\n\nimport { addBridgeRoutes } from './bridge/index.ts'\n\nexport const addRoutes = (app: Express, config: Config) => {\n addBridgeRoutes(app, config)\n}\n","import {\n assertEx, isDefined, isString, type Logger,\n} from '@xylabs/sdk-js'\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-sdk'\n\nimport { getNode, getServices } 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.bridge\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 app.services = await getServices({ config, logger })\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(20_000)\n return server\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport { initEvmProvider } from '@xyo-network/chain-services'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BridgeDestinationObservation, Config, IterableMap, ProviderFactoryLocator, SignedHydratedTransaction,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n hasMongoConfig, mapToMapType,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport type { Document } from 'mongodb'\n\nimport type { EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams, XL1TransactionCompletionMonitorSentinelParams } from '../modules/index.ts'\nimport {\n EVMLiquidityBridgeTransactionCompletionMonitorSentinel, EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema,\n XL1TransactionCompletionMonitorSentinel, XL1TransactionCompletionMonitorSentinelConfigSchema,\n} from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n locator: ProviderFactoryLocator\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 getModuleLocator = async (context: GetLocatorContext) => {\n const {\n config, locator, logger,\n } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9468 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-bridge',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const moduleLocator = 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 moduleLocator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n moduleLocator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n moduleLocator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n moduleLocator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n\n const gateway = await locator.getInstance<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n const viewer = assertEx(gateway.connection.viewer, () => 'Gateway viewer is not defined')\n const pendingXl1ToEthXl1BridgeIntentTransactions = await getIterableMap<Hash, SignedHydratedTransaction>(\n config,\n 'liquidity_bridge_xl1_to_eth_xl1_pending',\n )\n const completedXl1ToEthXl1BridgeIntentTransactions = await getIterableMap<Hash, SignedHydratedTransaction>(\n config,\n 'liquidity_bridge_xl1_to_eth_xl1_completed',\n )\n\n const xl1TransactionCompletionMonitorSentinelParams: XL1TransactionCompletionMonitorSentinelParams = {\n completedTransactions: completedXl1ToEthXl1BridgeIntentTransactions,\n config: { schema: XL1TransactionCompletionMonitorSentinelConfigSchema },\n meterProvider,\n pendingTransactions: pendingXl1ToEthXl1BridgeIntentTransactions,\n statusReporter,\n traceProvider,\n viewer,\n }\n moduleLocator.register(XL1TransactionCompletionMonitorSentinel.factory(xl1TransactionCompletionMonitorSentinelParams))\n\n const completedEthXl1BridgeTransactions = await getIterableMap<Hash, BridgeDestinationObservation>(\n config,\n 'liquidity_bridge_eth_xl1_bridge_completed',\n )\n const provider = await initEvmProvider({ config })\n const bridgeAddress = config.bridge.remoteBridgeContractAddress\n const evmLiquidityBridgeTransactionCompletionMonitorSentinelParams: EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = {\n bridgeAddress,\n completedTransactions: completedEthXl1BridgeTransactions,\n config: { schema: EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema },\n meterProvider,\n pendingTransactions: completedXl1ToEthXl1BridgeIntentTransactions,\n provider,\n statusReporter,\n traceProvider,\n }\n moduleLocator.register(EVMLiquidityBridgeTransactionCompletionMonitorSentinel.factory(evmLiquidityBridgeTransactionCompletionMonitorSentinelParams))\n\n return moduleLocator\n}\n\n/**\n * Gets an iterable map based on the storage instructions in the config\n * @param config The config containing storage instructions\n * @param collection The collection to use if using MongoDB for persistence\n * @returns The iterable map\n */\nconst getIterableMap = async <K extends {} = string, V extends Document = Document>\n(config: Config, collection: string): Promise<IterableMap<K, V>> => {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\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 sdkBalanceSummaryMap = new BaseMongoSdk<V>({ ...payloadSdkConfig, collection })\n const result = await MongoMap.create<MongoMap<K, V>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n return result\n } else {\n return mapToMapType(new Map<K, V>())\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport {\n asAddress, asHex, assertEx, delay, hexFromBigInt, hexToBigInt, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema, 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 LiquidityPoolBridge, LiquidityPoolBridge__factory } from '@xyo-network/typechain'\nimport type {\n BridgeDestinationObservation, BridgeIntent, IterableMap, MapType,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent,\n tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\nimport { getAddress } from 'ethers/address'\nimport type { Provider } from 'ethers/providers'\nimport { Wallet } from 'ethers/wallet'\n\nexport const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n = asSchema('network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config', true)\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = typeof EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n\n/**\n * The configuration for the sentinel\n */\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig = SentinelConfig<{\n /**\n * The interval in milliseconds between checking for jobs to fulfill\n */\n jobCheckInterval: number\n\n /**\n * The schema for the sentinel config\n */\n schema: EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n}>\n\ninterface EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields {\n /**\n * The address to watch for incoming or outgoing ERC-20 token transfers.\n */\n bridgeAddress: string\n\n /**\n * The map of completed transactions to monitor for completion\n */\n completedTransactions: MapType<Hash, BridgeDestinationObservation>\n\n /**\n * The map of pending transactions to monitor for completion\n */\n pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>\n\n /**\n * An ethers.js Provider connected to the Ethereum network to monitor for ERC-20 transfers.\n */\n provider: Provider\n}\n\nexport type EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams<TConfig extends\nAnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig>,\n> = SentinelParams<TConfig> & EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields\n\nconst defaultJobCheckIntervalMs = 15_000\n\nexport class EVMLiquidityBridgeTransactionCompletionMonitorSentinel<\n TParams extends EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema]\n static override readonly defaultConfigSchema = EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema\n protected _attemptsCounter: Counter<Attributes> | undefined\n protected _bridge: LiquidityPoolBridge | undefined\n protected _bridgeChainId: Hex | undefined\n protected _bridgeRemoteChainId: Hex | undefined\n protected _bridgeTokenAddress: Address | undefined\n protected _checkCounter: Counter<Attributes> | undefined\n protected _errorCounter: Counter<Attributes> | undefined\n protected _reportMutex = new Mutex()\n protected _successCounter: Counter<Attributes> | undefined\n protected _wallet: Wallet | undefined\n\n protected get bridge(): LiquidityPoolBridge {\n return assertEx(this._bridge, () => new Error('Bridge contract not initialized'))\n }\n\n protected get completedTransactions(): MapType<Hash, BridgeDestinationObservation> {\n return assertEx(this.params.completedTransactions, () => 'Completed transactions map is not defined')\n }\n\n protected get jobCheckInterval(): number {\n return isDefined(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs\n }\n\n protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.pendingTransactions, () => 'Pending transactions map is not defined')\n }\n\n protected get wallet(): Wallet {\n return assertEx(this._wallet, () => 'wallet is required')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking bridge attempts, successes, and errors.\n this._attemptsCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_attempts_total',\n { description: 'Number of attempts' },\n )\n this._checkCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_check_total',\n { description: 'Number of checks' },\n )\n this._successCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_success_total',\n { description: 'Number of successes' },\n )\n this._errorCounter = this.meter?.createCounter(\n 'evm_liquidity_bridge_transaction_completion_monitor_sentinel_errors_total',\n { description: 'Number of errors' },\n )\n const { provider, bridgeAddress } = this.params\n\n // Connect to the bridge contract\n // Create a wallet bound to the provider (signer + provider)\n const key = assertEx(this.account?.private?.hex, () => new Error('Account private key is required'))\n this._wallet = new Wallet(key, provider)\n this._bridge = LiquidityPoolBridge__factory.connect(getAddress(bridgeAddress), this._wallet)\n\n // Parse bridge network chain ID\n const network = await provider.getNetwork()\n this._bridgeChainId = assertEx(hexFromBigInt(network.chainId), () => new Error('Failed to parse bridgeChainId'))\n\n // Parse bridge token address\n const tokenAddress = await this.bridge.token()\n this._bridgeTokenAddress = asAddress(tokenAddress, true)\n\n // Parse bridge remote chain ID\n const bridgeRemoteChain = await this.bridge.remoteChain()\n this._bridgeRemoteChainId = asHex(bridgeRemoteChain)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (isDefined(payloads) && payloads.length > 0) {\n const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads)\n if (isDefined(signedHydratedTransaction)) {\n // Insert into pending transactions for monitoring\n const txHash = await PayloadBuilder.hash(signedHydratedTransaction[0])\n this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`)\n await this.pendingTransactions.set(txHash, signedHydratedTransaction)\n return flattenHydratedTransaction(signedHydratedTransaction)\n }\n return []\n } else {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`EVMLiquidityBridgeTransactionCompletionMonitorSentinel [${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.processAllTransactions()\n }\n return response\n })\n }\n }\n\n private async processAllTransactions(): Promise<Payload[]> {\n const results: SignedHydratedTransaction[] = []\n for await (const [hash, signedHydratedTransaction] of this.pendingTransactions) {\n const result = await this.processTransaction([hash, signedHydratedTransaction])\n if (isDefined(result)) results.push(result[1])\n await delay(this.jobCheckInterval)\n }\n return flattenHydratedTransactions(results)\n }\n\n private async processTransaction(\n [hash, signedHydratedTransaction]: [Hash, SignedHydratedTransaction],\n ): Promise<[Hash, SignedHydratedTransaction] | undefined> {\n this.logger?.info(`Checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n try {\n let ret: [Hash, SignedHydratedTransaction] | undefined = undefined\n this._checkCounter?.add(1)\n const bridgeIntents = signedHydratedTransaction[1].filter(isBridgeIntent)\n // Only support a single intent per transaction for now\n if (bridgeIntents.length !== 1) {\n await this.pendingTransactions.delete(hash)\n return ret\n }\n const bridgeIntent = bridgeIntents[0]\n this._attemptsCounter?.add(1)\n const bridgeDestinationObservation = await this.relayBridgeIntentSync(bridgeIntent)\n await this.completedTransactions.set(hash, bridgeDestinationObservation)\n await this.pendingTransactions.delete(hash)\n this._successCounter?.add(1)\n return ret\n } catch (error) {\n this._errorCounter?.add(1)\n this.logger?.error(`Error checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}:`, error)\n }\n }\n\n /**\n * Relays a given BridgeIntent.\n * @param bridgeIntent The BridgeIntent to relay\n * @returns Relays the intent in a blocking manner, returning the resulting BridgeDestinationObservation if successful\n */\n private async relayBridgeIntentSync(bridgeIntent: BridgeIntent): Promise<BridgeDestinationObservation> {\n // Ensure source observation exists\n const amount = hexToBigInt(bridgeIntent.destAmount)\n const nonce = await this.wallet.getNonce()\n const srcAddress = getAddress(bridgeIntent.srcAddress)\n const destAddress = getAddress(bridgeIntent.destAddress)\n const tx = await this.bridge.bridgeFromRemote(srcAddress, destAddress, amount, nonce)\n const confirmation = await tx.wait()\n const transactionResponse = await confirmation?.getTransaction()\n const destConfirmation = asHex(transactionResponse?.hash ?? '', true)\n const { schema, ...rest } = bridgeIntent\n const result: BridgeDestinationObservation = new PayloadBuilder<BridgeDestinationObservation>({ schema: BridgeDestinationObservationSchema })\n .fields({ ...rest, destConfirmation }).build()\n return result\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema, 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 IterableMap, MapType, SignedHydratedTransaction,\n XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n flattenHydratedTransaction, flattenHydratedTransactions, tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const XL1TransactionCompletionMonitorSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.transaction.completion.monitor.config', true)\nexport type XL1TransactionCompletionMonitorSentinelConfigSchema = typeof XL1TransactionCompletionMonitorSentinelConfigSchema\n\n/**\n * The configuration for the sentinel\n */\nexport type XL1TransactionCompletionMonitorSentinelConfig = SentinelConfig<{\n /**\n * The interval in milliseconds between checking for jobs to fulfill\n */\n jobCheckInterval: number\n\n /**\n * The schema for the sentinel config\n */\n schema: XL1TransactionCompletionMonitorSentinelConfigSchema\n}>\n\ninterface XL1TransactionCompletionMonitorSentinelParamFields {\n /**\n * The map of completed transactions to monitor for completion\n */\n completedTransactions: MapType<Hash, SignedHydratedTransaction>\n\n /**\n * The map of pending transactions to monitor for completion\n */\n pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>\n\n /**\n * The viewer instance to use for viewing transactions\n */\n viewer: XyoViewer\n}\n\nexport type XL1TransactionCompletionMonitorSentinelParams<\n TConfig extends AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig>,\n> = SentinelParams<TConfig> & XL1TransactionCompletionMonitorSentinelParamFields\n\nconst defaultJobCheckIntervalMs = 15_000\n\nexport class XL1TransactionCompletionMonitorSentinel<\n TParams extends XL1TransactionCompletionMonitorSentinelParams = XL1TransactionCompletionMonitorSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [XL1TransactionCompletionMonitorSentinelConfigSchema]\n static override readonly defaultConfigSchema = XL1TransactionCompletionMonitorSentinelConfigSchema\n private _attemptsCounter: Counter<Attributes> | undefined\n private _checkCounter: Counter<Attributes> | undefined\n private _errorCounter: Counter<Attributes> | undefined\n private _reportMutex = new Mutex()\n private _successCounter: Counter<Attributes> | undefined\n\n protected get completedTransactions(): MapType<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.completedTransactions, () => 'Completed transactions map is not defined')\n }\n\n protected get jobCheckInterval(): number {\n return isDefined(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs\n }\n\n protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction> {\n return assertEx(this.params.pendingTransactions, () => 'Pending transactions map is not defined')\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this.params.viewer, () => 'Viewer is not defined in params')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking bridge attempts, successes, and errors.\n this._attemptsCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_attempts_total', { description: 'Number of attempts' })\n this._checkCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_check_total', { description: 'Number of checks' })\n this._successCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_success_total', { description: 'Number of successes' })\n this._errorCounter = this.meter?.createCounter('xl1_transaction_completion_monitor_sentinel_errors_total', { description: 'Number of errors' })\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (isDefined(payloads) && payloads.length > 0) {\n const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads)\n if (isDefined(signedHydratedTransaction)) {\n // Insert into pending transactions for monitoring\n const txHash = await PayloadBuilder.hash(signedHydratedTransaction[0])\n this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`)\n await this.pendingTransactions.set(txHash, signedHydratedTransaction)\n return flattenHydratedTransaction(signedHydratedTransaction)\n }\n return []\n } else {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`XL1TransactionCompletionMonitorSentinel [${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.processAllTransactions()\n }\n return response\n })\n }\n }\n\n private async processAllTransactions(): Promise<Payload[]> {\n const results: SignedHydratedTransaction[] = []\n for await (const [hash, signedHydratedTransaction] of this.pendingTransactions) {\n const result = await this.processTransaction([hash, signedHydratedTransaction])\n if (isDefined(result)) results.push(result[1])\n await delay(this.jobCheckInterval)\n }\n return flattenHydratedTransactions(results)\n }\n\n private async processTransaction(\n [hash, signedHydratedTransaction]: [Hash, SignedHydratedTransaction],\n ): Promise<[Hash, SignedHydratedTransaction] | undefined> {\n this.logger?.info(`Checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n try {\n let ret: [Hash, SignedHydratedTransaction] | undefined = undefined\n this._checkCounter?.add(1)\n this._attemptsCounter?.add(1)\n // Check if the transaction is already included in the chain\n const tx = await this.viewer.transactionByHash(hash)\n if (isDefined(tx) && !isNull(tx)) {\n await this.completedTransactions.set(hash, signedHydratedTransaction)\n this.logger?.info(`Found transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n this.logger?.info(`Removing completed transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n await this.pendingTransactions.delete(hash)\n ret = [hash, signedHydratedTransaction]\n } else {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n if (signedHydratedTransaction[0].exp < currentBlockNumber) {\n this.logger?.info(`Removing expired transaction ${signedHydratedTransaction[0]} with hash ${hash}`)\n await this.pendingTransactions.delete(hash)\n }\n }\n this._successCounter?.add(1)\n return ret\n } catch (error) {\n this._errorCounter?.add(1)\n this.logger?.error(`Error checking for transaction ${signedHydratedTransaction[0]} with hash ${hash}:`, error)\n }\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n Config, RpcSchemaMap, TransportFactory,\n} from '@xyo-network/xl1-sdk'\nimport { buildJsonRpcProviderLocator, HttpRpcTransport } from '@xyo-network/xl1-sdk'\n\nimport { getModuleLocator } from './getModuleLocator.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 { chainRpcApiUrl: endpoint } = context.config.bridge\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n const moduleLocator = await getModuleLocator({ ...context, locator })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator, 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\": \"XYOEthereumBridge\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\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 unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\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\": \"2\",\n \"name\": \"XL1\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"XL1BridgeIntentTransactionCompletionMonitorSentinelIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"XL1BridgeIntentTransactionCompletionMonitorSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"XL1BridgeIntentTransactionCompletionMonitorSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.transaction.completion.monitor.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\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\": \"3\",\n \"name\": \"Ethereum\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinelIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"EVMLiquidityBridgeTransactionCompletionMonitorSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport XL1Node from './XL1.json' with { type: 'json' }\nimport EthereumNode from './Ethereum.json' with { type: 'json' }\n\n\n/**\n * XL1 Node Manifest\n */\nexport const XL1NodeManifest = XL1Node as unknown as PackageManifestPayload\n\n/**\n * Ethereum Node Manifest\n */\nexport const EthereumNodeManifest = EthereumNode as unknown as PackageManifestPayload\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...XL1NodeManifest.nodes,\n ...EthereumNodeManifest.nodes,\n]\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash, Logger } from '@xylabs/sdk-js'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport { initEvmProvider } from '@xyo-network/chain-services'\nimport { LiquidityPoolBridge__factory } from '@xyo-network/typechain'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, IterableMap } from '@xyo-network/xl1-sdk'\nimport {\n hasMongoConfig,\n mapToMapType,\n} from '@xyo-network/xl1-sdk'\nimport { getAddress, Wallet } from 'ethers'\nimport type { Document } from 'mongodb'\n\nimport { getGateway } from '../config/index.ts'\nimport type {\n EthTxState, IBridgeServiceCollection, Xl1TxState,\n} from '../services/index.ts'\n\nexport interface GetServicesContext {\n config: Config\n logger?: Logger\n}\n\n/**\n * Used for retrieving a service collection\n * @returns A service collection\n */\nexport const getServices = async (context: GetServicesContext): Promise<IBridgeServiceCollection> => {\n const { config } = context\n\n const gateway = await getGateway(config)\n const ethTxStateMap = await getIterableMap<Hash, EthTxState>(config, 'liquidity_bridge_xl1_to_eth_eth_tx_state')\n const xl1TxStateMap = await getIterableMap<Hash, Xl1TxState>(config, 'liquidity_bridge_xl1_to_eth_xl1_tx_state')\n const provider = await initEvmProvider({ config })\n // TODO: Get from config\n const {\n remoteBridgeContractAddress, remoteChainWalletPrivateKey, mnemonic,\n } = config.bridge\n const account = isDefined(mnemonic) ? await HDWallet.fromPhrase(mnemonic) : await HDWallet.random()\n const wallet = new Wallet(remoteChainWalletPrivateKey, provider)\n const bridge = LiquidityPoolBridge__factory.connect(getAddress(remoteBridgeContractAddress), wallet)\n // Assert we are contract owner so we can call ownable methods\n const bridgeOwner = await bridge.owner()\n assertEx(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => 'Wallet is not the owner of the bridge contract')\n return {\n account,\n bridge,\n ethTxStateMap,\n gateway,\n provider,\n wallet,\n xl1TxStateMap,\n }\n}\n\n/**\n * Gets an iterable map based on the storage instructions in the config\n * @param config The config containing storage instructions\n * @param collection The collection to use if using MongoDB for persistence\n * @returns The iterable map\n */\nconst getIterableMap = async <K extends {} = string, V extends Document = Document>\n(config: Config, collection: string): Promise<IterableMap<K, V>> => {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\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 sdkBalanceSummaryMap = new BaseMongoSdk<V>({ ...payloadSdkConfig, collection })\n const result = await MongoMap.create<MongoMap<K, V>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n return result\n } else {\n return mapToMapType(new Map<K, V>())\n }\n}\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","isDefined","Redis","connection","maxRetriesPerRequest","getConnection","config","isDefined","redisHost","host","redisPort","port","bridge","Redis","isDefined","FlowProducer","flowProducer","getFlowProducer","connection","isDefined","FlowProducer","assertEx","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","provider","ethTxStateMap","stateMap","tx","data","hash","PayloadBuilder","state","assertEx","get","submissionHash","receipt","getTransactionReceipt","log","blockNumber","blockHash","confirmationHash","set","ethTransactionMonitor","assertEx","hexToBigInt","PayloadBuilder","isBridgeIntent","Worker","getAddress","name","queueName","createWorker","connection","Worker","job","bridge","ethTxStateMap","stateMap","tx","data","hash","PayloadBuilder","log","bridgeIntent","assertEx","find","isBridgeIntent","amount","hexToBigInt","destAmount","srcAddress","getAddress","destAddress","preparedTx","getFunction","populateTransaction","set","ethTransactionPreparation","assertEx","isDefined","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","ethTxStateMap","stateMap","tx","wallet","data","hash","PayloadBuilder","state","assertEx","get","preparedTx","submissionHash","existingSubmissionHash","isDefined","log","submissionResponse","sendTransaction","set","concurrency","ethTransactionSubmission","Worker","name","queueName","createWorker","connection","Worker","job","log","ok","xl1ToEthBridgeParent","assertEx","isDefined","isNull","PayloadBuilder","UnrecoverableError","Worker","name","queueName","createWorker","connection","Worker","job","gateway","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","viewer","assertEx","state","get","log","foundTx","transactionByHash","isDefined","isNull","confirmationHash","set","currentBlockNumber","exp","UnrecoverableError","Error","xl1TransactionMonitor","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","log","preparedTx","set","xl1TransactionPreparation","assertEx","isDefined","PayloadBuilder","Worker","name","queueName","createWorker","connection","Worker","job","gateway","tx","xl1TxStateMap","stateMap","data","hash","PayloadBuilder","state","assertEx","get","preparedTx","submissionHash","existingSubmissionHash","isDefined","log","addTransactionToChain","set","xl1TransactionSubmission","createXl1ToEthBridgeJob","flowProducer","tx","flow","add","name","xl1ToEthBridgeParent","queueName","data","children","xl1TransactionPreparation","xl1TransactionSubmission","xl1TransactionMonitor","opts","attempts","backoff","type","delay","ethTransactionPreparation","ethTransactionSubmission","ethTransactionMonitor","addFlowProducer","app","config","connection","getConnection","flowProducer","getFlowProducer","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","requestHandlerValidator","BridgeSettingsZod","asHex","asChainId","value","chainId","asHex","asAddress","asToken","value","token","asAddress","asAddress","assertEx","tryGetBridgeEscrowAddress","config","address","asAddress","bridge","escrowAddress","asAddress","assertEx","tryGetBridgeFeesAddress","config","address","asAddress","bridge","feesAddress","getFeeStructure","config","feeFixed","feeRateBasisPoints","bridge","getMaxBridgeAmount","config","maxBridgeAmount","bridge","getMinBridgeAmount","config","minBridgeAmount","bridge","assertEx","getRemoteChainId","config","remoteChainId","assertEx","asChainId","bridge","assertEx","getRemoteTokenAddress","config","token","asToken","bridge","remoteTokenAddress","assertEx","isDefined","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","getBridgeWalletAccount","config","walletPhrase","bridge","mnemonic","isUndefined","console","log","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","getTransferAddresses","config","escrowAddress","tryGetBridgeEscrowAddress","getBridgeWalletAccount","address","feesAddress","tryGetBridgeFeesAddress","assertEx","isDefined","getXl1ChainId","config","xl1ChainId","bridge","isDefined","assertEx","asChainId","chain","id","isDefined","getXl1TokenAddress","config","token","asToken","bridge","xl1TokenAddress","isDefined","getXl1ChainId","getBridgeSettings","config","feeFixed","feeRateBasisPoints","getFeeStructure","feesAddress","escrowAddress","getTransferAddresses","maxBridgeAmount","getMaxBridgeAmount","minBridgeAmount","getMinBridgeAmount","remoteChainId","getRemoteChainId","remoteTokenAddress","getRemoteTokenAddress","xl1TokenAddress","getXl1TokenAddress","xl1ChainId","getXl1ChainId","isDefined","HDWallet","buildJsonRpcProviderLocator","HttpRpcTransport","SimpleXyoGatewayRunner","SimpleXyoSigner","XyoGatewayRunnerMoniker","gatewayInstance","getGateway","config","isDefined","mnemonic","chainRpcApiUrl","endpoint","bridge","walletPromise","HDWallet","fromPhrase","random","account","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","register","SimpleXyoSigner","factory","dependencies","SimpleXyoGatewayRunner","getInstance","XyoGatewayRunnerMoniker","response","BridgeSettingsZod","validateRequest","requestHandlerValidator","makeBridgeConfigRoute","config","method","path","handlers","_","res","escrowAddress","feeFixed","feeRateBasisPoints","feesAddress","maxBridgeAmount","minBridgeAmount","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","sanitizedConfig","json","requestHandlerValidator","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","asHex","HexZod","isUndefined","getRemoteChainIdZod","config","remoteChainId","getRemoteChainId","HexZod","superRefine","val","ctx","chainId","asHex","isUndefined","addIssue","makeBridgeFromRemoteStatusRoute","config","params","z","object","chainId","getRemoteChainIdZod","nonce","string","nonempty","response","PayloadZodStrictOfSchema","BridgeDestinationObservationSchema","extend","BridgeDestinationObservationFieldsZod","shape","validateRequest","requestHandlerValidator","method","path","handlers","req","res","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","rand","Promise","resolve","Math","random","found","sendStatus","confirmed","observation","schema","dest","destAddress","toAddress","destAmount","toHex","destToken","src","srcAddress","srcAmount","srcToken","destConfirmation","json","requestHandlerValidator","PayloadBuilder","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","SignedTransactionBoundWitnessZod","TransferZod","z","hexToBigInt","toHex","calculateBridgeFees","srcAmount","feeStructure","feeFixed","feeRateBasisPoints","srcAmountBigInt","hexToBigInt","feeFixedBigInt","feeVariableBigInt","BigInt","feeVariable","toHex","feeTotalBigInt","destAmountBigInt","destAmount","hexToBigInt","toAddress","PayloadBuilder","BridgeIntentSchema","createTransferPayload","v4","generateBridgeEstimate","srcAddress","srcAmount","destAddress","config","nonceOverride","escrowAddress","feeFixed","feeRateBasisPoints","feesAddress","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","sender","toAddress","fees","calculateBridgeFees","destAmount","feeFixedAmount","feeVariable","nonce","v4","bridgeIntentFields","src","srcToken","dest","destToken","bridgeIntent","PayloadBuilder","schema","BridgeIntentSchema","fields","build","context","transfer","createTransferPayload","hexToBigInt","isUndefined","PayloadBuilder","validateBridgeEstimateExact","intent","transfer","config","srcAddress","srcAmount","destAddress","calculatedIntent","calculatedTransfer","generateBridgeEstimate","isUndefined","nonce","expectedIntentNonce","expectedIntentStatic","actualIntentNonce","actualIntentStatic","PayloadBuilder","dataHash","epoch","expectedTransferEpoch","expectedTransferStatic","actualTransferEpoch","actualTransferStatic","asAddress","isDefined","addressesContains","BoundWitnessValidator","payloadHashesContainsAll","PayloadBuilder","validateBridgeTransaction","signedTxBw","intent","transfer","config","srcAddress","chainId","getXl1ChainId","chain","errors","BoundWitnessValidator","validate","isDefined","length","sender","asAddress","addressesContains","hashes","PayloadBuilder","payloadHashesContainsAll","makeBridgeToRemoteRoute","config","params","z","object","chainId","getRemoteChainIdZod","body","tuple","SignedTransactionBoundWitnessZod","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","BridgeIntentFieldsZod","shape","TransferZod","response","BridgeSourceObservationSchema","BridgeSourceObservationFieldsZod","validateRequest","requestHandlerValidator","method","path","handlers","req","res","signedTxBw","bridgeIntent","transfer","flowProducer","app","transactionValid","validateBridgeTransaction","status","send","estimateValid","validateBridgeEstimateExact","singedHydratedTransaction","createXl1ToEthBridgeJob","srcConfirmation","PayloadBuilder","hash","bridgeCommonFieldsZod","bridgeCommonFields","parse","bridgeObservationFields","bridgeObservation","schema","fields","build","json","requestHandlerValidator","assertEx","toAddress","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","buildUnsignedTransaction","BridgeIntentFieldsZod","BridgeIntentSchema","toXL1BlockNumber","TransactionBoundWitnessZod","TransferSchema","z","makeBridgeToRemoteEstimateRoute","config","params","z","object","chainId","getRemoteChainIdZod","body","BridgeIntentFieldsZod","pick","destAddress","srcAddress","srcAmount","response","tuple","TransactionBoundWitnessZod","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","shape","PayloadZodLooseOfSchema","TransferSchema","validateRequest","requestHandlerValidator","method","path","handlers","req","res","xl1ChainId","getXl1ChainId","bridgeIntent","transfer","generateBridgeEstimate","sender","toAddress","gateway","getGateway","viewer","assertEx","connection","Error","currentBlockNumber","nbf","toXL1BlockNumber","exp","txBw","buildUnsignedTransaction","json","requestHandlerValidator","asAddress","asHex","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","z","makeBridgeToRemoteStatusRoute","config","params","z","object","chainId","getRemoteChainIdZod","nonce","string","nonempty","query","mockStatus","coerce","number","default","response","union","tuple","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","BridgeIntentFieldsZod","shape","BridgeSourceObservationSchema","BridgeSourceObservationFieldsZod","BridgeDestinationObservationSchema","BridgeDestinationObservationFieldsZod","validateRequest","requestHandlerValidator","method","path","handlers","req","res","result","remoteTokenAddress","xl1ChainId","xl1TokenAddress","getBridgeSettings","src","srcAddress","asAddress","srcAmount","asHex","srcToken","dest","destAddress","destAmount","destToken","sendStatus","observation","generateBridgeEstimate","schema","srcConfirmation","toHex","destConfirmation","json","getRouteDefinitions","config","makeBridgeConfigRoute","makeBridgeToRemoteEstimateRoute","makeBridgeToRemoteRoute","makeBridgeToRemoteStatusRoute","makeBridgeFromRemoteStatusRoute","addBridgeRoutes","app","config","routeDefinitions","getRouteDefinitions","definition","method","path","handlers","addRoutes","app","config","addBridgeRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addFlowProducer","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","BaseMongoSdk","assertEx","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","MongoMap","initEvmProvider","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","mapToMapType","XyoGatewayRunnerMoniker","asAddress","asHex","assertEx","delay","hexFromBigInt","hexToBigInt","isDefined","isUndefined","PayloadBuilder","asSchema","AbstractSentinel","LiquidityPoolBridge__factory","BridgeDestinationObservationSchema","flattenHydratedTransaction","flattenHydratedTransactions","isBridgeIntent","tryUnflattenHydratedTransaction","Mutex","getAddress","Wallet","EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema","asSchema","defaultJobCheckIntervalMs","EVMLiquidityBridgeTransactionCompletionMonitorSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_attemptsCounter","_bridge","_bridgeChainId","_bridgeRemoteChainId","_bridgeTokenAddress","_checkCounter","_errorCounter","_reportMutex","Mutex","_successCounter","_wallet","bridge","assertEx","Error","completedTransactions","params","jobCheckInterval","isDefined","config","pendingTransactions","wallet","createHandler","meter","createCounter","description","provider","bridgeAddress","key","account","private","hex","Wallet","LiquidityPoolBridge__factory","connect","getAddress","network","getNetwork","hexFromBigInt","chainId","tokenAddress","token","asAddress","bridgeRemoteChain","remoteChain","asHex","reportHandler","payloads","length","signedHydratedTransaction","tryUnflattenHydratedTransaction","txHash","PayloadBuilder","hash","logger","info","set","flattenHydratedTransaction","isLocked","debug","id","Date","now","runExclusive","response","isUndefined","processAllTransactions","results","result","processTransaction","push","delay","flattenHydratedTransactions","ret","undefined","add","bridgeIntents","filter","isBridgeIntent","delete","bridgeIntent","bridgeDestinationObservation","relayBridgeIntentSync","error","amount","hexToBigInt","destAmount","nonce","getNonce","srcAddress","destAddress","tx","bridgeFromRemote","confirmation","wait","transactionResponse","getTransaction","destConfirmation","schema","rest","BridgeDestinationObservationSchema","fields","build","assertEx","delay","isDefined","isNull","isUndefined","PayloadBuilder","asSchema","AbstractSentinel","flattenHydratedTransaction","flattenHydratedTransactions","tryUnflattenHydratedTransaction","Mutex","XL1TransactionCompletionMonitorSentinelConfigSchema","asSchema","defaultJobCheckIntervalMs","XL1TransactionCompletionMonitorSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_attemptsCounter","_checkCounter","_errorCounter","_reportMutex","Mutex","_successCounter","completedTransactions","assertEx","params","jobCheckInterval","isDefined","config","pendingTransactions","viewer","createHandler","meter","createCounter","description","reportHandler","payloads","length","signedHydratedTransaction","tryUnflattenHydratedTransaction","txHash","PayloadBuilder","hash","logger","info","set","flattenHydratedTransaction","isLocked","debug","id","Date","now","runExclusive","response","isUndefined","processAllTransactions","results","result","processTransaction","push","delay","flattenHydratedTransactions","ret","undefined","add","tx","transactionByHash","isNull","delete","currentBlockNumber","exp","error","getModuleLocator","context","config","locator","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","moduleLocator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","gateway","getInstance","XyoGatewayRunnerMoniker","viewer","assertEx","connection","pendingXl1ToEthXl1BridgeIntentTransactions","getIterableMap","completedXl1ToEthXl1BridgeIntentTransactions","xl1TransactionCompletionMonitorSentinelParams","completedTransactions","schema","XL1TransactionCompletionMonitorSentinelConfigSchema","pendingTransactions","XL1TransactionCompletionMonitorSentinel","completedEthXl1BridgeTransactions","provider","initEvmProvider","bridgeAddress","bridge","remoteBridgeContractAddress","evmLiquidityBridgeTransactionCompletionMonitorSentinelParams","EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema","EVMLiquidityBridgeTransactionCompletionMonitorSentinel","collection","sdkBalanceSummaryMap","BaseMongoSdk","result","MongoMap","create","sdk","getCache","enabled","maxEntries","mapToMapType","Map","ManifestWrapper","buildJsonRpcProviderLocator","HttpRpcTransport","NodeManifest","node","PrivateChildManifests","XL1NodeManifest","XL1Node","EthereumNodeManifest","EthereumNode","PublicChildManifests","nodes","getNode","context","wallet","chainRpcApiUrl","endpoint","config","bridge","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","moduleLocator","getModuleLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","BaseMongoSdk","assertEx","isDefined","MongoMap","initEvmProvider","LiquidityPoolBridge__factory","HDWallet","hasMongoConfig","mapToMapType","getAddress","Wallet","getServices","context","config","gateway","getGateway","ethTxStateMap","getIterableMap","xl1TxStateMap","provider","initEvmProvider","remoteBridgeContractAddress","remoteChainWalletPrivateKey","mnemonic","bridge","account","isDefined","HDWallet","fromPhrase","random","wallet","Wallet","LiquidityPoolBridge__factory","connect","getAddress","bridgeOwner","owner","assertEx","toLowerCase","address","collection","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","result","MongoMap","create","sdk","getCache","enabled","maxEntries","mapToMapType","Map","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","bridge","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","services","getServices","server","listen","setTimeout"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeManifest.d.ts","sourceRoot":"","sources":["../../../src/manifest/nodeManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAIzE;;GAEG;AACH,eAAO,MAAM,YAAY,EAAW,sBAAsB,CAAA"}
1
+ {"version":3,"file":"nodeManifest.d.ts","sourceRoot":"","sources":["../../../src/manifest/nodeManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAIzE;;GAEG;AACH,eAAO,MAAM,YAAY,EAAsB,sBAAsB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/manifest/public/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAMzF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAc,sBAAsB,CAAA;AAEhE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAmB,sBAAsB,CAAA;AAE1E;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAGhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/manifest/public/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAMzF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAyB,sBAAsB,CAAA;AAE3E;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAA8B,sBAAsB,CAAA;AAErF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAGhD,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { Attributes, Counter } from '@opentelemetry/api';
2
2
  import type { Address, Hash, Hex } from '@xylabs/sdk-js';
3
3
  import type { AnyConfigSchema } from '@xyo-network/module-model';
4
- import type { Payload } from '@xyo-network/payload-model';
4
+ import { type Payload } from '@xyo-network/payload-model';
5
5
  import { AbstractSentinel } from '@xyo-network/sentinel-abstract';
6
6
  import type { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
7
7
  import { type LiquidityPoolBridge } from '@xyo-network/typechain';
@@ -9,7 +9,9 @@ import type { BridgeDestinationObservation, IterableMap, MapType, SignedHydrated
9
9
  import { Mutex } from 'async-mutex';
10
10
  import type { Provider } from 'ethers/providers';
11
11
  import { Wallet } from 'ethers/wallet';
12
- export declare const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config";
12
+ export declare const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema: "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config" & {
13
+ readonly __schema: true;
14
+ };
13
15
  export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = typeof EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema;
14
16
  /**
15
17
  * The configuration for the sentinel
@@ -44,8 +46,12 @@ interface EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields {
44
46
  }
45
47
  export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams<TConfig extends AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig>> = SentinelParams<TConfig> & EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields;
46
48
  export declare class EVMLiquidityBridgeTransactionCompletionMonitorSentinel<TParams extends EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
47
- static readonly configSchemas: string[];
48
- static readonly defaultConfigSchema = "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config";
49
+ static readonly configSchemas: ("network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config" & {
50
+ readonly __schema: true;
51
+ })[];
52
+ static readonly defaultConfigSchema: "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config" & {
53
+ readonly __schema: true;
54
+ };
49
55
  protected _attemptsCounter: Counter<Attributes> | undefined;
50
56
  protected _bridge: LiquidityPoolBridge | undefined;
51
57
  protected _bridgeChainId: Hex | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import type { Hash } from '@xylabs/sdk-js';
2
2
  import type { AnyConfigSchema } from '@xyo-network/module-model';
3
- import type { Payload } from '@xyo-network/payload-model';
3
+ 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 { IterableMap, MapType, SignedHydratedTransaction, XyoViewer } from '@xyo-network/xl1-sdk';
7
- export declare const XL1TransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.transaction.completion.monitor.config";
7
+ export declare const XL1TransactionCompletionMonitorSentinelConfigSchema: "network.xyo.sentinel.chain.transaction.completion.monitor.config" & {
8
+ readonly __schema: true;
9
+ };
8
10
  export type XL1TransactionCompletionMonitorSentinelConfigSchema = typeof XL1TransactionCompletionMonitorSentinelConfigSchema;
9
11
  /**
10
12
  * The configuration for the sentinel
@@ -35,8 +37,12 @@ interface XL1TransactionCompletionMonitorSentinelParamFields {
35
37
  }
36
38
  export type XL1TransactionCompletionMonitorSentinelParams<TConfig extends AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig>> = SentinelParams<TConfig> & XL1TransactionCompletionMonitorSentinelParamFields;
37
39
  export declare class XL1TransactionCompletionMonitorSentinel<TParams extends XL1TransactionCompletionMonitorSentinelParams = XL1TransactionCompletionMonitorSentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
38
- static readonly configSchemas: string[];
39
- static readonly defaultConfigSchema = "network.xyo.sentinel.chain.transaction.completion.monitor.config";
40
+ static readonly configSchemas: ("network.xyo.sentinel.chain.transaction.completion.monitor.config" & {
41
+ readonly __schema: true;
42
+ })[];
43
+ static readonly defaultConfigSchema: "network.xyo.sentinel.chain.transaction.completion.monitor.config" & {
44
+ readonly __schema: true;
45
+ };
40
46
  private _attemptsCounter;
41
47
  private _checkCounter;
42
48
  private _errorCounter;
@@ -1 +1 @@
1
- {"version":3,"file":"XL1TransactionCompletionMonitorSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAI1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE,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,EACV,WAAW,EAAE,OAAO,EAAE,yBAAyB,EAC/C,SAAS,EACV,MAAM,sBAAsB,CAAA;AAM7B,eAAO,MAAM,mDAAmD,qEAAqE,CAAA;AACrI,MAAM,MAAM,mDAAmD,GAAG,OAAO,mDAAmD,CAAA;AAE5H;;GAEG;AACH,MAAM,MAAM,6CAA6C,GAAG,cAAc,CAAC;IACzE;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,MAAM,EAAE,mDAAmD,CAAA;CAC5D,CAAC,CAAA;AAEF,UAAU,kDAAkD;IAC1D;;OAEG;IACH,qBAAqB,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IAE/D;;OAEG;IACH,mBAAmB,EAAE,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IAEjE;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,MAAM,6CAA6C,CACvD,OAAO,SAAS,eAAe,CAAC,6CAA6C,CAAC,GAAG,eAAe,CAAC,6CAA6C,CAAC,IAC7I,cAAc,CAAC,OAAO,CAAC,GAAG,kDAAkD,CAAA;AAIhF,qBAAa,uCAAuC,CAClD,OAAO,SAAS,6CAA6C,GAAG,6CAA6C,EAC7G,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,WAAwD;IAC9F,gBAAyB,mBAAmB,sEAAsD;IAClG,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,eAAe,CAAiC;IAExD,SAAS,KAAK,qBAAqB,IAAI,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAE9E;IAED,SAAS,KAAK,gBAAgB,IAAI,MAAM,CAEvC;IAED,SAAS,KAAK,mBAAmB,IAAI,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAEhF;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa;IASb,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA0BxD,sBAAsB;YAUtB,kBAAkB;CA8BjC"}
1
+ {"version":3,"file":"XL1TransactionCompletionMonitorSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAI1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACnE,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,EACV,WAAW,EAAE,OAAO,EAAE,yBAAyB,EAC/C,SAAS,EACV,MAAM,sBAAsB,CAAA;AAM7B,eAAO,MAAM,mDAAmD;;CAAqF,CAAA;AACrJ,MAAM,MAAM,mDAAmD,GAAG,OAAO,mDAAmD,CAAA;AAE5H;;GAEG;AACH,MAAM,MAAM,6CAA6C,GAAG,cAAc,CAAC;IACzE;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,MAAM,EAAE,mDAAmD,CAAA;CAC5D,CAAC,CAAA;AAEF,UAAU,kDAAkD;IAC1D;;OAEG;IACH,qBAAqB,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IAE/D;;OAEG;IACH,mBAAmB,EAAE,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IAEjE;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,MAAM,6CAA6C,CACvD,OAAO,SAAS,eAAe,CAAC,6CAA6C,CAAC,GAAG,eAAe,CAAC,6CAA6C,CAAC,IAC7I,cAAc,CAAC,OAAO,CAAC,GAAG,kDAAkD,CAAA;AAIhF,qBAAa,uCAAuC,CAClD,OAAO,SAAS,6CAA6C,GAAG,6CAA6C,EAC7G,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;;SAAwD;IAC9F,gBAAyB,mBAAmB;;MAAsD;IAClG,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,eAAe,CAAiC;IAExD,SAAS,KAAK,qBAAqB,IAAI,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAE9E;IAED,SAAS,KAAK,gBAAgB,IAAI,MAAM,CAEvC;IAED,SAAS,KAAK,mBAAmB,IAAI,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAEhF;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa;IASb,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA0BxD,sBAAsB;YAUtB,kBAAkB;CA8BjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-bridge",
3
- "version": "1.18.5",
3
+ "version": "1.19.1",
4
4
  "description": "XYO Layer One Bridge",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -55,31 +55,31 @@
55
55
  "@xylabs/express": "~5.0.64",
56
56
  "@xylabs/mongo": "~5.0.64",
57
57
  "@xylabs/sdk-js": "~5.0.64",
58
- "@xyo-network/archivist-memory": "~5.2.25",
59
- "@xyo-network/archivist-mongodb": "~5.2.25",
60
- "@xyo-network/archivist-view": "~5.2.25",
61
- "@xyo-network/bios": "~7.2.0",
62
- "@xyo-network/boundwitness-validator": "~5.2.25",
63
- "@xyo-network/chain-protocol": "~1.18.5",
64
- "@xyo-network/chain-services": "~1.18.5",
65
- "@xyo-network/chain-telemetry": "~1.18.5",
66
- "@xyo-network/manifest-model": "~5.2.25",
67
- "@xyo-network/manifest-wrapper": "~5.2.25",
68
- "@xyo-network/module-abstract": "~5.2.25",
69
- "@xyo-network/module-factory-locator": "~5.2.25",
70
- "@xyo-network/module-model": "~5.2.25",
71
- "@xyo-network/node-model": "~5.2.25",
72
- "@xyo-network/payload-builder": "~5.2.25",
73
- "@xyo-network/payload-model": "~5.2.25",
74
- "@xyo-network/sentinel-abstract": "~5.2.25",
75
- "@xyo-network/sentinel-memory": "~5.2.25",
76
- "@xyo-network/sentinel-model": "~5.2.25",
58
+ "@xyo-network/archivist-memory": "~5.3.2",
59
+ "@xyo-network/archivist-mongodb": "~5.3.2",
60
+ "@xyo-network/archivist-view": "~5.3.2",
61
+ "@xyo-network/bios": "~7.2.1",
62
+ "@xyo-network/boundwitness-validator": "~5.3.2",
63
+ "@xyo-network/chain-protocol": "~1.19.1",
64
+ "@xyo-network/chain-services": "~1.19.1",
65
+ "@xyo-network/chain-telemetry": "~1.19.1",
66
+ "@xyo-network/manifest-model": "~5.3.2",
67
+ "@xyo-network/manifest-wrapper": "~5.3.2",
68
+ "@xyo-network/module-abstract": "~5.3.2",
69
+ "@xyo-network/module-factory-locator": "~5.3.2",
70
+ "@xyo-network/module-model": "~5.3.2",
71
+ "@xyo-network/node-model": "~5.3.2",
72
+ "@xyo-network/payload-builder": "~5.3.2",
73
+ "@xyo-network/payload-model": "~5.3.2",
74
+ "@xyo-network/sentinel-abstract": "~5.3.2",
75
+ "@xyo-network/sentinel-memory": "~5.3.2",
76
+ "@xyo-network/sentinel-model": "~5.3.2",
77
77
  "@xyo-network/typechain": "~4.1.1",
78
- "@xyo-network/wallet": "~5.2.25",
79
- "@xyo-network/wallet-model": "~5.2.25",
80
- "@xyo-network/xl1-sdk": "~1.19.6",
78
+ "@xyo-network/wallet": "~5.3.2",
79
+ "@xyo-network/wallet-model": "~5.3.2",
80
+ "@xyo-network/xl1-sdk": "~1.20.9",
81
81
  "async-mutex": "~0.5.0",
82
- "bullmq": "~5.67.1",
82
+ "bullmq": "~5.67.2",
83
83
  "compression": "~1.8.1",
84
84
  "cors": "~2.8.6",
85
85
  "ethers": "^6.16.0",
@@ -93,34 +93,34 @@
93
93
  "@types/cors": "~2.8.19",
94
94
  "@types/express": "5.0.6",
95
95
  "@types/express-serve-static-core": "~5.1.1",
96
- "@types/node": "~25.0.10",
96
+ "@types/node": "~25.1.0",
97
97
  "@xylabs/mongo": "~5.0.64",
98
98
  "@xylabs/sdk-js": "~5.0.64",
99
99
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
100
100
  "@xylabs/tsconfig": "~7.3.2",
101
101
  "@xylabs/vitest-extended": "~5.0.64",
102
- "@xyo-network/account": "~5.2.25",
103
- "@xyo-network/account-model": "~5.2.25",
104
- "@xyo-network/archivist-abstract": "~5.2.25",
105
- "@xyo-network/archivist-memory": "~5.2.25",
106
- "@xyo-network/archivist-model": "~5.2.25",
107
- "@xyo-network/archivist-mongodb": "~5.2.25",
108
- "@xyo-network/archivist-view": "~5.2.25",
109
- "@xyo-network/bios": "~7.2.0",
110
- "@xyo-network/bios-model": "~7.2.0",
111
- "@xyo-network/boundwitness-builder": "~5.2.25",
112
- "@xyo-network/chain-protocol": "~1.18.5",
113
- "@xyo-network/chain-services": "~1.18.5",
114
- "@xyo-network/chain-telemetry": "~1.18.5",
115
- "@xyo-network/manifest-wrapper": "~5.2.25",
116
- "@xyo-network/module-abstract": "~5.2.25",
117
- "@xyo-network/module-abstract-mongodb": "~5.2.25",
118
- "@xyo-network/module-model-mongodb": "~5.2.25",
119
- "@xyo-network/node-memory": "~5.2.25",
120
- "@xyo-network/payload-builder": "~5.2.25",
121
- "@xyo-network/sentinel-memory": "~5.2.25",
122
- "@xyo-network/wallet": "~5.2.25",
123
- "@xyo-network/xl1-sdk": "~1.19.6",
102
+ "@xyo-network/account": "~5.3.2",
103
+ "@xyo-network/account-model": "~5.3.2",
104
+ "@xyo-network/archivist-abstract": "~5.3.2",
105
+ "@xyo-network/archivist-memory": "~5.3.2",
106
+ "@xyo-network/archivist-model": "~5.3.2",
107
+ "@xyo-network/archivist-mongodb": "~5.3.2",
108
+ "@xyo-network/archivist-view": "~5.3.2",
109
+ "@xyo-network/bios": "~7.2.1",
110
+ "@xyo-network/bios-model": "~7.2.1",
111
+ "@xyo-network/boundwitness-builder": "~5.3.2",
112
+ "@xyo-network/chain-protocol": "~1.19.1",
113
+ "@xyo-network/chain-services": "~1.19.1",
114
+ "@xyo-network/chain-telemetry": "~1.19.1",
115
+ "@xyo-network/manifest-wrapper": "~5.3.2",
116
+ "@xyo-network/module-abstract": "~5.3.2",
117
+ "@xyo-network/module-abstract-mongodb": "~5.3.2",
118
+ "@xyo-network/module-model-mongodb": "~5.3.2",
119
+ "@xyo-network/node-memory": "~5.3.2",
120
+ "@xyo-network/payload-builder": "~5.3.2",
121
+ "@xyo-network/sentinel-memory": "~5.3.2",
122
+ "@xyo-network/wallet": "~5.3.2",
123
+ "@xyo-network/xl1-sdk": "~1.20.9",
124
124
  "async-mutex": "~0.5.0",
125
125
  "dotenv": "~17.2.3",
126
126
  "eslint": "^9.39.2",
@@ -5,4 +5,4 @@ import node from './node.json' with { type: 'json' }
5
5
  /**
6
6
  * Root Node Manifest
7
7
  */
8
- export const NodeManifest = node as PackageManifestPayload
8
+ export const NodeManifest = node as unknown as PackageManifestPayload
@@ -7,12 +7,12 @@ import EthereumNode from './Ethereum.json' with { type: 'json' }
7
7
  /**
8
8
  * XL1 Node Manifest
9
9
  */
10
- export const XL1NodeManifest = XL1Node as PackageManifestPayload
10
+ export const XL1NodeManifest = XL1Node as unknown as PackageManifestPayload
11
11
 
12
12
  /**
13
13
  * Ethereum Node Manifest
14
14
  */
15
- export const EthereumNodeManifest = EthereumNode as PackageManifestPayload
15
+ export const EthereumNodeManifest = EthereumNode as unknown as PackageManifestPayload
16
16
 
17
17
  /**
18
18
  * Public Child Manifests
@@ -7,7 +7,7 @@ import {
7
7
  } from '@xylabs/sdk-js'
8
8
  import type { AnyConfigSchema } from '@xyo-network/module-model'
9
9
  import { PayloadBuilder } from '@xyo-network/payload-builder'
10
- import type { Payload } from '@xyo-network/payload-model'
10
+ import { asSchema, type Payload } from '@xyo-network/payload-model'
11
11
  import { AbstractSentinel } from '@xyo-network/sentinel-abstract'
12
12
  import type {
13
13
  SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,
@@ -27,7 +27,7 @@ import type { Provider } from 'ethers/providers'
27
27
  import { Wallet } from 'ethers/wallet'
28
28
 
29
29
  export const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema
30
- = 'network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config'
30
+ = asSchema('network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config', true)
31
31
  export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = typeof EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema
32
32
 
33
33
  /**
@@ -5,7 +5,7 @@ import {
5
5
  } from '@xylabs/sdk-js'
6
6
  import type { AnyConfigSchema } from '@xyo-network/module-model'
7
7
  import { PayloadBuilder } from '@xyo-network/payload-builder'
8
- import type { Payload } from '@xyo-network/payload-model'
8
+ import { asSchema, type Payload } from '@xyo-network/payload-model'
9
9
  import { AbstractSentinel } from '@xyo-network/sentinel-abstract'
10
10
  import type {
11
11
  SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,
@@ -19,7 +19,7 @@ import {
19
19
  } from '@xyo-network/xl1-sdk'
20
20
  import { Mutex } from 'async-mutex'
21
21
 
22
- export const XL1TransactionCompletionMonitorSentinelConfigSchema = 'network.xyo.sentinel.chain.transaction.completion.monitor.config'
22
+ export const XL1TransactionCompletionMonitorSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.transaction.completion.monitor.config', true)
23
23
  export type XL1TransactionCompletionMonitorSentinelConfigSchema = typeof XL1TransactionCompletionMonitorSentinelConfigSchema
24
24
 
25
25
  /**