@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
26 lines (24 loc) • 1.17 kB
JavaScript
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 };