summaryrefslogtreecommitdiff
path: root/src/services/stream.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/stream.ts')
-rw-r--r--src/services/stream.ts53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/services/stream.ts b/src/services/stream.ts
index 4db1a77395..2c308a1b54 100644
--- a/src/services/stream.ts
+++ b/src/services/stream.ts
@@ -7,9 +7,28 @@ import { UserGroup } from '@/models/entities/user-group';
import config from '@/config/index';
import { Antenna } from '@/models/entities/antenna';
import { Channel } from '@/models/entities/channel';
+import {
+ StreamChannels,
+ AdminStreamTypes,
+ AntennaStreamTypes,
+ BroadcastTypes,
+ ChannelStreamTypes,
+ DriveStreamTypes,
+ GroupMessagingStreamTypes,
+ InternalStreamTypes,
+ MainStreamTypes,
+ MessagingIndexStreamTypes,
+ MessagingStreamTypes,
+ NoteStreamTypes,
+ ReversiGameStreamTypes,
+ ReversiStreamTypes,
+ UserListStreamTypes,
+ UserStreamTypes
+} from '@/server/api/stream/types';
+import { Packed } from '@/misc/schema';
class Publisher {
- private publish = (channel: string, type: string | null, value?: any): void => {
+ private publish = (channel: StreamChannels, type: string | null, value?: any): void => {
const message = type == null ? value : value == null ?
{ type: type, body: null } :
{ type: type, body: value };
@@ -20,70 +39,70 @@ class Publisher {
}));
}
- public publishInternalEvent = (type: string, value?: any): void => {
+ public publishInternalEvent = <K extends keyof InternalStreamTypes>(type: K, value?: InternalStreamTypes[K]): void => {
this.publish('internal', type, typeof value === 'undefined' ? null : value);
}
- public publishUserEvent = (userId: User['id'], type: string, value?: any): void => {
+ public publishUserEvent = <K extends keyof UserStreamTypes>(userId: User['id'], type: K, value?: UserStreamTypes[K]): void => {
this.publish(`user:${userId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishBroadcastStream = (type: string, value?: any): void => {
+ public publishBroadcastStream = <K extends keyof BroadcastTypes>(type: K, value?: BroadcastTypes[K]): void => {
this.publish('broadcast', type, typeof value === 'undefined' ? null : value);
}
- public publishMainStream = (userId: User['id'], type: string, value?: any): void => {
+ public publishMainStream = <K extends keyof MainStreamTypes>(userId: User['id'], type: K, value?: MainStreamTypes[K]): void => {
this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishDriveStream = (userId: User['id'], type: string, value?: any): void => {
+ public publishDriveStream = <K extends keyof DriveStreamTypes>(userId: User['id'], type: K, value?: DriveStreamTypes[K]): void => {
this.publish(`driveStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishNoteStream = (noteId: Note['id'], type: string, value: any): void => {
+ public publishNoteStream = <K extends keyof NoteStreamTypes>(noteId: Note['id'], type: K, value?: NoteStreamTypes[K]): void => {
this.publish(`noteStream:${noteId}`, type, {
id: noteId,
body: value
});
}
- public publishChannelStream = (channelId: Channel['id'], type: string, value?: any): void => {
+ public publishChannelStream = <K extends keyof ChannelStreamTypes>(channelId: Channel['id'], type: K, value?: ChannelStreamTypes[K]): void => {
this.publish(`channelStream:${channelId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishUserListStream = (listId: UserList['id'], type: string, value?: any): void => {
+ public publishUserListStream = <K extends keyof UserListStreamTypes>(listId: UserList['id'], type: K, value?: UserListStreamTypes[K]): void => {
this.publish(`userListStream:${listId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishAntennaStream = (antennaId: Antenna['id'], type: string, value?: any): void => {
+ public publishAntennaStream = <K extends keyof AntennaStreamTypes>(antennaId: Antenna['id'], type: K, value?: AntennaStreamTypes[K]): void => {
this.publish(`antennaStream:${antennaId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishMessagingStream = (userId: User['id'], otherpartyId: User['id'], type: string, value?: any): void => {
+ public publishMessagingStream = <K extends keyof MessagingStreamTypes>(userId: User['id'], otherpartyId: User['id'], type: K, value?: MessagingStreamTypes[K]): void => {
this.publish(`messagingStream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishGroupMessagingStream = (groupId: UserGroup['id'], type: string, value?: any): void => {
+ public publishGroupMessagingStream = <K extends keyof GroupMessagingStreamTypes>(groupId: UserGroup['id'], type: K, value?: GroupMessagingStreamTypes[K]): void => {
this.publish(`messagingStream:${groupId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishMessagingIndexStream = (userId: User['id'], type: string, value?: any): void => {
+ public publishMessagingIndexStream = <K extends keyof MessagingIndexStreamTypes>(userId: User['id'], type: K, value?: MessagingIndexStreamTypes[K]): void => {
this.publish(`messagingIndexStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishReversiStream = (userId: User['id'], type: string, value?: any): void => {
+ public publishReversiStream = <K extends keyof ReversiStreamTypes>(userId: User['id'], type: K, value?: ReversiStreamTypes[K]): void => {
this.publish(`reversiStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishReversiGameStream = (gameId: ReversiGame['id'], type: string, value?: any): void => {
+ public publishReversiGameStream = <K extends keyof ReversiGameStreamTypes>(gameId: ReversiGame['id'], type: K, value?: ReversiGameStreamTypes[K]): void => {
this.publish(`reversiGameStream:${gameId}`, type, typeof value === 'undefined' ? null : value);
}
- public publishNotesStream = (note: any): void => {
+ public publishNotesStream = (note: Packed<'Note'>): void => {
this.publish('notesStream', null, note);
}
- public publishAdminStream = (userId: User['id'], type: string, value?: any): void => {
+ public publishAdminStream = <K extends keyof AdminStreamTypes>(userId: User['id'], type: K, value?: AdminStreamTypes[K]): void => {
this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
}