@xyo-network/chain-bridge 1.15.13 → 1.15.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node/index.mjs
CHANGED
|
@@ -153,12 +153,11 @@ var bridgeFromRemoteStatus = {
|
|
|
153
153
|
};
|
|
154
154
|
|
|
155
155
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
|
|
156
|
-
import { asHash
|
|
156
|
+
import { asHash } from "@xylabs/hex";
|
|
157
157
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
158
158
|
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
|
|
159
159
|
import { BridgeIntentFieldsZod, BridgeIntentSchema, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, TransferSchema } from "@xyo-network/xl1-protocol";
|
|
160
160
|
import { z as z3 } from "zod";
|
|
161
|
-
var remoteChainId2 = toAddress3("0x01");
|
|
162
161
|
var params2 = z3.object({
|
|
163
162
|
chainId: ChainIdPathParam
|
|
164
163
|
});
|
|
@@ -178,7 +177,7 @@ var bridgeToRemote = {
|
|
|
178
177
|
path: "/bridge/chains/:chainId/bridgeToRemote",
|
|
179
178
|
handlers: validateRequest2(async (req, res) => {
|
|
180
179
|
const { body: body3 } = req;
|
|
181
|
-
const [bridgeIntent
|
|
180
|
+
const [bridgeIntent] = body3;
|
|
182
181
|
const srcConfirmation = await Promise.resolve(asHash("0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"));
|
|
183
182
|
const bridgeCommonFieldsZod = z3.object({}).extend(BridgeSourceObservationFieldsZod.shape);
|
|
184
183
|
const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent);
|
|
@@ -194,7 +193,7 @@ var bridgeToRemote = {
|
|
|
194
193
|
};
|
|
195
194
|
|
|
196
195
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts
|
|
197
|
-
import { hexToBigInt, toAddress as
|
|
196
|
+
import { hexToBigInt, toAddress as toAddress3, toHex as toHex2 } from "@xylabs/hex";
|
|
198
197
|
import { createTransferPayload } from "@xyo-network/chain-protocol";
|
|
199
198
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
200
199
|
import { PayloadZodLooseOfSchema as PayloadZodLooseOfSchema2, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/payload-model";
|
|
@@ -203,12 +202,12 @@ import { v4 } from "uuid";
|
|
|
203
202
|
import { z as z4 } from "zod";
|
|
204
203
|
var TOKEN_ADDRESS = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
|
|
205
204
|
var bridgeableTokenContract = toHex2(TOKEN_ADDRESS);
|
|
206
|
-
var xl1ChainId =
|
|
205
|
+
var xl1ChainId = toAddress3("0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9");
|
|
207
206
|
var fixedFee = 1000000000000000n;
|
|
208
207
|
var percentFee = 5n;
|
|
209
|
-
var bridgeEscrowAddress =
|
|
210
|
-
var bridgeFeesAddress =
|
|
211
|
-
var
|
|
208
|
+
var bridgeEscrowAddress = toAddress3("0x0a");
|
|
209
|
+
var bridgeFeesAddress = toAddress3("0x0b");
|
|
210
|
+
var remoteChainId2 = toHex2("0x01");
|
|
212
211
|
var params3 = z4.object({
|
|
213
212
|
chainId: ChainIdPathParam
|
|
214
213
|
});
|
|
@@ -236,7 +235,7 @@ var bridgeToRemoteEstimate = {
|
|
|
236
235
|
const destAmountBigInt = srcAmountBigInt > feeAmount ? srcAmountBigInt - feeAmount : 0n;
|
|
237
236
|
const destAmount = toHex2(destAmountBigInt);
|
|
238
237
|
const nonce = v4();
|
|
239
|
-
const sender =
|
|
238
|
+
const sender = toAddress3(srcAddress);
|
|
240
239
|
const bridgeIntentFields = {
|
|
241
240
|
// Source
|
|
242
241
|
src: xl1ChainId,
|
|
@@ -244,7 +243,7 @@ var bridgeToRemoteEstimate = {
|
|
|
244
243
|
srcAmount,
|
|
245
244
|
srcToken: xl1ChainId,
|
|
246
245
|
// Destination
|
|
247
|
-
dest:
|
|
246
|
+
dest: remoteChainId2,
|
|
248
247
|
destAddress,
|
|
249
248
|
destAmount,
|
|
250
249
|
destToken: bridgeableTokenContract,
|
|
@@ -265,7 +264,7 @@ var bridgeToRemoteEstimate = {
|
|
|
265
264
|
};
|
|
266
265
|
|
|
267
266
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts
|
|
268
|
-
import { toAddress as
|
|
267
|
+
import { toAddress as toAddress4, toHex as toHex3 } from "@xylabs/hex";
|
|
269
268
|
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema4 } from "@xyo-network/payload-model";
|
|
270
269
|
import { BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2 } from "@xyo-network/xl1-protocol";
|
|
271
270
|
import { z as z5 } from "zod";
|
|
@@ -291,11 +290,11 @@ var bridgeToRemoteStatus = {
|
|
|
291
290
|
const observation = {
|
|
292
291
|
schema: BridgeDestinationObservationSchema2,
|
|
293
292
|
dest: chainId,
|
|
294
|
-
destAddress:
|
|
293
|
+
destAddress: toAddress4("0xabc"),
|
|
295
294
|
destAmount: toHex3("0x100"),
|
|
296
|
-
destToken:
|
|
297
|
-
src:
|
|
298
|
-
srcAddress:
|
|
295
|
+
destToken: toAddress4("0xdef"),
|
|
296
|
+
src: toAddress4("0x02"),
|
|
297
|
+
srcAddress: toAddress4("0x123"),
|
|
299
298
|
srcAmount: toHex3("0x200"),
|
|
300
299
|
srcToken: toHex3("0x456"),
|
|
301
300
|
destConfirmation: toHex3("0x9999")
|
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/middleware/requestHandlerValidator.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 { toAddress, toHex } from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ExpressError } from '@xylabs/express'\nimport { isPromise } from '@xylabs/typeof'\nimport type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\nimport type { ZodType } from 'zod'\nimport { z } from 'zod'\n\n/**\n * Empty Zod schema for requests with no parameters.\n */\nexport const EmptyParamsZod = z.object({}).catchall(z.string())\n\n/**\n * Empty Zod schema for requests with no query parameters.\n */\nexport const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))\n\n/**\n * Default validation schemas for request handler validator.\n */\nexport const ValidateRequestDefaults = {\n params: EmptyParamsZod,\n query: EmptyQueryParamsZod,\n body: z.json(),\n response: z.json(),\n}\n\ntype ValidatableRequestKey = 'params' | 'query' | 'body'\n\n/**\n * Factory for Express middleware that validates request and response objects using Zod schemas.\n * @param schemas The Zod schemas to use for validation.\n * @returns A middleware function for validating requests and responses.\n */\nexport function requestHandlerValidator<\n TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,\n TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,\n TBody extends ZodType<unknown> = ZodType<unknown>,\n TResponse extends ZodType<unknown> = ZodType<unknown>,\n>(schemas?: Partial<{\n body: TBody\n params: TParams\n query: TQuery\n response: TResponse\n}>) {\n type Params = z.infer<TParams>\n type Query = z.infer<TQuery>\n type Body = z.infer<TBody>\n type Res = z.infer<TResponse>\n const validators = { ...ValidateRequestDefaults, ...schemas }\n\n return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const originalJson = res.json.bind(res)\n try {\n // Validate incoming request\n const errors: string[] = []\n const keys: ValidatableRequestKey[] = ['params', 'query', 'body']\n for (const key of keys) {\n const validator = validators[key]\n const result = validator.safeParse(req[key])\n if (result.success) {\n Object.assign(req[key], result.data)\n } else {\n errors.push(\n ...result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `${key}: ${issue.message}`\n : `${key}.${issue.path.join('.')}: ${issue.message}`,\n ),\n )\n }\n }\n\n // If there were validation errors, short-circuit and return Bad Request\n if (errors.length > 0) {\n const message = errors.join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.BAD_REQUEST\n err.statusCode = StatusCodes.BAD_REQUEST\n next(err)\n return false\n }\n\n // Wrap res.json to validate outgoing response\n res.json = (data: any) => {\n const result = validators.response.safeParse(data)\n if (result.success) {\n return originalJson(result.data)\n } else {\n const message = result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `response: ${issue.message}`\n : `response.${issue.path.join('.')}: ${issue.message}`,\n ).join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.INTERNAL_SERVER_ERROR\n err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR\n\n // Restore original json function in case the error handler wants to use it\n res.json = originalJson\n throw err\n }\n }\n\n // Automatically handle async errors\n const result = handler(req as any, res as any, next)\n if (result && isPromise(result)) {\n await result\n }\n } catch (err) {\n res.json = originalJson\n next(err)\n }\n }\n }\n}\n","import {\n hexFromHexString, HexZod, isAddress, toAddress,\n} from '@xylabs/hex'\nimport { isUndefined } from '@xylabs/typeof'\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 { asHash, toAddress } from '@xylabs/hex'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type {\n BridgeSourceObservation, BridgeSourceObservationFields, ChainId,\n} 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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.ts'\n\n// TODO: Replace with actual chain logic / contract integration\nconst remoteChainId: ChainId = toAddress('0x01')\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, transfer] = 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 {\n hexToBigInt, toAddress, toHex,\n} from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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 { toAddress, toHex } from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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 './routeDefinition.ts'\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 { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isString } from '@xylabs/typeof'\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 { 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 } = 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","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","isPromise","ReasonPhrases","StatusCodes","z","EmptyParamsZod","z","object","catchall","string","EmptyQueryParamsZod","union","array","ValidateRequestDefaults","params","query","body","json","response","requestHandlerValidator","schemas","validators","handler","req","res","next","originalJson","bind","errors","keys","key","validator","result","safeParse","success","Object","assign","data","push","error","issues","map","issue","path","length","message","join","err","Error","name","ReasonPhrases","BAD_REQUEST","statusCode","StatusCodes","INTERNAL_SERVER_ERROR","isPromise","hexFromHexString","HexZod","isAddress","toAddress","isUndefined","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","asHash","toAddress","PayloadBuilder","PayloadZodLooseOfSchema","PayloadZodStrictOfSchema","BridgeIntentFieldsZod","BridgeIntentSchema","BridgeSourceObservationFieldsZod","BridgeSourceObservationSchema","TransferSchema","z","remoteChainId","toAddress","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","transfer","srcConfirmation","Promise","resolve","asHash","bridgeCommonFieldsZod","bridgeCommonFields","parse","bridgeObservationFields","bridgeObservation","PayloadBuilder","schema","fields","build","json","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","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","assertEx","isString","HDWallet","hostname","getServer","context","logger","port","config","bridge","Promise","resolve","app","getApp","server","listen","hostname","log","setTimeout"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts","../../src/server/routes/bridge/middleware/requestHandlerValidator.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 { toAddress, toHex } from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ExpressError } from '@xylabs/express'\nimport { isPromise } from '@xylabs/typeof'\nimport type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\nimport type { ZodType } from 'zod'\nimport { z } from 'zod'\n\n/**\n * Empty Zod schema for requests with no parameters.\n */\nexport const EmptyParamsZod = z.object({}).catchall(z.string())\n\n/**\n * Empty Zod schema for requests with no query parameters.\n */\nexport const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))\n\n/**\n * Default validation schemas for request handler validator.\n */\nexport const ValidateRequestDefaults = {\n params: EmptyParamsZod,\n query: EmptyQueryParamsZod,\n body: z.json(),\n response: z.json(),\n}\n\ntype ValidatableRequestKey = 'params' | 'query' | 'body'\n\n/**\n * Factory for Express middleware that validates request and response objects using Zod schemas.\n * @param schemas The Zod schemas to use for validation.\n * @returns A middleware function for validating requests and responses.\n */\nexport function requestHandlerValidator<\n TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,\n TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,\n TBody extends ZodType<unknown> = ZodType<unknown>,\n TResponse extends ZodType<unknown> = ZodType<unknown>,\n>(schemas?: Partial<{\n body: TBody\n params: TParams\n query: TQuery\n response: TResponse\n}>) {\n type Params = z.infer<TParams>\n type Query = z.infer<TQuery>\n type Body = z.infer<TBody>\n type Res = z.infer<TResponse>\n const validators = { ...ValidateRequestDefaults, ...schemas }\n\n return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const originalJson = res.json.bind(res)\n try {\n // Validate incoming request\n const errors: string[] = []\n const keys: ValidatableRequestKey[] = ['params', 'query', 'body']\n for (const key of keys) {\n const validator = validators[key]\n const result = validator.safeParse(req[key])\n if (result.success) {\n Object.assign(req[key], result.data)\n } else {\n errors.push(\n ...result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `${key}: ${issue.message}`\n : `${key}.${issue.path.join('.')}: ${issue.message}`,\n ),\n )\n }\n }\n\n // If there were validation errors, short-circuit and return Bad Request\n if (errors.length > 0) {\n const message = errors.join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.BAD_REQUEST\n err.statusCode = StatusCodes.BAD_REQUEST\n next(err)\n return false\n }\n\n // Wrap res.json to validate outgoing response\n res.json = (data: any) => {\n const result = validators.response.safeParse(data)\n if (result.success) {\n return originalJson(result.data)\n } else {\n const message = result.error.issues.map(\n issue => (issue.path.length === 0)\n ? `response: ${issue.message}`\n : `response.${issue.path.join('.')}: ${issue.message}`,\n ).join('; ')\n const err: ExpressError = new Error(message)\n err.name = ReasonPhrases.INTERNAL_SERVER_ERROR\n err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR\n\n // Restore original json function in case the error handler wants to use it\n res.json = originalJson\n throw err\n }\n }\n\n // Automatically handle async errors\n const result = handler(req as any, res as any, next)\n if (result && isPromise(result)) {\n await result\n }\n } catch (err) {\n res.json = originalJson\n next(err)\n }\n }\n }\n}\n","import {\n hexFromHexString, HexZod, isAddress, toAddress,\n} from '@xylabs/hex'\nimport { isUndefined } from '@xylabs/typeof'\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 { asHash } from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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 {\n hexToBigInt, toAddress, toHex,\n} from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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 { toAddress, toHex } from '@xylabs/hex'\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 { requestHandlerValidator } from '../../middleware/index.ts'\nimport { ChainIdPathParam } from '../pathParams/index.ts'\nimport type { RouteDefinition } from '../routeDefinition.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 './routeDefinition.ts'\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 { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isString } from '@xylabs/typeof'\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 { 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 } = 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","toAddress","toHex","PayloadZodStrictOfSchema","BridgeDestinationObservationFieldsZod","BridgeDestinationObservationSchema","z","isPromise","ReasonPhrases","StatusCodes","z","EmptyParamsZod","z","object","catchall","string","EmptyQueryParamsZod","union","array","ValidateRequestDefaults","params","query","body","json","response","requestHandlerValidator","schemas","validators","handler","req","res","next","originalJson","bind","errors","keys","key","validator","result","safeParse","success","Object","assign","data","push","error","issues","map","issue","path","length","message","join","err","Error","name","ReasonPhrases","BAD_REQUEST","statusCode","StatusCodes","INTERNAL_SERVER_ERROR","isPromise","hexFromHexString","HexZod","isAddress","toAddress","isUndefined","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","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","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","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","assertEx","isString","HDWallet","hostname","getServer","context","logger","port","config","bridge","Promise","resolve","app","getApp","server","listen","hostname","log","setTimeout"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeToRemote.d.ts","sourceRoot":"","sources":["../../../../../../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridgeToRemote.d.ts","sourceRoot":"","sources":["../../../../../../../src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAgB5D,eAAO,MAAM,cAAc,EAAE,eAqB5B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/chain-bridge",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.15",
|
|
4
4
|
"description": "XYO Layer One Bridge",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@xylabs/typeof": "~5.0.13",
|
|
59
59
|
"@xyo-network/archivist-model": "~5.1.7",
|
|
60
60
|
"@xyo-network/boundwitness-model": "~5.1.7",
|
|
61
|
-
"@xyo-network/chain-protocol": "~1.15.
|
|
61
|
+
"@xyo-network/chain-protocol": "~1.15.15",
|
|
62
62
|
"@xyo-network/manifest-model": "~5.1.7",
|
|
63
63
|
"@xyo-network/module-factory-locator": "~5.1.7",
|
|
64
64
|
"@xyo-network/module-model": "~5.1.7",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"@xyo-network/wallet": "~5.1.7",
|
|
70
70
|
"@xyo-network/wallet-model": "~5.1.7",
|
|
71
71
|
"@xyo-network/xl1-protocol": "~1.12.84",
|
|
72
|
-
"@xyo-network/xl1-protocol-sdk": "~1.15.
|
|
72
|
+
"@xyo-network/xl1-protocol-sdk": "~1.15.15",
|
|
73
73
|
"compression": "~1.8.1",
|
|
74
74
|
"cors": "~2.8.5",
|
|
75
75
|
"express": "~5.1.0",
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
"@xyo-network/bios": "~7.1.1",
|
|
101
101
|
"@xyo-network/bios-model": "~7.1.1",
|
|
102
102
|
"@xyo-network/boundwitness-builder": "~5.1.7",
|
|
103
|
-
"@xyo-network/chain-modules": "~1.15.
|
|
104
|
-
"@xyo-network/chain-protocol": "~1.15.
|
|
105
|
-
"@xyo-network/chain-services": "~1.15.
|
|
106
|
-
"@xyo-network/chain-telemetry": "~1.15.
|
|
103
|
+
"@xyo-network/chain-modules": "~1.15.15",
|
|
104
|
+
"@xyo-network/chain-protocol": "~1.15.15",
|
|
105
|
+
"@xyo-network/chain-services": "~1.15.15",
|
|
106
|
+
"@xyo-network/chain-telemetry": "~1.15.15",
|
|
107
107
|
"@xyo-network/manifest-wrapper": "~5.1.7",
|
|
108
108
|
"@xyo-network/module-abstract": "~5.1.7",
|
|
109
109
|
"@xyo-network/module-abstract-mongodb": "~5.1.7",
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { asHash
|
|
1
|
+
import { asHash } from '@xylabs/hex'
|
|
2
2
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
3
3
|
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'
|
|
4
|
-
import type {
|
|
5
|
-
BridgeSourceObservation, BridgeSourceObservationFields, ChainId,
|
|
6
|
-
} from '@xyo-network/xl1-protocol'
|
|
4
|
+
import type { BridgeSourceObservation, BridgeSourceObservationFields } from '@xyo-network/xl1-protocol'
|
|
7
5
|
import {
|
|
8
6
|
BridgeIntentFieldsZod,
|
|
9
7
|
BridgeIntentSchema,
|
|
@@ -17,9 +15,6 @@ import { requestHandlerValidator } from '../../middleware/index.ts'
|
|
|
17
15
|
import { ChainIdPathParam } from '../pathParams/index.ts'
|
|
18
16
|
import type { RouteDefinition } from '../routeDefinition.ts'
|
|
19
17
|
|
|
20
|
-
// TODO: Replace with actual chain logic / contract integration
|
|
21
|
-
const remoteChainId: ChainId = toAddress('0x01')
|
|
22
|
-
|
|
23
18
|
const params = z.object({ chainId: ChainIdPathParam })
|
|
24
19
|
const body = z.tuple([
|
|
25
20
|
// TODO: TransactionBoundWitness
|
|
@@ -39,7 +34,7 @@ export const bridgeToRemote: RouteDefinition = {
|
|
|
39
34
|
path: '/bridge/chains/:chainId/bridgeToRemote',
|
|
40
35
|
handlers: validateRequest(async (req, res) => {
|
|
41
36
|
const { body } = req
|
|
42
|
-
const [bridgeIntent
|
|
37
|
+
const [bridgeIntent] = body
|
|
43
38
|
// TODO: Execute bridge transaction on-chain
|
|
44
39
|
const srcConfirmation = await Promise.resolve(asHash('0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'))
|
|
45
40
|
|