watchbell 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (992) hide show
  1. package/package.json +1 -1
  2. package/server/.next/BUILD_ID +1 -1
  3. package/server/.next/app-path-routes-manifest.json +3 -0
  4. package/server/.next/build-manifest.json +14 -3
  5. package/server/.next/prerender-manifest.json +3 -3
  6. package/server/.next/required-server-files.json +1 -1
  7. package/server/.next/routes-manifest.json +20 -0
  8. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +13 -13
  9. package/server/.next/server/app/(console)/(private)/ai/agents/page.js +72 -71
  10. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  11. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  12. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +12 -12
  13. package/server/.next/server/app/(console)/(private)/ai/ask/page.js +72 -71
  14. package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
  15. package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
  16. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +11 -11
  17. package/server/.next/server/app/(console)/(private)/ai/connect/page.js +72 -71
  18. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  19. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +14 -14
  21. package/server/.next/server/app/(console)/(private)/ai/keys/page.js +72 -71
  22. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  23. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  24. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +12 -12
  25. package/server/.next/server/app/(console)/(private)/ai/logs/page.js +72 -71
  26. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  27. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  28. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +21 -21
  29. package/server/.next/server/app/(console)/(private)/ai/models/page.js +72 -71
  30. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  31. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  32. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +11 -11
  33. package/server/.next/server/app/(console)/(private)/ai/page.js +72 -71
  34. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  36. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +14 -14
  37. package/server/.next/server/app/(console)/(private)/ai/playground/page.js +72 -71
  38. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  39. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  40. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +17 -17
  41. package/server/.next/server/app/(console)/(private)/ai/providers/page.js +72 -71
  42. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  43. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  44. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +12 -12
  45. package/server/.next/server/app/(console)/(private)/ai/quota/page.js +72 -71
  46. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  47. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  48. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +12 -12
  49. package/server/.next/server/app/(console)/(private)/ai/usage/page.js +72 -71
  50. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  51. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  52. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +11 -11
  53. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +72 -71
  54. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  55. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  56. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +12 -12
  57. package/server/.next/server/app/(console)/(private)/auto-actions/page.js +72 -71
  58. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  59. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  60. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +27 -27
  61. package/server/.next/server/app/(console)/alerts/page.js +72 -71
  62. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  63. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  64. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +34 -34
  65. package/server/.next/server/app/(console)/apps/[id]/page.js +72 -71
  66. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  67. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  68. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +14 -14
  69. package/server/.next/server/app/(console)/apps/page.js +72 -71
  70. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  71. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  72. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +14 -14
  73. package/server/.next/server/app/(console)/backups/page.js +72 -71
  74. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  75. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  76. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +11 -11
  77. package/server/.next/server/app/(console)/catalog/page.js +72 -71
  78. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  79. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  80. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +22 -22
  81. package/server/.next/server/app/(console)/connections/page.js +72 -71
  82. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  83. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  84. package/server/.next/server/app/(console)/containers/page/server-reference-manifest.json +14 -14
  85. package/server/.next/server/app/(console)/containers/page.js +72 -71
  86. package/server/.next/server/app/(console)/containers/page.js.nft.json +1 -1
  87. package/server/.next/server/app/(console)/containers/page_client-reference-manifest.js +1 -1
  88. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +11 -11
  89. package/server/.next/server/app/(console)/d1/page.js +72 -71
  90. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  91. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  92. package/server/.next/server/app/(console)/deploy/page/server-reference-manifest.json +11 -11
  93. package/server/.next/server/app/(console)/deploy/page.js +72 -71
  94. package/server/.next/server/app/(console)/deploy/page.js.nft.json +1 -1
  95. package/server/.next/server/app/(console)/deploy/page_client-reference-manifest.js +1 -1
  96. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +19 -19
  97. package/server/.next/server/app/(console)/deployments/page.js +72 -71
  98. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  99. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  100. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +18 -18
  101. package/server/.next/server/app/(console)/dns/page.js +72 -71
  102. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  103. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  104. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +13 -13
  105. package/server/.next/server/app/(console)/domains/page.js +72 -71
  106. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  107. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  108. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +11 -11
  109. package/server/.next/server/app/(console)/events/page.js +72 -71
  110. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  111. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  112. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +18 -18
  113. package/server/.next/server/app/(console)/firebase/page.js +72 -71
  114. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  115. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  116. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +12 -12
  117. package/server/.next/server/app/(console)/logs/page.js +72 -71
  118. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  119. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  120. package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +12 -12
  121. package/server/.next/server/app/(console)/manage/sections/page.js +72 -71
  122. package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -1
  123. package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +1 -1
  124. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +22 -22
  125. package/server/.next/server/app/(console)/neon/page.js +72 -71
  126. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  127. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  128. package/server/.next/server/app/(console)/os/page/server-reference-manifest.json +12 -12
  129. package/server/.next/server/app/(console)/os/page.js +72 -71
  130. package/server/.next/server/app/(console)/os/page.js.nft.json +1 -1
  131. package/server/.next/server/app/(console)/os/page_client-reference-manifest.js +1 -1
  132. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +21 -21
  133. package/server/.next/server/app/(console)/overview/page.js +72 -71
  134. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  135. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  136. package/server/.next/server/app/(console)/reports/[id]/pdf/route/app-paths-manifest.json +3 -0
  137. package/server/.next/server/app/(console)/reports/[id]/pdf/route/build-manifest.json +12 -0
  138. package/server/.next/server/app/(console)/reports/[id]/pdf/route/server-reference-manifest.json +4 -0
  139. package/server/.next/server/app/(console)/reports/[id]/pdf/route.js +26 -0
  140. package/server/.next/server/app/(console)/reports/[id]/pdf/route.js.nft.json +1 -0
  141. package/server/.next/server/app/(console)/reports/[id]/pdf/route_client-reference-manifest.js +3 -0
  142. package/server/.next/server/app/(console)/reports/page/app-paths-manifest.json +3 -0
  143. package/server/.next/server/app/(console)/reports/page/build-manifest.json +22 -0
  144. package/server/.next/server/app/(console)/reports/page/next-font-manifest.json +11 -0
  145. package/server/.next/server/app/(console)/reports/page/react-loadable-manifest.json +1 -0
  146. package/server/.next/server/app/(console)/reports/page/server-reference-manifest.json +155 -0
  147. package/server/.next/server/app/(console)/reports/page.js +121 -0
  148. package/server/.next/server/app/(console)/reports/page.js.nft.json +1 -0
  149. package/server/.next/server/app/(console)/reports/page_client-reference-manifest.js +3 -0
  150. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +12 -12
  151. package/server/.next/server/app/(console)/repos/[id]/page.js +72 -71
  152. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  153. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  154. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +11 -11
  155. package/server/.next/server/app/(console)/repos/page.js +72 -71
  156. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  157. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  158. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +62 -42
  159. package/server/.next/server/app/(console)/settings/page.js +75 -74
  160. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  161. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  162. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +18 -18
  163. package/server/.next/server/app/(console)/sql/page.js +72 -71
  164. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  165. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  166. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +11 -11
  167. package/server/.next/server/app/(console)/status/page.js +72 -71
  168. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  169. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  170. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +32 -32
  171. package/server/.next/server/app/(console)/supabase/page.js +72 -71
  172. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  173. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  174. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +11 -11
  175. package/server/.next/server/app/(console)/topology/page.js +72 -71
  176. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  177. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  178. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +11 -11
  179. package/server/.next/server/app/(console)/turso/page.js +72 -71
  180. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  181. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  182. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +11 -11
  183. package/server/.next/server/app/(console)/upstash/page.js +72 -71
  184. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  185. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  186. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +25 -25
  187. package/server/.next/server/app/(console)/uptime/page.js +72 -71
  188. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  189. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  190. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +16 -16
  191. package/server/.next/server/app/(console)/welcome/page.js +72 -71
  192. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  193. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  194. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  195. package/server/.next/server/app/_global-error/page.js +1 -1
  196. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  197. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  198. package/server/.next/server/app/_global-error.html +1 -1
  199. package/server/.next/server/app/_global-error.rsc +3 -3
  200. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  201. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  202. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
  203. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  204. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  205. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  206. package/server/.next/server/app/_not-found.html +1 -1
  207. package/server/.next/server/app/_not-found.rsc +4 -4
  208. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  209. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  210. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  211. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  212. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  213. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  214. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +8 -8
  215. package/server/.next/server/app/api/collect/route.js +90 -84
  216. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  217. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +8 -8
  218. package/server/.next/server/app/api/daily/route.js +95 -89
  219. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  220. package/server/.next/server/app/api/health/route.js.nft.json +1 -1
  221. package/server/.next/server/app/api/ping/[...parts]/route.js +9 -8
  222. package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
  223. package/server/.next/server/app/api/status/route.js +1 -1
  224. package/server/.next/server/app/api/status/route.js.nft.json +1 -1
  225. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +8 -8
  226. package/server/.next/server/app/api/telegram/webhook/route.js +85 -80
  227. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  228. package/server/.next/server/app/api/v1/[[...rest]]/route.js.nft.json +1 -1
  229. package/server/.next/server/app/api/v1/advice/route.js +27 -23
  230. package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
  231. package/server/.next/server/app/api/v1/ai/chat/completions/route.js +1 -1
  232. package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
  233. package/server/.next/server/app/api/v1/ai/models/route.js +1 -1
  234. package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
  235. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js +1 -1
  236. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
  237. package/server/.next/server/app/api/v1/ai/questions/route.js +31 -27
  238. package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
  239. package/server/.next/server/app/api/v1/mcp/route.js +28 -24
  240. package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
  241. package/server/.next/server/app/api/v1/me/route.js +1 -1
  242. package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
  243. package/server/.next/server/app/api/v1/openapi.json/route.js +1 -1
  244. package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
  245. package/server/.next/server/app/api/v1/status/apps/[app]/route.js +27 -23
  246. package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
  247. package/server/.next/server/app/api/v1/status/route.js +27 -23
  248. package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
  249. package/server/.next/server/app/api/watchdog/route.js +27 -21
  250. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  251. package/server/.next/server/app/auth/confirm/route.js +1 -1
  252. package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
  253. package/server/.next/server/app/auth/google/callback/route.js +16 -15
  254. package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
  255. package/server/.next/server/app/auth/google/create/callback/route.js +1 -1
  256. package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
  257. package/server/.next/server/app/auth/not-member/route.js +1 -1
  258. package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
  259. package/server/.next/server/app/auth/session-ended/route.js +1 -1
  260. package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
  261. package/server/.next/server/app/brand-icon/route/app-paths-manifest.json +3 -0
  262. package/server/.next/server/app/brand-icon/route/build-manifest.json +12 -0
  263. package/server/.next/server/app/brand-icon/route/server-reference-manifest.json +4 -0
  264. package/server/.next/server/app/brand-icon/route.js +15 -0
  265. package/server/.next/server/app/brand-icon/route.js.nft.json +1 -0
  266. package/server/.next/server/app/brand-icon/route_client-reference-manifest.js +3 -0
  267. package/server/.next/server/app/icon.svg/route.js.nft.json +1 -1
  268. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  269. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  270. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  271. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  272. package/server/.next/server/app/mfa/page.js +33 -31
  273. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  274. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  275. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  276. package/server/.next/server/app/mfa/setup/page.js +33 -31
  277. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  278. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  279. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  280. package/server/.next/server/app/page.js.nft.json +1 -1
  281. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  282. package/server/.next/server/app/s/[slug]/badge/[file]/route.js +10 -8
  283. package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
  284. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  285. package/server/.next/server/app/s/[slug]/page.js +10 -10
  286. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  287. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  288. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  289. package/server/.next/server/app/setup/page.js +1 -1
  290. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  291. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  292. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  293. package/server/.next/server/app/signin/page.js +38 -36
  294. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  295. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  296. package/server/.next/server/app-paths-manifest.json +3 -0
  297. package/server/.next/server/chunks/{[externals]__0n4j2emxdv20_._.js → [externals]__0oqc6ym5k457v._.js} +1 -1
  298. package/server/.next/server/chunks/{[externals]__1hwo1oo04do39._.js → [externals]__1aervsuoo1qe_._.js} +1 -1
  299. package/server/.next/server/chunks/{[externals]__1k12utcf9tvqg._.js → [externals]__1oag9t_9gex2-._.js} +1 -1
  300. package/server/.next/server/chunks/{[root-of-the-server]__1avuwg9wmyh48._.js → [root-of-the-server]__0-ytbad9hn7uc._.js} +1 -1
  301. package/server/.next/server/chunks/[root-of-the-server]__00s0famyfjv1y._.js +3 -0
  302. package/server/.next/server/chunks/{[root-of-the-server]__09l9icaspfmoh._.js → [root-of-the-server]__016wnct3b5iby._.js} +2 -2
  303. package/server/.next/server/chunks/[root-of-the-server]__01dj-ln12bcmb._.js +1 -1
  304. package/server/.next/server/chunks/[root-of-the-server]__029099rqwqwff._.js +3 -0
  305. package/server/.next/server/chunks/{[root-of-the-server]__03589rgm1a3ks._.js → [root-of-the-server]__02ctwy1u4z3fj._.js} +2 -2
  306. package/server/.next/server/chunks/[root-of-the-server]__02v25dn1cwxz6._.js +1 -1
  307. package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
  308. package/server/.next/server/chunks/{[root-of-the-server]__06kp2_zqpttyd._.js → [root-of-the-server]__03y8yvaulshnn._.js} +2 -2
  309. package/server/.next/server/chunks/[root-of-the-server]__03z520-siwkv_._.js +3 -0
  310. package/server/.next/server/chunks/{[root-of-the-server]__06l038ifglbqy._.js → [root-of-the-server]__04ogdmf82__0g._.js} +1 -1
  311. package/server/.next/server/chunks/[root-of-the-server]__05qcc-0e8z1u8._.js +1 -1
  312. package/server/.next/server/chunks/{[root-of-the-server]__09msxcjw3tlue._.js → [root-of-the-server]__05s9-538s47_e._.js} +1 -1
  313. package/server/.next/server/chunks/{[root-of-the-server]__1xdi98xyay6bn._.js → [root-of-the-server]__05vm5cxqq2-pg._.js} +1 -1
  314. package/server/.next/server/chunks/[root-of-the-server]__06od3qx7q00rc._.js +3 -0
  315. package/server/.next/server/chunks/{[root-of-the-server]__0uz_r72zdnwdd._.js → [root-of-the-server]__06rlokvpk450w._.js} +2 -2
  316. package/server/.next/server/chunks/{[root-of-the-server]__0ao4b2jjkcvo1._.js → [root-of-the-server]__070v8547b4qpa._.js} +1 -1
  317. package/server/.next/server/chunks/[root-of-the-server]__07eo--c90cju2._.js +1 -1
  318. package/server/.next/server/chunks/{[root-of-the-server]__0fii83nfm0bsk._.js → [root-of-the-server]__07gjmfv5mi33j._.js} +1 -1
  319. package/server/.next/server/chunks/[root-of-the-server]__07u2g5ccvst94._.js +3 -0
  320. package/server/.next/server/chunks/{[root-of-the-server]__205cmd-k6g2kc._.js → [root-of-the-server]__096q5ufradttx._.js} +1 -1
  321. package/server/.next/server/chunks/[root-of-the-server]__09bwtkv2iniyt._.js +3 -0
  322. package/server/.next/server/chunks/[root-of-the-server]__0_2fr1g7uby1m._.js +3 -0
  323. package/server/.next/server/chunks/{[root-of-the-server]__0g0rd65zoitrb._.js → [root-of-the-server]__0aazgg7203ez1._.js} +1 -1
  324. package/server/.next/server/chunks/{[root-of-the-server]__0ebkmgcs7v0c8._.js → [root-of-the-server]__0afpn-tk2qlu0._.js} +2 -2
  325. package/server/.next/server/chunks/[root-of-the-server]__0b7xflnrk4amk._.js +3 -0
  326. package/server/.next/server/chunks/[root-of-the-server]__0bb8xnocnnbt8._.js +3 -0
  327. package/server/.next/server/chunks/[root-of-the-server]__0bxqqjjy9ckvm._.js +3 -0
  328. package/server/.next/server/chunks/[root-of-the-server]__0c0drtvym6hf4._.js +3 -0
  329. package/server/.next/server/chunks/{[root-of-the-server]__0c_mpay_m5kbm._.js → [root-of-the-server]__0erdelc9_06nk._.js} +1 -1
  330. package/server/.next/server/chunks/{[root-of-the-server]__0ww7a-9fnx2rv._.js → [root-of-the-server]__0eyd4kffoz9ex._.js} +1 -1
  331. package/server/.next/server/chunks/[root-of-the-server]__0frz3wu-qcv-d._.js +3 -0
  332. package/server/.next/server/chunks/{[root-of-the-server]__0uyc9w7f_r10u._.js → [root-of-the-server]__0g0-q56cumuup._.js} +1 -1
  333. package/server/.next/server/chunks/[root-of-the-server]__0gb4uz-gv3va0._.js +1 -1
  334. package/server/.next/server/chunks/[root-of-the-server]__0gqye-fi-f3zk._.js +1 -1
  335. package/server/.next/server/chunks/{[root-of-the-server]__0s3b61ttgb9if._.js → [root-of-the-server]__0gv3v5775wfmw._.js} +2 -2
  336. package/server/.next/server/chunks/{[root-of-the-server]__1y9gsf61fh1fv._.js → [root-of-the-server]__0hm-azhxs9ted._.js} +2 -2
  337. package/server/.next/server/chunks/{[root-of-the-server]__0vdm37x30hr6p._.js → [root-of-the-server]__0ieq7-dtcg06b._.js} +1 -1
  338. package/server/.next/server/chunks/{[root-of-the-server]__0r0zrp3s_n614._.js → [root-of-the-server]__0iicsi0n7tfa5._.js} +1 -1
  339. package/server/.next/server/chunks/{[root-of-the-server]__1tlivd99uri0t._.js → [root-of-the-server]__0jevd1p5unnre._.js} +2 -2
  340. package/server/.next/server/chunks/{[root-of-the-server]__0vclan952l_ty._.js → [root-of-the-server]__0jz91oppmwtiq._.js} +2 -2
  341. package/server/.next/server/chunks/[root-of-the-server]__0kk-m8_ul4f4k._.js +1 -1
  342. package/server/.next/server/chunks/{[root-of-the-server]__10d4a34z0js-f._.js → [root-of-the-server]__0mg6rmq22tf26._.js} +1 -1
  343. package/server/.next/server/chunks/[root-of-the-server]__0n-u6p8-hd-89._.js +3 -0
  344. package/server/.next/server/chunks/{[root-of-the-server]__20qirklw1sgj0._.js → [root-of-the-server]__0ng-t81zeeipc._.js} +2 -2
  345. package/server/.next/server/chunks/{[root-of-the-server]__1r2ei065xk141._.js → [root-of-the-server]__0nkfi6x2c4c5p._.js} +1 -1
  346. package/server/.next/server/chunks/{[root-of-the-server]__192br5y94wzhx._.js → [root-of-the-server]__0nyxfjn368366._.js} +1 -1
  347. package/server/.next/server/chunks/[root-of-the-server]__0o6q27cnw6-77._.js +1 -1
  348. package/server/.next/server/chunks/[root-of-the-server]__0p2n1_qp53y51._.js +3 -0
  349. package/server/.next/server/chunks/[root-of-the-server]__0p8j8b2tg73dq._.js +3 -0
  350. package/server/.next/server/chunks/[root-of-the-server]__0p955ekgdwy_c._.js +3 -0
  351. package/server/.next/server/chunks/{[root-of-the-server]__0g3v-ty9-xstp._.js → [root-of-the-server]__0p_rkszoindlf._.js} +1 -1
  352. package/server/.next/server/chunks/{[root-of-the-server]__1tefe1f5835t_._.js → [root-of-the-server]__0pammm8f5qxtv._.js} +2 -2
  353. package/server/.next/server/chunks/{[root-of-the-server]__0c41pzboxtjvz._.js → [root-of-the-server]__0pm83e1a3wwlw._.js} +1 -1
  354. package/server/.next/server/chunks/[root-of-the-server]__0q9s7rbt0e-cf._.js +3 -0
  355. package/server/.next/server/chunks/{[root-of-the-server]__1mbm_bvk1oat7._.js → [root-of-the-server]__0qhyj1r9qcxp3._.js} +2 -2
  356. package/server/.next/server/chunks/[root-of-the-server]__0ra3lgjt0yuyy._.js +3 -0
  357. package/server/.next/server/chunks/{[root-of-the-server]__1z1fgf8k8icw8._.js → [root-of-the-server]__0ra_bw8zg6kmk._.js} +2 -2
  358. package/server/.next/server/chunks/[root-of-the-server]__0sgumm0843o2j._.js +3 -0
  359. package/server/.next/server/chunks/{[root-of-the-server]__0016p4j5uh74t._.js → [root-of-the-server]__0t6rge6laz89-._.js} +2 -2
  360. package/server/.next/server/chunks/{[root-of-the-server]__04v42ls1mfjd2._.js → [root-of-the-server]__0tsly874_mafr._.js} +2 -2
  361. package/server/.next/server/chunks/{[root-of-the-server]__1iruoalu93dg7._.js → [root-of-the-server]__0u4o6oo428rvf._.js} +2 -2
  362. package/server/.next/server/chunks/{[root-of-the-server]__0a7moaa91ctod._.js → [root-of-the-server]__0ux78ppoct5b_._.js} +2 -2
  363. package/server/.next/server/chunks/[root-of-the-server]__0vg5zp6z094qr._.js +3 -0
  364. package/server/.next/server/chunks/{[root-of-the-server]__1ji_xmb_m6fam._.js → [root-of-the-server]__0vhq-__j8umfu._.js} +1 -1
  365. package/server/.next/server/chunks/[root-of-the-server]__0vjvvirn6-fx-._.js +3 -0
  366. package/server/.next/server/chunks/[root-of-the-server]__0vp-x4ifpr3p9._.js +1 -1
  367. package/server/.next/server/chunks/{[root-of-the-server]__10ts7p_9fu3ge._.js → [root-of-the-server]__0vuirlylhcyzm._.js} +2 -2
  368. package/server/.next/server/chunks/{[root-of-the-server]__06zmu7jjyw1qw._.js → [root-of-the-server]__0w1iqt-rpp_3h._.js} +1 -1
  369. package/server/.next/server/chunks/[root-of-the-server]__0welpj78704um._.js +3 -0
  370. package/server/.next/server/chunks/{[root-of-the-server]__20056vw370xom._.js → [root-of-the-server]__0xd_bgjy5_tr5._.js} +1 -1
  371. package/server/.next/server/chunks/[root-of-the-server]__0xnag1k7mnvoh._.js +3 -0
  372. package/server/.next/server/chunks/[root-of-the-server]__0yhki59n8zyjb._.js +1 -1
  373. package/server/.next/server/chunks/[root-of-the-server]__0ymf9ppvpsffe._.js +3 -0
  374. package/server/.next/server/chunks/[root-of-the-server]__0zpo6n_av-p7a._.js +3 -0
  375. package/server/.next/server/chunks/{[root-of-the-server]__1hrcyozojb6ot._.js → [root-of-the-server]__0zs-wkvv1cs0i._.js} +1 -1
  376. package/server/.next/server/chunks/[root-of-the-server]__0zxrhqtvpoio4._.js +3 -0
  377. package/server/.next/server/chunks/[root-of-the-server]__1-9vvc9y0qqhf._.js +3 -0
  378. package/server/.next/server/chunks/[root-of-the-server]__1-bbb_srnbm5x._.js +3 -0
  379. package/server/.next/server/chunks/[root-of-the-server]__10-4cctiab73h._.js +3 -0
  380. package/server/.next/server/chunks/[root-of-the-server]__11300e77grhx6._.js +3 -0
  381. package/server/.next/server/chunks/{[root-of-the-server]__0tshehtsx7229._.js → [root-of-the-server]__11a8fxlpahjy2._.js} +1 -1
  382. package/server/.next/server/chunks/[root-of-the-server]__11tzj3jzqzk6v._.js +3 -0
  383. package/server/.next/server/chunks/{[root-of-the-server]__1ghx3ayy7tm73._.js → [root-of-the-server]__11yn1ky7yixd7._.js} +2 -2
  384. package/server/.next/server/chunks/[root-of-the-server]__12m0p1vyef6d5._.js +3 -0
  385. package/server/.next/server/chunks/[root-of-the-server]__12w6gylk59cym._.js +3 -0
  386. package/server/.next/server/chunks/[root-of-the-server]__13-qqkdecmwba._.js +3 -0
  387. package/server/.next/server/chunks/{[root-of-the-server]__19jalyhtntk8p._.js → [root-of-the-server]__135cn1pmljq9j._.js} +1 -1
  388. package/server/.next/server/chunks/[root-of-the-server]__13i4zx_j8zugt._.js +3 -0
  389. package/server/.next/server/chunks/[root-of-the-server]__1412kx9qb_j46._.js +3 -0
  390. package/server/.next/server/chunks/[root-of-the-server]__1420nm1i823v8._.js +3 -0
  391. package/server/.next/server/chunks/[root-of-the-server]__1426to_m4prqh._.js +1 -1
  392. package/server/.next/server/chunks/{[root-of-the-server]__1a563imf6ya2l._.js → [root-of-the-server]__14bynsn7eae8y._.js} +1 -1
  393. package/server/.next/server/chunks/[root-of-the-server]__14cb1pomeg0x7._.js +3 -0
  394. package/server/.next/server/chunks/[root-of-the-server]__177l2p7kcj-16._.js +1 -1
  395. package/server/.next/server/chunks/[root-of-the-server]__1_iy7tzpesarf._.js +3 -0
  396. package/server/.next/server/chunks/[root-of-the-server]__1akvpmbiap6nf._.js +1 -1
  397. package/server/.next/server/chunks/[root-of-the-server]__1c78cu7kb9vkl._.js +1 -1
  398. package/server/.next/server/chunks/[root-of-the-server]__1cnmxehqzmqq_._.js +3 -0
  399. package/server/.next/server/chunks/[root-of-the-server]__1d1zkp1q80t6q._.js +3 -0
  400. package/server/.next/server/chunks/[root-of-the-server]__1f84fftr_6_6n._.js +3 -0
  401. package/server/.next/server/chunks/[root-of-the-server]__1fteaav9qn2kq._.js +3 -0
  402. package/server/.next/server/chunks/{[root-of-the-server]__10-v22hv1sxrv._.js → [root-of-the-server]__1gl0-1oziw-g0._.js} +2 -2
  403. package/server/.next/server/chunks/{[root-of-the-server]__02y9yjf7lp37-._.js → [root-of-the-server]__1gufo2kz88z04._.js} +1 -1
  404. package/server/.next/server/chunks/{[root-of-the-server]__1ons16gam6qb7._.js → [root-of-the-server]__1hcn00gn9mapd._.js} +2 -2
  405. package/server/.next/server/chunks/[root-of-the-server]__1i_vd8w3df3i6._.js +3 -0
  406. package/server/.next/server/chunks/{[root-of-the-server]__0x5vp_8n6xvpw._.js → [root-of-the-server]__1ia-rts7ilt7c._.js} +2 -2
  407. package/server/.next/server/chunks/[root-of-the-server]__1igmx9-fdh2wd._.js +3 -0
  408. package/server/.next/server/chunks/[root-of-the-server]__1io5zo7iam532._.js +1 -1
  409. package/server/.next/server/chunks/[root-of-the-server]__1jcr8cc_tlvfc._.js +3 -0
  410. package/server/.next/server/chunks/[root-of-the-server]__1kp2wois-47bg._.js +3 -0
  411. package/server/.next/server/chunks/{[root-of-the-server]__0qlf-so9k6401._.js → [root-of-the-server]__1kr6f03r82mk6._.js} +1 -1
  412. package/server/.next/server/chunks/[root-of-the-server]__1lcszcm98v484._.js +3 -0
  413. package/server/.next/server/chunks/[root-of-the-server]__1le7r_1_00km1._.js +3 -0
  414. package/server/.next/server/chunks/{[root-of-the-server]__0exruft64u1hg._.js → [root-of-the-server]__1lvf4tk_1td0a._.js} +2 -2
  415. package/server/.next/server/chunks/[root-of-the-server]__1mqv7anx5l3yq._.js +3 -0
  416. package/server/.next/server/chunks/[root-of-the-server]__1mufebnwyxlwx._.js +3 -0
  417. package/server/.next/server/chunks/[root-of-the-server]__1o0lvy6ek0v5d._.js +3 -0
  418. package/server/.next/server/chunks/[root-of-the-server]__1ozfk4_3lx1o7._.js +1 -1
  419. package/server/.next/server/chunks/{[root-of-the-server]__09yvavo991rdd._.js → [root-of-the-server]__1p1e6x-mb7ro2._.js} +2 -2
  420. package/server/.next/server/chunks/[root-of-the-server]__1pu84qy7loc8o._.js +3 -0
  421. package/server/.next/server/chunks/{[root-of-the-server]__0_vtp19_2frgj._.js → [root-of-the-server]__1pyc-ezfujjcp._.js} +1 -1
  422. package/server/.next/server/chunks/{[root-of-the-server]__1yxxfmyk3649a._.js → [root-of-the-server]__1pyhos8be90-4._.js} +1 -1
  423. package/server/.next/server/chunks/[root-of-the-server]__1qelr0qe50xap._.js +3 -0
  424. package/server/.next/server/chunks/[root-of-the-server]__1qqdsrhuw0z-w._.js +3 -0
  425. package/server/.next/server/chunks/[root-of-the-server]__1qwy7s_95k9k-._.js +3 -0
  426. package/server/.next/server/chunks/{[root-of-the-server]__0vb1_m_h5hi0z._.js → [root-of-the-server]__1qxm3lqqdbyy7._.js} +2 -2
  427. package/server/.next/server/chunks/[root-of-the-server]__1rusbj8ktmzj0._.js +3 -0
  428. package/server/.next/server/chunks/[root-of-the-server]__1rxaooz-d8jfs._.js +3 -0
  429. package/server/.next/server/chunks/[root-of-the-server]__1s8f1ovcj5r99._.js +3 -0
  430. package/server/.next/server/chunks/[root-of-the-server]__1tdb11b6vn4qm._.js +3 -0
  431. package/server/.next/server/chunks/[root-of-the-server]__1ti5-6okt7fur._.js +3 -0
  432. package/server/.next/server/chunks/{[root-of-the-server]__1cdt67d022uf1._.js → [root-of-the-server]__1ugnox9gcdhvm._.js} +2 -2
  433. package/server/.next/server/chunks/{[root-of-the-server]__090n04cg_br7j._.js → [root-of-the-server]__1vvg0ur3_7o0p._.js} +1 -1
  434. package/server/.next/server/chunks/[root-of-the-server]__1w_ga9n2lj53n._.js +3 -0
  435. package/server/.next/server/chunks/{[root-of-the-server]__0vsafetdvsfhj._.js → [root-of-the-server]__1wjsjh-1i-sn6._.js} +1 -1
  436. package/server/.next/server/chunks/[root-of-the-server]__1x4u0cdsl_81t._.js +3 -0
  437. package/server/.next/server/chunks/[root-of-the-server]__1xe_98y-j38aq._.js +3 -0
  438. package/server/.next/server/chunks/[root-of-the-server]__1xku6cma1a_kb._.js +3 -0
  439. package/server/.next/server/chunks/{[root-of-the-server]__0pi_camvun8ak._.js → [root-of-the-server]__1xnqsy7nud--q._.js} +2 -2
  440. package/server/.next/server/chunks/[root-of-the-server]__1yk1psrx0yy4n._.js +3 -0
  441. package/server/.next/server/chunks/{[root-of-the-server]__19o-a03uklyrw._.js → [root-of-the-server]__1ywvdsk_bmws0._.js} +2 -2
  442. package/server/.next/server/chunks/[root-of-the-server]__1z9kl-irij2lu._.js +3 -0
  443. package/server/.next/server/chunks/[root-of-the-server]__1zmoy4u_xb_yi._.js +3 -0
  444. package/server/.next/server/chunks/[root-of-the-server]__1zq2zv2ogn3ot._.js +3 -0
  445. package/server/.next/server/chunks/[root-of-the-server]__202mmzv3u-hk1._.js +3 -0
  446. package/server/.next/server/chunks/[root-of-the-server]__20dehd8e5-v9y._.js +1 -1
  447. package/server/.next/server/chunks/[root-of-the-server]__20tvyorpg49kd._.js +3 -0
  448. package/server/.next/server/chunks/{[root-of-the-server]__1i841w7a3057h._.js → [root-of-the-server]__212_l7y-180xi._.js} +1 -1
  449. package/server/.next/server/chunks/{[root-of-the-server]__1vfvw1pmssxww._.js → [root-of-the-server]__217jp1b3psyq_._.js} +1 -1
  450. package/server/.next/server/chunks/_0-sqv2nbaba7h._.js +3 -0
  451. package/server/.next/server/chunks/_00t02v1a9nfr1._.js +3 -0
  452. package/server/.next/server/chunks/_01epotkqa90nv._.js +3 -0
  453. package/server/.next/server/chunks/_04oi0m63biyjd._.js +3 -0
  454. package/server/.next/server/chunks/_05kxcc393c_0z._.js +3 -0
  455. package/server/.next/server/chunks/_08q7x7rdbiaql._.js +49 -0
  456. package/server/.next/server/chunks/_0apakqacgawy4._.js +3 -0
  457. package/server/.next/server/chunks/_0bki3kju_1u1f._.js +3 -0
  458. package/server/.next/server/chunks/_0d29nzne5jrwy._.js +49 -0
  459. package/server/.next/server/chunks/_0djze-128wsu0._.js +3 -0
  460. package/server/.next/server/chunks/_0dq_vw-kky70h._.js +3 -0
  461. package/server/.next/server/chunks/_0hm72d9am2vfs._.js +3 -0
  462. package/server/.next/server/chunks/_0huryxihjw6tl._.js +49 -0
  463. package/server/.next/server/chunks/{_0ehqx1pkh20px._.js → _0lboyl6w4kfx4._.js} +3 -3
  464. package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +1 -1
  465. package/server/.next/server/chunks/_0ou2tylxx1ltw._.js +10 -0
  466. package/server/.next/server/chunks/_0rqil_klxfz3j._.js +3 -0
  467. package/server/.next/server/chunks/_10mj3f1wis1ld._.js +3 -0
  468. package/server/.next/server/chunks/_15f0c7f46zkh3._.js +3 -0
  469. package/server/.next/server/chunks/_17u84tg9ibxp9._.js +3 -0
  470. package/server/.next/server/chunks/_1e4rch26scbhq._.js +49 -0
  471. package/server/.next/server/chunks/_1g-4oov0uynv-._.js +3 -0
  472. package/server/.next/server/chunks/_1iugpfonxri3e._.js +3 -0
  473. package/server/.next/server/chunks/_1iunyzyr-tfdj._.js +31 -0
  474. package/server/.next/server/chunks/{_0zj8nj1f2phf5._.js → _1n4labwyv5msc._.js} +1 -1
  475. package/server/.next/server/chunks/_1nuny071s602h._.js +3 -0
  476. package/server/.next/server/chunks/_1ohb_bmawpjlz._.js +10 -0
  477. package/server/.next/server/chunks/_1qcal07c71omr._.js +3 -0
  478. package/server/.next/server/chunks/_1sx70w_rurjin._.js +3 -0
  479. package/server/.next/server/chunks/_1tl0532dffdm-._.js +3 -0
  480. package/server/.next/server/chunks/{_0jiq3ns7681pv._.js → _1txqs5b7jg9so._.js} +3 -3
  481. package/server/.next/server/chunks/{_1t46m15axa4b4._.js → _1w9di5m91vtjk._.js} +3 -3
  482. package/server/.next/server/chunks/_20ounk93z_b6h._.js +3 -0
  483. package/server/.next/server/chunks/_next-internal_server_app_(console)_reports_[id]_pdf_route_actions_1z8w14-7mvvj9.js +3 -0
  484. package/server/.next/server/chunks/_next-internal_server_app_brand-icon_route_actions_1d7gd59j_572y.js +3 -0
  485. package/server/.next/server/chunks/{node_modules_drizzle-orm_0p2-_xghnn-0j._.js → node_modules_drizzle-orm_0ac-0bknpndrl._.js} +2 -2
  486. package/server/.next/server/chunks/{node_modules_drizzle-orm_0pxdj1u-i8py9._.js → node_modules_drizzle-orm_0k-yqdh9heao6._.js} +2 -2
  487. package/server/.next/server/chunks/{node_modules_drizzle-orm_15o96osca_ezd._.js → node_modules_drizzle-orm_0k7__h1lfq5ug._.js} +2 -2
  488. package/server/.next/server/chunks/{node_modules_drizzle-orm_1hvomr2ymp14o._.js → node_modules_drizzle-orm_0pv-kejmwhhk-._.js} +2 -2
  489. package/server/.next/server/chunks/node_modules_drizzle-orm_1emqi6ca48q0m._.js +4 -0
  490. package/server/.next/server/chunks/node_modules_drizzle-orm_entity_1-0q2stnw2ab8.js +3 -3
  491. package/server/.next/server/chunks/src_0--qn984h6czu._.js +1 -1
  492. package/server/.next/server/chunks/src_0-s0huszb29pj._.js +3 -0
  493. package/server/.next/server/chunks/src_05jrvcsgaq5ek._.js +1 -1
  494. package/server/.next/server/chunks/src_06tyytf_c_hlu._.js +1 -1
  495. package/server/.next/server/chunks/src_0_9n02bmhtk4z._.js +1 -1
  496. package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +1 -1
  497. package/server/.next/server/chunks/src_0dxbyz8iemj_5._.js +1 -1
  498. package/server/.next/server/chunks/src_0frmhaaejchbk._.js +3 -0
  499. package/server/.next/server/chunks/src_0kihmyo3yghxy._.js +3 -0
  500. package/server/.next/server/chunks/src_0qnh_ndxnflja._.js +3 -0
  501. package/server/.next/server/chunks/src_0r3j66vbc5g4f._.js +3 -0
  502. package/server/.next/server/chunks/src_0u2zbz77uh__q._.js +1 -1
  503. package/server/.next/server/chunks/src_0ud2mqnh4emxz._.js +1 -1
  504. package/server/.next/server/chunks/src_10vyvp9vy_69h._.js +1 -1
  505. package/server/.next/server/chunks/src_16t2uefmdlh8d._.js +3 -0
  506. package/server/.next/server/chunks/src_17j4dgvb7rx7k._.js +3 -0
  507. package/server/.next/server/chunks/{src_05be6wzefzaky._.js → src_1_y0pxtbr6e04._.js} +2 -2
  508. package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
  509. package/server/.next/server/chunks/src_1cvp6ubs-3z6l._.js +1 -1
  510. package/server/.next/server/chunks/src_1d-0nhc193soh._.js +3 -0
  511. package/server/.next/server/chunks/src_1d1ewqrujfp03._.js +3 -0
  512. package/server/.next/server/chunks/src_1il7wg_qjxny7._.js +1 -1
  513. package/server/.next/server/chunks/{src_0cdn5fuk8f_x2._.js → src_1mwttl5ainte0._.js} +2 -2
  514. package/server/.next/server/chunks/src_1s913pql1_n-f._.js +3 -0
  515. package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +1 -1
  516. package/server/.next/server/chunks/src_1u-olt84z63rx._.js +1 -1
  517. package/server/.next/server/chunks/src_1wmb2yl3tn-dd._.js +1 -1
  518. package/server/.next/server/chunks/src_1wzm081p6qyre._.js +1 -1
  519. package/server/.next/server/chunks/src_20xyhmuf0y6_v._.js +3 -0
  520. package/server/.next/server/chunks/src_db_client_ts_0vckux1-linlc._.js +23 -0
  521. package/server/.next/server/chunks/src_lib_02-wqy78_rn85._.js +3 -0
  522. package/server/.next/server/chunks/src_lib_0ds7lhpop_adf._.js +1 -1
  523. package/server/.next/server/chunks/src_lib_0eqv8l-v8d5ze._.js +1 -1
  524. package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
  525. package/server/.next/server/chunks/src_lib_0hw2g5g295xx0._.js +12 -0
  526. package/server/.next/server/chunks/src_lib_0iqdlrya6vfc_._.js +3 -0
  527. package/server/.next/server/chunks/src_lib_0kjik9nmtqlf5._.js +7 -0
  528. package/server/.next/server/chunks/src_lib_0krbxej8kykyp._.js +7 -0
  529. package/server/.next/server/chunks/src_lib_0o9m8m1sm5759._.js +5 -0
  530. package/server/.next/server/chunks/src_lib_0pyyxm3m1rttg._.js +1 -1
  531. package/server/.next/server/chunks/src_lib_0sd9c_cjgc4ro._.js +3 -0
  532. package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +17 -17
  533. package/server/.next/server/chunks/src_lib_0xfwnbkxb4z5s._.js +7 -0
  534. package/server/.next/server/chunks/src_lib_11ky6rv8zte7m._.js +7 -0
  535. package/server/.next/server/chunks/src_lib_13irheo9qqhgx._.js +1 -1
  536. package/server/.next/server/chunks/src_lib_1550ey8j96v9n._.js +1 -1
  537. package/server/.next/server/chunks/src_lib_1hveabvnpk83x._.js +12 -0
  538. package/server/.next/server/chunks/src_lib_1n_d25awwz8ga._.js +3 -0
  539. package/server/.next/server/chunks/src_lib_1onr7b4_kglpt._.js +1 -1
  540. package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +17 -17
  541. package/server/.next/server/chunks/src_lib_1sz77jjn7xl7o._.js +1 -1
  542. package/server/.next/server/chunks/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
  543. package/server/.next/server/chunks/src_lib_branding_ts_03ns4y_8z0-6e._.js +3 -0
  544. package/server/.next/server/chunks/src_lib_branding_ts_0jfv9nur5alvy._.js +3 -0
  545. package/server/.next/server/chunks/src_lib_collector_auth_ts_0lqx92__e4zij._.js +6 -3
  546. package/server/.next/server/chunks/src_lib_collector_deploy-days_ts_087kwe68m4i93._.js +3 -0
  547. package/server/.next/server/chunks/src_lib_data_report-db_ts_0b5f4dpxn08gk._.js +3 -0
  548. package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  549. package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +11 -11
  550. package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +11 -11
  551. package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +11 -11
  552. package/server/.next/server/chunks/src_lib_local-auth_proxy_ts_1g9krhdh2rnt2._.js +1 -21
  553. package/server/.next/server/chunks/src_lib_maintenance_ts_0voja6l8yogbf._.js +3 -0
  554. package/server/.next/server/chunks/src_lib_notify_lang_ts_1r2w02ctaky7e._.js +1 -1
  555. package/server/.next/server/chunks/src_lib_rate-limit_ts_09dzyftcadggh._.js +1 -1
  556. package/server/.next/server/chunks/src_lib_rate-limit_ts_0r-eu6to05vyx._.js +1 -1
  557. package/server/.next/server/chunks/src_lib_rate-limit_ts_1ahtm4quu2rri._.js +1 -1
  558. package/server/.next/server/chunks/src_lib_sections_ts_0r8u4nvlpdkgq._.js +1 -1
  559. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  560. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_21atz5tidps07.js +1 -1
  561. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +1 -1
  562. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +1 -1
  563. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +1 -1
  564. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +1 -1
  565. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +1 -1
  566. package/server/.next/server/chunks/ssr/{[externals]__0summv9f9jkob._.js → [externals]__02peoq6kft9oz._.js} +1 -1
  567. package/server/.next/server/chunks/ssr/{[externals]__1q1drb4oske-9._.js → [externals]__0byytapt83qke._.js} +1 -1
  568. package/server/.next/server/chunks/ssr/{[externals]__00hge8tjqv73a._.js → [externals]__0gb_9a2m3eqk5._.js} +1 -1
  569. package/server/.next/server/chunks/ssr/{[externals]__1jdljyrzmqoz0._.js → [externals]__1baveo0r8_hf1._.js} +1 -1
  570. package/server/.next/server/chunks/ssr/[root-of-the-server]__001mglelq4wpc._.js +1 -1
  571. package/server/.next/server/chunks/ssr/{[root-of-the-server]__12t9_ndr9z-2d._.js → [root-of-the-server]__004q78ed0nf0_._.js} +1 -1
  572. package/server/.next/server/chunks/ssr/[root-of-the-server]__01o65-2jgmg9x._.js +3 -0
  573. package/server/.next/server/chunks/ssr/{[root-of-the-server]__157kjredkf1pa._.js → [root-of-the-server]__041mpme_x36vq._.js} +1 -1
  574. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0n4bkq-45z4aa._.js → [root-of-the-server]__04_prmhm_cts4._.js} +1 -1
  575. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1a5760tg4iits._.js → [root-of-the-server]__05uxv6qwfpp79._.js} +2 -2
  576. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0423qjo9c2t9-._.js → [root-of-the-server]__077-acap7g4ck._.js} +1 -1
  577. package/server/.next/server/chunks/ssr/[root-of-the-server]__09blzlbsxqvy9._.js +1 -1
  578. package/server/.next/server/chunks/ssr/{[root-of-the-server]__05s2n35zn4go-._.js → [root-of-the-server]__0ct4apye0sfmc._.js} +1 -1
  579. package/server/.next/server/chunks/ssr/{[root-of-the-server]__139ya3ejh6htx._.js → [root-of-the-server]__0hgf7si8htevx._.js} +1 -1
  580. package/server/.next/server/chunks/ssr/[root-of-the-server]__0jgapr1cnvhi6._.js +1 -1
  581. package/server/.next/server/chunks/ssr/[root-of-the-server]__0keo0-hwsnkw9._.js +1 -1
  582. package/server/.next/server/chunks/ssr/[root-of-the-server]__0l50vsk8enxzj._.js +1 -1
  583. package/server/.next/server/chunks/ssr/[root-of-the-server]__0mvauw9r_4qss._.js +1 -1
  584. package/server/.next/server/chunks/ssr/{[root-of-the-server]__07zuxj3veqm14._.js → [root-of-the-server]__0q7rssq_3unbc._.js} +1 -1
  585. package/server/.next/server/chunks/ssr/{[root-of-the-server]__13phmsw9wsyrs._.js → [root-of-the-server]__0qhbs-or7q-om._.js} +1 -1
  586. package/server/.next/server/chunks/ssr/[root-of-the-server]__0rdf04ziqasfz._.js +1 -1
  587. package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +1 -1
  588. package/server/.next/server/chunks/ssr/{[root-of-the-server]__02lkybw6gg3ln._.js → [root-of-the-server]__0rrnk3_fb0l_9._.js} +2 -2
  589. package/server/.next/server/chunks/ssr/[root-of-the-server]__0u-o_v_v6y58o._.js +3 -0
  590. package/server/.next/server/chunks/ssr/{[root-of-the-server]__10r0u-q18z71i._.js → [root-of-the-server]__0uxychcp_pldy._.js} +1 -1
  591. package/server/.next/server/chunks/ssr/{[root-of-the-server]__16jfs8j29r4b5._.js → [root-of-the-server]__0vqae5m2ntd34._.js} +2 -2
  592. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1nk87bg9lne35._.js → [root-of-the-server]__10y2ig7dg3f-k._.js} +1 -1
  593. package/server/.next/server/chunks/ssr/[root-of-the-server]__11yadiuejywcz._.js +3 -0
  594. package/server/.next/server/chunks/ssr/[root-of-the-server]__12c2r19g75dyy._.js +3 -0
  595. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1iqedr7nfvayk._.js → [root-of-the-server]__13x0qmv4fm_1p._.js} +1 -1
  596. package/server/.next/server/chunks/ssr/[root-of-the-server]__18dcfrlpoapw9._.js +3 -0
  597. package/server/.next/server/chunks/ssr/{[root-of-the-server]__183_36tj3p645._.js → [root-of-the-server]__1_axyb404w3bf._.js} +2 -2
  598. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  599. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_q3kww244pif._.js +3 -0
  600. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ev5rocipbkjw._.js +3 -0
  601. package/server/.next/server/chunks/ssr/[root-of-the-server]__1g6kynby65m0v._.js +3 -0
  602. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0z5ucbis8ik32._.js → [root-of-the-server]__1gkcoq0cmmax1._.js} +2 -2
  603. package/server/.next/server/chunks/ssr/{[root-of-the-server]__07_efq7yhxfj-._.js → [root-of-the-server]__1itgt83qo1e77._.js} +1 -1
  604. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1d1ksu1dlha3r._.js → [root-of-the-server]__1k8mxdm-cxfg_._.js} +2 -2
  605. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0no6c0whevi73._.js → [root-of-the-server]__1mbb917mrz5c-._.js} +1 -1
  606. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1knbzqo0nba_q._.js → [root-of-the-server]__1n-rcmbkk7duv._.js} +2 -2
  607. package/server/.next/server/chunks/ssr/[root-of-the-server]__1pafj7m_b8m14._.js +3 -0
  608. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1mah0p09qrkpu._.js → [root-of-the-server]__1pr-neo8jutji._.js} +2 -2
  609. package/server/.next/server/chunks/ssr/{[root-of-the-server]__14e0j38785glf._.js → [root-of-the-server]__1q6iypbn6yagc._.js} +2 -2
  610. package/server/.next/server/chunks/ssr/[root-of-the-server]__1rzolbt5ior_s._.js +3 -0
  611. package/server/.next/server/chunks/ssr/{[root-of-the-server]__18gw74mr2vto3._.js → [root-of-the-server]__1sw2q1p1t59y8._.js} +2 -2
  612. package/server/.next/server/chunks/ssr/[root-of-the-server]__1u_13nhw3kuz3._.js +1 -1
  613. package/server/.next/server/chunks/ssr/[root-of-the-server]__1vgliw2256_6l._.js +4 -0
  614. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0gyvfp6c-_edw._.js → [root-of-the-server]__1xkfr7qk7oxjf._.js} +2 -2
  615. package/server/.next/server/chunks/ssr/[root-of-the-server]__1z3vauqrf2l-_._.js +3 -0
  616. package/server/.next/server/chunks/ssr/{[root-of-the-server]__06bgklzuef-ya._.js → [root-of-the-server]__1z_pt3d8lty_n._.js} +2 -2
  617. package/server/.next/server/chunks/ssr/{[root-of-the-server]__092gsphy4oz6k._.js → [root-of-the-server]__1zsqu1mecqptt._.js} +2 -2
  618. package/server/.next/server/chunks/ssr/_008i8a0_8skrp._.js +1 -1
  619. package/server/.next/server/chunks/ssr/_02eudwc8ieb2r._.js +2 -2
  620. package/server/.next/server/chunks/ssr/_08xqk3eibu5aw._.js +1 -1
  621. package/server/.next/server/chunks/ssr/_09s2unlb4r6yf._.js +3 -0
  622. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  623. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  624. package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
  625. package/server/.next/server/chunks/ssr/_0cbbks0ms7i_u._.js +2 -2
  626. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  627. package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +2 -2
  628. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  629. package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +2 -2
  630. package/server/.next/server/chunks/ssr/_0gmw45sb1llld._.js +1 -1
  631. package/server/.next/server/chunks/ssr/_0hqya_yuov5jw._.js +3 -0
  632. package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +2 -2
  633. package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +2 -2
  634. package/server/.next/server/chunks/ssr/_0iy27gi4y9-fe._.js +1 -1
  635. package/server/.next/server/chunks/ssr/{_0rsh9v4b3yj0b._.js → _0j_qqta7rirh5._.js} +1 -1
  636. package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +1 -1
  637. package/server/.next/server/chunks/ssr/_0kk0of-t4vhyh._.js +4 -0
  638. package/server/.next/server/chunks/ssr/{_1vlm9990gr64r._.js → _0kq3wqx86yyhb._.js} +2 -2
  639. package/server/.next/server/chunks/ssr/{_0c9_fa5ejth12._.js → _0lg6_we0pe3nk._.js} +2 -2
  640. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  641. package/server/.next/server/chunks/ssr/_0oub-njkja8gu._.js +2 -2
  642. package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +2 -2
  643. package/server/.next/server/chunks/ssr/_0r7_a5m55a1jy._.js +3 -0
  644. package/server/.next/server/chunks/ssr/_0rqil_klxfz3j._.js +3 -0
  645. package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +2 -2
  646. package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +2 -2
  647. package/server/.next/server/chunks/ssr/_0uz60lk-7e_cj._.js +2 -2
  648. package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
  649. package/server/.next/server/chunks/ssr/{_18sg0ilz439y6._.js → _0xkl4rb1wydtd._.js} +2 -2
  650. package/server/.next/server/chunks/ssr/_0xmud7u5hdnqu._.js +2 -2
  651. package/server/.next/server/chunks/ssr/_1-4401bfn50mf._.js +1 -1
  652. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  653. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  654. package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
  655. package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +2 -2
  656. package/server/.next/server/chunks/ssr/{_0fl2-fao_ye7t._.js → _170okt24rw1yx._.js} +2 -2
  657. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  658. package/server/.next/server/chunks/ssr/_19dldpcnzhkuw._.js +1 -1
  659. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  660. package/server/.next/server/chunks/ssr/_1bijvrgqfyij6._.js +5 -0
  661. package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +2 -2
  662. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  663. package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +2 -2
  664. package/server/.next/server/chunks/ssr/_1dp5bgqob29-f._.js +1 -1
  665. package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +2 -2
  666. package/server/.next/server/chunks/ssr/_1fuywfexex2s8._.js +2 -2
  667. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  668. package/server/.next/server/chunks/ssr/{_19q2vj_ppgsu4._.js → _1ge8mluhma23o._.js} +2 -2
  669. package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +2 -2
  670. package/server/.next/server/chunks/ssr/_1ioq9f389jnco._.js +3 -0
  671. package/server/.next/server/chunks/ssr/_1iugpfonxri3e._.js +3 -0
  672. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  673. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  674. package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +2 -2
  675. package/server/.next/server/chunks/ssr/_1m4km_w39x5e9._.js +1 -1
  676. package/server/.next/server/chunks/ssr/_1ong0a252wcvc._.js +13 -0
  677. package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +2 -2
  678. package/server/.next/server/chunks/ssr/_1q0i7-4d4iyye._.js +3 -0
  679. package/server/.next/server/chunks/ssr/_1q3fi6a4gklq6._.js +1 -1
  680. package/server/.next/server/chunks/ssr/_1qcal07c71omr._.js +3 -0
  681. package/server/.next/server/chunks/ssr/_1r2516zqb3e67._.js +3 -0
  682. package/server/.next/server/chunks/ssr/_1ul3og9l7vp32._.js +2 -2
  683. package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +2 -2
  684. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  685. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +1 -1
  686. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +1 -1
  687. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +1 -1
  688. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_1myo_rodrlg3a.js +2 -2
  689. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +1 -1
  690. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +1 -1
  691. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_containers_page_actions_1ainjsbrnl360.js +1 -1
  692. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +1 -1
  693. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +1 -1
  694. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +1 -1
  695. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +1 -1
  696. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +1 -1
  697. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1363m-cfkgyvr.js +3 -0
  698. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +1 -1
  699. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +1 -1
  700. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  701. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  702. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1kr0-100zz257.js +3 -0
  703. package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +1 -1
  704. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  705. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  706. package/server/.next/server/chunks/ssr/{src_0jxjbvkvg0bjg._.js → src_09q8lx_19nta6._.js} +2 -2
  707. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  708. package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +1 -1
  709. package/server/.next/server/chunks/ssr/src_0kls100c13ocf._.js +3 -0
  710. package/server/.next/server/chunks/ssr/src_0ovx2ogvlz2eh._.js +1 -1
  711. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  712. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  713. package/server/.next/server/chunks/ssr/src_18m06fg8u7_73._.js +3 -0
  714. package/server/.next/server/chunks/ssr/{src_1_9q6-wstn038._.js → src_18ofj2_oxqb0g._.js} +2 -2
  715. package/server/.next/server/chunks/ssr/{src_0632mrev4i__u._.js → src_1ldp01vcphvw5._.js} +2 -2
  716. package/server/.next/server/chunks/ssr/src_1maoe8g5gnv0u._.js +1 -1
  717. package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
  718. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  719. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  720. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  721. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  722. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
  723. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  724. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  725. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  726. package/server/.next/server/chunks/ssr/{src_app_(console)_0ohoun7l5f2tb._.js → src_app_(console)_03s-e0b0zsqqr._.js} +2 -2
  727. package/server/.next/server/chunks/ssr/{src_app_(console)_0krr6t05xs2tn._.js → src_app_(console)_0eh38ymzn-s-m._.js} +2 -2
  728. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +2 -2
  729. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_08in-j3xp5mbn._.js +1 -1
  730. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  731. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  732. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  733. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +1 -1
  734. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  735. package/server/.next/server/chunks/ssr/src_app_(console)_containers_containers-view_tsx_1xkcrw5gx53xo._.js +1 -1
  736. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  737. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  738. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  739. package/server/.next/server/chunks/ssr/src_app_(console)_firebase_row-menu_tsx_0hssoq3pqjl-n._.js +1 -1
  740. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  741. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +1 -1
  742. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  743. package/server/.next/server/chunks/ssr/src_app_(console)_os_os-view_tsx_0xr69f5vtstls._.js +1 -1
  744. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  745. package/server/.next/server/chunks/ssr/src_app_(console)_reports_reports-view_tsx_1l0apba6g810q._.js +3 -0
  746. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  747. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  748. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  749. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  750. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_148phfjye0539._.js +1 -1
  751. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  752. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  753. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  754. package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
  755. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  756. package/server/.next/server/chunks/ssr/src_app_signin_1-h17es4-y1-k._.js +3 -0
  757. package/server/.next/server/chunks/ssr/src_app_signin_1_sp0qx8_z7c9._.js +1 -1
  758. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  759. package/server/.next/server/chunks/ssr/src_lib_0eqv8l-v8d5ze._.js +1 -1
  760. package/server/.next/server/chunks/ssr/src_lib_0etkz1wbvfw-k._.js +3 -0
  761. package/server/.next/server/chunks/ssr/src_lib_0jnv54-8idu07._.js +3 -0
  762. package/server/.next/server/chunks/ssr/{src_lib_1zgor_vrwl5kt._.js → src_lib_0o9m8m1sm5759._.js} +2 -2
  763. package/server/.next/server/chunks/ssr/src_lib_1eioo4oodq-8h._.js +1 -1
  764. package/server/.next/server/chunks/ssr/src_lib_1myex-iv3tu5w._.js +23 -0
  765. package/server/.next/server/chunks/ssr/src_lib_1x__dvajr3xvs._.js +3 -0
  766. package/server/.next/server/chunks/ssr/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
  767. package/server/.next/server/chunks/ssr/src_lib_branding_ts_03ns4y_8z0-6e._.js +3 -0
  768. package/server/.next/server/chunks/ssr/src_lib_collector_self-update_ts_18m5vmptpjhtg._.js +1 -1
  769. package/server/.next/server/chunks/ssr/{src_lib_demo_15e3gnqzod0tj._.js → src_lib_demo_0r3c3k5102jja._.js} +2 -2
  770. package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  771. package/server/.next/server/chunks/ssr/src_lib_network_dns-edit_ts_0xtxlbd-uwncx._.js +1 -1
  772. package/server/.next/server/chunks/ssr/src_lib_rate-limit_ts_0r-eu6to05vyx._.js +1 -1
  773. package/server/.next/server/chunks/ssr/src_lib_sections_ts_0r8u4nvlpdkgq._.js +1 -1
  774. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  775. package/server/.next/server/chunks/ssr/src_private_1yzfhupl3rlpx._.js +6 -0
  776. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  777. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  778. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  779. package/server/.next/server/middleware-build-manifest.js +14 -3
  780. package/server/.next/server/middleware.js +1 -1
  781. package/server/.next/server/next-font-manifest.js +1 -1
  782. package/server/.next/server/next-font-manifest.json +4 -0
  783. package/server/.next/server/pages/404.html +1 -1
  784. package/server/.next/server/pages/500.html +1 -1
  785. package/server/.next/server/preview-props.json +3 -3
  786. package/server/.next/server/server-reference-manifest.js +1 -1
  787. package/server/.next/server/server-reference-manifest.json +279 -175
  788. package/server/.next/static/chunks/05c15dcfh7cxm.js +1 -0
  789. package/server/.next/static/chunks/{2-uaya1_uxlg8.js → 07_cb192ydsaj.js} +1 -1
  790. package/server/.next/static/chunks/{1c9eb592ho0-l.js → 0_xoojw9q_nof.js} +1 -1
  791. package/server/.next/static/chunks/{1truzt17f0fce.js → 0a9mqrzg8420n.js} +1 -1
  792. package/server/.next/static/chunks/{0mbt6eam4qr2f.js → 0dn6fty1ilg-n.js} +1 -1
  793. package/server/.next/static/chunks/{0dq-2wtk0h5u7.js → 0gxxyq5l_0rp2.js} +1 -1
  794. package/server/.next/static/chunks/0s00_-em3cj00.js +1 -0
  795. package/server/.next/static/chunks/{3m3vl3n5xs039.js → 0valedxcn7j8k.js} +2 -2
  796. package/server/.next/static/chunks/{2ze-y3he5_bb0.js → 0ynyx3s7s4mv7.js} +1 -1
  797. package/server/.next/static/chunks/{0matuoy08desx.js → 0zwq-z8jt5hpz.js} +1 -1
  798. package/server/.next/static/chunks/10y41_ed7ty6e.js +1 -0
  799. package/server/.next/static/chunks/{2-xolk9x48-v1.js → 1416wraxs5p8g.js} +1 -1
  800. package/server/.next/static/chunks/16gt7hkgltvf7.js +1 -0
  801. package/server/.next/static/chunks/{0l61-etojd65n.js → 1_uuog1-u6y0t.js} +1 -1
  802. package/server/.next/static/chunks/{3gmm9g54vx4w0.js → 1azdri14ocjgg.js} +11 -11
  803. package/server/.next/static/chunks/{3jqmm62dbykt1.js → 1cd-2y1kwqosv.js} +1 -1
  804. package/server/.next/static/chunks/{33_2mbxu9wufm.js → 1j_hduntj28ij.js} +1 -1
  805. package/server/.next/static/chunks/{1r99dm6-o5qw2.js → 1nqpnndfmw0tc.js} +1 -1
  806. package/server/.next/static/chunks/{3aou6xwhz8z6a.js → 1nv_9c1bate-f.js} +1 -1
  807. package/server/.next/static/chunks/1sjgdu3r0baj-.js +1 -0
  808. package/server/.next/static/chunks/1velx-cd3d5y1.js +1 -0
  809. package/server/.next/static/chunks/{2yc4qzglai5fq.js → 1vt_t7dg_-pyu.js} +1 -1
  810. package/server/.next/static/chunks/1w51uxl19faw3.js +1 -0
  811. package/server/.next/static/chunks/1xydxxektmjgr.js +1 -0
  812. package/server/.next/static/chunks/{2am77mhkx46hz.js → 1yyigrxptb7jm.js} +2 -2
  813. package/server/.next/static/chunks/{0y99dm8mesqe9.js → 28_88x_e_ynaj.js} +1 -1
  814. package/server/.next/static/chunks/{0-o-4ilzkrd38.js → 28qjoy38cp5by.js} +1 -1
  815. package/server/.next/static/chunks/{2fvh4wg2kp4c2.js → 2azwg3my8wh40.js} +1 -1
  816. package/server/.next/static/chunks/2co8kv2tj776w.js +1 -0
  817. package/server/.next/static/chunks/{0ey7akdab5tu8.js → 2db0smm21dva_.js} +1 -1
  818. package/server/.next/static/chunks/{0v97o46v-74gw.js → 2gk24b05q4q57.js} +1 -1
  819. package/server/.next/static/chunks/{1935vuszybg7i.js → 2i5_2zcei6rqr.js} +1 -1
  820. package/server/.next/static/chunks/2jflssspiz3-i.js +1 -0
  821. package/server/.next/static/chunks/{01euc4zjlprz5.js → 2n198u7xx1koh.js} +1 -1
  822. package/server/.next/static/chunks/{3gkm-ynu4fq5u.js → 2sr03gtef27q0.js} +1 -1
  823. package/server/.next/static/chunks/{02kly5fiyvt77.js → 2txgb9zusks-w.js} +1 -1
  824. package/server/.next/static/chunks/{2m8-ctreu-y-r.js → 3-789qaoce7ff.js} +1 -1
  825. package/server/.next/static/chunks/3-us-wg44ohoc.js +1 -0
  826. package/server/.next/static/chunks/{2szchf79vnxgd.js → 31fs88f_h861n.js} +1 -1
  827. package/server/.next/static/chunks/36ykgce0otv4r.css +3 -0
  828. package/server/.next/static/chunks/{22ygzud_kp29f.js → 378ttzg87hows.js} +1 -1
  829. package/server/.next/static/chunks/{0xz55932e19r8.js → 3aglnkhgcl_kq.js} +1 -1
  830. package/server/.next/static/chunks/{0ge2nkna7o16p.js → 3bvj3-0xltkjo.js} +1 -1
  831. package/server/.next/static/chunks/{3e-0ejqqa7jwn.js → 3cti7pgg_jjlx.js} +1 -1
  832. package/server/.next/static/chunks/{0xlfzxnboj4f1.js → 3dktq-qmj2q5b.js} +1 -1
  833. package/server/.next/static/chunks/{3ursfc8kxp2ak.js → 3ic7ri5b4ifjp.js} +2 -2
  834. package/server/.next/static/chunks/{1pogexbz36ij8.js → 3ic9vbadne9of.js} +1 -1
  835. package/server/.next/static/chunks/{3dk6a5gl9glxo.js → 3lw5n6yzs0665.js} +1 -1
  836. package/server/.next/static/chunks/3mgd5b39ghc-w.js +1 -0
  837. package/server/.next/static/chunks/{1u8mo8jflotrt.js → 3n98m8tj20wcf.js} +1 -1
  838. package/server/.next/static/chunks/{2p8bv7d7t08z1.js → 3u1v2wpzthilq.js} +1 -1
  839. package/server/drizzle-selfhost/0011_reports.sql +56 -0
  840. package/server/drizzle-selfhost/0012_report_send_rule.sql +2 -0
  841. package/server/drizzle-selfhost/meta/_journal.json +14 -0
  842. package/server/server.js +1 -1
  843. package/server/src/lib/report/fonts/Geist-Regular.ttf +0 -0
  844. package/server/src/lib/report/fonts/Geist-SemiBold.ttf +0 -0
  845. package/server/src/lib/report/fonts/GeistMono-Regular.ttf +0 -0
  846. package/server/src/lib/report/fonts/OFL.txt +92 -0
  847. package/tools/reset-login.mjs +2 -0
  848. package/server/.next/server/chunks/[root-of-the-server]__00oxbw3nfl_kd._.js +0 -3
  849. package/server/.next/server/chunks/[root-of-the-server]__04q-9779vl4kn._.js +0 -3
  850. package/server/.next/server/chunks/[root-of-the-server]__04u9e45_g1jdi._.js +0 -3
  851. package/server/.next/server/chunks/[root-of-the-server]__05b18nw2k-7-4._.js +0 -3
  852. package/server/.next/server/chunks/[root-of-the-server]__06nrq_1pbp3z-._.js +0 -3
  853. package/server/.next/server/chunks/[root-of-the-server]__06uaa_2zbg57p._.js +0 -3
  854. package/server/.next/server/chunks/[root-of-the-server]__081hh3_un4awi._.js +0 -3
  855. package/server/.next/server/chunks/[root-of-the-server]__09gla7jgbw2bs._.js +0 -3
  856. package/server/.next/server/chunks/[root-of-the-server]__0a0st8-rftztn._.js +0 -3
  857. package/server/.next/server/chunks/[root-of-the-server]__0at6fxe9efr-x._.js +0 -3
  858. package/server/.next/server/chunks/[root-of-the-server]__0dfx2psnngcys._.js +0 -3
  859. package/server/.next/server/chunks/[root-of-the-server]__0di45l_tnq1pm._.js +0 -3
  860. package/server/.next/server/chunks/[root-of-the-server]__0ej4hdoyogtji._.js +0 -3
  861. package/server/.next/server/chunks/[root-of-the-server]__0eqrtvr3uqlqf._.js +0 -3
  862. package/server/.next/server/chunks/[root-of-the-server]__0g81f_2ecmg8a._.js +0 -3
  863. package/server/.next/server/chunks/[root-of-the-server]__0glhrm7zmrvi2._.js +0 -3
  864. package/server/.next/server/chunks/[root-of-the-server]__0jma907r441wi._.js +0 -3
  865. package/server/.next/server/chunks/[root-of-the-server]__0jpktq0f88rvz._.js +0 -3
  866. package/server/.next/server/chunks/[root-of-the-server]__0myf9g_uv3bia._.js +0 -3
  867. package/server/.next/server/chunks/[root-of-the-server]__0puji-hw0xtk7._.js +0 -3
  868. package/server/.next/server/chunks/[root-of-the-server]__0ruici82tzf0w._.js +0 -3
  869. package/server/.next/server/chunks/[root-of-the-server]__0t0dd5t5rch1i._.js +0 -3
  870. package/server/.next/server/chunks/[root-of-the-server]__0ty2qkszfdr5t._.js +0 -3
  871. package/server/.next/server/chunks/[root-of-the-server]__0ugx1i8km15fl._.js +0 -3
  872. package/server/.next/server/chunks/[root-of-the-server]__0ux1hi2fgqxu7._.js +0 -3
  873. package/server/.next/server/chunks/[root-of-the-server]__12tmfv427e9cb._.js +0 -3
  874. package/server/.next/server/chunks/[root-of-the-server]__1481y3utu_a_o._.js +0 -3
  875. package/server/.next/server/chunks/[root-of-the-server]__14e0j38785glf._.js +0 -3
  876. package/server/.next/server/chunks/[root-of-the-server]__14yq_wf4xemgd._.js +0 -3
  877. package/server/.next/server/chunks/[root-of-the-server]__1_0vd5-tvmsg8._.js +0 -3
  878. package/server/.next/server/chunks/[root-of-the-server]__1_goy0uhapvk9._.js +0 -3
  879. package/server/.next/server/chunks/[root-of-the-server]__1ac-dzt5bffr2._.js +0 -3
  880. package/server/.next/server/chunks/[root-of-the-server]__1ajyr5xvo1-x5._.js +0 -3
  881. package/server/.next/server/chunks/[root-of-the-server]__1ey2qia7rofoc._.js +0 -3
  882. package/server/.next/server/chunks/[root-of-the-server]__1hlvqq0azku2x._.js +0 -3
  883. package/server/.next/server/chunks/[root-of-the-server]__1hrviq7s700td._.js +0 -3
  884. package/server/.next/server/chunks/[root-of-the-server]__1ifov-udw6__d._.js +0 -3
  885. package/server/.next/server/chunks/[root-of-the-server]__1ig0p-frprcbm._.js +0 -3
  886. package/server/.next/server/chunks/[root-of-the-server]__1ksyvvsf32jfg._.js +0 -3
  887. package/server/.next/server/chunks/[root-of-the-server]__1kzi1du1sliqb._.js +0 -3
  888. package/server/.next/server/chunks/[root-of-the-server]__1mvibnqor6lx_._.js +0 -3
  889. package/server/.next/server/chunks/[root-of-the-server]__1o-zo4qebuqwy._.js +0 -3
  890. package/server/.next/server/chunks/[root-of-the-server]__1po33h2u2o4e_._.js +0 -3
  891. package/server/.next/server/chunks/[root-of-the-server]__1qps9ushddgwe._.js +0 -3
  892. package/server/.next/server/chunks/[root-of-the-server]__1qrj37m-5y-56._.js +0 -3
  893. package/server/.next/server/chunks/[root-of-the-server]__1qyz1wi13rxxb._.js +0 -3
  894. package/server/.next/server/chunks/[root-of-the-server]__1r8mzvf7_9d2k._.js +0 -3
  895. package/server/.next/server/chunks/[root-of-the-server]__1rxke2_vpd7np._.js +0 -3
  896. package/server/.next/server/chunks/[root-of-the-server]__1sjp750034q4j._.js +0 -3
  897. package/server/.next/server/chunks/[root-of-the-server]__1wbnule0tzwdu._.js +0 -3
  898. package/server/.next/server/chunks/[root-of-the-server]__1wcnj2xtesyd9._.js +0 -3
  899. package/server/.next/server/chunks/[root-of-the-server]__1won_frdj9jms._.js +0 -3
  900. package/server/.next/server/chunks/[root-of-the-server]__1wvp6wau5ueb9._.js +0 -3
  901. package/server/.next/server/chunks/[root-of-the-server]__1yxudc_keazqo._.js +0 -3
  902. package/server/.next/server/chunks/[root-of-the-server]__1z_l9mj3s_6tu._.js +0 -3
  903. package/server/.next/server/chunks/[root-of-the-server]__1zvy7u_y3fzbz._.js +0 -3
  904. package/server/.next/server/chunks/[root-of-the-server]__208znvanagmpr._.js +0 -3
  905. package/server/.next/server/chunks/[root-of-the-server]__20qdu-env7wgt._.js +0 -3
  906. package/server/.next/server/chunks/[root-of-the-server]__212-4r-w6a9sm._.js +0 -3
  907. package/server/.next/server/chunks/_0-5pjvqu672_v._.js +0 -49
  908. package/server/.next/server/chunks/_02qrz1g8sdvhe._.js +0 -49
  909. package/server/.next/server/chunks/_03qlijpos6a21._.js +0 -3
  910. package/server/.next/server/chunks/_06gv0srpbf_lk._.js +0 -3
  911. package/server/.next/server/chunks/_06lf75x-xhl7v._.js +0 -3
  912. package/server/.next/server/chunks/_0cbxgnkxr1uj8._.js +0 -3
  913. package/server/.next/server/chunks/_0sy878k2ywjbq._.js +0 -3
  914. package/server/.next/server/chunks/_0vjggb8yo5b9f._.js +0 -3
  915. package/server/.next/server/chunks/_0wval7co8z-pk._.js +0 -3
  916. package/server/.next/server/chunks/_103ai6ybnpq1k._.js +0 -3
  917. package/server/.next/server/chunks/_108e86rhye0o1._.js +0 -3
  918. package/server/.next/server/chunks/_12g2m3a5e94_5._.js +0 -3
  919. package/server/.next/server/chunks/_1_son1yzo5xvl._.js +0 -3
  920. package/server/.next/server/chunks/_1ap0upnvy5i_1._.js +0 -49
  921. package/server/.next/server/chunks/_1b-88djuoexz1._.js +0 -49
  922. package/server/.next/server/chunks/_1ctwjh8q__6_g._.js +0 -3
  923. package/server/.next/server/chunks/_1f14qy3kb8iac._.js +0 -3
  924. package/server/.next/server/chunks/_1fj4vzjpusyn8._.js +0 -5
  925. package/server/.next/server/chunks/_1i8u10u8nrzy2._.js +0 -3
  926. package/server/.next/server/chunks/_1k3v1-vgvzm_o._.js +0 -3
  927. package/server/.next/server/chunks/_1kcmwgs544mo-._.js +0 -3
  928. package/server/.next/server/chunks/_1ptcxyn1tzm9r._.js +0 -3
  929. package/server/.next/server/chunks/_1rskctyr7yt-b._.js +0 -3
  930. package/server/.next/server/chunks/node_modules_drizzle-orm_1oeq7sl_gbxs5._.js +0 -4
  931. package/server/.next/server/chunks/node_modules_drizzle-orm_1tmqw7vk5a4ik._.js +0 -4
  932. package/server/.next/server/chunks/src_063xvouojxyoa._.js +0 -3
  933. package/server/.next/server/chunks/src_088gmyaew7ds0._.js +0 -3
  934. package/server/.next/server/chunks/src_08fq45_-8xq5o._.js +0 -3
  935. package/server/.next/server/chunks/src_0hx0sol2clocu._.js +0 -3
  936. package/server/.next/server/chunks/src_0j84o_hkkaeg-._.js +0 -3
  937. package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +0 -3
  938. package/server/.next/server/chunks/src_1-6a00bmwlymu._.js +0 -3
  939. package/server/.next/server/chunks/src_13n1vi7uew4iu._.js +0 -3
  940. package/server/.next/server/chunks/src_1_fnzi0em_6er._.js +0 -3
  941. package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +0 -3
  942. package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +0 -3
  943. package/server/.next/server/chunks/src_lib_0-fln6xaazo-9._.js +0 -12
  944. package/server/.next/server/chunks/src_lib_0ma36vqcze7a9._.js +0 -7
  945. package/server/.next/server/chunks/src_lib_0ps7mu81f-6s1._.js +0 -7
  946. package/server/.next/server/chunks/src_lib_14grv5a5_n9o0._.js +0 -7
  947. package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +0 -23
  948. package/server/.next/server/chunks/src_lib_1jlvdx5ho171c._.js +0 -12
  949. package/server/.next/server/chunks/src_lib_1znb-e7g8dkgc._.js +0 -7
  950. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +0 -21
  951. package/server/.next/server/chunks/src_lib_data_metrics-db_ts_0zp7x6l28a2ep._.js +0 -3
  952. package/server/.next/server/chunks/src_lib_demo_11p30f_ci6ie2._.js +0 -3
  953. package/server/.next/server/chunks/ssr/[root-of-the-server]__03xevz8n-mc20._.js +0 -4
  954. package/server/.next/server/chunks/ssr/[root-of-the-server]__0de1senl_kfo5._.js +0 -3
  955. package/server/.next/server/chunks/ssr/[root-of-the-server]__0y6psx1_d7fkt._.js +0 -3
  956. package/server/.next/server/chunks/ssr/[root-of-the-server]__19twn3g5nv5q1._.js +0 -3
  957. package/server/.next/server/chunks/ssr/[root-of-the-server]__19wvac83zh5-9._.js +0 -3
  958. package/server/.next/server/chunks/ssr/[root-of-the-server]__1m38od9tgaroe._.js +0 -3
  959. package/server/.next/server/chunks/ssr/[root-of-the-server]__1mxpszbk1aup8._.js +0 -4
  960. package/server/.next/server/chunks/ssr/[root-of-the-server]__1tj-iwvrxfd1a._.js +0 -3
  961. package/server/.next/server/chunks/ssr/[root-of-the-server]__1zmuaump_n9c1._.js +0 -3
  962. package/server/.next/server/chunks/ssr/_01n29sxn-py3x._.js +0 -3
  963. package/server/.next/server/chunks/ssr/_03d3sxmob-gr7._.js +0 -3
  964. package/server/.next/server/chunks/ssr/_0c8kew3jsb-yb._.js +0 -3
  965. package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +0 -4
  966. package/server/.next/server/chunks/ssr/_0rw2pberdmaa5._.js +0 -3
  967. package/server/.next/server/chunks/ssr/_0zkmkbrbc96-h._.js +0 -3
  968. package/server/.next/server/chunks/ssr/_16vvfyez78u5k._.js +0 -3
  969. package/server/.next/server/chunks/ssr/_1d0anr0hjs5k5._.js +0 -3
  970. package/server/.next/server/chunks/ssr/_1fj4vzjpusyn8._.js +0 -5
  971. package/server/.next/server/chunks/ssr/_1rskctyr7yt-b._.js +0 -3
  972. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +0 -3
  973. package/server/.next/server/chunks/ssr/src_1emolu5lrse98._.js +0 -6
  974. package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +0 -3
  975. package/server/.next/server/chunks/ssr/src_app_signin_12a3ifphkkcs7._.js +0 -3
  976. package/server/.next/server/chunks/ssr/src_lib_0nbad7vu413-f._.js +0 -23
  977. package/server/.next/server/chunks/ssr/src_lib_data_metrics-db_ts_0zp7x6l28a2ep._.js +0 -3
  978. package/server/.next/static/chunks/028g933xfv8jn.js +0 -1
  979. package/server/.next/static/chunks/0utjdzwgd7zw2.js +0 -1
  980. package/server/.next/static/chunks/1sa-1lde5_ikt.js +0 -1
  981. package/server/.next/static/chunks/1uk98c6r9i2bn.js +0 -1
  982. package/server/.next/static/chunks/2zzk4wxiacgja.css +0 -3
  983. package/server/.next/static/chunks/33avmrae70_xs.js +0 -1
  984. package/server/.next/static/chunks/363mcu9nd9znh.js +0 -1
  985. package/server/.next/static/chunks/3bwwwv3sp7uyn.js +0 -1
  986. package/server/.next/static/chunks/3lvz18snt6489.js +0 -1
  987. package/server/.next/static/chunks/3qv9klayap1tz.js +0 -1
  988. package/server/.next/static/chunks/3xkvsl4vbpm41.js +0 -1
  989. package/server/.next/static/chunks/3yu0azvye6wr_.js +0 -1
  990. /package/server/.next/static/{fogXXBSOhoHV3eIf8_j28 → NUZVcU60U-vXVedu_GB0w}/_buildManifest.js +0 -0
  991. /package/server/.next/static/{fogXXBSOhoHV3eIf8_j28 → NUZVcU60U-vXVedu_GB0w}/_clientMiddlewareManifest.js +0 -0
  992. /package/server/.next/static/{fogXXBSOhoHV3eIf8_j28 → NUZVcU60U-vXVedu_GB0w}/_ssgManifest.js +0 -0
