diff options
| author | anatawa12 <anatawa12@icloud.com> | 2024-07-18 20:04:23 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-18 20:04:23 +0900 |
| commit | 10ce7bf3c45c3e09dc86f1b9c3a0d7e79c23f5ee (patch) | |
| tree | c098b60b4fee0030c4f6502c92035672f3fda44f /packages/backend/src/core | |
| parent | fix(frontend): 子メニューの最大長調整が行われていない問... (diff) | |
| download | sharkey-10ce7bf3c45c3e09dc86f1b9c3a0d7e79c23f5ee.tar.gz sharkey-10ce7bf3c45c3e09dc86f1b9c3a0d7e79c23f5ee.tar.bz2 sharkey-10ce7bf3c45c3e09dc86f1b9c3a0d7e79c23f5ee.zip | |
kill any from streaming API Implementation (#14251)
* chore: add JsonValue type
* refactor: kill any from Connection.ts
* refactor: fix StreamEventEmitter contains undefined instead of null
* refactor: kill any from channels
* docs(changelog): Fix: Steaming APIが不正なデータを受けた場合の動作が不安定である問題
* fix license header
* fix lints
Diffstat (limited to 'packages/backend/src/core')
| -rw-r--r-- | packages/backend/src/core/GlobalEventService.ts | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index 2a7d8d4bbe..312bcfb3b5 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -209,6 +209,10 @@ type SerializedAll<T> = { [K in keyof T]: Serialized<T[K]>; }; +type UndefinedAsNullAll<T> = { + [K in keyof T]: T[K] extends undefined ? null : T[K]; +} + export interface InternalEventTypes { userChangeSuspendedState: { id: MiUser['id']; isSuspended: MiUser['isSuspended']; }; userChangeDeletedState: { id: MiUser['id']; isDeleted: MiUser['isDeleted']; }; @@ -248,43 +252,45 @@ export interface InternalEventTypes { userKeypairUpdated: { userId: MiUser['id']; }; } +type EventTypesToEventPayload<T> = EventUnionFromDictionary<UndefinedAsNullAll<SerializedAll<T>>>; + // name/messages(spec) pairs dictionary export type GlobalEvents = { internal: { name: 'internal'; - payload: EventUnionFromDictionary<SerializedAll<InternalEventTypes>>; + payload: EventTypesToEventPayload<InternalEventTypes>; }; broadcast: { name: 'broadcast'; - payload: EventUnionFromDictionary<SerializedAll<BroadcastTypes>>; + payload: EventTypesToEventPayload<BroadcastTypes>; }; main: { name: `mainStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<MainEventTypes>>; + payload: EventTypesToEventPayload<MainEventTypes>; }; drive: { name: `driveStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<DriveEventTypes>>; + payload: EventTypesToEventPayload<DriveEventTypes>; }; note: { name: `noteStream:${MiNote['id']}`; - payload: EventUnionFromDictionary<SerializedAll<NoteStreamEventTypes>>; + payload: EventTypesToEventPayload<NoteStreamEventTypes>; }; userList: { name: `userListStream:${MiUserList['id']}`; - payload: EventUnionFromDictionary<SerializedAll<UserListEventTypes>>; + payload: EventTypesToEventPayload<UserListEventTypes>; }; roleTimeline: { name: `roleTimelineStream:${MiRole['id']}`; - payload: EventUnionFromDictionary<SerializedAll<RoleTimelineEventTypes>>; + payload: EventTypesToEventPayload<RoleTimelineEventTypes>; }; antenna: { name: `antennaStream:${MiAntenna['id']}`; - payload: EventUnionFromDictionary<SerializedAll<AntennaEventTypes>>; + payload: EventTypesToEventPayload<AntennaEventTypes>; }; admin: { name: `adminStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<AdminEventTypes>>; + payload: EventTypesToEventPayload<AdminEventTypes>; }; notes: { name: 'notesStream'; @@ -292,11 +298,11 @@ export type GlobalEvents = { }; reversi: { name: `reversiStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<ReversiEventTypes>>; + payload: EventTypesToEventPayload<ReversiEventTypes>; }; reversiGame: { name: `reversiGameStream:${MiReversiGame['id']}`; - payload: EventUnionFromDictionary<SerializedAll<ReversiGameEventTypes>>; + payload: EventTypesToEventPayload<ReversiGameEventTypes>; }; }; |