@@ -6,6 +6,7 @@ import { configService, Log, Webhook } from '@config/env.config';
66import { Logger } from '@config/logger.config' ;
77import { BadRequestException } from '@exceptions' ;
88import axios , { AxiosInstance } from 'axios' ;
9+ import * as jwt from 'jsonwebtoken' ;
910
1011import { EmitData , EventController , EventControllerInterface } from '../event.controller' ;
1112
@@ -73,7 +74,16 @@ export class WebhookController extends EventController implements EventControlle
7374
7475 const webhookConfig = configService . get < Webhook > ( 'WEBHOOK' ) ;
7576 const webhookLocal = instance ?. events ;
76- const webhookHeaders = instance ?. headers ;
77+ const webhookHeaders = { ...( ( instance ?. headers as Record < string , string > ) || { } ) } ;
78+
79+ if ( webhookHeaders && 'jwt_key' in webhookHeaders ) {
80+ const jwtKey = webhookHeaders [ 'jwt_key' ] ;
81+ const jwtToken = this . generateJwtToken ( jwtKey ) ;
82+ webhookHeaders [ 'Authorization' ] = `Bearer ${ jwtToken } ` ;
83+
84+ delete webhookHeaders [ 'jwt_key' ] ;
85+ }
86+
7787 const we = event . replace ( / [ . - ] / gm, '_' ) . toUpperCase ( ) ;
7888 const transformedWe = we . replace ( / _ / gm, '-' ) . toLowerCase ( ) ;
7989 const enabledLog = configService . get < Log > ( 'LOG' ) . LEVEL . includes ( 'WEBHOOKS' ) ;
@@ -230,4 +240,24 @@ export class WebhookController extends EventController implements EventControlle
230240 }
231241 }
232242 }
243+
244+ private generateJwtToken ( authToken : string ) : string {
245+ try {
246+ const payload = {
247+ iat : Math . floor ( Date . now ( ) / 1000 ) ,
248+ exp : Math . floor ( Date . now ( ) / 1000 ) + 600 , // 10 min expiration
249+ app : 'evolution' ,
250+ action : 'webhook' ,
251+ } ;
252+
253+ const token = jwt . sign ( payload , authToken , { algorithm : 'HS256' } ) ;
254+ return token ;
255+ } catch ( error ) {
256+ this . logger . error ( {
257+ local : 'WebhookController.generateJwtToken' ,
258+ message : `JWT generation failed: ${ error ?. message } ` ,
259+ } ) ;
260+ throw error ;
261+ }
262+ }
233263}
0 commit comments