@@ -16,6 +16,7 @@ import { TuneRequest } from "./requests/tune_request"
1616import {
1717 ConsumerUpdateQueryListener ,
1818 DeliverListener ,
19+ DeliverV2Listener ,
1920 MetadataUpdateListener ,
2021 PublishConfirmListener ,
2122 PublishErrorListener ,
@@ -29,7 +30,7 @@ import { Response } from "./responses/response"
2930import { SaslAuthenticateResponse } from "./responses/sasl_authenticate_response"
3031import { SaslHandshakeResponse } from "./responses/sasl_handshake_response"
3132import { TuneResponse } from "./responses/tune_response"
32- import { DEFAULT_FRAME_MAX , DEFAULT_UNLIMITED_FRAME_MAX , removeFrom } from "./util"
33+ import { DEFAULT_FRAME_MAX , DEFAULT_UNLIMITED_FRAME_MAX , REQUIRED_MANAGEMENT_VERSION , removeFrom } from "./util"
3334import { Version , checkServerDeclaredVersions , getClientSupportedVersions } from "./versions"
3435import { WaitingResponse } from "./waiting_response"
3536import { ClientListenersParams , ClientParams , ClosingParams , QueryOffsetParams , StoreOffsetParams } from "./client"
@@ -38,11 +39,13 @@ import { QueryPublisherRequest } from "./requests/query_publisher_request"
3839import { StoreOffsetRequest } from "./requests/store_offset_request"
3940import { QueryOffsetResponse } from "./responses/query_offset_response"
4041import { QueryOffsetRequest } from "./requests/query_offset_request"
42+ import { coerce , lt } from "semver"
4143
4244export type ConnectionClosedListener = ( hadError : boolean ) => void
4345
4446export type ConnectionProxyListenersParams = ClientListenersParams & {
45- deliver ?: DeliverListener
47+ deliverV1 ?: DeliverListener
48+ deliverV2 ?: DeliverV2Listener
4649 consumer_update_query ?: ConsumerUpdateQueryListener
4750}
4851
@@ -82,6 +85,7 @@ export class Connection {
8285 private serverEndpoint : { host : string ; port : number } = { host : "" , port : 5552 }
8386 private readonly serverDeclaredVersions : Version [ ] = [ ]
8487 private refs : number = 0
88+ private filteringEnabled : boolean = false
8589
8690 constructor ( private readonly params : ConnectionProxyParams , private readonly logger : Logger ) {
8791 this . hostname = params . hostname
@@ -125,6 +129,7 @@ export class Connection {
125129 this . socket . on ( "connect" , async ( ) => {
126130 this . logger . info ( `Connected to RabbitMQ ${ this . params . hostname } :${ this . params . port } ` )
127131 this . peerProperties = ( await this . exchangeProperties ( ) ) . properties
132+ this . filteringEnabled = lt ( coerce ( this . rabbitManagementVersion ) ! , REQUIRED_MANAGEMENT_VERSION ) ? false : true
128133 await this . auth ( { username : this . params . username , password : this . params . password } )
129134 const { heartbeat } = await this . tune ( this . params . heartbeat ?? 0 )
130135 await this . open ( { virtualHost : this . params . vhost } )
@@ -151,15 +156,23 @@ export class Connection {
151156 public on ( event : "metadata_update" , listener : MetadataUpdateListener ) : void
152157 public on ( event : "publish_confirm" , listener : PublishConfirmListener ) : void
153158 public on ( event : "publish_error" , listener : PublishErrorListener ) : void
154- public on ( event : "deliver" , listener : DeliverListener ) : void
159+ public on ( event : "deliverV1" , listener : DeliverListener ) : void
160+ public on ( event : "deliverV2" , listener : DeliverV2Listener ) : void
155161 public on ( event : "consumer_update_query" , listener : ConsumerUpdateQueryListener ) : void
156162 public on (
157- event : "metadata_update" | "publish_confirm" | "publish_error" | "deliver" | "consumer_update_query" ,
163+ event :
164+ | "metadata_update"
165+ | "publish_confirm"
166+ | "publish_error"
167+ | "deliverV1"
168+ | "deliverV2"
169+ | "consumer_update_query" ,
158170 listener :
159171 | MetadataUpdateListener
160172 | PublishConfirmListener
161173 | PublishErrorListener
162174 | DeliverListener
175+ | DeliverV2Listener
163176 | ConsumerUpdateQueryListener
164177 ) {
165178 switch ( event ) {
@@ -172,8 +185,11 @@ export class Connection {
172185 case "publish_error" :
173186 this . decoder . on ( "publish_error" , listener as PublishErrorListener )
174187 break
175- case "deliver" :
176- this . decoder . on ( "deliver" , listener as DeliverListener )
188+ case "deliverV1" :
189+ this . decoder . on ( "deliverV1" , listener as DeliverListener )
190+ break
191+ case "deliverV2" :
192+ this . decoder . on ( "deliverV2" , listener as DeliverV2Listener )
177193 break
178194 case "consumer_update_query" :
179195 this . decoder . on ( "consumer_update_query" , listener as ConsumerUpdateQueryListener )
@@ -187,7 +203,8 @@ export class Connection {
187203 if ( listeners ?. metadata_update ) this . decoder . on ( "metadata_update" , listeners . metadata_update )
188204 if ( listeners ?. publish_confirm ) this . decoder . on ( "publish_confirm" , listeners . publish_confirm )
189205 if ( listeners ?. publish_error ) this . decoder . on ( "publish_error" , listeners . publish_error )
190- if ( listeners ?. deliver ) this . decoder . on ( "deliver" , listeners . deliver )
206+ if ( listeners ?. deliverV1 ) this . decoder . on ( "deliverV1" , listeners . deliverV1 )
207+ if ( listeners ?. deliverV2 ) this . decoder . on ( "deliverV2" , listeners . deliverV2 )
191208 if ( listeners ?. consumer_update_query ) this . decoder . on ( "consumer_update_query" , listeners . consumer_update_query )
192209 }
193210
@@ -332,6 +349,10 @@ export class Connection {
332349 return this . peerProperties . version
333350 }
334351
352+ public get isFilteringEnabled ( ) {
353+ return this . filteringEnabled
354+ }
355+
335356 private async auth ( params : { username : string ; password : string } ) {
336357 this . logger . debug ( `Start authentication process ...` )
337358 this . logger . debug ( `Start SASL handshake ...` )
0 commit comments