watchbell 1.6.0 → 1.6.1

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.
Files changed (393) hide show
  1. package/package.json +1 -1
  2. package/server/.next/BUILD_ID +1 -1
  3. package/server/.next/build-manifest.json +3 -3
  4. package/server/.next/prerender-manifest.json +3 -3
  5. package/server/.next/required-server-files.json +1 -1
  6. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +13 -13
  7. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  8. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  9. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +12 -12
  10. package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
  11. package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
  12. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +11 -11
  13. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  14. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  15. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +14 -14
  16. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  17. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  18. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +12 -12
  19. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  21. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +21 -21
  22. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  23. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  24. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +11 -11
  25. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  26. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  27. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +14 -14
  28. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  29. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  30. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +17 -17
  31. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  32. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  33. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +12 -12
  34. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  36. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +12 -12
  37. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  38. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  39. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +11 -11
  40. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  41. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  42. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +12 -12
  43. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  44. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  45. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +27 -27
  46. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  47. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  48. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +34 -34
  49. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  50. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  51. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +14 -14
  52. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  53. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  54. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +14 -14
  55. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  56. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  57. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +11 -11
  58. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  59. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  60. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +22 -22
  61. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  62. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  63. package/server/.next/server/app/(console)/containers/page/server-reference-manifest.json +14 -14
  64. package/server/.next/server/app/(console)/containers/page.js.nft.json +1 -1
  65. package/server/.next/server/app/(console)/containers/page_client-reference-manifest.js +1 -1
  66. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +11 -11
  67. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  68. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  69. package/server/.next/server/app/(console)/deploy/page/server-reference-manifest.json +11 -11
  70. package/server/.next/server/app/(console)/deploy/page.js.nft.json +1 -1
  71. package/server/.next/server/app/(console)/deploy/page_client-reference-manifest.js +1 -1
  72. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +19 -19
  73. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  74. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  75. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +18 -18
  76. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  77. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  78. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +13 -13
  79. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  80. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  81. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +11 -11
  82. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  83. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  84. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +18 -18
  85. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  86. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  87. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +12 -12
  88. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  89. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  90. package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +12 -12
  91. package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -1
  92. package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +1 -1
  93. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +22 -22
  94. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  95. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  96. package/server/.next/server/app/(console)/os/page/server-reference-manifest.json +12 -12
  97. package/server/.next/server/app/(console)/os/page.js.nft.json +1 -1
  98. package/server/.next/server/app/(console)/os/page_client-reference-manifest.js +1 -1
  99. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +19 -19
  100. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  101. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  102. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +12 -12
  103. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  104. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  105. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +11 -11
  106. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  107. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  108. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +21 -21
  109. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  110. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  111. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +18 -18
  112. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  113. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  114. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +11 -11
  115. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  116. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  117. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +30 -30
  118. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  119. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  120. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +11 -11
  121. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  122. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  123. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +11 -11
  124. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  125. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  126. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +11 -11
  127. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  128. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  129. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +25 -25
  130. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  131. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  132. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +16 -16
  133. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  134. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  135. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  136. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  137. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  138. package/server/.next/server/app/_global-error.html +1 -1
  139. package/server/.next/server/app/_global-error.rsc +2 -2
  140. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  141. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  142. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  143. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  144. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  145. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  146. package/server/.next/server/app/_not-found.html +1 -1
  147. package/server/.next/server/app/_not-found.rsc +3 -3
  148. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  149. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  150. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  151. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  152. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  153. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  154. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +8 -8
  155. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  156. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +8 -8
  157. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  158. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +8 -8
  159. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  160. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  161. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  162. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  163. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  164. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  165. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  166. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  167. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  168. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  169. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  170. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  171. package/server/.next/server/app/page.js.nft.json +1 -1
  172. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  174. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  175. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  176. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  177. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  178. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  179. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  180. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  181. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  182. package/server/.next/server/chunks/_0-5pjvqu672_v._.js +2 -2
  183. package/server/.next/server/chunks/_02qrz1g8sdvhe._.js +2 -2
  184. package/server/.next/server/chunks/_0ehqx1pkh20px._.js +1 -1
  185. package/server/.next/server/chunks/_0jiq3ns7681pv._.js +1 -1
  186. package/server/.next/server/chunks/_1ap0upnvy5i_1._.js +2 -2
  187. package/server/.next/server/chunks/_1b-88djuoexz1._.js +2 -2
  188. package/server/.next/server/chunks/_1t46m15axa4b4._.js +1 -1
  189. package/server/.next/server/chunks/src_lib_0pyyxm3m1rttg._.js +1 -1
  190. package/server/.next/server/chunks/src_lib_13irheo9qqhgx._.js +1 -1
  191. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +2 -2
  192. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  193. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_21atz5tidps07.js +1 -1
  194. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +1 -1
  195. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +1 -1
  196. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +1 -1
  197. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +1 -1
  198. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +1 -1
  199. package/server/.next/server/chunks/ssr/[root-of-the-server]__03xevz8n-mc20._.js +2 -2
  200. package/server/.next/server/chunks/ssr/[root-of-the-server]__0mvauw9r_4qss._.js +1 -1
  201. package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +1 -1
  202. package/server/.next/server/chunks/ssr/[root-of-the-server]__18gw74mr2vto3._.js +1 -1
  203. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  204. package/server/.next/server/chunks/ssr/[root-of-the-server]__1mxpszbk1aup8._.js +2 -2
  205. package/server/.next/server/chunks/ssr/_008i8a0_8skrp._.js +1 -1
  206. package/server/.next/server/chunks/ssr/_01n29sxn-py3x._.js +1 -1
  207. package/server/.next/server/chunks/ssr/_02eudwc8ieb2r._.js +2 -2
  208. package/server/.next/server/chunks/ssr/_08xqk3eibu5aw._.js +1 -1
  209. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  210. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  211. package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
  212. package/server/.next/server/chunks/ssr/{_1ykegy3wzl3mu._.js → _0c9_fa5ejth12._.js} +2 -2
  213. package/server/.next/server/chunks/ssr/_0cbbks0ms7i_u._.js +2 -2
  214. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  215. package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +2 -2
  216. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  217. package/server/.next/server/chunks/ssr/{_0u5_d3o0i72tq._.js → _0fl2-fao_ye7t._.js} +2 -2
  218. package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +2 -2
  219. package/server/.next/server/chunks/ssr/_0gmw45sb1llld._.js +1 -1
  220. package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +2 -2
  221. package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +2 -2
  222. package/server/.next/server/chunks/ssr/_0iy27gi4y9-fe._.js +1 -1
  223. package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +1 -1
  224. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  225. package/server/.next/server/chunks/ssr/_0oub-njkja8gu._.js +2 -2
  226. package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +2 -2
  227. package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +1 -1
  228. package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +2 -2
  229. package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +2 -2
  230. package/server/.next/server/chunks/ssr/_0uz60lk-7e_cj._.js +2 -2
  231. package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
  232. package/server/.next/server/chunks/ssr/_0xmud7u5hdnqu._.js +2 -2
  233. package/server/.next/server/chunks/ssr/_1-4401bfn50mf._.js +1 -1
  234. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  235. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  236. package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
  237. package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +2 -2
  238. package/server/.next/server/chunks/ssr/{_17tabyg0mhxlx._.js → _18sg0ilz439y6._.js} +2 -2
  239. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  240. package/server/.next/server/chunks/ssr/{_13bpjk3g0tp2e._.js → _19q2vj_ppgsu4._.js} +2 -2
  241. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  242. package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +2 -2
  243. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  244. package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +2 -2
  245. package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +2 -2
  246. package/server/.next/server/chunks/ssr/_1fuywfexex2s8._.js +2 -2
  247. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  248. package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +2 -2
  249. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  250. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  251. package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +2 -2
  252. package/server/.next/server/chunks/ssr/_1m4km_w39x5e9._.js +1 -1
  253. package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +2 -2
  254. package/server/.next/server/chunks/ssr/_1q3fi6a4gklq6._.js +1 -1
  255. package/server/.next/server/chunks/ssr/_1ul3og9l7vp32._.js +2 -2
  256. package/server/.next/server/chunks/ssr/{_08rjac8cutbcs._.js → _1vlm9990gr64r._.js} +2 -2
  257. package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +2 -2
  258. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  259. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +1 -1
  260. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +1 -1
  261. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +1 -1
  262. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_1myo_rodrlg3a.js +2 -2
  263. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +1 -1
  264. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +1 -1
  265. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_containers_page_actions_1ainjsbrnl360.js +1 -1
  266. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +1 -1
  267. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +1 -1
  268. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +1 -1
  269. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +1 -1
  270. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +1 -1
  271. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +1 -1
  272. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +1 -1
  273. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +1 -1
  274. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  275. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  276. package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +1 -1
  277. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  278. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  279. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  280. package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +1 -1
  281. package/server/.next/server/chunks/ssr/src_0ovx2ogvlz2eh._.js +1 -1
  282. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  283. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  284. package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
  285. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  286. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  287. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  288. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  289. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
  290. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  291. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  292. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  293. package/server/.next/server/chunks/ssr/{src_app_(console)_0gw9o1og9hq_4._.js → src_app_(console)_0krr6t05xs2tn._.js} +2 -2
  294. package/server/.next/server/chunks/ssr/src_app_(console)_0ohoun7l5f2tb._.js +3 -0
  295. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +2 -2
  296. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_08in-j3xp5mbn._.js +1 -1
  297. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  298. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  299. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  300. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +1 -1
  301. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  302. package/server/.next/server/chunks/ssr/src_app_(console)_containers_containers-view_tsx_1xkcrw5gx53xo._.js +1 -1
  303. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  304. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  305. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  306. package/server/.next/server/chunks/ssr/src_app_(console)_firebase_row-menu_tsx_0hssoq3pqjl-n._.js +1 -1
  307. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  308. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +1 -1
  309. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  310. package/server/.next/server/chunks/ssr/src_app_(console)_os_os-view_tsx_0xr69f5vtstls._.js +1 -1
  311. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  312. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  313. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  314. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  315. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  316. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_148phfjye0539._.js +1 -1
  317. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  318. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  319. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  320. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  321. package/server/.next/server/chunks/ssr/{src_app_signin_1u2md84o5b6td._.js → src_app_signin_12a3ifphkkcs7._.js} +2 -2
  322. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  323. package/server/.next/server/chunks/ssr/src_lib_collector_self-update_ts_18m5vmptpjhtg._.js +1 -1
  324. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  325. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  326. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  327. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  328. package/server/.next/server/middleware-build-manifest.js +3 -3
  329. package/server/.next/server/pages/404.html +1 -1
  330. package/server/.next/server/pages/500.html +1 -1
  331. package/server/.next/server/preview-props.json +3 -3
  332. package/server/.next/server/server-reference-manifest.js +1 -1
  333. package/server/.next/server/server-reference-manifest.json +152 -152
  334. package/server/.next/static/chunks/{1kyz-ah3_ho6c.js → 0-o-4ilzkrd38.js} +1 -1
  335. package/server/.next/static/chunks/{356b00huilj4q.js → 01euc4zjlprz5.js} +1 -1
  336. package/server/.next/static/chunks/028g933xfv8jn.js +1 -0
  337. package/server/.next/static/chunks/{2k4z-oed_6g2l.js → 02kly5fiyvt77.js} +1 -1
  338. package/server/.next/static/chunks/{2kmw3ug2__8y3.js → 0dq-2wtk0h5u7.js} +1 -1
  339. package/server/.next/static/chunks/{26exu0f7ok41j.js → 0ey7akdab5tu8.js} +1 -1
  340. package/server/.next/static/chunks/0ge2nkna7o16p.js +1 -0
  341. package/server/.next/static/chunks/{3w5rrc-0xud6m.js → 0l61-etojd65n.js} +1 -1
  342. package/server/.next/static/chunks/{3lc-hq-bpg71u.js → 0matuoy08desx.js} +1 -1
  343. package/server/.next/static/chunks/{2-ijilf6lbw4f.js → 0mbt6eam4qr2f.js} +1 -1
  344. package/server/.next/static/chunks/0utjdzwgd7zw2.js +1 -0
  345. package/server/.next/static/chunks/{1a0rdqp6soc92.js → 0v97o46v-74gw.js} +1 -1
  346. package/server/.next/static/chunks/{14f5pn2krqoyh.js → 0xlfzxnboj4f1.js} +1 -1
  347. package/server/.next/static/chunks/{3wfyge_-2qnyj.js → 0xz55932e19r8.js} +1 -1
  348. package/server/.next/static/chunks/{0rblb2d9s6x__.js → 0y99dm8mesqe9.js} +1 -1
  349. package/server/.next/static/chunks/{3xulo5x1hbsw-.js → 1935vuszybg7i.js} +1 -1
  350. package/server/.next/static/chunks/{3_6-4h_qltoii.js → 1c9eb592ho0-l.js} +1 -1
  351. package/server/.next/static/chunks/{3ezef0voy5xju.js → 1pogexbz36ij8.js} +1 -1
  352. package/server/.next/static/chunks/{17zst1h7smcce.js → 1r99dm6-o5qw2.js} +1 -1
  353. package/server/.next/static/chunks/{35vilzb1p9yjf.js → 1sa-1lde5_ikt.js} +1 -1
  354. package/server/.next/static/chunks/{0viea3-xdb4uv.js → 1truzt17f0fce.js} +1 -1
  355. package/server/.next/static/chunks/{3g0ywdith98z2.js → 1u8mo8jflotrt.js} +1 -1
  356. package/server/.next/static/chunks/{0ps76fyk0mlud.js → 1uk98c6r9i2bn.js} +1 -1
  357. package/server/.next/static/chunks/{3u2qewigse-a4.js → 2-uaya1_uxlg8.js} +1 -1
  358. package/server/.next/static/chunks/{11r8k-t1ijjkn.js → 2-xolk9x48-v1.js} +1 -1
  359. package/server/.next/static/chunks/{1a7zdd51t9mil.js → 22ygzud_kp29f.js} +1 -1
  360. package/server/.next/static/chunks/{3f1selgoqszyq.js → 2am77mhkx46hz.js} +2 -2
  361. package/server/.next/static/chunks/{2crsj9_2h2nzh.js → 2fvh4wg2kp4c2.js} +1 -1
  362. package/server/.next/static/chunks/2m8-ctreu-y-r.js +1 -0
  363. package/server/.next/static/chunks/{44hkyor0suthy.js → 2p8bv7d7t08z1.js} +1 -1
  364. package/server/.next/static/chunks/{1fh3cq_v5nqtp.js → 2szchf79vnxgd.js} +1 -1
  365. package/server/.next/static/chunks/{0v-0yvs2o_ibn.js → 2yc4qzglai5fq.js} +1 -1
  366. package/server/.next/static/chunks/{28fzu8z0ofyw0.js → 2ze-y3he5_bb0.js} +1 -1
  367. package/server/.next/static/chunks/{1d4i_v63pyozl.js → 33_2mbxu9wufm.js} +1 -1
  368. package/server/.next/static/chunks/33avmrae70_xs.js +1 -0
  369. package/server/.next/static/chunks/{1qmrzxeff7esb.js → 363mcu9nd9znh.js} +1 -1
  370. package/server/.next/static/chunks/{0hths0sijlql2.js → 3aou6xwhz8z6a.js} +1 -1
  371. package/server/.next/static/chunks/{2j24hsy45xi-u.js → 3bwwwv3sp7uyn.js} +1 -1
  372. package/server/.next/static/chunks/{2pa65sxfnzj4k.js → 3dk6a5gl9glxo.js} +1 -1
  373. package/server/.next/static/chunks/{1d5651gcd0bfq.js → 3e-0ejqqa7jwn.js} +1 -1
  374. package/server/.next/static/chunks/{1qjg48qu3j1w4.js → 3gkm-ynu4fq5u.js} +1 -1
  375. package/server/.next/static/chunks/{0cc9ahw1xs0ny.js → 3gmm9g54vx4w0.js} +1 -1
  376. package/server/.next/static/chunks/{1fk-rtgxvtdso.js → 3jqmm62dbykt1.js} +1 -1
  377. package/server/.next/static/chunks/{1yjrm8ekqlzfy.js → 3lvz18snt6489.js} +1 -1
  378. package/server/.next/static/chunks/{308vk5n0anqam.js → 3m3vl3n5xs039.js} +2 -2
  379. package/server/.next/static/chunks/{2d7luax7loip3.js → 3qv9klayap1tz.js} +1 -1
  380. package/server/.next/static/chunks/{2-vu-7596xgz-.js → 3ursfc8kxp2ak.js} +2 -2
  381. package/server/.next/static/chunks/{3a9toq_3nqe93.js → 3xkvsl4vbpm41.js} +1 -1
  382. package/server/.next/static/chunks/3yu0azvye6wr_.js +1 -0
  383. package/server/server.js +1 -1
  384. package/server/.next/server/chunks/ssr/src_app_(console)_0_odx13qcz9o1._.js +0 -3
  385. package/server/.next/static/chunks/00e1aosyzj6rl.js +0 -1
  386. package/server/.next/static/chunks/0hzw1rqyz-ith.js +0 -1
  387. package/server/.next/static/chunks/1rgved8vjyay2.js +0 -1
  388. package/server/.next/static/chunks/1y_o3hc2z85sh.js +0 -1
  389. package/server/.next/static/chunks/39a3uxexc-wqm.js +0 -1
  390. package/server/.next/static/chunks/3qudv985iqmz7.js +0 -1
  391. /package/server/.next/static/{g_rE0bq_ZZa-pl4RulWXV → fogXXBSOhoHV3eIf8_j28}/_buildManifest.js +0 -0
  392. /package/server/.next/static/{g_rE0bq_ZZa-pl4RulWXV → fogXXBSOhoHV3eIf8_j28}/_clientMiddlewareManifest.js +0 -0
  393. /package/server/.next/static/{g_rE0bq_ZZa-pl4RulWXV → fogXXBSOhoHV3eIf8_j28}/_ssgManifest.js +0 -0
@@ -10,12 +10,12 @@ Content-Type: ${a}\r
10
10
  \r
11
11
  `),t,Buffer.from(`\r
12
12
  --${eE}--`)])}async function ej(e,t,a={}){let r=`multipart/related; boundary=${eE}`,n=e=>{if(!e.ok)return e;let a=en.z.object({id:ei.z.string().min(1),size:eu.z.union([ei.z.string(),ed.z.number()]).optional()}).safeParse(e.data);return a.success?{ok:!0,data:{id:a.data.id,size:Number(a.data.size??t.content.length)||t.content.length}}:ey("the upload")};if(t.fileId){let s=ex({name:t.name,mimeType:t.mimeType},t.content,t.mimeType),o=await ew("PATCH",`${ef}/${encodeURIComponent(t.fileId)}?uploadType=multipart&fields=id,size`,e,{raw:s,contentType:r},a);if(o.ok||"missing"!==o.kind&&"denied"!==o.kind)return n(o)}let s=ex({name:t.name,mimeType:t.mimeType,parents:[t.folderId]},t.content,t.mimeType);return n(await ew("POST",`${ef}?uploadType=multipart&fields=id,size`,e,{raw:s,contentType:r},a))}async function eT(e,t,a={}){let r=await ew("PATCH",`${ep}/${encodeURIComponent(t)}?fields=id,trashed`,e,{json:{trashed:!0}},a);return r.ok||"missing"===r.kind?{ok:!0,data:void 0}:r}var eM=e.i(666680),eO=e.i(547963);let ez=eO.n.notSet("GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET",!0),eC="invalid_grant: Google Drive access was removed or has expired. Reconnect Google Drive.",eN=en.z.object({error:ei.z.string()});async function eR(e,t){let a,r=t.timeoutMs??1e4;try{a=await (t.fetch??fetch)("https://oauth2.googleapis.com/token",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},body:e.toString(),signal:AbortSignal.timeout(r),cache:"no-store"})}catch(e){return{ok:!1,kind:"transient",error:e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name)?`Google didn't answer within ${Math.round(r/1e3)} seconds.`:"Couldn't reach Google."}}let n=await a.json().catch(()=>null);if(a.ok)return{ok:!0,body:n};let s=eN.safeParse(n).success?n.error:null;return"invalid_grant"===s?{ok:!1,kind:"revoked",error:eC}:"invalid_client"===s||"unauthorized_client"===s?{ok:!1,kind:"client",error:`Google refused the OAuth client. Check GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET ${eO.n.checkWhere}.`}:429===a.status||a.status>=500?{ok:!1,kind:"transient",error:`Google returned an error (${a.status}). The next run tries again.`}:{ok:!1,kind:"format",error:`Google refused the request (${s??a.status}).`}}en.z.object({refresh_token:ei.z.string().min(1),scope:ei.z.string().optional()});let e_=en.z.object({access_token:ei.z.string().min(1)});async function eq(e,t,a={}){let r=await eR(new URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:e.clientId,client_secret:e.clientSecret}),a);if(!r.ok)return r;let n=e_.safeParse(r.body);return n.success?{ok:!0,accessToken:n.data.access_token}:{ok:!1,kind:"format",error:"Google answered the token request in a format the console doesn't recognise."}}class eP extends Error{kind;constructor(e,t){super(t),this.kind=e}}async function eF(e){let{month:t,partial:a,now:r}=e,n=function(e=process.env){let t=e.GOOGLE_CLIENT_ID?.trim()??"",a=e.GOOGLE_CLIENT_SECRET?.trim()??"";return a&&/^[\w.-]+\.apps\.googleusercontent\.com$/.test(t)?{clientId:t,clientSecret:a}:null}();if(!n)return{ok:!1,month:t,kind:"env",error:ez};let s=await K();if(!s)return{ok:!1,month:t,kind:"not-connected",error:"Google Drive isn't connected."};if(!s.refreshToken){let e="The stored Google Drive token can't be read (the encryption key changed). Reconnect Google Drive.";return await Y(s.id,{status:"error",lastError:e}),{ok:!1,month:t,kind:"failed",error:e}}let o=await Q(t),i={sheetFileId:o?.sheetFileId??null,csvFileId:o?.csvFileId??null,driveFolderId:o?.driveFolderId??null},l=o?.status??"error";await Z(t,{status:l,attempts:(o?.attempts??0)+1,startedAt:r});let d=e=>(i={...i,...e},Z(t,{status:l,...e})),u={fetch:e.fetch},c=()=>{if(Date.now()>e.deadline)throw new eP("time","Stopped at the daily job's time budget; the next daily run continues where this one stopped.")},p=e=>{if(!e.ok)throw new eP("failed",e.error);return e.data};try{let o,l=await eq(n,s.refreshToken,u);if(!l.ok){if("revoked"===l.kind)throw await Y(s.id,{status:"error",lastError:eC}),new eP("revoked",eC);throw new eP("failed",l.error)}"error"===s.status&&await Y(s.id,{status:"ok",lastError:null});let f=l.accessToken;c();let m=await ee(),h=m?.id??null;if(m){let e=p(await ev(f,m.id,u));e.usable?e.name&&e.name!==m.name&&await et(m.id,e.name):h=null}if(!h){c();let e=p(await ek(f,I,u)),t=e?null:p(await ek(f,$,u));h=e??t??p(await eI(f,I,u)),await et(h,t?$:I)}let w=await er(t,a,r);c(),i.sheetFileId||await d({sheetFileId:p(await e$(f,T(t),h,u)),driveFolderId:h}),c();let g=await eS(f,i.sheetFileId,A,u);g.ok||"missing"!==g.kind&&"denied"!==g.kind||(await d({sheetFileId:p(await e$(f,T(t),h,u)),driveFolderId:h}),c(),g=await eS(f,i.sheetFileId,A,u)),p(g),c(),p(await eD(f,i.sheetFileId,function(e){let{start:t,end:a}=E(e.month),r=e.partial&&e.generatedAt<a?e.generatedAt:a,n=e.deployments.filter(N),s=C(e.rollups.map(e=>e.checks)),o=C(e.rollups.map(e=>e.failures)),i=e=>(0,v.G)(e),l=[["Watchbell backup",e.month],["Covers",`${M(t)} to ${M(r)} ${(0,k.zoneName)()}${e.partial?" (month so far)":""}`],["Kind",e.partial?"Partial: Back up now":"Full month"],["Generated",`${M(e.generatedAt)} ${(0,k.zoneName)()}`],[],["Applications watched",e.apps.length],["Uptime, all monitors (%)",O(s,o)],["Checks (rolled-up hours)",s],["Failed checks",o],["Incidents (alerts opened)",e.alerts.length],["Critical incidents",e.alerts.filter(e=>"critical"===e.severity).length],["Production deployments",n.length],["Failed production deployments",n.filter(R).length],["Events",C(e.events.map(e=>e.count))]],d=[["Application","Monitors","Checks","Uptime (%)","p95 response, typical hour (ms)","p95 response, worst hour (ms)","5xx responses","Production deploys","Failed production deploys"]];for(let t of[...e.apps].sort((e,t)=>e.name.localeCompare(t.name))){let a=e.rollups.filter(e=>e.appId===t.id),r=a.map(e=>e.p95Ms).filter(e=>null!==e),s=n.filter(e=>e.appId===t.id);d.push([i(t.name),new Set(a.map(e=>e.monitorId)).size,C(a.map(e=>e.checks)),O(C(a.map(e=>e.checks)),C(a.map(e=>e.failures))),z(r),r.length?Math.max(...r):null,C(a.map(e=>e.status5xx)),s.length,s.filter(R).length])}let u=[["Rule","Severity","Subject",`Started (${(0,k.zoneName)()})`,`Resolved (${(0,k.zoneName)()})`,"Duration","Message"]];for(let t of[...e.alerts].sort((e,t)=>e.startedAt.getTime()-t.startedAt.getTime())){let a=(0,v.o)({title:t.title,message:t.message,causedBy:null,resourceId:t.resourceId},e.book);u.push([t.ruleKey,t.severity,a.title,M(t.startedAt),M(t.resolvedAt),function(e,t,a){let r=Math.max(0,Math.round(((t??a).getTime()-e.getTime())/6e4)),n=r<60?`${r} min`:r<2880?`${Math.floor(r/60)} h ${r%60} min`:`${Math.round(r/1440)} days`;return t?n:`${n} (still open)`}(t.startedAt,t.resolvedAt,r),a.message])}let c=[["Database","Provider","Account","State at backup","Status changes this month","Size (MB)","Neon CU-hours this period","Firestore reads (last reading)"]];for(let t of[...e.databases].sort((t,a)=>(0,v.X)(e.book,t.id).localeCompare((0,v.X)(e.book,a.id)))){let a=C(e.events.filter(e=>"database"===e.type&&e.resourceId===t.id).map(e=>e.count));c.push([(0,v.X)(e.book,t.id),_[t.kind],i(t.account),t.state,a,P(t.sizeBytes),t.cuHours,t.reads])}let p=[["Domain","Application","TLS certificate expires","TLS days left at month end","Domain expires (RDAP)","Domain days left at month end","Registrar"]];for(let t of[...e.domains].sort((e,t)=>e.name.localeCompare(t.name)))p.push([t.name,t.app?i(t.app):"",t.tlsExpires??"",q(t.tlsExpires,r),t.domainExpires??"",q(t.domainExpires,r),t.registrar??""]);return[{title:"Overview",rows:l},{title:"Applications",rows:d},{title:"Incidents",rows:u},{title:"Databases",rows:c},{title:"Domains",rows:p}]}(w),u)),c();let y=(o=function(e){let t=[U.join(",")];for(let a of[...e.rollups].sort((e,t)=>e.hour.getTime()-t.hour.getTime()||e.monitorId.localeCompare(t.monitorId)))t.push(["rollup",a.hour.toISOString(),(0,v.G)(`${a.app}${a.path}`),a.appId,a.checks,a.failures,a.p50Ms,a.p95Ms,a.maxMs,a.status5xx,a.maintenance,null,null,null,null,null,null].map(F).join(","));for(let a of[...e.events].sort((e,t)=>e.at.getTime()-t.at.getTime())){let r=a.resourceId&&e.book.db.some(e=>e.id===a.resourceId)?(0,v.X)(e.book,a.resourceId):(0,v.J)(a.resource??"",e.book);t.push(["event",a.at.toISOString(),r,a.resourceId,null,null,null,null,null,null,null,a.type,a.kind,a.reason,a.count,(0,v.J)(a.message,e.book,a.resourceId),(0,v.J)(a.detail,e.book,a.resourceId)].map(F).join(","))}return`${t.join("\r\n")}\r
