UNPKG

@directus/api

Version:

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

30 lines (29 loc) 1.25 kB
import { useEnv } from '@directus/env'; import { RateLimiterMemory, RateLimiterRedis, RateLimiterRes } from 'rate-limiter-flexible'; import { createRateLimiter } from '../../rate-limiter.js'; import { toBoolean } from '@directus/utils'; import { EmailLimitExceededError } from '@directus/errors'; let emailRateLimiter; const env = useEnv(); if (toBoolean(env['RATE_LIMITER_EMAIL_FLOWS_ENABLED']) === true) { emailRateLimiter = createRateLimiter('RATE_LIMITER_EMAIL_FLOWS'); } export async function useFlowsEmailRateLimiter(flow_id) { if (!emailRateLimiter) return; try { await emailRateLimiter.consume(flow_id, 1); } catch (err) { if (err instanceof RateLimiterRes) { throw new EmailLimitExceededError({ points: 'RATE_LIMITER_EMAIL_FLOWS_POINTS' in env ? Number(env['RATE_LIMITER_EMAIL_FLOWS_POINTS']) : undefined, duration: 'RATE_LIMITER_EMAIL_FLOWS_DURATION' in env ? Number(env['RATE_LIMITER_EMAIL_FLOWS_DURATION']) : undefined, message: 'RATE_LIMITER_EMAIL_FLOWS_ERROR_MESSAGE' in env ? String(env['RATE_LIMITER_EMAIL_FLOWS_ERROR_MESSAGE']) : undefined, }); } throw err; } }