diff options
| author | dakkar <dakkar@thenautilus.net> | 2024-08-15 11:35:51 +0100 |
|---|---|---|
| committer | dakkar <dakkar@thenautilus.net> | 2024-08-15 11:35:51 +0100 |
| commit | 311a31da58ebfc079653f860ea4cf4ed9a051d42 (patch) | |
| tree | 2f7b2edb8b87b46782b900d0be3ce5cdd7ad93e6 /packages/backend/src/server/api/stream | |
| parent | merge: fix webfinger for instances without a `/host-meta` (!593) (diff) | |
| download | sharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.tar.gz sharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.tar.bz2 sharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.zip | |
rough rate limiting for websockets
Diffstat (limited to 'packages/backend/src/server/api/stream')
| -rw-r--r-- | packages/backend/src/server/api/stream/Connection.ts | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts index 7dd7db24e5..dfc6f0d298 100644 --- a/packages/backend/src/server/api/stream/Connection.ts +++ b/packages/backend/src/server/api/stream/Connection.ts @@ -25,6 +25,7 @@ import type Channel from './channel.js'; export default class Connection { public user?: MiUser; public token?: MiAccessToken; + private rateLimiter?: () => Promise<boolean>; private wsConnection: WebSocket.WebSocket; public subscriber: StreamEventEmitter; private channels: Channel[] = []; @@ -48,9 +49,11 @@ export default class Connection { user: MiUser | null | undefined, token: MiAccessToken | null | undefined, + rateLimiter: () => Promise<boolean>, ) { if (user) this.user = user; if (token) this.token = token; + if (rateLimiter) this.rateLimiter = rateLimiter; } @bindThis @@ -103,6 +106,10 @@ export default class Connection { private async onWsConnectionMessage(data: WebSocket.RawData) { let obj: Record<string, any>; + if (this.rateLimiter && await this.rateLimiter()) { + return; + } + try { obj = JSON.parse(data.toString()); } catch (e) { |