From 50ba08ed0ba520f42ac8719bf77dbafb5c454472 Mon Sep 17 00:00:00 2001 From: Zachary Belford Date: Wed, 15 May 2019 16:01:52 -0700 Subject: [PATCH] fix: middleware was not workingg --- package.json | 6 +++--- src/server.ts | 26 +++++++++++++++++++++++++- src/transports/http.ts | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0a88563d..7c492e14 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,16 @@ "type": "git", "url": "https://github.com/open-rpc/server-js.git" }, - "main": "./build/index.js", + "main": "./build/src/index.js", "bin": { - "open-rpc-server-js": "./build/cli.js" + "open-rpc-server-js": "./build/src/cli.js" }, "files": [ "build", ".node-version" ], "scripts": { - "start": "./build/cli.js", + "start": "./build/src/cli.js", "test": "jest --coverage", "build": "tsc", "watch:build": "tsc --watch", diff --git a/src/server.ts b/src/server.ts index 9a39b836..323233d0 100644 --- a/src/server.ts +++ b/src/server.ts @@ -2,6 +2,13 @@ import { Router, IMethodMapping } from "./router"; import { OpenRPC } from "@open-rpc/meta-schema"; import Transports, { TTransportOptions, TTransportClasses, TTransportNames } from "./transports"; +import cors from "cors"; +import { json as jsonParser } from "body-parser"; +import { HandleFunction } from "connect"; +import { THTTPServerTransportOptions } from "./transports/http"; +import { THTTPSServerTransportOptions } from "./transports/https"; +import { TWebSocketServerTransportOptions } from "./transports/websocket"; + interface ITransportConfig { type: TTransportNames; options: TTransportOptions; @@ -23,7 +30,24 @@ export default class Server { constructor(private options: IServerOptions) { this.addRouter(options.openrpcDocument, options.methodMapping as IMethodMapping); - options.transportConfigs.forEach((transportConfig) => { + + const defaultCorsOptions = { origin: "*" } as cors.CorsOptions; + const transportConfigs = options.transportConfigs.map((transportConfig) => { + if (["HTTPTransport", "HTTPSTransport", "WebSocketTransport"].includes(transportConfig.type)) { + const transportOptions = transportConfig.options as THTTPServerTransportOptions | + THTTPSServerTransportOptions | + TWebSocketServerTransportOptions; + + transportOptions.middleware = [ + cors(defaultCorsOptions) as HandleFunction, + jsonParser(), + ...transportOptions.middleware, + ]; + } + return transportConfig; + }); + + transportConfigs.forEach((transportConfig) => { this.addTransport(transportConfig.type, transportConfig.options); }); } diff --git a/src/transports/http.ts b/src/transports/http.ts index 1e8aabca..69c9e5f1 100644 --- a/src/transports/http.ts +++ b/src/transports/http.ts @@ -28,6 +28,7 @@ export default class HTTPServerTransport extends ServerTransport { } private async httpRouterHandler(req: any, res: any) { + console.log(req, res.body); //tslint:disable-line const result = await this.routerHandler(req.body.id, req.body.method, req.body.params); res.setHeader("Content-Type", "application/json"); res.end(JSON.stringify(result));