diff --git a/AGENTS.md b/AGENTS.md index f15066d..80ffff5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,7 +28,7 @@ npm run start npm run notifications:worker ``` -Repozytorium nie ma obecnie skryptu testów, osobnego skryptu type-check ani formattera. `npm run build` uruchamia kontrolę TypeScript wykonywaną przez Next.js. `npm run notifications:worker` uruchamia osobny proces Node do cyklicznego wywoływania endpointów Web Push na self-hostingu. Nie opisuj ani nie uruchamiaj nieistniejących komend jako standardowego workflow. +Repozytorium nie ma obecnie skryptu testów, osobnego skryptu type-check ani formattera. `npm run build` uruchamia kontrolę TypeScript wykonywaną przez Next.js. `npm run notifications:worker` uruchamia osobny proces Node do cyklicznego wywoływania endpointów Web Push na self-hostingu; wymaga równolegle działającego `npm run start` albo poprawnego `WTR_APP_URL`. Nie opisuj ani nie uruchamiaj nieistniejących komend jako standardowego workflow. ## Konwencje kodu diff --git a/README.md b/README.md index 9344a8f..e588733 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,12 @@ npm run start Worker powiadomień uruchamiany obok aplikacji: ```bash +npm run start npm run notifications:worker ``` +Worker musi mieć dostęp do działającej aplikacji Next.js. Domyślnie odpytuje `http://127.0.0.1:3000`; jeśli aplikacja działa pod innym adresem albo portem, ustaw `WTR_APP_URL`. + ## Źródła danych Bieżące pomiary i komunikaty pochodzą z rzeczywistych publicznych danych IMGW: @@ -151,7 +154,7 @@ NOTIFICATIONS_WARNING_INTERVAL_MINUTES=5 NOTIFICATIONS_MORNING_BRIEF_TIME=07:00 ``` -Klucze VAPID można wygenerować poleceniem `npx web-push generate-vapid-keys`. Worker `npm run notifications:worker` domyślnie odpytuje `http://127.0.0.1:3000`, sprawdza ostrzeżenia co 5 minut i wysyła poranny brief po 07:00 czasu polskiego. Jeśli używasz zewnętrznego crona zamiast workera, cron ostrzeżeń powinien wywoływać `GET /api/notifications/check` z nagłówkiem `Authorization: Bearer ` albo `x-cron-secret`. Drugi cron, ustawiony na około 07:00 czasu polskiego, powinien wywoływać `GET /api/notifications/daily-brief` z tym samym nagłówkiem. +Klucze VAPID można wygenerować poleceniem `npx web-push generate-vapid-keys`. Worker `npm run notifications:worker` domyślnie odpytuje `http://127.0.0.1:3000`, więc `npm run start` musi działać równolegle na tym samym hoście albo `WTR_APP_URL` musi wskazywać właściwy adres aplikacji. Worker sprawdza ostrzeżenia co 5 minut i wysyła poranny brief po 07:00 czasu polskiego. Jeśli używasz zewnętrznego crona zamiast workera, cron ostrzeżeń powinien wywoływać `GET /api/notifications/check` z nagłówkiem `Authorization: Bearer ` albo `x-cron-secret`. Drugi cron, ustawiony na około 07:00 czasu polskiego, powinien wywoływać `GET /api/notifications/daily-brief` z tym samym nagłówkiem. ## Wdrożenie na Vercel diff --git a/scripts/notification-worker.mjs b/scripts/notification-worker.mjs index 0a40a10..959fb30 100644 --- a/scripts/notification-worker.mjs +++ b/scripts/notification-worker.mjs @@ -55,6 +55,17 @@ async function callNotificationEndpoint(path) { return body; } +function formatWorkerError(error) { + if (error?.cause?.code === "ECONNREFUSED") { + return [ + `wtr. notification worker: app is not reachable at ${appUrl}.`, + "Start the Next.js app first with `npm run start`, or set WTR_APP_URL to the running app URL.", + ].join(" "); + } + if (error instanceof Error) return error.message; + return String(error); +} + async function tick() { if (isRunningTick) return; isRunningTick = true; @@ -72,7 +83,7 @@ async function tick() { lastMorningBriefDate = warsawTime.dateKey; } } catch (error) { - console.error(error); + console.error(formatWorkerError(error)); } finally { isRunningTick = false; }