UNPKG

@directus/api

Version:

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

30 lines (29 loc) 1.23 kB
import { useEnv } from '@directus/env'; import { RateLimiterQueue } from 'rate-limiter-flexible'; import { createRateLimiter } from '../../rate-limiter.js'; import { toBoolean } from '@directus/utils'; import { EmailLimitExceededError } from '@directus/errors'; 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']), }); } export 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']) : undefined, duration: 'RATE_LIMITER_EMAIL_DURATION' in env ? Number(env['RATE_LIMITER_EMAIL_DURATION']) : undefined, message: 'RATE_LIMITER_EMAIL_ERROR_MESSAGE' in env ? String(env['RATE_LIMITER_EMAIL_ERROR_MESSAGE']) : undefined, }); } throw err; } }