"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const models_1 = require("../models"); const crypto = require("crypto"); // import * as WebSocket from 'ws' const socketio = require("socket.io"); let io; // let srvr: any function connect(server) { // srvr = new WebSocket.Server({ server, clientTracking:true }) io = socketio(server, { handlePreflightRequest: (req, res) => { const headers = { "Access-Control-Allow-Headers": "Content-Type, Accept, x-user-token, X-Requested-With", "Access-Control-Allow-Origin": req.headers.origin, "Access-Control-Allow-Credentials": true }; res.writeHead(200, headers); res.end(); } }); io.use((socket, next) => __awaiter(this, void 0, void 0, function* () { let userToken = socket.handshake.headers['x-user-token']; const isValid = yield isValidToken(userToken); if (isValid) { return next(); } return next(new Error('authentication error')); })); io.on('connection', client => { console.log("=> [socket.io] connected!"); }); } exports.connect = connect; function isValidToken(token) { return __awaiter(this, void 0, void 0, function* () { if (!token) return false; const user = yield models_1.models.Contact.findOne({ where: { isOwner: true } }); const hashedToken = crypto.createHash('sha256').update(token).digest('base64'); if (user.authToken == null || user.authToken != hashedToken) { return false; // failed } return true; }); } exports.send = (body) => { if (io) io.sockets.emit('message', body); // if(srvr){ // srvr.clients.forEach(c=>{ // if(c) c.send(body) // }) // } }; exports.sendJson = (object) => { exports.send(JSON.stringify(object)); }; //# sourceMappingURL=socket.js.map