koala73/worldmonitor · error · ApiError
data.message || 'Too many requests'
Error message
data.message || 'Too many requests'
What it means
HTTP-layer error in submitContact: the direct Convex contact-messages mutation was rejected with a rate-limit policy failure (ConvexError with data.kind 'rate_limited'). The seam preserves the policy message (defaulting to 'Too many requests') so expected client throttling surfaces as 429 rather than an opaque 500.
Source
Thrown at server/worldmonitor/leads/v1/submit-contact.ts:199
const client = new ConvexHttpClient(convexUrl);
try {
await client.mutation(api.contactMessages.submit, {
name: safeName,
email: email.trim(),
organization: safeOrg,
phone: safePhone,
message: safeMsg,
source: safeSource,
});
} catch (err) {
// Preserve policy failures from direct Convex enforcement at the HTTP seam
// instead of turning expected client errors into opaque 500 responses.
// Convex serializes ConvexError payloads onto err.data.
if (err instanceof ConvexError) {
const data = getConvexPolicyErrorData(err);
if (data?.kind === 'rate_limited') {
throw new ApiError(429, data.message || 'Too many requests', '');
}
if (data?.kind === 'FREE_EMAIL_NOT_ALLOWED') {
throw new ApiError(422, data.message || 'Please use your work email address', '');
}
}
throw err;
}
const emailSent = await sendNotificationEmail(
safeName,
email.trim(),
safeOrg,
safePhone,
safeMsg,
ip,
country,
);
View on GitHub (pinned to a96956387a)
Solutions
- Wait for the rate-limit window to pass and resubmit
- Avoid duplicate submissions (repeated clicks each consume limit budget)
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at server/worldmonitor/leads/v1/submit-contact.ts:198 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- HTTP status errors: handling 4xx and 5xx responses — how to handle 4xx and 5xx responses properly.
AI-assisted analysis of koala73/worldmonitor@a96956387a (2026-08-21).
Data as JSON: /api/errors/b5fb1be3d08364e8.
Report an issue: GitHub.