13
- `}(w),(0,b.gzipSync)(Buffer.from(o,"utf8"),{level:9})),S=p(await ej(f,{name:`watchbell-${t}-raw.csv.gz`,mimeType:"application/gzip",folderId:h,content:y,fileId:i.csvFileId},u));await d({csvFileId:S.id}),await Z(t,{status:a?"partial":"ok",sizeBytes:S.size,error:null,finishedAt:new Date});let D=a?null:await eU(f,r,e.deadline,u);return{ok:!0,month:t,retention:D,message:`${j(t)}${a?" so far":""} saved to Google Drive.`}}catch(n){let e=n instanceof eP?n:new eP("failed","The backup failed. The next daily run tries again.");n instanceof eP||console.error("backup failed:",n instanceof Error?n.name:"unknown");let r=a&&"partial"===l?"partial":"error";return await Z(t,{status:r,error:e.message.slice(0,500),finishedAt:new Date}).catch(()=>void 0),{ok:!1,month:t,kind:e.kind,error:e.message}}}async function eU(e,t,a,r){let n=function(e,t){let a=D(t),r=e.filter(e=>"ok"===e.status&&e.month<a).map(e=>e.month).sort().reverse().slice(0,3);if(r.length<3)return[];let n=r[r.length-1];return e.filter(e=>!e.trashedAt&&e.month<n&&(e.sheetFileId||e.csvFileId))}(await X(),t),s=[];for(let o of n){if(Date.now()>a)break;let n=!0;for(let t of[o.sheetFileId,o.csvFileId])t&&((await eT(e,t,r)).ok||(n=!1));n&&(await Z(o.month,{status:o.status,trashedAt:t}),s.push(j(o.month)))}return s.length?`Moved to Drive trash: ${s.join(", ")}.`:null}async function eB(e,t,a={}){let r=await K();if(!r||"error"===r.status&&r.lastError?.startsWith("invalid_grant"))return null;let n=function(e,t){let a=x(D(t)),r=new Map(e.map(e=>[e.month,e.status]));if("ok"!==r.get(a))return a;let n=a;for(let e=1;e<3;e++)if(n=x(n),"error"===r.get(n))return n;return null}(await X(),e);if(!n)return null;let s=await eF({month:n,partial:!1,now:e,deadline:t,...a});return s.ok?null:`${j(n)}: ${s.error}`}var eG=e.i(455891),eL=e.i(889234),eW=e.i(328586),eH=e.i(333407),eV=e.i(459702),eJ=e.i(200346),eK=e.i(368230),eY=e.i(584820),eX=e.i(902509),eQ=e.i(668141),eZ=e.i(242960),e0=e.i(112515),e1=e.i(185890);function e3(e){if(!e)return null;if("unknown"!==e.state)return e.state;let t=e.data?.lastGoodState;return"string"==typeof t&&e1.f.includes(t)?t:null}let e4={turso_database:"Turso database",upstash_redis:"Upstash Redis",d1_database:"D1 database"};function e5(e,t){return"auth"===e.kind?"auth":"scope"===e.kind?t?"auth":"column":"missing"===e.kind?t?"unknown":"column":"unknown"}var e2=e.i(35048),e6=e.i(516464),e8=e.i(88316),e9=e.i(437122),e7=e.i(319718),te=e.i(941536),tt=e.i(686454),ta=e.i(122603);let tr="skipped the rest, time budget used";function tn(e){let t=e.deadline-Date.now()-500;if(t<250)throw Error(tr);return{timeoutMs:Math.min(5e3,t)}}async function ts(e,t,a){let r=!1;return{out:await (0,ta.P)(t,3,async t=>{let n;try{n=tn(e)}catch{r=!0;return}return a(t,n)}),skipped:r}}function to(e){if(e)throw Error(tr)}async function ti(e){let t=await (0,a.db)().select().from(g.accounts).where((0,p.and)((0,p.eq)(g.accounts.provider,e),(0,p.eq)(g.accounts.status,"ok"))),r=(0,L.serverEnv)().OPS_ENCRYPTION_KEY;return t.map(e=>({acc:e,credential:(0,B.V)({ciphertext:e.credentialCiphertext,iv:e.credentialIv},r)}))}function tl(e,t){return(0,a.db)().select({r:g.resources,s:g.snapshots}).from(g.resources).leftJoin(g.snapshots,(0,p.eq)(g.snapshots.resourceId,g.resources.id)).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,t),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt))).limit(100)}let td=e=>t.sql`${g.snapshots.data} || ${JSON.stringify(e)}::jsonb`;async function tu(e,t,r){let n=e3(e.s?{state:e.s.state,data:e.s.data}:null),s="unknown"===t.state,o=s?n?{lastGoodState:n}:{}:{...t.patch,lastGoodState:t.state},i=!s&&n!==t.state;return await (0,a.db)().insert(g.snapshots).values({resourceId:e.r.id,state:t.state,data:o,collectedAt:r,stateSince:r}).onConflictDoUpdate({target:g.snapshots.resourceId,set:{state:t.state,data:td(o),...s?{}:{collectedAt:r},...i?{stateSince:r}:{}}}),s?null:function(e){let{prev:t,next:a}=e;if(null===t||"unknown"===t||"unknown"===a||t===a)return null;let r={resourceId:e.resourceId,type:"database",at:e.at};if("supabase_project"===e.kind)return"paused"===a?{...r,reason:"DatabasePaused",kind:"paused",message:"Supabase project paused",detail:"Status changed to INACTIVE"}:"ok"===a?{...r,reason:"DatabaseRestored",kind:"ok",message:"Supabase project active again",detail:"Status changed to ACTIVE_HEALTHY"}:"warn"===a?{...r,reason:"DatabaseUnhealthy",kind:"warn",message:"Supabase project unhealthy",detail:e.label}:"err"===a?{...r,reason:"DatabaseFailed",kind:"err",message:`Supabase project: ${e.label.toLowerCase()}`,detail:e.label}:null;if("neon_project"===e.kind)return"err"===a?{...r,reason:"NeonSuspended",kind:"err",message:"Neon compute suspended",detail:e.label}:"err"===t&&("ok"===a||"idle"===a)?{...r,reason:"NeonAvailable",kind:"ok",message:"Neon compute available again",detail:e.label}:null;let n=e4[e.kind];if(n)return"err"===a?{...r,reason:"DatabaseFailed",kind:"err",message:`${n}: ${e.label.toLowerCase()}`,detail:e.label}:"off"===a?{...r,reason:"DatabaseMissing",kind:"off",message:`${n} missing`,detail:e.label}:"ok"===a&&("err"===t||"off"===t)?{...r,reason:"DatabaseRestored",kind:"ok",message:`${n} available again`,detail:e.label}:null;if("err"===a){let t="Daily quota used up"===e.label;return{...r,reason:t?"FirestoreQuotaUsedUp":"FirestoreUnreachable",kind:"err",message:t?"Firestore daily quota used up":"Firestore not reachable",detail:e.label}}return"off"===a?{...r,reason:"FirestoreMissing",kind:"off",message:"Firestore database missing",detail:e.label}:"ok"===a&&("err"===t||"off"===t)?{...r,reason:"FirestoreReachable",kind:"ok",message:"Firestore reachable again",detail:e.label}:null}({kind:e.r.kind,resourceId:e.r.id,prev:n,next:t.state,label:t.label,at:r})}async function tc(e,t){await (0,a.db)().update(g.snapshots).set({data:td(t)}).where((0,p.eq)(g.snapshots.resourceId,e.r.id))}let tp=e=>(0,eH.f)(e);async function tf(e,t,r,n,s){if("auth"===e5(n,!0)){let e=(0,e0.E)({ok:!1,kind:"auth",error:n.error});e&&await (0,a.db)().update(g.accounts).set({...e,updatedAt:s.now}).where((0,p.eq)(g.accounts.id,t.id))}for(let e of r)await tu(e,{state:"unknown",label:"Unknown",patch:{}},s.now);s.errors.push(`${e}/${t.label}: ${n.error}`)}let tm=e=>e.toISOString();async function th(e){return e.length?new Set((await (0,a.db)().select({app:g.links.fromResourceId,state:g.snapshots.state,data:g.snapshots.data}).from(g.links).innerJoin(g.resources,(0,p.eq)(g.resources.id,g.links.toResourceId)).innerJoin(g.snapshots,(0,p.eq)(g.snapshots.resourceId,g.resources.id)).where((0,p.and)((0,p.eq)(g.links.kind,"uses_db"),(0,p.inArray)(g.links.fromResourceId,e),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)))).filter(e=>"paused"===e.state||"unknown"===e.state&&"paused"===e.data.lastGoodState).map(e=>e.app)):new Set}async function tw(e){if(!e.protectOnly||await (0,eJ.g)())for(let{acc:t,credential:a}of(await ti("supabase"))){if(tn(e),!a){e.errors.push(`supabase/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"supabase_project");if(!r.length)continue;let n=await (0,tt.W)(a,tn(e));if(!n.ok){e.protectOnly?e.errors.push(`supabase/${t.label}: ${n.error}`):await tf("supabase",t,r,n,e);continue}let s=new Map(n.data.map(e=>[e.ref,e])),o=[];for(let t of e.protectOnly?[]:r){let a=s.get(t.r.externalId);if(!a){o.push(await tu(t,{state:"off",label:"Not found",patch:{status:"REMOVED"}},e.now));continue}let r=(0,e8.P)(a.status),n=e3(t.s?{state:t.s.state,data:t.s.data}:null),i={status:a.status,region:a.region,pgVersion:a.pgVersion,orgSlug:a.orgSlug};"paused"===r.state&&"paused"!==n&&(i.pausedBeforeSeen=null===n),o.push(await tu(t,{state:r.state,label:r.label,patch:i},e.now))}await tp(o);let i=new Map(r.map(e=>[e.r.externalId,e.r.id])),l=n.data.map(e=>({resourceId:i.get(e.ref)??null,accountId:t.id,status:e.status,orgSlug:e.orgSlug}));await (0,eJ.z)(e.now,l,e.deadline).catch(()=>{console.warn("auto-restore failed"),e.errors.push("auto-restore failed")})}}async function tg(e){for(let{acc:t,credential:a}of(await ti("supabase"))){if(tn(e),!a)continue;let r=await tl(t.id,"supabase_project");if(!r.length)continue;let n=new Map(r.map(e=>[e.r.id,(0,G.k)(G.B,e.s?.data)])),s=new Map;for(let r of new Set([...n.values()].map(e=>e.orgSlug).filter(e=>!!e))){let n=await (0,tt.K)(a,r,tn(e));s.set(r,n.ok&&null!==n.data?"free"===n.data:null),n.ok||"scope"===n.kind||e.errors.push(`supabase/${t.label} plan: ${n.error}`)}let{skipped:o}=await ts(e,r,async(t,r)=>{let o=n.get(t.r.id),i={freeOrg:o.orgSlug?s.get(o.orgSlug)??null:null};if((o.status??"").startsWith("ACTIVE_")){let[n,s]=await Promise.all([(0,tt.F)(a,t.r.externalId,r),(0,tt.Z)(a,t.r.externalId,r)]);n.ok?Object.assign(i,{health:n.data.map(({name:e,status:t})=>({name:e,status:t})),healthAt:tm(e.now),healthError:null}):"column"===e5(n,!1)?i.healthError=n.error:e.errors.push(`supabase/${t.r.name} health: ${n.error}`),s.ok?Object.assign(i,{lastTrafficAt:(0,e8.H)(s.data)?.toISOString()??null,trafficAt:tm(e.now),trafficError:null}):"column"===e5(s,!1)?i.trafficError=s.error:e.errors.push(`supabase/${t.r.name} traffic: ${s.error}`)}await tc(t,i)});to(o)}}async function ty(e){for(let{acc:t,credential:a}of(await ti("neon"))){if(tn(e),!a){e.errors.push(`neon/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"neon_project");if(!r.length)continue;let{out:n,skipped:s}=await ts(e,r,(e,t)=>Promise.all([(0,te.Z)(a,e.r.externalId,t),(0,te.k)(a,e.r.externalId,t),(0,te.e)(a,e.r.externalId,t)])),o=n.flat().find(e=>void 0!==e&&!e.ok&&"auth"===e.kind);if(o){await tf("neon",t,r,o,e);continue}let i=[];for(let[t,a]of r.entries()){let r=n[t];if(!r)continue;let[s,o,l]=r;if(!s.ok||!o.ok||!l.ok){let t=[s,o,l].find(e=>!e.ok);"missing"===t.kind?i.push(await tu(a,{state:"off",label:"Not found",patch:{}},e.now)):(await tu(a,{state:"unknown",label:"Unknown",patch:{}},e.now),e.errors.push(`neon/${a.r.name}: ${t.error}`));continue}let d=(0,e6.p)({endpoints:o.data,computeSeconds:s.data.computeSeconds});i.push(await tu(a,{state:d.state,label:d.label,patch:{region:s.data.region,pgVersion:s.data.pgVersion,computeSeconds:s.data.computeSeconds,transferBytes:s.data.transferBytes,activeSeconds:s.data.activeSeconds,periodStart:s.data.periodStart,periodEnd:s.data.periodEnd,endpoints:o.data,branches:l.data}},e.now))}await tp(i),to(s)}}let tb=e=>e.ok?{latencyMs:e.data.latencyMs,pingError:null,pingReason:null,pingKind:null}:{pingError:e.error,pingReason:e.reason??null,pingKind:e.kind};async function tk(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r){e.errors.push(`firebase/${t.label}: credential can't be read`);continue}let n=await tl(t.id,"firestore");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){await tf("firebase",t,n,s,e);continue}let{out:o,skipped:i}=await ts(e,n,(e,t)=>(0,e9.G)(s.data,e.r.externalId,t)),l=[];for(let[t,a]of n.entries()){let r=o[t];if(!r)continue;let n=(0,e2.g)(r);"unknown"!==n.state||r.ok||e.errors.push(`firebase/${a.r.name}: ${r.error}`),l.push(await tu(a,{...n,patch:tb(r)},e.now))}await tp(l),to(i)}}async function tv(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r)continue;let n=(await tl(t.id,"firestore")).filter(e=>e.s?.state!=="off");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){e.errors.push(`firebase/${t.label}: ${s.error}`);continue}let o=(0,e2.a)(e.now),{skipped:i}=await ts(e,n,async(t,a)=>{let r=await (0,e9.W)(s.data,t.r.externalId,o,e.now,a);r.ok?await tc(t,{...r.data,opsAt:tm(e.now),opsError:null}):"column"===e5(r,!1)?await tc(t,{reads:null,writes:null,deletes:null,opsAt:tm(e.now),opsError:/requires billing/i.test(r.message??"")?"Not available on Spark: Firestore usage needs billing (Blaze plan)":"SERVICE_DISABLED"===r.reason?"Not readable: the Cloud Monitoring API is off in this project":"Not readable: the service account needs monitoring.viewer"}):e.errors.push(`firebase/${t.r.name} usage: ${r.error}`)});to(i)}}async function tI(e){let t=Date.now()+2*Math.max(0,e.deadline-Date.now())/3,a=await t$(()=>tA({...e,deadline:t})),r=await t$(()=>tS(e));if(a)throw a;if(r)throw r}async function t$(e){try{return await e(),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function tA(e){for(let{acc:t,credential:a}of(await ti("supabase")))if(tn(e),a)for(let r of(await tl(t.id,"supabase_project"))){let t=(0,G.k)(G.B,r.s?.data);if(!(0,e8.z)({status:t.status??"",lastTrafficAt:t.lastTrafficAt?new Date(t.lastTrafficAt):null,sizeAt:t.sizeAt?new Date(t.sizeAt):null,now:e.now}))continue;let n=await (0,tt.r)(a,r.r.externalId,tn(e));n.ok?await tc(r,{sizeBytes:n.data,sizeAt:tm(e.now),sizeError:null}):"column"===e5(n,!1)?await tc(r,{sizeError:n.error}):e.errors.push(`supabase/${r.r.name} size: ${n.error}`)}}async function tS(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r)continue;let n=(await tl(t.id,"firestore")).filter(e=>e.s?.state!=="off");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){e.errors.push(`firebase/${t.label}: ${s.error}`);continue}let{skipped:o}=await ts(e,n,async(t,a)=>{let r=await (0,e9.q)(s.data,t.r.externalId,a);r.ok?await tc(t,{authUsers:r.data,authAt:tm(e.now),authError:null}):"column"===e5(r,!1)?await tc(t,{authError:"Not readable: the service account needs firebaseauth.viewer"}):e.errors.push(`firebase/${t.r.name} users: ${r.error}`)});to(o)}}var tD=e.i(369179),tE=e.i(476866),tx=e.i(873083),tj=e.i(649297),tT=e.i(541211);let tM={github:"devops",deps:"devops",databases:"database",security:"hosting",os:"devops"};async function tO(e){let[t]=await (0,a.db)().select({hour:(0,f.max)(g.rollupsHourly.hour)}).from(g.rollupsHourly),r=(0,tj.r)(t?.hour??null,e),n=await (0,a.db)().select().from(g.checks).where((0,p.and)((0,p.gte)(g.checks.at,r),(0,p.lt)(g.checks.at,(0,tj.b)(e)))).orderBy(g.checks.at),s=new Map;for(let e of n){let t=`${e.monitorId}|${(0,tj.b)(e.at).toISOString()}`,a=s.get(t);a?a.push(e):s.set(t,[e])}for(let[e,t]of s){let[r,n]=e.split("|"),s=(0,tj.z)(t);await (0,a.db)().insert(g.rollupsHourly).values({monitorId:r,hour:new Date(n),...s}).onConflictDoUpdate({target:[g.rollupsHourly.monitorId,g.rollupsHourly.hour],set:s})}}async function tz(e){let t=await (0,tE.J)().catch(()=>tD.f);await (0,a.db)().delete(g.checks).where((0,p.lt)(g.checks.at,new Date(e.getTime()-864e5*t.checks))),await (0,a.db)().delete(g.rollupsHourly).where((0,p.lt)(g.rollupsHourly.hour,new Date(e.getTime()-864e5*t.rollupsHourly))),await (0,a.db)().delete(g.deployments).where((0,p.and)((0,p.lt)(g.deployments.createdAtProvider,new Date(e.getTime()-864e5*t.deployments)),(0,p.eq)(g.deployments.isCurrent,!1),(0,p.eq)(g.deployments.isPreviousProduction,!1))),await (0,a.db)().delete(g.events).where((0,p.lt)(g.events.at,new Date(e.getTime()-864e5*t.events))),await (0,a.db)().delete(g.alerts).where((0,p.and)((0,p.isNotNull)(g.alerts.resolvedAt),(0,p.lt)(g.alerts.resolvedAt,new Date(e.getTime()-864e5*t.alerts)))),await (0,a.db)().delete(g.collectorRuns).where((0,p.lt)(g.collectorRuns.startedAt,new Date(e.getTime()-864e5*t.collectorRuns))),await (0,a.db)().delete(g.storedLogs).where((0,p.lt)(g.storedLogs.at,new Date(e.getTime()-864e5*t.storedLogs))),await (0,a.db)().delete(g.recommendationDismissals).where((0,p.lt)(g.recommendationDismissals.dismissedAt,new Date(e.getTime()-864e5*t.recommendationDismissals)))}async function tC(){let e=new Date,[t]=await (0,a.db)().insert(g.collectorRuns).values({startedAt:e,trigger:"vercel_cron"}).returning({id:g.collectorRuns.id}),r=[],n=await (0,l.I)(),s=[["rollups",()=>tO(e)],["backup",async()=>{let t=await eB(e,e.getTime()+2e4);t&&r.push(`backup: ${t}`)}],["retention",()=>tz(e)],["sync",async()=>{let t=(await (0,a.db)().select({id:g.accounts.id,label:g.accounts.label,provider:g.accounts.provider}).from(g.accounts).where((0,p.inArray)(g.accounts.provider,eQ.I))).filter(e=>!n.has(tx.D[e.provider]??"manage"));for(let[a,n]of t.entries()){if(Date.now()>e.getTime()+25e3){r.push(`sync: ${t.length-a} account${t.length-a>1?"s":""} left for the next run, time budget used`);break}let s=await (0,eZ.k)(n.id);s.ok?(s.skippedTeams.length&&r.push(`sync ${n.provider}/${n.label}: skipped teams ${s.skippedTeams.join(", ")} (no access)`),s.overLimit&&r.push(`sync ${n.provider}/${n.label}: ${s.overLimit}`)):r.push(`sync ${n.provider}/${n.label}: ${s.error}`)}}],["github",async()=>{let t=await (0,eW.D)(Math.min(Date.now()+6e3,e.getTime()+35e3));t&&r.push(`github: ${t}`)}],["deps",async()=>{let t=await (0,eL.e)(Math.min(Date.now()+eL.o,e.getTime()+eL.R));t&&r.push(`deps: ${t}`)}],["databases",()=>tI({now:e,deadline:Math.min(Date.now()+15e3,e.getTime()+5e4),errors:r})],["keep-active",()=>(0,eJ.V)(e,Math.min(Date.now()+5e3,e.getTime()+5e4),r)],["security",async()=>{for(let t of(await (0,eY.h)((0,eX.F)(e.getTime(),Date.now()))).failed)r.push(`security ${t}`)}],..."on"===(0,c.C)()?[["os",async()=>{let e=await (0,c.W)();if(e.ok){if("unsupported"!==e.data.status){e.data.error&&r.push(`os: ${e.data.error}`);let t=e.data.updates.filter(e=>e.error).length;t&&r.push(`os: Ubuntu's data couldn't be read for ${t} update${1===t?"":"s"}`),e.data.backlog.error&&r.push(`os: ${e.data.backlog.error}`)}}else r.push(`os: ${e.error}`)}]]:[],["advisor",async()=>{await (0,eG.O)(e)}]],o=[];try{for(let[e,t]of s)if(!n.has(tM[e]))try{await t(),o.push(e)}catch(t){r.push(`${e}: ${(0,tT.safeError)(t)}`)}await (0,eH.f)([{type:"system",kind:r.length?"warn":"info",message:r.length?"Daily jobs finished with problems":"Daily jobs finished",detail:"Rollups, the monthly backup when due, retention, a sync of every account, database sizes, the Next.js security check and the Advisor",resourceId:null}])}catch(e){r.push(`events: ${(0,tT.safeError)(e)}`)}finally{h(w.t),await (0,a.db)().update(g.collectorRuns).set({finishedAt:new Date,ok:0===r.length,errorSummary:r.join("\n").slice(0,2e3)||null,durationMs:Date.now()-e.getTime(),tasks:o}).where((0,p.eq)(g.collectorRuns.id,t.id)).catch(()=>void 0)}await tN(r.length>0);let i=Date.now()-e.getTime();return{skipped:!1,ok:0===r.length,tasks:o,checks:0,durationMs:i,errors:r}}async function tN(e){let t=process.env.DAILY_HEARTBEAT_TOKEN;if(!t)return;let a=(0,eK.i)(t);if(!a)return void console.warn("daily heartbeat: DAILY_HEARTBEAT_TOKEN holds no single hb_ token; set it to the heartbeat's token");let r=await (0,eV._)(a,e?"fail":"ok",new Date).catch(e=>(console.warn("daily heartbeat: the ping couldn't be stored:",e instanceof Error?e.name:"error"),null));r?.status==="unknown"?console.warn("daily heartbeat: DAILY_HEARTBEAT_TOKEN matches no heartbeat monitor (was it regenerated?)"):r?.status==="limited"&&console.warn("daily heartbeat: the ping was rate limited")}async function tR(e,t,a=new Date){if(e.skipped||0===t.length)return e;let r=[...e.tasks],n=[...e.errors];for(let e of t)try{await e.run(a),r.push(e.name)}catch(t){n.push(`${e.name}: ${(0,tT.safeError)(t)}`)}return{...e,tasks:r,errors:n,ok:0===n.length}}let t_="collector.cpuDay";async function tq(e,t=new Date){try{var r;let n,s,o,i,l,d,[u]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,t_)).limit(1),{next:c,crossed:f}=(r=u?.value,n=t.toISOString().slice(0,10),o=(s=r&&"object"==typeof r?r:{}).day===n&&Number.isFinite(s.ms)&&Number.isFinite(s.runs)?{day:n,ms:s.ms,runs:s.runs,warned:!0===s.warned}:{day:n,ms:0,runs:0,warned:!1},i=Number.isFinite(e)&&e>0?Math.round(e):0,l={...o,ms:o.ms+i,runs:o.runs+1},(d=!o.warned&&l.ms>24e4)&&(l.warned=!0),{next:l,crossed:d});await (0,a.db)().insert(g.settings).values({key:t_,value:c}).onConflictDoUpdate({target:g.settings.key,set:{value:c,updatedAt:t}}),f&&await (0,eH.f)([{type:"system",kind:"warn",message:"Collector CPU high today",detail:`${Math.round(c.ms/1e3)} s in ${c.runs} runs, over 4 min (Vercel Hobby allows about 8 min a day). Check the cron-job.org schedule.`,resourceId:null,at:t}])}catch(e){console.warn("collector cpu count failed:",e instanceof Error?e.name:"error")}}var tP=e.i(978196),tF=e.i(234195),tU=e.i(706959),tB=e.i(451682),tG=e.i(373200),tL=e.i(736337);async function tW(e,r,n=new Map){if(!e.length)return 0;let s=await (0,a.db)().select({app:g.deployments.resourceId,id:g.deployments.externalId,source:g.deployments.source,branch:g.deployments.branch,sha:g.deployments.commitSha}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,e.map(e=>e.id)),(0,p.eq)(g.deployments.isCurrent,!0))),o=0;for(let i of e){let e,l=s.find(e=>e.app===i.id);if(!l)continue;let d=(0,tL.O)(i.meta?.productionSource),u=n.get(l.id),c={source:l.source??null,branch:l.branch??null,sha:l.sha??null};if(!(e=u?(0,tL.s)({...c,branchFrom:u.branchFrom??null,gitDirty:!0===u.gitDirty}):d?.id===l.id?{kind:d.kind,...d.ref?{ref:d.ref}:{},...d.sha?{sha:d.sha}:{}}:"git"===c.source||"cli"===c.source?(0,tL.s)(c):null)){if(d?.at&&d.id!==l.id){let e={...d};delete e.at,await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({productionSource:e})}::jsonb`}).where((0,p.eq)(g.resources.id,i.id)),o++}continue}e={...e,id:l.id};let f=!!d?.at&&r.getTime()-Date.parse(d.at)<tL.u;if((0,tL.v)(d,e)&&f)continue;let m={...e,at:r.toISOString()};await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({productionSource:m})}::jsonb`}).where((0,p.eq)(g.resources.id,i.id)),o++}return o}var tH=e.i(753535),tV=e.i(932378),tJ=e.i(313903);let tK=/not enabled/i,tY=(e,t,a={})=>({ok:!1,kind:e,error:t,...a}),tX="Vercel Web Analytics answered in a format the console doesn't recognise.",tQ=en.z.object({data:en.z.object({pageviews:ed.z.number().finite().nonnegative(),visitors:ed.z.number().finite().nonnegative()})}),tZ=en.z.object({data:es.z.array(tV.z.unknown())}),t0=en.z.object({timestamp:ei.z.string().transform((e,t)=>{let a=Date.parse(e);return Number.isNaN(a)?(t.addIssue({code:"custom",message:"bad timestamp"}),tJ.z.NEVER):a}),pageviews:ed.z.number().finite().nonnegative().nullish().catch(null)});async function t1(e,t,a,r){let n=r.since.toISOString(),s=r.until.toISOString(),o=r.fetch??fetch,i=new AbortController,l=setTimeout(()=>i.abort(new DOMException("window","TimeoutError")),r.timeoutMs??8e3),d=r.signal?AbortSignal.any([i.signal,r.signal]):i.signal,u=(0,ta.X)(d);async function c(l,c){let p=new URLSearchParams({projectId:a,teamId:t,...c,since:n,until:s});try{let t=await Promise.race([o(`https://api.vercel.com/v1/query/web-analytics/visits/${l}?${p}`,{headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:d,cache:"no-store"}),u]),a=null,r=!1;if(401===t.status||403===t.status)a=tY("auth",`Vercel rejected this credential (${t.status}).`,{status:t.status});else if(429===t.status){let e=Number(t.headers.get("Retry-After"));a=tY("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(e)&&e>0?e:60})}else if(400===t.status){let e=await Promise.race([t.text(),u]).catch(()=>"");tK.test(e)?r=!0:a=tY("transient","Vercel Web Analytics rejected the request (400).",{status:400})}else t.ok||(a=tY("transient",`Vercel Web Analytics returned an error (${t.status}).`,{status:t.status}));if(r)return{kind:"off"};if(a)return await t.body?.cancel().catch(()=>void 0),{kind:"fail",fail:a};try{return{kind:"body",body:await Promise.race([t.json(),u])}}catch(e){if(d.aborted)throw e;return{kind:"fail",fail:tY("format",tX)}}}catch{return{kind:"fail",fail:d.aborted?i.signal.aborted&&!r.signal?.aborted?tY("transient","Vercel Web Analytics didn't answer in time."):tY("transient","Reading Vercel Web Analytics was cancelled."):tY("transient","Couldn't reach Vercel Web Analytics.")}}}try{let[e,t]=await Promise.all([c("count",{}),c("aggregate",{by:"hour"})]);if("off"===e.kind||"off"===t.kind)return{ok:!0,enabled:!1};let a=[e,t].flatMap(e=>"fail"===e.kind?[e.fail]:[]),r=a.find(e=>"auth"===e.kind);if(r)return r;let n="body"===t.kind?tZ.safeParse(t.body):null,s="fail"===t.kind?t.fail:n?.success?null:tY("format",tX),o=a.find(e=>"transient"===e.kind);if(o)return o;if(s)return s;if(!n?.success)return tY("format",tX);let i="body"===e.kind?tQ.safeParse(e.body):null,l=n.data.data.flatMap(e=>{let t=t0.safeParse(e);return t.success?[t.data]:[]});if(l.length>0&&l.every(e=>null==e.pageviews))return tY("format",tX);let d=new Map;for(let e of l){let t=36e5*Math.floor(e.timestamp/36e5);d.set(t,(d.get(t)??0)+(e.pageviews??0))}let u=[...d].sort((e,t)=>e[0]-t[0]).slice(-24).map(([e,t])=>({at:new Date(e),views:t}));if(i?.success)return{ok:!0,enabled:!0,total:i.data.data.pageviews,visitors:i.data.data.visitors,hourly:u};return{ok:!0,enabled:!0,total:u.reduce((e,t)=>e+t.views,0),visitors:null,hourly:u}}finally{clearTimeout(l),i.abort()}}var t3=e.i(178233);async function t4(e,t,a){let r=await (0,tB.g)(null);if(!r.length)return;let n=new Date(36e5*Math.floor(e.getTime()/36e5)-828e5);await (0,ta.P)(r,3,async r=>{if(Date.now()+8500>t)return;let s=await t1(r.token,r.teamId,r.projectId,{since:n,until:e});if(!s.ok)return void a.push(`pageviews/${r.appName}: ${s.error}`);try{await (0,tH.r)(r.appId,{pageviews:(0,t3.Z)(s,e)},e)}catch{a.push(`pageviews/${r.appName}: couldn't save the page views`)}})}var t5=e.i(628852),t2=e.i(802641);let t6="security.afterDeploy",t8=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),t9=e=>"string"==typeof e&&e.length>0&&e.length<=100;function t7(e){let t={pending:{},checked:{}};if(!t8(e))return t;if(t8(e.pending))for(let[a,r]of Object.entries(e.pending)){if(!(0,t2.f)(a)||!t8(r)||!t9(r.id)||"string"!=typeof r.at||Number.isNaN(Date.parse(r.at)))continue;let e="number"==typeof r.attempts&&Number.isInteger(r.attempts)&&r.attempts>=0?Math.min(r.attempts,3):0;t.pending[a]={id:r.id,at:r.at,attempts:e,...!0===r.next?{next:!0}:{},...!0===r.deps?{deps:!0}:{}}}if(t8(e.checked))for(let[a,r]of Object.entries(e.checked))(0,t2.f)(a)&&t9(r)&&(t.checked[a]=r);return t}function ae(e,t){let a,r={...e.pending},n={...e.checked};for(let e of t){let t=r[e];t&&(delete r[e],delete n[e],n[e]=t.id)}return{pending:r,checked:(a=Object.entries(n)).length<=500?n:Object.fromEntries(a.slice(a.length-500))}}let at=(e,t)=>Object.entries(e.pending).filter(([,e])=>!e[t]).map(([e])=>e),aa="security.slot",ar=e=>Array.isArray(e)?e.filter(e=>"string"==typeof e&&e.length>0&&e.length<=100).slice(0,1e3):[],an=(e,t)=>[...new Set([...e,...t])].slice(0,1e3),as=e=>async()=>{let[t]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,e)).limit(1);return t?.value??null},ao=e=>async t=>{await (0,a.db)().insert(g.settings).values({key:e,value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:new Date}})},ai={read:as(t6),write:ao(t6),readSlot:as(aa),writeSlot:ao(aa),nextCheck:eY.h,depsStep:(e,t)=>(0,eL.O)(e,t)};async function al(e,t=ai){var a;let r,n=t7(await t.read()),s=(a=e.now,(r=Object.entries(n.pending).filter(([,e])=>a.getTime()-Date.parse(e.at)>216e5).map(([e])=>e)).length?ae(n,r):n),o=!e.paused.has("hosting"),i=!e.paused.has("devops"),l=o?at(s,"next"):[],d=i?at(s,"deps"):[],u=e.early?null:function(e,t){let a=e&&"object"==typeof e&&!Array.isArray(e)?e:{};if(a.slot!==t)return{slot:t,runs:0,next:[],repos:[],cut:{},nextDone:!1,depsDone:!1};let r="number"==typeof a.runs&&Number.isInteger(a.runs)&&a.runs>=0?a.runs:0,n={};if(a.cut&&"object"==typeof a.cut&&!Array.isArray(a.cut))for(let[e,t]of Object.entries(a.cut).slice(0,1e3))e.length<=100&&"number"==typeof t&&Number.isInteger(t)&&t>0&&(n[e]=Math.min(t,2));return{slot:t,runs:r,next:ar(a.next),repos:ar(a.repos),cut:n,nextDone:!0===a.nextDone,depsDone:!0===a.depsDone}}(await t.readSlot(),new Date((0,t5.G)("security",e.now)).toISOString()),c=!!u&&o&&!u.nextDone,p=!!u&&i&&!u.depsDone,f=o&&(l.length>0||c),m=i&&(d.length>0||p),h={hosting:o,devops:i,nextDone:new Set,nextStarted:new Set,depsDone:new Set},w=async()=>{let a=Math.min(Date.now()+eX.y,!u&&m?e.deadline-2*eL.d:e.deadline),r=c?[...u.next,...Object.entries(u.cut).filter(([,e])=>e>=2).map(([e])=>e)]:[],n=c?{first:l,skip:[...new Set(r)].filter(e=>!l.includes(e))}:{only:l},s=await t.nextCheck(a,n);for(let t of s.failed)e.errors.push(`security ${t}`);for(let e of s.done)h.nextDone.add(e);for(let e of l)s.listed.includes(e)||h.nextDone.add(e);for(let e of s.started)h.nextStarted.add(e);if(c){let e=new Set(s.done);for(let t of(u.next=an(u.next,s.done),s.started))e.has(t)||(u.cut[t]=Math.min((u.cut[t]??0)+1,2));u.nextDone=s.listed.every(t=>e.has(t)||(u.cut[t]??0)>=2)}},g=async()=>{let a=await t.depsStep(Math.min(Date.now()+eL.o,e.deadline),p?{marked:d,onlyMarked:!1,skip:u.repos}:{marked:d,onlyMarked:!0});for(let t of(a.problem&&e.errors.push(`security deps: ${a.problem}`),a.settled))h.depsDone.add(t);p&&(u.repos=an(u.repos,a.done),u.depsDone=a.complete)};try{u&&u.runs++,u?(m&&await g(),f&&await w()):(f&&await w(),m&&await g())}finally{let e=null;if(u)try{await t.writeSlot(u)}catch(t){e=t}try{let e=function(e,t){let a={},r=[];for(let[n,s]of Object.entries(e.pending)){let e={...s};t.hosting&&!e.next&&(t.nextDone?.has(n)?e.next=!0:t.nextStarted?.has(n)&&(e.attempts=Math.min(e.attempts+1,3))),t.devops&&!e.deps&&t.depsDone?.has(n)&&(e.deps=!0),a[n]=e,((e.next||!t.hosting)&&(e.deps||!t.devops)||e.attempts>=3)&&r.push(n)}return ae({pending:a,checked:e.checked},r)}(s,h);JSON.stringify(e)!==JSON.stringify(n)&&await t.write(e)}catch(t){e??=t}if(e)throw e}return{complete:!u||(u.nextDone||!o)&&(u.depsDone||!i)||u.runs>=20}}async function ad(e,t,a=ai){if(!e.length)return!1;let{state:r,changed:n}=function(e,t,a){let r={pending:{...e.pending},checked:{...e.checked}},n=!1;for(let e of t)(0,t2.f)(e.appId)&&t9(e.deploymentId)&&r.checked[e.appId]!==e.deploymentId&&r.pending[e.appId]?.id!==e.deploymentId&&(r.pending[e.appId]={id:e.deploymentId,at:a.toISOString(),attempts:0},n=!0);return{state:r,changed:n}}(t7(await a.read()),e,t);return n&&await a.write(r),n}var au=e.i(147100),ac=e.i(764266),ap=e.i(198552),af=e.i(27479),am=e.i(707866),ah=e.i(392710),aw=e.i(582888),ag=e.i(811539),ay=e.i(725321);async function ab(e){let t=[await t$(()=>av(e)),await t$(()=>a$(e)),await t$(()=>aA(e))].find(e=>null!==e);if(t)throw t}let ak=e=>e.toISOString();async function av(e){for(let{acc:t,credential:a}of(await ti("turso"))){if(tn(e),!a){e.errors.push(`turso/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"turso_database");if(!r.length)continue;let n=await (0,aw.u)(a,tn(e));if(!n.ok){await tf("turso",t,r,n,e);continue}let s=new Set(r.map(e=>String(e.r.meta.org??""))),o=[];for(let i of n.data.filter(e=>s.has(e.slug))){let[n,s]=await Promise.all([(0,aw.X)(a,i.slug,tn(e)),(0,aw.d)(a,i.slug,tn(e))]),l=r.filter(e=>e.r.meta.org===i.slug);if(!n.ok){for(let t of l)await tu(t,{state:"unknown",label:"Unknown",patch:{}},e.now);e.errors.push(`turso/${t.label}: ${n.error}`);continue}let d=new Map(n.data.map(e=>[e.id,e]));for(let t of l)o.push(await aI(t,d.get(t.r.externalId),i,s,e))}let i=new Set(n.data.map(e=>e.slug));for(let t of r.filter(e=>!i.has(String(e.r.meta.org??""))))o.push(await tu(t,{state:"off",label:"Organization not visible to this token",patch:{}},e.now));await tp(o)}}async function aI(e,t,a,r,n){if(!t)return tu(e,{state:"off",label:"Not found",patch:{}},n.now);let s=(0,am.h)({blockReads:t.blockReads,blockWrites:t.blockWrites,orgBlockedReads:a.blockedReads,orgBlockedWrites:a.blockedWrites}),o={org:a.slug,group:t.group,primaryRegion:t.primaryRegion,plan:a.plan,blockReads:t.blockReads,blockWrites:t.blockWrites};if(r.ok){let e=r.data.byDb.get(t.id);Object.assign(o,{rowsRead:e?.rowsRead??null,rowsWritten:e?.rowsWritten??null,storageBytes:e?.storageBytes??null,orgRowsRead:r.data.org.rowsRead,orgRowsWritten:r.data.org.rowsWritten,orgStorageBytes:r.data.org.storageBytes,orgDatabases:r.data.org.databases,usageAt:ak(n.now),usageError:null})}else"column"===e5(r,!1)?o.usageError=r.error:n.errors.push(`turso/${e.r.name} usage: ${r.error}`);return tu(e,{...s,patch:o},n.now)}async function a$(e){for(let{acc:t,credential:a}of(await ti("upstash"))){tn(e);let r=a?(0,ag.L)(a):null;if(!r){e.errors.push(`upstash/${t.label}: credential can't be read`);continue}let n=await tl(t.id,"upstash_redis");if(!n.length)continue;let s=await (0,ag.M)(r,tn(e));if(!s.ok){await tf("upstash",t,n,s,e);continue}let o=new Map(s.data.map(e=>[e.id,e])),{out:i,skipped:l}=await ts(e,n,(e,t)=>o.has(e.r.externalId)?(0,ag.Z)(r,e.r.externalId,t):Promise.resolve(null)),d=[];for(let[t,a]of n.entries()){let r=o.get(a.r.externalId);if(!r){d.push(await tu(a,{state:"off",label:"Not found",patch:{}},e.now));continue}let n=(0,am.t)(r.state),s={region:r.region,status:r.state,type:r.type},l=i[t];l?.ok?Object.assign(s,{...l.data,statsAt:ak(e.now),statsError:null}):l&&"column"===e5(l,!1)?s.statsError=l.error:l&&e.errors.push(`upstash/${a.r.name} stats: ${l.error}`),d.push(await tu(a,{...n,patch:s},e.now))}await tp(d),to(l)}}async function aA(e){let t={};for(let{acc:a,credential:r}of(await ti("cloudflare"))){if(tn(e),!r)continue;let n=await aD(a.id,r,e);if(!n.length){t[a.id]={d1:"error",analytics:null,at:ak(e.now),note:"No Cloudflare account found for this token"};continue}let s="ok",o=null;for(let t of n){let n=await (0,ah.L)(r,t,tn(e));if(!n.ok){"error"==(s="scope"===n.kind||"auth"===n.kind?"missing":"error")&&e.errors.push(`d1/${a.label}: ${n.error}`);continue}await aE(a.id,t,n.data,e.now);let i=(await tl(a.id,"d1_database")).filter(e=>e.r.meta.accountId===t);if(!i.length)continue;let l=await (0,ah.t)(r,t,(0,ah.Y)(e.now),tn(e));o=l.ok?o??"ok":"scope"===l.kind?"missing":o??"error",l.ok||"scope"===l.kind||e.errors.push(`d1/${a.label} analytics: ${l.error}`);let{out:d,skipped:u}=await ts(e,i,(e,a)=>(0,ah.m)(r,t,e.r.externalId,a)),c=new Map((l.ok?l.data:[]).map(e=>[e.databaseId,e])),p=d.map(e=>e?.ok?e.data.sizeBytes??0:0),f={accountRowsRead:l.ok?l.data.reduce((e,t)=>e+t.rowsRead,0):null,accountRowsWritten:l.ok?l.data.reduce((e,t)=>e+t.rowsWritten,0):null,accountSizeBytes:d.every(e=>e?.ok)?p.reduce((e,t)=>e+t,0):null,accountDatabases:n.data.length},m=[];for(let[t,a]of i.entries()){let r=d[t];void 0!==r&&m.push(await aS(a,r,c.get(a.r.externalId)??null,l.ok,l.ok?null:l.error,f,e))}await tp(m),to(u)}t[a.id]={d1:s,analytics:o,at:ak(e.now),note:null}}await (0,a.db)().insert(g.settings).values({key:ay.f,value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:e.now}})}async function aS(e,t,a,r,n,s,o){let i={accountId:e.r.meta.accountId??null,createdAt:e.r.meta.createdAt??null,accountDatabases:s.accountDatabases};return(t.ok?Object.assign(i,{sizeBytes:t.data.sizeBytes,numTables:t.data.numTables,readReplication:t.data.readReplication,detailsAt:ak(o.now),detailsError:null}):"scope"===t.kind?i.detailsError=t.error:o.errors.push(`d1/${e.r.name}: ${t.error}`),r?Object.assign(i,{rowsRead:a?.rowsRead??0,rowsWritten:a?.rowsWritten??0,readQueries:a?.readQueries??0,writeQueries:a?.writeQueries??0,accountRowsRead:s.accountRowsRead,accountRowsWritten:s.accountRowsWritten,usageDay:(0,ah.Y)(o.now),usageAt:ak(o.now),usageError:null}):i.usageError=n,null!==s.accountSizeBytes&&(i.accountSizeBytes=s.accountSizeBytes),t.ok||"transient"!==t.kind)?tu(e,{...(0,am.c)(r?s:{accountRowsRead:null,accountRowsWritten:null}),patch:i},o.now):tu(e,{state:"unknown",label:"Unknown",patch:{}},o.now)}async function aD(e,t,r){let n=new Set,s=await (0,ah.N)(t,tn(r));if(s.ok)for(let e of s.data)n.add(e.id);for(let t of(await (0,a.db)().select({meta:g.resources.meta}).from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,"zone"),(0,p.isNull)(g.resources.goneAt))).limit(200)))"string"==typeof t.meta.accountId&&/^[0-9a-f]{32}$/i.test(t.meta.accountId)&&n.add(t.meta.accountId);return[...n].slice(0,5)}async function aE(e,t,r,n){let s=(await (0,a.db)().select({id:g.resources.id,externalId:g.resources.externalId,meta:g.resources.meta,goneAt:g.resources.goneAt}).from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,"d1_database")))).filter(e=>e.meta.accountId===t),o=new Map(s.map(e=>[e.externalId,e])),i=new Set(r.map(e=>e.uuid));await (0,a.db)().transaction(async a=>{for(let s of r){let r={accountId:t,createdAt:s.createdAt},i=o.get(s.uuid);i?await a.update(g.resources).set({name:s.name,meta:r,lastSeenAt:n,goneAt:null,updatedAt:n}).where((0,p.eq)(g.resources.id,i.id)):await a.insert(g.resources).values({accountId:e,kind:"d1_database",externalId:s.uuid,name:s.name,meta:r,monitored:!0,lastSeenAt:n}).onConflictDoNothing({target:[g.resources.accountId,g.resources.kind,g.resources.externalId]})}let l=s.filter(e=>!i.has(e.externalId)&&!e.goneAt).map(e=>e.id);l.length&&await a.update(g.resources).set({goneAt:n,updatedAt:n}).where((0,p.inArray)(g.resources.id,l))})}async function ax(e=new Date){let n=(0,eM.randomUUID)(),s=new Date(e.getTime()+t5.d).toISOString(),o=await (0,a.db)().execute(t.sql`
13
+ `}(w),(0,b.gzipSync)(Buffer.from(o,"utf8"),{level:9})),S=p(await ej(f,{name:`watchbell-${t}-raw.csv.gz`,mimeType:"application/gzip",folderId:h,content:y,fileId:i.csvFileId},u));await d({csvFileId:S.id}),await Z(t,{status:a?"partial":"ok",sizeBytes:S.size,error:null,finishedAt:new Date});let D=a?null:await eU(f,r,e.deadline,u);return{ok:!0,month:t,retention:D,message:`${j(t)}${a?" so far":""} saved to Google Drive.`}}catch(n){let e=n instanceof eP?n:new eP("failed","The backup failed. The next daily run tries again.");n instanceof eP||console.error("backup failed:",n instanceof Error?n.name:"unknown");let r=a&&"partial"===l?"partial":"error";return await Z(t,{status:r,error:e.message.slice(0,500),finishedAt:new Date}).catch(()=>void 0),{ok:!1,month:t,kind:e.kind,error:e.message}}}async function eU(e,t,a,r){let n=function(e,t){let a=D(t),r=e.filter(e=>"ok"===e.status&&e.month<a).map(e=>e.month).sort().reverse().slice(0,3);if(r.length<3)return[];let n=r[r.length-1];return e.filter(e=>!e.trashedAt&&e.month<n&&(e.sheetFileId||e.csvFileId))}(await X(),t),s=[];for(let o of n){if(Date.now()>a)break;let n=!0;for(let t of[o.sheetFileId,o.csvFileId])t&&((await eT(e,t,r)).ok||(n=!1));n&&(await Z(o.month,{status:o.status,trashedAt:t}),s.push(j(o.month)))}return s.length?`Moved to Drive trash: ${s.join(", ")}.`:null}async function eB(e,t,a={}){let r=await K();if(!r||"error"===r.status&&r.lastError?.startsWith("invalid_grant"))return null;let n=function(e,t){let a=x(D(t)),r=new Map(e.map(e=>[e.month,e.status]));if("ok"!==r.get(a))return a;let n=a;for(let e=1;e<3;e++)if(n=x(n),"error"===r.get(n))return n;return null}(await X(),e);if(!n)return null;let s=await eF({month:n,partial:!1,now:e,deadline:t,...a});return s.ok?null:`${j(n)}: ${s.error}`}var eG=e.i(455891),eL=e.i(889234),eW=e.i(328586),eH=e.i(333407),eV=e.i(459702),eJ=e.i(200346),eK=e.i(368230),eY=e.i(584820),eX=e.i(902509),eQ=e.i(668141),eZ=e.i(242960),e0=e.i(112515),e1=e.i(185890);function e3(e){if(!e)return null;if("unknown"!==e.state)return e.state;let t=e.data?.lastGoodState;return"string"==typeof t&&e1.f.includes(t)?t:null}let e4={turso_database:"Turso database",upstash_redis:"Upstash Redis",d1_database:"D1 database"};function e5(e,t){return"auth"===e.kind?"auth":"scope"===e.kind?t?"auth":"column":"missing"===e.kind?t?"unknown":"column":"unknown"}var e6=e.i(35048),e2=e.i(516464),e8=e.i(88316),e9=e.i(437122),e7=e.i(319718),te=e.i(941536),tt=e.i(686454),ta=e.i(122603);let tr="skipped the rest, time budget used";function tn(e){let t=e.deadline-Date.now()-500;if(t<250)throw Error(tr);return{timeoutMs:Math.min(5e3,t)}}async function ts(e,t,a){let r=!1;return{out:await (0,ta.P)(t,3,async t=>{let n;try{n=tn(e)}catch{r=!0;return}return a(t,n)}),skipped:r}}function to(e){if(e)throw Error(tr)}async function ti(e){let t=await (0,a.db)().select().from(g.accounts).where((0,p.and)((0,p.eq)(g.accounts.provider,e),(0,p.eq)(g.accounts.status,"ok"))),r=(0,L.serverEnv)().OPS_ENCRYPTION_KEY;return t.map(e=>({acc:e,credential:(0,B.V)({ciphertext:e.credentialCiphertext,iv:e.credentialIv},r)}))}function tl(e,t){return(0,a.db)().select({r:g.resources,s:g.snapshots}).from(g.resources).leftJoin(g.snapshots,(0,p.eq)(g.snapshots.resourceId,g.resources.id)).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,t),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt))).limit(100)}let td=e=>t.sql`${g.snapshots.data} || ${JSON.stringify(e)}::jsonb`;async function tu(e,t,r){let n=e3(e.s?{state:e.s.state,data:e.s.data}:null),s="unknown"===t.state,o=s?n?{lastGoodState:n}:{}:{...t.patch,lastGoodState:t.state},i=!s&&n!==t.state;return await (0,a.db)().insert(g.snapshots).values({resourceId:e.r.id,state:t.state,data:o,collectedAt:r,stateSince:r}).onConflictDoUpdate({target:g.snapshots.resourceId,set:{state:t.state,data:td(o),...s?{}:{collectedAt:r},...i?{stateSince:r}:{}}}),s?null:function(e){let{prev:t,next:a}=e;if(null===t||"unknown"===t||"unknown"===a||t===a)return null;let r={resourceId:e.resourceId,type:"database",at:e.at};if("supabase_project"===e.kind)return"paused"===a?{...r,reason:"DatabasePaused",kind:"paused",message:"Supabase project paused",detail:"Status changed to INACTIVE"}:"ok"===a?{...r,reason:"DatabaseRestored",kind:"ok",message:"Supabase project active again",detail:"Status changed to ACTIVE_HEALTHY"}:"warn"===a?{...r,reason:"DatabaseUnhealthy",kind:"warn",message:"Supabase project unhealthy",detail:e.label}:"err"===a?{...r,reason:"DatabaseFailed",kind:"err",message:`Supabase project: ${e.label.toLowerCase()}`,detail:e.label}:null;if("neon_project"===e.kind)return"err"===a?{...r,reason:"NeonSuspended",kind:"err",message:"Neon compute suspended",detail:e.label}:"err"===t&&("ok"===a||"idle"===a)?{...r,reason:"NeonAvailable",kind:"ok",message:"Neon compute available again",detail:e.label}:null;let n=e4[e.kind];if(n)return"err"===a?{...r,reason:"DatabaseFailed",kind:"err",message:`${n}: ${e.label.toLowerCase()}`,detail:e.label}:"off"===a?{...r,reason:"DatabaseMissing",kind:"off",message:`${n} missing`,detail:e.label}:"ok"===a&&("err"===t||"off"===t)?{...r,reason:"DatabaseRestored",kind:"ok",message:`${n} available again`,detail:e.label}:null;if("err"===a){let t="Daily quota used up"===e.label;return{...r,reason:t?"FirestoreQuotaUsedUp":"FirestoreUnreachable",kind:"err",message:t?"Firestore daily quota used up":"Firestore not reachable",detail:e.label}}return"off"===a?{...r,reason:"FirestoreMissing",kind:"off",message:"Firestore database missing",detail:e.label}:"ok"===a&&("err"===t||"off"===t)?{...r,reason:"FirestoreReachable",kind:"ok",message:"Firestore reachable again",detail:e.label}:null}({kind:e.r.kind,resourceId:e.r.id,prev:n,next:t.state,label:t.label,at:r})}async function tc(e,t){await (0,a.db)().update(g.snapshots).set({data:td(t)}).where((0,p.eq)(g.snapshots.resourceId,e.r.id))}let tp=e=>(0,eH.f)(e);async function tf(e,t,r,n,s){if("auth"===e5(n,!0)){let e=(0,e0.E)({ok:!1,kind:"auth",error:n.error});e&&await (0,a.db)().update(g.accounts).set({...e,updatedAt:s.now}).where((0,p.eq)(g.accounts.id,t.id))}for(let e of r)await tu(e,{state:"unknown",label:"Unknown",patch:{}},s.now);s.errors.push(`${e}/${t.label}: ${n.error}`)}let tm=e=>e.toISOString();async function th(e){return e.length?new Set((await (0,a.db)().select({app:g.links.fromResourceId,state:g.snapshots.state,data:g.snapshots.data}).from(g.links).innerJoin(g.resources,(0,p.eq)(g.resources.id,g.links.toResourceId)).innerJoin(g.snapshots,(0,p.eq)(g.snapshots.resourceId,g.resources.id)).where((0,p.and)((0,p.eq)(g.links.kind,"uses_db"),(0,p.inArray)(g.links.fromResourceId,e),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)))).filter(e=>"paused"===e.state||"unknown"===e.state&&"paused"===e.data.lastGoodState).map(e=>e.app)):new Set}async function tw(e){if(!e.protectOnly||await (0,eJ.g)())for(let{acc:t,credential:a}of(await ti("supabase"))){if(tn(e),!a){e.errors.push(`supabase/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"supabase_project");if(!r.length)continue;let n=await (0,tt.W)(a,tn(e));if(!n.ok){e.protectOnly?e.errors.push(`supabase/${t.label}: ${n.error}`):await tf("supabase",t,r,n,e);continue}let s=new Map(n.data.map(e=>[e.ref,e])),o=[];for(let t of e.protectOnly?[]:r){let a=s.get(t.r.externalId);if(!a){o.push(await tu(t,{state:"off",label:"Not found",patch:{status:"REMOVED"}},e.now));continue}let r=(0,e8.P)(a.status),n=e3(t.s?{state:t.s.state,data:t.s.data}:null),i={status:a.status,region:a.region,pgVersion:a.pgVersion,orgSlug:a.orgSlug};"paused"===r.state&&"paused"!==n&&(i.pausedBeforeSeen=null===n),o.push(await tu(t,{state:r.state,label:r.label,patch:i},e.now))}await tp(o);let i=new Map(r.map(e=>[e.r.externalId,e.r.id])),l=n.data.map(e=>({resourceId:i.get(e.ref)??null,accountId:t.id,status:e.status,orgSlug:e.orgSlug}));await (0,eJ.z)(e.now,l,e.deadline).catch(()=>{console.warn("auto-restore failed"),e.errors.push("auto-restore failed")})}}async function tg(e){for(let{acc:t,credential:a}of(await ti("supabase"))){if(tn(e),!a)continue;let r=await tl(t.id,"supabase_project");if(!r.length)continue;let n=new Map(r.map(e=>[e.r.id,(0,G.k)(G.B,e.s?.data)])),s=new Map;for(let r of new Set([...n.values()].map(e=>e.orgSlug).filter(e=>!!e))){let n=await (0,tt.K)(a,r,tn(e));s.set(r,n.ok&&null!==n.data?"free"===n.data:null),n.ok||"scope"===n.kind||e.errors.push(`supabase/${t.label} plan: ${n.error}`)}let{skipped:o}=await ts(e,r,async(t,r)=>{let o=n.get(t.r.id),i={freeOrg:o.orgSlug?s.get(o.orgSlug)??null:null};if((o.status??"").startsWith("ACTIVE_")){let[n,s]=await Promise.all([(0,tt.F)(a,t.r.externalId,r),(0,tt.Z)(a,t.r.externalId,r)]);n.ok?Object.assign(i,{health:n.data.map(({name:e,status:t})=>({name:e,status:t})),healthAt:tm(e.now),healthError:null}):"column"===e5(n,!1)?i.healthError=n.error:e.errors.push(`supabase/${t.r.name} health: ${n.error}`),s.ok?Object.assign(i,{lastTrafficAt:(0,e8.H)(s.data)?.toISOString()??null,trafficAt:tm(e.now),trafficError:null}):"column"===e5(s,!1)?i.trafficError=s.error:e.errors.push(`supabase/${t.r.name} traffic: ${s.error}`)}await tc(t,i)});to(o)}}async function ty(e){for(let{acc:t,credential:a}of(await ti("neon"))){if(tn(e),!a){e.errors.push(`neon/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"neon_project");if(!r.length)continue;let{out:n,skipped:s}=await ts(e,r,(e,t)=>Promise.all([(0,te.Z)(a,e.r.externalId,t),(0,te.k)(a,e.r.externalId,t),(0,te.e)(a,e.r.externalId,t)])),o=n.flat().find(e=>void 0!==e&&!e.ok&&"auth"===e.kind);if(o){await tf("neon",t,r,o,e);continue}let i=[];for(let[t,a]of r.entries()){let r=n[t];if(!r)continue;let[s,o,l]=r;if(!s.ok||!o.ok||!l.ok){let t=[s,o,l].find(e=>!e.ok);"missing"===t.kind?i.push(await tu(a,{state:"off",label:"Not found",patch:{}},e.now)):(await tu(a,{state:"unknown",label:"Unknown",patch:{}},e.now),e.errors.push(`neon/${a.r.name}: ${t.error}`));continue}let d=(0,e2.p)({endpoints:o.data,computeSeconds:s.data.computeSeconds});i.push(await tu(a,{state:d.state,label:d.label,patch:{region:s.data.region,pgVersion:s.data.pgVersion,computeSeconds:s.data.computeSeconds,transferBytes:s.data.transferBytes,activeSeconds:s.data.activeSeconds,periodStart:s.data.periodStart,periodEnd:s.data.periodEnd,endpoints:o.data,branches:l.data}},e.now))}await tp(i),to(s)}}let tb=e=>e.ok?{latencyMs:e.data.latencyMs,pingError:null,pingReason:null,pingKind:null}:{pingError:e.error,pingReason:e.reason??null,pingKind:e.kind};async function tk(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r){e.errors.push(`firebase/${t.label}: credential can't be read`);continue}let n=await tl(t.id,"firestore");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){await tf("firebase",t,n,s,e);continue}let{out:o,skipped:i}=await ts(e,n,(e,t)=>(0,e9.G)(s.data,e.r.externalId,t)),l=[];for(let[t,a]of n.entries()){let r=o[t];if(!r)continue;let n=(0,e6.g)(r);"unknown"!==n.state||r.ok||e.errors.push(`firebase/${a.r.name}: ${r.error}`),l.push(await tu(a,{...n,patch:tb(r)},e.now))}await tp(l),to(i)}}async function tv(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r)continue;let n=(await tl(t.id,"firestore")).filter(e=>e.s?.state!=="off");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){e.errors.push(`firebase/${t.label}: ${s.error}`);continue}let o=(0,e6.a)(e.now),{skipped:i}=await ts(e,n,async(t,a)=>{let r=await (0,e9.W)(s.data,t.r.externalId,o,e.now,a);r.ok?await tc(t,{...r.data,opsAt:tm(e.now),opsError:null}):"column"===e5(r,!1)?await tc(t,{reads:null,writes:null,deletes:null,opsAt:tm(e.now),opsError:/requires billing/i.test(r.message??"")?"Not available on Spark: Firestore usage needs billing (Blaze plan)":"SERVICE_DISABLED"===r.reason?"Not readable: the Cloud Monitoring API is off in this project":"Not readable: the service account needs monitoring.viewer"}):e.errors.push(`firebase/${t.r.name} usage: ${r.error}`)});to(i)}}async function tI(e){let t=Date.now()+2*Math.max(0,e.deadline-Date.now())/3,a=await t$(()=>tA({...e,deadline:t})),r=await t$(()=>tS(e));if(a)throw a;if(r)throw r}async function t$(e){try{return await e(),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function tA(e){for(let{acc:t,credential:a}of(await ti("supabase")))if(tn(e),a)for(let r of(await tl(t.id,"supabase_project"))){let t=(0,G.k)(G.B,r.s?.data);if(!(0,e8.z)({status:t.status??"",lastTrafficAt:t.lastTrafficAt?new Date(t.lastTrafficAt):null,sizeAt:t.sizeAt?new Date(t.sizeAt):null,now:e.now}))continue;let n=await (0,tt.r)(a,r.r.externalId,tn(e));n.ok?await tc(r,{sizeBytes:n.data,sizeAt:tm(e.now),sizeError:null}):"column"===e5(n,!1)?await tc(r,{sizeError:n.error}):e.errors.push(`supabase/${r.r.name} size: ${n.error}`)}}async function tS(e){for(let{acc:t,credential:a}of(await ti("firebase"))){tn(e);let r=a?(0,e7.p)(a):null;if(!r)continue;let n=(await tl(t.id,"firestore")).filter(e=>e.s?.state!=="off");if(!n.length)continue;let s=await (0,e7.X)(r,tn(e));if(!s.ok){e.errors.push(`firebase/${t.label}: ${s.error}`);continue}let{skipped:o}=await ts(e,n,async(t,a)=>{let r=await (0,e9.q)(s.data,t.r.externalId,a);r.ok?await tc(t,{authUsers:r.data,authAt:tm(e.now),authError:null}):"column"===e5(r,!1)?await tc(t,{authError:"Not readable: the service account needs firebaseauth.viewer"}):e.errors.push(`firebase/${t.r.name} users: ${r.error}`)});to(o)}}var tD=e.i(369179),tE=e.i(476866),tx=e.i(873083),tj=e.i(649297),tT=e.i(541211);let tM={github:"devops",deps:"devops",databases:"database",security:"hosting",os:"devops"};async function tO(e){let[t]=await (0,a.db)().select({hour:(0,f.max)(g.rollupsHourly.hour)}).from(g.rollupsHourly),r=(0,tj.r)(t?.hour??null,e),n=await (0,a.db)().select().from(g.checks).where((0,p.and)((0,p.gte)(g.checks.at,r),(0,p.lt)(g.checks.at,(0,tj.b)(e)))).orderBy(g.checks.at),s=new Map;for(let e of n){let t=`${e.monitorId}|${(0,tj.b)(e.at).toISOString()}`,a=s.get(t);a?a.push(e):s.set(t,[e])}for(let[e,t]of s){let[r,n]=e.split("|"),s=(0,tj.z)(t);await (0,a.db)().insert(g.rollupsHourly).values({monitorId:r,hour:new Date(n),...s}).onConflictDoUpdate({target:[g.rollupsHourly.monitorId,g.rollupsHourly.hour],set:s})}}async function tz(e){let t=await (0,tE.J)().catch(()=>tD.f);await (0,a.db)().delete(g.checks).where((0,p.lt)(g.checks.at,new Date(e.getTime()-864e5*t.checks))),await (0,a.db)().delete(g.rollupsHourly).where((0,p.lt)(g.rollupsHourly.hour,new Date(e.getTime()-864e5*t.rollupsHourly))),await (0,a.db)().delete(g.deployments).where((0,p.and)((0,p.lt)(g.deployments.createdAtProvider,new Date(e.getTime()-864e5*t.deployments)),(0,p.eq)(g.deployments.isCurrent,!1),(0,p.eq)(g.deployments.isPreviousProduction,!1))),await (0,a.db)().delete(g.events).where((0,p.lt)(g.events.at,new Date(e.getTime()-864e5*t.events))),await (0,a.db)().delete(g.alerts).where((0,p.and)((0,p.isNotNull)(g.alerts.resolvedAt),(0,p.lt)(g.alerts.resolvedAt,new Date(e.getTime()-864e5*t.alerts)))),await (0,a.db)().delete(g.collectorRuns).where((0,p.lt)(g.collectorRuns.startedAt,new Date(e.getTime()-864e5*t.collectorRuns))),await (0,a.db)().delete(g.storedLogs).where((0,p.lt)(g.storedLogs.at,new Date(e.getTime()-864e5*t.storedLogs))),await (0,a.db)().delete(g.recommendationDismissals).where((0,p.lt)(g.recommendationDismissals.dismissedAt,new Date(e.getTime()-864e5*t.recommendationDismissals)))}async function tC(){let e=new Date,[t]=await (0,a.db)().insert(g.collectorRuns).values({startedAt:e,trigger:"vercel_cron"}).returning({id:g.collectorRuns.id}),r=[],n=await (0,l.I)(),s=[["rollups",()=>tO(e)],["backup",async()=>{let t=await eB(e,e.getTime()+2e4);t&&r.push(`backup: ${t}`)}],["retention",()=>tz(e)],["sync",async()=>{let t=(await (0,a.db)().select({id:g.accounts.id,label:g.accounts.label,provider:g.accounts.provider}).from(g.accounts).where((0,p.inArray)(g.accounts.provider,eQ.I))).filter(e=>!n.has(tx.D[e.provider]??"manage"));for(let[a,n]of t.entries()){if(Date.now()>e.getTime()+25e3){r.push(`sync: ${t.length-a} account${t.length-a>1?"s":""} left for the next run, time budget used`);break}let s=await (0,eZ.k)(n.id);s.ok?(s.skippedTeams.length&&r.push(`sync ${n.provider}/${n.label}: skipped teams ${s.skippedTeams.join(", ")} (no access)`),s.overLimit&&r.push(`sync ${n.provider}/${n.label}: ${s.overLimit}`)):r.push(`sync ${n.provider}/${n.label}: ${s.error}`)}}],["github",async()=>{let t=await (0,eW.D)(Math.min(Date.now()+6e3,e.getTime()+35e3));t&&r.push(`github: ${t}`)}],["deps",async()=>{let t=await (0,eL.e)(Math.min(Date.now()+eL.o,e.getTime()+eL.R));t&&r.push(`deps: ${t}`)}],["databases",()=>tI({now:e,deadline:Math.min(Date.now()+15e3,e.getTime()+5e4),errors:r})],["keep-active",()=>(0,eJ.V)(e,Math.min(Date.now()+5e3,e.getTime()+5e4),r)],["security",async()=>{for(let t of(await (0,eY.h)((0,eX.F)(e.getTime(),Date.now()))).failed)r.push(`security ${t}`)}],..."on"===(0,c.C)()?[["os",async()=>{let e=await (0,c.W)();if(e.ok){if("unsupported"!==e.data.status){e.data.error&&r.push(`os: ${e.data.error}`);let t=e.data.updates.filter(e=>e.error).length;t&&r.push(`os: Ubuntu's data couldn't be read for ${t} update${1===t?"":"s"}`),e.data.backlog.error&&r.push(`os: ${e.data.backlog.error}`)}}else r.push(`os: ${e.error}`)}]]:[],["advisor",async()=>{await (0,eG.O)(e)}]],o=[];try{for(let[e,t]of s)if(!n.has(tM[e]))try{await t(),o.push(e)}catch(t){r.push(`${e}: ${(0,tT.safeError)(t)}`)}await (0,eH.f)([{type:"system",kind:r.length?"warn":"info",message:r.length?"Daily jobs finished with problems":"Daily jobs finished",detail:"Rollups, the monthly backup when due, retention, a sync of every account, database sizes, the Next.js security check and the Advisor",resourceId:null}])}catch(e){r.push(`events: ${(0,tT.safeError)(e)}`)}finally{h(w.t),await (0,a.db)().update(g.collectorRuns).set({finishedAt:new Date,ok:0===r.length,errorSummary:r.join("\n").slice(0,2e3)||null,durationMs:Date.now()-e.getTime(),tasks:o}).where((0,p.eq)(g.collectorRuns.id,t.id)).catch(()=>void 0)}await tN(r.length>0);let i=Date.now()-e.getTime();return{skipped:!1,ok:0===r.length,tasks:o,checks:0,durationMs:i,errors:r}}async function tN(e){let t=process.env.DAILY_HEARTBEAT_TOKEN;if(!t)return;let a=(0,eK.i)(t);if(!a)return void console.warn("daily heartbeat: DAILY_HEARTBEAT_TOKEN holds no single hb_ token; set it to the heartbeat's token");let r=await (0,eV._)(a,e?"fail":"ok",new Date).catch(e=>(console.warn("daily heartbeat: the ping couldn't be stored:",e instanceof Error?e.name:"error"),null));r?.status==="unknown"?console.warn("daily heartbeat: DAILY_HEARTBEAT_TOKEN matches no heartbeat monitor (was it regenerated?)"):r?.status==="limited"&&console.warn("daily heartbeat: the ping was rate limited")}async function tR(e,t,a=new Date){if(e.skipped||0===t.length)return e;let r=[...e.tasks],n=[...e.errors];for(let e of t)try{await e.run(a),r.push(e.name)}catch(t){n.push(`${e.name}: ${(0,tT.safeError)(t)}`)}return{...e,tasks:r,errors:n,ok:0===n.length}}let t_="collector.cpuDay";async function tq(e,t=new Date){try{var r;let n,s,o,i,l,d,[u]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,t_)).limit(1),{next:c,crossed:f}=(r=u?.value,n=t.toISOString().slice(0,10),o=(s=r&&"object"==typeof r?r:{}).day===n&&Number.isFinite(s.ms)&&Number.isFinite(s.runs)?{day:n,ms:s.ms,runs:s.runs,warned:!0===s.warned}:{day:n,ms:0,runs:0,warned:!1},i=Number.isFinite(e)&&e>0?Math.round(e):0,l={...o,ms:o.ms+i,runs:o.runs+1},(d=!o.warned&&l.ms>24e4)&&(l.warned=!0),{next:l,crossed:d});await (0,a.db)().insert(g.settings).values({key:t_,value:c}).onConflictDoUpdate({target:g.settings.key,set:{value:c,updatedAt:t}}),f&&await (0,eH.f)([{type:"system",kind:"warn",message:"Collector CPU high today",detail:`${Math.round(c.ms/1e3)} s in ${c.runs} runs, over 4 min (Vercel Hobby allows about 8 min a day). Check the cron-job.org schedule.`,resourceId:null,at:t}])}catch(e){console.warn("collector cpu count failed:",e instanceof Error?e.name:"error")}}var tP=e.i(978196),tF=e.i(234195),tU=e.i(706959),tB=e.i(451682),tG=e.i(373200),tL=e.i(736337);async function tW(e,r,n=new Map){if(!e.length)return 0;let s=await (0,a.db)().select({app:g.deployments.resourceId,id:g.deployments.externalId,source:g.deployments.source,branch:g.deployments.branch,sha:g.deployments.commitSha}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,e.map(e=>e.id)),(0,p.eq)(g.deployments.isCurrent,!0))),o=0;for(let i of e){let e,l=s.find(e=>e.app===i.id);if(!l)continue;let d=(0,tL.O)(i.meta?.productionSource),u=n.get(l.id),c={source:l.source??null,branch:l.branch??null,sha:l.sha??null};if(!(e=u?(0,tL.s)({...c,branchFrom:u.branchFrom??null,gitDirty:!0===u.gitDirty}):d?.id===l.id?{kind:d.kind,...d.ref?{ref:d.ref}:{},...d.sha?{sha:d.sha}:{}}:"git"===c.source||"cli"===c.source?(0,tL.s)(c):null)){if(d?.at&&d.id!==l.id){let e={...d};delete e.at,await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({productionSource:e})}::jsonb`}).where((0,p.eq)(g.resources.id,i.id)),o++}continue}e={...e,id:l.id};let f=!!d?.at&&r.getTime()-Date.parse(d.at)<tL.u;if((0,tL.v)(d,e)&&f)continue;let m={...e,at:r.toISOString()};await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({productionSource:m})}::jsonb`}).where((0,p.eq)(g.resources.id,i.id)),o++}return o}var tH=e.i(753535),tV=e.i(932378),tJ=e.i(313903);let tK=/not enabled/i,tY=(e,t,a={})=>({ok:!1,kind:e,error:t,...a}),tX="Vercel Web Analytics answered in a format the console doesn't recognise.",tQ=en.z.object({data:en.z.object({pageviews:ed.z.number().finite().nonnegative(),visitors:ed.z.number().finite().nonnegative()})}),tZ=en.z.object({data:es.z.array(tV.z.unknown())}),t0=en.z.object({timestamp:ei.z.string().transform((e,t)=>{let a=Date.parse(e);return Number.isNaN(a)?(t.addIssue({code:"custom",message:"bad timestamp"}),tJ.z.NEVER):a}),pageviews:ed.z.number().finite().nonnegative().nullish().catch(null)});async function t1(e,t,a,r){let n=r.since.toISOString(),s=r.until.toISOString(),o=r.fetch??fetch,i=new AbortController,l=setTimeout(()=>i.abort(new DOMException("window","TimeoutError")),r.timeoutMs??8e3),d=r.signal?AbortSignal.any([i.signal,r.signal]):i.signal,u=(0,ta.X)(d);async function c(l,c){let p=new URLSearchParams({projectId:a,teamId:t,...c,since:n,until:s});try{let t=await Promise.race([o(`https://api.vercel.com/v1/query/web-analytics/visits/${l}?${p}`,{headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:d,cache:"no-store"}),u]),a=null,r=!1;if(401===t.status||403===t.status)a=tY("auth",`Vercel rejected this credential (${t.status}).`,{status:t.status});else if(429===t.status){let e=Number(t.headers.get("Retry-After"));a=tY("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(e)&&e>0?e:60})}else if(400===t.status){let e=await Promise.race([t.text(),u]).catch(()=>"");tK.test(e)?r=!0:a=tY("transient","Vercel Web Analytics rejected the request (400).",{status:400})}else t.ok||(a=tY("transient",`Vercel Web Analytics returned an error (${t.status}).`,{status:t.status}));if(r)return{kind:"off"};if(a)return await t.body?.cancel().catch(()=>void 0),{kind:"fail",fail:a};try{return{kind:"body",body:await Promise.race([t.json(),u])}}catch(e){if(d.aborted)throw e;return{kind:"fail",fail:tY("format",tX)}}}catch{return{kind:"fail",fail:d.aborted?i.signal.aborted&&!r.signal?.aborted?tY("transient","Vercel Web Analytics didn't answer in time."):tY("transient","Reading Vercel Web Analytics was cancelled."):tY("transient","Couldn't reach Vercel Web Analytics.")}}}try{let[e,t]=await Promise.all([c("count",{}),c("aggregate",{by:"hour"})]);if("off"===e.kind||"off"===t.kind)return{ok:!0,enabled:!1};let a=[e,t].flatMap(e=>"fail"===e.kind?[e.fail]:[]),r=a.find(e=>"auth"===e.kind);if(r)return r;let n="body"===t.kind?tZ.safeParse(t.body):null,s="fail"===t.kind?t.fail:n?.success?null:tY("format",tX),o=a.find(e=>"transient"===e.kind);if(o)return o;if(s)return s;if(!n?.success)return tY("format",tX);let i="body"===e.kind?tQ.safeParse(e.body):null,l=n.data.data.flatMap(e=>{let t=t0.safeParse(e);return t.success?[t.data]:[]});if(l.length>0&&l.every(e=>null==e.pageviews))return tY("format",tX);let d=new Map;for(let e of l){let t=36e5*Math.floor(e.timestamp/36e5);d.set(t,(d.get(t)??0)+(e.pageviews??0))}let u=[...d].sort((e,t)=>e[0]-t[0]).slice(-24).map(([e,t])=>({at:new Date(e),views:t}));if(i?.success)return{ok:!0,enabled:!0,total:i.data.data.pageviews,visitors:i.data.data.visitors,hourly:u};return{ok:!0,enabled:!0,total:u.reduce((e,t)=>e+t.views,0),visitors:null,hourly:u}}finally{clearTimeout(l),i.abort()}}var t3=e.i(178233);async function t4(e,t,a){let r=await (0,tB.g)(null);if(!r.length)return;let n=new Date(36e5*Math.floor(e.getTime()/36e5)-828e5);await (0,ta.P)(r,3,async r=>{if(Date.now()+8500>t)return;let s=await t1(r.token,r.teamId,r.projectId,{since:n,until:e});if(!s.ok)return void a.push(`pageviews/${r.appName}: ${s.error}`);try{await (0,tH.r)(r.appId,{pageviews:(0,t3.Z)(s,e)},e)}catch{a.push(`pageviews/${r.appName}: couldn't save the page views`)}})}var t5=e.i(628852),t6=e.i(802641);let t2="security.afterDeploy",t8=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),t9=e=>"string"==typeof e&&e.length>0&&e.length<=100;function t7(e){let t={pending:{},checked:{}};if(!t8(e))return t;if(t8(e.pending))for(let[a,r]of Object.entries(e.pending)){if(!(0,t6.f)(a)||!t8(r)||!t9(r.id)||"string"!=typeof r.at||Number.isNaN(Date.parse(r.at)))continue;let e="number"==typeof r.attempts&&Number.isInteger(r.attempts)&&r.attempts>=0?Math.min(r.attempts,3):0;t.pending[a]={id:r.id,at:r.at,attempts:e,...!0===r.next?{next:!0}:{},...!0===r.deps?{deps:!0}:{}}}if(t8(e.checked))for(let[a,r]of Object.entries(e.checked))(0,t6.f)(a)&&t9(r)&&(t.checked[a]=r);return t}function ae(e,t){let a,r={...e.pending},n={...e.checked};for(let e of t){let t=r[e];t&&(delete r[e],delete n[e],n[e]=t.id)}return{pending:r,checked:(a=Object.entries(n)).length<=500?n:Object.fromEntries(a.slice(a.length-500))}}let at=(e,t)=>Object.entries(e.pending).filter(([,e])=>!e[t]).map(([e])=>e),aa="security.slot",ar=e=>Array.isArray(e)?e.filter(e=>"string"==typeof e&&e.length>0&&e.length<=100).slice(0,1e3):[],an=(e,t)=>[...new Set([...e,...t])].slice(0,1e3),as=e=>async()=>{let[t]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,e)).limit(1);return t?.value??null},ao=e=>async t=>{await (0,a.db)().insert(g.settings).values({key:e,value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:new Date}})},ai={read:as(t2),write:ao(t2),readSlot:as(aa),writeSlot:ao(aa),nextCheck:eY.h,depsStep:(e,t)=>(0,eL.O)(e,t)};async function al(e,t=ai){var a;let r,n=t7(await t.read()),s=(a=e.now,(r=Object.entries(n.pending).filter(([,e])=>a.getTime()-Date.parse(e.at)>216e5).map(([e])=>e)).length?ae(n,r):n),o=!e.paused.has("hosting"),i=!e.paused.has("devops"),l=o?at(s,"next"):[],d=i?at(s,"deps"):[],u=e.early?null:function(e,t){let a=e&&"object"==typeof e&&!Array.isArray(e)?e:{};if(a.slot!==t)return{slot:t,runs:0,next:[],repos:[],cut:{},nextDone:!1,depsDone:!1};let r="number"==typeof a.runs&&Number.isInteger(a.runs)&&a.runs>=0?a.runs:0,n={};if(a.cut&&"object"==typeof a.cut&&!Array.isArray(a.cut))for(let[e,t]of Object.entries(a.cut).slice(0,1e3))e.length<=100&&"number"==typeof t&&Number.isInteger(t)&&t>0&&(n[e]=Math.min(t,2));return{slot:t,runs:r,next:ar(a.next),repos:ar(a.repos),cut:n,nextDone:!0===a.nextDone,depsDone:!0===a.depsDone}}(await t.readSlot(),new Date((0,t5.G)("security",e.now)).toISOString()),c=!!u&&o&&!u.nextDone,p=!!u&&i&&!u.depsDone,f=o&&(l.length>0||c),m=i&&(d.length>0||p),h={hosting:o,devops:i,nextDone:new Set,nextStarted:new Set,depsDone:new Set},w=async()=>{let a=Math.min(Date.now()+eX.y,!u&&m?e.deadline-2*eL.d:e.deadline),r=c?[...u.next,...Object.entries(u.cut).filter(([,e])=>e>=2).map(([e])=>e)]:[],n=c?{first:l,skip:[...new Set(r)].filter(e=>!l.includes(e))}:{only:l},s=await t.nextCheck(a,n);for(let t of s.failed)e.errors.push(`security ${t}`);for(let e of s.done)h.nextDone.add(e);for(let e of l)s.listed.includes(e)||h.nextDone.add(e);for(let e of s.started)h.nextStarted.add(e);if(c){let e=new Set(s.done);for(let t of(u.next=an(u.next,s.done),s.started))e.has(t)||(u.cut[t]=Math.min((u.cut[t]??0)+1,2));u.nextDone=s.listed.every(t=>e.has(t)||(u.cut[t]??0)>=2)}},g=async()=>{let a=await t.depsStep(Math.min(Date.now()+eL.o,e.deadline),p?{marked:d,onlyMarked:!1,skip:u.repos}:{marked:d,onlyMarked:!0});for(let t of(a.problem&&e.errors.push(`security deps: ${a.problem}`),a.settled))h.depsDone.add(t);p&&(u.repos=an(u.repos,a.done),u.depsDone=a.complete)};try{u&&u.runs++,u?(m&&await g(),f&&await w()):(f&&await w(),m&&await g())}finally{let e=null;if(u)try{await t.writeSlot(u)}catch(t){e=t}try{let e=function(e,t){let a={},r=[];for(let[n,s]of Object.entries(e.pending)){let e={...s};t.hosting&&!e.next&&(t.nextDone?.has(n)?e.next=!0:t.nextStarted?.has(n)&&(e.attempts=Math.min(e.attempts+1,3))),t.devops&&!e.deps&&t.depsDone?.has(n)&&(e.deps=!0),a[n]=e,((e.next||!t.hosting)&&(e.deps||!t.devops)||e.attempts>=3)&&r.push(n)}return ae({pending:a,checked:e.checked},r)}(s,h);JSON.stringify(e)!==JSON.stringify(n)&&await t.write(e)}catch(t){e??=t}if(e)throw e}return{complete:!u||(u.nextDone||!o)&&(u.depsDone||!i)||u.runs>=20}}async function ad(e,t,a=ai){if(!e.length)return!1;let{state:r,changed:n}=function(e,t,a){let r={pending:{...e.pending},checked:{...e.checked}},n=!1;for(let e of t)(0,t6.f)(e.appId)&&t9(e.deploymentId)&&r.checked[e.appId]!==e.deploymentId&&r.pending[e.appId]?.id!==e.deploymentId&&(r.pending[e.appId]={id:e.deploymentId,at:a.toISOString(),attempts:0},n=!0);return{state:r,changed:n}}(t7(await a.read()),e,t);return n&&await a.write(r),n}var au=e.i(147100),ac=e.i(764266),ap=e.i(198552),af=e.i(27479),am=e.i(707866),ah=e.i(392710),aw=e.i(582888),ag=e.i(811539),ay=e.i(725321);async function ab(e){let t=[await t$(()=>av(e)),await t$(()=>a$(e)),await t$(()=>aA(e))].find(e=>null!==e);if(t)throw t}let ak=e=>e.toISOString();async function av(e){for(let{acc:t,credential:a}of(await ti("turso"))){if(tn(e),!a){e.errors.push(`turso/${t.label}: credential can't be read`);continue}let r=await tl(t.id,"turso_database");if(!r.length)continue;let n=await (0,aw.u)(a,tn(e));if(!n.ok){await tf("turso",t,r,n,e);continue}let s=new Set(r.map(e=>String(e.r.meta.org??""))),o=[];for(let i of n.data.filter(e=>s.has(e.slug))){let[n,s]=await Promise.all([(0,aw.X)(a,i.slug,tn(e)),(0,aw.d)(a,i.slug,tn(e))]),l=r.filter(e=>e.r.meta.org===i.slug);if(!n.ok){for(let t of l)await tu(t,{state:"unknown",label:"Unknown",patch:{}},e.now);e.errors.push(`turso/${t.label}: ${n.error}`);continue}let d=new Map(n.data.map(e=>[e.id,e]));for(let t of l)o.push(await aI(t,d.get(t.r.externalId),i,s,e))}let i=new Set(n.data.map(e=>e.slug));for(let t of r.filter(e=>!i.has(String(e.r.meta.org??""))))o.push(await tu(t,{state:"off",label:"Organization not visible to this token",patch:{}},e.now));await tp(o)}}async function aI(e,t,a,r,n){if(!t)return tu(e,{state:"off",label:"Not found",patch:{}},n.now);let s=(0,am.h)({blockReads:t.blockReads,blockWrites:t.blockWrites,orgBlockedReads:a.blockedReads,orgBlockedWrites:a.blockedWrites}),o={org:a.slug,group:t.group,primaryRegion:t.primaryRegion,plan:a.plan,blockReads:t.blockReads,blockWrites:t.blockWrites};if(r.ok){let e=r.data.byDb.get(t.id);Object.assign(o,{rowsRead:e?.rowsRead??null,rowsWritten:e?.rowsWritten??null,storageBytes:e?.storageBytes??null,orgRowsRead:r.data.org.rowsRead,orgRowsWritten:r.data.org.rowsWritten,orgStorageBytes:r.data.org.storageBytes,orgDatabases:r.data.org.databases,usageAt:ak(n.now),usageError:null})}else"column"===e5(r,!1)?o.usageError=r.error:n.errors.push(`turso/${e.r.name} usage: ${r.error}`);return tu(e,{...s,patch:o},n.now)}async function a$(e){for(let{acc:t,credential:a}of(await ti("upstash"))){tn(e);let r=a?(0,ag.L)(a):null;if(!r){e.errors.push(`upstash/${t.label}: credential can't be read`);continue}let n=await tl(t.id,"upstash_redis");if(!n.length)continue;let s=await (0,ag.M)(r,tn(e));if(!s.ok){await tf("upstash",t,n,s,e);continue}let o=new Map(s.data.map(e=>[e.id,e])),{out:i,skipped:l}=await ts(e,n,(e,t)=>o.has(e.r.externalId)?(0,ag.Z)(r,e.r.externalId,t):Promise.resolve(null)),d=[];for(let[t,a]of n.entries()){let r=o.get(a.r.externalId);if(!r){d.push(await tu(a,{state:"off",label:"Not found",patch:{}},e.now));continue}let n=(0,am.t)(r.state),s={region:r.region,status:r.state,type:r.type},l=i[t];l?.ok?Object.assign(s,{...l.data,statsAt:ak(e.now),statsError:null}):l&&"column"===e5(l,!1)?s.statsError=l.error:l&&e.errors.push(`upstash/${a.r.name} stats: ${l.error}`),d.push(await tu(a,{...n,patch:s},e.now))}await tp(d),to(l)}}async function aA(e){let t={};for(let{acc:a,credential:r}of(await ti("cloudflare"))){if(tn(e),!r)continue;let n=await aD(a.id,r,e);if(!n.length){t[a.id]={d1:"error",analytics:null,at:ak(e.now),note:"No Cloudflare account found for this token"};continue}let s="ok",o=null;for(let t of n){let n=await (0,ah.L)(r,t,tn(e));if(!n.ok){"error"==(s="scope"===n.kind||"auth"===n.kind?"missing":"error")&&e.errors.push(`d1/${a.label}: ${n.error}`);continue}await aE(a.id,t,n.data,e.now);let i=(await tl(a.id,"d1_database")).filter(e=>e.r.meta.accountId===t);if(!i.length)continue;let l=await (0,ah.t)(r,t,(0,ah.Y)(e.now),tn(e));o=l.ok?o??"ok":"scope"===l.kind?"missing":o??"error",l.ok||"scope"===l.kind||e.errors.push(`d1/${a.label} analytics: ${l.error}`);let{out:d,skipped:u}=await ts(e,i,(e,a)=>(0,ah.m)(r,t,e.r.externalId,a)),c=new Map((l.ok?l.data:[]).map(e=>[e.databaseId,e])),p=d.map(e=>e?.ok?e.data.sizeBytes??0:0),f={accountRowsRead:l.ok?l.data.reduce((e,t)=>e+t.rowsRead,0):null,accountRowsWritten:l.ok?l.data.reduce((e,t)=>e+t.rowsWritten,0):null,accountSizeBytes:d.every(e=>e?.ok)?p.reduce((e,t)=>e+t,0):null,accountDatabases:n.data.length},m=[];for(let[t,a]of i.entries()){let r=d[t];void 0!==r&&m.push(await aS(a,r,c.get(a.r.externalId)??null,l.ok,l.ok?null:l.error,f,e))}await tp(m),to(u)}t[a.id]={d1:s,analytics:o,at:ak(e.now),note:null}}await (0,a.db)().insert(g.settings).values({key:ay.f,value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:e.now}})}async function aS(e,t,a,r,n,s,o){let i={accountId:e.r.meta.accountId??null,createdAt:e.r.meta.createdAt??null,accountDatabases:s.accountDatabases};return(t.ok?Object.assign(i,{sizeBytes:t.data.sizeBytes,numTables:t.data.numTables,readReplication:t.data.readReplication,detailsAt:ak(o.now),detailsError:null}):"scope"===t.kind?i.detailsError=t.error:o.errors.push(`d1/${e.r.name}: ${t.error}`),r?Object.assign(i,{rowsRead:a?.rowsRead??0,rowsWritten:a?.rowsWritten??0,readQueries:a?.readQueries??0,writeQueries:a?.writeQueries??0,accountRowsRead:s.accountRowsRead,accountRowsWritten:s.accountRowsWritten,usageDay:(0,ah.Y)(o.now),usageAt:ak(o.now),usageError:null}):i.usageError=n,null!==s.accountSizeBytes&&(i.accountSizeBytes=s.accountSizeBytes),t.ok||"transient"!==t.kind)?tu(e,{...(0,am.c)(r?s:{accountRowsRead:null,accountRowsWritten:null}),patch:i},o.now):tu(e,{state:"unknown",label:"Unknown",patch:{}},o.now)}async function aD(e,t,r){let n=new Set,s=await (0,ah.N)(t,tn(r));if(s.ok)for(let e of s.data)n.add(e.id);for(let t of(await (0,a.db)().select({meta:g.resources.meta}).from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,"zone"),(0,p.isNull)(g.resources.goneAt))).limit(200)))"string"==typeof t.meta.accountId&&/^[0-9a-f]{32}$/i.test(t.meta.accountId)&&n.add(t.meta.accountId);return[...n].slice(0,5)}async function aE(e,t,r,n){let s=(await (0,a.db)().select({id:g.resources.id,externalId:g.resources.externalId,meta:g.resources.meta,goneAt:g.resources.goneAt}).from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,e),(0,p.eq)(g.resources.kind,"d1_database")))).filter(e=>e.meta.accountId===t),o=new Map(s.map(e=>[e.externalId,e])),i=new Set(r.map(e=>e.uuid));await (0,a.db)().transaction(async a=>{for(let s of r){let r={accountId:t,createdAt:s.createdAt},i=o.get(s.uuid);i?await a.update(g.resources).set({name:s.name,meta:r,lastSeenAt:n,goneAt:null,updatedAt:n}).where((0,p.eq)(g.resources.id,i.id)):await a.insert(g.resources).values({accountId:e,kind:"d1_database",externalId:s.uuid,name:s.name,meta:r,monitored:!0,lastSeenAt:n}).onConflictDoNothing({target:[g.resources.accountId,g.resources.kind,g.resources.externalId]})}let l=s.filter(e=>!i.has(e.externalId)&&!e.goneAt).map(e=>e.id);l.length&&await a.update(g.resources).set({goneAt:n,updatedAt:n}).where((0,p.inArray)(g.resources.id,l))})}async function ax(e=new Date){let n=(0,eM.randomUUID)(),s=new Date(e.getTime()+t5.d).toISOString(),o=await (0,a.db)().execute(t.sql`
14
14
  insert into ops.settings (key, value) values ('collector.lease', ${JSON.stringify({until:s,owner:n})}::jsonb)
15
15
  on conflict (key) do update set value = excluded.value, updated_at = now()
16
16
  where (ops.settings.value->>'until')::timestamptz < ${e.toISOString()}::timestamptz
17
17
  returning key`);return(0,r.f)(o).length>0?n:null}async function aj(e){await (0,a.db)().execute(t.sql`
18
18
  update ops.settings set value = jsonb_build_object('until', '1970-01-01T00:00:00Z'), updated_at = now()
19
- where key = 'collector.lease' and value->>'owner' = ${e}`)}var aT=e.i(991219);let aM=/^v?(\d{1,9})\.(\d{1,9})\.(\d{1,9})(?:-([0-9A-Za-z.-]{1,64}))?(?:\+[0-9A-Za-z.-]{1,64})?$/,aO=/^\d{4}-\d{2}-\d{2}$/;function az(e){let t="string"==typeof e?aM.exec(e.trim()):null;if(!t)return null;let[a,r,n]=[t[1],t[2],t[3]].map(Number);return{major:a,minor:r,patch:n,pre:t[4]??null,text:`${a}.${r}.${n}${t[4]?`-${t[4]}`:""}`}}function aC(e,t){return e.major!==t.major?e.major-t.major:e.minor!==t.minor?e.minor-t.minor:e.patch!==t.patch?e.patch-t.patch:e.pre===t.pre?0:null===e.pre?1:null===t.pre||e.pre<t.pre?-1:1}function aN(e){let t=(e&&"object"==typeof e?e:null)?.result?.releases;if(!Array.isArray(t)||0===t.length)return null;let a=[];for(let e of t){if(!e||"object"!=typeof e||"string"!=typeof e.name||"boolean"!=typeof e.isEol||null!=e.eolFrom&&("string"!=typeof e.eolFrom||!aO.test(e.eolFrom)))return null;a.push({name:e.name,isEol:e.isEol,eolFrom:e.eolFrom??null})}return a}var aR=e.i(109709);let a_="runtime.node";function aq(e=process.env){let t=(0,aR.N)(e,"NO_UPDATE_CHECK"),a=t?.value.trim()??"";return{off:""!==a&&!/^(0|false|no|off)$/i.test(a),name:t?.name??"WATCHBELL_NO_UPDATE_CHECK"}}async function aP(e,t,a,r){let n;try{n=await a(e,{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip"},signal:AbortSignal.timeout(r),cache:"no-store"})}catch{return{ok:!1,error:`Couldn't reach ${t}`}}if(!n.ok)return{ok:!1,error:`${t} returned an error (${n.status})`};try{return{ok:!0,body:await n.json()}}catch{return{ok:!1,error:`${t} answered in a format the console doesn't recognise`}}}async function aF(e={}){let t=e.fetch??fetch,a=e.timeoutMs??8e3,[r,n]=await Promise.all([aP("https://nodejs.org/dist/index.json","nodejs.org",t,a),aP("https://endoflife.date/api/v1/products/nodejs/","endoflife.date",t,a)]),s=r.ok?function(e){if(!Array.isArray(e)||0===e.length)return null;let t=[],a=new Map;for(let r of e){if(!r||"object"!=typeof r||"boolean"!=typeof r.security)return null;let e=az(r.version);if(!e||null!==e.pre||!String(r.version).startsWith("v"))return null;r.security&&t.push(e);let n=a.get(e.major);(!n||aC(e,n)>0)&&a.set(e.major,e)}return t.sort((e,t)=>aC(t,e)),{security:t.map(e=>e.text),latest:Object.fromEntries([...a].sort((e,t)=>t[0]-e[0]).map(([e,t])=>[String(e),t.text]))}}(r.body):null,o=n.ok?aN(n.body):null,i=e=>`${e} answered in a format the console doesn't recognise`;return{index:s,indexError:r.ok?s?null:i("nodejs.org"):r.error,cycles:o,cyclesError:n.ok?o?null:i("endoflife.date"):n.error}}let aU=e=>"string"==typeof e&&Number.isFinite(Date.parse(e))?e:null,aB=e=>"string"==typeof e?e:null;async function aG(){var e;let[t]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,a_)).limit(1);return t?(e=t.value)&&"object"==typeof e?{index:function(e){let t=e&&"object"==typeof e?e:null;if(!t||!Array.isArray(t.security)||!t.latest||"object"!=typeof t.latest)return null;let a=t.security.map(az),r=Object.entries(t.latest).map(([e,t])=>[e,az(t)]);return a.some(e=>!e)||r.some(([e,t])=>!t||String(t.major)!==e)?null:{security:a.map(e=>e.text),latest:Object.fromEntries(r.map(([e,t])=>[e,t.text]))}}(e.index),indexCheckedAt:aU(e.indexCheckedAt),indexError:aB(e.indexError),cycles:aN({result:{releases:e.cycles}}),cyclesCheckedAt:aU(e.cyclesCheckedAt),cyclesError:aB(e.cyclesError)}:null:null}async function aL(e,t,r,n=process.env){let s;if(aq(n).off)return;let o=t-Date.now();if(o<1e3)throw Error("skipped, time budget used");let i=await aF({timeoutMs:Math.min(8e3,o)}),l=await aG();i.indexError&&r.push(`node: ${i.indexError}`),i.cyclesError&&r.push(`node: ${i.cyclesError}`);let d=(s=e.toISOString(),{index:i.index??l?.index??null,indexCheckedAt:s,indexError:i.indexError,cycles:i.cycles??l?.cycles??null,cyclesCheckedAt:s,cyclesError:i.cyclesError});await (0,a.db)().insert(g.settings).values({key:a_,value:d}).onConflictDoUpdate({target:g.settings.key,set:{value:d,updatedAt:e}})}let aW=/^\d{1,4}\.\d{1,4}\.\d{1,6}$/,aH=e=>"string"==typeof e&&aW.test(e);async function aV(e={}){let t,a=e.fetch??fetch;try{t=await a("https://registry.npmjs.org/watchbell/latest",{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip"},signal:AbortSignal.timeout(e.timeoutMs??6e3),cache:"no-store"})}catch{return{ok:!1,error:"Couldn't reach registry.npmjs.org"}}if(!t.ok)return{ok:!1,error:`registry.npmjs.org returned an error (${t.status})`};try{let e=await t.json();return aH(e.version)?{ok:!0,version:e.version}:{ok:!1,error:"registry.npmjs.org answered without a version"}}catch{return{ok:!1,error:"registry.npmjs.org answered in a format the console doesn't recognise"}}}async function aJ(e,t,r,n=process.env,s){let o=function(e=process.env){let t=e.WATCHBELL_VERSION?.trim();return aH(t)?t:null}(n);if(!o||"selfhost"!==(0,i.mode)(n)||aq(n).off)return;let l=t-Date.now();if(l<1e3)return;let d=await aV({fetch:s,timeoutMs:Math.min(6e3,l)});if(d.ok){let t={version:d.version,checkedAt:e.toISOString()};await (0,a.db)().insert(g.settings).values({key:"watchbell.latest",value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:e}})}else r.push(`update check: ${d.error}`);await (0,a.db)().insert(g.settings).values({key:"watchbell.seenVersion",value:{version:o}}).onConflictDoNothing({target:g.settings.key})}var aK=e.i(149398),aY=e.i(467404),aX=e.i(816173);e.i(247714);let aQ="collector.lastRun",aZ="vercel.backoffUntil",a0="vercel.currentMiss",a1={supabase:tw,supabaseUsage:tg,neon:ty,firebase:tk,firebaseUsage:tv,extraDbs:ab};async function a3(){let e=await (0,a.db)().select({key:g.settings.key,value:g.settings.value}).from(g.settings).where((0,p.inArray)(g.settings.key,[aQ,t6])).limit(2);return{lastRun:e.find(e=>e.key===aQ)?.value??{},afterDeploy:e.find(e=>e.key===t6)?.value??null}}async function a4(e){await (0,a.db)().insert(g.settings).values({key:aQ,value:e}).onConflictDoUpdate({target:g.settings.key,set:{value:e,updatedAt:new Date}})}let a5=e=>(0,eH.f)(e);async function a2(e,r,n,s,o=[]){let i=(await (0,a.db)().select({m:g.monitors,app:g.resources}).from(g.monitors).innerJoin(g.resources,(0,p.eq)(g.resources.id,g.monitors.resourceId)).where((0,p.and)((0,p.eq)(g.monitors.kind,"http"),(0,p.eq)(g.monitors.paused,!1),(0,p.eq)(g.monitors.ownerPaused,!1),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt))).orderBy(t.sql`${g.monitors.lastCheckedAt} asc nulls first`,g.monitors.id)).filter(({m:t})=>(0,t5.B)(t.lastCheckedAt,e,s));if(!i.length)return 0;let l=await (0,ta.P)(i,6,({m:e})=>{let t=(0,t5.P)(e.timeoutMs,r,Date.now());return null===t?Promise.resolve(null):(0,ta.b)(e.url,{expectedStatus:e.expectedStatus,timeoutMs:t,body:(0,aK.C)(e)})}),d=i.flatMap((e,t)=>l[t]?[{...e,r:l[t]}]:[]);if(d.length<i.length&&n.push(`checks: ${i.length-d.length} monitors skipped, time budget used`),!d.length)return 0;let u=[];for(let t of d)await (0,aY.j)(t.m,t.r,e)&&u.push(t);return u.length?(await (0,a.db)().insert(g.checks).values(u.map(({m:t,app:a,r})=>({monitorId:t.id,at:e,ok:r.ok,statusCode:r.statusCode,latencyMs:r.latencyMs,error:r.error,inMaintenance:null!==(0,ac.x)(o,{monitorId:t.id,appId:a.id},e)}))),await a5(u.map(({m:t,app:a,r})=>(0,aX.F)({resourceId:a.id,path:(0,af.K)(t.url),prev:t.state,next:(0,aX.G)(t.failStreak,r).state,code:r.statusCode,error:r.error,at:e}))),u.length):0}let a6=["checks","heartbeats"];async function a8(e,t,a=tU.f){if(!a6.some(t=>e.includes(t)))return[];try{return await a()}catch(e){return t.push(`maintenance: ${(0,tT.safeError)(e)}`),[]}}async function a9(e){let[t]=await (0,a.db)().select().from(g.settings).where((0,p.eq)(g.settings.key,aZ)).limit(1),r=t?.value?.until;return!!r&&e.getTime()<new Date(r).getTime()}async function a7(e,t){if("transient"!==e.kind||!e.retryAfterS)return!1;let r={until:new Date(t.getTime()+1e3*Math.min(e.retryAfterS,3600)).toISOString()};return await (0,a.db)().insert(g.settings).values({key:aZ,value:r}).onConflictDoUpdate({target:g.settings.key,set:{value:r,updatedAt:t}}),!0}let re=e=>t.sql`coalesce(${g.deployments.externalId} = ${e}::text, false)`;async function rt(e,r,n,s,o=ad){let i=[];try{for(let o of e){let e=r.filter(e=>e.resourceId===o.id),{currentId:l,previousId:d}=(0,af.a)(e.map(e=>({id:e.id,createdAt:e.createdAt??new Date(0)})),(o.externalId?n.get(o.externalId):null)??null),u=await (0,a.db)().update(g.deployments).set({isCurrent:re(l),isPreviousProduction:re(d),updatedAt:s.now}).where((0,p.and)((0,p.eq)(g.deployments.resourceId,o.id),(0,p.or)(t.sql`${g.deployments.isCurrent} is distinct from ${re(l)}`,t.sql`${g.deployments.isPreviousProduction} is distinct from ${re(d)}`))).returning({id:g.deployments.externalId}),c=function(e){var t,a;let r=e.currentId;return r&&e.state.checked[e.appId]!==r&&e.state.pending[e.appId]?.id!==r&&(t=e.changedIds,((a=r)&&t.includes(a)?a:null)||e.createdAt&&e.now.getTime()-e.createdAt.getTime()<=216e5)?r:null}({appId:o.id,currentId:l,changedIds:u.map(e=>e.id),createdAt:e.find(e=>e.id===l)?.createdAt??null,state:s.afterDeploy,now:s.now});c&&i.push({appId:o.id,deploymentId:c})}}finally{if(i.length)try{await o(i,s.now)}catch(e){s.errors.push(`vercel/${s.label}: after-deploy security check not scheduled: ${(0,tT.safeError)(e)}`)}}}let ra=e=>new Map(e.map(e=>[e.id,{...e.branchFrom?{branchFrom:e.branchFrom}:{},...e.gitDirty?{gitDirty:!0}:{}}]));async function rr(e,t,a,r,n=new Map,s=tW){try{await s(e,t,n)}catch(e){a.push(`vercel/${r}: production source not saved: ${(0,tT.safeError)(e)}`)}}async function rn(e,t,r,n){if(await a9(e))return;let s=(0,L.serverEnv)().OPS_ENCRYPTION_KEY;for(let o of(await (0,a.db)().select().from(g.accounts).where((0,p.and)((0,p.eq)(g.accounts.provider,"vercel"),(0,p.eq)(g.accounts.status,"ok"))))){let i=(0,B.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},s);if((0,e0.A)(i)||!i){r.push(`vercel/${o.label}: credential can't be read`);continue}let l=await (0,a.db)().select().from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,o.id),(0,p.eq)(g.resources.kind,"app"),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)));if(!l.length)continue;let d=new Map(l.map(e=>[e.externalId,e])),u=await (0,ap.X)(i);if(!u.ok){let t=(0,e0.E)({ok:!1,kind:u.kind,error:u.error});if(t&&await (0,a.db)().update(g.accounts).set({...t,updatedAt:e}).where((0,p.eq)(g.accounts.id,o.id)),r.push(`vercel/${o.label}: ${u.error}`),await a7(u,e))return;continue}let c=new Set(l.map(e=>String(e.meta.teamId)));for(let s of u.data.filter(e=>c.has(e.id))){if(Date.now()>t)return void r.push("vercel: skipped remaining teams, time budget used");let[o,u]=await Promise.all([(0,ap.W)(i,s),(0,ap.K)(i,s,{since:e.getTime()-6048e5,limit:100})]);if(!o.ok||!u.ok){let t=o.ok?u:o;if(r.push(`vercel/${s.name}: ${t.error}`),await a7(t,e))return;continue}let c=new Map(o.data.map(e=>[e.id,e.currentDeploymentId])),f=u.data.filter(e=>d.has(e.projectId)),m=ra(f),h=new Map((f.length?await (0,a.db)().select({externalId:g.deployments.externalId,state:g.deployments.state,target:g.deployments.target,branch:g.deployments.branch,commitSha:g.deployments.commitSha,commitMessage:g.deployments.commitMessage,source:g.deployments.source,url:g.deployments.url,buildingAt:g.deployments.buildingAt,readyAt:g.deployments.readyAt}).from(g.deployments).where((0,p.inArray)(g.deployments.externalId,f.map(e=>e.id))):[]).map(e=>[e.externalId,e])),w=[];for(let t of f){let r=d.get(t.projectId),n=h.get(t.id),s={state:t.state,target:t.target,branch:t.branch,commitSha:t.sha,commitMessage:t.message,source:t.source,url:t.url,buildingAt:t.buildingAt,readyAt:t.readyAt};if((0,af.E)(n,s)){let n={resourceId:r.id,externalId:t.id,...s,createdAtProvider:t.createdAt,updatedAt:e};await (0,a.db)().insert(g.deployments).values(n).onConflictDoUpdate({target:g.deployments.externalId,set:n})}w.push((0,aX.L)(n?.state,t,r.id,e))}await a5(w);let y=l.filter(e=>String(e.meta.teamId)===s.id),b=await (0,a.db)().select({resourceId:g.deployments.resourceId,id:g.deployments.externalId,createdAt:g.deployments.createdAtProvider}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,y.map(e=>e.id)),(0,p.eq)(g.deployments.target,"production"),(0,p.eq)(g.deployments.state,"ready"))),[k]=await (0,a.db)().select().from(g.settings).where((0,p.eq)(g.settings.key,a0)).limit(1),v=[],I=()=>v.length?(0,a.db)().insert(g.settings).values({key:a0,value:(0,af.Y)(k?.value,v,e)}).onConflictDoUpdate({target:g.settings.key,set:{value:(0,af.Y)(k?.value,v,e),updatedAt:e}}):Promise.resolve();for(let n of(0,af.Q)(y,c,b,(0,af.S)(k?.value,e))){if(Date.now()>t)break;let o=await (0,ap.S)(i,s,n.deploymentId);if(!o.ok){if(r.push(`vercel/${s.name}: current deployment: ${o.error}`),await a7(o,e))return void await I();v.push(n.deploymentId);continue}let l=o.data;for(let[e,t]of ra([l]))m.set(e,t);let d={resourceId:n.appId,externalId:l.id,state:l.state,target:l.target,branch:l.branch,commitSha:l.sha,commitMessage:l.message,source:l.source,url:l.url,buildingAt:l.buildingAt,readyAt:l.readyAt,createdAtProvider:l.createdAt,updatedAt:e};await (0,a.db)().insert(g.deployments).values(d).onConflictDoUpdate({target:g.deployments.externalId,set:d}),"ready"===l.state&&"production"===l.target?b.push({resourceId:n.appId,id:l.id,createdAt:l.createdAt}):v.push(n.deploymentId)}await I(),await rt(y,b,c,{now:e,afterDeploy:n,errors:r,label:s.name}),await rr(y,e,r,s.name,m)}}}async function rs(e){let r=await (0,a.db)().select().from(g.resources).where((0,p.and)((0,p.eq)(g.resources.kind,"app"),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)));if(!r.length)return;let n=await (0,a.db)().select().from(g.monitors).where((0,p.and)((0,p.inArray)(g.monitors.resourceId,r.map(e=>e.id)),(0,p.eq)(g.monitors.paused,!1),(0,p.eq)(g.monitors.ownerPaused,!1))),s=new Set((await (0,a.db)().select({r:g.deployments.resourceId}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,r.map(e=>e.id)),(0,p.eq)(g.deployments.target,"production"),(0,p.eq)(g.deployments.state,"building"),(0,p.gte)(g.deployments.createdAtProvider,new Date(e.getTime()-36e5))))).map(e=>e.r)),o=await th(r.map(e=>e.id)),i=new Map((await (0,a.db)().select().from(g.snapshots).where((0,p.inArray)(g.snapshots.resourceId,r.map(e=>e.id)))).map(e=>[e.resourceId,e])),l=new Map(r.map(e=>[e.id,e])),d=(0,tP.P)(n.map(e=>({id:e.id,kind:e.kind,url:e.url,appId:e.resourceId,appName:l.get(e.resourceId)?.name??"",appMeta:l.get(e.resourceId)?.meta,lastError:e.lastError})),r),u=e=>d.has(e.id)&&"err"===e.state?"warn":e.state;for(let[e,s]of(0,tP.R)(n.map(e=>({id:e.id,kind:e.kind,url:e.url,appId:e.resourceId,appName:l.get(e.resourceId)?.name??"",appMeta:l.get(e.resourceId)?.meta,lastError:e.lastError})),r))await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({pastDomains:s})}::jsonb`}).where((0,p.eq)(g.resources.id,e));for(let l of r){let r=n.filter(e=>e.resourceId===l.id),d=(0,aX.V)({monitors:r.map(u),building:s.has(l.id),dbPaused:o.has(l.id)}),c=r.find(e=>"err"===e.state)??r.find(e=>"warn"===e.state),p={code:c?.lastStatus??null,latencyMs:r.find(e=>"heartbeat"!==e.kind)?.lastLatencyMs??null,dbPaused:o.has(l.id)},f=i.get(l.id);await (0,a.db)().insert(g.snapshots).values({resourceId:l.id,state:d,data:p,collectedAt:e,stateSince:e}).onConflictDoUpdate({target:g.snapshots.resourceId,set:{state:d,data:t.sql`${g.snapshots.data} || ${JSON.stringify(p)}::jsonb`,collectedAt:e,...f?.state!==d?{stateSince:e}:{}}})}}async function ro(e,t={}){let a={writeLastRun:a4,refreshApps:rs,refreshNetwork:aT.x,invalidate:h,...t};try{await a.writeLastRun({...e.lastRun,...Object.fromEntries(e.done.map(t=>[t,e.started.toISOString()]))});try{await a.refreshApps(new Date)}catch(t){e.errors.push(`app-snapshots: ${(0,tT.safeError)(t)}`)}if(e.done.some(e=>aT.p.includes(e)))try{await a.refreshNetwork(new Date)}catch(t){e.errors.push(`network-states: ${(0,tT.safeError)(t)}`)}}finally{a.invalidate((0,w.o)(e.tried??e.done))}}async function ri(e,t,a,r={evaluate:tF.$,deliver:tG.q,digest:tG.J}){let n=[];if(e.includes("alerts"))if(Date.now()>t)a.push("alerts: skipped, time budget used");else{let e=!0;try{await r.evaluate(new Date),console.info("collector alerts evaluated")}catch(t){e=!1,a.push(`alerts: ${(0,tT.safeError)(t)}`)}try{await r.deliver(new Date,t),console.info("collector notifications delivered")}catch(t){e=!1,a.push(`notify: ${(0,tT.safeError)(t)}`)}e&&n.push("alerts")}if(e.includes("digest")&&(0,t5.z)("digest",t,Date.now()))try{await r.digest(new Date),console.info("collector digest done"),n.push("digest")}catch(e){a.push(`digest: ${(0,tT.safeError)(e)}`)}return n}async function rl(e,t,a,r){let n=[],s=[];for(let o of e){if(Date.now()>t){a.push(`${o}: skipped, time budget used`);continue}if((0,t5.z)(o,t,Date.now())){s.push(o);try{await r(o),n.push(o)}catch(e){a.push(`${o}: ${(0,tT.safeError)(e)}`)}}}return{done:n,tried:s}}async function rd(e){let t,r=new Date,n=await ax(r);if(!n)return{skipped:!0,ok:!0,tasks:[],checks:0,durationMs:0,errors:[]};try{[t]=await (0,a.db)().insert(g.collectorRuns).values({startedAt:r,trigger:"builtin"===e?"manual":e}).returning({id:g.collectorRuns.id})}catch(e){throw await aj(n).catch(()=>void 0),e}let s=[],o=[],i=0,d=r.getTime()+t5.p,u=process.cpuUsage(),c=()=>{let e=process.cpuUsage(u);return Math.round((e.user+e.system)/1e3)},f=e=>console.info(`collector ${e} +${Date.now()-r.getTime()}ms cpu ${c()}ms`);try{var m;f("start");let{lastRun:t,afterDeploy:a}=await a3(),n="cron_job_org"!==e&&"builtin"!==e,u=await (0,l.I)(),{due:c,early:p}=(0,t5._)((0,t5.S)(t,r,n,u),(m=t7(a),Object.keys(m.pending).length>0),u),h=!1,w=e=>p||!h?e.filter(e=>"security"!==e):e,g=c.filter(e=>t5.u.includes(e)),y=g.includes("alerts")?d-t5.X:d,b=await a8(c,s);f(`due ${c.join(",")}`);let{done:k,tried:v}=await rl(c.filter(e=>!t5.u.includes(e)),y,s,async e=>{if(f(`task ${e}`),"heartbeats"===e){let e=new Date;i+=await (0,eV.r)(e,(t,a)=>null!==(0,ac.x)(b,{monitorId:t,appId:a},e),n)}"checks"===e&&(i+=await a2(new Date,y,s,n,b)),"vercel"===e&&await rn(new Date,y,s,t7(a));let t=a1[e];t&&await t({now:new Date,deadline:y,errors:s,protectOnly:(0,t5.$)(e,u)}),"cloudflare"===e&&await (0,aT.h)(new Date,y,s),"domains"===e&&await (0,aT.H)(new Date,y,s),"tls"===e&&await (0,aT.V)(new Date,y,s),"rdap"===e&&await (0,aT.W)(new Date,y,s),"eol"===e&&await (0,aT.i)(new Date,y,s),"node"===e&&(await aL(new Date,y,s),await aJ(new Date,y,s)),"status"===e&&await (0,au.i)(new Date),"logs"===e&&await (0,tB._)(new Date,y,s),"pageviews"===e&&await t4(new Date,y,s),"security"===e&&(h=(await al({now:r,deadline:y,errors:s,paused:u,early:p})).complete)});o.push(...k),f("main done"),await ro({lastRun:t,done:w(o),tried:v,started:r,errors:s}),f("settled");let I=await ri(g,d,s);f("post done"),I.length&&await a4({...t,...Object.fromEntries(w([...o,...I]).map(e=>[e,r.toISOString()]))}),o.push(...I)}catch(e){s.push(`run: ${(0,tT.safeError)(e)}`)}finally{let e=Date.now()-r.getTime();await (0,a.db)().update(g.collectorRuns).set({finishedAt:new Date,ok:0===s.length,errorSummary:s.join("\n").slice(0,2e3)||null,durationMs:e,tasks:o,checks:i}).where((0,p.eq)(g.collectorRuns.id,t.id)).catch(()=>void 0),await aj(n).catch(()=>void 0),process.env.VERCEL&&await tq(c())}return{skipped:!1,ok:0===s.length,tasks:o,checks:i,durationMs:Date.now()-r.getTime(),errors:s}}var ru=e.i(486118);async function rc(e){let t=[...u,...ru.extensions.minuteSteps??[]];if(!t.length)return;let a=new Date,r={deadline:e+6e4-5e3};for(let e of t)try{await e.run(a,r)}catch{console.warn(`minute step ${e.name} failed`)}}async function rp(e,t=Date.now()){let a=await rd(e);return await rc(t),a}async function rf(){return tR(await tC(),ru.extensions.dailySteps??[])}e.s(["runDailyAll",0,rf,"runMinute",0,rp],380167)}];
19
+ where key = 'collector.lease' and value->>'owner' = ${e}`)}var aT=e.i(991219);let aM=/^v?(\d{1,9})\.(\d{1,9})\.(\d{1,9})(?:-([0-9A-Za-z.-]{1,64}))?(?:\+[0-9A-Za-z.-]{1,64})?$/,aO=/^\d{4}-\d{2}-\d{2}$/;function az(e){let t="string"==typeof e?aM.exec(e.trim()):null;if(!t)return null;let[a,r,n]=[t[1],t[2],t[3]].map(Number);return{major:a,minor:r,patch:n,pre:t[4]??null,text:`${a}.${r}.${n}${t[4]?`-${t[4]}`:""}`}}function aC(e,t){return e.major!==t.major?e.major-t.major:e.minor!==t.minor?e.minor-t.minor:e.patch!==t.patch?e.patch-t.patch:e.pre===t.pre?0:null===e.pre?1:null===t.pre||e.pre<t.pre?-1:1}function aN(e){let t=(e&&"object"==typeof e?e:null)?.result?.releases;if(!Array.isArray(t)||0===t.length)return null;let a=[];for(let e of t){if(!e||"object"!=typeof e||"string"!=typeof e.name||"boolean"!=typeof e.isEol||null!=e.eolFrom&&("string"!=typeof e.eolFrom||!aO.test(e.eolFrom)))return null;a.push({name:e.name,isEol:e.isEol,eolFrom:e.eolFrom??null})}return a}var aR=e.i(109709);let a_="runtime.node";function aq(e=process.env){let t=(0,aR.N)(e,"NO_UPDATE_CHECK"),a=t?.value.trim()??"";return{off:""!==a&&!/^(0|false|no|off)$/i.test(a),name:t?.name??"WATCHBELL_NO_UPDATE_CHECK"}}async function aP(e,t,a,r){let n;try{n=await a(e,{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip"},signal:AbortSignal.timeout(r),cache:"no-store"})}catch{return{ok:!1,error:`Couldn't reach ${t}`}}if(!n.ok)return{ok:!1,error:`${t} returned an error (${n.status})`};try{return{ok:!0,body:await n.json()}}catch{return{ok:!1,error:`${t} answered in a format the console doesn't recognise`}}}async function aF(e={}){let t=e.fetch??fetch,a=e.timeoutMs??8e3,[r,n]=await Promise.all([aP("https://nodejs.org/dist/index.json","nodejs.org",t,a),aP("https://endoflife.date/api/v1/products/nodejs/","endoflife.date",t,a)]),s=r.ok?function(e){if(!Array.isArray(e)||0===e.length)return null;let t=[],a=new Map;for(let r of e){if(!r||"object"!=typeof r||"boolean"!=typeof r.security)return null;let e=az(r.version);if(!e||null!==e.pre||!String(r.version).startsWith("v"))return null;r.security&&t.push(e);let n=a.get(e.major);(!n||aC(e,n)>0)&&a.set(e.major,e)}return t.sort((e,t)=>aC(t,e)),{security:t.map(e=>e.text),latest:Object.fromEntries([...a].sort((e,t)=>t[0]-e[0]).map(([e,t])=>[String(e),t.text]))}}(r.body):null,o=n.ok?aN(n.body):null,i=e=>`${e} answered in a format the console doesn't recognise`;return{index:s,indexError:r.ok?s?null:i("nodejs.org"):r.error,cycles:o,cyclesError:n.ok?o?null:i("endoflife.date"):n.error}}let aU=e=>"string"==typeof e&&Number.isFinite(Date.parse(e))?e:null,aB=e=>"string"==typeof e?e:null;async function aG(){var e;let[t]=await (0,a.db)().select({value:g.settings.value}).from(g.settings).where((0,p.eq)(g.settings.key,a_)).limit(1);return t?(e=t.value)&&"object"==typeof e?{index:function(e){let t=e&&"object"==typeof e?e:null;if(!t||!Array.isArray(t.security)||!t.latest||"object"!=typeof t.latest)return null;let a=t.security.map(az),r=Object.entries(t.latest).map(([e,t])=>[e,az(t)]);return a.some(e=>!e)||r.some(([e,t])=>!t||String(t.major)!==e)?null:{security:a.map(e=>e.text),latest:Object.fromEntries(r.map(([e,t])=>[e,t.text]))}}(e.index),indexCheckedAt:aU(e.indexCheckedAt),indexError:aB(e.indexError),cycles:aN({result:{releases:e.cycles}}),cyclesCheckedAt:aU(e.cyclesCheckedAt),cyclesError:aB(e.cyclesError)}:null:null}async function aL(e,t,r,n=process.env){let s;if(aq(n).off)return;let o=t-Date.now();if(o<1e3)throw Error("skipped, time budget used");let i=await aF({timeoutMs:Math.min(8e3,o)}),l=await aG();i.indexError&&r.push(`node: ${i.indexError}`),i.cyclesError&&r.push(`node: ${i.cyclesError}`);let d=(s=e.toISOString(),{index:i.index??l?.index??null,indexCheckedAt:s,indexError:i.indexError,cycles:i.cycles??l?.cycles??null,cyclesCheckedAt:s,cyclesError:i.cyclesError});await (0,a.db)().insert(g.settings).values({key:a_,value:d}).onConflictDoUpdate({target:g.settings.key,set:{value:d,updatedAt:e}})}let aW=/^\d{1,4}\.\d{1,4}\.\d{1,6}$/,aH=e=>"string"==typeof e&&aW.test(e);async function aV(e={}){let t,a=e.fetch??fetch;try{t=await a("https://registry.npmjs.org/watchbell/latest",{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip"},signal:AbortSignal.timeout(e.timeoutMs??6e3),cache:"no-store"})}catch{return{ok:!1,error:"Couldn't reach registry.npmjs.org"}}if(!t.ok)return{ok:!1,error:`registry.npmjs.org returned an error (${t.status})`};try{let e=await t.json();return aH(e.version)?{ok:!0,version:e.version}:{ok:!1,error:"registry.npmjs.org answered without a version"}}catch{return{ok:!1,error:"registry.npmjs.org answered in a format the console doesn't recognise"}}}async function aJ(e,t,r,n=process.env,s){let o=function(e=process.env,t="1.6.1"){let a=e.WATCHBELL_VERSION?.trim();if(aH(a))return a;let r=t?.trim();return aH(r)?r:null}(n);if(!o||"selfhost"!==(0,i.mode)(n)||aq(n).off)return;let l=t-Date.now();if(l<1e3)return;let d=await aV({fetch:s,timeoutMs:Math.min(6e3,l)});if(d.ok){let t={version:d.version,checkedAt:e.toISOString()};await (0,a.db)().insert(g.settings).values({key:"watchbell.latest",value:t}).onConflictDoUpdate({target:g.settings.key,set:{value:t,updatedAt:e}})}else r.push(`update check: ${d.error}`);await (0,a.db)().insert(g.settings).values({key:"watchbell.seenVersion",value:{version:o}}).onConflictDoNothing({target:g.settings.key})}var aK=e.i(149398),aY=e.i(467404),aX=e.i(816173);e.i(247714);let aQ="collector.lastRun",aZ="vercel.backoffUntil",a0="vercel.currentMiss",a1={supabase:tw,supabaseUsage:tg,neon:ty,firebase:tk,firebaseUsage:tv,extraDbs:ab};async function a3(){let e=await (0,a.db)().select({key:g.settings.key,value:g.settings.value}).from(g.settings).where((0,p.inArray)(g.settings.key,[aQ,t2])).limit(2);return{lastRun:e.find(e=>e.key===aQ)?.value??{},afterDeploy:e.find(e=>e.key===t2)?.value??null}}async function a4(e){await (0,a.db)().insert(g.settings).values({key:aQ,value:e}).onConflictDoUpdate({target:g.settings.key,set:{value:e,updatedAt:new Date}})}let a5=e=>(0,eH.f)(e);async function a6(e,r,n,s,o=[]){let i=(await (0,a.db)().select({m:g.monitors,app:g.resources}).from(g.monitors).innerJoin(g.resources,(0,p.eq)(g.resources.id,g.monitors.resourceId)).where((0,p.and)((0,p.eq)(g.monitors.kind,"http"),(0,p.eq)(g.monitors.paused,!1),(0,p.eq)(g.monitors.ownerPaused,!1),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt))).orderBy(t.sql`${g.monitors.lastCheckedAt} asc nulls first`,g.monitors.id)).filter(({m:t})=>(0,t5.B)(t.lastCheckedAt,e,s));if(!i.length)return 0;let l=await (0,ta.P)(i,6,({m:e})=>{let t=(0,t5.P)(e.timeoutMs,r,Date.now());return null===t?Promise.resolve(null):(0,ta.b)(e.url,{expectedStatus:e.expectedStatus,timeoutMs:t,body:(0,aK.C)(e)})}),d=i.flatMap((e,t)=>l[t]?[{...e,r:l[t]}]:[]);if(d.length<i.length&&n.push(`checks: ${i.length-d.length} monitors skipped, time budget used`),!d.length)return 0;let u=[];for(let t of d)await (0,aY.j)(t.m,t.r,e)&&u.push(t);return u.length?(await (0,a.db)().insert(g.checks).values(u.map(({m:t,app:a,r})=>({monitorId:t.id,at:e,ok:r.ok,statusCode:r.statusCode,latencyMs:r.latencyMs,error:r.error,inMaintenance:null!==(0,ac.x)(o,{monitorId:t.id,appId:a.id},e)}))),await a5(u.map(({m:t,app:a,r})=>(0,aX.F)({resourceId:a.id,path:(0,af.K)(t.url),prev:t.state,next:(0,aX.G)(t.failStreak,r).state,code:r.statusCode,error:r.error,at:e}))),u.length):0}let a2=["checks","heartbeats"];async function a8(e,t,a=tU.f){if(!a2.some(t=>e.includes(t)))return[];try{return await a()}catch(e){return t.push(`maintenance: ${(0,tT.safeError)(e)}`),[]}}async function a9(e){let[t]=await (0,a.db)().select().from(g.settings).where((0,p.eq)(g.settings.key,aZ)).limit(1),r=t?.value?.until;return!!r&&e.getTime()<new Date(r).getTime()}async function a7(e,t){if("transient"!==e.kind||!e.retryAfterS)return!1;let r={until:new Date(t.getTime()+1e3*Math.min(e.retryAfterS,3600)).toISOString()};return await (0,a.db)().insert(g.settings).values({key:aZ,value:r}).onConflictDoUpdate({target:g.settings.key,set:{value:r,updatedAt:t}}),!0}let re=e=>t.sql`coalesce(${g.deployments.externalId} = ${e}::text, false)`;async function rt(e,r,n,s,o=ad){let i=[];try{for(let o of e){let e=r.filter(e=>e.resourceId===o.id),{currentId:l,previousId:d}=(0,af.a)(e.map(e=>({id:e.id,createdAt:e.createdAt??new Date(0)})),(o.externalId?n.get(o.externalId):null)??null),u=await (0,a.db)().update(g.deployments).set({isCurrent:re(l),isPreviousProduction:re(d),updatedAt:s.now}).where((0,p.and)((0,p.eq)(g.deployments.resourceId,o.id),(0,p.or)(t.sql`${g.deployments.isCurrent} is distinct from ${re(l)}`,t.sql`${g.deployments.isPreviousProduction} is distinct from ${re(d)}`))).returning({id:g.deployments.externalId}),c=function(e){var t,a;let r=e.currentId;return r&&e.state.checked[e.appId]!==r&&e.state.pending[e.appId]?.id!==r&&(t=e.changedIds,((a=r)&&t.includes(a)?a:null)||e.createdAt&&e.now.getTime()-e.createdAt.getTime()<=216e5)?r:null}({appId:o.id,currentId:l,changedIds:u.map(e=>e.id),createdAt:e.find(e=>e.id===l)?.createdAt??null,state:s.afterDeploy,now:s.now});c&&i.push({appId:o.id,deploymentId:c})}}finally{if(i.length)try{await o(i,s.now)}catch(e){s.errors.push(`vercel/${s.label}: after-deploy security check not scheduled: ${(0,tT.safeError)(e)}`)}}}let ra=e=>new Map(e.map(e=>[e.id,{...e.branchFrom?{branchFrom:e.branchFrom}:{},...e.gitDirty?{gitDirty:!0}:{}}]));async function rr(e,t,a,r,n=new Map,s=tW){try{await s(e,t,n)}catch(e){a.push(`vercel/${r}: production source not saved: ${(0,tT.safeError)(e)}`)}}async function rn(e,t,r,n){if(await a9(e))return;let s=(0,L.serverEnv)().OPS_ENCRYPTION_KEY;for(let o of(await (0,a.db)().select().from(g.accounts).where((0,p.and)((0,p.eq)(g.accounts.provider,"vercel"),(0,p.eq)(g.accounts.status,"ok"))))){let i=(0,B.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},s);if((0,e0.A)(i)||!i){r.push(`vercel/${o.label}: credential can't be read`);continue}let l=await (0,a.db)().select().from(g.resources).where((0,p.and)((0,p.eq)(g.resources.accountId,o.id),(0,p.eq)(g.resources.kind,"app"),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)));if(!l.length)continue;let d=new Map(l.map(e=>[e.externalId,e])),u=await (0,ap.X)(i);if(!u.ok){let t=(0,e0.E)({ok:!1,kind:u.kind,error:u.error});if(t&&await (0,a.db)().update(g.accounts).set({...t,updatedAt:e}).where((0,p.eq)(g.accounts.id,o.id)),r.push(`vercel/${o.label}: ${u.error}`),await a7(u,e))return;continue}let c=new Set(l.map(e=>String(e.meta.teamId)));for(let s of u.data.filter(e=>c.has(e.id))){if(Date.now()>t)return void r.push("vercel: skipped remaining teams, time budget used");let[o,u]=await Promise.all([(0,ap.W)(i,s),(0,ap.K)(i,s,{since:e.getTime()-6048e5,limit:100})]);if(!o.ok||!u.ok){let t=o.ok?u:o;if(r.push(`vercel/${s.name}: ${t.error}`),await a7(t,e))return;continue}let c=new Map(o.data.map(e=>[e.id,e.currentDeploymentId])),f=u.data.filter(e=>d.has(e.projectId)),m=ra(f),h=new Map((f.length?await (0,a.db)().select({externalId:g.deployments.externalId,state:g.deployments.state,target:g.deployments.target,branch:g.deployments.branch,commitSha:g.deployments.commitSha,commitMessage:g.deployments.commitMessage,source:g.deployments.source,url:g.deployments.url,buildingAt:g.deployments.buildingAt,readyAt:g.deployments.readyAt}).from(g.deployments).where((0,p.inArray)(g.deployments.externalId,f.map(e=>e.id))):[]).map(e=>[e.externalId,e])),w=[];for(let t of f){let r=d.get(t.projectId),n=h.get(t.id),s={state:t.state,target:t.target,branch:t.branch,commitSha:t.sha,commitMessage:t.message,source:t.source,url:t.url,buildingAt:t.buildingAt,readyAt:t.readyAt};if((0,af.E)(n,s)){let n={resourceId:r.id,externalId:t.id,...s,createdAtProvider:t.createdAt,updatedAt:e};await (0,a.db)().insert(g.deployments).values(n).onConflictDoUpdate({target:g.deployments.externalId,set:n})}w.push((0,aX.L)(n?.state,t,r.id,e))}await a5(w);let y=l.filter(e=>String(e.meta.teamId)===s.id),b=await (0,a.db)().select({resourceId:g.deployments.resourceId,id:g.deployments.externalId,createdAt:g.deployments.createdAtProvider}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,y.map(e=>e.id)),(0,p.eq)(g.deployments.target,"production"),(0,p.eq)(g.deployments.state,"ready"))),[k]=await (0,a.db)().select().from(g.settings).where((0,p.eq)(g.settings.key,a0)).limit(1),v=[],I=()=>v.length?(0,a.db)().insert(g.settings).values({key:a0,value:(0,af.Y)(k?.value,v,e)}).onConflictDoUpdate({target:g.settings.key,set:{value:(0,af.Y)(k?.value,v,e),updatedAt:e}}):Promise.resolve();for(let n of(0,af.Q)(y,c,b,(0,af.S)(k?.value,e))){if(Date.now()>t)break;let o=await (0,ap.S)(i,s,n.deploymentId);if(!o.ok){if(r.push(`vercel/${s.name}: current deployment: ${o.error}`),await a7(o,e))return void await I();v.push(n.deploymentId);continue}let l=o.data;for(let[e,t]of ra([l]))m.set(e,t);let d={resourceId:n.appId,externalId:l.id,state:l.state,target:l.target,branch:l.branch,commitSha:l.sha,commitMessage:l.message,source:l.source,url:l.url,buildingAt:l.buildingAt,readyAt:l.readyAt,createdAtProvider:l.createdAt,updatedAt:e};await (0,a.db)().insert(g.deployments).values(d).onConflictDoUpdate({target:g.deployments.externalId,set:d}),"ready"===l.state&&"production"===l.target?b.push({resourceId:n.appId,id:l.id,createdAt:l.createdAt}):v.push(n.deploymentId)}await I(),await rt(y,b,c,{now:e,afterDeploy:n,errors:r,label:s.name}),await rr(y,e,r,s.name,m)}}}async function rs(e){let r=await (0,a.db)().select().from(g.resources).where((0,p.and)((0,p.eq)(g.resources.kind,"app"),(0,p.eq)(g.resources.monitored,!0),(0,p.isNull)(g.resources.goneAt)));if(!r.length)return;let n=await (0,a.db)().select().from(g.monitors).where((0,p.and)((0,p.inArray)(g.monitors.resourceId,r.map(e=>e.id)),(0,p.eq)(g.monitors.paused,!1),(0,p.eq)(g.monitors.ownerPaused,!1))),s=new Set((await (0,a.db)().select({r:g.deployments.resourceId}).from(g.deployments).where((0,p.and)((0,p.inArray)(g.deployments.resourceId,r.map(e=>e.id)),(0,p.eq)(g.deployments.target,"production"),(0,p.eq)(g.deployments.state,"building"),(0,p.gte)(g.deployments.createdAtProvider,new Date(e.getTime()-36e5))))).map(e=>e.r)),o=await th(r.map(e=>e.id)),i=new Map((await (0,a.db)().select().from(g.snapshots).where((0,p.inArray)(g.snapshots.resourceId,r.map(e=>e.id)))).map(e=>[e.resourceId,e])),l=new Map(r.map(e=>[e.id,e])),d=(0,tP.P)(n.map(e=>({id:e.id,kind:e.kind,url:e.url,appId:e.resourceId,appName:l.get(e.resourceId)?.name??"",appMeta:l.get(e.resourceId)?.meta,lastError:e.lastError})),r),u=e=>d.has(e.id)&&"err"===e.state?"warn":e.state;for(let[e,s]of(0,tP.R)(n.map(e=>({id:e.id,kind:e.kind,url:e.url,appId:e.resourceId,appName:l.get(e.resourceId)?.name??"",appMeta:l.get(e.resourceId)?.meta,lastError:e.lastError})),r))await (0,a.db)().update(g.resources).set({meta:t.sql`${g.resources.meta} || ${JSON.stringify({pastDomains:s})}::jsonb`}).where((0,p.eq)(g.resources.id,e));for(let l of r){let r=n.filter(e=>e.resourceId===l.id),d=(0,aX.V)({monitors:r.map(u),building:s.has(l.id),dbPaused:o.has(l.id)}),c=r.find(e=>"err"===e.state)??r.find(e=>"warn"===e.state),p={code:c?.lastStatus??null,latencyMs:r.find(e=>"heartbeat"!==e.kind)?.lastLatencyMs??null,dbPaused:o.has(l.id)},f=i.get(l.id);await (0,a.db)().insert(g.snapshots).values({resourceId:l.id,state:d,data:p,collectedAt:e,stateSince:e}).onConflictDoUpdate({target:g.snapshots.resourceId,set:{state:d,data:t.sql`${g.snapshots.data} || ${JSON.stringify(p)}::jsonb`,collectedAt:e,...f?.state!==d?{stateSince:e}:{}}})}}async function ro(e,t={}){let a={writeLastRun:a4,refreshApps:rs,refreshNetwork:aT.x,invalidate:h,...t};try{await a.writeLastRun({...e.lastRun,...Object.fromEntries(e.done.map(t=>[t,e.started.toISOString()]))});try{await a.refreshApps(new Date)}catch(t){e.errors.push(`app-snapshots: ${(0,tT.safeError)(t)}`)}if(e.done.some(e=>aT.p.includes(e)))try{await a.refreshNetwork(new Date)}catch(t){e.errors.push(`network-states: ${(0,tT.safeError)(t)}`)}}finally{a.invalidate((0,w.o)(e.tried??e.done))}}async function ri(e,t,a,r={evaluate:tF.$,deliver:tG.q,digest:tG.J}){let n=[];if(e.includes("alerts"))if(Date.now()>t)a.push("alerts: skipped, time budget used");else{let e=!0;try{await r.evaluate(new Date),console.info("collector alerts evaluated")}catch(t){e=!1,a.push(`alerts: ${(0,tT.safeError)(t)}`)}try{await r.deliver(new Date,t),console.info("collector notifications delivered")}catch(t){e=!1,a.push(`notify: ${(0,tT.safeError)(t)}`)}e&&n.push("alerts")}if(e.includes("digest")&&(0,t5.z)("digest",t,Date.now()))try{await r.digest(new Date),console.info("collector digest done"),n.push("digest")}catch(e){a.push(`digest: ${(0,tT.safeError)(e)}`)}return n}async function rl(e,t,a,r){let n=[],s=[];for(let o of e){if(Date.now()>t){a.push(`${o}: skipped, time budget used`);continue}if((0,t5.z)(o,t,Date.now())){s.push(o);try{await r(o),n.push(o)}catch(e){a.push(`${o}: ${(0,tT.safeError)(e)}`)}}}return{done:n,tried:s}}async function rd(e){let t,r=new Date,n=await ax(r);if(!n)return{skipped:!0,ok:!0,tasks:[],checks:0,durationMs:0,errors:[]};try{[t]=await (0,a.db)().insert(g.collectorRuns).values({startedAt:r,trigger:"builtin"===e?"manual":e}).returning({id:g.collectorRuns.id})}catch(e){throw await aj(n).catch(()=>void 0),e}let s=[],o=[],i=0,d=r.getTime()+t5.p,u=process.cpuUsage(),c=()=>{let e=process.cpuUsage(u);return Math.round((e.user+e.system)/1e3)},f=e=>console.info(`collector ${e} +${Date.now()-r.getTime()}ms cpu ${c()}ms`);try{var m;f("start");let{lastRun:t,afterDeploy:a}=await a3(),n="cron_job_org"!==e&&"builtin"!==e,u=await (0,l.I)(),{due:c,early:p}=(0,t5._)((0,t5.S)(t,r,n,u),(m=t7(a),Object.keys(m.pending).length>0),u),h=!1,w=e=>p||!h?e.filter(e=>"security"!==e):e,g=c.filter(e=>t5.u.includes(e)),y=g.includes("alerts")?d-t5.X:d,b=await a8(c,s);f(`due ${c.join(",")}`);let{done:k,tried:v}=await rl(c.filter(e=>!t5.u.includes(e)),y,s,async e=>{if(f(`task ${e}`),"heartbeats"===e){let e=new Date;i+=await (0,eV.r)(e,(t,a)=>null!==(0,ac.x)(b,{monitorId:t,appId:a},e),n)}"checks"===e&&(i+=await a6(new Date,y,s,n,b)),"vercel"===e&&await rn(new Date,y,s,t7(a));let t=a1[e];t&&await t({now:new Date,deadline:y,errors:s,protectOnly:(0,t5.$)(e,u)}),"cloudflare"===e&&await (0,aT.h)(new Date,y,s),"domains"===e&&await (0,aT.H)(new Date,y,s),"tls"===e&&await (0,aT.V)(new Date,y,s),"rdap"===e&&await (0,aT.W)(new Date,y,s),"eol"===e&&await (0,aT.i)(new Date,y,s),"node"===e&&(await aL(new Date,y,s),await aJ(new Date,y,s)),"status"===e&&await (0,au.i)(new Date),"logs"===e&&await (0,tB._)(new Date,y,s),"pageviews"===e&&await t4(new Date,y,s),"security"===e&&(h=(await al({now:r,deadline:y,errors:s,paused:u,early:p})).complete)});o.push(...k),f("main done"),await ro({lastRun:t,done:w(o),tried:v,started:r,errors:s}),f("settled");let I=await ri(g,d,s);f("post done"),I.length&&await a4({...t,...Object.fromEntries(w([...o,...I]).map(e=>[e,r.toISOString()]))}),o.push(...I)}catch(e){s.push(`run: ${(0,tT.safeError)(e)}`)}finally{let e=Date.now()-r.getTime();await (0,a.db)().update(g.collectorRuns).set({finishedAt:new Date,ok:0===s.length,errorSummary:s.join("\n").slice(0,2e3)||null,durationMs:e,tasks:o,checks:i}).where((0,p.eq)(g.collectorRuns.id,t.id)).catch(()=>void 0),await aj(n).catch(()=>void 0),process.env.VERCEL&&await tq(c())}return{skipped:!1,ok:0===s.length,tasks:o,checks:i,durationMs:Date.now()-r.getTime(),errors:s}}var ru=e.i(486118);async function rc(e){let t=[...u,...ru.extensions.minuteSteps??[]];if(!t.length)return;let a=new Date,r={deadline:e+6e4-5e3};for(let e of t)try{await e.run(a,r)}catch{console.warn(`minute step ${e.name} failed`)}}async function rp(e,t=Date.now()){let a=await rd(e);return await rc(t),a}async function rf(){return tR(await tC(),ru.extensions.dailySteps??[])}e.s(["runDailyAll",0,rf,"runMinute",0,rp],380167)}];
20
20
 
21
21
  //# sourceMappingURL=src_lib_collector_runners_ts_12z4gtgikss74._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[861600,294965,598513,e=>{"use strict";var r=e.i(137936),t=e.i(118558),n=e.i(600079),a=e.i(109307),o=e.i(221084),i=e.i(312573),s=e.i(323878),d=e.i(920274),u=e.i(713095);async function l(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!(0,d.b)(e))return{ok:!1,error:"Something in that request wasn't valid."};let n=await (0,s.C)(i.t.monitorWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};let a=await (0,d.$)(e,r.userId,new Date);if(!a)return{ok:!1,error:"That note was already dismissed."};try{await (0,o.f)({kind:"ok",message:`AI note dismissed: ${a.title.slice(0,120)}`,detail:`AiNoteDismissed \xb7 from ${a.from.slice(0,60)}`,resourceId:a.appId&&(0,d.b)(a.appId)?a.appId:null,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:"Note dismissed."}},{requireActionMember:a.g},"local")}async function c(e){return(0,n.F)("owner",async r=>{if(!Array.isArray(e)||!e.length||e.length>d.Z||!e.every(e=>"string"==typeof e&&(0,d.b)(e)))return{ok:!1,error:"Something in that request wasn't valid."};let n=await (0,s.C)(i.t.monitorWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};let a=await (0,d.d)([...new Set(e)],r.userId,new Date);if(!a)return{ok:!1,error:"Those notes were already dismissed."};try{await (0,o.f)({kind:"ok",message:`${a} AI ${1===a?"note":"notes"} dismissed`,detail:"AiNotesDismissed",resourceId:null,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:1===a?"Note dismissed.":`${a} notes dismissed.`}},{requireActionMember:a.g},"local")}(0,u.ensureServerEntryExports)([l,c]),(0,r.registerServerReference)(l,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",null),(0,r.registerServerReference)(c,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",null),e.s(["R",0,c,"B",0,l],861600);var f=e.i(462820),m=e.i(109336),w=e.i(86657),y=e.i(502330),g=e.i(425238);let k="That model isn't available. Pick another one or Default.";var v=e.i(918962),b=e.i(962230),h=e.i(779704);let p={ok:!1,error:"Something in that request wasn't valid."},A=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function I(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let t=await (0,m.A)(r.id);if(t)return{ok:!1,error:t};if(!await w.f.provider())return{ok:!1,error:f.B.noProvider};let n=await w.f.appSnapshot(e,new Date);if(!n)return{ok:!1,error:"That application wasn't found."};try{let e=await w.f.complete((0,y.r)(n),{purpose:"ask-ai",maxTokens:500}),r=e.text.trim();if(!r)return{ok:!1,error:"The model returned no text. Try again."};return{ok:!0,data:{text:r,model:e.model,ms:e.ms}}}catch(e){return{ok:!1,error:(0,m.W)(e)}}},{requireActionMember:a.g},"local")}async function q(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let n=await (0,m.A)(r.id);if(n)return{ok:!1,error:n};let a=new Date,i=await w.f.appSnapshot(e,a);if(!i)return{ok:!1,error:"That application wasn't found."};let s=(0,y.R)(i),d=await (0,v.c)(a);if(!d.agConnected)return d.providerReady?S({kind:"app",contextId:e,question:s,by:r.userId,askedAt:a}):{ok:!1,error:"No AI provider is connected. Connect one under AI Gateway › Bring your own key."};let u=await (0,b._)({kind:"app",contextId:e,question:s,by:r.userId,now:a});if(!u.ok)return{ok:!1,error:u.error};if(!u.reused)try{await (0,o.f)({kind:"ok",message:f.B.queuedAudit(i.id.slice(0,80)),resourceId:e,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:u.reused?f.B.alreadyWaiting:f.B.sentApp,data:{id:u.id,status:"pending"}}},{requireActionMember:a.g})}async function S(e){let r;try{r=await (0,v.L)(e.question,{model:e.model,now:e.askedAt})}catch(e){return console.warn("ask: provider failed:",e instanceof Error?e.name:"unknown"),{ok:!1,error:(0,m.W)(e)}}let n=await (0,b.Y)({kind:e.kind,contextId:e.contextId,question:e.question,by:e.by,askedAt:e.askedAt,answeredAt:new Date,answer:r.text,client:v.q,model:r.model});return(0,t.refresh)(),{ok:!0,message:`Answered by ${r.model} in ${(r.ms/1e3).toFixed(1)} s.`,data:{id:n.id,status:"answered",text:r.text,model:r.model,ms:r.ms}}}async function T(e,r){return(0,n.F)("owner",async n=>{let a,i=(a="string"==typeof e?e.trim():"")?a.length>2e3?{ok:!1,error:"A question can be up to 2000 characters."}:(0,g.G)(a)?{ok:!1,error:"That looks like a key or token. Remove it before sending."}:{ok:!0,question:a}:{ok:!1,error:"Type a question first."};if(!i.ok)return{ok:!1,error:i.error};let s=new Date,d=function(e,r){let t="string"==typeof e?e.trim():"";if(!t)return r.providerReady?{via:"provider"}:r.agConnected?{via:"antigravity",model:null}:{via:"none",error:"No AI provider is connected. Connect one under AI Gateway › Bring your own key."};if(t.length>200)return{via:"none",error:k};if(t.startsWith("ag/")){let e=t.slice(3);return r.agConnected&&r.agEnabled.includes(e)?{via:"antigravity",model:e}:{via:"none",error:k}}return r.agConnected&&r.agEnabled.includes(t)?{via:"antigravity",model:t}:{via:"provider",model:t}}(r,await (0,v.c)(s));if("none"===d.via)return{ok:!1,error:d.error};let u=await (0,m.A)(n.id);if(u)return{ok:!1,error:u};if("provider"===d.via)return S({kind:"general",contextId:null,question:i.question,by:n.userId,askedAt:s,model:d.model});let l=d.model,c=await (0,b._)({kind:"general",contextId:null,question:i.question,by:n.userId,now:s,model:l});if(!c.ok)return{ok:!1,error:c.error};if(!c.reused)try{await (0,o.f)({kind:"ok",message:f.B.queuedAudit("general"),resourceId:null,actorUserId:n.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:c.reused?f.B.alreadyWaiting:f.B.sentGeneral,data:{id:c.id,status:"pending"}}},{requireActionMember:a.g})}async function x(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let t=await (0,b.F)(e,r.userId,new Date);return t?{ok:!0,data:{status:t.status,answer:t.answer,model:t.model??t.requestedModel,answeredAt:t.answeredAt?t.answeredAt.toISOString():null}}:{ok:!1,error:"That question wasn't found. It may have been cleaned up."}},{requireActionMember:a.g})}async function $(){return(0,n.F)("owner",async e=>{let r=await (0,m.A)(e.id);if(r)return{ok:!1,error:r};try{let e=await (0,h.E)(new Date,{force:!0});if("no-provider"===e.status)return{ok:!1,error:"No AI provider is connected."};if("empty"===e.status)return{ok:!1,error:"There are no recommendations to summarise."}}catch(e){return{ok:!1,error:(0,m.W)(e)}}return(0,t.refresh)(),{ok:!0,message:"Summary updated."}},{requireActionMember:a.g})}(0,u.ensureServerEntryExports)([I,q,T,x,$]),(0,r.registerServerReference)(I,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",null),(0,r.registerServerReference)(q,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",null),(0,r.registerServerReference)(T,"600730c7e8d0d7d8f8579f514dfe059c45014218db",null),(0,r.registerServerReference)(x,"400d04748bd8331f6c57be7336eeb56251f4985d24",null),(0,r.registerServerReference)($,"0036f299b84702137d0e1804d2180086625225dfa3",null),e.s(["G",0,q,"B",0,T,"T",0,I,"P",0,x,"E",0,$],294965);var R=e.i(94473),F=e.i(188282);let C={requireActionMember:e=>(0,a.g)(e)};async function B(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.m)(e,r);(0,t.revalidatePath)("/settings");let a=Object.keys(e??{}),o=1===a.length&&F.H[a[0]]?.risk==="safe"?`${F.H[a[0]].label}: auto-run ${n[a[0]]?"on":"off"}.`:f.X.autoRunSaved;return{ok:!0,message:o,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}async function D(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.C)(e,r);return(0,t.revalidatePath)("/settings"),{ok:!0,message:`Auto-rollback ${n.enabled?"on":"off"} \xb7 first ${n.windowMin} minutes.`,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}async function E(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.o)(e,r);return(0,t.revalidatePath)("/settings"),{ok:!0,message:`Automatic security fixes ${n.enabled?"on":"off"}.`,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}(0,u.ensureServerEntryExports)([B,D,E]),(0,r.registerServerReference)(B,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",null),(0,r.registerServerReference)(D,"40a6c18a41155fbbf266df357786ef200b826ada93",null),(0,r.registerServerReference)(E,"409915cee1f50c660878fea67a05e33d5f1726cdfa",null),e.s(["G",0,D,"m",0,B,"F",0,E],598513)}];
1
+ module.exports=[861600,294965,598513,e=>{"use strict";var r=e.i(137936),t=e.i(118558),n=e.i(600079),a=e.i(109307),o=e.i(221084),i=e.i(312573),s=e.i(323878),d=e.i(920274),u=e.i(713095);async function l(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!(0,d.b)(e))return{ok:!1,error:"Something in that request wasn't valid."};let n=await (0,s.C)(i.t.monitorWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};let a=await (0,d.$)(e,r.userId,new Date);if(!a)return{ok:!1,error:"That note was already dismissed."};try{await (0,o.f)({kind:"ok",message:`AI note dismissed: ${a.title.slice(0,120)}`,detail:`AiNoteDismissed \xb7 from ${a.from.slice(0,60)}`,resourceId:a.appId&&(0,d.b)(a.appId)?a.appId:null,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:"Note dismissed."}},{requireActionMember:a.g},"local")}async function c(e){return(0,n.F)("owner",async r=>{if(!Array.isArray(e)||!e.length||e.length>d.Z||!e.every(e=>"string"==typeof e&&(0,d.b)(e)))return{ok:!1,error:"Something in that request wasn't valid."};let n=await (0,s.C)(i.t.monitorWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};let a=await (0,d.d)([...new Set(e)],r.userId,new Date);if(!a)return{ok:!1,error:"Those notes were already dismissed."};try{await (0,o.f)({kind:"ok",message:`${a} AI ${1===a?"note":"notes"} dismissed`,detail:"AiNotesDismissed",resourceId:null,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:1===a?"Note dismissed.":`${a} notes dismissed.`}},{requireActionMember:a.g},"local")}(0,u.ensureServerEntryExports)([l,c]),(0,r.registerServerReference)(l,"4016d3ce861458774b9b53d561910c66236b187559",null),(0,r.registerServerReference)(c,"405c14883b08fd6ec71898868cad7f8b9581740a3e",null),e.s(["R",0,c,"B",0,l],861600);var f=e.i(462820),m=e.i(109336),w=e.i(86657),y=e.i(502330),g=e.i(425238);let k="That model isn't available. Pick another one or Default.";var v=e.i(918962),h=e.i(962230),b=e.i(779704);let p={ok:!1,error:"Something in that request wasn't valid."},A=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function I(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let t=await (0,m.A)(r.id);if(t)return{ok:!1,error:t};if(!await w.f.provider())return{ok:!1,error:f.B.noProvider};let n=await w.f.appSnapshot(e,new Date);if(!n)return{ok:!1,error:"That application wasn't found."};try{let e=await w.f.complete((0,y.r)(n),{purpose:"ask-ai",maxTokens:500}),r=e.text.trim();if(!r)return{ok:!1,error:"The model returned no text. Try again."};return{ok:!0,data:{text:r,model:e.model,ms:e.ms}}}catch(e){return{ok:!1,error:(0,m.W)(e)}}},{requireActionMember:a.g},"local")}async function q(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let n=await (0,m.A)(r.id);if(n)return{ok:!1,error:n};let a=new Date,i=await w.f.appSnapshot(e,a);if(!i)return{ok:!1,error:"That application wasn't found."};let s=(0,y.R)(i),d=await (0,v.c)(a);if(!d.agConnected)return d.providerReady?S({kind:"app",contextId:e,question:s,by:r.userId,askedAt:a}):{ok:!1,error:"No AI provider is connected. Connect one under AI Gateway › Bring your own key."};let u=await (0,h._)({kind:"app",contextId:e,question:s,by:r.userId,now:a});if(!u.ok)return{ok:!1,error:u.error};if(!u.reused)try{await (0,o.f)({kind:"ok",message:f.B.queuedAudit(i.id.slice(0,80)),resourceId:e,actorUserId:r.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:u.reused?f.B.alreadyWaiting:f.B.sentApp,data:{id:u.id,status:"pending"}}},{requireActionMember:a.g})}async function S(e){let r;try{r=await (0,v.L)(e.question,{model:e.model,now:e.askedAt})}catch(e){return console.warn("ask: provider failed:",e instanceof Error?e.name:"unknown"),{ok:!1,error:(0,m.W)(e)}}let n=await (0,h.Y)({kind:e.kind,contextId:e.contextId,question:e.question,by:e.by,askedAt:e.askedAt,answeredAt:new Date,answer:r.text,client:v.q,model:r.model});return(0,t.refresh)(),{ok:!0,message:`Answered by ${r.model} in ${(r.ms/1e3).toFixed(1)} s.`,data:{id:n.id,status:"answered",text:r.text,model:r.model,ms:r.ms}}}async function T(e,r){return(0,n.F)("owner",async n=>{let a,i=(a="string"==typeof e?e.trim():"")?a.length>2e3?{ok:!1,error:"A question can be up to 2000 characters."}:(0,g.G)(a)?{ok:!1,error:"That looks like a key or token. Remove it before sending."}:{ok:!0,question:a}:{ok:!1,error:"Type a question first."};if(!i.ok)return{ok:!1,error:i.error};let s=new Date,d=function(e,r){let t="string"==typeof e?e.trim():"";if(!t)return r.providerReady?{via:"provider"}:r.agConnected?{via:"antigravity",model:null}:{via:"none",error:"No AI provider is connected. Connect one under AI Gateway › Bring your own key."};if(t.length>200)return{via:"none",error:k};if(t.startsWith("ag/")){let e=t.slice(3);return r.agConnected&&r.agEnabled.includes(e)?{via:"antigravity",model:e}:{via:"none",error:k}}return r.agConnected&&r.agEnabled.includes(t)?{via:"antigravity",model:t}:{via:"provider",model:t}}(r,await (0,v.c)(s));if("none"===d.via)return{ok:!1,error:d.error};let u=await (0,m.A)(n.id);if(u)return{ok:!1,error:u};if("provider"===d.via)return S({kind:"general",contextId:null,question:i.question,by:n.userId,askedAt:s,model:d.model});let l=d.model,c=await (0,h._)({kind:"general",contextId:null,question:i.question,by:n.userId,now:s,model:l});if(!c.ok)return{ok:!1,error:c.error};if(!c.reused)try{await (0,o.f)({kind:"ok",message:f.B.queuedAudit("general"),resourceId:null,actorUserId:n.userId})}catch{console.warn("audit event failed")}return(0,t.refresh)(),{ok:!0,message:c.reused?f.B.alreadyWaiting:f.B.sentGeneral,data:{id:c.id,status:"pending"}}},{requireActionMember:a.g})}async function x(e){return(0,n.F)("owner",async r=>{if("string"!=typeof e||!A.test(e))return p;let t=await (0,h.F)(e,r.userId,new Date);return t?{ok:!0,data:{status:t.status,answer:t.answer,model:t.model??t.requestedModel,answeredAt:t.answeredAt?t.answeredAt.toISOString():null}}:{ok:!1,error:"That question wasn't found. It may have been cleaned up."}},{requireActionMember:a.g})}async function $(){return(0,n.F)("owner",async e=>{let r=await (0,m.A)(e.id);if(r)return{ok:!1,error:r};try{let e=await (0,b.E)(new Date,{force:!0});if("no-provider"===e.status)return{ok:!1,error:"No AI provider is connected."};if("empty"===e.status)return{ok:!1,error:"There are no recommendations to summarise."}}catch(e){return{ok:!1,error:(0,m.W)(e)}}return(0,t.refresh)(),{ok:!0,message:"Summary updated."}},{requireActionMember:a.g})}(0,u.ensureServerEntryExports)([I,q,T,x,$]),(0,r.registerServerReference)(I,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",null),(0,r.registerServerReference)(q,"40c128fc4b268c78f7acd9047d78cd0175bff93568",null),(0,r.registerServerReference)(T,"60d8e6f43ee602bd831e7e8e22d7eb07d73db1500d",null),(0,r.registerServerReference)(x,"4021997fbaae33ab6279fcd7830f9da09b9e3e5ce0",null),(0,r.registerServerReference)($,"003afbab64a57225b913df055d5d72e449d1e5dcc8",null),e.s(["G",0,q,"B",0,T,"T",0,I,"P",0,x,"E",0,$],294965);var R=e.i(94473),F=e.i(188282);let C={requireActionMember:e=>(0,a.g)(e)};async function B(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.m)(e,r);(0,t.revalidatePath)("/settings");let a=Object.keys(e??{}),o=1===a.length&&F.H[a[0]]?.risk==="safe"?`${F.H[a[0]].label}: auto-run ${n[a[0]]?"on":"off"}.`:f.X.autoRunSaved;return{ok:!0,message:o,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}async function D(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.C)(e,r);return(0,t.revalidatePath)("/settings"),{ok:!0,message:`Auto-rollback ${n.enabled?"on":"off"} \xb7 first ${n.windowMin} minutes.`,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}async function E(e){return(0,n.F)("owner",async r=>{let n=await (0,s.C)(i.t.alertWrite,r.id);if(!n.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,i.H)(n.retryAfter)}.`};try{let n=await (0,R.o)(e,r);return(0,t.revalidatePath)("/settings"),{ok:!0,message:`Automatic security fixes ${n.enabled?"on":"off"}.`,data:n}}catch(e){if(e instanceof R.s)return{ok:!1,error:"Something in that request wasn't valid."};throw e}},C,"local")}(0,u.ensureServerEntryExports)([B,D,E]),(0,r.registerServerReference)(B,"40e216785c0747805fe0ad3f9df87969d68a716704",null),(0,r.registerServerReference)(D,"4050f8ca684811ba18b6f244eab2844c454d737da1",null),(0,r.registerServerReference)(E,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",null),e.s(["G",0,D,"m",0,B,"F",0,E],598513)}];
2
2
 
3
3
  //# sourceMappingURL=src_private_notes_notes-actions_ts_1g63g8u965fhc._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[271997,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(379416),k=a.i(427221),l=a.i(600079),m=a.i(109307),n=a.i(411350),o=a.i(249431),p=a.i(713095);let q={requireActionMember:m.g},r="That agent is already gone. It reappears with its next request.";async function s(a,b){return(0,l.F)("owner",async c=>{let d=j.z.uuid().safeParse(a);if(!d.success)return{ok:!1,error:r};let e=k.z.string().trim().regex(o.p).safeParse(b);return e.success?await (0,n.o)(d.data,e.data,c.id)?((0,i.revalidatePath)("/ai/agents"),{ok:!0,message:e.data?"Agent renamed.":"Agent name reset."}):{ok:!1,error:r}:{ok:!1,error:"Check the highlighted fields.",fieldErrors:{name:"Use up to 40 letters, digits, spaces, dots, dashes or underscores."}}},q,"local")}async function t(a){return(0,l.F)("owner",async b=>{let c=j.z.uuid().safeParse(a);return c.success&&await (0,n.U)(c.data,b.id)?((0,i.revalidatePath)("/ai/agents"),{ok:!0,message:"Agent forgotten. It reappears with its next request."}):{ok:!1,error:r}},q,"local")}(0,p.ensureServerEntryExports)([s,t]),(0,h.registerServerReference)(s,"6073b7c8878702e43f5e4b501463f27c7c8b2e36f8",null),(0,h.registerServerReference)(t,"40b4be9b32132e6961d52903106b98fa986a0adba0",null),a.s(["0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40b4be9b32132e6961d52903106b98fa986a0adba0",0,t,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m,"6073b7c8878702e43f5e4b501463f27c7c8b2e36f8",0,s],271997)}];
1
+ module.exports=[271997,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(379416),k=a.i(427221),l=a.i(600079),m=a.i(109307),n=a.i(411350),o=a.i(249431),p=a.i(713095);let q={requireActionMember:m.g},r="That agent is already gone. It reappears with its next request.";async function s(a,b){return(0,l.F)("owner",async c=>{let d=j.z.uuid().safeParse(a);if(!d.success)return{ok:!1,error:r};let e=k.z.string().trim().regex(o.p).safeParse(b);return e.success?await (0,n.o)(d.data,e.data,c.id)?((0,i.revalidatePath)("/ai/agents"),{ok:!0,message:e.data?"Agent renamed.":"Agent name reset."}):{ok:!1,error:r}:{ok:!1,error:"Check the highlighted fields.",fieldErrors:{name:"Use up to 40 letters, digits, spaces, dots, dashes or underscores."}}},q,"local")}async function t(a){return(0,l.F)("owner",async b=>{let c=j.z.uuid().safeParse(a);return c.success&&await (0,n.U)(c.data,b.id)?((0,i.revalidatePath)("/ai/agents"),{ok:!0,message:"Agent forgotten. It reappears with its next request."}):{ok:!1,error:r}},q,"local")}(0,p.ensureServerEntryExports)([s,t]),(0,h.registerServerReference)(s,"60d07486b20a41a26312cc1233f2dfac9b87abbc94",null),(0,h.registerServerReference)(t,"40ad1a616d1abebc96d8ad24bd0fc6b869aebc4ca8",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40ad1a616d1abebc96d8ad24bd0fc6b869aebc4ca8",0,t,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m,"60d07486b20a41a26312cc1233f2dfac9b87abbc94",0,s],271997)}];
2
2
 
3
3
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_ai_agents_page_actions_21atz5tidps07.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[673841,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(804224),i=a.i(137936),j=a.i(118558),k=a.i(600079),l=a.i(109307),m=a.i(221084),n=a.i(683439),o=a.i(245710),p=a.i(312573),q=a.i(323878),r=a.i(93321),s=a.i(548734),t=a.i(61017),u=a.i(142754),v=a.i(337830),w=a.i(711672),x=a.i(208683);async function y(a,b,c,d,e=Date.now){let f=Array(a.length).fill(void 0),g=0,h=async()=>{for(;;){let b=g++;if(b>=a.length)return;let h=c-e();if(h<5e3)return;f[b]=await d(a[b],h)}};return await Promise.all(Array.from({length:Math.max(1,Math.min(b,a.length))},h)),f}async function z(a,b,c,d="Watchbell console (model test)"){var e,f;let g=Date.now(),h=await (0,v.K)(a,b.upstream,Math.min(45e3,c),512),i=h.ok?{ok:!0,ms:h.ms,at:new Date().toISOString()}:{ok:!1,ms:Date.now()-g,status:h.status,error:(e=h.status,f=h.errorClass,404===e?"model not found (404)":401===e?"key rejected (401)":403===e?"refused (403)":429===e?"rate limited (429)":400===e?"bad request (400)":408===e||/timeout/i.test(f)?"timed out":0===e?"unreachable":e>=500?`server error (${e})`:`failed (${e})`),at:new Date().toISOString()};return await (0,t.h)({at:new Date(g),keyId:null,client:{...t.q,userAgent:d},providerId:a.id,model:(0,x.q)(a,b),kind:"models",tool:null,tokensIn:null,tokensOut:null,latencyMs:i.ms,status:h.ok?200:h.status||502,errorClass:h.ok?null:`test \xb7 ${h.errorClass}`.slice(0,120),stream:!1},[]).catch(()=>{console.warn("model test usage not recorded")}),i}async function A(a,b,c=Date.now()){var d;let e,f=(await (0,w.J)(c,!0)).find(b=>b.id===a);if(!f)return{ok:!1,error:"That connection no longer exists, or its key can't be read."};let g=null===b?(d=f.models.filter(a=>!a.removed),e=a=>a.lastTest?Date.parse(a.lastTest.at)||0:-1,[...d].sort((a,b)=>e(a)-e(b))):f.models.filter(a=>b.includes(a.id));if(0===g.length)return{ok:!1,error:"That model isn't on this connection's list. Refresh the models first."};let h=(await y(g,4,c+5e4,async(a,b)=>({id:a.id,test:await z(f,a,b)}))).filter(a=>!!a);if(h.length){let b=(await (0,w.J)(Date.now(),!0)).find(b=>b.id===a);if(b){let c=new Map(h.map(a=>[a.id,a.test])),d=b.models.map(a=>c.has(a.id)?{...a,lastTest:c.get(a.id)}:a);await (0,s.f)().update(u.f).set({models:d,updatedAt:new Date}).where((0,r.u)(u.f.id,a)),(0,w.t)()}}return{ok:!0,tested:h,skipped:g.length-h.length}}var B=a.i(484458),C=a.i(330863),D=a.i(263972),E=a.i(777302),F=a.i(713095);let G="Something in that request wasn't valid.",H=async(a,b)=>{try{await (0,m.f)({kind:"ok",message:a,resourceId:null,actorUserId:b})}catch{console.warn("audit event failed")}};async function I(a,b,c){return(0,k.F)("owner",async d=>{if(!(0,n.f)(a)||"string"!=typeof b||b.length<1||b.length>200||"boolean"!=typeof c)return{ok:!1,error:G};let e=await (0,q.C)(p.t.alertWrite,d.id);if(!e.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(e.retryAfter)}.`};let f=await (0,E.V)(a,b,c);return f.ok?(await H(`AI model ${c?"enabled":"disabled"}: ${b}`,d.userId),(0,j.refresh)(),{ok:!0,message:`${b} is ${c?"on":"off"}. Takes effect on the next request.`}):{ok:!1,error:f.error}},{requireActionMember:l.g})}async function J(a){return(0,k.F)("owner",async b=>{if("string"!=typeof a||a.length>240)return{ok:!1,error:G};let c=await (0,q.C)(p.t.alertWrite,b.id);if(!c.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(c.retryAfter)}.`};let{rows:d}=await (0,D.Y)(),e=d.find(b=>b.publicId===a);return e&&e.enabled&&e.providerEnabled?(await (0,D.z)(a,new Date),await H(`AI default model: ${a}`,b.userId),(0,j.refresh)(),{ok:!0,message:`${a} is now the default model.`}):{ok:!1,error:"Turn the model on first."}},{requireActionMember:l.g})}async function K(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.refresh,a.id);if(!b.allowed)return{ok:!1,error:`Too many refreshes. Try again in ${(0,p.H)(b.retryAfter)}.`};let{providers:c}=await (0,D.Y)(),d=c.filter(a=>a.enabled);if(0===d.length)return{ok:!1,error:"No provider is connected."};let e=0;for(let a of d)try{!(await (0,E.D)(a.id)).ok&&e++}catch{e++}return(0,j.refresh)(),e===d.length?{ok:!1,error:"No provider answered. Check the connection under Bring your own key."}:{ok:!0,message:e?`Asked ${d.length-e} of ${d.length} providers for their model list.`:`Asked ${d.length} provider${1===d.length?"":"s"} for the model list.`}},{requireActionMember:l.g})}async function L(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.credential,a.id);if(!b.allowed)return{ok:!1,error:`Too many syncs. Try again in ${(0,p.H)(b.retryAfter)}.`};let c=Date.now(),d=await (0,B.X)(new Date(c),c+5e4);if((0,j.refresh)(),!d)return{ok:!1,error:"The sync stopped with an error. Try again."};if(0===d.conns.length)return{ok:!1,error:"No custom server is connected and on."};let e=d.conns.find(a=>!a.ok);if(e&&d.conns.every(a=>!a.ok))return{ok:!1,error:`${e.name}: ${e.error??"the sync failed"}.`};let f=d.summary,g=[`${f.listed} listed`,f.added&&`${f.added} new`,f.removed&&`${f.removed} removed`,f.returned&&`${f.returned} back`,`${f.tested} tested`,f.ready&&`${f.ready} turned on`].filter(Boolean);return{ok:!0,message:`Synced: ${g.join(", ")}.${d.pending?" Some new models wait for their test; the next run comes within minutes.":""}`}},{requireActionMember:l.g})}async function M(a,b){return(0,k.F)("owner",async c=>{if(!(0,n.f)(a)||null!==b&&("string"!=typeof b||b.length<1||b.length>200))return{ok:!1,error:G};let d=await (0,q.C)(p.t.credential,c.id);if(!d.allowed)return{ok:!1,error:`Too many tests. Try again in ${(0,p.H)(d.retryAfter)}.`};let e=await A(a,null===b?null:[b]);if(!e.ok)return{ok:!1,error:e.error};(0,j.refresh)();let f=e.tested.filter(a=>a.test.ok).length,g={tested:e.tested.length,working:f,skipped:e.skipped};if(null!==b){let a=e.tested[0]?.test;return a?.ok?{ok:!0,message:`${b} works (${(a.ms/1e3).toFixed(1)} s).`,data:g}:{ok:!1,error:`${b}: ${a?.error??"not tested"}.`}}return{ok:!0,message:`${f} of ${e.tested.length} model${1===e.tested.length?"":"s"} answered.${e.skipped?` ${e.skipped} not tested yet: run Scan all again.`:""}`,data:g}},{requireActionMember:l.g})}async function N(a,b){return M(a,"string"==typeof b?b:"")}async function O(a){return M(a,null)}async function P(a,b){return(0,k.F)("owner",async c=>{if("boolean"!=typeof a||null!==b&&("string"!=typeof b||b.length<1||b.length>200))return{ok:!1,error:G};let d=await (0,q.C)(p.t.alertWrite,c.id);if(!d.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(d.retryAfter)}.`};if(null!==b){let{rows:a}=await (0,D.Y)();if(!a.some(a=>a.publicId===b&&a.enabled&&a.providerEnabled))return{ok:!1,error:"Turn the model on first."}}return await (0,C.C)({enabled:a,model:b}),await H(`AI advisor notes ${a?"on":"off"}${b?` \xb7 ${b}`:""}`,c.userId),(0,j.refresh)(),{ok:!0,message:a?`Advisor notes are on (${b??"default model"}), at 07:00 and 19:00 ${(0,o.D)()}.`:"Advisor notes are off."}},{requireActionMember:l.g})}async function Q(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.credential,a.id);if(!b.allowed)return{ok:!1,error:`Too many runs. Try again in ${(0,p.H)(b.retryAfter)}.`};try{let a=await (0,C.K)(new Date,{force:!0,deadlineMs:45e3});if("skipped"===a.status){let b="no-provider"===a.reason?"No AI provider is connected.":"no-apps"===a.reason?"No watched app to write about.":"The model's answer had no usable note. Try again.";return{ok:!1,error:b}}return(0,j.refresh)(),{ok:!0,message:`${a.count} advisor note${1===a.count?"":"s"} written by ${a.model}.`,data:{count:a.count}}}catch(a){return{ok:!1,error:a instanceof Error&&"GatewayError"===a.name?a.message.slice(0,300):a instanceof Error&&"advisor deadline"===a.message?"The provider took too long. Try again.":"The AI provider couldn't answer. Try again."}}},{requireActionMember:l.g})}(0,F.ensureServerEntryExports)([I,J,K,L,N,O,P,Q]),(0,i.registerServerReference)(I,"709640a8790a9cc1e35f90e3122ced4f280f79a0d9",null),(0,i.registerServerReference)(J,"40c76e86a4210c6222a456c57ff2b7d90ea958c433",null),(0,i.registerServerReference)(K,"0036f566fe6997d2949dc9eaabfa6cc15527a4b8b5",null),(0,i.registerServerReference)(L,"00604a04fcd340e41b5d29f6e0416cc1a551a0b397",null),(0,i.registerServerReference)(N,"60e6f8c2c033489d242efc49167b66d5f2659d31ba",null),(0,i.registerServerReference)(O,"40f211ded89c86c1d716312297213659de4499c664",null),(0,i.registerServerReference)(P,"608430afb64717bc5f5dee57b7801a50dae4e5f2e0",null),(0,i.registerServerReference)(Q,"000a4ba1871757b2d612f09500d2dc11df36f6f80c",null),a.s(["000a4ba1871757b2d612f09500d2dc11df36f6f80c",0,Q,"0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0036f566fe6997d2949dc9eaabfa6cc15527a4b8b5",0,K,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"00604a04fcd340e41b5d29f6e0416cc1a551a0b397",0,L,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40c76e86a4210c6222a456c57ff2b7d90ea958c433",0,J,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m,"40f211ded89c86c1d716312297213659de4499c664",0,O,"60067768b1ef2514683aca72c85cdc195cd5dd6d5a",()=>h.O,"601b40ad39b59c8c6d925d861413c235df7e778d08",()=>h.z,"608430afb64717bc5f5dee57b7801a50dae4e5f2e0",0,P,"60e6f8c2c033489d242efc49167b66d5f2659d31ba",0,N,"709640a8790a9cc1e35f90e3122ced4f280f79a0d9",0,I],673841)}];
1
+ module.exports=[673841,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(804224),i=a.i(137936),j=a.i(118558),k=a.i(600079),l=a.i(109307),m=a.i(221084),n=a.i(683439),o=a.i(245710),p=a.i(312573),q=a.i(323878),r=a.i(93321),s=a.i(548734),t=a.i(61017),u=a.i(142754),v=a.i(337830),w=a.i(711672),x=a.i(208683);async function y(a,b,c,d,e=Date.now){let f=Array(a.length).fill(void 0),g=0,h=async()=>{for(;;){let b=g++;if(b>=a.length)return;let h=c-e();if(h<5e3)return;f[b]=await d(a[b],h)}};return await Promise.all(Array.from({length:Math.max(1,Math.min(b,a.length))},h)),f}async function z(a,b,c,d="Watchbell console (model test)"){var e,f;let g=Date.now(),h=await (0,v.K)(a,b.upstream,Math.min(45e3,c),512),i=h.ok?{ok:!0,ms:h.ms,at:new Date().toISOString()}:{ok:!1,ms:Date.now()-g,status:h.status,error:(e=h.status,f=h.errorClass,404===e?"model not found (404)":401===e?"key rejected (401)":403===e?"refused (403)":429===e?"rate limited (429)":400===e?"bad request (400)":408===e||/timeout/i.test(f)?"timed out":0===e?"unreachable":e>=500?`server error (${e})`:`failed (${e})`),at:new Date().toISOString()};return await (0,t.h)({at:new Date(g),keyId:null,client:{...t.q,userAgent:d},providerId:a.id,model:(0,x.q)(a,b),kind:"models",tool:null,tokensIn:null,tokensOut:null,latencyMs:i.ms,status:h.ok?200:h.status||502,errorClass:h.ok?null:`test \xb7 ${h.errorClass}`.slice(0,120),stream:!1},[]).catch(()=>{console.warn("model test usage not recorded")}),i}async function A(a,b,c=Date.now()){var d;let e,f=(await (0,w.J)(c,!0)).find(b=>b.id===a);if(!f)return{ok:!1,error:"That connection no longer exists, or its key can't be read."};let g=null===b?(d=f.models.filter(a=>!a.removed),e=a=>a.lastTest?Date.parse(a.lastTest.at)||0:-1,[...d].sort((a,b)=>e(a)-e(b))):f.models.filter(a=>b.includes(a.id));if(0===g.length)return{ok:!1,error:"That model isn't on this connection's list. Refresh the models first."};let h=(await y(g,4,c+5e4,async(a,b)=>({id:a.id,test:await z(f,a,b)}))).filter(a=>!!a);if(h.length){let b=(await (0,w.J)(Date.now(),!0)).find(b=>b.id===a);if(b){let c=new Map(h.map(a=>[a.id,a.test])),d=b.models.map(a=>c.has(a.id)?{...a,lastTest:c.get(a.id)}:a);await (0,s.f)().update(u.f).set({models:d,updatedAt:new Date}).where((0,r.u)(u.f.id,a)),(0,w.t)()}}return{ok:!0,tested:h,skipped:g.length-h.length}}var B=a.i(484458),C=a.i(330863),D=a.i(263972),E=a.i(777302),F=a.i(713095);let G="Something in that request wasn't valid.",H=async(a,b)=>{try{await (0,m.f)({kind:"ok",message:a,resourceId:null,actorUserId:b})}catch{console.warn("audit event failed")}};async function I(a,b,c){return(0,k.F)("owner",async d=>{if(!(0,n.f)(a)||"string"!=typeof b||b.length<1||b.length>200||"boolean"!=typeof c)return{ok:!1,error:G};let e=await (0,q.C)(p.t.alertWrite,d.id);if(!e.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(e.retryAfter)}.`};let f=await (0,E.V)(a,b,c);return f.ok?(await H(`AI model ${c?"enabled":"disabled"}: ${b}`,d.userId),(0,j.refresh)(),{ok:!0,message:`${b} is ${c?"on":"off"}. Takes effect on the next request.`}):{ok:!1,error:f.error}},{requireActionMember:l.g})}async function J(a){return(0,k.F)("owner",async b=>{if("string"!=typeof a||a.length>240)return{ok:!1,error:G};let c=await (0,q.C)(p.t.alertWrite,b.id);if(!c.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(c.retryAfter)}.`};let{rows:d}=await (0,D.Y)(),e=d.find(b=>b.publicId===a);return e&&e.enabled&&e.providerEnabled?(await (0,D.z)(a,new Date),await H(`AI default model: ${a}`,b.userId),(0,j.refresh)(),{ok:!0,message:`${a} is now the default model.`}):{ok:!1,error:"Turn the model on first."}},{requireActionMember:l.g})}async function K(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.refresh,a.id);if(!b.allowed)return{ok:!1,error:`Too many refreshes. Try again in ${(0,p.H)(b.retryAfter)}.`};let{providers:c}=await (0,D.Y)(),d=c.filter(a=>a.enabled);if(0===d.length)return{ok:!1,error:"No provider is connected."};let e=0;for(let a of d)try{!(await (0,E.D)(a.id)).ok&&e++}catch{e++}return(0,j.refresh)(),e===d.length?{ok:!1,error:"No provider answered. Check the connection under Bring your own key."}:{ok:!0,message:e?`Asked ${d.length-e} of ${d.length} providers for their model list.`:`Asked ${d.length} provider${1===d.length?"":"s"} for the model list.`}},{requireActionMember:l.g})}async function L(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.credential,a.id);if(!b.allowed)return{ok:!1,error:`Too many syncs. Try again in ${(0,p.H)(b.retryAfter)}.`};let c=Date.now(),d=await (0,B.X)(new Date(c),c+5e4);if((0,j.refresh)(),!d)return{ok:!1,error:"The sync stopped with an error. Try again."};if(0===d.conns.length)return{ok:!1,error:"No custom server is connected and on."};let e=d.conns.find(a=>!a.ok);if(e&&d.conns.every(a=>!a.ok))return{ok:!1,error:`${e.name}: ${e.error??"the sync failed"}.`};let f=d.summary,g=[`${f.listed} listed`,f.added&&`${f.added} new`,f.removed&&`${f.removed} removed`,f.returned&&`${f.returned} back`,`${f.tested} tested`,f.ready&&`${f.ready} turned on`].filter(Boolean);return{ok:!0,message:`Synced: ${g.join(", ")}.${d.pending?" Some new models wait for their test; the next run comes within minutes.":""}`}},{requireActionMember:l.g})}async function M(a,b){return(0,k.F)("owner",async c=>{if(!(0,n.f)(a)||null!==b&&("string"!=typeof b||b.length<1||b.length>200))return{ok:!1,error:G};let d=await (0,q.C)(p.t.credential,c.id);if(!d.allowed)return{ok:!1,error:`Too many tests. Try again in ${(0,p.H)(d.retryAfter)}.`};let e=await A(a,null===b?null:[b]);if(!e.ok)return{ok:!1,error:e.error};(0,j.refresh)();let f=e.tested.filter(a=>a.test.ok).length,g={tested:e.tested.length,working:f,skipped:e.skipped};if(null!==b){let a=e.tested[0]?.test;return a?.ok?{ok:!0,message:`${b} works (${(a.ms/1e3).toFixed(1)} s).`,data:g}:{ok:!1,error:`${b}: ${a?.error??"not tested"}.`}}return{ok:!0,message:`${f} of ${e.tested.length} model${1===e.tested.length?"":"s"} answered.${e.skipped?` ${e.skipped} not tested yet: run Scan all again.`:""}`,data:g}},{requireActionMember:l.g})}async function N(a,b){return M(a,"string"==typeof b?b:"")}async function O(a){return M(a,null)}async function P(a,b){return(0,k.F)("owner",async c=>{if("boolean"!=typeof a||null!==b&&("string"!=typeof b||b.length<1||b.length>200))return{ok:!1,error:G};let d=await (0,q.C)(p.t.alertWrite,c.id);if(!d.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,p.H)(d.retryAfter)}.`};if(null!==b){let{rows:a}=await (0,D.Y)();if(!a.some(a=>a.publicId===b&&a.enabled&&a.providerEnabled))return{ok:!1,error:"Turn the model on first."}}return await (0,C.C)({enabled:a,model:b}),await H(`AI advisor notes ${a?"on":"off"}${b?` \xb7 ${b}`:""}`,c.userId),(0,j.refresh)(),{ok:!0,message:a?`Advisor notes are on (${b??"default model"}), at 07:00 and 19:00 ${(0,o.D)()}.`:"Advisor notes are off."}},{requireActionMember:l.g})}async function Q(){return(0,k.F)("owner",async a=>{let b=await (0,q.C)(p.t.credential,a.id);if(!b.allowed)return{ok:!1,error:`Too many runs. Try again in ${(0,p.H)(b.retryAfter)}.`};try{let a=await (0,C.K)(new Date,{force:!0,deadlineMs:45e3});if("skipped"===a.status){let b="no-provider"===a.reason?"No AI provider is connected.":"no-apps"===a.reason?"No watched app to write about.":"The model's answer had no usable note. Try again.";return{ok:!1,error:b}}return(0,j.refresh)(),{ok:!0,message:`${a.count} advisor note${1===a.count?"":"s"} written by ${a.model}.`,data:{count:a.count}}}catch(a){return{ok:!1,error:a instanceof Error&&"GatewayError"===a.name?a.message.slice(0,300):a instanceof Error&&"advisor deadline"===a.message?"The provider took too long. Try again.":"The AI provider couldn't answer. Try again."}}},{requireActionMember:l.g})}(0,F.ensureServerEntryExports)([I,J,K,L,N,O,P,Q]),(0,i.registerServerReference)(I,"70a742541f3eed108ad7a413cc0ad420d7503d4127",null),(0,i.registerServerReference)(J,"40b8e7f7a92ec301a51123d57c0d25e0bd3547c7cf",null),(0,i.registerServerReference)(K,"00e01c1c4adbc40b1624b9370adbdcf3b5193cfeaa",null),(0,i.registerServerReference)(L,"0089937ba8ffe561eec6893ecb0910063405ab666f",null),(0,i.registerServerReference)(N,"605d194310d00a0e7fffe17e64371f7c41600fe57d",null),(0,i.registerServerReference)(O,"408a939976dfcc3e13eb0f2b4677719806c0b7b38a",null),(0,i.registerServerReference)(P,"60c2b5dd878f6c09d50c24ded43510b951d18cc873",null),(0,i.registerServerReference)(Q,"007c59740ce83f83712443c227e96a23cd433a1421",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"007c59740ce83f83712443c227e96a23cd433a1421",0,Q,"0089937ba8ffe561eec6893ecb0910063405ab666f",0,L,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"00e01c1c4adbc40b1624b9370adbdcf3b5193cfeaa",0,K,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"408a939976dfcc3e13eb0f2b4677719806c0b7b38a",0,O,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40b8e7f7a92ec301a51123d57c0d25e0bd3547c7cf",0,J,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m,"605d194310d00a0e7fffe17e64371f7c41600fe57d",0,N,"60bd52d79d4bf04986db017eba5031b22244425229",()=>h.z,"60c2b5dd878f6c09d50c24ded43510b951d18cc873",0,P,"60cd94834b380656b7ef4e6775055283c04e3aedc4",()=>h.O,"70a742541f3eed108ad7a413cc0ad420d7503d4127",0,I],673841)}];
2
2
 
3
3
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_ai_models_page_actions_0rvlzfa8rjyz_.js.map
@@ -1,4 +1,4 @@
1
1
  module.exports=[652820,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(600079),j=a.i(109307),k=a.i(312573),l=a.i(323878),m=a.i(263972),n=a.i(777302);let o={name:"playground",max:30,windowSeconds:600},p=a=>({ok:!1,error:a});async function q(a){return(0,i.F)("owner",async b=>{let c=function(a){if(!a||"object"!=typeof a)return p("Something in that request wasn't valid.");let b="console"===a.mode?"console":"plain"===a.mode?"plain":null;if(!b)return p("Pick Plain model or Ask the console.");let c="string"==typeof a.model?a.model.trim():"";if(c.length>200)return p("Something in that request wasn't valid.");let d="number"==typeof a.temperature?a.temperature:Number(a.temperature);if(!Number.isFinite(d)||d<0||d>2)return p("Temperature is a number from 0 to 2.");let e="number"==typeof a.maxTokens?a.maxTokens:Number(a.maxTokens);if(!Number.isInteger(e)||e<16||e>8192)return p(`Max output tokens is a whole number from 16 to ${8192..toLocaleString("en-US")}.`);let f="string"==typeof a.system?a.system:"";if(f.length>4e3)return p(`The system prompt is at most ${4e3.toLocaleString("en-US")} characters.`);if(!Array.isArray(a.messages)||a.messages.length<1||a.messages.length>20)return p("A conversation is 1 to 20 messages. Clear it to start over.");let g=[],h=0;for(let b of a.messages){let a=b??{};if("user"!==a.role&&"assistant"!==a.role||"string"!=typeof a.content||!a.content.trim())return p("Something in that request wasn't valid.");if(a.content.length>8e3)return p(`A message is at most ${8e3.toLocaleString("en-US")} characters.`);h+=a.content.length,g.push({role:a.role,content:a.content})}return h>4e4?p("The conversation is too long. Clear it to start over."):"user"!==g[g.length-1].role?p("The last message must be yours."):{ok:!0,value:{model:c,mode:b,temperature:d,maxTokens:e,system:f,messages:g}}}(a);if(!c.ok)return{ok:!1,error:c.error};let d=c.value,e=await (0,l.C)(o,b.id);if(!e.allowed)return{ok:!1,error:`Too many messages. Try again in ${(0,k.H)(e.retryAfter)}.`};let{rows:f,defaultModel:g}=await (0,m.Y)(),h=f.filter(a=>a.enabled&&a.providerEnabled);if(0===h.length)return{ok:!1,error:"No model is on. Connect a provider and turn a model on first."};let i=d.model||(h.some(a=>a.publicId===g)?g:null)||h[0].publicId;if(!h.some(a=>a.publicId===i))return{ok:!1,error:"That model isn't on. Pick another."};let j=[{role:"system",content:d.system.trim()||"You are Watchbell's assistant. Answer from the console data you are given. Say when the data doesn't cover the question."}];"console"===d.mode&&j.push({role:"system",content:`Console data (JSON, names aliased):
2
- ${await (0,n.u)(new Date)}`});try{let a=await (0,n.t)([...j,...d.messages],{model:i,maxTokens:d.maxTokens,temperature:d.temperature,purpose:"playground"});return{ok:!0,data:{text:a.text,model:a.model,tokensIn:a.usage.in,tokensOut:a.usage.out,ms:a.ms,grounded:"console"===d.mode}}}catch(b){let a;return console.warn("playground call failed:",b instanceof Error?b.name:"unknown"),{ok:!1,error:!(a=b instanceof Error?b.message.trim():"")||a.length>220||/w[bp]_|AIza|AQ\.|Bearer|sk-|gsk_|postgres|:\/\/|@/.test(a)?"The provider didn't answer. Check the connection under Bring your own key.":a}}},{requireActionMember:j.g})}(0,a.i(713095).ensureServerEntryExports)([q]),(0,h.registerServerReference)(q,"4062015f7a5163df338c2bd8ecaccada60e07e5200",null),a.s(["0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"400d04748bd8331f6c57be7336eeb56251f4985d24",()=>e.P,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"4062015f7a5163df338c2bd8ecaccada60e07e5200",0,q,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m,"600730c7e8d0d7d8f8579f514dfe059c45014218db",()=>e.B],652820)}];
2
+ ${await (0,n.u)(new Date)}`});try{let a=await (0,n.t)([...j,...d.messages],{model:i,maxTokens:d.maxTokens,temperature:d.temperature,purpose:"playground"});return{ok:!0,data:{text:a.text,model:a.model,tokensIn:a.usage.in,tokensOut:a.usage.out,ms:a.ms,grounded:"console"===d.mode}}}catch(b){let a;return console.warn("playground call failed:",b instanceof Error?b.name:"unknown"),{ok:!1,error:!(a=b instanceof Error?b.message.trim():"")||a.length>220||/w[bp]_|AIza|AQ\.|Bearer|sk-|gsk_|postgres|:\/\/|@/.test(a)?"The provider didn't answer. Check the connection under Bring your own key.":a}}},{requireActionMember:j.g})}(0,a.i(713095).ensureServerEntryExports)([q]),(0,h.registerServerReference)(q,"402abfb28e6a6373772b01b7294178c5aa7010befc",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4021997fbaae33ab6279fcd7830f9da09b9e3e5ce0",()=>e.P,"402abfb28e6a6373772b01b7294178c5aa7010befc",0,q,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m,"60d8e6f43ee602bd831e7e8e22d7eb07d73db1500d",()=>e.B],652820)}];
3
3
 
4
4
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_ai_playground_page_actions_01ejc1xilpuh4.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[821814,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(600079),k=a.i(109307),l=a.i(221084),m=a.i(683439),n=a.i(312573),o=a.i(323878),p=a.i(777302);let q=["requests","tokens"],r=["minute","day","week"],s=/^[A-Za-z0-9._:-]{1,80}$/;async function t(a,b){return(0,j.F)("owner",async c=>{if(!(0,m.f)(a))return{ok:!1,error:"Something in that request wasn't valid."};let d=function(a){if(!Array.isArray(a))return{ok:!1,error:"Something in that request wasn't valid."};if(a.length>10)return{ok:!1,error:"At most 10 limits per connection."};let b=[],c=new Set;for(let d of a){let a=d??{},e=q.find(b=>b===a.metric),f=r.find(b=>b===a.window),g="string"==typeof a.scope&&a.scope.trim()?a.scope.trim():"all",h="string"==typeof a.limit?Number(a.limit.replace(/[,_\s]/g,"")):a.limit;if(!e||!f)return{ok:!1,error:"Pick requests or tokens and a window for every limit."};if(!s.test(g))return{ok:!1,error:"A model name may only use letters, digits and . _ : -."};if("number"!=typeof h||!Number.isInteger(h)||h<1||h>2e9)return{ok:!1,error:"A limit is a whole number from 1 to 2,000,000,000."};let i=`${e}|${g}|${f}`;if(c.has(i))return{ok:!1,error:"Two limits are the same metric, model and window."};c.add(i),b.push({metric:e,scope:g,limit:h,window:f})}return{ok:!0,value:b}}(b);if(!d.ok)return{ok:!1,error:d.error};let e=await (0,o.C)(n.t.credential,c.id);if(!e.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,n.H)(e.retryAfter)}.`};let f=await (0,p.F)(a,d.value);if(!f.ok)return{ok:!1,error:f.error};try{await (0,l.f)({kind:"ok",message:"AI provider limits changed",detail:`${d.value.length} limit${1===d.value.length?"":"s"}`,resourceId:null,actorUserId:c.userId})}catch{console.warn("audit event failed")}return(0,i.refresh)(),{ok:!0,message:"Limits saved."}},{requireActionMember:k.g})}(0,a.i(713095).ensureServerEntryExports)([t]),(0,h.registerServerReference)(t,"604d3bb4e93c06b5ff9ad74e7ec77ff377fbb22459",null),a.s(["0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m,"604d3bb4e93c06b5ff9ad74e7ec77ff377fbb22459",0,t],821814)}];
1
+ module.exports=[821814,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(600079),k=a.i(109307),l=a.i(221084),m=a.i(683439),n=a.i(312573),o=a.i(323878),p=a.i(777302);let q=["requests","tokens"],r=["minute","day","week"],s=/^[A-Za-z0-9._:-]{1,80}$/;async function t(a,b){return(0,j.F)("owner",async c=>{if(!(0,m.f)(a))return{ok:!1,error:"Something in that request wasn't valid."};let d=function(a){if(!Array.isArray(a))return{ok:!1,error:"Something in that request wasn't valid."};if(a.length>10)return{ok:!1,error:"At most 10 limits per connection."};let b=[],c=new Set;for(let d of a){let a=d??{},e=q.find(b=>b===a.metric),f=r.find(b=>b===a.window),g="string"==typeof a.scope&&a.scope.trim()?a.scope.trim():"all",h="string"==typeof a.limit?Number(a.limit.replace(/[,_\s]/g,"")):a.limit;if(!e||!f)return{ok:!1,error:"Pick requests or tokens and a window for every limit."};if(!s.test(g))return{ok:!1,error:"A model name may only use letters, digits and . _ : -."};if("number"!=typeof h||!Number.isInteger(h)||h<1||h>2e9)return{ok:!1,error:"A limit is a whole number from 1 to 2,000,000,000."};let i=`${e}|${g}|${f}`;if(c.has(i))return{ok:!1,error:"Two limits are the same metric, model and window."};c.add(i),b.push({metric:e,scope:g,limit:h,window:f})}return{ok:!0,value:b}}(b);if(!d.ok)return{ok:!1,error:d.error};let e=await (0,o.C)(n.t.credential,c.id);if(!e.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,n.H)(e.retryAfter)}.`};let f=await (0,p.F)(a,d.value);if(!f.ok)return{ok:!1,error:f.error};try{await (0,l.f)({kind:"ok",message:"AI provider limits changed",detail:`${d.value.length} limit${1===d.value.length?"":"s"}`,resourceId:null,actorUserId:c.userId})}catch{console.warn("audit event failed")}return(0,i.refresh)(),{ok:!0,message:"Limits saved."}},{requireActionMember:k.g})}(0,a.i(713095).ensureServerEntryExports)([t]),(0,h.registerServerReference)(t,"60f5d07002495e2e433e48e888b55240002e5dbcad",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m,"60f5d07002495e2e433e48e888b55240002e5dbcad",0,t],821814)}];
2
2
 
3
3
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_ai_quota_page_actions_0iki29gyi8cwa.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[810908,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(600079),k=a.i(109307),l=a.i(462820),m=a.i(221084),n=a.i(312573),o=a.i(323878),p=a.i(690041),q=a.i(849423);async function r(a){return(0,j.F)("owner",async b=>{let c={...p.m};for(let b of p.T){let d=(0,p.S)(a.get(b.key));if(!d.ok)return{ok:!1,error:`${b.label}: enter a whole number of tokens, or leave it blank.`};c[b.key]=d.value}let d=await (0,o.C)(n.t.monitorWrite,b.id);if(!d.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,n.H)(d.retryAfter)}.`};await (0,q.u)(c,new Date);try{await (0,m.f)({kind:"ok",message:l.W.limitsAudit,resourceId:null,actorUserId:b.userId})}catch{console.warn("audit event failed")}return(0,i.refresh)(),{ok:!0,message:"Quota estimates saved."}},{requireActionMember:k.g})}(0,a.i(713095).ensureServerEntryExports)([r]),(0,h.registerServerReference)(r,"40061a919d328cd7727d31962388d1180fc49c1475",null),a.s(["0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"40061a919d328cd7727d31962388d1180fc49c1475",0,r,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m],810908)}];
1
+ module.exports=[810908,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(600079),k=a.i(109307),l=a.i(462820),m=a.i(221084),n=a.i(312573),o=a.i(323878),p=a.i(690041),q=a.i(849423);async function r(a){return(0,j.F)("owner",async b=>{let c={...p.m};for(let b of p.T){let d=(0,p.S)(a.get(b.key));if(!d.ok)return{ok:!1,error:`${b.label}: enter a whole number of tokens, or leave it blank.`};c[b.key]=d.value}let d=await (0,o.C)(n.t.monitorWrite,b.id);if(!d.allowed)return{ok:!1,error:`Too many changes. Try again in ${(0,n.H)(d.retryAfter)}.`};await (0,q.u)(c,new Date);try{await (0,m.f)({kind:"ok",message:l.W.limitsAudit,resourceId:null,actorUserId:b.userId})}catch{console.warn("audit event failed")}return(0,i.refresh)(),{ok:!0,message:"Quota estimates saved."}},{requireActionMember:k.g})}(0,a.i(713095).ensureServerEntryExports)([r]),(0,h.registerServerReference)(r,"40025f5d7d3a19f16c41b58485e14f2e89670c4b9f",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"40025f5d7d3a19f16c41b58485e14f2e89670c4b9f",0,r,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m],810908)}];
2
2
 
3
3
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_ai_usage_page_actions_1c99h-kwdnep7.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[964005,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(843405),k=a.i(600079),l=a.i(109307),m=a.i(342634),n=a.i(875034),o=a.i(713095);let p={requireActionMember:l.g};async function q(a,b){return(0,k.F)("owner",async c=>{let d;if(!(0,m.b)(a)||"approve"!==b&&"reject"!==b)return{ok:!1,error:"Something in that request wasn't valid."};try{d=await (0,n.f)(a,b,{id:c.id,userId:c.userId},new Date)}catch(a){return console.warn("auto-actions decide failed:",a instanceof Error?a.name:"error"),(0,i.refresh)(),{ok:!1,error:"The console couldn't confirm what happened. The proposal may already be approved or running, so check History before doing anything else."}}if("missing"===d.status)return{ok:!1,error:"Unknown proposal."};(0,i.refresh)(),"ok"===d.status&&d.flushHistory&&(0,j.after)(d.flushHistory);let e=d.proposal;return"conflict"===d.status?{ok:!1,error:"pending"===e.status?"This proposal has expired.":`This proposal is already ${e.status}.`}:"rejected"===e.status?{ok:!0,message:"Rejected."}:"failed"===e.status?{ok:!1,error:e.result??"It didn't run."}:{ok:!0,message:e.result??"Approved. It's running."}},p,"local")}async function r(a,b){let c=a=>{let c=b.get(a);return"string"==typeof c?c:""};return q(c("id"),c("decision"))}(0,o.ensureServerEntryExports)([q,r]),(0,h.registerServerReference)(q,"607d6349b9e45dcc5e26dc06250f277cd458e5eaf1",null),(0,h.registerServerReference)(r,"6050c87f4211b2cdb2ba61311fe8a56dd21a9f9411",null),a.s(["0036f299b84702137d0e1804d2180086625225dfa3",()=>e.E,"0044f25e033351520c508c000dd193d3fac544db13",()=>g.f,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",()=>b.f,"00cdf27638ef84151abef7867f4992c441c8a9dc0b",()=>c.f,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6",()=>d.R,"4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9",()=>d.B,"409915cee1f50c660878fea67a05e33d5f1726cdfa",()=>f.F,"40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba",()=>e.G,"40a6c18a41155fbbf266df357786ef200b826ada93",()=>f.G,"40aeebbb6a147a0a03105323f1aa07f834b2ba81ab",()=>e.T,"40d41e8bd8f26c3b95b08307130717fa40ca6dffc0",()=>f.m,"6050c87f4211b2cdb2ba61311fe8a56dd21a9f9411",0,r],964005)}];
1
+ module.exports=[964005,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(137936),i=a.i(118558),j=a.i(843405),k=a.i(600079),l=a.i(109307),m=a.i(342634),n=a.i(875034),o=a.i(713095);let p={requireActionMember:l.g};async function q(a,b){return(0,k.F)("owner",async c=>{let d;if(!(0,m.b)(a)||"approve"!==b&&"reject"!==b)return{ok:!1,error:"Something in that request wasn't valid."};try{d=await (0,n.f)(a,b,{id:c.id,userId:c.userId},new Date)}catch(a){return console.warn("auto-actions decide failed:",a instanceof Error?a.name:"error"),(0,i.refresh)(),{ok:!1,error:"The console couldn't confirm what happened. The proposal may already be approved or running, so check History before doing anything else."}}if("missing"===d.status)return{ok:!1,error:"Unknown proposal."};(0,i.refresh)(),"ok"===d.status&&d.flushHistory&&(0,j.after)(d.flushHistory);let e=d.proposal;return"conflict"===d.status?{ok:!1,error:"pending"===e.status?"This proposal has expired.":`This proposal is already ${e.status}.`}:"rejected"===e.status?{ok:!0,message:"Rejected."}:"failed"===e.status?{ok:!1,error:e.result??"It didn't run."}:{ok:!0,message:e.result??"Approved. It's running."}},p,"local")}async function r(a,b){let c=a=>{let c=b.get(a);return"string"==typeof c?c:""};return q(c("id"),c("decision"))}(0,o.ensureServerEntryExports)([q,r]),(0,h.registerServerReference)(q,"60898099ae9e27e77ae92c46e5c87c81028cb94808",null),(0,h.registerServerReference)(r,"60a83dc04efbbc5b4afa5615a5399acab94dfd4225",null),a.s(["00019977cc003ec0e864e93e49cf0bd8858654523b",()=>c.f,"003af8e20edb88a8005b0d242ed031ab373ed81cb6",()=>g.f,"003afbab64a57225b913df055d5d72e449d1e5dcc8",()=>e.E,"00908e4a017a3eb1fa932c81866de507828f461d50",()=>b.f,"4016d3ce861458774b9b53d561910c66236b187559",()=>d.B,"4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b",()=>e.T,"4050f8ca684811ba18b6f244eab2844c454d737da1",()=>f.G,"405c14883b08fd6ec71898868cad7f8b9581740a3e",()=>d.R,"409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5",()=>f.F,"40c128fc4b268c78f7acd9047d78cd0175bff93568",()=>e.G,"40e216785c0747805fe0ad3f9df87969d68a716704",()=>f.m,"60a83dc04efbbc5b4afa5615a5399acab94dfd4225",0,r],964005)}];
2
2
 
