From d7e23f903d56984c19f86f60b444ca660da4746f Mon Sep 17 00:00:00 2001 From: Alexander Betaev Date: Thu, 21 Apr 2022 20:47:47 -0500 Subject: [PATCH] feat: pass through middleware config, noDefaultRoute option --- .../src/index.ts | 18 ++++++---- .../test/sig-server.ts | 33 +++++++++++++++++++ .../tsconfig.json | 3 +- packages/webrtc-star-transport/.aegir.js | 1 + 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/packages/webrtc-star-signalling-server/src/index.ts b/packages/webrtc-star-signalling-server/src/index.ts index 080bec6b..6c0eeaf2 100644 --- a/packages/webrtc-star-signalling-server/src/index.ts +++ b/packages/webrtc-star-signalling-server/src/index.ts @@ -1,4 +1,5 @@ import { Server } from '@hapi/hapi' +import type { ServerOptions } from '@hapi/hapi' import Inert from '@hapi/inert' import { config } from './config.js' @@ -19,6 +20,8 @@ interface Options { host?: string metrics?: boolean refreshPeerListIntervalMS?: number + noDefaultRoute?: boolean + hapi?: ServerOptions } export interface SigServer extends Server { @@ -33,6 +36,7 @@ export async function sigServer (options: Options = {}) { const http: SigServer = Object.assign(new Server({ ...config.hapi.options, + ...options.hapi ?? {}, port, host }), { @@ -57,13 +61,15 @@ export async function sigServer (options: Options = {}) { log('signaling server has started on: ' + http.info.uri) - http.route({ - method: 'GET', - path: '/', - handler: (request, reply) => reply.file(path.join(currentDir, 'index.html'), { - confine: false + if (options.noDefaultRoute == null) { + http.route({ + method: 'GET', + path: '/', + handler: (_, reply) => reply.file(path.join(currentDir, 'index.html'), { + confine: false + }) }) - }) + } if (options.metrics === true) { log('enabling metrics') diff --git a/packages/webrtc-star-signalling-server/test/sig-server.ts b/packages/webrtc-star-signalling-server/test/sig-server.ts index 9b7a6f5b..e1b90f87 100644 --- a/packages/webrtc-star-signalling-server/test/sig-server.ts +++ b/packages/webrtc-star-signalling-server/test/sig-server.ts @@ -6,6 +6,7 @@ import { SigServer, sigServer } from '../src/index.js' import pWaitFor from 'p-wait-for' import { pEvent } from 'p-event' import type { WebRTCStarSocket } from '@libp2p/webrtc-star-protocol' +import { get as httpGet } from 'http' export default (clientName: string, io: (url: string, opts: any) => WebRTCStarSocket, sioOptions: any) => { describe(`signalling ${clientName}`, () => { @@ -68,11 +69,34 @@ export default (clientName: string, io: (url: string, opts: any) => WebRTCStarSo } const server = await sigServer(options) + const response = await fetch(`${server.info.uri}`) expect(server.info.port).to.equal(12345) expect(server.info.protocol).to.equal('http') expect(server.info.address).to.equal('0.0.0.0') + expect(response.status).to.equal(404) + + await server.stop() + }) + + it('start and stop signalling server (alternate default route)', async () => { + const options = { + noDefaultRoute: true + } + + const server = await sigServer(options) + server.route({ + method: 'GET', + path: '/', + handler: (_, reply) => reply.file('./src/index.html', { + confine: false + }) + }) + const response = await fetch(`${server.info.uri}/`) + + expect(response.status).to.equal(200) + await server.stop() }) @@ -224,3 +248,12 @@ export default (clientName: string, io: (url: string, opts: any) => WebRTCStarSo }) }) } + +async function fetch (url: string): Promise<{ status: number }> { + return await new Promise((resolve, reject) => { + httpGet(url, (res) => { + const { statusCode } = res + resolve({ status: statusCode ?? -1 }) + }).on('error', reject) + }) +} diff --git a/packages/webrtc-star-signalling-server/tsconfig.json b/packages/webrtc-star-signalling-server/tsconfig.json index 92fbbdf0..841bf0e8 100644 --- a/packages/webrtc-star-signalling-server/tsconfig.json +++ b/packages/webrtc-star-signalling-server/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "dist", "emitDeclarationOnly": false, - "module": "ES2020" + "module": "ES2020", + "moduleResolution": "node" }, "include": [ "src", diff --git a/packages/webrtc-star-transport/.aegir.js b/packages/webrtc-star-transport/.aegir.js index 352cc9a2..19484265 100644 --- a/packages/webrtc-star-transport/.aegir.js +++ b/packages/webrtc-star-transport/.aegir.js @@ -7,6 +7,7 @@ let firstRun = true /** @type {import('aegir').PartialOptions} */ export default { test: { + target: ["node", "browser", "electron-main"], async before () { const { sigServer } = await import('@libp2p/webrtc-star-signalling-server')