11import * as amqp from 'amqplib/callback_api' ;
22
3- import { configService , Rabbitmq } from '../config/env.config' ;
3+ import { configService , HttpServer , Rabbitmq } from '../config/env.config' ;
44import { Logger } from '../config/logger.config' ;
55
66const logger = new Logger ( 'AMQP' ) ;
@@ -9,8 +9,8 @@ let amqpChannel: amqp.Channel | null = null;
99
1010export const initAMQP = ( ) => {
1111 return new Promise < void > ( ( resolve , reject ) => {
12- const uri = configService . get < Rabbitmq > ( 'RABBITMQ' ) . URI ;
13- amqp . connect ( uri , ( error , connection ) => {
12+ const rabbitConfig = configService . get < Rabbitmq > ( 'RABBITMQ' ) ;
13+ amqp . connect ( rabbitConfig . URI , ( error , connection ) => {
1414 if ( error ) {
1515 reject ( error ) ;
1616 return ;
@@ -45,6 +45,7 @@ export const getAMQP = (): amqp.Channel | null => {
4545
4646export const initQueues = ( instanceName : string , events : string [ ] ) => {
4747 if ( ! instanceName || ! events || ! events . length ) return ;
48+ const rabbitConfig = configService . get < Rabbitmq > ( 'RABBITMQ' ) ;
4849
4950 const queues = events . map ( ( event ) => {
5051 return `${ event . replace ( / _ / g, '.' ) . toLowerCase ( ) } ` ;
@@ -60,7 +61,7 @@ export const initQueues = (instanceName: string, events: string[]) => {
6061 assert : true ,
6162 } ) ;
6263
63- const queueName = `${ instanceName } .${ event } ` ;
64+ const queueName = rabbitConfig . GLOBAL_EVENT_QUEUE ? event : `${ instanceName } .${ event } ` ;
6465
6566 amqp . assertQueue ( queueName , {
6667 durable : true ,
@@ -76,6 +77,7 @@ export const initQueues = (instanceName: string, events: string[]) => {
7677
7778export const removeQueues = ( instanceName : string , events : string [ ] ) => {
7879 if ( ! events || ! events . length ) return ;
80+ const rabbitConfig = configService . get < Rabbitmq > ( 'RABBITMQ' ) ;
7981
8082 const channel = getAMQP ( ) ;
8183
@@ -94,10 +96,64 @@ export const removeQueues = (instanceName: string, events: string[]) => {
9496 assert : true ,
9597 } ) ;
9698
97- const queueName = `${ instanceName } .${ event } ` ;
99+ const queueName = rabbitConfig . GLOBAL_EVENT_QUEUE ? event : `${ instanceName } .${ event } ` ;
98100
99101 amqp . deleteQueue ( queueName ) ;
100102 } ) ;
101103
102104 channel . deleteExchange ( exchangeName ) ;
103105} ;
106+
107+ interface SendEventData {
108+ instanceName : string ;
109+ wuid : string ;
110+ event : string ;
111+ apiKey ?: string ;
112+ data : any ;
113+ }
114+
115+ export const sendEventData = ( { data, event, wuid, apiKey, instanceName } : SendEventData ) => {
116+ const exchangeName = instanceName ?? 'evolution_exchange' ;
117+
118+ amqpChannel . assertExchange ( exchangeName , 'topic' , {
119+ durable : true ,
120+ autoDelete : false ,
121+ assert : true ,
122+ } ) ;
123+
124+ const rabbitConfig = configService . get < Rabbitmq > ( 'RABBITMQ' ) ;
125+ const queueName = rabbitConfig . GLOBAL_EVENT_QUEUE ? event : `${ instanceName } .${ event } ` ;
126+
127+ amqpChannel . assertQueue ( queueName , {
128+ durable : true ,
129+ autoDelete : false ,
130+ arguments : { 'x-queue-type' : 'quorum' } ,
131+ } ) ;
132+
133+ amqpChannel . bindQueue ( queueName , exchangeName , event ) ;
134+
135+ const serverUrl = configService . get < HttpServer > ( 'SERVER' ) . URL ;
136+ const tzoffset = new Date ( ) . getTimezoneOffset ( ) * 60000 ; //offset in milliseconds
137+ const localISOTime = new Date ( Date . now ( ) - tzoffset ) . toISOString ( ) ;
138+ const now = localISOTime ;
139+
140+ const message = {
141+ event,
142+ instance : instanceName ,
143+ data,
144+ server_url : serverUrl ,
145+ date_time : now ,
146+ sender : wuid ,
147+ } ;
148+
149+ if ( apiKey ) {
150+ message [ 'apikey' ] = apiKey ;
151+ }
152+
153+ logger . log ( {
154+ queueName,
155+ exchangeName,
156+ event,
157+ } ) ;
158+ amqpChannel . publish ( exchangeName , event , Buffer . from ( JSON . stringify ( message ) ) ) ;
159+ } ;
0 commit comments