3
3
  //# sourceMappingURL=1oeh_server_app_%28console%29_%28private%29_auto-actions_page_actions_1kw4ce6-efkr1.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[[452587,a=>{var b=a.i(903769),c=a.i(803767);a.S([b,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f,f",0,c,"002363cc93971e2d918df13c67696a807b1a926ef3,N,605f270483dc8d7b3b11dbd8c2a95ebaf2b6aaebad,p"],452587)},713095,(a,b,c)=>{function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`)}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},137936,(a,b,c)=>{Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(211857)},903769,a=>{var b=a.i(137936);a.i(570396);var c=a.i(673727),d=a.i(366443);async function e(){await (0,d.f)().signOut(),(0,c.redirect)("/signin")}(0,a.i(713095).ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",null),a.s(["f",0,e])}],224361,(a,b,c)=>{b.exports=a.x("util",()=>require("util"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},461750,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0gyvfp6c-_edw._.js","server/chunks/ssr/src_db_pglite_ts_0r1r9wqxilnam._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js"].map(b=>a.l(b))).then(()=>b(614755)))},73710,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_cookie_ts_0a12-0n1novgh._.js"].map(b=>a.l(b))).then(()=>b(716983)))},871289,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0z5ucbis8ik32._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js"].map(b=>a.l(b))).then(()=>b(204048)))},522169,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_seed_members_ts_0pz2fa9295pvm._.js"].map(b=>a.l(b))).then(()=>b(615089)))},372153,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_session_ts_0rwvb3aun41zx._.js","server/chunks/ssr/src_lib_demo_0mr090huk17s8._.js"].map(b=>a.l(b))).then(()=>b(765161)))}];
