watchbell 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +123 -84
- package/bin/watchbell.mjs +593 -23
- package/package.json +1 -1
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/app-path-routes-manifest.json +1 -0
- package/server/.next/build-manifest.json +116 -105
- package/server/.next/prerender-manifest.json +3 -3
- package/server/.next/routes-manifest.json +6 -0
- 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 +11 -11
- package/server/.next/server/app/(console)/(private)/ai/agents/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/(private)/ai/ask/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/(private)/ai/connect/page.js +61 -58
- 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 +12 -12
- package/server/.next/server/app/(console)/(private)/ai/keys/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/(private)/ai/logs/page.js +61 -58
- 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 +19 -19
- package/server/.next/server/app/(console)/(private)/ai/models/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/(private)/ai/page.js +61 -58
- 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 +12 -12
- package/server/.next/server/app/(console)/(private)/ai/playground/page.js +61 -58
- 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 +15 -15
- package/server/.next/server/app/(console)/(private)/ai/providers/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/(private)/ai/quota/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/(private)/ai/usage/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/(private)/auto-actions/page.js +61 -58
- 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)/[...slug]/page/build-manifest.json +3 -3
- package/server/.next/server/app/(console)/[...slug]/page/server-reference-manifest.json +9 -9
- package/server/.next/server/app/(console)/[...slug]/page.js +62 -59
- package/server/.next/server/app/(console)/[...slug]/page.js.nft.json +1 -1
- package/server/.next/server/app/(console)/[...slug]/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 +22 -22
- package/server/.next/server/app/(console)/alerts/page.js +61 -58
- 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 +23 -23
- package/server/.next/server/app/(console)/apps/[id]/page.js +61 -58
- 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 +11 -11
- package/server/.next/server/app/(console)/apps/page.js +61 -58
- 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 +12 -12
- package/server/.next/server/app/(console)/backups/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/catalog/page.js +61 -58
- 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 +54 -54
- package/server/.next/server/app/(console)/connections/page.js +67 -64
- 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 +9 -9
- package/server/.next/server/app/(console)/d1/page.js +61 -58
- 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 +14 -14
- package/server/.next/server/app/(console)/deployments/page.js +61 -58
- 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 +16 -16
- package/server/.next/server/app/(console)/dns/page.js +61 -58
- 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 +11 -11
- package/server/.next/server/app/(console)/domains/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/events/page.js +61 -58
- 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 +15 -15
- package/server/.next/server/app/(console)/firebase/page.js +62 -59
- 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 +10 -10
- package/server/.next/server/app/(console)/logs/page.js +61 -58
- 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/app-paths-manifest.json +3 -0
- package/server/.next/server/app/(console)/manage/sections/page/build-manifest.json +22 -0
- package/server/.next/server/app/(console)/manage/sections/page/next-font-manifest.json +11 -0
- package/server/.next/server/app/(console)/manage/sections/page/react-loadable-manifest.json +1 -0
- package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +105 -0
- package/server/.next/server/app/(console)/manage/sections/page.js +104 -0
- package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -0
- package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +3 -0
- 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 +20 -20
- package/server/.next/server/app/(console)/neon/page.js +61 -58
- 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 +16 -16
- package/server/.next/server/app/(console)/overview/page.js +61 -58
- 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 +10 -10
- package/server/.next/server/app/(console)/repos/[id]/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/repos/page.js +61 -58
- 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 +19 -19
- package/server/.next/server/app/(console)/settings/page.js +61 -58
- 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 +16 -16
- package/server/.next/server/app/(console)/sql/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/status/page.js +61 -58
- 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 +27 -27
- package/server/.next/server/app/(console)/supabase/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/topology/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/turso/page.js +61 -58
- 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 +9 -9
- package/server/.next/server/app/(console)/upstash/page.js +61 -58
- 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 +22 -22
- package/server/.next/server/app/(console)/uptime/page.js +61 -58
- 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 +14 -14
- package/server/.next/server/app/(console)/welcome/page.js +62 -59
- 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 +3 -3
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/_not-found/page/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.nft.json +1 -1
- package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_not-found.html +1 -1
- package/server/.next/server/app/_not-found.rsc +4 -4
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/account/password/page/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.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 +78 -73
- 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 +77 -72
- package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
- package/server/.next/server/app/api/health/route.js.nft.json +1 -1
- package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
- package/server/.next/server/app/api/telegram/webhook/route.js +75 -70
- package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/[[...rest]]/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/advice/route.js +20 -19
- 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 +2 -2
- 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 +2 -2
- 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 +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 +24 -23
- 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 +22 -21
- package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
- package/server/.next/server/app/api/v1/me/route.js +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 +10 -9
- 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 +20 -19
- 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 +20 -19
- package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
- package/server/.next/server/app/api/watchdog/route.js +21 -19
- 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 +18 -17
- 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/favicon.ico/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 +4 -3
- 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.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.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.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 +9 -8
- 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 +8 -8
- 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.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.nft.json +1 -1
- package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app-paths-manifest.json +1 -0
- package/server/.next/server/chunks/{[externals]__0fbnlnnial7w5._.js → [externals]__0qo8lpb70m87u._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1e0dmqhilgze5._.js → [externals]__100hq0n2xtenb._.js} +1 -1
- package/server/.next/server/chunks/{[externals]__1jhautmcwmgii._.js → [externals]__1irgb5qz1s3gv._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0_6eq1806attx._.js → [root-of-the-server]__00hb7hqa7qktx._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__049ykc067tlsv._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__04q-9779vl4kn._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__04rnior8cyxtx._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__010exlr_efe2h._.js → [root-of-the-server]__06ek056i_j_uk._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__06f9e4kpi0mw8._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__06jphm4auz_sh._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__06iz-tlpv7pqm._.js → [root-of-the-server]__06r-019fixp3f._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0mtlynfv-vklo._.js → [root-of-the-server]__07uknh5b-embq._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0j0medewrv95l._.js → [root-of-the-server]__07v5e0vzgl4n2._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0ul6-jnt2oco7._.js → [root-of-the-server]__08fyoixg__c7n._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0_rfeg3389imx._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0b2hzo6nez0we._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0b9tciqdsctau._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__09qqv-zsz9qhr._.js → [root-of-the-server]__0b_4w-5x5u7ag._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1-37ctpn8yw_m._.js → [root-of-the-server]__0bnasoi-x21jc._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0c5w5y-db0jkb._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__08i_or_xyqg4g._.js → [root-of-the-server]__0d8ypilha-el8._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0znb_m_wygjdc._.js → [root-of-the-server]__0erdelc9_06nk._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__018ux7xja83l6._.js → [root-of-the-server]__0flqwe7amc3mz._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0f5l9--3_wjvx._.js → [root-of-the-server]__0fw19tsgp-vbq._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1_l4gp3r2d-7x._.js → [root-of-the-server]__0fw7l5y58_xcd._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__02ihdvnmhshoe._.js → [root-of-the-server]__0g1tldn4xjewd._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0ogbwvwpnlx0b._.js → [root-of-the-server]__0grtjjr51j6xe._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__1jrqehmo6kq8x._.js → [root-of-the-server]__0h1qhdjpfq1d4._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__08801yoxfe_os._.js → [root-of-the-server]__0h4n81_nqdr4j._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__081ywec7cjq3d._.js → [root-of-the-server]__0hty-wue10pro._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0jqgfbhrgi28s._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0m7i0l3nkbdfm._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0mwiq4mkf8pc5._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0mui3wh3lfb6m._.js → [root-of-the-server]__0npmbdrxybln5._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0-ok-3r9xtz0y._.js → [root-of-the-server]__0nqw6z6fp8wad._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0_iz9zh9e_mov._.js → [root-of-the-server]__0olmk-rbbhxlo._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0nsie5dba69e6._.js → [root-of-the-server]__0owyb9lr5t5u-._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0p3lnkpxf2-xz._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0qmkpydmx3ljf._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0r-zdzq6ki5gr._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0mhtnnebbepzx._.js → [root-of-the-server]__0si9k9jhdc0bm._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0u66-8g4ql645._.js → [root-of-the-server]__0sivlmcvkc1uq._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0t8d8b4qkw3y-._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0i1de88cj5y-p._.js → [root-of-the-server]__0tl5pxttllr4d._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__1z3-s7wc9-uc6._.js → [root-of-the-server]__0uyh4jgcd9092._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__0v4-g6c-ls39_._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0vgnlhvdoh3bn._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1x9tt_2yhozwe._.js → [root-of-the-server]__0vp-x4ifpr3p9._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__15j_u2bz3jc-a._.js → [root-of-the-server]__0wy38l7k36j6g._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0qesn8t6k9y_n._.js → [root-of-the-server]__0xiz361p5kdhf._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__0z-07azr3zk8s._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0z-41cwvkliev._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__0zxyfd7u67hmv._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1-rqermjb77se._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__10c7apgidgs6x._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__03pc2mot62sow._.js → [root-of-the-server]__10x3lu8jeqgbt._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0gs-x779qi1ba._.js → [root-of-the-server]__11-van59e9p2a._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__110c-t3wz3nzm._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__116b4n13dv75t._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__11k46kam6tbia._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__11tte6au1b-z-._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__127dbd1prkw0n._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__12uj0887q1ayr._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__13_b24n_f4my4._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__13be7gbo81td4._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__13h--47xmg706._.js +5 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0wt74rsaz-308._.js → [root-of-the-server]__145gadwk31inl._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0j53mir12jire._.js → [root-of-the-server]__14luo1ecxoqh-._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__15ddlx_ma_1iu._.js → [root-of-the-server]__162cm9ds1c5y2._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__19kwj690b37xf._.js +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__19vsae2naddj5._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1_l065umy451k._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1_ow7lgy0u7st._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1akvpmbiap6nf._.js +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__0292lwnmh4wtc._.js → [root-of-the-server]__1aza-7l2pl-pm._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1bsyavebtmd7w._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1cju843cjyf1t._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0qpf0qusq792k._.js → [root-of-the-server]__1cla4k3dqtcfb._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1fnsa-f0t7bxj._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1g1176fer3j4e._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1hqy35gww7ps2._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1i92wg2yuvs4c._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__03e141znq0hr-._.js → [root-of-the-server]__1iv6vg3z9ho81._.js} +1 -1
- package/server/.next/server/chunks/[root-of-the-server]__1j26i51ankv-z._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1jh0el-zvg4hp._.js → [root-of-the-server]__1j3-sv7eqyhjb._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1j3w0-cp17tx4._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__1czhdqbxj_3ov._.js → [root-of-the-server]__1j_iy13gp2-on._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1kg91b3sadtoc._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1kjndfodqqamq._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1mami4vb3y5gd._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1mse65-7gtj-n._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0q691wec2busx._.js → [root-of-the-server]__1objhlwwrjfjk._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1pscg7y0et34j._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1rw0i4x2ake3x._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1t9zp524wouer._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__0tb-63ts77gqd._.js → [root-of-the-server]__1tefe1f5835t_._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1u1b3a58anm3f._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1v-789ydxj30e._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__132wlw6sbwt1d._.js → [root-of-the-server]__1vi0u2vkv3tk0._.js} +2 -2
- package/server/.next/server/chunks/{[root-of-the-server]__0j68ia9q425ff._.js → [root-of-the-server]__1w3svzao_gnxp._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__1w_73psnce1dd._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__1x7ucdyxuh2_k._.js +3 -0
- package/server/.next/server/chunks/{[root-of-the-server]__08l1x_plf4dil._.js → [root-of-the-server]__1xdi98xyay6bn._.js} +1 -1
- package/server/.next/server/chunks/{[root-of-the-server]__18mztbxkzaxjs._.js → [root-of-the-server]__20_1nfa6fiz-q._.js} +2 -2
- package/server/.next/server/chunks/[root-of-the-server]__20b_clyk74g5u._.js +3 -0
- package/server/.next/server/chunks/[root-of-the-server]__20ev6t8zggct2._.js +3 -0
- package/server/.next/server/chunks/_004c7-39glldb._.js +4 -4
- package/server/.next/server/chunks/_008zv66xvj7ey._.js +37 -0
- package/server/.next/server/chunks/{_12uzjq-fbcuvb._.js → _01s3_8ssosvqi._.js} +1 -1
- package/server/.next/server/chunks/_03qlijpos6a21._.js +3 -0
- package/server/.next/server/chunks/_09l75j3ey14tc._.js +1 -1
- package/server/.next/server/chunks/_0a7533vs89s78._.js +7 -0
- package/server/.next/server/chunks/_0ejcrge5k4quv._.js +9 -9
- package/server/.next/server/chunks/_0k4iqzwm6w5_c._.js +37 -0
- package/server/.next/server/chunks/_0kmhvts35imzs._.js +1 -1
- package/server/.next/server/chunks/_0m1ll2r1g77ii._.js +1 -1
- package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +3 -0
- package/server/.next/server/chunks/_0nt4hve0bi30h._.js +37 -0
- package/server/.next/server/chunks/_0op74d4yyc3ma._.js +1 -1
- package/server/.next/server/chunks/_0pf2g5n_ko5dq._.js +3 -0
- package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +3 -3
- package/server/.next/server/chunks/_0qr77omrkuewo._.js +3 -0
- package/server/.next/server/chunks/_0rjh9w2ih3j2h._.js +3 -0
- package/server/.next/server/chunks/_0sy878k2ywjbq._.js +3 -0
- package/server/.next/server/chunks/_0tz4o-qufnu3l._.js +4 -4
- package/server/.next/server/chunks/_0voowig3y32v1._.js +1 -1
- package/server/.next/server/chunks/_0wxm_716tjorj._.js +3 -0
- package/server/.next/server/chunks/_0xf7mtsrkgc9e._.js +1 -1
- package/server/.next/server/chunks/_0zkmkbrbc96-h._.js +3 -0
- package/server/.next/server/chunks/_1-pw7jw52sbti._.js +3 -0
- package/server/.next/server/chunks/_103ai6ybnpq1k._.js +1 -1
- package/server/.next/server/chunks/_108e86rhye0o1._.js +1 -1
- package/server/.next/server/chunks/_10vh_l3hht4_3._.js +4 -4
- package/server/.next/server/chunks/_1476vtrt9101m._.js +1 -1
- package/server/.next/server/chunks/_14ymj3uzawde4._.js +7 -0
- package/server/.next/server/chunks/_15g-opioju_ju._.js +3 -0
- package/server/.next/server/chunks/_17aiz6zt-yv52._.js +1 -1
- package/server/.next/server/chunks/_1_son1yzo5xvl._.js +3 -0
- package/server/.next/server/chunks/_1b7pc6ohhqxs3._.js +9 -9
- package/server/.next/server/chunks/_1g_prqb_u33e3._.js +3 -3
- package/server/.next/server/chunks/_1i7qkrp3fnx1a._.js +37 -0
- package/server/.next/server/chunks/_1kcmwgs544mo-._.js +1 -1
- package/server/.next/server/chunks/_1lq5m27p-ilrw._.js +1 -1
- package/server/.next/server/chunks/_1luzeov9x87mg._.js +7 -0
- package/server/.next/server/chunks/_1mnwzh3z9y4th._.js +3 -0
- package/server/.next/server/chunks/_1nuf-l7izvfl_._.js +1 -1
- package/server/.next/server/chunks/{_1jz6k3wy_s8br._.js → _1p0ced3sr0i_8._.js} +1 -1
- package/server/.next/server/chunks/_1ptcxyn1tzm9r._.js +1 -1
- package/server/.next/server/chunks/_1v7q0xdxbqawm._.js +1 -1
- package/server/.next/server/chunks/_1zx_54or1pubb._.js +1 -1
- package/server/.next/server/chunks/node_modules_next_dist_1i-_xribpwttd._.js +313 -0
- package/server/.next/server/chunks/{src_0uxqs7150nhx2._.js → src_014zbodp4djeb._.js} +2 -2
- package/server/.next/server/chunks/src_01jp2f5qmh8e2._.js +3 -0
- package/server/.next/server/chunks/{src_0n42os1q41rha._.js → src_04pgj--n_d4w5._.js} +2 -2
- package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
- package/server/.next/server/chunks/src_088gmyaew7ds0._.js +3 -0
- package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +3 -0
- package/server/.next/server/chunks/{src_01wdnb4skk1wz._.js → src_0kwnhwi77unm7._.js} +2 -2
- package/server/.next/server/chunks/src_0o4-snj7wkaav._.js +1 -1
- package/server/.next/server/chunks/{src_0d-zi077mzm6v._.js → src_0xqorb3-ef3ub._.js} +2 -2
- package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +3 -0
- package/server/.next/server/chunks/src_1-xw4hea2lvb3._.js +1 -1
- package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
- package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +3 -0
- package/server/.next/server/chunks/{src_03umyw-p7jhaj._.js → src_1dsh9rzlos6-1._.js} +2 -2
- package/server/.next/server/chunks/src_1hy7u0jtydq_d._.js +3 -0
- package/server/.next/server/chunks/src_1j2o14j0-23xv._.js +3 -0
- package/server/.next/server/chunks/src_1j71dvub05y-4._.js +3 -0
- package/server/.next/server/chunks/{src_1-r51arho90p7._.js → src_1no_yh953mran._.js} +2 -2
- package/server/.next/server/chunks/src_1s7yll47_n_hy._.js +3 -0
- package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +3 -3
- package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +3 -0
- package/server/.next/server/chunks/src_1wzm081p6qyre._.js +3 -3
- package/server/.next/server/chunks/src_instrumentation-node_ts_1c--sr1k7_8k2._.js +3 -0
- package/server/.next/server/chunks/src_lib_08u7n7-yunfvd._.js +2 -2
- package/server/.next/server/chunks/src_lib_0cbs2jlrw1qbh._.js +3 -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_0oz4gm8agoidh._.js +6 -0
- package/server/.next/server/chunks/src_lib_0s_txig7jm3ty._.js +3 -3
- package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +15 -0
- package/server/.next/server/chunks/src_lib_0x4n8swwa3zn7._.js +1 -1
- package/server/.next/server/chunks/src_lib_0y-obfzqjj0c6._.js +6 -0
- package/server/.next/server/chunks/src_lib_10_w0ihgmx4e6._.js +6 -0
- package/server/.next/server/chunks/src_lib_10vqn6q0h8kls._.js +2 -2
- package/server/.next/server/chunks/src_lib_13g9xjx8ci00z._.js +3 -0
- package/server/.next/server/chunks/src_lib_15wd7ab4u5nrn._.js +3 -3
- package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +15 -0
- package/server/.next/server/chunks/src_lib_1p21oczr6lh5a._.js +3 -0
- package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +15 -0
- package/server/.next/server/chunks/src_lib_1sz77jjn7xl7o._.js +1 -1
- package/server/.next/server/chunks/src_lib_1tzoqx44yogsk._.js +2 -2
- package/server/.next/server/chunks/src_lib_1yd94hta5y1hx._.js +3 -0
- package/server/.next/server/chunks/src_lib_1yewk45thnv1h._.js +1 -1
- package/server/.next/server/chunks/src_lib_1z73euz6d3tus._.js +6 -0
- package/server/.next/server/chunks/src_lib_brand-env_ts_1wcm1bjuismq_._.js +3 -0
- package/server/.next/server/chunks/src_lib_collector_auth_ts_0lqx92__e4zij._.js +4 -4
- package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +6 -6
- package/server/.next/server/chunks/src_lib_data_0ask_rbmgwlf3._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_0e155tkqeoojm._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_backup-db_ts_19rtzbv84xz_h._.js +2 -2
- package/server/.next/server/chunks/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +1 -1
- package/server/.next/server/chunks/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +6 -0
- package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
- package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +9 -9
- package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +13 -13
- package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +9 -9
- package/server/.next/server/chunks/src_lib_notify_lang_ts_1r2w02ctaky7e._.js +1 -1
- package/server/.next/server/chunks/src_lib_providers_info_ts_02x6g30rg2hsp._.js +3 -0
- package/server/.next/server/chunks/src_lib_time_ts_1__07rt8x18k-._.js +3 -0
- package/server/.next/server/chunks/src_lib_time_ts_1a27wp71yhgti._.js +3 -0
- package/server/.next/server/chunks/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
- package/server/.next/server/chunks/src_lib_view_databases_ts_0fdc7jkjvyrxi._.js +3 -0
- package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.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_1q6nc5chwn5k4.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +1 -1
- package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +1 -1
- package/server/.next/server/chunks/ssr/{[externals]__1u-jgivpw0_oh._.js → [externals]__0zvy4iicnrk95._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__02cq5r26w4itc._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__02qyxz9eh8_eh._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__04ovk2bqwu87z._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0aahjz4fnt4c_._.js → [root-of-the-server]__052_cprs0alpy._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__11-ssp_43878t._.js → [root-of-the-server]__0543ddliluvv3._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ijk9z1ot_xi4._.js → [root-of-the-server]__08479d23kb1xv._.js} +2 -2
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1csz822qejxk-._.js → [root-of-the-server]__08fqg76puqdfr._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__09-0oydof-7uw._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__09nm_hn1c8zhf._.js +3 -0
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0lks-6wz-rmk5._.js → [root-of-the-server]__0acmauri7z1sg._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0ct71emqfru3b._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tkmutq84zkeh._.js → [root-of-the-server]__0e9m8up0h1qhl._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0h9gtpapca7i_._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0hln97a4qcziv._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0ksvf4x4zcbpb._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0lc7my3iqbrsu._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0n7cj-oti5wct._.js +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0ncef7_34ta3-._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0op0kqh43wd-a._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1-o_iq-ed9vc8._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__10bkg3o65q6r4._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__12qymdfh83hht._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__13oi70jo-u731._.js +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__146kj3-h6fkaq._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__1fdzriy6yyu5d._.js → [root-of-the-server]__15n-r12rnj61t._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__16o4p3l21rdq3._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__17kocbnwlcw6d._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__19_nr6j2w-in_._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1gw6334w8y2my._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1i69oli51is1u._.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ryb947ux5cq7._.js → [root-of-the-server]__1k1fmq0-rg3p0._.js} +2 -2
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1lx2k37wgre3d._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1owrn7crnsybx._.js +3 -0
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1qltiqn0htqnx._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1w1472ukyh58r._.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__20ht054m5-_d6._.js +1 -1
- package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +2 -2
- package/server/.next/server/chunks/ssr/_026w_ig6vy9bt._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1wu_8nu5allm0._.js → _05kq3r87s7p3q._.js} +1 -1
- package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.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/_0_tr9fol2yq33._.js +1 -1
- package/server/.next/server/chunks/ssr/_0_ul4mlc_pj5i._.js +2 -2
- 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/_0cukja7zcxh7e._.js +1 -1
- package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
- package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
- package/server/.next/server/chunks/ssr/_0fnl7z-saj7nc._.js +1 -1
- package/server/.next/server/chunks/ssr/_0hykblvnwc2ar._.js +1 -1
- package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +2 -2
- package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +2 -2
- package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +2 -2
- package/server/.next/server/chunks/ssr/_0m1ll2r1g77ii._.js +1 -1
- package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +2 -2
- package/server/.next/server/chunks/ssr/{_18t7ov64ycb-w._.js → _0ooh0hh-r_12s._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
- package/server/.next/server/chunks/ssr/{_14bz_443syxhi._.js → _0pn3dn9s9es51._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0qnv1uc1_yv28._.js +2 -2
- package/server/.next/server/chunks/ssr/_0qo8tc43kjsf_._.js +1 -1
- package/server/.next/server/chunks/ssr/{_06_f735j-1i20._.js → _0r04c1-snv6jw._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +1 -1
- package/server/.next/server/chunks/ssr/_0tcmsw8hszixv._.js +1 -1
- package/server/.next/server/chunks/ssr/{_0i6y4bkm-0cm3._.js → _0tnfblwwlyvq2._.js} +2 -2
- package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +2 -2
- package/server/.next/server/chunks/ssr/{_0o0-2ela2_qqd._.js → _0x1vi7mal3bqd._.js} +2 -2
- package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
- package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
- package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +2 -2
- package/server/.next/server/chunks/ssr/_11w5w9dpxcf1w._.js +3 -0
- package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +2 -2
- package/server/.next/server/chunks/ssr/_1476vtrt9101m._.js +1 -1
- package/server/.next/server/chunks/ssr/{_1p4i1e1kw70-_._.js → _14kop_5asppd8._.js} +2 -2
- package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +2 -2
- package/server/.next/server/chunks/ssr/_16t9k9e5cjvas._.js +1 -1
- package/server/.next/server/chunks/ssr/_18lgd6o04ugow._.js +2 -2
- 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/{_08y82qdosn7ga._.js → _1_ojvke28lw3y._.js} +2 -2
- package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +2 -2
- package/server/.next/server/chunks/ssr/_1b4uqc9fwt4dy._.js +1 -1
- package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +2 -2
- package/server/.next/server/chunks/ssr/_1c28jitsyufnt._.js +1 -1
- package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
- package/server/.next/server/chunks/ssr/_1dx207la592b7._.js +2 -2
- package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +2 -2
- package/server/.next/server/chunks/ssr/_1flla16o7o9ba._.js +1 -1
- 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/_1i77n2n-wb98v._.js +2 -2
- 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/_1nir32qtr99-r._.js +1 -1
- package/server/.next/server/chunks/ssr/_1qt1czw3w8dww._.js +3 -0
- package/server/.next/server/chunks/ssr/_1sq12-1_02tzt._.js +2 -2
- package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +2 -2
- package/server/.next/server/chunks/ssr/_1ykxf4mi60jog._.js +2 -2
- package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
- package/server/.next/server/chunks/ssr/_1zr0t31h18f2p._.js +3 -0
- package/server/.next/server/chunks/ssr/_20ln-4gu85-yt._.js +3 -0
- package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +2 -2
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1uaicj0j8stji.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_06a1fnrawxlh1.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_215m-kkv06r4z.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_0ven9q46d3d7s.js +3 -0
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
- package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
- package/server/.next/server/chunks/ssr/node_modules_next_dist_0joxsz2q5dh6c._.js +2 -2
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pz49shx663y1.js +3 -0
- package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1b0g9w0uow3x5.js +1 -1
- package/server/.next/server/chunks/ssr/src_00wh1gv_h2pjs._.js +1 -1
- package/server/.next/server/chunks/ssr/src_00ze92e3aolj8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_01jp2f5qmh8e2._.js +3 -0
- package/server/.next/server/chunks/ssr/src_025wo6h30c00a._.js +1 -1
- 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_09atx_ns_mlan._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0_5_wl0sww-x7._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0_kumjlw3o034._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0dl7jkqqm313f._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +3 -0
- package/server/.next/server/chunks/ssr/src_0fdfz--89117z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0ho313o5cu3-h._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0iefnjvaszvw_._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0loe22pbn4cuu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0nylfis4--x5j._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0ohsn5qzqqds_._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0p0fk07bj9gpq._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0t6-d5hmzrbp1._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0uitfl3c1mdqb._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0usxo7vu7o2cj._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0widudneyf0oq._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0xau6d5z5e_md._.js +1 -1
- package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1-wu43p02yiel._.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_11iuy79j_finh._.js +3 -0
- package/server/.next/server/chunks/ssr/src_12x8sjp-qdw08._.js +1 -1
- package/server/.next/server/chunks/ssr/src_14aur12he3m2a._.js +1 -1
- package/server/.next/server/chunks/ssr/src_15aqc6akkqade._.js +1 -1
- package/server/.next/server/chunks/ssr/src_15zqi72ky6hi9._.js +1 -1
- package/server/.next/server/chunks/ssr/src_19evuexp67uty._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1am4_ady64k2b._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1cbawr4iw5h-x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1ccrc8twenijg._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1ctx1an_a3k7g._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1iyzhhf1u_gwo._.js +3 -0
- package/server/.next/server/chunks/ssr/{src_1eermasnm2cgy._.js → src_1ottjkdvhje3g._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1xsg-zd4lt_d4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1y0xvj1obxu7i._.js +1 -1
- package/server/.next/server/chunks/ssr/src_1zpftf1xj-30l._.js +1 -1
- package/server/.next/server/chunks/ssr/src_20hs1ilkxmap0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1lhfs18es1mqc._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_loading_tsx_1qyzywm3br5h2._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_06n-9cjmbb-vu._.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_ask_loading_tsx_1niopfalguzs6._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_connect-view_tsx_04abz05n7hdsd._.js +15 -15
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_loading_tsx_0q7g8dpf7-vgo._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_keys_04ypt31p11eq7._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_keys_loading_tsx_1hc7x_jx0xx0_._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_0261l8yb2z9x1._.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_logs_loading_tsx_1dwhza0ud8asg._.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_models_0hla-5y3iresx._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_loading_tsx_1qtp-lo_o41cr._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_1o1z2qp3tik5x._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_loading_tsx_02umaieh-00pu._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_0jamu-nm6x-dh._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_loading_tsx_0u2pi0tk7s3ch._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_1kor9sy67qpiw._.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_quota_loading_tsx_1hhnum-g2eq3n._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_1v003vrkwk19w._.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)_(private)_ai_usage_loading_tsx_0pjvu-xuxbxmh._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_app_(console)_1ppp9j5e2rtqf._.js → src_app_(console)_1l7irblrb5fae._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_app_(console)_[___slug]_page_tsx_0b007i3c1v_vg._.js +1 -1
- 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]_088bs149wsgca._.js +1 -1
- 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)_backups_page_tsx_0o082iagq_14b._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_catalog_page_tsx_1u2_-bv4yi5oo._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_02upf_c41dauw._.js +3 -0
- 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 +3 -0
- 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_page_tsx_0g20hm13dvbc-._.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 +3 -0
- package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +3 -0
- 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)_neon_1ubea__gt06o0._.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)_repos_repo-list_tsx_1n1gcm4qfrfdt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_app_(console)_sql_16-sh45tpob8n._.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_148phfjye0539._.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_(console)_welcome_page_tsx_1bw0x0riq-oem._.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_124xn9wb2fasu._.js → src_app_signin_1tg6pswa99jbe._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +3 -0
- 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_ui_dialog_tsx_1tn-i_6d3rhzt._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +3 -3
- package/server/.next/server/chunks/ssr/src_lib_05ai1oj91p9w2._.js +2 -2
- package/server/.next/server/chunks/ssr/src_lib_0x4n8swwa3zn7._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_1nkahiclbn55q._.js +1 -1
- package/server/.next/server/chunks/ssr/{src_lib_1l8ej-zoyyegd._.js → src_lib_1p21oczr6lh5a._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_lib_1yewk45thnv1h._.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_copy_edition_ts_1y6lsdbj64t9p._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_keep-active-db_ts_0p07g9b74uu3e._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +1 -1
- package/server/.next/server/chunks/ssr/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +6 -0
- package/server/.next/server/chunks/ssr/{src_lib_demo_20hj85e_64pp1._.js → src_lib_demo_0hdl7pzdqejqx._.js} +2 -2
- package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
- package/server/.next/server/chunks/ssr/src_lib_providers_info_ts_02x6g30rg2hsp._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
- package/server/.next/server/chunks/ssr/src_lib_time_ts_1ualgyi3irm1z._.js +3 -0
- package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_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_ai_usage-analytics_ts_1bxba3xarzol0._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_ai_views-db_ts_1jbnr41mskha2._.js +1 -1
- package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +3 -3
- package/server/.next/server/chunks/ssr/src_private_explorer_explorer_tsx_04m_tdottspjs._.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 +116 -105
- package/server/.next/server/next-font-manifest.js +1 -1
- package/server/.next/server/next-font-manifest.json +4 -0
- package/server/.next/server/pages/404.html +1 -1
- package/server/.next/server/pages/500.html +1 -1
- package/server/.next/server/preview-props.json +3 -3
- package/server/.next/server/server-reference-manifest.js +1 -1
- package/server/.next/server/server-reference-manifest.json +210 -164
- package/server/.next/static/chunks/08dak2kh1c6_7.js +1 -0
- package/server/.next/static/chunks/{2v14aqfx8wv9o.js → 0b9slopuz4e8a.js} +1 -1
- package/server/.next/static/chunks/{36ureqoyz5e06.js → 0dp-tuwkw7xf8.js} +2 -2
- package/server/.next/static/chunks/0fhj_pu5ntcfo.js +1 -0
- package/server/.next/static/chunks/{2k9ytb8jmg14_.js → 0h9i512dn01kj.js} +1 -1
- package/server/.next/static/chunks/0ic6_-0gkd6p7.js +1 -0
- package/server/.next/static/chunks/0icohez16w-ei.js +1 -0
- package/server/.next/static/chunks/{1ieazx9t3vl5p.js → 0j1wzqg4ukm70.js} +1 -1
- package/server/.next/static/chunks/{43_va15lk2zc1.js → 0j_5norjm-kef.js} +1 -1
- package/server/.next/static/chunks/{1-1hfgat2l_o9.js → 0kscmnb071fci.js} +1 -1
- package/server/.next/static/chunks/{0c7pskzfstcdh.js → 0ld78j1d4j201.js} +1 -1
- package/server/.next/static/chunks/0qlb-l1uyqku5.js +1 -0
- package/server/.next/static/chunks/0udh0u8c6ovgf.css +3 -0
- package/server/.next/static/chunks/0y1ss0tjq0nq0.js +1 -0
- package/server/.next/static/chunks/{1ts_fd_r1kcrv.js → 1-oetq3mwlhds.js} +1 -1
- package/server/.next/static/chunks/{2fj4o7-stsvht.js → 11ywzwmfd_pt0.js} +1 -1
- package/server/.next/static/chunks/1j18pg23fzwv_.js +1 -0
- package/server/.next/static/chunks/1jaozq01v9r6e.js +1 -0
- package/server/.next/static/chunks/1ky5exl-c1kbo.js +1 -0
- package/server/.next/static/chunks/{0cannaigw8lhi.js → 1lsu_fxiyaeiz.js} +1 -1
- package/server/.next/static/chunks/1o3_amrh-sxr3.js +1 -0
- package/server/.next/static/chunks/{0wtboeftyamyk.js → 1w9o_jo_pejc5.js} +1 -1
- package/server/.next/static/chunks/1xy80z39ducub.js +1 -0
- package/server/.next/static/chunks/1yvbs41m8_4nc.js +7 -0
- package/server/.next/static/chunks/22alexnun_rdm.js +1 -0
- package/server/.next/static/chunks/{1o_q7_4ulcq9x.js → 27qwmt1w6-iri.js} +1 -1
- package/server/.next/static/chunks/29humkd2-_1oo.js +1 -0
- package/server/.next/static/chunks/29j96yfhxsf41.js +1 -0
- package/server/.next/static/chunks/29qnnsjsgsia6.js +1 -0
- package/server/.next/static/chunks/{2cjfogw85k3h-.js → 2ii8j9xuvv604.js} +1 -1
- package/server/.next/static/chunks/{30fczssqw6xys.js → 2m0ftj__ody0m.js} +1 -1
- package/server/.next/static/chunks/{201zah03wlibg.js → 2q88116332v43.js} +1 -1
- package/server/.next/static/chunks/2rbtw3em5hkt4.js +1 -0
- package/server/.next/static/chunks/2sdyov_lz1uj4.js +1 -0
- package/server/.next/static/chunks/{0li9-xjc40g51.js → 2toeyr9b_nk0e.js} +1 -1
- package/server/.next/static/chunks/{2fo6iuxb0ec7f.js → 2w7qxt7ux-m1-.js} +1 -1
- package/server/.next/static/chunks/{1gmof0n5nswkk.js → 2zc1osymeruya.js} +1 -1
- package/server/.next/static/chunks/33fbppn5fotpk.js +1 -0
- package/server/.next/static/chunks/{026asl66kuq3f.js → 340ecjh1jzqjd.js} +15 -15
- package/server/.next/static/chunks/3auw1gobgv94g.js +1 -0
- package/server/.next/static/chunks/3b1p-xm7iow1_.js +1 -0
- package/server/.next/static/chunks/{3tqh7fwtd_k_l.js → 3gl2k6v182lli.js} +2 -2
- package/server/.next/static/chunks/{3f5sxz8awpdog.js → 3gurl_36kr7sg.js} +1 -1
- package/server/.next/static/chunks/{1gb8jvw-g7fr7.js → 3h-i_hcaaf7vs.js} +1 -1
- package/server/.next/static/chunks/{2jlv5ekbb0wu2.js → 3kznplgmzot89.js} +1 -1
- package/server/.next/static/chunks/{0du6qnm4ee-qx.js → 3mb_v650fie_i.js} +1 -1
- package/server/.next/static/chunks/{3dokgd9nungcr.js → 3n_n6yeienmn-.js} +1 -1
- package/server/.next/static/chunks/3nqciag05fif0.js +1 -0
- package/server/.next/static/chunks/{1zi37go-xtasg.js → 3o45i7xbzm0w-.js} +1 -1
- package/server/.next/static/chunks/{1c4fx4kipvnqz.js → 3oe302ug_esoe.js} +1 -1
- package/server/.next/static/chunks/3r3mt51wqymgs.js +1 -0
- package/server/.next/static/chunks/3sg_npfod25zq.js +1 -0
- package/server/.next/static/chunks/{2rdmebof0d_c4.js → 3shbvizselyoq.js} +1 -1
- package/server/.next/static/chunks/3xxagngfonh62.js +1 -0
- package/server/.next/static/chunks/{2z1xy8l4s3usi.js → 3yv-enyk37whg.js} +1 -1
- package/server/node_modules/@next/env/package.json +1 -1
- package/server/node_modules/next/dist/build/analyze/snapshot.js +1 -1
- package/server/node_modules/next/dist/build/index.js +3 -3
- package/server/node_modules/next/dist/build/swc/index.js +1 -1
- package/server/node_modules/next/dist/build/turbopack-analyze/index.js +1 -1
- package/server/node_modules/next/dist/build/turbopack-build/impl.js +1 -1
- package/server/node_modules/next/dist/build/webpack-config.js +3 -3
- package/server/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +2 -2
- package/server/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +2 -2
- package/server/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +1 -1
- package/server/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/server/node_modules/next/dist/server/app-render/async-local-storage.js +1 -1
- package/server/node_modules/next/dist/server/config.js +1 -1
- package/server/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/server/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/server/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/server/node_modules/next/dist/server/lib/generate-agent-files.js +3 -3
- package/server/node_modules/next/dist/server/lib/router-server.js +1 -1
- package/server/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/server/node_modules/next/dist/server/lib/trace/tracer.js +1 -1
- package/server/node_modules/next/dist/server/typescript/rules/config.js +2 -2
- package/server/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
- package/server/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/server/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/server/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/server/node_modules/next/package.json +11 -11
- package/server/.next/server/chunks/[root-of-the-server]__03zcy67tjxii8._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__08j1jeemvo-th._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__08n3x1x850wqc._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0b_bj-_t8b0b-._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0grnl7ncqcjft._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0hju4mctdmvz9._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0i3n8l6ecdb4u._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0m8w2-7618scn._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0p_b0m2cstlrl._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0uyagcs61c0t_._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0v1kcolrxwmob._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0vctt_0kj1gz4._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0x0x6v75re5_e._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0xyzhdj3z_1ro._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0ymon9r-17xe_._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__0zxjft8y2r575._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__114vjjaqb2wyv._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__12uyws-qe6wxs._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__139pgc0wpc7kg._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__157yb_wl7w4ly._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__16dyxwm6pzumx._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__18qf1s7o0ia89._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1951xb3jdzdop._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1_5q9zgl6p5_3._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1a9cd4d9ohf69._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1bwgi7nn5-hc3._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1hxhj2o7lea8i._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1i4bqqne6vibf._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1i83m8i-3yn72._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1jrcnhad_b53j._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1k8s02gwythps._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1lf_lo1wqcbcg._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1n32c8l_j8jt4._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1niiijc82bgoj._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1on_3p53yn6fs._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1pgtip37umn35._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1q90luznbe9-l._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1r15vmrh2r06l._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1rl43iilsc-je._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1ta7-xvmtkjwr._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1voiad6r-u931._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1wlilsfzjqdw9._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1woerg3tb4ls3._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1wonw7ft4hset._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__1zaomh_4901_f._.js +0 -3
- package/server/.next/server/chunks/[root-of-the-server]__20lwsd6a4wnpe._.js +0 -3
- package/server/.next/server/chunks/_01vdbh009dk-w._.js +0 -5
- package/server/.next/server/chunks/_03bua_9n4apok._.js +0 -3
- package/server/.next/server/chunks/_0594j_bb0l80e._.js +0 -3
- package/server/.next/server/chunks/_076dwl7r_5vcl._.js +0 -34
- package/server/.next/server/chunks/_08tppw9ujlpke._.js +0 -34
- package/server/.next/server/chunks/_08y82qdosn7ga._.js +0 -3
- package/server/.next/server/chunks/_0m49djgc1t4wg._.js +0 -3
- package/server/.next/server/chunks/_0n5m3o7at0adm._.js +0 -34
- package/server/.next/server/chunks/_0qawxzcf--lyq._.js +0 -4
- package/server/.next/server/chunks/_0r4am1mgz4dg_._.js +0 -3
- package/server/.next/server/chunks/_0s30ac32b7prb._.js +0 -3
- package/server/.next/server/chunks/_0vfrh5u-u4mis._.js +0 -3
- package/server/.next/server/chunks/_0vgojnnkcf1vu._.js +0 -4
- package/server/.next/server/chunks/_0vz0de4gz70-e._.js +0 -4
- package/server/.next/server/chunks/_1-mixh9aeqh7f._.js +0 -3
- package/server/.next/server/chunks/_11p2ejgai2a78._.js +0 -3
- package/server/.next/server/chunks/_1bcsmpznxhk9h._.js +0 -3
- package/server/.next/server/chunks/_1he3nioua8ee5._.js +0 -3
- package/server/.next/server/chunks/_1l82x0z8bo4pt._.js +0 -3
- package/server/.next/server/chunks/_1lpcbqj4uzrsh._.js +0 -3
- package/server/.next/server/chunks/_1rw6_0nf-3sxs._.js +0 -34
- package/server/.next/server/chunks/src_0d5xqe2zx_935._.js +0 -3
- package/server/.next/server/chunks/src_0l-no1yc1_izn._.js +0 -3
- package/server/.next/server/chunks/src_0v4pdrc1yxyl8._.js +0 -3
- package/server/.next/server/chunks/src_0vva87j3z99p9._.js +0 -3
- package/server/.next/server/chunks/src_156ewlek-4a4z._.js +0 -3
- package/server/.next/server/chunks/src_1zo6so07lgcdj._.js +0 -3
- package/server/.next/server/chunks/src_db_rows_ts_15b286wn1kn1e._.js +0 -3
- package/server/.next/server/chunks/src_lib_0-ylqsh7whlj2._.js +0 -3
- package/server/.next/server/chunks/src_lib_0485hz-c7h7dr._.js +0 -15
- package/server/.next/server/chunks/src_lib_0f0p6-l5vvduu._.js +0 -3
- package/server/.next/server/chunks/src_lib_0qcyomi01xvf1._.js +0 -15
- package/server/.next/server/chunks/src_lib_15a3m-j_urkkp._.js +0 -3
- package/server/.next/server/chunks/src_lib_1d6edz_ucj01w._.js +0 -3
- package/server/.next/server/chunks/src_lib_1ryt-36ohhnm6._.js +0 -15
- package/server/.next/server/chunks/src_lib_1suc_xwzxtuej._.js +0 -3
- package/server/.next/server/chunks/src_lib_1uh73ofc-pe92._.js +0 -3
- package/server/.next/server/chunks/src_private_1yzfhupl3rlpx._.js +0 -6
- package/server/.next/server/chunks/ssr/[root-of-the-server]__004r8ubf3fp_i._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__06s-dfcfuperv._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__07or1m2vwon1m._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0d9lwldljqtvx._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0q36f5xjkzf4z._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__0uklr553mp86_._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1cykncw1_xcno._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1ih2a_fbqu7ko._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1j7_a902k_8es._.js +0 -3
- package/server/.next/server/chunks/ssr/[root-of-the-server]__1ofzjllv-b0o0._.js +0 -3
- package/server/.next/server/chunks/ssr/_040ixxsgfs0vi._.js +0 -3
- package/server/.next/server/chunks/ssr/_04e0uk5aqrgc3._.js +0 -3
- package/server/.next/server/chunks/ssr/_0ux6eo_w1x155._.js +0 -3
- package/server/.next/server/chunks/ssr/_12o9qqjoik4q4._.js +0 -3
- package/server/.next/server/chunks/ssr/_1k2q3yt1h6cfs._.js +0 -3
- package/server/.next/server/chunks/ssr/_1zhtvg8t3jtxe._.js +0 -3
- package/server/.next/server/chunks/ssr/_200p6me5_kp2j._.js +0 -3
- package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_03amng1-xhfd1.js +0 -3
- package/server/.next/server/chunks/ssr/src_00s82lfm2ga7-._.js +0 -3
- package/server/.next/server/chunks/ssr/src_13hsrg6rdvh-d._.js +0 -3
- package/server/.next/server/chunks/ssr/src_1xgsz_do2xpr2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_0gm1y-wtw5gyd._.js +0 -3
- package/server/.next/server/chunks/ssr/src_app_(console)_connections_1qigx20w8bk53._.js +0 -3
- package/server/.next/server/chunks/ssr/src_components_shell_shell_tsx_1cpq-hbch_dvj._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_0y40wht-o-oc2._.js +0 -3
- package/server/.next/server/chunks/ssr/src_lib_data_settings-db_ts_1to3jtggxlaz4._.js +0 -3
- package/server/.next/static/chunks/03qto0oyf2r1n.js +0 -1
- package/server/.next/static/chunks/0dmi-v53phuqn.js +0 -1
- package/server/.next/static/chunks/0n_l4a3za5-q8.js +0 -1
- package/server/.next/static/chunks/0t96fqp1vsmrp.js +0 -1
- package/server/.next/static/chunks/0wlc502815llk.js +0 -1
- package/server/.next/static/chunks/158-i6phe17yl.js +0 -1
- package/server/.next/static/chunks/1fxuyn0k52n4v.css +0 -3
- package/server/.next/static/chunks/1mlvn70-zqjvi.js +0 -1
- package/server/.next/static/chunks/1sm8wxvlpowwg.js +0 -1
- package/server/.next/static/chunks/1teh52nh5dujq.js +0 -1
- package/server/.next/static/chunks/1v4hl1z0y1npd.js +0 -1
- package/server/.next/static/chunks/1vh2psoqw3ddc.js +0 -1
- package/server/.next/static/chunks/1xau8pf40_upi.js +0 -7
- package/server/.next/static/chunks/1z2rcngn3-7i5.js +0 -1
- package/server/.next/static/chunks/210qrsqvmgaet.js +0 -1
- package/server/.next/static/chunks/29p15vj15jcsb.js +0 -1
- package/server/.next/static/chunks/2kmerzslng988.js +0 -1
- package/server/.next/static/chunks/2llric-1orr3y.js +0 -1
- package/server/.next/static/chunks/2wb9a1xth0yhf.js +0 -1
- package/server/.next/static/chunks/34gs6c2dsgtqy.js +0 -1
- package/server/.next/static/chunks/3ag6t3ta58rih.js +0 -1
- package/server/.next/static/chunks/3gkta99h3_5i2.js +0 -1
- /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_buildManifest.js +0 -0
- /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_clientMiddlewareManifest.js +0 -0
- /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_ssgManifest.js +0 -0
package/bin/watchbell.mjs
CHANGED
|
@@ -31,17 +31,21 @@ const SERVICE = "watchbell.service";
|
|
|
31
31
|
const TASK = "Watchbell";
|
|
32
32
|
const UNIT_MARKER = "# Written by the watchbell CLI";
|
|
33
33
|
const LAUNCHD_LABEL = "watchbell";
|
|
34
|
+
const LAUNCHD_THROTTLE_S = 60;
|
|
35
|
+
const PLIST_MARKER = "<!-- Written by the watchbell CLI";
|
|
34
36
|
const READY_TIMEOUT_MS = 120_000;
|
|
35
37
|
|
|
36
38
|
// [usage, description]: --help prints them all (a test checks that every command is listed).
|
|
37
39
|
export const COMMANDS = [
|
|
38
40
|
["watchbell [start] [--no-open]", "Start Watchbell (the default). First run creates ~/.watchbell, prints the setup code and opens /setup."],
|
|
39
41
|
["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
|
+
["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."],
|
|
40
43
|
["watchbell run", "Start in the foreground for a service manager (never opens a browser)."],
|
|
41
44
|
["watchbell stop [--timeout <seconds>]", "Ask the running Watchbell to stop cleanly (default wait 30 s)."],
|
|
42
45
|
["watchbell status", "Show whether Watchbell runs, its address and folders (exit 0 running, 3 not running)."],
|
|
43
|
-
["watchbell service install [--yes]", "Start Watchbell when you log in: a systemd user service (Linux)
|
|
46
|
+
["watchbell service install [--yes]", "Start Watchbell when you log in: a systemd user service (Linux), a Scheduled Task (Windows) or a launchd agent (macOS)."],
|
|
44
47
|
["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)."],
|
|
45
49
|
["watchbell reset-login <email>", "Give an account a new temporary password and remove its authenticator (Watchbell stopped)."],
|
|
46
50
|
["watchbell --version", "Print the version."],
|
|
47
51
|
["watchbell --help", "Print this help."],
|
|
@@ -60,16 +64,28 @@ export function helpText(version) {
|
|
|
60
64
|
"(a HOST or PORT your shell exports is ignored); WATCHBELL_HOST, WATCHBELL_PORT and WATCHBELL_SITE_URL in the",
|
|
61
65
|
"environment override them. Other variables set in the environment win over the file, except DATABASE_URL, which",
|
|
62
66
|
"is read from the file only.",
|
|
67
|
+
"",
|
|
68
|
+
"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). WATCHBELL_NO_UPDATE_CHECK=1 turns that off.",
|
|
63
70
|
].join("\n");
|
|
64
71
|
}
|
|
65
72
|
|
|
66
73
|
// ---------------------------------------------------------------------------------------------------- arguments
|
|
67
74
|
|
|
68
|
-
const COMMAND_NAMES = ["start", "run", "stop", "status", "service", "reset-login"];
|
|
69
|
-
const OPTION_OWNER = { "--no-open": "start", "--new-key": "start", "--timeout": "stop", "--yes": "service" };
|
|
75
|
+
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"] };
|
|
77
|
+
// An IPv4 or IPv6 address (brackets allowed) or a host name; never something that looks like an option.
|
|
78
|
+
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
|
+
// Brackets off, IPv6 in lower case, every spelling of the all-zero IPv6 address as "::" (the health check knows that one).
|
|
80
|
+
const normalizeHostArg = (v) => {
|
|
81
|
+
const h = v.replace(/^\[(.*)\]$/, "$1");
|
|
82
|
+
if (!h.includes(":")) return h;
|
|
83
|
+
return /^[0:]+$/.test(h) ? "::" : h.toLowerCase();
|
|
84
|
+
};
|
|
85
|
+
const isPortArg = (v) => /^\d{1,5}$/.test(v) && Number(v) >= 1 && Number(v) <= 65535;
|
|
70
86
|
|
|
71
87
|
export function parseArgs(argv) {
|
|
72
|
-
const opts = { command: null, args: [], open: true, newKey: false, yes: false, timeout: null, help: false, version: false };
|
|
88
|
+
const opts = { command: null, args: [], open: true, newKey: false, yes: false, timeout: null, help: false, version: false, host: null, port: null };
|
|
73
89
|
const errors = [];
|
|
74
90
|
const used = [];
|
|
75
91
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -92,6 +108,18 @@ export function parseArgs(argv) {
|
|
|
92
108
|
i++;
|
|
93
109
|
} else errors.push("--timeout needs a number of seconds (1-9999)");
|
|
94
110
|
used.push("--timeout");
|
|
111
|
+
} else if (/^--(host|port)(=|$)/.test(a)) {
|
|
112
|
+
// --host <addr> / --port <n>, or --host=<addr> / --port=<n>. A value that is no option is taken even when wrong.
|
|
113
|
+
const name = a.slice(2, 6);
|
|
114
|
+
const inline = a.length > 6 ? a.slice(7) : undefined;
|
|
115
|
+
const v = inline ?? argv[i + 1];
|
|
116
|
+
if (inline === undefined && v !== undefined && !v.startsWith("-")) i++;
|
|
117
|
+
if (name === "host") {
|
|
118
|
+
if (v !== undefined && HOST_ARG.test(v)) opts.host = normalizeHostArg(v);
|
|
119
|
+
else errors.push("--host needs an address, such as 0.0.0.0 or 192.168.1.20");
|
|
120
|
+
} else if (v !== undefined && isPortArg(v)) opts.port = String(Number(v));
|
|
121
|
+
else errors.push("--port needs a port number (1-65535)");
|
|
122
|
+
used.push(`--${name}`);
|
|
95
123
|
} else if (a.startsWith("-")) errors.push(`unknown option ${a}`);
|
|
96
124
|
else if (opts.command === null) opts.command = a;
|
|
97
125
|
else opts.args.push(a);
|
|
@@ -99,8 +127,8 @@ export function parseArgs(argv) {
|
|
|
99
127
|
opts.command ??= "start";
|
|
100
128
|
if (!COMMAND_NAMES.includes(opts.command)) errors.push(`unknown command ${opts.command}`);
|
|
101
129
|
for (const o of used) {
|
|
102
|
-
const
|
|
103
|
-
if (opts.command
|
|
130
|
+
const owners = [OPTION_OWNER[o]].flat();
|
|
131
|
+
if (!owners.includes(opts.command)) errors.push(`${o} only goes with ${owners.map((c) => `watchbell ${c}`).join(" or ")}`);
|
|
104
132
|
}
|
|
105
133
|
if (opts.command === "service") {
|
|
106
134
|
if (opts.args.length !== 1 || !["install", "uninstall"].includes(opts.args[0])) errors.push("use watchbell service install or watchbell service uninstall");
|
|
@@ -203,6 +231,12 @@ const isSet = (v) => typeof v === "string" && v.trim() !== "";
|
|
|
203
231
|
// "~/wb" quoted in a dotfile reaches us unexpanded; without this it would be a folder named "~" in the current one.
|
|
204
232
|
const expandTilde = (p, homedir) => (/^~(?=$|[\\/])/.test(p) ? path.join(homedir, p.slice(1)) : p);
|
|
205
233
|
|
|
234
|
+
const defaultSiteUrl = (host, port) => {
|
|
235
|
+
const h = unbracket(host);
|
|
236
|
+
if (isLoopbackHost(h) || ANY_ADDRESS.has(h)) return `http://localhost:${port}`;
|
|
237
|
+
return h.includes(":") ? `http://[${h}]:${port}` : `http://${h}:${port}`;
|
|
238
|
+
};
|
|
239
|
+
|
|
206
240
|
export function resolveContext(d) {
|
|
207
241
|
const home = isSet(d.env.WATCHBELL_HOME) ? path.resolve(expandTilde(d.env.WATCHBELL_HOME.trim(), d.homedir)) : path.join(d.homedir, ".watchbell");
|
|
208
242
|
const envFile = path.join(home, ".env");
|
|
@@ -217,6 +251,7 @@ export function resolveContext(d) {
|
|
|
217
251
|
// Nor the address: tcsh exports HOST=<machine name> (which would bind to the LAN) and many developer shells export
|
|
218
252
|
// PORT. HOST, PORT and SITE_URL come from the file; only WATCHBELL_HOST / WATCHBELL_PORT / WATCHBELL_SITE_URL override.
|
|
219
253
|
const address = (key) => {
|
|
254
|
+
if (isSet(d.cliAddress?.[key])) return d.cliAddress[key]; // --host / --port, for this run only
|
|
220
255
|
const own = d.env[`WATCHBELL_${key}`];
|
|
221
256
|
if (isSet(own)) return own.trim();
|
|
222
257
|
return isSet(fromFile[key]) ? fromFile[key].trim() : null;
|
|
@@ -228,7 +263,9 @@ export function resolveContext(d) {
|
|
|
228
263
|
// and opened is where the server listens. A SITE_URL of the user's own (a proxy, a name) is kept as it is.
|
|
229
264
|
const filePort = isSet(fromFile.PORT) ? fromFile.PORT.trim() : "3100";
|
|
230
265
|
let siteUrl = address("SITE_URL")?.replace(/\/+$/, "") ?? null;
|
|
231
|
-
|
|
266
|
+
// A host that is one address of another network (not this machine, not all of them) answers only there, so the CLI's
|
|
267
|
+
// own SITE_URL names that address: localhost would not answer.
|
|
268
|
+
if (siteUrl === null || (!isSet(d.env.WATCHBELL_SITE_URL) && siteUrl === `http://localhost:${filePort}`)) siteUrl = defaultSiteUrl(host, port);
|
|
232
269
|
const serverDir = path.join(d.pkgRoot, "server");
|
|
233
270
|
return { home, envFile, merged, dataDir, host, port, siteUrl, serverDir, lockFile: lockFileOf(dataDir), healthUrl: healthUrlOf(host, port) };
|
|
234
271
|
}
|
|
@@ -270,6 +307,28 @@ const ENV_HEADER = [
|
|
|
270
307
|
|
|
271
308
|
class HomeError extends Error {}
|
|
272
309
|
|
|
310
|
+
/**
|
|
311
|
+
* This computer's IANA time zone (Europe/Berlin), written as WATCHBELL_TIMEZONE into a NEW .env only: an install
|
|
312
|
+
* from before 1.1 keeps Asia/Jakarta, the app's default. Null when Intl can't name a usable zone (then nothing is
|
|
313
|
+
* written and the default applies). `d.timeZone` replaces Intl in tests. The few old names ICU still prefers are
|
|
314
|
+
* written by their current name (Asia/Calcutta → Asia/Kolkata). Only a full Area/Location name or UTC/GMT is written:
|
|
315
|
+
* an abbreviation (CET, IST) means another zone to Postgres. Both keep in step with lib/time.ts (ZONE_NAME,
|
|
316
|
+
* LEGACY_ZONES; src/lib/time.test.ts compares the copies).
|
|
317
|
+
*/
|
|
318
|
+
const ZONE_NAME = /^(?:UTC|GMT|[A-Za-z]+(?:\/[A-Za-z0-9_+\-]+)+)$/i;
|
|
319
|
+
const LEGACY_ZONES = { "Asia/Calcutta": "Asia/Kolkata", "Asia/Katmandu": "Asia/Kathmandu", "Asia/Saigon": "Asia/Ho_Chi_Minh", "Asia/Rangoon": "Asia/Yangon" };
|
|
320
|
+
export function machineTimeZone(d) {
|
|
321
|
+
try {
|
|
322
|
+
const found = (d.timeZone ?? (() => Intl.DateTimeFormat().resolvedOptions().timeZone))();
|
|
323
|
+
const zone = typeof found === "string" ? (LEGACY_ZONES[found] ?? found) : found;
|
|
324
|
+
if (typeof zone !== "string" || !ZONE_NAME.test(zone)) return null;
|
|
325
|
+
new Intl.DateTimeFormat("en-US", { timeZone: zone }); // throws on a name Intl doesn't know
|
|
326
|
+
return zone;
|
|
327
|
+
} catch {
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
273
332
|
/**
|
|
274
333
|
* Creates <home>, <home>/data and <home>/.env on first run. Later runs only fill keys that are missing or empty; a
|
|
275
334
|
* value that is set is never changed (an old WATCHPOST_<KEY> counts for WATCHBELL_<KEY>). Returns what it did.
|
|
@@ -315,7 +374,9 @@ export function ensureHome(ctx, d, { newKey = false } = {}) {
|
|
|
315
374
|
}
|
|
316
375
|
if (!exists) {
|
|
317
376
|
const nl = d.platform === "win32" ? "\r\n" : "\n";
|
|
318
|
-
const
|
|
377
|
+
const zone = machineTimeZone(d);
|
|
378
|
+
const zoneLines = zone ? ["# Times, the daily job (03:00) and the digest (07:00) follow this zone: this computer's when the file was made.", `WATCHBELL_TIMEZONE=${zone}`] : [];
|
|
379
|
+
const lines = [...ENV_HEADER, ...[...fill].map(([k, v]) => `${k}=${v}`), ...zoneLines];
|
|
319
380
|
fs.writeFileSync(ctx.envFile, lines.join(nl) + nl, { mode: 0o600, flag: "wx" });
|
|
320
381
|
protectEnvFile(ctx.envFile, d, userSid);
|
|
321
382
|
return { created: true, filled: [...fill.keys()] };
|
|
@@ -424,12 +485,12 @@ function noteIgnoredShellAddress(ctx, d) {
|
|
|
424
485
|
for (const [key, used] of [["HOST", ctx.host], ["PORT", ctx.port]]) {
|
|
425
486
|
const shell = d.env[key];
|
|
426
487
|
if (!isSet(shell) || shell.trim() === used) continue;
|
|
427
|
-
const from = isSet(d.env[`WATCHBELL_${key}`]) ? `WATCHBELL_${key}` : ctx.envFile;
|
|
488
|
+
const from = isSet(d.cliAddress?.[key]) ? `--${key.toLowerCase()}` : isSet(d.env[`WATCHBELL_${key}`]) ? `WATCHBELL_${key}` : ctx.envFile;
|
|
428
489
|
d.err(`note: ${key}=${shell.trim()} from your shell is ignored: Watchbell uses ${key}=${used} from ${from}. Set WATCHBELL_${key} to override it.`);
|
|
429
490
|
}
|
|
430
491
|
}
|
|
431
492
|
|
|
432
|
-
async function cmdStart(first, d, { open, foreground, newKey }) {
|
|
493
|
+
async function cmdStart(first, d, { open, foreground, newKey, track }) {
|
|
433
494
|
let ctx = first;
|
|
434
495
|
const serverJs = path.join(ctx.serverDir, "server.js");
|
|
435
496
|
if (!fs.existsSync(serverJs)) {
|
|
@@ -474,7 +535,10 @@ async function cmdStart(first, d, { open, foreground, newKey }) {
|
|
|
474
535
|
warnPortMismatch(ctx, d);
|
|
475
536
|
noteIgnoredShellAddress(ctx, d);
|
|
476
537
|
d.out(`Starting on ${ctx.siteUrl} ...`);
|
|
538
|
+
// Asked while the server starts, so it never delays the start; said once the server is ready (start only, not run).
|
|
539
|
+
const update = foreground ? null : checkForUpdate(ctx, d, { background: true });
|
|
477
540
|
|
|
541
|
+
if (track) track.spawned = true;
|
|
478
542
|
const child = d.spawn(d.execPath, [serverJs], { cwd: ctx.serverDir, env: serverEnv(ctx), stdio: "inherit" });
|
|
479
543
|
const unsupervise = superviseChild(child, { platform: d.platform, proc: d.proc });
|
|
480
544
|
let exited = false;
|
|
@@ -493,6 +557,8 @@ async function cmdStart(first, d, { open, foreground, newKey }) {
|
|
|
493
557
|
const probe = await probeHealth(ctx.healthUrl, d.fetch);
|
|
494
558
|
if (probe?.status === 200) {
|
|
495
559
|
announce(ctx, d, { open, foreground });
|
|
560
|
+
announceNetwork(ctx, d);
|
|
561
|
+
await sayUpdate(update, d);
|
|
496
562
|
break;
|
|
497
563
|
}
|
|
498
564
|
if (d.now() >= deadline) {
|
|
@@ -555,6 +621,8 @@ async function cmdStatus(ctx, d) {
|
|
|
555
621
|
d.out(` Version: ${packageVersion(d.pkgRoot)}`);
|
|
556
622
|
d.out(` Settings: ${ctx.envFile}${fs.existsSync(ctx.envFile) ? "" : " (created on the first start)"}`);
|
|
557
623
|
d.out(` Data: ${ctx.dataDir}`);
|
|
624
|
+
warnServiceNode(ctx, d);
|
|
625
|
+
await sayUpdate(checkForUpdate(ctx, d), d);
|
|
558
626
|
return running ? 0 : 3;
|
|
559
627
|
}
|
|
560
628
|
|
|
@@ -839,16 +907,20 @@ export function launchdPlist(ctx, d) {
|
|
|
839
907
|
return [
|
|
840
908
|
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
841
909
|
'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
|
|
910
|
+
`${PLIST_MARKER} (npm package watchbell). Remove it with: watchbell service uninstall -->`,
|
|
842
911
|
'<plist version="1.0">',
|
|
843
912
|
"<dict>",
|
|
844
913
|
` <key>Label</key><string>${LAUNCHD_LABEL}</string>`,
|
|
845
914
|
" <key>ProgramArguments</key>",
|
|
846
915
|
` <array><string>${xml(d.execPath)}</string><string>${xml(d.cliPath)}</string><string>run</string></array>`,
|
|
847
916
|
" <key>EnvironmentVariables</key>",
|
|
848
|
-
` <dict><key>WATCHBELL_HOME</key><string>${xml(ctx.home)}</string></dict>`,
|
|
917
|
+
` <dict><key>WATCHBELL_HOME</key><string>${xml(ctx.home)}</string><key>WATCHBELL_SERVICE</key><string>launchd</string></dict>`,
|
|
849
918
|
` <key>WorkingDirectory</key><string>${xml(ctx.home)}</string>`,
|
|
850
919
|
" <key>RunAtLoad</key><true/>",
|
|
851
920
|
" <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>",
|
|
921
|
+
// launchd has no start limit like systemd's StartLimitBurst: at most one start a minute, and `run` gives up with a
|
|
922
|
+
// clean exit (never restarted) on a failure that won't clear or after LAUNCHD_MAX_FAILURES (runUnderLaunchd).
|
|
923
|
+
` <key>ThrottleInterval</key><integer>${LAUNCHD_THROTTLE_S}</integer>`,
|
|
852
924
|
` <key>StandardOutPath</key><string>${xml(log)}</string>`,
|
|
853
925
|
` <key>StandardErrorPath</key><string>${xml(log)}</string>`,
|
|
854
926
|
"</dict>",
|
|
@@ -856,30 +928,524 @@ export function launchdPlist(ctx, d) {
|
|
|
856
928
|
].join("\n");
|
|
857
929
|
}
|
|
858
930
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
931
|
+
// macOS: a per-user launchd agent in ~/Library/LaunchAgents, loaded into the user's GUI domain (no admin rights).
|
|
932
|
+
const LAUNCHCTL = "/bin/launchctl";
|
|
933
|
+
const plistFileOf = (d) => path.join(d.homedir, "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`);
|
|
934
|
+
const guiDomain = (d) => `gui/${d.uid ?? process.getuid?.() ?? os.userInfo().uid}`;
|
|
935
|
+
/** Whether the agent is loaded, and whether its process runs now (launchctl print: "state = running"). */
|
|
936
|
+
function agentState(d) {
|
|
937
|
+
const r = d.runSync(LAUNCHCTL, ["print", `${guiDomain(d)}/${LAUNCHD_LABEL}`]);
|
|
938
|
+
return { loaded: r.status === 0, running: r.status === 0 && /^\s*state = running\s*$/m.test(r.stdout ?? "") };
|
|
939
|
+
}
|
|
940
|
+
const agentLoaded = (d) => agentState(d).loaded;
|
|
941
|
+
const BOOTOUT_POLLS = 120; // x 250 ms: up to 30 s for the server to close its database
|
|
942
|
+
const BOOTOUT_IN_PROGRESS = 36; // "Boot-out failed: 36: Operation now in progress"
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
* bootout sends SIGTERM and can return (0, or 36 "in progress") while the job still closes its database; a bootstrap
|
|
946
|
+
* right then fails with 5 or 37. Waits until launchctl print says the job is gone.
|
|
947
|
+
*/
|
|
948
|
+
async function bootoutAndWait(d) {
|
|
949
|
+
const target = `${guiDomain(d)}/${LAUNCHD_LABEL}`;
|
|
950
|
+
const r = d.runSync(LAUNCHCTL, ["bootout", target]);
|
|
951
|
+
if (r.status !== 0 && r.status !== BOOTOUT_IN_PROGRESS) {
|
|
952
|
+
d.err(`launchctl bootout ${target} did not work${r.stderr.trim() ? `: ${r.stderr.trim().split(/\r?\n/)[0]}` : ""}`);
|
|
953
|
+
return false;
|
|
954
|
+
}
|
|
955
|
+
for (let i = 0; i < BOOTOUT_POLLS; i++) {
|
|
956
|
+
if (!agentLoaded(d)) return true;
|
|
957
|
+
await d.sleep(250);
|
|
958
|
+
}
|
|
959
|
+
d.err(`The launchd agent ${LAUNCHD_LABEL} did not stop within 30 s. Wait a moment, then run watchbell service install again.`);
|
|
960
|
+
return false;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
function launchctl(d, ...args) {
|
|
964
|
+
const r = d.runSync(LAUNCHCTL, args);
|
|
965
|
+
if (r.status !== 0) d.err(`launchctl ${args.join(" ")} did not work${r.stderr.trim() ? `: ${r.stderr.trim().split(/\r?\n/)[0]}` : ""}`);
|
|
966
|
+
return r.status === 0;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
async function macInstall(ctx, d, yes) {
|
|
970
|
+
const plistFile = plistFileOf(d);
|
|
971
|
+
const old = fs.existsSync(plistFile) ? fs.readFileSync(plistFile, "utf8") : null;
|
|
972
|
+
const foreign = old !== null && !old.includes(PLIST_MARKER);
|
|
973
|
+
if (foreign) d.out(`${plistFile} already exists and was not written by the watchbell CLI.`);
|
|
974
|
+
const question = foreign
|
|
975
|
+
? `Replace it with an agent for the npm package (settings and data in ${ctx.home})? [y/N] `
|
|
976
|
+
: `Install the launchd agent ${LAUNCHD_LABEL}, which starts Watchbell when you log in? [y/N] `;
|
|
977
|
+
if (!(await consent(d, yes, question))) return 1;
|
|
978
|
+
const { loaded, running } = agentState(d);
|
|
979
|
+
// A Watchbell in a terminal holds the database; an agent started next to it would fail at every start.
|
|
980
|
+
if (!running && runningPid(ctx, d) !== null) {
|
|
981
|
+
d.err('Watchbell is running in a terminal now. Stop it first ("watchbell stop"), then run watchbell service install again.');
|
|
982
|
+
return 1;
|
|
983
|
+
}
|
|
984
|
+
if (!prepareHome(ctx, d)) return 1;
|
|
985
|
+
fs.mkdirSync(path.dirname(plistFile), { recursive: true });
|
|
986
|
+
fs.writeFileSync(plistFile, `${launchdPlist(ctx, d)}\n`);
|
|
987
|
+
d.out(`Wrote ${plistFile}`);
|
|
988
|
+
// A loaded agent keeps its old definition until it is booted out (bootout stops it with SIGTERM: a clean stop).
|
|
989
|
+
if (loaded && !(await bootoutAndWait(d))) return 1;
|
|
990
|
+
if (!launchctl(d, "bootstrap", guiDomain(d), plistFile)) {
|
|
991
|
+
d.err("Run watchbell service install again in a moment; if it keeps failing, log out and in, then try once more.");
|
|
992
|
+
return 1;
|
|
865
993
|
}
|
|
866
|
-
d.out(`watchbell service installs nothing on macOS. To start Watchbell at login with launchd, save this as ${plist}:`);
|
|
867
|
-
d.out("");
|
|
868
|
-
d.out(launchdPlist(ctx, d));
|
|
869
994
|
d.out("");
|
|
870
|
-
d.out(
|
|
871
|
-
d.out(
|
|
995
|
+
d.out("Watchbell runs as a launchd agent and starts when you log in.");
|
|
996
|
+
d.out(" Status: watchbell status");
|
|
997
|
+
d.out(` Log: ${path.join(ctx.home, "watchbell.log")} (it grows; delete it now and then while Watchbell is stopped)`);
|
|
998
|
+
d.out(" Stop: watchbell stop (launchd restarts it only after a crash)");
|
|
999
|
+
d.out(" Remove: watchbell service uninstall");
|
|
1000
|
+
d.out(` Address: ${ctx.siteUrl}`);
|
|
1001
|
+
d.out(` Node.js: ${d.execPath}. After changing or removing this Node.js (nvm, fnm, volta, Homebrew), run watchbell service install again.`);
|
|
872
1002
|
return 0;
|
|
873
1003
|
}
|
|
874
1004
|
|
|
1005
|
+
async function macUninstall(ctx, d, yes) {
|
|
1006
|
+
const plistFile = plistFileOf(d);
|
|
1007
|
+
if (!fs.existsSync(plistFile)) {
|
|
1008
|
+
d.out(`No launchd agent is installed (${plistFile} does not exist).`);
|
|
1009
|
+
return 0;
|
|
1010
|
+
}
|
|
1011
|
+
if (!(await consent(d, yes, `Remove the launchd agent ${LAUNCHD_LABEL}? Your settings and data in ${ctx.home} stay. [y/N] `))) return 1;
|
|
1012
|
+
// bootout stops it with SIGTERM: the server closes its database cleanly.
|
|
1013
|
+
if (agentLoaded(d) && !(await bootoutAndWait(d))) return 1;
|
|
1014
|
+
fs.rmSync(plistFile, { force: true });
|
|
1015
|
+
d.out(`Removed ${plistFile}. Your settings and data stay in ${ctx.home}.`);
|
|
1016
|
+
return 0;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// launchd restarts a job after every failed exit, with no limit (ThrottleInterval only spaces the starts). Under the
|
|
1020
|
+
// agent, `run` therefore ends with a clean exit 0, which KeepAlive does not restart, when the start can't succeed
|
|
1021
|
+
// (port taken, database locked, key missing: nothing was started) and after LAUNCHD_MAX_FAILURES failed exits within
|
|
1022
|
+
// LAUNCHD_WINDOW_MS (systemd: 5 starts in 2 min, the Scheduled Task: 3 restarts). The count is kept in the home folder.
|
|
1023
|
+
const LAUNCHD_MAX_FAILURES = 5;
|
|
1024
|
+
const LAUNCHD_WINDOW_MS = 10 * 60 * 1000;
|
|
1025
|
+
const LAUNCHD_FAILURES = "launchd-failures.json";
|
|
1026
|
+
|
|
1027
|
+
const underLaunchd = (d) => d.env.WATCHBELL_SERVICE === "launchd" || (d.platform === "darwin" && d.env.XPC_SERVICE_NAME === LAUNCHD_LABEL);
|
|
1028
|
+
|
|
1029
|
+
function recentFailures(file, now) {
|
|
1030
|
+
try {
|
|
1031
|
+
const list = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
1032
|
+
return Array.isArray(list) ? list.filter((t) => Number.isFinite(t) && t <= now && now - t < LAUNCHD_WINDOW_MS) : [];
|
|
1033
|
+
} catch {
|
|
1034
|
+
return [];
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
export async function runUnderLaunchd(ctx, d) {
|
|
1039
|
+
const track = { spawned: false };
|
|
1040
|
+
const code = await cmdStart(ctx, d, { open: false, foreground: true, newKey: false, track });
|
|
1041
|
+
const kick = `launchctl kickstart ${guiDomain(d)}/${LAUNCHD_LABEL}`;
|
|
1042
|
+
const file = path.join(ctx.home, LAUNCHD_FAILURES);
|
|
1043
|
+
if (code === 0) return 0;
|
|
1044
|
+
if (!track.spawned) {
|
|
1045
|
+
d.err(`watchbell: launchd will not start Watchbell again until you fix the problem above. Then run: ${kick} (or log out and in).`);
|
|
1046
|
+
return 0;
|
|
1047
|
+
}
|
|
1048
|
+
const now = d.now();
|
|
1049
|
+
const failures = [...recentFailures(file, now), now];
|
|
1050
|
+
if (failures.length >= LAUNCHD_MAX_FAILURES) {
|
|
1051
|
+
d.err(`watchbell: the server stopped with an error ${failures.length} times in 10 minutes; launchd will not restart it again. See the messages above, then run: ${kick}`);
|
|
1052
|
+
fs.rmSync(file, { force: true });
|
|
1053
|
+
return 0;
|
|
1054
|
+
}
|
|
1055
|
+
try {
|
|
1056
|
+
fs.writeFileSync(file, `${JSON.stringify(failures)}\n`);
|
|
1057
|
+
} catch {
|
|
1058
|
+
// a read-only home: ThrottleInterval still spaces the restarts
|
|
1059
|
+
}
|
|
1060
|
+
return code;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// ---------------------------------------------------------------------------------------------------- service Node.js
|
|
1064
|
+
|
|
1065
|
+
// The Node.js path out of what the CLI wrote: the unit's first ExecStart word, the task's command line, the plist's
|
|
1066
|
+
// first ProgramArguments string.
|
|
1067
|
+
const PS_TASK_ACTION = [
|
|
1068
|
+
"$t = Get-ScheduledTask -TaskName $env:WB_TASK -ErrorAction SilentlyContinue",
|
|
1069
|
+
"if ($null -eq $t) { '{}' } else {",
|
|
1070
|
+
" $a = @($t.Actions) | Select-Object -First 1",
|
|
1071
|
+
" [pscustomobject]@{ dir = [string]$a.WorkingDirectory; args = [string]$a.Arguments } | ConvertTo-Json -Compress",
|
|
1072
|
+
"}",
|
|
1073
|
+
].join("\n");
|
|
1074
|
+
|
|
1075
|
+
const unitUnquote = (s) => s.replace(/\\(.)/g, "$1").replaceAll("%%", "%").replaceAll("$$", "$");
|
|
1076
|
+
const xmlText = (s) => s.replaceAll(""", '"').replaceAll(">", ">").replaceAll("<", "<").replaceAll("&", "&");
|
|
1077
|
+
|
|
1078
|
+
/** The Node.js the installed service of this package runs, or null (no service, someone else's, or unreadable). */
|
|
1079
|
+
export function serviceNodePath(ctx, d) {
|
|
1080
|
+
try {
|
|
1081
|
+
if (d.platform === "linux") {
|
|
1082
|
+
const unit = fs.readFileSync(unitFileOf(d), "utf8");
|
|
1083
|
+
if (!unit.includes(UNIT_MARKER)) return null;
|
|
1084
|
+
const m = /^ExecStart="((?:[^"\\]|\\.)*)"/m.exec(unit);
|
|
1085
|
+
return m ? unitUnquote(m[1]) : null;
|
|
1086
|
+
}
|
|
1087
|
+
if (d.platform === "darwin") {
|
|
1088
|
+
const plist = fs.readFileSync(plistFileOf(d), "utf8");
|
|
1089
|
+
const m = /<key>ProgramArguments<\/key>\s*<array>\s*<string>([^<]*)<\/string>/.exec(plist);
|
|
1090
|
+
return m ? xmlText(m[1]) : null;
|
|
1091
|
+
}
|
|
1092
|
+
if (d.platform === "win32") {
|
|
1093
|
+
const r = powershell(d, PS_TASK_ACTION, { WB_TASK: TASK });
|
|
1094
|
+
if (r.status !== 0) return null;
|
|
1095
|
+
const info = JSON.parse(r.stdout.trim().split(/\r?\n/).filter(Boolean).pop() ?? "{}");
|
|
1096
|
+
if (typeof info.args !== "string" || !sameFolder(info.dir || "", ctx.home)) return null;
|
|
1097
|
+
return /&& "([^"]+)" "/.exec(info.args)?.[1] ?? null;
|
|
1098
|
+
}
|
|
1099
|
+
} catch {
|
|
1100
|
+
// no service file, or one that can't be read: nothing to say
|
|
1101
|
+
}
|
|
1102
|
+
return null;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
/** After a Node.js change (nvm, fnm, volta, an upgrade) the service would fail at every login; say how to fix it. */
|
|
1106
|
+
function warnServiceNode(ctx, d) {
|
|
1107
|
+
const node = serviceNodePath(ctx, d);
|
|
1108
|
+
if (node && !fs.existsSync(node)) d.err(`The service runs ${node}, which no longer exists. Run: watchbell service install`);
|
|
1109
|
+
}
|
|
1110
|
+
|
|
875
1111
|
async function cmdService(action, ctx, d, yes) {
|
|
876
1112
|
if (d.platform === "linux") return action === "install" ? linuxInstall(ctx, d, yes) : linuxUninstall(ctx, d, yes);
|
|
877
1113
|
if (d.platform === "win32") return action === "install" ? windowsInstall(ctx, d, yes) : windowsUninstall(ctx, d, yes);
|
|
878
|
-
if (d.platform === "darwin") return
|
|
1114
|
+
if (d.platform === "darwin") return action === "install" ? macInstall(ctx, d, yes) : macUninstall(ctx, d, yes);
|
|
879
1115
|
d.err(`watchbell service is not available on ${d.platform}. Have your service manager run: "${d.execPath}" "${d.cliPath}" run`);
|
|
880
1116
|
return 1;
|
|
881
1117
|
}
|
|
882
1118
|
|
|
1119
|
+
// ---------------------------------------------------------------------------------------------------- update notice
|
|
1120
|
+
|
|
1121
|
+
// D8: the only request Watchbell's CLI makes on its own. A plain GET of the public version document, no ids or cookies.
|
|
1122
|
+
const REGISTRY_LATEST = "https://registry.npmjs.org/watchbell/latest";
|
|
1123
|
+
const UPDATE_CACHE = "update-check.json";
|
|
1124
|
+
const UPDATE_EVERY_MS = 24 * 60 * 60 * 1000;
|
|
1125
|
+
const UPDATE_TIMEOUT_MS = 3000;
|
|
1126
|
+
const SEMVER = /^(\d{1,9})\.(\d{1,9})\.(\d{1,9})(?:-([0-9A-Za-z.-]{1,64}))?(?:\+[0-9A-Za-z.-]{1,64})?$/;
|
|
1127
|
+
|
|
1128
|
+
/** Like a sort compare (<0, 0, >0); a release is newer than its own pre-releases. Null when either is no version. */
|
|
1129
|
+
export function compareVersions(a, b) {
|
|
1130
|
+
const x = SEMVER.exec(String(a));
|
|
1131
|
+
const y = SEMVER.exec(String(b));
|
|
1132
|
+
if (!x || !y) return null;
|
|
1133
|
+
for (let i = 1; i <= 3; i++) if (Number(x[i]) !== Number(y[i])) return Number(x[i]) - Number(y[i]);
|
|
1134
|
+
if (!x[4] || !y[4]) return (x[4] ? -1 : 0) - (y[4] ? -1 : 0);
|
|
1135
|
+
const p = x[4].split(".");
|
|
1136
|
+
const q = y[4].split(".");
|
|
1137
|
+
const num = (s) => /^\d+$/.test(s);
|
|
1138
|
+
for (let i = 0; i < Math.max(p.length, q.length); i++) {
|
|
1139
|
+
if (p[i] === undefined) return -1;
|
|
1140
|
+
if (q[i] === undefined) return 1;
|
|
1141
|
+
if (p[i] === q[i]) continue;
|
|
1142
|
+
if (num(p[i]) && num(q[i])) return Number(p[i]) - Number(q[i]);
|
|
1143
|
+
if (num(p[i]) || num(q[i])) return num(p[i]) ? -1 : 1;
|
|
1144
|
+
return p[i] < q[i] ? -1 : 1;
|
|
1145
|
+
}
|
|
1146
|
+
return 0;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
const switchedOn = (v) => isSet(v) && !/^(0|false|no|off)$/i.test(v.trim());
|
|
1150
|
+
/** WATCHBELL_NO_UPDATE_CHECK, NO_UPDATE_NOTIFIER (the usual opt-out of npm tools) or CI turn the check off. */
|
|
1151
|
+
export const updateCheckOff = (env) => ["WATCHBELL_NO_UPDATE_CHECK", "NO_UPDATE_NOTIFIER", "CI"].some((k) => switchedOn(env[k]));
|
|
1152
|
+
|
|
1153
|
+
function readUpdateCache(file) {
|
|
1154
|
+
try {
|
|
1155
|
+
const c = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
1156
|
+
const at = Date.parse(c?.checkedAt);
|
|
1157
|
+
return Number.isFinite(at) && typeof c.latest === "string" && SEMVER.test(c.latest) ? { at, latest: c.latest } : null;
|
|
1158
|
+
} catch {
|
|
1159
|
+
return null; // none yet, or not ours to trust: ask again
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
/** The registry's latest version; null when offline, slower than 3 s, refused, or answered with something else. */
|
|
1164
|
+
async function registryLatest(d, { background = false } = {}) {
|
|
1165
|
+
const ac = new AbortController();
|
|
1166
|
+
let timer;
|
|
1167
|
+
const late = new Promise((resolve) => {
|
|
1168
|
+
timer = (d.setTimer ?? setTimeout)(() => {
|
|
1169
|
+
ac.abort();
|
|
1170
|
+
resolve(null);
|
|
1171
|
+
}, d.updateTimeoutMs ?? UPDATE_TIMEOUT_MS);
|
|
1172
|
+
// start does not wait for the answer when the server fails early: the timer must not keep the CLI alive then.
|
|
1173
|
+
if (background) timer?.unref?.();
|
|
1174
|
+
});
|
|
1175
|
+
const ask = (async () => {
|
|
1176
|
+
const res = await d.fetch(REGISTRY_LATEST, { method: "GET", headers: { accept: "application/json" }, signal: ac.signal });
|
|
1177
|
+
if (!res?.ok) return null;
|
|
1178
|
+
const v = (await res.json())?.version;
|
|
1179
|
+
return typeof v === "string" && SEMVER.test(v.trim()) ? v.trim() : null;
|
|
1180
|
+
})().catch(() => null);
|
|
1181
|
+
try {
|
|
1182
|
+
return await Promise.race([ask, late]);
|
|
1183
|
+
} finally {
|
|
1184
|
+
clearTimeout(timer);
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* This package's version and the registry's latest: from <home>/update-check.json when it is less than 24 h old, else
|
|
1190
|
+
* asked (and the answer saved). A failed ask is saved too, with the last known answer, so an offline machine is not
|
|
1191
|
+
* asked on every start. `force` (watchbell update) always asks and returns only the registry's own answer.
|
|
1192
|
+
*/
|
|
1193
|
+
async function lookupLatest(ctx, d, { force = false, background = false } = {}) {
|
|
1194
|
+
const current = packageVersion(d.pkgRoot);
|
|
1195
|
+
const file = path.join(ctx.home, UPDATE_CACHE);
|
|
1196
|
+
const cached = readUpdateCache(file);
|
|
1197
|
+
const now = d.now();
|
|
1198
|
+
if (!force && cached && now >= cached.at && now - cached.at < UPDATE_EVERY_MS) return { current, latest: cached.latest };
|
|
1199
|
+
const latest = await registryLatest(d, { background });
|
|
1200
|
+
const keep = latest ?? cached?.latest ?? (SEMVER.test(current) ? current : null);
|
|
1201
|
+
if (keep && fs.existsSync(ctx.home)) {
|
|
1202
|
+
try {
|
|
1203
|
+
fs.writeFileSync(file, `${JSON.stringify({ checkedAt: new Date(now).toISOString(), latest: keep })}\n`);
|
|
1204
|
+
} catch {
|
|
1205
|
+
// a read-only home: the next start asks again
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
return { current, latest: force ? latest : (latest ?? cached?.latest ?? null) };
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
/** D8. Never throws; null unless the registry has a newer version than this package. */
|
|
1212
|
+
export async function checkForUpdate(ctx, d, { background = false } = {}) {
|
|
1213
|
+
try {
|
|
1214
|
+
// ~/.watchbell/.env as well as the environment (which wins), like every other setting.
|
|
1215
|
+
if (updateCheckOff(ctx.merged ?? d.env)) return null;
|
|
1216
|
+
const { current, latest } = await lookupLatest(ctx, d, { background });
|
|
1217
|
+
return latest && compareVersions(latest, current) > 0 ? { current, latest } : null;
|
|
1218
|
+
} catch {
|
|
1219
|
+
return null;
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
async function sayUpdate(check, d) {
|
|
1224
|
+
const found = check ? await check : null;
|
|
1225
|
+
if (found) d.out(`A newer Watchbell is available: ${found.latest} (this is ${found.current}). Update with: watchbell update`);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
// ---------------------------------------------------------------------------------------------------- network (D10)
|
|
1229
|
+
|
|
1230
|
+
const unbracket = (h) => h.replace(/^\[(.*)\]$/, "$1");
|
|
1231
|
+
export const isLoopbackHost = (host) => {
|
|
1232
|
+
const h = unbracket(String(host)).toLowerCase();
|
|
1233
|
+
return h === "localhost" || h === "::1" || /^(::ffff:)?127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
|
|
1234
|
+
};
|
|
1235
|
+
const ANY_ADDRESS = new Set(["0.0.0.0", "::", "0:0:0:0:0:0:0:0"]);
|
|
1236
|
+
|
|
1237
|
+
/** The http addresses other computers can use: every network address of this machine for 0.0.0.0 / ::, else the host. */
|
|
1238
|
+
export function networkUrls(host, port, interfaces) {
|
|
1239
|
+
const h = unbracket(host);
|
|
1240
|
+
const at = (a) => (a.includes(":") ? `http://[${a}]:${port}` : `http://${a}:${port}`);
|
|
1241
|
+
if (!ANY_ADDRESS.has(h)) return [at(h)];
|
|
1242
|
+
const out = [];
|
|
1243
|
+
for (const list of Object.values(interfaces ?? {})) {
|
|
1244
|
+
for (const i of list ?? []) {
|
|
1245
|
+
if (i.internal) continue;
|
|
1246
|
+
if (i.family === "IPv4" || i.family === 4) out.push(at(i.address));
|
|
1247
|
+
else if (h !== "0.0.0.0" && !/^fe80:/i.test(i.address)) out.push(at(i.address)); // :: also takes IPv6
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
return [...new Set(out)];
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
/** A host other than this machine: where others can open it, what that means, and SITE_URL when it names localhost. */
|
|
1254
|
+
function announceNetwork(ctx, d) {
|
|
1255
|
+
if (isLoopbackHost(ctx.host)) return;
|
|
1256
|
+
let urls = [];
|
|
1257
|
+
try {
|
|
1258
|
+
urls = networkUrls(ctx.host, ctx.port, (d.networkInterfaces ?? os.networkInterfaces)());
|
|
1259
|
+
} catch {
|
|
1260
|
+
// no list of addresses: the warning still applies
|
|
1261
|
+
}
|
|
1262
|
+
d.out("");
|
|
1263
|
+
d.out(urls.length ? `Watchbell listens on ${ctx.host}, so other computers can open it at:` : `Watchbell listens on ${ctx.host} (no network address of this machine was found).`);
|
|
1264
|
+
for (const u of urls) d.out(` ${u}`);
|
|
1265
|
+
d.err("warning: everyone who can reach these addresses gets the Watchbell sign-in page, and plain http sends passwords");
|
|
1266
|
+
d.err("readable on the network. Finish /setup (the owner account) before you share the address, and put HTTPS in front");
|
|
1267
|
+
d.err("(a reverse proxy) before you open it to the internet. Safer for one person: keep HOST=127.0.0.1 and use an SSH");
|
|
1268
|
+
d.err('tunnel (see "Open it from another computer" in the install guide).');
|
|
1269
|
+
let site = null;
|
|
1270
|
+
try {
|
|
1271
|
+
site = new URL(ctx.siteUrl);
|
|
1272
|
+
} catch {
|
|
1273
|
+
// an unreadable SITE_URL is the server's own error
|
|
1274
|
+
}
|
|
1275
|
+
if (site && isLoopbackHost(site.hostname)) {
|
|
1276
|
+
const example = urls[0] ?? `http://<this computer's address>:${ctx.port}`;
|
|
1277
|
+
d.err(
|
|
1278
|
+
`note: SITE_URL is ${ctx.siteUrl}, so links in alerts and messages lead to localhost. Signing in from another computer ` +
|
|
1279
|
+
`works anyway; for links that work there, set SITE_URL=${example} in ${ctx.envFile} (or WATCHBELL_SITE_URL for one run).`,
|
|
1280
|
+
);
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
// ---------------------------------------------------------------------------------------------------- update (D9)
|
|
1285
|
+
|
|
1286
|
+
const NPM_UPDATE_ARGS = ["install", "-g", "watchbell@latest"];
|
|
1287
|
+
const NPM_UPDATE = `npm ${NPM_UPDATE_ARGS.join(" ")}`;
|
|
1288
|
+
const PS_START = "Start-ScheduledTask -TaskName $env:WB_TASK";
|
|
1289
|
+
|
|
1290
|
+
/** The npm next to the running Node.js (npm.cmd on Windows, run through System32's cmd.exe); null if cmd can't take it. */
|
|
1291
|
+
export function npmCommand(d) {
|
|
1292
|
+
const p = d.platform === "win32" ? path.win32 : path.posix;
|
|
1293
|
+
const npm = p.join(p.dirname(d.execPath), d.platform === "win32" ? "npm.cmd" : "npm");
|
|
1294
|
+
if (d.platform !== "win32") return { npm, cmd: npm, args: NPM_UPDATE_ARGS, opts: {} };
|
|
1295
|
+
if (/["%\r\n]/.test(npm)) return null; // cmd expands % even inside quotes
|
|
1296
|
+
return { npm, cmd: system32Tool(d, "cmd.exe"), args: ["/d", "/s", "/c", `""${npm}" ${NPM_UPDATE_ARGS.join(" ")}"`], opts: { windowsVerbatimArguments: true } };
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
const writableDir = (dir) => {
|
|
1300
|
+
try {
|
|
1301
|
+
fs.accessSync(dir, fs.constants.W_OK);
|
|
1302
|
+
return true;
|
|
1303
|
+
} catch {
|
|
1304
|
+
return false;
|
|
1305
|
+
}
|
|
1306
|
+
};
|
|
1307
|
+
|
|
1308
|
+
/** The service of the npm package that runs now, with how to stop it cleanly and start it again; else null. */
|
|
1309
|
+
async function runningService(ctx, d) {
|
|
1310
|
+
if (d.platform === "linux") {
|
|
1311
|
+
let unit = null;
|
|
1312
|
+
try {
|
|
1313
|
+
unit = fs.readFileSync(unitFileOf(d), "utf8");
|
|
1314
|
+
} catch {
|
|
1315
|
+
return null;
|
|
1316
|
+
}
|
|
1317
|
+
if (!unit.includes(UNIT_MARKER)) return null; // an installer's unit runs a source checkout, not this package
|
|
1318
|
+
if (d.runSync("systemctl", ["--user", "is-active", "--quiet", SERVICE]).status !== 0) return null;
|
|
1319
|
+
return {
|
|
1320
|
+
name: `the systemd user service ${SERVICE}`,
|
|
1321
|
+
stopHint: `systemctl --user stop ${SERVICE}`,
|
|
1322
|
+
startHint: `systemctl --user start ${SERVICE}`,
|
|
1323
|
+
stop: async () => systemctl(d, "stop", SERVICE),
|
|
1324
|
+
start: async () => systemctl(d, "start", SERVICE),
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1327
|
+
if (d.platform === "win32") {
|
|
1328
|
+
const info = taskInfo(d);
|
|
1329
|
+
if (!info || info.state !== "Running" || !sameFolder(info.dir || "", ctx.home)) return null;
|
|
1330
|
+
return {
|
|
1331
|
+
name: `the Scheduled Task "${TASK}"`,
|
|
1332
|
+
stopHint: "watchbell stop",
|
|
1333
|
+
startHint: `Start-ScheduledTask ${TASK}, or sign out and in`,
|
|
1334
|
+
stop: async () => (await stopServer(ctx, d)) === 0, // the clean stop; the task ends with the server
|
|
1335
|
+
start: async () => {
|
|
1336
|
+
const r = powershell(d, PS_START, { WB_TASK: TASK });
|
|
1337
|
+
if (r.status !== 0) d.err(`Could not start the Scheduled Task "${TASK}" again (exit ${r.status}). Sign out and in, or run: watchbell`);
|
|
1338
|
+
return r.status === 0;
|
|
1339
|
+
},
|
|
1340
|
+
};
|
|
1341
|
+
}
|
|
1342
|
+
if (d.platform === "darwin") {
|
|
1343
|
+
// Only an agent whose process runs now: after "watchbell stop" it stays loaded but idle, and a Watchbell started in
|
|
1344
|
+
// a terminal then is not the service's to restart.
|
|
1345
|
+
if (!fs.existsSync(plistFileOf(d)) || !agentState(d).running || runningPid(ctx, d) === null) return null;
|
|
1346
|
+
return {
|
|
1347
|
+
name: `the launchd agent ${LAUNCHD_LABEL}`,
|
|
1348
|
+
stopHint: "watchbell stop",
|
|
1349
|
+
startHint: `launchctl kickstart ${guiDomain(d)}/${LAUNCHD_LABEL}`,
|
|
1350
|
+
stop: async () => (await stopServer(ctx, d)) === 0, // a clean exit: KeepAlive restarts it only after a crash
|
|
1351
|
+
start: async () => launchctl(d, "kickstart", `${guiDomain(d)}/${LAUNCHD_LABEL}`),
|
|
1352
|
+
};
|
|
1353
|
+
}
|
|
1354
|
+
return null;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
/** What to do by hand: stop Watchbell (its service, when one runs), run `cmd`, start it again. */
|
|
1358
|
+
function byHand(service, cmd) {
|
|
1359
|
+
if (!service) return `Stop Watchbell ("watchbell stop"), then run: ${cmd}`;
|
|
1360
|
+
return `Stop ${service.name} (${service.stopHint}), run ${cmd}, then start it again (${service.startHint}).`;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
function packageName(pkgRoot) {
|
|
1364
|
+
try {
|
|
1365
|
+
return JSON.parse(fs.readFileSync(path.join(pkgRoot, "package.json"), "utf8")).name ?? null;
|
|
1366
|
+
} catch {
|
|
1367
|
+
return null;
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
/**
|
|
1372
|
+
* D9: `npm install -g watchbell@latest` with the npm next to this Node.js, only while Watchbell is stopped. A running
|
|
1373
|
+
* service of the package is stopped cleanly first and started again after (also when npm failed: the old version
|
|
1374
|
+
* then runs on). 0: updated or already the latest; 1: running, npm failed, or the service did not stop.
|
|
1375
|
+
*/
|
|
1376
|
+
export async function cmdUpdate({ ctx }, d) {
|
|
1377
|
+
// `sudo watchbell update` reads root's home: it would not see the user's Watchbell or stop its service.
|
|
1378
|
+
if ((d.uid ?? process.getuid?.()) === 0 && isSet(d.env.SUDO_USER)) {
|
|
1379
|
+
d.err(`Run watchbell update as ${d.env.SUDO_USER.trim()}, without sudo: as root it looks at ${ctx.home} and can't see or stop your Watchbell.`);
|
|
1380
|
+
d.err("When npm needs root, watchbell update says so and names the sudo command to run.");
|
|
1381
|
+
return 1;
|
|
1382
|
+
}
|
|
1383
|
+
if (packageName(d.pkgRoot) !== "watchbell") {
|
|
1384
|
+
d.err(`This Watchbell (${d.pkgRoot}) is not the npm package. Update a source checkout with git, or with its installer's --upgrade.`);
|
|
1385
|
+
return 1;
|
|
1386
|
+
}
|
|
1387
|
+
const { current, latest } = await lookupLatest(ctx, d, { force: true });
|
|
1388
|
+
const newer = latest ? compareVersions(latest, current) : null;
|
|
1389
|
+
if (newer !== null && newer <= 0) {
|
|
1390
|
+
d.out(`Watchbell ${current} is the latest version.`);
|
|
1391
|
+
return 0;
|
|
1392
|
+
}
|
|
1393
|
+
if (latest === null) d.out("Could not ask registry.npmjs.org for the latest version; npm will try.");
|
|
1394
|
+
const npm = npmCommand(d);
|
|
1395
|
+
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}`);
|
|
1397
|
+
return 1;
|
|
1398
|
+
}
|
|
1399
|
+
const service = await runningService(ctx, d);
|
|
1400
|
+
// A system Node.js (/usr/lib/node_modules) is owned by root: say so before anything is stopped.
|
|
1401
|
+
const npmFolder = path.dirname(d.pkgRoot);
|
|
1402
|
+
if (d.platform !== "win32" && !writableDir(npmFolder)) {
|
|
1403
|
+
d.err(`npm can't write to ${npmFolder} as your user, so watchbell update can't update it.`);
|
|
1404
|
+
d.err(byHand(service, `sudo ${NPM_UPDATE}`));
|
|
1405
|
+
return 1;
|
|
1406
|
+
}
|
|
1407
|
+
if (service) {
|
|
1408
|
+
d.out(`Stopping ${service.name} for the update ...`);
|
|
1409
|
+
if (!(await service.stop())) {
|
|
1410
|
+
d.err(`Could not stop ${service.name}; nothing was updated.`);
|
|
1411
|
+
return 1;
|
|
1412
|
+
}
|
|
1413
|
+
} else {
|
|
1414
|
+
const pid = runningPid(ctx, d);
|
|
1415
|
+
if (pid !== null) {
|
|
1416
|
+
d.err(`Watchbell is running (process ${pid}). Stop it first with "watchbell stop", then run watchbell update again.`);
|
|
1417
|
+
return 1;
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
d.out(`Updating Watchbell ${current}${latest ? ` to ${latest}` : ""}: ${npm.npm} ${NPM_UPDATE_ARGS.join(" ")}`);
|
|
1421
|
+
// POSIX: npm starts with "#!/usr/bin/env node", so this Node.js goes first on PATH, else npm runs (and installs for)
|
|
1422
|
+
// whichever node PATH finds first. A large maxBuffer: a verbose .npmrc must not get npm killed mid-install.
|
|
1423
|
+
const env = d.platform === "win32" ? d.env : { ...d.env, PATH: [path.posix.dirname(d.execPath), d.env.PATH].filter(isSet).join(":") };
|
|
1424
|
+
const r = d.runSync(npm.cmd, npm.args, { ...npm.opts, env, stdio: ["inherit", "inherit", "pipe"], maxBuffer: 64 * 1024 * 1024 });
|
|
1425
|
+
const said = (r.stderr ?? "").trim();
|
|
1426
|
+
if (said) d.err(said); // npm's warnings too, not only its errors
|
|
1427
|
+
let code = 0;
|
|
1428
|
+
if (r.status !== 0) {
|
|
1429
|
+
code = 1;
|
|
1430
|
+
d.err(r.error ? `Could not run ${npm.npm}: ${r.error.code ?? r.error.message}.` : `npm could not update Watchbell (exit ${r.status}).`);
|
|
1431
|
+
d.err(service ? byHand(service, NPM_UPDATE) : `Run it yourself: ${NPM_UPDATE}`);
|
|
1432
|
+
if (d.platform !== "win32" && /\bEACCES\b|\bEPERM\b|permission denied/i.test(said)) {
|
|
1433
|
+
d.err(`npm's global folder is not writable by your user. ${byHand(service, `sudo ${NPM_UPDATE}`)}`);
|
|
1434
|
+
}
|
|
1435
|
+
} else {
|
|
1436
|
+
const now = packageVersion(d.pkgRoot);
|
|
1437
|
+
if (now === current && newer !== null && newer > 0) {
|
|
1438
|
+
code = 1;
|
|
1439
|
+
d.err(`npm finished, but ${d.pkgRoot} still holds Watchbell ${now}: this npm installs somewhere else (see npm prefix -g).`);
|
|
1440
|
+
} else d.out(now === current ? `Watchbell ${now} is up to date.` : `Updated Watchbell ${current} to ${now}.`);
|
|
1441
|
+
}
|
|
1442
|
+
if (service) {
|
|
1443
|
+
d.out(`Starting ${service.name} again ...`);
|
|
1444
|
+
if (!(await service.start())) code = 1;
|
|
1445
|
+
}
|
|
1446
|
+
return code;
|
|
1447
|
+
}
|
|
1448
|
+
|
|
883
1449
|
// ---------------------------------------------------------------------------------------------------- main
|
|
884
1450
|
|
|
885
1451
|
export async function main(argv, overrides = {}) {
|
|
@@ -904,6 +1470,7 @@ export async function main(argv, overrides = {}) {
|
|
|
904
1470
|
d.err(`Watchbell needs Node.js 24 or newer; this is Node.js ${d.nodeVersion}.`);
|
|
905
1471
|
return 1;
|
|
906
1472
|
}
|
|
1473
|
+
if (opts.host !== null || opts.port !== null) d.cliAddress = { HOST: opts.host, PORT: opts.port };
|
|
907
1474
|
let ctx;
|
|
908
1475
|
try {
|
|
909
1476
|
ctx = resolveContext(d);
|
|
@@ -915,6 +1482,7 @@ export async function main(argv, overrides = {}) {
|
|
|
915
1482
|
case "start":
|
|
916
1483
|
return cmdStart(ctx, d, { open: opts.open, foreground: false, newKey: opts.newKey });
|
|
917
1484
|
case "run":
|
|
1485
|
+
if (underLaunchd(d)) return runUnderLaunchd(ctx, d);
|
|
918
1486
|
return cmdStart(ctx, d, { open: false, foreground: true, newKey: false });
|
|
919
1487
|
case "stop":
|
|
920
1488
|
return stopServer(ctx, d, opts.timeout);
|
|
@@ -924,6 +1492,8 @@ export async function main(argv, overrides = {}) {
|
|
|
924
1492
|
return cmdService(opts.args[0], ctx, d, opts.yes);
|
|
925
1493
|
case "reset-login":
|
|
926
1494
|
return cmdResetLogin(ctx, d, opts.args[0].trim());
|
|
1495
|
+
case "update":
|
|
1496
|
+
return cmdUpdate({ ctx }, d);
|
|
927
1497
|
default:
|
|
928
1498
|
return 2;
|
|
929
1499
|
}
|