@@ -62,10 +62,20 @@ impl EventFetcher {
6262
6363 /// Start polling for events and sending them over the given channel. Return
6464 /// the JoinHandle of the polling task as well as the channel receiver.
65+ ///
66+ /// The optional `inner_type` parameter allows filtering by a specific event
67+ /// type wrapped in `EventWrapper<T>`. When `None`, all `EventWrapper<*>`
68+ /// events are fetched. When `Some(type_tag)`, only events matching
69+ /// `EventWrapper<type_tag>` are returned by the GraphQL query.
70+ ///
71+ /// This is useful for scenarios where multiple deployments share the same
72+ /// `primitives_pkg_id` but have different `workflow_pkg_id` values, as it
73+ /// allows precise filtering at the GraphQL level rather than client-side.
6574 pub fn poll_nexus_events (
6675 & self ,
6776 from_cursor : Option < String > ,
6877 from_checkpoint : Option < u64 > ,
78+ inner_type : Option < sui:: types:: TypeTag > ,
6979 ) -> (
7080 tokio:: task:: JoinHandle < ( ) > ,
7181 tokio:: sync:: mpsc:: Receiver < anyhow:: Result < EventPage > > ,
@@ -90,7 +100,7 @@ impl EventFetcher {
90100 nexus_objects. primitives_pkg_id ,
91101 primitives:: Event :: EVENT_WRAPPER . module ,
92102 primitives:: Event :: EVENT_WRAPPER . name ,
93- vec ! [ ] ,
103+ inner_type . map ( |t| vec ! [ t ] ) . unwrap_or_default ( ) ,
94104 ) ;
95105
96106 loop {
@@ -266,7 +276,7 @@ mod tests {
266276
267277 let fetcher = EventFetcher :: new ( & format ! ( "{}/graphql" , & server. url( ) ) , Arc :: new ( objects) ) ;
268278
269- let ( _poller, mut receiver) = fetcher. poll_nexus_events ( None , None ) ;
279+ let ( _poller, mut receiver) = fetcher. poll_nexus_events ( None , None , None ) ;
270280
271281 if let Some ( Ok ( page) ) = receiver. recv ( ) . await {
272282 assert_eq ! ( page. next_cursor, "12345" . to_string( ) ) ;
@@ -304,7 +314,7 @@ mod tests {
304314 let objects = sui_mocks:: mock_nexus_objects ( ) ;
305315 let fetcher = EventFetcher :: new ( "http://invalid.url" , Arc :: new ( objects) ) ;
306316
307- let ( _poller, mut receiver) = fetcher. poll_nexus_events ( None , None ) ;
317+ let ( _poller, mut receiver) = fetcher. poll_nexus_events ( None , None , None ) ;
308318
309319 if let Some ( result) = receiver. recv ( ) . await {
310320 assert ! ( result. is_err( ) ) ;
0 commit comments