@@ -48,8 +48,8 @@ self.addEventListener('activate', (event) => {
4848self . addEventListener ( 'fetch' , ( event ) => {
4949 const url = new URL ( event . request . url ) ;
5050
51- // Handle GitHub API GET requests
52- if ( url . origin === GITHUB_API_BASE && event . request . method === 'GET' ) {
51+ // Handle GitHub API requests for all methods
52+ if ( url . origin === GITHUB_API_BASE ) {
5353 event . respondWith ( handleGitHubRequest ( event . request ) ) ;
5454 }
5555 // Handle static assets with network-first strategy
@@ -64,40 +64,61 @@ async function handleGitHubRequest(request) {
6464 const token = await getStoredToken ( ) ;
6565 if ( ! token ) {
6666 console . warn ( 'No token available' ) ;
67- return tryOfflineFallback ( request ) ;
68- }
69-
70- const cache = await caches . open ( GITHUB_API_CACHE ) ;
71- const cacheKey = new Request ( request . url , {
72- method : request . method ,
73- headers : new Headers ( { Accept : 'application/vnd.github+json' } )
74- } ) ;
75-
76- // Check cache first for offline support
77- const cachedResponse = await cache . match ( cacheKey ) ;
78- if ( cachedResponse ) {
79- return cachedResponse . clone ( ) ;
67+ if ( request . method === 'GET' ) {
68+ return tryOfflineFallback ( request ) ;
69+ }
70+ return fetch ( request ) ;
8071 }
8172
82- // Create request with authorization
8373 const authHeaders = new Headers ( request . headers ) ;
8474 authHeaders . set ( 'Authorization' , `Bearer ${ token } ` ) ;
8575 authHeaders . set ( 'Accept' , 'application/vnd.github+json' ) ;
8676
87- const authRequest = new Request ( request , { headers : authHeaders } ) ;
88- const response = await fetch ( authRequest ) ;
77+ const authRequest = new Request ( request , {
78+ method : request . method ,
79+ headers : authHeaders ,
80+ body : request . method === 'GET' || request . method === 'HEAD' ? undefined : request . body ,
81+ mode : request . mode ,
82+ credentials : request . credentials ,
83+ cache : request . cache ,
84+ redirect : request . redirect ,
85+ referrer : request . referrer ,
86+ integrity : request . integrity
87+ } ) ;
8988
90- // Cache successful responses
91- if ( response . ok ) {
92- const responseClone = response . clone ( ) ;
93- await cache . put ( cacheKey , responseClone ) ;
94- }
89+ if ( request . method === 'GET' ) {
90+ const cache = await caches . open ( GITHUB_API_CACHE ) ;
91+ const cacheKey = new Request ( request . url , {
92+ method : request . method ,
93+ headers : new Headers ( { Accept : 'application/vnd.github+json' } )
94+ } ) ;
95+ const cachedResponse = await cache . match ( cacheKey ) ;
96+ if ( cachedResponse ) {
97+ return cachedResponse . clone ( ) ;
98+ }
9599
96- return response ;
100+ const response = await fetch ( authRequest ) ;
101+ if ( response . ok ) {
102+ const responseClone = response . clone ( ) ;
103+ await cache . put ( cacheKey , responseClone ) ;
104+ }
105+ return response ;
106+ }
97107
108+ return await fetch ( authRequest ) ;
98109 } catch ( error ) {
99110 console . error ( 'GitHub API fetch error:' , error . message ) ;
100- return tryOfflineFallback ( request ) ;
111+ if ( request . method === 'GET' ) {
112+ return tryOfflineFallback ( request ) ;
113+ }
114+ return new Response ( JSON . stringify ( {
115+ error : 'Offline' ,
116+ message : 'Unable to complete GitHub request while offline'
117+ } ) , {
118+ status : 503 ,
119+ statusText : 'Service Unavailable' ,
120+ headers : { 'Content-Type' : 'application/json' }
121+ } ) ;
101122 }
102123}
103124
0 commit comments