watchbell 1.2.1 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -11
- package/bin/watchbell.mjs +735 -45
- package/package.json +1 -1
- package/scripts/node-runtime.mjs +166 -0
- package/scripts/selfhost-log.mjs +116 -0
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/build-manifest.json +105 -105
- package/server/.next/prerender-manifest.json +4 -4
- package/server/.next/server/app/(console)/(private)/ai/agents/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +32 -22
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js +76 -74
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/ask/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/connect/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/keys/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/logs/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/models/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +48 -38
- package/server/.next/server/app/(console)/(private)/ai/models/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/ai/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/playground/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/providers/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +40 -30
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js +76 -74
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/quota/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js +77 -75
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/usage/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js +79 -76
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/auto-actions/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/alerts/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +74 -44
- package/server/.next/server/app/(console)/alerts/page.js +78 -75
- package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/apps/[id]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +62 -52
- package/server/.next/server/app/(console)/apps/[id]/page.js +81 -79
- package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/apps/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/apps/page.js +77 -75
- package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/backups/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/backups/page.js +78 -76
- package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/catalog/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/catalog/page.js +76 -74
- package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/connections/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +50 -40
- package/server/.next/server/app/(console)/connections/page.js +79 -77
- package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/d1/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/d1/page.js +77 -75
- package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/deployments/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +40 -30
- package/server/.next/server/app/(console)/deployments/page.js +77 -75
- package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/dns/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/dns/page.js +80 -78
- package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/domains/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +32 -22
- package/server/.next/server/app/(console)/domains/page.js +79 -77
- package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/events/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/events/page.js +76 -74
- package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/firebase/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/firebase/page.js +78 -76
- package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/logs/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/logs/page.js +75 -73
- package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/manage/sections/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/manage/sections/page.js +75 -73
- package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/neon/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +50 -40
- package/server/.next/server/app/(console)/neon/page.js +80 -78
- package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/overview/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +46 -36
- package/server/.next/server/app/(console)/overview/page.js +84 -82
- package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/repos/[id]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/repos/[id]/page.js +78 -76
- package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/repos/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/repos/page.js +75 -73
- package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/settings/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +48 -38
- package/server/.next/server/app/(console)/settings/page.js +76 -74
- package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/sql/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/sql/page.js +75 -73
- package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/status/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/status/page.js +78 -75
- package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/supabase/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +68 -58
- package/server/.next/server/app/(console)/supabase/page.js +85 -84
- package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/topology/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/topology/page.js +77 -75
- package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/turso/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/turso/page.js +76 -74
- package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/upstash/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/upstash/page.js +76 -74
- package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/uptime/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +56 -46
- package/server/.next/server/app/(console)/uptime/page.js +78 -76
- package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/welcome/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +38 -28
- package/server/.next/server/app/(console)/welcome/page.js +75 -73
- package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_global-error.html +1 -1
- package/server/.next/server/app/_global-error.rsc +4 -4
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +3 -3
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +4 -4
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/_not-found/page.js +14 -11
- package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_not-found.html +1 -1
- package/server/.next/server/app/_not-found.rsc +29 -24
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +29 -24
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +27 -24
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/account/password/page/build-manifest.json +3 -3
- package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/account/password/page.js +17 -18
- package/server/.next/server/app/account/password/page.js.nft.json +1 -1
- package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/collect/route.js +24 -24
- package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
- package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/daily/route.js +24 -24
- package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
- package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/telegram/webhook/route.js +23 -23
- package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/advice/route.js +3 -3
- package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/chat/completions/route.js +1 -1
- package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/models/route.js +1 -1
- package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/questions/route.js +3 -3
- package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/mcp/route.js +2 -2
- package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/status/apps/[app]/route.js +3 -3
- package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/status/route.js +3 -3
- package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/watchdog/route.js +13 -13
- package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/google/callback/route.js +2 -2
- package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
- package/server/.next/server/app/invite/page/build-manifest.json +3 -3
- package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/invite/page.js +22 -22
- package/server/.next/server/app/invite/page.js.nft.json +1 -1
- package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/mfa/page/build-manifest.json +3 -3
- package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/mfa/page.js +31 -32
- package/server/.next/server/app/mfa/page.js.nft.json +1 -1
- package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/mfa/setup/page/build-manifest.json +3 -3
- package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
- package/server/.next/server/app/mfa/setup/page.js +31 -32
- package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
- package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/page/build-manifest.json +3 -3
- package/server/.next/server/app/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/page.js +14 -11
- package/server/.next/server/app/page.js.nft.json +1 -1
- package/server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
- package/server/.next/server/app/s/[slug]/page/build-manifest.json +3 -3
- package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/s/[slug]/page.js +21 -20
- package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
- package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/setup/page/build-manifest.json +3 -3
- package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/setup/page.js +20 -18
- package/server/.next/server/app/setup/page.js.nft.json +1 -1
- package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/signin/page/build-manifest.json +3 -3
- package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
- package/server/.next/server/app/signin/page.js +28 -28
- package/server/.next/server/app/signin/page.js.nft.json +1 -1
- package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
- package/server/.next/server/chunks/{[externals]__0dolpidprtypa._.js → [externals]__0y_x27mdj85p4._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__0pfohce9kbhcc._.js → [externals]__1fzfzd0ia0sk6._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1ou2ofma806s1._.js → [externals]__1qqyrxnupegg3._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0wbhuhlkn_ueu._.js → [root-of-the-server]__0-ytbad9hn7uc._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1cbg6fvn16har._.js → [root-of-the-server]__0032rbj2s87zo._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1-bvfylgbkjso._.js → [root-of-the-server]__02n6y6aa6qp1b._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__163-eo1vkbzx1._.js → [root-of-the-server]__03i6yscmtbhhg._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1x9u88f9545aa._.js → [root-of-the-server]__05qcc-0e8z1u8._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1p1k8nq50cwfy._.js → [root-of-the-server]__07bw6o0jc31yr._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__14pgqdfdkuopi._.js → [root-of-the-server]__07eo--c90cju2._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0iysztx_xio84._.js → [root-of-the-server]__07mzeijv31avl._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__05ht00n_eiksb._.js → [root-of-the-server]__090in165mp6av._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__02s57amypj_ye._.js → [root-of-the-server]__09odxyho_9vk_._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0403hy52a1qcu._.js → [root-of-the-server]__0bmyll20mg_gf._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__08k886n7y6f_3._.js → [root-of-the-server]__0btybbrsr4abf._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0hvejly8-nlkq._.js → [root-of-the-server]__0c-33noc8yn1-._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1xrt934xl5wbd._.js → [root-of-the-server]__0d99wclm2suox._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0b136ghrklbbn._.js → [root-of-the-server]__0dsy-9ts8s-pn._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__01estsu5k8l4t._.js → [root-of-the-server]__0g1cifa7hd790._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0pwn8go30dm_3._.js → [root-of-the-server]__0gox66sv0bx47._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0w8qhgmo5c23i._.js → [root-of-the-server]__0hblpf7wqke-j._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0kgmy-sltdtb_._.js → [root-of-the-server]__0hlyn_aj72sn5._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0cskq__p3tja8._.js → [root-of-the-server]__0hnljrh9qi9t-._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0xgl1cg3z00iz._.js → [root-of-the-server]__0hrtz5c_46jkw._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0iicsi0n7tfa5._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0dc0pz57q73va._.js → [root-of-the-server]__0kp0yx909wtab._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__04ruh9diphqtp._.js → [root-of-the-server]__0ku7nva3gxa9p._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1w-yk3b07wcf1._.js → [root-of-the-server]__0l6_iao04u72h._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1yzaj148hs9a1._.js → [root-of-the-server]__0l9ja3579qrju._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0_64c807n6q9e._.js → [root-of-the-server]__0noc6l63d3l9w._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0nqbue6i0l3qs._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__04zuzs7oruu3o._.js → [root-of-the-server]__0nrg8zzqizk69._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1lbmzw1j9jufm._.js → [root-of-the-server]__0oy0hcm48kl-q._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0l5v9itfv9nhr._.js → [root-of-the-server]__0r1men25anfgb._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__05jzukkrp2pvu._.js → [root-of-the-server]__0s5b-tdq7rndj._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1ry92m8xlcebk._.js → [root-of-the-server]__0v-gc-c_e8pwl._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0wp6j3irilu76._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0t9o5ca5bzg0p._.js → [root-of-the-server]__0x487cn6dsn12._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__11qvos_7nf8z8._.js → [root-of-the-server]__0yuyew8m9dc6-._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1w9hei9xe1odr._.js → [root-of-the-server]__0zni_2pv2fdgb._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__10mob-6xfy8b0._.js → [root-of-the-server]__125fkw52kl2ty._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__13hrm9c61i7uk._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0m9648az7bkus._.js → [root-of-the-server]__16lfk1wg0ejaa._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1vmls0bkau925._.js → [root-of-the-server]__16waq6rapvngp._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__18eg-mk5loj_8._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__19ylbgd65iej4._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1vutb2z9gw8el._.js → [root-of-the-server]__1adw_bv2u89kc._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1c653f_8qzrpd._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__00wz8qo4hgq2i._.js → [root-of-the-server]__1c78cu7kb9vkl._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1d5y0cc5mg_07._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1e1l75cf48ph2._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1eu2_f44as742._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1hv3hk5182t-o._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1j6xniw630fg0._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1cwr95yi8preu._.js → [root-of-the-server]__1jsf0jf_ljpsm._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1fj8d0drhw1yx._.js → [root-of-the-server]__1lerees-l5-6c._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1sb8d4e5b5pdl._.js → [root-of-the-server]__1lj1f2w2-w8nw._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1nu5isiy7d832._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0sfnhgc5reef1._.js → [root-of-the-server]__1ooxluowhatjt._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1pvx0izh1m_0_._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0i3bs_98vlttu._.js → [root-of-the-server]__1rpgddeg42i-q._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1r9j5o80kocvz._.js → [root-of-the-server]__1s4bwjevs4hd-._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1uox9a0td-o0-._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1vvg0ur3_7o0p._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1vwz2r58cojht._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1zcp6yrat15t5._.js → [root-of-the-server]__1wpdlr4uh1un4._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1x7en4waq21dd._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1x813cg-b9rls._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1147qf6sf3ru4._.js → [root-of-the-server]__1xl6_spngp6k3._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1lfidps4tcfkg._.js → [root-of-the-server]__1y2qf8ltxhk0o._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1z_0gt-w6bx9v._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1w_wtn9h9eu93._.js → [root-of-the-server]__1zvoez8iapsem._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__209g3_0l-y67u._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__20pu-tixzpeev._.js +3 -0
- package/server/.next/server/chunks/_0-fp57b-utmuw._.js +1 -1
- package/server/.next/server/chunks/_004c7-39glldb._.js +4 -4
- package/server/.next/server/chunks/_004j-wbs3yn84._.js +1 -1
- package/server/.next/server/chunks/_03qlijpos6a21._.js +1 -1
- package/server/.next/server/chunks/_06lf75x-xhl7v._.js +1 -1
- package/server/.next/server/chunks/_09l75j3ey14tc._.js +1 -1
- package/server/.next/server/chunks/_0brb2454uen18._.js +1 -1
- package/server/.next/server/chunks/_0dkhprw6wsizx._.js +1 -1
- package/server/.next/server/chunks/_0duxuj4kmjibl._.js +46 -0
- package/server/.next/server/chunks/_0gz8ldqeokdtn._.js +1 -1
- package/server/.next/server/chunks/_0kmhvts35imzs._.js +4 -4
- package/server/.next/server/chunks/_0l_hz-8cj94r7._.js +3 -0
- package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +1 -1
- package/server/.next/server/chunks/_0ofzzim090ezo._.js +1 -1
- package/server/.next/server/chunks/_0q3ygdztfvqq6._.js +3 -0
- package/server/.next/server/chunks/{_1msi9fy888xna._.js → _0q9a3ettj_h2s._.js} +2 -2
- package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +7 -7
- package/server/.next/server/chunks/_0qyupoc7u5hr7._.js +3 -0
- package/server/.next/server/chunks/_0rwuppwyvemfj._.js +4 -4
- package/server/.next/server/chunks/{_1z8__gxixw-z-._.js → _0ry4553j-m5fp._.js} +3 -3
- package/server/.next/server/chunks/_0s2odl9xacsg0._.js +1 -1
- package/server/.next/server/chunks/_0sy878k2ywjbq._.js +1 -1
- package/server/.next/server/chunks/_0tz4o-qufnu3l._.js +4 -4
- package/server/.next/server/chunks/_0voowig3y32v1._.js +4 -4
- package/server/.next/server/chunks/_0wtlf0x_depae._.js +3 -0
- package/server/.next/server/chunks/_0xf7mtsrkgc9e._.js +2 -2
- package/server/.next/server/chunks/_0zj10_al6r59j._.js +26 -26
- package/server/.next/server/chunks/_1-pcsy2hkg0il._.js +3 -0
- package/server/.next/server/chunks/_1-pw7jw52sbti._.js +1 -1
- package/server/.next/server/chunks/_10vh_l3hht4_3._.js +4 -4
- package/server/.next/server/chunks/_113ebzq_9i756._.js +46 -0
- package/server/.next/server/chunks/{_219klbycazlx_._.js → _16urxazbgm48y._.js} +3 -3
- package/server/.next/server/chunks/_17aiz6zt-yv52._.js +2 -2
- package/server/.next/server/chunks/_18p-vw2zmdx9f._.js +1 -1
- package/server/.next/server/chunks/_1_son1yzo5xvl._.js +1 -1
- package/server/.next/server/chunks/_1_xsrlijknnh3._.js +1 -1
- package/server/.next/server/chunks/_1a5vma58w9ytn._.js +4 -4
- package/server/.next/server/chunks/_1e_rbkrukj0x9._.js +26 -26
- package/server/.next/server/chunks/{_060yqv0qyo-lp._.js → _1g8r-7wcf8sy3._.js} +3 -3
- package/server/.next/server/chunks/_1g_prqb_u33e3._.js +7 -7
- package/server/.next/server/chunks/_1h73gul79s8pi._.js +1 -1
- package/server/.next/server/chunks/_1ihndlef8r00f._.js +46 -0
- package/server/.next/server/chunks/_1mwb214-ablfo._.js +46 -0
- package/server/.next/server/chunks/_1ngkjn56qmi2x._.js +3 -0
- package/server/.next/server/chunks/_1v7q0xdxbqawm._.js +4 -4
- package/server/.next/server/chunks/_1xs2ya_n7kb04._.js +4 -4
- package/server/.next/server/chunks/node_modules_drizzle-orm_entity_1-0q2stnw2ab8.js +1 -1
- package/server/.next/server/chunks/node_modules_zod_v4_classic_external_01k1rek7hgd0j.js +4 -4
- package/server/.next/server/chunks/src_0--qn984h6czu._.js +1 -1
- package/server/.next/server/chunks/{src_0lcm1yhnzhn2d._.js → src_00ixvrjrk_2h4._.js} +2 -2
- package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
- package/server/.next/server/chunks/src_088gmyaew7ds0._.js +1 -1
- package/server/.next/server/chunks/{src_0v67kw2p2wd_c._.js → src_0tdn7mun5rvc6._.js} +2 -2
- package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +1 -1
- package/server/.next/server/chunks/src_1-xw4hea2lvb3._.js +1 -1
- package/server/.next/server/chunks/{src_0390zcofy42lg._.js → src_10vyvp9vy_69h._.js} +2 -2
- package/server/.next/server/chunks/{src_1v3tf1ye2jzyk._.js → src_13n1vi7uew4iu._.js} +2 -2
- package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
- package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +1 -1
- package/server/.next/server/chunks/{src_07vqa8fdgu9ah._.js → src_1il7wg_qjxny7._.js} +2 -2
- package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +7 -4
- package/server/.next/server/chunks/src_1u-olt84z63rx._.js +1 -1
- package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +1 -1
- package/server/.next/server/chunks/src_1wzm081p6qyre._.js +7 -4
- package/server/.next/server/chunks/src_20ilndq84j3b3._.js +3 -0
- package/server/.next/server/chunks/src_lib_0ayxuk4ftzf2f._.js +6 -0
- package/server/.next/server/chunks/src_lib_0ds7lhpop_adf._.js +1 -1
- package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
- package/server/.next/server/chunks/src_lib_0krdzz8eu9xh3._.js +6 -0
- package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +15 -9
- package/server/.next/server/chunks/src_lib_1-u7dbsavbtb0._.js +6 -0
- package/server/.next/server/chunks/src_lib_103kimc1xvc_0._.js +9 -0
- package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +15 -9
- package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +15 -9
- package/server/.next/server/chunks/src_lib_1sdusf16f07x-._.js +9 -0
- package/server/.next/server/chunks/src_lib_1sz77jjn7xl7o._.js +1 -1
- package/server/.next/server/chunks/src_lib_1xwavi_m_li7p._.js +1 -1
- package/server/.next/server/chunks/src_lib_206j7lyff31-g._.js +6 -0
- package/server/.next/server/chunks/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
- package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +5 -5
- package/server/.next/server/chunks/src_lib_data_advisor-db_ts_0rl1ug3iana24._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_apps-db_ts_02ovqtci8e7o6._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
- package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +6 -6
- package/server/.next/server/chunks/src_lib_domain-move_ts_04stiet1-xpe2._.js +1 -1
- package/server/.next/server/chunks/src_lib_local-auth_setup_ts_10d8-k_e6pvft._.js +2 -2
- package/server/.next/server/chunks/src_lib_notify_telegram-bot_ts_18y40dkchmcqd._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_display-name_ts_0xoimm6j7bwnf._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
- package/server/.next/server/chunks/src_private_1_nggk_wre7qf._.js +2 -2
- package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
- package/server/.next/server/chunks/src_private_ai_gateway_ts_1qtr4nyb8kgnd._.js +2 -2
- package/server/.next/server/chunks/src_private_assist_provider-answer_ts_10qv42t-5046y._.js +1 -1
- package/server/.next/server/chunks/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
- package/server/.next/server/chunks/src_private_assist_questions-db_ts_1pc4g504t-qmu._.js +1 -1
- package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_21atz5tidps07.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +4 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +3 -0
- package/server/.next/server/chunks/ssr/{[externals]__0jv_q8g96gubg._.js → [externals]__00tbi838eotwu._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1hqh7fi0-rtlc._.js → [externals]__01kgu896o9-9t._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1neu6qld_ilyx._.js → [externals]__078uqm46tk5mo._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__0yzs5m5hot2o2._.js → [externals]__0i0hmh-a743jn._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__0et8619os7o06._.js → [externals]__0qc7l-41h018j._.js} +1 -1
- package/server/.next/server/chunks/ssr/[externals]__194b54tqm6qaq._.js +3 -0
- package/server/.next/server/chunks/ssr/[externals]__1_ttbfsdm3x1-._.js +3 -0
- package/server/.next/server/chunks/ssr/{[externals]__0x50_fipcza3k._.js → [externals]__1devsqn7ez77y._.js} +1 -1
- package/server/.next/server/chunks/ssr/[externals]__1prfp5pzeoflz._.js +3 -0
- package/server/.next/server/chunks/ssr/[externals]__1zxtjc2qr2epg._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0oayb8dm0iu8k._.js → [root-of-the-server]__004q78ed0nf0_._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__01zthkv8nrlct._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__050d99bknjdvq._.js → [root-of-the-server]__04_prmhm_cts4._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-jx3t8dg8n5t._.js → [root-of-the-server]__04nc91kiy757l._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1xwqrik2sugmi._.js → [root-of-the-server]__09blzlbsxqvy9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-o5i-5pqjk5v._.js → [root-of-the-server]__0_6on4a5w76va._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tco2ec6ha1k6._.js → [root-of-the-server]__0a3n6wzq8xui9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ptdec0sozaqm._.js → [root-of-the-server]__0an0wsglj2bhh._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__18xb7pbdmiyiz._.js → [root-of-the-server]__0ban7lwqlko9y._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khp_gsot3jh_._.js → [root-of-the-server]__0c_q6tvcmsmt9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__00wwav5k7xmy0._.js → [root-of-the-server]__0ct4apye0sfmc._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__15keslh0ov5mv._.js → [root-of-the-server]__0d2ry7-u1cv8c._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0e8ya6wyy2plv._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0h0txd7z3sxq7._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__08w3ad-xux1g4._.js → [root-of-the-server]__0h1vffivfh242._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__05hw89gap74cw._.js → [root-of-the-server]__0i0_6dnnf0hov._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khvq0xdah931._.js → [root-of-the-server]__0jgapr1cnvhi6._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_1130gx52k-9._.js → [root-of-the-server]__0jn0o2e32mwcp._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ojywxj06986-._.js → [root-of-the-server]__0k29b_kblv6sv._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ejxk0jlgi4eb._.js → [root-of-the-server]__0keo0-hwsnkw9._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0klc2dyzyjeba._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__16jkttbe1yoai._.js → [root-of-the-server]__0l50vsk8enxzj._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0nlfip3wc3l2z._.js +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__11ham42w_feik._.js → [root-of-the-server]__0o0cpvobd-u0n._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0kr_tvfgqtb-o._.js → [root-of-the-server]__0paolyy3xkow9._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0qnly-gjvfntd._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0qqcz9ynsgmgl._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1k_hi9mbd4_by._.js → [root-of-the-server]__0qwds8dkahd2_._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0bn_thc_vtf_i._.js → [root-of-the-server]__0rdf04ziqasfz._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_677ii9bahoy._.js → [root-of-the-server]__0ronqmm1xpldk._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0uxychcp_pldy._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0vnfx03nb5vku._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0x7w-5h8or6qr._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__15wwi1pda8ims._.js → [root-of-the-server]__0xpkzaqer75i-._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0y6psx1_d7fkt._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__04klr3-4qi7-t._.js → [root-of-the-server]__107gjehjdhw8p._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__10kuehp7saz8h._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__113zn8es2wp67._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__04tkts7c9ylma._.js → [root-of-the-server]__13fabu66slkfb._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__14ept-_l8j32m._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__15s9onrf73-k8._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__10rhqv5xq9jaj._.js → [root-of-the-server]__191t_hhtr-k27._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__19l_r5vy3kxo1._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1096-q3_trmm9._.js → [root-of-the-server]__1_b_k8wgqyxy7._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0exp042uqhyqs._.js → [root-of-the-server]__1a7x--bos5pv8._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1adcmllk9wt5l._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1d5tbv79yjhqm._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1fj33_xkainxk._.js +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1itgt83qo1e77._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__12ymdwm8dphvu._.js → [root-of-the-server]__1mumjk3h0om80._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1nat8lbog5imr._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1p2oghl9lfgmk._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tcu4-eowz9vt._.js → [root-of-the-server]__1pwd99rch8xyl._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0llh-w4ta1qbp._.js → [root-of-the-server]__1sw2q1p1t59y8._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__06uaa_2zbg57p._.js → [root-of-the-server]__1tj-iwvrxfd1a._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__12-a3tcnfdcyq._.js → [root-of-the-server]__1u_13nhw3kuz3._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0tjab3yn0asf7._.js → [root-of-the-server]__1uojs0x42k86p._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1kieqcc6kdywx._.js → [root-of-the-server]__1yx8ayym979jd._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1zmavjo5fhryp._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__20of6xa16fwqa._.js +1 -1
- package/server/.next/server/chunks/ssr/_0-wc6f6p0c8lv._.js +3 -0
- package/server/.next/server/chunks/ssr/{_04ltmruop4rt3._.js → _02eudwc8ieb2r._.js} +3 -3
- package/server/.next/server/chunks/ssr/_034fv8o7kws2k._.js +3 -0
- package/server/.next/server/chunks/ssr/_03od6e8ibcxtf._.js +3 -0
- package/server/.next/server/chunks/ssr/_042ow6smd_1gj._.js +3 -0
- package/server/.next/server/chunks/ssr/{_090fib2x989oc._.js → _08xqk3eibu5aw._.js} +2 -2
- package/server/.next/server/chunks/ssr/{_01irlde8uxva8._.js → _0_8v3-nq-b4ug._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
- package/server/.next/server/chunks/ssr/_0_rtyc4t9xcdo._.js +1 -1
- package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
- package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
- package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1ag8axv14phju._.js → _0cbbks0ms7i_u._.js} +3 -3
- package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
- package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
- package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +4 -0
- package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
- package/server/.next/server/chunks/ssr/{_14n2368190qms._.js → _0fq8thje0tuch._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +4 -0
- package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +4 -0
- package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +4 -0
- package/server/.next/server/chunks/ssr/{_0tqc0bsnybvva._.js → _0ipnb60-_660b._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +3 -0
- package/server/.next/server/chunks/ssr/{_022u_nnwo1yb4._.js → _0kxkg0dbp42ai._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0lmcrl8r9dg49._.js +1 -1
- package/server/.next/server/chunks/ssr/_0mp5aext18ijx._.js +3 -0
- package/server/.next/server/chunks/ssr/_0ns_087lx5abm._.js +1 -1
- package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
- package/server/.next/server/chunks/ssr/{_18lgd6o04ugow._.js → _0oub-njkja8gu._.js} +3 -3
- package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +4 -0
- package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +1 -1
- package/server/.next/server/chunks/ssr/_0qo8tc43kjsf_._.js +1 -1
- package/server/.next/server/chunks/ssr/_0qyupoc7u5hr7._.js +3 -0
- package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +4 -0
- package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +4 -0
- package/server/.next/server/chunks/ssr/_0v6v5w16qxwke._.js +1 -1
- package/server/.next/server/chunks/ssr/_0wb79bnj96x0g._.js +3 -0
- package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
- package/server/.next/server/chunks/ssr/_0zixhhc1lheoi._.js +4 -0
- package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
- package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +5 -5
- package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
- package/server/.next/server/chunks/ssr/_11llsmv578p2i._.js +3 -0
- package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +4 -0
- package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
- package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
- package/server/.next/server/chunks/ssr/_1_xsrlijknnh3._.js +1 -1
- package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +4 -0
- package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
- package/server/.next/server/chunks/ssr/_1de6e6l7599fp._.js +1 -1
- package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +4 -0
- package/server/.next/server/chunks/ssr/_1dqf3jmb24s37._.js +1 -1
- package/server/.next/server/chunks/ssr/_1e47r3tlad52r._.js +3 -0
- package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +4 -0
- package/server/.next/server/chunks/ssr/{_1w_rq6clcs0ft._.js → _1fuywfexex2s8._.js} +3 -3
- package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
- package/server/.next/server/chunks/ssr/_1gl78598hz_ku._.js +1 -1
- package/server/.next/server/chunks/ssr/_1h93joqd_-1og._.js +1 -1
- package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +4 -0
- package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
- package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
- package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +4 -0
- package/server/.next/server/chunks/ssr/{_0hmxyfx7su4uk._.js → _1m4km_w39x5e9._.js} +2 -2
- package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +4 -0
- package/server/.next/server/chunks/ssr/_1qdox4yn1u4pc._.js +1 -1
- package/server/.next/server/chunks/ssr/_1qdqc9j_skd1q._.js +1 -1
- package/server/.next/server/chunks/ssr/_1r7o1vx4875hu._.js +1 -1
- package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +4 -0
- package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
- package/server/.next/server/chunks/ssr/_20wy2moxkzhf0._.js +3 -0
- package/server/.next/server/chunks/ssr/{_026w_ig6vy9bt._.js → _218164gkxgum_._.js} +2 -2
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_0y5m8cul6d7kk.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
- package/server/.next/server/chunks/ssr/node_modules_0bqq4kab3lt4c._.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_05z64qbskywkh._.js → node_modules_1-uce_v-roeci._.js} +1 -1
- package/server/.next/server/chunks/ssr/node_modules_@base-ui_react_dialog_index_parts_mjs_0wvx70_xziwkw._.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0p8s4lhdi0ir6._.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kkewzcx4540.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00t5_cu_8xco2.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_028rm32yw9745.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02tytjla8gfpw.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_05tff2l0grv3d.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08qavwdx-gipt.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09jdr97vksmwk.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c3z69fbbz6-a.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d4hxwzkts-8z.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dq-zslzf2s94.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_1q_82vyl-q7u6.js → node_modules_next_dist_esm_build_templates_app-page_0e-rjmezj0qkk.js} +2 -2
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0ivgh76j_tu2x.js → node_modules_next_dist_esm_build_templates_app-page_0e50mslm8ys4t.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0esqulnipbhj7.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0icasmc2qvtfa.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0idohkgskbja5.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ii2a6tud83pj.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ivr2dcq7hh5t.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mcwghl-di24f.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0n05qgf2t9o6n.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ntej2bo95ns3.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0o1l93c0tj-p8.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ollx_iq739y6.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0v16m5nv0x43b.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0wa_9ywaoqxrf.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0y94b-zvw0vrq.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ydzswpddtx9q.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zwpkpyuh6z99.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14t5-0abqp0sm.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18h3ke4tl-fzl.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_14-4y3i6c1vxc.js → node_modules_next_dist_esm_build_templates_app-page_19kqs-fc2i0zv.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_s_25znkg8mz.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_ysa6fs0tt59.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1b4hixza89i52.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1brrqdx4msjzf.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1e74o7dar2z12.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eqpqmdz9jgs0.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1f3932777ye1o.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1kx1n5-wqjvko.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1l6umnmh89nvy.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mdyuengydtxm.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qmm1wm-dfm_v.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t-fn8blx1hp8.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tf9xiz17b3cq.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tffdbiasnszd.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uisz6sszlhwp.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1umag21mbk-rs.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0i3p3qfjihm3f.js → node_modules_next_dist_esm_build_templates_app-page_1vakvu0qtsn07.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wmviw4zw6t_r.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xq449tjypb4s.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_zod_v4_classic_external_01k1rek7hgd0j.js +4 -4
- package/server/.next/server/chunks/ssr/src_02ynbzyh8nn02._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_0oagnv9_4qww7._.js → src_05kvmrkq5nfyh._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_0905fjqu0qv57._.js → src_097wa6oc_utgr._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_0_5_wl0sww-x7._.js +6 -3
- package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0uitfl3c1mdqb._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1-xw4hea2lvb3._.js +1 -1
- package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_071xsnvnzlvj8._.js → src_1751lvujjc-tz._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1f1x6508qetmp._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_1nse4o3frj33x._.js → src_1fomo1_as1-ea._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1koc8y1nfdlw3._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1pd5lqhm1x4yf._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1sv5tf2pk5-pn._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_0widudneyf0oq._.js → src_1wnx8vxv7nd04._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_0p2-zm5eewkqo._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_1za4o0--zhso5._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1jme7fm7ej_lr._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_02upf_c41dauw._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_d1_page_tsx_167hwnq_9uh81._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_0d1uyir4fe7pc._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_domains_1ut499n11u8_r._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_firebase_row-menu_tsx_0hssoq3pqjl-n._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_17htk-vea5fna._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_overview_page_tsx_0se3f3ln9q-42._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_repos_[id]_page_tsx_1nkxthc4ethrj._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_status_page_tsx_1zvj799nv4kah._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_1ofufib3-zzt-._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_app_signin_06v-xlrxfp079._.js → src_app_signin_11vigmz4xm91m._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_components_0-x11r8_844pu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_08d78uqnnmrrh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_0_xymno8nakru._.js +3 -0
- package/server/.next/server/chunks/ssr/src_components_0ozvphxxwb7d-._.js +3 -0
- package/server/.next/server/chunks/ssr/src_components_0tmtbf2etsx03._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_charts_tsx_0u0c5sxi3-7ug._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_live_tsx_1p2s3b807w0jt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_ui_dialog_tsx_1tn-i_6d3rhzt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +7 -1
- package/server/.next/server/chunks/ssr/src_lib_0f_4mvf4-xxst._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1xwavi_m_li7p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1zgor_vrwl5kt._.js +5 -0
- package/server/.next/server/chunks/ssr/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +3 -3
- package/server/.next/server/chunks/ssr/src_lib_collector_self-update_ts_18m5vmptpjhtg._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_data_apps-db_ts_02ovqtci8e7o6._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_github-db_ts_02xuh84m-__8z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_lib_demo_15okweo0amos4._.js → src_lib_demo_07uq47fhms-3d._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_lib_domain-move_ts_04stiet1-xpe2._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_local-auth_setup_ts_05zj7z33ne4f5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_security_node-runtime_ts_1jei00s21d6v0._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_display-name_ts_0xoimm6j7bwnf._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_network_ts_0toa7t-gw9cup._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_04omlb_sgy-_r._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_actions_telegram-approvals_ts_14gvz6qi_j4aa._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +6 -6
- package/server/.next/server/chunks/ssr/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
- package/server/.next/server/middleware-build-manifest.js +105 -105
- package/server/.next/server/pages/404.html +1 -1
- package/server/.next/server/pages/500.html +1 -1
- package/server/.next/server/preview-props.json +3 -3
- package/server/.next/server/server-reference-manifest.js +1 -1
- package/server/.next/server/server-reference-manifest.json +860 -674
- package/server/.next/static/chunks/04ospu_w--6p9.js +1 -0
- package/server/.next/static/chunks/06a83nde7riq-.js +1 -0
- package/server/.next/static/chunks/088c6cw88jmlb.js +7 -0
- package/server/.next/static/chunks/08f1euchlacye.js +1 -0
- package/server/.next/static/chunks/09e-vdlax9bp6.js +1 -0
- package/server/.next/static/chunks/{0rgn3-cks0udn.js → 0a-rekt06v0sv.js} +1 -1
- package/server/.next/static/chunks/{3zaeh5nbkqpyj.js → 0a4b85ckxbprh.js} +1 -1
- package/server/.next/static/chunks/0buwzrf7dpagn.js +1 -0
- package/server/.next/static/chunks/0dmql-jz-o69o.js +1 -0
- package/server/.next/static/chunks/0iyozrryj1w49.js +1 -0
- package/server/.next/static/chunks/{0r2z8zg4n43pd.js → 0jf5lpzwq4vh1.js} +1 -1
- package/server/.next/static/chunks/0p6hja9octhrd.js +1 -0
- package/server/.next/static/chunks/{2wd8yh_ni0lqj.js → 0qoql97izcn4l.js} +1 -1
- package/server/.next/static/chunks/0qsk0bb1x81nc.js +1 -0
- package/server/.next/static/chunks/{22ierqxhqtwn6.js → 0wkv5e-c430ea.js} +2 -2
- package/server/.next/static/chunks/0x41o1ud_ksl1.js +1 -0
- package/server/.next/static/chunks/0x_wb_w6fgkyt.js +1 -0
- package/server/.next/static/chunks/{0foc_dy1j2x52.js → 12bbufru1ui37.js} +1 -1
- package/server/.next/static/chunks/{25r6-t40ok5s9.js → 12zasgv1xisb5.js} +1 -1
- package/server/.next/static/chunks/{2yjh4ytp-sedv.js → 149lk0boxihnl.js} +1 -1
- package/server/.next/static/chunks/17lwu-2id6c_-.js +1 -0
- package/server/.next/static/chunks/{16lnw4itnfhw-.js → 1_93oj1b-nrla.js} +1 -1
- package/server/.next/static/chunks/1bt81ubbahkh6.js +1 -0
- package/server/.next/static/chunks/1c0s-ejiwfy2u.js +1 -0
- package/server/.next/static/chunks/1g_kip3m3h9q6.js +1 -0
- package/server/.next/static/chunks/1i8i1ieoh738i.js +1 -0
- package/server/.next/static/chunks/1s0s32oqy-54t.js +1 -0
- package/server/.next/static/chunks/1ss-6-h8nloc9.js +1 -0
- package/server/.next/static/chunks/1t8fe3w70uapo.js +1 -0
- package/server/.next/static/chunks/1t9f2pdc3crnr.js +1 -0
- package/server/.next/static/chunks/1urtw14pwufsv.js +1 -0
- package/server/.next/static/chunks/1wh-ps6a57yj1.js +1 -0
- package/server/.next/static/chunks/20ujg0hz_need.js +1 -0
- package/server/.next/static/chunks/23b9tctw1mn5a.js +76 -0
- package/server/.next/static/chunks/292uz-rsh422k.js +1 -0
- package/server/.next/static/chunks/{11gctw6uutyd7.js → 29xg947lkf4-x.js} +1 -1
- package/server/.next/static/chunks/2ac9gyn8mzqp4.js +1 -0
- package/server/.next/static/chunks/2fze_cnwk8j76.js +1 -0
- package/server/.next/static/chunks/2g9dossbqnlr7.js +1 -0
- package/server/.next/static/chunks/{2aerfowxsf234.js → 2l4upq4bwgvvu.js} +1 -1
- package/server/.next/static/chunks/{177dd6kiifsoi.js → 2pi0r5spn0slc.js} +1 -1
- package/server/.next/static/chunks/2rpa_j81h_45y.js +1 -0
- package/server/.next/static/chunks/2szc6dvuj3gxy.js +1 -0
- package/server/.next/static/chunks/2u3iceaxpiiws.js +1 -0
- package/server/.next/static/chunks/2z21xxtcmsmhe.js +1 -0
- package/server/.next/static/chunks/{1rt5heq1xn_az.js → 315s21b2dd7lg.js} +1 -1
- package/server/.next/static/chunks/35to2q1uretcv.js +1 -0
- package/server/.next/static/chunks/{2q88116332v43.js → 37zqf9hef7g0k.js} +1 -1
- package/server/.next/static/chunks/38-ay595f3xie.js +1 -0
- package/server/.next/static/chunks/38ao1jq4zw-nd.js +1 -0
- package/server/.next/static/chunks/38conxv_f-pgo.js +1 -0
- package/server/.next/static/chunks/3cyesi3hi6l1g.js +5 -0
- package/server/.next/static/chunks/{04lzxilmq17f_.js → 3efi_dyz4y0lj.js} +1 -1
- package/server/.next/static/chunks/3qjirj3rjf5mu.js +1 -0
- package/server/.next/static/chunks/3vpy-ra0rib9m.js +1 -0
- package/server/.next/static/chunks/{22h4lj0gp_6n5.js → 3xxcpv79l5tnh.js} +1 -1
- package/server/.next/static/chunks/3ybb15n1q3f-o.css +3 -0
- package/server/drizzle-selfhost/0007_webhook_channel.sql +5 -0
- package/server/drizzle-selfhost/meta/_journal.json +7 -0
- package/tools/reset-login.mjs +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0ych1y0j6e38k._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zhzy29i2vylk._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zwe7i-isx08p._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10ee5dhzx78ne._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10q3dc485yp4l._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10u93zgn0-c5a._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__115yxhfn37r-k._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__14mz6mbk2m_e0._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__15y82djobfhof._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__165qlmqwvxmzr._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1acps2oi9s0i7._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1erq9v_t5jwp5._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1ip0gr1i080kn._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1mrpvwofqktnv._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1ppnnpydkrs93._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1qdo_hgivrawk._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1qp_dvfy4vvsm._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1rk6wb8qem46d._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1s20vd1etiird._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1s9_nmhp7chvj._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1yc_xjjam78sg._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__2067x8gf07f-i._.js +0 -3
- package/server/.next/server/chunks/_0beox3lp9z58-._.js +0 -3
- package/server/.next/server/chunks/_0gobsd0_oxj5v._.js +0 -3
- package/server/.next/server/chunks/_0vwctvzwde-sz._.js +0 -37
- package/server/.next/server/chunks/_0yzmfi6iwa_sk._.js +0 -3
- package/server/.next/server/chunks/_1c3ksp22eq0rw._.js +0 -37
- package/server/.next/server/chunks/_1cjfskikk32wj._.js +0 -37
- package/server/.next/server/chunks/_1d9mf39gz0bv4._.js +0 -3
- package/server/.next/server/chunks/_1dlvqnaceqr-_._.js +0 -3
- package/server/.next/server/chunks/_1jveb9aojczvg._.js +0 -3
- package/server/.next/server/chunks/_1qw43v448l9e7._.js +0 -37
- package/server/.next/server/chunks/src_0yve3gn52i_mn._.js +0 -3
- package/server/.next/server/chunks/src_lib_0cbh80jxsdx3n._.js +0 -6
- package/server/.next/server/chunks/src_lib_0s_txig7jm3ty._.js +0 -9
- package/server/.next/server/chunks/src_lib_15wd7ab4u5nrn._.js +0 -9
- package/server/.next/server/chunks/src_lib_15y0kwcot_7u0._.js +0 -6
- package/server/.next/server/chunks/src_lib_16y1secb8t9fj._.js +0 -6
- package/server/.next/server/chunks/src_lib_1iwyh213u9xts._.js +0 -6
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +0 -4
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1mmmc4yhx5fm6._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1nv-uycpa6_lh._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1p5zuqwmfkoo1._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1thdbok76xtof._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__01mgajn73iwc7._.js +0 -5
- package/server/.next/server/chunks/ssr/[root-of-the-server]__05q-laapy00sk._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0dd9rci1isdjf._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0lehuiyzxp78t._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0p7d9dfmuhnvv._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0tp9vtckbkk9o._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__10y2ig7dg3f-k._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__194546bqpq02e._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1bvp2ia3h9qbs._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1dyjzbqwy6o12._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1l695djsioelp._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1pfk0fqey3ipf._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1pgpryg9lkmoz._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1t4thrxlv4zre._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1tuftf7fags7x._.js +0 -5
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1vyste6xyyu37._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1yf4_oyl-3xp7._.js +0 -3
- package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +0 -4
- package/server/.next/server/chunks/ssr/_06kn13xh_13da._.js +0 -3
- package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +0 -4
- package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +0 -4
- package/server/.next/server/chunks/ssr/_0i2a_ziqzhyq-._.js +0 -3
- package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +0 -4
- package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +0 -4
- package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +0 -4
- package/server/.next/server/chunks/ssr/_0qcvpnwa1u3vr._.js +0 -3
- package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +0 -3
- package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +0 -4
- package/server/.next/server/chunks/ssr/_0ymtfa6vo-yz5._.js +0 -3
- package/server/.next/server/chunks/ssr/_0yn1xeumiigj0._.js +0 -3
- package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +0 -4
- package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +0 -4
- package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +0 -4
- package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +0 -4
- package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +0 -4
- package/server/.next/server/chunks/ssr/_1dlvqnaceqr-_._.js +0 -3
- package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +0 -4
- package/server/.next/server/chunks/ssr/_1e5zfwgdf0mm5._.js +0 -3
- package/server/.next/server/chunks/ssr/_1h5tfqxzqd2tz._.js +0 -3
- package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +0 -4
- package/server/.next/server/chunks/ssr/_1k8rjvzlscs56._.js +0 -3
- package/server/.next/server/chunks/ssr/_1l-vlfiltmzu3._.js +0 -3
- package/server/.next/server/chunks/ssr/_1wssvwkmxcdn5._.js +0 -3
- package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +0 -4
- package/server/.next/server/chunks/ssr/_20gx4od4pnj8d._.js +0 -3
- package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +0 -4
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1zw_mdh2ep6vs.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_06a1fnrawxlh1.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_217-u-dmlzx6a.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_0ven9q46d3d7s.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_1_u5afwqp6brs._.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j32_ibz4._.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9mbf-fh.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kg_ige9ehqj.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00k37tbaia8dh.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00z_p6szkga15.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_01-utr59mtfg1.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_055hw7kwif935.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06fg_efdkc3kx.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08f3d08smwt6_.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcfro9qovjn.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c8wd69fns_0d.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cha-3kg99u4h.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d_0he72lzkh9.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0f6chw8z5cuyg.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j9-_xhs21abp.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0kwpdjujljna-.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rer2akuum5r-.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0umt_achusjjb.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0un7wq602mt3n.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vrdl9n7guitd.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vse2cboy4cms.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0x7ey4_8b48_o.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0z8l8t55t65t_.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zap6p0vuv-fp.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-m49cfu6a7gl.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-w3hswsbrppl.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1167zbjp4ys_a.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_129serqqq3xyq.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12en3pdvxu0dy.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1596hk9t3r1a5.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_17us24ry0om-z.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_8xi22-aoxu1.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_l32aoya75_m.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ar0v26274uhj.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dkgfjoaf_1g3.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eg14m09zdg__.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1h_y671y1la_8.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mkokmyyp47hd.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1msjiuu45famw.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mw7isdchouml.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1n4cotiug2a_r.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1njl24pr6dwrt.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o1_3bydb-3j5.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1pjor42_s9imf.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qta4yeufzpz7.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qxbl6k6dji0s.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_21a3kf8buivxw.js +0 -3
- package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0ley8c3htc2q9._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0p0fk07bj9gpq._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0ubtruqmercw2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0vi30frvjgri2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_12sdm7skn8fr1._.js +0 -3
- package/server/.next/server/chunks/ssr/src_16lx0qdi44evh._.js +0 -3
- package/server/.next/server/chunks/ssr/src_17yq6_bqlwgvy._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1n-6pz04odixj._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_05mlxmavgli8_._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_0u1ec16rmzze6._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_1yp2m9j9dnsv-._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_ui_dropdown-menu_tsx_1xyz_k6bpdu_5._.js +0 -3
- package/server/.next/static/chunks/01mhc6kz81iwf.js +0 -1
- package/server/.next/static/chunks/02byu0sw5d0g9.js +0 -1
- package/server/.next/static/chunks/02e07gc948zdh.js +0 -1
- package/server/.next/static/chunks/04yl9t4cn6zwm.js +0 -1
- package/server/.next/static/chunks/08oksl0raetg5.js +0 -1
- package/server/.next/static/chunks/0d556cjlmwiq4.js +0 -1
- package/server/.next/static/chunks/0jm8a63677590.js +0 -1
- package/server/.next/static/chunks/0lcmy-_tdtrqk.js +0 -1
- package/server/.next/static/chunks/0ld0vtd027il_.js +0 -1
- package/server/.next/static/chunks/0qciunoy58a03.js +0 -7
- package/server/.next/static/chunks/0r-2mywc7qkb_.js +0 -1
- package/server/.next/static/chunks/0xwz6ps1581qa.js +0 -1
- package/server/.next/static/chunks/1-zyqj42cr9hy.css +0 -3
- package/server/.next/static/chunks/12l7tr29-a97t.js +0 -1
- package/server/.next/static/chunks/160mk2sltxl3e.js +0 -1
- package/server/.next/static/chunks/1bn-7bluoi2vi.js +0 -1
- package/server/.next/static/chunks/1d0mukiro5klq.js +0 -1
- package/server/.next/static/chunks/1jc8ghvf721gg.js +0 -76
- package/server/.next/static/chunks/1nfofl7nhy6fx.js +0 -1
- package/server/.next/static/chunks/1x8bgprfjtt59.js +0 -1
- package/server/.next/static/chunks/1yctclvh0qaxz.js +0 -1
- package/server/.next/static/chunks/1zyyqxguxs96l.js +0 -1
- package/server/.next/static/chunks/23scyaimkowfl.js +0 -1
- package/server/.next/static/chunks/2lfa16b0tlnvj.js +0 -1
- package/server/.next/static/chunks/2onhuya5-n3-e.js +0 -1
- package/server/.next/static/chunks/2pn16qmann41d.js +0 -1
- package/server/.next/static/chunks/2szlo15y09085.js +0 -1
- package/server/.next/static/chunks/2v_f39dz8sa3-.js +0 -1
- package/server/.next/static/chunks/2xhx4rma6gx5o.js +0 -1
- package/server/.next/static/chunks/37f1rjolzxbiv.js +0 -1
- package/server/.next/static/chunks/38c9rnljzl6iw.js +0 -1
- package/server/.next/static/chunks/3_erdlvi2tz19.js +0 -1
- package/server/.next/static/chunks/3qbk8r6jm8udo.js +0 -5
- package/server/.next/static/chunks/3sg_npfod25zq.js +0 -1
- package/server/.next/static/chunks/3tl9dgour-h9l.js +0 -1
- package/server/.next/static/chunks/3vbz762vgy3dx.js +0 -1
- package/server/.next/static/chunks/3wi43ltm1e5iy.js +0 -1
- package/server/.next/static/chunks/3yljsdgzvrkdf.js +0 -1
- package/server/.next/static/chunks/42z3imsp11da1.js +0 -1
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_buildManifest.js +0 -0
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_clientMiddlewareManifest.js +0 -0
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_ssgManifest.js +0 -0
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let
|
|
1
|
+
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let r=e=>`${e} hari`,a=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,n={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},i={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,r)=>`${t}: nggak ada ping selama ${r.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,r)=>`${t}: ${n[r]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,r)=>`${t}: ${r} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,r)=>`${t} pindah ke ${r}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,r,a)=>`${t} udah bukan domain ${r}; production sekarang di ${a}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,r)=>`Monitor ngecek ${t}, domain ${r}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,r)=>`p95 ${t} ms selama 10 menit terakhir (batas ${r} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} pakai ${r} MB dari ${a} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,r,a)=>`${t} udah pakai ${r} dari ${a} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} udah baca ${r} dari ${a} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${r(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,r,a)=>`${t}: ${r.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${a}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,r)=>`${t}: ${r.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,r)=>`Credential ${t} ${r} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,r,n)=>a(n,`Credential ${t} ${r}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,r,a)=>`${t} paket rentan (${r.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>i[e])}): ${a.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,r)=>`${t} pakai Next.js ${r} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,r,a,n,s,o)=>`Next.js ${t} punya ${r} kerentanan yang diketahui (${i[a]}), ${n?`udah di-fix di ${n}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[r,a]of Object.hasOwn(s,e)?s[e]:[]){let e=r.exec(t);if(e)return a(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},c={en:{firing:"firing",resolved:"resolved",since:"since",open:"Open alerts",more:"more on the Alerts page",causedBy:"caused by",incident:"reports an incident",step:"Next step"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},u=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),p={critical:0,warning:1,info:2};function h(e,t){let r=e.filter(e=>"resolve"!==e.kind).length,a=e.length-r;return[r?`${r} ${c[t].firing}`:"",a?`${a} ${c[t].resolved}`:""].filter(Boolean).join(", ")}function f(e,t,r,a,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[a],l=a.length+n.length+40;for(let e=0;e<s.length;e++){let a=r(s[e]);if(l+a.length+1>t){o.push(i(s.length-e));break}o.push(a),l+=a.length+1}return o.push(n),o.join("\n").slice(0,t)}let g={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,r,a,n="en"){let i=`${a.replace(/\/+$/,"")}/alerts`,s=c[n],p=e=>`${l[n][e.kind]} \xb7 ${d[n][e.severity]} \xb7 `,m=e=>"id"===n?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let r=Object.hasOwn(g[t],e)?g[t][e]:void 0;return r?`${c[t].step}: ${r}`:null})(e.ruleKey,n),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
|
|
2
2
|
+${e} ${s.more}`;return{telegram:f(e,4096,e=>`
|
|
3
3
|
<b>${p(e)}${u(e.ruleKey)} \xb7 ${u(e.title)}</b>
|
|
4
|
-
${u(m(e))}${
|
|
5
|
-
<i>${u(
|
|
4
|
+
${u(m(e))}${y(e)?`
|
|
5
|
+
<i>${u(y(e))}</i>`:""}${k(e)?`
|
|
6
6
|
👉 ${u(k(e))}`:""}
|
|
7
|
-
${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${
|
|
8
|
-
<a href="${u(
|
|
7
|
+
${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
8
|
+
<a href="${u(i)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
|
|
9
9
|
**${p(e)}${e.ruleKey} \xb7 ${e.title.replace(/[*_`~|\[\]<>]/g,"")}**
|
|
10
|
-
${m(e).replace(/[*_`~|\[\]<>]/g,"")}${
|
|
11
|
-
_${
|
|
12
|
-
👉 ${k(e)}`:""}`,`**Watchbell**: ${
|
|
13
|
-
${n}`,y)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),i=e.i(600205),n=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:a.z.string().min(32),CRON_SECRET:a.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:a.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:a.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,n.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let a=e.lastTraffic??e.trackedSince;return t.getTime()-a.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),g=e.i(547499),f=e.i(628448),h=e.i(342833);async function m(e){let a=await (0,r.f)().select({data:i.snapshots.data}).from(i.resources).innerJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.resources.accountId,e),(0,t.u)(i.resources.kind,"supabase_project"))),n=new Map;for(let{data:e}of a){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&n.set(t.orgSlug,t.freeOrg)}return n}let k=e=>`${e} day${1===e?"":"s"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(e,a,n){try{let s=await (0,r.f)().select({k:i.keepActive,r:i.resources,s:i.snapshots,a:i.accounts}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).leftJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.keepActive.keep,!0),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt),(0,t.u)(i.accounts.status,"ok"))).limit(100),o=(0,g.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:i,s:l,a:d}]of s.entries()){let c=a-Date.now()-500;if(c<250)return void n.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(r.lastKeepAliveAt&&e.getTime()-r.lastKeepAliveAt.getTime()<72e6))try{await w(i,l,d,e,o,c,n)}catch(e){console.warn("keep-active failed:",$(e)),n.push(`keep-active/${i.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),n.push(`keep-active: ${$(e)}`)}}async function w(e,a,o,l,c,g,m){let $=(0,u.k)(u.B,a?.data),y=$.lastTrafficAt?new Date($.lastTrafficAt):$.trafficAt?new Date(new Date($.trafficAt).getTime()-6048e5):null;if(!d({status:$.status??"",keep:!0,lastTraffic:y,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-(y??e.firstSeenAt).getTime())/864e5),v=(0,n.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!v)return void m.push(`keep-active/${o.label}: credential can't be read`);let b=await (0,h.i)(v,e.externalId,{timeoutMs:Math.min(5e3,g)});if(b.ok)await (0,r.f)().update(i.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(i.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===b.kind?"This token can't run the read-only query (Database read).":(0,f.S)(b.error)}]),m.push(`keep-active/${e.name}: ${b.error}`)}}async function v(e){let[n]=await (0,r.f)().select({at:i.events.at}).from(i.events).where((0,t.b)((0,t.u)(i.events.reason,"Action"),(0,t.u)(i.events.resourceId,e),(0,t.u)(i.events.type,"action"),(0,t.y)(i.events.kind,["ok","err"]),(0,t.E)(i.events.actorUserId),(0,t.D)(i.events.message,`${l}%`))).orderBy((0,a.A)(i.events.at)).limit(1);return n?.at??null}async function b(){return(await (0,r.f)().select({id:i.keepActive.resourceId}).from(i.keepActive).where((0,t.u)(i.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,a,l=1/0){let d=a.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,r.f)().select({k:i.keepActive,id:i.resources.id,name:i.resources.name,ref:i.resources.externalId,accountId:i.resources.accountId,label:i.accounts.label,lastTestAt:i.accounts.lastTestAt,ciphertext:i.accounts.credentialCiphertext,iv:i.accounts.credentialIv}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.keepActive.autoRestore,!0),(0,t.y)(i.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.M)(i.resources.goneAt)));if(!k.length)return;let y=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,b=new Map;for(let l of k)try{let d=a.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),b.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let $=!1===w.get(l.accountId).get(k),A=$?1/0:b.get(l.accountId),I=y.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),T=I?.write==="denied"&&new Date(I.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:T},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await v(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let C=u();if(C<250)return;await (0,r.f)().update(i.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(i.keepActive.resourceId,l.id));let E=(0,n.V)({ciphertext:l.ciphertext,iv:l.iv},(0,g.f)().OPS_ENCRYPTION_KEY);if(!E)continue;let j=await (0,h.G)(E,l.ref,{timeoutMs:Math.min(5e3,C)});j.ok?($||b.set(l.accountId,b.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===j.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===j.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(j.error)}]))}catch(e){console.warn("auto-restore failed:",$(e))}}async function I(e,a,n=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",a);if(l)return{ok:!1,error:l};let d=await (0,o.p)(a,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,r.f)().select({last:i.keepActive.lastKeepAliveAt}).from(i.keepActive).where((0,t.u)(i.keepActive.resourceId,a)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return n({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,h.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(i.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:i.keepActive.resourceId,set:{lastKeepAliveAt:s}}),n(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:a}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:a}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,b,"v",0,I,"V",0,y,"G",0,function(e,t,a){return!1===t.get(a)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(518899),i=e.i(924924),n=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),g=e.i(224382),f=e.i(600273),h=e.i(968068),m=e.i(695811),k=e.i(633974),$=e.i(76012),y=e.i(298397),w=e.i(218331),v=e.i(146394);let b="digest.lastSentDay",A="digest.state";async function I(e){let[a]=await (0,i.f)().select().from(n.channels).where((0,t.u)(n.channels.kind,e)).limit(1);if(!a)return null;try{return{row:a,config:JSON.parse((0,o.K)({ciphertext:a.configCiphertext,iv:a.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function S(){let e=(0,h.f)(),[t,a]=await Promise.all([I("telegram"),I("discord")]),r=new Set;return e.telegramToken&&t?.row.enabled&&t.config?.chatId&&r.add("telegram"),a?.row.enabled&&a.config?.url&&r.add("discord"),{send:(r,i)=>"telegram"===r?(0,$.I)(e.telegramToken,t.config.chatId,i):(0,g.f)(a.config.url,i),configured:r}}async function T(){let e=(0,h.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function x(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let D=()=>(0,d.f)().catch(()=>y.a);async function C(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),g=await (0,i.f)().select({a:n.alerts,channels:n.alertRules.channels}).from(n.alerts).innerJoin(n.alertRules,(0,t.u)(n.alertRules.key,n.alerts.ruleKey)).where((0,t.b)((0,t.E)(n.alerts.pending),r.B`(${n.alerts.pending} = 'resolve') = (${n.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,a.M)(n.alerts.pendingSince)).limit(50);if(!g.length)return{sent:0,dropped:0};let f=new Set((await (0,i.f)().update(n.alerts).set({claimedAt:e}).where((d=g.map(e=>e.a.id),(0,t.b)((0,t.y)(n.alerts.id,d),(0,t.E)(n.alerts.pending),(0,t.F)((0,t.M)(n.alerts.claimedAt),(0,t.S)(n.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:n.alerts.id})).map(e=>e.id)),h=g.filter(e=>f.has(e.a.id));if(!h.length)return{sent:0,dropped:0};let{send:k,configured:$}=l.sender??await S(),w=new Set(h.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[v,b]=await Promise.all([D(),(0,m.B)()]),A=new Set;for(let a of["telegram","discord"]){if(!$.has(a))continue;let r=h.filter(e=>e.channels.includes(a)&&!w.has(e.a.id));if(!r.length)continue;let o=r.map(({a:e})=>{let t=(0,y.o)(e,v);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,b[a]),d=await k(a,(0,y.G)("telegram"===a?l.telegram:l.discord));await (0,i.f)().update(n.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(n.channels.kind,a)),d.ok&&r.forEach(({a:e})=>A.add(e.id))}let I=0,T=0,x=[];for(let{a,channels:r}of h){let s=r.some(e=>$.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;A.has(a.id)?(I++,await (0,i.f)().update(n.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(n.alerts.id,a.id))):w.has(a.id)||!s||o?(T++,await (0,i.f)().update(n.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(n.alerts.id,a.id))):x.push(a.id)}return x.length&&await (0,i.f)().update(n.alerts).set({claimedAt:null}).where((0,t.y)(n.alerts.id,x)),{sent:I,dropped:T}}async function E(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=r.B`case ${n.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,g,f,h]=await Promise.all([(0,i.f)().select({ruleKey:n.alerts.ruleKey,severity:n.alerts.severity,title:n.alerts.title,message:n.alerts.message,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt}).from(n.alerts).where((0,t.b)((0,t.M)(n.alerts.resolvedAt),(0,c.s)(o))).orderBy(l,(0,a.A)(n.alerts.startedAt)).limit(50),(0,i.f)().select({n:r.B`count(*)::int`}).from(n.alerts).where((0,t.B)(n.alerts.startedAt,s)),(0,i.f)().select({ruleKey:n.alerts.ruleKey,title:n.alerts.title,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt,resolvedAt:n.alerts.resolvedAt}).from(n.alerts).where((0,t.b)((0,t.E)(n.alerts.resolvedAt),(0,t.B)(n.alerts.resolvedAt,s))).orderBy((0,a.A)(n.alerts.resolvedAt)).limit(20),(0,i.f)().select({id:n.resources.id,name:n.resources.name}).from(n.resources).where((0,t.b)((0,t.u)(n.resources.kind,"app"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt))).orderBy(n.resources.name).limit(v.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,$]=m.length?await Promise.all([(0,i.f)().select({id:n.monitors.resourceId,total:r.B`count(*)::int`,bad:r.B`(count(*) filter (where not ${n.checks.ok}))::int`}).from(n.checks).innerJoin(n.monitors,(0,t.u)(n.monitors.id,n.checks.monitorId)).where((0,t.b)((0,t.y)(n.monitors.resourceId,m),(0,t.B)(n.checks.at,s),(0,t.u)(n.checks.inMaintenance,!1))).groupBy(n.monitors.resourceId),(0,i.f)().select({id:n.storedLogs.resourceId,n:r.B`count(*)::int`}).from(n.storedLogs).where((0,t.b)((0,t.y)(n.storedLogs.resourceId,m),(0,t.B)(n.storedLogs.at,s))).groupBy(n.storedLogs.resourceId)]):[[],[]],w=new Map(k.map(e=>[e.id,e])),b=new Map($.map(e=>[e.id,e.n])),A=await D();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,y.o)({...t,resourceId:e,causedBy:null},A);return{...t,title:a.title,message:a.message}}),resolved:g.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,y.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},A).title,took:function(e,t){let a=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(a<60)return`${a} min`;let r=Math.floor(a/60);return r<24?`${r} h ${a%60} min`:`${Math.floor(r/24)} d ${r%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=w.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:b.get(e.id)??0}}),providers:h.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function j(e,a,r){await (0,i.f)().update(n.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(n.channels.kind,e))}async function N(e){let[t,a]=await Promise.all([E(e),(0,m.H)("email")]);return(0,f.J)({...t,siteUrl:(0,p.f)().SITE_URL},a)}async function M(e,a={}){let r=await (0,i.f)().select().from(n.settings).where((0,t.y)(n.settings.key,[b,A])),s=r.find(e=>e.key===b)?.value,o="string"==typeof s?s:null;if(!(0,f.A)(e,o))return;let d=(0,h.f)(),c=await I("email_digest");if(!d.resendKey||!d.digestFrom||!c?.row.enabled||!c.config?.to)return;let{resendKey:u,digestFrom:p}=d,g=c.config.to,m=(0,w.x)(e),$=await (0,f.K)(e,{lastSentDay:o,state:r.find(e=>e.key===A)?.value??null,build:a.build??(()=>N(e)),send:a.send??(e=>(0,k.f)(u,{from:p,to:g,...e,idempotencyKey:`digest-${m}`}))});$.acted&&($.result&&await j("email_digest",$.result,e),$.state?await (0,i.f)().insert(n.settings).values({key:A,value:$.state}).onConflictDoUpdate({target:n.settings.key,set:{value:$.state,updatedAt:e}}):await (0,i.f)().delete(n.settings).where((0,t.u)(n.settings.key,A)),$.sentDay&&await (0,i.f)().insert(n.settings).values({key:b,value:$.sentDay}).onConflictDoUpdate({target:n.settings.key,set:{value:$.sentDay,updatedAt:e}}),$.event&&await (0,l.f)([{type:"system",kind:"warn",message:$.event.message,detail:$.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,C,"G",0,x,"P",0,j,"J",0,M,"Q",0,T],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let g="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:i.resources,a:i.accounts}).from(i.resources).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.resources.id,e),(0,t.u)(i.resources.kind,a),(0,t.M)(i.resources.goneAt))).limit(1);if(!s)return null;let d=(0,n.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function h(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return c("member",r.retryAfter);let i=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return i.allowed?null:c("target",i.retryAfter)}async function m(e,t,a){let n={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(i.settings).values({key:`${g}${e}`,value:n}).onConflictDoUpdate({target:i.settings.key,set:{value:n,updatedAt:new Date}})}async function k(e){let a=new Map,n=e.filter(l.f);if(0===n.length)return a;for(let e of(await (0,r.f)().select().from(i.settings).where((0,t.y)(i.settings.key,n.map(e=>`${g}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(g.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function $(e,t,r,i={}){if(!("audit"in e))return{ok:!1,error:e.message};let n="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=n?n.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:n?"err":"ok",message:`${i.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!n||"scope"===n.kind)try{await m(r,n?"denied":"ok")}catch{console.warn("access write failed")}return!1!==i.refresh&&(0,a.refresh)(),n?{ok:!1,error:n.error}:{ok:!0,message:o}}e.s(["W",0,$,"p",0,f,"y",0,m,"q",0,h,"f",0,k],472832)},224382,600273,e=>{var t=e.i(425498),a=e.i(77193);let r=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function i(e,n,s={}){let o;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(r.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:n.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,i],224382);var n=e.i(220642),s=e.i(765359),o=e.i(218331),l=e.i(195191),d=e.i(298397);function c(e,t){return(0,o.M)(e,t)&&(0,o.z)(e).hour>=7}let u={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},p={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},g=[5,15,30,60];async function f(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!c(e,t.lastSentDay))return a;let r=(0,o.x)(e),i=t.state&&t.state.day===r?t.state:null;if(i?.stopped)return{...a,state:i};if(i&&i.attempts>0){let t=(g[i.attempts-1]??g[g.length-1])*6e4;if(i.lastAttemptAt&&e.getTime()-new Date(i.lastAttemptAt).getTime()<t)return{...a,state:i}}i??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let n=await t.send({subject:i.subject,html:i.html,text:i.text});if(n.ok)return{acted:!0,state:null,sentDay:r,event:null,result:n};let s=i.attempts+1,l="config"===n.kind||s>=5,d="config"===n.kind?`${n.error}. Fix it and the next digest goes out tomorrow.`:`${n.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:n,state:{...i,attempts:s,lastAttemptAt:e.toISOString(),stopped:l,lastError:n.error},event:l?{message:"Daily digest not sent",detail:d}:null}}e.s(["J",0,function(e,t="en"){let a=u[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,i=((e,t)=>{let{day:a,month:r}=(0,o.e)(e);return`${a} ${"id"===t?p[r]??r:r}`})(e.now,t),c=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,g=`Watchbell \xb7 ${i} \xb7 ${c}`,f=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),h=e.firing.map(e=>`${n.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,s.f)(e.ruleKey,e.message):e.message}`),m=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),k=f.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,l.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),$=e.providers.map(e=>`${e.label}: ${e.text}`),y=[`Watchbell \xb7 ${i}`,`${c} ${a.last24}`,"",a.stillHead,...h.length?h.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...m.length?m.map(e=>`- ${e}`):[a.noResolved],...k.length?["",a.appsHead,...k.map(e=>`- ${e}`)]:[],...$.length?["",a.providersHead,...$.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),w=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,n.H)(e)}</h3>`,v=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,n.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,n.H)(t)}</p>`,b=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,n.H)(i)}</h2>`,`<p style="margin:0;color:#596170">${(0,n.H)(`${c} ${a.last24}`)}</p>`,w(a.stillHead),v(h,a.noFiring),w(a.resolvedHead),v(m,a.noResolved),...k.length?[w(a.appsHead),v(k,"")]:[],...$.length?[w(a.providersHead),v($,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,n.H)(r).replace(/"/g,""")}" style="color:#1f45c9">${(0,n.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,d.G)(g),html:(0,d.G)(b),text:(0,d.G)(y)}},"A",0,c,"K",0,f],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",a=e.RESEND_API_KEY?.trim()??"",r=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:a.startsWith("re_")?a:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(r)?r:null}}])},695811,e=>{var t=e.i(960049);function a(e){let t=e&&"object"==typeof e?e:null,a=t?t.lang:e,r=e=>{var r;return"string"==typeof(r=t&&e in t?t[e]:a)&&"id"===r.trim().toLowerCase()?"id":"en"};return{telegram:r("telegram"),discord:r("discord"),email:r("email")}}async function r(){try{return a(await (0,t.l)())}catch{return a(null)}}async function i(e="telegram"){return(await r())[e]}e.s(["H",0,i,"B",0,r,"t",0,function(e,t,a){return e[t][a]}])},633974,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,i,n={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (n.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":i.idempotencyKey},body:JSON.stringify({from:i.from,to:[i.to],subject:i.subject,html:i.html,text:i.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,r])},76012,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,i,n,s,o=5e3){let l;if((0,a.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${i}`,{...n,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function i(e,t,a,n={}){let s=await r(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:a,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...n.replyMarkup?{reply_markup:n.replyMarkup}:{}})},n.fetch??fetch);return s.ok?{ok:!0}:429===s.code?{ok:!1,kind:"transient",retryAfterS:s.retryAfter??30,error:`Telegram asked us to wait ${s.retryAfter??30} s.`}:null===s.code||s.code>=500?{ok:!1,kind:"transient",error:null===s.code?s.description:`Telegram returned an error (${s.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${s.description}`}}e.s(["I",0,i,"z",0,r])}]})();
|
|
10
|
+
${m(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
|
|
11
|
+
_${y(e)}_`:""}${k(e)?`
|
|
12
|
+
👉 ${k(e)}`:""}`,`**Watchbell**: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
13
|
+
${i}`,$)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),r=e.i(105954),a=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:r.z.string().min(32),CRON_SECRET:r.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:r.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:r.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let r=e.lastTraffic??e.trackedSince;return t.getTime()-r.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let r=await (0,a.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of r){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,r,i){try{let s=await (0,a.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:a,r:n,s:l,a:d}]of s.entries()){let c=r-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(a.lastKeepAliveAt&&e.getTime()-a.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active/${n.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active: ${y(e)}`)}}async function w(e,r,o,l,c,h,m){let y=(0,u.k)(u.B,r?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,a.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,a.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,r.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,a.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,r,l=1/0){let d=r.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,a.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=r.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:v.get(l.accountId),T=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let E=u();if(E<250)return;await (0,a.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let j=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!j)continue;let C=await (0,g.G)(j,l.ref,{timeoutMs:Math.min(5e3,E)});C.ok?(y||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===C.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===C.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(C.error)}]))}catch(e){console.warn("auto-restore failed:",y(e))}}async function T(e,r,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",r);if(l)return{ok:!1,error:l};let d=await (0,o.p)(r,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,a.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,r)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,a.f)().insert(n.keepActive).values({resourceId:r,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:r}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:r}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,$,"G",0,function(e,t,r){return!1===t.get(r)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(518899),n=e.i(924924),i=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),h=e.i(224382),f=e.i(201162),g=e.i(973990),m=e.i(600273),k=e.i(968068),y=e.i(695811),$=e.i(633974),w=e.i(76012),b=e.i(298397),v=e.i(218331),A=e.i(146394);let T="digest.lastSentDay",S="digest.state";async function I(e){let[r]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.channels.kind,e)).limit(1);if(!r)return null;try{return{row:r,config:JSON.parse((0,o.K)({ciphertext:r.configCiphertext,iv:r.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function x(){let e=(0,k.f)(),[t,r,a,n]=await Promise.all([I("telegram"),I("discord"),I("webhook"),I("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),r?.row.enabled&&r.config?.url&&i.add("discord"),a?.row.enabled&&a.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,p.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,w.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,f.E)(a.config,(0,f.J)(o,l??[],new Date,s)):"smtp"===i?(0,g.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",`${o}
|
|
14
|
+
|
|
15
|
+
${s}`):(0,h.f)(r.config.url,o),configured:i}}async function D(){let e=(0,k.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function E(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",C=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function N(e,t,r){let s=e.filter(e=>C.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:r.getTime()}])),l=r.getTime()-6048e5,d=a.B`case when jsonb_typeof(${i.settings.value}) = 'object' then ${i.settings.value} else '{}'::jsonb end`;await (0,n.f)().insert(i.settings).values({key:j,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:a.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
|
|
16
|
+
where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:r}})}async function _(e){if(!e||!C.test(e))return null;try{let[r]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,j)).limit(1),a=r?.value&&"object"==typeof r.value?r.value[e]:null;return"number"==typeof a?.m&&Number.isSafeInteger(a.m)&&a.m>0?a.m:null}catch{return null}}let M=()=>(0,d.f)().catch(()=>b.a);async function R(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),h=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels}).from(i.alerts).innerJoin(i.alertRules,(0,t.u)(i.alertRules.key,i.alerts.ruleKey)).where((0,t.b)((0,t.E)(i.alerts.pending),a.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,r.M)(i.alerts.pendingSince)).limit(50);if(!h.length)return{sent:0,dropped:0};let f=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((d=h.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,d),(0,t.E)(i.alerts.pending),(0,t.F)((0,t.M)(i.alerts.claimedAt),(0,t.S)(i.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:i.alerts.id})).map(e=>e.id)),g=h.filter(e=>f.has(e.a.id));if(!g.length)return{sent:0,dropped:0};let{send:m,configured:k}=l.sender??await x(),$=new Set(g.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[w,v]=await Promise.all([M(),(0,y.B)()]),A=new Set;for(let r of["telegram","discord","webhook","smtp"]){if(!k.has(r))continue;let a=g.filter(e=>e.channels.includes(r)&&!$.has(e.a.id));if(!a.length)continue;let o=a.map(({a:e})=>{let t="telegram"===r?e:(0,b.o)(e,w);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,"webhook"===r?"en":"smtp"===r?v.email:v[r]),d=await m(r,(0,b.G)("telegram"===r?l.telegram:l.discord),"webhook"===r?o.map(e=>({...e,title:(0,b.G)(e.title),message:(0,b.G)(e.message)})):void 0);await (0,n.f)().update(i.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(i.channels.kind,r)),d.ok&&a.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===r&&d.messageId&&await N(a.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let T=0,S=0,I=[];for(let{a:r,channels:a}of g){let s=a.some(e=>k.has(e)),o=null!==r.pendingSince&&e.getTime()-r.pendingSince.getTime()>18e5;A.has(r.id)?(T++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===r.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,r.id))):$.has(r.id)||!s||o?(S++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,r.id))):I.push(r.id)}return I.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,I)),{sent:T,dropped:S}}async function P(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=a.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,h,f,g]=await Promise.all([(0,n.f)().select({ruleKey:i.alerts.ruleKey,severity:i.alerts.severity,title:i.alerts.title,message:i.alerts.message,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt}).from(i.alerts).where((0,t.b)((0,t.M)(i.alerts.resolvedAt),(0,c.s)(o))).orderBy(l,(0,r.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:a.B`count(*)::int`}).from(i.alerts).where((0,t.B)(i.alerts.startedAt,s)),(0,n.f)().select({ruleKey:i.alerts.ruleKey,title:i.alerts.title,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt,resolvedAt:i.alerts.resolvedAt}).from(i.alerts).where((0,t.b)((0,t.E)(i.alerts.resolvedAt),(0,t.B)(i.alerts.resolvedAt,s))).orderBy((0,r.A)(i.alerts.resolvedAt)).limit(20),(0,n.f)().select({id:i.resources.id,name:i.resources.name}).from(i.resources).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt))).orderBy(i.resources.name).limit(A.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,y]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:a.B`count(*)::int`,bad:a.B`(count(*) filter (where not ${i.checks.ok}))::int`}).from(i.checks).innerJoin(i.monitors,(0,t.u)(i.monitors.id,i.checks.monitorId)).where((0,t.b)((0,t.y)(i.monitors.resourceId,m),(0,t.B)(i.checks.at,s),(0,t.u)(i.checks.inMaintenance,!1))).groupBy(i.monitors.resourceId),(0,n.f)().select({id:i.storedLogs.resourceId,n:a.B`count(*)::int`}).from(i.storedLogs).where((0,t.b)((0,t.y)(i.storedLogs.resourceId,m),(0,t.B)(i.storedLogs.at,s))).groupBy(i.storedLogs.resourceId)]):[[],[]],$=new Map(k.map(e=>[e.id,e])),w=new Map(y.map(e=>[e.id,e.n])),v=await M();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let r=(0,b.o)({...t,resourceId:e,causedBy:null},v);return{...t,title:r.title,message:r.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,b.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},v).title,took:function(e,t){let r=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(r<60)return`${r} min`;let a=Math.floor(r/60);return a<24?`${a} h ${r%60} min`:`${Math.floor(a/24)} d ${a%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=$.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function H(e,r,a){await (0,n.f)().update(i.channels).set(r.ok?{lastSentAt:a,lastError:null}:{lastError:r.error}).where((0,t.u)(i.channels.kind,e))}async function U(e){let[t,r]=await Promise.all([P(e),(0,y.H)("email")]);return(0,m.J)({...t,siteUrl:(0,p.f)().SITE_URL},r)}async function O(e,r={}){let a=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[T,S])),s=a.find(e=>e.key===T)?.value,o="string"==typeof s?s:null;if(!(0,m.A)(e,o))return;let d=(0,k.f)(),c=await I("email_digest");if(!d.resendKey||!d.digestFrom||!c?.row.enabled||!c.config?.to)return;let{resendKey:u,digestFrom:p}=d,h=c.config.to,f=(0,v.x)(e),g=await (0,m.K)(e,{lastSentDay:o,state:a.find(e=>e.key===S)?.value??null,build:r.build??(()=>U(e)),send:r.send??(e=>(0,$.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await H("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:S,value:g.state}).onConflictDoUpdate({target:i.settings.key,set:{value:g.state,updatedAt:e}}):await (0,n.f)().delete(i.settings).where((0,t.u)(i.settings.key,S)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:T,value:g.sentDay}).onConflictDoUpdate({target:i.settings.key,set:{value:g.sentDay,updatedAt:e}}),g.event&&await (0,l.f)([{type:"system",kind:"warn",message:g.event.message,detail:g.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,R,"G",0,E,"P",0,H,"J",0,O,"Q",0,D,"M",0,_],483100)},472832,628448,e=>{var t=e.i(875225),r=e.i(665044),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,r){if(!(0,l.f)(e))return null;let[s]=await (0,a.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,r),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,r){let a=await (0,p.f)(d.t.providerAction,e);if(!a.allowed)return c("member",a.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${r}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,r){let i={write:t,at:new Date().toISOString(),...r?{scope:r}:{}};await (0,a.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let r=new Map,i=e.filter(l.f);if(0===i.length)return r;for(let e of(await (0,a.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&r.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return r}async function y(e,t,a,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(a,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,r.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),r=e.i(77193);let a=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(a.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,a,n={}){let s,l;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let r=(0,o._)(t);return"scheme"===r?"Use an https:// address without a user name or password in it.":"blocked"===r?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(a),h=String(Math.floor(Date.parse(a.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,r,a){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:r.toISOString(),text:e.slice(0,4e3),link:a,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456);let f=[465,587,2525],g=h.z.email();class m{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let r=this.waiters.shift();r?r(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
|
|
17
|
+
`)}}class k extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,a,n,l={}){let d,c,h;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys((c={},h=e.host.trim().toLowerCase(),/^[a-z0-9.-]{3,253}$/.test(h)&&h.includes(".")?(0,o.N)(h)&&(c.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):c.host="Enter the server name, for example smtp.office365.com.",!f.includes(e.port)&&(c.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(c.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(c.pass="Enter the password or app password."),!g.safeParse(e.from.trim()).success&&(c.from="Enter the address the mail comes from."),!g.safeParse(e.to.trim()).success&&(c.to="Enter the address that gets the alerts."),c)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let $=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))($);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The mail server resolves to a private address; Watchbell won't connect there."};d=e[0]}catch{return{ok:!1,kind:"transient",error:"The mail server's name didn't resolve."}}let w=465===e.port,b=null,v=new Promise((e,t)=>setTimeout(()=>t(new k("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),A=async()=>{var t,r,s,o;let c,h;try{b=await (l.connect??((e,t,r,a)=>new Promise((n,i)=>{let s=a?p.default.connect({host:e,port:t,servername:r}):u.default.connect({host:e,port:t});s.once(a?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,$,w)}catch{throw new k(`Couldn't connect to ${$}:${e.port}.`,"transient")}let f=new m(b),g=async(e,t,r="config")=>{let a=await f.next();if(!e.includes(a.code))throw new k(`The mail server refused ${t} (${a.code}).`,a.code>=400&&a.code<500?"transient":r);return a};await g([220],"the connection","transient"),f.send("EHLO watchbell");let y=await g([250],"EHLO");if(!w){if(!/^250[- ]STARTTLS\b/im.test(y.text))throw new k("The mail server doesn't offer STARTTLS on this port, so the password would go in clear. Use port 465 or a server with STARTTLS.","config");f.send("STARTTLS"),await g([220],"STARTTLS"),b=await (l.upgrade??((e,t)=>new Promise((r,a)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>r(n)),n.once("error",a)})))(b,$),f.attach(b),f.send("EHLO watchbell"),y=await g([250],"EHLO after STARTTLS")}f.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await g([235],"the user name or password"),f.send(`MAIL FROM:<${e.from.trim()}>`),await g([250],"the sender address"),f.send(`RCPT TO:<${e.to.trim()}>`),await g([250,251],"the recipient address"),f.send("DATA"),await g([354],"the message"),b.write(`${(t=e,r=a,s=n,o=new Date,h=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: <${t.to.trim()}>`,`Subject: ${(c=r.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(c)?c:`=?UTF-8?B?${Buffer.from(c,"utf8").toString("base64")}?=`)}`,`Date: ${o.toUTCString()}`,`Message-ID: <${(0,i.randomUUID)()}@watchbell>`,"MIME-Version: 1.0","Content-Type: text/plain; charset=utf-8","Content-Transfer-Encoding: base64","",h].join("\r\n"))}\r
|
|
18
|
+
.\r
|
|
19
|
+
`),await g([250],"the message"),f.send("QUIT"),await Promise.race([f.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([A(),v]),{ok:!0}}catch(e){return e instanceof k?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{b?.destroy()}}e.s(["f",0,y],973990);var $=e.i(220642),w=e.i(765359),b=e.i(218331),v=e.i(195191),A=e.i(298397);function T(e,t){return(0,b.M)(e,t)&&(0,b.z)(e).hour>=7}let S={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},I={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},x=[5,15,30,60];async function D(e,t){let r={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!T(e,t.lastSentDay))return r;let a=(0,b.x)(e),n=t.state&&t.state.day===a?t.state:null;if(n?.stopped)return{...r,state:n};if(n&&n.attempts>0){let t=(x[n.attempts-1]??x[x.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...r,state:n}}n??={day:a,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let i=await t.send({subject:n.subject,html:n.html,text:n.text});if(i.ok)return{acted:!0,state:null,sentDay:a,event:null,result:i};let s=n.attempts+1,o="config"===i.kind||s>=5,l="config"===i.kind?`${i.error}. Fix it and the next digest goes out tomorrow.`:`${i.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:i,state:{...n,attempts:s,lastAttemptAt:e.toISOString(),stopped:o,lastError:i.error},event:o?{message:"Daily digest not sent",detail:l}:null}}e.s(["J",0,function(e,t="en"){let r=S[t],a=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:r,month:a}=(0,b.e)(e);return`${r} ${"id"===t?I[a]??a:a}`})(e.now,t),i=`${e.firing.length} ${r.firing}, ${e.opened} ${r.opened}, ${e.resolved.length} ${r.resolved}`,s=`Watchbell \xb7 ${n} \xb7 ${i}`,o=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),l=e.firing.map(e=>`${$.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,w.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${r.after} ${r.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?r.noChecks:`${(0,v.C)(e.uptime)} ${r.up}`}, ${r.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${r.last24}`,"",r.stillHead,...l.length?l.map(e=>`- ${e}`):[r.noFiring],"",r.resolvedHead,...d.length?d.map(e=>`- ${e}`):[r.noResolved],...c.length?["",r.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",r.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${r.open}: ${a}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,$.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,$.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,$.H)(t)}</p>`,g=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,$.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,$.H)(`${i} ${r.last24}`)}</p>`,h(r.stillHead),f(l,r.noFiring),h(r.resolvedHead),f(d,r.noResolved),...c.length?[h(r.appsHead),f(c,"")]:[],...u.length?[h(r.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,$.H)(a).replace(/"/g,""")}" style="color:#2f4372">${(0,$.H)(r.open)}</a></p>`,"</div>"].join("");return{subject:(0,A.G)(s),html:(0,A.G)(g),text:(0,A.G)(p)}},"A",0,T,"K",0,D],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",r=e.RESEND_API_KEY?.trim()??"",a=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:r.startsWith("re_")?r:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(a)?a:null}}])},695811,e=>{var t=e.i(960049);function r(e){let t=e&&"object"==typeof e?e:null,r=t?t.lang:e,a=e=>{var a;return"string"==typeof(a=t&&e in t?t[e]:r)&&"id"===a.trim().toLowerCase()?"id":"en"};return{telegram:a("telegram"),discord:a("discord"),email:a("email")}}async function a(){try{return r(await (0,t.l)())}catch{return r(null)}}async function n(e="telegram"){return(await a())[e]}e.s(["H",0,n,"B",0,a,"t",0,function(e,t,r){return e[t][r]}])},633974,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i={}){let s;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (i.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":n.idempotencyKey},body:JSON.stringify({from:n.from,to:[n.to],subject:n.subject,html:n.html,text:n.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,a])},76012,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i,s,o=5e3){let l;if((0,r.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${n}`,{...i,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function n(e,t,r,i={}){let s="number"==typeof i.replyTo&&Number.isSafeInteger(i.replyTo)&&i.replyTo>0?{reply_parameters:{message_id:i.replyTo,allow_sending_without_reply:!0}}:{},o=await a(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:r,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...i.replyMarkup?{reply_markup:i.replyMarkup}:{},...s})},i.fetch??fetch);if(o.ok){let e=o.result?.message_id;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?{ok:!0,messageId:e}:{ok:!0}}return 429===o.code?{ok:!1,kind:"transient",retryAfterS:o.retryAfter??30,error:`Telegram asked us to wait ${o.retryAfter??30} s.`}:null===o.code||o.code>=500?{ok:!1,kind:"transient",error:null===o.code?o.description:`Telegram returned an error (${o.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${o.description}`}}e.s(["I",0,n,"z",0,a])}]})();
|
|
14
20
|
|
|
15
21
|
//# sourceMappingURL=src_lib_1en6omqx66g9d._.js.map
|
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let
|
|
1
|
+
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let r=e=>`${e} hari`,a=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,n={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},i={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,r)=>`${t}: nggak ada ping selama ${r.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,r)=>`${t}: ${n[r]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,r)=>`${t}: ${r} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,r)=>`${t} pindah ke ${r}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,r,a)=>`${t} udah bukan domain ${r}; production sekarang di ${a}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,r)=>`Monitor ngecek ${t}, domain ${r}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,r)=>`p95 ${t} ms selama 10 menit terakhir (batas ${r} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} pakai ${r} MB dari ${a} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,r,a)=>`${t} udah pakai ${r} dari ${a} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} udah baca ${r} dari ${a} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${r(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,r,a)=>`${t}: ${r.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${a}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,r)=>`${t}: ${r.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,r)=>`Credential ${t} ${r} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,r,n)=>a(n,`Credential ${t} ${r}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,r,a)=>`${t} paket rentan (${r.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>i[e])}): ${a.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,r)=>`${t} pakai Next.js ${r} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,r,a,n,s,o)=>`Next.js ${t} punya ${r} kerentanan yang diketahui (${i[a]}), ${n?`udah di-fix di ${n}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[r,a]of Object.hasOwn(s,e)?s[e]:[]){let e=r.exec(t);if(e)return a(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},c={en:{firing:"firing",resolved:"resolved",since:"since",open:"Open alerts",more:"more on the Alerts page",causedBy:"caused by",incident:"reports an incident",step:"Next step"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},u=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),p={critical:0,warning:1,info:2};function h(e,t){let r=e.filter(e=>"resolve"!==e.kind).length,a=e.length-r;return[r?`${r} ${c[t].firing}`:"",a?`${a} ${c[t].resolved}`:""].filter(Boolean).join(", ")}function f(e,t,r,a,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[a],l=a.length+n.length+40;for(let e=0;e<s.length;e++){let a=r(s[e]);if(l+a.length+1>t){o.push(i(s.length-e));break}o.push(a),l+=a.length+1}return o.push(n),o.join("\n").slice(0,t)}let g={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,r,a,n="en"){let i=`${a.replace(/\/+$/,"")}/alerts`,s=c[n],p=e=>`${l[n][e.kind]} \xb7 ${d[n][e.severity]} \xb7 `,m=e=>"id"===n?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let r=Object.hasOwn(g[t],e)?g[t][e]:void 0;return r?`${c[t].step}: ${r}`:null})(e.ruleKey,n),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
|
|
2
2
|
+${e} ${s.more}`;return{telegram:f(e,4096,e=>`
|
|
3
3
|
<b>${p(e)}${u(e.ruleKey)} \xb7 ${u(e.title)}</b>
|
|
4
|
-
${u(m(e))}${
|
|
5
|
-
<i>${u(
|
|
4
|
+
${u(m(e))}${y(e)?`
|
|
5
|
+
<i>${u(y(e))}</i>`:""}${k(e)?`
|
|
6
6
|
👉 ${u(k(e))}`:""}
|
|
7
|
-
${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${
|
|
8
|
-
<a href="${u(
|
|
7
|
+
${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
8
|
+
<a href="${u(i)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
|
|
9
9
|
**${p(e)}${e.ruleKey} \xb7 ${e.title.replace(/[*_`~|\[\]<>]/g,"")}**
|
|
10
|
-
${m(e).replace(/[*_`~|\[\]<>]/g,"")}${
|
|
11
|
-
_${
|
|
12
|
-
👉 ${k(e)}`:""}`,`**Watchbell**: ${
|
|
13
|
-
${n}`,y)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),i=e.i(600205),n=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:a.z.string().min(32),CRON_SECRET:a.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:a.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:a.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,n.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let a=e.lastTraffic??e.trackedSince;return t.getTime()-a.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),g=e.i(547499),f=e.i(628448),h=e.i(342833);async function m(e){let a=await (0,r.f)().select({data:i.snapshots.data}).from(i.resources).innerJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.resources.accountId,e),(0,t.u)(i.resources.kind,"supabase_project"))),n=new Map;for(let{data:e}of a){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&n.set(t.orgSlug,t.freeOrg)}return n}let k=e=>`${e} day${1===e?"":"s"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(e,a,n){try{let s=await (0,r.f)().select({k:i.keepActive,r:i.resources,s:i.snapshots,a:i.accounts}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).leftJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.keepActive.keep,!0),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt),(0,t.u)(i.accounts.status,"ok"))).limit(100),o=(0,g.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:i,s:l,a:d}]of s.entries()){let c=a-Date.now()-500;if(c<250)return void n.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(r.lastKeepAliveAt&&e.getTime()-r.lastKeepAliveAt.getTime()<72e6))try{await w(i,l,d,e,o,c,n)}catch(e){console.warn("keep-active failed:",$(e)),n.push(`keep-active/${i.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),n.push(`keep-active: ${$(e)}`)}}async function w(e,a,o,l,c,g,m){let $=(0,u.k)(u.B,a?.data),y=$.lastTrafficAt?new Date($.lastTrafficAt):$.trafficAt?new Date(new Date($.trafficAt).getTime()-6048e5):null;if(!d({status:$.status??"",keep:!0,lastTraffic:y,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-(y??e.firstSeenAt).getTime())/864e5),v=(0,n.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!v)return void m.push(`keep-active/${o.label}: credential can't be read`);let b=await (0,h.i)(v,e.externalId,{timeoutMs:Math.min(5e3,g)});if(b.ok)await (0,r.f)().update(i.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(i.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===b.kind?"This token can't run the read-only query (Database read).":(0,f.S)(b.error)}]),m.push(`keep-active/${e.name}: ${b.error}`)}}async function v(e){let[n]=await (0,r.f)().select({at:i.events.at}).from(i.events).where((0,t.b)((0,t.u)(i.events.reason,"Action"),(0,t.u)(i.events.resourceId,e),(0,t.u)(i.events.type,"action"),(0,t.y)(i.events.kind,["ok","err"]),(0,t.E)(i.events.actorUserId),(0,t.D)(i.events.message,`${l}%`))).orderBy((0,a.A)(i.events.at)).limit(1);return n?.at??null}async function b(){return(await (0,r.f)().select({id:i.keepActive.resourceId}).from(i.keepActive).where((0,t.u)(i.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,a,l=1/0){let d=a.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,r.f)().select({k:i.keepActive,id:i.resources.id,name:i.resources.name,ref:i.resources.externalId,accountId:i.resources.accountId,label:i.accounts.label,lastTestAt:i.accounts.lastTestAt,ciphertext:i.accounts.credentialCiphertext,iv:i.accounts.credentialIv}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.keepActive.autoRestore,!0),(0,t.y)(i.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.M)(i.resources.goneAt)));if(!k.length)return;let y=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,b=new Map;for(let l of k)try{let d=a.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),b.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let $=!1===w.get(l.accountId).get(k),A=$?1/0:b.get(l.accountId),I=y.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),T=I?.write==="denied"&&new Date(I.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:T},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await v(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let C=u();if(C<250)return;await (0,r.f)().update(i.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(i.keepActive.resourceId,l.id));let E=(0,n.V)({ciphertext:l.ciphertext,iv:l.iv},(0,g.f)().OPS_ENCRYPTION_KEY);if(!E)continue;let j=await (0,h.G)(E,l.ref,{timeoutMs:Math.min(5e3,C)});j.ok?($||b.set(l.accountId,b.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===j.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===j.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(j.error)}]))}catch(e){console.warn("auto-restore failed:",$(e))}}async function I(e,a,n=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",a);if(l)return{ok:!1,error:l};let d=await (0,o.p)(a,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,r.f)().select({last:i.keepActive.lastKeepAliveAt}).from(i.keepActive).where((0,t.u)(i.keepActive.resourceId,a)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return n({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,h.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(i.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:i.keepActive.resourceId,set:{lastKeepAliveAt:s}}),n(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:a}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:a}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,b,"v",0,I,"V",0,y,"G",0,function(e,t,a){return!1===t.get(a)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(518899),i=e.i(924924),n=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),g=e.i(224382),f=e.i(600273),h=e.i(968068),m=e.i(695811),k=e.i(633974),$=e.i(76012),y=e.i(298397),w=e.i(218331),v=e.i(146394);let b="digest.lastSentDay",A="digest.state";async function I(e){let[a]=await (0,i.f)().select().from(n.channels).where((0,t.u)(n.channels.kind,e)).limit(1);if(!a)return null;try{return{row:a,config:JSON.parse((0,o.K)({ciphertext:a.configCiphertext,iv:a.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function S(){let e=(0,h.f)(),[t,a]=await Promise.all([I("telegram"),I("discord")]),r=new Set;return e.telegramToken&&t?.row.enabled&&t.config?.chatId&&r.add("telegram"),a?.row.enabled&&a.config?.url&&r.add("discord"),{send:(r,i)=>"telegram"===r?(0,$.I)(e.telegramToken,t.config.chatId,i):(0,g.f)(a.config.url,i),configured:r}}async function T(){let e=(0,h.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function x(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let D=()=>(0,d.f)().catch(()=>y.a);async function C(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),g=await (0,i.f)().select({a:n.alerts,channels:n.alertRules.channels}).from(n.alerts).innerJoin(n.alertRules,(0,t.u)(n.alertRules.key,n.alerts.ruleKey)).where((0,t.b)((0,t.E)(n.alerts.pending),r.B`(${n.alerts.pending} = 'resolve') = (${n.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,a.M)(n.alerts.pendingSince)).limit(50);if(!g.length)return{sent:0,dropped:0};let f=new Set((await (0,i.f)().update(n.alerts).set({claimedAt:e}).where((d=g.map(e=>e.a.id),(0,t.b)((0,t.y)(n.alerts.id,d),(0,t.E)(n.alerts.pending),(0,t.F)((0,t.M)(n.alerts.claimedAt),(0,t.S)(n.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:n.alerts.id})).map(e=>e.id)),h=g.filter(e=>f.has(e.a.id));if(!h.length)return{sent:0,dropped:0};let{send:k,configured:$}=l.sender??await S(),w=new Set(h.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[v,b]=await Promise.all([D(),(0,m.B)()]),A=new Set;for(let a of["telegram","discord"]){if(!$.has(a))continue;let r=h.filter(e=>e.channels.includes(a)&&!w.has(e.a.id));if(!r.length)continue;let o=r.map(({a:e})=>{let t=(0,y.o)(e,v);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,b[a]),d=await k(a,(0,y.G)("telegram"===a?l.telegram:l.discord));await (0,i.f)().update(n.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(n.channels.kind,a)),d.ok&&r.forEach(({a:e})=>A.add(e.id))}let I=0,T=0,x=[];for(let{a,channels:r}of h){let s=r.some(e=>$.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;A.has(a.id)?(I++,await (0,i.f)().update(n.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(n.alerts.id,a.id))):w.has(a.id)||!s||o?(T++,await (0,i.f)().update(n.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(n.alerts.id,a.id))):x.push(a.id)}return x.length&&await (0,i.f)().update(n.alerts).set({claimedAt:null}).where((0,t.y)(n.alerts.id,x)),{sent:I,dropped:T}}async function E(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=r.B`case ${n.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,g,f,h]=await Promise.all([(0,i.f)().select({ruleKey:n.alerts.ruleKey,severity:n.alerts.severity,title:n.alerts.title,message:n.alerts.message,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt}).from(n.alerts).where((0,t.b)((0,t.M)(n.alerts.resolvedAt),(0,c.s)(o))).orderBy(l,(0,a.A)(n.alerts.startedAt)).limit(50),(0,i.f)().select({n:r.B`count(*)::int`}).from(n.alerts).where((0,t.B)(n.alerts.startedAt,s)),(0,i.f)().select({ruleKey:n.alerts.ruleKey,title:n.alerts.title,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt,resolvedAt:n.alerts.resolvedAt}).from(n.alerts).where((0,t.b)((0,t.E)(n.alerts.resolvedAt),(0,t.B)(n.alerts.resolvedAt,s))).orderBy((0,a.A)(n.alerts.resolvedAt)).limit(20),(0,i.f)().select({id:n.resources.id,name:n.resources.name}).from(n.resources).where((0,t.b)((0,t.u)(n.resources.kind,"app"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt))).orderBy(n.resources.name).limit(v.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,$]=m.length?await Promise.all([(0,i.f)().select({id:n.monitors.resourceId,total:r.B`count(*)::int`,bad:r.B`(count(*) filter (where not ${n.checks.ok}))::int`}).from(n.checks).innerJoin(n.monitors,(0,t.u)(n.monitors.id,n.checks.monitorId)).where((0,t.b)((0,t.y)(n.monitors.resourceId,m),(0,t.B)(n.checks.at,s),(0,t.u)(n.checks.inMaintenance,!1))).groupBy(n.monitors.resourceId),(0,i.f)().select({id:n.storedLogs.resourceId,n:r.B`count(*)::int`}).from(n.storedLogs).where((0,t.b)((0,t.y)(n.storedLogs.resourceId,m),(0,t.B)(n.storedLogs.at,s))).groupBy(n.storedLogs.resourceId)]):[[],[]],w=new Map(k.map(e=>[e.id,e])),b=new Map($.map(e=>[e.id,e.n])),A=await D();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,y.o)({...t,resourceId:e,causedBy:null},A);return{...t,title:a.title,message:a.message}}),resolved:g.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,y.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},A).title,took:function(e,t){let a=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(a<60)return`${a} min`;let r=Math.floor(a/60);return r<24?`${r} h ${a%60} min`:`${Math.floor(r/24)} d ${r%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=w.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:b.get(e.id)??0}}),providers:h.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function j(e,a,r){await (0,i.f)().update(n.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(n.channels.kind,e))}async function N(e){let[t,a]=await Promise.all([E(e),(0,m.H)("email")]);return(0,f.J)({...t,siteUrl:(0,p.f)().SITE_URL},a)}async function M(e,a={}){let r=await (0,i.f)().select().from(n.settings).where((0,t.y)(n.settings.key,[b,A])),s=r.find(e=>e.key===b)?.value,o="string"==typeof s?s:null;if(!(0,f.A)(e,o))return;let d=(0,h.f)(),c=await I("email_digest");if(!d.resendKey||!d.digestFrom||!c?.row.enabled||!c.config?.to)return;let{resendKey:u,digestFrom:p}=d,g=c.config.to,m=(0,w.x)(e),$=await (0,f.K)(e,{lastSentDay:o,state:r.find(e=>e.key===A)?.value??null,build:a.build??(()=>N(e)),send:a.send??(e=>(0,k.f)(u,{from:p,to:g,...e,idempotencyKey:`digest-${m}`}))});$.acted&&($.result&&await j("email_digest",$.result,e),$.state?await (0,i.f)().insert(n.settings).values({key:A,value:$.state}).onConflictDoUpdate({target:n.settings.key,set:{value:$.state,updatedAt:e}}):await (0,i.f)().delete(n.settings).where((0,t.u)(n.settings.key,A)),$.sentDay&&await (0,i.f)().insert(n.settings).values({key:b,value:$.sentDay}).onConflictDoUpdate({target:n.settings.key,set:{value:$.sentDay,updatedAt:e}}),$.event&&await (0,l.f)([{type:"system",kind:"warn",message:$.event.message,detail:$.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,C,"G",0,x,"P",0,j,"J",0,M,"Q",0,T],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let g="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:i.resources,a:i.accounts}).from(i.resources).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.resources.id,e),(0,t.u)(i.resources.kind,a),(0,t.M)(i.resources.goneAt))).limit(1);if(!s)return null;let d=(0,n.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function h(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return c("member",r.retryAfter);let i=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return i.allowed?null:c("target",i.retryAfter)}async function m(e,t,a){let n={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(i.settings).values({key:`${g}${e}`,value:n}).onConflictDoUpdate({target:i.settings.key,set:{value:n,updatedAt:new Date}})}async function k(e){let a=new Map,n=e.filter(l.f);if(0===n.length)return a;for(let e of(await (0,r.f)().select().from(i.settings).where((0,t.y)(i.settings.key,n.map(e=>`${g}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(g.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function $(e,t,r,i={}){if(!("audit"in e))return{ok:!1,error:e.message};let n="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=n?n.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:n?"err":"ok",message:`${i.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!n||"scope"===n.kind)try{await m(r,n?"denied":"ok")}catch{console.warn("access write failed")}return!1!==i.refresh&&(0,a.refresh)(),n?{ok:!1,error:n.error}:{ok:!0,message:o}}e.s(["W",0,$,"p",0,f,"y",0,m,"q",0,h,"f",0,k],472832)},224382,600273,e=>{var t=e.i(425498),a=e.i(77193);let r=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function i(e,n,s={}){let o;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(r.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:n.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,i],224382);var n=e.i(220642),s=e.i(765359),o=e.i(218331),l=e.i(195191),d=e.i(298397);function c(e,t){return(0,o.M)(e,t)&&(0,o.z)(e).hour>=7}let u={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},p={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},g=[5,15,30,60];async function f(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!c(e,t.lastSentDay))return a;let r=(0,o.x)(e),i=t.state&&t.state.day===r?t.state:null;if(i?.stopped)return{...a,state:i};if(i&&i.attempts>0){let t=(g[i.attempts-1]??g[g.length-1])*6e4;if(i.lastAttemptAt&&e.getTime()-new Date(i.lastAttemptAt).getTime()<t)return{...a,state:i}}i??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let n=await t.send({subject:i.subject,html:i.html,text:i.text});if(n.ok)return{acted:!0,state:null,sentDay:r,event:null,result:n};let s=i.attempts+1,l="config"===n.kind||s>=5,d="config"===n.kind?`${n.error}. Fix it and the next digest goes out tomorrow.`:`${n.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:n,state:{...i,attempts:s,lastAttemptAt:e.toISOString(),stopped:l,lastError:n.error},event:l?{message:"Daily digest not sent",detail:d}:null}}e.s(["J",0,function(e,t="en"){let a=u[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,i=((e,t)=>{let{day:a,month:r}=(0,o.e)(e);return`${a} ${"id"===t?p[r]??r:r}`})(e.now,t),c=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,g=`Watchbell \xb7 ${i} \xb7 ${c}`,f=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),h=e.firing.map(e=>`${n.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,s.f)(e.ruleKey,e.message):e.message}`),m=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),k=f.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,l.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),$=e.providers.map(e=>`${e.label}: ${e.text}`),y=[`Watchbell \xb7 ${i}`,`${c} ${a.last24}`,"",a.stillHead,...h.length?h.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...m.length?m.map(e=>`- ${e}`):[a.noResolved],...k.length?["",a.appsHead,...k.map(e=>`- ${e}`)]:[],...$.length?["",a.providersHead,...$.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),w=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,n.H)(e)}</h3>`,v=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,n.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,n.H)(t)}</p>`,b=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,n.H)(i)}</h2>`,`<p style="margin:0;color:#596170">${(0,n.H)(`${c} ${a.last24}`)}</p>`,w(a.stillHead),v(h,a.noFiring),w(a.resolvedHead),v(m,a.noResolved),...k.length?[w(a.appsHead),v(k,"")]:[],...$.length?[w(a.providersHead),v($,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,n.H)(r).replace(/"/g,""")}" style="color:#1f45c9">${(0,n.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,d.G)(g),html:(0,d.G)(b),text:(0,d.G)(y)}},"A",0,c,"K",0,f],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",a=e.RESEND_API_KEY?.trim()??"",r=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:a.startsWith("re_")?a:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(r)?r:null}}])},695811,e=>{var t=e.i(960049);function a(e){let t=e&&"object"==typeof e?e:null,a=t?t.lang:e,r=e=>{var r;return"string"==typeof(r=t&&e in t?t[e]:a)&&"id"===r.trim().toLowerCase()?"id":"en"};return{telegram:r("telegram"),discord:r("discord"),email:r("email")}}async function r(){try{return a(await (0,t.l)())}catch{return a(null)}}async function i(e="telegram"){return(await r())[e]}e.s(["H",0,i,"B",0,r,"t",0,function(e,t,a){return e[t][a]}])},633974,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,i,n={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (n.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":i.idempotencyKey},body:JSON.stringify({from:i.from,to:[i.to],subject:i.subject,html:i.html,text:i.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,r])},76012,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,i,n,s,o=5e3){let l;if((0,a.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${i}`,{...n,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function i(e,t,a,n={}){let s=await r(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:a,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...n.replyMarkup?{reply_markup:n.replyMarkup}:{}})},n.fetch??fetch);return s.ok?{ok:!0}:429===s.code?{ok:!1,kind:"transient",retryAfterS:s.retryAfter??30,error:`Telegram asked us to wait ${s.retryAfter??30} s.`}:null===s.code||s.code>=500?{ok:!1,kind:"transient",error:null===s.code?s.description:`Telegram returned an error (${s.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${s.description}`}}e.s(["I",0,i,"z",0,r])}]})();
|
|
10
|
+
${m(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
|
|
11
|
+
_${y(e)}_`:""}${k(e)?`
|
|
12
|
+
👉 ${k(e)}`:""}`,`**Watchbell**: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
13
|
+
${i}`,$)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),r=e.i(105954),a=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:r.z.string().min(32),CRON_SECRET:r.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:r.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:r.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let r=e.lastTraffic??e.trackedSince;return t.getTime()-r.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let r=await (0,a.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of r){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,r,i){try{let s=await (0,a.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:a,r:n,s:l,a:d}]of s.entries()){let c=r-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(a.lastKeepAliveAt&&e.getTime()-a.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active/${n.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active: ${y(e)}`)}}async function w(e,r,o,l,c,h,m){let y=(0,u.k)(u.B,r?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,a.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,a.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,r.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,a.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,r,l=1/0){let d=r.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,a.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=r.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:v.get(l.accountId),T=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let E=u();if(E<250)return;await (0,a.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let j=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!j)continue;let C=await (0,g.G)(j,l.ref,{timeoutMs:Math.min(5e3,E)});C.ok?(y||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===C.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===C.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(C.error)}]))}catch(e){console.warn("auto-restore failed:",y(e))}}async function T(e,r,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",r);if(l)return{ok:!1,error:l};let d=await (0,o.p)(r,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,a.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,r)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,a.f)().insert(n.keepActive).values({resourceId:r,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:r}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:r}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,$,"G",0,function(e,t,r){return!1===t.get(r)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(518899),n=e.i(924924),i=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),h=e.i(224382),f=e.i(201162),g=e.i(973990),m=e.i(600273),k=e.i(968068),y=e.i(695811),$=e.i(633974),w=e.i(76012),b=e.i(298397),v=e.i(218331),A=e.i(146394);let T="digest.lastSentDay",S="digest.state";async function I(e){let[r]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.channels.kind,e)).limit(1);if(!r)return null;try{return{row:r,config:JSON.parse((0,o.K)({ciphertext:r.configCiphertext,iv:r.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function x(){let e=(0,k.f)(),[t,r,a,n]=await Promise.all([I("telegram"),I("discord"),I("webhook"),I("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),r?.row.enabled&&r.config?.url&&i.add("discord"),a?.row.enabled&&a.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,p.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,w.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,f.E)(a.config,(0,f.J)(o,l??[],new Date,s)):"smtp"===i?(0,g.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",`${o}
|
|
14
|
+
|
|
15
|
+
${s}`):(0,h.f)(r.config.url,o),configured:i}}async function D(){let e=(0,k.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function E(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",C=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function N(e,t,r){let s=e.filter(e=>C.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:r.getTime()}])),l=r.getTime()-6048e5,d=a.B`case when jsonb_typeof(${i.settings.value}) = 'object' then ${i.settings.value} else '{}'::jsonb end`;await (0,n.f)().insert(i.settings).values({key:j,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:a.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
|
|
16
|
+
where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:r}})}async function _(e){if(!e||!C.test(e))return null;try{let[r]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,j)).limit(1),a=r?.value&&"object"==typeof r.value?r.value[e]:null;return"number"==typeof a?.m&&Number.isSafeInteger(a.m)&&a.m>0?a.m:null}catch{return null}}let M=()=>(0,d.f)().catch(()=>b.a);async function R(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),h=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels}).from(i.alerts).innerJoin(i.alertRules,(0,t.u)(i.alertRules.key,i.alerts.ruleKey)).where((0,t.b)((0,t.E)(i.alerts.pending),a.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,r.M)(i.alerts.pendingSince)).limit(50);if(!h.length)return{sent:0,dropped:0};let f=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((d=h.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,d),(0,t.E)(i.alerts.pending),(0,t.F)((0,t.M)(i.alerts.claimedAt),(0,t.S)(i.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:i.alerts.id})).map(e=>e.id)),g=h.filter(e=>f.has(e.a.id));if(!g.length)return{sent:0,dropped:0};let{send:m,configured:k}=l.sender??await x(),$=new Set(g.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[w,v]=await Promise.all([M(),(0,y.B)()]),A=new Set;for(let r of["telegram","discord","webhook","smtp"]){if(!k.has(r))continue;let a=g.filter(e=>e.channels.includes(r)&&!$.has(e.a.id));if(!a.length)continue;let o=a.map(({a:e})=>{let t="telegram"===r?e:(0,b.o)(e,w);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,"webhook"===r?"en":"smtp"===r?v.email:v[r]),d=await m(r,(0,b.G)("telegram"===r?l.telegram:l.discord),"webhook"===r?o.map(e=>({...e,title:(0,b.G)(e.title),message:(0,b.G)(e.message)})):void 0);await (0,n.f)().update(i.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(i.channels.kind,r)),d.ok&&a.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===r&&d.messageId&&await N(a.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let T=0,S=0,I=[];for(let{a:r,channels:a}of g){let s=a.some(e=>k.has(e)),o=null!==r.pendingSince&&e.getTime()-r.pendingSince.getTime()>18e5;A.has(r.id)?(T++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===r.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,r.id))):$.has(r.id)||!s||o?(S++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,r.id))):I.push(r.id)}return I.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,I)),{sent:T,dropped:S}}async function P(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=a.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,h,f,g]=await Promise.all([(0,n.f)().select({ruleKey:i.alerts.ruleKey,severity:i.alerts.severity,title:i.alerts.title,message:i.alerts.message,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt}).from(i.alerts).where((0,t.b)((0,t.M)(i.alerts.resolvedAt),(0,c.s)(o))).orderBy(l,(0,r.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:a.B`count(*)::int`}).from(i.alerts).where((0,t.B)(i.alerts.startedAt,s)),(0,n.f)().select({ruleKey:i.alerts.ruleKey,title:i.alerts.title,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt,resolvedAt:i.alerts.resolvedAt}).from(i.alerts).where((0,t.b)((0,t.E)(i.alerts.resolvedAt),(0,t.B)(i.alerts.resolvedAt,s))).orderBy((0,r.A)(i.alerts.resolvedAt)).limit(20),(0,n.f)().select({id:i.resources.id,name:i.resources.name}).from(i.resources).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt))).orderBy(i.resources.name).limit(A.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,y]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:a.B`count(*)::int`,bad:a.B`(count(*) filter (where not ${i.checks.ok}))::int`}).from(i.checks).innerJoin(i.monitors,(0,t.u)(i.monitors.id,i.checks.monitorId)).where((0,t.b)((0,t.y)(i.monitors.resourceId,m),(0,t.B)(i.checks.at,s),(0,t.u)(i.checks.inMaintenance,!1))).groupBy(i.monitors.resourceId),(0,n.f)().select({id:i.storedLogs.resourceId,n:a.B`count(*)::int`}).from(i.storedLogs).where((0,t.b)((0,t.y)(i.storedLogs.resourceId,m),(0,t.B)(i.storedLogs.at,s))).groupBy(i.storedLogs.resourceId)]):[[],[]],$=new Map(k.map(e=>[e.id,e])),w=new Map(y.map(e=>[e.id,e.n])),v=await M();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let r=(0,b.o)({...t,resourceId:e,causedBy:null},v);return{...t,title:r.title,message:r.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,b.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},v).title,took:function(e,t){let r=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(r<60)return`${r} min`;let a=Math.floor(r/60);return a<24?`${a} h ${r%60} min`:`${Math.floor(a/24)} d ${a%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=$.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function H(e,r,a){await (0,n.f)().update(i.channels).set(r.ok?{lastSentAt:a,lastError:null}:{lastError:r.error}).where((0,t.u)(i.channels.kind,e))}async function U(e){let[t,r]=await Promise.all([P(e),(0,y.H)("email")]);return(0,m.J)({...t,siteUrl:(0,p.f)().SITE_URL},r)}async function O(e,r={}){let a=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[T,S])),s=a.find(e=>e.key===T)?.value,o="string"==typeof s?s:null;if(!(0,m.A)(e,o))return;let d=(0,k.f)(),c=await I("email_digest");if(!d.resendKey||!d.digestFrom||!c?.row.enabled||!c.config?.to)return;let{resendKey:u,digestFrom:p}=d,h=c.config.to,f=(0,v.x)(e),g=await (0,m.K)(e,{lastSentDay:o,state:a.find(e=>e.key===S)?.value??null,build:r.build??(()=>U(e)),send:r.send??(e=>(0,$.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await H("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:S,value:g.state}).onConflictDoUpdate({target:i.settings.key,set:{value:g.state,updatedAt:e}}):await (0,n.f)().delete(i.settings).where((0,t.u)(i.settings.key,S)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:T,value:g.sentDay}).onConflictDoUpdate({target:i.settings.key,set:{value:g.sentDay,updatedAt:e}}),g.event&&await (0,l.f)([{type:"system",kind:"warn",message:g.event.message,detail:g.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,R,"G",0,E,"P",0,H,"J",0,O,"Q",0,D,"M",0,_],483100)},472832,628448,e=>{var t=e.i(875225),r=e.i(665044),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,r){if(!(0,l.f)(e))return null;let[s]=await (0,a.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,r),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,r){let a=await (0,p.f)(d.t.providerAction,e);if(!a.allowed)return c("member",a.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${r}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,r){let i={write:t,at:new Date().toISOString(),...r?{scope:r}:{}};await (0,a.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let r=new Map,i=e.filter(l.f);if(0===i.length)return r;for(let e of(await (0,a.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&r.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return r}async function y(e,t,a,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(a,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,r.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),r=e.i(77193);let a=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(a.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,a,n={}){let s,l;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let r=(0,o._)(t);return"scheme"===r?"Use an https:// address without a user name or password in it.":"blocked"===r?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(a),h=String(Math.floor(Date.parse(a.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,r,a){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:r.toISOString(),text:e.slice(0,4e3),link:a,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456);let f=[465,587,2525],g=h.z.email();class m{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let r=this.waiters.shift();r?r(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
|
|
17
|
+
`)}}class k extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,a,n,l={}){let d,c,h;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys((c={},h=e.host.trim().toLowerCase(),/^[a-z0-9.-]{3,253}$/.test(h)&&h.includes(".")?(0,o.N)(h)&&(c.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):c.host="Enter the server name, for example smtp.office365.com.",!f.includes(e.port)&&(c.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(c.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(c.pass="Enter the password or app password."),!g.safeParse(e.from.trim()).success&&(c.from="Enter the address the mail comes from."),!g.safeParse(e.to.trim()).success&&(c.to="Enter the address that gets the alerts."),c)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let $=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))($);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The mail server resolves to a private address; Watchbell won't connect there."};d=e[0]}catch{return{ok:!1,kind:"transient",error:"The mail server's name didn't resolve."}}let w=465===e.port,b=null,v=new Promise((e,t)=>setTimeout(()=>t(new k("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),A=async()=>{var t,r,s,o;let c,h;try{b=await (l.connect??((e,t,r,a)=>new Promise((n,i)=>{let s=a?p.default.connect({host:e,port:t,servername:r}):u.default.connect({host:e,port:t});s.once(a?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,$,w)}catch{throw new k(`Couldn't connect to ${$}:${e.port}.`,"transient")}let f=new m(b),g=async(e,t,r="config")=>{let a=await f.next();if(!e.includes(a.code))throw new k(`The mail server refused ${t} (${a.code}).`,a.code>=400&&a.code<500?"transient":r);return a};await g([220],"the connection","transient"),f.send("EHLO watchbell");let y=await g([250],"EHLO");if(!w){if(!/^250[- ]STARTTLS\b/im.test(y.text))throw new k("The mail server doesn't offer STARTTLS on this port, so the password would go in clear. Use port 465 or a server with STARTTLS.","config");f.send("STARTTLS"),await g([220],"STARTTLS"),b=await (l.upgrade??((e,t)=>new Promise((r,a)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>r(n)),n.once("error",a)})))(b,$),f.attach(b),f.send("EHLO watchbell"),y=await g([250],"EHLO after STARTTLS")}f.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await g([235],"the user name or password"),f.send(`MAIL FROM:<${e.from.trim()}>`),await g([250],"the sender address"),f.send(`RCPT TO:<${e.to.trim()}>`),await g([250,251],"the recipient address"),f.send("DATA"),await g([354],"the message"),b.write(`${(t=e,r=a,s=n,o=new Date,h=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: <${t.to.trim()}>`,`Subject: ${(c=r.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(c)?c:`=?UTF-8?B?${Buffer.from(c,"utf8").toString("base64")}?=`)}`,`Date: ${o.toUTCString()}`,`Message-ID: <${(0,i.randomUUID)()}@watchbell>`,"MIME-Version: 1.0","Content-Type: text/plain; charset=utf-8","Content-Transfer-Encoding: base64","",h].join("\r\n"))}\r
|
|
18
|
+
.\r
|
|
19
|
+
`),await g([250],"the message"),f.send("QUIT"),await Promise.race([f.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([A(),v]),{ok:!0}}catch(e){return e instanceof k?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{b?.destroy()}}e.s(["f",0,y],973990);var $=e.i(220642),w=e.i(765359),b=e.i(218331),v=e.i(195191),A=e.i(298397);function T(e,t){return(0,b.M)(e,t)&&(0,b.z)(e).hour>=7}let S={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},I={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},x=[5,15,30,60];async function D(e,t){let r={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!T(e,t.lastSentDay))return r;let a=(0,b.x)(e),n=t.state&&t.state.day===a?t.state:null;if(n?.stopped)return{...r,state:n};if(n&&n.attempts>0){let t=(x[n.attempts-1]??x[x.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...r,state:n}}n??={day:a,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let i=await t.send({subject:n.subject,html:n.html,text:n.text});if(i.ok)return{acted:!0,state:null,sentDay:a,event:null,result:i};let s=n.attempts+1,o="config"===i.kind||s>=5,l="config"===i.kind?`${i.error}. Fix it and the next digest goes out tomorrow.`:`${i.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:i,state:{...n,attempts:s,lastAttemptAt:e.toISOString(),stopped:o,lastError:i.error},event:o?{message:"Daily digest not sent",detail:l}:null}}e.s(["J",0,function(e,t="en"){let r=S[t],a=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:r,month:a}=(0,b.e)(e);return`${r} ${"id"===t?I[a]??a:a}`})(e.now,t),i=`${e.firing.length} ${r.firing}, ${e.opened} ${r.opened}, ${e.resolved.length} ${r.resolved}`,s=`Watchbell \xb7 ${n} \xb7 ${i}`,o=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),l=e.firing.map(e=>`${$.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,w.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${r.after} ${r.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?r.noChecks:`${(0,v.C)(e.uptime)} ${r.up}`}, ${r.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${r.last24}`,"",r.stillHead,...l.length?l.map(e=>`- ${e}`):[r.noFiring],"",r.resolvedHead,...d.length?d.map(e=>`- ${e}`):[r.noResolved],...c.length?["",r.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",r.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${r.open}: ${a}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,$.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,$.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,$.H)(t)}</p>`,g=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,$.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,$.H)(`${i} ${r.last24}`)}</p>`,h(r.stillHead),f(l,r.noFiring),h(r.resolvedHead),f(d,r.noResolved),...c.length?[h(r.appsHead),f(c,"")]:[],...u.length?[h(r.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,$.H)(a).replace(/"/g,""")}" style="color:#2f4372">${(0,$.H)(r.open)}</a></p>`,"</div>"].join("");return{subject:(0,A.G)(s),html:(0,A.G)(g),text:(0,A.G)(p)}},"A",0,T,"K",0,D],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",r=e.RESEND_API_KEY?.trim()??"",a=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:r.startsWith("re_")?r:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(a)?a:null}}])},695811,e=>{var t=e.i(960049);function r(e){let t=e&&"object"==typeof e?e:null,r=t?t.lang:e,a=e=>{var a;return"string"==typeof(a=t&&e in t?t[e]:r)&&"id"===a.trim().toLowerCase()?"id":"en"};return{telegram:a("telegram"),discord:a("discord"),email:a("email")}}async function a(){try{return r(await (0,t.l)())}catch{return r(null)}}async function n(e="telegram"){return(await a())[e]}e.s(["H",0,n,"B",0,a,"t",0,function(e,t,r){return e[t][r]}])},633974,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i={}){let s;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (i.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":n.idempotencyKey},body:JSON.stringify({from:n.from,to:[n.to],subject:n.subject,html:n.html,text:n.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,a])},76012,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i,s,o=5e3){let l;if((0,r.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${n}`,{...i,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function n(e,t,r,i={}){let s="number"==typeof i.replyTo&&Number.isSafeInteger(i.replyTo)&&i.replyTo>0?{reply_parameters:{message_id:i.replyTo,allow_sending_without_reply:!0}}:{},o=await a(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:r,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...i.replyMarkup?{reply_markup:i.replyMarkup}:{},...s})},i.fetch??fetch);if(o.ok){let e=o.result?.message_id;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?{ok:!0,messageId:e}:{ok:!0}}return 429===o.code?{ok:!1,kind:"transient",retryAfterS:o.retryAfter??30,error:`Telegram asked us to wait ${o.retryAfter??30} s.`}:null===o.code||o.code>=500?{ok:!1,kind:"transient",error:null===o.code?o.description:`Telegram returned an error (${o.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${o.description}`}}e.s(["I",0,n,"z",0,a])}]})();
|
|
14
20
|
|
|
15
21
|
//# sourceMappingURL=src_lib_1qo6t00wwitz6._.js.map
|