UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

26 lines (24 loc) 1.17 kB
import { createRateLimiter } from "../../rate-limiter.js"; import { useEnv } from "@directus/env"; import { EmailLimitExceededError } from "@directus/errors"; import { toBoolean } from "@directus/utils"; import { RateLimiterQueue } from "rate-limiter-flexible"; //#region src/services/mail/rate-limiter.ts let emailRateLimiterQueue; const env = useEnv(); if (toBoolean(env["RATE_LIMITER_EMAIL_ENABLED"]) === true) emailRateLimiterQueue = new RateLimiterQueue(createRateLimiter("RATE_LIMITER_EMAIL"), { maxQueueSize: Number(env["RATE_LIMITER_EMAIL_QUEUE_SIZE"]) }); async function useEmailRateLimiterQueue() { if (!emailRateLimiterQueue) return; try { await emailRateLimiterQueue.removeTokens(1); } catch (err) { if (err instanceof Error) throw new EmailLimitExceededError({ points: "RATE_LIMITER_EMAIL_POINTS" in env ? Number(env["RATE_LIMITER_EMAIL_POINTS"]) : void 0, duration: "RATE_LIMITER_EMAIL_DURATION" in env ? Number(env["RATE_LIMITER_EMAIL_DURATION"]) : void 0, message: "RATE_LIMITER_EMAIL_ERROR_MESSAGE" in env ? String(env["RATE_LIMITER_EMAIL_ERROR_MESSAGE"]) : void 0 }); throw err; } } //#endregion export { useEmailRateLimiterQueue };