1
+ module.exports=[[452587,a=>{var b=a.i(903769),c=a.i(803767);a.S([b,"00908e4a017a3eb1fa932c81866de507828f461d50,f",0,c,"000e0e10e3ea339db15cabebd5eb5878d06dc4af3f,N,60e8d1ad89d5b3f101dab4eb2f07a18004fc69f2f7,p"],452587)},713095,(a,b,c)=>{function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Error(`A "use server" file can only export async functions, found ${typeof c}.
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`)}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},137936,(a,b,c)=>{Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(211857)},903769,a=>{var b=a.i(137936);a.i(570396);var c=a.i(673727),d=a.i(366443);async function e(){await (0,d.f)().signOut(),(0,c.redirect)("/signin")}(0,a.i(713095).ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"00908e4a017a3eb1fa932c81866de507828f461d50",null),a.s(["f",0,e])}],224361,(a,b,c)=>{b.exports=a.x("util",()=>require("util"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},461750,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0gyvfp6c-_edw._.js","server/chunks/ssr/src_db_pglite_ts_0r1r9wqxilnam._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js"].map(b=>a.l(b))).then(()=>b(614755)))},73710,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_cookie_ts_0a12-0n1novgh._.js"].map(b=>a.l(b))).then(()=>b(716983)))},871289,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0z5ucbis8ik32._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js"].map(b=>a.l(b))).then(()=>b(204048)))},522169,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_seed_members_ts_0pz2fa9295pvm._.js"].map(b=>a.l(b))).then(()=>b(615089)))},372153,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_demo_session_ts_0rwvb3aun41zx._.js","server/chunks/ssr/src_lib_demo_0mr090huk17s8._.js"].map(b=>a.l(b))).then(()=>b(765161)))}];
3
3
 
