Implement per-team API rate limiting with Redis (#164)

This commit is contained in:
KM Koushik
2025-05-19 21:55:10 +10:00
committed by GitHub
parent 14557a96ac
commit 89bf97488e
19 changed files with 125 additions and 41 deletions
@@ -49,7 +49,7 @@ const route = createRoute({
function addContact(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const contactBook = await getContactBook(c, team.id);
@@ -39,7 +39,7 @@ const route = createRoute({
function deleteContactHandler(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
await getContactBook(c, team.id);
const contactId = c.req.param("contactId");
@@ -50,7 +50,7 @@ const route = createRoute({
function getContact(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
await getContactBook(c, team.id);
@@ -51,7 +51,7 @@ const route = createRoute({
function getContacts(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const cb = await getContactBook(c, team.id);
@@ -52,7 +52,7 @@ const route = createRoute({
function updateContactInfo(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
await getContactBook(c, team.id);
const contactId = c.req.param("contactId");
@@ -49,7 +49,7 @@ const route = createRoute({
function upsertContact(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const contactBook = await getContactBook(c, team.id);
@@ -34,7 +34,7 @@ const route = createRoute({
function createDomain(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const body = c.req.valid("json");
const response = await createDomainService(team.id, body.name, body.region);
@@ -21,7 +21,7 @@ const route = createRoute({
function getDomains(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const domains = await db.domain.findMany({ where: { teamId: team.id } });
@@ -33,8 +33,6 @@ const route = createRoute({
function verifyDomain(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
await db.domain.update({
where: { id: c.req.valid("param").id },
data: { isVerifying: true },
@@ -44,7 +44,7 @@ const route = createRoute({
function sendBatch(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const emailPayloads = c.req.valid("json");
// Add teamId and apiKeyId to each email payload
@@ -35,7 +35,7 @@ const route = createRoute({
function cancelScheduledEmail(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const emailId = c.req.param("emailId");
await checkIsValidEmailId(emailId, team.id);
@@ -57,7 +57,7 @@ const route = createRoute({
function send(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const emailId = c.req.param("emailId");
@@ -31,7 +31,7 @@ const route = createRoute({
function send(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
let html = undefined;
@@ -45,7 +45,7 @@ const route = createRoute({
function updateEmailScheduledAt(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
const team = c.var.team;
const emailId = c.req.param("emailId");
await checkIsValidEmailId(emailId, team.id);