1+ import { MachineResources } from "@trigger.dev/core/v3" ;
12import { SupervisorHttpClient } from "./http.js" ;
23import { WorkerApiDequeueResponseBody } from "./schemas.js" ;
34
45type RunQueueConsumerOptions = {
56 client : SupervisorHttpClient ;
67 intervalMs ?: number ;
8+ preDequeue ?: ( ) => Promise < {
9+ maxResources ?: MachineResources ;
10+ } > ;
711 onDequeue : ( messages : WorkerApiDequeueResponseBody ) => Promise < void > ;
812} ;
913
1014export class RunQueueConsumer {
1115 private readonly client : SupervisorHttpClient ;
16+ private readonly preDequeue ?: ( ) => Promise < {
17+ maxResources ?: MachineResources ;
18+ } > ;
1219 private readonly onDequeue : ( messages : WorkerApiDequeueResponseBody ) => Promise < void > ;
1320
1421 private intervalMs : number ;
@@ -17,6 +24,7 @@ export class RunQueueConsumer {
1724 constructor ( opts : RunQueueConsumerOptions ) {
1825 this . isEnabled = false ;
1926 this . intervalMs = opts . intervalMs ?? 5_000 ;
27+ this . preDequeue = opts . preDequeue ;
2028 this . onDequeue = opts . onDequeue ;
2129 this . client = opts . client ;
2230 }
@@ -46,8 +54,18 @@ export class RunQueueConsumer {
4654 return ;
4755 }
4856
57+ let maxResources : MachineResources | undefined ;
58+ if ( this . preDequeue ) {
59+ try {
60+ const preDequeueResult = await this . preDequeue ( ) ;
61+ maxResources = preDequeueResult . maxResources ;
62+ } catch ( preDequeueError ) {
63+ console . error ( "[RunQueueConsumer] preDequeue error" , { error : preDequeueError } ) ;
64+ }
65+ }
66+
4967 try {
50- const response = await this . client . dequeue ( ) ;
68+ const response = await this . client . dequeue ( { maxResources } ) ;
5169
5270 if ( ! response . success ) {
5371 console . error ( "[RunQueueConsumer] Failed to dequeue" , { error : response . error } ) ;
0 commit comments