Clarify notification worker app dependency
This commit is contained in:
@@ -28,7 +28,7 @@ npm run start
|
|||||||
npm run notifications:worker
|
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
|
## Konwencje kodu
|
||||||
|
|
||||||
|
|||||||
@@ -46,9 +46,12 @@ npm run start
|
|||||||
Worker powiadomień uruchamiany obok aplikacji:
|
Worker powiadomień uruchamiany obok aplikacji:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
npm run start
|
||||||
npm run notifications:worker
|
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
|
## Źródła danych
|
||||||
|
|
||||||
Bieżące pomiary i komunikaty pochodzą z rzeczywistych publicznych danych IMGW:
|
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
|
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 <NOTIFICATIONS_CRON_SECRET>` 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 <NOTIFICATIONS_CRON_SECRET>` 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
|
## Wdrożenie na Vercel
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,17 @@ async function callNotificationEndpoint(path) {
|
|||||||
return body;
|
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() {
|
async function tick() {
|
||||||
if (isRunningTick) return;
|
if (isRunningTick) return;
|
||||||
isRunningTick = true;
|
isRunningTick = true;
|
||||||
@@ -72,7 +83,7 @@ async function tick() {
|
|||||||
lastMorningBriefDate = warsawTime.dateKey;
|
lastMorningBriefDate = warsawTime.dateKey;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(formatWorkerError(error));
|
||||||
} finally {
|
} finally {
|
||||||
isRunningTick = false;
|
isRunningTick = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user