@@ -12,7 +12,10 @@ export async function awaitEvent(
1212  entry : Doc < "steps" > , 
1313  args : {  eventId ?: Id < "events" > ;  name : string  } , 
1414)  { 
15-   const  event  =  await  getOrCreateEvent ( ctx ,  entry . workflowId ,  args ) ; 
15+   const  event  =  await  getOrCreateEvent ( ctx ,  entry . workflowId ,  args ,  [ 
16+     "sent" , 
17+     "created" , 
18+   ] ) ; 
1619  switch  ( event . state . kind )  { 
1720    case  "consumed" : { 
1821      throw  new  Error ( 
@@ -64,6 +67,7 @@ async function getOrCreateEvent(
6467  ctx : MutationCtx , 
6568  workflowId : Id < "workflows" > , 
6669  args : {  eventId ?: Id < "events" > ;  name ?: string  } , 
70+   statuses : Doc < "events" > [ "state" ] [ "kind" ] [ ] , 
6771) : Promise < Doc < "events" > >  { 
6872  if  ( args . eventId )  { 
6973    const  event  =  await  ctx . db . get ( args . eventId ) ; 
@@ -75,22 +79,16 @@ async function getOrCreateEvent(
7579    return  event ; 
7680  } 
7781  assert ( args . name ,  "Name is required if eventId is not specified" ) ; 
78-   const  sentEvent  =  await  ctx . db 
79-     . query ( "events" ) 
80-     . withIndex ( "workflowId_state" ,  ( q )  => 
81-       q . eq ( "workflowId" ,  workflowId ) . eq ( "state.kind" ,  "sent" ) , 
82-     ) 
83-     . filter ( ( q )  =>  q . eq ( "name" ,  args . name ) ) 
84-     . first ( ) ; 
85-   if  ( sentEvent )  return  sentEvent ; 
86-   const  createdEvent  =  await  ctx . db 
87-     . query ( "events" ) 
88-     . withIndex ( "workflowId_state" ,  ( q )  => 
89-       q . eq ( "workflowId" ,  workflowId ) . eq ( "state.kind" ,  "created" ) , 
90-     ) 
91-     . filter ( ( q )  =>  q . eq ( "name" ,  args . name ) ) 
92-     . first ( ) ; 
93-   if  ( createdEvent )  return  createdEvent ; 
82+   for  ( const  status  of  statuses )  { 
83+     const  event  =  await  ctx . db 
84+       . query ( "events" ) 
85+       . withIndex ( "workflowId_state" ,  ( q )  => 
86+         q . eq ( "workflowId" ,  workflowId ) . eq ( "state.kind" ,  status ) , 
87+       ) 
88+       . filter ( ( q )  =>  q . eq ( q . field ( "name" ) ,  args . name ) ) 
89+       . first ( ) ; 
90+     if  ( event )  return  event ; 
91+   } 
9492  const  eventId  =  await  ctx . db . insert ( "events" ,  { 
9593    workflowId, 
9694    name : args . name , 
@@ -111,10 +109,15 @@ export const send = mutation({
111109  } , 
112110  returns : v . id ( "events" ) , 
113111  handler : async  ( ctx ,  args )  =>  { 
114-     const  event  =  await  getOrCreateEvent ( ctx ,  args . workflowId ,  { 
115-       eventId : args . eventId , 
116-       name : args . name , 
117-     } ) ; 
112+     const  event  =  await  getOrCreateEvent ( 
113+       ctx , 
114+       args . workflowId , 
115+       { 
116+         eventId : args . eventId , 
117+         name : args . name , 
118+       } , 
119+       [ "waiting" ,  "created" ] , 
120+     ) ; 
118121    const  name  =  args . name  ??  event . name ; 
119122    switch  ( event . state . kind )  { 
120123      case  "sent" : { 
0 commit comments