@xyo-network/chain-bridge 1.17.2 → 1.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/config/asChainId.d.ts +3 -0
- package/dist/node/config/asChainId.d.ts.map +1 -0
- package/dist/node/config/asToken.d.ts +3 -0
- package/dist/node/config/asToken.d.ts.map +1 -0
- package/dist/node/config/getBridgeEscrowAddress.d.ts +5 -0
- package/dist/node/config/getBridgeEscrowAddress.d.ts.map +1 -0
- package/dist/node/config/getBridgeFeesAddress.d.ts +5 -0
- package/dist/node/config/getBridgeFeesAddress.d.ts.map +1 -0
- package/dist/node/config/getBridgeSettings.d.ts +3 -0
- package/dist/node/config/getBridgeSettings.d.ts.map +1 -0
- package/dist/node/config/getBridgeWalletAccount.d.ts +6 -0
- package/dist/node/config/getBridgeWalletAccount.d.ts.map +1 -0
- package/dist/node/config/getFeeStructure.d.ts +4 -0
- package/dist/node/config/getFeeStructure.d.ts.map +1 -0
- package/dist/node/config/getGateway.d.ts +3 -0
- package/dist/node/config/getGateway.d.ts.map +1 -0
- package/dist/node/config/getMaxBridgeAmount.d.ts +4 -0
- package/dist/node/config/getMaxBridgeAmount.d.ts.map +1 -0
- package/dist/node/config/getMinBridgeAmount.d.ts +4 -0
- package/dist/node/config/getMinBridgeAmount.d.ts.map +1 -0
- package/dist/node/config/getRemoteChainId.d.ts +4 -0
- package/dist/node/config/getRemoteChainId.d.ts.map +1 -0
- package/dist/node/config/getRemoteTokenAddress.d.ts +4 -0
- package/dist/node/config/getRemoteTokenAddress.d.ts.map +1 -0
- package/dist/node/config/getTransferAddresses.d.ts +8 -0
- package/dist/node/config/getTransferAddresses.d.ts.map +1 -0
- package/dist/node/config/getXl1ChainId.d.ts +4 -0
- package/dist/node/config/getXl1ChainId.d.ts.map +1 -0
- package/dist/node/config/getXl1TokenAddress.d.ts +4 -0
- package/dist/node/config/getXl1TokenAddress.d.ts.map +1 -0
- package/dist/node/config/index.d.ts +16 -0
- package/dist/node/config/index.d.ts.map +1 -0
- package/dist/node/index.mjs +1133 -206
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts.map +1 -1
- package/dist/node/manifest/getLocator.d.ts.map +1 -1
- package/dist/node/manifest/public/index.d.ts +0 -4
- package/dist/node/manifest/public/index.d.ts.map +1 -1
- package/dist/node/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts +77 -0
- package/dist/node/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts.map +1 -0
- package/dist/node/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/index.d.ts +2 -0
- package/dist/node/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/index.d.ts.map +1 -0
- package/dist/node/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.d.ts +56 -0
- package/dist/node/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.d.ts.map +1 -0
- package/dist/node/modules/XL1TransactionCompletionMonitorSentinel/index.d.ts +2 -0
- package/dist/node/modules/XL1TransactionCompletionMonitorSentinel/index.d.ts.map +1 -0
- package/dist/node/modules/index.d.ts +2 -1
- package/dist/node/modules/index.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +3 -1
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts +2 -1
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts +2 -1
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts +4 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +2 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts.map +1 -1
- package/dist/node/server/routes/index.d.ts +0 -2
- package/dist/node/server/routes/index.d.ts.map +1 -1
- package/dist/node/server/server.d.ts +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/dist/node/util/calculateBridgeFees.d.ts +10 -0
- package/dist/node/util/calculateBridgeFees.d.ts.map +1 -0
- package/dist/node/util/generateBridgeEstimate.d.ts +5 -0
- package/dist/node/util/generateBridgeEstimate.d.ts.map +1 -0
- package/dist/node/util/index.d.ts +5 -0
- package/dist/node/util/index.d.ts.map +1 -0
- package/dist/node/util/validateBridgeEstimate.d.ts +13 -0
- package/dist/node/util/validateBridgeEstimate.d.ts.map +1 -0
- package/dist/node/util/validateBridgeEstimateExact.d.ts +12 -0
- package/dist/node/util/validateBridgeEstimateExact.d.ts.map +1 -0
- package/package.json +29 -14
- package/src/config/asChainId.ts +7 -0
- package/src/config/asToken.ts +7 -0
- package/src/config/getBridgeEscrowAddress.ts +13 -0
- package/src/config/getBridgeFeesAddress.ts +13 -0
- package/src/config/getBridgeSettings.ts +24 -0
- package/src/config/getBridgeWalletAccount.ts +34 -0
- package/src/config/getFeeStructure.ts +8 -0
- package/src/config/getGateway.ts +19 -0
- package/src/config/getMaxBridgeAmount.ts +7 -0
- package/src/config/getMinBridgeAmount.ts +7 -0
- package/src/config/getRemoteChainId.ts +10 -0
- package/src/config/getRemoteTokenAddress.ts +10 -0
- package/src/config/getTransferAddresses.ts +17 -0
- package/src/config/getXl1ChainId.ts +13 -0
- package/src/config/getXl1TokenAddress.ts +12 -0
- package/src/config/index.ts +15 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts +1 -2
- package/src/manifest/getLocator.ts +97 -34
- package/src/manifest/public/Ethereum.json +24 -64
- package/src/manifest/public/XL1.json +24 -64
- package/src/manifest/public/index.ts +0 -6
- package/src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts +234 -0
- package/src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/index.ts +1 -0
- package/src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts +166 -0
- package/src/modules/XL1TransactionCompletionMonitorSentinel/index.ts +1 -0
- package/src/modules/index.ts +2 -1
- package/src/server/app.ts +5 -4
- package/src/server/routes/addRoutes.ts +3 -2
- package/src/server/routes/bridge/addBridgeRoutes.ts +3 -2
- package/src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts +8 -6
- package/src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts +16 -13
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts +43 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts +40 -37
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +74 -45
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +48 -75
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +95 -47
- package/src/server/routes/bridge/routeDefinitions/routes/index.ts +1 -0
- package/src/server/routes/index.ts +0 -2
- package/src/server/server.ts +37 -31
- package/src/util/calculateBridgeFees.ts +39 -0
- package/src/util/generateBridgeEstimate.ts +64 -0
- package/src/util/index.ts +4 -0
- package/src/util/validateBridgeEstimate.ts +60 -0
- package/src/util/validateBridgeEstimateExact.ts +34 -0
- package/dist/node/modules/XL1toEvmBridgeSentinel/XL1toEvmBridgeSentinel.d.ts +0 -47
- package/dist/node/modules/XL1toEvmBridgeSentinel/XL1toEvmBridgeSentinel.d.ts.map +0 -1
- package/dist/node/modules/XL1toEvmBridgeSentinel/index.d.ts +0 -2
- package/dist/node/modules/XL1toEvmBridgeSentinel/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/AddressPathParams.d.ts +0 -4
- package/dist/node/server/routes/address/AddressPathParams.d.ts.map +0 -1
- package/dist/node/server/routes/address/addNodeRoutes.d.ts +0 -3
- package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +0 -1
- package/dist/node/server/routes/address/get/get.d.ts +0 -4
- package/dist/node/server/routes/address/get/get.d.ts.map +0 -1
- package/dist/node/server/routes/address/get/index.d.ts +0 -2
- package/dist/node/server/routes/address/get/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/index.d.ts +0 -2
- package/dist/node/server/routes/address/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts +0 -6
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/index.d.ts +0 -2
- package/dist/node/server/routes/address/post/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/post.d.ts +0 -8
- package/dist/node/server/routes/address/post/post.d.ts.map +0 -1
- package/src/manifest/public/Chain.json +0 -32
- package/src/modules/XL1toEvmBridgeSentinel/XL1toEvmBridgeSentinel.ts +0 -156
- package/src/modules/XL1toEvmBridgeSentinel/index.ts +0 -1
- package/src/server/routes/address/AddressPathParams.ts +0 -3
- package/src/server/routes/address/addNodeRoutes.ts +0 -21
- package/src/server/routes/address/get/get.ts +0 -30
- package/src/server/routes/address/get/index.ts +0 -1
- package/src/server/routes/address/index.ts +0 -1
- package/src/server/routes/address/post/getQueryConfig.ts +0 -23
- package/src/server/routes/address/post/index.ts +0 -1
- package/src/server/routes/address/post/post.ts +0 -77
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.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/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"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\n// export const getApp = (node: NodeInstance): Express => {\nexport const getApp = (): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n // app.node = node\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import 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 } from '@xyo-network/xl1-protocol'\nimport {\n BridgeDestinationObservationFieldsZod,\n BridgeDestinationObservationSchema,\n} from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { ChainIdPathParam } from '../pathParams/index.ts'\n\nconst params = z.object({\n chainId: ChainIdPathParam,\n nonce: z.string(),\n})\nconst response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(\n BridgeDestinationObservationFieldsZod.shape,\n)\n\nconst validateRequest = requestHandlerValidator({\n params,\n response,\n})\n\nexport const bridgeFromRemoteStatus: RouteDefinition = {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeFromRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const { chainId } = req.params\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: chainId,\n destAddress: toAddress('0xabc'),\n destAmount: toHex('0x100'),\n destToken: toAddress('0xdef'),\n src: toAddress('0x02'),\n srcAddress: toAddress('0x123'),\n srcAmount: toHex('0x200'),\n srcToken: toHex('0x456'),\n destConfirmation: toHex('0x9999'),\n }\n res.json(observation)\n }),\n}\n","import {\n hexFromHexString, HexZod, isAddress, isUndefined,\n toAddress,\n} from '@xylabs/sdk-js'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\n\nconst remoteChainId: ChainId = toAddress('0x01')\n\nexport const ChainIdPathParam = HexZod.refine(\n (val) => {\n const chainIdHex = hexFromHexString(val, { prefix: true })\n if (isAddress(chainIdHex)) return false\n const suppliedChainId = toAddress(chainIdHex)\n if (isUndefined(suppliedChainId)) return false\n return suppliedChainId === remoteChainId\n },\n { message: `Only ${remoteChainId} is supported` },\n)\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { asHash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { BridgeSourceObservation, BridgeSourceObservationFields } from '@xyo-network/xl1-protocol'\nimport {\n BridgeIntentFieldsZod,\n BridgeIntentSchema,\n BridgeSourceObservationFieldsZod,\n BridgeSourceObservationSchema,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { ChainIdPathParam } from '../pathParams/index.ts'\n\nconst params = z.object({ chainId: ChainIdPathParam })\nconst body = z.tuple([\n // TODO: TransactionBoundWitness\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodLooseOfSchema(TransferSchema),\n])\nconst response = PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape)\n\nconst validateRequest = requestHandlerValidator({\n params,\n body,\n response,\n})\n\nexport const bridgeToRemote: RouteDefinition = {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote',\n handlers: validateRequest(async (req, res) => {\n const { body } = req\n const [bridgeIntent] = body\n // TODO: Execute bridge transaction on-chain\n const srcConfirmation = await Promise.resolve(asHash('0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'))\n\n // Extract common fields for BridgeSourceObservation from BridgeIntent\n const bridgeCommonFieldsZod = z.object({}).extend(BridgeSourceObservationFieldsZod.shape)\n const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent)\n const bridgeObservationFields: BridgeSourceObservationFields = {\n ...bridgeCommonFields,\n srcConfirmation,\n }\n const bridgeObservation: BridgeSourceObservation = new PayloadBuilder<BridgeSourceObservation>(\n { schema: BridgeSourceObservationSchema },\n ).fields(bridgeObservationFields).build()\n res.json(bridgeObservation)\n }),\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport {\n hexToBigInt, toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport { createTransferPayload } from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeIntent, BridgeIntentFields, ChainId, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, TransferSchema,\n} from '@xyo-network/xl1-protocol'\nimport { v4 } from 'uuid'\nimport { z } from 'zod'\n\nimport { ChainIdPathParam } from '../pathParams/index.ts'\n\n// TODO: Get from config\nconst TOKEN_ADDRESS = '0x5FbDB2315678afecb367f032d93F642f64180aa3'\nconst bridgeableTokenContract = toHex(TOKEN_ADDRESS)\nconst xl1ChainId: ChainId = toAddress('0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9')\nconst fixedFee: bigint = 1_000_000_000_000_000n\nconst percentFee: bigint = 5n // 0.5%\nconst bridgeEscrowAddress = toAddress('0x0a')\nconst bridgeFeesAddress = toAddress('0x0b')\nconst remoteChainId: ChainId = toHex('0x01')\n\nconst params = z.object({ chainId: ChainIdPathParam })\nconst body = BridgeIntentFieldsZod.pick({\n destAddress: true,\n srcAddress: true,\n srcAmount: true,\n})\nconst response = z.tuple([\n PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),\n PayloadZodLooseOfSchema(TransferSchema),\n])\nconst validateRequest = requestHandlerValidator({\n params, body, response,\n})\n\nexport const bridgeToRemoteEstimate: RouteDefinition = {\n method: 'post',\n path: '/bridge/chains/:chainId/bridgeToRemote/estimate',\n handlers: validateRequest((req, res) => {\n const {\n srcAddress, srcAmount, destAddress,\n } = req.body\n\n const srcAmountBigInt = hexToBigInt(srcAmount)\n const feeAmount = fixedFee + ((srcAmountBigInt * percentFee) / 100n)\n const destAmountBigInt = srcAmountBigInt > feeAmount ? srcAmountBigInt - feeAmount : 0n\n const destAmount = toHex(destAmountBigInt)\n const nonce = v4()\n\n const sender = toAddress(srcAddress)\n\n const bridgeIntentFields: BridgeIntentFields = {\n // Source\n src: xl1ChainId,\n srcAddress,\n srcAmount,\n srcToken: xl1ChainId,\n\n // Destination\n dest: remoteChainId,\n destAddress,\n destAmount,\n destToken: bridgeableTokenContract,\n nonce,\n }\n const bridgeIntent: BridgeIntent = new PayloadBuilder<BridgeIntent>({ schema: BridgeIntentSchema }).fields(bridgeIntentFields).build()\n\n const transfer: Transfer = createTransferPayload(sender, {\n [bridgeEscrowAddress]: destAmountBigInt,\n [bridgeFeesAddress]: feeAmount,\n })\n\n res.json([bridgeIntent, transfer])\n }),\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 } from '@xyo-network/xl1-protocol'\nimport {\n BridgeDestinationObservationFieldsZod,\n BridgeDestinationObservationSchema,\n} from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { ChainIdPathParam } from '../pathParams/index.ts'\n\nconst params = z.object({\n chainId: ChainIdPathParam,\n nonce: z.string(),\n})\nconst response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(\n BridgeDestinationObservationFieldsZod.shape,\n)\n\nconst validateRequest = requestHandlerValidator({\n params,\n response,\n})\n\nexport const bridgeToRemoteStatus: RouteDefinition = {\n method: 'get',\n path: '/bridge/chains/:chainId/bridgeToRemote/status/:nonce',\n handlers: validateRequest(async (req, res) => {\n const { chainId } = req.params\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: chainId,\n destAddress: toAddress('0xabc'),\n destAmount: toHex('0x100'),\n destToken: toAddress('0xdef'),\n src: toAddress('0x02'),\n srcAddress: toAddress('0x123'),\n srcAmount: toHex('0x200'),\n srcToken: toHex('0x456'),\n destConfirmation: toHex('0x9999'),\n }\n res.json(observation)\n }),\n}\n","import type { RouteDefinition } from '@xylabs/express'\n\nimport {\n bridgeFromRemoteStatus, bridgeToRemote, bridgeToRemoteEstimate, bridgeToRemoteStatus,\n} from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n bridgeFromRemoteStatus,\n bridgeToRemote,\n bridgeToRemoteEstimate,\n bridgeToRemoteStatus,\n ]\n}\n","import type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addBridgeRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n for (const definition of routeDefinitions) {\n app[definition.method](definition.path, definition.handlers)\n }\n}\n","import type { Express } from 'express'\n\nimport { addBridgeRoutes } from './bridge/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addBridgeRoutes(app)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\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\n// const 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 } = context\n const { port } = context.config.bridge\n await Promise.resolve() // bios booting is currently disabled\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 app = getApp()\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"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","requestHandlerValidator","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","hexFromHexString","HexZod","isAddress","isUndefined","toAddress","remoteChainId","ChainIdPathParam","refine","val","chainIdHex","prefix","suppliedChainId","message","params","z","object","chainId","ChainIdPathParam","nonce","string","response","PayloadZodStrictOfSchema","BridgeDestinationObservationSchema","extend","BridgeDestinationObservationFieldsZod","shape","validateRequest","requestHandlerValidator","bridgeFromRemoteStatus","method","path","handlers","req","res","rand","Promise","resolve","Math","random","found","sendStatus","confirmed","observation","schema","dest","destAddress","toAddress","destAmount","toHex","destToken","src","srcAddress","srcAmount","srcToken","destConfirmation","json","requestHandlerValidator","asHash","PayloadBuilder","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","TransferSchema","z","params","z","object","chainId","ChainIdPathParam","body","tuple","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","BridgeIntentFieldsZod","shape","PayloadZodLooseOfSchema","TransferSchema","response","BridgeSourceObservationSchema","BridgeSourceObservationFieldsZod","validateRequest","requestHandlerValidator","bridgeToRemote","method","path","handlers","req","res","bridgeIntent","srcConfirmation","Promise","resolve","asHash","bridgeCommonFieldsZod","bridgeCommonFields","parse","bridgeObservationFields","bridgeObservation","PayloadBuilder","schema","fields","build","json","requestHandlerValidator","hexToBigInt","toAddress","toHex","createTransferPayload","PayloadBuilder","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","TransferSchema","v4","z","TOKEN_ADDRESS","bridgeableTokenContract","toHex","xl1ChainId","toAddress","fixedFee","percentFee","bridgeEscrowAddress","bridgeFeesAddress","remoteChainId","params","z","object","chainId","ChainIdPathParam","body","BridgeIntentFieldsZod","pick","destAddress","srcAddress","srcAmount","response","tuple","PayloadZodStrictOfSchema","BridgeIntentSchema","extend","shape","PayloadZodLooseOfSchema","TransferSchema","validateRequest","requestHandlerValidator","bridgeToRemoteEstimate","method","path","handlers","req","res","srcAmountBigInt","hexToBigInt","feeAmount","destAmountBigInt","destAmount","nonce","v4","sender","bridgeIntentFields","src","srcToken","dest","destToken","bridgeIntent","PayloadBuilder","schema","fields","build","transfer","createTransferPayload","json","requestHandlerValidator","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","params","z","object","chainId","ChainIdPathParam","nonce","string","response","PayloadZodStrictOfSchema","BridgeDestinationObservationSchema","extend","BridgeDestinationObservationFieldsZod","shape","validateRequest","requestHandlerValidator","bridgeToRemoteStatus","method","path","handlers","req","res","rand","Promise","resolve","Math","random","found","sendStatus","confirmed","observation","schema","dest","destAddress","toAddress","destAmount","toHex","destToken","src","srcAddress","srcAmount","srcToken","destConfirmation","json","getRouteDefinitions","bridgeFromRemoteStatus","bridgeToRemote","bridgeToRemoteEstimate","bridgeToRemoteStatus","addBridgeRoutes","app","routeDefinitions","getRouteDefinitions","definition","method","path","handlers","addRoutes","app","addBridgeRoutes","getApp","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","hostname","getServer","context","logger","port","config","bridge","Promise","resolve","app","getApp","server","listen","log","setTimeout"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/app.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/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/getLocator.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"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance, config: Config): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.node = node\n addRoutes(app, config)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { BridgeSettingsZod, type Config } from '@xyo-network/xl1-protocol-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-protocol'\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-protocol-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-protocol-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-protocol-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-protocol-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-protocol-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 } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-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-protocol-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-protocol-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-protocol-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-protocol-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 } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-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-protocol-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-protocol-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 {\n type Config, SimpleXyoGatewayRunner, SimpleXyoSigner, type XyoGatewayRunner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'\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 signer = new SimpleXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n gatewayInstance = new SimpleXyoGatewayRunner(connection, signer)\n return gatewayInstance\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 } from '@xyo-network/xl1-protocol'\nimport {\n BridgeDestinationObservationFieldsZod,\n BridgeDestinationObservationSchema,\n} from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-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 } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-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 { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport type {\n BridgeSourceObservation, BridgeSourceObservationFields, SignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport {\n BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod,\n TransferZod,\n} from '@xyo-network/xl1-protocol'\nimport { type Config, flattenHydratedTransaction } from '@xyo-network/xl1-protocol-sdk'\nimport { z } from 'zod'\n\nimport { validateBridgeEstimateExact } 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 { srcAddress } = bridgeIntent\n const { node } = req.app\n\n // TODO: Validate TX is valid BW\n // BoundWitnessBuilder.validate(signedTxBw)\n\n // Validate TX has address from srcAddress\n // const sender = asAddress(srcAddress, true)\n // const srcAddressValid = signedTxBw.addresses.includes(sender)\n // if (!srcAddressValid) {\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 sentinel\n const mod = await node.resolve('XL1BridgeIntentTransactionCompletionMonitorSentinel')\n const sentinel = assertEx(asSentinelInstance(mod), () => 'Error resolving XL1BridgeIntentTransactionCompletionMonitorSentinel')\n const singedHydratedTransaction: SignedHydratedTransaction = [signedTxBw, [transfer, bridgeIntent]]\n const observation = await sentinel.report(flattenHydratedTransaction(singedHydratedTransaction))\n if (observation.length === 0) {\n console.error('Error submitting bridge intent transaction to sentinel')\n res.status(500).send()\n return\n }\n const srcConfirmation = await PayloadBuilder.hash(signedTxBw)\n\n // Create BridgeObservation\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-protocol-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 { createTransferPayload } from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BridgeIntent, BridgeIntentFields, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { BridgeIntentSchema } from '@xyo-network/xl1-protocol'\nimport { type Config } from '@xyo-network/xl1-protocol-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 { BridgeIntent, Transfer } from '@xyo-network/xl1-protocol'\nimport { type Config } from '@xyo-network/xl1-protocol-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 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 {\n BridgeIntentFieldsZod, BridgeIntentSchema, toXL1BlockNumber, TransactionBoundWitnessZod, TransferSchema,\n} from '@xyo-network/xl1-protocol'\nimport { buildUnsignedTransaction, type Config } from '@xyo-network/xl1-protocol-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.connectionInstance.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 { BridgeDestinationObservation, BridgeSourceObservation } from '@xyo-network/xl1-protocol'\nimport {\n BridgeDestinationObservationFieldsZod, BridgeDestinationObservationSchema, BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod,\n BridgeSourceObservationSchema,\n} from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-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 }\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-protocol-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-protocol-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-protocol-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-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.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 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 { mapToMapType, 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 { HDWallet } from '@xyo-network/wallet'\nimport type { BridgeDestinationObservation, SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type {\n Config, IterableMap, XyoGatewayRunner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n hasMongoConfig, SimpleXyoGatewayRunner, SimpleXyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'\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 logger?: Logger\n}\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { 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 locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n\n const gateway = await getGateway(config)\n const viewer = assertEx(gateway.connectionInstance.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 locator.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 locator.register(EVMLiquidityBridgeTransactionCompletionMonitorSentinel.factory(evmLiquidityBridgeTransactionCompletionMonitorSentinelParams))\n\n return locator\n}\n\nconst getGateway = async (\n config: Config,\n): Promise<XyoGatewayRunner> => {\n const { mnemonic, chainRpcApiUrl: endpoint } = config.bridge\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const signer = new SimpleXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n const gateway = new SimpleXyoGatewayRunner(connection, signer)\n return gateway\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 {\n type BridgeDestinationObservation, BridgeDestinationObservationSchema, type BridgeIntent, isBridgeIntent, type SignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport type { IterableMap, MapType } from '@xyo-network/xl1-protocol-sdk'\nimport {\n flattenHydratedTransaction, flattenHydratedTransactions, tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-protocol-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(): Promise<void> {\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 { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type {\n IterableMap, MapType, XyoViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n flattenHydratedTransaction, flattenHydratedTransactions, tryUnflattenHydratedTransaction,\n} from '@xyo-network/xl1-protocol-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(): Promise<void> {\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 { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"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"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","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","SimpleXyoGatewayRunner","SimpleXyoSigner","HttpRpcXyoConnection","gatewayInstance","getGateway","config","isDefined","mnemonic","chainRpcApiUrl","endpoint","bridge","walletPromise","HDWallet","fromPhrase","random","account","signer","SimpleXyoSigner","connection","HttpRpcXyoConnection","SimpleXyoGatewayRunner","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","assertEx","PayloadBuilder","PayloadZodStrictOfSchema","asSentinelInstance","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","SignedTransactionBoundWitnessZod","TransferZod","flattenHydratedTransaction","z","hexToBigInt","toHex","calculateBridgeFees","srcAmount","feeStructure","feeFixed","feeRateBasisPoints","srcAmountBigInt","hexToBigInt","feeFixedBigInt","feeVariableBigInt","BigInt","feeVariable","toHex","feeTotalBigInt","destAmountBigInt","destAmount","hexToBigInt","toAddress","createTransferPayload","PayloadBuilder","BridgeIntentSchema","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","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","srcAddress","node","app","estimateValid","validateBridgeEstimateExact","status","send","mod","resolve","sentinel","assertEx","asSentinelInstance","singedHydratedTransaction","observation","report","flattenHydratedTransaction","length","console","error","srcConfirmation","PayloadBuilder","hash","bridgeCommonFieldsZod","bridgeCommonFields","parse","bridgeObservationFields","bridgeObservation","schema","fields","build","json","requestHandlerValidator","assertEx","toAddress","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","toXL1BlockNumber","TransactionBoundWitnessZod","TransferSchema","buildUnsignedTransaction","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","connectionInstance","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","destConfirmation","toHex","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","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","BaseMongoSdk","assertEx","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","mapToMapType","MongoMap","initEvmProvider","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","HDWallet","hasMongoConfig","SimpleXyoGatewayRunner","SimpleXyoSigner","HttpRpcXyoConnection","asAddress","asHex","assertEx","delay","hexFromBigInt","hexToBigInt","isDefined","isUndefined","PayloadBuilder","AbstractSentinel","LiquidityPoolBridge__factory","BridgeDestinationObservationSchema","isBridgeIntent","flattenHydratedTransaction","flattenHydratedTransactions","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","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","gateway","getGateway","viewer","assertEx","connectionInstance","pendingXl1ToEthXl1BridgeIntentTransactions","getIterableMap","completedXl1ToEthXl1BridgeIntentTransactions","xl1TransactionCompletionMonitorSentinelParams","completedTransactions","schema","XL1TransactionCompletionMonitorSentinelConfigSchema","pendingTransactions","XL1TransactionCompletionMonitorSentinel","completedEthXl1BridgeTransactions","provider","initEvmProvider","bridgeAddress","bridge","remoteBridgeContractAddress","evmLiquidityBridgeTransactionCompletionMonitorSentinelParams","EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema","EVMLiquidityBridgeTransactionCompletionMonitorSentinel","mnemonic","chainRpcApiUrl","walletPromise","HDWallet","fromPhrase","random","account","signer","SimpleXyoSigner","connection","HttpRpcXyoConnection","SimpleXyoGatewayRunner","collection","sdkBalanceSummaryMap","BaseMongoSdk","result","MongoMap","create","sdk","getCache","enabled","maxEntries","mapToMapType","Map","ManifestWrapper","NodeManifest","node","PrivateChildManifests","XL1NodeManifest","XL1Node","EthereumNodeManifest","EthereumNode","PublicChildManifests","nodes","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","bridge","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiquidityPoolBridgeObserver.d.ts","sourceRoot":"","sources":["../../../../../../src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"LiquidityPoolBridgeObserver.d.ts","sourceRoot":"","sources":["../../../../../../src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAKlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAQjE,OAAO,KAAK,EAAwB,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAGrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,MAAM,iCAAiC,GAAG,mBAAmB,GAAG;IACpE;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAA;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,qBAAa,2BAA4B,SAAQ,qBAAqB,CAAC,iCAAiC,CAAC;IACvG,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAClD,SAAS,CAAC,cAAc,EAAE,GAAG,GAAG,SAAS,CAAA;IACzC,SAAS,CAAC,oBAAoB,EAAE,GAAG,GAAG,SAAS,CAAA;IAC/C,SAAS,CAAC,mBAAmB,EAAE,OAAO,GAAG,SAAS,CAAA;IAElD,SAAS,KAAK,MAAM,IAAI,mBAAmB,CAE1C;IAED,SAAS,KAAK,aAAa,IAAI,GAAG,CAEjC;IAED,SAAS,KAAK,mBAAmB,IAAI,GAAG,CAEvC;IAED,SAAS,KAAK,kBAAkB,IAAI,OAAO,CAE1C;IAED,SAAS,KAAK,QAAQ,IAAI,iBAAiB,CAE1C;IAED,SAAS,KAAK,UAAU,IAAI,MAAM,CAEjC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YAsC/B,sBAAsB;YAoDtB,oBAAoB;YAsCpB,gBAAgB;CAiB/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocator.d.ts","sourceRoot":"","sources":["../../../src/manifest/getLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"getLocator.d.ts","sourceRoot":"","sources":["../../../src/manifest/getLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,gBAAgB,CAAA;AASlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAK1E,OAAO,KAAK,EACV,MAAM,EACP,MAAM,+BAA+B,CAAA;AAatC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,kCAqF1D,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,
|
|
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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Attributes, Counter } from '@opentelemetry/api';
|
|
2
|
+
import type { Address, Hash, Hex } from '@xylabs/sdk-js';
|
|
3
|
+
import type { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
5
|
+
import { AbstractSentinel } from '@xyo-network/sentinel-abstract';
|
|
6
|
+
import type { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
|
|
7
|
+
import { type LiquidityPoolBridge } from '@xyo-network/typechain';
|
|
8
|
+
import { type BridgeDestinationObservation, type SignedHydratedTransaction } from '@xyo-network/xl1-protocol';
|
|
9
|
+
import type { IterableMap, MapType } from '@xyo-network/xl1-protocol-sdk';
|
|
10
|
+
import { Mutex } from 'async-mutex';
|
|
11
|
+
import type { Provider } from 'ethers/providers';
|
|
12
|
+
import { Wallet } from 'ethers/wallet';
|
|
13
|
+
export declare const EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config";
|
|
14
|
+
export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema = typeof EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema;
|
|
15
|
+
/**
|
|
16
|
+
* The configuration for the sentinel
|
|
17
|
+
*/
|
|
18
|
+
export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig = SentinelConfig<{
|
|
19
|
+
/**
|
|
20
|
+
* The interval in milliseconds between checking for jobs to fulfill
|
|
21
|
+
*/
|
|
22
|
+
jobCheckInterval: number;
|
|
23
|
+
/**
|
|
24
|
+
* The schema for the sentinel config
|
|
25
|
+
*/
|
|
26
|
+
schema: EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfigSchema;
|
|
27
|
+
}>;
|
|
28
|
+
interface EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields {
|
|
29
|
+
/**
|
|
30
|
+
* The address to watch for incoming or outgoing ERC-20 token transfers.
|
|
31
|
+
*/
|
|
32
|
+
bridgeAddress: string;
|
|
33
|
+
/**
|
|
34
|
+
* The map of completed transactions to monitor for completion
|
|
35
|
+
*/
|
|
36
|
+
completedTransactions: MapType<Hash, BridgeDestinationObservation>;
|
|
37
|
+
/**
|
|
38
|
+
* The map of pending transactions to monitor for completion
|
|
39
|
+
*/
|
|
40
|
+
pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>;
|
|
41
|
+
/**
|
|
42
|
+
* An ethers.js Provider connected to the Ethereum network to monitor for ERC-20 transfers.
|
|
43
|
+
*/
|
|
44
|
+
provider: Provider;
|
|
45
|
+
}
|
|
46
|
+
export type EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams<TConfig extends AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<EVMLiquidityBridgeTransactionCompletionMonitorSentinelConfig>> = SentinelParams<TConfig> & EVMLiquidityBridgeTransactionCompletionMonitorSentinelParamFields;
|
|
47
|
+
export declare class EVMLiquidityBridgeTransactionCompletionMonitorSentinel<TParams extends EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams = EVMLiquidityBridgeTransactionCompletionMonitorSentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
|
|
48
|
+
static readonly configSchemas: string[];
|
|
49
|
+
static readonly defaultConfigSchema = "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config";
|
|
50
|
+
protected _attemptsCounter: Counter<Attributes> | undefined;
|
|
51
|
+
protected _bridge: LiquidityPoolBridge | undefined;
|
|
52
|
+
protected _bridgeChainId: Hex | undefined;
|
|
53
|
+
protected _bridgeRemoteChainId: Hex | undefined;
|
|
54
|
+
protected _bridgeTokenAddress: Address | undefined;
|
|
55
|
+
protected _checkCounter: Counter<Attributes> | undefined;
|
|
56
|
+
protected _errorCounter: Counter<Attributes> | undefined;
|
|
57
|
+
protected _reportMutex: Mutex;
|
|
58
|
+
protected _successCounter: Counter<Attributes> | undefined;
|
|
59
|
+
protected _wallet: Wallet | undefined;
|
|
60
|
+
protected get bridge(): LiquidityPoolBridge;
|
|
61
|
+
protected get completedTransactions(): MapType<Hash, BridgeDestinationObservation>;
|
|
62
|
+
protected get jobCheckInterval(): number;
|
|
63
|
+
protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction>;
|
|
64
|
+
protected get wallet(): Wallet;
|
|
65
|
+
createHandler(): Promise<void>;
|
|
66
|
+
reportHandler(payloads?: Payload[]): Promise<Payload[]>;
|
|
67
|
+
private processAllTransactions;
|
|
68
|
+
private processTransaction;
|
|
69
|
+
/**
|
|
70
|
+
* Relays a given BridgeIntent.
|
|
71
|
+
* @param bridgeIntent The BridgeIntent to relay
|
|
72
|
+
* @returns Relays the intent in a blocking manner, returning the resulting BridgeDestinationObservation if successful
|
|
73
|
+
*/
|
|
74
|
+
private relayBridgeIntentSync;
|
|
75
|
+
}
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EVMLiquidityBridgeTransactionCompletionMonitorSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts"],"names":[],"mappings":"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epC"}
|
package/dist/node/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/index.ts"],"names":[],"mappings":"AAAA,cAAc,6DAA6D,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Hash } from '@xylabs/sdk-js';
|
|
2
|
+
import type { AnyConfigSchema } from '@xyo-network/module-model';
|
|
3
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
4
|
+
import { AbstractSentinel } from '@xyo-network/sentinel-abstract';
|
|
5
|
+
import type { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
|
|
6
|
+
import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol';
|
|
7
|
+
import type { IterableMap, MapType, XyoViewer } from '@xyo-network/xl1-protocol-sdk';
|
|
8
|
+
export declare const XL1TransactionCompletionMonitorSentinelConfigSchema = "network.xyo.sentinel.chain.transaction.completion.monitor.config";
|
|
9
|
+
export type XL1TransactionCompletionMonitorSentinelConfigSchema = typeof XL1TransactionCompletionMonitorSentinelConfigSchema;
|
|
10
|
+
/**
|
|
11
|
+
* The configuration for the sentinel
|
|
12
|
+
*/
|
|
13
|
+
export type XL1TransactionCompletionMonitorSentinelConfig = SentinelConfig<{
|
|
14
|
+
/**
|
|
15
|
+
* The interval in milliseconds between checking for jobs to fulfill
|
|
16
|
+
*/
|
|
17
|
+
jobCheckInterval: number;
|
|
18
|
+
/**
|
|
19
|
+
* The schema for the sentinel config
|
|
20
|
+
*/
|
|
21
|
+
schema: XL1TransactionCompletionMonitorSentinelConfigSchema;
|
|
22
|
+
}>;
|
|
23
|
+
interface XL1TransactionCompletionMonitorSentinelParamFields {
|
|
24
|
+
/**
|
|
25
|
+
* The map of completed transactions to monitor for completion
|
|
26
|
+
*/
|
|
27
|
+
completedTransactions: MapType<Hash, SignedHydratedTransaction>;
|
|
28
|
+
/**
|
|
29
|
+
* The map of pending transactions to monitor for completion
|
|
30
|
+
*/
|
|
31
|
+
pendingTransactions: IterableMap<Hash, SignedHydratedTransaction>;
|
|
32
|
+
/**
|
|
33
|
+
* The viewer instance to use for viewing transactions
|
|
34
|
+
*/
|
|
35
|
+
viewer: XyoViewer;
|
|
36
|
+
}
|
|
37
|
+
export type XL1TransactionCompletionMonitorSentinelParams<TConfig extends AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig> = AnyConfigSchema<XL1TransactionCompletionMonitorSentinelConfig>> = SentinelParams<TConfig> & XL1TransactionCompletionMonitorSentinelParamFields;
|
|
38
|
+
export declare class XL1TransactionCompletionMonitorSentinel<TParams extends XL1TransactionCompletionMonitorSentinelParams = XL1TransactionCompletionMonitorSentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
|
|
39
|
+
static readonly configSchemas: string[];
|
|
40
|
+
static readonly defaultConfigSchema = "network.xyo.sentinel.chain.transaction.completion.monitor.config";
|
|
41
|
+
private _attemptsCounter;
|
|
42
|
+
private _checkCounter;
|
|
43
|
+
private _errorCounter;
|
|
44
|
+
private _reportMutex;
|
|
45
|
+
private _successCounter;
|
|
46
|
+
protected get completedTransactions(): MapType<Hash, SignedHydratedTransaction>;
|
|
47
|
+
protected get jobCheckInterval(): number;
|
|
48
|
+
protected get pendingTransactions(): IterableMap<Hash, SignedHydratedTransaction>;
|
|
49
|
+
protected get viewer(): XyoViewer;
|
|
50
|
+
createHandler(): Promise<void>;
|
|
51
|
+
reportHandler(payloads?: Payload[]): Promise<Payload[]>;
|
|
52
|
+
private processAllTransactions;
|
|
53
|
+
private processTransaction;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=XL1TransactionCompletionMonitorSentinel.d.ts.map
|
|
@@ -0,0 +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,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,EACV,WAAW,EAAE,OAAO,EAAE,SAAS,EAChC,MAAM,+BAA+B,CAAA;AAMtC,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,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA0BxD,sBAAsB;YAUtB,kBAAkB;CA8BjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/XL1TransactionCompletionMonitorSentinel/index.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,mEAAmE,CAAA;AACjF,cAAc,oDAAoD,CAAA"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { NodeInstance } from '@xyo-network/node-model';
|
|
2
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
1
3
|
import type { Express } from 'express';
|
|
2
|
-
export declare const getApp: () => Express;
|
|
4
|
+
export declare const getApp: (node: NodeInstance, config: Config) => Express;
|
|
3
5
|
//# sourceMappingURL=app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAG3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,MAAM,GAAI,MAAM,YAAY,EAAE,QAAQ,MAAM,KAAG,OAgB3D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
1
2
|
import type { Express } from 'express';
|
|
2
|
-
export declare const addRoutes: (app: Express) => void;
|
|
3
|
+
export declare const addRoutes: (app: Express, config: Config) => void;
|
|
3
4
|
//# sourceMappingURL=addRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"addRoutes.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/addRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,EAAE,QAAQ,MAAM,SAErD,CAAA"}
|