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