fix(cdn-caching): 自分のリアクションが表示されない問題を修正 (MisskeyIO#851)

This commit is contained in:
あわわわとーにゅ 2024-12-25 14:13:45 +09:00 committed by GitHub
parent 5073467f1d
commit 8b17ab77b4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 103 additions and 71 deletions

View file

@ -15,7 +15,7 @@ class AntennaChannel extends Channel {
public static readonly requireCredential = true as const; public static readonly requireCredential = true as const;
public static readonly kind = 'read:account'; public static readonly kind = 'read:account';
private antennaId: string; private antennaId: string;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private noteEntityService: NoteEntityService, private noteEntityService: NoteEntityService,
@ -30,7 +30,7 @@ class AntennaChannel extends Channel {
@bindThis @bindThis
public async init(params: any) { public async init(params: any) {
this.antennaId = params.antennaId as string; this.antennaId = params.antennaId as string;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Subscribe stream // Subscribe stream
this.subscriber.on(`antennaStream:${this.antennaId}`, this.onEvent); this.subscriber.on(`antennaStream:${this.antennaId}`, this.onEvent);
@ -51,9 +51,13 @@ class AntennaChannel extends Channel {
if (this.isNoteMutedOrBlocked(note)) return; if (this.isNoteMutedOrBlocked(note)) return;
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -15,7 +15,7 @@ class ChannelChannel extends Channel {
public static readonly shouldShare = false; public static readonly shouldShare = false;
public static readonly requireCredential = false as const; public static readonly requireCredential = false as const;
private channelId: string; private channelId: string;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private noteEntityService: NoteEntityService, private noteEntityService: NoteEntityService,
@ -30,7 +30,7 @@ class ChannelChannel extends Channel {
@bindThis @bindThis
public async init(params: any) { public async init(params: any) {
this.channelId = params.channelId as string; this.channelId = params.channelId as string;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Subscribe stream // Subscribe stream
this.subscriber.on('notesStream', this.onNote); this.subscriber.on('notesStream', this.onNote);
@ -57,9 +57,13 @@ class ChannelChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -18,7 +18,7 @@ class GlobalTimelineChannel extends Channel {
public static readonly requireCredential = false as const; public static readonly requireCredential = false as const;
private withRenotes: boolean; private withRenotes: boolean;
private withFiles: boolean; private withFiles: boolean;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private metaService: MetaService, private metaService: MetaService,
@ -39,7 +39,7 @@ class GlobalTimelineChannel extends Channel {
this.withRenotes = params.withRenotes ?? true; this.withRenotes = params.withRenotes ?? true;
this.withFiles = params.withFiles ?? false; this.withFiles = params.withFiles ?? false;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Subscribe events // Subscribe events
this.subscriber.on('notesStream', this.onNote); this.subscriber.on('notesStream', this.onNote);
@ -87,9 +87,13 @@ class GlobalTimelineChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -17,7 +17,7 @@ class HomeTimelineChannel extends Channel {
public static readonly kind = 'read:account'; public static readonly kind = 'read:account';
private withRenotes: boolean; private withRenotes: boolean;
private withFiles: boolean; private withFiles: boolean;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private noteEntityService: NoteEntityService, private noteEntityService: NoteEntityService,
@ -33,7 +33,7 @@ class HomeTimelineChannel extends Channel {
public async init(params: any) { public async init(params: any) {
this.withRenotes = params.withRenotes ?? true; this.withRenotes = params.withRenotes ?? true;
this.withFiles = params.withFiles ?? false; this.withFiles = params.withFiles ?? false;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
this.subscriber.on('notesStream', this.onNote); this.subscriber.on('notesStream', this.onNote);
} }
@ -91,9 +91,13 @@ class HomeTimelineChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -20,7 +20,7 @@ class HybridTimelineChannel extends Channel {
private withRenotes: boolean; private withRenotes: boolean;
private withReplies: boolean; private withReplies: boolean;
private withFiles: boolean; private withFiles: boolean;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private metaService: MetaService, private metaService: MetaService,
@ -42,7 +42,7 @@ class HybridTimelineChannel extends Channel {
this.withRenotes = params.withRenotes ?? true; this.withRenotes = params.withRenotes ?? true;
this.withReplies = params.withReplies ?? false; this.withReplies = params.withReplies ?? false;
this.withFiles = params.withFiles ?? false; this.withFiles = params.withFiles ?? false;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Subscribe events // Subscribe events
this.subscriber.on('notesStream', this.onNote); this.subscriber.on('notesStream', this.onNote);
@ -105,9 +105,13 @@ class HybridTimelineChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -19,7 +19,7 @@ class LocalTimelineChannel extends Channel {
private withRenotes: boolean; private withRenotes: boolean;
private withReplies: boolean; private withReplies: boolean;
private withFiles: boolean; private withFiles: boolean;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private metaService: MetaService, private metaService: MetaService,
@ -41,7 +41,7 @@ class LocalTimelineChannel extends Channel {
this.withRenotes = params.withRenotes ?? true; this.withRenotes = params.withRenotes ?? true;
this.withReplies = params.withReplies ?? false; this.withReplies = params.withReplies ?? false;
this.withFiles = params.withFiles ?? false; this.withFiles = params.withFiles ?? false;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Subscribe events // Subscribe events
this.subscriber.on('notesStream', this.onNote); this.subscriber.on('notesStream', this.onNote);
@ -90,9 +90,13 @@ class LocalTimelineChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -16,7 +16,7 @@ class RoleTimelineChannel extends Channel {
public static readonly shouldShare = false; public static readonly shouldShare = false;
public static readonly requireCredential = false as const; public static readonly requireCredential = false as const;
private roleId: string; private roleId: string;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private noteEntityService: NoteEntityService, private noteEntityService: NoteEntityService,
@ -32,7 +32,7 @@ class RoleTimelineChannel extends Channel {
@bindThis @bindThis
public async init(params: any) { public async init(params: any) {
this.roleId = params.roleId as string; this.roleId = params.roleId as string;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
this.subscriber.on(`roleTimelineStream:${this.roleId}`, this.onEvent); this.subscriber.on(`roleTimelineStream:${this.roleId}`, this.onEvent);
} }
@ -73,9 +73,13 @@ class RoleTimelineChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -21,7 +21,7 @@ class UserListChannel extends Channel {
private listUsersClock: NodeJS.Timeout; private listUsersClock: NodeJS.Timeout;
private withFiles: boolean; private withFiles: boolean;
private withRenotes: boolean; private withRenotes: boolean;
private idOnly: boolean; private minimize: boolean;
constructor( constructor(
private userListsRepository: UserListsRepository, private userListsRepository: UserListsRepository,
@ -41,7 +41,7 @@ class UserListChannel extends Channel {
this.listId = params.listId as string; this.listId = params.listId as string;
this.withFiles = params.withFiles ?? false; this.withFiles = params.withFiles ?? false;
this.withRenotes = params.withRenotes ?? true; this.withRenotes = params.withRenotes ?? true;
this.idOnly = params.idOnly ?? false; this.minimize = params.minimize ?? false;
// Check existence and owner // Check existence and owner
const listExist = await this.userListsRepository.exists({ const listExist = await this.userListsRepository.exists({
@ -130,9 +130,13 @@ class UserListChannel extends Channel {
} }
} }
if (this.idOnly && ['public', 'home'].includes(note.visibility)) { if (this.minimize && ['public', 'home'].includes(note.visibility)) {
const idOnlyNote = { id: note.id }; this.send('note', {
this.send('note', idOnlyNote); id: note.id, myReaction: note.myReaction,
poll: note.poll ? { choices: note.poll.choices } : undefined,
reply: note.reply ? { myReaction: note.reply.myReaction } : undefined,
renote: note.renote ? { myReaction: note.renote.myReaction } : undefined,
});
} else { } else {
this.connection.cacheNote(note); this.connection.cacheNote(note);
this.send('note', note); this.send('note', note);

View file

@ -400,7 +400,7 @@ export const waitFire = async <C extends keyof misskey.Channels>(user: UserToken
if (timer) clearTimeout(timer); if (timer) clearTimeout(timer);
res(true); res(true);
} }
}, { ...params, idOnly: false }); }, { ...params, minimize: false });
} catch (e) { } catch (e) {
rej(e); rej(e);
} }

View file

@ -18,12 +18,12 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup> <script lang="ts" setup>
import { computed, watch, onUnmounted, provide, shallowRef } from 'vue'; import { computed, watch, onUnmounted, provide, shallowRef } from 'vue';
import { time as gtagTime } from 'vue-gtag';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import MkNotes from '@/components/MkNotes.vue'; import MkNotes from '@/components/MkNotes.vue';
import MkPullToRefresh from '@/components/MkPullToRefresh.vue'; import MkPullToRefresh from '@/components/MkPullToRefresh.vue';
import { useStream } from '@/stream.js'; import { useStream } from '@/stream.js';
import * as sound from '@/scripts/sound.js'; import * as sound from '@/scripts/sound.js';
import { deepMerge } from '@/scripts/merge.js';
import { $i, iAmModerator } from '@/account.js'; import { $i, iAmModerator } from '@/account.js';
import { instance } from '@/instance.js'; import { instance } from '@/instance.js';
import { defaultStore } from '@/store.js'; import { defaultStore } from '@/store.js';
@ -76,7 +76,7 @@ async function prepend(data) {
let note = data; let note = data;
// //
// idOnlyid // minimizeid
if (!data.visibility) { if (!data.visibility) {
const res = await window.fetch(`/notes/${data.id}.json`, { const res = await window.fetch(`/notes/${data.id}.json`, {
method: 'GET', method: 'GET',
@ -87,7 +87,7 @@ async function prepend(data) {
}, },
}); });
if (!res.ok) return; if (!res.ok) return;
note = await res.json(); note = deepMerge(data, await res.json());
} }
tlNotesCount++; tlNotesCount++;
@ -108,7 +108,7 @@ async function prepend(data) {
let connection: Misskey.ChannelConnection | null = null; let connection: Misskey.ChannelConnection | null = null;
let connection2: Misskey.ChannelConnection | null = null; let connection2: Misskey.ChannelConnection | null = null;
let paginationQuery: Paging | null = null; let paginationQuery: Paging | null = null;
const idOnly = !iAmModerator; const minimize = !iAmModerator;
const stream = useStream(); const stream = useStream();
@ -117,13 +117,13 @@ function connectChannel() {
if (props.antenna == null) return; if (props.antenna == null) return;
connection = stream.useChannel('antenna', { connection = stream.useChannel('antenna', {
antennaId: props.antenna, antennaId: props.antenna,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'home') { } else if (props.src === 'home') {
connection = stream.useChannel('homeTimeline', { connection = stream.useChannel('homeTimeline', {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withFiles: props.onlyFiles ? true : undefined, withFiles: props.onlyFiles ? true : undefined,
idOnly: idOnly, minimize: minimize,
}); });
connection2 = stream.useChannel('main'); connection2 = stream.useChannel('main');
} else if (props.src === 'local') { } else if (props.src === 'local') {
@ -131,27 +131,27 @@ function connectChannel() {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withReplies: props.withReplies, withReplies: props.withReplies,
withFiles: props.onlyFiles ? true : undefined, withFiles: props.onlyFiles ? true : undefined,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'media') { } else if (props.src === 'media') {
connection = stream.useChannel('hybridTimeline', { connection = stream.useChannel('hybridTimeline', {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withReplies: props.withReplies, withReplies: props.withReplies,
withFiles: true, withFiles: true,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'social') { } else if (props.src === 'social') {
connection = stream.useChannel('hybridTimeline', { connection = stream.useChannel('hybridTimeline', {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withReplies: props.withReplies, withReplies: props.withReplies,
withFiles: props.onlyFiles ? true : undefined, withFiles: props.onlyFiles ? true : undefined,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'global') { } else if (props.src === 'global') {
connection = stream.useChannel('globalTimeline', { connection = stream.useChannel('globalTimeline', {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withFiles: props.onlyFiles ? true : undefined, withFiles: props.onlyFiles ? true : undefined,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'mentions') { } else if (props.src === 'mentions') {
connection = stream.useChannel('main'); connection = stream.useChannel('main');
@ -170,19 +170,19 @@ function connectChannel() {
withRenotes: props.withRenotes, withRenotes: props.withRenotes,
withFiles: props.onlyFiles ? true : undefined, withFiles: props.onlyFiles ? true : undefined,
listId: props.list, listId: props.list,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'channel') { } else if (props.src === 'channel') {
if (props.channel == null) return; if (props.channel == null) return;
connection = stream.useChannel('channel', { connection = stream.useChannel('channel', {
channelId: props.channel, channelId: props.channel,
idOnly: idOnly, minimize: minimize,
}); });
} else if (props.src === 'role') { } else if (props.src === 'role') {
if (props.role == null) return; if (props.role == null) return;
connection = stream.useChannel('roleTimeline', { connection = stream.useChannel('roleTimeline', {
roleId: props.role, roleId: props.role,
idOnly: idOnly, minimize: minimize,
}); });
} }
if (props.src !== 'directs' && props.src !== 'mentions') connection?.on('note', prepend); if (props.src !== 'directs' && props.src !== 'mentions') connection?.on('note', prepend);

View file

@ -22,7 +22,7 @@ export function deepMerge<X extends Record<string | number | symbol, unknown>>(v
if (isPureObject(value) && isPureObject(def)) { if (isPureObject(value) && isPureObject(def)) {
const result = deepClone(value as Cloneable) as X; const result = deepClone(value as Cloneable) as X;
for (const [k, v] of Object.entries(def) as [keyof X, X[keyof X]][]) { for (const [k, v] of Object.entries(def) as [keyof X, X[keyof X]][]) {
if (!Object.prototype.hasOwnProperty.call(value, k) || value[k] === undefined) { if (!Object.hasOwn(value, k) || value[k] === undefined) {
result[k] = v; result[k] = v;
} else if (isPureObject(v) && isPureObject(result[k])) { } else if (isPureObject(v) && isPureObject(result[k])) {
const child = deepClone(result[k] as Cloneable) as DeepPartial<X[keyof X] & Record<string | number | symbol, unknown>>; const child = deepClone(result[k] as Cloneable) as DeepPartial<X[keyof X] & Record<string | number | symbol, unknown>>;

View file

@ -642,7 +642,7 @@ export type Channels = {
params: { params: {
withRenotes?: boolean; withRenotes?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -654,7 +654,7 @@ export type Channels = {
withRenotes?: boolean; withRenotes?: boolean;
withReplies?: boolean; withReplies?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -666,7 +666,7 @@ export type Channels = {
withRenotes?: boolean; withRenotes?: boolean;
withReplies?: boolean; withReplies?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -677,7 +677,7 @@ export type Channels = {
params: { params: {
withRenotes?: boolean; withRenotes?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -689,7 +689,7 @@ export type Channels = {
listId: string; listId: string;
withFiles?: boolean; withFiles?: boolean;
withRenotes?: boolean; withRenotes?: boolean;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -708,7 +708,7 @@ export type Channels = {
roleTimeline: { roleTimeline: {
params: { params: {
roleId: string; roleId: string;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -718,7 +718,7 @@ export type Channels = {
antenna: { antenna: {
params: { params: {
antennaId: string; antennaId: string;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -728,7 +728,7 @@ export type Channels = {
channel: { channel: {
params: { params: {
channelId: string; channelId: string;
idOnly?: boolean; minimize?: boolean;
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;

View file

@ -64,7 +64,7 @@ export type Channels = {
params: { params: {
withRenotes?: boolean; withRenotes?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -76,7 +76,7 @@ export type Channels = {
withRenotes?: boolean; withRenotes?: boolean;
withReplies?: boolean; withReplies?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -88,7 +88,7 @@ export type Channels = {
withRenotes?: boolean; withRenotes?: boolean;
withReplies?: boolean; withReplies?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -99,7 +99,7 @@ export type Channels = {
params: { params: {
withRenotes?: boolean; withRenotes?: boolean;
withFiles?: boolean; withFiles?: boolean;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -111,7 +111,7 @@ export type Channels = {
listId: string; listId: string;
withFiles?: boolean; withFiles?: boolean;
withRenotes?: boolean; withRenotes?: boolean;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -130,7 +130,7 @@ export type Channels = {
roleTimeline: { roleTimeline: {
params: { params: {
roleId: string; roleId: string;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -140,7 +140,7 @@ export type Channels = {
antenna: { antenna: {
params: { params: {
antennaId: string; antennaId: string;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;
@ -150,7 +150,7 @@ export type Channels = {
channel: { channel: {
params: { params: {
channelId: string; channelId: string;
idOnly?: boolean, minimize?: boolean,
}; };
events: { events: {
note: (payload: Note) => void; note: (payload: Note) => void;