watchbell 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (921) hide show
  1. package/bin/watchbell.mjs +5 -2
  2. package/package.json +1 -1
  3. package/server/.next/BUILD_ID +1 -1
  4. package/server/.next/build-manifest.json +105 -105
  5. package/server/.next/prerender-manifest.json +4 -4
  6. package/server/.next/server/app/(console)/(private)/ai/agents/page/build-manifest.json +3 -3
  7. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +32 -22
  8. package/server/.next/server/app/(console)/(private)/ai/agents/page.js +73 -72
  9. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  10. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  11. package/server/.next/server/app/(console)/(private)/ai/ask/page/build-manifest.json +3 -3
  12. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +30 -20
  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/build-manifest.json +3 -3
  17. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +28 -18
  18. package/server/.next/server/app/(console)/(private)/ai/connect/page.js +72 -71
  19. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  21. package/server/.next/server/app/(console)/(private)/ai/keys/page/build-manifest.json +3 -3
  22. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +34 -24
  23. package/server/.next/server/app/(console)/(private)/ai/keys/page.js +72 -71
  24. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  25. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  26. package/server/.next/server/app/(console)/(private)/ai/logs/page/build-manifest.json +3 -3
  27. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +30 -20
  28. package/server/.next/server/app/(console)/(private)/ai/logs/page.js +72 -71
  29. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  30. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  31. package/server/.next/server/app/(console)/(private)/ai/models/page/build-manifest.json +3 -3
  32. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +48 -38
  33. package/server/.next/server/app/(console)/(private)/ai/models/page.js +72 -71
  34. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  36. package/server/.next/server/app/(console)/(private)/ai/page/build-manifest.json +3 -3
  37. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +28 -18
  38. package/server/.next/server/app/(console)/(private)/ai/page.js +72 -71
  39. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  40. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  41. package/server/.next/server/app/(console)/(private)/ai/playground/page/build-manifest.json +3 -3
  42. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +34 -24
  43. package/server/.next/server/app/(console)/(private)/ai/playground/page.js +72 -71
  44. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  45. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  46. package/server/.next/server/app/(console)/(private)/ai/providers/page/build-manifest.json +3 -3
  47. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +40 -30
  48. package/server/.next/server/app/(console)/(private)/ai/providers/page.js +73 -72
  49. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  50. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  51. package/server/.next/server/app/(console)/(private)/ai/quota/page/build-manifest.json +3 -3
  52. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +30 -20
  53. package/server/.next/server/app/(console)/(private)/ai/quota/page.js +74 -73
  54. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  55. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  56. package/server/.next/server/app/(console)/(private)/ai/usage/page/build-manifest.json +3 -3
  57. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +30 -20
  58. package/server/.next/server/app/(console)/(private)/ai/usage/page.js +76 -74
  59. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  60. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  61. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/build-manifest.json +3 -3
  62. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +28 -18
  63. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +72 -71
  64. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  65. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  66. package/server/.next/server/app/(console)/(private)/auto-actions/page/build-manifest.json +3 -3
  67. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +30 -20
  68. package/server/.next/server/app/(console)/(private)/auto-actions/page.js +72 -71
  69. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  70. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  71. package/server/.next/server/app/(console)/alerts/page/build-manifest.json +3 -3
  72. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +74 -44
  73. package/server/.next/server/app/(console)/alerts/page.js +75 -73
  74. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  75. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  76. package/server/.next/server/app/(console)/apps/[id]/page/build-manifest.json +3 -3
  77. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +62 -52
  78. package/server/.next/server/app/(console)/apps/[id]/page.js +78 -77
  79. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  80. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  81. package/server/.next/server/app/(console)/apps/page/build-manifest.json +3 -3
  82. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +34 -24
  83. package/server/.next/server/app/(console)/apps/page.js +74 -73
  84. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  85. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  86. package/server/.next/server/app/(console)/backups/page/build-manifest.json +3 -3
  87. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +34 -24
  88. package/server/.next/server/app/(console)/backups/page.js +75 -74
  89. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  90. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  91. package/server/.next/server/app/(console)/catalog/page/build-manifest.json +3 -3
  92. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +28 -18
  93. package/server/.next/server/app/(console)/catalog/page.js +73 -72
  94. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  95. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  96. package/server/.next/server/app/(console)/connections/page/build-manifest.json +3 -3
  97. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +50 -40
  98. package/server/.next/server/app/(console)/connections/page.js +76 -75
  99. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  100. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  101. package/server/.next/server/app/(console)/d1/page/build-manifest.json +3 -3
  102. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +28 -18
  103. package/server/.next/server/app/(console)/d1/page.js +74 -73
  104. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  105. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  106. package/server/.next/server/app/(console)/deployments/page/build-manifest.json +3 -3
  107. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +40 -30
  108. package/server/.next/server/app/(console)/deployments/page.js +74 -73
  109. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  110. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  111. package/server/.next/server/app/(console)/dns/page/build-manifest.json +3 -3
  112. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +42 -32
  113. package/server/.next/server/app/(console)/dns/page.js +77 -76
  114. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  115. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  116. package/server/.next/server/app/(console)/domains/page/build-manifest.json +3 -3
  117. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +32 -22
  118. package/server/.next/server/app/(console)/domains/page.js +76 -75
  119. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  120. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  121. package/server/.next/server/app/(console)/events/page/build-manifest.json +3 -3
  122. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +28 -18
  123. package/server/.next/server/app/(console)/events/page.js +73 -72
  124. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  125. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  126. package/server/.next/server/app/(console)/firebase/page/build-manifest.json +3 -3
  127. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +42 -32
  128. package/server/.next/server/app/(console)/firebase/page.js +75 -74
  129. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  130. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  131. package/server/.next/server/app/(console)/logs/page/build-manifest.json +3 -3
  132. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +30 -20
  133. package/server/.next/server/app/(console)/logs/page.js +72 -71
  134. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  135. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  136. package/server/.next/server/app/(console)/manage/sections/page/build-manifest.json +3 -3
  137. package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +30 -20
  138. package/server/.next/server/app/(console)/manage/sections/page.js +72 -71
  139. package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -1
  140. package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +1 -1
  141. package/server/.next/server/app/(console)/neon/page/build-manifest.json +3 -3
  142. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +50 -40
  143. package/server/.next/server/app/(console)/neon/page.js +77 -76
  144. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  145. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  146. package/server/.next/server/app/(console)/overview/page/build-manifest.json +3 -3
  147. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +44 -34
  148. package/server/.next/server/app/(console)/overview/page.js +81 -80
  149. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  150. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  151. package/server/.next/server/app/(console)/repos/[id]/page/build-manifest.json +3 -3
  152. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +30 -20
  153. package/server/.next/server/app/(console)/repos/[id]/page.js +75 -74
  154. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  155. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  156. package/server/.next/server/app/(console)/repos/page/build-manifest.json +3 -3
  157. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +28 -18
  158. package/server/.next/server/app/(console)/repos/page.js +72 -71
  159. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  160. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  161. package/server/.next/server/app/(console)/settings/page/build-manifest.json +3 -3
  162. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +48 -38
  163. package/server/.next/server/app/(console)/settings/page.js +73 -72
  164. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  165. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  166. package/server/.next/server/app/(console)/sql/page/build-manifest.json +3 -3
  167. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +42 -32
  168. package/server/.next/server/app/(console)/sql/page.js +72 -71
  169. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  170. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  171. package/server/.next/server/app/(console)/status/page/build-manifest.json +3 -3
  172. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +28 -18
  173. package/server/.next/server/app/(console)/status/page.js +75 -73
  174. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  175. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  176. package/server/.next/server/app/(console)/supabase/page/build-manifest.json +3 -3
  177. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +66 -56
  178. package/server/.next/server/app/(console)/supabase/page.js +82 -82
  179. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  180. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  181. package/server/.next/server/app/(console)/topology/page/build-manifest.json +3 -3
  182. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +28 -18
  183. package/server/.next/server/app/(console)/topology/page.js +74 -73
  184. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  185. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  186. package/server/.next/server/app/(console)/turso/page/build-manifest.json +3 -3
  187. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +28 -18
  188. package/server/.next/server/app/(console)/turso/page.js +73 -72
  189. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  190. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  191. package/server/.next/server/app/(console)/upstash/page/build-manifest.json +3 -3
  192. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +28 -18
  193. package/server/.next/server/app/(console)/upstash/page.js +73 -72
  194. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  195. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  196. package/server/.next/server/app/(console)/uptime/page/build-manifest.json +3 -3
  197. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +56 -46
  198. package/server/.next/server/app/(console)/uptime/page.js +75 -74
  199. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  200. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  201. package/server/.next/server/app/(console)/welcome/page/build-manifest.json +3 -3
  202. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +38 -28
  203. package/server/.next/server/app/(console)/welcome/page.js +72 -71
  204. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  205. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  206. package/server/.next/server/app/_global-error/page/build-manifest.json +3 -3
  207. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  208. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  209. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  210. package/server/.next/server/app/_global-error.html +1 -1
  211. package/server/.next/server/app/_global-error.rsc +3 -3
  212. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  213. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  214. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
  215. package/server/.next/server/app/_not-found/page/build-manifest.json +3 -3
  216. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  217. package/server/.next/server/app/_not-found/page.js +14 -11
  218. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  219. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  220. package/server/.next/server/app/_not-found.html +1 -1
  221. package/server/.next/server/app/_not-found.rsc +28 -23
  222. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +28 -23
  223. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +26 -23
  224. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  225. package/server/.next/server/app/account/password/page/build-manifest.json +3 -3
  226. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  227. package/server/.next/server/app/account/password/page.js +17 -18
  228. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  229. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  230. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
  231. package/server/.next/server/app/api/collect/route.js +1 -1
  232. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  233. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
  234. package/server/.next/server/app/api/daily/route.js +1 -1
  235. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  236. package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
  237. package/server/.next/server/app/api/status/route.js.nft.json +1 -1
  238. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
  239. package/server/.next/server/app/api/telegram/webhook/route.js +1 -1
  240. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  241. package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
  242. package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
  243. package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
  244. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
  245. package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
  246. package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
  247. package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
  248. package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
  249. package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
  250. package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
  251. package/server/.next/server/app/api/watchdog/route.js +13 -13
  252. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  253. package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
  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.nft.json +1 -1
  256. package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
  257. package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
  258. package/server/.next/server/app/invite/page/build-manifest.json +3 -3
  259. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  260. package/server/.next/server/app/invite/page.js +22 -22
  261. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  262. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  263. package/server/.next/server/app/mfa/page/build-manifest.json +3 -3
  264. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  265. package/server/.next/server/app/mfa/page.js +31 -32
  266. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  267. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  268. package/server/.next/server/app/mfa/setup/page/build-manifest.json +3 -3
  269. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  270. package/server/.next/server/app/mfa/setup/page.js +31 -32
  271. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  272. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  273. package/server/.next/server/app/page/build-manifest.json +3 -3
  274. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  275. package/server/.next/server/app/page.js +14 -11
  276. package/server/.next/server/app/page.js.nft.json +1 -1
  277. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  278. package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
  279. package/server/.next/server/app/s/[slug]/page/build-manifest.json +3 -3
  280. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  281. package/server/.next/server/app/s/[slug]/page.js +21 -20
  282. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  283. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  284. package/server/.next/server/app/setup/page/build-manifest.json +3 -3
  285. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  286. package/server/.next/server/app/setup/page.js +20 -18
  287. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  288. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  289. package/server/.next/server/app/signin/page/build-manifest.json +3 -3
  290. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  291. package/server/.next/server/app/signin/page.js +28 -28
  292. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  293. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  294. package/server/.next/server/chunks/{[root-of-the-server]__1xxmlb3soqzom._.js → [root-of-the-server]__02n6y6aa6qp1b._.js} +2 -2
  295. package/server/.next/server/chunks/{[root-of-the-server]__1w7dv8zm-k_oa._.js → [root-of-the-server]__09odxyho_9vk_._.js} +2 -2
  296. package/server/.next/server/chunks/{[root-of-the-server]__0_nljmqhjcept._.js → [root-of-the-server]__0bmyll20mg_gf._.js} +1 -1
  297. package/server/.next/server/chunks/{[root-of-the-server]__14ou3bydfm0ms._.js → [root-of-the-server]__0btybbrsr4abf._.js} +1 -1
  298. package/server/.next/server/chunks/{[root-of-the-server]__0awtaloe4_8am._.js → [root-of-the-server]__0c-33noc8yn1-._.js} +1 -1
  299. package/server/.next/server/chunks/{[root-of-the-server]__15dhjj384tuw_._.js → [root-of-the-server]__0d99wclm2suox._.js} +2 -2
  300. package/server/.next/server/chunks/{[root-of-the-server]__10wbld2tja51-._.js → [root-of-the-server]__0gox66sv0bx47._.js} +2 -2
  301. package/server/.next/server/chunks/{[root-of-the-server]__0u3un538__ca5._.js → [root-of-the-server]__0ku7nva3gxa9p._.js} +2 -2
  302. package/server/.next/server/chunks/{[root-of-the-server]__1mim39ea6-dm1._.js → [root-of-the-server]__0nqbue6i0l3qs._.js} +2 -2
  303. package/server/.next/server/chunks/[root-of-the-server]__0s5b-tdq7rndj._.js +3 -0
  304. package/server/.next/server/chunks/{[root-of-the-server]__0zmvf4j8e2gno._.js → [root-of-the-server]__0wp6j3irilu76._.js} +1 -1
  305. package/server/.next/server/chunks/{[root-of-the-server]__1dh4di29mjq9y._.js → [root-of-the-server]__16lfk1wg0ejaa._.js} +2 -2
  306. package/server/.next/server/chunks/{[root-of-the-server]__0q-x05ekhpohj._.js → [root-of-the-server]__1c653f_8qzrpd._.js} +1 -1
  307. package/server/.next/server/chunks/{[root-of-the-server]__1v4i7ytwadml8._.js → [root-of-the-server]__1hv3hk5182t-o._.js} +1 -1
  308. package/server/.next/server/chunks/{[root-of-the-server]__1p0zd1rtbkj9r._.js → [root-of-the-server]__1j6xniw630fg0._.js} +1 -1
  309. package/server/.next/server/chunks/{[root-of-the-server]__1zg653esm3__p._.js → [root-of-the-server]__1nu5isiy7d832._.js} +2 -2
  310. package/server/.next/server/chunks/{[root-of-the-server]__0lu91s5izfu0p._.js → [root-of-the-server]__1s4bwjevs4hd-._.js} +2 -2
  311. package/server/.next/server/chunks/{[root-of-the-server]__0s8vjz6urzn76._.js → [root-of-the-server]__1uox9a0td-o0-._.js} +1 -1
  312. package/server/.next/server/chunks/{[root-of-the-server]__1dbz126yujh44._.js → [root-of-the-server]__1wpdlr4uh1un4._.js} +2 -2
  313. package/server/.next/server/chunks/{[root-of-the-server]__1brl5otpkvgd3._.js → [root-of-the-server]__1y2qf8ltxhk0o._.js} +2 -2
  314. package/server/.next/server/chunks/{[root-of-the-server]__0ihedjvt-l2-u._.js → [root-of-the-server]__1z_0gt-w6bx9v._.js} +2 -2
  315. package/server/.next/server/chunks/_0-fp57b-utmuw._.js +1 -1
  316. package/server/.next/server/chunks/_004j-wbs3yn84._.js +1 -1
  317. package/server/.next/server/chunks/_03qlijpos6a21._.js +1 -1
  318. package/server/.next/server/chunks/_06lf75x-xhl7v._.js +1 -1
  319. package/server/.next/server/chunks/_0brb2454uen18._.js +1 -1
  320. package/server/.next/server/chunks/_0dkhprw6wsizx._.js +1 -1
  321. package/server/.next/server/chunks/_0duxuj4kmjibl._.js +13 -8
  322. package/server/.next/server/chunks/{_0if5sw58tii_3._.js → _0q9a3ettj_h2s._.js} +2 -2
  323. package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +1 -1
  324. package/server/.next/server/chunks/_0ry4553j-m5fp._.js +2 -2
  325. package/server/.next/server/chunks/_0s2odl9xacsg0._.js +1 -1
  326. package/server/.next/server/chunks/_0sy878k2ywjbq._.js +1 -1
  327. package/server/.next/server/chunks/_0xf7mtsrkgc9e._.js +2 -2
  328. package/server/.next/server/chunks/_0zj10_al6r59j._.js +1 -1
  329. package/server/.next/server/chunks/_1-pw7jw52sbti._.js +1 -1
  330. package/server/.next/server/chunks/_113ebzq_9i756._.js +13 -8
  331. package/server/.next/server/chunks/_16urxazbgm48y._.js +2 -2
  332. package/server/.next/server/chunks/_17aiz6zt-yv52._.js +2 -2
  333. package/server/.next/server/chunks/_18p-vw2zmdx9f._.js +1 -1
  334. package/server/.next/server/chunks/_1_son1yzo5xvl._.js +1 -1
  335. package/server/.next/server/chunks/_1_xsrlijknnh3._.js +1 -1
  336. package/server/.next/server/chunks/_1e_rbkrukj0x9._.js +1 -1
  337. package/server/.next/server/chunks/_1g8r-7wcf8sy3._.js +2 -2
  338. package/server/.next/server/chunks/_1g_prqb_u33e3._.js +1 -1
  339. package/server/.next/server/chunks/_1h73gul79s8pi._.js +1 -1
  340. package/server/.next/server/chunks/_1ihndlef8r00f._.js +13 -8
  341. package/server/.next/server/chunks/_1mwb214-ablfo._.js +13 -8
  342. package/server/.next/server/chunks/node_modules_drizzle-orm_entity_1-0q2stnw2ab8.js +1 -1
  343. package/server/.next/server/chunks/{src_09cgjvch02173._.js → src_00ixvrjrk_2h4._.js} +2 -2
  344. package/server/.next/server/chunks/src_088gmyaew7ds0._.js +1 -1
  345. package/server/.next/server/chunks/{src_0c7qu5adpm3gv._.js → src_0tdn7mun5rvc6._.js} +2 -2
  346. package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +1 -1
  347. package/server/.next/server/chunks/src_1-xw4hea2lvb3._.js +1 -1
  348. package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +1 -1
  349. package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +1 -1
  350. package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +1 -1
  351. package/server/.next/server/chunks/src_1wzm081p6qyre._.js +1 -1
  352. package/server/.next/server/chunks/src_lib_0ayxuk4ftzf2f._.js +1 -1
  353. package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
  354. package/server/.next/server/chunks/src_lib_0krdzz8eu9xh3._.js +1 -1
  355. package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +16 -11
  356. package/server/.next/server/chunks/src_lib_1-u7dbsavbtb0._.js +1 -1
  357. package/server/.next/server/chunks/src_lib_103kimc1xvc_0._.js +3 -3
  358. package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +16 -11
  359. package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +16 -11
  360. package/server/.next/server/chunks/src_lib_1sdusf16f07x-._.js +3 -3
  361. package/server/.next/server/chunks/src_lib_206j7lyff31-g._.js +1 -1
  362. package/server/.next/server/chunks/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
  363. package/server/.next/server/chunks/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
  364. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +4 -4
  365. package/server/.next/server/chunks/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
  366. package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +6 -6
  367. package/server/.next/server/chunks/src_lib_local-auth_setup_ts_10d8-k_e6pvft._.js +2 -2
  368. package/server/.next/server/chunks/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
  369. package/server/.next/server/chunks/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
  370. package/server/.next/server/chunks/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
  371. package/server/.next/server/chunks/src_private_assist_questions-db_ts_1pc4g504t-qmu._.js +1 -1
  372. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  373. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_21atz5tidps07.js +3 -0
  374. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0rvlzfa8rjyz_.js +3 -0
  375. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_01ejc1xilpuh4.js +4 -0
  376. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_0iki29gyi8cwa.js +3 -0
  377. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1c99h-kwdnep7.js +3 -0
  378. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_1kw4ce6-efkr1.js +3 -0
  379. package/server/.next/server/chunks/ssr/{[externals]__0et8619os7o06._.js → [externals]__00tbi838eotwu._.js} +1 -1
  380. package/server/.next/server/chunks/ssr/{[externals]__0jv_q8g96gubg._.js → [externals]__01kgu896o9-9t._.js} +1 -1
  381. package/server/.next/server/chunks/ssr/{[externals]__1neu6qld_ilyx._.js → [externals]__078uqm46tk5mo._.js} +1 -1
  382. package/server/.next/server/chunks/ssr/{[externals]__1d_fn156y1kzg._.js → [externals]__0i0hmh-a743jn._.js} +1 -1
  383. package/server/.next/server/chunks/ssr/{[externals]__0yzs5m5hot2o2._.js → [externals]__0qc7l-41h018j._.js} +1 -1
  384. package/server/.next/server/chunks/ssr/[externals]__194b54tqm6qaq._.js +3 -0
  385. package/server/.next/server/chunks/ssr/[externals]__1_ttbfsdm3x1-._.js +3 -0
  386. package/server/.next/server/chunks/ssr/{[externals]__0x50_fipcza3k._.js → [externals]__1devsqn7ez77y._.js} +1 -1
  387. package/server/.next/server/chunks/ssr/[externals]__1prfp5pzeoflz._.js +3 -0
  388. package/server/.next/server/chunks/ssr/[externals]__1zxtjc2qr2epg._.js +3 -0
  389. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0p7d9dfmuhnvv._.js → [root-of-the-server]__004q78ed0nf0_._.js} +2 -2
  390. package/server/.next/server/chunks/ssr/[root-of-the-server]__01zthkv8nrlct._.js +3 -0
  391. package/server/.next/server/chunks/ssr/{[root-of-the-server]__00wwav5k7xmy0._.js → [root-of-the-server]__04_prmhm_cts4._.js} +2 -2
  392. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-jx3t8dg8n5t._.js → [root-of-the-server]__04nc91kiy757l._.js} +2 -2
  393. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1xwqrik2sugmi._.js → [root-of-the-server]__09blzlbsxqvy9._.js} +2 -2
  394. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0-o5i-5pqjk5v._.js → [root-of-the-server]__0_6on4a5w76va._.js} +1 -1
  395. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tco2ec6ha1k6._.js → [root-of-the-server]__0a3n6wzq8xui9._.js} +2 -2
  396. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ptdec0sozaqm._.js → [root-of-the-server]__0an0wsglj2bhh._.js} +2 -2
  397. package/server/.next/server/chunks/ssr/{[root-of-the-server]__18xb7pbdmiyiz._.js → [root-of-the-server]__0ban7lwqlko9y._.js} +2 -2
  398. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khp_gsot3jh_._.js → [root-of-the-server]__0c_q6tvcmsmt9._.js} +2 -2
  399. package/server/.next/server/chunks/ssr/{[root-of-the-server]__050d99bknjdvq._.js → [root-of-the-server]__0ct4apye0sfmc._.js} +2 -2
  400. package/server/.next/server/chunks/ssr/{[root-of-the-server]__15keslh0ov5mv._.js → [root-of-the-server]__0d2ry7-u1cv8c._.js} +2 -2
  401. package/server/.next/server/chunks/ssr/[root-of-the-server]__0e8ya6wyy2plv._.js +3 -0
  402. package/server/.next/server/chunks/ssr/[root-of-the-server]__0h0txd7z3sxq7._.js +3 -0
  403. package/server/.next/server/chunks/ssr/{[root-of-the-server]__08w3ad-xux1g4._.js → [root-of-the-server]__0h1vffivfh242._.js} +1 -1
  404. package/server/.next/server/chunks/ssr/{[root-of-the-server]__05hw89gap74cw._.js → [root-of-the-server]__0i0_6dnnf0hov._.js} +2 -2
  405. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0khvq0xdah931._.js → [root-of-the-server]__0jgapr1cnvhi6._.js} +2 -2
  406. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_1130gx52k-9._.js → [root-of-the-server]__0jn0o2e32mwcp._.js} +2 -2
  407. package/server/.next/server/chunks/ssr/{[root-of-the-server]__11ham42w_feik._.js → [root-of-the-server]__0k29b_kblv6sv._.js} +1 -1
  408. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0bn_thc_vtf_i._.js → [root-of-the-server]__0keo0-hwsnkw9._.js} +2 -2
  409. package/server/.next/server/chunks/ssr/[root-of-the-server]__0klc2dyzyjeba._.js +3 -0
  410. package/server/.next/server/chunks/ssr/{[root-of-the-server]__16jkttbe1yoai._.js → [root-of-the-server]__0l50vsk8enxzj._.js} +2 -2
  411. package/server/.next/server/chunks/ssr/[root-of-the-server]__0nlfip3wc3l2z._.js +2 -2
  412. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0y84mqfn13ss4._.js → [root-of-the-server]__0o0cpvobd-u0n._.js} +1 -1
  413. package/server/.next/server/chunks/ssr/{[root-of-the-server]__10rhqv5xq9jaj._.js → [root-of-the-server]__0paolyy3xkow9._.js} +2 -2
  414. package/server/.next/server/chunks/ssr/[root-of-the-server]__0qnly-gjvfntd._.js +3 -0
  415. package/server/.next/server/chunks/ssr/[root-of-the-server]__0qqcz9ynsgmgl._.js +3 -0
  416. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1k_hi9mbd4_by._.js → [root-of-the-server]__0qwds8dkahd2_._.js} +1 -1
  417. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ejxk0jlgi4eb._.js → [root-of-the-server]__0rdf04ziqasfz._.js} +2 -2
  418. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0_677ii9bahoy._.js → [root-of-the-server]__0ronqmm1xpldk._.js} +2 -2
  419. package/server/.next/server/chunks/ssr/[root-of-the-server]__0rrdzb9wowemv._.js +3 -0
  420. package/server/.next/server/chunks/ssr/[root-of-the-server]__0uxychcp_pldy._.js +3 -0
  421. package/server/.next/server/chunks/ssr/[root-of-the-server]__0vnfx03nb5vku._.js +3 -0
  422. package/server/.next/server/chunks/ssr/[root-of-the-server]__0x7w-5h8or6qr._.js +3 -0
  423. package/server/.next/server/chunks/ssr/{[root-of-the-server]__15wwi1pda8ims._.js → [root-of-the-server]__0xpkzaqer75i-._.js} +2 -2
  424. package/server/.next/server/chunks/ssr/[root-of-the-server]__0y6psx1_d7fkt._.js +3 -0
  425. package/server/.next/server/chunks/ssr/{[root-of-the-server]__04klr3-4qi7-t._.js → [root-of-the-server]__107gjehjdhw8p._.js} +2 -2
  426. package/server/.next/server/chunks/ssr/[root-of-the-server]__10kuehp7saz8h._.js +3 -0
  427. package/server/.next/server/chunks/ssr/[root-of-the-server]__113zn8es2wp67._.js +3 -0
  428. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0p5znbfo0wgsu._.js → [root-of-the-server]__13fabu66slkfb._.js} +2 -2
  429. package/server/.next/server/chunks/ssr/[root-of-the-server]__14ept-_l8j32m._.js +1 -1
  430. package/server/.next/server/chunks/ssr/[root-of-the-server]__15s9onrf73-k8._.js +3 -0
  431. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0kr_tvfgqtb-o._.js → [root-of-the-server]__191t_hhtr-k27._.js} +2 -2
  432. package/server/.next/server/chunks/ssr/[root-of-the-server]__19l_r5vy3kxo1._.js +3 -0
  433. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1kieqcc6kdywx._.js → [root-of-the-server]__1_b_k8wgqyxy7._.js} +2 -2
  434. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  435. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0exp042uqhyqs._.js → [root-of-the-server]__1a7x--bos5pv8._.js} +2 -2
  436. package/server/.next/server/chunks/ssr/[root-of-the-server]__1adcmllk9wt5l._.js +3 -0
  437. package/server/.next/server/chunks/ssr/[root-of-the-server]__1d5tbv79yjhqm._.js +3 -0
  438. package/server/.next/server/chunks/ssr/[root-of-the-server]__1fj33_xkainxk._.js +2 -2
  439. package/server/.next/server/chunks/ssr/[root-of-the-server]__1itgt83qo1e77._.js +3 -0
  440. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ua-p_wz8epv9._.js → [root-of-the-server]__1mumjk3h0om80._.js} +2 -2
  441. package/server/.next/server/chunks/ssr/[root-of-the-server]__1nat8lbog5imr._.js +1 -1
  442. package/server/.next/server/chunks/ssr/[root-of-the-server]__1p2oghl9lfgmk._.js +3 -0
  443. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tcu4-eowz9vt._.js → [root-of-the-server]__1pwd99rch8xyl._.js} +2 -2
  444. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0llh-w4ta1qbp._.js → [root-of-the-server]__1sw2q1p1t59y8._.js} +2 -2
  445. package/server/.next/server/chunks/ssr/{[root-of-the-server]__06uaa_2zbg57p._.js → [root-of-the-server]__1tj-iwvrxfd1a._.js} +2 -2
  446. package/server/.next/server/chunks/ssr/{[root-of-the-server]__12-a3tcnfdcyq._.js → [root-of-the-server]__1u_13nhw3kuz3._.js} +2 -2
  447. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0tjab3yn0asf7._.js → [root-of-the-server]__1uojs0x42k86p._.js} +1 -1
  448. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1096-q3_trmm9._.js → [root-of-the-server]__1yx8ayym979jd._.js} +2 -2
  449. package/server/.next/server/chunks/ssr/[root-of-the-server]__1zmavjo5fhryp._.js +3 -0
  450. package/server/.next/server/chunks/ssr/[root-of-the-server]__20of6xa16fwqa._.js +1 -1
  451. package/server/.next/server/chunks/ssr/_0-wc6f6p0c8lv._.js +3 -0
  452. package/server/.next/server/chunks/ssr/{_04ltmruop4rt3._.js → _02eudwc8ieb2r._.js} +3 -3
  453. package/server/.next/server/chunks/ssr/_034fv8o7kws2k._.js +3 -0
  454. package/server/.next/server/chunks/ssr/_03od6e8ibcxtf._.js +3 -0
  455. package/server/.next/server/chunks/ssr/_042ow6smd_1gj._.js +3 -0
  456. package/server/.next/server/chunks/ssr/{_090fib2x989oc._.js → _08xqk3eibu5aw._.js} +2 -2
  457. package/server/.next/server/chunks/ssr/{_01irlde8uxva8._.js → _0_8v3-nq-b4ug._.js} +2 -2
  458. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  459. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  460. package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
  461. package/server/.next/server/chunks/ssr/_0bd4cxnpnnq2u._.js +1 -1
  462. package/server/.next/server/chunks/ssr/{_1ag8axv14phju._.js → _0cbbks0ms7i_u._.js} +3 -3
  463. package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
  464. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  465. package/server/.next/server/chunks/ssr/_0d2d527wcx-lf._.js +4 -0
  466. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  467. package/server/.next/server/chunks/ssr/{_1gk334l49puy-._.js → _0fq8thje0tuch._.js} +2 -2
  468. package/server/.next/server/chunks/ssr/_0gl-ewvbhb677._.js +4 -0
  469. package/server/.next/server/chunks/ssr/_0i04zoixa2iup._.js +4 -0
  470. package/server/.next/server/chunks/ssr/_0idbg-ok0so2h._.js +4 -0
  471. package/server/.next/server/chunks/ssr/{_0tqc0bsnybvva._.js → _0ipnb60-_660b._.js} +2 -2
  472. package/server/.next/server/chunks/ssr/_0kdn56_ow-x_s._.js +3 -0
  473. package/server/.next/server/chunks/ssr/{_1_gydx19bikgo._.js → _0kxkg0dbp42ai._.js} +2 -2
  474. package/server/.next/server/chunks/ssr/_0mp5aext18ijx._.js +3 -0
  475. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  476. package/server/.next/server/chunks/ssr/{_18lgd6o04ugow._.js → _0oub-njkja8gu._.js} +3 -3
  477. package/server/.next/server/chunks/ssr/_0pqkexxo7rts_._.js +4 -0
  478. package/server/.next/server/chunks/ssr/_0qhvl_fw4qetx._.js +1 -1
  479. package/server/.next/server/chunks/ssr/_0qo8tc43kjsf_._.js +1 -1
  480. package/server/.next/server/chunks/ssr/_0tnd528j0i1i4._.js +4 -0
  481. package/server/.next/server/chunks/ssr/_0uwkwcgucqgcf._.js +4 -0
  482. package/server/.next/server/chunks/ssr/_0v6v5w16qxwke._.js +1 -1
  483. package/server/.next/server/chunks/ssr/_0wb79bnj96x0g._.js +3 -0
  484. package/server/.next/server/chunks/ssr/_0wo-lpqf7hr1y._.js +2 -2
  485. package/server/.next/server/chunks/ssr/_0zixhhc1lheoi._.js +4 -0
  486. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  487. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  488. package/server/.next/server/chunks/ssr/_118h21qua_4o3._.js +1 -1
  489. package/server/.next/server/chunks/ssr/_11llsmv578p2i._.js +3 -0
  490. package/server/.next/server/chunks/ssr/_12makqwatfke-._.js +4 -0
  491. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  492. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  493. package/server/.next/server/chunks/ssr/_1_xsrlijknnh3._.js +1 -1
  494. package/server/.next/server/chunks/ssr/_1c7jkkvkvzj_u._.js +4 -0
  495. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  496. package/server/.next/server/chunks/ssr/_1de6e6l7599fp._.js +1 -1
  497. package/server/.next/server/chunks/ssr/_1dlo17ba9g-f9._.js +4 -0
  498. package/server/.next/server/chunks/ssr/_1e47r3tlad52r._.js +3 -0
  499. package/server/.next/server/chunks/ssr/_1fc8k_0p8l00c._.js +4 -0
  500. package/server/.next/server/chunks/ssr/{_1w_rq6clcs0ft._.js → _1fuywfexex2s8._.js} +3 -3
  501. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  502. package/server/.next/server/chunks/ssr/_1gl78598hz_ku._.js +1 -1
  503. package/server/.next/server/chunks/ssr/_1h93joqd_-1og._.js +1 -1
  504. package/server/.next/server/chunks/ssr/_1he21-bt45k8z._.js +4 -0
  505. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  506. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  507. package/server/.next/server/chunks/ssr/_1ln6o3a9quwxo._.js +4 -0
  508. package/server/.next/server/chunks/ssr/{_0hmxyfx7su4uk._.js → _1m4km_w39x5e9._.js} +2 -2
  509. package/server/.next/server/chunks/ssr/_1pp1o361lgpwu._.js +4 -0
  510. package/server/.next/server/chunks/ssr/_1qdox4yn1u4pc._.js +1 -1
  511. package/server/.next/server/chunks/ssr/_1qdqc9j_skd1q._.js +1 -1
  512. package/server/.next/server/chunks/ssr/_1r7o1vx4875hu._.js +1 -1
  513. package/server/.next/server/chunks/ssr/_1yh3k88t_kh4h._.js +4 -0
  514. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  515. package/server/.next/server/chunks/ssr/_20wy2moxkzhf0._.js +3 -0
  516. package/server/.next/server/chunks/ssr/{_026w_ig6vy9bt._.js → _218164gkxgum_._.js} +2 -2
  517. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_181-3r4e_0yb5.js +3 -0
  518. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_1ryb93n6khky3.js +3 -0
  519. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_06_3gmyq3jtvi.js +3 -0
  520. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_0y5m8cul6d7kk.js +3 -0
  521. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_0ksau5eicvycc.js +3 -0
  522. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_1fgolmmpxrouc.js +3 -0
  523. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_17d_lvhl-u_4w.js +3 -0
  524. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_1yv3fj_fh-n-5.js +3 -0
  525. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_00wuues_v_j3r.js +3 -0
  526. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_0oqh51t2rx6q0.js +3 -0
  527. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_1sb2ldu57uj32.js +3 -0
  528. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_12wgjpd0lbh12.js +3 -0
  529. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1f3a_tpkwjo8z.js +3 -0
  530. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_1ylbdz0-ykfh6.js +3 -0
  531. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  532. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  533. package/server/.next/server/chunks/ssr/node_modules_0bqq4kab3lt4c._.js +3 -0
  534. package/server/.next/server/chunks/ssr/{node_modules_05z64qbskywkh._.js → node_modules_1-uce_v-roeci._.js} +1 -1
  535. package/server/.next/server/chunks/ssr/node_modules_@base-ui_react_dialog_index_parts_mjs_0wvx70_xziwkw._.js +3 -0
  536. package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0p8s4lhdi0ir6._.js +3 -0
  537. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kkewzcx4540.js +3 -0
  538. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00t5_cu_8xco2.js +3 -0
  539. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_028rm32yw9745.js +3 -0
  540. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02tytjla8gfpw.js +3 -0
  541. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_05tff2l0grv3d.js +3 -0
  542. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08qavwdx-gipt.js +3 -0
  543. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09jdr97vksmwk.js +3 -0
  544. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c3z69fbbz6-a.js +3 -0
  545. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d4hxwzkts-8z.js +3 -0
  546. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dq-zslzf2s94.js +3 -0
  547. package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_1q_82vyl-q7u6.js → node_modules_next_dist_esm_build_templates_app-page_0e-rjmezj0qkk.js} +2 -2
  548. package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0ivgh76j_tu2x.js → node_modules_next_dist_esm_build_templates_app-page_0e50mslm8ys4t.js} +2 -2
  549. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0esqulnipbhj7.js +3 -0
  550. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0icasmc2qvtfa.js +3 -0
  551. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0idohkgskbja5.js +3 -0
  552. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ii2a6tud83pj.js +3 -0
  553. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ivr2dcq7hh5t.js +3 -0
  554. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mcwghl-di24f.js +3 -0
  555. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0n05qgf2t9o6n.js +3 -0
  556. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ntej2bo95ns3.js +3 -0
  557. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0o1l93c0tj-p8.js +3 -0
  558. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ollx_iq739y6.js +3 -0
  559. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0v16m5nv0x43b.js +3 -0
  560. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0wa_9ywaoqxrf.js +3 -0
  561. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0y94b-zvw0vrq.js +3 -0
  562. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ydzswpddtx9q.js +3 -0
  563. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zwpkpyuh6z99.js +3 -0
  564. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14t5-0abqp0sm.js +3 -0
  565. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18h3ke4tl-fzl.js +3 -0
  566. package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_14-4y3i6c1vxc.js → node_modules_next_dist_esm_build_templates_app-page_19kqs-fc2i0zv.js} +2 -2
  567. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_s_25znkg8mz.js +3 -0
  568. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_ysa6fs0tt59.js +3 -0
  569. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1b4hixza89i52.js +3 -0
  570. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1brrqdx4msjzf.js +3 -0
  571. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1e74o7dar2z12.js +3 -0
  572. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eqpqmdz9jgs0.js +3 -0
  573. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1f3932777ye1o.js +3 -0
  574. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1kx1n5-wqjvko.js +3 -0
  575. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1l6umnmh89nvy.js +3 -0
  576. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mdyuengydtxm.js +3 -0
  577. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qmm1wm-dfm_v.js +3 -0
  578. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t-fn8blx1hp8.js +3 -0
  579. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tf9xiz17b3cq.js +3 -0
  580. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1tffdbiasnszd.js +3 -0
  581. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uisz6sszlhwp.js +3 -0
  582. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1umag21mbk-rs.js +3 -0
  583. package/server/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0i3p3qfjihm3f.js → node_modules_next_dist_esm_build_templates_app-page_1vakvu0qtsn07.js} +2 -2
  584. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wmviw4zw6t_r.js +3 -0
  585. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xq449tjypb4s.js +3 -0
  586. package/server/.next/server/chunks/ssr/src_02ynbzyh8nn02._.js +3 -0
  587. package/server/.next/server/chunks/ssr/src_0330uf9pdfco9._.js +3 -0
  588. package/server/.next/server/chunks/ssr/{src_1nse4o3frj33x._.js → src_05kvmrkq5nfyh._.js} +2 -2
  589. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  590. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  591. package/server/.next/server/chunks/ssr/{src_0905fjqu0qv57._.js → src_097wa6oc_utgr._.js} +2 -2
  592. package/server/.next/server/chunks/ssr/src_0_5_wl0sww-x7._.js +1 -1
  593. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  594. package/server/.next/server/chunks/ssr/src_0etvjdinp5urq._.js +3 -0
  595. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  596. package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
  597. package/server/.next/server/chunks/ssr/src_1-xw4hea2lvb3._.js +1 -1
  598. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  599. package/server/.next/server/chunks/ssr/{src_071xsnvnzlvj8._.js → src_1751lvujjc-tz._.js} +2 -2
  600. package/server/.next/server/chunks/ssr/src_1f1x6508qetmp._.js +3 -0
  601. package/server/.next/server/chunks/ssr/{src_0oagnv9_4qww7._.js → src_1fomo1_as1-ea._.js} +2 -2
  602. package/server/.next/server/chunks/ssr/src_1koc8y1nfdlw3._.js +1 -1
  603. package/server/.next/server/chunks/ssr/src_1pd5lqhm1x4yf._.js +1 -1
  604. package/server/.next/server/chunks/ssr/src_1q-jgpnd3lbcu._.js +1 -1
  605. package/server/.next/server/chunks/ssr/src_1sv5tf2pk5-pn._.js +3 -0
  606. package/server/.next/server/chunks/ssr/{src_0widudneyf0oq._.js → src_1wnx8vxv7nd04._.js} +2 -2
  607. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  608. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  609. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  610. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  611. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +2 -2
  612. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  613. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  614. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  615. package/server/.next/server/chunks/ssr/src_app_(console)_0p2-zm5eewkqo._.js +3 -0
  616. package/server/.next/server/chunks/ssr/src_app_(console)_1za4o0--zhso5._.js +3 -0
  617. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
  618. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
  619. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1jme7fm7ej_lr._.js +3 -0
  620. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
  621. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  622. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  623. package/server/.next/server/chunks/ssr/src_app_(console)_connections_02upf_c41dauw._.js +1 -1
  624. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  625. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +1 -1
  626. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  627. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  628. package/server/.next/server/chunks/ssr/src_app_(console)_d1_page_tsx_167hwnq_9uh81._.js +1 -1
  629. package/server/.next/server/chunks/ssr/src_app_(console)_dns_0d1uyir4fe7pc._.js +1 -1
  630. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  631. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  632. package/server/.next/server/chunks/ssr/src_app_(console)_domains_1ut499n11u8_r._.js +1 -1
  633. package/server/.next/server/chunks/ssr/src_app_(console)_firebase_row-menu_tsx_0hssoq3pqjl-n._.js +1 -1
  634. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  635. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_17htk-vea5fna._.js +1 -1
  636. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +1 -1
  637. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  638. package/server/.next/server/chunks/ssr/src_app_(console)_overview_page_tsx_0se3f3ln9q-42._.js +1 -1
  639. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  640. package/server/.next/server/chunks/ssr/src_app_(console)_repos_[id]_page_tsx_1nkxthc4ethrj._.js +2 -2
  641. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  642. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  643. package/server/.next/server/chunks/ssr/src_app_(console)_status_page_tsx_1zvj799nv4kah._.js +1 -1
  644. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  645. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_1ofufib3-zzt-._.js +1 -1
  646. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  647. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  648. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  649. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  650. package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
  651. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  652. package/server/.next/server/chunks/ssr/{src_app_signin_0hb58isfg-2yx._.js → src_app_signin_11vigmz4xm91m._.js} +2 -2
  653. package/server/.next/server/chunks/ssr/src_components_0-x11r8_844pu._.js +1 -1
  654. package/server/.next/server/chunks/ssr/src_components_08d78uqnnmrrh._.js +1 -1
  655. package/server/.next/server/chunks/ssr/src_components_0_xymno8nakru._.js +3 -0
  656. package/server/.next/server/chunks/ssr/src_components_0ozvphxxwb7d-._.js +3 -0
  657. package/server/.next/server/chunks/ssr/src_components_0tmtbf2etsx03._.js +1 -1
  658. package/server/.next/server/chunks/ssr/src_components_charts_tsx_0u0c5sxi3-7ug._.js +1 -1
  659. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  660. package/server/.next/server/chunks/ssr/src_components_live_tsx_1p2s3b807w0jt._.js +1 -1
  661. package/server/.next/server/chunks/ssr/src_components_ui_dialog_tsx_1tn-i_6d3rhzt._.js +1 -1
  662. package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +7 -2
  663. package/server/.next/server/chunks/ssr/src_lib_1zgor_vrwl5kt._.js +5 -0
  664. package/server/.next/server/chunks/ssr/src_lib_alerts_catalog_ts_1ndg28acul64q._.js +1 -1
  665. package/server/.next/server/chunks/ssr/src_lib_auth_ts_11yt3pae6wy-o._.js +1 -1
  666. package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +1 -1
  667. package/server/.next/server/chunks/ssr/src_lib_collector_self-update_ts_18m5vmptpjhtg._.js +3 -0
  668. package/server/.next/server/chunks/ssr/src_lib_data_github-db_ts_02xuh84m-__8z._.js +1 -1
  669. package/server/.next/server/chunks/ssr/src_lib_data_provider-status-db_ts_09oo6p4m7x7te._.js +1 -1
  670. package/server/.next/server/chunks/ssr/{src_lib_demo_1wu-a6lubzph6._.js → src_lib_demo_07uq47fhms-3d._.js} +2 -2
  671. package/server/.next/server/chunks/ssr/src_lib_local-auth_setup_ts_05zj7z33ne4f5._.js +1 -1
  672. package/server/.next/server/chunks/ssr/src_lib_security_node-runtime_ts_1jei00s21d6v0._.js +3 -0
  673. package/server/.next/server/chunks/ssr/src_lib_view_databases_ts_1ovdbo8spjhf9._.js +1 -1
  674. package/server/.next/server/chunks/ssr/src_lib_view_labels_ts_1uxs84z7vclz5._.js +1 -1
  675. package/server/.next/server/chunks/ssr/src_lib_view_network_ts_0toa7t-gw9cup._.js +1 -1
  676. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  677. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  678. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  679. package/server/.next/server/chunks/ssr/src_private_assist_questions-db_ts_1l-wvmlexd7tr._.js +1 -1
  680. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  681. package/server/.next/server/middleware-build-manifest.js +105 -105
  682. package/server/.next/server/pages/404.html +1 -1
  683. package/server/.next/server/pages/500.html +1 -1
  684. package/server/.next/server/preview-props.json +3 -3
  685. package/server/.next/server/server-reference-manifest.js +1 -1
  686. package/server/.next/server/server-reference-manifest.json +858 -672
  687. package/server/.next/static/chunks/04ospu_w--6p9.js +1 -0
  688. package/server/.next/static/chunks/06a83nde7riq-.js +1 -0
  689. package/server/.next/static/chunks/088c6cw88jmlb.js +7 -0
  690. package/server/.next/static/chunks/08f1euchlacye.js +1 -0
  691. package/server/.next/static/chunks/09e-vdlax9bp6.js +1 -0
  692. package/server/.next/static/chunks/{0rgn3-cks0udn.js → 0a-rekt06v0sv.js} +1 -1
  693. package/server/.next/static/chunks/{3u3h2mlon2qu7.js → 0a4b85ckxbprh.js} +1 -1
  694. package/server/.next/static/chunks/0buwzrf7dpagn.js +1 -0
  695. package/server/.next/static/chunks/0dmql-jz-o69o.js +1 -0
  696. package/server/.next/static/chunks/{3xo5igjfumqip.js → 0jf5lpzwq4vh1.js} +1 -1
  697. package/server/.next/static/chunks/0p6hja9octhrd.js +1 -0
  698. package/server/.next/static/chunks/{3orhi-m-n-ra4.js → 0qoql97izcn4l.js} +1 -1
  699. package/server/.next/static/chunks/0qsk0bb1x81nc.js +1 -0
  700. package/server/.next/static/chunks/0wkv5e-c430ea.js +33 -0
  701. package/server/.next/static/chunks/0x41o1ud_ksl1.js +1 -0
  702. package/server/.next/static/chunks/0x_wb_w6fgkyt.js +1 -0
  703. package/server/.next/static/chunks/{319s97ka6eaex.js → 12bbufru1ui37.js} +1 -1
  704. package/server/.next/static/chunks/{1pre7l9hmk-b6.js → 12zasgv1xisb5.js} +1 -1
  705. package/server/.next/static/chunks/{2yjh4ytp-sedv.js → 149lk0boxihnl.js} +1 -1
  706. package/server/.next/static/chunks/17lwu-2id6c_-.js +1 -0
  707. package/server/.next/static/chunks/{36js6cf9c-53b.js → 1_93oj1b-nrla.js} +1 -1
  708. package/server/.next/static/chunks/1bt81ubbahkh6.js +1 -0
  709. package/server/.next/static/chunks/1c0s-ejiwfy2u.js +1 -0
  710. package/server/.next/static/chunks/1g_kip3m3h9q6.js +1 -0
  711. package/server/.next/static/chunks/1i8i1ieoh738i.js +1 -0
  712. package/server/.next/static/chunks/1s0s32oqy-54t.js +1 -0
  713. package/server/.next/static/chunks/1ss-6-h8nloc9.js +1 -0
  714. package/server/.next/static/chunks/1t8fe3w70uapo.js +1 -0
  715. package/server/.next/static/chunks/1t9f2pdc3crnr.js +1 -0
  716. package/server/.next/static/chunks/1urtw14pwufsv.js +1 -0
  717. package/server/.next/static/chunks/1wh-ps6a57yj1.js +1 -0
  718. package/server/.next/static/chunks/20ujg0hz_need.js +1 -0
  719. package/server/.next/static/chunks/{05p62k_8g05pm.js → 23b9tctw1mn5a.js} +11 -11
  720. package/server/.next/static/chunks/292uz-rsh422k.js +1 -0
  721. package/server/.next/static/chunks/{12fo0pcbpv7lw.js → 29xg947lkf4-x.js} +1 -1
  722. package/server/.next/static/chunks/2ac9gyn8mzqp4.js +1 -0
  723. package/server/.next/static/chunks/2fze_cnwk8j76.js +1 -0
  724. package/server/.next/static/chunks/2g9dossbqnlr7.js +1 -0
  725. package/server/.next/static/chunks/{0i8-ofb4wfcch.js → 2l4upq4bwgvvu.js} +1 -1
  726. package/server/.next/static/chunks/{0a5vchcarwyam.js → 2pi0r5spn0slc.js} +1 -1
  727. package/server/.next/static/chunks/2rpa_j81h_45y.js +1 -0
  728. package/server/.next/static/chunks/2szc6dvuj3gxy.js +1 -0
  729. package/server/.next/static/chunks/2u3iceaxpiiws.js +1 -0
  730. package/server/.next/static/chunks/2z21xxtcmsmhe.js +1 -0
  731. package/server/.next/static/chunks/315s21b2dd7lg.js +1 -0
  732. package/server/.next/static/chunks/35to2q1uretcv.js +1 -0
  733. package/server/.next/static/chunks/{2q88116332v43.js → 37zqf9hef7g0k.js} +1 -1
  734. package/server/.next/static/chunks/38-ay595f3xie.js +1 -0
  735. package/server/.next/static/chunks/38ao1jq4zw-nd.js +1 -0
  736. package/server/.next/static/chunks/38conxv_f-pgo.js +1 -0
  737. package/server/.next/static/chunks/3cyesi3hi6l1g.js +5 -0
  738. package/server/.next/static/chunks/{1qxc6cck2xkbs.js → 3efi_dyz4y0lj.js} +1 -1
  739. package/server/.next/static/chunks/3qjirj3rjf5mu.js +1 -0
  740. package/server/.next/static/chunks/3vpy-ra0rib9m.js +1 -0
  741. package/server/.next/static/chunks/{1o1lidcbrrh92.js → 3xxcpv79l5tnh.js} +1 -1
  742. package/server/.next/static/chunks/3ybb15n1q3f-o.css +3 -0
  743. package/server/drizzle-selfhost/0007_webhook_channel.sql +5 -0
  744. package/server/drizzle-selfhost/meta/_journal.json +7 -0
  745. package/tools/reset-login.mjs +1 -1
  746. package/server/.next/server/chunks/[root-of-the-server]__0hedtycoyydoc._.js +0 -3
  747. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +0 -3
  748. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +0 -3
  749. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +0 -4
  750. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +0 -3
  751. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +0 -3
  752. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +0 -3
  753. package/server/.next/server/chunks/ssr/[externals]__1hqh7fi0-rtlc._.js +0 -3
  754. package/server/.next/server/chunks/ssr/[externals]__1mmmc4yhx5fm6._.js +0 -3
  755. package/server/.next/server/chunks/ssr/[externals]__1nv-uycpa6_lh._.js +0 -3
  756. package/server/.next/server/chunks/ssr/[externals]__1p5zuqwmfkoo1._.js +0 -3
  757. package/server/.next/server/chunks/ssr/[root-of-the-server]__01mgajn73iwc7._.js +0 -5
  758. package/server/.next/server/chunks/ssr/[root-of-the-server]__05q-laapy00sk._.js +0 -3
  759. package/server/.next/server/chunks/ssr/[root-of-the-server]__0dd9rci1isdjf._.js +0 -3
  760. package/server/.next/server/chunks/ssr/[root-of-the-server]__0lehuiyzxp78t._.js +0 -3
  761. package/server/.next/server/chunks/ssr/[root-of-the-server]__0tp9vtckbkk9o._.js +0 -3
  762. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +0 -3
  763. package/server/.next/server/chunks/ssr/[root-of-the-server]__10y2ig7dg3f-k._.js +0 -3
  764. package/server/.next/server/chunks/ssr/[root-of-the-server]__194546bqpq02e._.js +0 -3
  765. package/server/.next/server/chunks/ssr/[root-of-the-server]__1bvp2ia3h9qbs._.js +0 -3
  766. package/server/.next/server/chunks/ssr/[root-of-the-server]__1dyjzbqwy6o12._.js +0 -3
  767. package/server/.next/server/chunks/ssr/[root-of-the-server]__1l695djsioelp._.js +0 -3
  768. package/server/.next/server/chunks/ssr/[root-of-the-server]__1pfk0fqey3ipf._.js +0 -3
  769. package/server/.next/server/chunks/ssr/[root-of-the-server]__1pgpryg9lkmoz._.js +0 -3
  770. package/server/.next/server/chunks/ssr/[root-of-the-server]__1rvdnoxnu0ddf._.js +0 -3
  771. package/server/.next/server/chunks/ssr/[root-of-the-server]__1t4thrxlv4zre._.js +0 -3
  772. package/server/.next/server/chunks/ssr/[root-of-the-server]__1tuftf7fags7x._.js +0 -5
  773. package/server/.next/server/chunks/ssr/[root-of-the-server]__1vyste6xyyu37._.js +0 -3
  774. package/server/.next/server/chunks/ssr/[root-of-the-server]__1yf4_oyl-3xp7._.js +0 -3
  775. package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +0 -4
  776. package/server/.next/server/chunks/ssr/_06kn13xh_13da._.js +0 -3
  777. package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +0 -4
  778. package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +0 -4
  779. package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +0 -4
  780. package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +0 -4
  781. package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +0 -4
  782. package/server/.next/server/chunks/ssr/_0qcvpnwa1u3vr._.js +0 -3
  783. package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +0 -3
  784. package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +0 -4
  785. package/server/.next/server/chunks/ssr/_0wzg8e30al7bu._.js +0 -3
  786. package/server/.next/server/chunks/ssr/_0ymtfa6vo-yz5._.js +0 -3
  787. package/server/.next/server/chunks/ssr/_0yn1xeumiigj0._.js +0 -3
  788. package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +0 -4
  789. package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +0 -4
  790. package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +0 -4
  791. package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +0 -4
  792. package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +0 -4
  793. package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +0 -4
  794. package/server/.next/server/chunks/ssr/_1e5zfwgdf0mm5._.js +0 -3
  795. package/server/.next/server/chunks/ssr/_1gvbcfoah__sl._.js +0 -3
  796. package/server/.next/server/chunks/ssr/_1h5tfqxzqd2tz._.js +0 -3
  797. package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +0 -4
  798. package/server/.next/server/chunks/ssr/_1k8rjvzlscs56._.js +0 -3
  799. package/server/.next/server/chunks/ssr/_1l-vlfiltmzu3._.js +0 -3
  800. package/server/.next/server/chunks/ssr/_1rf_mwfkk_9oa._.js +0 -3
  801. package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +0 -4
  802. package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +0 -4
  803. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +0 -3
  804. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +0 -3
  805. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +0 -3
  806. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +0 -3
  807. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1zw_mdh2ep6vs.js +0 -3
  808. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_06a1fnrawxlh1.js +0 -3
  809. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +0 -3
  810. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +0 -3
  811. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_217-u-dmlzx6a.js +0 -3
  812. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +0 -3
  813. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_0ven9q46d3d7s.js +0 -3
  814. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +0 -3
  815. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +0 -3
  816. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +0 -3
  817. package/server/.next/server/chunks/ssr/node_modules_1_u5afwqp6brs._.js +0 -3
  818. package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j32_ibz4._.js +0 -3
  819. package/server/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9mbf-fh.js +0 -3
  820. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-kg_ige9ehqj.js +0 -3
  821. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00k37tbaia8dh.js +0 -3
  822. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00z_p6szkga15.js +0 -3
  823. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_01-utr59mtfg1.js +0 -3
  824. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_055hw7kwif935.js +0 -3
  825. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06fg_efdkc3kx.js +0 -3
  826. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08f3d08smwt6_.js +0 -3
  827. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcfro9qovjn.js +0 -3
  828. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0c8wd69fns_0d.js +0 -3
  829. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cha-3kg99u4h.js +0 -3
  830. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d_0he72lzkh9.js +0 -3
  831. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0f6chw8z5cuyg.js +0 -3
  832. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j9-_xhs21abp.js +0 -3
  833. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0kwpdjujljna-.js +0 -3
  834. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rer2akuum5r-.js +0 -3
  835. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0umt_achusjjb.js +0 -3
  836. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0un7wq602mt3n.js +0 -3
  837. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vrdl9n7guitd.js +0 -3
  838. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vse2cboy4cms.js +0 -3
  839. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0x7ey4_8b48_o.js +0 -3
  840. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0z8l8t55t65t_.js +0 -3
  841. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zap6p0vuv-fp.js +0 -3
  842. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-m49cfu6a7gl.js +0 -3
  843. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-w3hswsbrppl.js +0 -3
  844. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1167zbjp4ys_a.js +0 -3
  845. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_129serqqq3xyq.js +0 -3
  846. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12en3pdvxu0dy.js +0 -3
  847. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1596hk9t3r1a5.js +0 -3
  848. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_17us24ry0om-z.js +0 -3
  849. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_8xi22-aoxu1.js +0 -3
  850. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_l32aoya75_m.js +0 -3
  851. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ar0v26274uhj.js +0 -3
  852. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dkgfjoaf_1g3.js +0 -3
  853. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1eg14m09zdg__.js +0 -3
  854. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1h_y671y1la_8.js +0 -3
  855. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mkokmyyp47hd.js +0 -3
  856. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1msjiuu45famw.js +0 -3
  857. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mw7isdchouml.js +0 -3
  858. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1n4cotiug2a_r.js +0 -3
  859. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1njl24pr6dwrt.js +0 -3
  860. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o1_3bydb-3j5.js +0 -3
  861. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1pjor42_s9imf.js +0 -3
  862. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qta4yeufzpz7.js +0 -3
  863. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qxbl6k6dji0s.js +0 -3
  864. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_21a3kf8buivxw.js +0 -3
  865. package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +0 -3
  866. package/server/.next/server/chunks/ssr/src_0jdurlhzhcg5x._.js +0 -3
  867. package/server/.next/server/chunks/ssr/src_0ley8c3htc2q9._.js +0 -3
  868. package/server/.next/server/chunks/ssr/src_0p0fk07bj9gpq._.js +0 -3
  869. package/server/.next/server/chunks/ssr/src_0ubtruqmercw2._.js +0 -3
  870. package/server/.next/server/chunks/ssr/src_12sdm7skn8fr1._.js +0 -3
  871. package/server/.next/server/chunks/ssr/src_16lx0qdi44evh._.js +0 -3
  872. package/server/.next/server/chunks/ssr/src_17yq6_bqlwgvy._.js +0 -3
  873. package/server/.next/server/chunks/ssr/src_1n-6pz04odixj._.js +0 -3
  874. package/server/.next/server/chunks/ssr/src_app_(console)_08pmfte22v8vg._.js +0 -3
  875. package/server/.next/server/chunks/ssr/src_app_(console)_1rx84pcbevbbk._.js +0 -3
  876. package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +0 -3
  877. package/server/.next/server/chunks/ssr/src_components_1yp2m9j9dnsv-._.js +0 -3
  878. package/server/.next/server/chunks/ssr/src_components_ui_dropdown-menu_tsx_1xyz_k6bpdu_5._.js +0 -3
  879. package/server/.next/server/chunks/ssr/src_lib_collector_node-runtime_ts_0778fef3fi3zj._.js +0 -3
  880. package/server/.next/static/chunks/0-_zjfssid86w.js +0 -33
  881. package/server/.next/static/chunks/02-edmd1oolf2.css +0 -3
  882. package/server/.next/static/chunks/02e07gc948zdh.js +0 -1
  883. package/server/.next/static/chunks/073u0a0mfexc8.js +0 -1
  884. package/server/.next/static/chunks/09fx7h5vm68up.js +0 -1
  885. package/server/.next/static/chunks/0ao7_ov9mlvqp.js +0 -1
  886. package/server/.next/static/chunks/0cvmbpyjages7.js +0 -5
  887. package/server/.next/static/chunks/0hnhf3barhk90.js +0 -1
  888. package/server/.next/static/chunks/0id261ol_gl6f.js +0 -1
  889. package/server/.next/static/chunks/0q2ogu5cn9q9p.js +0 -1
  890. package/server/.next/static/chunks/0z_fqwq62_95p.js +0 -1
  891. package/server/.next/static/chunks/12l7tr29-a97t.js +0 -1
  892. package/server/.next/static/chunks/16d1ws92me6_q.js +0 -1
  893. package/server/.next/static/chunks/1__8cm_-lydee.js +0 -1
  894. package/server/.next/static/chunks/1hmur12m0hx3z.js +0 -1
  895. package/server/.next/static/chunks/205s3z3_jvp5m.js +0 -1
  896. package/server/.next/static/chunks/20cpkauaj8e6x.js +0 -7
  897. package/server/.next/static/chunks/23scyaimkowfl.js +0 -1
  898. package/server/.next/static/chunks/25meucm7i1e7b.js +0 -1
  899. package/server/.next/static/chunks/2oy7awlquezq_.js +0 -1
  900. package/server/.next/static/chunks/2pj8subq20y-_.js +0 -1
  901. package/server/.next/static/chunks/2qcurt9u9shwc.js +0 -1
  902. package/server/.next/static/chunks/2scf40c-_g_q1.js +0 -1
  903. package/server/.next/static/chunks/2tnx5isef9ryw.js +0 -1
  904. package/server/.next/static/chunks/2v_f39dz8sa3-.js +0 -1
  905. package/server/.next/static/chunks/2whojv56qi3ke.js +0 -1
  906. package/server/.next/static/chunks/2wlen-jacsbqv.js +0 -1
  907. package/server/.next/static/chunks/36bqhxadlfbfn.js +0 -1
  908. package/server/.next/static/chunks/372gugw4ldy47.js +0 -1
  909. package/server/.next/static/chunks/39n_1gky-xh0a.js +0 -1
  910. package/server/.next/static/chunks/3fv862m8cvcoe.js +0 -1
  911. package/server/.next/static/chunks/3g73nar6-7bqk.js +0 -1
  912. package/server/.next/static/chunks/3sg_npfod25zq.js +0 -1
  913. package/server/.next/static/chunks/3vacue9vhoqag.js +0 -1
  914. package/server/.next/static/chunks/3x8-w_p0n-gsd.js +0 -1
  915. package/server/.next/static/chunks/3yljsdgzvrkdf.js +0 -1
  916. package/server/.next/static/chunks/415ijq-anmr2o.js +0 -1
  917. package/server/.next/static/chunks/43wm4_0-0-eej.js +0 -1
  918. package/server/.next/static/chunks/44bizq7fli9cp.js +0 -1
  919. /package/server/.next/static/{90CuiGzddaxNn9lvRkGlH → rBXBlxKpaOHcc5KZDIhAL}/_buildManifest.js +0 -0
  920. /package/server/.next/static/{90CuiGzddaxNn9lvRkGlH → rBXBlxKpaOHcc5KZDIhAL}/_clientMiddlewareManifest.js +0 -0
  921. /package/server/.next/static/{90CuiGzddaxNn9lvRkGlH → rBXBlxKpaOHcc5KZDIhAL}/_ssgManifest.js +0 -0
