@xyo-network/chain-bridge 1.15.2 → 1.15.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/README.md +1 -1
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts +4 -4
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts.map +1 -1
- package/dist/node/driver/mongo/MongoMap.d.ts +3 -2
- package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -1
- package/dist/node/index.mjs +300 -683
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts +5 -3
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts.map +1 -1
- package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts +28 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/index.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts +2 -0
- package/dist/node/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts +36 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/index.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts +2 -0
- package/dist/node/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/Observer.d.ts +1 -1
- package/dist/node/interface/service/Observer/Observer.d.ts.map +1 -1
- package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.d.ts +1 -1
- package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.d.ts +1 -1
- package/dist/node/interface/service/Relay/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/ChainBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts +57 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts +2 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts +2 -0
- package/dist/node/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Relay/index.d.ts +2 -0
- package/dist/node/interface/service/Relay/index.d.ts.map +1 -0
- package/dist/node/interface/service/index.d.ts +1 -1
- package/dist/node/interface/service/index.d.ts.map +1 -1
- package/dist/node/manifest/getLocator.d.ts.map +1 -1
- package/dist/node/manifest/public/index.d.ts +6 -2
- package/dist/node/manifest/public/index.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +1 -2
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts +3 -0
- package/dist/node/server/routes/bridge/addBridgeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/middleware/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/middleware/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts +32 -0
- package/dist/node/server/routes/bridge/middleware/requestHandlerValidator.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/getRouteDefinitions.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/routeDefinitions/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts +6 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts +2 -0
- package/dist/node/server/routes/bridge/routeDefinitions/pathParams/index.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts +8 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routeDefinition.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +3 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts +5 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/get.d.ts +2 -1
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -1
- package/dist/node/server/routes/index.d.ts +0 -1
- package/dist/node/server/routes/index.d.ts.map +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +62 -55
- package/src/driver/indexer/ChainHydratedBlocksObservable.ts +5 -5
- package/src/driver/indexer/spec/ChainBlocksObservable.spec.ts +6 -3
- package/src/driver/indexer/spec/ChainHydratedBlocksObservable.spec.ts +10 -4
- package/src/driver/mongo/MongoMap.ts +13 -3
- package/src/interface/interface/IntentIndexerInterface.ts +5 -4
- package/src/interface/service/Observer/ERC20TransferObserver/ERC20TransferObserver.ts +181 -0
- package/src/interface/service/Observer/ERC20TransferObserver/index.ts +1 -0
- package/src/interface/service/Observer/ERC20TransferObserver/spec/ERC20TransferObserver.spec.ts +271 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/LiquidityPoolBridgeObserver.ts +212 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/index.ts +1 -0
- package/src/interface/service/Observer/LiquidityPoolBridgeObserver/spec/LiquidityPoolBridgeObserver.spec.ts +313 -0
- package/src/interface/service/Observer/Observer.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayInterface.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/ChainBridgeRelayService.ts +1 -1
- package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.ts +7 -5
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/LiquidityPoolBridgeRelay.ts +227 -0
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/index.ts +1 -0
- package/src/interface/service/Relay/LiquidityPoolBridgeRelay/spec/LiquidityPoolBridgeRelay.spec.ts +237 -0
- package/src/interface/service/Relay/index.ts +1 -0
- package/src/interface/service/index.ts +1 -1
- package/src/manifest/getLocator.ts +7 -6
- package/src/manifest/node.json +1 -1
- package/src/manifest/public/Chain.json +3 -109
- package/src/manifest/public/Ethereum.json +88 -0
- package/src/manifest/public/XL1.json +88 -0
- package/src/manifest/public/index.ts +15 -6
- package/src/server/app.ts +5 -12
- package/src/server/routes/addRoutes.ts +2 -6
- package/src/server/routes/bridge/addBridgeRoutes.ts +10 -0
- package/src/server/routes/bridge/index.ts +1 -0
- package/src/server/routes/bridge/middleware/index.ts +1 -0
- package/src/server/routes/bridge/middleware/requestHandlerValidator.ts +120 -0
- package/src/server/routes/bridge/routeDefinitions/getRouteDefinitions.ts +13 -0
- package/src/server/routes/bridge/routeDefinitions/index.ts +1 -0
- package/src/server/routes/bridge/routeDefinitions/pathParams/ChainIdPathParam.ts +18 -0
- package/src/server/routes/bridge/routeDefinitions/pathParams/index.ts +1 -0
- package/src/server/routes/bridge/routeDefinitions/routeDefinition.ts +18 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeFromRemoteStatus.ts +55 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +58 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +83 -0
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +55 -0
- package/src/server/routes/bridge/routeDefinitions/routes/index.ts +4 -0
- package/src/server/routes/healthz/get.ts +1 -1
- package/src/server/routes/index.ts +0 -2
- package/src/server/server.ts +11 -14
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts.map +0 -1
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/index.d.ts +0 -2
- package/dist/node/server/routes/rpc/index.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +0 -3
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +0 -1
- package/dist/node/server/routes/rpc/routes/index.d.ts +0 -2
- package/dist/node/server/routes/rpc/routes/index.d.ts.map +0 -1
- package/src/manifest/public/Pending.json +0 -35
- package/src/server/routes/rpc/index.ts +0 -1
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +0 -22
- package/src/server/routes/rpc/routes/index.ts +0 -1
- /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.d.ts +0 -0
- /package/dist/node/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/spec/ChainBridgeRelayService.spec.d.ts +0 -0
- /package/src/interface/service/{ChainBridgeRelay → Relay/ChainBridgeRelay}/index.ts +0 -0
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { Express } from 'express'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { addDataLakeRoutes } from './dataLake/index.ts'
|
|
5
|
-
import { addRpcRoutes } from './rpc/index.ts'
|
|
3
|
+
import { addBridgeRoutes } from './bridge/index.ts'
|
|
6
4
|
|
|
7
5
|
export const addRoutes = (app: Express) => {
|
|
8
|
-
|
|
9
|
-
addDataLakeRoutes(app)
|
|
10
|
-
addNodeRoutes(app)
|
|
6
|
+
addBridgeRoutes(app)
|
|
11
7
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Express } from 'express'
|
|
2
|
+
|
|
3
|
+
import { getRouteDefinitions } from './routeDefinitions/index.ts'
|
|
4
|
+
|
|
5
|
+
export const addBridgeRoutes = (app: Express) => {
|
|
6
|
+
const routeDefinitions = getRouteDefinitions()
|
|
7
|
+
for (const definition of routeDefinitions) {
|
|
8
|
+
app[definition.method](definition.path, definition.handlers)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './addBridgeRoutes.ts'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './requestHandlerValidator.ts'
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import type { ExpressError } from '@xylabs/express'
|
|
3
|
+
import { isPromise } from '@xylabs/typeof'
|
|
4
|
+
import type {
|
|
5
|
+
NextFunction, Request, RequestHandler, Response,
|
|
6
|
+
} from 'express'
|
|
7
|
+
import { ReasonPhrases, StatusCodes } from 'http-status-codes'
|
|
8
|
+
import type { ZodType } from 'zod'
|
|
9
|
+
import { z } from 'zod'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Empty Zod schema for requests with no parameters.
|
|
13
|
+
*/
|
|
14
|
+
export const EmptyParamsZod = z.object({}).catchall(z.string())
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Empty Zod schema for requests with no query parameters.
|
|
18
|
+
*/
|
|
19
|
+
export const EmptyQueryParamsZod = z.object({}).catchall(z.union([z.string(), z.array(z.string())]))
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Default validation schemas for request handler validator.
|
|
23
|
+
*/
|
|
24
|
+
export const ValidateRequestDefaults = {
|
|
25
|
+
params: EmptyParamsZod,
|
|
26
|
+
query: EmptyQueryParamsZod,
|
|
27
|
+
body: z.json(),
|
|
28
|
+
response: z.json(),
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type ValidatableRequestKey = 'params' | 'query' | 'body'
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Factory for Express middleware that validates request and response objects using Zod schemas.
|
|
35
|
+
* @param schemas The Zod schemas to use for validation.
|
|
36
|
+
* @returns A middleware function for validating requests and responses.
|
|
37
|
+
*/
|
|
38
|
+
export function requestHandlerValidator<
|
|
39
|
+
TParams extends typeof EmptyQueryParamsZod | ZodType<Record<string, string>> = typeof EmptyQueryParamsZod,
|
|
40
|
+
TQuery extends typeof EmptyQueryParamsZod | ZodType<Record<string, string | string[]>> = typeof EmptyQueryParamsZod,
|
|
41
|
+
TBody extends ZodType<unknown> = ZodType<unknown>,
|
|
42
|
+
TResponse extends ZodType<unknown> = ZodType<unknown>,
|
|
43
|
+
>(schemas?: Partial<{
|
|
44
|
+
body: TBody
|
|
45
|
+
params: TParams
|
|
46
|
+
query: TQuery
|
|
47
|
+
response: TResponse
|
|
48
|
+
}>) {
|
|
49
|
+
type Params = z.infer<TParams>
|
|
50
|
+
type Query = z.infer<TQuery>
|
|
51
|
+
type Body = z.infer<TBody>
|
|
52
|
+
type Res = z.infer<TResponse>
|
|
53
|
+
const validators = { ...ValidateRequestDefaults, ...schemas }
|
|
54
|
+
|
|
55
|
+
return (handler: (req: Request<Params, Res, Body, Query>, res: Response<Res>, next: NextFunction) => unknown): RequestHandler => {
|
|
56
|
+
return async (req: Request, res: Response, next: NextFunction) => {
|
|
57
|
+
const originalJson = res.json.bind(res)
|
|
58
|
+
try {
|
|
59
|
+
// Validate incoming request
|
|
60
|
+
const errors: string[] = []
|
|
61
|
+
const keys: ValidatableRequestKey[] = ['params', 'query', 'body']
|
|
62
|
+
for (const key of keys) {
|
|
63
|
+
const validator = validators[key]
|
|
64
|
+
const result = validator.safeParse(req[key])
|
|
65
|
+
if (result.success) {
|
|
66
|
+
Object.assign(req[key], result.data)
|
|
67
|
+
} else {
|
|
68
|
+
errors.push(
|
|
69
|
+
...result.error.issues.map(
|
|
70
|
+
issue => (issue.path.length === 0)
|
|
71
|
+
? `${key}: ${issue.message}`
|
|
72
|
+
: `${key}.${issue.path.join('.')}: ${issue.message}`,
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// If there were validation errors, short-circuit and return Bad Request
|
|
79
|
+
if (errors.length > 0) {
|
|
80
|
+
const message = errors.join('; ')
|
|
81
|
+
const err: ExpressError = new Error(message)
|
|
82
|
+
err.name = ReasonPhrases.BAD_REQUEST
|
|
83
|
+
err.statusCode = StatusCodes.BAD_REQUEST
|
|
84
|
+
next(err)
|
|
85
|
+
return false
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Wrap res.json to validate outgoing response
|
|
89
|
+
res.json = (data: any) => {
|
|
90
|
+
const result = validators.response.safeParse(data)
|
|
91
|
+
if (result.success) {
|
|
92
|
+
return originalJson(result.data)
|
|
93
|
+
} else {
|
|
94
|
+
const message = result.error.issues.map(
|
|
95
|
+
issue => (issue.path.length === 0)
|
|
96
|
+
? `response: ${issue.message}`
|
|
97
|
+
: `response.${issue.path.join('.')}: ${issue.message}`,
|
|
98
|
+
).join('; ')
|
|
99
|
+
const err: ExpressError = new Error(message)
|
|
100
|
+
err.name = ReasonPhrases.INTERNAL_SERVER_ERROR
|
|
101
|
+
err.statusCode = StatusCodes.INTERNAL_SERVER_ERROR
|
|
102
|
+
|
|
103
|
+
// Restore original json function in case the error handler wants to use it
|
|
104
|
+
res.json = originalJson
|
|
105
|
+
throw err
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Automatically handle async errors
|
|
110
|
+
const result = handler(req as any, res as any, next)
|
|
111
|
+
if (result && isPromise(result)) {
|
|
112
|
+
await result
|
|
113
|
+
}
|
|
114
|
+
} catch (err) {
|
|
115
|
+
res.json = originalJson
|
|
116
|
+
next(err)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RouteDefinition } from './routeDefinition.ts'
|
|
2
|
+
import {
|
|
3
|
+
bridgeFromRemoteStatus, bridgeToRemote, bridgeToRemoteEstimate, bridgeToRemoteStatus,
|
|
4
|
+
} from './routes/index.ts'
|
|
5
|
+
|
|
6
|
+
export const getRouteDefinitions = (): RouteDefinition[] => {
|
|
7
|
+
return [
|
|
8
|
+
bridgeFromRemoteStatus,
|
|
9
|
+
bridgeToRemote,
|
|
10
|
+
bridgeToRemoteEstimate,
|
|
11
|
+
bridgeToRemoteStatus,
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getRouteDefinitions.ts'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hexFromHexString, HexZod, isAddress, toAddress,
|
|
3
|
+
} from '@xylabs/hex'
|
|
4
|
+
import { isUndefined } from '@xylabs/typeof'
|
|
5
|
+
import type { ChainId } from '@xyo-network/xl1-protocol'
|
|
6
|
+
|
|
7
|
+
const remoteChainId: ChainId = toAddress('0x01')
|
|
8
|
+
|
|
9
|
+
export const ChainIdPathParam = HexZod.refine(
|
|
10
|
+
(val) => {
|
|
11
|
+
const chainIdHex = hexFromHexString(val, { prefix: true })
|
|
12
|
+
if (isAddress(chainIdHex)) return false
|
|
13
|
+
const suppliedChainId = toAddress(chainIdHex)
|
|
14
|
+
if (isUndefined(suppliedChainId)) return false
|
|
15
|
+
return suppliedChainId === remoteChainId
|
|
16
|
+
},
|
|
17
|
+
{ message: `Only ${remoteChainId} is supported` },
|
|
18
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChainIdPathParam.ts'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RequestHandler } from 'express'
|
|
2
|
+
|
|
3
|
+
export type HttpMethod
|
|
4
|
+
= | 'get'
|
|
5
|
+
| 'post'
|
|
6
|
+
| 'put'
|
|
7
|
+
| 'patch'
|
|
8
|
+
| 'delete'
|
|
9
|
+
| 'options'
|
|
10
|
+
| 'head'
|
|
11
|
+
|
|
12
|
+
export interface RouteDefinition<
|
|
13
|
+
H extends RequestHandler = RequestHandler,
|
|
14
|
+
> {
|
|
15
|
+
handlers: H[] | H
|
|
16
|
+
method: HttpMethod
|
|
17
|
+
path: string | RegExp
|
|
18
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { toAddress, toHex } from '@xylabs/hex'
|
|
2
|
+
import { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'
|
|
3
|
+
import type { BridgeDestinationObservation } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import {
|
|
5
|
+
BridgeDestinationObservationFieldsZod,
|
|
6
|
+
BridgeDestinationObservationSchema,
|
|
7
|
+
} from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
import { requestHandlerValidator } from '../../middleware/index.ts'
|
|
11
|
+
import { ChainIdPathParam } from '../pathParams/index.ts'
|
|
12
|
+
import type { RouteDefinition } from '../routeDefinition.ts'
|
|
13
|
+
|
|
14
|
+
const params = z.object({
|
|
15
|
+
chainId: ChainIdPathParam,
|
|
16
|
+
nonce: z.string(),
|
|
17
|
+
})
|
|
18
|
+
const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(
|
|
19
|
+
BridgeDestinationObservationFieldsZod.shape,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
const validateRequest = requestHandlerValidator({
|
|
23
|
+
params,
|
|
24
|
+
response,
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export const bridgeFromRemoteStatus: RouteDefinition = {
|
|
28
|
+
method: 'get',
|
|
29
|
+
path: '/bridge/chains/:chainId/bridgeFromRemote/status/:nonce',
|
|
30
|
+
handlers: validateRequest(async (req, res) => {
|
|
31
|
+
const { chainId } = req.params
|
|
32
|
+
const rand = await Promise.resolve(Math.random())
|
|
33
|
+
|
|
34
|
+
// TODO: Replace with actual lookup logic (e.g. database or chain query)
|
|
35
|
+
const found = rand > 0.5 // simulate lookup
|
|
36
|
+
if (!found) return res.sendStatus(404)
|
|
37
|
+
|
|
38
|
+
const confirmed = rand > 0.8 // simulate pending/confirmed
|
|
39
|
+
if (!confirmed) return res.sendStatus(204)
|
|
40
|
+
|
|
41
|
+
const observation: BridgeDestinationObservation = {
|
|
42
|
+
schema: BridgeDestinationObservationSchema,
|
|
43
|
+
dest: chainId,
|
|
44
|
+
destAddress: toAddress('0xabc'),
|
|
45
|
+
destAmount: toHex('0x100'),
|
|
46
|
+
destToken: toAddress('0xdef'),
|
|
47
|
+
src: toAddress('0x02'),
|
|
48
|
+
srcAddress: toAddress('0x123'),
|
|
49
|
+
srcAmount: toHex('0x200'),
|
|
50
|
+
srcToken: toHex('0x456'),
|
|
51
|
+
destConfirmation: toHex('0x9999'),
|
|
52
|
+
}
|
|
53
|
+
res.json(observation)
|
|
54
|
+
}),
|
|
55
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { asHash, toAddress } from '@xylabs/hex'
|
|
2
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
3
|
+
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'
|
|
4
|
+
import type {
|
|
5
|
+
BridgeSourceObservation, BridgeSourceObservationFields, ChainId,
|
|
6
|
+
} from '@xyo-network/xl1-protocol'
|
|
7
|
+
import {
|
|
8
|
+
BridgeIntentFieldsZod,
|
|
9
|
+
BridgeIntentSchema,
|
|
10
|
+
BridgeSourceObservationFieldsZod,
|
|
11
|
+
BridgeSourceObservationSchema,
|
|
12
|
+
TransferSchema,
|
|
13
|
+
} from '@xyo-network/xl1-protocol'
|
|
14
|
+
import { z } from 'zod'
|
|
15
|
+
|
|
16
|
+
import { requestHandlerValidator } from '../../middleware/index.ts'
|
|
17
|
+
import { ChainIdPathParam } from '../pathParams/index.ts'
|
|
18
|
+
import type { RouteDefinition } from '../routeDefinition.ts'
|
|
19
|
+
|
|
20
|
+
// TODO: Replace with actual chain logic / contract integration
|
|
21
|
+
const remoteChainId: ChainId = toAddress('0x01')
|
|
22
|
+
|
|
23
|
+
const params = z.object({ chainId: ChainIdPathParam })
|
|
24
|
+
const body = z.tuple([
|
|
25
|
+
// TODO: TransactionBoundWitness
|
|
26
|
+
PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),
|
|
27
|
+
PayloadZodLooseOfSchema(TransferSchema),
|
|
28
|
+
])
|
|
29
|
+
const response = PayloadZodStrictOfSchema(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape)
|
|
30
|
+
|
|
31
|
+
const validateRequest = requestHandlerValidator({
|
|
32
|
+
params,
|
|
33
|
+
body,
|
|
34
|
+
response,
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export const bridgeToRemote: RouteDefinition = {
|
|
38
|
+
method: 'post',
|
|
39
|
+
path: '/bridge/chains/:chainId/bridgeToRemote',
|
|
40
|
+
handlers: validateRequest(async (req, res) => {
|
|
41
|
+
const { body } = req
|
|
42
|
+
const [bridgeIntent, transfer] = body
|
|
43
|
+
// TODO: Execute bridge transaction on-chain
|
|
44
|
+
const srcConfirmation = await Promise.resolve(asHash('0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'))
|
|
45
|
+
|
|
46
|
+
// Extract common fields for BridgeSourceObservation from BridgeIntent
|
|
47
|
+
const bridgeCommonFieldsZod = z.object({}).extend(BridgeSourceObservationFieldsZod.shape)
|
|
48
|
+
const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent)
|
|
49
|
+
const bridgeObservationFields: BridgeSourceObservationFields = {
|
|
50
|
+
...bridgeCommonFields,
|
|
51
|
+
srcConfirmation,
|
|
52
|
+
}
|
|
53
|
+
const bridgeObservation: BridgeSourceObservation = new PayloadBuilder<BridgeSourceObservation>(
|
|
54
|
+
{ schema: BridgeSourceObservationSchema },
|
|
55
|
+
).fields(bridgeObservationFields).build()
|
|
56
|
+
res.json(bridgeObservation)
|
|
57
|
+
}),
|
|
58
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hexToBigInt, toAddress, toHex,
|
|
3
|
+
} from '@xylabs/hex'
|
|
4
|
+
import { createTransferPayload } from '@xyo-network/chain-protocol'
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
6
|
+
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'
|
|
7
|
+
import type {
|
|
8
|
+
BridgeIntent, BridgeIntentFields, ChainId, Transfer,
|
|
9
|
+
} from '@xyo-network/xl1-protocol'
|
|
10
|
+
import {
|
|
11
|
+
BridgeIntentFieldsZod, BridgeIntentSchema, TransferSchema,
|
|
12
|
+
} from '@xyo-network/xl1-protocol'
|
|
13
|
+
import { v4 } from 'uuid'
|
|
14
|
+
import { z } from 'zod'
|
|
15
|
+
|
|
16
|
+
import { requestHandlerValidator } from '../../middleware/index.ts'
|
|
17
|
+
import { ChainIdPathParam } from '../pathParams/index.ts'
|
|
18
|
+
import type { RouteDefinition } from '../routeDefinition.ts'
|
|
19
|
+
|
|
20
|
+
// TODO: Get from config
|
|
21
|
+
const TOKEN_ADDRESS = '0x5FbDB2315678afecb367f032d93F642f64180aa3'
|
|
22
|
+
const bridgeableTokenContract = toHex(TOKEN_ADDRESS)
|
|
23
|
+
const xl1ChainId: ChainId = toAddress('0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9')
|
|
24
|
+
const fixedFee: bigint = 1_000_000_000_000_000n
|
|
25
|
+
const percentFee: bigint = 5n // 0.5%
|
|
26
|
+
const bridgeEscrowAddress = toAddress('0x0a')
|
|
27
|
+
const bridgeFeesAddress = toAddress('0x0b')
|
|
28
|
+
const remoteChainId: ChainId = toHex('0x01')
|
|
29
|
+
|
|
30
|
+
const params = z.object({ chainId: ChainIdPathParam })
|
|
31
|
+
const body = BridgeIntentFieldsZod.pick({
|
|
32
|
+
destAddress: true,
|
|
33
|
+
srcAddress: true,
|
|
34
|
+
srcAmount: true,
|
|
35
|
+
})
|
|
36
|
+
const response = z.tuple([
|
|
37
|
+
PayloadZodStrictOfSchema(BridgeIntentSchema).extend(BridgeIntentFieldsZod.shape),
|
|
38
|
+
PayloadZodLooseOfSchema(TransferSchema),
|
|
39
|
+
])
|
|
40
|
+
const validateRequest = requestHandlerValidator({
|
|
41
|
+
params, body, response,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
export const bridgeToRemoteEstimate: RouteDefinition = {
|
|
45
|
+
method: 'post',
|
|
46
|
+
path: '/bridge/chains/:chainId/bridgeToRemote/estimate',
|
|
47
|
+
handlers: validateRequest((req, res) => {
|
|
48
|
+
const {
|
|
49
|
+
srcAddress, srcAmount, destAddress,
|
|
50
|
+
} = req.body
|
|
51
|
+
|
|
52
|
+
const srcAmountBigInt = hexToBigInt(srcAmount)
|
|
53
|
+
const feeAmount = fixedFee + ((srcAmountBigInt * percentFee) / 100n)
|
|
54
|
+
const destAmountBigInt = srcAmountBigInt > feeAmount ? srcAmountBigInt - feeAmount : 0n
|
|
55
|
+
const destAmount = toHex(destAmountBigInt)
|
|
56
|
+
const nonce = v4()
|
|
57
|
+
|
|
58
|
+
const sender = toAddress(srcAddress)
|
|
59
|
+
|
|
60
|
+
const bridgeIntentFields: BridgeIntentFields = {
|
|
61
|
+
// Source
|
|
62
|
+
src: xl1ChainId,
|
|
63
|
+
srcAddress,
|
|
64
|
+
srcAmount,
|
|
65
|
+
srcToken: xl1ChainId,
|
|
66
|
+
|
|
67
|
+
// Destination
|
|
68
|
+
dest: remoteChainId,
|
|
69
|
+
destAddress,
|
|
70
|
+
destAmount,
|
|
71
|
+
destToken: bridgeableTokenContract,
|
|
72
|
+
nonce,
|
|
73
|
+
}
|
|
74
|
+
const bridgeIntent: BridgeIntent = new PayloadBuilder<BridgeIntent>({ schema: BridgeIntentSchema }).fields(bridgeIntentFields).build()
|
|
75
|
+
|
|
76
|
+
const transfer: Transfer = createTransferPayload(sender, {
|
|
77
|
+
[bridgeEscrowAddress]: destAmountBigInt,
|
|
78
|
+
[bridgeFeesAddress]: feeAmount,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
res.json([bridgeIntent, transfer])
|
|
82
|
+
}),
|
|
83
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { toAddress, toHex } from '@xylabs/hex'
|
|
2
|
+
import { PayloadZodStrictOfSchema } from '@xyo-network/payload-model'
|
|
3
|
+
import type { BridgeDestinationObservation } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import {
|
|
5
|
+
BridgeDestinationObservationFieldsZod,
|
|
6
|
+
BridgeDestinationObservationSchema,
|
|
7
|
+
} from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
import { requestHandlerValidator } from '../../middleware/index.ts'
|
|
11
|
+
import { ChainIdPathParam } from '../pathParams/index.ts'
|
|
12
|
+
import type { RouteDefinition } from '../routeDefinition.ts'
|
|
13
|
+
|
|
14
|
+
const params = z.object({
|
|
15
|
+
chainId: ChainIdPathParam,
|
|
16
|
+
nonce: z.string(),
|
|
17
|
+
})
|
|
18
|
+
const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(
|
|
19
|
+
BridgeDestinationObservationFieldsZod.shape,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
const validateRequest = requestHandlerValidator({
|
|
23
|
+
params,
|
|
24
|
+
response,
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export const bridgeToRemoteStatus: RouteDefinition = {
|
|
28
|
+
method: 'get',
|
|
29
|
+
path: '/bridge/chains/:chainId/bridgeToRemote/status/:nonce',
|
|
30
|
+
handlers: validateRequest(async (req, res) => {
|
|
31
|
+
const { chainId } = req.params
|
|
32
|
+
const rand = await Promise.resolve(Math.random())
|
|
33
|
+
|
|
34
|
+
// TODO: Replace with actual lookup logic (e.g. database or chain query)
|
|
35
|
+
const found = rand > 0.5 // simulate lookup
|
|
36
|
+
if (!found) return res.sendStatus(404)
|
|
37
|
+
|
|
38
|
+
const confirmed = rand > 0.8 // simulate pending/confirmed
|
|
39
|
+
if (!confirmed) return res.sendStatus(204)
|
|
40
|
+
|
|
41
|
+
const observation: BridgeDestinationObservation = {
|
|
42
|
+
schema: BridgeDestinationObservationSchema,
|
|
43
|
+
dest: chainId,
|
|
44
|
+
destAddress: toAddress('0xabc'),
|
|
45
|
+
destAmount: toHex('0x100'),
|
|
46
|
+
destToken: toAddress('0xdef'),
|
|
47
|
+
src: toAddress('0x02'),
|
|
48
|
+
srcAddress: toAddress('0x123'),
|
|
49
|
+
srcAmount: toHex('0x200'),
|
|
50
|
+
srcToken: toHex('0x456'),
|
|
51
|
+
destConfirmation: toHex('0x9999'),
|
|
52
|
+
}
|
|
53
|
+
res.json(observation)
|
|
54
|
+
}),
|
|
55
|
+
}
|
package/src/server/server.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import type { Logger } from '@xylabs/logger'
|
|
3
|
-
import {
|
|
4
|
-
import { boot } from '@xyo-network/bios'
|
|
3
|
+
import { isString } from '@xylabs/typeof'
|
|
5
4
|
import type { BiosExternalInterface } from '@xyo-network/bios-model'
|
|
6
5
|
import type { NodeInstance } from '@xyo-network/node-model'
|
|
7
6
|
import { HDWallet } from '@xyo-network/wallet'
|
|
8
7
|
import { type Config } from '@xyo-network/xl1-protocol-sdk'
|
|
9
8
|
|
|
10
|
-
import { getNode } from '../manifest/index.ts'
|
|
11
9
|
import { getApp } from './app.ts'
|
|
12
10
|
|
|
13
11
|
const hostname = '::'
|
|
@@ -42,17 +40,16 @@ interface GetServerContext {
|
|
|
42
40
|
}
|
|
43
41
|
|
|
44
42
|
export const getServer = async (context: GetServerContext) => {
|
|
45
|
-
const {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const app = getApp(node ?? await getNode(nodeContext))
|
|
43
|
+
const { logger } = context
|
|
44
|
+
const { port } = context.config.bridge
|
|
45
|
+
await Promise.resolve() // bios booting is currently disabled
|
|
46
|
+
// const bios = await boot()
|
|
47
|
+
// const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)
|
|
48
|
+
// const wallet = await HDWallet.fromPhrase(seedPhrase)
|
|
49
|
+
// const nodeContext = {
|
|
50
|
+
// wallet, logger, config,
|
|
51
|
+
// }
|
|
52
|
+
const app = getApp()
|
|
56
53
|
const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))
|
|
57
54
|
server.setTimeout(20_000)
|
|
58
55
|
return server
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainBridgeRelayInterface.d.ts","sourceRoot":"","sources":["../../../../../src/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE3F,OAAO,KAAK,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAErG,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB,CAAC,YAAY,EAAE,4BAA4B,CAAC;CAAG;AAE1H,MAAM,WAAW,gBAAiB,SAAQ,0BAA0B,CAAC,YAAY,EAAE,4BAA4B,CAAC;CAAG;AAEnH,MAAM,WAAW,yBAA0B,SACzC,0BAA0B,CAAC,YAAY,EAAE,4BAA4B,CAAC,EACtE,yBAAyB,CAAC,YAAY,EAAE,4BAA4B,CAAC;CAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainBridgeRelayService.d.ts","sourceRoot":"","sources":["../../../../../src/interface/service/ChainBridgeRelay/ChainBridgeRelayService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE3F,OAAO,KAAK,EACV,4CAA4C,EAAE,4BAA4B,EAC1E,mBAAmB,EACnB,uCAAuC,EAAE,yBAAyB,EAAE,qCAAqC,EACzG,uCAAuC,EACxC,MAAM,0BAA0B,CAAA;AAEjC,qBAAa,uBAAuB,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CAC5F,SAAQ,sBAAsB,CAAC,OAAO,CAAE,YAAW,yBAAyB;IAC5E,SAAS,KAAK,OAAO,yDAEpB;IAED,SAAS,KAAK,uBAAuB,IAAI,4CAA4C,CAEpF;IAED,SAAS,KAAK,gBAAgB,IAAI,yBAAyB,CAE1D;IAED,SAAS,KAAK,eAAe,IAAI,qCAAqC,CAErE;IAED,SAAS,KAAK,gBAAgB,IAAI,uCAAuC,CAExE;IAED,SAAS,KAAK,oBAAoB,IAAI,4BAA4B,CAEjE;IAED,SAAS,KAAK,kBAAkB,IAAI,uCAAuC,CAE1E;IAED;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB9D;;;;OAIG;IACG,wBAAwB,CAAC,4BAA4B,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5G;;;;OAIG;IACG,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;CAqB1F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/interface/service/ChainBridgeRelay/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA"}
|
package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainBridgeRelayService.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/rpc/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,SAaxC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
3
|
-
"nodes": [
|
|
4
|
-
{
|
|
5
|
-
"config": {
|
|
6
|
-
"accountPath": "2",
|
|
7
|
-
"name": "Pending",
|
|
8
|
-
"schema": "network.xyo.node.config"
|
|
9
|
-
},
|
|
10
|
-
"modules": {
|
|
11
|
-
"private": [],
|
|
12
|
-
"public": [
|
|
13
|
-
{
|
|
14
|
-
"config": {
|
|
15
|
-
"accountPath": "2/1/2",
|
|
16
|
-
"name": "PendingTransactions",
|
|
17
|
-
"getCache": {
|
|
18
|
-
"enabled": true,
|
|
19
|
-
"maxEntries": 5000
|
|
20
|
-
},
|
|
21
|
-
"labels": {
|
|
22
|
-
"network.xyo.storage.class": "mongodb"
|
|
23
|
-
},
|
|
24
|
-
"payloadSdkConfig": {
|
|
25
|
-
"collection": "pending_bundles"
|
|
26
|
-
},
|
|
27
|
-
"schema": "network.xyo.archivist.config"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
|
-
"schema": "network.xyo.manifest"
|
|
35
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './routes/index.ts'
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { setRawResponseFormat } from '@xylabs/express'
|
|
2
|
-
import { NodeXyoViewer } from '@xyo-network/chain-rpc'
|
|
3
|
-
import {
|
|
4
|
-
NodeXyoRunner, rpcEngineFromConnection,
|
|
5
|
-
XyoBaseConnection,
|
|
6
|
-
} from '@xyo-network/xl1-rpc'
|
|
7
|
-
import type { Express } from 'express'
|
|
8
|
-
|
|
9
|
-
export const addRpcRoutes = (app: Express) => {
|
|
10
|
-
const { node } = app
|
|
11
|
-
const runner = new NodeXyoRunner(node)
|
|
12
|
-
const viewer = new NodeXyoViewer(node)
|
|
13
|
-
const connection = new XyoBaseConnection({ runner, viewer })
|
|
14
|
-
const engine = rpcEngineFromConnection(connection)
|
|
15
|
-
|
|
16
|
-
app.post('/rpc', (req, res) => {
|
|
17
|
-
setRawResponseFormat(res)
|
|
18
|
-
engine.handle(req.body, (_, rpcResponse) => {
|
|
19
|
-
res.json(rpcResponse)
|
|
20
|
-
})
|
|
21
|
-
})
|
|
22
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './addRpcRoutes.ts'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|