summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/notes
diff options
context:
space:
mode:
authorJulia <julia@insertdomain.name>2024-11-28 06:15:32 +0000
committerJulia <julia@insertdomain.name>2024-11-28 06:15:32 +0000
commit52976588a75797fe5fd39524f9535e3c8556f2d3 (patch)
tree95faee7885826d422b976c1015a5e951249c2f10 /packages/backend/src/server/api/endpoints/notes
parentmerge: silence linter (!785) (diff)
parentBump develop version (diff)
downloadsharkey-52976588a75797fe5fd39524f9535e3c8556f2d3.tar.gz
sharkey-52976588a75797fe5fd39524f9535e3c8556f2d3.tar.bz2
sharkey-52976588a75797fe5fd39524f9535e3c8556f2d3.zip
merge: Bump develop version (!789)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/789
Diffstat (limited to 'packages/backend/src/server/api/endpoints/notes')
-rw-r--r--packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/children.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/clips.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/conversation.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/favorites/delete.ts7
-rw-r--r--packages/backend/src/server/api/endpoints/notes/featured.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/following.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/global-timeline.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/like.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/local-timeline.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/mentions.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/polls/refresh.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/polls/vote.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/reactions.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/reactions/create.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/renotes.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/notes/replies.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/search-by-tag.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/search.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/show.ts10
-rw-r--r--packages/backend/src/server/api/endpoints/notes/state.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/timeline.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/translate.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/versions.ts10
28 files changed, 176 insertions, 6 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts b/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts
index 94ec8c37ec..d36d1dfc15 100644
--- a/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts
@@ -30,6 +30,12 @@ export const meta = {
id: '0332fc13-6ab2-4427-ae80-a9fadffd1a6c',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts
index 2654e196b2..e69ba9be7e 100644
--- a/packages/backend/src/server/api/endpoints/notes/children.ts
+++ b/packages/backend/src/server/api/endpoints/notes/children.ts
@@ -25,6 +25,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/clips.ts b/packages/backend/src/server/api/endpoints/notes/clips.ts
index 29cab9f212..b3dcdcef12 100644
--- a/packages/backend/src/server/api/endpoints/notes/clips.ts
+++ b/packages/backend/src/server/api/endpoints/notes/clips.ts
@@ -34,6 +34,12 @@ export const meta = {
id: '47db1a1c-b0af-458d-8fb4-986e4efafe1e',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/conversation.ts b/packages/backend/src/server/api/endpoints/notes/conversation.ts
index 37bc5cc878..80aea580ec 100644
--- a/packages/backend/src/server/api/endpoints/notes/conversation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/conversation.ts
@@ -34,6 +34,12 @@ export const meta = {
id: 'e1035875-9551-45ec-afa8-1ded1fcb53c8',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts b/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
index 2036facdba..19a6a5af54 100644
--- a/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
@@ -9,6 +9,7 @@ import { GetterService } from '@/server/api/GetterService.js';
import { DI } from '@/di-symbols.js';
import type { NoteFavoritesRepository } from '@/models/_.js';
import { ApiError } from '../../../error.js';
+import ms from 'ms';
export const meta = {
tags: ['notes', 'favorites'],
@@ -30,6 +31,12 @@ export const meta = {
id: 'b625fc69-635e-45e9-86f4-dbefbef35af5',
},
},
+
+ // 20 calls per hour (match create)
+ limit: {
+ duration: ms('1hour'),
+ max: 20,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/featured.ts b/packages/backend/src/server/api/endpoints/notes/featured.ts
index dcd971360d..4853489827 100644
--- a/packages/backend/src/server/api/endpoints/notes/featured.ts
+++ b/packages/backend/src/server/api/endpoints/notes/featured.ts
@@ -28,6 +28,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/following.ts b/packages/backend/src/server/api/endpoints/notes/following.ts
index f8e9e5c4a1..228793fbf6 100644
--- a/packages/backend/src/server/api/endpoints/notes/following.ts
+++ b/packages/backend/src/server/api/endpoints/notes/following.ts
@@ -42,6 +42,12 @@ export const meta = {
id: '7a1b9cb6-235b-4e58-9c00-32c1796f502c',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
index d660f3fb69..c45fcd7c5c 100644
--- a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
@@ -35,6 +35,12 @@ export const meta = {
id: '0332fc13-6ab2-4427-ae80-a9fadffd1a6b',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
@@ -98,7 +104,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
if (!ps.withBots) query.andWhere('user.isBot = FALSE');
-
+
if (ps.withRenotes === false) {
query.andWhere(new Brackets(qb => {
qb.where('note.renoteId IS NULL');
diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
index 75be7b9888..3c66154e19 100644
--- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -49,6 +49,12 @@ export const meta = {
id: 'dfaa3eb7-8002-4cb7-bcc4-1095df46656f',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/like.ts b/packages/backend/src/server/api/endpoints/notes/like.ts
index 593463aea0..9068de2865 100644
--- a/packages/backend/src/server/api/endpoints/notes/like.ts
+++ b/packages/backend/src/server/api/endpoints/notes/like.ts
@@ -34,6 +34,12 @@ export const meta = {
id: 'eaccdc08-ddef-43fe-908f-d108faad57f5',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
index d4c806d7e2..1f986079c2 100644
--- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
@@ -43,6 +43,12 @@ export const meta = {
id: 'dd9c8400-1cb5-4eef-8a31-200c5f933793',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/mentions.ts b/packages/backend/src/server/api/endpoints/notes/mentions.ts
index 5558dd3a8b..38912421a4 100644
--- a/packages/backend/src/server/api/endpoints/notes/mentions.ts
+++ b/packages/backend/src/server/api/endpoints/notes/mentions.ts
@@ -27,6 +27,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
index 4fd6f8682d..33a9c281b3 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
@@ -25,6 +25,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/refresh.ts b/packages/backend/src/server/api/endpoints/notes/polls/refresh.ts
index b96691f894..69e718fc81 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/refresh.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/refresh.ts
@@ -45,6 +45,12 @@ export const meta = {
id: '85a5377e-b1e9-4617-b0b9-5bea73331e49',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
index f33f49075b..a5014a490f 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
@@ -63,6 +63,12 @@ export const meta = {
id: '85a5377e-b1e9-4617-b0b9-5bea73331e49',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions.ts b/packages/backend/src/server/api/endpoints/notes/reactions.ts
index 7e334df93e..e683cc87bd 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions.ts
@@ -37,6 +37,12 @@ export const meta = {
id: '263fff3d-d0e1-4af4-bea7-8408059b451a',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions/create.ts b/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
index 0f0dcca605..559ca43eae 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
@@ -43,6 +43,12 @@ export const meta = {
id: 'eaccdc08-ddef-43fe-908f-d108faad57f5',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/renotes.ts b/packages/backend/src/server/api/endpoints/notes/renotes.ts
index a88c286f64..15f114266a 100644
--- a/packages/backend/src/server/api/endpoints/notes/renotes.ts
+++ b/packages/backend/src/server/api/endpoints/notes/renotes.ts
@@ -34,6 +34,13 @@ export const meta = {
id: '12908022-2e21-46cd-ba6a-3edaf6093f46',
},
},
+
+ // 100 calls per 10 seconds.
+ // This is high because the frontend calls this in a tight loop while loading timelines.
+ limit: {
+ duration: 1000 * 10,
+ max: 100,
+ },
} as const;
export const paramDef = {
@@ -72,7 +79,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
-
+
if (ps.userId) {
query.andWhere("user.id = :userId", { userId: ps.userId });
}
diff --git a/packages/backend/src/server/api/endpoints/notes/replies.ts b/packages/backend/src/server/api/endpoints/notes/replies.ts
index 5f32332a6a..3f0a8157c4 100644
--- a/packages/backend/src/server/api/endpoints/notes/replies.ts
+++ b/packages/backend/src/server/api/endpoints/notes/replies.ts
@@ -24,6 +24,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
index 2b4885a194..227ac0ebbf 100644
--- a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
+++ b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
@@ -27,6 +27,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/search.ts b/packages/backend/src/server/api/endpoints/notes/search.ts
index e140436d6b..eca55cd085 100644
--- a/packages/backend/src/server/api/endpoints/notes/search.ts
+++ b/packages/backend/src/server/api/endpoints/notes/search.ts
@@ -32,6 +32,12 @@ export const meta = {
id: '0b44998d-77aa-4427-80d0-d2c9b8523011',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/show.ts b/packages/backend/src/server/api/endpoints/notes/show.ts
index f82ba5473d..49c51cb33c 100644
--- a/packages/backend/src/server/api/endpoints/notes/show.ts
+++ b/packages/backend/src/server/api/endpoints/notes/show.ts
@@ -29,6 +29,12 @@ export const meta = {
id: '24fcbfc6-2e37-42b6-8388-c29b3861a08d',
},
},
+
+ // 2 calls per second
+ limit: {
+ duration: 1000,
+ max: 2,
+ },
} as const;
export const paramDef = {
@@ -44,7 +50,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
-
+
private noteEntityService: NoteEntityService,
private queryService: QueryService,
) {
@@ -56,7 +62,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (me) {
this.queryService.generateBlockedUserQuery(query, me);
}
-
+
const note = await query.getOne();
if (note === null) {
diff --git a/packages/backend/src/server/api/endpoints/notes/state.ts b/packages/backend/src/server/api/endpoints/notes/state.ts
index 4c1eb86542..448e704528 100644
--- a/packages/backend/src/server/api/endpoints/notes/state.ts
+++ b/packages/backend/src/server/api/endpoints/notes/state.ts
@@ -28,6 +28,12 @@ export const meta = {
},
},
},
+
+ // 10 calls per second
+ limit: {
+ duration: 1000,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts b/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
index d94d6cd652..50ce4fb89a 100644
--- a/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
@@ -24,6 +24,12 @@ export const meta = {
id: 'bddd57ac-ceb3-b29d-4334-86ea5fae481a',
},
},
+
+ // 10 calls per hour (match create)
+ limit: {
+ duration: 1000 * 60 * 60,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index d40a04c1b1..5a46f66f9e 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -32,6 +32,12 @@ export const meta = {
ref: 'Note',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/translate.ts b/packages/backend/src/server/api/endpoints/notes/translate.ts
index 234248db5c..61a511510c 100644
--- a/packages/backend/src/server/api/endpoints/notes/translate.ts
+++ b/packages/backend/src/server/api/endpoints/notes/translate.ts
@@ -46,6 +46,12 @@ export const meta = {
id: 'ea29f2ca-c368-43b3-aaf1-5ac3e74bbe5d',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
index 87f9b322a6..55cda135e2 100644
--- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -39,6 +39,12 @@ export const meta = {
id: '8fb1fbd5-e476-4c37-9fb0-43d55b63a2ff',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/notes/versions.ts b/packages/backend/src/server/api/endpoints/notes/versions.ts
index 2b774ae2b0..343417f0e2 100644
--- a/packages/backend/src/server/api/endpoints/notes/versions.ts
+++ b/packages/backend/src/server/api/endpoints/notes/versions.ts
@@ -28,6 +28,12 @@ export const meta = {
id: '24fcbfc6-2e37-42b6-8388-c29b3861a08d',
},
},
+
+ // 10 calls per 5 seconds
+ limit: {
+ duration: 1000 * 5,
+ max: 10,
+ },
} as const;
export const paramDef = {
@@ -43,7 +49,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
-
+
private getterService: GetterService,
private queryService: QueryService,
) {
@@ -53,7 +59,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.where('note.id = :noteId', { noteId: ps.noteId });
this.queryService.generateVisibilityQuery(query, me);
-
+
const note = await query.getOne();
if (note === null) {