@@ -7,6 +7,7 @@ import { Logger } from '@config/logger.config';
77import { BadRequestException } from '@exceptions' ;
88import axios , { AxiosInstance } from 'axios' ;
99import { isURL } from 'class-validator' ;
10+ import * as jwt from 'jsonwebtoken' ;
1011
1112import { EmitData , EventController , EventControllerInterface } from '../event.controller' ;
1213
@@ -74,7 +75,16 @@ export class WebhookController extends EventController implements EventControlle
7475
7576 const webhookConfig = configService . get < Webhook > ( 'WEBHOOK' ) ;
7677 const webhookLocal = instance ?. events ;
77- const webhookHeaders = instance ?. headers ;
78+ const webhookHeaders = { ...( instance ?. headers as Record < string , string > || { } ) } ;
79+
80+ if ( webhookHeaders && 'jwt_key' in webhookHeaders ) {
81+ const jwtKey = webhookHeaders [ 'jwt_key' ] ;
82+ const jwtToken = this . generateJwtToken ( jwtKey ) ;
83+ webhookHeaders [ 'Authorization' ] = `Bearer ${ jwtToken } ` ;
84+
85+ delete webhookHeaders [ 'jwt_key' ] ;
86+ }
87+
7888 const we = event . replace ( / [ . - ] / gm, '_' ) . toUpperCase ( ) ;
7989 const transformedWe = we . replace ( / _ / gm, '-' ) . toLowerCase ( ) ;
8090 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