diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index 5bff7f718..963f3bbfd 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -40,7 +40,7 @@ export const meta = { res: { type: 'object', - optional: false, nullable: false, + optional: true, nullable: false, properties: { createdNote: { type: 'object', @@ -207,6 +207,7 @@ export const paramDef = { }, required: ['choices'], }, + noCreatedNote: { type: 'boolean', default: false }, }, // (re)note with text, files and poll are optional if: { @@ -281,7 +282,8 @@ export default class extends Endpoint { // eslint- const note = await this.notesRepository.findOneBy({ id: idempotent }); if (note) { logger.info('The request has already been processed.', { noteId: note.id }); - return { createdNote: await this.noteEntityService.pack(note, me) }; + if (ps.noCreatedNote) return; + else return { createdNote: await this.noteEntityService.pack(note, me) }; } } @@ -453,7 +455,8 @@ export default class extends Endpoint { // eslint- await this.redisForTimelines.set(`note:idempotent:${me.id}:${hash}`, note.id, 'EX', 60); logger.info('Successfully created a note.', { noteId: note.id }); - return { + if (ps.noCreatedNote) return; + else return { createdNote: await this.noteEntityService.pack(note, me), }; } catch (err) { diff --git a/packages/backend/src/server/web/cli.js b/packages/backend/src/server/web/cli.js index 30ee77f4d..2cffd6063 100644 --- a/packages/backend/src/server/web/cli.js +++ b/packages/backend/src/server/web/cli.js @@ -41,7 +41,8 @@ window.onload = async () => { document.getElementById('submit').addEventListener('click', () => { api('notes/create', { - text: document.getElementById('text').value + text: document.getElementById('text').value, + noCreatedNote: true, }).then(() => { location.reload(); }); diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 27dc8a5f4..464371543 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -798,6 +798,7 @@ async function post(ev?: MouseEvent) { visibility: visibility.value, visibleUserIds: visibility.value === 'specified' ? visibleUsers.value.map(u => u.id) : undefined, reactionAcceptance: reactionAcceptance.value, + noCreatedNote: true, }; if (withHashtags.value && hashtags.value && hashtags.value.trim() !== '') { diff --git a/packages/frontend/src/pages/reversi/game.vue b/packages/frontend/src/pages/reversi/game.vue index d95dce18a..865b8425d 100644 --- a/packages/frontend/src/pages/reversi/game.vue +++ b/packages/frontend/src/pages/reversi/game.vue @@ -46,6 +46,7 @@ function start(_game: Misskey.entities.ReversiGameDetailed) { misskeyApi('notes/create', { text: i18n.ts._reversi.iStartedAGame + '\n' + location.href, visibility: 'home', + noCreatedNote: true, }); } diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts index 92e421cda..b7d3c1abf 100644 --- a/packages/frontend/src/scripts/get-note-menu.ts +++ b/packages/frontend/src/scripts/get-note-menu.ts @@ -543,6 +543,7 @@ export function getRenoteMenu(props: { misskeyApi('notes/create', { renoteId: appearNote.id, channelId: appearNote.channelId, + noCreatedNote: true, }).then(() => { os.toast(i18n.ts.renoted); }); @@ -589,6 +590,7 @@ export function getRenoteMenu(props: { localOnly, visibility, renoteId: appearNote.id, + noCreatedNote: true, }).then(() => { os.toast(i18n.ts.renoted); }); @@ -630,6 +632,7 @@ export function getRenoteMenu(props: { misskeyApi('notes/create', { renoteId: appearNote.id, channelId: channel.id, + noCreatedNote: true, }).then(() => { os.toast(i18n.tsx.renotedToX({ name: channel.name })); }); diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index a3d105d06..6c563ea2c 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -23465,6 +23465,8 @@ export type operations = { expiresAt?: number | null; expiredAfter?: number | null; }) | null; + /** @default false */ + noCreatedNote?: boolean; }; }; }; @@ -23477,6 +23479,10 @@ export type operations = { }; }; }; + /** @description OK (without any results) */ + 204: { + content: never; + }; /** @description Client error */ 400: { content: { diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts index cc79d8871..e2f6ab86c 100644 --- a/packages/sw/src/sw.ts +++ b/packages/sw/src/sw.ts @@ -114,7 +114,7 @@ globalThis.addEventListener('notificationclick', (ev: ServiceWorkerGlobalScopeEv if ('note' in data.body) client = await swos.openPost({ reply: data.body.note }, loginId); break; case 'renote': - if ('note' in data.body) await swos.api('notes/create', loginId, { renoteId: data.body.note.id }); + if ('note' in data.body) await swos.api('notes/create', loginId, { renoteId: data.body.note.id, noCreatedNote: true }); break; case 'accept': switch (data.body.type) {