@@ -6,15 +6,22 @@ import { sendMessage, sendAlert } from "./telegram";
66
77export interface Env {
88 TG_GH_KV : KVNamespace ;
9+ DEBUG ?: string ;
10+ }
11+
12+ function isDebug ( env : Env ) : boolean {
13+ return env . DEBUG === "1" || env . DEBUG === "true" ;
914}
1015
1116export default {
1217 async fetch ( request : Request , env : Env ) : Promise < Response > {
1318 if ( request . method !== "POST" ) {
19+ console . log ( "rejected: non-POST method" ) ;
1420 return new Response ( "Method not allowed" , { status : 405 } ) ;
1521 }
1622
1723 const eventType = request . headers . get ( "X-GitHub-Event" ) ?? "" ;
24+ console . log ( `[event:${ eventType } ] received` ) ;
1825
1926 if ( eventType === "ping" ) {
2027 return new Response ( "OK" , { status : 200 } ) ;
@@ -27,37 +34,66 @@ export default {
2734 try {
2835 payload = JSON . parse ( body ) ;
2936 } catch {
37+ console . log ( `[event:${ eventType } ] invalid JSON` ) ;
3038 return new Response ( "Invalid JSON" , { status : 400 } ) ;
3139 }
3240
3341 const fullName = ( payload . repository as { full_name ?: string } | undefined ) ?. full_name ;
3442 const orgName = ( payload . organization as { login ?: string } | undefined ) ?. login ;
3543
44+ if ( isDebug ( env ) ) {
45+ console . log ( `[event:${ eventType } ] fullName=${ fullName } orgName=${ orgName } ` ) ;
46+ console . log ( `[event:${ eventType } ] env.TG_GH_KV type: ${ typeof env . TG_GH_KV } , get: ${ typeof env . TG_GH_KV ?. get } ` ) ;
47+
48+ try {
49+ const listResult = await env . TG_GH_KV . list ( { prefix : "config:" } ) ;
50+ console . log ( `[event:${ eventType } ] KV list config:* returned ${ listResult . keys . length } keys` ) ;
51+ for ( const k of listResult . keys . slice ( 0 , 5 ) ) {
52+ console . log ( `[event:${ eventType } ] KV key: ${ k . name } ` ) ;
53+ }
54+ if ( listResult . keys . length === 0 ) {
55+ await env . TG_GH_KV . put ( "config:__debug__" , "hello" ) ;
56+ const debugGet = await env . TG_GH_KV . get ( "config:__debug__" ) ;
57+ console . log ( `[event:${ eventType } ] KV put/get debug: ${ debugGet } ` ) ;
58+ }
59+ } catch ( e ) {
60+ console . error ( `[event:${ eventType } ] KV list failed:` , e ) ;
61+ }
62+ }
63+
3664 if ( ! fullName && ! orgName ) {
65+ console . log ( `[event:${ eventType } ] no fullName or orgName, returning 200` ) ;
3766 return new Response ( "OK" , { status : 200 } ) ;
3867 }
3968
4069 let adminConfig ;
4170 try {
4271 adminConfig = await getAdminConfig ( env . TG_GH_KV ) ;
72+ console . log ( `[event:${ eventType } ] adminConfig loaded: ${ adminConfig ? "yes" : "no" } ` ) ;
4373 } catch ( e ) {
44- console . error ( "Failed to read admin config:" , e ) ;
74+ console . error ( `[event: ${ eventType } ] failed to read admin config:` , e ) ;
4575 return new Response ( "Internal error" , { status : 500 } ) ;
4676 }
4777
4878 let config = null ;
4979 if ( fullName ) {
5080 config = await getRepoConfig ( env . TG_GH_KV , fullName ) ;
81+ console . log ( `[event:${ eventType } ] getRepoConfig(${ fullName } ): ${ config ? "found" : "null" } ` ) ;
5182 }
5283 if ( ! config && orgName ) {
5384 config = await getOrgWildcardConfig ( env . TG_GH_KV , orgName ) ;
85+ console . log ( `[event:${ eventType } ] getOrgWildcardConfig(${ orgName } ): ${ config ? "found" : "null" } ` ) ;
5486 }
5587 if ( ! config ) {
88+ console . log ( `[event:${ eventType } ] no config matched, returning 204` ) ;
5689 return new Response ( null , { status : 204 } ) ;
5790 }
5891
92+ console . log ( `[event:${ eventType } ] config found, verifying signature` ) ;
93+
5994 const valid = await verifySignature ( body , signature , config . secret ) ;
6095 if ( ! valid ) {
96+ console . log ( `[event:${ eventType } ] signature verification FAILED` ) ;
6197 if ( adminConfig ) {
6298 const context = fullName ?? orgName ?? "unknown" ;
6399 try {
@@ -69,8 +105,11 @@ export default {
69105 return new Response ( "Unauthorized" , { status : 401 } ) ;
70106 }
71107
108+ console . log ( `[event:${ eventType } ] signature OK` ) ;
109+
72110 const isPrivate = ( payload . repository as { private ?: boolean } | undefined ) ?. private ?? false ;
73111 const targets = matchTargets ( config , eventType , isPrivate ) ;
112+ console . log ( `[event:${ eventType } ] matched ${ targets . length } target(s)` ) ;
74113
75114 const formatter = getFormatter ( eventType ) ;
76115 const message = formatter ( payload as import ( "./types" ) . GitHubEvent ) ;
@@ -91,8 +130,10 @@ export default {
91130 chat_id : target . chat_id ,
92131 text : message ,
93132 } ) ;
133+ console . log ( `[event:${ eventType } ] sent to target (${ target . public ? "public" : "private" } )` ) ;
94134 } catch ( e ) {
95135 const errMsg = e instanceof Error ? e . message : String ( e ) ;
136+ console . error ( `[event:${ eventType } ] failed to send to target:` , errMsg ) ;
96137 errors . push ( `Failed to send to ${ target . chat_id } : ${ errMsg } ` ) ;
97138 }
98139 }
0 commit comments