Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: publishHogeStreamとStreamのEventEmitterに型定義する #7769

Merged
merged 127 commits into from
Oct 20, 2021
Merged
Show file tree
Hide file tree
Changes from 62 commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
987c98f
wip
tamaina Sep 5, 2021
225805d
wip
tamaina Sep 5, 2021
f74f4ff
wip
tamaina Sep 5, 2021
08576c4
:v:
tamaina Sep 5, 2021
06c0373
add main stream
tamaina Sep 5, 2021
ba1c57c
packedNotificationSchemaを更新
tamaina Sep 5, 2021
9a089e5
read:gallery, write:gallery, read:gallery-likes, write:gallery-likesに…
tamaina Sep 5, 2021
3bde3e5
fix
tamaina Sep 5, 2021
e9b9afb
Merge branch 'chore-api-R30906' into stream-types
tamaina Sep 5, 2021
110de16
ok
tamaina Sep 5, 2021
47e0e32
add header, choice, invitation
tamaina Sep 5, 2021
75015c7
add header, choice, invitation
tamaina Sep 5, 2021
ee03cd6
test
tamaina Sep 5, 2021
07a9744
Merge branch 'expand-schema' into stream-types
tamaina Sep 5, 2021
7ab9700
fix
tamaina Sep 5, 2021
d200424
fix
tamaina Sep 5, 2021
c86ac1c
yatta
tamaina Sep 5, 2021
93fd76f
remove no longer needed "as PackedUser/PackedNote"
tamaina Sep 5, 2021
f89a326
clean up
tamaina Sep 5, 2021
abbeb9a
add simple-schema
tamaina Sep 6, 2021
02dbdc5
fix lint
tamaina Sep 6, 2021
20c26c9
Merge branch 'expand-schema' into stream-types
tamaina Sep 6, 2021
ca82538
fix lint
tamaina Sep 6, 2021
dd175a8
wip
tamaina Sep 6, 2021
70740c5
wip!
tamaina Sep 6, 2021
ac3dbcb
wip
tamaina Sep 6, 2021
3500705
fix
tamaina Sep 6, 2021
f4652ec
wip
tamaina Sep 6, 2021
5db2892
wip
tamaina Sep 6, 2021
f6853b2
:v:
tamaina Sep 6, 2021
4793d1c
送信側に型エラーがないことを3回確認した
tamaina Sep 6, 2021
be47a12
:v:
tamaina Sep 6, 2021
fd55e2b
wip
tamaina Sep 6, 2021
b22972f
update typescript
tamaina Sep 6, 2021
714f9f2
define items in full Schema
tamaina Sep 6, 2021
9fc59a7
Merge branch 'expand-schema' into stream-types
tamaina Sep 6, 2021
1590cf0
edit comment
tamaina Sep 6, 2021
cd36102
edit comment
tamaina Sep 6, 2021
2c494f1
edit comment
tamaina Sep 6, 2021
afb7d5d
Update src/prelude/types.ts
tamaina Sep 7, 2021
6a808ac
https://github.com/misskey-dev/misskey/pull/7769#discussion_r703058458
tamaina Sep 7, 2021
8195be9
Merge branch 'stream-types' of https://github.com/tamaina/misskey int…
tamaina Sep 7, 2021
f6fe073
Merge branch 'develop' into expand-schema
tamaina Sep 11, 2021
59580e9
user packとnote packの型不整合を修正
tamaina Sep 11, 2021
36e86bb
revert https://github.com/misskey-dev/misskey/pull/7772#discussion_r7…
tamaina Sep 11, 2021
94ebf2a
revert https://github.com/misskey-dev/misskey/pull/7772#discussion_r7…
tamaina Sep 11, 2021
a7f5ad7
user packとnote packの型不整合を修正
tamaina Sep 11, 2021
2d387c2
Merge branch 'expand-schema' into stream-types
tamaina Sep 11, 2021
beac5d2
add prelude/types.ts
tamaina Sep 11, 2021
866de46
emoji
tamaina Sep 11, 2021
6df0c45
signin
tamaina Sep 11, 2021
9ea9814
game
tamaina Sep 11, 2021
ace6784
matching
tamaina Sep 11, 2021
f6915e8
Merge branch 'infer-pack-type' into stream-types
tamaina Sep 11, 2021
03dcfcf
Merge branch 'develop' into infer-pack-type
tamaina Sep 11, 2021
c7db21e
Merge branch 'develop' into stream-types
tamaina Sep 11, 2021
1cc72fd
clean up
tamaina Sep 11, 2021
8cafc4e
ev => data
tamaina Sep 11, 2021
380d357
refactor
tamaina Sep 11, 2021
4ba33f2
clean up
tamaina Sep 11, 2021
4bd42cf
add type
tamaina Sep 11, 2021
217bf12
antenna
tamaina Sep 11, 2021
0714c56
channel
tamaina Sep 11, 2021
c05e99b
fix
tamaina Sep 12, 2021
943f988
zMerge branch 'infer-pack-type' into stream-types
tamaina Sep 12, 2021
04aa4a5
add Packed type
tamaina Sep 12, 2021
e2550e8
add PackedRef
tamaina Sep 12, 2021
e777fea
fix lint
tamaina Sep 12, 2021
3afdfe8
add emoji schema
tamaina Sep 12, 2021
1322622
Merge branch 'infer-pack-type' of https://github.com/misskey-dev/miss…
tamaina Sep 12, 2021
ce0f374
add reversiGame
tamaina Sep 12, 2021
ef98e4a
add reversiMatching
tamaina Sep 12, 2021
ee3457c
remove signin schema (use Signin entity)
tamaina Sep 12, 2021
96c7954
Merge branch 'infer-pack-type' into stream-types
tamaina Sep 12, 2021
e749b75
add schemas refs, fix Packed type
tamaina Sep 12, 2021
dee40b3
wip PackedHoge => Packed<'Hoge'>
tamaina Sep 12, 2021
a97fb08
add Packed type
tamaina Sep 12, 2021
1f82a98
note-reaction
tamaina Sep 12, 2021
d748871
user
tamaina Sep 12, 2021
3eb79b2
user-group
tamaina Sep 12, 2021
c992641
user-list
tamaina Sep 12, 2021
677a6aa
note
tamaina Sep 12, 2021
02f6142
app, messaging-message
tamaina Sep 12, 2021
295ad35
notification
tamaina Sep 12, 2021
59ac258
drive-file
tamaina Sep 12, 2021
8f67adb
drive-folder
tamaina Sep 12, 2021
fad785b
following
tamaina Sep 12, 2021
b986872
muting
tamaina Sep 12, 2021
3d54fb2
blocking
tamaina Sep 12, 2021
4dfebbd
hashtag
tamaina Sep 12, 2021
2c7daf8
page
tamaina Sep 12, 2021
8e9cfb8
app (with modifying schema)
tamaina Sep 12, 2021
5ed7299
import user?
tamaina Sep 12, 2021
df10aa4
channel
tamaina Sep 12, 2021
3bf7e4b
antenna
tamaina Sep 12, 2021
3a4e3d7
clip
tamaina Sep 12, 2021
c71844c
gallery-post
tamaina Sep 12, 2021
77ed1d7
emoji
tamaina Sep 12, 2021
6b72d88
Packed
tamaina Sep 12, 2021
f8df218
reversi-matching
tamaina Sep 12, 2021
3945175
Merge branch 'packed-type' into stream-types
tamaina Sep 12, 2021
b2f27e9
update stream.ts
tamaina Sep 12, 2021
7fd5152
https://github.com/misskey-dev/misskey/pull/7769#issuecomment-917542339
tamaina Sep 12, 2021
9f4ad3c
fix lint
tamaina Sep 12, 2021
2a59186
clean up?
tamaina Sep 12, 2021
9275dec
Merge branch 'develop' into stream-types
tamaina Sep 17, 2021
bdee057
Merge branch 'develop' into stream-types
tamaina Sep 17, 2021
16feea4
Merge branch 'develop' into infer-pack-type
tamaina Sep 17, 2021
5755d15
add changelog
tamaina Sep 17, 2021
d3e4843
Merge branch 'develop' into packed-type
tamaina Sep 17, 2021
04c5cc1
add changelog
tamaina Sep 17, 2021
9a8bfc6
Merge branch 'packed-type' into stream-types
tamaina Sep 17, 2021
357d884
Merge branch 'infer-pack-type' into stream-types
tamaina Sep 17, 2021
8e5386e
add changelog
tamaina Sep 17, 2021
6fa583d
fix: アンテナが既読にならないのを修正
tamaina Sep 18, 2021
1236600
revert fix
tamaina Sep 18, 2021
2dd3a89
Merge branch 'read-antenna-fix' into stream-types
tamaina Sep 18, 2021
ea097e2
Merge branch 'develop' into packed-type
tamaina Sep 22, 2021
d924137
Merge branch 'develop' into packed-type
tamaina Sep 22, 2021
8dc6007
Merge branch 'develop' into infer-pack-type
tamaina Sep 22, 2021
0447558
Merge branch 'infer-pack-type' into packed-type
tamaina Sep 22, 2021
a064ac4
Merge branch 'packed-type' into stream-types
tamaina Sep 22, 2021
fb4482c
Merge branch 'develop' into stream-types
tamaina Sep 22, 2021
d3cfc45
https://github.com/misskey-dev/misskey/pull/7769#discussion_r711474875
tamaina Oct 3, 2021
d7f57cc
Merge branch 'develop' into stream-types
tamaina Oct 3, 2021
eb2e4d4
spec => payload
tamaina Oct 3, 2021
ee823eb
edit commetn
tamaina Oct 3, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@
"seedrandom": "3.0.5",
"sharp": "0.29.0",
"speakeasy": "2.0.0",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"style-loader": "3.2.1",
"summaly": "2.4.1",
Expand All @@ -228,7 +229,7 @@
"tslint-sonarts": "1.9.0",
"twemoji-parser": "13.1.0",
"typeorm": "0.2.37",
"typescript": "4.3.5",
"typescript": "4.4.2",
"ulid": "2.3.0",
"uuid": "8.3.2",
"v-debounce": "0.1.2",
Expand Down
3 changes: 3 additions & 0 deletions src/models/repositories/emoji.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { EntityRepository, Repository } from 'typeorm';
import { Emoji } from '@/models/entities/emoji';
import { Resolved } from '@/prelude/types';

