UNPKG

1.05 kBJavaScriptView Raw
1/*
2 Copyright © 2018 Andrew Powell
3
4 This Source Code Form is subject to the terms of the Mozilla Public
5 License, v. 2.0. If a copy of the MPL was not distributed with this
6 file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
8 The above copyright notice and this permission notice shall be
9 included in all copies or substantial portions of this Source Code Form.
10*/
11const defer = require('p-defer');
12const WebSocket = require('ws');
13
14const socketServer = new WebSocket.Server({ noServer: true });
15
16/* eslint-disable no-param-reassign */
17const middleware = async (ctx, next) => {
18 const deferred = defer();
19 const { upgrade = '' } = ctx.request.headers;
20 const upgradable = upgrade
21 .split(',')
22 .map((header) => header.trim())
23 .includes('websocket');
24
25 if (upgradable) {
26 ctx.ws = async () => {
27 socketServer.handleUpgrade(ctx.req, ctx.request.socket, Buffer.alloc(0), deferred.resolve);
28 ctx.respond = false;
29
30 return deferred.promise;
31 };
32 }
33
34 await next();
35};
36
37module.exports = { middleware };