-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathredis-io.adapter.ts
35 lines (31 loc) · 1014 Bytes
/
redis-io.adapter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { IoAdapter } from '@nestjs/websockets'
import { Server, Socket } from 'socket.io'
import * as redisIoAdapter from 'socket.io-redis'
import * as socketioJwt from 'socketio-jwt'
import { IAccessToken } from './auth/auth.interfaces'
const redisAdapter = redisIoAdapter({ host: 'redis', port: 80 })
export class RedisIoAdapter extends IoAdapter {
public createIOServer(port: number, options?: any): any {
const server = super.createIOServer(port, options)
server.adapter(redisAdapter)
server.use(
socketioJwt.authorize({
decodedPropertyName: 'token',
handshake: true,
secret: process.env.JWT_SECRET,
})
)
server.of('/').adapter.customHook = (
userId: string,
callback: (socketIds?: string[]) => void
) => {
callback(
Object.keys(server.sockets.connected)
.map(key => server.sockets.connected[key])
.filter(x => x.token.id === userId)
.map(x => x.id)
)
}
return server
}
}