diff --git a/deno.json b/deno.json index 0dd5034c..2601e28d 100644 --- a/deno.json +++ b/deno.json @@ -8,6 +8,7 @@ "./packages/lang", "./packages/metrics", "./packages/policies", + "./packages/ratelimiter", "./packages/translators", "./packages/uploaders" ], diff --git a/packages/ditto/controllers/nostr/relay.ts b/packages/ditto/controllers/nostr/relay.ts index 92906d04..b4924f22 100644 --- a/packages/ditto/controllers/nostr/relay.ts +++ b/packages/ditto/controllers/nostr/relay.ts @@ -1,5 +1,6 @@ import { type DittoConf } from '@ditto/conf'; import { relayConnectionsGauge, relayEventsCounter, relayMessagesCounter } from '@ditto/metrics'; +import { MemoryRateLimiter, MultiRateLimiter, type RateLimiter } from '@ditto/ratelimiter'; import { logi } from '@soapbox/logi'; import { JsonValue } from '@std/json'; import { @@ -20,9 +21,6 @@ import { RelayError } from '@/RelayError.ts'; import { Storages } from '@/storages.ts'; import { errorJson } from '@/utils/log.ts'; import { purifyEvent } from '@/utils/purify.ts'; -import { MemoryRateLimiter } from '@/utils/ratelimiter/MemoryRateLimiter.ts'; -import { MultiRateLimiter } from '@/utils/ratelimiter/MultiRateLimiter.ts'; -import { RateLimiter } from '@/utils/ratelimiter/types.ts'; import { Time } from '@/utils/time.ts'; /** Limit of initial events returned for a subscription. */ diff --git a/packages/ditto/utils/ratelimiter/MemoryRateLimiter.test.ts b/packages/ratelimiter/MemoryRateLimiter.test.ts similarity index 100% rename from packages/ditto/utils/ratelimiter/MemoryRateLimiter.test.ts rename to packages/ratelimiter/MemoryRateLimiter.test.ts diff --git a/packages/ditto/utils/ratelimiter/MemoryRateLimiter.ts b/packages/ratelimiter/MemoryRateLimiter.ts similarity index 95% rename from packages/ditto/utils/ratelimiter/MemoryRateLimiter.ts rename to packages/ratelimiter/MemoryRateLimiter.ts index 0eaa5540..15546fd0 100644 --- a/packages/ditto/utils/ratelimiter/MemoryRateLimiter.ts +++ b/packages/ratelimiter/MemoryRateLimiter.ts @@ -1,5 +1,6 @@ import { RateLimitError } from './RateLimitError.ts'; -import { RateLimiter, RateLimiterClient } from './types.ts'; + +import type { RateLimiter, RateLimiterClient } from './types.ts'; interface MemoryRateLimiterOpts { limit: number; diff --git a/packages/ditto/utils/ratelimiter/MultiRateLimiter.test.ts b/packages/ratelimiter/MultiRateLimiter.test.ts similarity index 100% rename from packages/ditto/utils/ratelimiter/MultiRateLimiter.test.ts rename to packages/ratelimiter/MultiRateLimiter.test.ts diff --git a/packages/ditto/utils/ratelimiter/MultiRateLimiter.ts b/packages/ratelimiter/MultiRateLimiter.ts similarity index 94% rename from packages/ditto/utils/ratelimiter/MultiRateLimiter.ts rename to packages/ratelimiter/MultiRateLimiter.ts index 14b23142..189ca177 100644 --- a/packages/ditto/utils/ratelimiter/MultiRateLimiter.ts +++ b/packages/ratelimiter/MultiRateLimiter.ts @@ -1,4 +1,4 @@ -import { RateLimiter, RateLimiterClient } from './types.ts'; +import type { RateLimiter, RateLimiterClient } from './types.ts'; export class MultiRateLimiter { constructor(private limiters: RateLimiter[]) {} diff --git a/packages/ditto/utils/ratelimiter/RateLimitError.ts b/packages/ratelimiter/RateLimitError.ts similarity index 73% rename from packages/ditto/utils/ratelimiter/RateLimitError.ts rename to packages/ratelimiter/RateLimitError.ts index ce21af72..da3a4fd8 100644 --- a/packages/ditto/utils/ratelimiter/RateLimitError.ts +++ b/packages/ratelimiter/RateLimitError.ts @@ -1,4 +1,4 @@ -import { RateLimiter, RateLimiterClient } from './types.ts'; +import type { RateLimiter, RateLimiterClient } from './types.ts'; export class RateLimitError extends Error { constructor( diff --git a/packages/ratelimiter/deno.json b/packages/ratelimiter/deno.json new file mode 100644 index 00000000..66e97171 --- /dev/null +++ b/packages/ratelimiter/deno.json @@ -0,0 +1,7 @@ +{ + "name": "@ditto/ratelimiter", + "version": "1.1.0", + "exports": { + ".": "./mod.ts" + } +} diff --git a/packages/ratelimiter/mod.ts b/packages/ratelimiter/mod.ts new file mode 100644 index 00000000..58bbbeaa --- /dev/null +++ b/packages/ratelimiter/mod.ts @@ -0,0 +1,5 @@ +export { MemoryRateLimiter } from './MemoryRateLimiter.ts'; +export { MultiRateLimiter } from './MultiRateLimiter.ts'; +export { RateLimitError } from './RateLimitError.ts'; + +export type { RateLimiter, RateLimiterClient } from './types.ts'; diff --git a/packages/ditto/utils/ratelimiter/types.ts b/packages/ratelimiter/types.ts similarity index 100% rename from packages/ditto/utils/ratelimiter/types.ts rename to packages/ratelimiter/types.ts