BIG_UPDATE deleted vps, added s3 infrastructure.

This commit is contained in:
Georgiy Syralev
2025-11-23 14:35:16 +03:00
parent ae1f93a934
commit c4c2610480
173 changed files with 22684 additions and 5894 deletions

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="192.000000pt" height="192.000000pt" viewBox="0 0 192.000000 192.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,192.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M925 1717 c-10 -7 -25 -18 -33 -24 -7 -7 -17 -13 -22 -13 -5 0 -15
-6 -22 -12 -8 -7 -23 -18 -33 -25 -51 -31 -157 -99 -225 -144 -41 -27 -84 -53
-96 -58 -50 -22 -114 -123 -114 -182 0 -17 -27 -29 -68 -29 -68 0 -216 -110
-258 -192 -24 -46 -54 -157 -54 -198 0 -41 30 -152 54 -199 25 -48 117 -134
172 -162 43 -21 66 -24 182 -27 133 -4 158 3 110 29 -13 7 -56 34 -97 61 -41
26 -89 51 -108 54 -42 8 -117 74 -145 128 -30 57 -31 174 -1 231 55 104 145
155 275 155 l68 0 0 73 c0 91 16 116 107 174 94 59 110 65 136 51 23 -12 292
-186 339 -219 15 -10 31 -19 36 -19 5 0 16 -8 25 -18 14 -15 17 -42 17 -153
l0 -135 -57 -34 c-32 -19 -60 -37 -63 -40 -3 -4 -12 -10 -20 -13 -8 -4 -30
-16 -47 -27 l-33 -20 -82 55 c-144 93 -128 66 -128 225 l0 139 33 17 c17 9 34
20 37 23 3 3 22 15 43 26 47 24 52 32 37 51 -12 13 -24 21 -87 55 -22 12 -46
1 -142 -64 -14 -9 -34 -20 -43 -23 -16 -6 -18 -26 -18 -224 l0 -217 68 -43
c37 -24 93 -61 125 -82 32 -21 60 -38 62 -38 3 0 50 -30 162 -104 18 -11 33
-24 33 -27 0 -3 -22 -19 -48 -36 l-48 -30 -74 48 c-97 62 -200 127 -225 142
-11 7 -36 24 -56 40 -20 15 -41 27 -46 27 -6 0 -17 8 -26 18 -14 16 -17 43
-17 165 l0 147 -65 0 -65 0 0 -195 c0 -110 4 -195 9 -195 5 0 42 -22 83 -49
131 -87 199 -131 204 -131 3 0 17 -9 32 -19 15 -10 76 -51 135 -90 l109 -71
59 37 c33 21 67 43 77 48 9 6 31 19 47 30 17 10 95 61 175 113 80 52 157 102
172 113 15 10 32 19 38 19 6 0 10 67 10 195 l0 195 -70 0 -69 0 -3 -156 -3
-157 -75 -48 c-133 -85 -118 -83 -198 -33 l-32 21 97 62 c53 35 102 65 110 68
10 4 13 51 13 223 l0 218 -57 38 c-32 20 -77 50 -101 66 -24 15 -47 28 -53 28
-5 0 -9 4 -9 9 0 5 -13 14 -30 21 -16 7 -30 16 -30 20 0 4 -8 10 -17 14 -10 3
-48 25 -85 49 l-66 43 46 29 c55 35 71 35 120 -2 20 -15 46 -33 57 -40 184
-110 289 -186 305 -218 7 -16 14 -59 15 -95 l0 -65 85 -5 c142 -10 214 -55
265 -169 27 -59 29 -108 9 -173 -25 -82 -86 -145 -171 -176 -34 -13 -69 -29
-77 -37 -8 -8 -17 -15 -21 -15 -6 0 -66 -40 -75 -51 -3 -3 -13 -8 -22 -12 -10
-3 -18 -11 -18 -17 0 -6 44 -10 120 -10 113 0 124 2 184 30 78 37 155 116 192
197 24 50 28 72 28 158 1 116 -15 170 -75 252 -56 76 -167 143 -237 143 -38 0
-45 7 -67 74 -23 70 -86 138 -155 169 -8 4 -69 42 -135 86 -156 104 -264 171
-273 170 -4 0 -16 -6 -27 -12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,79 @@
self.addEventListener('push', (event) => {
console.log('[Service Worker] Push-уведомление получено');
if (!event.data) {
console.warn('[Service Worker] Push без данных');
return;
}
let data;
try {
data = event.data.json();
} catch (error) {
console.error('[Service Worker] Ошибка парсинга Push данных:', error);
return;
}
const title = data.title || 'Новое уведомление';
const options = {
body: data.body,
icon: data.icon || '/favicon.svg',
badge: '/favicon.svg',
tag: `notification-${data.data?.notificationId || Date.now()}`,
data: data.data,
requireInteraction: false,
vibrate: [200, 100, 200]
};
event.waitUntil(
self.registration.showNotification(title, options)
);
});
// Обработка клика по уведомлению
self.addEventListener('notificationclick', (event) => {
console.log('[Service Worker] Клик по уведомлению');
event.notification.close();
const actionUrl = event.notification.data?.actionUrl;
const targetUrl = actionUrl
? `https://ospab.host${actionUrl}`
: 'https://ospab.host/dashboard';
event.waitUntil(
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
// Если есть открытая вкладка с сайтом, фокусируем её и переходим
for (const client of clientList) {
if (client.url.startsWith('https://ospab.host') && 'focus' in client) {
client.focus();
client.navigate(targetUrl);
return;
}
}
// Иначе открываем новую вкладку
if (self.clients.openWindow) {
return self.clients.openWindow(targetUrl);
}
})
);
});
// Обработка закрытия уведомления
self.addEventListener('notificationclose', (event) => {
console.log('[Service Worker] Уведомление закрыто:', event.notification.tag);
});
// Активация Service Worker
self.addEventListener('activate', (event) => {
console.log('[Service Worker] Активирован');
event.waitUntil(self.clients.claim());
});
// Установка Service Worker
self.addEventListener('install', (event) => {
console.log('[Service Worker] Установлен');
event.waitUntil(self.skipWaiting());
});