@@ -59,4 +59,55 @@ export class DiscordWebhook {
5959 } ,
6060 } ;
6161 }
62+
63+ requestEmbed ( data : {
64+ method : string ;
65+ url : string ;
66+ ip : string ;
67+ userAgent : string ;
68+ body ?: any ;
69+ query ?: any ;
70+ headers ?: Record < string , string | string [ ] | undefined > ;
71+ userSession ?: any ;
72+ statusCode : number ;
73+ responseTime : number ;
74+ responseBody ?: any ;
75+ } ) : EmbedMessage {
76+ const statusColor = data . statusCode >= 400 ? 16711680 : data . statusCode >= 300 ? 16776960 : 65280 ;
77+ const bodyStr = data . body && Object . keys ( data . body ) . length > 0 ? JSON . stringify ( data . body , null , 2 ) . slice ( 0 , 500 ) : "No body" ;
78+ const queryStr = data . query && Object . keys ( data . query ) . length > 0 ? JSON . stringify ( data . query , null , 2 ) . slice ( 0 , 300 ) : "No query" ;
79+ const responseStr = data . responseBody ? JSON . stringify ( data . responseBody , null , 2 ) . slice ( 0 , 800 ) : "No response body" ;
80+
81+ // Filter sensitive headers
82+ const safeHeaders = data . headers
83+ ? Object . fromEntries (
84+ Object . entries ( data . headers )
85+ . filter ( ( [ key ] ) => ! [ "authorization" , "cookie" , "set-cookie" ] . includes ( key . toLowerCase ( ) ) )
86+ . slice ( 0 , 10 ) ,
87+ )
88+ : { } ;
89+ const headersStr = Object . keys ( safeHeaders ) . length > 0 ? JSON . stringify ( safeHeaders , null , 2 ) . slice ( 0 , 400 ) : "No headers" ;
90+
91+ // User session as JSON
92+ const sessionStr = data . userSession ? JSON . stringify ( data . userSession , null , 2 ) . slice ( 0 , 800 ) : "Not authenticated" ;
93+
94+ return {
95+ title : `${ data . method } ${ data . url } ` ,
96+ description : [
97+ `**Status:** ${ data . statusCode } ` ,
98+ `**Response Time:** ${ data . responseTime } ms` ,
99+ `**IP:** ${ data . ip } ` ,
100+ `**User-Agent:** ${ data . userAgent ?. slice ( 0 , 100 ) || "Unknown" } ` ,
101+ `**User Session:** \`\`\`json\n${ sessionStr } \`\`\`` ,
102+ `**Headers:** \`\`\`json\n${ headersStr } \`\`\`` ,
103+ `**Query:** \`\`\`json\n${ queryStr } \`\`\`` ,
104+ `**Request Body:** \`\`\`json\n${ bodyStr } \`\`\`` ,
105+ `**Response Body:** \`\`\`json\n${ responseStr } \`\`\`` ,
106+ ] . join ( "\n" ) ,
107+ color : statusColor ,
108+ footer : {
109+ text : "Backend Service | ComCamp 37" ,
110+ } ,
111+ } ;
112+ }
62113}
0 commit comments