diff --git a/package-lock.json b/package-lock.json index 7abed736..698174b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@ethereumjs/util": "9.0.2", "@ethersproject/bignumber": "5.7.0", "@hapi/sntp": "4.0.0", + "@shardeum-foundation/api-specs": "^1.0.1", "@shardeum-foundation/lib-archiver-discovery": "1.3.0", "@shardeum-foundation/lib-crypto-utils": "4.3.0", "@shardeum-foundation/lib-types": "1.4.0", @@ -1683,6 +1684,14 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@shardeum-foundation/api-specs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@shardeum-foundation/api-specs/-/api-specs-1.0.1.tgz", + "integrity": "sha512-0Fgp97cnjAH4R0drjXNh5vpxtobZRfFCcqqt2KyYxLANqVHcGvTrtQhR5MAwaU5zeN3c/KGFTdXcjRJq4A7Qmw==", + "engines": { + "node": "^18.20 || ^20.17 || >=22" + } + }, "node_modules/@shardeum-foundation/lib-archiver-discovery": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@shardeum-foundation/lib-archiver-discovery/-/lib-archiver-discovery-1.3.0.tgz", diff --git a/package.json b/package.json index 40a78922..6afde984 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@ethereumjs/util": "9.0.2", "@ethersproject/bignumber": "5.7.0", "@hapi/sntp": "4.0.0", + "@shardeum-foundation/api-specs": "^1.0.1", "axios": "1.6.1", "better-sqlite3": "7.6.2", "body-parser": "1.19.0", diff --git a/src/methods/rpcDiscover.ts b/src/methods/rpcDiscover.ts new file mode 100644 index 00000000..23fcd79e --- /dev/null +++ b/src/methods/rpcDiscover.ts @@ -0,0 +1,7 @@ +import ShardeumOpenRPCDocument from "@shardeum-foundation/api-specs" + +const rpcDiscover = async (): Promise => { + return ShardeumOpenRPCDocument +} + +export default rpcDiscover diff --git a/src/middlewares/methodWhitelist.ts b/src/middlewares/methodWhitelist.ts index ff7479e2..749a6e66 100644 --- a/src/middlewares/methodWhitelist.ts +++ b/src/middlewares/methodWhitelist.ts @@ -1,7 +1,7 @@ import { Request, Response, NextFunction } from 'express' import { methods } from '../api' -const allowedMethods = Object.keys(methods) +const allowedMethods = [...Object.keys(methods), 'rpc.discover'] export const methodWhitelist = (req: Request, res: Response, next: NextFunction) => { const body = req.body diff --git a/src/server.ts b/src/server.ts index 6de054a7..35347dfa 100644 --- a/src/server.ts +++ b/src/server.ts @@ -35,7 +35,7 @@ import { rateLimitMiddleware } from './middlewares/rateLimit' import requestLogger from './middlewares/requestLogger' import { loadFoundationNodes } from './utils/foundationNodes' import { setupNewHeadSubscriptionProviderConnectionStream } from './websocket/newhead_server' - +import rpcDiscover from './methods/rpcDiscover' setDefaultResultOrder('ipv4first') // const path = require('path'); @@ -51,6 +51,13 @@ setDefaultResultOrder('ipv4first') // } const app = express() const server = new jayson.Server(wrappedMethods) +server._methods['rpc.discover'] = new jayson.Method((_args: unknown, done: jayson.JSONRPCCallbackTypePlain) => { + rpcDiscover().then((res) => { + done(null, res) + }).catch((err) => { + done(err, null) + }) +}); let port = config.port //8080 const chainId = config.chainId //8080 const verbose = config.verbose