@@ -1,23 +1,23 @@
1
- (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331),a=e.i(293857);let r=e=>`${e} hari`,n=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,i={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},s={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},o={OsSecurityUpdate:[[/^On (.+?), no waiting security update fixes a CVE scored (\S+) or more, and the newest kernel runs\.$/,(e,t,a)=>`Di ${t} nggak ada update security yang nunggu buat CVE skor ${a} ke atas, dan kernel terbaru udah jalan.`],[/^On (.+?): (.+)\.$/,(e,t,a)=>`Di ${t}: ${a.replace(/ fixes /g," nambal ").replace(/ and (\d+) more\b/g," dan $1 lagi").replace(/\b(\d+) more packages\b/g,"$1 paket lagi").replace(/ waits for a reboot/g," nunggu reboot")}.`]],MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,a)=>`${t}: nggak ada ping selama ${a.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,a)=>`${t}: ${i[a]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,a)=>`${t}: ${a} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,a)=>`${t} pindah ke ${a}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,a,r)=>`${t} udah bukan domain ${a}; production sekarang di ${r}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,a)=>`Monitor ngecek ${t}, domain ${a}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,a)=>`p95 ${t} ms selama 10 menit terakhir (batas ${a} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,a)=>n(a,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,a)=>n(a,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,a,r,n)=>`${t} pakai ${a} MB dari ${r} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,a,r)=>`${t} udah pakai ${a} dari ${r} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,a,r,n)=>`${t} udah baca ${a} dari ${r} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${r(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,a,r)=>`${t}: ${a.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${r}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,a)=>`${t}: ${a.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,a)=>`Credential ${t} ${a} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,a,r)=>n(r,`Credential ${t} ${a}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,a,r)=>`${t} paket rentan (${a.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>s[e])}): ${r.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],CiFailing:[[/^The latest (.+) run on (.+) (failed|passed)( \(run #\d+\))?\.$/,(e,t,a,r,n)=>`Run ${t} terbaru di ${"the default branch"===a?"branch default":a} ${"failed"===r?"gagal":"lolos"}${n??""}.`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,a)=>`${t} pakai Next.js ${a} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,a,r,n,i,o)=>`Next.js ${t} punya ${a} kerentanan yang diketahui (${s[r]}), ${n?`udah di-fix di ${n}${i?` (${"one fix needs"===i?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function l(e,t){for(let[a,r]of Object.hasOwn(o,e)?o[e]:[]){let e=a.exec(t);if(e)return r(...e)}return t}e.s(["f",0,l],765359);let d={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},c={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},u={en:{firing:"firing",resolved:"resolved",since:"since",open:"Open alerts",more:"more on the Alerts page",causedBy:"caused by",incident:"reports an incident",step:"Next step",test:"test"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"karena",incident:"lagi ada insiden",step:"Yang perlu kamu lakukan",test:"tes"}},p=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),h={critical:0,warning:1,info:2};function f(e,t){let a=e.filter(e=>"resolve"!==e.kind).length,r=e.length-a;return[a?`${a} ${u[t].firing}`:"",r?`${r} ${u[t].resolved}`:""].filter(Boolean).join(", ")}function g(e,t,a,r,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||h[e.severity]-h[t.severity]),o=[r],l=r.length+n.length+40;for(let e=0;e<s.length;e++){let r=a(s[e]);if(l+r.length+1>t){o.push(i(s.length-e));break}o.push(r),l+=r.length+1}return o.push(n),o.join("\n").slice(0,t)}let m={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",CiFailing:"open the run on GitHub from the app page; Watchbell reads it once a day, so a fix shows after the next sync.",OsSecurityUpdate:"open DevOps › OS vulnerabilities for the command to copy (Watchbell never installs anything), run it on the machine, reboot for a new kernel, then Scan now.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",CiFailing:"buka run-nya di GitHub dari halaman app; Watchbell baca sekali sehari, jadi fix-nya kelihatan setelah sync berikutnya.",OsSecurityUpdate:"buka DevOps › OS vulnerabilities, copy perintahnya (Watchbell nggak install apa-apa sendiri), jalanin di mesinnya, reboot kalau ada kernel baru, terus Scan now.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}},k=(e,t="en")=>Object.hasOwn(m[t],e)?m[t][e]??null:null;e.s(["Z",0,c,"l",0,function(e,r,n,i="en",s={},o={}){let h=`${n.replace(/\/+$/,"")}/alerts`,m=u[i],$=e=>`${d[i][e.kind]} \xb7 ${c[i][e.severity]} \xb7 `,y=e=>o.test?a.I[i]:"id"===i?l(e.ruleKey,e.message):e.message,w=o.test?`Watchbell (${m.test})`:"Watchbell",b=e=>"resolve"===e.kind?null:((e,t="en")=>{let a=k(e,t);return a?`${u[t].step}: ${a}`:null})(e.ruleKey,i),v=e=>[e.causedBy?`${m.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${m.incident}`:""].filter(Boolean).join(" · "),A=e=>`
2
- +${e} ${m.more}`,T=(e,r)=>{let n=Object.hasOwn(s,e.ruleKey)?s[e.ruleKey]?.[i]:void 0;if(!n)return null;let[o="",...l]=(0,a.l)(n,{status:d[i][e.kind],severity:c[i][e.severity],rule:e.ruleKey,target:r(e.title),detail:r(y(e)),cause:r(v(e)),step:"resolve"===e.kind?"":k(e.ruleKey,i)??"",since:`${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,threshold:null==e.threshold?"":e.threshold.toLocaleString("en-US")}).split("\n");return[o,l.join("\n")]},S=e=>e.replace(/[*_`~|\[\]<>]/g,"");return{telegram:g(e,4096,e=>{let a=T(e,e=>e);return a?`
3
- <b>${p(a[0])}</b>${a[1]?`
4
- ${p(a[1])}`:""}`:`
5
- <b>${$(e)}${p(e.ruleKey)} \xb7 ${p(e.title)}</b>
6
- ${p(y(e))}${v(e)?`
7
- <i>${p(v(e))}</i>`:""}${b(e)?`
8
- 👉 ${p(b(e))}`:""}
9
- ${m.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`},`<b>${w}</b>: ${f(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
10
- <a href="${p(h)}">${m.open}</a>`,A),discord:g(e,2e3,e=>{let t=T(e,S);return t?`
1
+ (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331),a=e.i(293857);let r=e=>`${e} hari`,n=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,i={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},s={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},o={January:"Januari",February:"Februari",March:"Maret",April:"April",May:"Mei",June:"Juni",July:"Juli",August:"Agustus",September:"September",October:"Oktober",November:"November",December:"Desember"},l=e=>e.replace(/^(\w+)/,e=>o[e]??e),d={ReportSendFailed:[[/^The (\w+ \d{4}) report for (.+) couldn't be emailed after 3 tries(?:: (.+)|\.)$/,(e,t,a)=>`Laporan ${l(t)} untuk ${a} gagal dikirim setelah 3 kali coba; alasannya ada di Manage › Reports.`],[/^The (\w+ \d{4}) report for (.+) was emailed\.$/,(e,t,a)=>`Laporan ${l(t)} untuk ${a} sudah terkirim.`]],OsSecurityUpdate:[[/^On (.+?), no waiting security update fixes a CVE scored (\S+) or more, and the newest kernel runs\.$/,(e,t,a)=>`Di ${t} nggak ada update security yang nunggu buat CVE skor ${a} ke atas, dan kernel terbaru udah jalan.`],[/^On (.+?): (.+)\.$/,(e,t,a)=>`Di ${t}: ${a.replace(/ fixes /g," nambal ").replace(/ and (\d+) more\b/g," dan $1 lagi").replace(/\b(\d+) more packages\b/g,"$1 paket lagi").replace(/ waits for a reboot/g," nunggu reboot")}.`]],MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,a)=>`${t}: nggak ada ping selama ${a.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,a)=>`${t}: ${i[a]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,a)=>`${t}: ${a} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,a,r)=>`${t}: ${r} cek gagal berturut-turut (${a}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,a)=>`${t} pindah ke ${a}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,a,r)=>`${t} udah bukan domain ${a}; production sekarang di ${r}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,a)=>`Monitor ngecek ${t}, domain ${a}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,a)=>`p95 ${t} ms selama 10 menit terakhir (batas ${a} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,a)=>n(a,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,a)=>n(a,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,a,r,n)=>`${t} pakai ${a} MB dari ${r} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,a,r)=>`${t} udah pakai ${a} dari ${r} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,a,r,n)=>`${t} udah baca ${a} dari ${r} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${r(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,a,r)=>`${t}: ${a.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${r}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,a)=>`${t}: ${a.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,a)=>`Credential ${t} ${a} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,a,r)=>n(r,`Credential ${t} ${a}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,a,r)=>`${t} paket rentan (${a.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>s[e])}): ${r.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],CiFailing:[[/^The latest (.+) run on (.+) (failed|passed)( \(run #\d+\))?\.$/,(e,t,a,r,n)=>`Run ${t} terbaru di ${"the default branch"===a?"branch default":a} ${"failed"===r?"gagal":"lolos"}${n??""}.`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,a)=>`${t} pakai Next.js ${a} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,a,r,n,i,o)=>`Next.js ${t} punya ${a} kerentanan yang diketahui (${s[r]}), ${n?`udah di-fix di ${n}${i?` (${"one fix needs"===i?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function c(e,t){for(let[a,r]of Object.hasOwn(d,e)?d[e]:[]){let e=a.exec(t);if(e)return r(...e)}return t}e.s(["f",0,c],765359);let u={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},p={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},h={en:{firing:"firing",resolved:"resolved",since:"since",open:"Open alerts",more:"more on the Alerts page",causedBy:"caused by",incident:"reports an incident",step:"Next step",test:"test"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"karena",incident:"lagi ada insiden",step:"Yang perlu kamu lakukan",test:"tes"}},f=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),g={critical:0,warning:1,info:2};function m(e,t){let a=e.filter(e=>"resolve"!==e.kind).length,r=e.length-a;return[a?`${a} ${h[t].firing}`:"",r?`${r} ${h[t].resolved}`:""].filter(Boolean).join(", ")}function k(e,t,a,r,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||g[e.severity]-g[t.severity]),o=[r],l=r.length+n.length+40;for(let e=0;e<s.length;e++){let r=a(s[e]);if(l+r.length+1>t){o.push(i(s.length-e));break}o.push(r),l+=r.length+1}return o.push(n),o.join("\n").slice(0,t)}let $={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",CiFailing:"open the run on GitHub from the app page; Watchbell reads it once a day, so a fix shows after the next sync.",OsSecurityUpdate:"open DevOps › OS vulnerabilities for the command to copy (Watchbell never installs anything), run it on the machine, reboot for a new kernel, then Scan now.",ReportSendFailed:"open Manage › Reports, check the email sender and the recipients, then use Send test; or download the PDF and send it yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",CiFailing:"buka run-nya di GitHub dari halaman app; Watchbell baca sekali sehari, jadi fix-nya kelihatan setelah sync berikutnya.",OsSecurityUpdate:"buka DevOps › OS vulnerabilities, copy perintahnya (Watchbell nggak install apa-apa sendiri), jalanin di mesinnya, reboot kalau ada kernel baru, terus Scan now.",ReportSendFailed:"buka Manage › Reports, cek pengirim email dan penerimanya, terus coba Send test; atau download PDF-nya dan kirim sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}},y=(e,t="en")=>Object.hasOwn($[t],e)?$[t][e]??null:null;e.s(["Z",0,p,"l",0,function(e,r,n,i="en",s={},o={}){let l=`${n.replace(/\/+$/,"")}/alerts`,d=h[i],g=e=>`${u[i][e.kind]} \xb7 ${p[i][e.severity]} \xb7 `,$=e=>o.test?a.I[i]:"id"===i?c(e.ruleKey,e.message):e.message,w=o.test?`Watchbell (${d.test})`:"Watchbell",b=e=>"resolve"===e.kind?null:((e,t="en")=>{let a=y(e,t);return a?`${h[t].step}: ${a}`:null})(e.ruleKey,i),v=e=>[e.causedBy?`${d.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${d.incident}`:""].filter(Boolean).join(" · "),A=e=>`
2
+ +${e} ${d.more}`,T=(e,r)=>{let n=Object.hasOwn(s,e.ruleKey)?s[e.ruleKey]?.[i]:void 0;if(!n)return null;let[o="",...l]=(0,a.l)(n,{status:u[i][e.kind],severity:p[i][e.severity],rule:e.ruleKey,target:r(e.title),detail:r($(e)),cause:r(v(e)),step:"resolve"===e.kind?"":y(e.ruleKey,i)??"",since:`${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,threshold:null==e.threshold?"":e.threshold.toLocaleString("en-US")}).split("\n");return[o,l.join("\n")]},S=e=>e.replace(/[*_`~|\[\]<>]/g,"");return{telegram:k(e,4096,e=>{let a=T(e,e=>e);return a?`
3
+ <b>${f(a[0])}</b>${a[1]?`
4
+ ${f(a[1])}`:""}`:`
5
+ <b>${g(e)}${f(e.ruleKey)} \xb7 ${f(e.title)}</b>
6
+ ${f($(e))}${v(e)?`
7
+ <i>${f(v(e))}</i>`:""}${b(e)?`
8
+ 👉 ${f(b(e))}`:""}
9
+ ${d.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`},`<b>${w}</b>: ${m(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
10
+ <a href="${f(l)}">${d.open}</a>`,A),discord:k(e,2e3,e=>{let t=T(e,S);return t?`
11
11
  **${t[0]}**${t[1]?`
12
12
  ${t[1]}`:""}`:`
13
- **${$(e)}${e.ruleKey} \xb7 ${S(e.title)}**
14
- ${S(y(e))}${v(e)?`
13
+ **${g(e)}${e.ruleKey} \xb7 ${S(e.title)}**
14
+ ${S($(e))}${v(e)?`
15
15
  _${v(e)}_`:""}${b(e)?`
16
- 👉 ${b(e)}`:""}`},`**${w}**: ${f(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
17
- ${h}`,A)}},"H",0,p],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:a.z.string().min(32),CRON_SECRET:a.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:a.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:a.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:r.z.union([n.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([n.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let a=e.lastTraffic??e.trackedSince;return t.getTime()-a.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let a=await (0,r.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of a){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(e,a,i){try{let s=await (0,r.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:n,s:l,a:d}]of s.entries()){let c=a-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(r.lastKeepAliveAt&&e.getTime()-r.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active/${n.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active: ${$(e)}`)}}async function w(e,a,o,l,c,h,m){let $=(0,u.k)(u.B,a?.data),y=$.lastTrafficAt?new Date($.lastTrafficAt):$.trafficAt?new Date(new Date($.trafficAt).getTime()-6048e5):null;if(!d({status:$.status??"",keep:!0,lastTraffic:y,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-(y??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,r.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,r.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,a.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,r.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,a,l=1/0){let d=a.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,r.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let y=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=a.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let $=!1===w.get(l.accountId).get(k),A=$?1/0:v.get(l.accountId),T=y.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let j=u();if(j<250)return;await (0,r.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let C=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!C)continue;let E=await (0,g.G)(C,l.ref,{timeoutMs:Math.min(5e3,j)});E.ok?($||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===E.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===E.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(E.error)}]))}catch(e){console.warn("auto-restore failed:",$(e))}}async function T(e,a,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",a);if(l)return{ok:!1,error:l};let d=await (0,o.p)(a,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,r.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,a)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(n.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:a}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:a}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,y,"G",0,function(e,t,a){return!1===t.get(a)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{e.i(313931);var t=e.i(875225),a=e.i(349129),r=e.i(518899),n=e.i(924924),i=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(532148),c=e.i(209576),u=e.i(111970),p=e.i(762504),h=e.i(547499),f=e.i(224382),g=e.i(201162),m=e.i(973990),k=e.i(600273),$=e.i(968068),y=e.i(695811),w=e.i(633974),b=e.i(76012),v=e.i(298397),A=e.i(218331),T=e.i(146394);let S="digest.lastSentDay",I="digest.state";async function x(e){let[a]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.channels.kind,e)).limit(1);if(!a)return null;try{return{row:a,config:JSON.parse((0,o.K)({ciphertext:a.configCiphertext,iv:a.configIv},(0,h.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function D(){let e=(0,$.f)(),[t,a,r,n]=await Promise.all([x("telegram"),x("discord"),x("webhook"),x("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),a?.row.enabled&&a.config?.url&&i.add("discord"),r?.row.enabled&&r.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,h.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,b.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,g.E)(r.config,(0,g.J)(o,l??[],new Date,s)):"smtp"===i?(0,m.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",o.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[\s(])_(\S(?:.*?\S)?)_(?=[\s).,!?:;]|$)/gm,"$1$2").replace(/`([^`\n]+)`/g,"$1")):(0,f.f)(a.config.url,o),configured:i}}async function j(){let e=(0,$.f)().telegramToken;if(!e)return null;let t=await x("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function C(){let e=await x("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let E="notify.telegramThreads",_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function N(e,t,a){let s=e.filter(e=>_.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:a.getTime()}])),l=a.getTime()-6048e5,d=r.B`case when jsonb_typeof(${i.settings.value}) = 'object' then ${i.settings.value} else '{}'::jsonb end`;await (0,n.f)().insert(i.settings).values({key:E,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:r.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
18
- where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:a}})}async function M(e){if(!e||!_.test(e))return null;try{let[a]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,E)).limit(1),r=a?.value&&"object"==typeof a.value?a.value[e]:null;return"number"==typeof r?.m&&Number.isSafeInteger(r.m)&&r.m>0?r.m:null}catch{return null}}let R=()=>(0,c.f)().catch(()=>v.a);async function O(e,o,l={}){var c;if(o-Date.now()<6e3)return{sent:0,dropped:0};let p=await (0,u.I)(),f=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels,threshold:i.alertRules.threshold}).from(i.alerts).innerJoin(i.alertRules,(0,t.u)(i.alertRules.key,i.alerts.ruleKey)).where((0,t.b)((0,t.E)(i.alerts.pending),r.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,u.s)(p))).orderBy((0,a.M)(i.alerts.pendingSince)).limit(50);if(!f.length)return{sent:0,dropped:0};let g=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((c=f.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,c),(0,t.E)(i.alerts.pending),(0,t.F)((0,t.M)(i.alerts.claimedAt),(0,t.S)(i.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:i.alerts.id})).map(e=>e.id)),m=f.filter(e=>g.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:$}=l.sender??await D(),w=new Set(m.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[b,A,T]=await Promise.all([R(),(0,y.B)(),(0,d.w)()]),S=new Set;for(let a of["telegram","discord","webhook","smtp"]){if(!$.has(a))continue;let r=m.filter(e=>e.channels.includes(a)&&!w.has(e.a.id));if(!r.length)continue;let o=r.map(({a:e,threshold:t})=>{let r="telegram"===a?e:(0,v.o)(e,b);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:r.title,message:r.message,startedAt:e.startedAt,causedBy:r.causedBy,provider:e.providerIncident,threshold:t}}),l=(0,s.l)(o,e,(0,h.f)().SITE_URL,"webhook"===a?"en":"smtp"===a?A.email:A[a],T),d=await k(a,(0,v.G)("telegram"===a?l.telegram:l.discord),"webhook"===a?o.map(e=>({...e,title:(0,v.G)(e.title),message:(0,v.G)(e.message)})):void 0);await (0,n.f)().update(i.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(i.channels.kind,a)),d.ok&&r.forEach(({a:e})=>S.add(e.id)),d.ok&&"telegram"===a&&d.messageId&&await N(r.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let I=0,x=0,j=[];for(let{a,channels:r}of m){let s=r.some(e=>$.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;S.has(a.id)?(I++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,a.id))):w.has(a.id)||!s||o?(x++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,a.id))):j.push(a.id)}return j.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,j)),{sent:I,dropped:x}}async function U(e){let s=new Date(e.getTime()-864e5),o=await (0,u.I)(),l=r.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,c,h,f,g]=await Promise.all([(0,n.f)().select({ruleKey:i.alerts.ruleKey,severity:i.alerts.severity,title:i.alerts.title,message:i.alerts.message,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt}).from(i.alerts).where((0,t.b)((0,t.M)(i.alerts.resolvedAt),(0,u.s)(o))).orderBy(l,(0,a.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:r.B`count(*)::int`}).from(i.alerts).where((0,t.B)(i.alerts.startedAt,s)),(0,n.f)().select({ruleKey:i.alerts.ruleKey,title:i.alerts.title,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt,resolvedAt:i.alerts.resolvedAt}).from(i.alerts).where((0,t.b)((0,t.E)(i.alerts.resolvedAt),(0,t.B)(i.alerts.resolvedAt,s))).orderBy((0,a.A)(i.alerts.resolvedAt)).limit(20),(0,n.f)().select({id:i.resources.id,name:i.resources.name}).from(i.resources).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt))).orderBy(i.resources.name).limit(T.O.apps),(0,p.h)(e)]),m=f.map(e=>e.id),[k,$]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:r.B`count(*)::int`,bad:r.B`(count(*) filter (where not ${i.checks.ok}))::int`}).from(i.checks).innerJoin(i.monitors,(0,t.u)(i.monitors.id,i.checks.monitorId)).where((0,t.b)((0,t.y)(i.monitors.resourceId,m),(0,t.B)(i.checks.at,s),(0,t.u)(i.checks.inMaintenance,!1))).groupBy(i.monitors.resourceId),(0,n.f)().select({id:i.storedLogs.resourceId,n:r.B`count(*)::int`}).from(i.storedLogs).where((0,t.b)((0,t.y)(i.storedLogs.resourceId,m),(0,t.B)(i.storedLogs.at,s))).groupBy(i.storedLogs.resourceId)]):[[],[]],y=new Map(k.map(e=>[e.id,e])),w=new Map($.map(e=>[e.id,e.n])),b=await R();return{now:e,opened:c[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,v.o)({...t,resourceId:e,causedBy:null},b);return{...t,title:a.title,message:a.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,v.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},b).title,took:function(e,t){let a=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(a<60)return`${a} min`;let r=Math.floor(a/60);return r<24?`${r} h ${a%60} min`:`${Math.floor(r/24)} d ${r%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=y.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function P(e,a,r){await (0,n.f)().update(i.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(i.channels.kind,e))}async function H(e){let[t,a]=await Promise.all([U(e),(0,y.H)("email")]);return(0,k.J)({...t,siteUrl:(0,h.f)().SITE_URL},a)}async function K(e,a={}){let r=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[S,I])),s=r.find(e=>e.key===S)?.value,o="string"==typeof s?s:null;if(!(0,k.A)(e,o))return;let d=(0,$.f)(),c=await x("email_digest");if(!d.resendKey||!d.digestFrom||!c?.row.enabled||!c.config?.to)return;let{resendKey:u,digestFrom:p}=d,h=c.config.to,f=(0,A.x)(e),g=await (0,k.K)(e,{lastSentDay:o,state:r.find(e=>e.key===I)?.value??null,build:a.build??(()=>H(e)),send:a.send??(e=>(0,w.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await P("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:I,value:g.state}).onConflictDoUpdate({target:i.settings.key,set:{value:g.state,updatedAt:e}}):await (0,n.f)().delete(i.settings).where((0,t.u)(i.settings.key,I)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:S,value:g.sentDay}).onConflictDoUpdate({target:i.settings.key,set:{value:g.sentDay,updatedAt:e}}),g.event&&await (0,l.f)([{type:"system",kind:"warn",message:g.event.message,detail:g.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,O,"G",0,C,"P",0,P,"J",0,K,"Q",0,j,"M",0,M],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,a),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return c("member",r.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,a){let i={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let a=new Map,i=e.filter(l.f);if(0===i.length)return a;for(let e of(await (0,r.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function $(e,t,r,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(r,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,a.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,$,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),a=e.i(77193);let r=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(r.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,r,n={}){let s,l;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let a=(0,o._)(t);return"scheme"===a?"Use an https:// address without a user name or password in it.":"blocked"===a?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(r),h=String(Math.floor(Date.parse(r.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,a,r){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:a.toISOString(),text:e.slice(0,4e3),link:r,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456);function f(e){let t=new Set;return e.split(/[\s,;]+/).filter(e=>e&&!t.has(e.toLowerCase())&&t.add(e.toLowerCase()))}let g=[465,587,2525],m=h.z.email();class k{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let a=this.waiters.shift();a?a(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
19
- `)}}class $ extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,r,n,l={}){let d;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys(function(e){let t={},a=e.host.trim().toLowerCase();/^[a-z0-9.-]{3,253}$/.test(a)&&a.includes(".")?(0,o.N)(a)&&(t.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):t.host="Enter the server name, for example smtp.office365.com.",g.includes(e.port)||(t.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(t.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(t.pass="Enter the password or app password."),m.safeParse(e.from.trim()).success||(t.from="Enter the address the mail comes from.");let r=f(e.to);if(r.length)if(r.length>10)t.to="Up to 10 addresses.";else{let e=r.find(e=>!m.safeParse(e).success);e&&(t.to=`${e} isn't a valid address.`)}else t.to="Enter the address that gets the alerts.";return t}(e)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let c=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))(c);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The mail server resolves to a private address; Watchbell won't connect there."};d=e[0]}catch{return{ok:!1,kind:"transient",error:"The mail server's name didn't resolve."}}let h=465===e.port,w=null,b=new Promise((e,t)=>setTimeout(()=>t(new $("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),v=async()=>{var t,a,s,o;let g,m;try{w=await (l.connect??((e,t,a,r)=>new Promise((n,i)=>{let s=r?p.default.connect({host:e,port:t,servername:a}):u.default.connect({host:e,port:t});s.once(r?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,c,h)}catch{throw new $(`Couldn't connect to ${c}:${e.port}.`,"transient")}let y=new k(w),b=async(e,t,a="config")=>{let r=await y.next();if(!e.includes(r.code))throw new $(`The mail server refused ${t} (${r.code}).`,r.code>=400&&r.code<500?"transient":a);return r};await b([220],"the connection","transient"),y.send("EHLO watchbell");let v=await b([250],"EHLO");if(!h){if(!/^250[- ]STARTTLS\b/im.test(v.text))throw new $("The mail server doesn't offer STARTTLS on this port, so the password would go in clear. Use port 465 or a server with STARTTLS.","config");y.send("STARTTLS"),await b([220],"STARTTLS"),w=await (l.upgrade??((e,t)=>new Promise((a,r)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>a(n)),n.once("error",r)})))(w,c),y.attach(w),y.send("EHLO watchbell"),v=await b([250],"EHLO after STARTTLS")}y.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await b([235],"the user name or password"),y.send(`MAIL FROM:<${e.from.trim()}>`),await b([250],"the sender address");let A=f(e.to);for(let[e,t]of A.entries())y.send(`RCPT TO:<${t}>`),await b([250,251],A.length>1?`recipient ${e+1} of ${A.length}`:"the recipient address");y.send("DATA"),await b([354],"the message"),w.write(`${(t=e,a=r,s=n,o=new Date,m=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: ${f(t.to).map(e=>`<${e}>`).join(", ")}`,`Subject: ${(g=a.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(g)?g:`=?UTF-8?B?${Buffer.from(g,"utf8").toString("base64")}?=`)}`,`Date: ${o.toUTCString()}`,`Message-ID: <${(0,i.randomUUID)()}@watchbell>`,"MIME-Version: 1.0","Content-Type: text/plain; charset=utf-8","Content-Transfer-Encoding: base64","",m].join("\r\n"))}\r
16
+ 👉 ${b(e)}`:""}`},`**${w}**: ${m(e,i)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
17
+ ${l}`,A)}},"H",0,f],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:a.z.string().min(32),CRON_SECRET:a.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:a.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:a.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:r.z.union([n.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([n.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),a=e.i(349129),r=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let a=e.lastTraffic??e.trackedSince;return t.getTime()-a.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let a=await (0,r.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of a){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,$=e=>e instanceof Error?e.name:"unknown";async function y(e,a,i){try{let s=await (0,r.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:n,s:l,a:d}]of s.entries()){let c=a-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(r.lastKeepAliveAt&&e.getTime()-r.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active/${n.name}: ${$(e)}`)}}}catch(e){console.warn("keep-active failed:",$(e)),i.push(`keep-active: ${$(e)}`)}}async function w(e,a,o,l,c,h,m){let $=(0,u.k)(u.B,a?.data),y=$.lastTrafficAt?new Date($.lastTrafficAt):$.trafficAt?new Date(new Date($.trafficAt).getTime()-6048e5):null;if(!d({status:$.status??"",keep:!0,lastTraffic:y,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-(y??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,r.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,r.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,a.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,r.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,a,l=1/0){let d=a.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,r.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let y=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=a.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let $=!1===w.get(l.accountId).get(k),A=$?1/0:v.get(l.accountId),T=y.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let C=u();if(C<250)return;await (0,r.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let E=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!E)continue;let j=await (0,g.G)(E,l.ref,{timeoutMs:Math.min(5e3,C)});j.ok?($||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===j.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===j.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(j.error)}]))}catch(e){console.warn("auto-restore failed:",$(e))}}async function T(e,a,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",a);if(l)return{ok:!1,error:l};let d=await (0,o.p)(a,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,r.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,a)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(n.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:a}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:a}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,y,"G",0,function(e,t,a){return!1===t.get(a)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(936657),a=e.i(570118);e.i(313931);var r=e.i(875225),n=e.i(349129),i=e.i(518899),s=e.i(924924),o=e.i(618916),l=e.i(220642),d=e.i(921991),c=e.i(656083),u=e.i(532148),p=e.i(209576),h=e.i(111970),f=e.i(762504),g=e.i(547499),m=e.i(224382),k=e.i(201162),$=e.i(973990),y=e.i(600273),w=e.i(968068),b=e.i(695811),v=e.i(633974),A=e.i(76012),T=e.i(298397),S=e.i(218331),I=e.i(146394);let x="digest.lastSentDay",D="digest.state";async function C(e){let[t]=await (0,s.f)().select().from(o.channels).where((0,r.u)(o.channels.kind,e)).limit(1);if(!t)return null;try{return{row:t,config:JSON.parse((0,d.K)({ciphertext:t.configCiphertext,iv:t.configIv},(0,g.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function E(){let e=(0,w.f)(),[t,r,n,i,s]=await Promise.all([C("telegram"),C("discord"),C("webhook"),C("smtp"),(0,a.X)()]),o=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&o.add("telegram"),r?.row.enabled&&r.config?.url&&o.add("discord"),n?.row.enabled&&n.config?.url&&o.add("webhook"),i?.row.enabled&&i.config?.host&&o.add("smtp");let l=`${(s.publicUrl??(0,g.f)().SITE_URL).replace(/\/+$/,"")}/alerts`;return{send:(a,o,d)=>"telegram"===a?(0,A.I)(e.telegramToken,t.config.chatId,o):"webhook"===a?(0,k.E)(n.config,(0,k.J)(o,d??[],new Date,l)):"smtp"===a?(0,$.f)(i.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",o.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[\s(])_(\S(?:.*?\S)?)_(?=[\s).,!?:;]|$)/gm,"$1$2").replace(/`([^`\n]+)`/g,"$1"),{},{fromName:s.senderName}):(0,m.f)(r.config.url,o),configured:o}}async function j(){let e=(0,w.f)().telegramToken;if(!e)return null;let t=await C("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function N(){let e=await C("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let M="notify.telegramThreads",R=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function _(e,t,a){let r=e.filter(e=>R.test(e));if(!r.length||!Number.isSafeInteger(t)||t<=0)return;let n=Object.fromEntries(r.map(e=>[e,{m:t,at:a.getTime()}])),l=a.getTime()-6048e5,d=i.B`case when jsonb_typeof(${o.settings.value}) = 'object' then ${o.settings.value} else '{}'::jsonb end`;await (0,s.f)().insert(o.settings).values({key:M,value:n}).onConflictDoUpdate({target:o.settings.key,set:{value:i.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(n)}::jsonb || ${d}) as e
18
+ where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:a}})}async function U(e){if(!e||!R.test(e))return null;try{let[t]=await (0,s.f)().select({value:o.settings.value}).from(o.settings).where((0,r.u)(o.settings.key,M)).limit(1),a=t?.value&&"object"==typeof t.value?t.value[e]:null;return"number"==typeof a?.m&&Number.isSafeInteger(a.m)&&a.m>0?a.m:null}catch{return null}}let O=()=>(0,p.f)().catch(()=>T.a);async function P(e,t,a={}){var d;if(t-Date.now()<6e3)return{sent:0,dropped:0};let c=await (0,h.I)(),p=await (0,s.f)().select({a:o.alerts,channels:o.alertRules.channels,threshold:o.alertRules.threshold}).from(o.alerts).innerJoin(o.alertRules,(0,r.u)(o.alertRules.key,o.alerts.ruleKey)).where((0,r.b)((0,r.E)(o.alerts.pending),i.B`(${o.alerts.pending} = 'resolve') = (${o.alerts.resolvedAt} is not null)`,(0,h.s)(c))).orderBy((0,n.M)(o.alerts.pendingSince)).limit(50);if(!p.length)return{sent:0,dropped:0};let f=new Set((await (0,s.f)().update(o.alerts).set({claimedAt:e}).where((d=p.map(e=>e.a.id),(0,r.b)((0,r.y)(o.alerts.id,d),(0,r.E)(o.alerts.pending),(0,r.F)((0,r.M)(o.alerts.claimedAt),(0,r.S)(o.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:o.alerts.id})).map(e=>e.id)),m=p.filter(e=>f.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:$}=a.sender??await E(),y=new Set(m.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[w,v,A]=await Promise.all([O(),(0,b.B)(),(0,u.w)()]),S=new Set;for(let t of["telegram","discord","webhook","smtp"]){if(!$.has(t))continue;let a=m.filter(e=>e.channels.includes(t)&&!y.has(e.a.id));if(!a.length)continue;let n=a.map(({a:e,threshold:a})=>{let r="telegram"===t?e:(0,T.o)(e,w);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:r.title,message:r.message,startedAt:e.startedAt,causedBy:r.causedBy,provider:e.providerIncident,threshold:a}}),i=(0,l.l)(n,e,(0,g.f)().SITE_URL,"webhook"===t?"en":"smtp"===t?v.email:v[t],A),d=await k(t,(0,T.G)("telegram"===t?i.telegram:i.discord),"webhook"===t?n.map(e=>({...e,title:(0,T.G)(e.title),message:(0,T.G)(e.message)})):void 0);await (0,s.f)().update(o.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,r.u)(o.channels.kind,t)),d.ok&&a.forEach(({a:e})=>S.add(e.id)),d.ok&&"telegram"===t&&d.messageId&&await _(a.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let I=0,x=0,D=[];for(let{a:t,channels:a}of m){let n=a.some(e=>$.has(e)),i=null!==t.pendingSince&&e.getTime()-t.pendingSince.getTime()>18e5;S.has(t.id)?(I++,await (0,s.f)().update(o.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===t.pending?{notifiedOpen:!0}:{}}).where((0,r.u)(o.alerts.id,t.id))):y.has(t.id)||!n||i?(x++,await (0,s.f)().update(o.alerts).set({pending:null,claimedAt:null}).where((0,r.u)(o.alerts.id,t.id))):D.push(t.id)}return D.length&&await (0,s.f)().update(o.alerts).set({claimedAt:null}).where((0,r.y)(o.alerts.id,D)),{sent:I,dropped:x}}async function H(e){let t=new Date(e.getTime()-864e5),a=await (0,h.I)(),l=i.B`case ${o.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,c,u,p,g]=await Promise.all([(0,s.f)().select({ruleKey:o.alerts.ruleKey,severity:o.alerts.severity,title:o.alerts.title,message:o.alerts.message,resourceId:o.alerts.resourceId,startedAt:o.alerts.startedAt}).from(o.alerts).where((0,r.b)((0,r.M)(o.alerts.resolvedAt),(0,h.s)(a))).orderBy(l,(0,n.A)(o.alerts.startedAt)).limit(50),(0,s.f)().select({n:i.B`count(*)::int`}).from(o.alerts).where((0,r.B)(o.alerts.startedAt,t)),(0,s.f)().select({ruleKey:o.alerts.ruleKey,title:o.alerts.title,resourceId:o.alerts.resourceId,startedAt:o.alerts.startedAt,resolvedAt:o.alerts.resolvedAt}).from(o.alerts).where((0,r.b)((0,r.E)(o.alerts.resolvedAt),(0,r.B)(o.alerts.resolvedAt,t))).orderBy((0,n.A)(o.alerts.resolvedAt)).limit(20),(0,s.f)().select({id:o.resources.id,name:o.resources.name}).from(o.resources).where((0,r.b)((0,r.u)(o.resources.kind,"app"),(0,r.u)(o.resources.monitored,!0),(0,r.M)(o.resources.goneAt))).orderBy(o.resources.name).limit(I.O.apps),(0,f.h)(e)]),m=p.map(e=>e.id),[k,$]=m.length?await Promise.all([(0,s.f)().select({id:o.monitors.resourceId,total:i.B`count(*)::int`,bad:i.B`(count(*) filter (where not ${o.checks.ok}))::int`}).from(o.checks).innerJoin(o.monitors,(0,r.u)(o.monitors.id,o.checks.monitorId)).where((0,r.b)((0,r.y)(o.monitors.resourceId,m),(0,r.B)(o.checks.at,t),(0,r.u)(o.checks.inMaintenance,!1))).groupBy(o.monitors.resourceId),(0,s.f)().select({id:o.storedLogs.resourceId,n:i.B`count(*)::int`}).from(o.storedLogs).where((0,r.b)((0,r.y)(o.storedLogs.resourceId,m),(0,r.B)(o.storedLogs.at,t))).groupBy(o.storedLogs.resourceId)]):[[],[]],y=new Map(k.map(e=>[e.id,e])),w=new Map($.map(e=>[e.id,e.n])),b=await O();return{now:e,opened:c[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,T.o)({...t,resourceId:e,causedBy:null},b);return{...t,title:a.title,message:a.message}}),resolved:u.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,T.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},b).title,took:function(e,t){let a=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(a<60)return`${a} min`;let r=Math.floor(a/60);return r<24?`${r} h ${a%60} min`:`${Math.floor(r/24)} d ${r%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:p.map(e=>{let t=y.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function K(e,t,a){await (0,s.f)().update(o.channels).set(t.ok?{lastSentAt:a,lastError:null}:{lastError:t.error}).where((0,r.u)(o.channels.kind,e))}async function B(e){let r=await (0,a.X)().catch(()=>null);return r?.senderName?(0,t.C)(r.senderName,(0,t.W)(e)):e}async function L(e){let[t,r]=await Promise.all([H(e),(0,b.H)("email")]),n=await (0,a.X)().catch(()=>null);return(0,y.J)({...t,siteUrl:n?.publicUrl??(0,g.f)().SITE_URL},r)}async function F(e,t={}){let a=await (0,s.f)().select().from(o.settings).where((0,r.y)(o.settings.key,[x,D])),n=a.find(e=>e.key===x)?.value,i="string"==typeof n?n:null;if(!(0,y.A)(e,i))return;let l=(0,w.f)(),d=await C("email_digest");if(!l.resendKey||!l.digestFrom||!d?.row.enabled||!d.config?.to)return;let{resendKey:u}=l,p=await B(l.digestFrom),h=d.config.to,f=(0,S.x)(e),g=await (0,y.K)(e,{lastSentDay:i,state:a.find(e=>e.key===D)?.value??null,build:t.build??(()=>L(e)),send:t.send??(e=>(0,v.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await K("email_digest",g.result,e),g.state?await (0,s.f)().insert(o.settings).values({key:D,value:g.state}).onConflictDoUpdate({target:o.settings.key,set:{value:g.state,updatedAt:e}}):await (0,s.f)().delete(o.settings).where((0,r.u)(o.settings.key,D)),g.sentDay&&await (0,s.f)().insert(o.settings).values({key:x,value:g.sentDay}).onConflictDoUpdate({target:o.settings.key,set:{value:g.sentDay,updatedAt:e}}),g.event&&await (0,c.f)([{type:"system",kind:"warn",message:g.event.message,detail:g.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,P,"G",0,N,"u",0,C,"P",0,K,"J",0,F,"Q",0,j,"M",0,U],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,a),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return c("member",r.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,a){let i={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let a=new Map,i=e.filter(l.f);if(0===i.length)return a;for(let e of(await (0,r.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function $(e,t,r,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(r,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,a.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,$,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),a=e.i(77193);let r=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(r.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,r,n={}){let s,l;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let a=(0,o._)(t);return"scheme"===a?"Use an https:// address without a user name or password in it.":"blocked"===a?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(r),h=String(Math.floor(Date.parse(r.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,a,r){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:a.toISOString(),text:e.slice(0,4e3),link:r,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456),f=e.i(936657);function g(e){let t=new Set;return e.split(/[\s,;]+/).filter(e=>e&&!t.has(e.toLowerCase())&&t.add(e.toLowerCase()))}let m=[465,587,2525],k=h.z.email(),$=e=>Buffer.from(e).toString("base64").replace(/.{1,76}/g,"$&\r\n"),y=e=>e.replace(/[^\w.-]/g,"_").slice(0,100);class w{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let a=this.waiters.shift();a?a(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
19
+ `)}}class b extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function v(e,r,n,l={},d={}){let c;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys(function(e){let t={},a=e.host.trim().toLowerCase();/^[a-z0-9.-]{3,253}$/.test(a)&&a.includes(".")?(0,o.N)(a)&&(t.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):t.host="Enter the server name, for example smtp.office365.com.",m.includes(e.port)||(t.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(t.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(t.pass="Enter the password or app password."),k.safeParse(e.from.trim()).success||(t.from="Enter the address the mail comes from.");let r=g(e.to);if(r.length)if(r.length>10)t.to="Up to 10 addresses.";else{let e=r.find(e=>!k.safeParse(e).success);e&&(t.to=`${e} isn't a valid address.`)}else t.to="Enter the address that gets the alerts.";return t}(e)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let h=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))(h);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The mail server resolves to a private address; Watchbell won't connect there."};c=e[0]}catch{return{ok:!1,kind:"transient",error:"The mail server's name didn't resolve."}}let A=465===e.port,T=null,S=new Promise((e,t)=>setTimeout(()=>t(new b("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),I=async()=>{try{T=await (l.connect??((e,t,a,r)=>new Promise((n,i)=>{let s=r?p.default.connect({host:e,port:t,servername:a}):u.default.connect({host:e,port:t});s.once(r?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(c,e.port,h,A)}catch{throw new b(`Couldn't connect to ${h}:${e.port}.`,"transient")}let t=new w(T),a=async(e,a,r="config")=>{let n=await t.next();if(!e.includes(n.code))throw new b(`The mail server refused ${a} (${n.code}).`,n.code>=400&&n.code<500?"transient":r);return n};await a([220],"the connection","transient"),t.send("EHLO watchbell");let s=await a([250],"EHLO");if(!A){if(!/^250[- ]STARTTLS\b/im.test(s.text))throw new b("The mail server doesn't offer STARTTLS on this port, so the password would go in clear. Use port 465 or a server with STARTTLS.","config");t.send("STARTTLS"),await a([220],"STARTTLS"),T=await (l.upgrade??((e,t)=>new Promise((a,r)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>a(n)),n.once("error",r)})))(T,h),t.attach(T),t.send("EHLO watchbell"),s=await a([250],"EHLO after STARTTLS")}t.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await a([235],"the user name or password"),t.send(`MAIL FROM:<${e.from.trim()}>`),await a([250],"the sender address");let o=g(e.to);for(let[e,r]of o.entries())t.send(`RCPT TO:<${r}>`),await a([250,251],o.length>1?`recipient ${e+1} of ${o.length}`:"the recipient address");t.send("DATA"),await a([354],"the message"),T.write(`${function(e,t,a,r,n={}){let s,o=$(Buffer.from(a.replace(/\r?\n/g,"\r\n"),"utf8")),l=[`From: ${(0,f.C)(n.fromName??null,e.from.trim())}`,`To: ${g(e.to).map(e=>`<${e}>`).join(", ")}`,`Subject: ${(s=t.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(s)?s:`=?UTF-8?B?${Buffer.from(s,"utf8").toString("base64")}?=`)}`,`Date: ${r.toUTCString()}`,`Message-ID: <${(0,i.randomUUID)()}@watchbell>`,"MIME-Version: 1.0"];if(!n.attachment)return[...l,"Content-Type: text/plain; charset=utf-8","Content-Transfer-Encoding: base64","",o].join("\r\n");let d=n.attachment,c=`wb-${(0,i.randomUUID)()}`;return[...l,`Content-Type: multipart/mixed; boundary="${c}"`,"",`--${c}`,"Content-Type: text/plain; charset=utf-8","Content-Transfer-Encoding: base64","",o,`--${c}`,`Content-Type: ${d.contentType}; name="${y(d.filename)}"`,"Content-Transfer-Encoding: base64",`Content-Disposition: attachment; filename="${y(d.filename)}"`,"",$(d.data),`--${c}--`,""].join("\r\n")}(e,r,n,new Date,d)}\r
20
20
  .\r
21
- `),await b([250],"the message"),y.send("QUIT"),await Promise.race([y.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([v(),b]),{ok:!0}}catch(e){return e instanceof $?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{w?.destroy()}}e.s(["f",0,y],973990);var w=e.i(220642),b=e.i(765359),v=e.i(218331),A=e.i(195191),T=e.i(298397);function S(e,t){return(0,v.M)(e,t)&&(0,v.z)(e).hour>=7}let I={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},x={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},D=[5,15,30,60];async function j(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!S(e,t.lastSentDay))return a;let r=(0,v.x)(e),n=t.state&&t.state.day===r?t.state:null;if(n?.stopped)return{...a,state:n};if(n&&n.attempts>0){let t=(D[n.attempts-1]??D[D.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...a,state:n}}n??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let i=await t.send({subject:n.subject,html:n.html,text:n.text});if(i.ok)return{acted:!0,state:null,sentDay:r,event:null,result:i};let s=n.attempts+1,o="config"===i.kind||s>=5,l="config"===i.kind?`${i.error}. Fix it and the next digest goes out tomorrow.`:`${i.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:i,state:{...n,attempts:s,lastAttemptAt:e.toISOString(),stopped:o,lastError:i.error},event:o?{message:"Daily digest not sent",detail:l}:null}}e.s(["J",0,function(e,t="en"){let a=I[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:a,month:r}=(0,v.e)(e);return`${a} ${"id"===t?x[r]??r:r}`})(e.now,t),i=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,s=`Watchbell \xb7 ${n} \xb7 ${i}`,o=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),l=e.firing.map(e=>`${w.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,b.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,A.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${a.last24}`,"",a.stillHead,...l.length?l.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...d.length?d.map(e=>`- ${e}`):[a.noResolved],...c.length?["",a.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",a.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,w.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,w.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,w.H)(t)}</p>`,g=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,w.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,w.H)(`${i} ${a.last24}`)}</p>`,h(a.stillHead),f(l,a.noFiring),h(a.resolvedHead),f(d,a.noResolved),...c.length?[h(a.appsHead),f(c,"")]:[],...u.length?[h(a.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,w.H)(r).replace(/"/g,"&quot;")}" style="color:#2f4372">${(0,w.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,T.G)(s),html:(0,T.G)(g),text:(0,T.G)(p)}},"A",0,S,"K",0,j],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",a=e.RESEND_API_KEY?.trim()??"",r=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:a.startsWith("re_")?a:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(r)?r:null}}])},695811,e=>{var t=e.i(960049);function a(e){let t=e&&"object"==typeof e?e:null,a=t?t.lang:e,r=e=>{var r;return"string"==typeof(r=t&&e in t?t[e]:a)&&"id"===r.trim().toLowerCase()?"id":"en"};return{telegram:r("telegram"),discord:r("discord"),email:r("email")}}async function r(){try{return a(await (0,t.l)())}catch{return a(null)}}async function n(e="telegram"){return(await r())[e]}e.s(["H",0,n,"B",0,r,"t",0,function(e,t,a){return e[t][a]}])},633974,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,n,i={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (i.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":n.idempotencyKey},body:JSON.stringify({from:n.from,to:[n.to],subject:n.subject,html:n.html,text:n.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,r])},76012,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,n,i,s,o=5e3){let l;if((0,a.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${n}`,{...i,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function n(e,t,a,i={}){let s="number"==typeof i.replyTo&&Number.isSafeInteger(i.replyTo)&&i.replyTo>0?{reply_parameters:{message_id:i.replyTo,allow_sending_without_reply:!0}}:{},o=await r(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:a,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...i.replyMarkup?{reply_markup:i.replyMarkup}:{},...s})},i.fetch??fetch);if(o.ok){let e=o.result?.message_id;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?{ok:!0,messageId:e}:{ok:!0}}return 429===o.code?{ok:!1,kind:"transient",retryAfterS:o.retryAfter??30,error:`Telegram asked us to wait ${o.retryAfter??30} s.`}:null===o.code||o.code>=500?{ok:!1,kind:"transient",error:null===o.code?o.description:`Telegram returned an error (${o.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${o.description}`}}e.s(["I",0,n,"z",0,r])}]})();
21
+ `),await a([250],"the message"),t.send("QUIT"),await Promise.race([t.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([I(),S]),{ok:!0}}catch(e){return e instanceof b?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{T?.destroy()}}e.s(["f",0,v],973990);var A=e.i(220642),T=e.i(765359),S=e.i(218331),I=e.i(195191),x=e.i(298397);function D(e,t){return(0,S.M)(e,t)&&(0,S.z)(e).hour>=7}let C={en:{firing:"firing",opened:"opened",resolved:"resolved",last24:"in the last 24 hours.",stillHead:"Still firing",noFiring:"Nothing is firing.",resolvedHead:"Resolved",noResolved:"Nothing resolved.",appsHead:"Applications (24 h)",providersHead:"Providers",open:"Open alerts",after:"after",up:"up",took:e=>e,noChecks:"no checks",errors:e=>`${e} stored error${1===e?"":"s"}`},id:{firing:"aktif",opened:"baru",resolved:"pulih",last24:"dalam 24 jam terakhir.",stillHead:"Masih aktif",noFiring:"Nggak ada yang aktif.",resolvedHead:"Pulih",noResolved:"Nggak ada yang pulih.",appsHead:"Aplikasi (24 jam)",providersHead:"Provider",open:"Buka Alerts",after:"setelah",up:"aktif",took:e=>e.replace(/\b(\d+) min\b/g,"$1 menit").replace(/\b(\d+) h\b/g,"$1 jam").replace(/\b(\d+) d\b/g,"$1 hari"),noChecks:"belum ada cek",errors:e=>`${e} error tersimpan`}},E={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},j=[5,15,30,60];async function N(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!D(e,t.lastSentDay))return a;let r=(0,S.x)(e),n=t.state&&t.state.day===r?t.state:null;if(n?.stopped)return{...a,state:n};if(n&&n.attempts>0){let t=(j[n.attempts-1]??j[j.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...a,state:n}}n??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let i=await t.send({subject:n.subject,html:n.html,text:n.text});if(i.ok)return{acted:!0,state:null,sentDay:r,event:null,result:i};let s=n.attempts+1,o="config"===i.kind||s>=5,l="config"===i.kind?`${i.error}. Fix it and the next digest goes out tomorrow.`:`${i.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:i,state:{...n,attempts:s,lastAttemptAt:e.toISOString(),stopped:o,lastError:i.error},event:o?{message:"Daily digest not sent",detail:l}:null}}e.s(["J",0,function(e,t="en"){let a=C[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:a,month:r}=(0,S.e)(e);return`${a} ${"id"===t?E[r]??r:r}`})(e.now,t),i=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,s=`Watchbell \xb7 ${n} \xb7 ${i}`,o=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),l=e.firing.map(e=>`${A.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,T.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,I.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${a.last24}`,"",a.stillHead,...l.length?l.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...d.length?d.map(e=>`- ${e}`):[a.noResolved],...c.length?["",a.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",a.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,A.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,A.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,A.H)(t)}</p>`,g=['<div style="font:14px/1.5 system-ui,sans-serif;color:#14171f;max-width:560px">',`<h2 style="font:600 16px system-ui,sans-serif;margin:0 0 4px">Watchbell \xb7 ${(0,A.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,A.H)(`${i} ${a.last24}`)}</p>`,h(a.stillHead),f(l,a.noFiring),h(a.resolvedHead),f(d,a.noResolved),...c.length?[h(a.appsHead),f(c,"")]:[],...u.length?[h(a.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,A.H)(r).replace(/"/g,"&quot;")}" style="color:#2f4372">${(0,A.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,x.G)(s),html:(0,x.G)(g),text:(0,x.G)(p)}},"A",0,D,"K",0,N],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",a=e.RESEND_API_KEY?.trim()??"",r=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:a.startsWith("re_")?a:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(r)?r:null}}])},695811,e=>{var t=e.i(960049);function a(e){let t=e&&"object"==typeof e?e:null,a=t?t.lang:e,r=e=>{var r;return"string"==typeof(r=t&&e in t?t[e]:a)&&"id"===r.trim().toLowerCase()?"id":"en"};return{telegram:r("telegram"),discord:r("discord"),email:r("email")}}async function r(){try{return a(await (0,t.l)())}catch{return a(null)}}async function n(e="telegram"){return(await r())[e]}e.s(["H",0,n,"B",0,r,"t",0,function(e,t,a){return e[t][a]}])},633974,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,n,i={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (i.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":n.idempotencyKey},body:JSON.stringify({from:n.from,to:Array.isArray(n.to)?n.to:[n.to],subject:n.subject,html:n.html,text:n.text,...n.attachments?.length?{attachments:n.attachments}:{}})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(s.ok)return{ok:!0};let o=await s.json().catch(()=>null);return 429===s.status||s.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${s.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(o?.message??s.status).slice(0,200)}`}}e.s(["f",0,r])},76012,e=>{var t=e.i(425498),a=e.i(77193);async function r(e,n,i,s,o=5e3){let l;if((0,a.W)())return{ok:!1,code:null,description:t.Y,retryAfter:null};try{l=await s(`https://api.telegram.org/bot${e}/${n}`,{...i,signal:AbortSignal.timeout(o),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let d=await l.json().catch(()=>null);return d?.ok?{ok:!0,result:d.result}:{ok:!1,code:d?.error_code??l.status,description:String(d?.description??`HTTP ${l.status}`).slice(0,200),retryAfter:d?.parameters?.retry_after??null}}async function n(e,t,a,i={}){let s="number"==typeof i.replyTo&&Number.isSafeInteger(i.replyTo)&&i.replyTo>0?{reply_parameters:{message_id:i.replyTo,allow_sending_without_reply:!0}}:{},o=await r(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:a,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...i.replyMarkup?{reply_markup:i.replyMarkup}:{},...s})},i.fetch??fetch);if(o.ok){let e=o.result?.message_id;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?{ok:!0,messageId:e}:{ok:!0}}return 429===o.code?{ok:!1,kind:"transient",retryAfterS:o.retryAfter??30,error:`Telegram asked us to wait ${o.retryAfter??30} s.`}:null===o.code||o.code>=500?{ok:!1,kind:"transient",error:null===o.code?o.description:`Telegram returned an error (${o.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${o.description}`}}e.s(["I",0,n,"z",0,r])}]})();
22
22
 
23
23
  //# sourceMappingURL=src_lib_1qo6t00wwitz6._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[422067,e=>{let t={heartbeats:60,checks:60,vercel:60,supabase:300,supabaseUsage:3600,neon:300,firebase:300,firebaseUsage:3600,extraDbs:3600,cloudflare:3600,domains:21600,tls:3600,rdap:3600,eol:86400,status:300,logs:300,pageviews:1800,node:43200,security:21600,alerts:60,digest:300},a={supabase:0,digest:0,neon:60,firebase:120,status:180,logs:240,pageviews:1620,supabaseUsage:660,extraDbs:960,firebaseUsage:1320,cloudflare:1980,tls:2460,rdap:3120,domains:5280,eol:13560,node:13380,security:16560};function n(e,n){let i=1e3*t[e],r=(a[e]??0)*1e3;return Math.floor((n.getTime()+5e3-r)/i)*i+r}let i={status:6e3,logs:9e3,pageviews:9e3,digest:6e3,eol:6e3,node:6e3,security:11e3},r={heartbeats:"hosting",checks:"hosting",vercel:"hosting",cloudflare:"hosting",domains:"hosting",tls:"hosting",rdap:"hosting",logs:"hosting",pageviews:"hosting",supabase:"database",supabaseUsage:"database",neon:"database",firebase:"database",firebaseUsage:"database",extraDbs:"database",eol:null,node:null,status:null,alerts:null,digest:null,security:null},s={security:["hosting","devops"]},o=["supabase"];function l(e,t){return e.filter(e=>{let a=s[e];if(a)return a.some(e=>!t.has(e));let n=r[e];return null===n||!t.has(n)||o.includes(e)})}e.s(["X",0,3e3,"p",0,2e4,"d",0,55e3,"u",0,["alerts","digest"],"O",0,5e4,"P",0,function(e,t,a){let n=Math.min(e,t-a);return n<1e3?null:n},"S",0,function(e,a,i,r=new Set){let s=0;return l(Object.keys(t),r).filter(r=>{let o=e[r]?new Date(e[r]).getTime():null;if(t[r]<=60)return null===o||!!i||a.getTime()-o>=1e3*t[r]-1e4;let l=n(r,a);return(null===o||!(o>=l-5e3))&&(!(null===o||a.getTime()+5e3-l>=6e4)||!(s>=2)&&(s++,!0))})},"$",0,(e,t)=>{let a=r[e];return null!==a&&t.has(a)&&o.includes(e)},"B",0,function(e,t,a){return!a||!e||t.getTime()-e.getTime()>=5e4},"G",0,n,"z",0,function(e,t,a){return t-a>=(i[e]??0)},"_",0,function(e,a,n=new Set){if(!a||e.includes("security")||!l(["security"],n).length)return{due:[...e],early:!1};let i=Object.keys(t),r=e.findIndex(e=>i.indexOf(e)>i.indexOf("security")),s=[...e];return s.splice(r<0?s.length:r,0,"security"),{due:s,early:!0}}])},988294,593111,e=>{var t=e.i(875225),a=e.i(924924),n=e.i(618916),i=e.i(905685),r=e.i(422067),s=e.i(656083),o=e.i(125160),l=e.i(984125),u=e.i(189104),d=e.i(518899);async function c(e,i){let[r]=await (0,a.f)().insert(n.rateLimits).values({key:e,windowStart:i,count:1}).onConflictDoUpdate({target:[n.rateLimits.key,n.rateLimits.windowStart],set:{count:d.B`${n.rateLimits.count} + 1`}}).returning({count:n.rateLimits.count});if(1===r.count)try{await (0,a.f)().delete(n.rateLimits).where((0,t.S)(n.rateLimits.windowStart,new Date(Date.now()-864e5)))}catch{console.warn("rate limit sweep failed")}return r.count}function g(e,t){return(0,u.A)(e,t,{hit:c})}async function f(e,i,r){let s=(0,l.f)(e),[o]=await (0,a.f)().select({id:n.monitors.id}).from(n.monitors).where((0,t.b)((0,t.u)(n.monitors.tokenHash,s),(0,t.u)(n.monitors.kind,"heartbeat"))).limit(1);if(!o)return{status:"unknown"};let d=await g(u.t.ping,s);return d.allowed?(await (0,a.f)().update(n.monitors).set({lastPingAt:r,lastPingKind:i,updatedAt:r}).where((0,t.u)(n.monitors.id,o.id)),{status:"ok"}):{status:"limited",retryAfter:d.retryAfter}}async function m(e,l=()=>!1,u=!1,d){let c=(await (0,a.f)().select({m:n.monitors}).from(n.monitors).innerJoin(n.resources,(0,t.u)(n.resources.id,n.monitors.resourceId)).where((0,t.b)((0,t.u)(n.monitors.kind,"heartbeat"),(0,t.u)(n.monitors.paused,!1),(0,t.u)(n.monitors.ownerPaused,!1),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),...d?[(0,t.u)(n.monitors.id,d)]:[]))).filter(({m:t})=>void 0!==d||(0,r.B)(t.lastCheckedAt,e,u)),g=[],f=[];for(let{m:s}of c){let u=s.periodS??3600,c=s.graceS??600,m=(0,o.C)({lastPingAt:s.lastPingAt,lastPingKind:s.lastPingKind,periodS:u,graceS:c,createdAt:s.createdAt},e);if("unknown"===m.state)continue;let h=m.state!==s.state;(await (0,a.f)().update(n.monitors).set({state:m.state,failStreak:m.failStreak,lastCheckedAt:e,lastError:"ok"===m.state?null:m.text,...h?{stateSince:e}:{},updatedAt:e}).where((0,t.b)((0,t.u)(n.monitors.id,s.id),(0,t.u)(n.monitors.state,s.state),(0,t.u)(n.monitors.ownerPaused,!1),(0,t.u)(n.monitors.paused,!1),null===s.lastPingAt?(0,t.M)(n.monitors.lastPingAt):(0,t.u)(n.monitors.lastPingAt,s.lastPingAt),null===s.periodS?(0,t.M)(n.monitors.periodS):(0,t.u)(n.monitors.periodS,s.periodS),null===s.graceS?(0,t.M)(n.monitors.graceS):(0,t.u)(n.monitors.graceS,s.graceS))).returning({id:n.monitors.id})).length&&((void 0===d||(0,r.B)(s.lastCheckedAt,e,!0))&&f.push({monitorId:s.id,at:e,ok:"err"!==m.state,statusCode:null,latencyMs:null,error:"ok"===m.state?null:m.text,inMaintenance:l(s.id,s.resourceId)}),g.push((0,i.F)({resourceId:s.resourceId,path:s.name??"heartbeat",prev:s.state,next:m.state,code:null,error:m.text,at:e,heartbeat:!0})))}return f.length&&await (0,a.f)().insert(n.checks).values(f),await (0,s.f)(g),f.length}e.s(["f",0,g],593111),e.s(["_",0,f,"r",0,m],988294)},984125,e=>{var t=e.i(666680);e.s(["f",0,function(e){return(0,t.createHash)("sha256").update(e).digest("hex")}])},125160,e=>{var t=e.i(905685);let a=/^hb_[0-9a-f]{32}$/,n=e=>{let t=Math.max(1,Math.floor(e/6e4));if(t<60)return`${t} min`;let a=Math.floor(t/60);return a<48?`${a} h`:`${Math.floor(a/24)} days`};e.s(["C",0,function(e,a){let i=e=>({state:"err",text:`Down \xb7 ${e}`,failStreak:t.I}),r=1e3*e.periodS,s=1e3*e.graceS;if(!e.lastPingAt)return a.getTime()-e.createdAt.getTime()<=r+s?{state:"unknown",text:"Waiting for the first ping",failStreak:0}:i("never pinged");let o=a.getTime()-e.lastPingAt.getTime();return"fail"===e.lastPingKind?i("the job reported a failure"):"start"===e.lastPingKind&&o>s?i("started but didn't finish"):o<=r?{state:"ok",text:`Up \xb7 pinged ${n(o)} ago`,failStreak:0}:o<=r+s?{state:"warn",text:`Late \xb7 last ping ${n(o)} ago`,failStreak:1}:i(`no ping for ${n(o)}`)},"r",0,function(e){let[t,n,...i]=e;return t&&a.test(t)&&!i.length?void 0===n?{token:t,kind:"ok"}:"fail"===n||"start"===n?{token:t,kind:n}:null:null},"i",0,function(e){let t=String(e??"").match(/(?<![0-9a-z_])hb_[0-9a-f]{32}(?![0-9a-zA-Z])/g)??[];return 1===t.length?t[0]:null}])}]})();
1
+ (()=>{"use strict";module.exports=[422067,e=>{let t={heartbeats:60,checks:60,vercel:60,supabase:300,supabaseUsage:3600,neon:300,firebase:300,firebaseUsage:3600,extraDbs:3600,cloudflare:3600,domains:21600,tls:3600,rdap:3600,eol:86400,status:300,logs:300,pageviews:1800,node:43200,security:21600,alerts:60,digest:300},s={supabase:0,digest:0,neon:60,firebase:120,status:180,logs:240,pageviews:1620,supabaseUsage:660,extraDbs:960,firebaseUsage:1320,cloudflare:1980,tls:2460,rdap:3120,domains:5280,eol:13560,node:13380,security:16560};function a(e,a){let n=1e3*t[e],r=(s[e]??0)*1e3;return Math.floor((a.getTime()+5e3-r)/n)*n+r}let n={status:6e3,logs:9e3,pageviews:9e3,digest:6e3,eol:6e3,node:6e3,security:11e3},r={heartbeats:"hosting",checks:"hosting",vercel:"hosting",cloudflare:"hosting",domains:"hosting",tls:"hosting",rdap:"hosting",logs:"hosting",pageviews:"hosting",supabase:"database",supabaseUsage:"database",neon:"database",firebase:"database",firebaseUsage:"database",extraDbs:"database",eol:null,node:null,status:null,alerts:null,digest:null,security:null},i={security:["hosting","devops"]},o=["supabase"];function l(e,t){return e.filter(e=>{let s=i[e];if(s)return s.some(e=>!t.has(e));let a=r[e];return null===a||!t.has(a)||o.includes(e)})}e.s(["X",0,3e3,"p",0,2e4,"d",0,55e3,"u",0,["alerts","digest"],"O",0,5e4,"P",0,function(e,t,s){let a=Math.min(e,t-s);return a<1e3?null:a},"S",0,function(e,s,n,r=new Set){let i=0;return l(Object.keys(t),r).filter(r=>{let o=e[r]?new Date(e[r]).getTime():null;if(t[r]<=60)return null===o||!!n||s.getTime()-o>=1e3*t[r]-1e4;let l=a(r,s);return(null===o||!(o>=l-5e3))&&(!(null===o||s.getTime()+5e3-l>=6e4)||!(i>=2)&&(i++,!0))})},"$",0,(e,t)=>{let s=r[e];return null!==s&&t.has(s)&&o.includes(e)},"B",0,function(e,t,s){return!s||!e||t.getTime()-e.getTime()>=5e4},"G",0,a,"z",0,function(e,t,s){return t-s>=(n[e]??0)},"_",0,function(e,s,a=new Set){if(!s||e.includes("security")||!l(["security"],a).length)return{due:[...e],early:!1};let n=Object.keys(t),r=e.findIndex(e=>n.indexOf(e)>n.indexOf("security")),i=[...e];return i.splice(r<0?i.length:r,0,"security"),{due:i,early:!0}}])},988294,e=>{var t=e.i(875225),s=e.i(924924),a=e.i(618916),n=e.i(905685),r=e.i(422067),i=e.i(656083),o=e.i(125160),l=e.i(984125),u=e.i(189104),d=e.i(593111);async function g(e,n,r){let i=(0,l.f)(e),[o]=await (0,s.f)().select({id:a.monitors.id}).from(a.monitors).where((0,t.b)((0,t.u)(a.monitors.tokenHash,i),(0,t.u)(a.monitors.kind,"heartbeat"))).limit(1);if(!o)return{status:"unknown"};let g=await (0,d.f)(u.t.ping,i);return g.allowed?(await (0,s.f)().update(a.monitors).set({lastPingAt:r,lastPingKind:n,updatedAt:r}).where((0,t.u)(a.monitors.id,o.id)),{status:"ok"}):{status:"limited",retryAfter:g.retryAfter}}async function c(e,l=()=>!1,u=!1,d){let g=(await (0,s.f)().select({m:a.monitors}).from(a.monitors).innerJoin(a.resources,(0,t.u)(a.resources.id,a.monitors.resourceId)).where((0,t.b)((0,t.u)(a.monitors.kind,"heartbeat"),(0,t.u)(a.monitors.paused,!1),(0,t.u)(a.monitors.ownerPaused,!1),(0,t.u)(a.resources.monitored,!0),(0,t.M)(a.resources.goneAt),...d?[(0,t.u)(a.monitors.id,d)]:[]))).filter(({m:t})=>void 0!==d||(0,r.B)(t.lastCheckedAt,e,u)),f=[],h=[];for(let{m:i}of g){let u=i.periodS??3600,g=i.graceS??600,c=(0,o.C)({lastPingAt:i.lastPingAt,lastPingKind:i.lastPingKind,periodS:u,graceS:g,createdAt:i.createdAt},e);if("unknown"===c.state)continue;let m=c.state!==i.state;(await (0,s.f)().update(a.monitors).set({state:c.state,failStreak:c.failStreak,lastCheckedAt:e,lastError:"ok"===c.state?null:c.text,...m?{stateSince:e}:{},updatedAt:e}).where((0,t.b)((0,t.u)(a.monitors.id,i.id),(0,t.u)(a.monitors.state,i.state),(0,t.u)(a.monitors.ownerPaused,!1),(0,t.u)(a.monitors.paused,!1),null===i.lastPingAt?(0,t.M)(a.monitors.lastPingAt):(0,t.u)(a.monitors.lastPingAt,i.lastPingAt),null===i.periodS?(0,t.M)(a.monitors.periodS):(0,t.u)(a.monitors.periodS,i.periodS),null===i.graceS?(0,t.M)(a.monitors.graceS):(0,t.u)(a.monitors.graceS,i.graceS))).returning({id:a.monitors.id})).length&&((void 0===d||(0,r.B)(i.lastCheckedAt,e,!0))&&h.push({monitorId:i.id,at:e,ok:"err"!==c.state,statusCode:null,latencyMs:null,error:"ok"===c.state?null:c.text,inMaintenance:l(i.id,i.resourceId)}),f.push((0,n.F)({resourceId:i.resourceId,path:i.name??"heartbeat",prev:i.state,next:c.state,code:null,error:c.text,at:e,heartbeat:!0})))}return h.length&&await (0,s.f)().insert(a.checks).values(h),await (0,i.f)(f),h.length}e.s(["_",0,g,"r",0,c])},984125,e=>{var t=e.i(666680);e.s(["f",0,function(e){return(0,t.createHash)("sha256").update(e).digest("hex")}])},125160,e=>{var t=e.i(905685);let s=/^hb_[0-9a-f]{32}$/,a=e=>{let t=Math.max(1,Math.floor(e/6e4));if(t<60)return`${t} min`;let s=Math.floor(t/60);return s<48?`${s} h`:`${Math.floor(s/24)} days`};e.s(["C",0,function(e,s){let n=e=>({state:"err",text:`Down \xb7 ${e}`,failStreak:t.I}),r=1e3*e.periodS,i=1e3*e.graceS;if(!e.lastPingAt)return s.getTime()-e.createdAt.getTime()<=r+i?{state:"unknown",text:"Waiting for the first ping",failStreak:0}:n("never pinged");let o=s.getTime()-e.lastPingAt.getTime();return"fail"===e.lastPingKind?n("the job reported a failure"):"start"===e.lastPingKind&&o>i?n("started but didn't finish"):o<=r?{state:"ok",text:`Up \xb7 pinged ${a(o)} ago`,failStreak:0}:o<=r+i?{state:"warn",text:`Late \xb7 last ping ${a(o)} ago`,failStreak:1}:n(`no ping for ${a(o)}`)},"r",0,function(e){let[t,a,...n]=e;return t&&s.test(t)&&!n.length?void 0===a?{token:t,kind:"ok"}:"fail"===a||"start"===a?{token:t,kind:a}:null:null},"i",0,function(e){let t=String(e??"").match(/(?<![0-9a-z_])hb_[0-9a-f]{32}(?![0-9a-zA-Z])/g)??[];return 1===t.length?t[0]:null}])}]})();
2
2
 
3
3
  //# sourceMappingURL=src_lib_1sz77jjn7xl7o._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[927262,e=>{"use strict";let n=e=>(e??0).toLocaleString("en-US"),o={MonitorDown:{key:"MonitorDown",severity:"critical",threshold:3,bounds:[1,10],source:"own",needs:null,sampled:!0,condition:e=>`${n(e)} failed checks in a row`},CollectorStale:{key:"CollectorStale",severity:"critical",threshold:5,bounds:[3,60],source:"own",needs:null,sampled:!1,condition:e=>`No collector run for ${n(e)} min`},HighLatency:{key:"HighLatency",severity:"warning",threshold:1500,bounds:[100,3e4],source:"own",needs:null,sampled:!0,condition:e=>`Slowest 5% of checks over ${n(e)} ms for 10 min`},DeploymentFailed:{key:"DeploymentFailed",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"A production deploy fails"},DatabasePaused:{key:"DatabasePaused",severity:"warning",threshold:null,bounds:null,source:"api",needs:"databases",sampled:!1,condition:()=>"Supabase pauses the project"},CertExpiringSoon:{key:"CertExpiringSoon",severity:"warning",threshold:14,bounds:[1,90],source:"own",needs:"domains",sampled:!1,condition:e=>`TLS certificate expires in < ${n(e)} days`},DomainExpiringSoon:{key:"DomainExpiringSoon",severity:"warning",threshold:30,bounds:[1,180],source:"api",needs:"domains",sampled:!1,condition:e=>`Domain expires in < ${n(e)} days`},StorageAlmostFull:{key:"StorageAlmostFull",severity:"warning",threshold:80,bounds:[10,100],source:"api",needs:"databases",sampled:!1,condition:e=>`Database size > ${n(e)}% of free limit`},NeonComputeHigh:{key:"NeonComputeHigh",severity:"warning",threshold:80,bounds:[1,100],source:"api",needs:"databases",sampled:!1,condition:e=>`> ${n(e)} of 100 CU-hours this month`},FirestoreQuotaHigh:{key:"FirestoreQuotaHigh",severity:"warning",threshold:80,bounds:[10,100],source:"test",needs:"databases",sampled:!1,condition:e=>`Daily reads > ${n(e)}% of 50k`},AutoPauseRisk:{key:"AutoPauseRisk",severity:"info",threshold:4,bounds:[1,6],source:"api",needs:"databases",sampled:!1,condition:e=>`Supabase project without API traffic for ${n(e)}+ days`},DnsProxiedToVercel:{key:"DnsProxiedToVercel",severity:"info",threshold:null,bounds:null,source:"api",needs:"dns",sampled:!1,condition:()=>"Cloudflare record proxied in front of Vercel"},ComputeHigh:{key:"ComputeHigh",severity:"warning",threshold:80,bounds:[50,95],source:"api",needs:"databases",sampled:!1,condition:e=>`Supabase CPU > ${n(e)}% for 15 min, RAM > ${n(Math.min(99,(e??80)+10))}%, disk > ${n(e)}% or connections > ${n(e)}% of max`},DbQuotaHigh:{key:"DbQuotaHigh",severity:"warning",threshold:80,bounds:[10,100],source:"api",needs:"databases",sampled:!1,condition:e=>`Turso, Upstash or D1 usage > ${n(e)}% of a free-plan quota`},CredentialExpiring:{key:"CredentialExpiring",severity:"warning",threshold:14,bounds:[1,60],source:"api",needs:null,sampled:!1,condition:e=>`Account credential expires in < ${n(e)} days`},VulnerableDependency:{key:"VulnerableDependency",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"A dependency has a critical or high advisory, or a moderate one on a direct dependency (OSV.dev)"},FrameworkVulnerable:{key:"FrameworkVulnerable",severity:"warning",threshold:null,bounds:null,source:"own",needs:null,sampled:!1,condition:()=>"The app's Next.js version has a known advisory (OSV.dev)"},CiFailing:{key:"CiFailing",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"The latest GitHub Actions run on the default branch failed"},OsSecurityUpdate:{key:"OsSecurityUpdate",severity:"warning",threshold:7,bounds:[0,10],source:"own",needs:null,sampled:!1,condition:e=>`A waiting security update fixes a CVE scored ${(e??7).toFixed(1)}+ (CVSS), or a new kernel waits for a reboot`},MonitorDomainMoved:{key:"MonitorDomainMoved",severity:"warning",threshold:null,bounds:null,source:"own",needs:null,sampled:!1,condition:()=>"The monitor's domain is no longer one of the app's domains"}},i=Object.keys(o),s=e=>"string"==typeof e&&e in o,a=["critical","warning","info"],r=["telegram","discord","webhook","smtp","email_digest"],t={MonitorDown:"Site down",CollectorStale:"Checks stopped",HighLatency:"Slow responses",DeploymentFailed:"Deploy failed",DatabasePaused:"Database paused",CertExpiringSoon:"Certificate expiring",DomainExpiringSoon:"Domain expiring",StorageAlmostFull:"Database almost full",NeonComputeHigh:"Neon hours running out",FirestoreQuotaHigh:"Firestore reads running out",AutoPauseRisk:"Supabase may pause",DnsProxiedToVercel:"Cloudflare proxy in front of Vercel",ComputeHigh:"Supabase under load",DbQuotaHigh:"Free quota running out",CredentialExpiring:"Token expiring",VulnerableDependency:"Vulnerable package",FrameworkVulnerable:"Next.js needs a security update",CiFailing:"CI is failing",OsSecurityUpdate:"Security updates waiting on this machine",MonitorDomainMoved:"App moved to a new domain"};e.s(["_",0,o,"u",0,i,"$",0,t,"h",0,s,"N",0,function(e,i){let s=o[e],t={},d=a.find(e=>e===i.severity);d||(t.severity="Pick a severity.");let l=null;if(s.bounds){let e=String(i.threshold??"").replace(/,/g,"").trim(),o=/^\d+$/.test(e)?Number(e):0/0;!Number.isInteger(o)||o<s.bounds[0]||o>s.bounds[1]?t.threshold=`Enter a whole number from ${n(s.bounds[0])} to ${n(s.bounds[1])}.`:l=o}let u=Array.isArray(i.channels)?i.channels:[];return(u.every(e=>r.includes(e))||(t.channels="Pick from Telegram, Discord and the daily digest."),Object.keys(t).length||!d)?{ok:!1,fieldErrors:t}:{ok:!0,value:{severity:d,threshold:l,channels:[...new Set(u)],enabled:!0===i.enabled}}},"v",0,e=>s(e)?t[e]:e])}];
1
+ module.exports=[927262,263410,15738,e=>{"use strict";let n=e=>(e??0).toLocaleString("en-US"),o={MonitorDown:{key:"MonitorDown",severity:"critical",threshold:3,bounds:[1,10],source:"own",needs:null,sampled:!0,condition:e=>`${n(e)} failed checks in a row`},CollectorStale:{key:"CollectorStale",severity:"critical",threshold:5,bounds:[3,60],source:"own",needs:null,sampled:!1,condition:e=>`No collector run for ${n(e)} min`},HighLatency:{key:"HighLatency",severity:"warning",threshold:1500,bounds:[100,3e4],source:"own",needs:null,sampled:!0,condition:e=>`Slowest 5% of checks over ${n(e)} ms for 10 min`},DeploymentFailed:{key:"DeploymentFailed",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"A production deploy fails"},DatabasePaused:{key:"DatabasePaused",severity:"warning",threshold:null,bounds:null,source:"api",needs:"databases",sampled:!1,condition:()=>"Supabase pauses the project"},CertExpiringSoon:{key:"CertExpiringSoon",severity:"warning",threshold:14,bounds:[1,90],source:"own",needs:"domains",sampled:!1,condition:e=>`TLS certificate expires in < ${n(e)} days`},DomainExpiringSoon:{key:"DomainExpiringSoon",severity:"warning",threshold:30,bounds:[1,180],source:"api",needs:"domains",sampled:!1,condition:e=>`Domain expires in < ${n(e)} days`},StorageAlmostFull:{key:"StorageAlmostFull",severity:"warning",threshold:80,bounds:[10,100],source:"api",needs:"databases",sampled:!1,condition:e=>`Database size > ${n(e)}% of free limit`},NeonComputeHigh:{key:"NeonComputeHigh",severity:"warning",threshold:80,bounds:[1,100],source:"api",needs:"databases",sampled:!1,condition:e=>`> ${n(e)} of 100 CU-hours this month`},FirestoreQuotaHigh:{key:"FirestoreQuotaHigh",severity:"warning",threshold:80,bounds:[10,100],source:"test",needs:"databases",sampled:!1,condition:e=>`Daily reads > ${n(e)}% of 50k`},AutoPauseRisk:{key:"AutoPauseRisk",severity:"info",threshold:4,bounds:[1,6],source:"api",needs:"databases",sampled:!1,condition:e=>`Supabase project without API traffic for ${n(e)}+ days`},DnsProxiedToVercel:{key:"DnsProxiedToVercel",severity:"info",threshold:null,bounds:null,source:"api",needs:"dns",sampled:!1,condition:()=>"Cloudflare record proxied in front of Vercel"},ComputeHigh:{key:"ComputeHigh",severity:"warning",threshold:80,bounds:[50,95],source:"api",needs:"databases",sampled:!1,condition:e=>`Supabase CPU > ${n(e)}% for 15 min, RAM > ${n(Math.min(99,(e??80)+10))}%, disk > ${n(e)}% or connections > ${n(e)}% of max`},DbQuotaHigh:{key:"DbQuotaHigh",severity:"warning",threshold:80,bounds:[10,100],source:"api",needs:"databases",sampled:!1,condition:e=>`Turso, Upstash or D1 usage > ${n(e)}% of a free-plan quota`},CredentialExpiring:{key:"CredentialExpiring",severity:"warning",threshold:14,bounds:[1,60],source:"api",needs:null,sampled:!1,condition:e=>`Account credential expires in < ${n(e)} days`},VulnerableDependency:{key:"VulnerableDependency",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"A dependency has a critical or high advisory, or a moderate one on a direct dependency (OSV.dev)"},FrameworkVulnerable:{key:"FrameworkVulnerable",severity:"warning",threshold:null,bounds:null,source:"own",needs:null,sampled:!1,condition:()=>"The app's Next.js version has a known advisory (OSV.dev)"},CiFailing:{key:"CiFailing",severity:"warning",threshold:null,bounds:null,source:"api",needs:null,sampled:!1,condition:()=>"The latest GitHub Actions run on the default branch failed"},OsSecurityUpdate:{key:"OsSecurityUpdate",severity:"warning",threshold:7,bounds:[0,10],source:"own",needs:null,sampled:!1,condition:e=>`A waiting security update fixes a CVE scored ${(e??7).toFixed(1)}+ (CVSS), or a new kernel waits for a reboot`},ReportSendFailed:{key:"ReportSendFailed",severity:"warning",threshold:null,bounds:null,source:"own",needs:null,sampled:!1,condition:()=>"A monthly client report couldn't be emailed after 3 tries"},MonitorDomainMoved:{key:"MonitorDomainMoved",severity:"warning",threshold:null,bounds:null,source:"own",needs:null,sampled:!1,condition:()=>"The monitor's domain is no longer one of the app's domains"}},t=Object.keys(o),i=e=>"string"==typeof e&&e in o,a=["critical","warning","info"],r=["telegram","discord","webhook","smtp","email_digest"],s={MonitorDown:"Site down",CollectorStale:"Checks stopped",HighLatency:"Slow responses",DeploymentFailed:"Deploy failed",DatabasePaused:"Database paused",CertExpiringSoon:"Certificate expiring",DomainExpiringSoon:"Domain expiring",StorageAlmostFull:"Database almost full",NeonComputeHigh:"Neon hours running out",FirestoreQuotaHigh:"Firestore reads running out",AutoPauseRisk:"Supabase may pause",DnsProxiedToVercel:"Cloudflare proxy in front of Vercel",ComputeHigh:"Supabase under load",DbQuotaHigh:"Free quota running out",CredentialExpiring:"Token expiring",VulnerableDependency:"Vulnerable package",FrameworkVulnerable:"Next.js needs a security update",CiFailing:"CI is failing",OsSecurityUpdate:"Security updates waiting on this machine",ReportSendFailed:"Client report not sent",MonitorDomainMoved:"App moved to a new domain"};e.s(["_",0,o,"u",0,t,"$",0,s,"h",0,i,"N",0,function(e,t){let i=o[e],s={},l=a.find(e=>e===t.severity);l||(s.severity="Pick a severity.");let d=null;if(i.bounds){let e=String(t.threshold??"").replace(/,/g,"").trim(),o=/^\d+$/.test(e)?Number(e):0/0;!Number.isInteger(o)||o<i.bounds[0]||o>i.bounds[1]?s.threshold=`Enter a whole number from ${n(i.bounds[0])} to ${n(i.bounds[1])}.`:d=o}let u=Array.isArray(t.channels)?t.channels:[];return(u.every(e=>r.includes(e))||(s.channels="Pick from Telegram, Discord and the daily digest."),Object.keys(s).length||!l)?{ok:!1,fieldErrors:s}:{ok:!0,value:{severity:l,threshold:d,channels:[...new Set(u)],enabled:!0===t.enabled}}},"v",0,e=>i(e)?s[e]:e],927262);var l=e.i(13552),d=e.i(986096),u=e.i(383217),c=e.i(574619),p=e.i(665105),m=e.i(99450),h=e.i(731793),y=e.i(837137);let g={createdAt:(0,m._)("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:(0,m._)("updated_at",{withTimezone:!0}).notNull().defaultNow()},f=y.ops.table("reports",{id:(0,h.q)("id").primaryKey().defaultRandom(),clientName:(0,p.f)("client_name").notNull(),title:(0,p.f)("title"),lang:(0,p.f)("lang").$type().notNull().default("en"),note:(0,p.f)("note"),emailOpening:(0,p.f)("email_opening"),recipients:(0,u.y)("recipients").$type().notNull().default([]),autoSend:(0,l.f)("auto_send").notNull().default(!1),sender:(0,p.f)("sender").$type(),...g}),b=y.ops.table("report_sites",{reportId:(0,h.q)("report_id").notNull().references(()=>f.id,{onDelete:"cascade"}),monitorId:(0,h.q)("monitor_id").notNull().references(()=>y.monitors.id,{onDelete:"cascade"}),displayName:(0,p.f)("display_name").notNull(),position:(0,d.f)("position").notNull().default(0)},e=>[(0,c._)({columns:[e.reportId,e.monitorId]})]),w=y.ops.table("report_sends",{reportId:(0,h.q)("report_id").notNull().references(()=>f.id,{onDelete:"cascade"}),month:(0,p.f)("month").notNull(),status:(0,p.f)("status").$type().notNull(),attempts:(0,d.f)("attempts").notNull().default(0),lastError:(0,p.f)("last_error"),claimedAt:(0,m._)("claimed_at",{withTimezone:!0}),sentAt:(0,m._)("sent_at",{withTimezone:!0})},e=>[(0,c._)({columns:[e.reportId,e.month]})]),D=y.ops.table("deploy_days",{resourceId:(0,h.q)("resource_id").notNull().references(()=>y.resources.id,{onDelete:"cascade"}),day:(0,p.f)("day").notNull(),ok:(0,d.f)("ok").notNull(),failed:(0,d.f)("failed").notNull()},e=>[(0,c._)({columns:[e.resourceId,e.day]})]);e.s(["p",0,D,"q",0,w,"Z",0,b,"I",0,f],263410),e.s(["e",0,function(e){let[n,o]=e.split("-").map(Number);return Array.from({length:new Date(Date.UTC(n,o,0)).getUTCDate()},(n,o)=>`${e}-${String(o+1).padStart(2,"0")}`)},"C",0,function(e,n){let o=new Intl.DateTimeFormat("en-CA",{timeZone:n,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),t=e=>o.find(n=>n.type===e)?.value??"";return`${t("year")}-${t("month")}-${t("day")}`},"K",0,function(e,n){let o=Date.parse(`${e}T00:00:00Z`),t=new Intl.DateTimeFormat("en-CA",{timeZone:n,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).formatToParts(new Date(o)),i=e=>Number(t.find(n=>n.type===e)?.value);return new Date(o-(Date.UTC(i("year"),i("month")-1,i("day"),i("hour"),i("minute"),i("second"))-o))}],15738)}];
2
2
 
3
3
  //# sourceMappingURL=src_lib_alerts_catalog_ts_1ndg28acul64q._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[617084,e=>{"use strict";let t={name:null,accent:null,senderName:null,publicUrl:null,poweredBy:!0,hasLogo:!1},n="#ffffff",o="#111214",r=/^#[0-9a-f]{6}$/;function a(e){let t=[1,3,5].map(t=>parseInt(e.slice(t,t+2),16)/255).map(e=>e<=.03928?e/12.92:((e+.055)/1.055)**2.4);return .2126*t[0]+.7152*t[1]+.0722*t[2]}function l(e,t){let[n,o]=[a(e.toLowerCase()),a(t.toLowerCase())].sort((e,t)=>t-e);return(n+.05)/(o+.05)}function c(e){let t={};if(null!==e.name&&(e.name.length>60||/[<>\r\n]/.test(e.name))&&(t.name="Up to 60 characters, no < or >."),null!==e.senderName&&(e.senderName.length>60||/[<>"\r\n]/.test(e.senderName))&&(t.senderName="Up to 60 characters, no <, > or quotes."),null!==e.publicUrl){let n=!1;try{let t=new URL(e.publicUrl);n="https:"===t.protocol||"http:"===t.protocol&&["localhost","127.0.0.1"].includes(t.hostname)}catch{n=!1}n||(t.publicUrl="An https:// address (http:// only for localhost).")}return null!==e.accent&&(r.test(e.accent)?4.5>l(e.accent,n)?t.accent=`Too pale to read on the light background (${l(e.accent,n).toFixed(1)}:1, needs 4.5:1).`:3>l(e.accent,o)&&(t.accent=`Too dark to see on the dark background (${l(e.accent,o).toFixed(1)}:1, needs 3:1).`):t.accent="A colour as #rrggbb."),t}let s=e=>"string"==typeof e&&e.trim()?e.trim():null;e.s(["k",0,"branding","l",0,t,"W",0,e=>/<([^>]+)>/.exec(e)?.[1]?.trim()??e.trim(),"u",0,function(e){return e.accent&&r.test(e.accent)?`:root:root, :root:root[data-theme="dark"] { --oc-brand: ${e.accent}; --oc-brand-hover: ${e.accent}; --oc-on-brand: #ffffff; }`:null},"r",0,function(e){return e.name?{title:{default:e.name,template:`%s \xb7 ${e.name}`},...e.hasLogo?{icons:{icon:"/brand-icon"}}:{}}:{}},"X",0,e=>e.name??"Watchbell","A",0,function(e){if(e.length<24||[137,80,78,71,13,10,26,10].some((t,n)=>e[n]!==t))return"The logo must be a PNG file.";if(e.length>262144)return"The logo must be 256 KB or smaller.";let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(16),o=t.getUint32(20);return!n||!o||Math.abs(n-o)/Math.max(n,o)>.1?"The logo must be square (or nearly).":Math.max(n,o)>512?"The logo can be at most 512 × 512 px.":null},"C",0,function(e,t){let n=(e??"Watchbell").replace(/["\r\n<>]/g,"").trim()||"Watchbell";return/^[\w.-]+$/.test(n)?`${n} <${t}>`:`"${n}" <${t}>`},"q",0,function(e){if(!e||"object"!=typeof e)return{...t};let n={name:s(e.name),accent:"string"==typeof e.accent&&r.test(e.accent)?e.accent:null,senderName:s(e.senderName),publicUrl:s(e.publicUrl),poweredBy:!1!==e.poweredBy,hasLogo:!0===e.hasLogo};for(let e of Object.keys(c(n)))n[e]=null;return n},"R",0,function(e){let t=s(e.publicUrl),n={name:s(e.name),accent:s(e.accent)?.toLowerCase()??null,senderName:s(e.senderName),publicUrl:t?t.replace(/\/+$/,""):null,poweredBy:"on"===e.poweredBy||!0===e.poweredBy||"true"===e.poweredBy,hasLogo:!1},o=c(n);return Object.keys(o).length?{ok:!1,fieldErrors:o}:{ok:!0,value:n}}])}];
2
+
3
+ //# sourceMappingURL=src_lib_branding_ts_03ns4y_8z0-6e._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[936657,e=>{"use strict";let t={name:null,accent:null,senderName:null,publicUrl:null,poweredBy:!0,hasLogo:!1},n="#ffffff",l="#111214",r=/^#[0-9a-f]{6}$/;function c(e){let t=[1,3,5].map(t=>parseInt(e.slice(t,t+2),16)/255).map(e=>e<=.03928?e/12.92:((e+.055)/1.055)**2.4);return .2126*t[0]+.7152*t[1]+.0722*t[2]}function o(e,t){let[n,l]=[c(e.toLowerCase()),c(t.toLowerCase())].sort((e,t)=>t-e);return(n+.05)/(l+.05)}let a=e=>"string"==typeof e&&e.trim()?e.trim():null;e.s(["k",0,"branding","l",0,t,"W",0,e=>/<([^>]+)>/.exec(e)?.[1]?.trim()??e.trim(),"X",0,e=>e.name??"Watchbell","C",0,function(e,t){let n=(e??"Watchbell").replace(/["\r\n<>]/g,"").trim()||"Watchbell";return/^[\w.-]+$/.test(n)?`${n} <${t}>`:`"${n}" <${t}>`},"q",0,function(e){if(!e||"object"!=typeof e)return{...t};let c={name:a(e.name),accent:"string"==typeof e.accent&&r.test(e.accent)?e.accent:null,senderName:a(e.senderName),publicUrl:a(e.publicUrl),poweredBy:!1!==e.poweredBy,hasLogo:!0===e.hasLogo};for(let e of Object.keys(function(e){let t={};if(null!==e.name&&(e.name.length>60||/[<>\r\n]/.test(e.name))&&(t.name="Up to 60 characters, no < or >."),null!==e.senderName&&(e.senderName.length>60||/[<>"\r\n]/.test(e.senderName))&&(t.senderName="Up to 60 characters, no <, > or quotes."),null!==e.publicUrl){let n=!1;try{let t=new URL(e.publicUrl);n="https:"===t.protocol||"http:"===t.protocol&&["localhost","127.0.0.1"].includes(t.hostname)}catch{n=!1}n||(t.publicUrl="An https:// address (http:// only for localhost).")}return null!==e.accent&&(r.test(e.accent)?4.5>o(e.accent,n)?t.accent=`Too pale to read on the light background (${o(e.accent,n).toFixed(1)}:1, needs 4.5:1).`:3>o(e.accent,l)&&(t.accent=`Too dark to see on the dark background (${o(e.accent,l).toFixed(1)}:1, needs 3:1).`):t.accent="A colour as #rrggbb."),t}(c)))c[e]=null;return c}])}];
2
+
3
+ //# sourceMappingURL=src_lib_branding_ts_0jfv9nur5alvy._.js.map
@@ -1,14 +1,17 @@
1
1
  module.exports=[34559,819645,e=>{"use strict";var t=e.i(666680);e.s(["f",0,function(e,a){if(!e||!a||!e.startsWith("Bearer "))return!1;let r=(0,t.createHash)("sha256").update(e.slice(7)).digest(),i=(0,t.createHash)("sha256").update(a).digest();return(0,t.timingSafeEqual)(r,i)}],34559);var a=e.i(518899),r=e.i(924924),i=e.i(473283),n=e.i(407602);async function s(){let e=await (0,r.f)().execute(a.B`
2
2
  select pid, state, extract(epoch from now() - state_change)::int as idle_s,
3
3
  coalesce(extract(epoch from now() - query_start)::int, 0) as run_s, left(query, 400) as query
4
- from pg_stat_activity where usename = current_user and pid <> pg_backend_pid()`);return(0,i.f)(e).map(e=>{var t;let a;return{pid:Number(e.pid),state:e.state,idleS:Number(e.idle_s),runS:Number(e.run_s),table:(t=e.query,(a=/(?:from|into|update|join)\s+"?ops"?\."?([a-z_]+)"?/i.exec(t??""))?a[1]:null)}})}async function o(e=10,t=10){let l=await s(),d=function(e,t=10,a=10){let r=function(e){let t=new Set,a=[];for(let r of e.filter(e=>"idle"===e.state&&e.table).sort((e,t)=>e.idleS-t.idleS))t.has(r.table)?r.idleS>=60&&a.push(r):t.add(r.table);return a}(e),i=e.filter(e=>!r.includes(e)),n=Math.max(0,i.length+1-t);return n?[...r,...[...i.filter(e=>"idle"===e.state&&e.idleS>=a).sort((e,t)=>t.idleS-e.idleS),...i.filter(e=>"idle"!==e.state&&e.runS>60).sort((e,t)=>t.runS-e.runS)].slice(0,n)]:r}(l,e,t),u=0;if(d.length){let e=d.map(e=>e.pid).filter(e=>Number.isInteger(e)&&e>0),t=await (0,r.f)().execute(a.B`select pg_terminate_backend(pid) as ok from unnest(array[${a.B.raw(e.join(","))}]::int[]) as pid`);u=(0,i.f)(t).filter(e=>e.ok).length}let c=function(e){let t=new Map;for(let a of e)t.set(a.table??"unknown",(t.get(a.table??"unknown")??0)+1);return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} \xd7${t}`)}(d);return u>0&&(console.info(`pool guard: ${l.length+1} connections, closed ${u} (${c.join(", ")})`),await (0,n.f)({kind:"ok",message:`Pool guard: closed ${u} of ${l.length+1} database connections`,detail:c.join(", ").slice(0,300),resourceId:null,actorUserId:null}).catch(()=>void 0)),{total:l.length+1,trimmed:u,culprits:c}}var l=e.i(77193),d=e.i(111970),u=e.i(662860);let c=[{name:"pool-guard",run:async()=>{(0,l.r)()&&await o().catch(e=>console.warn("pool guard failed:",e instanceof Error?e.message.slice(0,160):"error"))}},{name:"supabase-metrics",run:async(e,t)=>{(await (0,d.I)()).has("database")||await (0,u.E)(e,t?.deadline??e.getTime()+3e4)}}];var p=e.i(826148),f=e.i(875225),h=e.i(260338),m=e.i(537622),w=e.i(749124),g=e.i(618916),k=e.i(612478),y=e.i(814964),b=e.i(971724),v=e.i(455744),$=e.i(898305),T=e.i(105954),D=e.i(180473),I=e.i(206033),S=e.i(140561);let z="application/vnd.google-apps.folder",j="https://www.googleapis.com/drive/v3/files",A="https://www.googleapis.com/upload/drive/v3/files",E="https://sheets.googleapis.com/v4/spreadsheets",R=b.z.object({error:b.z.object({errors:v.z.array($.z.looseObject({reason:T.z.string().optional()})).optional(),status:T.z.string().optional()})});async function _(e,t,a,r,i){let n,s,o=i.timeoutMs??1e4,l={Authorization:`Bearer ${a}`,Accept:"application/json"};r?.raw?(l["Content-Type"]=r.contentType??"application/octet-stream",n=new Uint8Array(r.raw)):r&&void 0!==r.json&&(l["Content-Type"]="application/json",n=JSON.stringify(r.json));try{s=await (i.fetch??fetch)(t,{method:e,headers:l,body:n,signal:AbortSignal.timeout(o),cache:"no-store"})}catch(e){return{ok:!1,kind:"transient",error:e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name)?`Google Drive didn't answer within ${Math.round(o/1e3)} seconds.`:"Couldn't reach Google Drive."}}let d=await s.json().catch(()=>null);if(s.ok)return{ok:!0,data:d};let u=R.safeParse(d),c=u.success?u.data.error.errors?.find(e=>e.reason)?.reason??u.data.error.status:void 0;return 401===s.status?{ok:!1,kind:"auth",status:401,error:"Google Drive rejected the access token (401)."}:404===s.status?{ok:!1,kind:"missing",status:404,error:"Google Drive doesn't know this file (404)."}:403===s.status&&"storageQuotaExceeded"===c?{ok:!1,kind:"full",status:403,error:"Your Google Drive is full. Free some space; the next run tries again."}:429===s.status||s.status>=500||403===s.status&&/rateLimit/i.test(c??"")?{ok:!1,kind:"transient",status:s.status,error:`Google Drive is busy (${s.status}). The next run tries again.`}:{ok:!1,kind:403===s.status?"denied":"format",status:s.status,error:`Google Drive refused the request (${s.status}${c?` ${c}`:""}).`}}let F=b.z.object({id:T.z.string().min(1)}),P=e=>({ok:!1,kind:"format",error:`Google Drive answered ${e} in a format the console doesn't recognise.`});function x(e,t){if(!e.ok)return e;let a=F.safeParse(e.data);return a.success?{ok:!0,data:a.data.id}:P(t)}async function C(e,t,a={}){let r=`name = '${t.replace(/['\\]/g,"\\$&")}' and mimeType = '${z}' and trashed = false`,i=await _("GET",`${j}?${new URLSearchParams({q:r,fields:"files(id,name)",spaces:"drive",pageSize:"10"})}`,e,null,a);if(!i.ok)return i;let n=b.z.object({files:v.z.array(F)}).safeParse(i.data);return n.success?{ok:!0,data:n.data.files[0]?.id??null}:P("the folder search")}async function O(e,t,a={}){let r=await _("GET",`${j}/${encodeURIComponent(t)}?fields=id,trashed,name`,e,null,a);if(!r.ok)return"missing"===r.kind||"denied"===r.kind?{ok:!0,data:{usable:!1,name:null}}:r;let i=b.z.object({id:T.z.string(),trashed:D.z.boolean().optional(),name:T.z.string().optional()}).safeParse(r.data);return i.success?{ok:!0,data:{usable:!i.data.trashed,name:i.data.name?.trim()||null}}:P("the folder")}async function B(e,t,a={}){return x(await _("POST",`${j}?fields=id`,e,{json:{name:t,mimeType:z}},a),"the new folder")}async function G(e,t,a,r={}){return x(await _("POST",`${j}?fields=id`,e,{json:{name:t,mimeType:"application/vnd.google-apps.spreadsheet",parents:[a]}},r),"the new spreadsheet")}let H=e=>`'${e.replace(/'/g,"''")}'`;async function U(e,t,a,r={}){let i=await _("GET",`${E}/${encodeURIComponent(t)}?fields=sheets.properties(sheetId,title)`,e,null,r);if(!i.ok)return i;let n=b.z.object({sheets:v.z.array(b.z.object({properties:b.z.object({sheetId:I.z.number(),title:T.z.string()})})).default([])}).safeParse(i.data);if(!n.success)return P("the spreadsheet's tabs");let s=n.data.sheets.map(e=>e.properties),o=new Set(s.map(e=>e.title)),l=[],d=a.filter(e=>!o.has(e)),u=s[0];for(let e of(u&&d.length&&!a.includes(u.title)&&(l.push({updateSheetProperties:{properties:{sheetId:u.sheetId,title:d[0]},fields:"title"}}),d.shift()),d))l.push({addSheet:{properties:{title:e}}});if(!l.length)return{ok:!0,data:void 0};let c=await _("POST",`${E}/${encodeURIComponent(t)}:batchUpdate`,e,{json:{requests:l}},r);return c.ok?{ok:!0,data:void 0}:c}async function M(e,t,a,r={}){let i=encodeURIComponent(t),n=await _("POST",`${E}/${i}/values:batchClear`,e,{json:{ranges:a.map(e=>H(e.title))}},r);if(!n.ok)return n;let s=a.map(e=>({range:`${H(e.title)}!A1`,majorDimension:"ROWS",values:e.rows.map(e=>e.map(e=>e??""))})),o=await _("POST",`${E}/${i}/values:batchUpdate`,e,{json:{valueInputOption:"RAW",data:s}},r);return o.ok?{ok:!0,data:void 0}:o}let N="watchbell-backup-part";function L(e,t,a){return Buffer.concat([Buffer.from(`--${N}\r
4
+ from pg_stat_activity where usename = current_user and pid <> pg_backend_pid()`);return(0,i.f)(e).map(e=>{var t;let a;return{pid:Number(e.pid),state:e.state,idleS:Number(e.idle_s),runS:Number(e.run_s),table:(t=e.query,(a=/(?:from|into|update|join)\s+"?ops"?\."?([a-z_]+)"?/i.exec(t??""))?a[1]:null)}})}async function o(e=10,t=10){let l=await s(),d=function(e,t=10,a=10){let r=function(e){let t=new Set,a=[];for(let r of e.filter(e=>"idle"===e.state&&e.table).sort((e,t)=>e.idleS-t.idleS))t.has(r.table)?r.idleS>=60&&a.push(r):t.add(r.table);return a}(e),i=e.filter(e=>!r.includes(e)),n=Math.max(0,i.length+1-t);return n?[...r,...[...i.filter(e=>"idle"===e.state&&e.idleS>=a).sort((e,t)=>t.idleS-e.idleS),...i.filter(e=>"idle"!==e.state&&e.runS>60).sort((e,t)=>t.runS-e.runS)].slice(0,n)]:r}(l,e,t),u=0;if(d.length){let e=d.map(e=>e.pid).filter(e=>Number.isInteger(e)&&e>0),t=await (0,r.f)().execute(a.B`select pg_terminate_backend(pid) as ok from unnest(array[${a.B.raw(e.join(","))}]::int[]) as pid`);u=(0,i.f)(t).filter(e=>e.ok).length}let c=function(e){let t=new Map;for(let a of e)t.set(a.table??"unknown",(t.get(a.table??"unknown")??0)+1);return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} \xd7${t}`)}(d);return u>0&&(console.info(`pool guard: ${l.length+1} connections, closed ${u} (${c.join(", ")})`),await (0,n.f)({kind:"ok",message:`Pool guard: closed ${u} of ${l.length+1} database connections`,detail:c.join(", ").slice(0,300),resourceId:null,actorUserId:null}).catch(()=>void 0)),{total:l.length+1,trimmed:u,culprits:c}}var l=e.i(77193),d=e.i(111970),u=e.i(662860);let c=[{name:"pool-guard",run:async()=>{(0,l.r)()&&await o().catch(e=>console.warn("pool guard failed:",e instanceof Error?e.message.slice(0,160):"error"))}},{name:"supabase-metrics",run:async(e,t)=>{(await (0,d.I)()).has("database")||await (0,u.E)(e,t?.deadline??e.getTime()+3e4)}}];var f=e.i(875225),p=e.i(221994),h=e.i(936657),m=e.i(570118),w=e.i(483100),g=e.i(490675),y=e.i(547499),k=e.i(968068),b=e.i(633974),$=e.i(973990),v=e.i(218331),T=e.i(196514),D=e.i(709198),I=e.i(884471);async function S(e,t,i){return(await (0,r.f)().insert(p.q).values({reportId:e,month:t,status:"claimed",attempts:1,claimedAt:i}).onConflictDoUpdate({target:[p.q.reportId,p.q.month],set:{status:"claimed",claimedAt:i,attempts:a.B`${p.q.attempts} + 1`},setWhere:(0,f.b)((0,f.u)(p.q.status,"claimed"),(0,f.M)(p.q.claimedAt))}).returning({reportId:p.q.reportId})).length>0}async function z(e){return(await (0,r.f)().update(p.q).set({status:"failed",claimedAt:null,lastError:"The send stopped part-way and may have been sent. Check with the client before sending it yourself."}).where((0,f.b)((0,f.u)(p.q.status,"claimed"),(0,f.S)(p.q.claimedAt,new Date(e.getTime()-6e5)))).returning({reportId:p.q.reportId})).length}async function j(e,t,a,i){let n="sent"===a.status?{status:"sent",sentAt:i,lastError:null,claimedAt:null}:{status:"failed"===a.status?"failed":"claimed",claimedAt:null,lastError:a.error.slice(0,300)};await (0,r.f)().update(p.q).set(n).where((0,f.b)((0,f.u)(p.q.reportId,e),(0,f.u)(p.q.month,t)))}async function A(e){if("smtp"===e.sender){let t=await (0,w.u)("smtp");return t?.config?.host?(0,$.f)({...t.config,to:e.to.join(", ")},e.subject,e.text,{},{fromName:e.fromName,attachment:{filename:e.filename,contentType:"application/pdf",data:e.pdf}}):{ok:!1,kind:"config",error:"Email (SMTP) isn't connected."}}let t=(0,k.f)();if(!t.resendKey||!t.digestFrom)return{ok:!1,kind:"config",error:"Resend isn't set up (RESEND_API_KEY and DIGEST_FROM)."};let a=e.fromName?(0,h.C)(e.fromName,(0,h.W)(t.digestFrom)):t.digestFrom;return(0,b.f)(t.resendKey,{from:a,to:e.to,subject:e.subject,html:e.html,text:e.text,idempotencyKey:e.idempotencyKey,attachments:[{filename:e.filename,content:Buffer.from(e.pdf).toString("base64")}]})}let E={"not-found":"The report no longer exists.","no-sites":"The report has no websites.","month-too-old":"That month's data is no longer kept."};async function x(e,t={zone:(0,v.C)(),list:g.q,claim:S,settle:z,make:I.f,mail:A,brand:m.X,mark:j},a=1/0){var r;let i,n,{month:s,day:o,due:l}=(r=t.zone,n=Number((i=(0,T.C)(e,r)).slice(8,10)),{month:(e=>{let[t,a]=e.split("-").map(Number);return 1===a?`${t-1}-12`:`${t}-${String(a-1).padStart(2,"0")}`})(i.slice(0,7)),day:n,due:n>=1&&n<=3}),d={sent:0,failed:0,left:0};if(!l)return d;await t.settle(e);let u=(await t.list()).filter(e=>e.autoSend&&e.recipients.length>0&&e.sender);if(!u.length)return d;let c=await t.brand();for(let[r,i]of u.entries()){if(Date.now()>a){d.left=u.length-r;break}if(!await t.claim(i.id,s,e))continue;let n=e=>({status:o>=3?"failed":"retry",error:e}),l=await t.make(i.id,s,e,t.zone).catch(()=>({error:"not-found"}));if("error"in l){await t.mark(i.id,s,n(E[l.error]),e),d.failed++;continue}let f=await t.mail(function(e,t,a,r,i,n=e.recipients){let s=a.name??a.senderName??"Watchbell",o=(0,D.G)(e.lang,{clientName:e.clientName,month:t,opening:e.emailOpening,brand:s,title:e.title}),l=a.poweredBy?(0,D.O)(e.lang).poweredBy:null,d=a.hasLogo?(a.publicUrl??void 0??(0,y.f)().SITE_URL).replace(/\/+$/,""):"",u=a.hasLogo?`<p><img src="${d}/brand-icon" width="40" height="40" alt="" style="border-radius:6px"></p>`:"";return{sender:i,to:n,subject:o.subject,fromName:a.senderName,text:l?`${o.text}
5
+ --
6
+ ${l}
7
+ `:o.text,html:`${u}${o.html}${l?`<p style="color:#8a8f9c;font-size:12px">${l}</p>`:""}`,pdf:r.bytes,filename:r.filename,idempotencyKey:`report-${e.id}-${t}`}}(i,s,c,l,i.sender)).catch(()=>({ok:!1,kind:"transient",error:"The mail couldn't be sent."}));f.ok?(await t.mark(i.id,s,{status:"sent"},e),d.sent++):(await t.mark(i.id,s,n(f.error),e),d.failed++)}return d}var R=e.i(826148),_=e.i(260338),F=e.i(537622),C=e.i(749124),N=e.i(618916),O=e.i(612478),P=e.i(814964),q=e.i(971724),B=e.i(455744),G=e.i(898305),U=e.i(105954),H=e.i(180473),M=e.i(206033),L=e.i(140561);let W="application/vnd.google-apps.folder",K="https://www.googleapis.com/drive/v3/files",Y="https://www.googleapis.com/upload/drive/v3/files",J="https://sheets.googleapis.com/v4/spreadsheets",V=q.z.object({error:q.z.object({errors:B.z.array(G.z.looseObject({reason:U.z.string().optional()})).optional(),status:U.z.string().optional()})});async function Q(e,t,a,r,i){let n,s,o=i.timeoutMs??1e4,l={Authorization:`Bearer ${a}`,Accept:"application/json"};r?.raw?(l["Content-Type"]=r.contentType??"application/octet-stream",n=new Uint8Array(r.raw)):r&&void 0!==r.json&&(l["Content-Type"]="application/json",n=JSON.stringify(r.json));try{s=await (i.fetch??fetch)(t,{method:e,headers:l,body:n,signal:AbortSignal.timeout(o),cache:"no-store"})}catch(e){return{ok:!1,kind:"transient",error:e instanceof DOMException&&("TimeoutError"===e.name||"AbortError"===e.name)?`Google Drive didn't answer within ${Math.round(o/1e3)} seconds.`:"Couldn't reach Google Drive."}}let d=await s.json().catch(()=>null);if(s.ok)return{ok:!0,data:d};let u=V.safeParse(d),c=u.success?u.data.error.errors?.find(e=>e.reason)?.reason??u.data.error.status:void 0;return 401===s.status?{ok:!1,kind:"auth",status:401,error:"Google Drive rejected the access token (401)."}:404===s.status?{ok:!1,kind:"missing",status:404,error:"Google Drive doesn't know this file (404)."}:403===s.status&&"storageQuotaExceeded"===c?{ok:!1,kind:"full",status:403,error:"Your Google Drive is full. Free some space; the next run tries again."}:429===s.status||s.status>=500||403===s.status&&/rateLimit/i.test(c??"")?{ok:!1,kind:"transient",status:s.status,error:`Google Drive is busy (${s.status}). The next run tries again.`}:{ok:!1,kind:403===s.status?"denied":"format",status:s.status,error:`Google Drive refused the request (${s.status}${c?` ${c}`:""}).`}}let X=q.z.object({id:U.z.string().min(1)}),Z=e=>({ok:!1,kind:"format",error:`Google Drive answered ${e} in a format the console doesn't recognise.`});function ee(e,t){if(!e.ok)return e;let a=X.safeParse(e.data);return a.success?{ok:!0,data:a.data.id}:Z(t)}async function et(e,t,a={}){let r=`name = '${t.replace(/['\\]/g,"\\$&")}' and mimeType = '${W}' and trashed = false`,i=await Q("GET",`${K}?${new URLSearchParams({q:r,fields:"files(id,name)",spaces:"drive",pageSize:"10"})}`,e,null,a);if(!i.ok)return i;let n=q.z.object({files:B.z.array(X)}).safeParse(i.data);return n.success?{ok:!0,data:n.data.files[0]?.id??null}:Z("the folder search")}async function ea(e,t,a={}){let r=await Q("GET",`${K}/${encodeURIComponent(t)}?fields=id,trashed,name`,e,null,a);if(!r.ok)return"missing"===r.kind||"denied"===r.kind?{ok:!0,data:{usable:!1,name:null}}:r;let i=q.z.object({id:U.z.string(),trashed:H.z.boolean().optional(),name:U.z.string().optional()}).safeParse(r.data);return i.success?{ok:!0,data:{usable:!i.data.trashed,name:i.data.name?.trim()||null}}:Z("the folder")}async function er(e,t,a={}){return ee(await Q("POST",`${K}?fields=id`,e,{json:{name:t,mimeType:W}},a),"the new folder")}async function ei(e,t,a,r={}){return ee(await Q("POST",`${K}?fields=id`,e,{json:{name:t,mimeType:"application/vnd.google-apps.spreadsheet",parents:[a]}},r),"the new spreadsheet")}let en=e=>`'${e.replace(/'/g,"''")}'`;async function es(e,t,a,r={}){let i=await Q("GET",`${J}/${encodeURIComponent(t)}?fields=sheets.properties(sheetId,title)`,e,null,r);if(!i.ok)return i;let n=q.z.object({sheets:B.z.array(q.z.object({properties:q.z.object({sheetId:M.z.number(),title:U.z.string()})})).default([])}).safeParse(i.data);if(!n.success)return Z("the spreadsheet's tabs");let s=n.data.sheets.map(e=>e.properties),o=new Set(s.map(e=>e.title)),l=[],d=a.filter(e=>!o.has(e)),u=s[0];for(let e of(u&&d.length&&!a.includes(u.title)&&(l.push({updateSheetProperties:{properties:{sheetId:u.sheetId,title:d[0]},fields:"title"}}),d.shift()),d))l.push({addSheet:{properties:{title:e}}});if(!l.length)return{ok:!0,data:void 0};let c=await Q("POST",`${J}/${encodeURIComponent(t)}:batchUpdate`,e,{json:{requests:l}},r);return c.ok?{ok:!0,data:void 0}:c}async function eo(e,t,a,r={}){let i=encodeURIComponent(t),n=await Q("POST",`${J}/${i}/values:batchClear`,e,{json:{ranges:a.map(e=>en(e.title))}},r);if(!n.ok)return n;let s=a.map(e=>({range:`${en(e.title)}!A1`,majorDimension:"ROWS",values:e.rows.map(e=>e.map(e=>e??""))})),o=await Q("POST",`${J}/${i}/values:batchUpdate`,e,{json:{valueInputOption:"RAW",data:s}},r);return o.ok?{ok:!0,data:void 0}:o}let el="watchbell-backup-part";function ed(e,t,a){return Buffer.concat([Buffer.from(`--${el}\r
5
8
  Content-Type: application/json; charset=UTF-8\r
6
9
  \r
7
10
  ${JSON.stringify(e)}\r
8
- --${N}\r
11
+ --${el}\r
9
12
  Content-Type: ${a}\r
10
13
  \r
11
14
  `),t,Buffer.from(`\r
12
- --${N}--`)])}async function W(e,t,a={}){let r=`multipart/related; boundary=${N}`,i=e=>{if(!e.ok)return e;let a=b.z.object({id:T.z.string().min(1),size:S.z.union([T.z.string(),I.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}}:P("the upload")};if(t.fileId){let n=L({name:t.name,mimeType:t.mimeType},t.content,t.mimeType),s=await _("PATCH",`${A}/${encodeURIComponent(t.fileId)}?uploadType=multipart&fields=id,size`,e,{raw:n,contentType:r},a);if(s.ok||"missing"!==s.kind&&"denied"!==s.kind)return i(s)}let n=L({name:t.name,mimeType:t.mimeType,parents:[t.folderId]},t.content,t.mimeType);return i(await _("POST",`${A}?uploadType=multipart&fields=id,size`,e,{raw:n,contentType:r},a))}async function q(e,t,a={}){let r=await _("PATCH",`${j}/${encodeURIComponent(t)}?fields=id,trashed`,e,{json:{trashed:!0}},a);return r.ok||"missing"===r.kind?{ok:!0,data:void 0}:r}var Y=e.i(992664);class J extends Error{kind;constructor(e,t){super(t),this.kind=e}}async function K(e){let{month:t,partial:a,now:r}=e,i=(0,Y.p)();if(!i)return{ok:!1,month:t,kind:"env",error:Y.S};let n=await k.N();if(!n)return{ok:!1,month:t,kind:"not-connected",error:"Google Drive isn't connected."};if(!n.refreshToken){let e="The stored Google Drive token can't be read (the encryption key changed). Reconnect Google Drive.";return await k.r(n.id,{status:"error",lastError:e}),{ok:!1,month:t,kind:"failed",error:e}}let s=await k.z(t),o={sheetFileId:s?.sheetFileId??null,csvFileId:s?.csvFileId??null,driveFolderId:s?.driveFolderId??null},l=s?.status??"error";await k.W(t,{status:l,attempts:(s?.attempts??0)+1,startedAt:r});let d=e=>(o={...o,...e},k.W(t,{status:l,...e})),u={fetch:e.fetch},c=()=>{if(Date.now()>e.deadline)throw new J("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 J("failed",e.error);return e.data};try{let s=await (0,Y.B)(i,n.refreshToken,u);if(!s.ok){if("revoked"===s.kind)throw await k.r(n.id,{status:"error",lastError:Y.L}),new J("revoked",Y.L);throw new J("failed",s.error)}"error"===n.status&&await k.r(n.id,{status:"ok",lastError:null});let l=s.accessToken;c();let f=await k.M(),h=f?.id??null;if(f){let e=p(await O(l,f.id,u));e.usable?e.name&&e.name!==f.name&&await k.s(f.id,e.name):h=null}if(!h){c();let e=p(await C(l,y.R,u)),t=e?null:p(await C(l,y.C,u));h=e??t??p(await B(l,y.R,u)),await k.s(h,t?y.C:y.R)}let m=await k.f(t,a,r);c(),o.sheetFileId||await d({sheetFileId:p(await G(l,(0,y.F)(t),h,u)),driveFolderId:h}),c();let w=await U(l,o.sheetFileId,y.O,u);w.ok||"missing"!==w.kind&&"denied"!==w.kind||(await d({sheetFileId:p(await G(l,(0,y.F)(t),h,u)),driveFolderId:h}),c(),w=await U(l,o.sheetFileId,y.O,u)),p(w),c(),p(await M(l,o.sheetFileId,(0,y.m)(m),u)),c();let g=(0,y.b)((0,y.E)(m)),b=p(await W(l,{name:(0,y.V)(t),mimeType:"application/gzip",folderId:h,content:g,fileId:o.csvFileId},u));await d({csvFileId:b.id}),await k.W(t,{status:a?"partial":"ok",sizeBytes:b.size,error:null,finishedAt:new Date});let v=a?null:await V(l,r,e.deadline,u);return{ok:!0,month:t,retention:v,message:`${(0,y.n)(t)}${a?" so far":""} saved to Google Drive.`}}catch(i){let e=i instanceof J?i:new J("failed","The backup failed. The next daily run tries again.");i instanceof J||console.error("backup failed:",i instanceof Error?i.name:"unknown");let r=a&&"partial"===l?"partial":"error";return await k.W(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 V(e,t,a,r){let i=(0,y.c)(await k.e(),t),n=[];for(let s of i){if(Date.now()>a)break;let i=!0;for(let t of[s.sheetFileId,s.csvFileId])t&&((await q(e,t,r)).ok||(i=!1));i&&(await k.W(s.month,{status:s.status,trashedAt:t}),n.push((0,y.n)(s.month)))}return n.length?`Moved to Drive trash: ${n.join(", ")}.`:null}async function Q(e,t,a={}){let r=await k.N();if(!r||"error"===r.status&&r.lastError?.startsWith("invalid_grant"))return null;let i=(0,y.p)(await k.e(),e);if(!i)return null;let n=await K({month:i,partial:!1,now:e,deadline:t,...a});return n.ok?null:`${(0,y.n)(i)}: ${n.error}`}var X=e.i(426099),Z=e.i(433609),ee=e.i(13733),et=e.i(656083),ea=e.i(988294),er=e.i(629955),ei=e.i(125160),en=e.i(800523),es=e.i(970465),eo=e.i(607910),el=e.i(880420),ed=e.i(140318),eu=e.i(273083),ec=e.i(960049),ep=e.i(154491),ef=e.i(938739),eh=e.i(751762);let em={github:"devops",deps:"devops",databases:"database",security:"hosting",os:"devops"};async function ew(e){let[t]=await (0,r.f)().select({hour:(0,h.f)(g.rollupsHourly.hour)}).from(g.rollupsHourly),a=(0,ef.r)(t?.hour??null,e),i=await (0,r.f)().select().from(g.checks).where((0,f.b)((0,f.B)(g.checks.at,a),(0,f.S)(g.checks.at,(0,ef.b)(e)))).orderBy(g.checks.at),n=new Map;for(let e of i){let t=`${e.monitorId}|${(0,ef.b)(e.at).toISOString()}`,a=n.get(t);a?a.push(e):n.set(t,[e])}for(let[e,t]of n){let[a,i]=e.split("|"),n=(0,ef.z)(t);await (0,r.f)().insert(g.rollupsHourly).values({monitorId:a,hour:new Date(i),...n}).onConflictDoUpdate({target:[g.rollupsHourly.monitorId,g.rollupsHourly.hour],set:n})}}async function eg(e){let t=await (0,ec.J)().catch(()=>eu.f);await (0,r.f)().delete(g.checks).where((0,f.S)(g.checks.at,new Date(e.getTime()-864e5*t.checks))),await (0,r.f)().delete(g.rollupsHourly).where((0,f.S)(g.rollupsHourly.hour,new Date(e.getTime()-864e5*t.rollupsHourly))),await (0,r.f)().delete(g.deployments).where((0,f.b)((0,f.S)(g.deployments.createdAtProvider,new Date(e.getTime()-864e5*t.deployments)),(0,f.u)(g.deployments.isCurrent,!1),(0,f.u)(g.deployments.isPreviousProduction,!1))),await (0,r.f)().delete(g.events).where((0,f.S)(g.events.at,new Date(e.getTime()-864e5*t.events))),await (0,r.f)().delete(g.alerts).where((0,f.b)((0,f.E)(g.alerts.resolvedAt),(0,f.S)(g.alerts.resolvedAt,new Date(e.getTime()-864e5*t.alerts)))),await (0,r.f)().delete(g.collectorRuns).where((0,f.S)(g.collectorRuns.startedAt,new Date(e.getTime()-864e5*t.collectorRuns))),await (0,r.f)().delete(g.storedLogs).where((0,f.S)(g.storedLogs.at,new Date(e.getTime()-864e5*t.storedLogs))),await (0,r.f)().delete(g.recommendationDismissals).where((0,f.S)(g.recommendationDismissals.dismissedAt,new Date(e.getTime()-864e5*t.recommendationDismissals)))}async function ek(){let e=new Date,[t]=await (0,r.f)().insert(g.collectorRuns).values({startedAt:e,trigger:"vercel_cron"}).returning({id:g.collectorRuns.id}),a=[],i=await (0,d.I)(),n=[["rollups",()=>ew(e)],["backup",async()=>{let t=await Q(e,e.getTime()+2e4);t&&a.push(`backup: ${t}`)}],["retention",()=>eg(e)],["sync",async()=>{let t=(await (0,r.f)().select({id:g.accounts.id,label:g.accounts.label,provider:g.accounts.provider}).from(g.accounts).where((0,f.y)(g.accounts.provider,eo.I))).filter(e=>!i.has(ep.D[e.provider]??"manage"));for(let[r,i]of t.entries()){if(Date.now()>e.getTime()+25e3){a.push(`sync: ${t.length-r} account${t.length-r>1?"s":""} left for the next run, time budget used`);break}let n=await (0,el.k)(i.id);n.ok?(n.skippedTeams.length&&a.push(`sync ${i.provider}/${i.label}: skipped teams ${n.skippedTeams.join(", ")} (no access)`),n.overLimit&&a.push(`sync ${i.provider}/${i.label}: ${n.overLimit}`)):a.push(`sync ${i.provider}/${i.label}: ${n.error}`)}}],["github",async()=>{let t=await (0,ee.D)(Math.min(Date.now()+6e3,e.getTime()+35e3));t&&a.push(`github: ${t}`)}],["deps",async()=>{let t=await (0,Z.e)(Math.min(Date.now()+Z.o,e.getTime()+Z.R));t&&a.push(`deps: ${t}`)}],["databases",()=>(0,ed.f)({now:e,deadline:Math.min(Date.now()+15e3,e.getTime()+5e4),errors:a})],["keep-active",()=>(0,er.V)(e,Math.min(Date.now()+5e3,e.getTime()+5e4),a)],["security",async()=>{for(let t of(await (0,en.h)((0,es.F)(e.getTime(),Date.now()))).failed)a.push(`security ${t}`)}],..."on"===(0,p.C)()?[["os",async()=>{let e=await (0,p.W)();if(e.ok){if("unsupported"!==e.data.status){e.data.error&&a.push(`os: ${e.data.error}`);let t=e.data.updates.filter(e=>e.error).length;t&&a.push(`os: Ubuntu's data couldn't be read for ${t} update${1===t?"":"s"}`),e.data.backlog.error&&a.push(`os: ${e.data.backlog.error}`)}}else a.push(`os: ${e.error}`)}]]:[],["advisor",async()=>{await (0,X.O)(e)}]],s=[];try{for(let[e,t]of n)if(!i.has(em[e]))try{await t(),s.push(e)}catch(t){a.push(`${e}: ${(0,eh.f)(t)}`)}await (0,et.f)([{type:"system",kind:a.length?"warn":"info",message:a.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){a.push(`events: ${(0,eh.f)(e)}`)}finally{(0,m.f)(w.t),await (0,r.f)().update(g.collectorRuns).set({finishedAt:new Date,ok:0===a.length,errorSummary:a.join("\n").slice(0,2e3)||null,durationMs:Date.now()-e.getTime(),tasks:s}).where((0,f.u)(g.collectorRuns.id,t.id)).catch(()=>void 0)}await ey(a.length>0);let o=Date.now()-e.getTime();return{skipped:!1,ok:0===a.length,tasks:s,checks:0,durationMs:o,errors:a}}async function ey(e){let t=process.env.DAILY_HEARTBEAT_TOKEN;if(!t)return;let a=(0,ei.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,ea._)(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 eb(e,t,a=new Date){if(e.skipped||0===t.length)return e;let r=[...e.tasks],i=[...e.errors];for(let e of t)try{await e.run(a),r.push(e.name)}catch(t){i.push(`${e.name}: ${(0,eh.f)(t)}`)}return{...e,tasks:r,errors:i,ok:0===i.length}}e.i(956846);var ev=e.i(310603);async function e$(e){let t=[...c,...ev.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 eT(){return eb(await ek(),ev.extensions.dailySteps??[])}e.s(["W",0,eT,"m",0,e$],819645)}];
15
+ --${el}--`)])}async function eu(e,t,a={}){let r=`multipart/related; boundary=${el}`,i=e=>{if(!e.ok)return e;let a=q.z.object({id:U.z.string().min(1),size:L.z.union([U.z.string(),M.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}}:Z("the upload")};if(t.fileId){let n=ed({name:t.name,mimeType:t.mimeType},t.content,t.mimeType),s=await Q("PATCH",`${Y}/${encodeURIComponent(t.fileId)}?uploadType=multipart&fields=id,size`,e,{raw:n,contentType:r},a);if(s.ok||"missing"!==s.kind&&"denied"!==s.kind)return i(s)}let n=ed({name:t.name,mimeType:t.mimeType,parents:[t.folderId]},t.content,t.mimeType);return i(await Q("POST",`${Y}?uploadType=multipart&fields=id,size`,e,{raw:n,contentType:r},a))}async function ec(e,t,a={}){let r=await Q("PATCH",`${K}/${encodeURIComponent(t)}?fields=id,trashed`,e,{json:{trashed:!0}},a);return r.ok||"missing"===r.kind?{ok:!0,data:void 0}:r}var ef=e.i(992664);class ep extends Error{kind;constructor(e,t){super(t),this.kind=e}}async function eh(e){let{month:t,partial:a,now:r}=e,i=(0,ef.p)();if(!i)return{ok:!1,month:t,kind:"env",error:ef.S};let n=await O.N();if(!n)return{ok:!1,month:t,kind:"not-connected",error:"Google Drive isn't connected."};if(!n.refreshToken){let e="The stored Google Drive token can't be read (the encryption key changed). Reconnect Google Drive.";return await O.r(n.id,{status:"error",lastError:e}),{ok:!1,month:t,kind:"failed",error:e}}let s=await O.z(t),o={sheetFileId:s?.sheetFileId??null,csvFileId:s?.csvFileId??null,driveFolderId:s?.driveFolderId??null},l=s?.status??"error";await O.W(t,{status:l,attempts:(s?.attempts??0)+1,startedAt:r});let d=e=>(o={...o,...e},O.W(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.")},f=e=>{if(!e.ok)throw new ep("failed",e.error);return e.data};try{let s=await (0,ef.B)(i,n.refreshToken,u);if(!s.ok){if("revoked"===s.kind)throw await O.r(n.id,{status:"error",lastError:ef.L}),new ep("revoked",ef.L);throw new ep("failed",s.error)}"error"===n.status&&await O.r(n.id,{status:"ok",lastError:null});let l=s.accessToken;c();let p=await O.M(),h=p?.id??null;if(p){let e=f(await ea(l,p.id,u));e.usable?e.name&&e.name!==p.name&&await O.s(p.id,e.name):h=null}if(!h){c();let e=f(await et(l,P.R,u)),t=e?null:f(await et(l,P.C,u));h=e??t??f(await er(l,P.R,u)),await O.s(h,t?P.C:P.R)}let m=await O.f(t,a,r);c(),o.sheetFileId||await d({sheetFileId:f(await ei(l,(0,P.F)(t),h,u)),driveFolderId:h}),c();let w=await es(l,o.sheetFileId,P.O,u);w.ok||"missing"!==w.kind&&"denied"!==w.kind||(await d({sheetFileId:f(await ei(l,(0,P.F)(t),h,u)),driveFolderId:h}),c(),w=await es(l,o.sheetFileId,P.O,u)),f(w),c(),f(await eo(l,o.sheetFileId,(0,P.m)(m),u)),c();let g=(0,P.b)((0,P.E)(m)),y=f(await eu(l,{name:(0,P.V)(t),mimeType:"application/gzip",folderId:h,content:g,fileId:o.csvFileId},u));await d({csvFileId:y.id}),await O.W(t,{status:a?"partial":"ok",sizeBytes:y.size,error:null,finishedAt:new Date});let k=a?null:await em(l,r,e.deadline,u);return{ok:!0,month:t,retention:k,message:`${(0,P.n)(t)}${a?" so far":""} saved to Google Drive.`}}catch(i){let e=i instanceof ep?i:new ep("failed","The backup failed. The next daily run tries again.");i instanceof ep||console.error("backup failed:",i instanceof Error?i.name:"unknown");let r=a&&"partial"===l?"partial":"error";return await O.W(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 em(e,t,a,r){let i=(0,P.c)(await O.e(),t),n=[];for(let s of i){if(Date.now()>a)break;let i=!0;for(let t of[s.sheetFileId,s.csvFileId])t&&((await ec(e,t,r)).ok||(i=!1));i&&(await O.W(s.month,{status:s.status,trashedAt:t}),n.push((0,P.n)(s.month)))}return n.length?`Moved to Drive trash: ${n.join(", ")}.`:null}async function ew(e,t,a={}){let r=await O.N();if(!r||"error"===r.status&&r.lastError?.startsWith("invalid_grant"))return null;let i=(0,P.p)(await O.e(),e);if(!i)return null;let n=await eh({month:i,partial:!1,now:e,deadline:t,...a});return n.ok?null:`${(0,P.n)(i)}: ${n.error}`}var eg=e.i(426099),ey=e.i(433609),ek=e.i(13733),eb=e.i(656083),e$=e.i(988294),ev=e.i(629955),eT=e.i(125160),eD=e.i(800523),eI=e.i(970465),eS=e.i(607910),ez=e.i(880420),ej=e.i(140318),eA=e.i(734533),eE=e.i(273083),ex=e.i(960049),eR=e.i(154491),e_=e.i(938739),eF=e.i(751762);let eC={github:"devops",deps:"devops",databases:"database",security:"hosting",os:"devops"};async function eN(e){let[t]=await (0,r.f)().select({hour:(0,_.y)(N.rollupsHourly.hour)}).from(N.rollupsHourly),a=(0,e_.r)(t?.hour??null,e),i=await (0,r.f)().select().from(N.checks).where((0,f.b)((0,f.B)(N.checks.at,a),(0,f.S)(N.checks.at,(0,e_.b)(e)))).orderBy(N.checks.at),n=new Map;for(let e of i){let t=`${e.monitorId}|${(0,e_.b)(e.at).toISOString()}`,a=n.get(t);a?a.push(e):n.set(t,[e])}for(let[e,t]of n){let[a,i]=e.split("|"),n=(0,e_.z)(t);await (0,r.f)().insert(N.rollupsHourly).values({monitorId:a,hour:new Date(i),...n}).onConflictDoUpdate({target:[N.rollupsHourly.monitorId,N.rollupsHourly.hour],set:n})}}async function eO(e){let t=await (0,ex.J)().catch(()=>eE.f);await (0,r.f)().delete(N.checks).where((0,f.S)(N.checks.at,new Date(e.getTime()-864e5*t.checks))),await (0,r.f)().delete(N.rollupsHourly).where((0,f.S)(N.rollupsHourly.hour,new Date(e.getTime()-864e5*t.rollupsHourly))),await (0,r.f)().delete(p.p).where((0,f.S)(p.p.day,(0,T.C)(new Date(e.getTime()-864e5*t.rollupsHourly),(0,v.C)()))),await (0,r.f)().delete(N.deployments).where((0,f.b)((0,f.S)(N.deployments.createdAtProvider,new Date(e.getTime()-864e5*t.deployments)),(0,f.u)(N.deployments.isCurrent,!1),(0,f.u)(N.deployments.isPreviousProduction,!1))),await (0,r.f)().delete(N.events).where((0,f.S)(N.events.at,new Date(e.getTime()-864e5*t.events))),await (0,r.f)().delete(N.alerts).where((0,f.b)((0,f.E)(N.alerts.resolvedAt),(0,f.S)(N.alerts.resolvedAt,new Date(e.getTime()-864e5*t.alerts)))),await (0,r.f)().delete(N.collectorRuns).where((0,f.S)(N.collectorRuns.startedAt,new Date(e.getTime()-864e5*t.collectorRuns))),await (0,r.f)().delete(N.storedLogs).where((0,f.S)(N.storedLogs.at,new Date(e.getTime()-864e5*t.storedLogs))),await (0,r.f)().delete(N.recommendationDismissals).where((0,f.S)(N.recommendationDismissals.dismissedAt,new Date(e.getTime()-864e5*t.recommendationDismissals)))}async function eP(){let e=new Date,[t]=await (0,r.f)().insert(N.collectorRuns).values({startedAt:e,trigger:"vercel_cron"}).returning({id:N.collectorRuns.id}),a=[],i=await (0,d.I)(),n=[["rollups",()=>eN(e)],["deploy-days",()=>(0,eA.W)(e)],["backup",async()=>{let t=await ew(e,e.getTime()+2e4);t&&a.push(`backup: ${t}`)}],["retention",()=>eO(e)],["reports",async()=>{let t=await x(e,void 0,e.getTime()+4e4);t.failed&&a.push(`reports: ${t.failed} monthly report${t.failed>1?"s":""} not sent yet (retried on the next run, up to the 3rd)`),t.left&&a.push(`reports: ${t.left} left for the next run, time budget used`)}],["sync",async()=>{let t=(await (0,r.f)().select({id:N.accounts.id,label:N.accounts.label,provider:N.accounts.provider}).from(N.accounts).where((0,f.y)(N.accounts.provider,eS.I))).filter(e=>!i.has(eR.D[e.provider]??"manage"));for(let[r,i]of t.entries()){if(Date.now()>e.getTime()+25e3){a.push(`sync: ${t.length-r} account${t.length-r>1?"s":""} left for the next run, time budget used`);break}let n=await (0,ez.k)(i.id);n.ok?(n.skippedTeams.length&&a.push(`sync ${i.provider}/${i.label}: skipped teams ${n.skippedTeams.join(", ")} (no access)`),n.overLimit&&a.push(`sync ${i.provider}/${i.label}: ${n.overLimit}`)):a.push(`sync ${i.provider}/${i.label}: ${n.error}`)}}],["github",async()=>{let t=await (0,ek.D)(Math.min(Date.now()+6e3,e.getTime()+35e3));t&&a.push(`github: ${t}`)}],["deps",async()=>{let t=await (0,ey.e)(Math.min(Date.now()+ey.o,e.getTime()+ey.R));t&&a.push(`deps: ${t}`)}],["databases",()=>(0,ej.f)({now:e,deadline:Math.min(Date.now()+15e3,e.getTime()+5e4),errors:a})],["keep-active",()=>(0,ev.V)(e,Math.min(Date.now()+5e3,e.getTime()+5e4),a)],["security",async()=>{for(let t of(await (0,eD.h)((0,eI.F)(e.getTime(),Date.now()))).failed)a.push(`security ${t}`)}],..."on"===(0,R.C)()?[["os",async()=>{let e=await (0,R.W)();if(e.ok){if("unsupported"!==e.data.status){e.data.error&&a.push(`os: ${e.data.error}`);let t=e.data.updates.filter(e=>e.error).length;t&&a.push(`os: Ubuntu's data couldn't be read for ${t} update${1===t?"":"s"}`),e.data.backlog.error&&a.push(`os: ${e.data.backlog.error}`)}}else a.push(`os: ${e.error}`)}]]:[],["advisor",async()=>{await (0,eg.O)(e)}]],s=[];try{for(let[e,t]of n)if(!i.has(eC[e]))try{await t(),s.push(e)}catch(t){a.push(`${e}: ${(0,eF.f)(t)}`)}await (0,eb.f)([{type:"system",kind:a.length?"warn":"info",message:a.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){a.push(`events: ${(0,eF.f)(e)}`)}finally{(0,F.f)(C.t),await (0,r.f)().update(N.collectorRuns).set({finishedAt:new Date,ok:0===a.length,errorSummary:a.join("\n").slice(0,2e3)||null,durationMs:Date.now()-e.getTime(),tasks:s}).where((0,f.u)(N.collectorRuns.id,t.id)).catch(()=>void 0)}await eq(a.length>0);let o=Date.now()-e.getTime();return{skipped:!1,ok:0===a.length,tasks:s,checks:0,durationMs:o,errors:a}}async function eq(e){let t=process.env.DAILY_HEARTBEAT_TOKEN;if(!t)return;let a=(0,eT.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,e$._)(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 eB(e,t,a=new Date){if(e.skipped||0===t.length)return e;let r=[...e.tasks],i=[...e.errors];for(let e of t)try{await e.run(a),r.push(e.name)}catch(t){i.push(`${e.name}: ${(0,eF.f)(t)}`)}return{...e,tasks:r,errors:i,ok:0===i.length}}e.i(956846);var eG=e.i(310603);async function eU(e){let t=[...c,...eG.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 eH(){return eB(await eP(),eG.extensions.dailySteps??[])}e.s(["W",0,eH,"m",0,eU],819645)}];
13
16
 
14
17
  //# sourceMappingURL=src_lib_collector_auth_ts_0lqx92__e4zij._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[734533,938739,e=>{"use strict";var t=e.i(875225),a=e.i(260338),r=e.i(518899),n=e.i(924924),l=e.i(221994),s=e.i(618916),o=e.i(218331),i=e.i(196514);function d(e,t){let a=new Map;for(let r of e){let e=r.state.toUpperCase();if("READY"!==e&&"ERROR"!==e)continue;let n=(0,i.C)(r.createdAtProvider,t),l=`${r.resourceId}|${n}`,s=a.get(l)??{resourceId:r.resourceId,day:n,ok:0,failed:0};"READY"===e?s.ok++:s.failed++,a.set(l,s)}return[...a.values()].sort((e,t)=>e.resourceId.localeCompare(t.resourceId)||e.day.localeCompare(t.day))}async function u(e,c=(0,o.C)()){let f,[p]=await (0,n.f)().select({day:(0,a.y)(l.p.day)}).from(l.p),m=p?.day?(f=p.day,new Date(Date.parse(`${f}T00:00:00Z`)+-1728e5).toISOString().slice(0,10)):null,h=(0,n.f)().select({resourceId:s.deployments.resourceId,state:s.deployments.state,createdAtProvider:s.deployments.createdAtProvider}).from(s.deployments),y=m?await h.where((0,t.B)(s.deployments.createdAtProvider,new Date(Date.parse(`${m}T00:00:00Z`)-864e5))):await h,g=(0,i.C)(e,c),M=d(y,c).filter(e=>(!m||e.day>=m)&&e.day<=g);M.length&&await (0,n.f)().insert(l.p).values(M).onConflictDoUpdate({target:[l.p.resourceId,l.p.day],set:{ok:r.B`excluded.ok`,failed:r.B`excluded.failed`}})}function c(e,t){return e.length?e[Math.min(e.length-1,Math.max(0,Math.ceil(t*e.length)-1))]:null}function f(e){let t=new Date(e);return t.setUTCMinutes(0,0,0),t}e.s(["W",0,u,"L",0,d],734533);e.s(["b",0,f,"z",0,function(e){let t=e.filter(e=>!e.inMaintenance),a=t.map(e=>e.latencyMs).filter(e=>null!==e).sort((e,t)=>e-t);return{checks:t.length,failures:t.filter(e=>!e.ok).length,p50Ms:c(a,.5),p95Ms:c(a,.95),maxMs:a.length?a[a.length-1]:null,status5xx:t.filter(e=>null!==e.statusCode&&e.statusCode>=500).length,maintenance:e.length-t.length}},"r",0,function(e,t){let a=f(t).getTime()-6048e5;return new Date(Math.max(a,e?e.getTime()-36e5:a))}],938739)}];
2
+
3
+ //# sourceMappingURL=src_lib_collector_deploy-days_ts_087kwe68m4i93._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[490675,154491,960049,e=>{"use strict";var t=e.i(875225),r=e.i(349129),o=e.i(260338),n=e.i(924924),s=e.i(221994),a=e.i(618916),i=e.i(890948),l=e.i(518899);let d=["home","hosting","database","devops","manage"],u=["hosting","database","devops"],m={vercel:"hosting",cloudflare:"hosting",supabase:"database",neon:"database",firebase:"database",turso:"database",upstash:"database",github:"devops",github_write:"devops"};function p(e){return Array.isArray(e)?d.filter(t=>"string"==typeof t&&d.includes(t)&&u.includes(t)&&e.includes(t)):[]}let c={MonitorDown:"hosting",HighLatency:"hosting",DeploymentFailed:"hosting",CertExpiringSoon:"hosting",DomainExpiringSoon:"hosting",DnsProxiedToVercel:"hosting",DatabasePaused:"database",StorageAlmostFull:"database",NeonComputeHigh:"database",FirestoreQuotaHigh:"database",AutoPauseRisk:"database",ComputeHigh:"database",DbQuotaHigh:"database",VulnerableDependency:"devops",FrameworkVulnerable:"hosting",CiFailing:"devops",OsSecurityUpdate:"devops",ReportSendFailed:null,MonitorDomainMoved:"hosting",CredentialExpiring:"account",CollectorStale:null},f=/^Log/;e.s(["D",0,m,"O",0,(e,t,r)=>{let o;if(!e.size)return!1;let n="account"===(o=c[t])?r?m[r]??null:null:void 0!==o?o:f.test(t)?"hosting":null;return null!==n&&e.has(n)},"N",0,p,"s",0,function(e){return{ruleKeys:Object.entries(c).filter(([,t])=>null!==t&&"account"!==t&&e.has(t)).map(([e])=>e),providers:Object.entries(m).filter(([,t])=>e.has(t)).map(([e])=>e)}},"I",0,e=>new Set(p(e))],154491);var h=e.i(273083);let y={checks:[3,7,14],rollupsHourly:[60,90,180],storedLogs:[3,7,14],deployments:[30,45,60,90],events:[60,90,180],alerts:[60,90,180],collectorRuns:[7,14,30],recommendationDismissals:[30,90,180]},g=Object.keys(y),I=(e,t)=>"number"==typeof t&&y[e].includes(t);async function w(e){let[r]=await (0,n.f)().select({value:a.settings.value}).from(a.settings).where((0,t.u)(a.settings.key,e)).limit(1);return r?.value??null}let b=async()=>(function(e){let t={...h.f};if(!e||"object"!=typeof e)return t;for(let r of g){let o=e[r];I(r,o)&&(t[r]=o)}return t})(await w("retention.days"));e.s(["l",0,()=>w("notify.language"),"J",0,b,"W",0,()=>l.B`(select ${a.settings.value} from ${a.settings} where ${a.settings.key} = ${"sections.off"})`],960049);var v=e.i(46574),A=e.i(196514);let S=e=>{let[t,r]=e.split("-").map(Number);return 1===r?`${t-1}-12`:`${t}-${String(r-1).padStart(2,"0")}`};async function M(e,t){let r;return function(e,t,r){let o=(0,A.C)(new Date(e.getTime()-864e5*r),t),n=[];for(let r=S((0,A.C)(e,t).slice(0,7));n.length<3&&`${r}-01`>=o;r=S(r))n.push(r);return n}(e,t,Math.min((r=await b()).rollupsHourly,r.alerts,v.F))}async function D(e){let o=e?await (0,n.f)().select().from(s.I).where(e):await (0,n.f)().select().from(s.I).orderBy((0,r.M)(s.I.clientName));if(!o.length)return[];let a=o.map(e=>e.id),[i,l]=await Promise.all([(0,n.f)().select({reportId:s.Z.reportId,monitorId:s.Z.monitorId,displayName:s.Z.displayName,position:s.Z.position}).from(s.Z).where((0,t.y)(s.Z.reportId,a)).orderBy((0,r.M)(s.Z.position)),(0,n.f)().select().from(s.q).where((0,t.y)(s.q.reportId,a)).orderBy((0,r.A)(s.q.month))]);return o.map(e=>{let t=l.find(t=>t.reportId===e.id);return{id:e.id,clientName:e.clientName,title:e.title,lang:e.lang,note:e.note,emailOpening:e.emailOpening,recipients:e.recipients,autoSend:e.autoSend,sender:e.sender,sites:i.filter(t=>t.reportId===e.id).map(({monitorId:e,displayName:t,position:r})=>({monitorId:e,displayName:t,position:r})),lastSend:t?{month:t.month,status:t.status,sentAt:t.sentAt,lastError:t.lastError}:null}})}async function H(e){return/^[0-9a-f-]{36}$/i.test(e)?(await D((0,t.u)(s.I.id,e)))[0]??null:null}async function $(e,r,l,d){let u=await H(e);if(!u)return{error:"not-found"};if(!u.sites.length)return{error:"no-sites"};if(r!==(0,A.C)(l,d).slice(0,7)&&!(await M(l,d)).includes(r))return{error:"month-too-old"};let m=(0,A.e)(r),p=(0,A.K)(m[0],d),c=(0,A.K)(`${(e=>{let[t,r]=e.split("-").map(Number);return 12===r?`${t+1}-01`:`${t}-${String(r+1).padStart(2,"0")}`})(r)}-01`,d),f=u.sites.map(e=>e.monitorId),[h,y,g,I,w,[b]]=await Promise.all([(0,n.f)().select({id:a.monitors.id,resourceId:a.monitors.resourceId,intervalS:a.monitors.intervalS}).from(a.monitors).where((0,t.y)(a.monitors.id,f)),(0,i._)(f,l,d),(0,n.f)().select({monitorId:a.rollupsHourly.monitorId,hour:a.rollupsHourly.hour,p50:a.rollupsHourly.p50Ms}).from(a.rollupsHourly).where((0,t.b)((0,t.y)(a.rollupsHourly.monitorId,f),(0,t.B)(a.rollupsHourly.hour,p),(0,t.S)(a.rollupsHourly.hour,c))),(0,n.f)().select({ruleKey:a.alerts.ruleKey,subject:a.alerts.subject,startedAt:a.alerts.startedAt,resolvedAt:a.alerts.resolvedAt}).from(a.alerts).where((0,t.b)((0,t.y)(a.alerts.ruleKey,["MonitorDown","HighLatency"]),(0,t.y)(a.alerts.subject,f),(0,t.S)(a.alerts.startedAt,c),(0,t.F)((0,t.M)(a.alerts.resolvedAt),(0,t.B)(a.alerts.resolvedAt,p)))),(0,n.f)().select().from(s.p).where((0,t.b)((0,t.B)(s.p.day,m[0]),(0,t.n)(s.p.day,m[m.length-1]))),(0,n.f)().select({day:(0,o.t)(s.p.day)}).from(s.p)]),v=new Map;for(let e of g){if(null===e.p50)continue;let t=v.get(e.monitorId)??new Map,r=(0,A.C)(e.hour,d);t.set(r,[...t.get(r)??[],e.p50]),v.set(e.monitorId,t)}let S=new Map;for(let e of u.sites){let t=h.find(t=>t.id===e.monitorId)?.resourceId;t&&!S.has(t)&&S.set(t,e.monitorId)}let D=u.sites.flatMap(e=>{let t=h.find(t=>t.id===e.monitorId);if(!t)return[];let r=y.get(e.monitorId)??new Map,o=new Map(m.filter(e=>r.has(e)).map(e=>[e,r.get(e)])),n=m.find(e=>(o.get(e)?.checks??0)>0)??null,s=v.get(e.monitorId),a=new Map(m.map(e=>{let t=s?.get(e);return[e,t?.length?Math.round(t.reduce((e,t)=>e+t,0)/t.length):null]}));return[{monitorId:e.monitorId,name:e.displayName,intervalS:t.intervalS,firstDay:n,days:o,p50ByDay:a}]}),$=u.sites.map(e=>{let t=h.find(t=>t.id===e.monitorId)?.resourceId,r=t&&S.get(t)===e.monitorId?w.filter(e=>e.resourceId===t):[];return{monitorId:e.monitorId,ok:r.reduce((e,t)=>e+t.ok,0),failed:r.reduce((e,t)=>e+t.failed,0),firstDay:r[0]?.day??null}});return{month:r,zone:d,generatedAt:l,sites:D,incidents:I.map(e=>({monitorId:e.subject,kind:"MonitorDown"===e.ruleKey?"down":"slow",startedAt:e.startedAt<p?p:e.startedAt,resolvedAt:e.resolvedAt,endedBy:e.resolvedAt?"resolved":"open"})),deploys:$,dataFrom:{uptime:null,updates:b?.day&&b.day>m[0]?b.day:null}}}async function N(){let e=await (0,n.f)().select({reportId:s.q.reportId,month:s.q.month,status:s.q.status,lastError:s.q.lastError,clientName:s.I.clientName}).from(s.q).innerJoin(s.I,(0,t.u)(s.I.id,s.q.reportId)).where((0,t.u)(s.I.autoSend,!0)).orderBy((0,r.A)(s.q.month)),o=new Set;return e.filter(e=>!o.has(e.reportId)&&o.add(e.reportId))}e.s(["K",0,H,"q",0,()=>D(),"D",0,$,"l",0,N],490675)}];
2
+
3
+ //# sourceMappingURL=src_lib_data_report-db_ts_0b5f4dpxn08gk._.js.map