Files
website/server/api/account/verify-email.post.ts
limes f7586648a5
Some checks failed
Build and Publish Docker Image / Build and Publish (amd64) (push) Has been cancelled
Build and Publish Docker Image / Build and Publish (arm64) (push) Has been cancelled
feat: bump ratelimits
2026-08-29 18:19:19 +02:00

37 lines
952 B
TypeScript

import { ClientError } from 'nice-grpc';
import { EmailVerifySchema } from '~~/shared/api-types';
import type { ApiErrorCodes } from '~~/shared/errors';
const bucket = createRatelimitBucket({
id: 'verify-email',
points: 20,
durationSec: 30 * 60, // 30 minutes
blockDurationSec: 1 * 60 * 60 // 1 hour
});
const errors: Record<string, ApiErrorCodes> = {
'INVALID_ARGUMENT: Missing email token': 'MISSING_EMAIL_TOKEN',
'INVALID_ARGUMENT: Invalid email token': 'INVALID_EMAIL_TOKEN'
};
export default defineEventHandler(async (event): Promise<void> => {
await enforceRatelimit(event, bucket);
const body = await readZodBody(event, EmailVerifySchema);
const grpc = useApiGrpc(event);
try {
await grpc.verifyEmail({
token: body.token
});
} catch (error: unknown) {
if (error instanceof ClientError) {
const errorCode = errors[error.details];
if (errorCode) {
throw createApiError(errorCode);
}
}
throw error;
}
});