@brainstack/bridge-server
Advanced tools
Comparing version 2.0.5 to 2.0.6
@@ -0,1 +1,2 @@ | ||
/// <reference types="node" /> | ||
import { WebSocket } from "ws"; | ||
@@ -11,2 +12,2 @@ import { Logger } from "@brainstack/log"; | ||
} | ||
export type EventHandler = (data: any, socket: WebSocket) => void; | ||
export type EventHandler = (payload: Buffer, socket: WebSocket) => void; |
import { Logger } from '@brainstack/log'; | ||
import WebSocket from 'ws'; | ||
import { BridgeServerOptions, EventHandler } from './abstraction'; | ||
@@ -8,2 +9,3 @@ declare class BridgeServer { | ||
private eventHandlers; | ||
private uuidToSocket; | ||
logger: Logger; | ||
@@ -13,7 +15,8 @@ options: BridgeServerOptions; | ||
private setupListeners; | ||
private processMessage; | ||
private processPayload; | ||
on(event: string, handler: EventHandler): void; | ||
start(): void; | ||
emit(event: string, data: any): void; | ||
emitToUUID(uuid: string, event: string, data: any): void; | ||
attachSocket(uuid: string, socket: WebSocket): void; | ||
} | ||
export { BridgeServer }; |
@@ -29,9 +29,12 @@ "use strict"; | ||
const ws_1 = __importStar(require("ws")); | ||
const PORT = Number(process.env.PORT || 3000); | ||
const HOST = process.env.HOST || 'localhost'; | ||
class BridgeServer { | ||
constructor(options) { | ||
this.port = options.port || 3000; | ||
this.host = options.host || 'localhost'; | ||
this.port = PORT; | ||
this.host = HOST; | ||
this.options = options; | ||
this.logger = options.logger || (0, log_1.createLogger)(); | ||
this.eventHandlers = new Map(); | ||
this.uuidToSocket = new Map(); | ||
this.logger.verbose('BridgeServer initialized with options:', options); | ||
@@ -41,3 +44,2 @@ } | ||
var _a; | ||
this.logger.verbose('Setting up WebSocket server listeners'); | ||
(_a = this.wss) === null || _a === void 0 ? void 0 : _a.on('connection', (ws) => { | ||
@@ -47,5 +49,5 @@ var _a, _b; | ||
(_b = (_a = this.options).onConnection) === null || _b === void 0 ? void 0 : _b.call(_a, ws); | ||
ws.on('message', (message) => { | ||
this.logger.verbose('💬 Message Received:', message); | ||
this.processMessage(message, ws); | ||
ws.on('message', (payload) => { | ||
this.logger.verbose('💬 Payload Received:', payload.toString()); | ||
this.processPayload(payload, ws); | ||
}); | ||
@@ -64,19 +66,14 @@ ws.on('close', () => { | ||
} | ||
processMessage(message, socket) { | ||
this.logger.verbose('Processing received message'); | ||
let parsedMessage; | ||
processPayload(payloadBuffer, socket) { | ||
let parsedPayload; | ||
try { | ||
parsedMessage = JSON.parse(message); | ||
this.logger.verbose('Parsed message successfully:', parsedMessage); | ||
if (parsedMessage && parsedMessage.event) { | ||
this.logger.verbose('Handling message for event:', parsedMessage.event); | ||
const handlers = this.eventHandlers.get(parsedMessage.event); | ||
handlers === null || handlers === void 0 ? void 0 : handlers.forEach(handler => { | ||
this.logger.verbose('Executing handler for event:', parsedMessage.event); | ||
handler(parsedMessage.data, socket); | ||
}); | ||
const payloadString = payloadBuffer.toString(); | ||
parsedPayload = JSON.parse(payloadString); | ||
if (parsedPayload && parsedPayload.event) { | ||
const handlers = this.eventHandlers.get(parsedPayload.event); | ||
handlers === null || handlers === void 0 ? void 0 : handlers.forEach(handler => handler(parsedPayload.data, socket)); | ||
} | ||
} | ||
catch (error) { | ||
this.logger.error('Failed to parse message:', message, 'Error:', error); | ||
this.logger.error('Failed to parse payload:', payloadBuffer.toString(), 'Error:', error); | ||
} | ||
@@ -86,12 +83,8 @@ } | ||
var _a; | ||
this.logger.verbose(`Adding handler for event: ${event}`); | ||
if (!this.eventHandlers.has(event)) { | ||
this.eventHandlers.set(event, []); | ||
this.logger.verbose(`Created new handler array for event: ${event}`); | ||
} | ||
(_a = this.eventHandlers.get(event)) === null || _a === void 0 ? void 0 : _a.push(handler); | ||
this.logger.verbose(`Handler added for event: ${event}`); | ||
} | ||
start() { | ||
this.logger.verbose('Starting WebSocket server'); | ||
this.wss = new ws_1.Server({ port: this.port, host: this.host }); | ||
@@ -101,13 +94,12 @@ this.setupListeners(); | ||
} | ||
emit(event, data) { | ||
var _a; | ||
this.logger.verbose(`Emitting event: ${event}`); | ||
(_a = this.wss) === null || _a === void 0 ? void 0 : _a.clients.forEach((client) => { | ||
if (client.readyState === ws_1.default.OPEN) { | ||
client.send(JSON.stringify({ event, data })); | ||
this.logger.verbose(`Emitted event: ${event} to clients`); | ||
} | ||
}); | ||
emitToUUID(uuid, event, data) { | ||
const socket = this.uuidToSocket.get(uuid); | ||
if (socket && socket.readyState === ws_1.default.OPEN) { | ||
socket.send(JSON.stringify({ event, data })); | ||
} | ||
} | ||
attachSocket(uuid, socket) { | ||
this.uuidToSocket.set(uuid, socket); | ||
} | ||
} | ||
exports.BridgeServer = BridgeServer; |
{ | ||
"name": "@brainstack/bridge-server", | ||
"version": "2.0.5", | ||
"version": "2.0.6", | ||
"description": "Brainstack Bridge Server", | ||
@@ -31,7 +31,7 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@brainstack/hub": "^1.1.54", | ||
"@brainstack/log": "^1.1.57", | ||
"@brainstack/hub": "^1.1.55", | ||
"@brainstack/log": "^1.1.58", | ||
"ws": "^8.13.0" | ||
}, | ||
"gitHead": "c7747b3db1369e5901cdc336bc2ffb43b65b7e35" | ||
"gitHead": "02bc55f43fe26fcfaf23478a9fdb52807189808b" | ||
} |
@@ -14,2 +14,2 @@ import { WebSocket, Server } from "ws"; | ||
export type EventHandler = (data: any, socket: WebSocket) => void | ||
export type EventHandler = (payload: Buffer, socket: WebSocket) => void |
import { createLogger, Logger } from '@brainstack/log'; | ||
import WebSocket, { Server as WebSocketServer } from 'ws'; | ||
import { BridgeServerOptions, EventHandler } from './abstraction'; | ||
import WebSocket, { Server as WebSocketServer } from 'ws'; | ||
const PORT = Number(process.env.PORT || 3000); | ||
const HOST = process.env.HOST || 'localhost'; | ||
class BridgeServer { | ||
@@ -10,2 +13,3 @@ private port: number; | ||
private eventHandlers: Map<string, EventHandler[]>; | ||
private uuidToSocket: Map<string, WebSocket>; | ||
public logger: Logger; | ||
@@ -15,7 +19,8 @@ options: BridgeServerOptions; | ||
constructor(options: BridgeServerOptions) { | ||
this.port = options.port || 3000; | ||
this.host = options.host || 'localhost'; | ||
this.port = PORT; | ||
this.host = HOST; | ||
this.options = options; | ||
this.logger = options.logger || createLogger(); | ||
this.eventHandlers = new Map(); | ||
this.uuidToSocket = new Map(); | ||
@@ -26,3 +31,2 @@ this.logger.verbose('BridgeServer initialized with options:', options); | ||
private setupListeners(): void { | ||
this.logger.verbose('Setting up WebSocket server listeners'); | ||
this.wss?.on('connection', (ws: WebSocket) => { | ||
@@ -32,5 +36,5 @@ this.logger.verbose('🔗 Client connected'); | ||
ws.on('message', (message: string) => { | ||
this.logger.verbose('💬 Message Received:', message); | ||
this.processMessage(message, ws); | ||
ws.on('message', (payload: Buffer) => { | ||
this.logger.verbose('💬 Payload Received:', payload.toString()); | ||
this.processPayload(payload, ws); | ||
}); | ||
@@ -50,19 +54,14 @@ | ||
private processMessage(message: string, socket: WebSocket): void { | ||
this.logger.verbose('Processing received message'); | ||
let parsedMessage; | ||
private processPayload(payloadBuffer: Buffer, socket: WebSocket): void { | ||
let parsedPayload; | ||
try { | ||
parsedMessage = JSON.parse(message); | ||
this.logger.verbose('Parsed message successfully:', parsedMessage); | ||
const payloadString = payloadBuffer.toString(); | ||
parsedPayload = JSON.parse(payloadString); | ||
if (parsedMessage && parsedMessage.event) { | ||
this.logger.verbose('Handling message for event:', parsedMessage.event); | ||
const handlers = this.eventHandlers.get(parsedMessage.event); | ||
handlers?.forEach(handler => { | ||
this.logger.verbose('Executing handler for event:', parsedMessage.event); | ||
handler(parsedMessage.data, socket); | ||
}); | ||
if (parsedPayload && parsedPayload.event) { | ||
const handlers = this.eventHandlers.get(parsedPayload.event); | ||
handlers?.forEach(handler => handler(parsedPayload.data, socket)); | ||
} | ||
} catch (error) { | ||
this.logger.error('Failed to parse message:', message, 'Error:', error); | ||
this.logger.error('Failed to parse payload:', payloadBuffer.toString(), 'Error:', error); | ||
} | ||
@@ -72,13 +71,9 @@ } | ||
public on(event: string, handler: EventHandler): void { | ||
this.logger.verbose(`Adding handler for event: ${event}`); | ||
if (!this.eventHandlers.has(event)) { | ||
this.eventHandlers.set(event, []); | ||
this.logger.verbose(`Created new handler array for event: ${event}`); | ||
} | ||
this.eventHandlers.get(event)?.push(handler); | ||
this.logger.verbose(`Handler added for event: ${event}`); | ||
} | ||
public start(): void { | ||
this.logger.verbose('Starting WebSocket server'); | ||
this.wss = new WebSocketServer({ port: this.port, host: this.host }); | ||
@@ -89,13 +84,14 @@ this.setupListeners(); | ||
public emit(event: string, data: any): void { | ||
this.logger.verbose(`Emitting event: ${event}`); | ||
this.wss?.clients.forEach((client) => { | ||
if (client.readyState === WebSocket.OPEN) { | ||
client.send(JSON.stringify({ event, data })); | ||
this.logger.verbose(`Emitted event: ${event} to clients`); | ||
} | ||
}); | ||
public emitToUUID(uuid: string, event: string, data: any): void { | ||
const socket = this.uuidToSocket.get(uuid); | ||
if (socket && socket.readyState === WebSocket.OPEN) { | ||
socket.send(JSON.stringify({ event, data })); | ||
} | ||
} | ||
public attachSocket(uuid: string, socket: WebSocket): void { | ||
this.uuidToSocket.set(uuid, socket); | ||
} | ||
} | ||
export { BridgeServer }; |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
136763
24
412
3
Updated@brainstack/hub@^1.1.55
Updated@brainstack/log@^1.1.58