"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); //external imports const express = require("express"); const https = require("https"); const WebSocket = require("ws"); const fs = require("fs"); const jwt = require("jsonwebtoken"); const url = require("url"); //internal imports var routes = require('./routes'); var app = require('./config/app'); var privateKey = fs.readFileSync('certs/key.pem', 'utf8'); var certificate = fs.readFileSync('certs/cert.pem', 'utf8'); var options = { key: privateKey, cert: certificate, hostname: app.hostname }; const application = express(); const server = https.createServer(options, application); const wss = new WebSocket.Server({ noServer: true, maxPayload: 250000, host: app.hostname }); application.use(express.json()); application.use('', routes); wss.on('connection', (ws, request, args) => { console.log('client connected'); var data = JSON.parse(args).data; var ClientManager = require('./clientManager'); let clientManager = new ClientManager(data, ws); // ws.on('message', (message: string) => { // console.log('received: %s', message); // const broadcastRegex = /^broadcast\:/; // if (broadcastRegex.test(message)) { // message = message.replace(broadcastRegex, ''); // //send back the message to the other clients // wss.clients // .forEach(client => { // if (client != ws) { // client.send(`Hello, broadcast message -> ${message}`); // } // }); // } else { // ws.send(`Hello, you sent -> ${message}`); // } // }); ws.send('Hi there, welcome to braid, Measures Web Socket server.\nConnecting all our services!'); }); server.on('upgrade', function upgrade(request, socket, head) { return __awaiter(this, void 0, void 0, function* () { let args; try { args = yield verifyConnection(); } catch (e) { socket.destroy(); console.log('connection terminated.'); return; } function verifyConnection() { return new Promise((resolve, reject) => { var data = url.parse(request.url, true).query; var token = data["token"] || (app.environment == 'development' ? app.devToken : ''); var accepted = true; var result; jwt.verify(token, app.secret, app.signOptions, function (err, decoded) { if (err) { console.log(err); accepted = false; } result = JSON.stringify(decoded); accepted ? resolve(result) : reject('rejected'); }); }); } wss.handleUpgrade(request, socket, head, function done(ws) { wss.emit('connection', ws, request, args); }); }); }); server.listen(app.port, () => { console.log(`Braid v${app.version} is running!\n`); }); //# sourceMappingURL=server.js.map