diff --git a/src/server/socket.ts b/src/server/socket.ts index 64d7d0e..9305bc4 100644 --- a/src/server/socket.ts +++ b/src/server/socket.ts @@ -1,13 +1,11 @@ 'use strict' import _debug from 'debug' import map from 'lodash/map' -import { Socket, Server } from 'socket.io' +import { ServerSocket, TypedIO } from '../shared' const debug = _debug('peercalls:socket') -type SocketWithRoom = Socket & { room?: string } - -export default function handleSocket(socket: SocketWithRoom, io: Server) { +export default function handleSocket(socket: ServerSocket, io: TypedIO) { socket.on('signal', payload => { // debug('signal: %s, payload: %o', socket.id, payload) io.to(payload.userId).emit('signal', { diff --git a/src/shared/SocketEvent.ts b/src/shared/SocketEvent.ts new file mode 100644 index 0000000..1014233 --- /dev/null +++ b/src/shared/SocketEvent.ts @@ -0,0 +1,28 @@ +import { TypedEmitter, TypedEmitterKeys } from './TypedEmitter' + +export interface User { + id: string +} + +export interface SocketEvent { + users: { + initiator: string + users: User[] + } + signal: { + userId: string + signal: unknown + } + connect: void + disconnect: void + ready: string +} + +export type ServerSocket = + Omit & + TypedEmitter & + { room?: string } + +export type TypedIO = SocketIO.Server & { + to(roomName: string): TypedEmitter +} diff --git a/src/shared/TypedEmitter.ts b/src/shared/TypedEmitter.ts index 6dd7acb..f761220 100644 --- a/src/shared/TypedEmitter.ts +++ b/src/shared/TypedEmitter.ts @@ -5,6 +5,14 @@ type Callback = (a: A) => void // eslint-disable-next-line type Events = Record +export type TypedEmitterKeys = + 'addListener' | + 'removeListener' | + 'on' | + 'once' | + 'off' | + 'emit' + export interface TypedEmitter extends EventEmitter { addListener(t: K, callback: Callback): this diff --git a/src/shared/index.ts b/src/shared/index.ts new file mode 100644 index 0000000..231f83e --- /dev/null +++ b/src/shared/index.ts @@ -0,0 +1,2 @@ +export * from './SocketEvent' +export * from './TypedEmitter'