watchbell 1.2.1 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -11
- package/bin/watchbell.mjs +735 -45
- package/package.json +1 -1
- package/scripts/node-runtime.mjs +166 -0
- package/scripts/selfhost-log.mjs +116 -0
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/build-manifest.json +105 -105
- package/server/.next/prerender-manifest.json +4 -4
- package/server/.next/server/app/(console)/(private)/ai/agents/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +32 -22
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js +76 -74
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/ask/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/connect/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/keys/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/logs/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/models/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +48 -38
- package/server/.next/server/app/(console)/(private)/ai/models/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/ai/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/playground/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/providers/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +40 -30
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js +76 -74
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/quota/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js +77 -75
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/ai/usage/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js +79 -76
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/(private)/auto-actions/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js +75 -73
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/alerts/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +74 -44
- package/server/.next/server/app/(console)/alerts/page.js +78 -75
- package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/apps/[id]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +62 -52
- package/server/.next/server/app/(console)/apps/[id]/page.js +81 -79
- package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/apps/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/apps/page.js +77 -75
- package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/backups/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +34 -24
- package/server/.next/server/app/(console)/backups/page.js +78 -76
- package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/catalog/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/catalog/page.js +76 -74
- package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/connections/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +50 -40
- package/server/.next/server/app/(console)/connections/page.js +79 -77
- package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/d1/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/d1/page.js +77 -75
- package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/deployments/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +40 -30
- package/server/.next/server/app/(console)/deployments/page.js +77 -75
- package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/dns/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/dns/page.js +80 -78
- package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/domains/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +32 -22
- package/server/.next/server/app/(console)/domains/page.js +79 -77
- package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/events/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/events/page.js +76 -74
- package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/firebase/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/firebase/page.js +78 -76
- package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/logs/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/logs/page.js +75 -73
- package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/manage/sections/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/manage/sections/page.js +75 -73
- package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/neon/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +50 -40
- package/server/.next/server/app/(console)/neon/page.js +80 -78
- package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/overview/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +46 -36
- package/server/.next/server/app/(console)/overview/page.js +84 -82
- package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/repos/[id]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +30 -20
- package/server/.next/server/app/(console)/repos/[id]/page.js +78 -76
- package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/repos/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/repos/page.js +75 -73
- package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/settings/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +48 -38
- package/server/.next/server/app/(console)/settings/page.js +76 -74
- package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/sql/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +42 -32
- package/server/.next/server/app/(console)/sql/page.js +75 -73
- package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/status/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/status/page.js +78 -75
- package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/supabase/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +68 -58
- package/server/.next/server/app/(console)/supabase/page.js +85 -84
- package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/topology/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/topology/page.js +77 -75
- package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/turso/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/turso/page.js +76 -74
- package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/upstash/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +28 -18
- package/server/.next/server/app/(console)/upstash/page.js +76 -74
- package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/uptime/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +56 -46
- package/server/.next/server/app/(console)/uptime/page.js +78 -76
- package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/(console)/welcome/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +38 -28
- package/server/.next/server/app/(console)/welcome/page.js +75 -73
- package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_global-error.html +1 -1
- package/server/.next/server/app/_global-error.rsc +4 -4
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +3 -3
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +4 -4
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/_not-found/page.js +14 -11
- package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_not-found.html +1 -1
- package/server/.next/server/app/_not-found.rsc +29 -24
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +29 -24
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +27 -24
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/account/password/page/build-manifest.json +3 -3
- package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/account/password/page.js +17 -18
- package/server/.next/server/app/account/password/page.js.nft.json +1 -1
- package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/collect/route.js +24 -24
- package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
- package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/daily/route.js +24 -24
- package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
- package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/telegram/webhook/route.js +23 -23
- package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/advice/route.js +3 -3
- package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/chat/completions/route.js +1 -1
- package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/models/route.js +1 -1
- package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/ai/questions/route.js +3 -3
- package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/mcp/route.js +2 -2
- package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/status/apps/[app]/route.js +3 -3
- package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/status/route.js +3 -3
- package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/watchdog/route.js +13 -13
- package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/google/callback/route.js +2 -2
- package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
- package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
- package/server/.next/server/app/invite/page/build-manifest.json +3 -3
- package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/invite/page.js +22 -22
- package/server/.next/server/app/invite/page.js.nft.json +1 -1
- package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/mfa/page/build-manifest.json +3 -3
- package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/mfa/page.js +31 -32
- package/server/.next/server/app/mfa/page.js.nft.json +1 -1
- package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/mfa/setup/page/build-manifest.json +3 -3
- package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
- package/server/.next/server/app/mfa/setup/page.js +31 -32
- package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
- package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/page/build-manifest.json +3 -3
- package/server/.next/server/app/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/page.js +14 -11
- package/server/.next/server/app/page.js.nft.json +1 -1
- package/server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
- package/server/.next/server/app/s/[slug]/page/build-manifest.json +3 -3
- package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
- package/server/.next/server/app/s/[slug]/page.js +21 -20
- package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
- package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/setup/page/build-manifest.json +3 -3
- package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
- package/server/.next/server/app/setup/page.js +20 -18
- package/server/.next/server/app/setup/page.js.nft.json +1 -1
- package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/signin/page/build-manifest.json +3 -3
- package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
- package/server/.next/server/app/signin/page.js +28 -28
- package/server/.next/server/app/signin/page.js.nft.json +1 -1
- package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
- package/server/.next/server/chunks/{[externals]__0dolpidprtypa._.js → [externals]__0y_x27mdj85p4._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__0pfohce9kbhcc._.js → [externals]__1fzfzd0ia0sk6._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1ou2ofma806s1._.js → [externals]__1qqyrxnupegg3._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0wbhuhlkn_ueu._.js → [root-of-the-server]__0-ytbad9hn7uc._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1cbg6fvn16har._.js → [root-of-the-server]__0032rbj2s87zo._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1-bvfylgbkjso._.js → [root-of-the-server]__02n6y6aa6qp1b._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__163-eo1vkbzx1._.js → [root-of-the-server]__03i6yscmtbhhg._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1x9u88f9545aa._.js → [root-of-the-server]__05qcc-0e8z1u8._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1p1k8nq50cwfy._.js → [root-of-the-server]__07bw6o0jc31yr._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__14pgqdfdkuopi._.js → [root-of-the-server]__07eo--c90cju2._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0iysztx_xio84._.js → [root-of-the-server]__07mzeijv31avl._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__05ht00n_eiksb._.js → [root-of-the-server]__090in165mp6av._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__02s57amypj_ye._.js → [root-of-the-server]__09odxyho_9vk_._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0403hy52a1qcu._.js → [root-of-the-server]__0bmyll20mg_gf._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__08k886n7y6f_3._.js → [root-of-the-server]__0btybbrsr4abf._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0hvejly8-nlkq._.js → [root-of-the-server]__0c-33noc8yn1-._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1xrt934xl5wbd._.js → [root-of-the-server]__0d99wclm2suox._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0b136ghrklbbn._.js → [root-of-the-server]__0dsy-9ts8s-pn._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__01estsu5k8l4t._.js → [root-of-the-server]__0g1cifa7hd790._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0pwn8go30dm_3._.js → [root-of-the-server]__0gox66sv0bx47._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0w8qhgmo5c23i._.js → [root-of-the-server]__0hblpf7wqke-j._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0kgmy-sltdtb_._.js → [root-of-the-server]__0hlyn_aj72sn5._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0cskq__p3tja8._.js → [root-of-the-server]__0hnljrh9qi9t-._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0xgl1cg3z00iz._.js → [root-of-the-server]__0hrtz5c_46jkw._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0iicsi0n7tfa5._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0dc0pz57q73va._.js → [root-of-the-server]__0kp0yx909wtab._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__04ruh9diphqtp._.js → [root-of-the-server]__0ku7nva3gxa9p._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1w-yk3b07wcf1._.js → [root-of-the-server]__0l6_iao04u72h._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1yzaj148hs9a1._.js → [root-of-the-server]__0l9ja3579qrju._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0_64c807n6q9e._.js → [root-of-the-server]__0noc6l63d3l9w._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0nqbue6i0l3qs._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__04zuzs7oruu3o._.js → [root-of-the-server]__0nrg8zzqizk69._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1lbmzw1j9jufm._.js → [root-of-the-server]__0oy0hcm48kl-q._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0l5v9itfv9nhr._.js → [root-of-the-server]__0r1men25anfgb._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__05jzukkrp2pvu._.js → [root-of-the-server]__0s5b-tdq7rndj._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1ry92m8xlcebk._.js → [root-of-the-server]__0v-gc-c_e8pwl._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0wp6j3irilu76._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0t9o5ca5bzg0p._.js → [root-of-the-server]__0x487cn6dsn12._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__11qvos_7nf8z8._.js → [root-of-the-server]__0yuyew8m9dc6-._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1w9hei9xe1odr._.js → [root-of-the-server]__0zni_2pv2fdgb._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__10mob-6xfy8b0._.js → [root-of-the-server]__125fkw52kl2ty._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__13hrm9c61i7uk._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0m9648az7bkus._.js → [root-of-the-server]__16lfk1wg0ejaa._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1vmls0bkau925._.js → [root-of-the-server]__16waq6rapvngp._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__18eg-mk5loj_8._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__19ylbgd65iej4._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1vutb2z9gw8el._.js → [root-of-the-server]__1adw_bv2u89kc._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1c653f_8qzrpd._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__00wz8qo4hgq2i._.js → [root-of-the-server]__1c78cu7kb9vkl._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1d5y0cc5mg_07._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1e1l75cf48ph2._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1eu2_f44as742._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1hv3hk5182t-o._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1j6xniw630fg0._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1cwr95yi8preu._.js → [root-of-the-server]__1jsf0jf_ljpsm._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1fj8d0drhw1yx._.js → [root-of-the-server]__1lerees-l5-6c._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1sb8d4e5b5pdl._.js → [root-of-the-server]__1lj1f2w2-w8nw._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1nu5isiy7d832._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0sfnhgc5reef1._.js → [root-of-the-server]__1ooxluowhatjt._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1pvx0izh1m_0_._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0i3bs_98vlttu._.js → [root-of-the-server]__1rpgddeg42i-q._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1r9j5o80kocvz._.js → [root-of-the-server]__1s4bwjevs4hd-._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1uox9a0td-o0-._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1vvg0ur3_7o0p._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1vwz2r58cojht._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1zcp6yrat15t5._.js → [root-of-the-server]__1wpdlr4uh1un4._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1x7en4waq21dd._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1x813cg-b9rls._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1147qf6sf3ru4._.js → [root-of-the-server]__1xl6_spngp6k3._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1lfidps4tcfkg._.js → [root-of-the-server]__1y2qf8ltxhk0o._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1z_0gt-w6bx9v._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1w_wtn9h9eu93._.js → [root-of-the-server]__1zvoez8iapsem._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__209g3_0l-y67u._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__20pu-tixzpeev._.js +3 -0
- package/server/.next/server/chunks/_0-fp57b-utmuw._.js +1 -1
- package/server/.next/server/chunks/_004c7-39glldb._.js +4 -4
- package/server/.next/server/chunks/_004j-wbs3yn84._.js +1 -1
- package/server/.next/server/chunks/_03qlijpos6a21._.js +1 -1
- package/server/.next/server/chunks/_06lf75x-xhl7v._.js +1 -1
- package/server/.next/server/chunks/_09l75j3ey14tc._.js +1 -1
- package/server/.next/server/chunks/_0brb2454uen18._.js +1 -1
- package/server/.next/server/chunks/_0dkhprw6wsizx._.js +1 -1
- package/server/.next/server/chunks/_0duxuj4kmjibl._.js +46 -0
- package/server/.next/server/chunks/_0gz8ldqeokdtn._.js +1 -1
- package/server/.next/server/chunks/_0kmhvts35imzs._.js +4 -4
- package/server/.next/server/chunks/_0l_hz-8cj94r7._.js +3 -0
- package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +1 -1
- package/server/.next/server/chunks/_0ofzzim090ezo._.js +1 -1
- package/server/.next/server/chunks/_0q3ygdztfvqq6._.js +3 -0
- package/server/.next/server/chunks/{_1msi9fy888xna._.js → _0q9a3ettj_h2s._.js} +2 -2
- package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +7 -7
- package/server/.next/server/chunks/_0qyupoc7u5hr7._.js +3 -0
- package/server/.next/server/chunks/_0rwuppwyvemfj._.js +4 -4
- package/server/.next/server/chunks/{_1z8__gxixw-z-._.js → _0ry4553j-m5fp._.js} +3 -3
- package/server/.next/server/chunks/_0s2odl9xacsg0._.js +1 -1
- package/server/.next/server/chunks/_0sy878k2ywjbq._.js +1 -1
- package/server/.next/server/chunks/_0tz4o-qufnu3l._.js +4 -4
- package/server/.next/server/chunks/_0voowig3y32v1._.js +4 -4
- package/server/.next/server/chunks/_0wtlf0x_depae._.js +3 -0
- package/server/.next/server/chunks/_0xf7mtsrkgc9e._.js +2 -2
- package/server/.next/server/chunks/_0zj10_al6r59j._.js +26 -26
- package/server/.next/server/chunks/_1-pcsy2hkg0il._.js +3 -0
- package/server/.next/server/chunks/_1-pw7jw52sbti._.js +1 -1
- package/server/.next/server/chunks/_10vh_l3hht4_3._.js +4 -4
- package/server/.next/server/chunks/_113ebzq_9i756._.js +46 -0
- package/server/.next/server/chunks/{_219klbycazlx_._.js → _16urxazbgm48y._.js} +3 -3
- package/server/.next/server/chunks/_17aiz6zt-yv52._.js +2 -2
- package/server/.next/server/chunks/_18p-vw2zmdx9f._.js +1 -1
- package/server/.next/server/chunks/_1_son1yzo5xvl._.js +1 -1
- package/server/.next/server/chunks/_1_xsrlijknnh3._.js +1 -1
- package/server/.next/server/chunks/_1a5vma58w9ytn._.js +4 -4
- package/server/.next/server/chunks/_1e_rbkrukj0x9._.js +26 -26
- package/server/.next/server/chunks/{_060yqv0qyo-lp._.js → _1g8r-7wcf8sy3._.js} +3 -3
- package/server/.next/server/chunks/_1g_prqb_u33e3._.js +7 -7
- package/server/.next/server/chunks/_1h73gul79s8pi._.js +1 -1
- package/server/.next/server/chunks/_1ihndlef8r00f._.js +46 -0
- package/server/.next/server/chunks/_1mwb214-ablfo._.js +46 -0
- package/server/.next/server/chunks/_1ngkjn56qmi2x._.js +3 -0
- package/server/.next/server/chunks/_1v7q0xdxbqawm._.js +4 -4
- package/server/.next/server/chunks/_1xs2ya_n7kb04._.js +4 -4
- package/server/.next/server/chunks/node_modules_drizzle-orm_entity_1-0q2stnw2ab8.js +1 -1
- package/server/.next/server/chunks/node_modules_zod_v4_classic_external_01k1rek7hgd0j.js +4 -4
- package/server/.next/server/chunks/src_0--qn984h6czu._.js +1 -1
- package/server/.next/server/chunks/{src_0lcm1yhnzhn2d._.js → src_00ixvrjrk_2h4._.js} +2 -2
- package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
- package/server/.next/server/chunks/src_088gmyaew7ds0._.js +1 -1
- package/server/.next/server/chunks/{src_0v67kw2p2wd_c._.js → src_0tdn7mun5rvc6._.js} +2 -2
- package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +1 -1
- package/server/.next/server/chunks/src_1-xw4hea2lvb3._.js +1 -1
- package/server/.next/server/chunks/{src_0390zcofy42lg._.js → src_10vyvp9vy_69h._.js} +2 -2
- package/server/.next/server/chunks/{src_1v3tf1ye2jzyk._.js → src_13n1vi7uew4iu._.js} +2 -2
- package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
- package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +1 -1
- package/server/.next/server/chunks/{src_07vqa8fdgu9ah._.js → src_1il7wg_qjxny7._.js} +2 -2
- package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +7 -4
- package/server/.next/server/chunks/src_1u-olt84z63rx._.js +1 -1
- package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +1 -1
- package/server/.next/server/chunks/src_1wzm081p6qyre._.js +7 -4
- package/server/.next/server/chunks/src_20ilndq84j3b3._.js +3 -0
- package/server/.next/server/chunks/src_lib_0ayxuk4ftzf2f._.js +6 -0
- package/server/.next/server/chunks/src_lib_0ds7lhpop_adf._.js +1 -1
- package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
- package/server/.next/server/chunks/src_lib_0krdzz8eu9xh3._.js +6 -0
- package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +15 -9
- package/server/.next/server/chunks/src_lib_1-u7dbsavbtb0._.js +6 -0
- package/server/.next/server/chunks/src_lib_103kimc1xvc_0._.js +9 -0
- package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +15 -9
- package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +15 -9
- package/server/.next/server/chunks/src_lib_1sdusf16f07x-._.js +9 -0
- package/server/.next/server/chunks/src_lib_1sz77jjn7xl7o._.js +1 -1
- package/server/.next/server/chunks/src_lib_1xwavi_m_li7p._.js +1 -1
- package/server/.next/server/chunks/src_lib_206j7lyff31-g._.js +6 -0
- package/server/.next/server/chunks/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
- package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +5 -5
- package/server/.next/server/chunks/src_lib_data_advisor-db_ts_0rl1ug3iana24._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_apps-db_ts_02ovqtci8e7o6._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
- package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +6 -6
- package/server/.next/server/chunks/src_lib_domain-move_ts_04stiet1-xpe2._.js +1 -1
- package/server/.next/server/chunks/src_lib_local-auth_setup_ts_10d8-k_e6pvft._.js +2 -2
- package/server/.next/server/chunks/src_lib_notify_telegram-bot_ts_18y40dkchmcqd._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_display-name_ts_0xoimm6j7bwnf._.js +1 -1
- package/server/.next/server/chunks/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
- package/server/.next/server/chunks/src_private_1_nggk_wre7qf._.js +2 -2
- package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
- package/server/.next/server/chunks/src_private_ai_gateway_ts_1qtr4nyb8kgnd._.js +2 -2
- package/server/.next/server/chunks/src_private_assist_provider-answer_ts_10qv42t-5046y._.js +1 -1
- package/server/.next/server/chunks/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
- package/server/.next/server/chunks/src_private_assist_questions-db_ts_1pc4g504t-qmu._.js +1 -1
- package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_21atz5tidps07.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +4 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +3 -0
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +3 -0
- package/server/.next/server/chunks/ssr/{[externals]__0jv_q8g96gubg._.js → [externals]__00tbi838eotwu._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1hqh7fi0-rtlc._.js → [externals]__01kgu896o9-9t._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1neu6qld_ilyx._.js → [externals]__078uqm46tk5mo._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__0yzs5m5hot2o2._.js → [externals]__0i0hmh-a743jn._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__0et8619os7o06._.js → [externals]__0qc7l-41h018j._.js} +1 -1
- package/server/.next/server/chunks/ssr/[externals]__194b54tqm6qaq._.js +3 -0
- package/server/.next/server/chunks/ssr/[externals]__1_ttbfsdm3x1-._.js +3 -0
- package/server/.next/server/chunks/ssr/{[externals]__0x50_fipcza3k._.js → [externals]__1devsqn7ez77y._.js} +1 -1
- package/server/.next/server/chunks/ssr/[externals]__1prfp5pzeoflz._.js +3 -0
- package/server/.next/server/chunks/ssr/[externals]__1zxtjc2qr2epg._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0oayb8dm0iu8k._.js → [root-of-the-server]__004q78ed0nf0_._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__01zthkv8nrlct._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__050d99bknjdvq._.js → [root-of-the-server]__04_prmhm_cts4._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-jx3t8dg8n5t._.js → [root-of-the-server]__04nc91kiy757l._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1xwqrik2sugmi._.js → [root-of-the-server]__09blzlbsxqvy9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-o5i-5pqjk5v._.js → [root-of-the-server]__0_6on4a5w76va._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tco2ec6ha1k6._.js → [root-of-the-server]__0a3n6wzq8xui9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ptdec0sozaqm._.js → [root-of-the-server]__0an0wsglj2bhh._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__18xb7pbdmiyiz._.js → [root-of-the-server]__0ban7lwqlko9y._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khp_gsot3jh_._.js → [root-of-the-server]__0c_q6tvcmsmt9._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__00wwav5k7xmy0._.js → [root-of-the-server]__0ct4apye0sfmc._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__15keslh0ov5mv._.js → [root-of-the-server]__0d2ry7-u1cv8c._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0e8ya6wyy2plv._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0h0txd7z3sxq7._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__08w3ad-xux1g4._.js → [root-of-the-server]__0h1vffivfh242._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__05hw89gap74cw._.js → [root-of-the-server]__0i0_6dnnf0hov._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khvq0xdah931._.js → [root-of-the-server]__0jgapr1cnvhi6._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_1130gx52k-9._.js → [root-of-the-server]__0jn0o2e32mwcp._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ojywxj06986-._.js → [root-of-the-server]__0k29b_kblv6sv._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ejxk0jlgi4eb._.js → [root-of-the-server]__0keo0-hwsnkw9._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0klc2dyzyjeba._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__16jkttbe1yoai._.js → [root-of-the-server]__0l50vsk8enxzj._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0nlfip3wc3l2z._.js +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__11ham42w_feik._.js → [root-of-the-server]__0o0cpvobd-u0n._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0kr_tvfgqtb-o._.js → [root-of-the-server]__0paolyy3xkow9._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0qnly-gjvfntd._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0qqcz9ynsgmgl._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1k_hi9mbd4_by._.js → [root-of-the-server]__0qwds8dkahd2_._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0bn_thc_vtf_i._.js → [root-of-the-server]__0rdf04ziqasfz._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_677ii9bahoy._.js → [root-of-the-server]__0ronqmm1xpldk._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0uxychcp_pldy._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0vnfx03nb5vku._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0x7w-5h8or6qr._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__15wwi1pda8ims._.js → [root-of-the-server]__0xpkzaqer75i-._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0y6psx1_d7fkt._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__04klr3-4qi7-t._.js → [root-of-the-server]__107gjehjdhw8p._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__10kuehp7saz8h._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__113zn8es2wp67._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__04tkts7c9ylma._.js → [root-of-the-server]__13fabu66slkfb._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__14ept-_l8j32m._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__15s9onrf73-k8._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__10rhqv5xq9jaj._.js → [root-of-the-server]__191t_hhtr-k27._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__19l_r5vy3kxo1._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1096-q3_trmm9._.js → [root-of-the-server]__1_b_k8wgqyxy7._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0exp042uqhyqs._.js → [root-of-the-server]__1a7x--bos5pv8._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1adcmllk9wt5l._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1d5tbv79yjhqm._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1fj33_xkainxk._.js +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1itgt83qo1e77._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__12ymdwm8dphvu._.js → [root-of-the-server]__1mumjk3h0om80._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1nat8lbog5imr._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1p2oghl9lfgmk._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tcu4-eowz9vt._.js → [root-of-the-server]__1pwd99rch8xyl._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0llh-w4ta1qbp._.js → [root-of-the-server]__1sw2q1p1t59y8._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__06uaa_2zbg57p._.js → [root-of-the-server]__1tj-iwvrxfd1a._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__12-a3tcnfdcyq._.js → [root-of-the-server]__1u_13nhw3kuz3._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0tjab3yn0asf7._.js → [root-of-the-server]__1uojs0x42k86p._.js} +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1kieqcc6kdywx._.js → [root-of-the-server]__1yx8ayym979jd._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1zmavjo5fhryp._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__20of6xa16fwqa._.js +1 -1
- package/server/.next/server/chunks/ssr/_0-wc6f6p0c8lv._.js +3 -0
- package/server/.next/server/chunks/ssr/{_04ltmruop4rt3._.js → _02eudwc8ieb2r._.js} +3 -3
- package/server/.next/server/chunks/ssr/_034fv8o7kws2k._.js +3 -0
- package/server/.next/server/chunks/ssr/_03od6e8ibcxtf._.js +3 -0
- package/server/.next/server/chunks/ssr/_042ow6smd_1gj._.js +3 -0
- package/server/.next/server/chunks/ssr/{_090fib2x989oc._.js → _08xqk3eibu5aw._.js} +2 -2
- package/server/.next/server/chunks/ssr/{_01irlde8uxva8._.js → _0_8v3-nq-b4ug._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
- package/server/.next/server/chunks/ssr/_0_rtyc4t9xcdo._.js +1 -1
- package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
- package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
- package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1ag8axv14phju._.js → _0cbbks0ms7i_u._.js} +3 -3
- package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
- package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
- package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +4 -0
- package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
- package/server/.next/server/chunks/ssr/{_14n2368190qms._.js → _0fq8thje0tuch._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +4 -0
- package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +4 -0
- package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +4 -0
- package/server/.next/server/chunks/ssr/{_0tqc0bsnybvva._.js → _0ipnb60-_660b._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +3 -0
- package/server/.next/server/chunks/ssr/{_022u_nnwo1yb4._.js → _0kxkg0dbp42ai._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0lmcrl8r9dg49._.js +1 -1
- package/server/.next/server/chunks/ssr/_0mp5aext18ijx._.js +3 -0
- package/server/.next/server/chunks/ssr/_0ns_087lx5abm._.js +1 -1
- package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
- package/server/.next/server/chunks/ssr/{_18lgd6o04ugow._.js → _0oub-njkja8gu._.js} +3 -3
- package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +4 -0
- package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +1 -1
- package/server/.next/server/chunks/ssr/_0qo8tc43kjsf_._.js +1 -1
- package/server/.next/server/chunks/ssr/_0qyupoc7u5hr7._.js +3 -0
- package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +4 -0
- package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +4 -0
- package/server/.next/server/chunks/ssr/_0v6v5w16qxwke._.js +1 -1
- package/server/.next/server/chunks/ssr/_0wb79bnj96x0g._.js +3 -0
- package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
- package/server/.next/server/chunks/ssr/_0zixhhc1lheoi._.js +4 -0
- package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
- package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +5 -5
- package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
- package/server/.next/server/chunks/ssr/_11llsmv578p2i._.js +3 -0
- package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +4 -0
- package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
- package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
- package/server/.next/server/chunks/ssr/_1_xsrlijknnh3._.js +1 -1
- package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +4 -0
- package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
- package/server/.next/server/chunks/ssr/_1de6e6l7599fp._.js +1 -1
- package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +4 -0
- package/server/.next/server/chunks/ssr/_1dqf3jmb24s37._.js +1 -1
- package/server/.next/server/chunks/ssr/_1e47r3tlad52r._.js +3 -0
- package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +4 -0
- package/server/.next/server/chunks/ssr/{_1w_rq6clcs0ft._.js → _1fuywfexex2s8._.js} +3 -3
- package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
- package/server/.next/server/chunks/ssr/_1gl78598hz_ku._.js +1 -1
- package/server/.next/server/chunks/ssr/_1h93joqd_-1og._.js +1 -1
- package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +4 -0
- package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
- package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
- package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +4 -0
- package/server/.next/server/chunks/ssr/{_0hmxyfx7su4uk._.js → _1m4km_w39x5e9._.js} +2 -2
- package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +4 -0
- package/server/.next/server/chunks/ssr/_1qdox4yn1u4pc._.js +1 -1
- package/server/.next/server/chunks/ssr/_1qdqc9j_skd1q._.js +1 -1
- package/server/.next/server/chunks/ssr/_1r7o1vx4875hu._.js +1 -1
- package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +4 -0
- package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
- package/server/.next/server/chunks/ssr/_20wy2moxkzhf0._.js +3 -0
- package/server/.next/server/chunks/ssr/{_026w_ig6vy9bt._.js → _218164gkxgum_._.js} +2 -2
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_0y5m8cul6d7kk.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
- package/server/.next/server/chunks/ssr/node_modules_0bqq4kab3lt4c._.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_05z64qbskywkh._.js → node_modules_1-uce_v-roeci._.js} +1 -1
- package/server/.next/server/chunks/ssr/node_modules_@base-ui_react_dialog_index_parts_mjs_0wvx70_xziwkw._.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0p8s4lhdi0ir6._.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kkewzcx4540.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00t5_cu_8xco2.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_028rm32yw9745.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02tytjla8gfpw.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_05tff2l0grv3d.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08qavwdx-gipt.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09jdr97vksmwk.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c3z69fbbz6-a.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d4hxwzkts-8z.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dq-zslzf2s94.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_1q_82vyl-q7u6.js → node_modules_next_dist_esm_build_templates_app-page_0e-rjmezj0qkk.js} +2 -2
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0ivgh76j_tu2x.js → node_modules_next_dist_esm_build_templates_app-page_0e50mslm8ys4t.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0esqulnipbhj7.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0icasmc2qvtfa.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0idohkgskbja5.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ii2a6tud83pj.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ivr2dcq7hh5t.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mcwghl-di24f.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0n05qgf2t9o6n.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ntej2bo95ns3.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0o1l93c0tj-p8.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ollx_iq739y6.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0v16m5nv0x43b.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0wa_9ywaoqxrf.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0y94b-zvw0vrq.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ydzswpddtx9q.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zwpkpyuh6z99.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14t5-0abqp0sm.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18h3ke4tl-fzl.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_14-4y3i6c1vxc.js → node_modules_next_dist_esm_build_templates_app-page_19kqs-fc2i0zv.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_s_25znkg8mz.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_ysa6fs0tt59.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1b4hixza89i52.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1brrqdx4msjzf.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1e74o7dar2z12.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eqpqmdz9jgs0.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1f3932777ye1o.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1kx1n5-wqjvko.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1l6umnmh89nvy.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mdyuengydtxm.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qmm1wm-dfm_v.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t-fn8blx1hp8.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tf9xiz17b3cq.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tffdbiasnszd.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uisz6sszlhwp.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1umag21mbk-rs.js +3 -0
- package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0i3p3qfjihm3f.js → node_modules_next_dist_esm_build_templates_app-page_1vakvu0qtsn07.js} +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wmviw4zw6t_r.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xq449tjypb4s.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_zod_v4_classic_external_01k1rek7hgd0j.js +4 -4
- package/server/.next/server/chunks/ssr/src_02ynbzyh8nn02._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_0oagnv9_4qww7._.js → src_05kvmrkq5nfyh._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_0905fjqu0qv57._.js → src_097wa6oc_utgr._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_0_5_wl0sww-x7._.js +6 -3
- package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0uitfl3c1mdqb._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1-xw4hea2lvb3._.js +1 -1
- package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_071xsnvnzlvj8._.js → src_1751lvujjc-tz._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1f1x6508qetmp._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_1nse4o3frj33x._.js → src_1fomo1_as1-ea._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1koc8y1nfdlw3._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1pd5lqhm1x4yf._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1sv5tf2pk5-pn._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_0widudneyf0oq._.js → src_1wnx8vxv7nd04._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_0p2-zm5eewkqo._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_1za4o0--zhso5._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1jme7fm7ej_lr._.js +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_02upf_c41dauw._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_d1_page_tsx_167hwnq_9uh81._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_0d1uyir4fe7pc._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_domains_1ut499n11u8_r._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_firebase_row-menu_tsx_0hssoq3pqjl-n._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_17htk-vea5fna._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_overview_page_tsx_0se3f3ln9q-42._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_repos_[id]_page_tsx_1nkxthc4ethrj._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_status_page_tsx_1zvj799nv4kah._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_1ofufib3-zzt-._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_app_signin_06v-xlrxfp079._.js → src_app_signin_11vigmz4xm91m._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_components_0-x11r8_844pu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_08d78uqnnmrrh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_0_xymno8nakru._.js +3 -0
- package/server/.next/server/chunks/ssr/src_components_0ozvphxxwb7d-._.js +3 -0
- package/server/.next/server/chunks/ssr/src_components_0tmtbf2etsx03._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_charts_tsx_0u0c5sxi3-7ug._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_live_tsx_1p2s3b807w0jt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_components_ui_dialog_tsx_1tn-i_6d3rhzt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +7 -1
- package/server/.next/server/chunks/ssr/src_lib_0f_4mvf4-xxst._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1xwavi_m_li7p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1zgor_vrwl5kt._.js +5 -0
- package/server/.next/server/chunks/ssr/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +3 -3
- package/server/.next/server/chunks/ssr/src_lib_collector_self-update_ts_18m5vmptpjhtg._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_data_apps-db_ts_02ovqtci8e7o6._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_github-db_ts_02xuh84m-__8z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_lib_demo_15okweo0amos4._.js → src_lib_demo_07uq47fhms-3d._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_lib_domain-move_ts_04stiet1-xpe2._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_local-auth_setup_ts_05zj7z33ne4f5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_security_node-runtime_ts_1jei00s21d6v0._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_display-name_ts_0xoimm6j7bwnf._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_view_network_ts_0toa7t-gw9cup._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_04omlb_sgy-_r._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_actions_telegram-approvals_ts_14gvz6qi_j4aa._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +6 -6
- package/server/.next/server/chunks/ssr/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
- package/server/.next/server/middleware-build-manifest.js +105 -105
- package/server/.next/server/pages/404.html +1 -1
- package/server/.next/server/pages/500.html +1 -1
- package/server/.next/server/preview-props.json +3 -3
- package/server/.next/server/server-reference-manifest.js +1 -1
- package/server/.next/server/server-reference-manifest.json +860 -674
- package/server/.next/static/chunks/04ospu_w--6p9.js +1 -0
- package/server/.next/static/chunks/06a83nde7riq-.js +1 -0
- package/server/.next/static/chunks/088c6cw88jmlb.js +7 -0
- package/server/.next/static/chunks/08f1euchlacye.js +1 -0
- package/server/.next/static/chunks/09e-vdlax9bp6.js +1 -0
- package/server/.next/static/chunks/{0rgn3-cks0udn.js → 0a-rekt06v0sv.js} +1 -1
- package/server/.next/static/chunks/{3zaeh5nbkqpyj.js → 0a4b85ckxbprh.js} +1 -1
- package/server/.next/static/chunks/0buwzrf7dpagn.js +1 -0
- package/server/.next/static/chunks/0dmql-jz-o69o.js +1 -0
- package/server/.next/static/chunks/0iyozrryj1w49.js +1 -0
- package/server/.next/static/chunks/{0r2z8zg4n43pd.js → 0jf5lpzwq4vh1.js} +1 -1
- package/server/.next/static/chunks/0p6hja9octhrd.js +1 -0
- package/server/.next/static/chunks/{2wd8yh_ni0lqj.js → 0qoql97izcn4l.js} +1 -1
- package/server/.next/static/chunks/0qsk0bb1x81nc.js +1 -0
- package/server/.next/static/chunks/{22ierqxhqtwn6.js → 0wkv5e-c430ea.js} +2 -2
- package/server/.next/static/chunks/0x41o1ud_ksl1.js +1 -0
- package/server/.next/static/chunks/0x_wb_w6fgkyt.js +1 -0
- package/server/.next/static/chunks/{0foc_dy1j2x52.js → 12bbufru1ui37.js} +1 -1
- package/server/.next/static/chunks/{25r6-t40ok5s9.js → 12zasgv1xisb5.js} +1 -1
- package/server/.next/static/chunks/{2yjh4ytp-sedv.js → 149lk0boxihnl.js} +1 -1
- package/server/.next/static/chunks/17lwu-2id6c_-.js +1 -0
- package/server/.next/static/chunks/{16lnw4itnfhw-.js → 1_93oj1b-nrla.js} +1 -1
- package/server/.next/static/chunks/1bt81ubbahkh6.js +1 -0
- package/server/.next/static/chunks/1c0s-ejiwfy2u.js +1 -0
- package/server/.next/static/chunks/1g_kip3m3h9q6.js +1 -0
- package/server/.next/static/chunks/1i8i1ieoh738i.js +1 -0
- package/server/.next/static/chunks/1s0s32oqy-54t.js +1 -0
- package/server/.next/static/chunks/1ss-6-h8nloc9.js +1 -0
- package/server/.next/static/chunks/1t8fe3w70uapo.js +1 -0
- package/server/.next/static/chunks/1t9f2pdc3crnr.js +1 -0
- package/server/.next/static/chunks/1urtw14pwufsv.js +1 -0
- package/server/.next/static/chunks/1wh-ps6a57yj1.js +1 -0
- package/server/.next/static/chunks/20ujg0hz_need.js +1 -0
- package/server/.next/static/chunks/23b9tctw1mn5a.js +76 -0
- package/server/.next/static/chunks/292uz-rsh422k.js +1 -0
- package/server/.next/static/chunks/{11gctw6uutyd7.js → 29xg947lkf4-x.js} +1 -1
- package/server/.next/static/chunks/2ac9gyn8mzqp4.js +1 -0
- package/server/.next/static/chunks/2fze_cnwk8j76.js +1 -0
- package/server/.next/static/chunks/2g9dossbqnlr7.js +1 -0
- package/server/.next/static/chunks/{2aerfowxsf234.js → 2l4upq4bwgvvu.js} +1 -1
- package/server/.next/static/chunks/{177dd6kiifsoi.js → 2pi0r5spn0slc.js} +1 -1
- package/server/.next/static/chunks/2rpa_j81h_45y.js +1 -0
- package/server/.next/static/chunks/2szc6dvuj3gxy.js +1 -0
- package/server/.next/static/chunks/2u3iceaxpiiws.js +1 -0
- package/server/.next/static/chunks/2z21xxtcmsmhe.js +1 -0
- package/server/.next/static/chunks/{1rt5heq1xn_az.js → 315s21b2dd7lg.js} +1 -1
- package/server/.next/static/chunks/35to2q1uretcv.js +1 -0
- package/server/.next/static/chunks/{2q88116332v43.js → 37zqf9hef7g0k.js} +1 -1
- package/server/.next/static/chunks/38-ay595f3xie.js +1 -0
- package/server/.next/static/chunks/38ao1jq4zw-nd.js +1 -0
- package/server/.next/static/chunks/38conxv_f-pgo.js +1 -0
- package/server/.next/static/chunks/3cyesi3hi6l1g.js +5 -0
- package/server/.next/static/chunks/{04lzxilmq17f_.js → 3efi_dyz4y0lj.js} +1 -1
- package/server/.next/static/chunks/3qjirj3rjf5mu.js +1 -0
- package/server/.next/static/chunks/3vpy-ra0rib9m.js +1 -0
- package/server/.next/static/chunks/{22h4lj0gp_6n5.js → 3xxcpv79l5tnh.js} +1 -1
- package/server/.next/static/chunks/3ybb15n1q3f-o.css +3 -0
- package/server/drizzle-selfhost/0007_webhook_channel.sql +5 -0
- package/server/drizzle-selfhost/meta/_journal.json +7 -0
- package/tools/reset-login.mjs +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0ych1y0j6e38k._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zhzy29i2vylk._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zwe7i-isx08p._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10ee5dhzx78ne._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10q3dc485yp4l._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__10u93zgn0-c5a._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__115yxhfn37r-k._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__14mz6mbk2m_e0._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__15y82djobfhof._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__165qlmqwvxmzr._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1acps2oi9s0i7._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1erq9v_t5jwp5._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1ip0gr1i080kn._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1mrpvwofqktnv._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1ppnnpydkrs93._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1qdo_hgivrawk._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1qp_dvfy4vvsm._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1rk6wb8qem46d._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1s20vd1etiird._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1s9_nmhp7chvj._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1yc_xjjam78sg._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__2067x8gf07f-i._.js +0 -3
- package/server/.next/server/chunks/_0beox3lp9z58-._.js +0 -3
- package/server/.next/server/chunks/_0gobsd0_oxj5v._.js +0 -3
- package/server/.next/server/chunks/_0vwctvzwde-sz._.js +0 -37
- package/server/.next/server/chunks/_0yzmfi6iwa_sk._.js +0 -3
- package/server/.next/server/chunks/_1c3ksp22eq0rw._.js +0 -37
- package/server/.next/server/chunks/_1cjfskikk32wj._.js +0 -37
- package/server/.next/server/chunks/_1d9mf39gz0bv4._.js +0 -3
- package/server/.next/server/chunks/_1dlvqnaceqr-_._.js +0 -3
- package/server/.next/server/chunks/_1jveb9aojczvg._.js +0 -3
- package/server/.next/server/chunks/_1qw43v448l9e7._.js +0 -37
- package/server/.next/server/chunks/src_0yve3gn52i_mn._.js +0 -3
- package/server/.next/server/chunks/src_lib_0cbh80jxsdx3n._.js +0 -6
- package/server/.next/server/chunks/src_lib_0s_txig7jm3ty._.js +0 -9
- package/server/.next/server/chunks/src_lib_15wd7ab4u5nrn._.js +0 -9
- package/server/.next/server/chunks/src_lib_15y0kwcot_7u0._.js +0 -6
- package/server/.next/server/chunks/src_lib_16y1secb8t9fj._.js +0 -6
- package/server/.next/server/chunks/src_lib_1iwyh213u9xts._.js +0 -6
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +0 -4
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +0 -3
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1mmmc4yhx5fm6._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1nv-uycpa6_lh._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1p5zuqwmfkoo1._.js +0 -3
- package/server/.next/server/chunks/ssr/[externals]__1thdbok76xtof._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__01mgajn73iwc7._.js +0 -5
- package/server/.next/server/chunks/ssr/[root-of-the-server]__05q-laapy00sk._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0dd9rci1isdjf._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0lehuiyzxp78t._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0p7d9dfmuhnvv._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0tp9vtckbkk9o._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__10y2ig7dg3f-k._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__194546bqpq02e._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1bvp2ia3h9qbs._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1dyjzbqwy6o12._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1l695djsioelp._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1pfk0fqey3ipf._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1pgpryg9lkmoz._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1t4thrxlv4zre._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1tuftf7fags7x._.js +0 -5
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1vyste6xyyu37._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1yf4_oyl-3xp7._.js +0 -3
- package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +0 -4
- package/server/.next/server/chunks/ssr/_06kn13xh_13da._.js +0 -3
- package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +0 -4
- package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +0 -4
- package/server/.next/server/chunks/ssr/_0i2a_ziqzhyq-._.js +0 -3
- package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +0 -4
- package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +0 -4
- package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +0 -4
- package/server/.next/server/chunks/ssr/_0qcvpnwa1u3vr._.js +0 -3
- package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +0 -3
- package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +0 -4
- package/server/.next/server/chunks/ssr/_0ymtfa6vo-yz5._.js +0 -3
- package/server/.next/server/chunks/ssr/_0yn1xeumiigj0._.js +0 -3
- package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +0 -4
- package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +0 -4
- package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +0 -4
- package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +0 -4
- package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +0 -4
- package/server/.next/server/chunks/ssr/_1dlvqnaceqr-_._.js +0 -3
- package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +0 -4
- package/server/.next/server/chunks/ssr/_1e5zfwgdf0mm5._.js +0 -3
- package/server/.next/server/chunks/ssr/_1h5tfqxzqd2tz._.js +0 -3
- package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +0 -4
- package/server/.next/server/chunks/ssr/_1k8rjvzlscs56._.js +0 -3
- package/server/.next/server/chunks/ssr/_1l-vlfiltmzu3._.js +0 -3
- package/server/.next/server/chunks/ssr/_1wssvwkmxcdn5._.js +0 -3
- package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +0 -4
- package/server/.next/server/chunks/ssr/_20gx4od4pnj8d._.js +0 -3
- package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +0 -4
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1zw_mdh2ep6vs.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_06a1fnrawxlh1.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_217-u-dmlzx6a.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_0ven9q46d3d7s.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_1_u5afwqp6brs._.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j32_ibz4._.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9mbf-fh.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kg_ige9ehqj.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00k37tbaia8dh.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00z_p6szkga15.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_01-utr59mtfg1.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_055hw7kwif935.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06fg_efdkc3kx.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08f3d08smwt6_.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcfro9qovjn.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c8wd69fns_0d.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cha-3kg99u4h.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d_0he72lzkh9.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0f6chw8z5cuyg.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j9-_xhs21abp.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0kwpdjujljna-.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rer2akuum5r-.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0umt_achusjjb.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0un7wq602mt3n.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vrdl9n7guitd.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vse2cboy4cms.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0x7ey4_8b48_o.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0z8l8t55t65t_.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zap6p0vuv-fp.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-m49cfu6a7gl.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-w3hswsbrppl.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1167zbjp4ys_a.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_129serqqq3xyq.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12en3pdvxu0dy.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1596hk9t3r1a5.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_17us24ry0om-z.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_8xi22-aoxu1.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_l32aoya75_m.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ar0v26274uhj.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dkgfjoaf_1g3.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eg14m09zdg__.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1h_y671y1la_8.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mkokmyyp47hd.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1msjiuu45famw.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mw7isdchouml.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1n4cotiug2a_r.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1njl24pr6dwrt.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o1_3bydb-3j5.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1pjor42_s9imf.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qta4yeufzpz7.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qxbl6k6dji0s.js +0 -3
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_21a3kf8buivxw.js +0 -3
- package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0ley8c3htc2q9._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0p0fk07bj9gpq._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0ubtruqmercw2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_0vi30frvjgri2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_12sdm7skn8fr1._.js +0 -3
- package/server/.next/server/chunks/ssr/src_16lx0qdi44evh._.js +0 -3
- package/server/.next/server/chunks/ssr/src_17yq6_bqlwgvy._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1n-6pz04odixj._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_05mlxmavgli8_._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_0u1ec16rmzze6._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_1yp2m9j9dnsv-._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_ui_dropdown-menu_tsx_1xyz_k6bpdu_5._.js +0 -3
- package/server/.next/static/chunks/01mhc6kz81iwf.js +0 -1
- package/server/.next/static/chunks/02byu0sw5d0g9.js +0 -1
- package/server/.next/static/chunks/02e07gc948zdh.js +0 -1
- package/server/.next/static/chunks/04yl9t4cn6zwm.js +0 -1
- package/server/.next/static/chunks/08oksl0raetg5.js +0 -1
- package/server/.next/static/chunks/0d556cjlmwiq4.js +0 -1
- package/server/.next/static/chunks/0jm8a63677590.js +0 -1
- package/server/.next/static/chunks/0lcmy-_tdtrqk.js +0 -1
- package/server/.next/static/chunks/0ld0vtd027il_.js +0 -1
- package/server/.next/static/chunks/0qciunoy58a03.js +0 -7
- package/server/.next/static/chunks/0r-2mywc7qkb_.js +0 -1
- package/server/.next/static/chunks/0xwz6ps1581qa.js +0 -1
- package/server/.next/static/chunks/1-zyqj42cr9hy.css +0 -3
- package/server/.next/static/chunks/12l7tr29-a97t.js +0 -1
- package/server/.next/static/chunks/160mk2sltxl3e.js +0 -1
- package/server/.next/static/chunks/1bn-7bluoi2vi.js +0 -1
- package/server/.next/static/chunks/1d0mukiro5klq.js +0 -1
- package/server/.next/static/chunks/1jc8ghvf721gg.js +0 -76
- package/server/.next/static/chunks/1nfofl7nhy6fx.js +0 -1
- package/server/.next/static/chunks/1x8bgprfjtt59.js +0 -1
- package/server/.next/static/chunks/1yctclvh0qaxz.js +0 -1
- package/server/.next/static/chunks/1zyyqxguxs96l.js +0 -1
- package/server/.next/static/chunks/23scyaimkowfl.js +0 -1
- package/server/.next/static/chunks/2lfa16b0tlnvj.js +0 -1
- package/server/.next/static/chunks/2onhuya5-n3-e.js +0 -1
- package/server/.next/static/chunks/2pn16qmann41d.js +0 -1
- package/server/.next/static/chunks/2szlo15y09085.js +0 -1
- package/server/.next/static/chunks/2v_f39dz8sa3-.js +0 -1
- package/server/.next/static/chunks/2xhx4rma6gx5o.js +0 -1
- package/server/.next/static/chunks/37f1rjolzxbiv.js +0 -1
- package/server/.next/static/chunks/38c9rnljzl6iw.js +0 -1
- package/server/.next/static/chunks/3_erdlvi2tz19.js +0 -1
- package/server/.next/static/chunks/3qbk8r6jm8udo.js +0 -5
- package/server/.next/static/chunks/3sg_npfod25zq.js +0 -1
- package/server/.next/static/chunks/3tl9dgour-h9l.js +0 -1
- package/server/.next/static/chunks/3vbz762vgy3dx.js +0 -1
- package/server/.next/static/chunks/3wi43ltm1e5iy.js +0 -1
- package/server/.next/static/chunks/3yljsdgzvrkdf.js +0 -1
- package/server/.next/static/chunks/42z3imsp11da1.js +0 -1
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_buildManifest.js +0 -0
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_clientMiddlewareManifest.js +0 -0
- /package/server/.next/static/{ZGhdfWFNBWLdWW4UhJrAO → rBXBlxKpaOHcc5KZDIhAL}/_ssgManifest.js +0 -0
package/bin/watchbell.mjs
CHANGED
|
@@ -9,8 +9,9 @@ import { randomBytes } from "node:crypto";
|
|
|
9
9
|
import fs from "node:fs";
|
|
10
10
|
import os from "node:os";
|
|
11
11
|
import path from "node:path";
|
|
12
|
+
import readlineCore from "node:readline";
|
|
12
13
|
import readline from "node:readline/promises";
|
|
13
|
-
import { fileURLToPath } from "node:url";
|
|
14
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
14
15
|
// The default import, not { parseEnv }: on an old Node.js a missing named export fails before any code runs, and the
|
|
15
16
|
// "needs Node.js 24" message below would never print.
|
|
16
17
|
import util from "node:util";
|
|
@@ -26,6 +27,18 @@ import {
|
|
|
26
27
|
staleLockHint,
|
|
27
28
|
superviseChild,
|
|
28
29
|
} from "../scripts/selfhost-lib.mjs";
|
|
30
|
+
import {
|
|
31
|
+
NODE_CHECK_EVERY_MS,
|
|
32
|
+
NODE_EOL_URL,
|
|
33
|
+
NODE_INDEX_URL,
|
|
34
|
+
nodeVerdict,
|
|
35
|
+
nodeWarningLine,
|
|
36
|
+
parseNodeEol,
|
|
37
|
+
parseNodeIndex,
|
|
38
|
+
storedNodeCycles,
|
|
39
|
+
storedNodeIndex,
|
|
40
|
+
} from "../scripts/node-runtime.mjs";
|
|
41
|
+
import { LOG_MAX_BYTES, rotateLog } from "../scripts/selfhost-log.mjs";
|
|
29
42
|
|
|
30
43
|
const SERVICE = "watchbell.service";
|
|
31
44
|
const TASK = "Watchbell";
|
|
@@ -37,15 +50,16 @@ const READY_TIMEOUT_MS = 120_000;
|
|
|
37
50
|
|
|
38
51
|
// [usage, description]: --help prints them all (a test checks that every command is listed).
|
|
39
52
|
export const COMMANDS = [
|
|
40
|
-
["watchbell [start] [--no-open]", "Start Watchbell (the default). First run creates ~/.watchbell,
|
|
53
|
+
["watchbell [start] [--no-open]", "Start Watchbell (the default). First run creates ~/.watchbell, shows the setup code and opens /setup. In a terminal it shows a short menu: open, keep running in the background, live log, stop."],
|
|
54
|
+
["watchbell start --verbose", "Show the server's own messages here, as before 1.2.2 (otherwise they go to ~/.watchbell/logs/watchbell.log)."],
|
|
41
55
|
["watchbell start --new-key", "Start with a new OPS_ENCRYPTION_KEY when it was lost (tokens saved with the old key can't be read)."],
|
|
42
56
|
["watchbell start --host <addr> --port <n>", "Listen on this address and port for this run (also with run). 0.0.0.0 opens it to your network."],
|
|
43
57
|
["watchbell run", "Start in the foreground for a service manager (never opens a browser)."],
|
|
44
58
|
["watchbell stop [--timeout <seconds>]", "Ask the running Watchbell to stop cleanly (default wait 30 s)."],
|
|
45
|
-
["watchbell status", "Show whether Watchbell runs,
|
|
59
|
+
["watchbell status", "Show whether Watchbell runs, the address it really listens on, and its folders (exit 0 running, 3 not running)."],
|
|
46
60
|
["watchbell service install [--yes]", "Start Watchbell when you log in: a systemd user service (Linux), a Scheduled Task (Windows) or a launchd agent (macOS)."],
|
|
47
61
|
["watchbell service uninstall [--yes]", "Remove that service or task. Your settings and data stay."],
|
|
48
|
-
["watchbell update", "Update to the latest version with the npm next to this Node.js (an installed service is stopped and started again)."],
|
|
62
|
+
["watchbell update", "Update to the latest version with the npm next to this Node.js, into the folder this copy runs from (an installed service is stopped and started again)."],
|
|
49
63
|
["watchbell reset-login <email>", "Give an account a new temporary password and remove its authenticator (Watchbell stopped)."],
|
|
50
64
|
["watchbell --version", "Print the version."],
|
|
51
65
|
["watchbell --help", "Print this help."],
|
|
@@ -65,15 +79,24 @@ export function helpText(version) {
|
|
|
65
79
|
"environment override them. Other variables set in the environment win over the file, except DATABASE_URL, which",
|
|
66
80
|
"is read from the file only.",
|
|
67
81
|
"",
|
|
82
|
+
"watchbell start writes the server's messages to ~/.watchbell/logs/watchbell.log (two files of about 5 MB at most);",
|
|
83
|
+
"errors still show in the terminal as one line. watchbell run (for a service manager) prints them as before.",
|
|
84
|
+
"",
|
|
68
85
|
"watchbell start and watchbell status ask registry.npmjs.org at most once a day whether a newer version exists (a",
|
|
69
|
-
"plain GET of the version number, nothing about you).
|
|
86
|
+
"plain GET of the version number, nothing about you), and nodejs.org and endoflife.date at most twice a day whether",
|
|
87
|
+
"this Node.js has a security fix waiting or is past end of life (plain GETs of their public lists; a warning is",
|
|
88
|
+
"printed only then). The running Watchbell reads those two lists every 12 h as well, for its Settings › Collector",
|
|
89
|
+
"page, and npm's latest version, for the owner's update notice in the console. WATCHBELL_NO_UPDATE_CHECK=1 turns",
|
|
90
|
+
"all of it off; NO_UPDATE_NOTIFIER=1 or CI turn off the commands' part.",
|
|
70
91
|
].join("\n");
|
|
71
92
|
}
|
|
72
93
|
|
|
73
94
|
// ---------------------------------------------------------------------------------------------------- arguments
|
|
74
95
|
|
|
75
96
|
const COMMAND_NAMES = ["start", "run", "stop", "status", "service", "reset-login", "update"];
|
|
76
|
-
const OPTION_OWNER = { "--no-open": "start", "--new-key": "start", "--timeout": "stop", "--yes": "service", "--host": ["start", "run"], "--port": ["start", "run"] };
|
|
97
|
+
const OPTION_OWNER = { "--no-open": "start", "--new-key": "start", "--verbose": "start", "--timeout": "stop", "--yes": "service", "--host": ["start", "run"], "--port": ["start", "run"] };
|
|
98
|
+
/** What an option the CLI doesn't know prints (exit 2): a typo such as --no-openen is never ignored. */
|
|
99
|
+
export const unknownOption = (a) => `Unknown option ${a} (see watchbell --help)`;
|
|
77
100
|
// An IPv4 or IPv6 address (brackets allowed) or a host name; never something that looks like an option.
|
|
78
101
|
const HOST_ARG = /^(?:\[[0-9A-Fa-f:.]+\]|[0-9A-Fa-f.]*:[0-9A-Fa-f:.]*|[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?)$/;
|
|
79
102
|
// Brackets off, IPv6 in lower case, every spelling of the all-zero IPv6 address as "::" (the health check knows that one).
|
|
@@ -85,7 +108,7 @@ const normalizeHostArg = (v) => {
|
|
|
85
108
|
const isPortArg = (v) => /^\d{1,5}$/.test(v) && Number(v) >= 1 && Number(v) <= 65535;
|
|
86
109
|
|
|
87
110
|
export function parseArgs(argv) {
|
|
88
|
-
const opts = { command: null, args: [], open: true, newKey: false, yes: false, timeout: null, help: false, version: false, host: null, port: null };
|
|
111
|
+
const opts = { command: null, args: [], open: true, newKey: false, verbose: false, yes: false, timeout: null, help: false, version: false, host: null, port: null };
|
|
89
112
|
const errors = [];
|
|
90
113
|
const used = [];
|
|
91
114
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -98,14 +121,19 @@ export function parseArgs(argv) {
|
|
|
98
121
|
} else if (a === "--new-key") {
|
|
99
122
|
opts.newKey = true;
|
|
100
123
|
used.push("--new-key");
|
|
124
|
+
} else if (a === "--verbose") {
|
|
125
|
+
opts.verbose = true;
|
|
126
|
+
used.push("--verbose");
|
|
101
127
|
} else if (a === "--yes" || a === "-y") {
|
|
102
128
|
opts.yes = true;
|
|
103
129
|
used.push("--yes");
|
|
104
|
-
} else if (
|
|
105
|
-
|
|
130
|
+
} else if (/^--timeout(=|$)/.test(a)) {
|
|
131
|
+
// --timeout <seconds> or --timeout=<seconds>, like --host and --port.
|
|
132
|
+
const inline = a.length > 9 ? a.slice(10) : undefined;
|
|
133
|
+
const v = inline ?? argv[i + 1];
|
|
106
134
|
if (v !== undefined && /^\d{1,4}$/.test(v) && Number(v) > 0) {
|
|
107
135
|
opts.timeout = Number(v);
|
|
108
|
-
i++;
|
|
136
|
+
if (inline === undefined) i++;
|
|
109
137
|
} else errors.push("--timeout needs a number of seconds (1-9999)");
|
|
110
138
|
used.push("--timeout");
|
|
111
139
|
} else if (/^--(host|port)(=|$)/.test(a)) {
|
|
@@ -120,7 +148,7 @@ export function parseArgs(argv) {
|
|
|
120
148
|
} else if (v !== undefined && isPortArg(v)) opts.port = String(Number(v));
|
|
121
149
|
else errors.push("--port needs a port number (1-65535)");
|
|
122
150
|
used.push(`--${name}`);
|
|
123
|
-
} else if (a.startsWith("-")) errors.push(
|
|
151
|
+
} else if (a.startsWith("-")) errors.push(unknownOption(a));
|
|
124
152
|
else if (opts.command === null) opts.command = a;
|
|
125
153
|
else opts.args.push(a);
|
|
126
154
|
}
|
|
@@ -192,6 +220,10 @@ export function defaultDeps() {
|
|
|
192
220
|
cliPath: fileURLToPath(import.meta.url),
|
|
193
221
|
out: (m) => console.log(m),
|
|
194
222
|
err: (m) => console.error(m),
|
|
223
|
+
// The menu (1.2.2): raw writes for the cursor codes, and the keyboard. Both ends must be a terminal for it.
|
|
224
|
+
write: (s) => process.stdout.write(s),
|
|
225
|
+
stdin: process.stdin,
|
|
226
|
+
stdoutTty: Boolean(process.stdout.isTTY),
|
|
195
227
|
spawn,
|
|
196
228
|
runSync: runSyncDefault,
|
|
197
229
|
fetch: globalThis.fetch,
|
|
@@ -267,7 +299,7 @@ export function resolveContext(d) {
|
|
|
267
299
|
// own SITE_URL names that address: localhost would not answer.
|
|
268
300
|
if (siteUrl === null || (!isSet(d.env.WATCHBELL_SITE_URL) && siteUrl === `http://localhost:${filePort}`)) siteUrl = defaultSiteUrl(host, port);
|
|
269
301
|
const serverDir = path.join(d.pkgRoot, "server");
|
|
270
|
-
return { home, envFile, merged, dataDir, host, port, siteUrl, serverDir, lockFile: lockFileOf(dataDir), healthUrl: healthUrlOf(host, port) };
|
|
302
|
+
return { home, envFile, merged, dataDir, host, port, siteUrl, serverDir, version: packageVersion(d.pkgRoot), lockFile: lockFileOf(dataDir), healthUrl: healthUrlOf(host, port) };
|
|
271
303
|
}
|
|
272
304
|
|
|
273
305
|
/** The environment of the server (and of reset-login): absolute folders, since server.js changes into its own dir. */
|
|
@@ -276,6 +308,8 @@ export function serverEnv(ctx) {
|
|
|
276
308
|
...selfhostEnv({ ...ctx.merged, WATCHBELL_DATA_DIR: ctx.dataDir }),
|
|
277
309
|
WATCHBELL_HOME: ctx.home,
|
|
278
310
|
WATCHBELL_MIGRATIONS_DIR: path.join(ctx.serverDir, "drizzle-selfhost"),
|
|
311
|
+
// 1.2.3: the console's "a newer Watchbell is available" and "What's new" compare against this.
|
|
312
|
+
...(ctx.version && ctx.version !== "unknown" ? { WATCHBELL_VERSION: ctx.version } : {}),
|
|
279
313
|
HOST: ctx.host,
|
|
280
314
|
HOSTNAME: ctx.host, // what Next's standalone server.js reads
|
|
281
315
|
PORT: ctx.port,
|
|
@@ -490,7 +524,7 @@ function noteIgnoredShellAddress(ctx, d) {
|
|
|
490
524
|
}
|
|
491
525
|
}
|
|
492
526
|
|
|
493
|
-
async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
527
|
+
async function cmdStart(first, d, { open, foreground, newKey, track, verbose = false }) {
|
|
494
528
|
let ctx = first;
|
|
495
529
|
const serverJs = path.join(ctx.serverDir, "server.js");
|
|
496
530
|
if (!fs.existsSync(serverJs)) {
|
|
@@ -503,12 +537,13 @@ async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
|
503
537
|
// start (and a service would restart it in a loop), so it goes.
|
|
504
538
|
if (removeStaleLock(ctx.lockFile, lock.pid)) d.out(`Removed a leftover database lock (${ctx.lockFile}): process ${lock.pid} is now ${lock.name}, not Watchbell.`);
|
|
505
539
|
} else if (lock.state === "held") {
|
|
506
|
-
const
|
|
540
|
+
const live = runningContext(ctx, d).ctx; // the address it really runs on (--port), not only the .env one
|
|
541
|
+
const probe = await probeHealth(live.healthUrl, d.fetch);
|
|
507
542
|
if (probe?.service === "watchbell") {
|
|
508
|
-
d.err(`Watchbell is already running (process ${lock.pid}, data in ${ctx.dataDir}) at ${
|
|
543
|
+
d.err(`Watchbell is already running (process ${lock.pid}, data in ${ctx.dataDir}) at ${live.siteUrl}`);
|
|
509
544
|
d.err('Stop it first with "watchbell stop" if you want to start it again.');
|
|
510
545
|
} else {
|
|
511
|
-
d.err(`The database in ${ctx.dataDir} is locked by process ${lock.pid}${lock.name ? ` (${lock.name})` : ""}, but no Watchbell answers at ${
|
|
546
|
+
d.err(`The database in ${ctx.dataDir} is locked by process ${lock.pid}${lock.name ? ` (${lock.name})` : ""}, but no Watchbell answers at ${live.healthUrl}.`);
|
|
512
547
|
d.err('If Watchbell is still starting, wait a moment. If it runs with other settings, stop it with "watchbell stop".');
|
|
513
548
|
d.err(staleLockHint(ctx.lockFile));
|
|
514
549
|
}
|
|
@@ -527,6 +562,8 @@ async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
|
527
562
|
if (!made) return 1;
|
|
528
563
|
if (made.created || made.filled.length) ctx = resolveContext(d); // the server needs what was just written
|
|
529
564
|
const version = packageVersion(d.pkgRoot);
|
|
565
|
+
// 1.2.2: `start` is quiet unless --verbose. `run` (a service manager's log) and --verbose print as before.
|
|
566
|
+
if (!foreground && !verbose) return startQuiet(ctx, d, { open, made, version, serverJs });
|
|
530
567
|
d.out(`Watchbell ${version}`);
|
|
531
568
|
if (made.created) d.out(`Created ${ctx.envFile} with new secrets (they are not shown).`);
|
|
532
569
|
else if (made.filled.length) d.out(`Added missing settings to ${ctx.envFile}: ${made.filled.join(", ")}.`);
|
|
@@ -537,9 +574,11 @@ async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
|
537
574
|
d.out(`Starting on ${ctx.siteUrl} ...`);
|
|
538
575
|
// Asked while the server starts, so it never delays the start; said once the server is ready (start only, not run).
|
|
539
576
|
const update = foreground ? null : checkForUpdate(ctx, d, { background: true });
|
|
577
|
+
const runtime = foreground ? null : checkNodeRuntime(ctx, d, { background: true }); // D20, the same way
|
|
540
578
|
|
|
541
579
|
if (track) track.spawned = true;
|
|
542
580
|
const child = d.spawn(d.execPath, [serverJs], { cwd: ctx.serverDir, env: serverEnv(ctx), stdio: "inherit" });
|
|
581
|
+
writeRuntime(ctx, child.pid, d);
|
|
543
582
|
const unsupervise = superviseChild(child, { platform: d.platform, proc: d.proc });
|
|
544
583
|
let exited = false;
|
|
545
584
|
const exit = new Promise((resolve) => {
|
|
@@ -559,6 +598,7 @@ async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
|
559
598
|
announce(ctx, d, { open, foreground });
|
|
560
599
|
announceNetwork(ctx, d);
|
|
561
600
|
await sayUpdate(update, d);
|
|
601
|
+
await sayNodeRuntime(runtime, d);
|
|
562
602
|
break;
|
|
563
603
|
}
|
|
564
604
|
if (d.now() >= deadline) {
|
|
@@ -569,6 +609,7 @@ async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
|
569
609
|
}
|
|
570
610
|
const code = await exit;
|
|
571
611
|
unsupervise();
|
|
612
|
+
removeRuntime(ctx, child.pid);
|
|
572
613
|
return code;
|
|
573
614
|
}
|
|
574
615
|
|
|
@@ -584,6 +625,517 @@ function announce(ctx, d, { open, foreground }) {
|
|
|
584
625
|
if (open && !foreground) d.openUrl(code ? `${ctx.siteUrl}/setup` : ctx.siteUrl);
|
|
585
626
|
}
|
|
586
627
|
|
|
628
|
+
// ---------------------------------------------------------------------------------------------------- runtime file
|
|
629
|
+
|
|
630
|
+
// <data>/runtime.json: the pid and the address of the server the CLI started (start, run), so status and stop find a
|
|
631
|
+
// server started with --port or WATCHBELL_PORT even when .env names another port. It counts only while its pid holds
|
|
632
|
+
// the database lock: a file left by a crash names a pid that no longer does.
|
|
633
|
+
const RUNTIME_FILE = "runtime.json";
|
|
634
|
+
const runtimeFileOf = (ctx) => path.join(ctx.dataDir, RUNTIME_FILE);
|
|
635
|
+
|
|
636
|
+
function writeRuntime(ctx, pid, d) {
|
|
637
|
+
if (!Number.isInteger(pid)) return;
|
|
638
|
+
try {
|
|
639
|
+
fs.writeFileSync(runtimeFileOf(ctx), `${JSON.stringify({ pid, host: ctx.host, port: ctx.port, siteUrl: ctx.siteUrl, startedAt: new Date(d.now()).toISOString() })}\n`, { mode: 0o600 });
|
|
640
|
+
} catch {
|
|
641
|
+
// a read-only data folder: status falls back to the .env address
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
function readRuntime(ctx) {
|
|
646
|
+
try {
|
|
647
|
+
const r = JSON.parse(fs.readFileSync(runtimeFileOf(ctx), "utf8"));
|
|
648
|
+
const ok = Number.isInteger(r?.pid) && typeof r.host === "string" && HOST_ARG.test(r.host) && isPortArg(String(r.port)) && /^https?:\/\/\S+$/.test(String(r.siteUrl));
|
|
649
|
+
return ok ? { pid: r.pid, host: r.host, port: String(r.port), siteUrl: String(r.siteUrl) } : null;
|
|
650
|
+
} catch {
|
|
651
|
+
return null;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
function removeRuntime(ctx, pid) {
|
|
656
|
+
if (readRuntime(ctx)?.pid !== pid) return; // another start wrote it since
|
|
657
|
+
try {
|
|
658
|
+
fs.rmSync(runtimeFileOf(ctx), { force: true });
|
|
659
|
+
} catch {
|
|
660
|
+
// left behind: it no longer matches the lock, so it is ignored
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
/** { ctx, pid }: ctx with the address of the Watchbell that holds the database now, when the CLI started it. */
|
|
665
|
+
function runningContext(ctx, d) {
|
|
666
|
+
const lock = inspectLock(ctx.lockFile, lockOpts(d));
|
|
667
|
+
if (lock.state !== "held") return { ctx, pid: null };
|
|
668
|
+
const rt = readRuntime(ctx);
|
|
669
|
+
if (!rt || rt.pid !== lock.pid) return { ctx, pid: lock.pid };
|
|
670
|
+
return { ctx: { ...ctx, host: rt.host, port: rt.port, siteUrl: rt.siteUrl, healthUrl: healthUrlOf(rt.host, rt.port) }, pid: lock.pid };
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
// ---------------------------------------------------------------------------------------------------- quiet start (1.2.2)
|
|
674
|
+
|
|
675
|
+
const LOG_DIR = "logs";
|
|
676
|
+
/** <home>/logs/watchbell.log: what the server prints under `watchbell start` (watchbell.log.1 holds the older part). */
|
|
677
|
+
export const logFileOf = (home) => path.join(home, LOG_DIR, "watchbell.log");
|
|
678
|
+
const STOP_WAIT_MS = 30_000;
|
|
679
|
+
const ERROR_REPEAT_MS = 10 * 60 * 1000; // the same error line is shown again after 10 minutes at the earliest
|
|
680
|
+
|
|
681
|
+
/** Every terminal control character out (a log or error line can hold text from a monitored site). */
|
|
682
|
+
const plain = (s) => String(s).replace(/\x1b\[[0-?]*[ -/]*[@-~]|\x1b[\]PX^_][^\x07\x1b]*(?:\x07|\x1b\\)?|[\x00-\x08\x0b-\x1f\x7f\x9b]/g, "");
|
|
683
|
+
|
|
684
|
+
/** A terminal the menu can use: both ends a TTY, raw mode available, not CI and not TERM=dumb. */
|
|
685
|
+
const interactive = (d) => Boolean(d.stdin?.isTTY && d.stdoutTty && typeof d.stdin.setRawMode === "function") && d.env.TERM !== "dumb" && !switchedOn(d.env.CI);
|
|
686
|
+
|
|
687
|
+
/** The addresses to show: this machine's for a loopback host, else the network addresses (SITE_URL first when it is its own). */
|
|
688
|
+
export function shownAddresses(ctx, interfaces) {
|
|
689
|
+
if (isLoopbackHost(ctx.host)) return [ctx.siteUrl];
|
|
690
|
+
let urls = [];
|
|
691
|
+
try {
|
|
692
|
+
urls = networkUrls(ctx.host, ctx.port, interfaces());
|
|
693
|
+
} catch {
|
|
694
|
+
// no list of addresses
|
|
695
|
+
}
|
|
696
|
+
let site = null;
|
|
697
|
+
try {
|
|
698
|
+
site = new URL(ctx.siteUrl);
|
|
699
|
+
} catch {
|
|
700
|
+
// an unreadable SITE_URL is the server's own error
|
|
701
|
+
}
|
|
702
|
+
if (site && !isLoopbackHost(site.hostname)) urls = [ctx.siteUrl, ...urls.filter((u) => u !== ctx.siteUrl)];
|
|
703
|
+
return urls.length ? urls : [ctx.siteUrl];
|
|
704
|
+
}
|
|
705
|
+
const addressText = (urls) => (urls.length > 1 ? `${urls[0]} (also ${urls.slice(1).join(", ")})` : urls[0]);
|
|
706
|
+
export const NETWORK_WARNING = ["! Open on your network over plain http. Finish setup first,", " and put HTTPS in front before opening it to the internet."];
|
|
707
|
+
|
|
708
|
+
export const MENU = ["Open in browser", "Keep running in the background", "Show live log", "Stop and exit"];
|
|
709
|
+
|
|
710
|
+
function prepareLog(file, d) {
|
|
711
|
+
const dir = path.dirname(file);
|
|
712
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
713
|
+
if (d.platform !== "win32") fs.chmodSync(dir, 0o700); // the log holds the setup code
|
|
714
|
+
rotateLog(file, { maxBytes: d.logMaxBytes ?? LOG_MAX_BYTES });
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
function appendLog(file, lines) {
|
|
718
|
+
try {
|
|
719
|
+
fs.appendFileSync(file, lines.map((l) => `${l}\n`).join(""), { mode: 0o600 });
|
|
720
|
+
} catch {
|
|
721
|
+
// the log is a help, never a reason to fail
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/** The last non-empty line of the log (for a server that stopped before it was ready), or null. */
|
|
726
|
+
function lastLogLine(file) {
|
|
727
|
+
try {
|
|
728
|
+
const fd = fs.openSync(file, "r");
|
|
729
|
+
try {
|
|
730
|
+
const size = fs.fstatSync(fd).size;
|
|
731
|
+
const buf = Buffer.alloc(Math.min(size, 16 * 1024));
|
|
732
|
+
fs.readSync(fd, buf, 0, buf.length, size - buf.length);
|
|
733
|
+
const lines = buf.toString("utf8").split(/\r?\n/).map((l) => plain(l).trim()).filter(Boolean);
|
|
734
|
+
return lines.at(-1)?.slice(0, 300) ?? null;
|
|
735
|
+
} finally {
|
|
736
|
+
fs.closeSync(fd);
|
|
737
|
+
}
|
|
738
|
+
} catch {
|
|
739
|
+
return null;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/** The last `count` lines of `file` and its size (where following it starts). */
|
|
744
|
+
function tailOf(file, count) {
|
|
745
|
+
try {
|
|
746
|
+
const fd = fs.openSync(file, "r");
|
|
747
|
+
try {
|
|
748
|
+
const size = fs.fstatSync(fd).size;
|
|
749
|
+
const buf = Buffer.alloc(Math.min(size, 64 * 1024));
|
|
750
|
+
fs.readSync(fd, buf, 0, buf.length, size - buf.length);
|
|
751
|
+
const lines = buf.toString("utf8").split(/\r?\n/);
|
|
752
|
+
if (lines.at(-1) === "") lines.pop();
|
|
753
|
+
return { lines: lines.slice(-count), offset: size };
|
|
754
|
+
} finally {
|
|
755
|
+
fs.closeSync(fd);
|
|
756
|
+
}
|
|
757
|
+
} catch {
|
|
758
|
+
return { lines: [], offset: 0 };
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/** Calls onLines with what is appended to `file` (a rotation starts it over). Returns the function that stops it. */
|
|
763
|
+
function followFile(file, { offset, everyMs, onLines }) {
|
|
764
|
+
let at = offset;
|
|
765
|
+
let partial = "";
|
|
766
|
+
const timer = setInterval(() => {
|
|
767
|
+
try {
|
|
768
|
+
const size = fs.statSync(file).size;
|
|
769
|
+
if (size < at) {
|
|
770
|
+
at = 0; // rotated: the new file from its start
|
|
771
|
+
partial = "";
|
|
772
|
+
}
|
|
773
|
+
if (size === at) return;
|
|
774
|
+
const fd = fs.openSync(file, "r");
|
|
775
|
+
try {
|
|
776
|
+
const buf = Buffer.alloc(Math.min(size - at, 1024 * 1024));
|
|
777
|
+
const n = fs.readSync(fd, buf, 0, buf.length, at);
|
|
778
|
+
at += n;
|
|
779
|
+
const parts = (partial + buf.subarray(0, n).toString("utf8")).split(/\r?\n/);
|
|
780
|
+
partial = parts.pop();
|
|
781
|
+
if (parts.length) onLines(parts);
|
|
782
|
+
} finally {
|
|
783
|
+
fs.closeSync(fd);
|
|
784
|
+
}
|
|
785
|
+
} catch {
|
|
786
|
+
// gone for a moment (rotation): the next tick tries again
|
|
787
|
+
}
|
|
788
|
+
}, everyMs);
|
|
789
|
+
return () => clearInterval(timer);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
/** Resolves with the promise's value, or null after `ms` (the timer is cleared either way). */
|
|
793
|
+
const within = (promise, ms) =>
|
|
794
|
+
new Promise((resolve) => {
|
|
795
|
+
const t = setTimeout(() => resolve(null), ms);
|
|
796
|
+
promise.then((v) => {
|
|
797
|
+
clearTimeout(t);
|
|
798
|
+
resolve(v);
|
|
799
|
+
});
|
|
800
|
+
});
|
|
801
|
+
|
|
802
|
+
/**
|
|
803
|
+
* Lines printed above a block that is redrawn in place (the "Starting" line, the menu). Without a terminal there is
|
|
804
|
+
* no block and no cursor code: lines are printed as they come.
|
|
805
|
+
*/
|
|
806
|
+
function makeScreen(d) {
|
|
807
|
+
let block = [];
|
|
808
|
+
const erase = () => {
|
|
809
|
+
if (block.length) d.write(`\r\x1b[${block.length}A\x1b[J`);
|
|
810
|
+
};
|
|
811
|
+
const draw = () => {
|
|
812
|
+
if (block.length) d.write(`${block.join("\n")}\n`);
|
|
813
|
+
};
|
|
814
|
+
return {
|
|
815
|
+
print(lines) {
|
|
816
|
+
erase();
|
|
817
|
+
d.write(lines.map((l) => `${l}\n`).join(""));
|
|
818
|
+
draw();
|
|
819
|
+
},
|
|
820
|
+
setBlock(lines) {
|
|
821
|
+
erase();
|
|
822
|
+
block = lines;
|
|
823
|
+
draw();
|
|
824
|
+
},
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
async function startQuiet(ctx, d, { open, made, version, serverJs }) {
|
|
829
|
+
const tty = interactive(d);
|
|
830
|
+
const logFile = logFileOf(ctx.home);
|
|
831
|
+
let showError = (line) => d.err(line); // in a terminal: above the "Starting" line or the menu
|
|
832
|
+
try {
|
|
833
|
+
prepareLog(logFile, d);
|
|
834
|
+
} catch (e) {
|
|
835
|
+
d.err(`watchbell: could not set up ${path.dirname(logFile)}: ${e?.code ?? (e instanceof Error ? e.message : String(e))}`);
|
|
836
|
+
return 1;
|
|
837
|
+
}
|
|
838
|
+
appendLog(logFile, [
|
|
839
|
+
"",
|
|
840
|
+
`--- watchbell start, Watchbell ${version}, ${new Date(d.now()).toISOString()}`,
|
|
841
|
+
...(made.created ? [`Created ${ctx.envFile} with new secrets (they are not shown).`] : []),
|
|
842
|
+
...(made.filled.length && !made.created ? [`Added missing settings to ${ctx.envFile}: ${made.filled.join(", ")}.`] : []),
|
|
843
|
+
`Settings: ${ctx.envFile}`,
|
|
844
|
+
`Data: ${ctx.dataDir}`,
|
|
845
|
+
`Starting on ${ctx.siteUrl} (listening on ${ctx.host}, port ${ctx.port})`,
|
|
846
|
+
]);
|
|
847
|
+
// New secrets are worth one line (first run only); the folders are in the log and in watchbell status.
|
|
848
|
+
if (made.created) d.out(`Created ${ctx.envFile} with new secrets (they are not shown).`);
|
|
849
|
+
else if (made.filled.length) d.out(`Added missing settings to ${ctx.envFile}: ${made.filled.join(", ")}.`);
|
|
850
|
+
warnPortMismatch(ctx, d);
|
|
851
|
+
noteIgnoredShellAddress(ctx, d);
|
|
852
|
+
const screen = tty ? makeScreen(d) : null;
|
|
853
|
+
if (screen) screen.setBlock([` Starting Watchbell ${version} ...`]);
|
|
854
|
+
else {
|
|
855
|
+
d.out(`Watchbell ${version}`);
|
|
856
|
+
d.out(`Starting on ${ctx.siteUrl} ...`);
|
|
857
|
+
}
|
|
858
|
+
const update = checkForUpdate(ctx, d, { background: true });
|
|
859
|
+
const runtime = checkNodeRuntime(ctx, d, { background: true });
|
|
860
|
+
|
|
861
|
+
// The server's output goes to the log file: through scripts/selfhost-log.mjs (rotation, errors to the menu) when
|
|
862
|
+
// the package has it, and the file itself is the server's stdout and stderr for whatever bypasses that.
|
|
863
|
+
const hook = path.join(d.pkgRoot, "scripts", "selfhost-log.mjs");
|
|
864
|
+
const args = fs.existsSync(hook) ? ["--import", pathToFileURL(hook).href, serverJs] : [serverJs];
|
|
865
|
+
let fd;
|
|
866
|
+
try {
|
|
867
|
+
fd = fs.openSync(logFile, "a", 0o600);
|
|
868
|
+
} catch (e) {
|
|
869
|
+
d.err(`watchbell: could not open ${logFile}: ${e?.code ?? String(e)}`);
|
|
870
|
+
return 1;
|
|
871
|
+
}
|
|
872
|
+
let child;
|
|
873
|
+
try {
|
|
874
|
+
// In a terminal the server runs detached from it from the start (its own session on POSIX, no console on
|
|
875
|
+
// Windows), so "Keep running in the background" only has to let go; the menu is a thin front-end.
|
|
876
|
+
child = d.spawn(d.execPath, args, {
|
|
877
|
+
cwd: ctx.serverDir,
|
|
878
|
+
env: { ...serverEnv(ctx), WATCHBELL_LOG_FILE: logFile },
|
|
879
|
+
stdio: ["ignore", fd, fd, "ipc"],
|
|
880
|
+
detached: tty,
|
|
881
|
+
windowsHide: true,
|
|
882
|
+
});
|
|
883
|
+
} finally {
|
|
884
|
+
fs.closeSync(fd);
|
|
885
|
+
}
|
|
886
|
+
writeRuntime(ctx, child.pid, d);
|
|
887
|
+
|
|
888
|
+
let exited = false;
|
|
889
|
+
const exit = new Promise((resolve) => {
|
|
890
|
+
child.on("exit", (code, signal) => resolve(exitCodeOf(code, signal)));
|
|
891
|
+
child.on("error", (e) => {
|
|
892
|
+
showError(`Could not start the server: ${e.message}`);
|
|
893
|
+
resolve(1);
|
|
894
|
+
});
|
|
895
|
+
}).finally(() => {
|
|
896
|
+
exited = true;
|
|
897
|
+
});
|
|
898
|
+
|
|
899
|
+
// An error the server prints: one line on the screen (the same line at most every 10 minutes), the rest in the log.
|
|
900
|
+
const shown = new Map();
|
|
901
|
+
let lastError = null;
|
|
902
|
+
const onMessage = (m) => {
|
|
903
|
+
if (!m || m.watchbell !== "error" || typeof m.line !== "string") return;
|
|
904
|
+
const line = plain(m.line).trim().slice(0, 300);
|
|
905
|
+
if (!line) return;
|
|
906
|
+
lastError = line;
|
|
907
|
+
const now = d.now();
|
|
908
|
+
if (shown.has(line) && now - shown.get(line) < ERROR_REPEAT_MS) return;
|
|
909
|
+
shown.set(line, now);
|
|
910
|
+
showError(`! ${line} (see the log: ${logFile})`);
|
|
911
|
+
};
|
|
912
|
+
child.on("message", onMessage);
|
|
913
|
+
if (screen) showError = (line) => screen.print([` ${line}`]);
|
|
914
|
+
|
|
915
|
+
// Ctrl+C before the menu is up, a closed terminal, a kill: the same clean stop as "Stop and exit" (in a terminal
|
|
916
|
+
// the server is detached, so no signal reaches it). Without a terminal the server is this process's child as before.
|
|
917
|
+
let stopping = null;
|
|
918
|
+
const stop = () =>
|
|
919
|
+
(stopping ??= (async () => {
|
|
920
|
+
try {
|
|
921
|
+
fs.mkdirSync(ctx.dataDir, { recursive: true });
|
|
922
|
+
fs.writeFileSync(path.join(ctx.dataDir, "stop-request"), `${new Date().toISOString()}\n`); // as watchbell stop
|
|
923
|
+
} catch (e) {
|
|
924
|
+
d.err(`watchbell: could not ask Watchbell to stop (${e?.code ?? e}). Run: watchbell stop`);
|
|
925
|
+
}
|
|
926
|
+
const waitMs = d.stopWaitMs ?? STOP_WAIT_MS;
|
|
927
|
+
const first = await within(exit, waitMs);
|
|
928
|
+
if (first !== null) return first;
|
|
929
|
+
if (d.platform !== "win32") {
|
|
930
|
+
child.kill("SIGTERM"); // the server's own clean stop on SIGTERM
|
|
931
|
+
const second = await within(exit, waitMs);
|
|
932
|
+
if (second !== null) return second;
|
|
933
|
+
}
|
|
934
|
+
d.err(`Watchbell did not stop within ${Math.round(waitMs / 1000)} s; it may still be closing its database. Check with: watchbell status`);
|
|
935
|
+
return 1;
|
|
936
|
+
})());
|
|
937
|
+
const signals = tty ? (d.platform === "win32" ? ["SIGINT", "SIGTERM", "SIGBREAK", "SIGHUP"] : ["SIGINT", "SIGTERM", "SIGHUP"]) : [];
|
|
938
|
+
const onSignal = () => void stop();
|
|
939
|
+
for (const s of signals) d.proc.on(s, onSignal);
|
|
940
|
+
const unsupervise = tty ? () => {} : superviseChild(child, { platform: d.platform, proc: d.proc });
|
|
941
|
+
const release = () => {
|
|
942
|
+
for (const s of signals) d.proc.removeListener(s, onSignal);
|
|
943
|
+
unsupervise();
|
|
944
|
+
};
|
|
945
|
+
|
|
946
|
+
const deadline = d.now() + d.readyTimeoutMs;
|
|
947
|
+
while (!exited) {
|
|
948
|
+
const probe = await probeHealth(ctx.healthUrl, d.fetch);
|
|
949
|
+
if (probe?.status === 200) break;
|
|
950
|
+
if (d.now() >= deadline) {
|
|
951
|
+
// Still starting after the wait: the screen and the menu come anyway (stop, or the log to see why).
|
|
952
|
+
const line = `Watchbell did not answer at ${ctx.healthUrl} within ${Math.round(d.readyTimeoutMs / 1000)} s (see the log: ${logFile}).`;
|
|
953
|
+
if (screen) screen.print([` ${line}`]);
|
|
954
|
+
else d.err(line);
|
|
955
|
+
break;
|
|
956
|
+
}
|
|
957
|
+
await Promise.race([d.sleep(500), exit]);
|
|
958
|
+
}
|
|
959
|
+
if (exited) {
|
|
960
|
+
const code = await exit;
|
|
961
|
+
if (screen) screen.setBlock([]);
|
|
962
|
+
release();
|
|
963
|
+
removeRuntime(ctx, child.pid);
|
|
964
|
+
if (stopping || [0, 130, 143].includes(code)) return code; // stopped while it was starting (Ctrl+C, a signal)
|
|
965
|
+
d.err(`Watchbell could not start: ${lastError ?? lastLogLine(logFile) ?? `exit ${code}`} (see the log: ${logFile})`);
|
|
966
|
+
return code || 1;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
const setupCode = readSetupCode(ctx.dataDir);
|
|
970
|
+
const urls = shownAddresses(ctx, d.networkInterfaces ?? os.networkInterfaces);
|
|
971
|
+
const lan = !isLoopbackHost(ctx.host);
|
|
972
|
+
// The update notice and the Node.js warning come when they come: a slow registry never holds the screen back.
|
|
973
|
+
const notes = (async () => {
|
|
974
|
+
const lines = [];
|
|
975
|
+
await sayUpdate(update, { out: (l) => lines.push(l) });
|
|
976
|
+
await sayNodeRuntime(runtime, { err: (l) => lines.push(l) });
|
|
977
|
+
return lines;
|
|
978
|
+
})();
|
|
979
|
+
// The long network text (the addresses, SSH tunnel, SITE_URL) is kept in the log; the screen gets two lines.
|
|
980
|
+
if (lan) {
|
|
981
|
+
const note = [];
|
|
982
|
+
announceNetwork(ctx, { ...d, out: (l) => note.push(l), err: (l) => note.push(l) });
|
|
983
|
+
appendLog(logFile, note.filter(Boolean));
|
|
984
|
+
}
|
|
985
|
+
const openTarget = () => (readSetupCode(ctx.dataDir) ? `${ctx.siteUrl}/setup` : ctx.siteUrl);
|
|
986
|
+
if (open) d.openUrl(openTarget());
|
|
987
|
+
|
|
988
|
+
if (!screen) {
|
|
989
|
+
d.out(`Watchbell is running at ${addressText(urls)}`);
|
|
990
|
+
if (setupCode) d.out(`First run: open ${ctx.siteUrl}/setup and enter the setup code ${setupCode}`);
|
|
991
|
+
if (lan) for (const l of NETWORK_WARNING) d.err(l);
|
|
992
|
+
d.out(`Log: ${logFile}`);
|
|
993
|
+
d.out('Stop it with Ctrl+C here, or run "watchbell stop" in another terminal.');
|
|
994
|
+
void sayUpdate(update, d);
|
|
995
|
+
void sayNodeRuntime(runtime, d);
|
|
996
|
+
const code = await exit;
|
|
997
|
+
release();
|
|
998
|
+
removeRuntime(ctx, child.pid);
|
|
999
|
+
if (![0, 130, 143].includes(code)) d.err(`Watchbell stopped with exit code ${code} (see the log: ${logFile}).`);
|
|
1000
|
+
return code;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
screen.setBlock([]);
|
|
1004
|
+
screen.print([
|
|
1005
|
+
` Watchbell ${version}`,
|
|
1006
|
+
` ${addressText(urls)}`,
|
|
1007
|
+
...(setupCode ? [` First run: setup code ${setupCode}`] : []),
|
|
1008
|
+
"",
|
|
1009
|
+
...(lan ? [...NETWORK_WARNING.map((l) => ` ${l}`), ""] : []),
|
|
1010
|
+
]);
|
|
1011
|
+
return menu(ctx, d, { child, exit, stop, release, screen, logFile, openTarget, notes });
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
/**
|
|
1015
|
+
* The start screen's menu: ↑/↓ and Enter, or a first letter (o and k run their item at once; s moves between the two
|
|
1016
|
+
* items that start with S, Enter runs it). Resolves with the CLI's exit code.
|
|
1017
|
+
*/
|
|
1018
|
+
function menu(ctx, d, { child, exit, stop, release, screen, logFile, openTarget, notes }) {
|
|
1019
|
+
const stdin = d.stdin;
|
|
1020
|
+
const pointer = d.platform === "win32" && !d.env.WT_SESSION && d.env.TERM_PROGRAM !== "vscode" ? ">" : "❯"; // the old console lacks ❯
|
|
1021
|
+
let selected = 0;
|
|
1022
|
+
let mode = "menu";
|
|
1023
|
+
let stopFollowing = () => {};
|
|
1024
|
+
const lines = () => MENU.map((label, i) => (i === selected ? ` ${pointer} \x1b[1m${label}\x1b[22m` : ` ${label}`));
|
|
1025
|
+
const redraw = () => screen.setBlock(lines());
|
|
1026
|
+
|
|
1027
|
+
return new Promise((resolve) => {
|
|
1028
|
+
let done = false;
|
|
1029
|
+
let stopRequested = false;
|
|
1030
|
+
const leaveTerminal = () => {
|
|
1031
|
+
stopFollowing();
|
|
1032
|
+
stdin.removeListener("keypress", onKey);
|
|
1033
|
+
try {
|
|
1034
|
+
stdin.setRawMode(false);
|
|
1035
|
+
} catch {
|
|
1036
|
+
// the terminal is gone
|
|
1037
|
+
}
|
|
1038
|
+
stdin.pause?.();
|
|
1039
|
+
screen.setBlock([]);
|
|
1040
|
+
};
|
|
1041
|
+
const finish = (code) => {
|
|
1042
|
+
if (done) return;
|
|
1043
|
+
done = true;
|
|
1044
|
+
leaveTerminal();
|
|
1045
|
+
release();
|
|
1046
|
+
resolve(code);
|
|
1047
|
+
};
|
|
1048
|
+
|
|
1049
|
+
const stopAndExit = async () => {
|
|
1050
|
+
if (done || stopRequested) return;
|
|
1051
|
+
stopRequested = true;
|
|
1052
|
+
leaveTerminal();
|
|
1053
|
+
screen.print([" Stopping Watchbell ..."]);
|
|
1054
|
+
const code = await stop();
|
|
1055
|
+
if (code === 0) d.out(" Watchbell stopped.");
|
|
1056
|
+
removeRuntime(ctx, child.pid);
|
|
1057
|
+
finish(code);
|
|
1058
|
+
};
|
|
1059
|
+
|
|
1060
|
+
const background = () => {
|
|
1061
|
+
child.removeAllListeners("message");
|
|
1062
|
+
try {
|
|
1063
|
+
child.disconnect?.(); // the server keeps running; its errors go to the log only from now on
|
|
1064
|
+
} catch {
|
|
1065
|
+
// already disconnected
|
|
1066
|
+
}
|
|
1067
|
+
child.unref?.();
|
|
1068
|
+
leaveTerminal();
|
|
1069
|
+
d.out("Running in the background. Stop it with: watchbell stop");
|
|
1070
|
+
finish(0);
|
|
1071
|
+
};
|
|
1072
|
+
|
|
1073
|
+
const showLog = () => {
|
|
1074
|
+
mode = "log";
|
|
1075
|
+
screen.setBlock([]);
|
|
1076
|
+
const { lines: last, offset } = tailOf(logFile, 20);
|
|
1077
|
+
screen.print(["", ` Live log (${logFile}). Press any key to go back to the menu.`, "", ...last.map(plain)]);
|
|
1078
|
+
stopFollowing = followFile(logFile, { offset, everyMs: d.logPollMs ?? 250, onLines: (ls) => screen.print(ls.map(plain)) });
|
|
1079
|
+
};
|
|
1080
|
+
|
|
1081
|
+
const choose = (i) => {
|
|
1082
|
+
if (i === 0) {
|
|
1083
|
+
const url = openTarget();
|
|
1084
|
+
d.openUrl(url);
|
|
1085
|
+
screen.print([` Opening ${url} in your browser.`]);
|
|
1086
|
+
} else if (i === 1) background();
|
|
1087
|
+
else if (i === 2) showLog();
|
|
1088
|
+
else void stopAndExit();
|
|
1089
|
+
};
|
|
1090
|
+
|
|
1091
|
+
function onKey(str, key = {}) {
|
|
1092
|
+
if (done || stopRequested) return;
|
|
1093
|
+
if (key.ctrl && key.name === "c") return void stopAndExit();
|
|
1094
|
+
if (mode === "log") {
|
|
1095
|
+
stopFollowing();
|
|
1096
|
+
stopFollowing = () => {};
|
|
1097
|
+
mode = "menu";
|
|
1098
|
+
screen.print([""]);
|
|
1099
|
+
return redraw();
|
|
1100
|
+
}
|
|
1101
|
+
if (key.name === "up") selected = (selected + MENU.length - 1) % MENU.length;
|
|
1102
|
+
else if (key.name === "down") selected = (selected + 1) % MENU.length;
|
|
1103
|
+
else if (key.name === "return" || key.name === "enter") return choose(selected);
|
|
1104
|
+
else if (typeof str === "string" && /^[a-z]$/i.test(str)) {
|
|
1105
|
+
const hits = MENU.map((label, i) => [label, i]).filter(([label]) => label[0].toLowerCase() === str.toLowerCase());
|
|
1106
|
+
if (!hits.length) return;
|
|
1107
|
+
selected = (hits.find(([, i]) => i > selected) ?? hits[0])[1];
|
|
1108
|
+
if (hits.length === 1) {
|
|
1109
|
+
redraw();
|
|
1110
|
+
return choose(selected);
|
|
1111
|
+
}
|
|
1112
|
+
} else return;
|
|
1113
|
+
redraw();
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
// A signal (a closed terminal, a kill) or Ctrl+C before the menu: stop() already runs; wait for it here.
|
|
1117
|
+
exit.then((code) => {
|
|
1118
|
+
if (done) return;
|
|
1119
|
+
if (stopRequested) return;
|
|
1120
|
+
// Stopped from elsewhere (watchbell stop in another terminal) or it crashed.
|
|
1121
|
+
leaveTerminal();
|
|
1122
|
+
d.out(code === 0 ? " Watchbell stopped." : ` Watchbell stopped with exit code ${code} (see the log: ${logFile}).`);
|
|
1123
|
+
removeRuntime(ctx, child.pid);
|
|
1124
|
+
finish(code);
|
|
1125
|
+
});
|
|
1126
|
+
|
|
1127
|
+
// The update notice and the Node.js warning, above the menu once they are known (never after it closed).
|
|
1128
|
+
notes.then((lines) => {
|
|
1129
|
+
if (!done && lines.length) screen.print(lines.map((l) => ` ${plain(l)}`));
|
|
1130
|
+
});
|
|
1131
|
+
(d.keypressEvents ?? readlineCore.emitKeypressEvents)(stdin);
|
|
1132
|
+
stdin.setRawMode(true);
|
|
1133
|
+
stdin.resume?.();
|
|
1134
|
+
stdin.on("keypress", onKey);
|
|
1135
|
+
redraw();
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
|
|
587
1139
|
// ---------------------------------------------------------------------------------------------------- stop / status
|
|
588
1140
|
|
|
589
1141
|
function waitExit(child, d) {
|
|
@@ -598,7 +1150,8 @@ function waitExit(child, d) {
|
|
|
598
1150
|
|
|
599
1151
|
// The stop is scripts/stop-selfhost.mjs (shipped in the package): it writes <data>/stop-request, the server runs its
|
|
600
1152
|
// normal clean stop, and the script waits until the port and the database lock are free.
|
|
601
|
-
function stopServer(
|
|
1153
|
+
function stopServer(first, d, timeout) {
|
|
1154
|
+
const { ctx } = runningContext(first, d); // asks the address it really runs on (--port), not only the .env one
|
|
602
1155
|
if (!fs.existsSync(ctx.home)) {
|
|
603
1156
|
d.out(`Watchbell is not running (there are no settings in ${ctx.home} yet).`);
|
|
604
1157
|
return Promise.resolve(0);
|
|
@@ -609,20 +1162,29 @@ function stopServer(ctx, d, timeout) {
|
|
|
609
1162
|
return waitExit(d.spawn(d.execPath, args, { cwd: d.pkgRoot, env, stdio: "inherit" }), d);
|
|
610
1163
|
}
|
|
611
1164
|
|
|
612
|
-
async function cmdStatus(
|
|
613
|
-
|
|
1165
|
+
async function cmdStatus(first, d) {
|
|
1166
|
+
// The address of the server that runs now (1.2.2): started with --port 3261 it answers there, whatever .env says.
|
|
1167
|
+
const { ctx, pid } = runningContext(first, d);
|
|
614
1168
|
const probe = await probeHealth(ctx.healthUrl, d.fetch);
|
|
615
1169
|
const running = pid !== null || probe?.service === "watchbell";
|
|
616
1170
|
if (running) {
|
|
617
1171
|
d.out(`Watchbell is running${pid !== null ? ` (process ${pid})` : ""} at ${ctx.siteUrl}`);
|
|
618
1172
|
if (probe?.service !== "watchbell") d.out(` Nothing answers at ${ctx.healthUrl} yet. ${staleLockHint(ctx.lockFile)}`);
|
|
1173
|
+
if (ctx.port !== first.port) d.out(` Port: ${ctx.port} (for this run; ${first.envFile} says ${first.port})`);
|
|
619
1174
|
} else if (probe) d.out(`Watchbell is not running; another program answers on port ${ctx.port}.`);
|
|
620
1175
|
else d.out("Watchbell is not running.");
|
|
621
1176
|
d.out(` Version: ${packageVersion(d.pkgRoot)}`);
|
|
622
1177
|
d.out(` Settings: ${ctx.envFile}${fs.existsSync(ctx.envFile) ? "" : " (created on the first start)"}`);
|
|
623
1178
|
d.out(` Data: ${ctx.dataDir}`);
|
|
624
|
-
|
|
625
|
-
|
|
1179
|
+
const log = logFileOf(ctx.home);
|
|
1180
|
+
if (fs.existsSync(log)) d.out(` Log: ${log}`);
|
|
1181
|
+
const serviceNode = warnServiceNode(ctx, d);
|
|
1182
|
+
const update = checkForUpdate(ctx, d);
|
|
1183
|
+
// Asked at the same time: status waits for the slower of the two. An installed service may run another Node.js than
|
|
1184
|
+
// this CLI (fix round 1, M5), so that one is checked too.
|
|
1185
|
+
const runtime = checkNodeRuntime(ctx, d, { serviceNode });
|
|
1186
|
+
await sayUpdate(update, d);
|
|
1187
|
+
await sayNodeRuntime(runtime, d);
|
|
626
1188
|
return running ? 0 : 3;
|
|
627
1189
|
}
|
|
628
1190
|
|
|
@@ -1102,10 +1664,16 @@ export function serviceNodePath(ctx, d) {
|
|
|
1102
1664
|
return null;
|
|
1103
1665
|
}
|
|
1104
1666
|
|
|
1105
|
-
/**
|
|
1667
|
+
/**
|
|
1668
|
+
* After a Node.js change (nvm, fnm, volta, an upgrade) the service would fail at every login; say how to fix it.
|
|
1669
|
+
* Returns the service's Node.js path when it still exists (status checks that Node.js too, D20), else null.
|
|
1670
|
+
*/
|
|
1106
1671
|
function warnServiceNode(ctx, d) {
|
|
1107
1672
|
const node = serviceNodePath(ctx, d);
|
|
1108
|
-
if (
|
|
1673
|
+
if (!node) return null;
|
|
1674
|
+
if (fs.existsSync(node)) return node;
|
|
1675
|
+
d.err(`The service runs ${node}, which no longer exists. Run: watchbell service install`);
|
|
1676
|
+
return null;
|
|
1109
1677
|
}
|
|
1110
1678
|
|
|
1111
1679
|
async function cmdService(action, ctx, d, yes) {
|
|
@@ -1160,23 +1728,21 @@ function readUpdateCache(file) {
|
|
|
1160
1728
|
}
|
|
1161
1729
|
}
|
|
1162
1730
|
|
|
1163
|
-
/**
|
|
1164
|
-
async function
|
|
1731
|
+
/** A plain GET of a public JSON document; null when offline, slower than `timeoutMs`, refused, or not JSON. */
|
|
1732
|
+
async function getJson(d, url, { background = false, timeoutMs, headers = { accept: "application/json" } }) {
|
|
1165
1733
|
const ac = new AbortController();
|
|
1166
1734
|
let timer;
|
|
1167
1735
|
const late = new Promise((resolve) => {
|
|
1168
1736
|
timer = (d.setTimer ?? setTimeout)(() => {
|
|
1169
1737
|
ac.abort();
|
|
1170
1738
|
resolve(null);
|
|
1171
|
-
},
|
|
1739
|
+
}, timeoutMs);
|
|
1172
1740
|
// start does not wait for the answer when the server fails early: the timer must not keep the CLI alive then.
|
|
1173
1741
|
if (background) timer?.unref?.();
|
|
1174
1742
|
});
|
|
1175
1743
|
const ask = (async () => {
|
|
1176
|
-
const res = await d.fetch(
|
|
1177
|
-
|
|
1178
|
-
const v = (await res.json())?.version;
|
|
1179
|
-
return typeof v === "string" && SEMVER.test(v.trim()) ? v.trim() : null;
|
|
1744
|
+
const res = await d.fetch(url, { method: "GET", headers, signal: ac.signal });
|
|
1745
|
+
return res?.ok ? await res.json() : null;
|
|
1180
1746
|
})().catch(() => null);
|
|
1181
1747
|
try {
|
|
1182
1748
|
return await Promise.race([ask, late]);
|
|
@@ -1185,6 +1751,12 @@ async function registryLatest(d, { background = false } = {}) {
|
|
|
1185
1751
|
}
|
|
1186
1752
|
}
|
|
1187
1753
|
|
|
1754
|
+
/** The registry's latest version; null when offline, slower than 3 s, refused, or answered with something else. */
|
|
1755
|
+
async function registryLatest(d, { background = false } = {}) {
|
|
1756
|
+
const v = (await getJson(d, REGISTRY_LATEST, { background, timeoutMs: d.updateTimeoutMs ?? UPDATE_TIMEOUT_MS }))?.version;
|
|
1757
|
+
return typeof v === "string" && SEMVER.test(v.trim()) ? v.trim() : null;
|
|
1758
|
+
}
|
|
1759
|
+
|
|
1188
1760
|
/**
|
|
1189
1761
|
* This package's version and the registry's latest: from <home>/update-check.json when it is less than 24 h old, else
|
|
1190
1762
|
* asked (and the answer saved). A failed ask is saved too, with the last known answer, so an offline machine is not
|
|
@@ -1225,6 +1797,90 @@ async function sayUpdate(check, d) {
|
|
|
1225
1797
|
if (found) d.out(`A newer Watchbell is available: ${found.latest} (this is ${found.current}). Update with: watchbell update`);
|
|
1226
1798
|
}
|
|
1227
1799
|
|
|
1800
|
+
// ---------------------------------------------------------------------------------------------------- Node.js runtime (D20)
|
|
1801
|
+
|
|
1802
|
+
// 1.2.2: the Node.js under Watchbell. The server runs on the Node.js that runs this CLI (d.execPath), so its version is
|
|
1803
|
+
// d.nodeVersion. Two plain GETs at once, nodejs.org's release list and endoflife.date's Node.js lines, at most once per
|
|
1804
|
+
// 12 h: the answer, or a failed ask, is kept in <home>/node-check.json like the update check's. The verdict is
|
|
1805
|
+
// scripts/node-runtime.mjs, shared with the console's Settings › Collector line. The update check's switches turn this
|
|
1806
|
+
// off too (WATCHBELL_NO_UPDATE_CHECK also turns off the server's own 12-hourly reads, src/lib/collector/node-runtime.ts). One warning line for a vulnerable or end-of-life Node.js; offline or an answer it can't read prints nothing,
|
|
1807
|
+
// and it never holds the start back.
|
|
1808
|
+
const NODE_CACHE = "node-check.json";
|
|
1809
|
+
const NODE_TIMEOUT_MS = 4000; // the release list is about 350 kB (about 40 kB gzipped)
|
|
1810
|
+
// Fix round 1 (M4): gzip only. Node's fetch would offer br, and Node2Shell, the advisory this check exists for, is in
|
|
1811
|
+
// Node's Brotli decoder: a vulnerable Node.js shouldn't Brotli-decode the very lists that flag it.
|
|
1812
|
+
const NODE_HEADERS = { accept: "application/json", "accept-encoding": "gzip" };
|
|
1813
|
+
const SERVICE_VERSION_TIMEOUT_MS = 1000;
|
|
1814
|
+
|
|
1815
|
+
function readNodeCache(file) {
|
|
1816
|
+
try {
|
|
1817
|
+
const c = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
1818
|
+
const at = Date.parse(c?.checkedAt);
|
|
1819
|
+
if (!Number.isFinite(at)) return null;
|
|
1820
|
+
return { at, index: storedNodeIndex(c.index), indexOk: c.indexOk === true, cycles: storedNodeCycles(c.cycles) };
|
|
1821
|
+
} catch {
|
|
1822
|
+
return null; // none yet, or not ours to trust: ask again
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
|
|
1826
|
+
async function lookupNodeAdvisories(ctx, d, { background = false } = {}) {
|
|
1827
|
+
const file = path.join(ctx.home, NODE_CACHE);
|
|
1828
|
+
const cached = readNodeCache(file);
|
|
1829
|
+
const now = d.now();
|
|
1830
|
+
if (cached && now >= cached.at && now - cached.at < NODE_CHECK_EVERY_MS) return cached;
|
|
1831
|
+
const timeoutMs = d.nodeTimeoutMs ?? NODE_TIMEOUT_MS;
|
|
1832
|
+
const [indexBody, eolBody] = await Promise.all([getJson(d, NODE_INDEX_URL, { background, timeoutMs, headers: NODE_HEADERS }), getJson(d, NODE_EOL_URL, { background, timeoutMs, headers: NODE_HEADERS })]);
|
|
1833
|
+
const index = parseNodeIndex(indexBody);
|
|
1834
|
+
const cycles = parseNodeEol(eolBody);
|
|
1835
|
+
// A failed source keeps its last good data; indexOk records whether this ask of nodejs.org worked ("ok" needs it).
|
|
1836
|
+
const next = { at: now, index: index ?? cached?.index ?? null, indexOk: index !== null, cycles: cycles ?? cached?.cycles ?? null };
|
|
1837
|
+
if (fs.existsSync(ctx.home)) {
|
|
1838
|
+
try {
|
|
1839
|
+
fs.writeFileSync(file, `${JSON.stringify({ checkedAt: new Date(now).toISOString(), indexOk: next.indexOk, index: next.index, cycles: next.cycles })}\n`);
|
|
1840
|
+
} catch {
|
|
1841
|
+
// a read-only home: the next start asks again
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1844
|
+
return next;
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
/** The version an installed service's Node.js reports ("v24.12.0"), or null when it can't be run within a second. */
|
|
1848
|
+
function serviceNodeVersion(node, d) {
|
|
1849
|
+
const r = d.runSync(node, ["--version"], { timeout: SERVICE_VERSION_TIMEOUT_MS });
|
|
1850
|
+
return r.status === 0 ? r.stdout.trim() : null;
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
const samePath = (a, b, platform) => {
|
|
1854
|
+
const [x, y] = [path.resolve(a), path.resolve(b)];
|
|
1855
|
+
return platform === "win32" ? x.toLowerCase() === y.toLowerCase() : x === y;
|
|
1856
|
+
};
|
|
1857
|
+
|
|
1858
|
+
/**
|
|
1859
|
+
* D20. Never throws; the warning lines (none when this Node.js is fine, unknown or the check is off). `serviceNode`
|
|
1860
|
+
* (status only): the installed service's Node.js path; when it isn't this one and runs another version, that version
|
|
1861
|
+
* is checked too and named in its own line.
|
|
1862
|
+
*/
|
|
1863
|
+
export async function checkNodeRuntime(ctx, d, { background = false, serviceNode = null } = {}) {
|
|
1864
|
+
try {
|
|
1865
|
+
if (updateCheckOff(ctx.merged ?? d.env)) return [];
|
|
1866
|
+
const data = await lookupNodeAdvisories(ctx, d, { background });
|
|
1867
|
+
const verdict = (version) => nodeVerdict(String(version), { index: data.index, indexFresh: data.indexOk, cycles: data.cycles }, d.now());
|
|
1868
|
+
const own = verdict(d.nodeVersion);
|
|
1869
|
+
const lines = [nodeWarningLine(own)];
|
|
1870
|
+
if (serviceNode && !samePath(serviceNode, d.execPath, d.platform)) {
|
|
1871
|
+
const theirs = verdict(serviceNodeVersion(serviceNode, d) ?? "");
|
|
1872
|
+
if (theirs.version !== null && theirs.version !== own.version) lines.push(nodeWarningLine(theirs, { service: serviceNode }));
|
|
1873
|
+
}
|
|
1874
|
+
return lines.filter(Boolean);
|
|
1875
|
+
} catch {
|
|
1876
|
+
return [];
|
|
1877
|
+
}
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
async function sayNodeRuntime(check, d) {
|
|
1881
|
+
for (const line of check ? await check : []) d.err(line);
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1228
1884
|
// ---------------------------------------------------------------------------------------------------- network (D10)
|
|
1229
1885
|
|
|
1230
1886
|
const unbracket = (h) => h.replace(/^\[(.*)\]$/, "$1");
|
|
@@ -1283,17 +1939,40 @@ function announceNetwork(ctx, d) {
|
|
|
1283
1939
|
|
|
1284
1940
|
// ---------------------------------------------------------------------------------------------------- update (D9)
|
|
1285
1941
|
|
|
1286
|
-
const NPM_UPDATE_ARGS = ["install", "-g", "watchbell@latest"];
|
|
1287
|
-
const NPM_UPDATE = `npm ${NPM_UPDATE_ARGS.join(" ")}`;
|
|
1288
1942
|
const PS_START = "Start-ScheduledTask -TaskName $env:WB_TASK";
|
|
1289
1943
|
|
|
1290
|
-
/**
|
|
1291
|
-
|
|
1944
|
+
/**
|
|
1945
|
+
* 1.2.2: the npm prefix this copy was installed into, from its own folder: <prefix>/lib/node_modules/watchbell on
|
|
1946
|
+
* Linux and macOS, <prefix>\node_modules\watchbell on Windows. Null for any other layout (a project's node_modules,
|
|
1947
|
+
* pnpm, a source checkout): npm then installs where it always does, and the "still holds" check catches a miss.
|
|
1948
|
+
*/
|
|
1949
|
+
export function installPrefix(pkgRoot, platform) {
|
|
1950
|
+
const root = path.resolve(pkgRoot);
|
|
1951
|
+
const name = (p) => (platform === "win32" ? path.basename(p).toLowerCase() : path.basename(p));
|
|
1952
|
+
const modules = path.dirname(root);
|
|
1953
|
+
if (name(root) !== "watchbell" || name(modules) !== "node_modules") return null;
|
|
1954
|
+
if (platform === "win32") return path.dirname(modules);
|
|
1955
|
+
const lib = path.dirname(modules);
|
|
1956
|
+
return name(lib) === "lib" ? path.dirname(lib) : null;
|
|
1957
|
+
}
|
|
1958
|
+
|
|
1959
|
+
const npmUpdateArgs = (prefix) => ["install", "-g", ...(prefix ? ["--prefix", prefix] : []), "watchbell@latest"];
|
|
1960
|
+
/** The update command as a person types it (the prefix quoted when it has a space). */
|
|
1961
|
+
const npmUpdateText = (prefix) => `npm ${npmUpdateArgs(prefix).map((a) => (/\s/.test(a) ? `"${a}"` : a)).join(" ")}`;
|
|
1962
|
+
|
|
1963
|
+
/**
|
|
1964
|
+
* The npm next to the running Node.js (npm.cmd on Windows, run through System32's cmd.exe), installing into `prefix`
|
|
1965
|
+
* when it is known; null if cmd can't take the paths.
|
|
1966
|
+
*/
|
|
1967
|
+
export function npmCommand(d, prefix = null) {
|
|
1292
1968
|
const p = d.platform === "win32" ? path.win32 : path.posix;
|
|
1293
1969
|
const npm = p.join(p.dirname(d.execPath), d.platform === "win32" ? "npm.cmd" : "npm");
|
|
1294
|
-
|
|
1295
|
-
if (
|
|
1296
|
-
|
|
1970
|
+
const args = npmUpdateArgs(prefix);
|
|
1971
|
+
if (d.platform !== "win32") return { npm, cmd: npm, args, opts: {} };
|
|
1972
|
+
// cmd expands % even inside quotes, and a quoted path ending in \ would escape its closing quote.
|
|
1973
|
+
if (/["%\r\n]/.test(npm + (prefix ?? "")) || prefix?.endsWith("\\")) return null;
|
|
1974
|
+
const line = args.map((a) => (a === prefix ? `"${a}"` : a)).join(" ");
|
|
1975
|
+
return { npm, cmd: system32Tool(d, "cmd.exe"), args: ["/d", "/s", "/c", `""${npm}" ${line}"`], opts: { windowsVerbatimArguments: true } };
|
|
1297
1976
|
}
|
|
1298
1977
|
|
|
1299
1978
|
const writableDir = (dir) => {
|
|
@@ -1369,7 +2048,9 @@ function packageName(pkgRoot) {
|
|
|
1369
2048
|
}
|
|
1370
2049
|
|
|
1371
2050
|
/**
|
|
1372
|
-
* D9: `npm install -g watchbell@latest` with the npm next to this Node.js, only while Watchbell is stopped
|
|
2051
|
+
* D9: `npm install -g watchbell@latest` with the npm next to this Node.js, only while Watchbell is stopped; since 1.2.2
|
|
2052
|
+
* with `--prefix` of the folder this copy runs from (installPrefix), so a Node.js elsewhere on PATH (nvm next to a
|
|
2053
|
+
* copy in ~/.local) can no longer take the update. A running
|
|
1373
2054
|
* service of the package is stopped cleanly first and started again after (also when npm failed: the old version
|
|
1374
2055
|
* then runs on). 0: updated or already the latest; 1: running, npm failed, or the service did not stop.
|
|
1375
2056
|
*/
|
|
@@ -1391,9 +2072,11 @@ export async function cmdUpdate({ ctx }, d) {
|
|
|
1391
2072
|
return 0;
|
|
1392
2073
|
}
|
|
1393
2074
|
if (latest === null) d.out("Could not ask registry.npmjs.org for the latest version; npm will try.");
|
|
1394
|
-
const
|
|
2075
|
+
const prefix = installPrefix(d.pkgRoot, d.platform);
|
|
2076
|
+
const NPM_UPDATE = npmUpdateText(prefix);
|
|
2077
|
+
const npm = npmCommand(d, prefix);
|
|
1395
2078
|
if (!npm) {
|
|
1396
|
-
d.err(`The folder of this Node.js can't go on a cmd command line. Stop Watchbell and run: ${NPM_UPDATE}`);
|
|
2079
|
+
d.err(`The folder of this Node.js or of Watchbell can't go on a cmd command line. Stop Watchbell and run: ${NPM_UPDATE}`);
|
|
1397
2080
|
return 1;
|
|
1398
2081
|
}
|
|
1399
2082
|
const service = await runningService(ctx, d);
|
|
@@ -1417,7 +2100,7 @@ export async function cmdUpdate({ ctx }, d) {
|
|
|
1417
2100
|
return 1;
|
|
1418
2101
|
}
|
|
1419
2102
|
}
|
|
1420
|
-
d.out(`Updating Watchbell ${current}${latest ? ` to ${latest}` : ""}: ${npm.npm} ${
|
|
2103
|
+
d.out(`Updating Watchbell ${current}${latest ? ` to ${latest}` : ""}: ${npm.npm} ${NPM_UPDATE.slice(4)}`);
|
|
1421
2104
|
// POSIX: npm starts with "#!/usr/bin/env node", so this Node.js goes first on PATH, else npm runs (and installs for)
|
|
1422
2105
|
// whichever node PATH finds first. A large maxBuffer: a verbose .npmrc must not get npm killed mid-install.
|
|
1423
2106
|
const env = d.platform === "win32" ? d.env : { ...d.env, PATH: [path.posix.dirname(d.execPath), d.env.PATH].filter(isSet).join(":") };
|
|
@@ -1436,7 +2119,12 @@ export async function cmdUpdate({ ctx }, d) {
|
|
|
1436
2119
|
const now = packageVersion(d.pkgRoot);
|
|
1437
2120
|
if (now === current && newer !== null && newer > 0) {
|
|
1438
2121
|
code = 1;
|
|
1439
|
-
d.err(`npm finished, but ${d.pkgRoot} still holds Watchbell ${now}:
|
|
2122
|
+
d.err(`npm finished, but ${d.pkgRoot} still holds Watchbell ${now}: the new version went to another folder.`);
|
|
2123
|
+
d.err(
|
|
2124
|
+
prefix
|
|
2125
|
+
? `npm was told to install into ${prefix}, where this copy runs from. A copy made with npm link, or kept by another tool (volta, pnpm), updates its own way; "npm ls -g --prefix ${/\s/.test(prefix) ? `"${prefix}"` : prefix} watchbell" shows what that folder holds.`
|
|
2126
|
+
: `This copy is not in an npm global folder (<prefix>/${d.platform === "win32" ? "" : "lib/"}node_modules/watchbell), so update it the way you installed it. "npm prefix -g" shows where npm installs.`,
|
|
2127
|
+
);
|
|
1440
2128
|
} else d.out(now === current ? `Watchbell ${now} is up to date.` : `Updated Watchbell ${current} to ${now}.`);
|
|
1441
2129
|
}
|
|
1442
2130
|
if (service) {
|
|
@@ -1461,8 +2149,10 @@ export async function main(argv, overrides = {}) {
|
|
|
1461
2149
|
return 0;
|
|
1462
2150
|
}
|
|
1463
2151
|
if (errors.length) {
|
|
1464
|
-
|
|
1465
|
-
|
|
2152
|
+
// An unknown option is its own complete line; every other mistake gets the prefix and the pointer to --help.
|
|
2153
|
+
const unknown = (e) => e.startsWith("Unknown option ");
|
|
2154
|
+
for (const e of errors) d.err(unknown(e) ? e : `watchbell: ${e}`);
|
|
2155
|
+
if (!errors.every(unknown)) d.err("Run watchbell --help for the commands.");
|
|
1466
2156
|
return 2;
|
|
1467
2157
|
}
|
|
1468
2158
|
const major = Number.parseInt(String(d.nodeVersion).split(".")[0], 10);
|
|
@@ -1480,7 +2170,7 @@ export async function main(argv, overrides = {}) {
|
|
|
1480
2170
|
}
|
|
1481
2171
|
switch (opts.command) {
|
|
1482
2172
|
case "start":
|
|
1483
|
-
return cmdStart(ctx, d, { open: opts.open, foreground: false, newKey: opts.newKey });
|
|
2173
|
+
return cmdStart(ctx, d, { open: opts.open, foreground: false, newKey: opts.newKey, verbose: opts.verbose });
|
|
1484
2174
|
case "run":
|
|
1485
2175
|
if (underLaunchd(d)) return runUnderLaunchd(ctx, d);
|
|
1486
2176
|
return cmdStart(ctx, d, { open: false, foreground: true, newKey: false });
|