@@ -7,8 +7,8 @@ use futures::StreamExt;
77use tokio:: time:: timeout;
88use tracing:: { instrument, warn} ;
99use trogon_nats:: jetstream:: {
10- JetStreamConsumer as _, JetStreamConsumerFactory , JetStreamPublisher , JsAck as _,
11- JsAckWith as _, JsMessageRef as _, JsRequestMessage ,
10+ JetStreamConsumer as _, JetStreamCreateConsumer as _, JetStreamGetStream , JetStreamPublisher ,
11+ JsAck as _ , JsAckWith as _, JsMessageRef as _, JsRequestMessage ,
1212} ;
1313use trogon_std:: JsonSerialize ;
1414
@@ -33,8 +33,8 @@ pub async fn handle<N, C, J, S>(
3333where
3434 N : RequestClient + PublishClient + SubscribeClient + FlushClient ,
3535 C : trogon_std:: time:: GetElapsed ,
36- J : JetStreamPublisher + JetStreamConsumerFactory ,
37- <J :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Message : JsRequestMessage ,
36+ J : JetStreamPublisher + JetStreamGetStream ,
37+ << J :: Stream as trogon_nats :: jetstream :: JetStreamCreateConsumer > :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Message : JsRequestMessage ,
3838 S : JsonSerialize ,
3939{
4040 let start = bridge. clock . now ( ) ;
@@ -195,50 +195,60 @@ async fn handle_js<N, C, J, S>(
195195where
196196 N : SubscribeClient ,
197197 C : trogon_std:: time:: GetElapsed ,
198- J : JetStreamPublisher + JetStreamConsumerFactory ,
199- <J :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Message : JsRequestMessage ,
198+ J : JetStreamPublisher + JetStreamGetStream ,
199+ << J :: Stream as trogon_nats :: jetstream :: JetStreamCreateConsumer > :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Message : JsRequestMessage ,
200200 S : JsonSerialize ,
201201{
202202 // Create consumers BEFORE publishing — same principle as subscribe-before-publish.
203203 // JetStream consumers with DeliverAll replay from stream start, so they'll see the
204204 // response even if the runner responds before we start consuming.
205205 let notifications_stream = streams:: notifications_stream_name ( prefix) ;
206206 let notif_config = consumers:: prompt_notifications_consumer ( prefix, sid, req_id) ;
207- let notif_consumer: J :: Consumer = js
208- . create_consumer ( & notifications_stream, notif_config)
207+ let notif_stream = js. get_stream ( & notifications_stream) . await . map_err ( |e| {
208+ Error :: new (
209+ ErrorCode :: InternalError . into ( ) ,
210+ format ! ( "get notifications stream: {e}" ) ,
211+ )
212+ } ) ?;
213+ let notif_consumer = notif_stream
214+ . create_consumer ( notif_config)
209215 . await
210216 . map_err ( |e| {
211217 Error :: new (
212218 ErrorCode :: InternalError . into ( ) ,
213219 format ! ( "create notification consumer: {e}" ) ,
214220 )
215221 } ) ?;
216- let mut notif_messages: <J :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Messages =
217- notif_consumer. messages ( ) . await . map_err ( |e| {
218- Error :: new (
219- ErrorCode :: InternalError . into ( ) ,
220- format ! ( "notification messages: {e}" ) ,
221- )
222- } ) ?;
222+ let mut notif_messages = notif_consumer. messages ( ) . await . map_err ( |e| {
223+ Error :: new (
224+ ErrorCode :: InternalError . into ( ) ,
225+ format ! ( "notification messages: {e}" ) ,
226+ )
227+ } ) ?;
223228
224229 let responses_stream = streams:: responses_stream_name ( prefix) ;
225230 let resp_config = consumers:: prompt_response_consumer ( prefix, sid, req_id) ;
226- let resp_consumer: J :: Consumer = js
227- . create_consumer ( & responses_stream, resp_config)
231+ let resp_stream = js. get_stream ( & responses_stream) . await . map_err ( |e| {
232+ Error :: new (
233+ ErrorCode :: InternalError . into ( ) ,
234+ format ! ( "get responses stream: {e}" ) ,
235+ )
236+ } ) ?;
237+ let resp_consumer = resp_stream
238+ . create_consumer ( resp_config)
228239 . await
229240 . map_err ( |e| {
230241 Error :: new (
231242 ErrorCode :: InternalError . into ( ) ,
232243 format ! ( "create response consumer: {e}" ) ,
233244 )
234245 } ) ?;
235- let mut resp_messages: <J :: Consumer as trogon_nats:: jetstream:: JetStreamConsumer >:: Messages =
236- resp_consumer. messages ( ) . await . map_err ( |e| {
237- Error :: new (
238- ErrorCode :: InternalError . into ( ) ,
239- format ! ( "response messages: {e}" ) ,
240- )
241- } ) ?;
246+ let mut resp_messages = resp_consumer. messages ( ) . await . map_err ( |e| {
247+ Error :: new (
248+ ErrorCode :: InternalError . into ( ) ,
249+ format ! ( "response messages: {e}" ) ,
250+ )
251+ } ) ?;
242252
243253 // Cancel still uses core NATS — it's a fire-and-forget signal, not persisted.
244254 let mut cancel_sub = bridge
@@ -262,9 +272,11 @@ where
262272 headers. insert ( SESSION_ID_HEADER , sid) ;
263273
264274 let prompt_subject = session:: agent:: prompt ( prefix, sid) ;
265- js. js_publish_with_headers ( prompt_subject, headers, Bytes :: from ( payload_bytes) )
275+ js. publish_with_headers ( prompt_subject, headers, Bytes :: from ( payload_bytes) )
276+ . await
277+ . map_err ( |e| Error :: new ( ErrorCode :: InternalError . into ( ) , format ! ( "js publish: {e}" ) ) ) ?
266278 . await
267- . map_err ( |e| Error :: new ( ErrorCode :: InternalError . into ( ) , format ! ( "js publish : {e}" ) ) ) ?;
279+ . map_err ( |e| Error :: new ( ErrorCode :: InternalError . into ( ) , format ! ( "js ack : {e}" ) ) ) ?;
268280
269281 let op_timeout = bridge. config . prompt_timeout ( ) ;
270282
0 commit comments