export type PackedEmoji = Resolved<ReturnType<EmojiRepository['pack']>>;

@EntityRepository(Emoji)
export class EmojiRepository extends Repository<Emoji> {
Expand Down
3 changes: 3 additions & 0 deletions src/models/repositories/games/reversi/game.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import { User } from '@/models/entities/user';
import { EntityRepository, Repository } from 'typeorm';
import { Users } from '../../../index';
import { ReversiGame } from '@/models/entities/games/reversi/game';
import { Resolved } from '@/prelude/types';

export type PackedReversiGame = Resolved<ReturnType<ReversiGameRepository['pack']>>;

@EntityRepository(ReversiGame)
export class ReversiGameRepository extends Repository<ReversiGame> {
Expand Down
3 changes: 3 additions & 0 deletions src/models/repositories/games/reversi/matching.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import { ReversiMatching } from '@/models/entities/games/reversi/matching';
import { Users } from '../../../index';
import { awaitAll } from '@/prelude/await-all';
import { User } from '@/models/entities/user';
import { Resolved } from '@/prelude/types';

export type PackedReversiMatching = Resolved<ReturnType<ReversiMatchingRepository['pack']>>;

@EntityRepository(ReversiMatching)
export class ReversiMatchingRepository extends Repository<ReversiMatching> {
Expand Down
5 changes: 4 additions & 1 deletion src/models/repositories/signin.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { EntityRepository, Repository } from 'typeorm';
import { Signin } from '@/models/entities/signin';
import { Resolved } from '@/prelude/types';

export type PackedSignin = Resolved<ReturnType<SigninRepository['pack']>>;

@EntityRepository(Signin)
export class SigninRepository extends Repository<Signin> {
public async pack(
src: any,
src: Signin,
) {
return src;
}
Expand Down
1 change: 1 addition & 0 deletions src/prelude/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export type Resolved<P> = P extends PromiseLike<infer R> ? Resolved<R> : never;
2 changes: 1 addition & 1 deletion src/server/api/common/read-messaging-message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export async function readGroupMessagingMessage(
id: In(messageIds)
});

const reads = [];
const reads: MessagingMessage['id'][] = [];

for (const message of messages) {
if (message.userId === userId) continue;
Expand Down
2 changes: 1 addition & 1 deletion src/server/api/endpoints/antennas/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ export default define(meta, async (ps, user) => {
notify: ps.notify,
});

publishInternalEvent('antennaUpdated', Antennas.findOneOrFail(antenna.id));
publishInternalEvent('antennaUpdated', await Antennas.findOneOrFail(antenna.id));

return await Antennas.pack(antenna.id);
});
11 changes: 4 additions & 7 deletions src/server/api/stream/channels/antenna.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Channel from '../channel';
import { Notes } from '@/models/index';
import { isMutedUserRelated } from '@/misc/is-muted-user-related';
import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
import { StreamMessages } from '../types';

export default class extends Channel {
public readonly chName = 'antenna';
Expand All @@ -19,11 +20,9 @@ export default class extends Channel {
}

@autobind
private async onEvent(data: any) {
const { type, body } = data;

if (type === 'note') {
const note = await Notes.pack(body.id, this.user, { detail: true });
private async onEvent(data: StreamMessages['antenna']['spec']) {
tamaina marked this conversation as resolved.
Show resolved Hide resolved
if (data.type === 'note') {
const note = await Notes.pack(data.body.id, this.user, { detail: true });

// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
if (isMutedUserRelated(note, this.muting)) return;
Expand All @@ -33,8 +32,6 @@ export default class extends Channel {
this.connection.cacheNote(note);

this.send('note', note);
} else {
this.send(type, body);
tamaina marked this conversation as resolved.
Show resolved Hide resolved
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/server/api/stream/channels/channel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { isMutedUserRelated } from '@/misc/is-muted-user-related';
import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
import { PackedNote } from '@/models/repositories/note';
import { User } from '@/models/entities/user';
import { StreamMessages } from '../types';

export default class extends Channel {
public readonly chName = 'channel';
Expand Down Expand Up @@ -52,7 +53,7 @@ export default class extends Channel {
}

@autobind
private onEvent(data: any) {
private onEvent(data: StreamMessages['channel']['spec']) {
if (data.type === 'typing') {
const id = data.body;
const begin = this.typers[id] == null;
Expand Down
24 changes: 11 additions & 13 deletions src/server/api/stream/channels/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,35 +11,33 @@ export default class extends Channel {
public async init(params: any) {
// Subscribe main stream channel
this.subscriber.on(`mainStream:${this.user!.id}`, async data => {
const { type } = data;
let { body } = data;

switch (type) {
switch (data.type) {
case 'notification': {
if (this.muting.has(body.userId)) return;
if (body.note && body.note.isHidden) {
const note = await Notes.pack(body.note.id, this.user, {
if (data.body.userId && this.muting.has(data.body.userId)) return;

if (data.body.note && data.body.note.isHidden) {
const note = await Notes.pack(data.body.note.id, this.user, {
detail: true
});
this.connection.cacheNote(note);
body.note = note;
data.body.note = note;
}
break;
}
case 'mention': {
if (this.muting.has(body.userId)) return;
if (body.isHidden) {
const note = await Notes.pack(body.id, this.user, {
if (this.muting.has(data.body.userId)) return;
if (data.body.isHidden) {
const note = await Notes.pack(data.body.id, this.user, {
detail: true
});
this.connection.cacheNote(note);
body = note;
data.body = note;
}
break;
}
}

this.send(type, body);
this.send(data.type, data.body);
});
}
}
6 changes: 4 additions & 2 deletions src/server/api/stream/channels/messaging.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivit
import Channel from '../channel';
import { UserGroupJoinings, Users, MessagingMessages } from '@/models/index';
import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
import { UserGroup } from '@/models/entities/user-group';
import { StreamMessages } from '../types';

export default class extends Channel {
public readonly chName = 'messaging';
Expand All @@ -12,7 +14,7 @@ export default class extends Channel {
private otherpartyId: string | null;
private otherparty: User | null;
private groupId: string | null;
private subCh: string;
private subCh: `messagingStream:${User['id']}-${User['id']}` | `messagingStream:${UserGroup['id']}`;
private typers: Record<User['id'], Date> = {};
private emitTypersIntervalId: ReturnType<typeof setInterval>;

Expand Down Expand Up @@ -45,7 +47,7 @@ export default class extends Channel {
}

@autobind
private onEvent(data: any) {
private onEvent(data: StreamMessages['messaging']['spec'] | StreamMessages['groupMessaging']['spec']) {
if (data.type === 'typing') {
const id = data.body;
const begin = this.typers[id] == null;
Expand Down
35 changes: 17 additions & 18 deletions src/server/api/stream/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { UserProfile } from '@/models/entities/user-profile';
import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '@/services/stream';
import { UserGroup } from '@/models/entities/user-group';
import { PackedNote } from '@/models/repositories/note';
import { StreamEventEmitter, StreamMessages } from './types';

/**
* Main stream connection
Expand All @@ -28,7 +29,7 @@ export default class Connection {
public followingChannels: Set<ChannelModel['id']> = new Set();
public token?: AccessToken;
private wsConnection: websocket.connection;
public subscriber: EventEmitter;
public subscriber: StreamEventEmitter;
private channels: Channel[] = [];
private subscribingNotes: any = {};
private cachedNotes: PackedNote[] = [];
Expand All @@ -46,8 +47,8 @@ export default class Connection {

this.wsConnection.on('message', this.onWsConnectionMessage);

this.subscriber.on('broadcast', async ({ type, body }) => {
this.onBroadcastMessage(type, body);
this.subscriber.on('broadcast', data => {
this.onBroadcastMessage(data);
});

if (this.user) {
Expand All @@ -57,43 +58,41 @@ export default class Connection {
this.updateFollowingChannels();
this.updateUserProfile();

this.subscriber.on(`user:${this.user.id}`, ({ type, body }) => {
this.onUserEvent(type, body);
});
this.subscriber.on(`user:${this.user.id}`, this.onUserEvent);
}
}

@autobind
private onUserEvent(type: string, body: any) {
switch (type) {
private onUserEvent(data: StreamMessages['user']['spec']) { // { type, body }と展開すると型も展開されてしまう
switch (data.type) {
case 'follow':
this.following.add(body.id);
this.following.add(data.body.id);
break;

case 'unfollow':
this.following.delete(body.id);
this.following.delete(data.body.id);
break;

case 'mute':
this.muting.add(body.id);
this.muting.add(data.body.id);
break;

case 'unmute':
this.muting.delete(body.id);
this.muting.delete(data.body.id);
break;

// TODO: block events

case 'followChannel':
this.followingChannels.add(body.id);
this.followingChannels.add(data.body.id);
break;

case 'unfollowChannel':
this.followingChannels.delete(body.id);
this.followingChannels.delete(data.body.id);
break;

case 'updateUserProfile':
this.userProfile = body;
this.userProfile = data.body;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

複数行に渡るなら関数内部で const { type, body } = data しちゃってもいいのでは?と思ったり

Copy link
Contributor Author

@tamaina tamaina Oct 3, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

残念なお知らせ: constで展開してもtypeとbodyの型が分離してしまうのは変わらない

ジェネリックで関数を定義しても分離してしまうのでswitch-caseのTypeScriptの仕様なんだと思う

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

break;

case 'terminate':
Expand Down Expand Up @@ -145,8 +144,8 @@ export default class Connection {
}

@autobind
private onBroadcastMessage(type: string, body: any) {
this.sendMessageToWs(type, body);
private onBroadcastMessage(data: StreamMessages['broadcast']['spec']) {
this.sendMessageToWs(data.type, data.body);
}

@autobind
Expand Down Expand Up @@ -249,7 +248,7 @@ export default class Connection {
}

@autobind
private async onNoteStreamMessage(data: any) {
private async onNoteStreamMessage(data: StreamMessages['note']['spec']) {
this.sendMessageToWs('noteUpdated', {
id: data.body.id,
type: data.type,
Expand Down
Loading