Files
AutonetSellCar/frontend/public/sw.js
AutonetSellCar Deploy 1f0dcb1ddb Initial commit: AutonetSellCar platform with deployment system
- Frontend: Next.js 14 with TypeScript
- Backend: FastAPI with SQLAlchemy
- Agent: Carmodoo sync agent
- Deployment: Docker Compose based staging/production setup
- Scripts: Automated deployment with rollback support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 13:24:39 +09:00

93 lines
2.0 KiB
JavaScript

// Service Worker for Push Notifications
self.addEventListener('install', (event) => {
console.log('Service Worker installing.');
self.skipWaiting();
});
self.addEventListener('activate', (event) => {
console.log('Service Worker activated.');
event.waitUntil(clients.claim());
});
self.addEventListener('push', (event) => {
console.log('Push notification received:', event);
let data = {
title: 'AutonetSellCar',
body: 'You have a new notification',
icon: '/icon-192.png',
badge: '/badge-72.png',
url: '/'
};
if (event.data) {
try {
const payload = event.data.json();
data = {
...data,
...payload
};
} catch (e) {
data.body = event.data.text();
}
}
const options = {
body: data.body,
icon: data.icon || '/icon-192.png',
badge: data.badge || '/badge-72.png',
vibrate: [100, 50, 100],
data: {
url: data.url || '/',
dateOfArrival: Date.now()
},
actions: [
{
action: 'open',
title: 'View'
},
{
action: 'close',
title: 'Close'
}
]
};
event.waitUntil(
self.registration.showNotification(data.title, options)
);
});
self.addEventListener('notificationclick', (event) => {
console.log('Notification clicked:', event);
event.notification.close();
if (event.action === 'close') {
return;
}
const url = event.notification.data?.url || '/';
event.waitUntil(
clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
// Check if there's already a window open
for (const client of clientList) {
if (client.url.includes(self.location.origin) && 'focus' in client) {
client.navigate(url);
return client.focus();
}
}
// Open a new window if none exists
if (clients.openWindow) {
return clients.openWindow(url);
}
})
);
});
self.addEventListener('notificationclose', (event) => {
console.log('Notification closed:', event);
});