watchbell 1.3.1 → 1.6.0
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/package.json +1 -1
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/app-path-routes-manifest.json +3 -0
- package/server/.next/build-manifest.json +36 -3
- package/server/.next/prerender-manifest.json +3 -3
- package/server/.next/routes-manifest.json +18 -0
- package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +13 -13
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js +76 -68
- 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/server-reference-manifest.json +14 -14
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js +76 -68
- 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/server-reference-manifest.json +21 -21
- package/server/.next/server/app/(console)/(private)/ai/models/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/(private)/ai/page.js +76 -68
- 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/server-reference-manifest.json +14 -14
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js +76 -68
- 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/server-reference-manifest.json +17 -17
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js +76 -68
- 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/server-reference-manifest.json +27 -27
- package/server/.next/server/app/(console)/alerts/page.js +76 -68
- 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/server-reference-manifest.json +92 -62
- package/server/.next/server/app/(console)/apps/[id]/page.js +78 -70
- 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/server-reference-manifest.json +14 -14
- package/server/.next/server/app/(console)/apps/page.js +78 -70
- 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/server-reference-manifest.json +14 -14
- package/server/.next/server/app/(console)/backups/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/catalog/page.js +76 -68
- 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/server-reference-manifest.json +22 -22
- package/server/.next/server/app/(console)/connections/page.js +76 -68
- 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)/containers/page/app-paths-manifest.json +3 -0
- package/server/.next/server/app/(console)/containers/page/build-manifest.json +22 -0
- package/server/.next/server/app/(console)/containers/page/next-font-manifest.json +11 -0
- package/server/.next/server/app/(console)/containers/page/react-loadable-manifest.json +1 -0
- package/server/.next/server/app/(console)/containers/page/server-reference-manifest.json +145 -0
- package/server/.next/server/app/(console)/containers/page.js +121 -0
- package/server/.next/server/app/(console)/containers/page.js.nft.json +1 -0
- package/server/.next/server/app/(console)/containers/page_client-reference-manifest.js +3 -0
- package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/d1/page.js +76 -68
- 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)/deploy/page/app-paths-manifest.json +3 -0
- package/server/.next/server/app/(console)/deploy/page/build-manifest.json +22 -0
- package/server/.next/server/app/(console)/deploy/page/next-font-manifest.json +11 -0
- package/server/.next/server/app/(console)/deploy/page/react-loadable-manifest.json +1 -0
- package/server/.next/server/app/(console)/deploy/page/server-reference-manifest.json +115 -0
- package/server/.next/server/app/(console)/deploy/page.js +122 -0
- package/server/.next/server/app/(console)/deploy/page.js.nft.json +1 -0
- package/server/.next/server/app/(console)/deploy/page_client-reference-manifest.js +3 -0
- package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +19 -19
- package/server/.next/server/app/(console)/deployments/page.js +76 -68
- 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/server-reference-manifest.json +18 -18
- package/server/.next/server/app/(console)/dns/page.js +76 -68
- 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/server-reference-manifest.json +13 -13
- package/server/.next/server/app/(console)/domains/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/events/page.js +76 -68
- 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/server-reference-manifest.json +18 -18
- package/server/.next/server/app/(console)/firebase/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/logs/page.js +76 -68
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/manage/sections/page.js +76 -68
- 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/server-reference-manifest.json +22 -22
- package/server/.next/server/app/(console)/neon/page.js +76 -68
- 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)/os/page/app-paths-manifest.json +3 -0
- package/server/.next/server/app/(console)/os/page/build-manifest.json +22 -0
- package/server/.next/server/app/(console)/os/page/next-font-manifest.json +11 -0
- package/server/.next/server/app/(console)/os/page/react-loadable-manifest.json +1 -0
- package/server/.next/server/app/(console)/os/page/server-reference-manifest.json +125 -0
- package/server/.next/server/app/(console)/os/page.js +120 -0
- package/server/.next/server/app/(console)/os/page.js.nft.json +1 -0
- package/server/.next/server/app/(console)/os/page_client-reference-manifest.js +3 -0
- package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +19 -19
- package/server/.next/server/app/(console)/overview/page.js +77 -69
- 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/server-reference-manifest.json +12 -12
- package/server/.next/server/app/(console)/repos/[id]/page.js +80 -72
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/repos/page.js +81 -72
- 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/server-reference-manifest.json +21 -21
- package/server/.next/server/app/(console)/settings/page.js +76 -68
- 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/server-reference-manifest.json +18 -18
- package/server/.next/server/app/(console)/sql/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/status/page.js +76 -68
- 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/server-reference-manifest.json +30 -30
- package/server/.next/server/app/(console)/supabase/page.js +81 -72
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/topology/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/turso/page.js +76 -68
- 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/server-reference-manifest.json +11 -11
- package/server/.next/server/app/(console)/upstash/page.js +76 -68
- 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/server-reference-manifest.json +25 -25
- package/server/.next/server/app/(console)/uptime/page.js +76 -68
- 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/server-reference-manifest.json +16 -16
- package/server/.next/server/app/(console)/welcome/page.js +76 -68
- 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/server-reference-manifest.json +1 -1
- package/server/.next/server/app/_global-error/page.js +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 +3 -3
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- 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 +4 -4
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
- 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 +8 -8
- package/server/.next/server/app/api/collect/route.js +59 -52
- 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 +8 -8
- package/server/.next/server/app/api/daily/route.js +59 -52
- package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
- package/server/.next/server/app/api/health/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 +8 -8
- package/server/.next/server/app/api/telegram/webhook/route.js +59 -52
- package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/[[...rest]]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/advice/route.js +14 -14
- 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.nft.json +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 +10 -10
- 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 +25 -24
- 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 +13 -13
- 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 +13 -13
- package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/watchdog/route.js +11 -12
- 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.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/icon.svg/route.js.nft.json +1 -1
- package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
- 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/server-reference-manifest.json +2 -2
- package/server/.next/server/app/mfa/page.js +35 -30
- 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/server-reference-manifest.json +3 -3
- package/server/.next/server/app/mfa/setup/page.js +35 -30
- 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/server-reference-manifest.json +1 -1
- 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/server-reference-manifest.json +1 -1
- 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/server-reference-manifest.json +2 -2
- package/server/.next/server/app/setup/page.js +1 -1
- 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/server-reference-manifest.json +3 -3
- package/server/.next/server/app/signin/page.js +35 -30
- 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/app-paths-manifest.json +3 -0
- package/server/.next/server/chunks/{[externals]__1-y7b_mfadqi-._.js → [externals]__0n4j2emxdv20_._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1b3dgyi9diwhy._.js → [externals]__1hwo1oo04do39._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1dd9hhrnxhegy._.js → [externals]__1k12utcf9tvqg._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__040a3il587nja._.js → [root-of-the-server]__0016p4j5uh74t._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__08i6b8tzxads4._.js → [root-of-the-server]__00oxbw3nfl_kd._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__01dj-ln12bcmb._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__02v25dn1cwxz6._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0qme276hvajvy._.js → [root-of-the-server]__02y9yjf7lp37-._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1jjusd74y8gd5._.js → [root-of-the-server]__03589rgm1a3ks._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__04u9e45_g1jdi._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0-zrmrb4499ay._.js → [root-of-the-server]__04v42ls1mfjd2._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0sp5xoed3-994._.js → [root-of-the-server]__05b18nw2k-7-4._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__05qcc-0e8z1u8._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__01hgqxx2a0okv._.js → [root-of-the-server]__06kp2_zqpttyd._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__04ogdmf82__0g._.js → [root-of-the-server]__06l038ifglbqy._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1etpd6q60ypcc._.js → [root-of-the-server]__06nrq_1pbp3z-._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0i3h5covkd6_t._.js → [root-of-the-server]__06zmu7jjyw1qw._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__07eo--c90cju2._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0sq7jwlhv9n79._.js → [root-of-the-server]__081hh3_un4awi._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1vvg0ur3_7o0p._.js → [root-of-the-server]__090n04cg_br7j._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0lht1cr4aiudu._.js → [root-of-the-server]__09gla7jgbw2bs._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0cmp5mwchd8sn._.js → [root-of-the-server]__09l9icaspfmoh._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0m_nqt44ioex_._.js → [root-of-the-server]__09msxcjw3tlue._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1smidspfoqz48._.js → [root-of-the-server]__09yvavo991rdd._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0ox91q3i5u6fl._.js → [root-of-the-server]__0_vtp19_2frgj._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0a0st8-rftztn._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__04iumkvxok49x._.js → [root-of-the-server]__0a7moaa91ctod._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__17dr2z1o1hsvk._.js → [root-of-the-server]__0ao4b2jjkcvo1._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__04htuwoulmp21._.js → [root-of-the-server]__0at6fxe9efr-x._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0erdelc9_06nk._.js → [root-of-the-server]__0c_mpay_m5kbm._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__02h-ec_gusm_2._.js → [root-of-the-server]__0di45l_tnq1pm._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0ebkmgcs7v0c8._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__19k0l-ubyp1j_._.js → [root-of-the-server]__0ej4hdoyogtji._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1etg41llk7f09._.js → [root-of-the-server]__0eqrtvr3uqlqf._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1x7en4waq21dd._.js → [root-of-the-server]__0exruft64u1hg._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0ubalx5w0ds9m._.js → [root-of-the-server]__0fii83nfm0bsk._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1d1u-wejsfl84._.js → [root-of-the-server]__0g0rd65zoitrb._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0fmt9z8-xukob._.js → [root-of-the-server]__0g3v-ty9-xstp._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0g81f_2ecmg8a._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0gb4uz-gv3va0._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0glhrm7zmrvi2._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0gqye-fi-f3zk._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1jsf0jf_ljpsm._.js → [root-of-the-server]__0jma907r441wi._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1j527a18gh10b._.js → [root-of-the-server]__0jpktq0f88rvz._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0kk-m8_ul4f4k._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0lco43i5w25zg._.js → [root-of-the-server]__0myf9g_uv3bia._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0o6q27cnw6-77._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1xnqsy7nud--q._.js → [root-of-the-server]__0pi_camvun8ak._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0mrbo2p5fy4ji._.js → [root-of-the-server]__0puji-hw0xtk7._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1kr6f03r82mk6._.js → [root-of-the-server]__0qlf-so9k6401._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0iicsi0n7tfa5._.js → [root-of-the-server]__0r0zrp3s_n614._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0zwr7fll4dm9q._.js → [root-of-the-server]__0s3b61ttgb9if._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1_df6aphi-pfk._.js → [root-of-the-server]__0t0dd5t5rch1i._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__11a8fxlpahjy2._.js → [root-of-the-server]__0tshehtsx7229._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0ty2qkszfdr5t._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0ugx1i8km15fl._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0c2heh-0pjyob._.js → [root-of-the-server]__0uyc9w7f_r10u._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0uz_r72zdnwdd._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__130_vkgsongq_._.js → [root-of-the-server]__0vb1_m_h5hi0z._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0x929r1phz1oi._.js → [root-of-the-server]__0vclan952l_ty._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0vp-x4ifpr3p9._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1wjsjh-1i-sn6._.js → [root-of-the-server]__0vsafetdvsfhj._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0db2p-om-b_4s._.js → [root-of-the-server]__0ww7a-9fnx2rv._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0x5vp_8n6xvpw._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0yhki59n8zyjb._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__20sp5m_w5iklm._.js → [root-of-the-server]__10-v22hv1sxrv._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0jswmvddgl3sb._.js → [root-of-the-server]__10d4a34z0js-f._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0zkeao78mms1_._.js → [root-of-the-server]__10ts7p_9fu3ge._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__14jw0y_hj7jmw._.js → [root-of-the-server]__12tmfv427e9cb._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1426to_m4prqh._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1481y3utu_a_o._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__14e0j38785glf._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1-2ckgdamg0-j._.js → [root-of-the-server]__14yq_wf4xemgd._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__177l2p7kcj-16._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0-94urkhm871c._.js → [root-of-the-server]__192br5y94wzhx._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__19jalyhtntk8p._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0fc4c9-xzmkol._.js → [root-of-the-server]__19o-a03uklyrw._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1rpgddeg42i-q._.js → [root-of-the-server]__1_0vd5-tvmsg8._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0w07p3ypro834._.js → [root-of-the-server]__1_goy0uhapvk9._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1ac-dzt5bffr2._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1bjvjngj7lvqi._.js → [root-of-the-server]__1ajyr5xvo1-x5._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0-ytbad9hn7uc._.js → [root-of-the-server]__1avuwg9wmyh48._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1c78cu7kb9vkl._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1ey2qia7rofoc._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__161v5qfd5qk2p._.js → [root-of-the-server]__1ghx3ayy7tm73._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0xfgfo-ks4_e8._.js → [root-of-the-server]__1hlvqq0azku2x._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0zs-wkvv1cs0i._.js → [root-of-the-server]__1hrcyozojb6ot._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1hrviq7s700td._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__212_l7y-180xi._.js → [root-of-the-server]__1i841w7a3057h._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1ifov-udw6__d._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__10negjjz5k5bz._.js → [root-of-the-server]__1ig0p-frprcbm._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1io5zo7iam532._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0c9y_zg74k4oe._.js → [root-of-the-server]__1iruoalu93dg7._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1ksyvvsf32jfg._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1kzi1du1sliqb._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__15vqo7amys573._.js → [root-of-the-server]__1mbm_bvk1oat7._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1mvibnqor6lx_._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0ct18spdi1leu._.js → [root-of-the-server]__1ons16gam6qb7._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1ozfk4_3lx1o7._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1po33h2u2o4e_._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1qps9ushddgwe._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0so_ihc-5tp14._.js → [root-of-the-server]__1qyz1wi13rxxb._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0nkfi6x2c4c5p._.js → [root-of-the-server]__1r2ei065xk141._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0dltcr407-ow6._.js → [root-of-the-server]__1r8mzvf7_9d2k._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1rxke2_vpd7np._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1sjp750034q4j._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1tefe1f5835t_._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0a5t6bkr3-uqw._.js → [root-of-the-server]__1tlivd99uri0t._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__217jp1b3psyq_._.js → [root-of-the-server]__1vfvw1pmssxww._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1g6xpr_typmce._.js → [root-of-the-server]__1wbnule0tzwdu._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0zu1odpvrptrt._.js → [root-of-the-server]__1wcnj2xtesyd9._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1cpee8xi1ig3-._.js → [root-of-the-server]__1won_frdj9jms._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1wvp6wau5ueb9._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0bvdnvpw43au9._.js → [root-of-the-server]__1y9gsf61fh1fv._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1yxudc_keazqo._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1pyhos8be90-4._.js → [root-of-the-server]__1yxxfmyk3649a._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1t87mhqedigsz._.js → [root-of-the-server]__1z1fgf8k8icw8._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1d4wmw2wohveb._.js → [root-of-the-server]__1z_l9mj3s_6tu._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1zvy7u_y3fzbz._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0xd_bgjy5_tr5._.js → [root-of-the-server]__20056vw370xom._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__205cmd-k6g2kc._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__20dehd8e5-v9y._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1sm4p209f_yie._.js → [root-of-the-server]__20qdu-env7wgt._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__20qirklw1sgj0._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0inf2zuuqjrq6._.js → [root-of-the-server]__212-4r-w6a9sm._.js} +2 -2
- package/server/.next/server/chunks/_0-5pjvqu672_v._.js +49 -0
- package/server/.next/server/chunks/_02qrz1g8sdvhe._.js +49 -0
- package/server/.next/server/chunks/_03qlijpos6a21._.js +1 -1
- package/server/.next/server/chunks/_05hhw0eql5-dv._.js +2 -2
- package/server/.next/server/chunks/_06gv0srpbf_lk._.js +1 -1
- package/server/.next/server/chunks/_06lf75x-xhl7v._.js +1 -1
- package/server/.next/server/chunks/{_0-ub844lc_z_a._.js → _0ehqx1pkh20px._.js} +3 -3
- package/server/.next/server/chunks/{_08z7lmk32r__5._.js → _0jiq3ns7681pv._.js} +3 -3
- package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +1 -1
- package/server/.next/server/chunks/_0sy878k2ywjbq._.js +1 -1
- package/server/.next/server/chunks/_0vgplianlrk3e._.js +3 -0
- package/server/.next/server/chunks/_1_son1yzo5xvl._.js +1 -1
- package/server/.next/server/chunks/_1ap0upnvy5i_1._.js +49 -0
- package/server/.next/server/chunks/_1b-88djuoexz1._.js +49 -0
- package/server/.next/server/chunks/{_0-jfehdfklu-i._.js → _1k3v1-vgvzm_o._.js} +2 -2
- package/server/.next/server/chunks/_1l-68brbq289m._.js +2 -2
- package/server/.next/server/chunks/{_1-pv4d4qhe7to._.js → _1t46m15axa4b4._.js} +3 -3
- package/server/.next/server/chunks/node_modules_drizzle-orm_entity_1-0q2stnw2ab8.js +3 -3
- package/server/.next/server/chunks/{_0op74d4yyc3ma._.js → node_modules_next_1mwxx95m7177g._.js} +3 -3
- package/server/.next/server/chunks/src_0--qn984h6czu._.js +1 -1
- package/server/.next/server/chunks/{src_2108_me3q06ih._.js → src_05be6wzefzaky._.js} +2 -2
- package/server/.next/server/chunks/src_05jrvcsgaq5ek._.js +1 -1
- package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
- package/server/.next/server/chunks/src_06tyytf_c_hlu._.js +1 -1
- package/server/.next/server/chunks/src_088gmyaew7ds0._.js +1 -1
- package/server/.next/server/chunks/src_08fq45_-8xq5o._.js +1 -1
- package/server/.next/server/chunks/src_0_9n02bmhtk4z._.js +1 -1
- package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +1 -1
- package/server/.next/server/chunks/{src_0j8daco-75zka._.js → src_0cdn5fuk8f_x2._.js} +2 -2
- package/server/.next/server/chunks/src_0dxbyz8iemj_5._.js +1 -1
- package/server/.next/server/chunks/src_0hx0sol2clocu._.js +1 -1
- package/server/.next/server/chunks/{src_1lvv9wiag2d8-._.js → src_0j84o_hkkaeg-._.js} +2 -2
- package/server/.next/server/chunks/src_0u2zbz77uh__q._.js +1 -1
- package/server/.next/server/chunks/src_0ud2mqnh4emxz._.js +1 -1
- package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +1 -1
- package/server/.next/server/chunks/src_10vyvp9vy_69h._.js +1 -1
- package/server/.next/server/chunks/src_13n1vi7uew4iu._.js +1 -1
- package/server/.next/server/chunks/src_1_fnzi0em_6er._.js +3 -0
- 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_1cvp6ubs-3z6l._.js +1 -1
- package/server/.next/server/chunks/src_1il7wg_qjxny7._.js +1 -1
- package/server/.next/server/chunks/src_1ntwbcb1cl-y9._.js +1 -1
- package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +5 -5
- 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_1wmb2yl3tn-dd._.js +1 -1
- package/server/.next/server/chunks/src_1wzm081p6qyre._.js +5 -5
- package/server/.next/server/chunks/src_lib_00ixpbvymlbo_._.js +3 -0
- package/server/.next/server/chunks/src_lib_0eqv8l-v8d5ze._.js +1 -1
- package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
- package/server/.next/server/chunks/src_lib_0j2ifdk5byg1t._.js +3 -0
- package/server/.next/server/chunks/src_lib_0ma36vqcze7a9._.js +7 -0
- package/server/.next/server/chunks/src_lib_0ps7mu81f-6s1._.js +7 -0
- package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +10 -10
- package/server/.next/server/chunks/src_lib_14grv5a5_n9o0._.js +7 -0
- package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +10 -10
- package/server/.next/server/chunks/src_lib_1iuuekw6uwbbr._.js +3 -0
- package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +10 -10
- package/server/.next/server/chunks/src_lib_1znb-e7g8dkgc._.js +7 -0
- package/server/.next/server/chunks/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/src_lib_collector_auth_ts_0lqx92__e4zij._.js +3 -3
- package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +6 -6
- package/server/.next/server/chunks/src_lib_data_cached_ts_017to1fh48jms._.js +3 -0
- package/server/.next/server/chunks/src_lib_data_databases-db_ts_04a4hj5j7h8m0._.js +3 -0
- package/server/.next/server/chunks/src_lib_data_os-scan-db_ts_0g2a3ofkaxf40._.js +4 -0
- package/server/.next/server/chunks/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +4 -4
- package/server/.next/server/chunks/src_lib_databases_snapshot-data_ts_1xilv6_re7hcp._.js +3 -0
- package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +5 -5
- package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +10 -10
- package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +12 -12
- package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +10 -10
- package/server/.next/server/chunks/src_lib_deps_branch_ts_06dz9-7a66n24._.js +3 -0
- package/server/.next/server/chunks/src_lib_deps_osv_ts_0c-lbj4hsmojx._.js +3 -0
- package/server/.next/server/chunks/src_lib_deps_plan_ts_0bctf8v4qttk5._.js +1 -1
- package/server/.next/server/chunks/src_lib_notify_lang_ts_1r2w02ctaky7e._.js +1 -1
- package/server/.next/server/chunks/src_lib_sections_ts_0r8u4nvlpdkgq._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_security_ts_1_c7vkcsp6y27._.js +3 -0
- 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 +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +1 -1
- package/server/.next/server/chunks/ssr/1q96_modules_@tabler_icons-react_dist_esm_icons_IconExternalLink_mjs_19uzq2wmxdb36._.js +3 -0
- package/server/.next/server/chunks/ssr/{[externals]__1rj83sktdlxvt._.js → [externals]__00hge8tjqv73a._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1s7xw086rvse0._.js → [externals]__0summv9f9jkob._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__20leqouf6m6f3._.js → [externals]__1jdljyrzmqoz0._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__02s9k1gg9qqkm._.js → [externals]__1q1drb4oske-9._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__001mglelq4wpc._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__07k_84t5-d55n._.js → [root-of-the-server]__02lkybw6gg3ln._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__02s29zgn7lrps._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1e9tlsk1gl8lw._.js → [root-of-the-server]__03xevz8n-mc20._.js} +3 -3
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__077-acap7g4ck._.js → [root-of-the-server]__0423qjo9c2t9-._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0nrc_8-wrhf3y._.js → [root-of-the-server]__04p9ipxxdhqfn._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ct4apye0sfmc._.js → [root-of-the-server]__05s2n35zn4go-._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0fd39clnjw9fb._.js → [root-of-the-server]__06bgklzuef-ya._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1itgt83qo1e77._.js → [root-of-the-server]__07_efq7yhxfj-._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0q7rssq_3unbc._.js → [root-of-the-server]__07zuxj3veqm14._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1qrk2rfmx21b_._.js → [root-of-the-server]__092gsphy4oz6k._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__09blzlbsxqvy9._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0_-fz8cunfpwp._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0de1senl_kfo5._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ee5ew5q3jh8i._.js → [root-of-the-server]__0gyvfp6c-_edw._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0jgapr1cnvhi6._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0keo0-hwsnkw9._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0l50vsk8enxzj._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0mvauw9r_4qss._.js +4 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__04_prmhm_cts4._.js → [root-of-the-server]__0n4bkq-45z4aa._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0e1s_5gg-u3iu._.js → [root-of-the-server]__0no6c0whevi73._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0rdf04ziqasfz._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0y2s_4828a5u9._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0p86d9imejczs._.js → [root-of-the-server]__0z5ucbis8ik32._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0uxychcp_pldy._.js → [root-of-the-server]__10r0u-q18z71i._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__004q78ed0nf0_._.js → [root-of-the-server]__12t9_ndr9z-2d._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0hgf7si8htevx._.js → [root-of-the-server]__139ya3ejh6htx._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-zqh1gf4dsj3._.js → [root-of-the-server]__13phmsw9wsyrs._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__14e0j38785glf._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__080do5vfu69n5._.js → [root-of-the-server]__157kjredkf1pa._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__09j1po2u91fp3._.js → [root-of-the-server]__16jfs8j29r4b5._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0skfdezx5rxie._.js → [root-of-the-server]__183_36tj3p645._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1sw2q1p1t59y8._.js → [root-of-the-server]__18gw74mr2vto3._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__19twn3g5nv5q1._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__19wvac83zh5-9._.js +3 -0
- 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]__0h9rpg5-lhp5q._.js → [root-of-the-server]__1a5760tg4iits._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0b3g72j9cu141._.js → [root-of-the-server]__1d1ksu1dlha3r._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1y7nfsglxx7cn._.js → [root-of-the-server]__1iqedr7nfvayk._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__11paa809_igt_._.js → [root-of-the-server]__1knbzqo0nba_q._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__05_98ql5tgeii._.js → [root-of-the-server]__1m38od9tgaroe._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ed6qo3lg9_f9._.js → [root-of-the-server]__1mah0p09qrkpu._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1v3b498_j-68t._.js → [root-of-the-server]__1mxpszbk1aup8._.js} +3 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1u_13nhw3kuz3._.js +1 -1
- package/server/.next/server/chunks/ssr/_008i8a0_8skrp._.js +3 -0
- package/server/.next/server/chunks/ssr/{_0azq3ml4gbn1d._.js → _01n29sxn-py3x._.js} +2 -2
- package/server/.next/server/chunks/ssr/_02eudwc8ieb2r._.js +2 -2
- package/server/.next/server/chunks/ssr/_03d3sxmob-gr7._.js +3 -0
- package/server/.next/server/chunks/ssr/{_1wfjx67s3e6ws._.js → _04mnjz5cekpue._.js} +1 -1
- package/server/.next/server/chunks/ssr/_08rjac8cutbcs._.js +3 -0
- package/server/.next/server/chunks/ssr/_08xqk3eibu5aw._.js +1 -1
- package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
- package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1ah_xx0-cty-v._.js → _0aznz0i-8olet._.js} +1 -1
- package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
- package/server/.next/server/chunks/ssr/_0cbbks0ms7i_u._.js +2 -2
- package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
- package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +2 -2
- package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
- package/server/.next/server/chunks/ssr/_0dvz4dndt6lkf._.js +1 -1
- package/server/.next/server/chunks/ssr/_0eu69r0sm274b._.js +3 -0
- package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +2 -2
- package/server/.next/server/chunks/ssr/_0gmw45sb1llld._.js +1 -1
- package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +2 -2
- package/server/.next/server/chunks/ssr/_0iaoiq9xbkdma._.js +3 -0
- package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +2 -2
- package/server/.next/server/chunks/ssr/_0iy27gi4y9-fe._.js +1 -1
- package/server/.next/server/chunks/ssr/_0k2qpgzlqzc_p._.js +1 -1
- package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +1 -1
- package/server/.next/server/chunks/ssr/_0lb1euzjakqbr._.js +3 -0
- package/server/.next/server/chunks/ssr/{_0_vfnz8i8hac7._.js → _0mhwgy5lvtng0._.js} +1 -1
- package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
- package/server/.next/server/chunks/ssr/_0oub-njkja8gu._.js +2 -2
- package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +2 -2
- package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +1 -1
- package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +2 -2
- package/server/.next/server/chunks/ssr/{_1vjm7-shohnh7._.js → _0u5_d3o0i72tq._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +2 -2
- package/server/.next/server/chunks/ssr/_0uz60lk-7e_cj._.js +4 -0
- package/server/.next/server/chunks/ssr/_0vgplianlrk3e._.js +3 -0
- package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
- package/server/.next/server/chunks/ssr/_0xmud7u5hdnqu._.js +2 -2
- package/server/.next/server/chunks/ssr/_0zkmkbrbc96-h._.js +3 -0
- package/server/.next/server/chunks/ssr/_1-4401bfn50mf._.js +1 -1
- package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
- package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1xokm14jd0teg._.js → _113tc44xki0cp._.js} +1 -1
- package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
- package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +2 -2
- package/server/.next/server/chunks/ssr/{_0y5ov4kk2q81r._.js → _13bpjk3g0tp2e._.js} +2 -2
- package/server/.next/server/chunks/ssr/_16vvfyez78u5k._.js +3 -0
- package/server/.next/server/chunks/ssr/{_0tu64jsmbyx4_._.js → _17tabyg0mhxlx._.js} +2 -2
- package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
- package/server/.next/server/chunks/ssr/_19-n2kl-knt0j._.js +3 -0
- package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
- package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +2 -2
- package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
- package/server/.next/server/chunks/ssr/_1d0anr0hjs5k5._.js +3 -0
- package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +2 -2
- package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +2 -2
- package/server/.next/server/chunks/ssr/_1fuywfexex2s8._.js +2 -2
- package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
- package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +2 -2
- package/server/.next/server/chunks/ssr/_1i96si4hzn74p._.js +1 -1
- 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/_1lgb0h9z-8z15._.js +3 -0
- package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +2 -2
- package/server/.next/server/chunks/ssr/_1m4km_w39x5e9._.js +1 -1
- package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +2 -2
- package/server/.next/server/chunks/ssr/_1q3fi6a4gklq6._.js +3 -0
- package/server/.next/server/chunks/ssr/_1qsshadaq_-6p._.js +3 -0
- package/server/.next/server/chunks/ssr/_1ul3og9l7vp32._.js +4 -0
- package/server/.next/server/chunks/ssr/{_1nzncndn-1ggb._.js → _1xbmdurub1ykt._.js} +1 -1
- package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +2 -2
- package/server/.next/server/chunks/ssr/{_10oqiz6hmf92q._.js → _1ykegy3wzl3mu._.js} +2 -2
- package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1_ct-7kmkfab1._.js → _1znzrmlfouh6k._.js} +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_1myo_rodrlg3a.js +4 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_containers_page_actions_1ainjsbrnl360.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +1 -1
- 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_@tabler_icons-react_dist_esm_icons_0904ro5eqxhlr._.js → node_modules_@tabler_icons-react_dist_esm_icons_0b7guexr5je6g._.js} +1 -1
- package/server/.next/server/chunks/ssr/{node_modules_@tabler_icons-react_dist_esm_icons_07e6iv4064369._.js → node_modules_@tabler_icons-react_dist_esm_icons_0ej-u2f-ha9q0._.js} +1 -1
- package/server/.next/server/chunks/ssr/{node_modules_@tabler_icons-react_dist_esm_icons_1uzp0vue7-c9z._.js → node_modules_@tabler_icons-react_dist_esm_icons_1nstb42fu_h0p._.js} +1 -1
- package/server/.next/server/chunks/ssr/node_modules_class-variance-authority_dist_index_mjs_0wl3fjdt40o5n._.js +3 -0
- package/server/.next/server/chunks/ssr/{_1b4uqc9fwt4dy._.js → node_modules_next_1mwxx95m7177g._.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0hrjtaoa__ix8.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0slepiv25mpch.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1oqgmgc8y6yxj.js +3 -0
- package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_05mcsr-od-9ug._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0632mrev4i__u._.js +3 -0
- 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_0abts6wp5ucc0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0c62tj2aysn_e._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0k2rwfjheyrf7._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0ovx2ogvlz2eh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0uitfl3c1mdqb._.js +2 -2
- package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
- package/server/.next/server/chunks/ssr/src_13u1vu8hwwr6n._.js +3 -0
- package/server/.next/server/chunks/ssr/src_14bxi75kwc3xt._.js +3 -0
- package/server/.next/server/chunks/ssr/src_15mtytgydjtio._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_14ulgwoxoyfkq._.js → src_1_9q6-wstn038._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1emolu5lrse98._.js +6 -0
- package/server/.next/server/chunks/ssr/src_1maoe8g5gnv0u._.js +3 -3
- package/server/.next/server/chunks/ssr/src_1ntwbcb1cl-y9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
- 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 +1 -1
- 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)_0_odx13qcz9o1._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_app_(console)_0-vcbt2icvguc._.js → src_app_(console)_0gw9o1og9hq_4._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_08in-j3xp5mbn._.js +3 -0
- 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_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)_containers_containers-view_tsx_1xkcrw5gx53xo._.js +3 -0
- 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)_deploy_0zeo9k66pzhae._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_deploy_deploy-picker_tsx_1qtt_mfhq6hx7._.js +3 -0
- 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)_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_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)_os_09ake6nf7de4h._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_os_os-view_tsx_0xr69f5vtstls._.js +3 -0
- 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)_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)_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_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_app_signin_0obhr-33tppu8._.js → src_app_signin_1u2md84o5b6td._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_components_174vbjanfxq81._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_components_0ozvphxxwb7d-._.js → src_components_1pmro72g7f44k._.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_lib_00ixpbvymlbo_._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_05ai1oj91p9w2._.js +2 -2
- package/server/.next/server/chunks/ssr/src_lib_0eqv8l-v8d5ze._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_0f_4mvf4-xxst._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_0j2ifdk5byg1t._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_0nbad7vu413-f._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1-o98ehvb_ozi._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_1eioo4oodq-8h._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1iuuekw6uwbbr._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_lib_0-nc33gvdtkg5._.js → src_lib_1zgor_vrwl5kt._.js} +1 -1
- package/server/.next/server/chunks/ssr/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_cached_ts_017to1fh48jms._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_data_databases-db_ts_04a4hj5j7h8m0._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_data_os-scan-db_ts_0g2a3ofkaxf40._.js +4 -0
- package/server/.next/server/chunks/ssr/src_lib_data_provider-action-db_ts_0-bucssqnudtd._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_repos-db_ts_06z14rp86ukii._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +2 -2
- package/server/.next/server/chunks/ssr/src_lib_databases_snapshot-data_ts_1xilv6_re7hcp._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_lib_demo_0sbw5n9n4mpzx._.js → src_lib_demo_15e3gnqzod0tj._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_deps_branch_ts_06dz9-7a66n24._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_deps_osv_ts_0c-lbj4hsmojx._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_deps_plan_ts_0bctf8v4qttk5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_sections_ts_0r8u4nvlpdkgq._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_security_ts_1_c7vkcsp6y27._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_view_usage_ts_1h1tj0m3n2vul._.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_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ui_0jp9fny_5k1v6._.js +1 -1
- package/server/.next/server/middleware-build-manifest.js +36 -3
- package/server/.next/server/next-font-manifest.js +1 -1
- package/server/.next/server/next-font-manifest.json +12 -0
- 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 +378 -176
- package/server/.next/static/chunks/{0uom2d_-nh45g.js → 00e1aosyzj6rl.js} +1 -1
- package/server/.next/static/chunks/{0tw_we2nleycj.js → 0cc9ahw1xs0ny.js} +1 -1
- package/server/.next/static/chunks/{0p5xwnif2xe2v.js → 0hths0sijlql2.js} +1 -1
- package/server/.next/static/chunks/0hzw1rqyz-ith.js +1 -0
- package/server/.next/static/chunks/0ish66r3_d92v.js +1 -0
- package/server/.next/static/chunks/{20u3tmdb-6drr.js → 0ps76fyk0mlud.js} +1 -1
- package/server/.next/static/chunks/{2i629nz4h3fqg.js → 0rblb2d9s6x__.js} +1 -1
- package/server/.next/static/chunks/{2pjruch-2xss_.js → 0v-0yvs2o_ibn.js} +1 -1
- package/server/.next/static/chunks/{3ki7epe69d8mi.js → 0viea3-xdb4uv.js} +1 -1
- package/server/.next/static/chunks/{3y4vkm_orksj_.js → 11r8k-t1ijjkn.js} +1 -1
- package/server/.next/static/chunks/{3tqlcut9yz40q.js → 14f5pn2krqoyh.js} +1 -1
- package/server/.next/static/chunks/{1d5jx8nbj9hio.js → 17zst1h7smcce.js} +1 -1
- package/server/.next/static/chunks/{1hzn5sr2wq7_6.js → 1a0rdqp6soc92.js} +1 -1
- package/server/.next/static/chunks/{2y5zgpld68mbe.js → 1a7zdd51t9mil.js} +2 -2
- package/server/.next/static/chunks/{32sed3oqb5mgw.js → 1d4i_v63pyozl.js} +1 -1
- package/server/.next/static/chunks/{20xid8njz36og.js → 1d5651gcd0bfq.js} +1 -1
- package/server/.next/static/chunks/{2jyi95ohxfybd.js → 1fh3cq_v5nqtp.js} +1 -1
- package/server/.next/static/chunks/1fk-rtgxvtdso.js +1 -0
- package/server/.next/static/chunks/1kyz-ah3_ho6c.js +1 -0
- package/server/.next/static/chunks/{3tigi9c4vke8u.js → 1qjg48qu3j1w4.js} +1 -1
- package/server/.next/static/chunks/{3e8jbph5vbqrh.js → 1qmrzxeff7esb.js} +1 -1
- package/server/.next/static/chunks/{13t0_-lm77ctu.js → 1rgved8vjyay2.js} +1 -1
- package/server/.next/static/chunks/{12z4gcgh75y3h.js → 1y_o3hc2z85sh.js} +1 -1
- package/server/.next/static/chunks/{12ryyhs-tt27p.js → 1yjrm8ekqlzfy.js} +1 -1
- package/server/.next/static/chunks/{1jfri9y7a54t3.js → 2-ijilf6lbw4f.js} +1 -1
- package/server/.next/static/chunks/{12rf9fj_wat4k.js → 2-vu-7596xgz-.js} +2 -2
- package/server/.next/static/chunks/{0x_wb_w6fgkyt.js → 226fbv9fq4xq_.js} +1 -1
- package/server/.next/static/chunks/{1xaww6l378y_h.js → 26exu0f7ok41j.js} +1 -1
- package/server/.next/static/chunks/{1zid1do5vuxcq.js → 28fzu8z0ofyw0.js} +1 -1
- package/server/.next/static/chunks/2c2oi6ivdnv6f.js +1 -0
- package/server/.next/static/chunks/{1q0dfli6xlok0.js → 2crsj9_2h2nzh.js} +1 -1
- package/server/.next/static/chunks/{2gnckmw5e2mfd.js → 2d7luax7loip3.js} +1 -1
- package/server/.next/static/chunks/{11r3cljnu3lrb.js → 2j24hsy45xi-u.js} +1 -1
- package/server/.next/static/chunks/{0vqfc5ez__g1s.js → 2k4z-oed_6g2l.js} +1 -1
- package/server/.next/static/chunks/{2zudgr23_bvy5.js → 2kmw3ug2__8y3.js} +1 -1
- package/server/.next/static/chunks/2owzn0qjb8n5g.js +1 -0
- package/server/.next/static/chunks/{0p_qyask2har9.js → 2pa65sxfnzj4k.js} +1 -1
- package/server/.next/static/chunks/2zzk4wxiacgja.css +3 -0
- package/server/.next/static/chunks/{223rdnw2yty48.js → 308vk5n0anqam.js} +2 -2
- package/server/.next/static/chunks/{27epf-aa_5m_r.js → 356b00huilj4q.js} +1 -1
- package/server/.next/static/chunks/{0znki_inst5fe.js → 35vilzb1p9yjf.js} +1 -1
- package/server/.next/static/chunks/39a3uxexc-wqm.js +1 -0
- package/server/.next/static/chunks/{1andb44i5y-5c.js → 3_6-4h_qltoii.js} +1 -1
- package/server/.next/static/chunks/3a9toq_3nqe93.js +1 -0
- package/server/.next/static/chunks/{3a55yojb_7drl.js → 3ezef0voy5xju.js} +1 -1
- package/server/.next/static/chunks/{2wmkryogm5g3y.js → 3f1selgoqszyq.js} +2 -2
- package/server/.next/static/chunks/{143_uak5v6uky.js → 3g0ywdith98z2.js} +1 -1
- package/server/.next/static/chunks/{0o53bcdd6gtyu.js → 3lc-hq-bpg71u.js} +1 -1
- package/server/.next/static/chunks/3qudv985iqmz7.js +1 -0
- package/server/.next/static/chunks/{0a77yea00jt0y.js → 3u2qewigse-a4.js} +1 -1
- package/server/.next/static/chunks/{16f-5rrbswao-.js → 3w5rrc-0xud6m.js} +1 -1
- package/server/.next/static/chunks/{2plrf95jah9ew.js → 3wfyge_-2qnyj.js} +1 -1
- package/server/.next/static/chunks/{0s44z2_pzghcu.js → 3xulo5x1hbsw-.js} +1 -1
- package/server/.next/static/chunks/44hkyor0suthy.js +1 -0
- package/server/drizzle-selfhost/0008_ci_failing_rule.sql +2 -0
- package/server/drizzle-selfhost/0009_os_security_rule.sql +2 -0
- package/server/drizzle-selfhost/0010_supabase_metrics_memory.sql +8 -0
- package/server/drizzle-selfhost/meta/_journal.json +82 -61
- package/server/.next/server/chunks/[root-of-the-server]__038br8sr9eepd._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0a5op--7u5_xh._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0r3cq1lecww4e._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0r_6xpjwcdrda._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0rctmpp7p7cp9._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0rpys5i04hzww._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0vax5gpdmh80a._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0vv63vp8y0fs-._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0ycpg444s91lb._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zjhlf_yodox3._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1-37ctpn8yw_m._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1-ne3clcouvm2._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__14vj8ywy5spa2._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__16jyhasrd2ojp._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__16u9d_hm9lefl._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1_zr2xlmtkn4l._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1a9cd4d9ohf69._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1aagly59gw-xf._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1c0cb3ur16yhh._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1jvy8r4n-62x7._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1k-7jan2fsbys._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1qmdi981syrsn._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1r9v6qgjwlv32._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1uad-kugxmkx8._.js +0 -3
- package/server/.next/server/chunks/_0ffsv993spriq._.js +0 -3
- package/server/.next/server/chunks/_0nt4ifc48vl34._.js +0 -48
- package/server/.next/server/chunks/_0rkn5gstaj2d0._.js +0 -48
- package/server/.next/server/chunks/_1_4jb754aeifp._.js +0 -48
- package/server/.next/server/chunks/_1d_77nvqcnkcg._.js +0 -3
- package/server/.next/server/chunks/_1qsryafbujfwn._.js +0 -48
- package/server/.next/server/chunks/src_05vq-abuilwk4._.js +0 -3
- package/server/.next/server/chunks/src_06lwphwuzgl6e._.js +0 -3
- package/server/.next/server/chunks/src_1p24c-nz35cov._.js +0 -3
- package/server/.next/server/chunks/src_20sym_ohuqw76._.js +0 -3
- package/server/.next/server/chunks/src_lib_001zhbfd1zeuk._.js +0 -3
- package/server/.next/server/chunks/src_lib_0k_aposzvy1c8._.js +0 -6
- package/server/.next/server/chunks/src_lib_0n1xnas42gur9._.js +0 -3
- package/server/.next/server/chunks/src_lib_0vjapfdxkooq5._.js +0 -6
- package/server/.next/server/chunks/src_lib_0yn0bj14ih0id._.js +0 -6
- package/server/.next/server/chunks/src_lib_18wgdeemqm6gg._.js +0 -3
- package/server/.next/server/chunks/src_lib_1qbgm0zu8q1rr._.js +0 -6
- package/server/.next/server/chunks/src_lib_1ywf_wup1kxy_._.js +0 -3
- package/server/.next/server/chunks/src_private_123pnf7iqjhkz._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__03mal5uo1rzg4._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0s2of3mcou177._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0tqqte5jb6jz7._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0ujxsp9l9ad-l._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__113zn8es2wp67._.js +0 -3
- package/server/.next/server/chunks/ssr/_09s2unlb4r6yf._.js +0 -3
- package/server/.next/server/chunks/ssr/_0_8v3-nq-b4ug._.js +0 -3
- package/server/.next/server/chunks/ssr/_0_yyszoyzyccn._.js +0 -3
- package/server/.next/server/chunks/ssr/_0ffsv993spriq._.js +0 -3
- package/server/.next/server/chunks/ssr/_0v6v5w16qxwke._.js +0 -3
- package/server/.next/server/chunks/ssr/_12wjuabpo0ofk._.js +0 -3
- package/server/.next/server/chunks/ssr/_1js_iq-0mb62d._.js +0 -3
- package/server/.next/server/chunks/ssr/_1ktvwngz0lzjr._.js +0 -3
- package/server/.next/server/chunks/ssr/_1st-ksb6wm2og._.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_1--1mjfnoprr2.js +0 -3
- package/server/.next/server/chunks/ssr/src_04o0-kzfmcnim._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0dceh6hsdybq8._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1-k3gvxaqli74._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1ckoccd8qvnje._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1p24c-nz35cov._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1wnx8vxv7nd04._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_05h6-wpd078oj._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_10xvt--29v-ed._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_001zhbfd1zeuk._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_033ses2c4-ww-._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_0n1xnas42gur9._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_18wgdeemqm6gg._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_1ywf_wup1kxy_._.js +0 -3
- package/server/.next/server/chunks/ssr/src_private_1yzfhupl3rlpx._.js +0 -6
- package/server/.next/static/chunks/08fdgz3f6aeh3.js +0 -1
- package/server/.next/static/chunks/11locca8ayu84.js +0 -1
- package/server/.next/static/chunks/1lq20aqwgdq8w.js +0 -1
- package/server/.next/static/chunks/1tg1mstvws8rj.css +0 -3
- package/server/.next/static/chunks/38ao1jq4zw-nd.js +0 -1
- package/server/.next/static/chunks/3c79k7qsyelf1.js +0 -1
- package/server/.next/static/chunks/3zhb71t6q4f9k.js +0 -1
- /package/server/.next/static/{VmJyuS9PCFUrRHa6THIcV → g_rE0bq_ZZa-pl4RulWXV}/_buildManifest.js +0 -0
- /package/server/.next/static/{VmJyuS9PCFUrRHa6THIcV → g_rE0bq_ZZa-pl4RulWXV}/_clientMiddlewareManifest.js +0 -0
- /package/server/.next/static/{VmJyuS9PCFUrRHa6THIcV → g_rE0bq_ZZa-pl4RulWXV}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
(()=>{"use strict";module.exports=[658266,618127,211256,e=>{var t=e.i(278619),n=e.i(959408),r=e.i(867274),s=e.i(413230),a=e.i(7494),i=e.i(250474),o=e.i(90801),l=e.i(32391);let u=["next","eslint-config-next"],d={CRITICAL:"critical",HIGH:"high",MODERATE:"moderate",LOW:"low",UNKNOWN:"unknown"};function c(e,t){if(!e||!(0,l.C)(e))return null;let n=t.map(e=>e.fixed).filter(t=>!!t&&(0,l.C)(t)&&(0,i.f)(t,e)>0);if(!n.length)return null;let r=n.filter(t=>(0,o.J)(e,t));return(r.length?r:n).reduce((e,t)=>(0,i.f)(t,e)>0?t:e)}function p(e,t){let n=c(e,t),r=n?t.map(e=>e.fixed).filter(e=>!!e&&(0,l.C)(e)&&(0,i.f)(e,n)>0):[],s=r.reduce((e,t)=>null===e||(0,i.f)(t,e)>0?t:e,null),o=s?` (${1===r.length?"one fix needs":"some fixes need"} Next.js ${s.split(".")[0]})`:"";return`Next.js ${e??"(unknown version)"} has ${(0,a.q)(t.length)} (${(0,a.N)(t).toLowerCase()}), ${n?`fixed in ${n}${o}`:"no fix yet"}.`}e.s(["P",0,p,"p",0,function(e){if(!e||"vulnerable"!==e.status||!e.findings.length||!e.version)return null;let t=c(e.version,e.findings);if(!t)return null;let n=d[(0,a.N)(e.findings)],r=[...new Set(e.findings.map(e=>e.id))],s=[...new Set(e.findings.flatMap(e=>e.cve?[e.cve]:[]))];return{from:e.version,to:t,upgrades:[{package:"next",to:t,vulnIds:r,cves:s,severity:n},{package:"eslint-config-next",to:t,vulnIds:[],cves:[],severity:n,companionOf:"next"}],installed:new Map(u.map(t=>[t,e.version]))}},"F",0,function(e){let t=e.find(e=>"next"===e.package&&!e.companionOf);return!t||e.some(e=>"eslint-config-next"===e.package)?e:[...e,{package:"eslint-config-next",to:t.to,vulnIds:[],cves:[],severity:t.severity,companionOf:"next"}]}],618127);let f=e=>Math.round(e).toLocaleString("en-US"),m=(e,t)=>Math.floor((e.getTime()-t.getTime())/864e5),h=(e,t)=>`${e} ${t}${1===e?"":"s"}`,g=e=>{try{let t=new URL(e);return`${t.host}${t.pathname}`}catch{return e}},y=e=>{try{return new URL(e).host}catch{return e}},v=e=>{try{return new URL(e).pathname}catch{return"/"}},k="Down · ",w=new Set(["failure","timed_out","startup_failure"]),b=(e,t,n)=>({rule:e,subject:t,status:"unknown",resourceId:null,accountId:null,title:t,message:"",provider:null,sampleAt:null,...n}),$=e=>"firestore"===e.provider?"firebase":"d1"===e.provider?"cloudflare":e.provider,A=new Set(["turso","upstash","d1"]),I={MonitorDown:(e,t)=>e.monitors.map(e=>{let r=b("MonitorDown",e.id,{resourceId:e.appId,title:`${e.appName} ${"heartbeat"===e.kind?e.url:v(e.url)}`,provider:"vercel",sampleAt:e.lastCheckedAt}),s=t??3;if("heartbeat"===e.kind){let t;return{...r,status:"err"===e.state?"firing":"ok"===e.state?"ok":"unknown",message:`${e.appName} \xb7 ${e.url}: ${t=e.lastError,t?.startsWith(k)?t.slice(k.length):"no ping in time"}.`}}return e.movedTo?{...r,status:"ok",message:`${y(e.url)} moved to ${e.movedTo}; MonitorDomainMoved takes over.`}:e.failStreak>=s?{...r,status:"firing",message:(0,n.H)(e)?`${g(e.url)} failed its check (${(0,n.H)(e)}) on ${s} consecutive checks.`:`${g(e.url)} returned ${e.lastStatus?`HTTP ${e.lastStatus}`:"no answer"} on ${s} consecutive checks.`}:{...r,status:0===e.failStreak&&e.lastCheckedAt?"ok":"unknown",message:`${g(e.url)} answers again.`}}),MonitorDomainMoved:e=>e.monitors.filter(e=>"http"===e.kind).map(e=>{let t=b("MonitorDomainMoved",e.id,{resourceId:e.appId,title:`${e.appName} ${v(e.url)}`,provider:"vercel"});return e.movedTo?{...t,status:"firing",message:`${y(e.url)} is no longer a domain of ${e.appName}; production is on ${e.movedTo}.`}:{...t,status:"ok",message:`The monitor checks ${y(e.url)}, a domain of ${e.appName}.`}}),CollectorStale:(e,t)=>{let n=e.lastMinuteRunAt;return[b("CollectorStale","collector",{status:!n||e.now.getTime()-n.getTime()>(t??5)*6e4?"firing":"ok",title:"collector",message:n?`The last minute run finished ${f((e.now.getTime()-n.getTime())/6e4)} min ago.`:"The collector hasn't finished a run yet."})]},HighLatency:(e,t)=>e.monitors.filter(e=>"http"===e.kind).map(e=>{let n=b("HighLatency",e.id,{resourceId:e.appId,title:`${e.appName} ${v(e.url)}`,provider:"vercel",sampleAt:e.lastCheckedAt});if(e.checksLast10<5||null===e.p95Last10)return n;let r=t??1500;return{...n,status:e.p95Last10>r?"firing":"ok",message:`p95 ${f(e.p95Last10)} ms over the last 10 minutes (limit ${f(r)} ms).`}}),DeploymentFailed:e=>e.apps.map(e=>{let t=b("DeploymentFailed",e.id,{resourceId:e.id,title:e.name,provider:"vercel"}),n=e.latestProduction;return n?"error"===n.state?{...t,status:"firing",message:`Production deployment ${n.sha?n.sha.slice(0,7):"(no commit)"} failed.`}:{...t,status:"building"===n.state?"unknown":"ok"}:{...t,status:"ok"}}),DatabasePaused:e=>e.dbs&&e.dbs.filter(e=>"supabase"===e.provider).map(e=>b("DatabasePaused",e.id,{resourceId:e.id,title:e.name,provider:"supabase",status:"unknown"===e.state?"unknown":"paused"===e.state?"firing":"ok",message:`Supabase project ${e.name} is paused.`})),CertExpiringSoon:(e,t)=>e.domains&&e.domains.map(n=>{let r=b("CertExpiringSoon",n.id,{resourceId:n.id,title:n.name,provider:"cloudflare"});if(!n.tlsNotAfter)return r;let s=m(n.tlsNotAfter,e.now);return{...r,status:s<(t??14)?"firing":"ok",message:`The TLS certificate of ${n.name} expires in ${h(s,"day")}.`}}),DomainExpiringSoon:(e,t)=>e.domains&&e.domains.map(n=>{let r=b("DomainExpiringSoon",n.id,{resourceId:n.id,title:n.name,provider:"cloudflare"});if(!n.expiresAt)return r;let s=m(n.expiresAt,e.now);return{...r,status:s<(t??30)?"firing":"ok",message:`${n.name} expires in ${h(s,"day")}.`}}),StorageAlmostFull:(e,t)=>e.dbs&&e.dbs.filter(e=>"firestore"!==e.provider).map(e=>{let n=b("StorageAlmostFull",e.id,{resourceId:e.id,title:e.name,provider:$(e)});if(null===e.sizeBytes||!e.sizeLimitBytes)return n;let r=e.sizeBytes/e.sizeLimitBytes*100;return{...n,status:r>(t??80)?"firing":"ok",message:`${e.name} uses ${f(e.sizeBytes/1e6)} MB of ${f(e.sizeLimitBytes/1e6)} MB (${f(r)}%).`}}),NeonComputeHigh:(e,t)=>e.dbs&&e.dbs.filter(e=>"neon"===e.provider).map(e=>{let n=b("NeonComputeHigh",e.id,{resourceId:e.id,title:e.name,provider:"neon"});return null===e.cuHours?n:{...n,status:e.cuHours>(t??80)?"firing":"ok",message:`${e.name} used ${f(e.cuHours)} of ${f(e.cuLimit??100)} CU-hours this month.`}}),FirestoreQuotaHigh:(e,t)=>e.dbs&&e.dbs.filter(e=>"firestore"===e.provider).map(e=>{let n=b("FirestoreQuotaHigh",e.id,{resourceId:e.id,title:e.name,provider:"firebase"});if(e.quotaExhausted)return{...n,status:"firing",message:`${e.name} hit a Firestore quota (RESOURCE_EXHAUSTED).`};if(null===e.readsToday||!e.readsLimit)return!1===e.quotaExhausted?{...n,status:"ok"}:n;let r=e.readsToday/e.readsLimit*100;return{...n,status:r>(t??80)?"firing":"ok",message:`${e.name} read ${f(e.readsToday)} of ${f(e.readsLimit)} documents today (${f(r)}%).`}}),AutoPauseRisk:(e,t)=>e.dbs&&e.dbs.filter(e=>"supabase"===e.provider).map(n=>{let r=b("AutoPauseRisk",n.id,{resourceId:n.id,title:n.name,provider:"supabase"});if("paused"===n.state)return{...r,status:"ok"};if(!n.lastApiAt)return r;let s=Math.floor((e.now.getTime()-n.lastApiAt.getTime())/864e5);return{...r,status:s>=(t??4)?"firing":"ok",message:`No API traffic for ${h(s,"day")}. Supabase pauses free projects after about 7 days.`}}),DnsProxiedToVercel:e=>e.dns&&e.dns.map(e=>b("DnsProxiedToVercel",e.id,{resourceId:e.resourceId,title:e.name,provider:"cloudflare",status:e.proxied&&e.pointsToVercel?"firing":"ok",message:`${e.name} points to Vercel through the Cloudflare proxy. Vercel recommends DNS only.`})),DbQuotaHigh:(e,t)=>e.dbs&&e.dbs.filter(e=>A.has(e.provider)).map(e=>{let n=b("DbQuotaHigh",e.id,{resourceId:e.id,title:e.name,provider:$(e)});return null==e.quotaPct?n:{...n,status:e.quotaPct>(t??80)?"firing":"ok",message:`${e.name}: ${e.quotaLabel??"usage"} at ${f(e.quotaPct)}% of the free plan.`}}),ComputeHigh:(e,t)=>e.compute?e.compute.map(n=>{let s=b("ComputeHigh",n.id,{resourceId:n.id,title:n.name,provider:"supabase",sampleAt:n.latest?new Date(n.latest.at):null}),a=(0,r.B)(n.latest,(0,r.V)(t),e.now);return null===a?s:{...s,status:a.length?"firing":"ok",message:a.length?`${n.name}: ${a.join(", ")}.`:`${n.name} compute is back under the limits.`}}):null,CredentialExpiring:(e,t)=>e.accounts.map(n=>{let r=b("CredentialExpiring",n.id,{accountId:n.id,title:`${n.provider} \xb7 ${n.label}`,provider:n.provider});if("drive"===n.provider&&"error"===n.status&&n.lastError?.includes("invalid_grant"))return{...r,status:"firing",message:"Google Drive access was removed (invalid_grant). Reconnect it."};if(!n.expiresAt)return{...r,status:"ok"};let s=m(n.expiresAt,e.now);return{...r,status:s<(t??14)?"firing":"ok",message:s<0?`The ${n.provider} credential ${n.label} has expired.`:`The ${n.provider} credential ${n.label} expires in ${h(s,"day")}.`}}),VulnerableDependency:e=>e.deps?e.deps.flatMap(t=>{let n=e.apps.find(e=>e.id===t.appId);if(!n)return[];let r=b("VulnerableDependency",t.appId,{resourceId:t.appId,title:n.name,provider:"github"});if(t.error)return[r];let a=(0,s.g)(t.vulns);return a?[{...r,status:"firing",message:(0,s.L)(t.vulns),..."critical"===a?{severity:"critical"}:{}}]:[{...r,status:"ok",message:`${n.name} has no moderate, high or critical dependency advisories.`}]}):null,FrameworkVulnerable:e=>e.frameworks?e.frameworks.flatMap(t=>{let n=e.apps.find(e=>e.id===t.appId);if(!n)return[];let r=b("FrameworkVulnerable",t.appId,{resourceId:t.appId,title:n.name});return"ok"===t.status?[{...r,status:"ok",message:`${n.name} runs Next.js ${t.version??"(unknown version)"} with no known advisories.`}]:"vulnerable"===t.status&&t.findings.length?[{...r,status:"firing",message:p(t.version,t.findings),..."CRITICAL"===(0,a.N)(t.findings)?{severity:"critical"}:{}}]:[r]}):null,CiFailing:e=>e.ci?.length?e.ci.flatMap(t=>{let n=e.apps.find(e=>e.id===t.appId);if(!n)return[];let r=b("CiFailing",t.appId,{resourceId:t.appId,title:n.name,provider:"github"});if(!t.run||"none"in t.run||"completed"!==t.run.status)return[r];let s=`The latest ${t.run.name??"Actions"} run on ${t.run.branch??t.branch??"the default branch"}`;return"success"===t.run.conclusion?[{...r,status:"ok",message:`${s} passed.`}]:w.has(t.run.conclusion??"")?[{...r,status:"firing",message:`${s} failed${t.run.runNumber?` (run #${t.run.runNumber})`:""}.`}]:[r]}):null,OsSecurityUpdate:(e,t)=>(function(e,t){if(!e.os)return null;let n=t??7,r=e.os.system,s=e.os.updates.filter(e=>null!==e.score&&e.score>=n).sort((e,t)=>(t.score??0)-(e.score??0)),a=s.slice(0,3).map(e=>`${e.source} fixes ${e.cves[0]} (${e.score.toFixed(1)})${e.cves.length>1?` and ${e.cves.length-1} more`:""}`);s.length>3&&a.push(`${s.length-3} more packages`),e.os.kernelWaiting&&a.push(`kernel ${e.os.kernelWaiting.installed} waits for a reboot`);let i=b("OsSecurityUpdate","os",{title:r});return!a.length&&e.os.partial?[i]:a.length?[{...i,status:"firing",message:`On ${r}: ${a.join("; ")}.`,...s.some(e=>(e.score??0)>=9)?{severity:"critical"}:{}}]:[{...i,status:"ok",message:`On ${r}, no waiting security update fixes a CVE scored ${n.toFixed(1)} or more, and the newest kernel runs.`}]})(e,t)};e.s(["f",0,function(e,n,r){let s=[],a=new Set;for(let i of n){if(!i.enabled||r&&!r.includes(i.key)||!t._[i.key])continue;let n=I[i.key](e,i.threshold);n&&(a.add(i.key),s.push(...n))}return{observations:s,evaluated:a}}],658266);let S=["MonitorDown","HighLatency"],x=["telegram","discord","webhook","smtp"],V=e=>e.channels.some(e=>x.includes(e));function D(e,t){return t.collectorStale&&"CollectorStale"!==e.rule?"CollectorStale":e.resourceId&&S.includes(e.rule)?t.mutedApps.get(e.resourceId)??null:null}let R=(e,t)=>"critical"===t&&"warning"===e?"critical":e,M=(e,t)=>e.silencedUntilResolved||null!==e.silencedUntil&&e.silencedUntil.getTime()>t.getTime(),C=(e,t)=>`${e}|${t}`;e.s(["f",0,function(e,n,r,s,a){let i={open:[],touch:[],resolve:[]},o=new Map(s.map(e=>[e.key,e])),l=new Map(n.map(e=>[C(e.rule,e.subject),e])),u=new Set(e.map(e=>C(e.ruleKey,e.subject))),d=e=>i.resolve.push({id:e.id,pending:e.notifiedOpen?"resolve":null});for(let n of e){let e=o.get(n.ruleKey),s=l.get(C(n.ruleKey,n.subject));if(!e||!e.enabled){i.resolve.push({id:n.id,pending:null});continue}if(!r.has(n.ruleKey))continue;if(!s){i.resolve.push({id:n.id,pending:null});continue}if("unknown"===s.status)continue;let u=s.provider?a.incidents.get(s.provider)??null:null;if("firing"===s.status){let t=D(s,a),r=n.notifiedOpen&&null!==n.lastNotifiedAt&&a.now.getTime()-n.lastNotifiedAt.getTime()>=216e5,o={id:n.id,okStreak:0,lastSampleAt:s.sampleAt??n.lastSampleAt,lastSeenAt:a.now,message:s.message,causedBy:t,providerIncident:u},l=!n.notifiedOpen&&(!n.pendingSince||a.now.getTime()-n.pendingSince.getTime()>=216e5);(r||l)&&!M(n,a.now)&&!t&&null===n.pending&&V(e)&&(o.pending=r?"repeat":"open"),i.touch.push(o);continue}if(!t._[n.ruleKey].sampled||null===s.sampleAt){d(n);continue}if(!(null===n.lastSampleAt||s.sampleAt.getTime()>n.lastSampleAt.getTime()))continue;let c=n.okStreak+1;c>=2?d(n):i.touch.push({id:n.id,okStreak:c,lastSampleAt:s.sampleAt})}for(let e of n){if("firing"!==e.status||u.has(C(e.rule,e.subject))||a.maintenance.has(e.subject)||e.resourceId&&a.maintenance.has(e.resourceId))continue;let t=o.get(e.rule);if(!t)continue;let n=D(e,a);i.open.push({ruleKey:e.rule,subject:e.subject,resourceId:e.resourceId,accountId:e.accountId,severity:R(t.severity,e.severity),title:e.title,message:e.message,startedAt:a.now,lastSeenAt:a.now,lastSampleAt:e.sampleAt,causedBy:n,providerIncident:e.provider?a.incidents.get(e.provider)??null:null,pending:n||!V(t)?null:"open"})}return i}],211256)},582748,e=>{var t=e.i(89491),n=e.i(960063),r=e.i(800366),s=e.i(326003),a=e.i(843448),i=e.i(647006),o=e.i(328203);e.s(["d",0,function(e,i){let l={id:e.id,name:e.name,state:e.state,sizeBytes:null,sizeLimitBytes:null,lastApiAt:null,cuHours:null,cuLimit:null,readsToday:null,readsLimit:null,quotaExhausted:null};if("supabase_project"===e.kind){let t=(0,s.k)(s.B,e.data),n=(0,o.Z)(t.lastTrafficAt),r=(0,o.Z)(t.trafficAt),i=n??(r&&!t.trafficError?new Date(r.getTime()-6048e5):null);return{...l,provider:"supabase",sizeBytes:t.sizeBytes??null,sizeLimitBytes:a.R,lastApiAt:i}}if("neon_project"===e.kind){let t=(0,s.k)(s.s,e.data),n=(t.branches??[]).map(e=>e.logicalSize).filter(e=>"number"==typeof e);return{...l,provider:"neon",cuHours:null==t.computeSeconds?null:t.computeSeconds/3600,cuLimit:r.a.cuHours,sizeBytes:n.length?n.reduce((e,t)=>e+t,0):null,sizeLimitBytes:r.a.storageBytes}}if("firestore"===e.kind){let t=(0,s.k)(s.w,e.data),r=(0,o.Z)(t.opsAt),a=null!=t.reads&&r&&r.getTime()>=(0,n.a)(i).getTime()?t.reads:null,u=null!=t.latencyMs||null!=t.pingError;return{...l,provider:"firestore",readsToday:a,readsLimit:n.T.reads,quotaExhausted:u?"RESOURCE_EXHAUSTED"===t.pingReason:null}}if("turso_database"===e.kind){let n=(0,s.k)(s.N,e.data),r=(0,t.u)((0,t.G)(n,i));return{...l,provider:"turso",sizeBytes:n.orgStorageBytes??null,sizeLimitBytes:t.g.storageBytes,quotaPct:r?.pct??null,quotaLabel:r?`${r.label} ${r.text}`:null}}if("upstash_redis"===e.kind){let n=(0,s.k)(s.e,e.data),r=(0,t.u)((0,t.$)(n,i));return{...l,provider:"upstash",sizeBytes:n.storageBytes??null,sizeLimitBytes:t.W.storageBytes,quotaPct:r?.pct??null,quotaLabel:r?`${r.label} ${r.text}`:null}}if("d1_database"===e.kind){let n=(0,s.k)(s.x,e.data),r=(0,t.u)((0,t.I)(n,i));return{...l,provider:"d1",sizeBytes:n.sizeBytes??null,sizeLimitBytes:t.M.dbBytes,quotaPct:r?.pct??null,quotaLabel:r?`${r.label} ${r.text}`:null}}return null},"S",0,function(e,t){let n=e.filter(e=>Array.isArray(e.data.records));if(!n.length)return null;let r=e.map(e=>e.name),s=[];for(let e of n){let n=t.filter(t=>(0,o.J)(t.name,r)===e.name.toLowerCase().replace(/\.$/,"")),a=[...new Set(n.flatMap(e=>(0,i.q)(e.data).vercel?.recommendedIps??[]))];for(let t of(0,i.q)(e.data).records){if(!(0,o.l)(t,a))continue;let r=t.name.toLowerCase().replace(/\.$/,""),i=n.find(e=>e.name.toLowerCase().replace(/\.$/,"")===r);s.push({id:`${e.id}:${t.id}`,resourceId:i?.id??e.id,name:t.name,proxied:t.proxied,pointsToVercel:!0})}}return s},"r",0,function(e,t){return e.length||t.length?[...e.map(e=>({id:e.id,name:e.name,tlsNotAfter:null,expiresAt:(0,o.Z)((0,i.q)(e.data).rdap?.expiresAt)})),...t.map(e=>({id:e.id,name:e.name,tlsNotAfter:(0,o.Z)((0,i.q)(e.data).tls?.notAfter),expiresAt:null}))]:null}])},293857,e=>{let t=["status","severity","rule","target","detail","cause","step","since","threshold"],n=["id","en"],r=/\{([a-zA-Z_]+)\}/g;e.s(["I",0,{en:"Test message: Watchbell's sentence about what it saw goes here.",id:"Pesan tes: di sini nanti kalimat Watchbell soal apa yang dilihatnya."},"z",0,"alerts.messageTemplates","_",0,function(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};let s={};for(let[a,i]of Object.entries(e)){if(!i||"object"!=typeof i)continue;let e={};for(let s of n){let n=i[s];"string"==typeof n&&n.trim()&&null===function(e){if(e.length>1e3)return`Keep it under ${1e3.toLocaleString("en-US")} characters.`;for(let[,n]of e.matchAll(r))if(!t.includes(n))return`{${n}} isn't a field. Use ${t.map(e=>`{${e}}`).join(", ")}.`;return null}(n)&&(e[s]=n)}Object.keys(e).length&&(s[a]=e)}return s},"l",0,function(e,t){return e.replace(/\r\n?/g,"\n").replace(/[ \t]+$/gm,"").trim().split("\n").flatMap(e=>{let n=[...e.matchAll(r)].map(e=>e[1]).filter(e=>Object.hasOwn(t,e));return n.length&&n.every(e=>!t[e].trim())?[]:[e.replace(r,(e,n)=>Object.hasOwn(t,n)?t[n]:e)]}).join("\n").replace(/\n{3,}/g,"\n\n").trim()}])},485647,e=>{var t=e.i(875225),n=e.i(349129),r=e.i(518899),s=e.i(924924),a=e.i(618916),i=e.i(582748),o=e.i(794713),l=e.i(274991),u=e.i(826148),d=e.i(390163),c=e.i(662860),p=e.i(764766),f=e.i(433609),m=e.i(800523);async function h(){return(0,s.f)().select({appId:a.links.fromResourceId,dbId:a.links.toResourceId}).from(a.links).where((0,t.u)(a.links.kind,"uses_db")).limit(500)}async function g(e){let g=(0,t.b)((0,t.u)(a.resources.monitored,!0),(0,t.M)(a.resources.goneAt)),[y,v,k,w,b]=await Promise.all([(0,o.d)(),(0,o.D)(),(0,s.f)().select({m:a.monitors,appName:a.resources.name,appMeta:a.resources.meta}).from(a.monitors).innerJoin(a.resources,(0,t.u)(a.resources.id,a.monitors.resourceId)).where((0,t.b)(g,(0,t.u)(a.monitors.paused,!1),(0,t.u)(a.monitors.ownerPaused,!1))),(0,s.f)().select({id:a.resources.id,name:a.resources.name,meta:a.resources.meta}).from(a.resources).where((0,t.b)(g,(0,t.u)(a.resources.kind,"app"))),(0,s.f)().select({id:a.accounts.id,provider:a.accounts.provider,label:a.accounts.label,expiresAt:a.accounts.expiresAt,status:a.accounts.status,lastError:a.accounts.lastError}).from(a.accounts)]),$=k.map(e=>e.m.id),A=$.length?await (0,s.f)().select({id:a.checks.monitorId,n:r.B`count(*)::int`,p95:r.B`percentile_cont(0.95) within group (order by ${a.checks.latencyMs})::float8`}).from(a.checks).where((0,t.b)((0,t.y)(a.checks.monitorId,$),(0,t.B)(a.checks.at,new Date(e.getTime()-6e5)),(0,t.u)(a.checks.inMaintenance,!1))).groupBy(a.checks.monitorId):[],I=w.map(e=>e.id),S=I.length?await (0,s.f)().selectDistinctOn([a.deployments.resourceId],{appId:a.deployments.resourceId,state:a.deployments.state,sha:a.deployments.commitSha,createdAt:a.deployments.createdAtProvider}).from(a.deployments).where((0,t.b)((0,t.y)(a.deployments.resourceId,I),(0,t.u)(a.deployments.target,"production"))).orderBy(a.deployments.resourceId,(0,n.A)(a.deployments.createdAtProvider)):[],x=await (0,s.f)().select({id:a.resources.id,name:a.resources.name,kind:a.resources.kind,state:a.snapshots.state,data:a.snapshots.data}).from(a.resources).innerJoin(a.snapshots,(0,t.u)(a.snapshots.resourceId,a.resources.id)).where((0,t.b)(g,(0,t.y)(a.resources.kind,["supabase_project","neon_project","firestore","turso_database","upstash_redis","d1_database","zone","domain"]))),V=e=>x.filter(t=>t.kind===e),D=x.filter(e=>["supabase_project","neon_project","firestore","turso_database","upstash_redis","d1_database"].includes(e.kind)),R=V("zone"),M=V("domain"),C=await h(),O=await (0,c.Y)().catch(()=>null),T=I.length?await (0,f.a)(I).catch(()=>null):null,B=I.length?await (0,m.F)(I).catch(()=>null):null,N=I.length?await (0,l.f)(I).catch(()=>null):null,E="on"===(0,u.C)()?(0,d.f)(await (0,u.y)().catch(()=>null)):null;return{now:e,lastMinuteRunAt:y,lastAnyRunAt:v,monitors:k.map(({m:e,appName:t,appMeta:n})=>{let r=A.find(t=>t.id===e.id),s="heartbeat"===e.kind;return{id:e.id,appId:e.resourceId,appName:t,url:s?e.name??"heartbeat":e.url,kind:s?"heartbeat":"http",state:e.state,failStreak:e.failStreak,lastStatus:e.lastStatus,lastError:e.lastError,lastCheckedAt:e.lastCheckedAt,p95Last10:r?.p95??null,checksLast10:r?.n??0,movedTo:s?null:(0,p.u)(e.url,{name:t,meta:n},w.filter(t=>t.id!==e.resourceId),{lastError:e.lastError})?.to??null}}),apps:w.map(e=>{let t=S.find(t=>t.appId===e.id);return{id:e.id,name:e.name,latestProduction:t?{state:t.state,sha:t.sha,createdAt:t.createdAt}:null}}),accounts:b,dbs:D.length?D.map(t=>(0,i.d)(t,e)).filter(e=>null!==e):null,domains:(0,i.r)(R,M),dns:(0,i.S)(R,M),links:C,compute:O,deps:T&&T.length?T:null,frameworks:B&&B.length?B:null,ci:N&&N.length?N:null,os:E}}e.s(["f",0,g])},532148,e=>{var t=e.i(875225),n=e.i(349129),r=e.i(518899),s=e.i(924924),a=e.i(618916),i=e.i(278619),o=e.i(658266),l=e.i(211256),u=e.i(293857),d=e.i(275426),c=e.i(154491),p=e.i(485647),f=e.i(739886),m=e.i(111970);let h={vercel:"Vercel",supabase:"Supabase",neon:"Neon",cloudflare:"Cloudflare",firebase:"Firebase",gcp:"Google Cloud"};async function g(){return(await (0,s.f)().select().from(a.alertRules)).filter(e=>(0,i.h)(e.key)).map(e=>({key:e.key,severity:e.severity,threshold:e.threshold,enabled:e.enabled,channels:e.channels}))}async function y(e,n={}){let[r,u,v,k,w,b]=await Promise.all([(0,p.f)(e),g(),(0,s.f)().select().from(a.alerts).where((0,t.M)(a.alerts.resolvedAt)),(0,s.f)().select({provider:a.providerStatus.provider,state:a.providerStatus.state}).from(a.providerStatus),(0,f.f)(),(0,m.I)()]),$=new Map(r.accounts.map(e=>[e.id,e.provider])),A=v.filter(e=>!(0,c.O)(b,e.ruleKey,e.accountId?$.get(e.accountId):null)),I=(0,o.f)(r,u,n.only),S=I.evaluated,x=I.observations.filter(e=>!(0,c.O)(b,e.rule,e.provider)),V=u.find(e=>"CollectorStale"===e.key),D=void 0===r.lastAnyRunAt?r.lastMinuteRunAt:r.lastAnyRunAt,R=!!V?.enabled&&(!D||e.getTime()-D.getTime()>(V.threshold??5)*6e4),M=new Map((r.dbs??[]).filter(e=>"paused"===e.state).map(e=>[e.id,e.name])),C=new Map(r.links.filter(e=>M.has(e.dbId)).map(e=>[e.appId,`DatabasePaused \xb7 ${M.get(e.dbId)}`])),O=new Map(k.filter(e=>"warn"===e.state||"err"===e.state).map(e=>["gcp"===e.provider?"firebase":e.provider,h[e.provider]??e.provider])),T=(0,d.u)(w,r.monitors.map(e=>({id:e.id,appId:e.appId})),e,r.apps.map(e=>e.id)),B=A.filter(e=>(0,i.h)(e.ruleKey)).map(e=>({id:e.id,ruleKey:e.ruleKey,subject:e.subject,okStreak:e.okStreak,lastSampleAt:e.lastSampleAt,silencedUntil:e.silencedUntil,silencedUntilResolved:e.silencedUntilResolved,notifiedOpen:e.notifiedOpen,lastNotifiedAt:e.lastNotifiedAt,pending:e.pending,pendingSince:e.pendingSince})),N=(0,l.f)(B,x,S,u,{now:e,collectorStale:R,mutedApps:C,incidents:O,maintenance:T});return N.open.length||N.touch.length||N.resolve.length?(await (0,s.f)().transaction(async n=>{for(let t of N.open)await n.insert(a.alerts).values({...t,pendingSince:t.pending?e:null}).onConflictDoNothing();for(let r of N.touch){let{id:s,pending:i,...o}=r;await n.update(a.alerts).set({...o,...i?{pending:i,pendingSince:e}:{}}).where((0,t.b)((0,t.u)(a.alerts.id,s),(0,t.M)(a.alerts.resolvedAt)))}for(let r of N.resolve)await n.update(a.alerts).set({resolvedAt:e,pending:r.pending,pendingSince:r.pending?e:null}).where((0,t.b)((0,t.u)(a.alerts.id,r.id),(0,t.M)(a.alerts.resolvedAt)))}),{opened:N.open.length,resolved:N.resolve.length}):{opened:0,resolved:0}}let v=r.B`case ${a.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`;async function k(e=new Set){return(await (0,s.f)().select({a:a.alerts,name:a.resources.name,kind:a.resources.kind}).from(a.alerts).leftJoin(a.resources,(0,t.u)(a.resources.id,a.alerts.resourceId)).where((0,t.b)((0,t.M)(a.alerts.resolvedAt),(0,m.s)(e))).orderBy(v,(0,n.A)(a.alerts.startedAt)).limit(200)).map(({a:e,name:t,kind:n})=>({...e,resourceName:t??null,resourceKind:n??null}))}async function w(){return k(await (0,m.I)())}async function b(e){return(await (0,s.f)().select({id:a.alerts.id,ruleKey:a.alerts.ruleKey,severity:a.alerts.severity,title:a.alerts.title,resourceId:a.alerts.resourceId,startedAt:a.alerts.startedAt,resolvedAt:a.alerts.resolvedAt}).from(a.alerts).where((0,t.b)((0,t.E)(a.alerts.resolvedAt),(0,t.B)(a.alerts.resolvedAt,new Date(e.getTime()-6048e5)))).orderBy((0,n.A)(a.alerts.resolvedAt)).limit(50)).flatMap(e=>e.resolvedAt?[{...e,resolvedAt:e.resolvedAt}]:[])}async function $(){try{let[e]=await (0,s.f)().select({value:a.settings.value}).from(a.settings).where((0,t.u)(a.settings.key,u.z)).limit(1);return(0,u._)(e?.value)}catch{return{}}}e.s(["$",0,y,"q",0,k,"I",0,b,"i",0,w,"w",0,$])},274991,e=>{var t=e.i(875225),n=e.i(924924),r=e.i(618916),s=e.i(479301);async function a(e,i=new Date){var o;let l=e.filter(s.f);return l.length?(o=await (0,n.f)().select({appId:r.appRepos.appId,repo:r.githubRepos.fullName,branch:r.githubRepos.defaultBranch,run:r.githubRepos.actions,checkedAt:r.githubRepos.actionsCheckedAt,goneAt:r.githubRepos.goneAt}).from(r.appRepos).innerJoin(r.githubRepos,(0,t.u)(r.githubRepos.id,r.appRepos.repoId)).where((0,t.y)(r.appRepos.appId,l)),o.filter(e=>e.run&&!e.goneAt).map(e=>({appId:e.appId,repo:e.repo,branch:e.branch,run:e.checkedAt&&i.getTime()-e.checkedAt.getTime()<=1728e5?e.run:null}))):[]}e.s(["f",0,a])},433609,751762,970465,800523,e=>{var t=e.i(90801),n=e.i(875225),r=e.i(349129),s=e.i(518899),a=e.i(924924),i=e.i(618916),o=e.i(921991),l=e.i(547499),u=e.i(479301),d=e.i(32391),c=e.i(804581),p=e.i(891262),f=e.i(581321),m=e.i(413230),h=e.i(455744),g=e.i(971724),y=e.i(105954),v=e.i(206033),k=e.i(455037);let w=h.z.array(g.z.object({name:y.z.string(),type:y.z.string(),sha:y.z.string(),size:v.z.number().optional()}));async function b(e,t,n,r={},s=null){if(!(0,k.M)(t)||!(0,k.c)(n))return{ok:!1,kind:"format",error:"That isn't a repository name or ref."};if(null!==s&&(0,f.Q)(s)!==s)return{ok:!1,kind:"format",error:"That isn't a folder in a repository."};let a=s?s.split("/").map(encodeURIComponent).join("/"):"",i=await (0,k.j)(`/repos/${(0,k.f)(t)}/contents/${a}?ref=${encodeURIComponent(n)}`,e,r);if(!i.ok)return i;let o=w.safeParse(i.data);return o.success?{ok:!0,data:o.data.filter(e=>"file"===e.type&&/^[0-9a-f]{40}$/.test(e.sha)).map(e=>({name:e.name,sha:e.sha,size:e.size??0}))}:{ok:!1,kind:"format",error:"GitHub answered the file list in a format the console doesn't recognise."}}async function $(e,t,n,r={}){if(!(0,k.M)(t)||!(0,k.c)(n))return{ok:!1,kind:"format",error:"That isn't a repository name or branch."};let s=await (0,k.j)(`/repos/${(0,k.f)(t)}/git/ref/heads/${n.split("/").map(encodeURIComponent).join("/")}`,e,r);return s.ok?{ok:!0,data:!0}:"missing"===s.kind?{ok:!0,data:!1}:s}function A(e,t,n,r,s,a={}){return(0,k.V)(e,t,n,r,s,a)}async function I(e,t,n={}){if(!(0,k.M)(t))return{ok:!1,kind:"format",error:"That isn't a repository name."};let r=await (0,k.j)(`/repos/${(0,k.f)(t)}/dependabot/alerts?state=open&ecosystem=npm&per_page=100`,e,n);if(!r.ok)return"scope"===r.kind||"missing"===r.kind?{ok:!0,data:{denied:!0}}:r;let s=(0,m.E)(r.data);return s?{ok:!0,data:{alerts:s}}:{ok:!1,kind:"format",error:"GitHub answered the Dependabot alerts in a format the console doesn't recognise."}}var S=e.i(502240);async function x(){let[e]=await (0,a.f)().select().from(i.accounts).where((0,n.u)(i.accounts.provider,"github")).orderBy((0,r.M)(i.accounts.createdAt)).limit(1);if(!e)return{error:"GitHub isn't connected."};let t=(0,o.V)({ciphertext:e.credentialCiphertext,iv:e.credentialIv},(0,l.f)().OPS_ENCRYPTION_KEY);return t?{token:t,accountId:e.id}:{error:"Can't read the stored GitHub credential. Replace it on Connections."}}async function V(){let[e]=await (0,a.f)().select({value:i.settings.value}).from(i.settings).where((0,n.u)(i.settings.key,"deps.scanAll")).limit(1);return e?.value===!0}let D=e=>{let t=(0,S.w)(e);return{dir:(0,f.Q)((e??{}).rootDirectory),unsupported:(0,f.l)((e??{}).rootDirectoryUnsupported),branch:(0,S.i)((0,S.V)(e),null),...t?{fallback:t}:{}}};async function R(e){let t=[...new Set(e.filter(u.f))],r=new Map;if(!t.length)return r;let s=await (0,a.f)().select({repoId:i.appRepos.repoId,name:i.resources.name,monitored:i.resources.monitored,meta:i.resources.meta}).from(i.appRepos).innerJoin(i.resources,(0,n.u)(i.resources.id,i.appRepos.appId)).where((0,n.b)((0,n.y)(i.appRepos.repoId,t),(0,n.M)(i.resources.goneAt))).limit(1e3);for(let e of(s.sort((e,t)=>Number(!!t.monitored)-Number(!!e.monitored)||(e.name<t.name?-1:+(e.name>t.name))),s))r.has(e.repoId)||r.set(e.repoId,D(e.meta));return r}async function M(){let e={id:i.githubRepos.id,fullName:i.githubRepos.fullName,defaultBranch:i.githubRepos.defaultBranch,scannedAt:i.dependencyScans.scannedAt},t=(0,n.b)((0,n.M)(i.githubRepos.goneAt),(0,n.u)(i.githubRepos.archived,!1)),r=await V()?await (0,a.f)().select(e).from(i.githubRepos).leftJoin(i.dependencyScans,(0,n.u)(i.dependencyScans.repoId,i.githubRepos.id)).where(t).limit(500):await (0,a.f)().selectDistinct(e).from(i.appRepos).innerJoin(i.githubRepos,(0,n.u)(i.githubRepos.id,i.appRepos.repoId)).leftJoin(i.dependencyScans,(0,n.u)(i.dependencyScans.repoId,i.githubRepos.id)).where(t).limit(500),s=r.length?await R(r.map(e=>e.id)):new Map;return(0,m.M)(r.map(e=>{let t=s.get(e.id);return{...e,rootDir:t?.dir??null,rootDirUnsupported:t?.unsupported??null,prodBranch:t?.branch??null,...t?.fallback?{prodFallback:t.fallback}:{}}}))}let C=(e,t)=>e.length>t?`${e.slice(0,t-1)}…`:e;async function O(e,t){let n=new Date;await (0,a.f)().insert(i.dependencyScans).values({repoId:e,...t,updatedAt:n}).onConflictDoUpdate({target:i.dependencyScans.repoId,set:{...t,updatedAt:n}})}async function T(e){return(0,a.f)().select({id:i.dependencyVulns.id,package:i.dependencyVulns.package,installedVersion:i.dependencyVulns.installedVersion,vulnId:i.dependencyVulns.vulnId,severity:i.dependencyVulns.severity,fixedVersion:i.dependencyVulns.fixedVersion,summary:i.dependencyVulns.summary,aliases:i.dependencyVulns.aliases,dev:i.dependencyVulns.dev,direct:i.dependencyVulns.direct,source:i.dependencyVulns.source}).from(i.dependencyVulns).where((0,n.b)((0,n.u)(i.dependencyVulns.repoId,e),(0,n.M)(i.dependencyVulns.resolvedAt))).limit(2e3)}function B(e,t){for(let n of d.a){let r=e.find(e=>e.name===n.path);if(r)return{path:(0,f.H)(t,n.path),kind:n.kind,sha:r.sha}}return null}async function N(e,r,s,o={}){let l=()=>({...o,timeoutMs:Math.max(1e3,Math.min(s-Date.now(),1e4))}),u=async e=>(await O(r.id,{error:C(e,300),scannedAt:new Date}).catch(()=>void 0),{status:"failed",error:e}),h=r.defaultBranch??"HEAD",g=null;for(let t of[r.prodBranch,r.prodFallback]){if(t&&t===r.defaultBranch)break;let n=(0,S.i)(t,r.defaultBranch);if(!n)continue;let s=await $(e,r.fullName,n,l());if(!s.ok)return u(s.error);if(s.data){g=n;break}}let y=null!==g;g&&(h=g);let v=y?`Scanned ${g}, the branch production is built from.`:null,w=(0,f.Q)(r.rootDir),x=w?null:(0,f.l)(r.rootDirUnsupported),V=x?`The Vercel Root Directory "${x}" couldn't be used (Watchbell reads plain folder names, at most 4 deep); scanned the repository root.`:null,D=await b(e,r.fullName,h,l(),w);if(!D.ok)return u(w&&"missing"===D.kind?`The folder ${(0,f.x)(w)} isn't in ${r.fullName} on ${h}.`:D.error);let R=B(D.data,w),M=D.data.find(e=>"package.json"===e.name)??null,E=!1,_=null;if(w&&M&&!R){let t=await b(e,r.fullName,h,l());if(!t.ok)return u(t.error);E=null!==(R=B(_=t.data,null))}let j=R?R.sha:M?`pkg:${M.sha}`:null,L=j&&w?`${w}:${j}${E&&M?`+${M.sha}`:""}`:j&&x?`odd:${j}`:j,P=L&&y?`br:${g}:${L}`:L,[U]=await (0,a.f)().select().from(i.dependencyScans).where((0,n.u)(i.dependencyScans.repoId,r.id)).limit(1),z=new Date;if(!(0,m.U)(U??null,P,z,o.force))return{status:"unchanged"};if(!P){let e=await T(r.id);return e.length&&await (0,a.f)().update(i.dependencyVulns).set({resolvedAt:z}).where((0,n.y)(i.dependencyVulns.id,e.map(e=>e.id))),await O(r.id,{lockfilePath:null,lockfileSha:null,packageCount:0,scannedAt:z,queriedAt:z,error:null,note:C([v,V,`No package.json or lockfile ${w?"in":"at"} ${(0,f.x)(w)}.`].filter(Boolean).join(" "),300)}),{status:"scanned",vulns:0,packages:0,note:"no package.json"}}let H=(0,f.H)(w,"package.json"),q=M?await A(e,r.fullName,H,h,k.$,l()):null;if(q&&!q.ok)return u(q.error);let W=q?.ok&&q.data?(0,d.b)(q.data):null,F=null,J="package-json",K=E&&R?`Scanned ${(0,f.x)(w)} with the repository root's ${R.path} (workspaces).`:null;if(R){if(2e3>s-Date.now())return u("Time budget used before the lockfile was read; the next run tries again.");let t=await A(e,r.fullName,R.path,h,0xf00000,{...o,timeoutMs:Math.max(1e3,Math.min(s-Date.now(),2e4))});if(!t.ok)return u(t.error);let n=!0;if(E&&w&&t.data&&!(0,f.p)(R.kind,t.data,w)){let t=_?.some(e=>"package.json"===e.name)?await A(e,r.fullName,"package.json",h,k.$,l()):null;if(t&&!t.ok)return u(t.error);n=(0,f.F)(t?.data??null,w)}n?(F=t.data?(0,d.D)(R.kind,t.data):null,J=R.kind,F||(K=[K,`${R.path} couldn't be read; the versions come from package.json ranges (approximate).`].filter(Boolean).join(" "))):(K=`The repository root's ${R.path} isn't a workspace that includes ${w}, so the versions come from ${H} ranges (approximate).`,R=null)}if(F){let e=(0,t.m)(F,W);F=e.deps,e.stale.length&&(K=[K,(0,t.M)(e.stale)].filter(Boolean).join(" "))}else F=W?(0,d.e)(W):[],J="package-json",K??=R?null:"No lockfile: the versions come from package.json ranges (approximate).";let Z=await T(r.id),G=[];if(F.length){let e=await (0,p.K)(F,{fetch:o.fetch,deadline:s});if(!e.ok)return u(e.error);let t=(0,m.A)(Z,!0===o.force),n=await (0,p.J)((0,m.z)(F,e.ids,t),{fetch:o.fetch,deadline:s});if(!n.ok)return u(n.error);G=(0,c.i)(F,e.ids,n.map,t)}if(s-Date.now()>1500){let t=await I(e,r.fullName,l());t.ok&&"alerts"in t.data?G=(0,m.R)(G,t.data.alerts,F):t.ok&&(K=[K,"Dependabot alerts aren't readable with this token (optional: Dependabot alerts: Read)."].filter(Boolean).join(" "))}let Y=(0,m.h)(Z,G,(0,d.K)(W));K=[v,V,K].filter(Boolean).join(" ")||null;let Q=new Date;return await (0,a.f)().transaction(async e=>{for(let t of(Y.insert.length&&await e.insert(i.dependencyVulns).values(Y.insert.map(e=>({repoId:r.id,package:e.package,installedVersion:e.installedVersion,vulnId:e.vulnId,aliases:e.aliases,severity:e.severity,fixedVersion:e.fixedVersion,summary:e.summary,direct:e.direct,dev:e.dev,source:e.source,firstSeenAt:Q,lastSeenAt:Q}))).onConflictDoNothing(),Y.update))await e.update(i.dependencyVulns).set({severity:t.severity,fixedVersion:t.fixedVersion,summary:t.summary,aliases:t.aliases,dev:t.dev,direct:t.direct,lastSeenAt:Q}).where((0,n.u)(i.dependencyVulns.id,t.id));Y.resolve.length&&await e.update(i.dependencyVulns).set({resolvedAt:Q}).where((0,n.b)((0,n.y)(i.dependencyVulns.id,Y.resolve),(0,n.M)(i.dependencyVulns.resolvedAt))),await e.insert(i.dependencyScans).values({repoId:r.id,lockfilePath:R?.path??(M?H:null),lockfileSha:P,packageCount:F.length,scannedAt:Q,queriedAt:Q,error:null,note:K?C(K,300):null,updatedAt:Q}).onConflictDoUpdate({target:i.dependencyScans.repoId,set:{lockfilePath:R?.path??(M?H:null),lockfileSha:P,packageCount:F.length,scannedAt:Q,queriedAt:Q,error:null,note:K?C(K,300):null,updatedAt:Q}})}),{status:"scanned",vulns:Y.insert.length+Y.update.length,packages:F.length,note:"package-json"===J?K:null}}async function E(e,t={}){var r,s;let o,l,u,d,c=await x();if("error"in c)return{error:c.error};let{first:p,only:f,skip:m,...h}=t,g=(r=await M(),o=(s={first:p,only:f,skip:m}).only?new Set(s.only):null,l=new Set(s.skip??[]),u=(o?r.filter(e=>o.has(e.id)):r).filter(e=>!l.has(e.id)),d=new Set(s.first??[]),[...u.filter(e=>d.has(e.id)),...u.filter(e=>!d.has(e.id))]),y={scanned:0,unchanged:0,failed:[],left:0,done:[],listed:g.map(e=>e.id)};for(let[t,n]of g.entries()){if(e-Date.now()<4e3){y.left=g.length-t;break}y.done.push(n.id);try{let t=await N(c.token,n,e,h);"scanned"===t.status?y.scanned++:"unchanged"===t.status?y.unchanged++:y.failed.push(`${n.fullName}: ${t.error}`)}catch(e){y.failed.push(`${n.fullName}: ${e instanceof Error?e.name:"error"}`)}}return await (0,a.f)().delete(i.dependencyVulns).where((0,n.b)((0,n.E)(i.dependencyVulns.resolvedAt),(0,n.S)(i.dependencyVulns.resolvedAt,new Date(Date.now()-7776e6)))).catch(()=>void 0),y}let _=async()=>(await (0,a.f)().select({id:i.accounts.id}).from(i.accounts).where((0,n.u)(i.accounts.provider,"github")).limit(1)).length>0;function j(e){let t=e.failed.filter(e=>!/didn't answer in time|no time left|time budget|rate limit/i.test(e)),n=e.failed.length-t.length+(e.left??0);n&&console.info(`deps: ${n} repositor${1===n?"y":"ies"} wait for the next run`);let r=t.slice(0,3);return t.length>3&&r.push(`+${t.length-3} more`),r.length?r.join("; "):null}async function L(e){if(!await _())return null;if(e-Date.now()<4e3)return console.info("deps: no time left today; the scan resumes tomorrow"),null;let t=await E(e);if("error"in t){let e;return(e=t.error,/didn't answer in time|no time left|time budget|rate limit/i.test(e))?null:t.error}return j(t)}async function P(e,t,r={}){let{marked:s,onlyMarked:o}=t;if(!await _())return{problem:null,settled:[...s],done:[],complete:!0};let l=s.filter(u.f),d=l.length?await (0,a.f)().select({appId:i.appRepos.appId,repoId:i.appRepos.repoId}).from(i.appRepos).where((0,n.y)(i.appRepos.appId,l)).limit(5*l.length):[],c=[...new Set(d.map(e=>e.repoId))],p=e=>d.filter(t=>t.appId===e).map(e=>e.repoId),f=s.filter(e=>!p(e).length);if(o&&!c.length)return{problem:null,settled:[...s],done:[],complete:!0};if(e-Date.now()<4e3)return{problem:null,settled:f,done:[],complete:!1};let m=(t.skip??[]).filter(e=>!c.includes(e)),h=await E(e,{...r,first:c,...o?{only:c}:{skip:m}});if("error"in h){let e;return{problem:(e=h.error,/didn't answer in time|no time left|time budget|rate limit/i.test(e))?null:h.error,settled:[...s],done:[],complete:!0}}let g=new Set([...h.done,...c.filter(e=>!h.listed.includes(e))]);return{problem:j(h),settled:s.filter(e=>p(e).every(e=>g.has(e))),done:h.done,complete:0===h.left}}async function U(e){let t=e.filter(u.f);if(!t.length)return[];let r=await (0,a.f)().select({appId:i.appRepos.appId,repoId:i.appRepos.repoId,error:i.dependencyScans.error}).from(i.appRepos).innerJoin(i.dependencyScans,(0,n.u)(i.dependencyScans.repoId,i.appRepos.repoId)).where((0,n.b)((0,n.y)(i.appRepos.appId,t),(0,n.E)(i.dependencyScans.scannedAt)));if(!r.length)return[];let s=await (0,a.f)().select({repoId:i.dependencyVulns.repoId,package:i.dependencyVulns.package,installedVersion:i.dependencyVulns.installedVersion,fixedVersion:i.dependencyVulns.fixedVersion,severity:i.dependencyVulns.severity,summary:i.dependencyVulns.summary,dev:i.dependencyVulns.dev,direct:i.dependencyVulns.direct}).from(i.dependencyVulns).where((0,n.b)((0,n.y)(i.dependencyVulns.repoId,[...new Set(r.map(e=>e.repoId))]),(0,n.M)(i.dependencyVulns.resolvedAt))).limit(1e4);return r.map(e=>({appId:e.appId,repoId:e.repoId,error:e.error,vulns:s.filter(t=>t.repoId===e.repoId).map(e=>({package:e.package,installedVersion:e.installedVersion,fixedVersion:e.fixedVersion,severity:e.severity,summary:e.summary,dev:e.dev,direct:e.direct}))}))}async function z(e,t=new Set){let r=e.filter(u.f),o=new Map;if(!r.length)return o;let l=await (0,a.f)().select({appId:i.appRepos.appId,repoId:i.appRepos.repoId}).from(i.appRepos).where((0,n.y)(i.appRepos.appId,r));if(!l.length)return o;let d=await (0,a.f)().select({repoId:i.dependencyVulns.repoId,package:i.dependencyVulns.package,installedVersion:i.dependencyVulns.installedVersion,fixedVersion:i.dependencyVulns.fixedVersion,vulnId:i.dependencyVulns.vulnId,aliases:i.dependencyVulns.aliases,severity:i.dependencyVulns.severity,direct:i.dependencyVulns.direct}).from(i.dependencyVulns).where((0,n.b)((0,n.y)(i.dependencyVulns.repoId,[...new Set(l.map(e=>e.repoId))]),(0,n.M)(i.dependencyVulns.resolvedAt),(0,n.u)(i.dependencyVulns.direct,!0),(0,n.E)(i.dependencyVulns.fixedVersion))).limit(2e3),c=d.some(e=>"next"===e.package)?new Set((await (0,a.f)().selectDistinct({appId:i.dependencyPrs.appId}).from(i.dependencyPrs).where((0,n.b)((0,n.y)(i.dependencyPrs.appId,r),(0,n.$)(i.dependencyPrs.stage,["merged","closed"]),(0,n.B)(i.dependencyPrs.openedAt,new Date(Date.now()-12096e5)),s.B`${i.dependencyPrs.packages} @> '["next"]'::jsonb`)).limit(r.length)).map(e=>e.appId)):new Set;for(let e of l){let n=t.has(e.appId)||c.has(e.appId);(0,m.B)(d.filter(t=>t.repoId===e.repoId&&!(n&&"next"===t.package))).length&&o.set(e.appId,e.repoId)}return o}e.s(["R",0,4e4,"o",0,12e3,"d",0,4e3,"e",0,L,"O",0,P,"C",0,z,"a",0,U],433609);var H=e.i(442473);function q(e){let t=e instanceof Error&&e.cause instanceof Error?e.cause:e,n=(t instanceof Error?t.message:"").split("\n")[0].replace(/Bearer\s+\S+/gi,"Bearer [hidden]").trim()||"failed";return n.length>200?`${n.slice(0,200)}…`:n}e.s(["f",0,q],751762);var W=e.i(656083);let F=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?`,J="[\"'`]";function K(e){let t=/^(\d+)\.\d+\.\d+(?:-[0-9A-Za-z.]+)?$/.exec(e);return null!==t&&Number(t[1])>=9&&1e3>Number(t[1])}let Z={"&":"&",""":'"',"'":"'","'":"'","/":"/","/":"/"},G=e=>e.replace(/&(?:amp|quot|#39|#x27|#x2F|#47);/gi,e=>Z[e]??Z[e.toLowerCase()]??e),Y=RegExp(String.raw`\bnext\s*=\s*\{\s*version\s*:\s*${J}(${F})${J}`,"g"),Q=RegExp(String.raw`version\s*:\s*${J}(${F})${J}\s*,\s*appDir\s*:`,"g"),X=RegExp(String.raw`appDir\s*:\s*[^,{}()]{1,16},\s*version\s*:\s*${J}(${F})${J}`,"g"),ee=/\bnext\s*=\s*\{\s*version\s*(?::\s*([A-Za-z_$][\w$]*)\s*)?[,}]/g,et=e=>e.replace(/[$]/g,"\\$");var en=e.i(267485);async function er(e,t,n={}){let r=n.deadline??1/0,s=n.now??(()=>new Date),a=e=>Math.floor(Math.min(e,r)-Date.now()),i=Date.now()+15e3;if(0>=a(i))return null;let o=(e,n)=>({version:t?.version??null,status:e,findings:t?.findings??[],reason:n,checkedAt:s()}),l=(e,t)=>(0,H.K)(e,{maxBytes:3145728,timeoutMs:a(i),lookup:n.lookup,fetch:n.fetch,userAgent:"OpsConsole-Security/1.0 (+https://watchbell.west-solutions.web.id)",sameOrigin:t}),u=await l(`https://${e}/`,"www");if(!u.ok&&u.error===H.l)return o("unknown","the site redirects to another host");if(!u.ok||200!==u.status)return Date.now()>=r?null:o("error",`Couldn't load the site: ${u.ok?`HTTP ${u.status}`:u.error}`);let d=(function(e,t){let n;try{n=new URL(t)}catch{return[]}let r=new Set,s=[];for(let t of e.matchAll(/<script\b[^>]*?\ssrc\s*=\s*(["'])(.*?)\1/gi)){let e;try{e=new URL(G(t[2].trim()),n)}catch{continue}if("https:"===e.protocol&&e.origin===n.origin&&e.pathname.startsWith("/_next/static/")&&(e.hash="",!r.has(e.href))){var a;r.add(e.href),s.push({href:e.href,rank:(a=e.pathname,/\/main-app[-.]/.test(a)?0:/\/(main|app-index)[-.]/.test(a)?1:/\/(webpack|polyfills|framework)[-.]/.test(a)?3:2),i:s.length})}}return s.sort((e,t)=>e.rank-t.rank||e.i-t.i).map(e=>e.href)})(u.body,u.url).slice(0,12);if(0===d.length)return o("unknown",u.body.includes("/_next/")?"version not exposed":"not a Next.js site");let c=null,p=0,f=!1;for(let e of d){if(0>=a(i)){f=!0;break}let t=await l(e,!0);if(t.ok&&200===t.status&&(p++,c=function(e){for(let t of e.matchAll(Y))if(K(t[1]))return t[1];for(let t of[Q,X])for(let n of e.matchAll(t))if(K(n[1]))return n[1];for(let t of e.matchAll(ee)){let n=t[1]??"version",r=RegExp(String.raw`(?:^|[^\w$.])${et(n)}\s*=\s*${J}(${F})${J}`,"g"),s=null;for(let n of e.matchAll(r)){if((n.index??0)>=(t.index??0))break;s=n[1]}if(s&&K(s))return s}return null}(t.body)))break}if(!c)return Date.now()>=r?null:f||0>=a(i)?o("error","Reading the site's scripts took longer than 15 s"):0===p?o("error","Couldn't load the site's scripts"):o("unknown","version not exposed");let m=a(Date.now()+1e4);if(m<=0)return null;let h=await (0,en.y)(c,{timeoutMs:m,fetch:n.fetch});return h.ok?{version:c,status:h.findings.length?"vulnerable":"ok",findings:h.findings,reason:null,checkedAt:s()}:Date.now()>=r?null:o("error",h.error)}e.s(["y",0,35e3,"P",0,er,"F",0,function(e,t){return Math.min(t+35e3,e+55e3)}],970465);var es=e.i(7494),ea=e.i(764766),ei=e.i(195191),eo=e.i(146394);function el(e){return{version:e.version,status:e.status,findings:Array.isArray(e.findings)?e.findings:[],reason:e.reason,checkedAt:e.checkedAt}}async function eu(e={}){let t=e.only;if(t&&!t.length)return[];let r=e.first??[],o=e.skip??[],l=await (0,a.f)().select({id:i.resources.id,name:i.resources.name,meta:i.resources.meta,sec:i.appSecurity}).from(i.resources).leftJoin(i.appSecurity,(0,n.u)(i.appSecurity.resourceId,i.resources.id)).where((0,n.b)((0,n.u)(i.resources.kind,"app"),(0,n.u)(i.resources.monitored,!0),(0,n.M)(i.resources.goneAt),t?(0,n.y)(i.resources.id,t):void 0,o.length?(0,n.$)(i.resources.id,[...o]):void 0)).orderBy(...r.length?[s.B`case when ${(0,n.y)(i.resources.id,r)} then 0 else 1 end`]:[],s.B`${i.appSecurity.checkedAt} asc nulls first`,i.resources.name).limit(eo.O.apps);if(!l.length)return[];r.length&&l.sort((e,t)=>Number(!r.includes(e.id))-Number(!r.includes(t.id)));let u=await (0,a.f)().select({resourceId:i.monitors.resourceId,url:i.monitors.url}).from(i.monitors).where((0,n.y)(i.monitors.resourceId,l.map(e=>e.id))).orderBy(i.monitors.createdAt).limit(eo.O.monitors);return l.map(e=>({id:e.id,name:e.name,prev:e.sec?el(e.sec):null,host:(0,ea.Y)(e.meta)?.primaryDomain??(0,ei.m)(e.name,u.filter(t=>t.resourceId===e.id).map(e=>e.url))}))}async function ed(e,t){await (0,a.f)().transaction(async r=>{await r.execute(s.B`select pg_advisory_xact_lock(hashtext(${`app_security:${e.id}`}))`);let[a]=await r.select().from(i.appSecurity).where((0,n.u)(i.appSecurity.resourceId,e.id)).limit(1),o=a?el(a):null;if(o&&o.checkedAt.getTime()>=t.checkedAt.getTime())return;let l="unknown"===t.status||"error"===t.status?{...t,version:o?o.version:t.version,findings:o?o.findings:t.findings}:t,u={framework:"next",version:l.version,status:l.status,findings:l.findings,reason:l.reason,checkedAt:l.checkedAt};await r.insert(i.appSecurity).values({resourceId:e.id,...u}).onConflictDoUpdate({target:i.appSecurity.resourceId,set:u,setWhere:s.B`${i.appSecurity.checkedAt} < excluded.checked_at`});let d=(0,es.t)(e.name,o,l);d&&await (0,W.f)([{type:"system",kind:d.kind,message:d.message,detail:d.detail,resourceId:e.id,at:l.checkedAt,reason:"ok"===d.kind?"NextClean":"NextVulnerable"}],r)})}async function ec(e,t={}){let n=await eu(t),r=0,s=0,a=[],i=[],o=[];return await (0,H.P)(n,3,async t=>{if(e-Date.now()<3e3)return void s++;o.push(t.id);try{let n=await er(t.host,t.prev,{deadline:e});if(!n)return void s++;await ed(t,n),r++,i.push(t.id)}catch(e){a.push(`${t.name}: ${q(e)}`),i.push(t.id)}}),{checked:r,skipped:s,failed:a,done:i,listed:n.map(e=>e.id),started:o}}async function ep(e){let t=e.filter(u.f);return t.length?(await (0,a.f)().select().from(i.appSecurity).where((0,n.y)(i.appSecurity.resourceId,t)).limit(t.length)).map(e=>{let t=el(e);return{appId:e.resourceId,version:t.version,status:t.status,findings:t.findings}}):[]}e.s(["F",0,ep,"h",0,ec,"Z",0,el],800523)},826148,123862,e=>{var t=e.i(874533),n=e.i(912714),r=e.i(875225),s=e.i(924924),a=e.i(618916),i=e.i(77193);function o(e){let t=e.trim(),n=0,r=t.indexOf(":");r>0&&/^\d+$/.test(t.slice(0,r))&&(n=Number(t.slice(0,r)),t=t.slice(r+1));let s=t.lastIndexOf("-");return s>=0?[n,t.slice(0,s),t.slice(s+1)]:[n,t,""]}function l(e){return void 0===e?0:"~"===e?-1:/[A-Za-z]/.test(e)?e.charCodeAt(0):e.charCodeAt(0)+256}function u(e,t){let n=0,r=0;for(;n<e.length||r<t.length;){for(;n<e.length&&!/\d/.test(e[n])||r<t.length&&!/\d/.test(t[r]);){let s=n<e.length&&!/\d/.test(e[n])?e[n]:void 0,a=r<t.length&&!/\d/.test(t[r])?t[r]:void 0,i=l(s)-l(a);if(0!==i)return i;void 0!==s&&n++,void 0!==a&&r++}let s="",a="";for(;n<e.length&&/\d/.test(e[n]);)s+=e[n++];for(;r<t.length&&/\d/.test(t[r]);)a+=t[r++];if(s=s.replace(/^0+/,""),a=a.replace(/^0+/,""),s.length!==a.length)return s.length-a.length;if(s!==a)return s<a?-1:1}return 0}function d(e,t){let[n,r,s]=o(e),[a,i,l]=o(t);return n!==a?n-a:u(r,i)||u(s,l)}e.s(["f",0,d],123862);let c=e=>e.replace(/^linux-signed(-|$)/,"linux$1"),p=e=>/^linux-meta(-|$)/.test(e),f="OSV.dev sent an answer we couldn't read.";async function m(e,t,n=fetch){let r={};for(let s=0;s<t.length;s+=1e3){let a,i,o=t.slice(s,s+1e3),l=o.map(t=>({package:{name:t.name,ecosystem:e},version:t.version}));try{let e=await n("https://api.osv.dev/v1/querybatch",{method:"POST",body:JSON.stringify({queries:l}),headers:{"content-type":"application/json"},signal:AbortSignal.timeout(3e4)});if(!e.ok)return{ok:!1,error:`OSV.dev answered HTTP ${e.status}.`};a=await e.text()}catch{return{ok:!1,error:"OSV.dev didn't answer in time."}}if(a.length>8388608)return{ok:!1,error:"OSV.dev sent too large an answer."};try{i=JSON.parse(a)}catch{return{ok:!1,error:f}}let u=i?.results;if(!Array.isArray(u)||u.length!==o.length)return{ok:!1,error:f};u.forEach((e,t)=>{let n=e?.vulns,s=Array.isArray(n)?n.length:0;s&&(r[o[t].name]=(r[o[t].name]??0)+s)})}return{ok:!0,counts:r}}let h=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),g=e=>Array.isArray(e)?e:[],y=e=>"string"==typeof e&&e.trim()?e.trim():null,v=e=>{let t=e.replace(/\s+/g," ").trim(),n=t.search(/\.\s/);return(n>20?t.slice(0,n+1):t).slice(0,200)},k="Ubuntu's security API sent an answer we couldn't read.",w=e=>{let t=new Set;return e.filter(e=>!t.has(e.cve)&&(t.add(e.cve),!0))};async function b(e,t,n,r,s=fetch){let a=[];for(let i=0;i<10;i++){let o,l,u,c=`https://ubuntu.com/security/cves.json?package=${encodeURIComponent(e)}&version=${encodeURIComponent(t)}&status=released&limit=20&offset=${20*i}&order=newest`;try{if(!(o=await s(c,{headers:{accept:"application/json","user-agent":"Watchbell (self-hosted)"},signal:AbortSignal.timeout(15e3)})).ok)return{ok:!1,error:`Ubuntu's security API answered HTTP ${o.status}.`};l=await o.text()}catch{return{ok:!1,error:"Ubuntu's security API didn't answer in time."}}if(l.length>2097152)return{ok:!1,error:"Ubuntu's security API sent too large an answer."};try{u=JSON.parse(l)}catch{return{ok:!1,error:k}}let p=function(e,t,n){if(!h(e)||!Array.isArray(e.cves))return null;let r=[];for(let s of e.cves){if(!h(s))continue;let e=y(s.id);if(!e||!/^CVE-\d{4}-\d{4,}$/.test(e))continue;let a=g(s.packages).filter(e=>h(e)&&e.name===t).flatMap(e=>g(e.statuses)).find(e=>h(e)&&e.release_codename===n);r.push({cve:e,priority:y(s.priority),cvss3:"number"==typeof s.cvss3&&Number.isFinite(s.cvss3)?s.cvss3:null,status:a?y(a.status):null,version:a?y(a.description):null,usns:g(s.notices_ids).map(y).filter(e=>!!e&&/^USN-\d+-\d+$/.test(e)),summary:v(y(s.ubuntu_description)??y(s.description)??"")})}return r}(u,e,t);if(null===p)return{ok:!1,error:k};if(a.push(...function(e,t,n){return e.filter(e=>"released"===e.status&&null!==e.version&&d(e.version,t)>0&&0>=d(e.version,n))}(p,n,r)),p.length<20)return{ok:!0,fixes:w(a)}}return{ok:!1,error:"Ubuntu lists more fixed CVEs for this package than Watchbell reads (200); see Ubuntu's page.",fixes:w(a)}}let $={critical:4,high:3,medium:2,low:1,negligible:0},A=e=>Math.max(-1,...e.fixes.map(e=>e.cvss3??-1)),I=e=>Math.max(-1,...e.fixes.map(e=>$[e.priority??""]??-1)),S="Not checked: the scan ran out of time.";async function x(e,t,n){let r=Array(e.length),s=0;return await Promise.all(Array.from({length:Math.min(t,e.length)},async()=>{for(;s<e.length;){let t=s++;r[t]=await n(e[t])}})),r}let V=e=>/^linux(-signed|-meta)?(-|$)/.test(e)&&!/^linux-(base|firmware|libc-dev|tools-common)$/.test(e);async function D(e,t,n,r={}){var s,a;let i=r.deadline??Date.now()+75e3,o={status:"ok",system:null,ecosystem:null,codename:null,packages:0,kernel:null,updates:[],backlog:{counts:{},total:0,error:null},aptListsAgeHours:null,scannedAt:n.toISOString(),error:null};if("linux"!==e.platform)return{...o,status:"unsupported",error:`OS checks run on Ubuntu for now; this machine is ${e.platform}.`};let l=function(e){let t={};for(let n of e.split(/\r?\n/)){let e=/^([A-Z_][A-Z0-9_]*)=(.*)$/.exec(n.trim());e&&(t[e[1]]=e[2].replace(/^(["'])(.*)\1$/,"$2"))}if(!t.ID)return null;let n=t.PRETTY_NAME||[t.NAME,t.VERSION].filter(Boolean).join(" ")||t.ID;return{id:t.ID.toLowerCase(),versionId:t.VERSION_ID||null,codename:t.VERSION_CODENAME||t.UBUNTU_CODENAME||null,pretty:n,lts:/\bLTS\b/.test(`${t.VERSION??""} ${n}`)}}(await e.readFile("/etc/os-release")??"");if(!l)return{...o,status:"unsupported",error:"OS checks run on Ubuntu for now; this system has no /etc/os-release."};if(o.system=l.pretty,"ubuntu"!==l.id)return{...o,status:"unsupported",error:"debian"===l.id?"OS checks run on Ubuntu for now; Debian is next.":`OS checks run on Ubuntu for now; this system is ${l.pretty}.`};let u=l.versionId?"ubuntu"===l.id&&/^\d{2}\.\d{2}$/.test(l.versionId)?`Ubuntu:${l.versionId}${l.lts?":LTS":""}`:"debian"===l.id&&/^\d+/.test(l.versionId)?`Debian:${l.versionId.split(".")[0]}`:null:null;if(!u||!l.codename)return{...o,status:"unsupported",error:`Watchbell can't name this Ubuntu release (${l.pretty}).`};o.ecosystem=u,o.codename=l.codename;let f=await e.exec("dpkg-query",["-W",`-f=$\{Package} $\{Version} $\{source:Package} $\{source:Version} $\{db:Status-Abbrev}
|
|
2
|
+
`]);if(!f.ok)return{...o,status:"error",error:`Couldn't list the installed packages (${f.error}).`};let h=function(e){let t=[];for(let n of e.split(/\r?\n/)){let[e,r,s,a,i]=n.split(" ");e?.trim()&&r?.trim()&&t.push({name:e.trim(),version:r.trim(),source:s?.trim()||e.trim(),sourceVersion:a?.trim()||r.trim(),installed:void 0===i||/^[ih]i/.test(i.trim())})}return t}(f.stdout),g=h.filter(e=>e.installed);o.packages=g.length;let y=new Map(g.map(e=>[e.name,e])),v=(await e.readFile("/proc/sys/kernel/osrelease"))?.trim()||null,k=g.filter(e=>/^linux-image-(unsigned-)?\d/.test(e.name)),w=v?k.find(e=>e.name===`linux-image-${v}`||e.name===`linux-image-unsigned-${v}`):void 0,$=k.map(e=>e.sourceVersion).sort(d).at(-1)??null,R=(s=await e.readFile("/var/run/reboot-required"),a=await e.readFile("/var/run/reboot-required.pkgs"),null===s?{needed:!1,packages:[]}:{needed:!0,packages:[...new Set((a??"").split(/\r?\n/).map(e=>e.trim()).filter(Boolean))]}),M=await e.exec("apt",["list","--upgradable"]);if(!M.ok)return{...o,status:"error",error:`Couldn't read the waiting updates (${M.error}).`};let C=function(e){let t=[];for(let n of e.split(/\r?\n/)){let e=/^([^/\s]+)\/(\S+)\s+(\S+)\s+\S+\s+\[upgradable from: ([^\]]+)\]/.exec(n.trim());if(!e)continue;let r=e[2].split(",").filter(Boolean);t.push({name:e[1],candidate:e[3],installed:e[4].trim(),pockets:r,security:r.some(e=>/-security$/.test(e))})}return t}(M.stdout),O=C.find(e=>/^linux-image-/.test(e.name));o.kernel={running:v,runningVersion:w?.sourceVersion??null,newestInstalled:$,reboot:R,update:O?{package:O.name,candidate:O.candidate}:null};let T=new Map,B=new Set;for(let e of C){let t=y.get(e.name),n=t?.source??e.name;if(V(n))continue;t&&t.version!==t.sourceVersion&&B.add(n);let r=T.get(n)??{source:n,binaries:[],installed:e.installed,candidate:e.candidate,pockets:[],security:!1,fixes:[],error:null};r.binaries.push(e.name),0>d(e.installed,r.installed)&&(r.installed=e.installed),d(e.candidate,r.candidate)>0&&(r.candidate=e.candidate),r.pockets=[...new Set([...r.pockets,...e.pockets])],r.security||=e.security,T.set(n,r)}let N=RegExp(`^${l.codename.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(-(updates|security|backports|proposed))?$`);o.updates=(await x([...T.values()],4,async e=>{if(e.binaries.sort(),!e.pockets.some(e=>N.test(e)))return e;if(B.has(e.source))return{...e,error:`Its package and source versions differ, so Watchbell can't match Ubuntu's fixes; see Ubuntu's page for ${e.source}.`};if(Date.now()>i)return{...e,error:S};try{let n=await b(e.source,l.codename,e.installed,e.candidate,t);return n.ok?{...e,fixes:n.fixes}:{...e,fixes:n.fixes??[],error:n.error}}catch{return{...e,error:"Ubuntu's security API sent an answer we couldn't read."}}})).sort((e,t)=>A(t)-A(e)||I(t)-I(e)||Number(t.security)-Number(e.security)||e.source.localeCompare(t.source));let E=(function(e,t){let n=e.filter(e=>e.installed),r=t?n.find(e=>e.name===`linux-image-${t}`||e.name===`linux-image-unsigned-${t}`):void 0,s=r?{name:c(r.source),version:r.sourceVersion}:null,a=new Map;for(let e of n){if(p(e.source))continue;let t=c(e.source);if(s&&t===s.name&&e.sourceVersion!==s.version)continue;let n=`${t} ${e.sourceVersion}`,r=a.get(n)??{name:t,version:e.sourceVersion,binaries:[],kernel:s?t===s.name:"linux"===t};r.binaries.push(e.name),a.set(n,r)}return[...a.values()].map(e=>({...e,binaries:[...new Set(e.binaries)].sort()})).sort((e,t)=>e.name.localeCompare(t.name)||e.version.localeCompare(t.version))})(h,v).filter(e=>!e.kernel&&!V(e.name)&&!T.has(e.name)),_=Date.now()>i?{ok:!1,error:S}:E.length?await m(u,E.map(e=>({name:e.name,version:e.version})),t):{ok:!0,counts:{}};o.backlog=_.ok?{counts:_.counts,total:Object.values(_.counts).reduce((e,t)=>e+t,0),error:null}:{counts:{},total:0,error:_.error};let j=await e.mtime("/var/lib/apt/periodic/update-success-stamp");return o.aptListsAgeHours=j?Math.max(0,Math.round((n.getTime()-j.getTime())/36e5)):null,o}let R="os_scan";function M(e=process.env){let t=(0,i.c)(e);return"cloud"===t?"off-cloud":"demo"===t?"demo":"on"}function C(e){return"object"!=typeof e||null===e?null:["ok","error","unsupported"].includes(e.status??"")&&"string"==typeof e.scannedAt&&Array.isArray(e.updates)&&"object"==typeof e.backlog?e:null}let O={platform:process.platform,readFile:e=>(0,n.readFile)(e,"utf8").catch(()=>null),mtime:e=>(0,n.stat)(e).then(e=>e.mtime).catch(()=>null),exec:(e,n)=>new Promise(r=>{(0,t.execFile)(e,n,{timeout:3e4,maxBuffer:0x1000000,env:{...process.env,LC_ALL:"C"}},(t,n)=>{r(t?{ok:!1,error:"ENOENT"===t.code?`${e} isn't installed`:t.message.split("\n")[0].slice(0,160)}:{ok:!0,stdout:n})})})},T={state:()=>M(),scan:()=>D(O,fetch,new Date),read:async()=>(await (0,s.f)().select({value:a.settings.value}).from(a.settings).where((0,r.u)(a.settings.key,R)).limit(1))[0]?.value??null,write:async e=>{await (0,s.f)().insert(a.settings).values({key:R,value:e}).onConflictDoUpdate({target:a.settings.key,set:{value:e,updatedAt:new Date}})}};async function B(e=T){return C(await e.read())}async function N(e=T){let t=e.state();if("off-cloud"===t)return{ok:!1,error:"OS checks are part of the self-hosted edition."};if("demo"===t)return{ok:!1,error:"Scanning is off in the demo."};let n=await e.scan(),r=C(await e.read()),s="error"===n.status&&r&&"ok"===r.status?{...r,error:n.error,failedAt:n.scannedAt}:n;return await e.write(s),{ok:!0,data:s}}e.s(["y",0,B,"C",0,M,"W",0,N],826148)},111970,e=>{var t=e.i(875225),n=e.i(518899),r=e.i(347540),s=e.i(924924),a=e.i(473283),i=e.i(618916),o=e.i(659846),l=e.i(154491),u=e.i(960049);let d=["supabase_project","neon_project","firestore","turso_database","upstash_redis","d1_database"],c=e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}},p=(0,r.cache)(async()=>{let e=n.B.join(d.map(e=>n.B`${e}`),n.B`, `),t=await (0,s.f)().execute(n.B`select
|
|
3
|
+
(select coalesce(jsonb_agg(distinct ${i.accounts.provider}::text), '[]'::jsonb) from ${i.accounts}) as providers,
|
|
4
|
+
exists(select 1 from ${i.resources} where ${i.resources.kind}::text in (${e}) and ${i.resources.goneAt} is null) as databases,
|
|
5
|
+
${(0,u.W)()} as off`),[r]=(0,a.f)(t),p=c(r?.providers);return{providers:(Array.isArray(p)?p:[]).filter(e=>o.f.includes(e)),databases:r?.databases===!0||r?.databases==="t",off:(0,l.N)(c(r?.off))}});async function f(){try{return(0,l.I)((await p()).off)}catch{return new Set}}e.s(["s",0,function(e){let r=function(e){if(!e.size)return;let{ruleKeys:r,providers:s}=(0,l.s)(e),a=[];if(r.length&&a.push(n.B`${i.alerts.ruleKey} in (${n.B.join(r.map(e=>n.B`${e}`),n.B`, `)})`),s.length){let e=n.B.join(s.map(e=>n.B`${e}`),n.B`, `);a.push(n.B`(${i.alerts.ruleKey} = 'CredentialExpiring' and ${i.alerts.accountId} in (select ${i.accounts.id} from ${i.accounts} where ${i.accounts.provider}::text in (${e})))`)}return a.length?(0,t.F)(...a):void 0}(e);return r?(0,t.R)(r):void 0},"I",0,f])},960049,e=>{var t=e.i(875225),n=e.i(518899),r=e.i(924924),s=e.i(618916);e.i(154491);var a=e.i(273083);let i={checks:[3,7,14],rollupsHourly:[60,90,180],storedLogs:[3,7,14],deployments:[30,45,60,90],events:[60,90,180],alerts:[60,90,180],collectorRuns:[7,14,30],recommendationDismissals:[30,90,180]},o=Object.keys(i),l=(e,t)=>"number"==typeof t&&i[e].includes(t);async function u(e){let[n]=await (0,r.f)().select({value:s.settings.value}).from(s.settings).where((0,t.u)(s.settings.key,e)).limit(1);return n?.value??null}let d=async()=>(function(e){let t={...a.f};if(!e||"object"!=typeof e)return t;for(let n of o){let r=e[n];l(n,r)&&(t[n]=r)}return t})(await u("retention.days"));e.s(["l",0,()=>u("notify.language"),"J",0,d,"W",0,()=>n.B`(select ${s.settings.value} from ${s.settings} where ${s.settings.key} = ${"sections.off"})`],960049)},662860,e=>{var t=e.i(875225),n=e.i(924924),r=e.i(755776),s=e.i(618916),a=e.i(921991),i=e.i(867274),o=e.i(547499);let l="Supabase Metrics API",u=null,d={fetchMetrics:async function e(t,n,r={}){let s;if(!("string"==typeof t&&/^[a-z0-9]{8,40}$/.test(t)))return{ok:!1,kind:"format",error:"That isn't a Supabase project ref."};let a=r.timeoutMs??8e3;try{s=await (r.fetch??fetch)(`https://${t}.supabase.co/customer/v1/privileged/metrics`,{headers:{Authorization:`Basic ${Buffer.from(`service_role:${n}`).toString("base64")}`,Accept:"text/plain"},signal:AbortSignal.timeout(a),cache:"no-store",redirect:"manual"})}catch(e){return{ok:!1,kind:"transient",error:e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name)?`${l} didn't answer within ${Math.round(a/1e3)} seconds.`:`Couldn't reach the ${l}.`}}if(401===s.status||403===s.status)return{ok:!1,kind:"auth",status:s.status,error:`Supabase rejected the metrics key (${s.status}). Replace it with a current Secret API key.`};if(404===s.status)return{ok:!1,kind:"missing",status:404,error:"Supabase has no metrics endpoint for this project (404)."};if(429===s.status)return{ok:!1,kind:"transient",status:429,retryAfterS:60,error:`${l} says there were too many requests.`};if(!s.ok)return{ok:!1,kind:"transient",status:s.status,error:`${l} returned an error (${s.status}).`};let i=await s.text().catch(()=>null);return null===i||i.length>4e6||!/^(#|[A-Za-z_:])/m.test(i)?{ok:!1,kind:"format",error:`${l} answered in a format the console doesn't recognise.`}:{ok:!0,data:i}},key:()=>(0,o.f)().OPS_ENCRYPTION_KEY},c=e=>e instanceof Error?e.name:"unknown";async function p(e,a,o=d){if(!(0,i.T)(e,u))return null;u=e.getTime();let l=0,f=0;try{for(let{k:i,ref:u,state:d}of(await (0,n.f)().select({k:r.A,ref:s.resources.externalId,state:s.snapshots.state}).from(r.A).innerJoin(s.resources,(0,t.u)(s.resources.id,r.A.resourceId)).leftJoin(s.snapshots,(0,t.u)(s.snapshots.resourceId,s.resources.id)).where((0,t.b)((0,t.u)(s.resources.kind,"supabase_project"),(0,t.u)(s.resources.monitored,!0),(0,t.M)(s.resources.goneAt))).limit(20))){let t=a-Date.now()-500;if(t<1e3)break;try{await m(i,u,d,e,Math.min(8e3,t),o)?l++:f++}catch(e){f++,console.warn("supabase-metrics: one project failed:",c(e))}}await (0,n.f)().delete(r.l).where((0,t.S)(r.l.hour,new Date(e.getTime()-24*i.x*36e5)))}catch(e){console.warn("supabase-metrics failed:",c(e))}return{scraped:l,failed:f}}async function f(e,s,a){return await (0,n.f)().update(r.A).set({lastTryAt:s,lastError:a.slice(0,300)}).where((0,t.u)(r.A.resourceId,e)),!1}async function m(e,s,o,l,u,d){if("paused"===o)return f(e.resourceId,l,"The project is paused.");let c=(0,a.V)({ciphertext:e.keyCiphertext,iv:e.keyIv},d.key());if(!c)return f(e.resourceId,l,"The stored key can't be read. Add it again.");let p=await d.fetchMetrics(s,c,{timeoutMs:u});if(!p.ok)return f(e.resourceId,l,p.error);let m=(0,i.E)(e.latest??null,(0,i.c)((0,i.a)(p.data),s),l);await (0,n.f)().update(r.A).set({latest:m,lastTryAt:l,lastOkAt:l,lastError:null}).where((0,t.u)(r.A.resourceId,e.resourceId));let h=(0,i.b)(l),[g]=await (0,n.f)().select().from(r.l).where((0,t.b)((0,t.u)(r.l.resourceId,e.resourceId),(0,t.u)(r.l.hour,h))).limit(1),y=(0,i.n)(g??null,m);return await (0,n.f)().insert(r.l).values({resourceId:e.resourceId,hour:h,...y}).onConflictDoUpdate({target:[r.l.resourceId,r.l.hour],set:y}),!0}async function h(){let e=await (0,n.f)().select({id:s.resources.id,name:s.resources.name,latest:r.A.latest}).from(r.A).innerJoin(s.resources,(0,t.u)(s.resources.id,r.A.resourceId)).where((0,t.b)((0,t.u)(s.resources.kind,"supabase_project"),(0,t.u)(s.resources.monitored,!0),(0,t.M)(s.resources.goneAt))).limit(20);return e.length?e.map(e=>({id:e.id,name:e.name,latest:e.latest??null})):null}e.s(["Y",0,h,"E",0,p],662860)},89491,e=>{let t={databases:100,storageBytes:0x140000000,rowsRead:5e8,rowsWritten:1e7},n={storageBytes:262144e3,monthlyCommands:5e5,monthlyBandwidthBytes:0x280000000},r={databases:10,dbBytes:524288e3,accountBytes:0x140000000,rowsReadPerDay:5e6,rowsWrittenPerDay:1e5},s=(e,t)=>Math.round(e/t*1e3)/10,a=(e,t)=>!!e&&e.slice(0,7)===t.toISOString().slice(0,7);e.s(["M",0,r,"g",0,t,"W",0,n,"I",0,function(e,t){let n=e.usageDay===t.toISOString().slice(0,10);return[...n&&null!=e.accountRowsRead?[{label:"Rows read today",pct:s(e.accountRowsRead,r.rowsReadPerDay),text:"of 5M (account)",kind:"quota"}]:[],...n&&null!=e.accountRowsWritten?[{label:"Rows written today",pct:s(e.accountRowsWritten,r.rowsWrittenPerDay),text:"of 100k (account)",kind:"quota"}]:[],...null!=e.sizeBytes?[{label:"Size",pct:s(e.sizeBytes,r.dbBytes),text:"of 500 MB",kind:"storage"}]:[]]},"c",0,function(e){return(e.accountRowsRead??0)>=r.rowsReadPerDay?{state:"err",label:"Daily rows-read limit reached"}:(e.accountRowsWritten??0)>=r.rowsWrittenPerDay?{state:"err",label:"Daily rows-written limit reached"}:{state:"ok",label:"Available"}},"u",0,function(e){return e.filter(e=>"quota"===e.kind&&null!==e.pct).sort((e,t)=>(t.pct??0)-(e.pct??0))[0]??null},"G",0,function(e,n){return a(e.usageAt,n)?[...null!=e.orgRowsRead?[{label:"Rows read",pct:s(e.orgRowsRead,t.rowsRead),text:"of 500M this month (org)",kind:"quota"}]:[],...null!=e.orgRowsWritten?[{label:"Rows written",pct:s(e.orgRowsWritten,t.rowsWritten),text:"of 10M this month (org)",kind:"quota"}]:[],...null!=e.orgStorageBytes?[{label:"Storage",pct:s(e.orgStorageBytes,t.storageBytes),text:"of 5 GB (org)",kind:"storage"}]:[]]:[]},"h",0,function(e){return e.blockReads||e.orgBlockedReads?{state:"err",label:"Reads blocked"}:e.blockWrites||e.orgBlockedWrites?{state:"err",label:"Writes blocked"}:{state:"ok",label:"Available"}},"$",0,function(e,t){let r=a(e.statsAt,t);return[...r&&null!=e.monthlyRequests?[{label:"Commands",pct:s(e.monthlyRequests,n.monthlyCommands),text:"of 500k this month",kind:"quota"}]:[],...r&&null!=e.monthlyBandwidthBytes?[{label:"Bandwidth",pct:s(e.monthlyBandwidthBytes,n.monthlyBandwidthBytes),text:"of 10 GB this month",kind:"quota"}]:[],...null!=e.storageBytes?[{label:"Data size",pct:s(e.storageBytes,n.storageBytes),text:"of 250 MB",kind:"storage"}]:[]]},"t",0,function(e){let t=(e??"").toLowerCase();return"active"===t?{state:"ok",label:"Active"}:t.includes("suspend")||t.includes("block")||t.includes("disabled")?{state:"err",label:"Suspended"}:t.includes("delet")?{state:"off",label:"Deleting"}:{state:"unknown",label:e?`State: ${e}`:"Unknown"}}])},960063,e=>{e.s(["T",0,{reads:5e4,writes:2e4,deletes:2e4},"g",0,function(e){var t;if(e.ok)return e.data.noDatabase?{state:"off",label:"No Firestore database"}:{state:"ok",label:`Reachable \xb7 ${e.data.latencyMs} ms`};return"RESOURCE_EXHAUSTED"===(t=e).reason?{state:"err",label:"Daily quota used up"}:"SERVICE_DISABLED"===t.reason?{state:"err",label:"Firestore API is off in this project"}:"scope"===t.kind||"PERMISSION_DENIED"===t.reason||"scope"===t.reason?{state:"err",label:"No access: needs datastore.viewer"}:{state:"unknown",label:"Unknown"}},"a",0,function(e){let t=new Intl.DateTimeFormat("en-US",{timeZone:"America/Los_Angeles",hour:"numeric",minute:"numeric",second:"numeric",hourCycle:"h23"}).formatToParts(e),n=e=>Number(t.find(t=>t.type===e)?.value??0),r=(3600*n("hour")+60*n("minute")+n("second"))*1e3+e.getUTCMilliseconds();return new Date(e.getTime()-r)}])},90801,e=>{var t=e.i(250474),n=e.i(32391);let r=/^v?(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function s(e,n){let s=r.exec(e.trim()),a=r.exec(n.trim());return!!s&&!!a&&s[1]===a[1]&&("0"!==s[1]||s[2]===a[2])&&(0,t.f)(n,e)>=0}let a=/^Watch(?:bell|post): update (?:\S+ (?:to|ke) \S+|\d+ vulnerable packages) in ((?:[A-Za-z0-9._-]+\/){0,3}[A-Za-z0-9._-]+) \(/,i=e=>a.exec(e)?.[1]??null;e.s(["M",0,e=>`Lockfile tertinggal — jalankan npm install (${e.slice(0,5).join(", ")}${e.length>5?`, +${e.length-5}`:""}).`,"a",0,function(e,t,n){if(!e.length)return{ok:!1,why:"nothing"};let r=e.filter(e=>n.includes(e.severity)&&!("moderate"===e.severity&&e.dev));if(!r.length)return{ok:!1,why:"severity"};for(let e of r){let n=t.get(e.package);if(!n||!s(n,e.to))return{ok:!1,why:"major"}}return{ok:!0,upgrades:r}},"m",0,function(e,r){if(!r)return{deps:e,stale:[]};let s=[...Object.entries(r.dependencies).map(([e,t])=>[e,t,!1]),...Object.entries(r.optionalDependencies).map(([e,t])=>[e,t,!1]),...Object.entries(r.devDependencies).map(([e,t])=>[e,t,!0])],a=[...e],i=[];for(let[e,r,o]of s){let s=(0,n.Y)(r);if(!s||!(0,n.C)(s))continue;let l=a.filter(t=>t.name===e);!l.length||l.some(e=>(0,t.f)(e.version,s)>=0)||((a=a.filter(t=>t.name!==e)).push({name:e,version:s,dev:l.every(e=>e.dev)&&o}),i.push(e))}return{deps:a,stale:i}},"D",0,function(e){let n=new Map;for(let r of e){if(!r.direct)continue;let e=n.get(r.package);(!e||0>(0,t.f)(r.installedVersion,e))&&n.set(r.package,r.installedVersion)}return n},"U",0,function(e,t,n=null){for(let r of t){if(i(r.title)!==n)continue;let t=function(e){if(e.packages?.length)return e.packages;let t=/^Watch(?:bell|post): update (\S+) (?:to|ke) /.exec(e.title);return t?[t[1]]:"all"}(r);if("all"===t||e.some(e=>t.includes(e)))return r}return null},"J",0,s])},32391,e=>{let t=/^(?:@[a-z0-9][a-z0-9._~-]*\/)?[a-z0-9._~-][a-z0-9._~-]*$/i,n=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,r=e=>e.length<=214&&t.test(e),s=e=>e.length<=100&&n.test(e),a=e=>"object"==typeof e&&null!==e&&!Array.isArray(e);function i(e){let t=new Map;for(let n of e){if(!r(n.name)||!s(n.version))continue;let e=`${n.name}@${n.version}`,a=t.get(e);if(a?a.dev=a.dev&&n.dev:t.set(e,{...n}),t.size>=1e4)break}return[...t.values()].sort((e,t)=>e.name===t.name?e.version<t.version?-1:1:e.name<t.name?-1:1)}function o(e){try{return JSON.parse(e)}catch{return null}}let l=e=>{let t=e.lastIndexOf("node_modules/");return t<0?null:e.slice(t+13)||null},u=e=>e.trim().replace(/^['"]|['"]$/g,""),d=e=>a(e)?Object.fromEntries(Object.entries(e).filter(e=>"string"==typeof e[1])):{};function c(e){let t=/^\s*(?:\^|~|>=|=|v)?\s*v?(\d+)(?:\.(\d+|x|\*))?(?:\.(\d+|x|\*))?(-[0-9A-Za-z.-]+)?\s*$/.exec(e);if(!t)return null;let n=e=>e&&/^\d+$/.test(e)?e:"0";return`${t[1]}.${n(t[2])}.${n(t[3])}${t[4]??""}`}e.s(["a",0,[{path:"package-lock.json",kind:"npm"},{path:"npm-shrinkwrap.json",kind:"npm"},{path:"pnpm-lock.yaml",kind:"pnpm"},{path:"yarn.lock",kind:"yarn"},{path:"bun.lock",kind:"bun"}],"e",0,function(e){let t=[],n=(e,n)=>{for(let[r,s]of Object.entries(e)){let e=c(s);e&&t.push({name:r,version:e,dev:n})}};return n(e.dependencies,!1),n(e.optionalDependencies,!1),n(e.devDependencies,!0),i(t)},"K",0,function(e){return e?new Set([...Object.keys(e.dependencies),...Object.keys(e.devDependencies),...Object.keys(e.optionalDependencies)]):new Set},"L",0,r,"C",0,s,"Y",0,c,"D",0,function(e,t){switch(e){case"npm":let n=o(t);if(!a(n))return null;let s=[];if(a(n.packages)){for(let[e,t]of Object.entries(n.packages)){if(!e||!a(t)||!0===t.link||"string"!=typeof t.version)continue;let n="string"==typeof t.name&&e.includes("node_modules/")?t.name:l(e);n&&s.push({name:n,version:t.version,dev:!0===t.dev})}return i(s)}if(a(n.dependencies)){let e=(t,n)=>{if(!(n>40))for(let[r,i]of Object.entries(t))a(i)&&("string"==typeof i.version&&s.push({name:r,version:i.version,dev:!0===i.dev}),a(i.dependencies)&&e(i.dependencies,n+1))};return e(n.dependencies,0),i(s)}return null;case"pnpm":return function(e){let t=e.split(/\r?\n/);if(!t.some(e=>/^lockfileVersion:/.test(e)))return null;let n=[],s=!1,a=null;for(let e of t){if(/^\S/.test(e)){s=/^packages:\s*$/.test(e),a=null;continue}if(!s)continue;let t=/^ {2}(\S.*?):\s*$/.exec(e);if(t){let e=function(e){let t=u(e).replace(/^\//,""),n=t.indexOf("(");n>0&&(t=t.slice(0,n));let s=t.lastIndexOf("@");if(s>0&&!t.slice(s+1).includes("/")&&r(t.slice(0,s)))return{name:t.slice(0,s),version:t.slice(s+1).split("_")[0]};let a=t.lastIndexOf("/");return a<=0?null:{name:t.slice(0,a),version:t.slice(a+1).split("_")[0]}}(t[1]);(a=e?{...e,dev:!1}:null)&&n.push(a);continue}a&&/^ {4}dev: true\s*$/.test(e)&&(a.dev=!0)}return i(n)}(t);case"yarn":return function(e){let t=e.split(/\r?\n/),n=[],r=null,s=!1;for(let e of t){if(!e.trim()||e.trimStart().startsWith("#"))continue;if(/^\S/.test(e)){let t=e.replace(/:\s*$/,"");r=t.startsWith("__metadata")||/@(?:workspace|link|portal|file):/.test(t)?null:function(e){let t=u(e),n=t.indexOf("@",+!!t.startsWith("@"));return n>0?t.slice(0,n):null}(t.split(/,\s*/)[0]),s=!0;continue}let t=/^ {2}version:?\s+"?([^"\s]+)"?\s*$/.exec(e);t&&r&&(n.push({name:r,version:t[1],dev:!1}),r=null)}return s?i(n):null}(t);case"bun":let d=o(t.replace(/,(\s*[}\]])/g,"$1"));if(!a(d)||!a(d.packages))return null;let c=[];for(let e of Object.values(d.packages)){if(!Array.isArray(e)||"string"!=typeof e[0])continue;let t=e[0],n=t.lastIndexOf("@");n<=0||c.push({name:t.slice(0,n),version:t.slice(n+1),dev:!1})}return i(c)}},"b",0,function(e){let t=o(e);return a(t)?{dependencies:d(t.dependencies),devDependencies:d(t.devDependencies),optionalDependencies:d(t.optionalDependencies)}:null}])},891262,267485,e=>{var t=e.i(442473),n=e.i(804581),r=e.i(7494),s=e.i(250474);let a=["CRITICAL","HIGH","MODERATE","LOW","UNKNOWN"],i=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),o=e=>Array.isArray(e)?e:[],l=e=>"string"==typeof e&&e?e:null,u=e=>i(e.package)&&"next"===e.package.name&&"npm"===e.package.ecosystem,d="OSV.dev sent an answer we couldn't read";async function c(e,m={}){let h=m.timeoutMs??1e4,g=m.maxBytes??2097152,y=AbortSignal.timeout(h),v=(0,t.X)(y),k=`OSV.dev didn't answer within ${f(h)}`,w=[],b=null;for(let n=0;n<3;n++){var $;let n,r;try{n=await (m.fetch??fetch)("https://api.osv.dev/v1/query",{method:"POST",headers:{"content-type":"application/json","user-agent":"OpsConsole-Security/1.0 (+https://watchbell.west-solutions.web.id)"},body:JSON.stringify({package:{name:"next",ecosystem:"npm"},version:e,...b?{page_token:b}:{}}),redirect:"error",cache:"no-store",signal:y})}catch(e){return{ok:!1,error:p(e)?k:"Couldn't reach OSV.dev"}}if(!n.ok)return await n.body?.cancel().catch(()=>void 0),{ok:!1,error:`OSV.dev answered HTTP ${n.status}`};try{let{bytes:e,truncated:s}=await (0,t.z)(n,g,v);if(s)return{ok:!1,error:"OSV.dev sent too large an answer"};r=JSON.parse(new TextDecoder().decode(e))}catch(e){return{ok:!1,error:p(e)?k:d}}let s=i($=r)?void 0===$.vulns?[]:Array.isArray($.vulns)?$.vulns:null:null;if(null===s)return{ok:!1,error:d};if(w.push(...s),!(b=i(r)?l(r.next_page_token):null))break}let A=function(e,t){let d=[],c=0;for(let r of e){if(!i(r))continue;let e=l(r.id);e&&(c++,r.withdrawn||d.push({id:e.slice(0,64),cve:o(r.aliases).map(l).find(e=>!!e&&/^CVE-\d{4}-\d+$/.test(e))??null,summary:(l(r.summary)??"").replace(/\s+/g," ").trim().slice(0,200),severity:function(e){let t=i(e.database_specific)?l(e.database_specific.severity)?.toUpperCase():void 0;return"MEDIUM"===t?"MODERATE":a.includes(t??"")?t:"UNKNOWN"}(r),score:function(e){for(let t of o(e.severity))if(i(t)&&"CVSS_V3"===t.type){let e=(0,n.v)(l(t.score)??"");if(null!==e)return e}return null}(r),fixed:function(e,t){let n=null;for(let r of o(e))if(i(r)&&u(r))for(let e of o(r.ranges)){if(!i(e)||"SEMVER"!==e.type&&"ECOSYSTEM"!==e.type)continue;let r=null;for(let a of o(e.events)){if(!i(a))continue;let e=l(a.introduced),o=l(a.fixed);e?r=e:o&&null!==r?((0,s.f)(t,r)>=0&&0>(0,s.f)(t,o)&&(null===n||0>(0,s.f)(o,n))&&(n=o),r=null):(l(a.last_affected)||l(a.limit))&&(r=null)}}return n}(r.affected,t)}))}return e.length>0&&0===c?null:(0,r.I)(d).slice(0,50)}(w,e);return null===A?{ok:!1,error:d}:{ok:!0,findings:A}}let p=e=>e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name),f=e=>e<1e3?`${e} ms`:`${Math.round(e/1e3)} s`;e.s(["y",0,c,"t",0,p],267485);let m="OpsConsole-Deps/1.0 (+https://watchbell.west-solutions.web.id)";async function h(e,t,n,r){let s=r.deadline-Date.now();if(s<500)return{ok:!1,error:"No time left for OSV.dev"};let a=AbortSignal.timeout(s);return y(e,{method:"POST",headers:{"content-type":"application/json","user-agent":m},body:JSON.stringify(t),signal:a},n,a,r)}async function g(e,t,n){let r=n.deadline-Date.now();if(r<500)return{ok:!1,error:"No time left for OSV.dev"};let s=AbortSignal.timeout(Math.min(r,8e3));return y(e,{method:"GET",headers:{"user-agent":m},signal:s},t,s,n)}async function y(e,n,r,s,a){let i;try{i=await (a.fetch??fetch)(e,{...n,redirect:"error",cache:"no-store"})}catch(e){return{ok:!1,error:p(e)?"OSV.dev didn't answer in time":"Couldn't reach OSV.dev"}}if(!i.ok)return await i.body?.cancel().catch(()=>void 0),{ok:!1,error:`OSV.dev answered HTTP ${i.status}`};try{let{bytes:e,truncated:n}=await (0,t.z)(i,r,(0,t.X)(s));if(n)return{ok:!1,error:"OSV.dev sent too large an answer"};return{ok:!0,body:JSON.parse(new TextDecoder().decode(e))}}catch(e){return{ok:!1,error:p(e)?"OSV.dev didn't answer in time":"OSV.dev sent an answer we couldn't read"}}}async function v(e,t){let r=[];for(let s of(0,n.f)(e)){let e=await h(n.n,s,4194304,t);if(!e.ok)return e;let a=(0,n.j)(e.body,s.queries.length);if(!a)return{ok:!1,error:"OSV.dev sent an answer we couldn't read"};r.push(...a)}return{ok:!0,ids:r}}async function k(e,t){let r=[...new Set(e)].filter(n.G);if(r.length>300)return{ok:!1,error:`Too many advisories to read in one scan (${r.length})`};let s=new Map,a=null;for(let e=0;e<r.length&&!a;e+=8)await Promise.all(r.slice(e,e+8).map(async e=>{let r=await g(`${n.W}${encodeURIComponent(e)}`,1048576,t),i=r.ok?(0,n.O)(r.body):null;i?s.set(e,i):a??=r.ok?"OSV.dev sent an advisory we couldn't read":r.error}));return a?{ok:!1,error:a}:{ok:!0,map:s}}e.s(["J",0,k,"K",0,v],891262)},804581,e=>{var t=e.i(250474);let n=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),r=e=>Array.isArray(e)?e:[],s=e=>"string"==typeof e&&e?e:null,a=e=>/^[A-Za-z0-9][A-Za-z0-9._:-]{1,63}$/.test(e),i={CRITICAL:"critical",HIGH:"high",MODERATE:"moderate",MEDIUM:"moderate",LOW:"low"};function o(e){let t,n=/^CVSS:3\.[01]\/(.+)$/.exec(e.trim());if(!n)return null;let r={};for(let e of n[1].split("/")){let[t,n]=e.split(":");t&&n&&(r[t]=n)}let s={N:.85,A:.62,L:.55,P:.2},a={L:.77,H:.44},i={N:.85,R:.62},o={H:.56,L:.22,N:0},l="C"===r.S,u=l?{N:.85,L:.68,H:.5}:{N:.85,L:.62,H:.27};if(![s[r.AV],a[r.AC],u[r.PR],i[r.UI],o[r.C],o[r.I],o[r.A]].every(e=>"number"==typeof e)||"U"!==r.S&&"C"!==r.S)return null;let d=1-(1-o[r.C])*(1-o[r.I])*(1-o[r.A]),c=l?7.52*(d-.029)-3.25*(d-.02)**15:6.42*d,p=8.22*s[r.AV]*a[r.AC]*u[r.PR]*i[r.UI];return c<=0?0:(t=Math.round(1e5*Math.min(l?1.08*(c+p):c+p,10)))%1e4==0?t/1e5:(Math.floor(t/1e4)+1)/10}let l=e=>e>=9?"critical":e>=7?"high":e>=4?"moderate":e>0?"low":"unknown",u=(e,t)=>n(e.package)&&e.package.name===t&&"npm"===e.package.ecosystem;e.s(["S",0,20,"n",0,"https://api.osv.dev/v1/querybatch","W",0,"https://api.osv.dev/v1/vulns/","h",0,200,"f",0,function(e){let t=[];for(let n=0;n<e.length;n+=1e3)t.push({queries:e.slice(n,n+1e3).map(e=>({package:{name:e.name,ecosystem:"npm"},version:e.version}))});return t},"v",0,o,"i",0,function(e,a,i,o=new Map){let l=[];return e.forEach((e,d)=>{for(let c of a[d]??[]){let a=o.get(`${e.name}@${e.version}|${c}`);if(a){l.push({...a,dev:e.dev});continue}let d=i.get(c);d&&!d.withdrawn&&l.push({package:e.name,installedVersion:e.version,vulnId:d.id,aliases:d.aliases,severity:d.severity,fixedVersion:function(e,a,i){let o=null;for(let l of r(e))if(n(l)&&u(l,a))for(let e of r(l.ranges)){if(!n(e)||"SEMVER"!==e.type&&"ECOSYSTEM"!==e.type)continue;let a=null;for(let l of r(e.events)){if(!n(l))continue;let e=s(l.introduced),r=s(l.fixed);e?a=e:r&&null!==a?((0,t.f)(i,a)>=0&&0>(0,t.f)(i,r)&&(null===o||0>(0,t.f)(r,o))&&(o=r),a=null):(s(l.last_affected)||s(l.limit))&&(a=null)}}return o}(d.affected,e.name,e.version),summary:d.summary,dev:e.dev,source:"osv"})}}),l},"G",0,a,"O",0,function(e){if(!n(e))return null;let t=s(e.id);return t&&a(t)?{id:t,aliases:[...new Set(r(e.aliases).map(s).filter(e=>!!e&&a(e)))].slice(0,20),summary:(s(e.summary)??s(e.details)?.split(/\n/)[0]??"").replace(/\s+/g," ").trim().slice(0,200),severity:function(e){let t=n(e.database_specific)?s(e.database_specific.severity)?.toUpperCase():null;if(t&&i[t])return i[t];for(let t of r(e.severity)){if(!n(t)||"CVSS_V3"!==t.type&&"CVSS_V31"!==t.type)continue;let e=s(t.score)?o(s(t.score)):null;if(null!==e)return l(e)}return(s(e.id)??"").startsWith("MAL-")?"critical":"unknown"}(e),withdrawn:!!s(e.withdrawn),affected:e.affected}:null},"j",0,function(e,t){return n(e)&&Array.isArray(e.results)&&e.results.length===t?e.results.map(e=>n(e)?r(e.vulns).map(e=>n(e)?s(e.id):null).filter(e=>!!e&&a(e)):[]):null}])},413230,e=>{var t=e.i(250474),n=e.i(32391),r=e.i(804581);let s=["critical","high","moderate","low","unknown"],a=e=>s.indexOf(e),i=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),o=e=>"string"==typeof e&&e?e:null,l={critical:"critical",high:"high",medium:"moderate",moderate:"moderate",low:"low"},u=e=>`${e.package}@${e.installedVersion}|${e.vulnId}`,d=e=>{let t;return!e.dev&&(a(e.severity)<=a("high")||(t=e.summary,/\bRCE\b|remote code execution/i.test(t))||"moderate"===e.severity&&!0===e.direct)};e.s(["g",0,function(e){let t=e.filter(d);return t.some(e=>{let t;return"critical"===e.severity||(t=e.summary,/\bRCE\b|remote code execution/i.test(t))})?"critical":t.length?"warning":null},"L",0,function(e){let t=e.filter(d),n=[...t].sort((e,t)=>a(e.severity)-a(t.severity)||(e.package<t.package?-1:1)),r=[];for(let e of n){let t=`${e.package} ${e.installedVersion}${e.fixedVersion?` → ${e.fixedVersion}`:" (no fix yet)"}`;r.includes(t)||r.push(t)}let s=new Set(t.map(e=>e.package)).size,i=function(e){let t={critical:0,high:0,moderate:0,low:0,unknown:0};for(let n of e)t[n.severity]++;return t}(t),o=["critical","high","moderate","low","unknown"].filter(e=>i[e]>0).map(e=>`${i[e]} ${e}`).join(", "),l=`${s} vulnerable package${1===s?"":"s"} (${o}): ${r.slice(0,4).join(", ")}${r.length>4?`, +${r.length-4} more`:""}.`;return l.length>300?`${l.slice(0,299)}…`:l},"z",0,function(e,t,n){let r=new Set;return e.forEach((e,s)=>{for(let a of t[s]??[])n.has(`${e.name}@${e.version}|${a}`)||r.add(a)}),[...r]},"A",0,function(e,t){let n=new Map;if(t)return n;for(let t of e)t.fixedVersion&&"dependabot"!==t.source&&n.set(u(t),{package:t.package,installedVersion:t.installedVersion,vulnId:t.vulnId,aliases:t.aliases,severity:t.severity,fixedVersion:t.fixedVersion,summary:t.summary,dev:t.dev,source:"osv"});return n},"R",0,function(e,n,r){let s=[...e];for(let e of n)if(!s.some(t=>t.package===e.package&&(t.vulnId===e.ghsaId||t.aliases.includes(e.ghsaId)||null!==e.cveId&&t.aliases.includes(e.cveId)))&&e.range)for(let n of r)n.name===e.package&&function(e,n){let r=n.split(",").map(e=>e.trim()).filter(Boolean);return!!r.length&&r.every(n=>{let r=/^(<=|>=|<|>|=)\s*v?(\S+)$/.exec(n);if(!r)return!1;let s=(0,t.f)(e,r[2]);return"<"===r[1]?s<0:"<="===r[1]?s<=0:">"===r[1]?s>0:">="===r[1]?s>=0:0===s})}(n.version,e.range)&&s.push({package:e.package,installedVersion:n.version,vulnId:e.ghsaId,aliases:e.cveId?[e.cveId]:[],severity:e.severity,fixedVersion:e.fixed,summary:e.summary,dev:e.dev||n.dev,source:"dependabot"});return s},"E",0,function(e){if(!Array.isArray(e))return null;let t=[];for(let s of e){if(!i(s)||"open"!==s.state||!i(s.dependency)||!i(s.security_advisory))continue;let e=i(s.dependency.package)&&"npm"===s.dependency.package.ecosystem?o(s.dependency.package.name):null,a=o(s.security_advisory.ghsa_id);if(!e||!(0,n.L)(e)||!a||!(0,r.G)(a))continue;let u=i(s.security_vulnerability)?s.security_vulnerability:{},d=i(u.first_patched_version)?o(u.first_patched_version.identifier):null,c=o(s.security_advisory.cve_id);t.push({package:e,ghsaId:a,cveId:c&&/^CVE-\d{4}-\d+$/.test(c)?c:null,summary:(o(s.security_advisory.summary)??"").replace(/\s+/g," ").trim().slice(0,r.h),severity:l[(o(u.severity)??o(s.security_advisory.severity)??"").toLowerCase()]??"unknown",range:o(u.vulnerable_version_range),fixed:d&&d.length<=100?d:null,dev:"development"===s.dependency.scope})}return t},"h",0,function(e,t,n){let s=new Map(e.map(e=>[u(e),e])),a=new Set,i={insert:[],update:[],resolve:[]};for(let e of t){let t=u(e);if(a.has(t))continue;a.add(t);let o={...e,aliases:e.aliases.slice(0,r.S),summary:e.summary.slice(0,r.h),direct:n.has(e.package)},l=s.get(t);l?i.update.push({id:l.id,severity:o.severity,fixedVersion:o.fixedVersion,summary:o.summary,aliases:o.aliases,dev:o.dev,direct:o.direct}):i.insert.push(o)}return i.resolve=e.filter(e=>!a.has(u(e))).map(e=>e.id),i},"U",0,function(e,t,n,r=!1){return!!r||!e||!e.scannedAt||(e.error?n.getTime()-e.scannedAt.getTime()>=72e6||e.lockfileSha!==t:e.lockfileSha!==t||!e.queriedAt||n.getTime()-e.queriedAt.getTime()>=6048e5)},"M",0,function(e){return[...e].sort((e,t)=>(e.scannedAt?.getTime()??-1)-(t.scannedAt?.getTime()??-1)||(e.id<t.id?-1:1))},"B",0,function(e){let n=new Map,r=new Set;for(let s of e){if(!s.direct||!s.fixedVersion||0>=(0,t.f)(s.fixedVersion,s.installedVersion))continue;!0!==s.dev&&r.add(s.package);let e=n.get(s.package)??{package:s.package,to:s.fixedVersion,vulnIds:[],cves:[],severity:s.severity};for(let n of((0,t.f)(s.fixedVersion,e.to)>0&&(e.to=s.fixedVersion),e.vulnIds.includes(s.vulnId)||e.vulnIds.push(s.vulnId),s.aliases))/^CVE-/.test(n)&&!e.cves.includes(n)&&e.cves.push(n);a(s.severity)<a(e.severity)&&(e.severity=s.severity),n.set(s.package,e)}for(let e of n.values())r.has(e.package)||(e.dev=!0);return[...n.values()].sort((e,t)=>a(e.severity)-a(t.severity)||(e.package<t.package?-1:1))}])},479301,e=>{let t=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;e.s(["f",0,e=>"string"==typeof e&&t.test(e)])},911191,e=>{let t=[[/(?:\b|(?<=%2F))hb(?:_|%5F)[0-9a-f]{32}\b/gi,"hb_[hidden]"],[/(\/api(?:\/|%2F)ping(?:\/|%2F))(?!hb_\[hidden\])[^/?#\s]+/gi,"$1[hidden]"],[/\b(postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|rediss):\/\/\S+/gi,"$1://[hidden]"],[/\b(https?):\/\/[^\s/@:]+:[^\s/@]+@/gi,"$1://[hidden]@"],[/\b(Bearer|Basic)\s+[^\s"',;]+/gi,"$1 [hidden]"],[/\b((?:access_|refresh_|id_)?token|secret|password|passwd|pwd|api[_-]?key|apikey|authorization|cookie|session|private_key)(["']?\s*[:=]\s*["']?)(?!Bearer\b|Basic\b)([^\s"'&,;}]+)/gi,"$1$2[hidden]"],[/\beyJ[\w-]{8,}\.[\w-]{8,}\.[\w-]{8,}/g,"[jwt]"],[/\b[\w.+-]+@[\w-]+(?:\.[\w-]+)+\b/g,"[email]"],[/\b[A-Fa-f0-9]{40,}\b/g,"[redacted]"],[/\b(?=[A-Za-z0-9_-]*\d)(?=[A-Za-z0-9_-]*[A-Za-z])[A-Za-z0-9_-]{40,}\b/g,"[redacted]"]];function n(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}e.s(["l",0,n,"n",0,function(e){return null===e?null:n(e.split(/[?#]/)[0]||"/",512)},"h",0,function(e){return t.reduce((e,[t,n])=>e.replace(t,n),e)}])},390163,e=>{var t=e.i(123862);e.s(["f",0,function(e){var n;let r;if(!e||"ok"!==e.status||!e.system)return null;let s=(n=e.updates,r=e=>e.security||e.fixes.length>0||null!==e.error,{security:n.filter(r),other:n.filter(e=>!r(e))}).security,a=s.some(e=>null!==e.error),i=s.filter(e=>e.fixes.length).map(e=>{let t=[...e.fixes].sort((e,t)=>(t.cvss3??-1)-(e.cvss3??-1));return{source:e.source,score:t[0].cvss3,cves:t.map(e=>e.cve)}}),o=e.kernel,l=o?.newestInstalled&&o.runningVersion&&(0,t.f)(o.newestInstalled,o.runningVersion)>0?{installed:o.newestInstalled,running:o.runningVersion}:null;return{system:e.system,updates:i,kernelWaiting:l,partial:a}}])},659846,e=>{e.s(["f",0,["vercel","supabase","neon","firebase","turso","upstash","cloudflare","github","github_write"]],659846)},154491,e=>{let t=["home","hosting","database","devops","manage"],n=["hosting","database","devops"],r={vercel:"hosting",cloudflare:"hosting",supabase:"database",neon:"database",firebase:"database",turso:"database",upstash:"database",github:"devops",github_write:"devops"};function s(e){return Array.isArray(e)?t.filter(r=>"string"==typeof r&&t.includes(r)&&n.includes(r)&&e.includes(r)):[]}let a={MonitorDown:"hosting",HighLatency:"hosting",DeploymentFailed:"hosting",CertExpiringSoon:"hosting",DomainExpiringSoon:"hosting",DnsProxiedToVercel:"hosting",DatabasePaused:"database",StorageAlmostFull:"database",NeonComputeHigh:"database",FirestoreQuotaHigh:"database",AutoPauseRisk:"database",ComputeHigh:"database",DbQuotaHigh:"database",VulnerableDependency:"devops",FrameworkVulnerable:"hosting",CiFailing:"devops",OsSecurityUpdate:"devops",MonitorDomainMoved:"hosting",CredentialExpiring:"account",CollectorStale:null},i=/^Log/;e.s(["D",0,r,"O",0,(e,t,n)=>{let s;if(!e.size)return!1;let o="account"===(s=a[t])?n?r[n]??null:null:void 0!==s?s:i.test(t)?"hosting":null;return null!==o&&e.has(o)},"N",0,s,"s",0,function(e){return{ruleKeys:Object.entries(a).filter(([,t])=>null!==t&&"account"!==t&&e.has(t)).map(([e])=>e),providers:Object.entries(r).filter(([,t])=>e.has(t)).map(([e])=>e)}},"I",0,e=>new Set(s(e))])},7494,e=>{let t={CRITICAL:4,HIGH:3,MODERATE:2,LOW:1,UNKNOWN:0};function n(e){return e.reduce((e,n)=>t[n.severity]>t[e]?n.severity:e,"UNKNOWN")}let r=e=>`${e} known vulnerabilit${1===e?"y":"ies"}`;e.s(["t",0,function(e,s,a){let i=new Set((s?.findings??[]).map(e=>e.id));if("vulnerable"===a.status&&a.findings.length>0){if(a.findings.every(e=>i.has(e.id)))return null;let s=n(a.findings);return{kind:t[s]>=t.HIGH?"err":"warn",message:`${e} runs Next.js ${a.version} with ${r(a.findings.length)} (${s.toLowerCase()})`,detail:a.findings.map(e=>e.id).join(", ").slice(0,1e3)}}return"ok"===a.status&&i.size>0?{kind:"ok",message:`${e} no longer has known Next.js vulnerabilities (now ${a.version})`,detail:null}:null},"I",0,function(e){return[...e].sort((e,n)=>t[n.severity]-t[e.severity]||(e.id<n.id?-1:+(e.id>n.id)))},"q",0,r,"N",0,n])},250474,e=>{function t(e){let[t,...n]=e.trim().split("-"),r=t.split(".").map(e=>Number.parseInt(e,10)||0);return{nums:[r[0]??0,r[1]??0,r[2]??0],pre:n.length?n.join("-").split("."):[]}}e.s(["f",0,function(e,n){let r=t(e),s=t(n);for(let e=0;e<3;e++)if(r.nums[e]!==s.nums[e])return r.nums[e]-s.nums[e];return function(e,t){if(!e.length||!t.length)return e.length?-1:+!!t.length;for(let n=0;n<Math.max(e.length,t.length);n++){if(void 0===e[n])return -1;if(void 0===t[n])return 1;let r=/^\d+$/.test(e[n])?Number(e[n]):null,s=/^\d+$/.test(t[n])?Number(t[n]):null;if(null!==r&&null!==s){if(r!==s)return r-s}else if(null!==r||null!==s)return null!==r?-1:1;else if(e[n]!==t[n])return e[n]<t[n]?-1:1}return 0}(r.pre,s.pre)}])}]})();
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=src_lib_14grv5a5_n9o0._.js.map
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331),r=e.i(293857);let a=e=>`${e} hari`,n=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${a(e)}.`,i={"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"},s={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},o={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}: ${i[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)=>n(r,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,r)=>n(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 ${a(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,a)=>n(a,`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=>s[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,i,o)=>`Next.js ${t} punya ${r} kerentanan yang diketahui (${s[a]}), ${n?`udah di-fix di ${n}${i?` (${"one fix needs"===i?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function l(e,t){for(let[r,a]of Object.hasOwn(o,e)?o[e]:[]){let e=r.exec(t);if(e)return a(...e)}return t}e.s(["f",0,l],765359);let d={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},c={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},u={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",test:"test"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"karena",incident:"lagi ada insiden",step:"Yang perlu kamu lakukan",test:"tes"}},p=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),h={critical:0,warning:1,info:2};function f(e,t){let r=e.filter(e=>"resolve"!==e.kind).length,a=e.length-r;return[r?`${r} ${u[t].firing}`:"",a?`${a} ${u[t].resolved}`:""].filter(Boolean).join(", ")}function g(e,t,r,a,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||h[e.severity]-h[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 m={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."}},k=(e,t="en")=>Object.hasOwn(m[t],e)?m[t][e]??null:null;e.s(["Z",0,c,"l",0,function(e,a,n,i="en",s={},o={}){let h=`${n.replace(/\/+$/,"")}/alerts`,m=u[i],$=e=>`${d[i][e.kind]} \xb7 ${c[i][e.severity]} \xb7 `,y=e=>o.test?r.I[i]:"id"===i?l(e.ruleKey,e.message):e.message,w=o.test?`Watchbell (${m.test})`:"Watchbell",b=e=>"resolve"===e.kind?null:((e,t="en")=>{let r=k(e,t);return r?`${u[t].step}: ${r}`:null})(e.ruleKey,i),v=e=>[e.causedBy?`${m.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${m.incident}`:""].filter(Boolean).join(" · "),A=e=>`
|
|
2
|
-
+${e} ${m.more}`,T=(e,
|
|
3
|
-
<b>${p(
|
|
4
|
-
${p(
|
|
1
|
+
(()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331),a=e.i(293857);let r=e=>`${e} hari`,n=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,i={"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"},s={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},o={OsSecurityUpdate:[[/^On (.+?), no waiting security update fixes a CVE scored (\S+) or more, and the newest kernel runs\.$/,(e,t,a)=>`Di ${t} nggak ada update security yang nunggu buat CVE skor ${a} ke atas, dan kernel terbaru udah jalan.`],[/^On (.+?): (.+)\.$/,(e,t,a)=>`Di ${t}: ${a.replace(/ fixes /g," nambal ").replace(/ and (\d+) more\b/g," dan $1 lagi").replace(/\b(\d+) more packages\b/g,"$1 paket lagi").replace(/ waits for a reboot/g," nunggu reboot")}.`]],MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,a)=>`${t}: nggak ada ping selama ${a.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,a)=>`${t}: ${i[a]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,a)=>`${t}: ${a} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,a)=>`${t} pindah ke ${a}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,a,r)=>`${t} udah bukan domain ${a}; production sekarang di ${r}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,a)=>`Monitor ngecek ${t}, domain ${a}.`]],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,a)=>`p95 ${t} ms selama 10 menit terakhir (batas ${a} 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,a)=>n(a,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,a)=>n(a,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,a,r,n)=>`${t} pakai ${a} MB dari ${r} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,a,r)=>`${t} udah pakai ${a} dari ${r} 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,a,r,n)=>`${t} udah baca ${a} dari ${r} 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,a,r)=>`${t}: ${a.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 ${r}% 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,a)=>`${t}: ${a.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,a)=>`Credential ${t} ${a} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,a,r)=>n(r,`Credential ${t} ${a}`)]],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,a,r)=>`${t} paket rentan (${a.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>s[e])}): ${r.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],CiFailing:[[/^The latest (.+) run on (.+) (failed|passed)( \(run #\d+\))?\.$/,(e,t,a,r,n)=>`Run ${t} terbaru di ${"the default branch"===a?"branch default":a} ${"failed"===r?"gagal":"lolos"}${n??""}.`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,a)=>`${t} pakai Next.js ${a} 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,a,r,n,i,o)=>`Next.js ${t} punya ${a} kerentanan yang diketahui (${s[r]}), ${n?`udah di-fix di ${n}${i?` (${"one fix needs"===i?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function l(e,t){for(let[a,r]of Object.hasOwn(o,e)?o[e]:[]){let e=a.exec(t);if(e)return r(...e)}return t}e.s(["f",0,l],765359);let d={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},c={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},u={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",test:"test"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"karena",incident:"lagi ada insiden",step:"Yang perlu kamu lakukan",test:"tes"}},p=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),h={critical:0,warning:1,info:2};function f(e,t){let a=e.filter(e=>"resolve"!==e.kind).length,r=e.length-a;return[a?`${a} ${u[t].firing}`:"",r?`${r} ${u[t].resolved}`:""].filter(Boolean).join(", ")}function g(e,t,a,r,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||h[e.severity]-h[t.severity]),o=[r],l=r.length+n.length+40;for(let e=0;e<s.length;e++){let r=a(s[e]);if(l+r.length+1>t){o.push(i(s.length-e));break}o.push(r),l+=r.length+1}return o.push(n),o.join("\n").slice(0,t)}let m={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.",CiFailing:"open the run on GitHub from the app page; Watchbell reads it once a day, so a fix shows after the next sync.",OsSecurityUpdate:"open DevOps › OS vulnerabilities for the command to copy (Watchbell never installs anything), run it on the machine, reboot for a new kernel, then Scan now.",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.",CiFailing:"buka run-nya di GitHub dari halaman app; Watchbell baca sekali sehari, jadi fix-nya kelihatan setelah sync berikutnya.",OsSecurityUpdate:"buka DevOps › OS vulnerabilities, copy perintahnya (Watchbell nggak install apa-apa sendiri), jalanin di mesinnya, reboot kalau ada kernel baru, terus Scan now.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}},k=(e,t="en")=>Object.hasOwn(m[t],e)?m[t][e]??null:null;e.s(["Z",0,c,"l",0,function(e,r,n,i="en",s={},o={}){let h=`${n.replace(/\/+$/,"")}/alerts`,m=u[i],$=e=>`${d[i][e.kind]} \xb7 ${c[i][e.severity]} \xb7 `,y=e=>o.test?a.I[i]:"id"===i?l(e.ruleKey,e.message):e.message,w=o.test?`Watchbell (${m.test})`:"Watchbell",b=e=>"resolve"===e.kind?null:((e,t="en")=>{let a=k(e,t);return a?`${u[t].step}: ${a}`:null})(e.ruleKey,i),v=e=>[e.causedBy?`${m.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${m.incident}`:""].filter(Boolean).join(" · "),A=e=>`
|
|
2
|
+
+${e} ${m.more}`,T=(e,r)=>{let n=Object.hasOwn(s,e.ruleKey)?s[e.ruleKey]?.[i]:void 0;if(!n)return null;let[o="",...l]=(0,a.l)(n,{status:d[i][e.kind],severity:c[i][e.severity],rule:e.ruleKey,target:r(e.title),detail:r(y(e)),cause:r(v(e)),step:"resolve"===e.kind?"":k(e.ruleKey,i)??"",since:`${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,threshold:null==e.threshold?"":e.threshold.toLocaleString("en-US")}).split("\n");return[o,l.join("\n")]},S=e=>e.replace(/[*_`~|\[\]<>]/g,"");return{telegram:g(e,4096,e=>{let a=T(e,e=>e);return a?`
|
|
3
|
+
<b>${p(a[0])}</b>${a[1]?`
|
|
4
|
+
${p(a[1])}`:""}`:`
|
|
5
5
|
<b>${$(e)}${p(e.ruleKey)} \xb7 ${p(e.title)}</b>
|
|
6
6
|
${p(y(e))}${v(e)?`
|
|
7
7
|
<i>${p(v(e))}</i>`:""}${b(e)?`
|
|
8
8
|
👉 ${p(b(e))}`:""}
|
|
9
|
-
${m.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`},`<b>${w}</b>: ${f(e,i)} \xb7 ${(0,t.U)(
|
|
9
|
+
${m.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`},`<b>${w}</b>: ${f(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
10
10
|
<a href="${p(h)}">${m.open}</a>`,A),discord:g(e,2e3,e=>{let t=T(e,S);return t?`
|
|
11
11
|
**${t[0]}**${t[1]?`
|
|
12
12
|
${t[1]}`:""}`:`
|
|
13
13
|
**${$(e)}${e.ruleKey} \xb7 ${S(e.title)}**
|
|
14
14
|
${S(y(e))}${v(e)?`
|
|
15
15
|
_${v(e)}_`:""}${b(e)?`
|
|
16
|
-
👉 ${b(e)}`:""}`},`**${w}**: ${f(e,i)} \xb7 ${(0,t.U)(
|
|
17
|
-
${h}`,A)}},"H",0,p],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"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(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:",$(e)),i.push(`keep-active/${n.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active: ${$(e)}`)}}async function w(e,r,o,l,c,h,m){let $=(0,u.k)(u.B,r?.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),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 y=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 $=!1===w.get(l.accountId).get(k),A=$?1/0:v.get(l.accountId),T=y.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?($||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:",$(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,y,"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=>{e.i(313931);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(532148),c=e.i(209576),u=e.i(111970),p=e.i(762504),h=e.i(547499),f=e.i(224382),g=e.i(201162),m=e.i(973990),k=e.i(600273),$=e.i(968068),y=e.i(695811),w=e.i(633974),b=e.i(76012),v=e.i(298397),A=e.i(218331),T=e.i(146394);let S="digest.lastSentDay",I="digest.state";async function x(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,h.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function D(){let e=(0,$.f)(),[t,r,a,n]=await Promise.all([x("telegram"),x("discord"),x("webhook"),x("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,h.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,b.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,g.E)(a.config,(0,g.J)(o,l??[],new Date,s)):"smtp"===i?(0,m.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",o.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[\s(])_(\S(?:.*?\S)?)_(?=[\s).,!?:;]|$)/gm,"$1$2").replace(/`([^`\n]+)`/g,"$1")):(0,f.f)(r.config.url,o),configured:i}}async function E(){let e=(0,$.f)().telegramToken;if(!e)return null;let t=await x("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function j(){let e=await x("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let C="notify.telegramThreads",_=/^[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=>_.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:C,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
|
|
18
|
-
where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:r}})}async function M(e){if(!e||!_.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,C)).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 R=()=>(0,c.f)().catch(()=>v.a);async function P(e,o,l={}){var c;if(o-Date.now()<6e3)return{sent:0,dropped:0};let p=await (0,u.I)(),f=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels,threshold:i.alertRules.threshold}).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,u.s)(p))).orderBy((0,r.M)(i.alerts.pendingSince)).limit(50);if(!f.length)return{sent:0,dropped:0};let g=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((c=f.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,c),(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)),m=f.filter(e=>g.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:$}=l.sender??await D(),w=new Set(m.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[b,A,T]=await Promise.all([R(),(0,y.B)(),(0,d.w)()]),S=new Set;for(let r of["telegram","discord","webhook","smtp"]){if(!$.has(r))continue;let a=m.filter(e=>e.channels.includes(r)&&!w.has(e.a.id));if(!a.length)continue;let o=a.map(({a:e,threshold:t})=>{let a="telegram"===r?e:(0,v.o)(e,b);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:a.title,message:a.message,startedAt:e.startedAt,causedBy:a.causedBy,provider:e.providerIncident,threshold:t}}),l=(0,s.l)(o,e,(0,h.f)().SITE_URL,"webhook"===r?"en":"smtp"===r?A.email:A[r],T),d=await k(r,(0,v.G)("telegram"===r?l.telegram:l.discord),"webhook"===r?o.map(e=>({...e,title:(0,v.G)(e.title),message:(0,v.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})=>S.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 I=0,x=0,E=[];for(let{a:r,channels:a}of m){let s=a.some(e=>$.has(e)),o=null!==r.pendingSince&&e.getTime()-r.pendingSince.getTime()>18e5;S.has(r.id)?(I++,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))):w.has(r.id)||!s||o?(x++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,r.id))):E.push(r.id)}return E.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,E)),{sent:I,dropped:x}}async function U(e){let s=new Date(e.getTime()-864e5),o=await (0,u.I)(),l=a.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,c,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,u.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(T.O.apps),(0,p.h)(e)]),m=f.map(e=>e.id),[k,$]=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)]):[[],[]],y=new Map(k.map(e=>[e.id,e])),w=new Map($.map(e=>[e.id,e.n])),b=await R();return{now:e,opened:c[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let r=(0,v.o)({...t,resourceId:e,causedBy:null},b);return{...t,title:r.title,message:r.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,v.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},b).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=y.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 O(e){let[t,r]=await Promise.all([U(e),(0,y.H)("email")]);return(0,k.J)({...t,siteUrl:(0,h.f)().SITE_URL},r)}async function K(e,r={}){let a=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[S,I])),s=a.find(e=>e.key===S)?.value,o="string"==typeof s?s:null;if(!(0,k.A)(e,o))return;let d=(0,$.f)(),c=await x("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,A.x)(e),g=await (0,k.K)(e,{lastSentDay:o,state:a.find(e=>e.key===I)?.value??null,build:r.build??(()=>O(e)),send:r.send??(e=>(0,w.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:I,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,I)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:S,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,P,"G",0,j,"P",0,H,"J",0,K,"Q",0,E,"M",0,M],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 $(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,$,"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);function f(e){let t=new Set;return e.split(/[\s,;]+/).filter(e=>e&&!t.has(e.toLowerCase())&&t.add(e.toLowerCase()))}let g=[465,587,2525],m=h.z.email();class k{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
|
|
19
|
-
`)}}class $ extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,
|
|
16
|
+
👉 ${b(e)}`:""}`},`**${w}**: ${f(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
|
|
17
|
+
${h}`,A)}},"H",0,p],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),n=e.i(600205),i=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([n.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([n.z.literal(""),a.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),a=e.i(349129),r=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 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),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let a=await (0,r.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 a){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"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(e,a,i){try{let s=await (0,r.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:r,r:n,s:l,a:d}]of s.entries()){let c=a-Date.now()-500;if(c<250)return void i.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(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active/${n.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active: ${$(e)}`)}}async function w(e,a,o,l,c,h,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),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,r.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,r.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,a.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,r.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,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: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 y=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=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),v.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:v.get(l.accountId),T=y.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 j=u();if(j<250)return;await (0,r.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let C=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!C)continue;let E=await (0,g.G)(C,l.ref,{timeoutMs:Math.min(5e3,j)});E.ok?($||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"===E.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"===E.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(E.error)}]))}catch(e){console.warn("auto-restore failed:",$(e))}}async function T(e,a,i=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:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,a)).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,r.f)().insert(n.keepActive).values({resourceId:a,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: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,v,"v",0,T,"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=>{e.i(313931);var t=e.i(875225),a=e.i(349129),r=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(532148),c=e.i(209576),u=e.i(111970),p=e.i(762504),h=e.i(547499),f=e.i(224382),g=e.i(201162),m=e.i(973990),k=e.i(600273),$=e.i(968068),y=e.i(695811),w=e.i(633974),b=e.i(76012),v=e.i(298397),A=e.i(218331),T=e.i(146394);let S="digest.lastSentDay",I="digest.state";async function x(e){let[a]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.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,h.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function D(){let e=(0,$.f)(),[t,a,r,n]=await Promise.all([x("telegram"),x("discord"),x("webhook"),x("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),a?.row.enabled&&a.config?.url&&i.add("discord"),r?.row.enabled&&r.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,h.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,b.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,g.E)(r.config,(0,g.J)(o,l??[],new Date,s)):"smtp"===i?(0,m.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",o.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[\s(])_(\S(?:.*?\S)?)_(?=[\s).,!?:;]|$)/gm,"$1$2").replace(/`([^`\n]+)`/g,"$1")):(0,f.f)(a.config.url,o),configured:i}}async function j(){let e=(0,$.f)().telegramToken;if(!e)return null;let t=await x("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function C(){let e=await x("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let E="notify.telegramThreads",_=/^[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,a){let s=e.filter(e=>_.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:a.getTime()}])),l=a.getTime()-6048e5,d=r.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:E,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:r.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
|
|
18
|
+
where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:a}})}async function M(e){if(!e||!_.test(e))return null;try{let[a]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,E)).limit(1),r=a?.value&&"object"==typeof a.value?a.value[e]:null;return"number"==typeof r?.m&&Number.isSafeInteger(r.m)&&r.m>0?r.m:null}catch{return null}}let R=()=>(0,c.f)().catch(()=>v.a);async function O(e,o,l={}){var c;if(o-Date.now()<6e3)return{sent:0,dropped:0};let p=await (0,u.I)(),f=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels,threshold:i.alertRules.threshold}).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),r.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,u.s)(p))).orderBy((0,a.M)(i.alerts.pendingSince)).limit(50);if(!f.length)return{sent:0,dropped:0};let g=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((c=f.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,c),(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)),m=f.filter(e=>g.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:$}=l.sender??await D(),w=new Set(m.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[b,A,T]=await Promise.all([R(),(0,y.B)(),(0,d.w)()]),S=new Set;for(let a of["telegram","discord","webhook","smtp"]){if(!$.has(a))continue;let r=m.filter(e=>e.channels.includes(a)&&!w.has(e.a.id));if(!r.length)continue;let o=r.map(({a:e,threshold:t})=>{let r="telegram"===a?e:(0,v.o)(e,b);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:r.title,message:r.message,startedAt:e.startedAt,causedBy:r.causedBy,provider:e.providerIncident,threshold:t}}),l=(0,s.l)(o,e,(0,h.f)().SITE_URL,"webhook"===a?"en":"smtp"===a?A.email:A[a],T),d=await k(a,(0,v.G)("telegram"===a?l.telegram:l.discord),"webhook"===a?o.map(e=>({...e,title:(0,v.G)(e.title),message:(0,v.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,a)),d.ok&&r.forEach(({a:e})=>S.add(e.id)),d.ok&&"telegram"===a&&d.messageId&&await N(r.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let I=0,x=0,j=[];for(let{a,channels:r}of m){let s=r.some(e=>$.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;S.has(a.id)?(I++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,a.id))):w.has(a.id)||!s||o?(x++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,a.id))):j.push(a.id)}return j.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,j)),{sent:I,dropped:x}}async function U(e){let s=new Date(e.getTime()-864e5),o=await (0,u.I)(),l=r.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,c,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,u.s)(o))).orderBy(l,(0,a.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:r.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,a.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(T.O.apps),(0,p.h)(e)]),m=f.map(e=>e.id),[k,$]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:r.B`count(*)::int`,bad:r.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:r.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)]):[[],[]],y=new Map(k.map(e=>[e.id,e])),w=new Map($.map(e=>[e.id,e.n])),b=await R();return{now:e,opened:c[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,v.o)({...t,resourceId:e,causedBy:null},b);return{...t,title:a.title,message:a.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,v.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},b).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=y.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 P(e,a,r){await (0,n.f)().update(i.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(i.channels.kind,e))}async function H(e){let[t,a]=await Promise.all([U(e),(0,y.H)("email")]);return(0,k.J)({...t,siteUrl:(0,h.f)().SITE_URL},a)}async function K(e,a={}){let r=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[S,I])),s=r.find(e=>e.key===S)?.value,o="string"==typeof s?s:null;if(!(0,k.A)(e,o))return;let d=(0,$.f)(),c=await x("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,A.x)(e),g=await (0,k.K)(e,{lastSentDay:o,state:r.find(e=>e.key===I)?.value??null,build:a.build??(()=>H(e)),send:a.send??(e=>(0,w.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await P("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:I,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,I)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:S,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,O,"G",0,C,"P",0,P,"J",0,K,"Q",0,j,"M",0,M],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=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,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.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,a),(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,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return c("member",r.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,a){let i={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.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 a=new Map,i=e.filter(l.f);if(0===i.length)return a;for(let e of(await (0,r.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&&a.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function $(e,t,r,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(r,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,a.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,$,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,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 n(e,i,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: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,r,n={}){let s,l;if((0,a.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 a=(0,o._)(t);return"scheme"===a?"Use an https:// address without a user name or password in it.":"blocked"===a?"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(r),h=String(Math.floor(Date.parse(r.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,a,r){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:a.toISOString(),text:e.slice(0,4e3),link:r,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);function f(e){let t=new Set;return e.split(/[\s,;]+/).filter(e=>e&&!t.has(e.toLowerCase())&&t.add(e.toLowerCase()))}let g=[465,587,2525],m=h.z.email();class k{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 a=this.waiters.shift();a?a(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
|
|
19
|
+
`)}}class $ extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,r,n,l={}){let d;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys(function(e){let t={},a=e.host.trim().toLowerCase();/^[a-z0-9.-]{3,253}$/.test(a)&&a.includes(".")?(0,o.N)(a)&&(t.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):t.host="Enter the server name, for example smtp.office365.com.",g.includes(e.port)||(t.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(t.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(t.pass="Enter the password or app password."),m.safeParse(e.from.trim()).success||(t.from="Enter the address the mail comes from.");let r=f(e.to);if(r.length)if(r.length>10)t.to="Up to 10 addresses.";else{let e=r.find(e=>!m.safeParse(e).success);e&&(t.to=`${e} isn't a valid address.`)}else t.to="Enter the address that gets the alerts.";return t}(e)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let c=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))(c);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 h=465===e.port,w=null,b=new Promise((e,t)=>setTimeout(()=>t(new $("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),v=async()=>{var t,a,s,o;let g,m;try{w=await (l.connect??((e,t,a,r)=>new Promise((n,i)=>{let s=r?p.default.connect({host:e,port:t,servername:a}):u.default.connect({host:e,port:t});s.once(r?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,c,h)}catch{throw new $(`Couldn't connect to ${c}:${e.port}.`,"transient")}let y=new k(w),b=async(e,t,a="config")=>{let r=await y.next();if(!e.includes(r.code))throw new $(`The mail server refused ${t} (${r.code}).`,r.code>=400&&r.code<500?"transient":a);return r};await b([220],"the connection","transient"),y.send("EHLO watchbell");let v=await b([250],"EHLO");if(!h){if(!/^250[- ]STARTTLS\b/im.test(v.text))throw new $("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");y.send("STARTTLS"),await b([220],"STARTTLS"),w=await (l.upgrade??((e,t)=>new Promise((a,r)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>a(n)),n.once("error",r)})))(w,c),y.attach(w),y.send("EHLO watchbell"),v=await b([250],"EHLO after STARTTLS")}y.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await b([235],"the user name or password"),y.send(`MAIL FROM:<${e.from.trim()}>`),await b([250],"the sender address");let A=f(e.to);for(let[e,t]of A.entries())y.send(`RCPT TO:<${t}>`),await b([250,251],A.length>1?`recipient ${e+1} of ${A.length}`:"the recipient address");y.send("DATA"),await b([354],"the message"),w.write(`${(t=e,a=r,s=n,o=new Date,m=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: ${f(t.to).map(e=>`<${e}>`).join(", ")}`,`Subject: ${(g=a.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(g)?g:`=?UTF-8?B?${Buffer.from(g,"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","",m].join("\r\n"))}\r
|
|
20
20
|
.\r
|
|
21
|
-
`),await b([250],"the message"),y.send("QUIT"),await Promise.race([y.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([v(),b]),{ok:!0}}catch(e){return e instanceof $?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{w?.destroy()}}e.s(["f",0,y],973990);var w=e.i(220642),b=e.i(765359),v=e.i(218331),A=e.i(195191),T=e.i(298397);function S(e,t){return(0,v.M)(e,t)&&(0,v.z)(e).hour>=7}let I={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`}},x={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},D=[5,15,30,60];async function
|
|
21
|
+
`),await b([250],"the message"),y.send("QUIT"),await Promise.race([y.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([v(),b]),{ok:!0}}catch(e){return e instanceof $?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{w?.destroy()}}e.s(["f",0,y],973990);var w=e.i(220642),b=e.i(765359),v=e.i(218331),A=e.i(195191),T=e.i(298397);function S(e,t){return(0,v.M)(e,t)&&(0,v.z)(e).hour>=7}let I={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`}},x={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},D=[5,15,30,60];async function j(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!S(e,t.lastSentDay))return a;let r=(0,v.x)(e),n=t.state&&t.state.day===r?t.state:null;if(n?.stopped)return{...a,state:n};if(n&&n.attempts>0){let t=(D[n.attempts-1]??D[D.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...a,state:n}}n??={day:r,...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:r,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 a=I[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:a,month:r}=(0,v.e)(e);return`${a} ${"id"===t?x[r]??r:r}`})(e.now,t),i=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.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=>`${w.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,b.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,A.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${a.last24}`,"",a.stillHead,...l.length?l.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...d.length?d.map(e=>`- ${e}`):[a.noResolved],...c.length?["",a.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",a.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,w.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,w.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,w.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,w.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,w.H)(`${i} ${a.last24}`)}</p>`,h(a.stillHead),f(l,a.noFiring),h(a.resolvedHead),f(d,a.noResolved),...c.length?[h(a.appsHead),f(c,"")]:[],...u.length?[h(a.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,w.H)(r).replace(/"/g,""")}" style="color:#2f4372">${(0,w.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,T.G)(s),html:(0,T.G)(g),text:(0,T.G)(p)}},"A",0,S,"K",0,j],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 n(e="telegram"){return(await r())[e]}e.s(["H",0,n,"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,n,i={}){let s;if((0,a.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,r])},76012,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,n,i,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}/${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,a,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 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},...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,r])}]})();
|
|
22
22
|
|
|
23
23
|
//# sourceMappingURL=src_lib_1en6omqx66g9d._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(()=>{"use strict";module.exports=[648338,634815,e=>{e.s(["f",0,function(e){let t=e instanceof Error&&e.cause instanceof Error?e.cause:e,r=(t instanceof Error?t.message:"").split("\n")[0].replace(/Bearer\s+\S+/gi,"Bearer [hidden]").trim()||"failed";return r.length>200?`${r.slice(0,200)}…`:r}],648338);let t=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?`,r="[\"'`]";function n(e){let t=/^(\d+)\.\d+\.\d+(?:-[0-9A-Za-z.]+)?$/.exec(e);return null!==t&&Number(t[1])>=9&&1e3>Number(t[1])}let i={"&":"&",""":'"',"'":"'","'":"'","/":"/","/":"/"},s=e=>e.replace(/&(?:amp|quot|#39|#x27|#x2F|#47);/gi,e=>i[e]??i[e.toLowerCase()]??e),a=RegExp(String.raw`\bnext\s*=\s*\{\s*version\s*:\s*${r}(${t})${r}`,"g"),o=RegExp(String.raw`version\s*:\s*${r}(${t})${r}\s*,\s*appDir\s*:`,"g"),l=RegExp(String.raw`appDir\s*:\s*[^,{}()]{1,16},\s*version\s*:\s*${r}(${t})${r}`,"g"),u=/\bnext\s*=\s*\{\s*version\s*(?::\s*([A-Za-z_$][\w$]*)\s*)?[,}]/g,c=e=>e.replace(/[$]/g,"\\$");e.s(["O",0,function(e){for(let t of e.matchAll(a))if(n(t[1]))return t[1];for(let t of[o,l])for(let r of e.matchAll(t))if(n(r[1]))return r[1];for(let i of e.matchAll(u)){let s=i[1]??"version",a=RegExp(String.raw`(?:^|[^\w$.])${c(s)}\s*=\s*${r}(${t})${r}`,"g"),o=null;for(let t of e.matchAll(a)){if((t.index??0)>=(i.index??0))break;o=t[1]}if(o&&n(o))return o}return null},"V",0,function(e,t){let r;try{r=new URL(t)}catch{return[]}let n=new Set,i=[];for(let t of e.matchAll(/<script\b[^>]*?\ssrc\s*=\s*(["'])(.*?)\1/gi)){let e;try{e=new URL(s(t[2].trim()),r)}catch{continue}if("https:"===e.protocol&&e.origin===r.origin&&e.pathname.startsWith("/_next/static/")&&(e.hash="",!n.has(e.href))){var a;n.add(e.href),i.push({href:e.href,rank:(a=e.pathname,/\/main-app[-.]/.test(a)?0:/\/(main|app-index)[-.]/.test(a)?1:/\/(webpack|polyfills|framework)[-.]/.test(a)?3:2),i:i.length})}}return i.sort((e,t)=>e.rank-t.rank||e.i-t.i).map(e=>e.href)}],634815)},242605,46126,e=>{var t=e.i(93321),r=e.i(351674),n=e.i(548734),i=e.i(837137),s=e.i(33135),a=e.i(648338),o=e.i(601219),l=e.i(634815),u=e.i(533957);async function c(e,t,r={}){let n=r.deadline??1/0,i=r.now??(()=>new Date),a=e=>Math.floor(Math.min(e,n)-Date.now()),o=Date.now()+15e3;if(0>=a(o))return null;let d=(e,r)=>({version:t?.version??null,status:e,findings:t?.findings??[],reason:r,checkedAt:i()}),f=(e,t)=>(0,s.K)(e,{maxBytes:3145728,timeoutMs:a(o),lookup:r.lookup,fetch:r.fetch,userAgent:"OpsConsole-Security/1.0 (+https://watchbell.west-solutions.web.id)",sameOrigin:t}),p=await f(`https://${e}/`,"www");if(!p.ok&&p.error===s.l)return d("unknown","the site redirects to another host");if(!p.ok||200!==p.status)return Date.now()>=n?null:d("error",`Couldn't load the site: ${p.ok?`HTTP ${p.status}`:p.error}`);let h=(0,l.V)(p.body,p.url).slice(0,12);if(0===h.length)return d("unknown",p.body.includes("/_next/")?"version not exposed":"not a Next.js site");let m=null,g=0,y=!1;for(let e of h){if(0>=a(o)){y=!0;break}let t=await f(e,!0);if(t.ok&&200===t.status&&(g++,m=(0,l.O)(t.body)))break}if(!m)return Date.now()>=n?null:y||0>=a(o)?d("error","Reading the site's scripts took longer than 15 s"):0===g?d("error","Couldn't load the site's scripts"):d("unknown","version not exposed");let w=a(Date.now()+1e4);if(w<=0)return null;let k=await (0,u.y)(m,{timeoutMs:w,fetch:r.fetch});return k.ok?{version:m,status:k.findings.length?"vulnerable":"ok",findings:k.findings,reason:null,checkedAt:i()}:Date.now()>=n?null:d("error",k.error)}e.s(["y",0,35e3,"P",0,c],46126);var d=e.i(84979),f=e.i(683439),p=e.i(436357),h=e.i(469762),m=e.i(182357),g=e.i(910697);function y(e){return{version:e.version,status:e.status,findings:Array.isArray(e.findings)?e.findings:[],reason:e.reason,checkedAt:e.checkedAt}}async function w(e={}){let s=e.only;if(s&&!s.length)return[];let a=e.first??[],o=e.skip??[],l=await (0,n.f)().select({id:i.resources.id,name:i.resources.name,meta:i.resources.meta,sec:i.appSecurity}).from(i.resources).leftJoin(i.appSecurity,(0,t.u)(i.appSecurity.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt),s?(0,t.y)(i.resources.id,s):void 0,o.length?(0,t.$)(i.resources.id,[...o]):void 0)).orderBy(...a.length?[r.B`case when ${(0,t.y)(i.resources.id,a)} then 0 else 1 end`]:[],r.B`${i.appSecurity.checkedAt} asc nulls first`,i.resources.name).limit(g.O.apps);if(!l.length)return[];a.length&&l.sort((e,t)=>Number(!a.includes(e.id))-Number(!a.includes(t.id)));let u=await (0,n.f)().select({resourceId:i.monitors.resourceId,url:i.monitors.url}).from(i.monitors).where((0,t.y)(i.monitors.resourceId,l.map(e=>e.id))).orderBy(i.monitors.createdAt).limit(g.O.monitors);return l.map(e=>({id:e.id,name:e.name,prev:e.sec?y(e.sec):null,host:(0,p.Y)(e.meta)?.primaryDomain??(0,h.m)(e.name,u.filter(t=>t.resourceId===e.id).map(e=>e.url))}))}async function k(e,s){await (0,n.f)().transaction(async n=>{await n.execute(r.B`select pg_advisory_xact_lock(hashtext(${`app_security:${e.id}`}))`);let[a]=await n.select().from(i.appSecurity).where((0,t.u)(i.appSecurity.resourceId,e.id)).limit(1),l=a?y(a):null;if(l&&l.checkedAt.getTime()>=s.checkedAt.getTime())return;let u="unknown"===s.status||"error"===s.status?{...s,version:l?l.version:s.version,findings:l?l.findings:s.findings}:s,c={framework:"next",version:u.version,status:u.status,findings:u.findings,reason:u.reason,checkedAt:u.checkedAt};await n.insert(i.appSecurity).values({resourceId:e.id,...c}).onConflictDoUpdate({target:i.appSecurity.resourceId,set:c,setWhere:r.B`${i.appSecurity.checkedAt} < excluded.checked_at`});let f=(0,d.t)(e.name,l,u);f&&await (0,o.f)([{type:"system",kind:f.kind,message:f.message,detail:f.detail,resourceId:e.id,at:u.checkedAt,reason:"ok"===f.kind?"NextClean":"NextVulnerable"}],n)})}async function v(e,t={}){let r=await w(t),n=0,i=0,o=[],l=[],u=[];return await (0,s.P)(r,3,async t=>{if(e-Date.now()<3e3)return void i++;u.push(t.id);try{let r=await c(t.host,t.prev,{deadline:e});if(!r)return void i++;await k(t,r),n++,l.push(t.id)}catch(e){o.push(`${t.name}: ${(0,a.f)(e)}`),l.push(t.id)}}),{checked:n,skipped:i,failed:o,done:l,listed:r.map(e=>e.id),started:u}}async function $(e,t=2e4){let[r]=await w({only:[e]});if(!r)return{ok:!1,error:"That app is no longer in the console."};let n=await c(r.host,r.prev,{deadline:Date.now()+t});return n?(await k(r,n),{ok:!0,message:(0,m.I)(r.name,n),passed:"ok"===n.status||"vulnerable"===n.status,vulnerable:n.findings.length>0,audit:{message:`Security check: ${r.name}`,resourceId:r.id}}):{ok:!1,error:"The check took too long. Try again in a minute."}}async function x(e){let r=e.filter(f.f);return r.length?(await (0,n.f)().select().from(i.appSecurity).where((0,t.y)(i.appSecurity.resourceId,r)).limit(r.length)).map(e=>{let t=y(e);return{appId:e.resourceId,version:t.version,status:t.status,findings:t.findings}}):[]}e.s(["d",0,$,"F",0,x,"h",0,v,"Z",0,y],242605)},533957,e=>{var t=e.i(33135),r=e.i(852539),n=e.i(84979),i=e.i(84877);let s=["CRITICAL","HIGH","MODERATE","LOW","UNKNOWN"],a=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),o=e=>Array.isArray(e)?e:[],l=e=>"string"==typeof e&&e?e:null,u=e=>a(e.package)&&"next"===e.package.name&&"npm"===e.package.ecosystem,c="OSV.dev sent an answer we couldn't read";async function d(e,h={}){let m=h.timeoutMs??1e4,g=h.maxBytes??2097152,y=AbortSignal.timeout(m),w=(0,t.X)(y),k=`OSV.dev didn't answer within ${p(m)}`,v=[],$=null;for(let r=0;r<3;r++){var x;let r,n;try{r=await (h.fetch??fetch)("https://api.osv.dev/v1/query",{method:"POST",headers:{"content-type":"application/json","user-agent":"OpsConsole-Security/1.0 (+https://watchbell.west-solutions.web.id)"},body:JSON.stringify({package:{name:"next",ecosystem:"npm"},version:e,...$?{page_token:$}:{}}),redirect:"error",cache:"no-store",signal:y})}catch(e){return{ok:!1,error:f(e)?k:"Couldn't reach OSV.dev"}}if(!r.ok)return await r.body?.cancel().catch(()=>void 0),{ok:!1,error:`OSV.dev answered HTTP ${r.status}`};try{let{bytes:e,truncated:i}=await (0,t.z)(r,g,w);if(i)return{ok:!1,error:"OSV.dev sent too large an answer"};n=JSON.parse(new TextDecoder().decode(e))}catch(e){return{ok:!1,error:f(e)?k:c}}let i=a(x=n)?void 0===x.vulns?[]:Array.isArray(x.vulns)?x.vulns:null:null;if(null===i)return{ok:!1,error:c};if(v.push(...i),!($=a(n)?l(n.next_page_token):null))break}let A=function(e,t){let c=[],d=0;for(let n of e){if(!a(n))continue;let e=l(n.id);e&&(d++,n.withdrawn||c.push({id:e.slice(0,64),cve:o(n.aliases).map(l).find(e=>!!e&&/^CVE-\d{4}-\d+$/.test(e))??null,summary:(l(n.summary)??"").replace(/\s+/g," ").trim().slice(0,200),severity:function(e){let t=a(e.database_specific)?l(e.database_specific.severity)?.toUpperCase():void 0;return"MEDIUM"===t?"MODERATE":s.includes(t??"")?t:"UNKNOWN"}(n),score:function(e){for(let t of o(e.severity))if(a(t)&&"CVSS_V3"===t.type){let e=(0,r.v)(l(t.score)??"");if(null!==e)return e}return null}(n),fixed:function(e,t){let r=null;for(let n of o(e))if(a(n)&&u(n))for(let e of o(n.ranges)){if(!a(e)||"SEMVER"!==e.type&&"ECOSYSTEM"!==e.type)continue;let n=null;for(let s of o(e.events)){if(!a(s))continue;let e=l(s.introduced),o=l(s.fixed);e?n=e:o&&null!==n?((0,i.f)(t,n)>=0&&0>(0,i.f)(t,o)&&(null===r||0>(0,i.f)(o,r))&&(r=o),n=null):(l(s.last_affected)||l(s.limit))&&(n=null)}}return r}(n.affected,t)}))}return e.length>0&&0===d?null:(0,n.I)(c).slice(0,50)}(v,e);return null===A?{ok:!1,error:c}:{ok:!0,findings:A}}let f=e=>e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name),p=e=>e<1e3?`${e} ms`:`${Math.round(e/1e3)} s`;e.s(["y",0,d,"t",0,f],533957)}]})();
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_lib_1iuuekw6uwbbr._.js.map
|