Skip to content

Commit cd396d1

Browse files
committed
fix: sw
1 parent e23d786 commit cd396d1

1 file changed

Lines changed: 46 additions & 25 deletions

File tree

public/sw.js

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ self.addEventListener('activate', (event) => {
4848
self.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

Comments
 (0)