4
4
  //# sourceMappingURL=%5Broot-of-the-server%5D__03xevz8n-mc20._.js.map
@@ -1,4 +1,4 @@
1
1
  module.exports=[[713095,(a,b,c)=>{function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`)}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},137936,(a,b,c)=>{Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(211857)},903769,a=>{var b=a.i(137936);a.i(570396);var c=a.i(673727),d=a.i(366443);async function e(){await (0,d.f)().signOut(),(0,c.redirect)("/signin")}(0,a.i(713095).ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f",null),a.s(["f",0,e])}],902157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))}];
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`)}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},137936,(a,b,c)=>{Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(211857)},903769,a=>{var b=a.i(137936);a.i(570396);var c=a.i(673727),d=a.i(366443);async function e(){await (0,d.f)().signOut(),(0,c.redirect)("/signin")}(0,a.i(713095).ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"00908e4a017a3eb1fa932c81866de507828f461d50",null),a.s(["f",0,e])}],902157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))}];
3
3
 
4
4
  //# sourceMappingURL=%5Broot-of-the-server%5D__0mvauw9r_4qss._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[727028,(a,b,c)=>{b.exports=a.x("node:zlib",()=>require("node:zlib"))},487821,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(459296);a.S([b,"008b6dbed199d0deb40e431c4e4f3d7746a8c4835f,f",0,c,"00cdf27638ef84151abef7867f4992c441c8a9dc0b,f",0,d,"4022d2901d63f206a8bd1d2ab60a96d5cd16dd97b6,R,4035940c10c8b13b54c2e286ddbf2cb45f4a8383e9,B",0,e,"0036f299b84702137d0e1804d2180086625225dfa3,E,40a2b7910bf5613049d5fe66e9f1f92cf38a0c3bba,G,40aeebbb6a147a0a03105323f1aa07f834b2ba81ab,T",0,f,"409915cee1f50c660878fea67a05e33d5f1726cdfa,F,40a6c18a41155fbbf266df357786ef200b826ada93,G,40d41e8bd8f26c3b95b08307130717fa40ca6dffc0,m",0,g,"0044f25e033351520c508c000dd193d3fac544db13,f",0,h,"0035528bdfecf5b607dc449376ef04758e6164bae3,C,0059ec2f017eeb97aa49951f0bcaea4c634a7c16a8,A,00c18e59576db67f1a6974ea9e349ba282c046dad4,p"],487821)}];