@@ -1,16 +1,21 @@
1
- (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let a=e=>`${e} hari`,r=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${a(e)}.`,i={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},n={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={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)=>r(a,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,a)=>r(a,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,a,r,i)=>`${t} pakai ${a} MB dari ${r} MB (${i}%).`]],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,i)=>`${t} udah baca ${a} dari ${r} dokumen hari ini (${i}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${a(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,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,i)=>r(i,`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=>n[e])}): ${r.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],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,i,s,o)=>`Next.js ${t} punya ${a} kerentanan yang diketahui (${n[r]}), ${i?`udah di-fix di ${i}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[a,r]of Object.hasOwn(s,e)?s[e]:[]){let e=a.exec(t);if(e)return r(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={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"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},c=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),p={critical:0,warning:1,info:2};function g(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 f(e,t,a,r,i,n){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[r],l=r.length+i.length+40;for(let e=0;e<s.length;e++){let r=a(s[e]);if(l+r.length+1>t){o.push(n(s.length-e));break}o.push(r),l+=r.length+1}return o.push(i),o.join("\n").slice(0,t)}let m={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,a,r,i="en"){let n=`${r.replace(/\/+$/,"")}/alerts`,s=u[i],p=e=>`${l[i][e.kind]} \xb7 ${d[i][e.severity]} \xb7 `,h=e=>"id"===i?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let a=Object.hasOwn(m[t],e)?m[t][e]:void 0;return a?`${u[t].step}: ${a}`:null})(e.ruleKey,i),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
1
+ (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let r=e=>`${e} hari`,a=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,n={"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"},i={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,r)=>`${t}: nggak ada ping selama ${r.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,r)=>`${t}: ${n[r]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,r)=>`${t}: ${r} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,r)=>`${t} pindah ke ${r}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,r,a)=>`${t} udah bukan domain ${r}; production sekarang di ${a}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,r)=>`Monitor ngecek ${t}, domain ${r}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,r)=>`p95 ${t} ms selama 10 menit terakhir (batas ${r} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} pakai ${r} MB dari ${a} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,r,a)=>`${t} udah pakai ${r} dari ${a} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} udah baca ${r} dari ${a} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${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,r,a)=>`${t}: ${r.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${a}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,r)=>`${t}: ${r.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,r)=>`Credential ${t} ${r} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,r,n)=>a(n,`Credential ${t} ${r}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,r,a)=>`${t} paket rentan (${r.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>i[e])}): ${a.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,r)=>`${t} pakai Next.js ${r} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,r,a,n,s,o)=>`Next.js ${t} punya ${r} kerentanan yang diketahui (${i[a]}), ${n?`udah di-fix di ${n}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[r,a]of Object.hasOwn(s,e)?s[e]:[]){let e=r.exec(t);if(e)return a(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},c={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"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},u=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),p={critical:0,warning:1,info:2};function h(e,t){let r=e.filter(e=>"resolve"!==e.kind).length,a=e.length-r;return[r?`${r} ${c[t].firing}`:"",a?`${a} ${c[t].resolved}`:""].filter(Boolean).join(", ")}function f(e,t,r,a,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[a],l=a.length+n.length+40;for(let e=0;e<s.length;e++){let a=r(s[e]);if(l+a.length+1>t){o.push(i(s.length-e));break}o.push(a),l+=a.length+1}return o.push(n),o.join("\n").slice(0,t)}let g={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,r,a,n="en"){let i=`${a.replace(/\/+$/,"")}/alerts`,s=c[n],p=e=>`${l[n][e.kind]} \xb7 ${d[n][e.severity]} \xb7 `,m=e=>"id"===n?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let r=Object.hasOwn(g[t],e)?g[t][e]:void 0;return r?`${c[t].step}: ${r}`:null})(e.ruleKey,n),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
2
2
  +${e} ${s.more}`;return{telegram:f(e,4096,e=>`
3
- <b>${p(e)}${c(e.ruleKey)} \xb7 ${c(e.title)}</b>
4
- ${c(h(e))}${y(e)?`
5
- <i>${c(y(e))}</i>`:""}${k(e)?`
6
- 👉 ${c(k(e))}`:""}
7
- ${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${g(e,i)} \xb7 ${(0,t.U)(a)} ${(0,t.J)(a)}`,`
8
- <a href="${c(n)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
3
+ <b>${p(e)}${u(e.ruleKey)} \xb7 ${u(e.title)}</b>
4
+ ${u(m(e))}${y(e)?`
5
+ <i>${u(y(e))}</i>`:""}${k(e)?`
6
+ 👉 ${u(k(e))}`:""}
7
+ ${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
8
+ <a href="${u(i)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
9
9
  **${p(e)}${e.ruleKey} \xb7 ${e.title.replace(/[*_`~|\[\]<>]/g,"")}**
10
- ${h(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
10
+ ${m(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
11
11
  _${y(e)}_`:""}${k(e)?`
12
- 👉 ${k(e)}`:""}`,`**Watchbell**: ${g(e,i)} \xb7 ${(0,t.U)(a)} ${(0,t.J)(a)}`,`
13
- ${n}`,$)}},"H",0,c],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),i=e.i(600205),n=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([i.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,n.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),i=e.i(618916),n=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 u(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,u,"v",0,d],11827);var c=e.i(326003),p=e.i(843448),g=e.i(547499),f=e.i(628448),m=e.i(342833);async function h(e){let a=await (0,r.f)().select({data:i.snapshots.data}).from(i.resources).innerJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.resources.accountId,e),(0,t.u)(i.resources.kind,"supabase_project"))),n=new Map;for(let{data:e}of a){let t=(0,c.k)(c.B,e);t.orgSlug&&void 0!==t.freeOrg&&n.set(t.orgSlug,t.freeOrg)}return n}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,a,n){try{let s=await (0,r.f)().select({k:i.keepActive,r:i.resources,s:i.snapshots,a:i.accounts}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).leftJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.keepActive.keep,!0),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt),(0,t.u)(i.accounts.status,"ok"))).limit(100),o=(0,g.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:i,s:l,a:d}]of s.entries()){let u=a-Date.now()-500;if(u<250)return void n.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(i,l,d,e,o,u,n)}catch(e){console.warn("keep-active failed:",y(e)),n.push(`keep-active/${i.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),n.push(`keep-active: ${y(e)}`)}}async function w(e,a,o,l,u,g,h){let y=(0,c.k)(c.B,a?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),v=(0,n.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},u);if(!v)return void h.push(`keep-active/${o.label}: credential can't be read`);let b=await (0,m.i)(v,e.externalId,{timeoutMs:Math.min(5e3,g)});if(b.ok)await (0,r.f)().update(i.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(i.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"===b.kind?"This token can't run the read-only query (Database read).":(0,f.S)(b.error)}]),h.push(`keep-active/${e.name}: ${b.error}`)}}async function v(e){let[n]=await (0,r.f)().select({at:i.events.at}).from(i.events).where((0,t.b)((0,t.u)(i.events.reason,"Action"),(0,t.u)(i.events.resourceId,e),(0,t.u)(i.events.type,"action"),(0,t.y)(i.events.kind,["ok","err"]),(0,t.E)(i.events.actorUserId),(0,t.D)(i.events.message,`${l}%`))).orderBy((0,a.A)(i.events.at)).limit(1);return n?.at??null}async function b(){return(await (0,r.f)().select({id:i.keepActive.resourceId}).from(i.keepActive).where((0,t.u)(i.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),c=()=>l-Date.now()-500;if(!d.length||250>c())return;let k=await (0,r.f)().select({k:i.keepActive,id:i.resources.id,name:i.resources.name,ref:i.resources.externalId,accountId:i.resources.accountId,label:i.accounts.label,lastTestAt:i.accounts.lastTestAt,ciphertext:i.accounts.credentialCiphertext,iv:i.accounts.credentialIv}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.keepActive.autoRestore,!0),(0,t.y)(i.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.M)(i.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,b=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 h(l.accountId);w.set(l.accountId,e),b.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:b.get(l.accountId),I=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),T=I?.write==="denied"&&new Date(I.at).getTime()>S,x=u({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:T},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 j=await v(l.id);if(j&&j.getTime()>l.k.updatedAt.getTime())continue;let D=c();if(D<250)return;await (0,r.f)().update(i.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(i.keepActive.resourceId,l.id));let C=(0,n.V)({ciphertext:l.ciphertext,iv:l.iv},(0,g.f)().OPS_ENCRYPTION_KEY);if(!C)continue;let E=await (0,m.G)(C,l.ref,{timeoutMs:Math.min(5e3,D)});E.ok?(y||b.set(l.accountId,b.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:",y(e))}}async function I(e,a,n=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[u]=await (0,r.f)().select({last:i.keepActive.lastKeepAliveAt}).from(i.keepActive).where((0,t.u)(i.keepActive.resourceId,a)).limit(1);if(u?.last&&s.getTime()-u.last.getTime()<72e6)return n({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let c=d.resource.name,p=await (0,m.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(i.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:i.keepActive.resourceId,set:{lastKeepAliveAt:s}}),n(p.ok?{done:!0,message:`Keep-alive sent to ${c}.`,audit:{message:`Keep-alive sent \xb7 ${c}`,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 ${c}`,resourceId:a}},e,d.account.id)}e.s(["m",0,h,"z",0,A,"g",0,b,"v",0,I,"V",0,$,"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(875225),a=e.i(349129),r=e.i(518899),i=e.i(924924),n=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),u=e.i(111970),c=e.i(762504),p=e.i(547499),g=e.i(224382),f=e.i(600273),m=e.i(968068),h=e.i(695811),k=e.i(633974),y=e.i(76012),$=e.i(298397),w=e.i(218331),v=e.i(146394);let b="digest.lastSentDay",A="digest.state";async function I(e){let[a]=await (0,i.f)().select().from(n.channels).where((0,t.u)(n.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,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function S(){let e=(0,m.f)(),[t,a]=await Promise.all([I("telegram"),I("discord")]),r=new Set;return e.telegramToken&&t?.row.enabled&&t.config?.chatId&&r.add("telegram"),a?.row.enabled&&a.config?.url&&r.add("discord"),{send:(r,i)=>"telegram"===r?(0,y.I)(e.telegramToken,t.config.chatId,i):(0,g.f)(a.config.url,i),configured:r}}async function T(){let e=(0,m.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function x(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",D=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function C(e,t,a){let s=e.filter(e=>D.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(${n.settings.value}) = 'object' then ${n.settings.value} else '{}'::jsonb end`;await (0,i.f)().insert(n.settings).values({key:j,value:o}).onConflictDoUpdate({target:n.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
14
- where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:a}})}async function E(e){if(!e||!D.test(e))return null;try{let[a]=await (0,i.f)().select({value:n.settings.value}).from(n.settings).where((0,t.u)(n.settings.key,j)).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 _=()=>(0,d.f)().catch(()=>$.a);async function N(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let c=await (0,u.I)(),g=await (0,i.f)().select({a:n.alerts,channels:n.alertRules.channels}).from(n.alerts).innerJoin(n.alertRules,(0,t.u)(n.alertRules.key,n.alerts.ruleKey)).where((0,t.b)((0,t.E)(n.alerts.pending),r.B`(${n.alerts.pending} = 'resolve') = (${n.alerts.resolvedAt} is not null)`,(0,u.s)(c))).orderBy((0,a.M)(n.alerts.pendingSince)).limit(50);if(!g.length)return{sent:0,dropped:0};let f=new Set((await (0,i.f)().update(n.alerts).set({claimedAt:e}).where((d=g.map(e=>e.a.id),(0,t.b)((0,t.y)(n.alerts.id,d),(0,t.E)(n.alerts.pending),(0,t.F)((0,t.M)(n.alerts.claimedAt),(0,t.S)(n.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:n.alerts.id})).map(e=>e.id)),m=g.filter(e=>f.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:y}=l.sender??await S(),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)),[v,b]=await Promise.all([_(),(0,h.B)()]),A=new Set;for(let a of["telegram","discord"]){if(!y.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})=>{let t="telegram"===a?e:(0,$.o)(e,v);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,b[a]),d=await k(a,(0,$.G)("telegram"===a?l.telegram:l.discord));await (0,i.f)().update(n.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(n.channels.kind,a)),d.ok&&r.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===a&&d.messageId&&await C(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,T=0,x=[];for(let{a,channels:r}of m){let s=r.some(e=>y.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;A.has(a.id)?(I++,await (0,i.f)().update(n.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(n.alerts.id,a.id))):w.has(a.id)||!s||o?(T++,await (0,i.f)().update(n.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(n.alerts.id,a.id))):x.push(a.id)}return x.length&&await (0,i.f)().update(n.alerts).set({claimedAt:null}).where((0,t.y)(n.alerts.id,x)),{sent:I,dropped:T}}async function M(e){let s=new Date(e.getTime()-864e5),o=await (0,u.I)(),l=r.B`case ${n.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,g,f,m]=await Promise.all([(0,i.f)().select({ruleKey:n.alerts.ruleKey,severity:n.alerts.severity,title:n.alerts.title,message:n.alerts.message,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt}).from(n.alerts).where((0,t.b)((0,t.M)(n.alerts.resolvedAt),(0,u.s)(o))).orderBy(l,(0,a.A)(n.alerts.startedAt)).limit(50),(0,i.f)().select({n:r.B`count(*)::int`}).from(n.alerts).where((0,t.B)(n.alerts.startedAt,s)),(0,i.f)().select({ruleKey:n.alerts.ruleKey,title:n.alerts.title,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt,resolvedAt:n.alerts.resolvedAt}).from(n.alerts).where((0,t.b)((0,t.E)(n.alerts.resolvedAt),(0,t.B)(n.alerts.resolvedAt,s))).orderBy((0,a.A)(n.alerts.resolvedAt)).limit(20),(0,i.f)().select({id:n.resources.id,name:n.resources.name}).from(n.resources).where((0,t.b)((0,t.u)(n.resources.kind,"app"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt))).orderBy(n.resources.name).limit(v.O.apps),(0,c.h)(e)]),h=f.map(e=>e.id),[k,y]=h.length?await Promise.all([(0,i.f)().select({id:n.monitors.resourceId,total:r.B`count(*)::int`,bad:r.B`(count(*) filter (where not ${n.checks.ok}))::int`}).from(n.checks).innerJoin(n.monitors,(0,t.u)(n.monitors.id,n.checks.monitorId)).where((0,t.b)((0,t.y)(n.monitors.resourceId,h),(0,t.B)(n.checks.at,s),(0,t.u)(n.checks.inMaintenance,!1))).groupBy(n.monitors.resourceId),(0,i.f)().select({id:n.storedLogs.resourceId,n:r.B`count(*)::int`}).from(n.storedLogs).where((0,t.b)((0,t.y)(n.storedLogs.resourceId,h),(0,t.B)(n.storedLogs.at,s))).groupBy(n.storedLogs.resourceId)]):[[],[]],w=new Map(k.map(e=>[e.id,e])),b=new Map(y.map(e=>[e.id,e.n])),A=await _();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,$.o)({...t,resourceId:e,causedBy:null},A);return{...t,title:a.title,message:a.message}}),resolved:g.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,$.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},A).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=w.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:b.get(e.id)??0}}),providers:m.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function R(e,a,r){await (0,i.f)().update(n.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(n.channels.kind,e))}async function H(e){let[t,a]=await Promise.all([M(e),(0,h.H)("email")]);return(0,f.J)({...t,siteUrl:(0,p.f)().SITE_URL},a)}async function P(e,a={}){let r=await (0,i.f)().select().from(n.settings).where((0,t.y)(n.settings.key,[b,A])),s=r.find(e=>e.key===b)?.value,o="string"==typeof s?s:null;if(!(0,f.A)(e,o))return;let d=(0,m.f)(),u=await I("email_digest");if(!d.resendKey||!d.digestFrom||!u?.row.enabled||!u.config?.to)return;let{resendKey:c,digestFrom:p}=d,g=u.config.to,h=(0,w.x)(e),y=await (0,f.K)(e,{lastSentDay:o,state:r.find(e=>e.key===A)?.value??null,build:a.build??(()=>H(e)),send:a.send??(e=>(0,k.f)(c,{from:p,to:g,...e,idempotencyKey:`digest-${h}`}))});y.acted&&(y.result&&await R("email_digest",y.result,e),y.state?await (0,i.f)().insert(n.settings).values({key:A,value:y.state}).onConflictDoUpdate({target:n.settings.key,set:{value:y.state,updatedAt:e}}):await (0,i.f)().delete(n.settings).where((0,t.u)(n.settings.key,A)),y.sentDay&&await (0,i.f)().insert(n.settings).values({key:b,value:y.sentDay}).onConflictDoUpdate({target:n.settings.key,set:{value:y.sentDay,updatedAt:e}}),y.event&&await (0,l.f)([{type:"system",kind:"warn",message:y.event.message,detail:y.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,N,"G",0,x,"P",0,R,"J",0,P,"Q",0,T,"M",0,E],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function u(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 c(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,u,"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,c],628448);var p=e.i(593111);let g="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:i.resources,a:i.accounts}).from(i.resources).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.resources.id,e),(0,t.u)(i.resources.kind,a),(0,t.M)(i.resources.goneAt))).limit(1);if(!s)return null;let d=(0,n.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 m(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return u("member",r.retryAfter);let i=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return i.allowed?null:u("target",i.retryAfter)}async function h(e,t,a){let n={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(i.settings).values({key:`${g}${e}`,value:n}).onConflictDoUpdate({target:i.settings.key,set:{value:n,updatedAt:new Date}})}async function k(e){let a=new Map,n=e.filter(l.f);if(0===n.length)return a;for(let e of(await (0,r.f)().select().from(i.settings).where((0,t.y)(i.settings.key,n.map(e=>`${g}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(g.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function y(e,t,r,i={}){if(!("audit"in e))return{ok:!1,error:e.message};let n="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=n?n.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:n?"err":"ok",message:`${i.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:c(l)}:{}})}catch{console.warn("audit event failed")}if(!n||"scope"===n.kind)try{await h(r,n?"denied":"ok")}catch{console.warn("access write failed")}return!1!==i.refresh&&(0,a.refresh)(),n?{ok:!1,error:n.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,h,"q",0,m,"f",0,k],472832)},224382,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 i(e,n,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:n.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,i],224382);var n=e.i(220642),s=e.i(765359),o=e.i(218331),l=e.i(195191),d=e.i(298397);function u(e,t){return(0,o.M)(e,t)&&(0,o.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`}},p={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},g=[5,15,30,60];async function f(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!u(e,t.lastSentDay))return a;let r=(0,o.x)(e),i=t.state&&t.state.day===r?t.state:null;if(i?.stopped)return{...a,state:i};if(i&&i.attempts>0){let t=(g[i.attempts-1]??g[g.length-1])*6e4;if(i.lastAttemptAt&&e.getTime()-new Date(i.lastAttemptAt).getTime()<t)return{...a,state:i}}i??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let n=await t.send({subject:i.subject,html:i.html,text:i.text});if(n.ok)return{acted:!0,state:null,sentDay:r,event:null,result:n};let s=i.attempts+1,l="config"===n.kind||s>=5,d="config"===n.kind?`${n.error}. Fix it and the next digest goes out tomorrow.`:`${n.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:n,state:{...i,attempts:s,lastAttemptAt:e.toISOString(),stopped:l,lastError:n.error},event:l?{message:"Daily digest not sent",detail:d}:null}}e.s(["J",0,function(e,t="en"){let a=c[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,i=((e,t)=>{let{day:a,month:r}=(0,o.e)(e);return`${a} ${"id"===t?p[r]??r:r}`})(e.now,t),u=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,g=`Watchbell \xb7 ${i} \xb7 ${u}`,f=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),m=e.firing.map(e=>`${n.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,s.f)(e.ruleKey,e.message):e.message}`),h=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),k=f.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,l.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),y=e.providers.map(e=>`${e.label}: ${e.text}`),$=[`Watchbell \xb7 ${i}`,`${u} ${a.last24}`,"",a.stillHead,...m.length?m.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...h.length?h.map(e=>`- ${e}`):[a.noResolved],...k.length?["",a.appsHead,...k.map(e=>`- ${e}`)]:[],...y.length?["",a.providersHead,...y.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),w=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,n.H)(e)}</h3>`,v=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,n.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,n.H)(t)}</p>`,b=['<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,n.H)(i)}</h2>`,`<p style="margin:0;color:#596170">${(0,n.H)(`${u} ${a.last24}`)}</p>`,w(a.stillHead),v(m,a.noFiring),w(a.resolvedHead),v(h,a.noResolved),...k.length?[w(a.appsHead),v(k,"")]:[],...y.length?[w(a.providersHead),v(y,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,n.H)(r).replace(/"/g,"&quot;")}" style="color:#1f45c9">${(0,n.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,d.G)(g),html:(0,d.G)(b),text:(0,d.G)($)}},"A",0,u,"K",0,f],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 i(e="telegram"){return(await r())[e]}e.s(["H",0,i,"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,i,n={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (n.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":i.idempotencyKey},body:JSON.stringify({from:i.from,to:[i.to],subject:i.subject,html:i.html,text:i.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,i,n,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}/${i}`,{...n,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 i(e,t,a,n={}){let s="number"==typeof n.replyTo&&Number.isSafeInteger(n.replyTo)&&n.replyTo>0?{reply_parameters:{message_id:n.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},...n.replyMarkup?{reply_markup:n.replyMarkup}:{},...s})},n.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,i,"z",0,r])}]})();
12
+ 👉 ${k(e)}`:""}`,`**Watchbell**: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
13
+ ${i}`,$)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),r=e.i(105954),a=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:r.z.string().min(32),CRON_SECRET:r.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:r.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:r.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let r=e.lastTraffic??e.trackedSince;return t.getTime()-r.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let r=await (0,a.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of r){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,r,i){try{let s=await (0,a.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:a,r:n,s:l,a:d}]of s.entries()){let c=r-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(a.lastKeepAliveAt&&e.getTime()-a.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active/${n.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active: ${y(e)}`)}}async function w(e,r,o,l,c,h,m){let y=(0,u.k)(u.B,r?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,a.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,a.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,r.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,a.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,r,l=1/0){let d=r.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,a.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=r.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:v.get(l.accountId),T=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let E=u();if(E<250)return;await (0,a.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let j=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!j)continue;let C=await (0,g.G)(j,l.ref,{timeoutMs:Math.min(5e3,E)});C.ok?(y||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===C.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===C.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(C.error)}]))}catch(e){console.warn("auto-restore failed:",y(e))}}async function T(e,r,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",r);if(l)return{ok:!1,error:l};let d=await (0,o.p)(r,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,a.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,r)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,a.f)().insert(n.keepActive).values({resourceId:r,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:r}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:r}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,$,"G",0,function(e,t,r){return!1===t.get(r)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(518899),n=e.i(924924),i=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),h=e.i(224382),f=e.i(201162),g=e.i(973990),m=e.i(600273),k=e.i(968068),y=e.i(695811),$=e.i(633974),w=e.i(76012),b=e.i(298397),v=e.i(218331),A=e.i(146394);let T="digest.lastSentDay",S="digest.state";async function I(e){let[r]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.channels.kind,e)).limit(1);if(!r)return null;try{return{row:r,config:JSON.parse((0,o.K)({ciphertext:r.configCiphertext,iv:r.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function x(){let e=(0,k.f)(),[t,r,a,n]=await Promise.all([I("telegram"),I("discord"),I("webhook"),I("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),r?.row.enabled&&r.config?.url&&i.add("discord"),a?.row.enabled&&a.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,p.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,w.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,f.E)(a.config,(0,f.J)(o,l??[],new Date,s)):"smtp"===i?(0,g.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",`${o}
14
+
15
+ ${s}`):(0,h.f)(r.config.url,o),configured:i}}async function D(){let e=(0,k.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function E(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",C=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function N(e,t,r){let s=e.filter(e=>C.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:r.getTime()}])),l=r.getTime()-6048e5,d=a.B`case when jsonb_typeof(${i.settings.value}) = 'object' then ${i.settings.value} else '{}'::jsonb end`;await (0,n.f)().insert(i.settings).values({key:j,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:a.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
16
+ where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:r}})}async function _(e){if(!e||!C.test(e))return null;try{let[r]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,j)).limit(1),a=r?.value&&"object"==typeof r.value?r.value[e]:null;return"number"==typeof a?.m&&Number.isSafeInteger(a.m)&&a.m>0?a.m:null}catch{return null}}let M=()=>(0,d.f)().catch(()=>b.a);async function R(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),h=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels}).from(i.alerts).innerJoin(i.alertRules,(0,t.u)(i.alertRules.key,i.alerts.ruleKey)).where((0,t.b)((0,t.E)(i.alerts.pending),a.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,r.M)(i.alerts.pendingSince)).limit(50);if(!h.length)return{sent:0,dropped:0};let f=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((d=h.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,d),(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)),g=h.filter(e=>f.has(e.a.id));if(!g.length)return{sent:0,dropped:0};let{send:m,configured:k}=l.sender??await x(),$=new Set(g.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[w,v]=await Promise.all([M(),(0,y.B)()]),A=new Set;for(let r of["telegram","discord","webhook","smtp"]){if(!k.has(r))continue;let a=g.filter(e=>e.channels.includes(r)&&!$.has(e.a.id));if(!a.length)continue;let o=a.map(({a:e})=>{let t="telegram"===r?e:(0,b.o)(e,w);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,"webhook"===r?"en":"smtp"===r?v.email:v[r]),d=await m(r,(0,b.G)("telegram"===r?l.telegram:l.discord),"webhook"===r?o.map(e=>({...e,title:(0,b.G)(e.title),message:(0,b.G)(e.message)})):void 0);await (0,n.f)().update(i.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(i.channels.kind,r)),d.ok&&a.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===r&&d.messageId&&await N(a.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let T=0,S=0,I=[];for(let{a:r,channels:a}of g){let s=a.some(e=>k.has(e)),o=null!==r.pendingSince&&e.getTime()-r.pendingSince.getTime()>18e5;A.has(r.id)?(T++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===r.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,r.id))):$.has(r.id)||!s||o?(S++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,r.id))):I.push(r.id)}return I.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,I)),{sent:T,dropped:S}}async function P(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=a.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,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,c.s)(o))).orderBy(l,(0,r.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:a.B`count(*)::int`}).from(i.alerts).where((0,t.B)(i.alerts.startedAt,s)),(0,n.f)().select({ruleKey:i.alerts.ruleKey,title:i.alerts.title,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt,resolvedAt:i.alerts.resolvedAt}).from(i.alerts).where((0,t.b)((0,t.E)(i.alerts.resolvedAt),(0,t.B)(i.alerts.resolvedAt,s))).orderBy((0,r.A)(i.alerts.resolvedAt)).limit(20),(0,n.f)().select({id:i.resources.id,name:i.resources.name}).from(i.resources).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt))).orderBy(i.resources.name).limit(A.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,y]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:a.B`count(*)::int`,bad:a.B`(count(*) filter (where not ${i.checks.ok}))::int`}).from(i.checks).innerJoin(i.monitors,(0,t.u)(i.monitors.id,i.checks.monitorId)).where((0,t.b)((0,t.y)(i.monitors.resourceId,m),(0,t.B)(i.checks.at,s),(0,t.u)(i.checks.inMaintenance,!1))).groupBy(i.monitors.resourceId),(0,n.f)().select({id:i.storedLogs.resourceId,n:a.B`count(*)::int`}).from(i.storedLogs).where((0,t.b)((0,t.y)(i.storedLogs.resourceId,m),(0,t.B)(i.storedLogs.at,s))).groupBy(i.storedLogs.resourceId)]):[[],[]],$=new Map(k.map(e=>[e.id,e])),w=new Map(y.map(e=>[e.id,e.n])),v=await M();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let r=(0,b.o)({...t,resourceId:e,causedBy:null},v);return{...t,title:r.title,message:r.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,b.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},v).title,took:function(e,t){let r=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(r<60)return`${r} min`;let a=Math.floor(r/60);return a<24?`${a} h ${r%60} min`:`${Math.floor(a/24)} d ${a%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=$.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function H(e,r,a){await (0,n.f)().update(i.channels).set(r.ok?{lastSentAt:a,lastError:null}:{lastError:r.error}).where((0,t.u)(i.channels.kind,e))}async function U(e){let[t,r]=await Promise.all([P(e),(0,y.H)("email")]);return(0,m.J)({...t,siteUrl:(0,p.f)().SITE_URL},r)}async function O(e,r={}){let a=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[T,S])),s=a.find(e=>e.key===T)?.value,o="string"==typeof s?s:null;if(!(0,m.A)(e,o))return;let d=(0,k.f)(),c=await I("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,v.x)(e),g=await (0,m.K)(e,{lastSentDay:o,state:a.find(e=>e.key===S)?.value??null,build:r.build??(()=>U(e)),send:r.send??(e=>(0,$.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await H("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:S,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,S)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:T,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,R,"G",0,E,"P",0,H,"J",0,O,"Q",0,D,"M",0,_],483100)},472832,628448,e=>{var t=e.i(875225),r=e.i(665044),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,r){if(!(0,l.f)(e))return null;let[s]=await (0,a.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,r),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,r){let a=await (0,p.f)(d.t.providerAction,e);if(!a.allowed)return c("member",a.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${r}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,r){let i={write:t,at:new Date().toISOString(),...r?{scope:r}:{}};await (0,a.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let r=new Map,i=e.filter(l.f);if(0===i.length)return r;for(let e of(await (0,a.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&r.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return r}async function y(e,t,a,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(a,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,r.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),r=e.i(77193);let a=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(a.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,a,n={}){let s,l;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let r=(0,o._)(t);return"scheme"===r?"Use an https:// address without a user name or password in it.":"blocked"===r?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(a),h=String(Math.floor(Date.parse(a.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,r,a){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:r.toISOString(),text:e.slice(0,4e3),link:a,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456);let f=[465,587,2525],g=h.z.email();class m{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let r=this.waiters.shift();r?r(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
17
+ `)}}class k extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,a,n,l={}){let d,c,h;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys((c={},h=e.host.trim().toLowerCase(),/^[a-z0-9.-]{3,253}$/.test(h)&&h.includes(".")?(0,o.N)(h)&&(c.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):c.host="Enter the server name, for example smtp.office365.com.",!f.includes(e.port)&&(c.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(c.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(c.pass="Enter the password or app password."),!g.safeParse(e.from.trim()).success&&(c.from="Enter the address the mail comes from."),!g.safeParse(e.to.trim()).success&&(c.to="Enter the address that gets the alerts."),c)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let $=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))($);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 w=465===e.port,b=null,v=new Promise((e,t)=>setTimeout(()=>t(new k("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),A=async()=>{var t,r,s,o;let c,h;try{b=await (l.connect??((e,t,r,a)=>new Promise((n,i)=>{let s=a?p.default.connect({host:e,port:t,servername:r}):u.default.connect({host:e,port:t});s.once(a?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,$,w)}catch{throw new k(`Couldn't connect to ${$}:${e.port}.`,"transient")}let f=new m(b),g=async(e,t,r="config")=>{let a=await f.next();if(!e.includes(a.code))throw new k(`The mail server refused ${t} (${a.code}).`,a.code>=400&&a.code<500?"transient":r);return a};await g([220],"the connection","transient"),f.send("EHLO watchbell");let y=await g([250],"EHLO");if(!w){if(!/^250[- ]STARTTLS\b/im.test(y.text))throw new k("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");f.send("STARTTLS"),await g([220],"STARTTLS"),b=await (l.upgrade??((e,t)=>new Promise((r,a)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>r(n)),n.once("error",a)})))(b,$),f.attach(b),f.send("EHLO watchbell"),y=await g([250],"EHLO after STARTTLS")}f.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await g([235],"the user name or password"),f.send(`MAIL FROM:<${e.from.trim()}>`),await g([250],"the sender address"),f.send(`RCPT TO:<${e.to.trim()}>`),await g([250,251],"the recipient address"),f.send("DATA"),await g([354],"the message"),b.write(`${(t=e,r=a,s=n,o=new Date,h=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: <${t.to.trim()}>`,`Subject: ${(c=r.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(c)?c:`=?UTF-8?B?${Buffer.from(c,"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","",h].join("\r\n"))}\r
18
+ .\r
19
+ `),await g([250],"the message"),f.send("QUIT"),await Promise.race([f.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([A(),v]),{ok:!0}}catch(e){return e instanceof k?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{b?.destroy()}}e.s(["f",0,y],973990);var $=e.i(220642),w=e.i(765359),b=e.i(218331),v=e.i(195191),A=e.i(298397);function T(e,t){return(0,b.M)(e,t)&&(0,b.z)(e).hour>=7}let S={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`}},I={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},x=[5,15,30,60];async function D(e,t){let r={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!T(e,t.lastSentDay))return r;let a=(0,b.x)(e),n=t.state&&t.state.day===a?t.state:null;if(n?.stopped)return{...r,state:n};if(n&&n.attempts>0){let t=(x[n.attempts-1]??x[x.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...r,state:n}}n??={day:a,...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:a,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 r=S[t],a=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:r,month:a}=(0,b.e)(e);return`${r} ${"id"===t?I[a]??a:a}`})(e.now,t),i=`${e.firing.length} ${r.firing}, ${e.opened} ${r.opened}, ${e.resolved.length} ${r.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=>`${$.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,w.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${r.after} ${r.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?r.noChecks:`${(0,v.C)(e.uptime)} ${r.up}`}, ${r.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${r.last24}`,"",r.stillHead,...l.length?l.map(e=>`- ${e}`):[r.noFiring],"",r.resolvedHead,...d.length?d.map(e=>`- ${e}`):[r.noResolved],...c.length?["",r.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",r.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${r.open}: ${a}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,$.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,$.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,$.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,$.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,$.H)(`${i} ${r.last24}`)}</p>`,h(r.stillHead),f(l,r.noFiring),h(r.resolvedHead),f(d,r.noResolved),...c.length?[h(r.appsHead),f(c,"")]:[],...u.length?[h(r.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,$.H)(a).replace(/"/g,"&quot;")}" style="color:#2f4372">${(0,$.H)(r.open)}</a></p>`,"</div>"].join("");return{subject:(0,A.G)(s),html:(0,A.G)(g),text:(0,A.G)(p)}},"A",0,T,"K",0,D],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",r=e.RESEND_API_KEY?.trim()??"",a=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:r.startsWith("re_")?r:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(a)?a:null}}])},695811,e=>{var t=e.i(960049);function r(e){let t=e&&"object"==typeof e?e:null,r=t?t.lang:e,a=e=>{var a;return"string"==typeof(a=t&&e in t?t[e]:r)&&"id"===a.trim().toLowerCase()?"id":"en"};return{telegram:a("telegram"),discord:a("discord"),email:a("email")}}async function a(){try{return r(await (0,t.l)())}catch{return r(null)}}async function n(e="telegram"){return(await a())[e]}e.s(["H",0,n,"B",0,a,"t",0,function(e,t,r){return e[t][r]}])},633974,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i={}){let s;if((0,r.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,a])},76012,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i,s,o=5e3){let l;if((0,r.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,r,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 a(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:r,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,a])}]})();
15
20
 
16
21
  //# sourceMappingURL=src_lib_1en6omqx66g9d._.js.map
@@ -1,16 +1,21 @@
1
- (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let a=e=>`${e} hari`,r=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${a(e)}.`,i={"the job reported a failure":"job-nya lapor gagal","started but didn't finish":"udah mulai tapi nggak selesai","never pinged":"belum pernah ping","no ping in time":"nggak ada ping tepat waktu"},n={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={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)=>r(a,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,a)=>r(a,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,a,r,i)=>`${t} pakai ${a} MB dari ${r} MB (${i}%).`]],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,i)=>`${t} udah baca ${a} dari ${r} dokumen hari ini (${i}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${a(t)}. Supabase nge-pause project free setelah sekitar 7 hari.`]],DnsProxiedToVercel:[[/^(.+) points to Vercel through the Cloudflare proxy\. Vercel recommends DNS only\.$/,(e,t)=>`${t} ngarah ke Vercel lewat proxy Cloudflare. Vercel nyaranin DNS only.`]],DbQuotaHigh:[[/^(.+): (.+) at ([\d,]+)% of the free plan\.$/,(e,t,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,i)=>r(i,`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=>n[e])}): ${r.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],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,i,s,o)=>`Next.js ${t} punya ${a} kerentanan yang diketahui (${n[r]}), ${i?`udah di-fix di ${i}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[a,r]of Object.hasOwn(s,e)?s[e]:[]){let e=a.exec(t);if(e)return r(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={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"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},c=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),p={critical:0,warning:1,info:2};function g(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 f(e,t,a,r,i,n){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[r],l=r.length+i.length+40;for(let e=0;e<s.length;e++){let r=a(s[e]);if(l+r.length+1>t){o.push(n(s.length-e));break}o.push(r),l+=r.length+1}return o.push(i),o.join("\n").slice(0,t)}let m={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,a,r,i="en"){let n=`${r.replace(/\/+$/,"")}/alerts`,s=u[i],p=e=>`${l[i][e.kind]} \xb7 ${d[i][e.severity]} \xb7 `,h=e=>"id"===i?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let a=Object.hasOwn(m[t],e)?m[t][e]:void 0;return a?`${u[t].step}: ${a}`:null})(e.ruleKey,i),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
1
+ (()=>{"use strict";module.exports=[220642,765359,e=>{var t=e.i(218331);let r=e=>`${e} hari`,a=(e,t)=>0>Number(e)?`${t} udah habis.`:`${t} habis dalam ${r(e)}.`,n={"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"},i={critical:"kritis",high:"tinggi",moderate:"sedang",low:"rendah",unknown:"nggak diketahui"},s={MonitorDown:[[/^(.+): no ping for (\d+ (?:min|h|days?))\.$/,(e,t,r)=>`${t}: nggak ada ping selama ${r.replace(/^(\d+) min$/,"$1 menit").replace(/^(\d+) h$/,"$1 jam").replace(/^(\d+) days?$/,"$1 hari")}.`],[/^(.+): (the job reported a failure|started but didn't finish|never pinged|no ping in time)\.$/,(e,t,r)=>`${t}: ${n[r]}.`],[/^(.+) failed its check \((.*)\) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) returned no answer on (\d+) consecutive checks\.$/,(e,t,r)=>`${t}: ${r} cek gagal berturut-turut (nggak ada jawaban).`],[/^(.+) returned (HTTP \d+) on (\d+) consecutive checks\.$/,(e,t,r,a)=>`${t}: ${a} cek gagal berturut-turut (${r}).`],[/^(.+) answers again\.$/,(e,t)=>`${t} udah jawab lagi.`],[/^(\S+) moved to (\S+); MonitorDomainMoved takes over\.$/,(e,t,r)=>`${t} pindah ke ${r}; MonitorDomainMoved yang ambil alih.`]],MonitorDomainMoved:[[/^(\S+) is no longer a domain of (.+); production is on (\S+)\.$/,(e,t,r,a)=>`${t} udah bukan domain ${r}; production sekarang di ${a}.`],[/^The monitor checks (\S+), a domain of (.+)\.$/,(e,t,r)=>`Monitor ngecek ${t}, domain ${r}.`]],CollectorStale:[[/^The collector hasn't finished a run yet\.$/,()=>"Collector belum pernah selesai jalan."],[/^The last minute run finished ([\d,]+) min ago\.$/,(e,t)=>`Collector terakhir selesai jalan ${t} menit lalu.`]],HighLatency:[[/^p95 ([\d,]+) ms over the last 10 minutes \(limit ([\d,]+) ms\)\.$/,(e,t,r)=>`p95 ${t} ms selama 10 menit terakhir (batas ${r} ms).`]],DeploymentFailed:[[/^Production deployment \(no commit\) failed\.$/,()=>"Deploy production (tanpa commit) gagal."],[/^Production deployment (\S+) failed\.$/,(e,t)=>`Deploy production ${t} gagal.`]],DatabasePaused:[[/^Supabase project (.+) is paused\.$/,(e,t)=>`Project Supabase ${t} lagi di-pause.`]],CertExpiringSoon:[[/^The TLS certificate of (.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,`Sertifikat TLS ${t}`)]],DomainExpiringSoon:[[/^(.+) expires in (-?\d+) days?\.$/,(e,t,r)=>a(r,t)]],StorageAlmostFull:[[/^(.+) uses ([\d,]+) MB of ([\d,]+) MB \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} pakai ${r} MB dari ${a} MB (${n}%).`]],NeonComputeHigh:[[/^(.+) used ([\d,]+) of ([\d,]+) CU-hours this month\.$/,(e,t,r,a)=>`${t} udah pakai ${r} dari ${a} CU-hours bulan ini.`]],FirestoreQuotaHigh:[[/^(.+) hit a Firestore quota \(RESOURCE_EXHAUSTED\)\.$/,(e,t)=>`${t} kena kuota Firestore (RESOURCE_EXHAUSTED).`],[/^(.+) read ([\d,]+) of ([\d,]+) documents today \(([\d,]+)%\)\.$/,(e,t,r,a,n)=>`${t} udah baca ${r} dari ${a} dokumen hari ini (${n}%).`]],AutoPauseRisk:[[/^No API traffic for (\d+) days?\. Supabase pauses free projects after about 7 days\.$/,(e,t)=>`Nggak ada traffic API selama ${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,r,a)=>`${t}: ${r.replace(/^Rows read/,"baris dibaca").replace(/^Rows written/,"baris ditulis").replace(/^Commands/,"command").replace(/^usage$/,"pemakaian").replace(/ today\b/," hari ini").replace(/\bof ([^ ]+(?: [A-Z]+)?)\b/,"dari $1").replace(/ this month\b/," bulan ini").replace(/\(account\)/,"(akun)")} udah ${a}% dari kuota gratis.`]],ComputeHigh:[[/^(.+) compute is back under the limits\.$/,(e,t)=>`Compute ${t} udah balik di bawah batas.`],[/^(.+): ((?:CPU|RAM|disk|connections) .+)\.$/,(e,t,r)=>`${t}: ${r.replace(/ for (\d+) min/g," selama $1 menit").replace(/\(limit /g,"(batas ").replace(/\bconnections (\d+) of (\d+)/g,"koneksi $1 dari $2")}.`]],CredentialExpiring:[[/^Google Drive access was removed \(invalid_grant\)\. Reconnect it\.$/,()=>"Akses Google Drive dicabut (invalid_grant). Sambungin lagi ya."],[/^The (\S+) credential (.+) has expired\.$/,(e,t,r)=>`Credential ${t} ${r} udah kedaluwarsa.`],[/^The (\S+) credential (.+) expires in (-?\d+) days?\.$/,(e,t,r,n)=>a(n,`Credential ${t} ${r}`)]],VulnerableDependency:[[/^(.+) has no moderate, high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency sedang, tinggi atau kritis.`],[/^(.+) has no high or critical dependency advisories\.$/,(e,t)=>`${t} nggak punya advisory dependency tinggi atau kritis.`],[/^(\d+) vulnerable packages? \(([^)]*)\): (.*)$/,(e,t,r,a)=>`${t} paket rentan (${r.replace(/\b(critical|high|moderate|low|unknown)\b/g,e=>i[e])}): ${a.replace(/ \(no fix yet\)/g," (belum ada fix)").replace(/, \+(\d+) more\.$/,", +$1 lagi.")}`]],FrameworkVulnerable:[[/^(.+) runs Next\.js (.+) with no known advisories\.$/,(e,t,r)=>`${t} pakai Next.js ${r} tanpa advisory yang diketahui.`],[/^Next\.js (.+) has (\d+) known vulnerabilit(?:y|ies) \((critical|high|moderate|low|unknown)\), (?:fixed in (\S+)(?: \((one fix needs|some fixes need) Next\.js (\d+)\))?|no fix yet)\.$/,(e,t,r,a,n,s,o)=>`Next.js ${t} punya ${r} kerentanan yang diketahui (${i[a]}), ${n?`udah di-fix di ${n}${s?` (${"one fix needs"===s?"satu fix":"sebagian fix"} butuh Next.js ${o})`:""}`:"belum ada fix"}.`]]};function o(e,t){for(let[r,a]of Object.hasOwn(s,e)?s[e]:[]){let e=r.exec(t);if(e)return a(...e)}return t}e.s(["f",0,o],765359);let l={en:{open:"FIRING",repeat:"REPEAT",resolve:"RESOLVED"},id:{open:"MUNCUL",repeat:"ULANG",resolve:"PULIH"}},d={en:{critical:"critical",warning:"warning",info:"info"},id:{critical:"kritis",warning:"peringatan",info:"info"}},c={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"},id:{firing:"aktif",resolved:"pulih",since:"sejak",open:"Buka Alerts",more:"lagi di halaman Alerts",causedBy:"gara-gara",incident:"lagi ada insiden",step:"Langkah"}},u=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),p={critical:0,warning:1,info:2};function h(e,t){let r=e.filter(e=>"resolve"!==e.kind).length,a=e.length-r;return[r?`${r} ${c[t].firing}`:"",a?`${a} ${c[t].resolved}`:""].filter(Boolean).join(", ")}function f(e,t,r,a,n,i){let s=[...e].sort((e,t)=>("resolve"===e.kind)-("resolve"===t.kind)||p[e.severity]-p[t.severity]),o=[a],l=a.length+n.length+40;for(let e=0;e<s.length;e++){let a=r(s[e]);if(l+a.length+1>t){o.push(i(s.length-e));break}o.push(a),l+=a.length+1}return o.push(n),o.join("\n").slice(0,t)}let g={en:{CollectorStale:"the watchdog already runs the collector itself every 5 minutes. Check the job on cron-job.org and the latest Vercel deploy.",DomainExpiringSoon:"renew the domain at its registrar; Watchbell can't pay for it.",StorageAlmostFull:"delete old data or shorten retention in that database; the free tier can't add storage.",NeonComputeHigh:"cut queries or make Neon auto-suspend sooner; the quota resets at the start of the month.",FirestoreQuotaHigh:"cut Firestore reads (cache in the app); the quota resets daily.",DbQuotaHigh:"cut queries to that database until its quota resets.",ComputeHigh:"check the Pool card on the Supabase page (idle connections close automatically at 10 of 15); for CPU or disk, look for heavy queries.",DnsProxiedToVercel:"turn off the proxy (orange cloud) for that record in Cloudflare; Vercel needs DNS only.",CredentialExpiring:"create a new token and replace it in Settings → Connections before it expires.",FrameworkVulnerable:"if the app's GitHub repository isn't linked yet, link it on the app page to get an update PR from the office; or update next yourself.",MonitorDomainMoved:"press Update monitor on the Uptime page (or approve the proposal) so the monitor checks the new domain; the app itself is fine."},id:{CollectorStale:"watchdog udah jalanin collector sendiri tiap 5 menit. Cek job di cron-job.org dan deploy terakhir di Vercel.",DomainExpiringSoon:"perpanjang domain di registrar-nya, Watchbell nggak bisa bayar.",StorageAlmostFull:"hapus data lama atau pendekin retensi di database itu, free tier nggak bisa nambah storage.",NeonComputeHigh:"kurangin query atau percepat auto-suspend Neon, kuota reset awal bulan.",FirestoreQuotaHigh:"kurangin read Firestore (cache di app), kuota reset tiap hari.",DbQuotaHigh:"kurangin query ke database itu sampai kuotanya reset.",ComputeHigh:"cek kartu Pool di halaman Supabase (koneksi nganggur ditutup otomatis di 10 dari 15), kalau CPU/disk cari query yang berat.",DnsProxiedToVercel:"matiin proxy (awan oranye) record itu di Cloudflare, Vercel butuh DNS only.",CredentialExpiring:"bikin token baru dan ganti di Settings → Connections sebelum habis.",FrameworkVulnerable:"kalau repo GitHub app-nya belum di-link, link di halaman app biar office bikinin PR update; atau update next sendiri.",MonitorDomainMoved:"pencet Update monitor di halaman Uptime (atau approve usulannya) biar monitor ngecek domain baru; app-nya sendiri aman."}};e.s(["Z",0,d,"l",0,function(e,r,a,n="en"){let i=`${a.replace(/\/+$/,"")}/alerts`,s=c[n],p=e=>`${l[n][e.kind]} \xb7 ${d[n][e.severity]} \xb7 `,m=e=>"id"===n?o(e.ruleKey,e.message):e.message,k=e=>"resolve"===e.kind?null:((e,t="en")=>{let r=Object.hasOwn(g[t],e)?g[t][e]:void 0;return r?`${c[t].step}: ${r}`:null})(e.ruleKey,n),y=e=>[e.causedBy?`${s.causedBy} ${e.causedBy}`:"",e.provider?`${e.provider} ${s.incident}`:""].filter(Boolean).join(" · "),$=e=>`
2
2
  +${e} ${s.more}`;return{telegram:f(e,4096,e=>`
3
- <b>${p(e)}${c(e.ruleKey)} \xb7 ${c(e.title)}</b>
4
- ${c(h(e))}${y(e)?`
5
- <i>${c(y(e))}</i>`:""}${k(e)?`
6
- 👉 ${c(k(e))}`:""}
7
- ${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${g(e,i)} \xb7 ${(0,t.U)(a)} ${(0,t.J)(a)}`,`
8
- <a href="${c(n)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
3
+ <b>${p(e)}${u(e.ruleKey)} \xb7 ${u(e.title)}</b>
4
+ ${u(m(e))}${y(e)?`
5
+ <i>${u(y(e))}</i>`:""}${k(e)?`
6
+ 👉 ${u(k(e))}`:""}
7
+ ${s.since} ${(0,t.U)(e.startedAt)} ${(0,t.J)(e.startedAt)}`,`<b>Watchbell</b>: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
8
+ <a href="${u(i)}">${s.open}</a>`,$),discord:f(e,2e3,e=>`
9
9
  **${p(e)}${e.ruleKey} \xb7 ${e.title.replace(/[*_`~|\[\]<>]/g,"")}**
10
- ${h(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
10
+ ${m(e).replace(/[*_`~|\[\]<>]/g,"")}${y(e)?`
11
11
  _${y(e)}_`:""}${k(e)?`
12
- 👉 ${k(e)}`:""}`,`**Watchbell**: ${g(e,i)} \xb7 ${(0,t.U)(a)} ${(0,t.J)(a)}`,`
13
- ${n}`,$)}},"H",0,c],220642)},895625,e=>{var t=e.i(971724),a=e.i(105954),r=e.i(140561),i=e.i(600205),n=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([i.z.literal(""),a.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:r.z.union([i.z.literal(""),a.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,n.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),i=e.i(618916),n=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 u(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,u,"v",0,d],11827);var c=e.i(326003),p=e.i(843448),g=e.i(547499),f=e.i(628448),m=e.i(342833);async function h(e){let a=await (0,r.f)().select({data:i.snapshots.data}).from(i.resources).innerJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.resources.accountId,e),(0,t.u)(i.resources.kind,"supabase_project"))),n=new Map;for(let{data:e}of a){let t=(0,c.k)(c.B,e);t.orgSlug&&void 0!==t.freeOrg&&n.set(t.orgSlug,t.freeOrg)}return n}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,a,n){try{let s=await (0,r.f)().select({k:i.keepActive,r:i.resources,s:i.snapshots,a:i.accounts}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).leftJoin(i.snapshots,(0,t.u)(i.snapshots.resourceId,i.resources.id)).where((0,t.b)((0,t.u)(i.keepActive.keep,!0),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt),(0,t.u)(i.accounts.status,"ok"))).limit(100),o=(0,g.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:r,r:i,s:l,a:d}]of s.entries()){let u=a-Date.now()-500;if(u<250)return void n.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(i,l,d,e,o,u,n)}catch(e){console.warn("keep-active failed:",y(e)),n.push(`keep-active/${i.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),n.push(`keep-active: ${y(e)}`)}}async function w(e,a,o,l,u,g,h){let y=(0,c.k)(c.B,a?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),v=(0,n.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},u);if(!v)return void h.push(`keep-active/${o.label}: credential can't be read`);let b=await (0,m.i)(v,e.externalId,{timeoutMs:Math.min(5e3,g)});if(b.ok)await (0,r.f)().update(i.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(i.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"===b.kind?"This token can't run the read-only query (Database read).":(0,f.S)(b.error)}]),h.push(`keep-active/${e.name}: ${b.error}`)}}async function v(e){let[n]=await (0,r.f)().select({at:i.events.at}).from(i.events).where((0,t.b)((0,t.u)(i.events.reason,"Action"),(0,t.u)(i.events.resourceId,e),(0,t.u)(i.events.type,"action"),(0,t.y)(i.events.kind,["ok","err"]),(0,t.E)(i.events.actorUserId),(0,t.D)(i.events.message,`${l}%`))).orderBy((0,a.A)(i.events.at)).limit(1);return n?.at??null}async function b(){return(await (0,r.f)().select({id:i.keepActive.resourceId}).from(i.keepActive).where((0,t.u)(i.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),c=()=>l-Date.now()-500;if(!d.length||250>c())return;let k=await (0,r.f)().select({k:i.keepActive,id:i.resources.id,name:i.resources.name,ref:i.resources.externalId,accountId:i.resources.accountId,label:i.accounts.label,lastTestAt:i.accounts.lastTestAt,ciphertext:i.accounts.credentialCiphertext,iv:i.accounts.credentialIv}).from(i.keepActive).innerJoin(i.resources,(0,t.u)(i.resources.id,i.keepActive.resourceId)).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.keepActive.autoRestore,!0),(0,t.y)(i.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(i.resources.kind,"supabase_project"),(0,t.M)(i.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,b=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 h(l.accountId);w.set(l.accountId,e),b.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:b.get(l.accountId),I=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),T=I?.write==="denied"&&new Date(I.at).getTime()>S,x=u({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:T},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 j=await v(l.id);if(j&&j.getTime()>l.k.updatedAt.getTime())continue;let D=c();if(D<250)return;await (0,r.f)().update(i.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(i.keepActive.resourceId,l.id));let C=(0,n.V)({ciphertext:l.ciphertext,iv:l.iv},(0,g.f)().OPS_ENCRYPTION_KEY);if(!C)continue;let E=await (0,m.G)(C,l.ref,{timeoutMs:Math.min(5e3,D)});E.ok?(y||b.set(l.accountId,b.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:",y(e))}}async function I(e,a,n=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[u]=await (0,r.f)().select({last:i.keepActive.lastKeepAliveAt}).from(i.keepActive).where((0,t.u)(i.keepActive.resourceId,a)).limit(1);if(u?.last&&s.getTime()-u.last.getTime()<72e6)return n({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let c=d.resource.name,p=await (0,m.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,r.f)().insert(i.keepActive).values({resourceId:a,lastKeepAliveAt:s}).onConflictDoUpdate({target:i.keepActive.resourceId,set:{lastKeepAliveAt:s}}),n(p.ok?{done:!0,message:`Keep-alive sent to ${c}.`,audit:{message:`Keep-alive sent \xb7 ${c}`,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 ${c}`,resourceId:a}},e,d.account.id)}e.s(["m",0,h,"z",0,A,"g",0,b,"v",0,I,"V",0,$,"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(875225),a=e.i(349129),r=e.i(518899),i=e.i(924924),n=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),u=e.i(111970),c=e.i(762504),p=e.i(547499),g=e.i(224382),f=e.i(600273),m=e.i(968068),h=e.i(695811),k=e.i(633974),y=e.i(76012),$=e.i(298397),w=e.i(218331),v=e.i(146394);let b="digest.lastSentDay",A="digest.state";async function I(e){let[a]=await (0,i.f)().select().from(n.channels).where((0,t.u)(n.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,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function S(){let e=(0,m.f)(),[t,a]=await Promise.all([I("telegram"),I("discord")]),r=new Set;return e.telegramToken&&t?.row.enabled&&t.config?.chatId&&r.add("telegram"),a?.row.enabled&&a.config?.url&&r.add("discord"),{send:(r,i)=>"telegram"===r?(0,y.I)(e.telegramToken,t.config.chatId,i):(0,g.f)(a.config.url,i),configured:r}}async function T(){let e=(0,m.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function x(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",D=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function C(e,t,a){let s=e.filter(e=>D.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(${n.settings.value}) = 'object' then ${n.settings.value} else '{}'::jsonb end`;await (0,i.f)().insert(n.settings).values({key:j,value:o}).onConflictDoUpdate({target:n.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
14
- where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:a}})}async function E(e){if(!e||!D.test(e))return null;try{let[a]=await (0,i.f)().select({value:n.settings.value}).from(n.settings).where((0,t.u)(n.settings.key,j)).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 _=()=>(0,d.f)().catch(()=>$.a);async function N(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let c=await (0,u.I)(),g=await (0,i.f)().select({a:n.alerts,channels:n.alertRules.channels}).from(n.alerts).innerJoin(n.alertRules,(0,t.u)(n.alertRules.key,n.alerts.ruleKey)).where((0,t.b)((0,t.E)(n.alerts.pending),r.B`(${n.alerts.pending} = 'resolve') = (${n.alerts.resolvedAt} is not null)`,(0,u.s)(c))).orderBy((0,a.M)(n.alerts.pendingSince)).limit(50);if(!g.length)return{sent:0,dropped:0};let f=new Set((await (0,i.f)().update(n.alerts).set({claimedAt:e}).where((d=g.map(e=>e.a.id),(0,t.b)((0,t.y)(n.alerts.id,d),(0,t.E)(n.alerts.pending),(0,t.F)((0,t.M)(n.alerts.claimedAt),(0,t.S)(n.alerts.claimedAt,new Date(e.getTime()-12e4)))))).returning({id:n.alerts.id})).map(e=>e.id)),m=g.filter(e=>f.has(e.a.id));if(!m.length)return{sent:0,dropped:0};let{send:k,configured:y}=l.sender??await S(),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)),[v,b]=await Promise.all([_(),(0,h.B)()]),A=new Set;for(let a of["telegram","discord"]){if(!y.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})=>{let t="telegram"===a?e:(0,$.o)(e,v);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,b[a]),d=await k(a,(0,$.G)("telegram"===a?l.telegram:l.discord));await (0,i.f)().update(n.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(n.channels.kind,a)),d.ok&&r.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===a&&d.messageId&&await C(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,T=0,x=[];for(let{a,channels:r}of m){let s=r.some(e=>y.has(e)),o=null!==a.pendingSince&&e.getTime()-a.pendingSince.getTime()>18e5;A.has(a.id)?(I++,await (0,i.f)().update(n.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===a.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(n.alerts.id,a.id))):w.has(a.id)||!s||o?(T++,await (0,i.f)().update(n.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(n.alerts.id,a.id))):x.push(a.id)}return x.length&&await (0,i.f)().update(n.alerts).set({claimedAt:null}).where((0,t.y)(n.alerts.id,x)),{sent:I,dropped:T}}async function M(e){let s=new Date(e.getTime()-864e5),o=await (0,u.I)(),l=r.B`case ${n.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,g,f,m]=await Promise.all([(0,i.f)().select({ruleKey:n.alerts.ruleKey,severity:n.alerts.severity,title:n.alerts.title,message:n.alerts.message,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt}).from(n.alerts).where((0,t.b)((0,t.M)(n.alerts.resolvedAt),(0,u.s)(o))).orderBy(l,(0,a.A)(n.alerts.startedAt)).limit(50),(0,i.f)().select({n:r.B`count(*)::int`}).from(n.alerts).where((0,t.B)(n.alerts.startedAt,s)),(0,i.f)().select({ruleKey:n.alerts.ruleKey,title:n.alerts.title,resourceId:n.alerts.resourceId,startedAt:n.alerts.startedAt,resolvedAt:n.alerts.resolvedAt}).from(n.alerts).where((0,t.b)((0,t.E)(n.alerts.resolvedAt),(0,t.B)(n.alerts.resolvedAt,s))).orderBy((0,a.A)(n.alerts.resolvedAt)).limit(20),(0,i.f)().select({id:n.resources.id,name:n.resources.name}).from(n.resources).where((0,t.b)((0,t.u)(n.resources.kind,"app"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt))).orderBy(n.resources.name).limit(v.O.apps),(0,c.h)(e)]),h=f.map(e=>e.id),[k,y]=h.length?await Promise.all([(0,i.f)().select({id:n.monitors.resourceId,total:r.B`count(*)::int`,bad:r.B`(count(*) filter (where not ${n.checks.ok}))::int`}).from(n.checks).innerJoin(n.monitors,(0,t.u)(n.monitors.id,n.checks.monitorId)).where((0,t.b)((0,t.y)(n.monitors.resourceId,h),(0,t.B)(n.checks.at,s),(0,t.u)(n.checks.inMaintenance,!1))).groupBy(n.monitors.resourceId),(0,i.f)().select({id:n.storedLogs.resourceId,n:r.B`count(*)::int`}).from(n.storedLogs).where((0,t.b)((0,t.y)(n.storedLogs.resourceId,h),(0,t.B)(n.storedLogs.at,s))).groupBy(n.storedLogs.resourceId)]):[[],[]],w=new Map(k.map(e=>[e.id,e])),b=new Map(y.map(e=>[e.id,e.n])),A=await _();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let a=(0,$.o)({...t,resourceId:e,causedBy:null},A);return{...t,title:a.title,message:a.message}}),resolved:g.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,$.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},A).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=w.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:b.get(e.id)??0}}),providers:m.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function R(e,a,r){await (0,i.f)().update(n.channels).set(a.ok?{lastSentAt:r,lastError:null}:{lastError:a.error}).where((0,t.u)(n.channels.kind,e))}async function H(e){let[t,a]=await Promise.all([M(e),(0,h.H)("email")]);return(0,f.J)({...t,siteUrl:(0,p.f)().SITE_URL},a)}async function P(e,a={}){let r=await (0,i.f)().select().from(n.settings).where((0,t.y)(n.settings.key,[b,A])),s=r.find(e=>e.key===b)?.value,o="string"==typeof s?s:null;if(!(0,f.A)(e,o))return;let d=(0,m.f)(),u=await I("email_digest");if(!d.resendKey||!d.digestFrom||!u?.row.enabled||!u.config?.to)return;let{resendKey:c,digestFrom:p}=d,g=u.config.to,h=(0,w.x)(e),y=await (0,f.K)(e,{lastSentDay:o,state:r.find(e=>e.key===A)?.value??null,build:a.build??(()=>H(e)),send:a.send??(e=>(0,k.f)(c,{from:p,to:g,...e,idempotencyKey:`digest-${h}`}))});y.acted&&(y.result&&await R("email_digest",y.result,e),y.state?await (0,i.f)().insert(n.settings).values({key:A,value:y.state}).onConflictDoUpdate({target:n.settings.key,set:{value:y.state,updatedAt:e}}):await (0,i.f)().delete(n.settings).where((0,t.u)(n.settings.key,A)),y.sentDay&&await (0,i.f)().insert(n.settings).values({key:b,value:y.sentDay}).onConflictDoUpdate({target:n.settings.key,set:{value:y.sentDay,updatedAt:e}}),y.event&&await (0,l.f)([{type:"system",kind:"warn",message:y.event.message,detail:y.event.detail,resourceId:null,reason:"DigestFailed",at:e}]))}e.s(["q",0,N,"G",0,x,"P",0,R,"J",0,P,"Q",0,T,"M",0,E],483100)},472832,628448,e=>{var t=e.i(875225),a=e.i(665044),r=e.i(924924),i=e.i(618916),n=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function u(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 c(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,u,"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,c],628448);var p=e.i(593111);let g="access.";async function f(e,a){if(!(0,l.f)(e))return null;let[s]=await (0,r.f)().select({r:i.resources,a:i.accounts}).from(i.resources).innerJoin(i.accounts,(0,t.u)(i.accounts.id,i.resources.accountId)).where((0,t.b)((0,t.u)(i.resources.id,e),(0,t.u)(i.resources.kind,a),(0,t.M)(i.resources.goneAt))).limit(1);if(!s)return null;let d=(0,n.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 m(e,t,a){let r=await (0,p.f)(d.t.providerAction,e);if(!r.allowed)return u("member",r.retryAfter);let i=await (0,p.f)(d.t.actionTarget,`${t}:${a}`);return i.allowed?null:u("target",i.retryAfter)}async function h(e,t,a){let n={write:t,at:new Date().toISOString(),...a?{scope:a}:{}};await (0,r.f)().insert(i.settings).values({key:`${g}${e}`,value:n}).onConflictDoUpdate({target:i.settings.key,set:{value:n,updatedAt:new Date}})}async function k(e){let a=new Map,n=e.filter(l.f);if(0===n.length)return a;for(let e of(await (0,r.f)().select().from(i.settings).where((0,t.y)(i.settings.key,n.map(e=>`${g}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&a.set(e.key.slice(g.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return a}async function y(e,t,r,i={}){if(!("audit"in e))return{ok:!1,error:e.message};let n="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=n?n.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:n?"err":"ok",message:`${i.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:c(l)}:{}})}catch{console.warn("audit event failed")}if(!n||"scope"===n.kind)try{await h(r,n?"denied":"ok")}catch{console.warn("access write failed")}return!1!==i.refresh&&(0,a.refresh)(),n?{ok:!1,error:n.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,h,"q",0,m,"f",0,k],472832)},224382,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 i(e,n,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:n.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,i],224382);var n=e.i(220642),s=e.i(765359),o=e.i(218331),l=e.i(195191),d=e.i(298397);function u(e,t){return(0,o.M)(e,t)&&(0,o.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`}},p={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},g=[5,15,30,60];async function f(e,t){let a={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!u(e,t.lastSentDay))return a;let r=(0,o.x)(e),i=t.state&&t.state.day===r?t.state:null;if(i?.stopped)return{...a,state:i};if(i&&i.attempts>0){let t=(g[i.attempts-1]??g[g.length-1])*6e4;if(i.lastAttemptAt&&e.getTime()-new Date(i.lastAttemptAt).getTime()<t)return{...a,state:i}}i??={day:r,...await t.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let n=await t.send({subject:i.subject,html:i.html,text:i.text});if(n.ok)return{acted:!0,state:null,sentDay:r,event:null,result:n};let s=i.attempts+1,l="config"===n.kind||s>=5,d="config"===n.kind?`${n.error}. Fix it and the next digest goes out tomorrow.`:`${n.error} Gave up after ${s} attempts today.`;return{acted:!0,sentDay:null,result:n,state:{...i,attempts:s,lastAttemptAt:e.toISOString(),stopped:l,lastError:n.error},event:l?{message:"Daily digest not sent",detail:d}:null}}e.s(["J",0,function(e,t="en"){let a=c[t],r=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,i=((e,t)=>{let{day:a,month:r}=(0,o.e)(e);return`${a} ${"id"===t?p[r]??r:r}`})(e.now,t),u=`${e.firing.length} ${a.firing}, ${e.opened} ${a.opened}, ${e.resolved.length} ${a.resolved}`,g=`Watchbell \xb7 ${i} \xb7 ${u}`,f=[...e.apps].sort((e,t)=>(e.uptime??101)-(t.uptime??101)||t.errors-e.errors||e.name.localeCompare(t.name)),m=e.firing.map(e=>`${n.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,s.f)(e.ruleKey,e.message):e.message}`),h=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${a.after} ${a.took(e.took)})`),k=f.map(e=>`${e.name}: ${null===e.uptime?a.noChecks:`${(0,l.C)(e.uptime)} ${a.up}`}, ${a.errors(e.errors)}`),y=e.providers.map(e=>`${e.label}: ${e.text}`),$=[`Watchbell \xb7 ${i}`,`${u} ${a.last24}`,"",a.stillHead,...m.length?m.map(e=>`- ${e}`):[a.noFiring],"",a.resolvedHead,...h.length?h.map(e=>`- ${e}`):[a.noResolved],...k.length?["",a.appsHead,...k.map(e=>`- ${e}`)]:[],...y.length?["",a.providersHead,...y.map(e=>`- ${e}`)]:[],"",`${a.open}: ${r}`].join("\n"),w=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,n.H)(e)}</h3>`,v=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,n.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,n.H)(t)}</p>`,b=['<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,n.H)(i)}</h2>`,`<p style="margin:0;color:#596170">${(0,n.H)(`${u} ${a.last24}`)}</p>`,w(a.stillHead),v(m,a.noFiring),w(a.resolvedHead),v(h,a.noResolved),...k.length?[w(a.appsHead),v(k,"")]:[],...y.length?[w(a.providersHead),v(y,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,n.H)(r).replace(/"/g,"&quot;")}" style="color:#1f45c9">${(0,n.H)(a.open)}</a></p>`,"</div>"].join("");return{subject:(0,d.G)(g),html:(0,d.G)(b),text:(0,d.G)($)}},"A",0,u,"K",0,f],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 i(e="telegram"){return(await r())[e]}e.s(["H",0,i,"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,i,n={}){let s;if((0,a.W)())return{ok:!1,kind:"config",error:t.Y};try{s=await (n.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":i.idempotencyKey},body:JSON.stringify({from:i.from,to:[i.to],subject:i.subject,html:i.html,text:i.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,i,n,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}/${i}`,{...n,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 i(e,t,a,n={}){let s="number"==typeof n.replyTo&&Number.isSafeInteger(n.replyTo)&&n.replyTo>0?{reply_parameters:{message_id:n.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},...n.replyMarkup?{reply_markup:n.replyMarkup}:{},...s})},n.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,i,"z",0,r])}]})();
12
+ 👉 ${k(e)}`:""}`,`**Watchbell**: ${h(e,n)} \xb7 ${(0,t.U)(r)} ${(0,t.J)(r)}`,`
13
+ ${i}`,$)}},"H",0,u],220642)},895625,e=>{var t=e.i(971724),r=e.i(105954),a=e.i(140561),n=e.i(600205),i=e.i(77193);let s=t.z.object({COLLECTOR_SECRET:r.z.string().min(32),CRON_SECRET:r.z.string().min(16),QSTASH_CURRENT_SIGNING_KEY:r.z.string().min(10),QSTASH_NEXT_SIGNING_KEY:r.z.string().min(10)}),o=s.extend({QSTASH_CURRENT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default(""),QSTASH_NEXT_SIGNING_KEY:a.z.union([n.z.literal(""),r.z.string().min(10)]).default("")}),l=!1;e.s(["f",0,function(){try{var e=process.env;let t=("selfhost"===(0,i.c)(e)?o:s).safeParse(e);if(!t.success)throw Error(`Missing or invalid scheduler settings: ${t.error.issues.map(e=>e.path.join(".")).join(", ")}`);return t.data}catch(e){return l||(l=!0,console.warn(e instanceof Error?e.message:"Missing or invalid scheduler settings")),null}}])},629955,11827,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(656083),o=e.i(472832);let l="Pause requested · ";function d(e,t){if(!e.keep||"ACTIVE_HEALTHY"!==e.status)return!1;let r=e.lastTraffic??e.trackedSince;return t.getTime()-r.getTime()>=432e6}function c(e,t){return e.autoRestore?"INACTIVE"!==e.status?{act:!1,reason:"not-paused"}:e.accessDenied?{act:!1,reason:"denied"}:e.lastAutoRestoreAt&&t.getTime()-e.lastAutoRestoreAt.getTime()<216e5?{act:!1,reason:"too-soon"}:e.slotsLeft<=0?{act:!1,reason:"no-slot"}:{act:!0}:{act:!1,reason:"off"}}e.s(["B",0,l,"F",0,c,"v",0,d],11827);var u=e.i(326003),p=e.i(843448),h=e.i(547499),f=e.i(628448),g=e.i(342833);async function m(e){let r=await (0,a.f)().select({data:n.snapshots.data}).from(n.resources).innerJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.resources.accountId,e),(0,t.u)(n.resources.kind,"supabase_project"))),i=new Map;for(let{data:e}of r){let t=(0,u.k)(u.B,e);t.orgSlug&&void 0!==t.freeOrg&&i.set(t.orgSlug,t.freeOrg)}return i}let k=e=>`${e} day${1===e?"":"s"}`,y=e=>e instanceof Error?e.name:"unknown";async function $(e,r,i){try{let s=await (0,a.f)().select({k:n.keepActive,r:n.resources,s:n.snapshots,a:n.accounts}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).leftJoin(n.snapshots,(0,t.u)(n.snapshots.resourceId,n.resources.id)).where((0,t.b)((0,t.u)(n.keepActive.keep,!0),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.u)(n.resources.monitored,!0),(0,t.M)(n.resources.goneAt),(0,t.u)(n.accounts.status,"ok"))).limit(100),o=(0,h.f)().OPS_ENCRYPTION_KEY;for(let[t,{k:a,r:n,s:l,a:d}]of s.entries()){let c=r-Date.now()-500;if(c<250)return void i.push(`keep-active: ${s.length-t} left for the next run, time budget used`);if(!(a.lastKeepAliveAt&&e.getTime()-a.lastKeepAliveAt.getTime()<72e6))try{await w(n,l,d,e,o,c,i)}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active/${n.name}: ${y(e)}`)}}}catch(e){console.warn("keep-active failed:",y(e)),i.push(`keep-active: ${y(e)}`)}}async function w(e,r,o,l,c,h,m){let y=(0,u.k)(u.B,r?.data),$=y.lastTrafficAt?new Date(y.lastTrafficAt):y.trafficAt?new Date(new Date(y.trafficAt).getTime()-6048e5):null;if(!d({status:y.status??"",keep:!0,lastTraffic:$,trackedSince:e.firstSeenAt},l))return;let w=Math.floor((l.getTime()-($??e.firstSeenAt).getTime())/864e5),b=(0,i.V)({ciphertext:o.credentialCiphertext,iv:o.credentialIv},c);if(!b)return void m.push(`keep-active/${o.label}: credential can't be read`);let v=await (0,g.i)(b,e.externalId,{timeoutMs:Math.min(5e3,h)});if(v.ok)await (0,a.f)().update(n.keepActive).set({lastKeepAliveAt:l}).where((0,t.u)(n.keepActive.resourceId,e.id)),await (0,s.f)([{at:l,type:"action",kind:"ok",resourceId:e.id,actorUserId:null,message:`Keep-alive: sent to ${e.name} (no API traffic for ${k(w)})`,detail:null}]);else{let t=Math.max(1,p.e-w);await (0,s.f)([{at:l,type:"action",kind:"warn",resourceId:e.id,actorUserId:null,reason:"KeepAliveFailed",message:`Keep-alive failed for ${e.name}; it may pause in about ${k(t)}`,detail:"scope"===v.kind?"This token can't run the read-only query (Database read).":(0,f.S)(v.error)}]),m.push(`keep-active/${e.name}: ${v.error}`)}}async function b(e){let[i]=await (0,a.f)().select({at:n.events.at}).from(n.events).where((0,t.b)((0,t.u)(n.events.reason,"Action"),(0,t.u)(n.events.resourceId,e),(0,t.u)(n.events.type,"action"),(0,t.y)(n.events.kind,["ok","err"]),(0,t.E)(n.events.actorUserId),(0,t.D)(n.events.message,`${l}%`))).orderBy((0,r.A)(n.events.at)).limit(1);return i?.at??null}async function v(){return(await (0,a.f)().select({id:n.keepActive.resourceId}).from(n.keepActive).where((0,t.u)(n.keepActive.autoRestore,!0)).limit(1)).length>0}async function A(e,r,l=1/0){let d=r.filter(e=>!!e.resourceId&&"INACTIVE"===e.status),u=()=>l-Date.now()-500;if(!d.length||250>u())return;let k=await (0,a.f)().select({k:n.keepActive,id:n.resources.id,name:n.resources.name,ref:n.resources.externalId,accountId:n.resources.accountId,label:n.accounts.label,lastTestAt:n.accounts.lastTestAt,ciphertext:n.accounts.credentialCiphertext,iv:n.accounts.credentialIv}).from(n.keepActive).innerJoin(n.resources,(0,t.u)(n.resources.id,n.keepActive.resourceId)).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.keepActive.autoRestore,!0),(0,t.y)(n.keepActive.resourceId,d.map(e=>e.resourceId)),(0,t.u)(n.resources.kind,"supabase_project"),(0,t.M)(n.resources.goneAt)));if(!k.length)return;let $=await (0,o.f)([...new Set(k.map(e=>e.accountId))]),w=new Map,v=new Map;for(let l of k)try{let d=r.filter(e=>e.accountId===l.accountId),k=d.find(e=>e.resourceId===l.id)?.orgSlug??"";if(!w.has(l.accountId)){let e=await m(l.accountId);w.set(l.accountId,e),v.set(l.accountId,(0,p._)(d.map(t=>({status:t.status,freeOrg:e.get(t.orgSlug??"")??null}))).left)}let y=!1===w.get(l.accountId).get(k),A=y?1/0:v.get(l.accountId),T=$.get(l.accountId),S=Math.max(l.k.updatedAt.getTime(),l.lastTestAt?.getTime()??0),I=T?.write==="denied"&&new Date(T.at).getTime()>S,x=c({status:"INACTIVE",autoRestore:!0,lastAutoRestoreAt:l.k.lastAutoRestoreAt,slotsLeft:A,accessDenied:I},e);if(!x.act){"no-slot"===x.reason&&await (0,s.f)([{at:e,type:"action",kind:"info",resourceId:l.id,actorUserId:null,reason:"AutoRestoreWaits",message:`Auto-restore: ${l.name} waits, account ${l.label} has no free slot`,detail:"Pause another project in this account, or restore it by hand once a slot is free."}]);continue}let D=await b(l.id);if(D&&D.getTime()>l.k.updatedAt.getTime())continue;let E=u();if(E<250)return;await (0,a.f)().update(n.keepActive).set({lastAutoRestoreAt:e}).where((0,t.u)(n.keepActive.resourceId,l.id));let j=(0,i.V)({ciphertext:l.ciphertext,iv:l.iv},(0,h.f)().OPS_ENCRYPTION_KEY);if(!j)continue;let C=await (0,g.G)(j,l.ref,{timeoutMs:Math.min(5e3,E)});C.ok?(y||v.set(l.accountId,v.get(l.accountId)-1),await (0,o.y)(l.accountId,"ok"),await (0,s.f)([{at:e,type:"action",kind:"ok",resourceId:l.id,actorUserId:null,message:`Auto-restore: restoring ${l.name}`,detail:null}])):("scope"===C.kind&&await (0,o.y)(l.accountId,"denied"),await (0,s.f)([{at:e,type:"action",kind:"err",resourceId:l.id,actorUserId:null,message:`Auto-restore: ${l.name} couldn't be restored`,detail:"scope"===C.kind?`${(0,f.b)("supabase",{})} Auto-restore stops until then.`:(0,f.S)(C.error)}]))}catch(e){console.warn("auto-restore failed:",y(e))}}async function T(e,r,i=o.W,s=new Date){let l=await (0,o.q)(e.id,"keep-alive",r);if(l)return{ok:!1,error:l};let d=await (0,o.p)(r,"supabase_project");if(!d)return{ok:!1,error:"This project isn't watched any more, or its credential can't be read."};let[c]=await (0,a.f)().select({last:n.keepActive.lastKeepAliveAt}).from(n.keepActive).where((0,t.u)(n.keepActive.resourceId,r)).limit(1);if(c?.last&&s.getTime()-c.last.getTime()<72e6)return i({done:!1,message:"A keep-alive was already sent in the last 20 hours."},e,d.account.id);let u=d.resource.name,p=await (0,g.i)(d.token,d.resource.externalId,{timeoutMs:5e3});return p.ok&&await (0,a.f)().insert(n.keepActive).values({resourceId:r,lastKeepAliveAt:s}).onConflictDoUpdate({target:n.keepActive.resourceId,set:{lastKeepAliveAt:s}}),i(p.ok?{done:!0,message:`Keep-alive sent to ${u}.`,audit:{message:`Keep-alive sent \xb7 ${u}`,resourceId:r}}:{done:!1,failed:{ok:!1,kind:p.kind,error:"scope"===p.kind?"This token can't run the read-only query (Database read).":p.error,...p.status?{status:p.status}:{}},audit:{message:`Keep-alive failed \xb7 ${u}`,resourceId:r}},e,d.account.id)}e.s(["m",0,m,"z",0,A,"g",0,v,"v",0,T,"V",0,$,"G",0,function(e,t,r){return!1===t.get(r)?1/0:(0,p._)(e.map(e=>({status:e.status,freeOrg:t.get(e.orgSlug)??null}))).left}],629955)},483100,e=>{var t=e.i(875225),r=e.i(349129),a=e.i(518899),n=e.i(924924),i=e.i(618916),s=e.i(220642),o=e.i(921991),l=e.i(656083),d=e.i(209576),c=e.i(111970),u=e.i(762504),p=e.i(547499),h=e.i(224382),f=e.i(201162),g=e.i(973990),m=e.i(600273),k=e.i(968068),y=e.i(695811),$=e.i(633974),w=e.i(76012),b=e.i(298397),v=e.i(218331),A=e.i(146394);let T="digest.lastSentDay",S="digest.state";async function I(e){let[r]=await (0,n.f)().select().from(i.channels).where((0,t.u)(i.channels.kind,e)).limit(1);if(!r)return null;try{return{row:r,config:JSON.parse((0,o.K)({ciphertext:r.configCiphertext,iv:r.configIv},(0,p.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function x(){let e=(0,k.f)(),[t,r,a,n]=await Promise.all([I("telegram"),I("discord"),I("webhook"),I("smtp")]),i=new Set;e.telegramToken&&t?.row.enabled&&t.config?.chatId&&i.add("telegram"),r?.row.enabled&&r.config?.url&&i.add("discord"),a?.row.enabled&&a.config?.url&&i.add("webhook"),n?.row.enabled&&n.config?.host&&i.add("smtp");let s=`${(0,p.f)().SITE_URL.replace(/\/+$/,"")}/alerts`;return{send:(i,o,l)=>"telegram"===i?(0,w.I)(e.telegramToken,t.config.chatId,o):"webhook"===i?(0,f.E)(a.config,(0,f.J)(o,l??[],new Date,s)):"smtp"===i?(0,g.f)(n.config,(o.split("\n")[0]??"").replace(/[*_`~]/g,"").slice(0,150)||"Watchbell alert",`${o}
14
+
15
+ ${s}`):(0,h.f)(r.config.url,o),configured:i}}async function D(){let e=(0,k.f)().telegramToken;if(!e)return null;let t=await I("telegram");return t?.row.enabled&&t.config?.chatId?{token:e,chatId:t.config.chatId}:null}async function E(){let e=await I("discord");return e?.row.enabled&&e.config?.url?{url:e.config.url}:null}let j="notify.telegramThreads",C=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function N(e,t,r){let s=e.filter(e=>C.test(e));if(!s.length||!Number.isSafeInteger(t)||t<=0)return;let o=Object.fromEntries(s.map(e=>[e,{m:t,at:r.getTime()}])),l=r.getTime()-6048e5,d=a.B`case when jsonb_typeof(${i.settings.value}) = 'object' then ${i.settings.value} else '{}'::jsonb end`;await (0,n.f)().insert(i.settings).values({key:j,value:o}).onConflictDoUpdate({target:i.settings.key,set:{value:a.B`(select coalesce(jsonb_object_agg(e.key, e.value), '{}'::jsonb) from jsonb_each(${JSON.stringify(o)}::jsonb || ${d}) as e
16
+ where jsonb_typeof(e.value) = 'object' and (e.value->>'at') ~ '^[0-9]{1,15}$' and (e.value->>'at')::bigint > ${l})`,updatedAt:r}})}async function _(e){if(!e||!C.test(e))return null;try{let[r]=await (0,n.f)().select({value:i.settings.value}).from(i.settings).where((0,t.u)(i.settings.key,j)).limit(1),a=r?.value&&"object"==typeof r.value?r.value[e]:null;return"number"==typeof a?.m&&Number.isSafeInteger(a.m)&&a.m>0?a.m:null}catch{return null}}let M=()=>(0,d.f)().catch(()=>b.a);async function R(e,o,l={}){var d;if(o-Date.now()<6e3)return{sent:0,dropped:0};let u=await (0,c.I)(),h=await (0,n.f)().select({a:i.alerts,channels:i.alertRules.channels}).from(i.alerts).innerJoin(i.alertRules,(0,t.u)(i.alertRules.key,i.alerts.ruleKey)).where((0,t.b)((0,t.E)(i.alerts.pending),a.B`(${i.alerts.pending} = 'resolve') = (${i.alerts.resolvedAt} is not null)`,(0,c.s)(u))).orderBy((0,r.M)(i.alerts.pendingSince)).limit(50);if(!h.length)return{sent:0,dropped:0};let f=new Set((await (0,n.f)().update(i.alerts).set({claimedAt:e}).where((d=h.map(e=>e.a.id),(0,t.b)((0,t.y)(i.alerts.id,d),(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)),g=h.filter(e=>f.has(e.a.id));if(!g.length)return{sent:0,dropped:0};let{send:m,configured:k}=l.sender??await x(),$=new Set(g.filter(({a:t})=>"resolve"!==t.pending&&(t.silencedUntilResolved||null!==t.silencedUntil&&t.silencedUntil.getTime()>e.getTime())).map(({a:e})=>e.id)),[w,v]=await Promise.all([M(),(0,y.B)()]),A=new Set;for(let r of["telegram","discord","webhook","smtp"]){if(!k.has(r))continue;let a=g.filter(e=>e.channels.includes(r)&&!$.has(e.a.id));if(!a.length)continue;let o=a.map(({a:e})=>{let t="telegram"===r?e:(0,b.o)(e,w);return{kind:e.pending,ruleKey:e.ruleKey,severity:e.severity,title:t.title,message:t.message,startedAt:e.startedAt,causedBy:t.causedBy,provider:e.providerIncident}}),l=(0,s.l)(o,e,(0,p.f)().SITE_URL,"webhook"===r?"en":"smtp"===r?v.email:v[r]),d=await m(r,(0,b.G)("telegram"===r?l.telegram:l.discord),"webhook"===r?o.map(e=>({...e,title:(0,b.G)(e.title),message:(0,b.G)(e.message)})):void 0);await (0,n.f)().update(i.channels).set(d.ok?{lastSentAt:e,lastError:null}:{lastError:d.error}).where((0,t.u)(i.channels.kind,r)),d.ok&&a.forEach(({a:e})=>A.add(e.id)),d.ok&&"telegram"===r&&d.messageId&&await N(a.filter(({a:e})=>"open"===e.pending).map(({a:e})=>e.id),d.messageId,e).catch(()=>console.warn("notify: remembering the Telegram message failed"))}let T=0,S=0,I=[];for(let{a:r,channels:a}of g){let s=a.some(e=>k.has(e)),o=null!==r.pendingSince&&e.getTime()-r.pendingSince.getTime()>18e5;A.has(r.id)?(T++,await (0,n.f)().update(i.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:e,claimedAt:null,..."open"===r.pending?{notifiedOpen:!0}:{}}).where((0,t.u)(i.alerts.id,r.id))):$.has(r.id)||!s||o?(S++,await (0,n.f)().update(i.alerts).set({pending:null,claimedAt:null}).where((0,t.u)(i.alerts.id,r.id))):I.push(r.id)}return I.length&&await (0,n.f)().update(i.alerts).set({claimedAt:null}).where((0,t.y)(i.alerts.id,I)),{sent:T,dropped:S}}async function P(e){let s=new Date(e.getTime()-864e5),o=await (0,c.I)(),l=a.B`case ${i.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[d,p,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,c.s)(o))).orderBy(l,(0,r.A)(i.alerts.startedAt)).limit(50),(0,n.f)().select({n:a.B`count(*)::int`}).from(i.alerts).where((0,t.B)(i.alerts.startedAt,s)),(0,n.f)().select({ruleKey:i.alerts.ruleKey,title:i.alerts.title,resourceId:i.alerts.resourceId,startedAt:i.alerts.startedAt,resolvedAt:i.alerts.resolvedAt}).from(i.alerts).where((0,t.b)((0,t.E)(i.alerts.resolvedAt),(0,t.B)(i.alerts.resolvedAt,s))).orderBy((0,r.A)(i.alerts.resolvedAt)).limit(20),(0,n.f)().select({id:i.resources.id,name:i.resources.name}).from(i.resources).where((0,t.b)((0,t.u)(i.resources.kind,"app"),(0,t.u)(i.resources.monitored,!0),(0,t.M)(i.resources.goneAt))).orderBy(i.resources.name).limit(A.O.apps),(0,u.h)(e)]),m=f.map(e=>e.id),[k,y]=m.length?await Promise.all([(0,n.f)().select({id:i.monitors.resourceId,total:a.B`count(*)::int`,bad:a.B`(count(*) filter (where not ${i.checks.ok}))::int`}).from(i.checks).innerJoin(i.monitors,(0,t.u)(i.monitors.id,i.checks.monitorId)).where((0,t.b)((0,t.y)(i.monitors.resourceId,m),(0,t.B)(i.checks.at,s),(0,t.u)(i.checks.inMaintenance,!1))).groupBy(i.monitors.resourceId),(0,n.f)().select({id:i.storedLogs.resourceId,n:a.B`count(*)::int`}).from(i.storedLogs).where((0,t.b)((0,t.y)(i.storedLogs.resourceId,m),(0,t.B)(i.storedLogs.at,s))).groupBy(i.storedLogs.resourceId)]):[[],[]],$=new Map(k.map(e=>[e.id,e])),w=new Map(y.map(e=>[e.id,e.n])),v=await M();return{now:e,opened:p[0]?.n??0,firing:d.map(({resourceId:e,...t})=>{let r=(0,b.o)({...t,resourceId:e,causedBy:null},v);return{...t,title:r.title,message:r.message}}),resolved:h.flatMap(e=>e.resolvedAt?[{ruleKey:e.ruleKey,title:(0,b.o)({title:e.title,message:"",causedBy:null,resourceId:e.resourceId},v).title,took:function(e,t){let r=Math.max(1,Math.round((t.getTime()-e.getTime())/6e4));if(r<60)return`${r} min`;let a=Math.floor(r/60);return a<24?`${a} h ${r%60} min`:`${Math.floor(a/24)} d ${a%24} h`}(e.startedAt,e.resolvedAt)}]:[]),apps:f.map(e=>{let t=$.get(e.id);return{name:e.name,uptime:t&&t.total>0?(t.total-t.bad)/t.total*100:null,errors:w.get(e.id)??0}}),providers:g.filter(e=>"ok"!==e.state).map(e=>({label:e.label,text:e.text}))}}async function H(e,r,a){await (0,n.f)().update(i.channels).set(r.ok?{lastSentAt:a,lastError:null}:{lastError:r.error}).where((0,t.u)(i.channels.kind,e))}async function U(e){let[t,r]=await Promise.all([P(e),(0,y.H)("email")]);return(0,m.J)({...t,siteUrl:(0,p.f)().SITE_URL},r)}async function O(e,r={}){let a=await (0,n.f)().select().from(i.settings).where((0,t.y)(i.settings.key,[T,S])),s=a.find(e=>e.key===T)?.value,o="string"==typeof s?s:null;if(!(0,m.A)(e,o))return;let d=(0,k.f)(),c=await I("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,v.x)(e),g=await (0,m.K)(e,{lastSentDay:o,state:a.find(e=>e.key===S)?.value??null,build:r.build??(()=>U(e)),send:r.send??(e=>(0,$.f)(u,{from:p,to:h,...e,idempotencyKey:`digest-${f}`}))});g.acted&&(g.result&&await H("email_digest",g.result,e),g.state?await (0,n.f)().insert(i.settings).values({key:S,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,S)),g.sentDay&&await (0,n.f)().insert(i.settings).values({key:T,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,R,"G",0,E,"P",0,H,"J",0,O,"Q",0,D,"M",0,_],483100)},472832,628448,e=>{var t=e.i(875225),r=e.i(665044),a=e.i(924924),n=e.i(618916),i=e.i(921991),s=e.i(407602),o=e.i(547499),l=e.i(479301),d=e.i(189104);function c(e,t){return"member"===e?`Too many actions. Try again in ${(0,d.H)(t)}.`:"That was just done. Wait a minute before trying again."}function u(e){let t=e.replace(/\s+/g," ").trim();return t.length>200?`${t.slice(0,199)}…`:t}e.s(["G",0,"This changed since you opened it. Reload and try again.","z",0,c,"b",0,function(e,t){return"supabase"===e?"This token is read-only; replace it with one that has Project admin write.":"cloudflare"===e?'This Cloudflare token can\'t edit DNS; add "Zone → DNS → Edit" to it, or replace it with a token that has it.':"vercel"===e?`This token can't change projects in team ${t.team||"this team"}; replace it with one whose scope includes that team.`:`This API key can't manage project ${t.project||"this project"}; replace it with a personal or organization key, or a key for this project.`},"S",0,u],628448);var p=e.i(593111);let h="access.";async function f(e,r){if(!(0,l.f)(e))return null;let[s]=await (0,a.f)().select({r:n.resources,a:n.accounts}).from(n.resources).innerJoin(n.accounts,(0,t.u)(n.accounts.id,n.resources.accountId)).where((0,t.b)((0,t.u)(n.resources.id,e),(0,t.u)(n.resources.kind,r),(0,t.M)(n.resources.goneAt))).limit(1);if(!s)return null;let d=(0,i.V)({ciphertext:s.a.credentialCiphertext,iv:s.a.credentialIv},(0,o.f)().OPS_ENCRYPTION_KEY);return d?{resource:s.r,account:{id:s.a.id,label:s.a.label,provider:s.a.provider,scopeNote:s.a.scopeNote},token:d}:null}async function g(e,t,r){let a=await (0,p.f)(d.t.providerAction,e);if(!a.allowed)return c("member",a.retryAfter);let n=await (0,p.f)(d.t.actionTarget,`${t}:${r}`);return n.allowed?null:c("target",n.retryAfter)}async function m(e,t,r){let i={write:t,at:new Date().toISOString(),...r?{scope:r}:{}};await (0,a.f)().insert(n.settings).values({key:`${h}${e}`,value:i}).onConflictDoUpdate({target:n.settings.key,set:{value:i,updatedAt:new Date}})}async function k(e){let r=new Map,i=e.filter(l.f);if(0===i.length)return r;for(let e of(await (0,a.f)().select().from(n.settings).where((0,t.y)(n.settings.key,i.map(e=>`${h}${e}`))))){let t=e.value;t&&("ok"===t.write||"denied"===t.write)&&"string"==typeof t.at&&r.set(e.key.slice(h.length),{write:t.write,at:t.at,..."string"==typeof t.scope?{scope:t.scope}:{}})}return r}async function y(e,t,a,n={}){if(!("audit"in e))return{ok:!1,error:e.message};let i="failed"in e?e.failed:null,o="failed"in e?"":e.message,l=i?i.error:"failed"in e?void 0:e.audit.detail;try{await (0,s.f)({kind:i?"err":"ok",message:`${n.auditPrefix??""}${e.audit.message}`,resourceId:e.audit.resourceId,actorUserId:t.userId,...l?{detail:u(l)}:{}})}catch{console.warn("audit event failed")}if(!i||"scope"===i.kind)try{await m(a,i?"denied":"ok")}catch{console.warn("access write failed")}return!1!==n.refresh&&(0,r.refresh)(),i?{ok:!1,error:i.error}:{ok:!0,message:o}}e.s(["W",0,y,"p",0,f,"y",0,m,"q",0,g,"f",0,k],472832)},224382,201162,973990,600273,e=>{var t=e.i(425498),r=e.i(77193);let a=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;async function n(e,i,s={}){let o;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(a.test(e.trim())?null:"Paste the whole webhook URL from Discord.")return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{o=await (s.fetch??fetch)(e,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(s.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:i.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===o.status||o.ok)return{ok:!0};if(429===o.status){let e=await o.json().catch(()=>null),t=Math.ceil(e?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:t,error:`Discord asked us to wait ${t} s.`}}return 404===o.status||401===o.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:o.status>=500?"transient":"config",error:`Discord returned an error (${o.status}).`}}e.s(["f",0,n],224382);var i=e.i(666680),s=e.i(300794),o=e.i(266479);let l={open:"firing",repeat:"repeat",resolve:"resolved"};async function d(e){return(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)}async function c(e,a,n={}){let s,l;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(function(e){let t;try{t=new URL(e.trim())}catch{return"Paste the whole address, starting with https://."}let r=(0,o._)(t);return"scheme"===r?"Use an https:// address without a user name or password in it.":"blocked"===r?"Use an address on the public internet, on port 443. Watchbell doesn't post into private networks.":null}(e.url))return{ok:!1,kind:"config",error:"The saved webhook address isn't allowed any more."};let u=new URL(e.url.trim());try{let e=await (n.lookup??d)(u.hostname);if(!e.length||e.some(o.W))return{ok:!1,kind:"config",error:"The webhook host resolves to a private address; Watchbell won't post there."}}catch{return{ok:!1,kind:"transient",error:"The webhook host didn't resolve."}}let p=JSON.stringify(a),h=String(Math.floor(Date.parse(a.sentAt)/1e3)),f={"Content-Type":"application/json","User-Agent":"Watchbell-Webhook/1.0","X-Watchbell-Timestamp":h};e.secret&&(f["X-Watchbell-Signature"]=(l=e.secret,`sha256=${(0,i.createHmac)("sha256",l).update(`${h}.${p}`).digest("hex")}`));try{s=await (n.fetch??fetch)(u.toString(),{method:"POST",headers:f,body:p,redirect:"manual",cache:"no-store",signal:AbortSignal.timeout(n.timeoutMs??5e3)})}catch{return{ok:!1,kind:"transient",error:"The webhook didn't answer."}}if(await s.body?.cancel().catch(()=>void 0),s.ok)return{ok:!0};if(s.status>=300&&s.status<400)return{ok:!1,kind:"config",error:"The webhook answered with a redirect; Watchbell doesn't follow them. Use the final address."};if(429===s.status){let e=Math.min(600,Math.max(1,Number(s.headers.get("retry-after"))||30));return{ok:!1,kind:"transient",retryAfterS:e,error:`The webhook asked to wait ${e} s.`}}return{ok:!1,kind:s.status>=500?"transient":"config",error:`The webhook returned an error (${s.status}).`}}e.s(["E",0,c,"J",0,function(e,t,r,a){return{source:"watchbell",event:t.length?"alerts":"test",sentAt:r.toISOString(),text:e.slice(0,4e3),link:a,alerts:t.slice(0,20).map(e=>({status:l[e.kind],rule:e.ruleKey,severity:e.severity,title:e.title,message:e.message,startedAt:e.startedAt.toISOString(),causedBy:e.causedBy,provider:e.provider}))}}],201162);var u=e.i(761095),p=e.i(685560),h=e.i(669456);let f=[465,587,2525],g=h.z.email();class m{socket;buf;lines;ready;waiters;onData;constructor(e){this.socket=e,this.buf="",this.lines=[],this.ready=[],this.waiters=[],this.onData=e=>this.read(e),e.on("data",this.onData)}attach(e){this.socket.off("data",this.onData),this.socket=e,e.on("data",this.onData)}read(e){let t;for(this.buf+=e.toString("utf8");(t=this.buf.indexOf("\n"))>=0;){let e=this.buf.slice(0,t).replace(/\r$/,"");if(this.buf=this.buf.slice(t+1),this.lines.push(e),/^\d{3}( |$)/.test(e)){let t={code:Number(e.slice(0,3)),text:this.lines.join("\n")};this.lines=[];let r=this.waiters.shift();r?r(t):this.ready.push(t)}}}next(){let e=this.ready.shift();return e?Promise.resolve(e):new Promise(e=>this.waiters.push(e))}send(e){this.socket.write(`${e}\r
17
+ `)}}class k extends Error{kind;constructor(e,t){super(e),this.kind=t}}async function y(e,a,n,l={}){let d,c,h;if((0,r.W)())return{ok:!1,kind:"config",error:t.Y};if(Object.keys((c={},h=e.host.trim().toLowerCase(),/^[a-z0-9.-]{3,253}$/.test(h)&&h.includes(".")?(0,o.N)(h)&&(c.host="Use a mail server on the public internet. Watchbell doesn't connect into private networks."):c.host="Enter the server name, for example smtp.office365.com.",!f.includes(e.port)&&(c.port="Use port 587 (STARTTLS), 465 (TLS) or 2525."),(!e.user.trim()||e.user.length>200)&&(c.user="Enter the user name the server expects (often the whole address)."),(!e.pass||e.pass.length>500)&&(c.pass="Enter the password or app password."),!g.safeParse(e.from.trim()).success&&(c.from="Enter the address the mail comes from."),!g.safeParse(e.to.trim()).success&&(c.to="Enter the address that gets the alerts."),c)).length)return{ok:!1,kind:"config",error:"The saved mail server settings aren't valid any more."};let $=e.host.trim().toLowerCase();try{let e=await (l.lookup??(async e=>(await (0,s.lookup)(e,{all:!0})).map(e=>e.address)))($);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 w=465===e.port,b=null,v=new Promise((e,t)=>setTimeout(()=>t(new k("The mail server took too long to answer.","transient")),l.timeoutMs??15e3).unref?.()),A=async()=>{var t,r,s,o;let c,h;try{b=await (l.connect??((e,t,r,a)=>new Promise((n,i)=>{let s=a?p.default.connect({host:e,port:t,servername:r}):u.default.connect({host:e,port:t});s.once(a?"secureConnect":"connect",()=>n(s)),s.once("error",i)})))(d,e.port,$,w)}catch{throw new k(`Couldn't connect to ${$}:${e.port}.`,"transient")}let f=new m(b),g=async(e,t,r="config")=>{let a=await f.next();if(!e.includes(a.code))throw new k(`The mail server refused ${t} (${a.code}).`,a.code>=400&&a.code<500?"transient":r);return a};await g([220],"the connection","transient"),f.send("EHLO watchbell");let y=await g([250],"EHLO");if(!w){if(!/^250[- ]STARTTLS\b/im.test(y.text))throw new k("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");f.send("STARTTLS"),await g([220],"STARTTLS"),b=await (l.upgrade??((e,t)=>new Promise((r,a)=>{let n=p.default.connect({socket:e,servername:t});n.once("secureConnect",()=>r(n)),n.once("error",a)})))(b,$),f.attach(b),f.send("EHLO watchbell"),y=await g([250],"EHLO after STARTTLS")}f.send(`AUTH PLAIN ${Buffer.from(`\0${e.user}\0${e.pass}`,"utf8").toString("base64")}`),await g([235],"the user name or password"),f.send(`MAIL FROM:<${e.from.trim()}>`),await g([250],"the sender address"),f.send(`RCPT TO:<${e.to.trim()}>`),await g([250,251],"the recipient address"),f.send("DATA"),await g([354],"the message"),b.write(`${(t=e,r=a,s=n,o=new Date,h=Buffer.from(s.replace(/\r?\n/g,"\r\n"),"utf8").toString("base64").replace(/.{1,76}/g,"$&\r\n"),[`From: Watchbell <${t.from.trim()}>`,`To: <${t.to.trim()}>`,`Subject: ${(c=r.replace(/[\r\n]+/g," ").slice(0,200),/^[\x20-\x7e]*$/.test(c)?c:`=?UTF-8?B?${Buffer.from(c,"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","",h].join("\r\n"))}\r
18
+ .\r
19
+ `),await g([250],"the message"),f.send("QUIT"),await Promise.race([f.next(),new Promise(e=>setTimeout(e,2e3))])};try{return await Promise.race([A(),v]),{ok:!0}}catch(e){return e instanceof k?{ok:!1,kind:e.kind,error:e.message}:{ok:!1,kind:"transient",error:"The mail server closed the connection."}}finally{b?.destroy()}}e.s(["f",0,y],973990);var $=e.i(220642),w=e.i(765359),b=e.i(218331),v=e.i(195191),A=e.i(298397);function T(e,t){return(0,b.M)(e,t)&&(0,b.z)(e).hour>=7}let S={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`}},I={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},x=[5,15,30,60];async function D(e,t){let r={acted:!1,state:t.state,sentDay:null,event:null,result:null};if(!T(e,t.lastSentDay))return r;let a=(0,b.x)(e),n=t.state&&t.state.day===a?t.state:null;if(n?.stopped)return{...r,state:n};if(n&&n.attempts>0){let t=(x[n.attempts-1]??x[x.length-1])*6e4;if(n.lastAttemptAt&&e.getTime()-new Date(n.lastAttemptAt).getTime()<t)return{...r,state:n}}n??={day:a,...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:a,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 r=S[t],a=`${e.siteUrl.replace(/\/+$/,"")}/alerts`,n=((e,t)=>{let{day:r,month:a}=(0,b.e)(e);return`${r} ${"id"===t?I[a]??a:a}`})(e.now,t),i=`${e.firing.length} ${r.firing}, ${e.opened} ${r.opened}, ${e.resolved.length} ${r.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=>`${$.Z[t][e.severity]} \xb7 ${e.ruleKey} \xb7 ${e.title}: ${"id"===t?(0,w.f)(e.ruleKey,e.message):e.message}`),d=e.resolved.map(e=>`${e.ruleKey} \xb7 ${e.title} (${r.after} ${r.took(e.took)})`),c=o.map(e=>`${e.name}: ${null===e.uptime?r.noChecks:`${(0,v.C)(e.uptime)} ${r.up}`}, ${r.errors(e.errors)}`),u=e.providers.map(e=>`${e.label}: ${e.text}`),p=[`Watchbell \xb7 ${n}`,`${i} ${r.last24}`,"",r.stillHead,...l.length?l.map(e=>`- ${e}`):[r.noFiring],"",r.resolvedHead,...d.length?d.map(e=>`- ${e}`):[r.noResolved],...c.length?["",r.appsHead,...c.map(e=>`- ${e}`)]:[],...u.length?["",r.providersHead,...u.map(e=>`- ${e}`)]:[],"",`${r.open}: ${a}`].join("\n"),h=e=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,$.H)(e)}</h3>`,f=(e,t)=>e.length?`<ul style="margin:0;padding-left:18px">${e.map(e=>`<li style="margin:2px 0">${(0,$.H)(e)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,$.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,$.H)(n)}</h2>`,`<p style="margin:0;color:#596170">${(0,$.H)(`${i} ${r.last24}`)}</p>`,h(r.stillHead),f(l,r.noFiring),h(r.resolvedHead),f(d,r.noResolved),...c.length?[h(r.appsHead),f(c,"")]:[],...u.length?[h(r.providersHead),f(u,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,$.H)(a).replace(/"/g,"&quot;")}" style="color:#2f4372">${(0,$.H)(r.open)}</a></p>`,"</div>"].join("");return{subject:(0,A.G)(s),html:(0,A.G)(g),text:(0,A.G)(p)}},"A",0,T,"K",0,D],600273)},968068,e=>{e.s(["f",0,function(e=process.env){let t=e.TELEGRAM_BOT_TOKEN?.trim()??"",r=e.RESEND_API_KEY?.trim()??"",a=e.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(t)?t:null,resendKey:r.startsWith("re_")?r:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(a)?a:null}}])},695811,e=>{var t=e.i(960049);function r(e){let t=e&&"object"==typeof e?e:null,r=t?t.lang:e,a=e=>{var a;return"string"==typeof(a=t&&e in t?t[e]:r)&&"id"===a.trim().toLowerCase()?"id":"en"};return{telegram:a("telegram"),discord:a("discord"),email:a("email")}}async function a(){try{return r(await (0,t.l)())}catch{return r(null)}}async function n(e="telegram"){return(await a())[e]}e.s(["H",0,n,"B",0,a,"t",0,function(e,t,r){return e[t][r]}])},633974,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i={}){let s;if((0,r.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,a])},76012,e=>{var t=e.i(425498),r=e.i(77193);async function a(e,n,i,s,o=5e3){let l;if((0,r.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,r,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 a(e,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:t,text:r,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,a])}]})();
15
20
 
16
21
  //# sourceMappingURL=src_lib_1qo6t00wwitz6._.js.map