1- import { NatsConnection , headers , Subscription } from 'nats' ;
2- import { GenerateUUIDv4 } from '@guardian/interfaces' ;
3- import { ZipCodec } from './zip-codec.js' ;
4- import { IMessageResponse } from '../models/index.js' ;
1+ import { NatsConnection , headers , Subscription } from 'nats' ;
2+ import { GenerateUUIDv4 } from '@guardian/interfaces' ;
3+ import { ZipCodec } from './zip-codec.js' ;
4+ import { IMessageResponse } from '../models/index.js' ;
55
66type CallbackFunction = ( body : any , error ?: string , code ?: number ) => void ;
77
@@ -56,28 +56,25 @@ export abstract class NatsService {
5656 throw new Error ( 'Connection must set first' ) ;
5757 }
5858 this . connection . subscribe ( this . replySubject , {
59- callback : this . callbackSubscribe
60- } ) ;
61- }
62-
63- public callbackSubscribe = async ( error , msg ) => {
64- if ( ! error ) {
65- const messageId = msg . headers . get ( 'messageId' ) ;
66- const fn = this . responseCallbacksMap . get ( messageId ) ;
67- if ( fn ) {
68- const message = ( await this . codec . decode ( msg . data ) ) as IMessageResponse < any > ;
69- if ( ! message ) {
70- fn ( null ) ;
59+ callback : async ( error , msg ) => {
60+ if ( ! error ) {
61+ const messageId = msg . headers . get ( 'messageId' ) ;
62+ const fn = this . responseCallbacksMap . get ( messageId ) ;
63+ if ( fn ) {
64+ const message = ( await this . codec . decode ( msg . data ) ) as IMessageResponse < any > ;
65+ if ( ! message ) {
66+ fn ( null )
67+ } else {
68+ fn ( message . body , message . error , message . code ) ;
69+ }
70+ this . responseCallbacksMap . delete ( messageId )
71+ }
7172 } else {
72- fn ( message . body , message . error , message . code ) ;
73+ console . error ( error ) ;
7374 }
74- this . responseCallbacksMap . delete ( messageId ) ;
7575 }
76- } else {
77- console . error ( error ) ;
78- }
79- } ;
80-
76+ } ) ;
77+ }
8178
8279 /**
8380 * Set connection
@@ -129,19 +126,25 @@ export abstract class NatsService {
129126 * Send message
130127 * @param subject
131128 * @param data
129+ * @param isResponseCallback
132130 */
133- public sendMessage < T > ( subject : string , data ?: unknown ) : Promise < T > {
131+ public sendMessage < T > ( subject : string , data ?: unknown , isResponseCallback : boolean = true ) : Promise < T > {
132+ console . log ( 'isResponseCallback' , isResponseCallback )
134133 const messageId = GenerateUUIDv4 ( ) ;
135134 return new Promise ( async ( resolve , reject ) => {
136135 const head = headers ( ) ;
137136 head . append ( 'messageId' , messageId ) ;
138- this . responseCallbacksMap . set ( messageId , ( body : T , error ?: string , code ?: number ) => {
139- if ( error ) {
140- reject ( new MessageError ( error , code ) ) ;
141- } else {
142- resolve ( body ) ;
143- }
144- } )
137+ if ( isResponseCallback ) {
138+ this . responseCallbacksMap . set ( messageId , ( body : T , error ?: string , code ?: number ) => {
139+ if ( error ) {
140+ reject ( new MessageError ( error , code ) ) ;
141+ } else {
142+ resolve ( body ) ;
143+ }
144+ } )
145+ } else {
146+ resolve ( null ) ;
147+ }
145148
146149 this . connection . publish ( subject , await this . codec . encode ( data ) , {
147150 reply : this . replySubject ,
@@ -194,17 +197,6 @@ export abstract class NatsService {
194197 } ) ;
195198 }
196199
197- getMapSizeInMB ( map : Map < any , any > ) : number {
198- try {
199- const jsonString = JSON . stringify ( [ ...map ] ) ;
200- const bytes = new TextEncoder ( ) . encode ( jsonString ) . length ;
201- return bytes / ( 1024 * 1024 ) ;
202- } catch ( error ) {
203- console . error ( "Error calculating Map size:" , error ) ;
204- return 0 ;
205- }
206- }
207-
208200 /**
209201 * Get messages
210202 * @param subject
@@ -229,8 +221,6 @@ export abstract class NatsService {
229221 cb ( await this . codec . decode ( msg . data ) , msg . headers ) ;
230222 }
231223 console . log ( `📊 Active subscriptions: ${ this . responseCallbacksMap . size } ` ) ;
232-
233- console . log ( `💾 Map size: ${ this . getMapSizeInMB ( this . responseCallbacksMap ) . toFixed ( 4 ) } MB` ) ;
234224 } catch ( error ) {
235225 console . error ( error ) ;
236226 }
0 commit comments