1
+ module.exports=[727028,(a,b,c)=>{b.exports=a.x("node:zlib",()=>require("node:zlib"))},487821,a=>{"use strict";var b=a.i(903769),c=a.i(760937),d=a.i(861600),e=a.i(294965),f=a.i(598513),g=a.i(929941),h=a.i(459296);a.S([b,"00908e4a017a3eb1fa932c81866de507828f461d50,f",0,c,"00019977cc003ec0e864e93e49cf0bd8858654523b,f",0,d,"4016d3ce861458774b9b53d561910c66236b187559,B,405c14883b08fd6ec71898868cad7f8b9581740a3e,R",0,e,"003afbab64a57225b913df055d5d72e449d1e5dcc8,E,4045ab0f6392cfd7a6daf21944e8bfe84e3ffee07b,T,40c128fc4b268c78f7acd9047d78cd0175bff93568,G",0,f,"4050f8ca684811ba18b6f244eab2844c454d737da1,G,409f6a210626dfe6ee3783c4b081fb30b2a4eb01f5,F,40e216785c0747805fe0ad3f9df87969d68a716704,m",0,g,"003af8e20edb88a8005b0d242ed031ab373ed81cb6,f",0,h,"0045c56d92568eedf06fb4da00c9798e2e8ae890de,A,0055ddaf62f40fa3044a23e6e17b0d4479db5fa164,p,00b91aaa7bc652f2136f94ad872bc9c8d61cca61fa,C"],487821)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0rrdzb9wowemv._.js.map