Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions src/relay/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
}

// Main Lambda handler
exports.handler = async (event, context) => {

Check warning on line 101 in src/relay/index.js

View workflow job for this annotation

GitHub Actions / build-and-test (20.x)

'context' is defined but never used. Allowed unused args must match /^_/u
// Handle preflight OPTIONS request, gateway should mock
if (event.httpMethod === 'OPTIONS') {
const headers = {
Expand Down Expand Up @@ -128,24 +128,17 @@
return await createResponse(401, { error: 'Invalid API key' });
}

// Check daily limit BEFORE processing request
// Always check usage status for headers and quota info
usageStatus = await checkDailyLimit(user.userId, user.tier);
if (usageStatus.exceeded) {
return await createResponse(429, {
error: 'Daily request limit exceeded',
dailyLimit: usageStatus.dailyLimit,
currentUsage: usageStatus.currentUsage,
resetTime: 'midnight UTC'
}, user, usageStatus);
}
}

// Handle quota information requests BEFORE rate limiting check
if (event.httpMethod === 'GET' && (event.resource === '/relay/quotas' || event.path === '/relay/quotas')) {
if (!user) {
return await createResponse(401, { error: 'API key required for quota information' });
}

// Return detailed quota information
// Return detailed quota information (always 200, even if exceeded)
const quotaInfo = {
userId: user.userId,
email: user.email,
Expand All @@ -163,6 +156,16 @@
return await createResponse(200, quotaInfo, user, usageStatus);
}

// Check daily limit for transaction requests (POST)
if (user && usageStatus && usageStatus.exceeded) {
return await createResponse(429, {
error: 'Daily request limit exceeded',
dailyLimit: usageStatus.dailyLimit,
currentUsage: usageStatus.currentUsage,
resetTime: 'midnight UTC'
}, user, usageStatus);
}

// Initialize provider if not already done
if (!provider || !wallet || !forwarderContract) {
try {
Expand Down
Loading