@@ -4,6 +4,9 @@ import type { AuthenticatedEnvironment } from "~/services/apiAuth.server";
4
4
import { workerQueue } from "~/services/worker.server" ;
5
5
import { logger } from "../logger.server" ;
6
6
import { EventRecord , ExternalAccount } from "@trigger.dev/database" ;
7
+ import { Duration , RateLimiter } from "../rateLimiter.server" ;
8
+ import { Ratelimit } from "@upstash/ratelimit" ;
9
+ import { env } from "~/env.server" ;
7
10
8
11
type UpdateEventInput = {
9
12
tx : PrismaClientOrTransaction ;
@@ -31,9 +34,17 @@ const EVENT_UPDATE_THRESHOLD_WINDOW_IN_MSECS = 5 * 1000; // 5 seconds
31
34
32
35
export class IngestSendEvent {
33
36
#prismaClient: PrismaClientOrTransaction ;
37
+ #rateLimiter: RateLimiter ;
34
38
35
39
constructor ( prismaClient : PrismaClientOrTransaction = prisma , private deliverEvents = true ) {
36
40
this . #prismaClient = prismaClient ;
41
+ this . #rateLimiter = new RateLimiter ( {
42
+ keyPrefix : "ingestsendevent" ,
43
+ limiter : Ratelimit . slidingWindow (
44
+ env . INGEST_EVENT_RATE_LIMIT_MAX ,
45
+ env . INGEST_EVENT_RATE_LIMIT_WINDOW as Duration
46
+ ) ,
47
+ } ) ;
37
48
}
38
49
39
50
#calculateDeliverAt( options ?: SendEventOptions ) {
@@ -104,6 +115,20 @@ export class IngestSendEvent {
104
115
eventSource,
105
116
} ) ) ;
106
117
118
+ //rate limit
119
+ const { success, reset, limit } = await this . #rateLimiter. limit ( environment . organizationId ) ;
120
+
121
+ if ( success ) {
122
+ await this . enqueueWorkerEvent ( tx , eventLog ) ;
123
+ } else {
124
+ logger . info ( "IngestSendEvent: Rate limit exceeded" , {
125
+ organizationId : environment . organizationId ,
126
+ reset,
127
+ limit,
128
+ } ) ;
129
+ return ;
130
+ }
131
+
107
132
return eventLog ;
108
133
} ) ;
109
134
} catch ( error ) {
@@ -151,8 +176,6 @@ export class IngestSendEvent {
151
176
} ,
152
177
} ) ;
153
178
154
- await this . enqueueWorkerEvent ( tx , eventLog ) ;
155
-
156
179
return eventLog ;
157
180
}
158
181
@@ -177,8 +200,6 @@ export class IngestSendEvent {
177
200
} ,
178
201
} ) ;
179
202
180
- await this . enqueueWorkerEvent ( tx , updatedEventLog ) ;
181
-
182
203
return updatedEventLog ;
183
204
}
184
205
0 commit comments