diff --git a/packages/backend/src/server/SkRateLimiterService.ts b/packages/backend/src/server/SkRateLimiterService.ts index 212f00c86a..3212e5b4bd 100644 --- a/packages/backend/src/server/SkRateLimiterService.ts +++ b/packages/backend/src/server/SkRateLimiterService.ts @@ -13,6 +13,7 @@ import { RoleService } from '@/core/RoleService.js'; import { CacheManagementService, type ManagedMemoryKVCache } from '@/global/CacheManagementService.js'; import { ConflictError } from '@/misc/errors/ConflictError.js'; import { DI } from '@/di-symbols.js'; +import { bindThis } from '@/decorators.js'; // Sentinel value used for caching the default role template. // Required because MemoryKVCache doesn't support null keys. @@ -64,6 +65,7 @@ export class SkRateLimiterService { * @param limit The limit definition * @param actorOrUser authenticated client user or IP hash */ + @bindThis public async limit(limit: Keyed, actorOrUser: string | MiUser): Promise { if (this.disabled) { return disabledLimitInfo; diff --git a/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts b/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts index c8e22c5e3c..e9aff39f06 100644 --- a/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts +++ b/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts @@ -67,6 +67,10 @@ describe(SkRateLimiterService, () => { mockEnvService.env.NODE_ENV = 'production'; }); + afterEach(() => { + serviceUnderTest().dispose(); + }); + describe('limit', () => { const actor = 'actor'; const key = 'test';