@@ -9,15 +9,14 @@ import { z } from "zod";
99import { prisma } from "~/db.server" ;
1010import { env } from "~/env.server" ;
1111import { EngineServiceValidationError } from "~/runEngine/concerns/errors" ;
12- import {
13- ApiAuthenticationResultSuccess ,
14- AuthenticatedEnvironment ,
15- getOneTimeUseToken ,
16- } from "~/services/apiAuth.server" ;
12+ import { ApiAuthenticationResultSuccess , getOneTimeUseToken } from "~/services/apiAuth.server" ;
1713import { logger } from "~/services/logger.server" ;
18- import { requestIdempotency } from "~/services/requestIdempotencyInstance.server" ;
1914import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server" ;
2015import { resolveIdempotencyKeyTTL } from "~/utils/idempotencyKeys.server" ;
16+ import {
17+ handleRequestIdempotency ,
18+ saveRequestIdempotency ,
19+ } from "~/utils/requestIdempotency.server" ;
2120import { ServiceValidationError } from "~/v3/services/baseService.server" ;
2221import { OutOfEntitlementError , TriggerTaskService } from "~/v3/services/triggerTask.server" ;
2322
@@ -33,7 +32,7 @@ export const HeadersSchema = z.object({
3332 "x-trigger-worker" : z . string ( ) . nullish ( ) ,
3433 "x-trigger-client" : z . string ( ) . nullish ( ) ,
3534 "x-trigger-engine-version" : RunEngineVersionSchema . nullish ( ) ,
36- "x-trigger-request-id " : z . string ( ) . nullish ( ) ,
35+ "x-trigger-request-idempotency-key " : z . string ( ) . nullish ( ) ,
3736 traceparent : z . string ( ) . optional ( ) ,
3837 tracestate : z . string ( ) . optional ( ) ,
3938} ) ;
@@ -63,51 +62,32 @@ const { action, loader } = createActionApiRoute(
6362 "x-trigger-worker" : isFromWorker ,
6463 "x-trigger-client" : triggerClient ,
6564 "x-trigger-engine-version" : engineVersion ,
66- "x-trigger-request-id " : requestId ,
65+ "x-trigger-request-idempotency-key " : requestIdempotencyKey ,
6766 } = headers ;
6867
69- if ( requestId ) {
70- logger . debug ( "request-idempotency: checking for cached trigger request" , {
71- requestId,
72- } ) ;
73-
74- const cachedRequest = await requestIdempotency . checkRequest ( "trigger" , requestId ) ;
75-
76- if ( cachedRequest ) {
77- logger . info ( "request-idempotency: found cached trigger request" , {
78- requestId,
79- cachedRequest,
80- } ) ;
81-
82- const cachedRun = await prisma . taskRun . findFirst ( {
68+ const cachedResponse = await handleRequestIdempotency ( requestIdempotencyKey , {
69+ requestType : "trigger" ,
70+ findCachedEntity : async ( cachedRequestId ) => {
71+ return await prisma . taskRun . findFirst ( {
8372 where : {
84- id : cachedRequest . id ,
73+ id : cachedRequestId ,
8574 } ,
8675 select : {
8776 friendlyId : true ,
8877 } ,
8978 } ) ;
79+ } ,
80+ buildResponse : ( cachedRun ) => ( {
81+ id : cachedRun . friendlyId ,
82+ isCached : false ,
83+ } ) ,
84+ buildResponseHeaders : async ( responseBody , cachedEntity ) => {
85+ return await responseHeaders ( cachedEntity , authentication , triggerClient ) ;
86+ } ,
87+ } ) ;
9088
91- if ( cachedRun ) {
92- logger . info ( "request-idempotency: found cached trigger run" , {
93- requestId,
94- cachedRun,
95- } ) ;
96-
97- const $responseHeaders = await responseHeaders ( cachedRun , authentication , triggerClient ) ;
98-
99- return json (
100- {
101- id : cachedRun . friendlyId ,
102- isCached : false ,
103- } ,
104- {
105- headers : $responseHeaders ,
106- status : 200 ,
107- }
108- ) ;
109- }
110- }
89+ if ( cachedResponse ) {
90+ return cachedResponse ;
11191 }
11292
11393 const service = new TriggerTaskService ( ) ;
@@ -152,11 +132,7 @@ const { action, loader } = createActionApiRoute(
152132 return json ( { error : "Task not found" } , { status : 404 } ) ;
153133 }
154134
155- if ( requestId ) {
156- await requestIdempotency . saveRequest ( "trigger" , requestId , {
157- id : result . run . id ,
158- } ) ;
159- }
135+ await saveRequestIdempotency ( requestIdempotencyKey , "trigger" , result . run . id ) ;
160136
161137 const $responseHeaders = await responseHeaders ( result . run , authentication , triggerClient ) ;
162138
@@ -167,7 +143,7 @@ const { action, loader } = createActionApiRoute(
167143 } ,
168144 {
169145 headers : $responseHeaders ,
170- status : 200 ,
146+ status : 408 ,
171147 }
172148 ) ;
173149 } catch ( error ) {
0 commit comments