@@ -7,6 +7,7 @@ import { Logger } from '@config/logger.config';
7
7
import { BadRequestException } from '@exceptions' ;
8
8
import axios , { AxiosInstance } from 'axios' ;
9
9
import { isURL } from 'class-validator' ;
10
+ import * as jwt from 'jsonwebtoken' ;
10
11
11
12
import { EmitData , EventController , EventControllerInterface } from '../event.controller' ;
12
13
@@ -74,7 +75,16 @@ export class WebhookController extends EventController implements EventControlle
74
75
75
76
const webhookConfig = configService . get < Webhook > ( 'WEBHOOK' ) ;
76
77
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
+
78
88
const we = event . replace ( / [ . - ] / gm, '_' ) . toUpperCase ( ) ;
79
89
const transformedWe = we . replace ( / _ / gm, '-' ) . toLowerCase ( ) ;
80
90
const enabledLog = configService . get < Log > ( 'LOG' ) . LEVEL . includes ( 'WEBHOOKS' ) ;
@@ -230,4 +240,24 @@ export class WebhookController extends EventController implements EventControlle
230
240
}
231
241
}
232
242
}
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
+ }
233
263
}
0 commit comments