watchbell 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +123 -84
  3. package/bin/watchbell.mjs +593 -23
  4. package/package.json +1 -1
  5. package/server/.next/BUILD_ID +1 -1
  6. package/server/.next/build-manifest.json +3 -3
  7. package/server/.next/prerender-manifest.json +3 -3
  8. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +11 -11
  9. package/server/.next/server/app/(console)/(private)/ai/agents/page.js +38 -37
  10. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  11. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  12. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +10 -10
  13. package/server/.next/server/app/(console)/(private)/ai/ask/page.js +38 -37
  14. package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
  15. package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
  16. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +9 -9
  17. package/server/.next/server/app/(console)/(private)/ai/connect/page.js +38 -37
  18. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  19. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +12 -12
  21. package/server/.next/server/app/(console)/(private)/ai/keys/page.js +38 -37
  22. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  23. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  24. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +10 -10
  25. package/server/.next/server/app/(console)/(private)/ai/logs/page.js +38 -37
  26. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  27. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  28. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +19 -19
  29. package/server/.next/server/app/(console)/(private)/ai/models/page.js +38 -37
  30. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  31. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  32. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +9 -9
  33. package/server/.next/server/app/(console)/(private)/ai/page.js +38 -37
  34. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  36. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +12 -12
  37. package/server/.next/server/app/(console)/(private)/ai/playground/page.js +38 -37
  38. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  39. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  40. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +15 -15
  41. package/server/.next/server/app/(console)/(private)/ai/providers/page.js +38 -37
  42. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  43. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  44. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +10 -10
  45. package/server/.next/server/app/(console)/(private)/ai/quota/page.js +38 -37
  46. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  47. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  48. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +10 -10
  49. package/server/.next/server/app/(console)/(private)/ai/usage/page.js +38 -37
  50. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  51. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  52. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +9 -9
  53. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +38 -37
  54. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  55. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  56. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +10 -10
  57. package/server/.next/server/app/(console)/(private)/auto-actions/page.js +38 -37
  58. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  59. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  60. package/server/.next/server/app/(console)/[...slug]/page/server-reference-manifest.json +9 -9
  61. package/server/.next/server/app/(console)/[...slug]/page.js +38 -37
  62. package/server/.next/server/app/(console)/[...slug]/page.js.nft.json +1 -1
  63. package/server/.next/server/app/(console)/[...slug]/page_client-reference-manifest.js +1 -1
  64. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +22 -22
  65. package/server/.next/server/app/(console)/alerts/page.js +38 -37
  66. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  67. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  68. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +23 -23
  69. package/server/.next/server/app/(console)/apps/[id]/page.js +38 -37
  70. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  71. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  72. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +11 -11
  73. package/server/.next/server/app/(console)/apps/page.js +38 -37
  74. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  75. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  76. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +12 -12
  77. package/server/.next/server/app/(console)/backups/page.js +38 -37
  78. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  79. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  80. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +9 -9
  81. package/server/.next/server/app/(console)/catalog/page.js +38 -37
  82. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  83. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  84. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +20 -20
  85. package/server/.next/server/app/(console)/connections/page.js +38 -37
  86. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  87. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  88. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +9 -9
  89. package/server/.next/server/app/(console)/d1/page.js +38 -37
  90. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  91. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  92. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +14 -14
  93. package/server/.next/server/app/(console)/deployments/page.js +38 -37
  94. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  95. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  96. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +16 -16
  97. package/server/.next/server/app/(console)/dns/page.js +38 -37
  98. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  99. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  100. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +11 -11
  101. package/server/.next/server/app/(console)/domains/page.js +38 -37
  102. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  103. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  104. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +9 -9
  105. package/server/.next/server/app/(console)/events/page.js +38 -37
  106. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  107. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  108. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +15 -15
  109. package/server/.next/server/app/(console)/firebase/page.js +38 -37
  110. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  111. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  112. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +10 -10
  113. package/server/.next/server/app/(console)/logs/page.js +38 -37
  114. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  115. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  116. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +20 -20
  117. package/server/.next/server/app/(console)/neon/page.js +38 -37
  118. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  119. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  120. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +18 -18
  121. package/server/.next/server/app/(console)/overview/page.js +38 -37
  122. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  123. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  124. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +10 -10
  125. package/server/.next/server/app/(console)/repos/[id]/page.js +38 -37
  126. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  127. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  128. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +9 -9
  129. package/server/.next/server/app/(console)/repos/page.js +38 -37
  130. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  131. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  132. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +19 -19
  133. package/server/.next/server/app/(console)/settings/page.js +38 -37
  134. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  135. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  136. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +16 -16
  137. package/server/.next/server/app/(console)/sql/page.js +38 -37
  138. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  139. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  140. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +9 -9
  141. package/server/.next/server/app/(console)/status/page.js +38 -37
  142. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  143. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  144. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +29 -29
  145. package/server/.next/server/app/(console)/supabase/page.js +38 -37
  146. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  147. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  148. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +9 -9
  149. package/server/.next/server/app/(console)/topology/page.js +38 -37
  150. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  151. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  152. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +9 -9
  153. package/server/.next/server/app/(console)/turso/page.js +38 -37
  154. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  155. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  156. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +9 -9
  157. package/server/.next/server/app/(console)/upstash/page.js +38 -37
  158. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  159. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  160. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +22 -22
  161. package/server/.next/server/app/(console)/uptime/page.js +38 -37
  162. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  163. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  164. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +14 -14
  165. package/server/.next/server/app/(console)/welcome/page.js +38 -37
  166. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  167. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  168. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  169. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  170. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  171. package/server/.next/server/app/_global-error.html +1 -1
  172. package/server/.next/server/app/_global-error.rsc +2 -2
  173. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  174. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  175. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  176. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  177. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  178. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  179. package/server/.next/server/app/_not-found.html +1 -1
  180. package/server/.next/server/app/_not-found.rsc +3 -3
  181. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  182. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  183. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  184. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  185. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  186. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  187. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
  188. package/server/.next/server/app/api/collect/route.js +48 -46
  189. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  190. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
  191. package/server/.next/server/app/api/daily/route.js +52 -50
  192. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  193. package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
  194. package/server/.next/server/app/api/status/route.js.nft.json +1 -1
  195. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
  196. package/server/.next/server/app/api/telegram/webhook/route.js +48 -46
  197. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  198. package/server/.next/server/app/api/v1/advice/route.js +19 -18
  199. package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
  200. package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
  201. package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
  202. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
  203. package/server/.next/server/app/api/v1/ai/questions/route.js +22 -21
  204. package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
  205. package/server/.next/server/app/api/v1/mcp/route.js +20 -19
  206. package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
  207. package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
  208. package/server/.next/server/app/api/v1/openapi.json/route.js +9 -8
  209. package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
  210. package/server/.next/server/app/api/v1/status/apps/[app]/route.js +18 -17
  211. package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
  212. package/server/.next/server/app/api/v1/status/route.js +18 -17
  213. package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
  214. package/server/.next/server/app/api/watchdog/route.js +19 -18
  215. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  216. package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
  217. package/server/.next/server/app/auth/google/callback/route.js +18 -17
  218. package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
  219. package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
  220. package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
  221. package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
  222. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  223. package/server/.next/server/app/invite/page.js +4 -3
  224. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  225. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  226. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  227. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  228. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  229. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  230. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  231. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  232. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  233. package/server/.next/server/app/page.js.nft.json +1 -1
  234. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  235. package/server/.next/server/app/s/[slug]/badge/[file]/route.js +9 -8
  236. package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
  237. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  238. package/server/.next/server/app/s/[slug]/page.js +8 -8
  239. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  240. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  241. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  242. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  243. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  244. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  245. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  246. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  247. package/server/.next/server/chunks/{[root-of-the-server]__09qqv-zsz9qhr._.js → [root-of-the-server]__00hb7hqa7qktx._.js} +1 -1
  248. package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
  249. package/server/.next/server/chunks/[root-of-the-server]__049ykc067tlsv._.js +1 -1
  250. package/server/.next/server/chunks/[root-of-the-server]__06f9e4kpi0mw8._.js +1 -1
  251. package/server/.next/server/chunks/[root-of-the-server]__0_rfeg3389imx._.js +1 -1
  252. package/server/.next/server/chunks/{[root-of-the-server]__1n32c8l_j8jt4._.js → [root-of-the-server]__0abdjgj-muln9._.js} +2 -2
  253. package/server/.next/server/chunks/{[root-of-the-server]__1jrqehmo6kq8x._.js → [root-of-the-server]__0alnp_0qkhzze._.js} +2 -2
  254. package/server/.next/server/chunks/[root-of-the-server]__0b2hzo6nez0we._.js +1 -1
  255. package/server/.next/server/chunks/[root-of-the-server]__0c5w5y-db0jkb._.js +3 -0
  256. package/server/.next/server/chunks/{[root-of-the-server]__0znb_m_wygjdc._.js → [root-of-the-server]__0erdelc9_06nk._.js} +2 -2
  257. package/server/.next/server/chunks/{[root-of-the-server]__0u66-8g4ql645._.js → [root-of-the-server]__0grtjjr51j6xe._.js} +1 -1
  258. package/server/.next/server/chunks/{[root-of-the-server]__0-ok-3r9xtz0y._.js → [root-of-the-server]__0hpdrg-m0n6ty._.js} +2 -2
  259. package/server/.next/server/chunks/{[root-of-the-server]__1z3-s7wc9-uc6._.js → [root-of-the-server]__0m7_0rarf_x86._.js} +2 -2
  260. package/server/.next/server/chunks/[root-of-the-server]__0m7i0l3nkbdfm._.js +1 -1
  261. package/server/.next/server/chunks/[root-of-the-server]__0mwiq4mkf8pc5._.js +1 -1
  262. package/server/.next/server/chunks/[root-of-the-server]__0p3lnkpxf2-xz._.js +1 -1
  263. package/server/.next/server/chunks/{[root-of-the-server]__08n3x1x850wqc._.js → [root-of-the-server]__0qmkpydmx3ljf._.js} +2 -2
  264. package/server/.next/server/chunks/{[root-of-the-server]__0_6eq1806attx._.js → [root-of-the-server]__0r-zdzq6ki5gr._.js} +1 -1
  265. package/server/.next/server/chunks/{[root-of-the-server]__157yb_wl7w4ly._.js → [root-of-the-server]__0rak0ce6prxwp._.js} +1 -1
  266. package/server/.next/server/chunks/{[root-of-the-server]__081ywec7cjq3d._.js → [root-of-the-server]__0rxrv00e5e6fj._.js} +2 -2
  267. package/server/.next/server/chunks/{[root-of-the-server]__1_5q9zgl6p5_3._.js → [root-of-the-server]__0sivlmcvkc1uq._.js} +1 -1
  268. package/server/.next/server/chunks/{[root-of-the-server]__1x9tt_2yhozwe._.js → [root-of-the-server]__0vp-x4ifpr3p9._.js} +2 -2
  269. package/server/.next/server/chunks/{[root-of-the-server]__0j0medewrv95l._.js → [root-of-the-server]__0z-41cwvkliev._.js} +2 -2
  270. package/server/.next/server/chunks/{[root-of-the-server]__06iz-tlpv7pqm._.js → [root-of-the-server]__0zd61mh-juh2i._.js} +1 -1
  271. package/server/.next/server/chunks/{[root-of-the-server]__0mtlynfv-vklo._.js → [root-of-the-server]__1-q6_msattgcu._.js} +1 -1
  272. package/server/.next/server/chunks/{[root-of-the-server]__018ux7xja83l6._.js → [root-of-the-server]__1-rqermjb77se._.js} +2 -2
  273. package/server/.next/server/chunks/[root-of-the-server]__110c-t3wz3nzm._.js +1 -1
  274. package/server/.next/server/chunks/[root-of-the-server]__11k46kam6tbia._.js +1 -1
  275. package/server/.next/server/chunks/{[root-of-the-server]__0mhtnnebbepzx._.js → [root-of-the-server]__11kfkk5yxz4ge._.js} +2 -2
  276. package/server/.next/server/chunks/{[root-of-the-server]__0ymon9r-17xe_._.js → [root-of-the-server]__13be7gbo81td4._.js} +1 -1
  277. package/server/.next/server/chunks/{[root-of-the-server]__0uyagcs61c0t_._.js → [root-of-the-server]__13scfgchwlitx._.js} +2 -2
  278. package/server/.next/server/chunks/[root-of-the-server]__14zpwd7xntffk._.js +3 -0
  279. package/server/.next/server/chunks/[root-of-the-server]__15tt645jfx-br._.js +3 -0
  280. package/server/.next/server/chunks/{[root-of-the-server]__08801yoxfe_os._.js → [root-of-the-server]__15zbj_ehkvv-n._.js} +2 -2
  281. package/server/.next/server/chunks/[root-of-the-server]__16sp8qurcwsnf._.js +3 -0
  282. package/server/.next/server/chunks/[root-of-the-server]__19kwj690b37xf._.js +1 -1
  283. package/server/.next/server/chunks/[root-of-the-server]__1_1-jgxiadvs0._.js +3 -0
  284. package/server/.next/server/chunks/[root-of-the-server]__1_2akhn6c9eqq._.js +3 -0
  285. package/server/.next/server/chunks/[root-of-the-server]__1c2u-bg524-_w._.js +3 -0
  286. package/server/.next/server/chunks/[root-of-the-server]__1c8_e0jqh_8na._.js +3 -0
  287. package/server/.next/server/chunks/{[root-of-the-server]__0qpf0qusq792k._.js → [root-of-the-server]__1flvcyht5uk7h._.js} +2 -2
  288. package/server/.next/server/chunks/[root-of-the-server]__1g-be2zoiz2tf._.js +3 -0
  289. package/server/.next/server/chunks/[root-of-the-server]__1h96ebyza_vlh._.js +3 -0
  290. package/server/.next/server/chunks/{[root-of-the-server]__02ihdvnmhshoe._.js → [root-of-the-server]__1hw6s0e7p2-6g._.js} +2 -2
  291. package/server/.next/server/chunks/[root-of-the-server]__1j26i51ankv-z._.js +3 -0
  292. package/server/.next/server/chunks/[root-of-the-server]__1ldcwvd42rpuz._.js +3 -0
  293. package/server/.next/server/chunks/{[root-of-the-server]__0q691wec2busx._.js → [root-of-the-server]__1objhlwwrjfjk._.js} +2 -2
  294. package/server/.next/server/chunks/{[root-of-the-server]__0wt74rsaz-308._.js → [root-of-the-server]__1qzor1nqajuyp._.js} +2 -2
  295. package/server/.next/server/chunks/{[root-of-the-server]__18mztbxkzaxjs._.js → [root-of-the-server]__1rf3slum5swk2._.js} +2 -2
  296. package/server/.next/server/chunks/[root-of-the-server]__1sj7uwyq1gpet._.js +3 -0
  297. package/server/.next/server/chunks/{[root-of-the-server]__0tb-63ts77gqd._.js → [root-of-the-server]__1tefe1f5835t_._.js} +2 -2
  298. package/server/.next/server/chunks/[root-of-the-server]__1u1b3a58anm3f._.js +3 -0
  299. package/server/.next/server/chunks/{[root-of-the-server]__132wlw6sbwt1d._.js → [root-of-the-server]__1vi0u2vkv3tk0._.js} +2 -2
  300. package/server/.next/server/chunks/[root-of-the-server]__1w_73psnce1dd._.js +3 -0
  301. package/server/.next/server/chunks/[root-of-the-server]__202r0hxhr5bnu._.js +3 -0
  302. package/server/.next/server/chunks/[root-of-the-server]__2196hxm-s7u6e._.js +3 -0
  303. package/server/.next/server/chunks/{_076dwl7r_5vcl._.js → _061mqfu1rkl7g._.js} +4 -4
  304. package/server/.next/server/chunks/{_0594j_bb0l80e._.js → _0c_vrxu6rin-k._.js} +2 -2
  305. package/server/.next/server/chunks/_0ejcrge5k4quv._.js +9 -9
  306. package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +3 -0
  307. package/server/.next/server/chunks/_0qawxzcf--lyq._.js +2 -2
  308. package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +3 -3
  309. package/server/.next/server/chunks/{_0m49djgc1t4wg._.js → _0qrn1v02iivm8._.js} +2 -2
  310. package/server/.next/server/chunks/_0vgojnnkcf1vu._.js +2 -2
  311. package/server/.next/server/chunks/_0vz0de4gz70-e._.js +1 -1
  312. package/server/.next/server/chunks/_103ai6ybnpq1k._.js +1 -1
  313. package/server/.next/server/chunks/_108e86rhye0o1._.js +1 -1
  314. package/server/.next/server/chunks/_1476vtrt9101m._.js +1 -1
  315. package/server/.next/server/chunks/{_0r4am1mgz4dg_._.js → _1b63jfweu0o04._.js} +2 -2
  316. package/server/.next/server/chunks/_1b7pc6ohhqxs3._.js +9 -9
  317. package/server/.next/server/chunks/_1g_prqb_u33e3._.js +3 -3
  318. package/server/.next/server/chunks/{_08tppw9ujlpke._.js → _1i57ar6zvd7yb._.js} +4 -4
  319. package/server/.next/server/chunks/{_11p2ejgai2a78._.js → _1k2cwp1_wt6qm._.js} +2 -2
  320. package/server/.next/server/chunks/_1kcmwgs544mo-._.js +1 -1
  321. package/server/.next/server/chunks/{_0n5m3o7at0adm._.js → _1kj2yv4-wk2kp._.js} +4 -4
  322. package/server/.next/server/chunks/_1lq5m27p-ilrw._.js +1 -1
  323. package/server/.next/server/chunks/_1mnwzh3z9y4th._.js +3 -0
  324. package/server/.next/server/chunks/_1nuf-l7izvfl_._.js +1 -1
  325. package/server/.next/server/chunks/{_1rw6_0nf-3sxs._.js → _1ozrnl_on86u7._.js} +4 -4
  326. package/server/.next/server/chunks/_1ptcxyn1tzm9r._.js +1 -1
  327. package/server/.next/server/chunks/_1xeuk6g48m3_1._.js +3 -0
  328. package/server/.next/server/chunks/{src_0uxqs7150nhx2._.js → src_014zbodp4djeb._.js} +2 -2
  329. package/server/.next/server/chunks/{src_0n42os1q41rha._.js → src_04pgj--n_d4w5._.js} +2 -2
  330. package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
  331. package/server/.next/server/chunks/{src_01wdnb4skk1wz._.js → src_08bzavsfds295._.js} +2 -2
  332. package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +3 -0
  333. package/server/.next/server/chunks/{src_1-r51arho90p7._.js → src_0k78ifotuztod._.js} +2 -2
  334. package/server/.next/server/chunks/src_0o4-snj7wkaav._.js +1 -1
  335. package/server/.next/server/chunks/{src_0d-zi077mzm6v._.js → src_0xqorb3-ef3ub._.js} +2 -2
  336. package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
  337. package/server/.next/server/chunks/src_1zo6so07lgcdj._.js +1 -1
  338. package/server/.next/server/chunks/src_db_rows_ts_15b286wn1kn1e._.js +1 -1
  339. package/server/.next/server/chunks/src_instrumentation-node_ts_1c--sr1k7_8k2._.js +3 -0
  340. package/server/.next/server/chunks/src_lib_0485hz-c7h7dr._.js +6 -6
  341. package/server/.next/server/chunks/src_lib_08u7n7-yunfvd._.js +2 -2
  342. package/server/.next/server/chunks/src_lib_0cbs2jlrw1qbh._.js +3 -0
  343. package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
  344. package/server/.next/server/chunks/src_lib_0qcyomi01xvf1._.js +6 -6
  345. package/server/.next/server/chunks/src_lib_0vl2-zp4wzw7n._.js +3 -0
  346. package/server/.next/server/chunks/src_lib_0x4n8swwa3zn7._.js +1 -1
  347. package/server/.next/server/chunks/src_lib_10vqn6q0h8kls._.js +2 -2
  348. package/server/.next/server/chunks/src_lib_13g9xjx8ci00z._.js +3 -0
  349. package/server/.next/server/chunks/src_lib_1ryt-36ohhnm6._.js +6 -6
  350. package/server/.next/server/chunks/src_lib_1tzoqx44yogsk._.js +2 -2
  351. package/server/.next/server/chunks/src_lib_1yd94hta5y1hx._.js +3 -0
  352. package/server/.next/server/chunks/src_lib_brand-env_ts_1wcm1bjuismq_._.js +3 -0
  353. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +6 -6
  354. package/server/.next/server/chunks/src_lib_data_0ask_rbmgwlf3._.js +1 -1
  355. package/server/.next/server/chunks/src_lib_data_0e155tkqeoojm._.js +1 -1
  356. package/server/.next/server/chunks/src_lib_data_backup-db_ts_19rtzbv84xz_h._.js +2 -2
  357. package/server/.next/server/chunks/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +2 -2
  358. package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  359. package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +9 -9
  360. package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +13 -13
  361. package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +9 -9
  362. package/server/.next/server/chunks/src_lib_time_ts_1__07rt8x18k-._.js +3 -0
  363. package/server/.next/server/chunks/src_lib_time_ts_1a27wp71yhgti._.js +3 -0
  364. package/server/.next/server/chunks/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  365. package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  366. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  367. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +1 -1
  368. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +1 -1
  369. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +1 -1
  370. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +1 -1
  371. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +1 -1
  372. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +1 -1
  373. package/server/.next/server/chunks/ssr/{[externals]__1u-jgivpw0_oh._.js → [externals]__0vbbz7arebnub._.js} +1 -1
  374. package/server/.next/server/chunks/ssr/[root-of-the-server]__02cq5r26w4itc._.js +1 -1
  375. package/server/.next/server/chunks/ssr/[root-of-the-server]__02qyxz9eh8_eh._.js +1 -1
  376. package/server/.next/server/chunks/ssr/[root-of-the-server]__04a21b9fkrqs3._.js +3 -0
  377. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ijk9z1ot_xi4._.js → [root-of-the-server]__07n1hb3mk44lt._.js} +2 -2
  378. package/server/.next/server/chunks/ssr/[root-of-the-server]__09-0oydof-7uw._.js +1 -1
  379. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ct71emqfru3b._.js +1 -1
  380. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1fdzriy6yyu5d._.js → [root-of-the-server]__0hbk3gqja86zp._.js} +1 -1
  381. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ksvf4x4zcbpb._.js +1 -1
  382. package/server/.next/server/chunks/ssr/[root-of-the-server]__0n7cj-oti5wct._.js +2 -2
  383. package/server/.next/server/chunks/ssr/[root-of-the-server]__0op0kqh43wd-a._.js +3 -0
  384. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tkmutq84zkeh._.js → [root-of-the-server]__0ryl_hnreck66._.js} +2 -2
  385. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +1 -1
  386. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wf8q7-o-4n8y._.js +3 -0
  387. package/server/.next/server/chunks/ssr/[root-of-the-server]__10bkg3o65q6r4._.js +1 -1
  388. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ryb947ux5cq7._.js → [root-of-the-server]__11y6b96ofb-c5._.js} +2 -2
  389. package/server/.next/server/chunks/ssr/[root-of-the-server]__13oi70jo-u731._.js +2 -2
  390. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0aahjz4fnt4c_._.js → [root-of-the-server]__13rgl1h4g39l-._.js} +2 -2
  391. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1csz822qejxk-._.js → [root-of-the-server]__168ahi_n-kf90._.js} +2 -2
  392. package/server/.next/server/chunks/ssr/[root-of-the-server]__17kocbnwlcw6d._.js +1 -1
  393. package/server/.next/server/chunks/ssr/{[root-of-the-server]__11-ssp_43878t._.js → [root-of-the-server]__18b1wk6-2gq4x._.js} +2 -2
  394. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  395. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0lks-6wz-rmk5._.js → [root-of-the-server]__1drr27jyyhw7p._.js} +2 -2
  396. package/server/.next/server/chunks/ssr/[root-of-the-server]__1e-xqsuqsd4ub._.js +3 -0
  397. package/server/.next/server/chunks/ssr/[root-of-the-server]__1gw6334w8y2my._.js +1 -1
  398. package/server/.next/server/chunks/ssr/[root-of-the-server]__1i69oli51is1u._.js +1 -1
  399. package/server/.next/server/chunks/ssr/[root-of-the-server]__1lx2k37wgre3d._.js +1 -1
  400. package/server/.next/server/chunks/ssr/[root-of-the-server]__1n1pq5j5p4_qn._.js +3 -0
  401. package/server/.next/server/chunks/ssr/[root-of-the-server]__1qltiqn0htqnx._.js +1 -1
  402. package/server/.next/server/chunks/ssr/[root-of-the-server]__1w1472ukyh58r._.js +1 -1
  403. package/server/.next/server/chunks/ssr/[root-of-the-server]__1xa91qls2i3j4._.js +3 -0
  404. package/server/.next/server/chunks/ssr/[root-of-the-server]__204_t7bzma353._.js +3 -0
  405. package/server/.next/server/chunks/ssr/[root-of-the-server]__20ht054m5-_d6._.js +1 -1
  406. package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +2 -2
  407. package/server/.next/server/chunks/ssr/_026w_ig6vy9bt._.js +1 -1
  408. package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +2 -2
  409. package/server/.next/server/chunks/ssr/{_14bz_443syxhi._.js → _06sp8cllu_ljh._.js} +2 -2
  410. package/server/.next/server/chunks/ssr/{_18t7ov64ycb-w._.js → _08u2qnetu4ghm._.js} +2 -2
  411. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  412. package/server/.next/server/chunks/ssr/_0_tr9fol2yq33._.js +1 -1
  413. package/server/.next/server/chunks/ssr/_0_ul4mlc_pj5i._.js +2 -2
  414. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  415. package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
  416. package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
  417. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  418. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  419. package/server/.next/server/chunks/ssr/_0fnl7z-saj7nc._.js +1 -1
  420. package/server/.next/server/chunks/ssr/_0hykblvnwc2ar._.js +1 -1
  421. package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +2 -2
  422. package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +2 -2
  423. package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +2 -2
  424. package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +2 -2
  425. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  426. package/server/.next/server/chunks/ssr/_0qnv1uc1_yv28._.js +2 -2
  427. package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +1 -1
  428. package/server/.next/server/chunks/ssr/_0tcmsw8hszixv._.js +1 -1
  429. package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +2 -2
  430. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  431. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  432. package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +2 -2
  433. package/server/.next/server/chunks/ssr/_11o43qq2eyx_r._.js +3 -0
  434. package/server/.next/server/chunks/ssr/{_06_f735j-1i20._.js → _12348a3ug1-wo._.js} +2 -2
  435. package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +2 -2
  436. package/server/.next/server/chunks/ssr/_1476vtrt9101m._.js +1 -1
  437. package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +2 -2
  438. package/server/.next/server/chunks/ssr/_16t9k9e5cjvas._.js +1 -1
  439. package/server/.next/server/chunks/ssr/_18lgd6o04ugow._.js +2 -2
  440. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  441. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  442. package/server/.next/server/chunks/ssr/{_08y82qdosn7ga._.js → _1_ojvke28lw3y._.js} +2 -2
  443. package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +2 -2
  444. package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +2 -2
  445. package/server/.next/server/chunks/ssr/_1c28jitsyufnt._.js +1 -1
  446. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  447. package/server/.next/server/chunks/ssr/_1dx207la592b7._.js +2 -2
  448. package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +2 -2
  449. package/server/.next/server/chunks/ssr/{_0o0-2ela2_qqd._.js → _1exwj9ou5yh71._.js} +2 -2
  450. package/server/.next/server/chunks/ssr/_1flla16o7o9ba._.js +1 -1
  451. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  452. package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +2 -2
  453. package/server/.next/server/chunks/ssr/_1ibagew7zj8y6._.js +3 -0
  454. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  455. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  456. package/server/.next/server/chunks/ssr/_1nir32qtr99-r._.js +1 -1
  457. package/server/.next/server/chunks/ssr/_1qt1czw3w8dww._.js +3 -0
  458. package/server/.next/server/chunks/ssr/_1sq12-1_02tzt._.js +2 -2
  459. package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +2 -2
  460. package/server/.next/server/chunks/ssr/_1ykxf4mi60jog._.js +2 -2
  461. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  462. package/server/.next/server/chunks/ssr/_20ln-4gu85-yt._.js +3 -0
  463. package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +2 -2
  464. package/server/.next/server/chunks/ssr/{_0i6y4bkm-0cm3._.js → _216rrmkts392q._.js} +2 -2
  465. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +1 -1
  466. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +1 -1
  467. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +1 -1
  468. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +1 -1
  469. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1uaicj0j8stji.js +1 -1
  470. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_03amng1-xhfd1.js +1 -1
  471. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +1 -1
  472. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +1 -1
  473. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_215m-kkv06r4z.js +1 -1
  474. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +1 -1
  475. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +1 -1
  476. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +1 -1
  477. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +1 -1
  478. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  479. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  480. package/server/.next/server/chunks/ssr/src_00ze92e3aolj8._.js +1 -1
  481. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  482. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  483. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  484. package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +3 -0
  485. package/server/.next/server/chunks/ssr/src_0iefnjvaszvw_._.js +1 -1
  486. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  487. package/server/.next/server/chunks/ssr/src_0qu78tivj78-x._.js +3 -0
  488. package/server/.next/server/chunks/ssr/src_0t6-d5hmzrbp1._.js +1 -1
  489. package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
  490. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  491. package/server/.next/server/chunks/ssr/{src_1eermasnm2cgy._.js → src_11_hakxhnybdd._.js} +2 -2
  492. package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
  493. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  494. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_06n-9cjmbb-vu._.js +1 -1
  495. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  496. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_connect-view_tsx_04abz05n7hdsd._.js +15 -15
  497. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  498. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  499. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0hla-5y3iresx._.js +1 -1
  500. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
  501. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_0jamu-nm6x-dh._.js +1 -1
  502. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  503. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_1kor9sy67qpiw._.js +1 -1
  504. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  505. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_1v003vrkwk19w._.js +1 -1
  506. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  507. package/server/.next/server/chunks/ssr/{src_app_(console)_1ppp9j5e2rtqf._.js → src_app_(console)_1olpa0osy74mq._.js} +2 -2
  508. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
  509. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
  510. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_088bs149wsgca._.js +1 -1
  511. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
  512. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  513. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  514. package/server/.next/server/chunks/ssr/src_app_(console)_backups_page_tsx_0o082iagq_14b._.js +1 -1
  515. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  516. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1qigx20w8bk53._.js +1 -1
  517. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  518. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  519. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  520. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  521. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  522. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  523. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  524. package/server/.next/server/chunks/ssr/src_app_(console)_repos_repo-list_tsx_1n1gcm4qfrfdt._.js +1 -1
  525. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  526. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  527. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  528. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  529. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_148phfjye0539._.js +1 -1
  530. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  531. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  532. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  533. package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
  534. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  535. package/server/.next/server/chunks/ssr/{src_app_signin_124xn9wb2fasu._.js → src_app_signin_1y1xla7bcc5a1._.js} +2 -2
  536. package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +3 -0
  537. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  538. package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +3 -3
  539. package/server/.next/server/chunks/ssr/src_lib_05ai1oj91p9w2._.js +2 -2
  540. package/server/.next/server/chunks/ssr/{src_lib_1l8ej-zoyyegd._.js → src_lib_0vl2-zp4wzw7n._.js} +2 -2
  541. package/server/.next/server/chunks/ssr/src_lib_0x4n8swwa3zn7._.js +1 -1
  542. package/server/.next/server/chunks/ssr/src_lib_1nkahiclbn55q._.js +1 -1
  543. package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +1 -1
  544. package/server/.next/server/chunks/ssr/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +2 -2
  545. package/server/.next/server/chunks/ssr/{src_lib_demo_20hj85e_64pp1._.js → src_lib_demo_20zjotuzm1lm8._.js} +2 -2
  546. package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  547. package/server/.next/server/chunks/ssr/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  548. package/server/.next/server/chunks/ssr/src_lib_time_ts_1ualgyi3irm1z._.js +3 -0
  549. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  550. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  551. package/server/.next/server/chunks/ssr/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  552. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  553. package/server/.next/server/chunks/ssr/src_private_ai_usage-analytics_ts_1bxba3xarzol0._.js +1 -1
  554. package/server/.next/server/chunks/ssr/src_private_ai_views-db_ts_1jbnr41mskha2._.js +1 -1
  555. package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +4 -4
  556. package/server/.next/server/chunks/ssr/src_private_explorer_explorer_tsx_04m_tdottspjs._.js +1 -1
  557. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  558. package/server/.next/server/middleware-build-manifest.js +3 -3
  559. package/server/.next/server/pages/404.html +1 -1
  560. package/server/.next/server/pages/500.html +1 -1
  561. package/server/.next/server/preview-props.json +3 -3
  562. package/server/.next/server/server-reference-manifest.js +1 -1
  563. package/server/.next/server/server-reference-manifest.json +133 -133
  564. package/server/.next/static/chunks/0-7by9f00qb4d.js +1 -0
  565. package/server/.next/static/chunks/{2k9ytb8jmg14_.js → 010bc8dzhxd_0.js} +1 -1
  566. package/server/.next/static/chunks/01oee9tptcjdb.js +1 -0
  567. package/server/.next/static/chunks/02uvde7i-78p5.js +1 -0
  568. package/server/.next/static/chunks/{2rdmebof0d_c4.js → 03fjh6klyhqv4.js} +1 -1
  569. package/server/.next/static/chunks/{1o_q7_4ulcq9x.js → 06lmwdlx-fkr8.js} +1 -1
  570. package/server/.next/static/chunks/{1ieazx9t3vl5p.js → 08w0t5q93_9mu.js} +1 -1
  571. package/server/.next/static/chunks/{1mlvn70-zqjvi.js → 0anet8wttkax1.js} +1 -1
  572. package/server/.next/static/chunks/0ao7kjrp6bp3l.js +1 -0
  573. package/server/.next/static/chunks/0b0rwd99q942r.js +1 -0
  574. package/server/.next/static/chunks/{1ts_fd_r1kcrv.js → 0dhgqjjm0zj6_.js} +1 -1
  575. package/server/.next/static/chunks/{2jlv5ekbb0wu2.js → 0dnjs3de2e_d1.js} +1 -1
  576. package/server/.next/static/chunks/{29p15vj15jcsb.js → 0ilml-p3iktnr.js} +1 -1
  577. package/server/.next/static/chunks/{43_va15lk2zc1.js → 0j_5norjm-kef.js} +1 -1
  578. package/server/.next/static/chunks/0nx0h-723nd_u.js +7 -0
  579. package/server/.next/static/chunks/0unx038_2rfsp.js +1 -0
  580. package/server/.next/static/chunks/0y_0w1ek5fakj.js +1 -0
  581. package/server/.next/static/chunks/1483hxa9hair1.js +1 -0
  582. package/server/.next/static/chunks/{1gmof0n5nswkk.js → 18gwem_5y9wnt.js} +1 -1
  583. package/server/.next/static/chunks/1aoqsoecu-fy_.js +1 -0
  584. package/server/.next/static/chunks/1endj3d7bewa1.js +1 -0
  585. package/server/.next/static/chunks/1j18pg23fzwv_.js +1 -0
  586. package/server/.next/static/chunks/{0wlc502815llk.js → 1k01h6men2hvb.js} +1 -1
  587. package/server/.next/static/chunks/{158-i6phe17yl.js → 1mdaf7mwcfafr.js} +1 -1
  588. package/server/.next/static/chunks/{0li9-xjc40g51.js → 1o4mdgq5lu1g_.js} +1 -1
  589. package/server/.next/static/chunks/{3dokgd9nungcr.js → 1t2iu6ufyxecz.js} +1 -1
  590. package/server/.next/static/chunks/{0wtboeftyamyk.js → 1vi8tyc1ou2o3.js} +1 -1
  591. package/server/.next/static/chunks/1xy80z39ducub.js +1 -0
  592. package/server/.next/static/chunks/1yb4_s_96v9tf.js +1 -0
  593. package/server/.next/static/chunks/{2v14aqfx8wv9o.js → 2-8ra6gmaw_pb.js} +1 -1
  594. package/server/.next/static/chunks/{1-1hfgat2l_o9.js → 2cmw27buw9oce.js} +1 -1
  595. package/server/.next/static/chunks/{3f5sxz8awpdog.js → 2lv5qmgi8nm4h.js} +1 -1
  596. package/server/.next/static/chunks/2mj8z5a9dz7bh.js +1 -0
  597. package/server/.next/static/chunks/{1gb8jvw-g7fr7.js → 2n-h6_0i3mpxo.js} +1 -1
  598. package/server/.next/static/chunks/{2cjfogw85k3h-.js → 2pbnh717ldzfl.js} +1 -1
  599. package/server/.next/static/chunks/2qltilq3pn4ia.js +1 -0
  600. package/server/.next/static/chunks/{30fczssqw6xys.js → 2ufr23d_eyosj.js} +1 -1
  601. package/server/.next/static/chunks/2wqgz94tksucm.js +1 -0
  602. package/server/.next/static/chunks/{3tqh7fwtd_k_l.js → 2z6a725ntvlr6.js} +2 -2
  603. package/server/.next/static/chunks/{2fo6iuxb0ec7f.js → 2zdjxqgm-44u1.js} +1 -1
  604. package/server/.next/static/chunks/{026asl66kuq3f.js → 340ecjh1jzqjd.js} +15 -15
  605. package/server/.next/static/chunks/{2z1xy8l4s3usi.js → 3alfhqlczff2s.js} +1 -1
  606. package/server/.next/static/chunks/{36ureqoyz5e06.js → 3col9buetdxvh.js} +2 -2
  607. package/server/.next/static/chunks/{1zi37go-xtasg.js → 3o45i7xbzm0w-.js} +1 -1
  608. package/server/.next/static/chunks/{0cannaigw8lhi.js → 3o7se0ypyiqmz.js} +1 -1
  609. package/server/.next/static/chunks/{1c4fx4kipvnqz.js → 3oe302ug_esoe.js} +1 -1
  610. package/server/.next/static/chunks/3s7hj7g12rmuh.js +1 -0
  611. package/server/.next/static/chunks/{2fj4o7-stsvht.js → 3uujo4bht1tqo.js} +1 -1
  612. package/server/.next/static/chunks/3w445wy3mpp2f.js +1 -0
  613. package/server/.next/static/chunks/{2kmerzslng988.js → 3ypdfkwyovory.js} +1 -1
  614. package/server/.next/server/chunks/[root-of-the-server]__0grnl7ncqcjft._.js +0 -3
  615. package/server/.next/server/chunks/[root-of-the-server]__0m8w2-7618scn._.js +0 -3
  616. package/server/.next/server/chunks/[root-of-the-server]__0p_b0m2cstlrl._.js +0 -3
  617. package/server/.next/server/chunks/[root-of-the-server]__0zxjft8y2r575._.js +0 -3
  618. package/server/.next/server/chunks/[root-of-the-server]__114vjjaqb2wyv._.js +0 -3
  619. package/server/.next/server/chunks/[root-of-the-server]__12uyws-qe6wxs._.js +0 -3
  620. package/server/.next/server/chunks/[root-of-the-server]__139pgc0wpc7kg._.js +0 -3
  621. package/server/.next/server/chunks/[root-of-the-server]__1bwgi7nn5-hc3._.js +0 -3
  622. package/server/.next/server/chunks/[root-of-the-server]__1k8s02gwythps._.js +0 -3
  623. package/server/.next/server/chunks/[root-of-the-server]__1lf_lo1wqcbcg._.js +0 -3
  624. package/server/.next/server/chunks/[root-of-the-server]__1niiijc82bgoj._.js +0 -3
  625. package/server/.next/server/chunks/[root-of-the-server]__1on_3p53yn6fs._.js +0 -3
  626. package/server/.next/server/chunks/[root-of-the-server]__1q90luznbe9-l._.js +0 -3
  627. package/server/.next/server/chunks/[root-of-the-server]__1r15vmrh2r06l._.js +0 -3
  628. package/server/.next/server/chunks/[root-of-the-server]__1woerg3tb4ls3._.js +0 -3
  629. package/server/.next/server/chunks/[root-of-the-server]__1zaomh_4901_f._.js +0 -3
  630. package/server/.next/server/chunks/[root-of-the-server]__20lwsd6a4wnpe._.js +0 -3
  631. package/server/.next/server/chunks/_03bua_9n4apok._.js +0 -3
  632. package/server/.next/server/chunks/_08y82qdosn7ga._.js +0 -3
  633. package/server/.next/server/chunks/_1bcsmpznxhk9h._.js +0 -3
  634. package/server/.next/server/chunks/_1he3nioua8ee5._.js +0 -3
  635. package/server/.next/server/chunks/_1lpcbqj4uzrsh._.js +0 -3
  636. package/server/.next/server/chunks/src_0l-no1yc1_izn._.js +0 -3
  637. package/server/.next/server/chunks/src_156ewlek-4a4z._.js +0 -3
  638. package/server/.next/server/chunks/src_lib_0-ylqsh7whlj2._.js +0 -3
  639. package/server/.next/server/chunks/src_lib_0f0p6-l5vvduu._.js +0 -3
  640. package/server/.next/server/chunks/src_lib_15a3m-j_urkkp._.js +0 -3
  641. package/server/.next/server/chunks/ssr/[root-of-the-server]__06s-dfcfuperv._.js +0 -3
  642. package/server/.next/server/chunks/ssr/[root-of-the-server]__07or1m2vwon1m._.js +0 -3
  643. package/server/.next/server/chunks/ssr/[root-of-the-server]__0d9lwldljqtvx._.js +0 -3
  644. package/server/.next/server/chunks/ssr/[root-of-the-server]__0uklr553mp86_._.js +0 -3
  645. package/server/.next/server/chunks/ssr/[root-of-the-server]__1cykncw1_xcno._.js +0 -3
  646. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ih2a_fbqu7ko._.js +0 -3
  647. package/server/.next/server/chunks/ssr/[root-of-the-server]__1j7_a902k_8es._.js +0 -3
  648. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ofzjllv-b0o0._.js +0 -3
  649. package/server/.next/server/chunks/ssr/_040ixxsgfs0vi._.js +0 -3
  650. package/server/.next/server/chunks/ssr/_0ux6eo_w1x155._.js +0 -3
  651. package/server/.next/server/chunks/ssr/_12o9qqjoik4q4._.js +0 -3
  652. package/server/.next/server/chunks/ssr/_1k2q3yt1h6cfs._.js +0 -3
  653. package/server/.next/server/chunks/ssr/_1zhtvg8t3jtxe._.js +0 -3
  654. package/server/.next/server/chunks/ssr/_200p6me5_kp2j._.js +0 -3
  655. package/server/.next/server/chunks/ssr/src_00s82lfm2ga7-._.js +0 -3
  656. package/server/.next/server/chunks/ssr/src_13hsrg6rdvh-d._.js +0 -3
  657. package/server/.next/server/chunks/ssr/src_1xgsz_do2xpr2._.js +0 -3
  658. package/server/.next/server/chunks/ssr/src_components_shell_shell_tsx_1cpq-hbch_dvj._.js +0 -3
  659. package/server/.next/server/chunks/ssr/src_lib_0y40wht-o-oc2._.js +0 -3
  660. package/server/.next/static/chunks/03qto0oyf2r1n.js +0 -1
  661. package/server/.next/static/chunks/0c7pskzfstcdh.js +0 -1
  662. package/server/.next/static/chunks/0n_l4a3za5-q8.js +0 -1
  663. package/server/.next/static/chunks/0t96fqp1vsmrp.js +0 -1
  664. package/server/.next/static/chunks/1sm8wxvlpowwg.js +0 -1
  665. package/server/.next/static/chunks/1teh52nh5dujq.js +0 -1
  666. package/server/.next/static/chunks/1v4hl1z0y1npd.js +0 -1
  667. package/server/.next/static/chunks/1vh2psoqw3ddc.js +0 -1
  668. package/server/.next/static/chunks/1xau8pf40_upi.js +0 -7
  669. package/server/.next/static/chunks/1z2rcngn3-7i5.js +0 -1
  670. package/server/.next/static/chunks/210qrsqvmgaet.js +0 -1
  671. package/server/.next/static/chunks/2llric-1orr3y.js +0 -1
  672. package/server/.next/static/chunks/2wb9a1xth0yhf.js +0 -1
  673. package/server/.next/static/chunks/34gs6c2dsgtqy.js +0 -1
  674. package/server/.next/static/chunks/3ag6t3ta58rih.js +0 -1
  675. package/server/.next/static/chunks/3gkta99h3_5i2.js +0 -1
  676. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_buildManifest.js +0 -0
  677. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_clientMiddlewareManifest.js +0 -0
  678. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_ssgManifest.js +0 -0
@@ -4,12 +4,12 @@
4
4
  ${l(q(a))}${s(a)?`
5
5
  <i>${l(s(a))}</i>`:""}${r(a)?`
6
6
  👉 ${l(r(a))}`:""}
7
- ${g.since} ${(0,b.U)(a.startedAt)} WIB`,`<b>Watchbell</b>: ${n(a,e)} \xb7 ${(0,b.U)(c)} WIB`,`
7
+ ${g.since} ${(0,b.U)(a.startedAt)} ${(0,b.J)(a.startedAt)}`,`<b>Watchbell</b>: ${n(a,e)} \xb7 ${(0,b.U)(c)} ${(0,b.J)(c)}`,`
8
8
  <a href="${l(f)}">${g.open}</a>`,t),discord:o(a,2e3,a=>`
9
9
  **${m(a)}${a.ruleKey} \xb7 ${a.title.replace(/[*_`~|\[\]<>]/g,"")}**
10
10
  ${q(a).replace(/[*_`~|\[\]<>]/g,"")}${s(a)?`
11
11
  _${s(a)}_`:""}${r(a)?`
12
- 👉 ${r(a)}`:""}`,`**Watchbell**: ${n(a,e)} \xb7 ${(0,b.U)(c)} WIB`,`
13
- ${f}`,t)}},"H",0,l],192738)},49146,a=>{var b=a.i(462820),c=a.i(93321),d=a.i(530385),e=a.i(351674),f=a.i(548734),g=a.i(837137),h=a.i(192738),i=a.i(358179),j=a.i(601219),k=a.i(247730),l=a.i(46396),m=a.i(492665),n=a.i(390626),o=a.i(80997),p=a.i(718025),q=a.i(552543),r=a.i(288879),s=a.i(204784),t=a.i(446914),u=a.i(71575),v=a.i(556987),w=a.i(968715),x=a.i(910697);let y="digest.lastSentDay",z="digest.state";async function A(a){let[b]=await (0,f.f)().select().from(g.channels).where((0,c.u)(g.channels.kind,a)).limit(1);if(!b)return null;try{return{row:b,config:JSON.parse((0,i.K)({ciphertext:b.configCiphertext,iv:b.configIv},(0,m.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function B(a,b){let c=(0,i.l)(JSON.stringify(b),(0,m.f)().OPS_ENCRYPTION_KEY),d={configCiphertext:c.ciphertext,configIv:c.iv,keyVersion:c.keyVersion,enabled:!0,lastError:null,updatedAt:new Date};await (0,f.f)().insert(g.channels).values({kind:a,...d}).onConflictDoUpdate({target:g.channels.kind,set:d})}async function C(a,b){return(await (0,f.f)().update(g.channels).set({enabled:b,updatedAt:new Date}).where((0,c.u)(g.channels.kind,a)).returning({kind:g.channels.kind})).length>0}async function D(){let a=(0,p.f)(),[b,c]=await Promise.all([A("telegram"),A("discord")]),d=new Set;return a.telegramToken&&b?.row.enabled&&b.config?.chatId&&d.add("telegram"),c?.row.enabled&&c.config?.url&&d.add("discord"),{send:(d,e)=>"telegram"===d?(0,t.I)(a.telegramToken,b.config.chatId,e):(0,n.$)(c.config.url,e),configured:d}}async function E(){let a=(0,p.f)().telegramToken;if(!a)return null;let b=await A("telegram");return b?.row.enabled&&b.config?.chatId?{token:a,chatId:b.config.chatId}:null}async function F(){let a=await A("discord");return a?.row.enabled&&a.config?.url?{url:a.config.url}:null}let G=()=>(0,k.f)().catch(()=>v.a);async function H(a,b,i={}){var j;if(b-Date.now()<6e3)return{sent:0,dropped:0};let k=await (0,f.f)().select({a:g.alerts,channels:g.alertRules.channels}).from(g.alerts).innerJoin(g.alertRules,(0,c.u)(g.alertRules.key,g.alerts.ruleKey)).where((0,c.b)((0,c.E)(g.alerts.pending),e.B`(${g.alerts.pending} = 'resolve') = (${g.alerts.resolvedAt} is not null)`)).orderBy((0,d.M)(g.alerts.pendingSince)).limit(50);if(!k.length)return{sent:0,dropped:0};let l=new Set((await (0,f.f)().update(g.alerts).set({claimedAt:a}).where((j=k.map(a=>a.a.id),(0,c.b)((0,c.y)(g.alerts.id,j),(0,c.E)(g.alerts.pending),(0,c.F)((0,c.M)(g.alerts.claimedAt),(0,c.S)(g.alerts.claimedAt,new Date(a.getTime()-12e4)))))).returning({id:g.alerts.id})).map(a=>a.id)),n=k.filter(a=>l.has(a.a.id));if(!n.length)return{sent:0,dropped:0};let{send:o,configured:p}=i.sender??await D(),r=new Set(n.filter(({a:b})=>"resolve"!==b.pending&&(b.silencedUntilResolved||null!==b.silencedUntil&&b.silencedUntil.getTime()>a.getTime())).map(({a})=>a.id)),[s,t]=await Promise.all([G(),(0,q.B)()]),u=new Set;for(let b of["telegram","discord"]){if(!p.has(b))continue;let d=n.filter(a=>a.channels.includes(b)&&!r.has(a.a.id));if(!d.length)continue;let e=d.map(({a})=>{let b=(0,v.o)(a,s);return{kind:a.pending,ruleKey:a.ruleKey,severity:a.severity,title:b.title,message:b.message,startedAt:a.startedAt,causedBy:b.causedBy,provider:a.providerIncident}}),i=(0,h.l)(e,a,(0,m.f)().SITE_URL,t[b]),j=await o(b,(0,v.G)("telegram"===b?i.telegram:i.discord));await (0,f.f)().update(g.channels).set(j.ok?{lastSentAt:a,lastError:null}:{lastError:j.error}).where((0,c.u)(g.channels.kind,b)),j.ok&&d.forEach(({a})=>u.add(a.id))}let w=0,x=0,y=[];for(let{a:b,channels:d}of n){let e=d.some(a=>p.has(a)),h=null!==b.pendingSince&&a.getTime()-b.pendingSince.getTime()>18e5;u.has(b.id)?(w++,await (0,f.f)().update(g.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:a,claimedAt:null,..."open"===b.pending?{notifiedOpen:!0}:{}}).where((0,c.u)(g.alerts.id,b.id))):r.has(b.id)||!e||h?(x++,await (0,f.f)().update(g.alerts).set({pending:null,claimedAt:null}).where((0,c.u)(g.alerts.id,b.id))):y.push(b.id)}return y.length&&await (0,f.f)().update(g.alerts).set({claimedAt:null}).where((0,c.y)(g.alerts.id,y)),{sent:w,dropped:x}}async function I(a){let b=new Date(a.getTime()-864e5),h=e.B`case ${g.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[i,j,k,m,n]=await Promise.all([(0,f.f)().select({ruleKey:g.alerts.ruleKey,severity:g.alerts.severity,title:g.alerts.title,message:g.alerts.message,resourceId:g.alerts.resourceId,startedAt:g.alerts.startedAt}).from(g.alerts).where((0,c.M)(g.alerts.resolvedAt)).orderBy(h,(0,d.A)(g.alerts.startedAt)).limit(50),(0,f.f)().select({n:e.B`count(*)::int`}).from(g.alerts).where((0,c.B)(g.alerts.startedAt,b)),(0,f.f)().select({ruleKey:g.alerts.ruleKey,title:g.alerts.title,resourceId:g.alerts.resourceId,startedAt:g.alerts.startedAt,resolvedAt:g.alerts.resolvedAt}).from(g.alerts).where((0,c.b)((0,c.E)(g.alerts.resolvedAt),(0,c.B)(g.alerts.resolvedAt,b))).orderBy((0,d.A)(g.alerts.resolvedAt)).limit(20),(0,f.f)().select({id:g.resources.id,name:g.resources.name}).from(g.resources).where((0,c.b)((0,c.u)(g.resources.kind,"app"),(0,c.u)(g.resources.monitored,!0),(0,c.M)(g.resources.goneAt))).orderBy(g.resources.name).limit(x.O.apps),(0,l.h)(a)]),o=m.map(a=>a.id),[p,q]=o.length?await Promise.all([(0,f.f)().select({id:g.monitors.resourceId,total:e.B`count(*)::int`,bad:e.B`(count(*) filter (where not ${g.checks.ok}))::int`}).from(g.checks).innerJoin(g.monitors,(0,c.u)(g.monitors.id,g.checks.monitorId)).where((0,c.b)((0,c.y)(g.monitors.resourceId,o),(0,c.B)(g.checks.at,b),(0,c.u)(g.checks.inMaintenance,!1))).groupBy(g.monitors.resourceId),(0,f.f)().select({id:g.storedLogs.resourceId,n:e.B`count(*)::int`}).from(g.storedLogs).where((0,c.b)((0,c.y)(g.storedLogs.resourceId,o),(0,c.B)(g.storedLogs.at,b))).groupBy(g.storedLogs.resourceId)]):[[],[]],r=new Map(p.map(a=>[a.id,a])),s=new Map(q.map(a=>[a.id,a.n])),t=await G();return{now:a,opened:j[0]?.n??0,firing:i.map(({resourceId:a,...b})=>{let c=(0,v.o)({...b,resourceId:a,causedBy:null},t);return{...b,title:c.title,message:c.message}}),resolved:k.flatMap(a=>a.resolvedAt?[{ruleKey:a.ruleKey,title:(0,v.o)({title:a.title,message:"",causedBy:null,resourceId:a.resourceId},t).title,took:(0,u.M)(a.startedAt,a.resolvedAt)}]:[]),apps:m.map(a=>{let b=r.get(a.id);return{name:a.name,uptime:b&&b.total>0?(b.total-b.bad)/b.total*100:null,errors:s.get(a.id)??0}}),providers:n.filter(a=>"ok"!==a.state).map(a=>({label:a.label,text:a.text}))}}async function J(a,b,d){await (0,f.f)().update(g.channels).set(b.ok?{lastSentAt:d,lastError:null}:{lastError:b.error}).where((0,c.u)(g.channels.kind,a))}async function K(a){let[b,c]=await Promise.all([I(a),(0,q.I)("email")]);return(0,o.J)({...b,siteUrl:(0,m.f)().SITE_URL},c)}async function L(a,c){let d=(0,p.f)();if(!d.resendKey||!d.digestFrom)return{ok:!1,kind:"config",error:b.n.notSet("RESEND_API_KEY or DIGEST_FROM")};let e=await A("email_digest");if(!e?.config?.to)return{ok:!1,kind:"config",error:"The daily email digest isn't connected."};let f=await K(a),g=await (0,s.f)(d.resendKey,{from:d.digestFrom,to:e.config.to,subject:f.subject,html:f.html,text:f.text,idempotencyKey:c});return await J("email_digest",g,a),g}async function M(a,b={}){let d=await (0,f.f)().select().from(g.settings).where((0,c.y)(g.settings.key,[y,z])),e=d.find(a=>a.key===y)?.value,h="string"==typeof e?e:null;if(!(0,o.A)(a,h))return;let i=(0,p.f)(),k=await A("email_digest");if(!i.resendKey||!i.digestFrom||!k?.row.enabled||!k.config?.to)return;let{resendKey:l,digestFrom:m}=i,n=k.config.to,q=(0,w.m)(a),r=await (0,o.K)(a,{lastSentDay:h,state:d.find(a=>a.key===z)?.value??null,build:b.build??(()=>K(a)),send:b.send??(a=>(0,s.f)(l,{from:m,to:n,...a,idempotencyKey:`digest-${q}`}))});r.acted&&(r.result&&await J("email_digest",r.result,a),r.state?await (0,f.f)().insert(g.settings).values({key:z,value:r.state}).onConflictDoUpdate({target:g.settings.key,set:{value:r.state,updatedAt:a}}):await (0,f.f)().delete(g.settings).where((0,c.u)(g.settings.key,z)),r.sentDay&&await (0,f.f)().insert(g.settings).values({key:y,value:r.sentDay}).onConflictDoUpdate({target:g.settings.key,set:{value:r.sentDay,updatedAt:a}}),r.event&&await (0,j.f)([{type:"system",kind:"warn",message:r.event.message,detail:r.event.detail,resourceId:null,reason:"DigestFailed",at:a}]))}let N={en:{title:"Test message",message:"If you can read this, alerts reach you here."},id:{title:"Pesan tes",message:"Kalau pesan ini kebaca, alert udah nyampe ke sini."}};async function O(a,c,d={}){if("email_digest"===a)return L(c,`test-${c.getTime()}`);let{send:e,configured:f}=d.sender??await D();if(!f.has(a))return{ok:!1,kind:"config",error:"telegram"===a?`Telegram isn't connected, or ${b.n.notSet("TELEGRAM_BOT_TOKEN")}`:"Discord isn't connected."};let g=await (0,q.I)(a),i=(0,h.l)([{kind:"open",ruleKey:"Test",severity:"info",...N[g],startedAt:c,causedBy:null,provider:null}],c,(0,m.f)().SITE_URL,g),j=await e(a,"telegram"===a?i.telegram:i.discord);return await J(a,j,c),j}async function P(){let a=(0,p.f)(),c={telegram:a.telegramToken?null:b.n.notSet("TELEGRAM_BOT_TOKEN"),discord:null,email_digest:a.resendKey&&a.digestFrom?null:b.n.notSet("RESEND_API_KEY or DIGEST_FROM")},[d,e,f]=await Promise.all([A("telegram"),A("discord"),A("email_digest")]),g=(a,b)=>({kind:a,connected:null!==b,enabled:b?.row.enabled??!1,hint:b?(0,r.f)(a,b.config):null,lastSentAt:b?.row.lastSentAt??null,lastError:b?.row.lastError??null,envMissing:c[a]});return[g("telegram",d),g("discord",e),g("email_digest",f)]}a.s(["k",0,P,"q",0,H,"G",0,F,"P",0,J,"L",0,O,"y",0,C,"J",0,M,"Q",0,E,"Y",0,B])},390626,80997,718025,a=>{var b=a.i(19809),c=a.i(371289);let d=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;function e(a){return d.test(a.trim())?null:"Paste the whole webhook URL from Discord."}async function f(a,d,g={}){let h;if((0,c.W)())return{ok:!1,kind:"config",error:b.Y};if(e(a))return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{h=await (g.fetch??fetch)(a,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(g.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:d.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===h.status||h.ok)return{ok:!0};if(429===h.status){let a=await h.json().catch(()=>null),b=Math.ceil(a?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:b,error:`Discord asked us to wait ${b} s.`}}return 404===h.status||401===h.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:h.status>=500?"transient":"config",error:`Discord returned an error (${h.status}).`}}a.s(["$",0,f,"e",0,e],390626);var g=a.i(192738),h=a.i(67890),i=a.i(245710),j=a.i(469762),k=a.i(968715),l=a.i(556987);function m(a,b){let c=Number(new Intl.DateTimeFormat("en-GB",{timeZone:i.h,hour:"2-digit",hourCycle:"h23"}).format(a));return(0,k.m)(a)!==b&&c>=7}let n={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:a=>a,noChecks:"no checks",errors:a=>`${a} stored error${1===a?"":"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:a=>a.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:a=>`${a} error tersimpan`}},o={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},p=[5,15,30,60];async function q(a,b){let c={acted:!1,state:b.state,sentDay:null,event:null,result:null};if(!m(a,b.lastSentDay))return c;let d=(0,k.m)(a),e=b.state&&b.state.day===d?b.state:null;if(e?.stopped)return{...c,state:e};if(e&&e.attempts>0){let b=(p[e.attempts-1]??p[p.length-1])*6e4;if(e.lastAttemptAt&&a.getTime()-new Date(e.lastAttemptAt).getTime()<b)return{...c,state:e}}e??={day:d,...await b.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let f=await b.send({subject:e.subject,html:e.html,text:e.text});if(f.ok)return{acted:!0,state:null,sentDay:d,event:null,result:f};let g=e.attempts+1,h="config"===f.kind||g>=5,i="config"===f.kind?`${f.error}. Fix it and the next digest goes out tomorrow.`:`${f.error} Gave up after ${g} attempts today.`;return{acted:!0,sentDay:null,result:f,state:{...e,attempts:g,lastAttemptAt:a.toISOString(),stopped:h,lastError:f.error},event:h?{message:"Daily digest not sent",detail:i}:null}}a.s(["J",0,function(a,b="en"){let c=n[b],d=`${a.siteUrl.replace(/\/+$/,"")}/alerts`,e=((a,b)=>{let{day:c,month:d}=(0,i.C)(a);return`${c} ${"id"===b?o[d]??d:d}`})(a.now,b),f=`${a.firing.length} ${c.firing}, ${a.opened} ${c.opened}, ${a.resolved.length} ${c.resolved}`,k=`Watchbell \xb7 ${e} \xb7 ${f}`,m=[...a.apps].sort((a,b)=>(a.uptime??101)-(b.uptime??101)||b.errors-a.errors||a.name.localeCompare(b.name)),p=a.firing.map(a=>`${g.Z[b][a.severity]} \xb7 ${a.ruleKey} \xb7 ${a.title}: ${"id"===b?(0,h.f)(a.ruleKey,a.message):a.message}`),q=a.resolved.map(a=>`${a.ruleKey} \xb7 ${a.title} (${c.after} ${c.took(a.took)})`),r=m.map(a=>`${a.name}: ${null===a.uptime?c.noChecks:`${(0,j.C)(a.uptime)} ${c.up}`}, ${c.errors(a.errors)}`),s=a.providers.map(a=>`${a.label}: ${a.text}`),t=[`Watchbell \xb7 ${e}`,`${f} ${c.last24}`,"",c.stillHead,...p.length?p.map(a=>`- ${a}`):[c.noFiring],"",c.resolvedHead,...q.length?q.map(a=>`- ${a}`):[c.noResolved],...r.length?["",c.appsHead,...r.map(a=>`- ${a}`)]:[],...s.length?["",c.providersHead,...s.map(a=>`- ${a}`)]:[],"",`${c.open}: ${d}`].join("\n"),u=a=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,g.H)(a)}</h3>`,v=(a,b)=>a.length?`<ul style="margin:0;padding-left:18px">${a.map(a=>`<li style="margin:2px 0">${(0,g.H)(a)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,g.H)(b)}</p>`,w=['<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,g.H)(e)}</h2>`,`<p style="margin:0;color:#596170">${(0,g.H)(`${f} ${c.last24}`)}</p>`,u(c.stillHead),v(p,c.noFiring),u(c.resolvedHead),v(q,c.noResolved),...r.length?[u(c.appsHead),v(r,"")]:[],...s.length?[u(c.providersHead),v(s,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,g.H)(d).replace(/"/g,"&quot;")}" style="color:#1f45c9">${(0,g.H)(c.open)}</a></p>`,"</div>"].join("");return{subject:(0,l.G)(k),html:(0,l.G)(w),text:(0,l.G)(t)}},"A",0,m,"K",0,q],80997),a.s(["f",0,function(a=process.env){let b=a.TELEGRAM_BOT_TOKEN?.trim()??"",c=a.RESEND_API_KEY?.trim()??"",d=a.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(b)?b:null,resendKey:c.startsWith("re_")?c:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(d)?d:null}}],718025)},288879,204784,a=>{a.s(["f",0,function(a,b){if("telegram"===a)return`${b.chatLabel||"Chat"} \xb7 …${b.chatId.slice(-4)}`;if("discord"===a){let a=/\/webhooks\/(\d+)\//.exec(b.url)?.[1]??"";return`webhook …${a.slice(-4)}`}return`${b.to.slice(0,2)}…@…`}],288879);var b=a.i(19809),c=a.i(371289);async function d(a,e,f={}){let g;if((0,c.W)())return{ok:!1,kind:"config",error:b.Y};try{g=await (f.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":e.idempotencyKey},body:JSON.stringify({from:e.from,to:[e.to],subject:e.subject,html:e.html,text:e.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(g.ok)return{ok:!0};let h=await g.json().catch(()=>null);return 429===g.status||g.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${g.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(h?.message??g.status).slice(0,200)}`}}a.s(["f",0,d],204784)},552543,a=>{var b=a.i(186133);function c(a){let b=a&&"object"==typeof a?a:null,c=b?b.lang:a,d=a=>{var d;return"string"==typeof(d=b&&a in b?b[a]:c)&&"id"===d.trim().toLowerCase()?"id":"en"};return{telegram:d("telegram"),discord:d("discord"),email:d("email")}}async function d(){try{return c(await (0,b.l)())}catch{return c(null)}}async function e(a="telegram"){return(await d())[a]}a.s(["c",0,["telegram","discord","email"],"H",0,c,"I",0,e,"B",0,d,"t",0,function(a,b,c){return a[b][c]}])},446914,a=>{var b=a.i(19809),c=a.i(462820),d=a.i(371289);async function e(a,c,f,g,h=5e3){let i;if((0,d.W)())return{ok:!1,code:null,description:b.Y,retryAfter:null};try{i=await g(`https://api.telegram.org/bot${a}/${c}`,{...f,signal:AbortSignal.timeout(h),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let j=await i.json().catch(()=>null);return j?.ok?{ok:!0,result:j.result}:{ok:!1,code:j?.error_code??i.status,description:String(j?.description??`HTTP ${i.status}`).slice(0,200),retryAfter:j?.parameters?.retry_after??null}}async function f(a,b,c,d={}){let g=await e(a,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:b,text:c,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...d.replyMarkup?{reply_markup:d.replyMarkup}:{}})},d.fetch??fetch);return g.ok?{ok:!0}:429===g.code?{ok:!1,kind:"transient",retryAfterS:g.retryAfter??30,error:`Telegram asked us to wait ${g.retryAfter??30} s.`}:null===g.code||g.code>=500?{ok:!1,kind:"transient",error:null===g.code?g.description:`Telegram returned an error (${g.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${g.description}`}}async function g(a,b={}){let d=await e(a,"getUpdates?limit=20&timeout=0",{method:"GET"},b.fetch??fetch);if(!d.ok)return 409===d.code?{ok:!1,error:"This bot has a webhook set, so the console can't list chats. Remove the webhook or paste the chat id."}:401===d.code||404===d.code?{ok:!1,error:`Telegram rejected TELEGRAM_BOT_TOKEN. Check the value ${c.n.checkWhere}.`}:{ok:!1,error:"Couldn't reach Telegram. Try again."};let f=new Map;for(let a of Array.isArray(d.result)?d.result:[]){let b=a.message?.chat??a.my_chat_member?.chat??a.channel_post?.chat;b&&"number"==typeof b.id&&f.set(String(b.id),`${b.title??b.first_name??b.username??"Chat"} (${b.type??"chat"})`)}return{ok:!0,chats:[...f].map(([a,b])=>({id:a,label:b}))}}a.s(["N",0,g,"I",0,f,"z",0,e])}]})();
12
+ 👉 ${r(a)}`:""}`,`**Watchbell**: ${n(a,e)} \xb7 ${(0,b.U)(c)} ${(0,b.J)(c)}`,`
13
+ ${f}`,t)}},"H",0,l],192738)},49146,a=>{var b=a.i(462820),c=a.i(93321),d=a.i(530385),e=a.i(351674),f=a.i(548734),g=a.i(837137),h=a.i(192738),i=a.i(358179),j=a.i(601219),k=a.i(247730),l=a.i(46396),m=a.i(492665),n=a.i(390626),o=a.i(80997),p=a.i(718025),q=a.i(552543),r=a.i(288879),s=a.i(204784),t=a.i(446914),u=a.i(71575),v=a.i(556987),w=a.i(245710),x=a.i(910697);let y="digest.lastSentDay",z="digest.state";async function A(a){let[b]=await (0,f.f)().select().from(g.channels).where((0,c.u)(g.channels.kind,a)).limit(1);if(!b)return null;try{return{row:b,config:JSON.parse((0,i.K)({ciphertext:b.configCiphertext,iv:b.configIv},(0,m.f)().OPS_ENCRYPTION_KEY))}}catch{return null}}async function B(a,b){let c=(0,i.l)(JSON.stringify(b),(0,m.f)().OPS_ENCRYPTION_KEY),d={configCiphertext:c.ciphertext,configIv:c.iv,keyVersion:c.keyVersion,enabled:!0,lastError:null,updatedAt:new Date};await (0,f.f)().insert(g.channels).values({kind:a,...d}).onConflictDoUpdate({target:g.channels.kind,set:d})}async function C(a,b){return(await (0,f.f)().update(g.channels).set({enabled:b,updatedAt:new Date}).where((0,c.u)(g.channels.kind,a)).returning({kind:g.channels.kind})).length>0}async function D(){let a=(0,p.f)(),[b,c]=await Promise.all([A("telegram"),A("discord")]),d=new Set;return a.telegramToken&&b?.row.enabled&&b.config?.chatId&&d.add("telegram"),c?.row.enabled&&c.config?.url&&d.add("discord"),{send:(d,e)=>"telegram"===d?(0,t.I)(a.telegramToken,b.config.chatId,e):(0,n.$)(c.config.url,e),configured:d}}async function E(){let a=(0,p.f)().telegramToken;if(!a)return null;let b=await A("telegram");return b?.row.enabled&&b.config?.chatId?{token:a,chatId:b.config.chatId}:null}async function F(){let a=await A("discord");return a?.row.enabled&&a.config?.url?{url:a.config.url}:null}let G=()=>(0,k.f)().catch(()=>v.a);async function H(a,b,i={}){var j;if(b-Date.now()<6e3)return{sent:0,dropped:0};let k=await (0,f.f)().select({a:g.alerts,channels:g.alertRules.channels}).from(g.alerts).innerJoin(g.alertRules,(0,c.u)(g.alertRules.key,g.alerts.ruleKey)).where((0,c.b)((0,c.E)(g.alerts.pending),e.B`(${g.alerts.pending} = 'resolve') = (${g.alerts.resolvedAt} is not null)`)).orderBy((0,d.M)(g.alerts.pendingSince)).limit(50);if(!k.length)return{sent:0,dropped:0};let l=new Set((await (0,f.f)().update(g.alerts).set({claimedAt:a}).where((j=k.map(a=>a.a.id),(0,c.b)((0,c.y)(g.alerts.id,j),(0,c.E)(g.alerts.pending),(0,c.F)((0,c.M)(g.alerts.claimedAt),(0,c.S)(g.alerts.claimedAt,new Date(a.getTime()-12e4)))))).returning({id:g.alerts.id})).map(a=>a.id)),n=k.filter(a=>l.has(a.a.id));if(!n.length)return{sent:0,dropped:0};let{send:o,configured:p}=i.sender??await D(),r=new Set(n.filter(({a:b})=>"resolve"!==b.pending&&(b.silencedUntilResolved||null!==b.silencedUntil&&b.silencedUntil.getTime()>a.getTime())).map(({a})=>a.id)),[s,t]=await Promise.all([G(),(0,q.B)()]),u=new Set;for(let b of["telegram","discord"]){if(!p.has(b))continue;let d=n.filter(a=>a.channels.includes(b)&&!r.has(a.a.id));if(!d.length)continue;let e=d.map(({a})=>{let b=(0,v.o)(a,s);return{kind:a.pending,ruleKey:a.ruleKey,severity:a.severity,title:b.title,message:b.message,startedAt:a.startedAt,causedBy:b.causedBy,provider:a.providerIncident}}),i=(0,h.l)(e,a,(0,m.f)().SITE_URL,t[b]),j=await o(b,(0,v.G)("telegram"===b?i.telegram:i.discord));await (0,f.f)().update(g.channels).set(j.ok?{lastSentAt:a,lastError:null}:{lastError:j.error}).where((0,c.u)(g.channels.kind,b)),j.ok&&d.forEach(({a})=>u.add(a.id))}let w=0,x=0,y=[];for(let{a:b,channels:d}of n){let e=d.some(a=>p.has(a)),h=null!==b.pendingSince&&a.getTime()-b.pendingSince.getTime()>18e5;u.has(b.id)?(w++,await (0,f.f)().update(g.alerts).set({pending:null,pendingSince:null,lastNotifiedAt:a,claimedAt:null,..."open"===b.pending?{notifiedOpen:!0}:{}}).where((0,c.u)(g.alerts.id,b.id))):r.has(b.id)||!e||h?(x++,await (0,f.f)().update(g.alerts).set({pending:null,claimedAt:null}).where((0,c.u)(g.alerts.id,b.id))):y.push(b.id)}return y.length&&await (0,f.f)().update(g.alerts).set({claimedAt:null}).where((0,c.y)(g.alerts.id,y)),{sent:w,dropped:x}}async function I(a){let b=new Date(a.getTime()-864e5),h=e.B`case ${g.alerts.severity} when 'critical' then 0 when 'warning' then 1 else 2 end`,[i,j,k,m,n]=await Promise.all([(0,f.f)().select({ruleKey:g.alerts.ruleKey,severity:g.alerts.severity,title:g.alerts.title,message:g.alerts.message,resourceId:g.alerts.resourceId,startedAt:g.alerts.startedAt}).from(g.alerts).where((0,c.M)(g.alerts.resolvedAt)).orderBy(h,(0,d.A)(g.alerts.startedAt)).limit(50),(0,f.f)().select({n:e.B`count(*)::int`}).from(g.alerts).where((0,c.B)(g.alerts.startedAt,b)),(0,f.f)().select({ruleKey:g.alerts.ruleKey,title:g.alerts.title,resourceId:g.alerts.resourceId,startedAt:g.alerts.startedAt,resolvedAt:g.alerts.resolvedAt}).from(g.alerts).where((0,c.b)((0,c.E)(g.alerts.resolvedAt),(0,c.B)(g.alerts.resolvedAt,b))).orderBy((0,d.A)(g.alerts.resolvedAt)).limit(20),(0,f.f)().select({id:g.resources.id,name:g.resources.name}).from(g.resources).where((0,c.b)((0,c.u)(g.resources.kind,"app"),(0,c.u)(g.resources.monitored,!0),(0,c.M)(g.resources.goneAt))).orderBy(g.resources.name).limit(x.O.apps),(0,l.h)(a)]),o=m.map(a=>a.id),[p,q]=o.length?await Promise.all([(0,f.f)().select({id:g.monitors.resourceId,total:e.B`count(*)::int`,bad:e.B`(count(*) filter (where not ${g.checks.ok}))::int`}).from(g.checks).innerJoin(g.monitors,(0,c.u)(g.monitors.id,g.checks.monitorId)).where((0,c.b)((0,c.y)(g.monitors.resourceId,o),(0,c.B)(g.checks.at,b),(0,c.u)(g.checks.inMaintenance,!1))).groupBy(g.monitors.resourceId),(0,f.f)().select({id:g.storedLogs.resourceId,n:e.B`count(*)::int`}).from(g.storedLogs).where((0,c.b)((0,c.y)(g.storedLogs.resourceId,o),(0,c.B)(g.storedLogs.at,b))).groupBy(g.storedLogs.resourceId)]):[[],[]],r=new Map(p.map(a=>[a.id,a])),s=new Map(q.map(a=>[a.id,a.n])),t=await G();return{now:a,opened:j[0]?.n??0,firing:i.map(({resourceId:a,...b})=>{let c=(0,v.o)({...b,resourceId:a,causedBy:null},t);return{...b,title:c.title,message:c.message}}),resolved:k.flatMap(a=>a.resolvedAt?[{ruleKey:a.ruleKey,title:(0,v.o)({title:a.title,message:"",causedBy:null,resourceId:a.resourceId},t).title,took:(0,u.M)(a.startedAt,a.resolvedAt)}]:[]),apps:m.map(a=>{let b=r.get(a.id);return{name:a.name,uptime:b&&b.total>0?(b.total-b.bad)/b.total*100:null,errors:s.get(a.id)??0}}),providers:n.filter(a=>"ok"!==a.state).map(a=>({label:a.label,text:a.text}))}}async function J(a,b,d){await (0,f.f)().update(g.channels).set(b.ok?{lastSentAt:d,lastError:null}:{lastError:b.error}).where((0,c.u)(g.channels.kind,a))}async function K(a){let[b,c]=await Promise.all([I(a),(0,q.I)("email")]);return(0,o.J)({...b,siteUrl:(0,m.f)().SITE_URL},c)}async function L(a,c){let d=(0,p.f)();if(!d.resendKey||!d.digestFrom)return{ok:!1,kind:"config",error:b.n.notSet("RESEND_API_KEY or DIGEST_FROM")};let e=await A("email_digest");if(!e?.config?.to)return{ok:!1,kind:"config",error:"The daily email digest isn't connected."};let f=await K(a),g=await (0,s.f)(d.resendKey,{from:d.digestFrom,to:e.config.to,subject:f.subject,html:f.html,text:f.text,idempotencyKey:c});return await J("email_digest",g,a),g}async function M(a,b={}){let d=await (0,f.f)().select().from(g.settings).where((0,c.y)(g.settings.key,[y,z])),e=d.find(a=>a.key===y)?.value,h="string"==typeof e?e:null;if(!(0,o.A)(a,h))return;let i=(0,p.f)(),k=await A("email_digest");if(!i.resendKey||!i.digestFrom||!k?.row.enabled||!k.config?.to)return;let{resendKey:l,digestFrom:m}=i,n=k.config.to,q=(0,w.x)(a),r=await (0,o.K)(a,{lastSentDay:h,state:d.find(a=>a.key===z)?.value??null,build:b.build??(()=>K(a)),send:b.send??(a=>(0,s.f)(l,{from:m,to:n,...a,idempotencyKey:`digest-${q}`}))});r.acted&&(r.result&&await J("email_digest",r.result,a),r.state?await (0,f.f)().insert(g.settings).values({key:z,value:r.state}).onConflictDoUpdate({target:g.settings.key,set:{value:r.state,updatedAt:a}}):await (0,f.f)().delete(g.settings).where((0,c.u)(g.settings.key,z)),r.sentDay&&await (0,f.f)().insert(g.settings).values({key:y,value:r.sentDay}).onConflictDoUpdate({target:g.settings.key,set:{value:r.sentDay,updatedAt:a}}),r.event&&await (0,j.f)([{type:"system",kind:"warn",message:r.event.message,detail:r.event.detail,resourceId:null,reason:"DigestFailed",at:a}]))}let N={en:{title:"Test message",message:"If you can read this, alerts reach you here."},id:{title:"Pesan tes",message:"Kalau pesan ini kebaca, alert udah nyampe ke sini."}};async function O(a,c,d={}){if("email_digest"===a)return L(c,`test-${c.getTime()}`);let{send:e,configured:f}=d.sender??await D();if(!f.has(a))return{ok:!1,kind:"config",error:"telegram"===a?`Telegram isn't connected, or ${b.n.notSet("TELEGRAM_BOT_TOKEN")}`:"Discord isn't connected."};let g=await (0,q.I)(a),i=(0,h.l)([{kind:"open",ruleKey:"Test",severity:"info",...N[g],startedAt:c,causedBy:null,provider:null}],c,(0,m.f)().SITE_URL,g),j=await e(a,"telegram"===a?i.telegram:i.discord);return await J(a,j,c),j}async function P(){let a=(0,p.f)(),c={telegram:a.telegramToken?null:b.n.notSet("TELEGRAM_BOT_TOKEN"),discord:null,email_digest:a.resendKey&&a.digestFrom?null:b.n.notSet("RESEND_API_KEY or DIGEST_FROM")},[d,e,f]=await Promise.all([A("telegram"),A("discord"),A("email_digest")]),g=(a,b)=>({kind:a,connected:null!==b,enabled:b?.row.enabled??!1,hint:b?(0,r.f)(a,b.config):null,lastSentAt:b?.row.lastSentAt??null,lastError:b?.row.lastError??null,envMissing:c[a]});return[g("telegram",d),g("discord",e),g("email_digest",f)]}a.s(["k",0,P,"q",0,H,"G",0,F,"P",0,J,"L",0,O,"y",0,C,"J",0,M,"Q",0,E,"Y",0,B])},390626,80997,718025,a=>{var b=a.i(19809),c=a.i(371289);let d=/^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api\/webhooks\/\d{5,25}\/[\w-]{20,}$/;function e(a){return d.test(a.trim())?null:"Paste the whole webhook URL from Discord."}async function f(a,d,g={}){let h;if((0,c.W)())return{ok:!1,kind:"config",error:b.Y};if(e(a))return{ok:!1,kind:"config",error:"The saved Discord webhook URL isn't valid."};try{h=await (g.fetch??fetch)(a,{method:"POST",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(g.timeoutMs??5e3),cache:"no-store",body:JSON.stringify({content:d.slice(0,2e3),username:"Watchbell",allowed_mentions:{parse:[]}})})}catch{return{ok:!1,kind:"transient",error:"Discord didn't answer."}}if(204===h.status||h.ok)return{ok:!0};if(429===h.status){let a=await h.json().catch(()=>null),b=Math.ceil(a?.retry_after??5);return{ok:!1,kind:"transient",retryAfterS:b,error:`Discord asked us to wait ${b} s.`}}return 404===h.status||401===h.status?{ok:!1,kind:"config",error:"Discord says this webhook no longer exists."}:{ok:!1,kind:h.status>=500?"transient":"config",error:`Discord returned an error (${h.status}).`}}a.s(["$",0,f,"e",0,e],390626);var g=a.i(192738),h=a.i(67890),i=a.i(245710),j=a.i(469762),k=a.i(556987);function l(a,b){return(0,i.M)(a,b)&&(0,i.z)(a).hour>=7}let m={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:a=>a,noChecks:"no checks",errors:a=>`${a} stored error${1===a?"":"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:a=>a.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:a=>`${a} error tersimpan`}},n={May:"Mei",Aug:"Agu",Oct:"Okt",Dec:"Des"},o=[5,15,30,60];async function p(a,b){let c={acted:!1,state:b.state,sentDay:null,event:null,result:null};if(!l(a,b.lastSentDay))return c;let d=(0,i.x)(a),e=b.state&&b.state.day===d?b.state:null;if(e?.stopped)return{...c,state:e};if(e&&e.attempts>0){let b=(o[e.attempts-1]??o[o.length-1])*6e4;if(e.lastAttemptAt&&a.getTime()-new Date(e.lastAttemptAt).getTime()<b)return{...c,state:e}}e??={day:d,...await b.build(),attempts:0,lastAttemptAt:null,stopped:!1,lastError:null};let f=await b.send({subject:e.subject,html:e.html,text:e.text});if(f.ok)return{acted:!0,state:null,sentDay:d,event:null,result:f};let g=e.attempts+1,h="config"===f.kind||g>=5,j="config"===f.kind?`${f.error}. Fix it and the next digest goes out tomorrow.`:`${f.error} Gave up after ${g} attempts today.`;return{acted:!0,sentDay:null,result:f,state:{...e,attempts:g,lastAttemptAt:a.toISOString(),stopped:h,lastError:f.error},event:h?{message:"Daily digest not sent",detail:j}:null}}a.s(["J",0,function(a,b="en"){let c=m[b],d=`${a.siteUrl.replace(/\/+$/,"")}/alerts`,e=((a,b)=>{let{day:c,month:d}=(0,i.e)(a);return`${c} ${"id"===b?n[d]??d:d}`})(a.now,b),f=`${a.firing.length} ${c.firing}, ${a.opened} ${c.opened}, ${a.resolved.length} ${c.resolved}`,l=`Watchbell \xb7 ${e} \xb7 ${f}`,o=[...a.apps].sort((a,b)=>(a.uptime??101)-(b.uptime??101)||b.errors-a.errors||a.name.localeCompare(b.name)),p=a.firing.map(a=>`${g.Z[b][a.severity]} \xb7 ${a.ruleKey} \xb7 ${a.title}: ${"id"===b?(0,h.f)(a.ruleKey,a.message):a.message}`),q=a.resolved.map(a=>`${a.ruleKey} \xb7 ${a.title} (${c.after} ${c.took(a.took)})`),r=o.map(a=>`${a.name}: ${null===a.uptime?c.noChecks:`${(0,j.C)(a.uptime)} ${c.up}`}, ${c.errors(a.errors)}`),s=a.providers.map(a=>`${a.label}: ${a.text}`),t=[`Watchbell \xb7 ${e}`,`${f} ${c.last24}`,"",c.stillHead,...p.length?p.map(a=>`- ${a}`):[c.noFiring],"",c.resolvedHead,...q.length?q.map(a=>`- ${a}`):[c.noResolved],...r.length?["",c.appsHead,...r.map(a=>`- ${a}`)]:[],...s.length?["",c.providersHead,...s.map(a=>`- ${a}`)]:[],"",`${c.open}: ${d}`].join("\n"),u=a=>`<h3 style="font:600 14px system-ui,sans-serif;margin:18px 0 6px">${(0,g.H)(a)}</h3>`,v=(a,b)=>a.length?`<ul style="margin:0;padding-left:18px">${a.map(a=>`<li style="margin:2px 0">${(0,g.H)(a)}</li>`).join("")}</ul>`:`<p style="margin:0;color:#596170">${(0,g.H)(b)}</p>`,w=['<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,g.H)(e)}</h2>`,`<p style="margin:0;color:#596170">${(0,g.H)(`${f} ${c.last24}`)}</p>`,u(c.stillHead),v(p,c.noFiring),u(c.resolvedHead),v(q,c.noResolved),...r.length?[u(c.appsHead),v(r,"")]:[],...s.length?[u(c.providersHead),v(s,"")]:[],`<p style="margin:18px 0 0"><a href="${(0,g.H)(d).replace(/"/g,"&quot;")}" style="color:#1f45c9">${(0,g.H)(c.open)}</a></p>`,"</div>"].join("");return{subject:(0,k.G)(l),html:(0,k.G)(w),text:(0,k.G)(t)}},"A",0,l,"K",0,p],80997),a.s(["f",0,function(a=process.env){let b=a.TELEGRAM_BOT_TOKEN?.trim()??"",c=a.RESEND_API_KEY?.trim()??"",d=a.DIGEST_FROM?.trim()??"";return{telegramToken:/^\d+:[\w-]{20,}$/.test(b)?b:null,resendKey:c.startsWith("re_")?c:null,digestFrom:/<?[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+>?$/.test(d)?d:null}}],718025)},288879,204784,a=>{a.s(["f",0,function(a,b){if("telegram"===a)return`${b.chatLabel||"Chat"} \xb7 …${b.chatId.slice(-4)}`;if("discord"===a){let a=/\/webhooks\/(\d+)\//.exec(b.url)?.[1]??"";return`webhook …${a.slice(-4)}`}return`${b.to.slice(0,2)}…@…`}],288879);var b=a.i(19809),c=a.i(371289);async function d(a,e,f={}){let g;if((0,c.W)())return{ok:!1,kind:"config",error:b.Y};try{g=await (f.fetch??fetch)("https://api.resend.com/emails",{method:"POST",signal:AbortSignal.timeout(5e3),cache:"no-store",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json","User-Agent":"OpsConsole/1.0","Idempotency-Key":e.idempotencyKey},body:JSON.stringify({from:e.from,to:[e.to],subject:e.subject,html:e.html,text:e.text})})}catch{return{ok:!1,kind:"transient",error:"Resend didn't answer."}}if(g.ok)return{ok:!0};let h=await g.json().catch(()=>null);return 429===g.status||g.status>=500?{ok:!1,kind:"transient",error:`Resend returned an error (${g.status}).`}:{ok:!1,kind:"config",error:`Resend: ${String(h?.message??g.status).slice(0,200)}`}}a.s(["f",0,d],204784)},552543,a=>{var b=a.i(186133);function c(a){let b=a&&"object"==typeof a?a:null,c=b?b.lang:a,d=a=>{var d;return"string"==typeof(d=b&&a in b?b[a]:c)&&"id"===d.trim().toLowerCase()?"id":"en"};return{telegram:d("telegram"),discord:d("discord"),email:d("email")}}async function d(){try{return c(await (0,b.l)())}catch{return c(null)}}async function e(a="telegram"){return(await d())[a]}a.s(["c",0,["telegram","discord","email"],"H",0,c,"I",0,e,"B",0,d,"t",0,function(a,b,c){return a[b][c]}])},446914,a=>{var b=a.i(19809),c=a.i(462820),d=a.i(371289);async function e(a,c,f,g,h=5e3){let i;if((0,d.W)())return{ok:!1,code:null,description:b.Y,retryAfter:null};try{i=await g(`https://api.telegram.org/bot${a}/${c}`,{...f,signal:AbortSignal.timeout(h),cache:"no-store"})}catch{return{ok:!1,code:null,description:"Telegram didn't answer.",retryAfter:null}}let j=await i.json().catch(()=>null);return j?.ok?{ok:!0,result:j.result}:{ok:!1,code:j?.error_code??i.status,description:String(j?.description??`HTTP ${i.status}`).slice(0,200),retryAfter:j?.parameters?.retry_after??null}}async function f(a,b,c,d={}){let g=await e(a,"sendMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:b,text:c,parse_mode:"HTML",link_preview_options:{is_disabled:!0},...d.replyMarkup?{reply_markup:d.replyMarkup}:{}})},d.fetch??fetch);return g.ok?{ok:!0}:429===g.code?{ok:!1,kind:"transient",retryAfterS:g.retryAfter??30,error:`Telegram asked us to wait ${g.retryAfter??30} s.`}:null===g.code||g.code>=500?{ok:!1,kind:"transient",error:null===g.code?g.description:`Telegram returned an error (${g.code}).`}:{ok:!1,kind:"config",error:`Telegram: ${g.description}`}}async function g(a,b={}){let d=await e(a,"getUpdates?limit=20&timeout=0",{method:"GET"},b.fetch??fetch);if(!d.ok)return 409===d.code?{ok:!1,error:"This bot has a webhook set, so the console can't list chats. Remove the webhook or paste the chat id."}:401===d.code||404===d.code?{ok:!1,error:`Telegram rejected TELEGRAM_BOT_TOKEN. Check the value ${c.n.checkWhere}.`}:{ok:!1,error:"Couldn't reach Telegram. Try again."};let f=new Map;for(let a of Array.isArray(d.result)?d.result:[]){let b=a.message?.chat??a.my_chat_member?.chat??a.channel_post?.chat;b&&"number"==typeof b.id&&f.set(String(b.id),`${b.title??b.first_name??b.username??"Chat"} (${b.type??"chat"})`)}return{ok:!0,chats:[...f].map(([a,b])=>({id:a,label:b}))}}a.s(["N",0,g,"I",0,f,"z",0,e])}]})();
14
14
 
15
15
  //# sourceMappingURL=src_lib_005l0kcpyu43o._.js.map
@@ -1,5 +1,5 @@
1
- (()=>{"use strict";module.exports=[544854,a=>{var b=a.i(727028),c=a.i(556987);let d="Watchbell backups",e="Watchpost backups",f=["January","February","March","April","May","June","July","August","September","October","November","December"];function g(a){let b=new Date(a.getTime()+252e5);return`${b.getUTCFullYear()}-${String(b.getUTCMonth()+1).padStart(2,"0")}`}function h(a){let[b,c]=a.split("-").map(Number);return{start:new Date(Date.UTC(b,c-1,1)-252e5),end:new Date(Date.UTC(b,c,1)-252e5)}}function i(a){let[b,c]=a.split("-").map(Number);return 1===c?`${b-1}-12`:`${b}-${String(c-1).padStart(2,"0")}`}function j(a){let[b,c]=a.split("-").map(Number);return`${f[c-1]} ${b}`}function k(a){if(!a)return"";let b=new Date(a.getTime()+252e5),c=a=>String(a).padStart(2,"0");return`${b.getUTCFullYear()}-${c(b.getUTCMonth()+1)}-${c(b.getUTCDate())} ${c(b.getUTCHours())}:${c(b.getUTCMinutes())}`}let l=(a,b)=>a>0?Math.round((a-b)/a*1e5)/1e3:"",m=a=>{if(!a.length)return null;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2?b[c]:Math.round((b[c-1]+b[c])/2)},n=a=>a.reduce((a,b)=>a+b,0),o=a=>"production"===a.target,p=a=>"ERROR"===a.state,q={supabase_project:"Supabase",neon_project:"Neon",firestore:"Firebase"};function r(a,b){if(!a)return"";let c=Date.parse(a);return Number.isFinite(c)?Math.floor((c-b.getTime())/864e5):""}let s=a=>null===a?"":Math.round(a/1048576*10)/10;function t(a){if(null===a)return"";if("number"==typeof a||"boolean"==typeof a)return String(a);let b=/^[=+\-@\t\r]/.test(a)?`'${a}`:a;return/[",\r\n]/.test(b)?`"${b.replace(/"/g,'""')}"`:b}let u=["record","at","subject","resource_id","checks","failures","p50_ms","p95_ms","max_ms","status_5xx","maintenance","type","kind","reason","count","message","detail"];a.s(["R",0,d,"Z",0,3,"C",0,e,"O",0,["Overview","Applications","Incidents","Databases","Domains"],"m",0,function(a){let{start:b,end:d}=h(a.month),e=a.partial&&a.generatedAt<d?a.generatedAt:d,f=a.deployments.filter(o),g=n(a.rollups.map(a=>a.checks)),i=n(a.rollups.map(a=>a.failures)),j=a=>(0,c.G)(a),t=[["Watchbell backup",a.month],["Covers",`${k(b)} to ${k(e)} WIB${a.partial?" (month so far)":""}`],["Kind",a.partial?"Partial: Back up now":"Full month"],["Generated",`${k(a.generatedAt)} WIB`],[],["Applications watched",a.apps.length],["Uptime, all monitors (%)",l(g,i)],["Checks (rolled-up hours)",g],["Failed checks",i],["Incidents (alerts opened)",a.alerts.length],["Critical incidents",a.alerts.filter(a=>"critical"===a.severity).length],["Production deployments",f.length],["Failed production deployments",f.filter(p).length],["Events",n(a.events.map(a=>a.count))]],u=[["Application","Monitors","Checks","Uptime (%)","p95 response, typical hour (ms)","p95 response, worst hour (ms)","5xx responses","Production deploys","Failed production deploys"]];for(let b of[...a.apps].sort((a,b)=>a.name.localeCompare(b.name))){let c=a.rollups.filter(a=>a.appId===b.id),d=c.map(a=>a.p95Ms).filter(a=>null!==a),e=f.filter(a=>a.appId===b.id);u.push([j(b.name),new Set(c.map(a=>a.monitorId)).size,n(c.map(a=>a.checks)),l(n(c.map(a=>a.checks)),n(c.map(a=>a.failures))),m(d),d.length?Math.max(...d):null,n(c.map(a=>a.status5xx)),e.length,e.filter(p).length])}let v=[["Rule","Severity","Subject","Started (WIB)","Resolved (WIB)","Duration","Message"]];for(let b of[...a.alerts].sort((a,b)=>a.startedAt.getTime()-b.startedAt.getTime())){let d=(0,c.o)({title:b.title,message:b.message,causedBy:null,resourceId:b.resourceId},a.book);v.push([b.ruleKey,b.severity,d.title,k(b.startedAt),k(b.resolvedAt),function(a,b,c){let d=Math.max(0,Math.round(((b??c).getTime()-a.getTime())/6e4)),e=d<60?`${d} min`:d<2880?`${Math.floor(d/60)} h ${d%60} min`:`${Math.round(d/1440)} days`;return b?e:`${e} (still open)`}(b.startedAt,b.resolvedAt,e),d.message])}let w=[["Database","Provider","Account","State at backup","Status changes this month","Size (MB)","Neon CU-hours this period","Firestore reads (last reading)"]];for(let b of[...a.databases].sort((b,d)=>(0,c.X)(a.book,b.id).localeCompare((0,c.X)(a.book,d.id)))){let d=n(a.events.filter(a=>"database"===a.type&&a.resourceId===b.id).map(a=>a.count));w.push([(0,c.X)(a.book,b.id),q[b.kind],j(b.account),b.state,d,s(b.sizeBytes),b.cuHours,b.reads])}let x=[["Domain","Application","TLS certificate expires","TLS days left at month end","Domain expires (RDAP)","Domain days left at month end","Registrar"]];for(let b of[...a.domains].sort((a,b)=>a.name.localeCompare(b.name)))x.push([b.name,b.app?j(b.app):"",b.tlsExpires??"",r(b.tlsExpires,e),b.domainExpires??"",r(b.domainExpires,e),b.registrar??""]);return[{title:"Overview",rows:t},{title:"Applications",rows:u},{title:"Incidents",rows:v},{title:"Databases",rows:w},{title:"Domains",rows:x}]},"V",0,a=>`watchbell-${a}-raw.csv.gz`,"A",0,a=>a?a.name??e:d,"b",0,a=>(0,b.gzipSync)(Buffer.from(a,"utf8"),{level:9}),"n",0,j,"L",0,g,"s",0,h,"o",0,function(a,b){let c=function(a,b){let c=i(g(b)),d=new Map(a.map(a=>[a.month,a.status]));if("ok"!==d.get(c))return c;let e=c;for(let a=1;a<3;a++)if(e=i(e),"error"===d.get(e))return e;return null}(a,b),d=g(b);return c?{runsOn:"the next daily run (~03:00 WIB)",covers:j(c)}:{runsOn:`1 ${j(function(a){let[b,c]=a.split("-").map(Number);return 12===c?`${b+1}-01`:`${b}-${String(c+1).padStart(2,"0")}`}(d))}, ~03:00 WIB`,covers:j(d)}},"E",0,function(a){let b=[u.join(",")];for(let d of[...a.rollups].sort((a,b)=>a.hour.getTime()-b.hour.getTime()||a.monitorId.localeCompare(b.monitorId)))b.push(["rollup",d.hour.toISOString(),(0,c.G)(`${d.app}${d.path}`),d.appId,d.checks,d.failures,d.p50Ms,d.p95Ms,d.maxMs,d.status5xx,d.maintenance,null,null,null,null,null,null].map(t).join(","));for(let d of[...a.events].sort((a,b)=>a.at.getTime()-b.at.getTime())){let e=d.resourceId&&a.book.db.some(a=>a.id===d.resourceId)?(0,c.X)(a.book,d.resourceId):(0,c.J)(d.resource??"",a.book);b.push(["event",d.at.toISOString(),e,d.resourceId,null,null,null,null,null,null,null,d.type,d.kind,d.reason,d.count,(0,c.J)(d.message,a.book,d.resourceId),(0,c.J)(d.detail,a.book,d.resourceId)].map(t).join(","))}return`${b.join("\r\n")}\r
2
- `},"c",0,function(a,b){let c=g(b),d=a.filter(a=>"ok"===a.status&&a.month<c).map(a=>a.month).sort().reverse().slice(0,3);if(d.length<3)return[];let e=d[d.length-1];return a.filter(a=>!a.trashedAt&&a.month<e&&(a.sheetFileId||a.csvFileId))},"F",0,a=>`Watchbell \xb7 ${a}`])},447681,a=>{var b=a.i(26972),c=a.i(689963),d=a.i(732084),e=a.i(427221),f=a.i(83931),g=a.i(811365),h=a.i(827857);let i="application/vnd.google-apps.folder",j="https://www.googleapis.com/drive/v3/files",k="https://www.googleapis.com/upload/drive/v3/files",l="https://sheets.googleapis.com/v4/spreadsheets",m=b.z.object({error:b.z.object({errors:c.z.array(d.z.looseObject({reason:e.z.string().optional()})).optional(),status:e.z.string().optional()})});async function n(a,b,c,d,e){let f,g,h=e.timeoutMs??1e4,i={Authorization:`Bearer ${c}`,Accept:"application/json"};d?.raw?(i["Content-Type"]=d.contentType??"application/octet-stream",f=new Uint8Array(d.raw)):d&&void 0!==d.json&&(i["Content-Type"]="application/json",f=JSON.stringify(d.json));try{g=await (e.fetch??fetch)(b,{method:a,headers:i,body:f,signal:AbortSignal.timeout(h),cache:"no-store"})}catch(a){return{ok:!1,kind:"transient",error:a instanceof DOMException&&("TimeoutError"===a.name||"AbortError"===a.name)?`Google Drive didn't answer within ${Math.round(h/1e3)} seconds.`:"Couldn't reach Google Drive."}}let j=await g.json().catch(()=>null);if(g.ok)return{ok:!0,data:j};let k=m.safeParse(j),l=k.success?k.data.error.errors?.find(a=>a.reason)?.reason??k.data.error.status:void 0;return 401===g.status?{ok:!1,kind:"auth",status:401,error:"Google Drive rejected the access token (401)."}:404===g.status?{ok:!1,kind:"missing",status:404,error:"Google Drive doesn't know this file (404)."}:403===g.status&&"storageQuotaExceeded"===l?{ok:!1,kind:"full",status:403,error:"Your Google Drive is full. Free some space; the next run tries again."}:429===g.status||g.status>=500||403===g.status&&/rateLimit/i.test(l??"")?{ok:!1,kind:"transient",status:g.status,error:`Google Drive is busy (${g.status}). The next run tries again.`}:{ok:!1,kind:"format",status:g.status,error:`Google Drive refused the request (${g.status}${l?` ${l}`:""}).`}}let o=b.z.object({id:e.z.string().min(1)}),p=a=>({ok:!1,kind:"format",error:`Google Drive answered ${a} in a format the console doesn't recognise.`});function q(a,b){if(!a.ok)return a;let c=o.safeParse(a.data);return c.success?{ok:!0,data:c.data.id}:p(b)}async function r(a,d,e={}){let f=`name = '${d.replace(/['\\]/g,"\\$&")}' and mimeType = '${i}' and trashed = false`,g=await n("GET",`${j}?${new URLSearchParams({q:f,fields:"files(id,name)",spaces:"drive",pageSize:"10"})}`,a,null,e);if(!g.ok)return g;let h=b.z.object({files:c.z.array(o)}).safeParse(g.data);return h.success?{ok:!0,data:h.data.files[0]?.id??null}:p("the folder search")}async function s(a,c,d={}){let g=await n("GET",`${j}/${encodeURIComponent(c)}?fields=id,trashed,name`,a,null,d);if(!g.ok)return"missing"===g.kind?{ok:!0,data:{usable:!1,name:null}}:g;let h=b.z.object({id:e.z.string(),trashed:f.z.boolean().optional(),name:e.z.string().optional()}).safeParse(g.data);return h.success?{ok:!0,data:{usable:!h.data.trashed,name:h.data.name?.trim()||null}}:p("the folder")}async function t(a,b,c={}){return q(await n("POST",`${j}?fields=id`,a,{json:{name:b,mimeType:i}},c),"the new folder")}async function u(a,b,c,d={}){return q(await n("POST",`${j}?fields=id`,a,{json:{name:b,mimeType:"application/vnd.google-apps.spreadsheet",parents:[c]}},d),"the new spreadsheet")}let v=a=>`'${a.replace(/'/g,"''")}'`;async function w(a,d,f,h={}){let i=await n("GET",`${l}/${encodeURIComponent(d)}?fields=sheets.properties(sheetId,title)`,a,null,h);if(!i.ok)return i;let j=b.z.object({sheets:c.z.array(b.z.object({properties:b.z.object({sheetId:g.z.number(),title:e.z.string()})})).default([])}).safeParse(i.data);if(!j.success)return p("the spreadsheet's tabs");let k=j.data.sheets.map(a=>a.properties),m=new Set(k.map(a=>a.title)),o=[],q=f.filter(a=>!m.has(a)),r=k[0];for(let a of(r&&q.length&&!f.includes(r.title)&&(o.push({updateSheetProperties:{properties:{sheetId:r.sheetId,title:q[0]},fields:"title"}}),q.shift()),q))o.push({addSheet:{properties:{title:a}}});if(!o.length)return{ok:!0,data:void 0};let s=await n("POST",`${l}/${encodeURIComponent(d)}:batchUpdate`,a,{json:{requests:o}},h);return s.ok?{ok:!0,data:void 0}:s}async function x(a,b,c,d={}){let e=encodeURIComponent(b),f=await n("POST",`${l}/${e}/values:batchClear`,a,{json:{ranges:c.map(a=>v(a.title))}},d);if(!f.ok)return f;let g=c.map(a=>({range:`${v(a.title)}!A1`,majorDimension:"ROWS",values:a.rows.map(a=>a.map(a=>a??""))})),h=await n("POST",`${l}/${e}/values:batchUpdate`,a,{json:{valueInputOption:"RAW",data:g}},d);return h.ok?{ok:!0,data:void 0}:h}let y="watchbell-backup-part";function z(a,b,c){return Buffer.concat([Buffer.from(`--${y}\r
1
+ (()=>{"use strict";module.exports=[544854,a=>{var b=a.i(727028),c=a.i(245710),d=a.i(556987);let e="Watchbell backups",f="Watchpost backups",g=["January","February","March","April","May","June","July","August","September","October","November","December"];function h(a){let b=(0,c.z)(a);return`${b.year}-${String(b.month).padStart(2,"0")}`}function i(a){return{start:(0,c.y)(`${a}-01`),end:(0,c.y)(`${k(a)}-01`)}}function j(a){let[b,c]=a.split("-").map(Number);return 1===c?`${b-1}-12`:`${b}-${String(c-1).padStart(2,"0")}`}function k(a){let[b,c]=a.split("-").map(Number);return 12===c?`${b+1}-01`:`${b}-${String(c+1).padStart(2,"0")}`}function l(a){let[b,c]=a.split("-").map(Number);return`${g[c-1]} ${b}`}function m(a){if(!a)return"";let b=(0,c.z)(a),d=a=>String(a).padStart(2,"0");return`${b.year}-${d(b.month)}-${d(b.day)} ${d(b.hour)}:${d(b.minute)}`}let n=(a,b)=>a>0?Math.round((a-b)/a*1e5)/1e3:"",o=a=>{if(!a.length)return null;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2?b[c]:Math.round((b[c-1]+b[c])/2)},p=a=>a.reduce((a,b)=>a+b,0),q=a=>"production"===a.target,r=a=>"ERROR"===a.state,s={supabase_project:"Supabase",neon_project:"Neon",firestore:"Firebase"};function t(a,b){if(!a)return"";let c=Date.parse(a);return Number.isFinite(c)?Math.floor((c-b.getTime())/864e5):""}let u=a=>null===a?"":Math.round(a/1048576*10)/10;function v(a){if(null===a)return"";if("number"==typeof a||"boolean"==typeof a)return String(a);let b=/^[=+\-@\t\r]/.test(a)?`'${a}`:a;return/[",\r\n]/.test(b)?`"${b.replace(/"/g,'""')}"`:b}let w=["record","at","subject","resource_id","checks","failures","p50_ms","p95_ms","max_ms","status_5xx","maintenance","type","kind","reason","count","message","detail"];a.s(["R",0,e,"Z",0,3,"C",0,f,"O",0,["Overview","Applications","Incidents","Databases","Domains"],"m",0,function(a){let{start:b,end:e}=i(a.month),f=a.partial&&a.generatedAt<e?a.generatedAt:e,g=a.deployments.filter(q),h=p(a.rollups.map(a=>a.checks)),j=p(a.rollups.map(a=>a.failures)),k=a=>(0,d.G)(a),l=[["Watchbell backup",a.month],["Covers",`${m(b)} to ${m(f)} ${(0,c.D)()}${a.partial?" (month so far)":""}`],["Kind",a.partial?"Partial: Back up now":"Full month"],["Generated",`${m(a.generatedAt)} ${(0,c.D)()}`],[],["Applications watched",a.apps.length],["Uptime, all monitors (%)",n(h,j)],["Checks (rolled-up hours)",h],["Failed checks",j],["Incidents (alerts opened)",a.alerts.length],["Critical incidents",a.alerts.filter(a=>"critical"===a.severity).length],["Production deployments",g.length],["Failed production deployments",g.filter(r).length],["Events",p(a.events.map(a=>a.count))]],v=[["Application","Monitors","Checks","Uptime (%)","p95 response, typical hour (ms)","p95 response, worst hour (ms)","5xx responses","Production deploys","Failed production deploys"]];for(let b of[...a.apps].sort((a,b)=>a.name.localeCompare(b.name))){let c=a.rollups.filter(a=>a.appId===b.id),d=c.map(a=>a.p95Ms).filter(a=>null!==a),e=g.filter(a=>a.appId===b.id);v.push([k(b.name),new Set(c.map(a=>a.monitorId)).size,p(c.map(a=>a.checks)),n(p(c.map(a=>a.checks)),p(c.map(a=>a.failures))),o(d),d.length?Math.max(...d):null,p(c.map(a=>a.status5xx)),e.length,e.filter(r).length])}let w=[["Rule","Severity","Subject",`Started (${(0,c.D)()})`,`Resolved (${(0,c.D)()})`,"Duration","Message"]];for(let b of[...a.alerts].sort((a,b)=>a.startedAt.getTime()-b.startedAt.getTime())){let c=(0,d.o)({title:b.title,message:b.message,causedBy:null,resourceId:b.resourceId},a.book);w.push([b.ruleKey,b.severity,c.title,m(b.startedAt),m(b.resolvedAt),function(a,b,c){let d=Math.max(0,Math.round(((b??c).getTime()-a.getTime())/6e4)),e=d<60?`${d} min`:d<2880?`${Math.floor(d/60)} h ${d%60} min`:`${Math.round(d/1440)} days`;return b?e:`${e} (still open)`}(b.startedAt,b.resolvedAt,f),c.message])}let x=[["Database","Provider","Account","State at backup","Status changes this month","Size (MB)","Neon CU-hours this period","Firestore reads (last reading)"]];for(let b of[...a.databases].sort((b,c)=>(0,d.X)(a.book,b.id).localeCompare((0,d.X)(a.book,c.id)))){let c=p(a.events.filter(a=>"database"===a.type&&a.resourceId===b.id).map(a=>a.count));x.push([(0,d.X)(a.book,b.id),s[b.kind],k(b.account),b.state,c,u(b.sizeBytes),b.cuHours,b.reads])}let y=[["Domain","Application","TLS certificate expires","TLS days left at month end","Domain expires (RDAP)","Domain days left at month end","Registrar"]];for(let b of[...a.domains].sort((a,b)=>a.name.localeCompare(b.name)))y.push([b.name,b.app?k(b.app):"",b.tlsExpires??"",t(b.tlsExpires,f),b.domainExpires??"",t(b.domainExpires,f),b.registrar??""]);return[{title:"Overview",rows:l},{title:"Applications",rows:v},{title:"Incidents",rows:w},{title:"Databases",rows:x},{title:"Domains",rows:y}]},"V",0,a=>`watchbell-${a}-raw.csv.gz`,"A",0,a=>a?a.name??f:e,"b",0,a=>(0,b.gzipSync)(Buffer.from(a,"utf8"),{level:9}),"n",0,l,"L",0,h,"s",0,i,"o",0,function(a,b){let d=function(a,b){let c=j(h(b)),d=new Map(a.map(a=>[a.month,a.status]));if("ok"!==d.get(c))return c;let e=c;for(let a=1;a<3;a++)if(e=j(e),"error"===d.get(e))return e;return null}(a,b),e=h(b),f=`~${(0,c.G)(b)}`;if(d)return{runsOn:`the next daily run (${f})`,covers:l(d),date:null,at:f};let g=`1 ${l(k(e))}`;return{runsOn:`${g}, ${f}`,covers:l(e),date:g,at:f}},"E",0,function(a){let b=[w.join(",")];for(let c of[...a.rollups].sort((a,b)=>a.hour.getTime()-b.hour.getTime()||a.monitorId.localeCompare(b.monitorId)))b.push(["rollup",c.hour.toISOString(),(0,d.G)(`${c.app}${c.path}`),c.appId,c.checks,c.failures,c.p50Ms,c.p95Ms,c.maxMs,c.status5xx,c.maintenance,null,null,null,null,null,null].map(v).join(","));for(let c of[...a.events].sort((a,b)=>a.at.getTime()-b.at.getTime())){let e=c.resourceId&&a.book.db.some(a=>a.id===c.resourceId)?(0,d.X)(a.book,c.resourceId):(0,d.J)(c.resource??"",a.book);b.push(["event",c.at.toISOString(),e,c.resourceId,null,null,null,null,null,null,null,c.type,c.kind,c.reason,c.count,(0,d.J)(c.message,a.book,c.resourceId),(0,d.J)(c.detail,a.book,c.resourceId)].map(v).join(","))}return`${b.join("\r\n")}\r
2
+ `},"c",0,function(a,b){let c=h(b),d=a.filter(a=>"ok"===a.status&&a.month<c).map(a=>a.month).sort().reverse().slice(0,3);if(d.length<3)return[];let e=d[d.length-1];return a.filter(a=>!a.trashedAt&&a.month<e&&(a.sheetFileId||a.csvFileId))},"F",0,a=>`Watchbell \xb7 ${a}`])},447681,a=>{var b=a.i(26972),c=a.i(689963),d=a.i(732084),e=a.i(427221),f=a.i(83931),g=a.i(811365),h=a.i(827857);let i="application/vnd.google-apps.folder",j="https://www.googleapis.com/drive/v3/files",k="https://www.googleapis.com/upload/drive/v3/files",l="https://sheets.googleapis.com/v4/spreadsheets",m=b.z.object({error:b.z.object({errors:c.z.array(d.z.looseObject({reason:e.z.string().optional()})).optional(),status:e.z.string().optional()})});async function n(a,b,c,d,e){let f,g,h=e.timeoutMs??1e4,i={Authorization:`Bearer ${c}`,Accept:"application/json"};d?.raw?(i["Content-Type"]=d.contentType??"application/octet-stream",f=new Uint8Array(d.raw)):d&&void 0!==d.json&&(i["Content-Type"]="application/json",f=JSON.stringify(d.json));try{g=await (e.fetch??fetch)(b,{method:a,headers:i,body:f,signal:AbortSignal.timeout(h),cache:"no-store"})}catch(a){return{ok:!1,kind:"transient",error:a instanceof DOMException&&("TimeoutError"===a.name||"AbortError"===a.name)?`Google Drive didn't answer within ${Math.round(h/1e3)} seconds.`:"Couldn't reach Google Drive."}}let j=await g.json().catch(()=>null);if(g.ok)return{ok:!0,data:j};let k=m.safeParse(j),l=k.success?k.data.error.errors?.find(a=>a.reason)?.reason??k.data.error.status:void 0;return 401===g.status?{ok:!1,kind:"auth",status:401,error:"Google Drive rejected the access token (401)."}:404===g.status?{ok:!1,kind:"missing",status:404,error:"Google Drive doesn't know this file (404)."}:403===g.status&&"storageQuotaExceeded"===l?{ok:!1,kind:"full",status:403,error:"Your Google Drive is full. Free some space; the next run tries again."}:429===g.status||g.status>=500||403===g.status&&/rateLimit/i.test(l??"")?{ok:!1,kind:"transient",status:g.status,error:`Google Drive is busy (${g.status}). The next run tries again.`}:{ok:!1,kind:"format",status:g.status,error:`Google Drive refused the request (${g.status}${l?` ${l}`:""}).`}}let o=b.z.object({id:e.z.string().min(1)}),p=a=>({ok:!1,kind:"format",error:`Google Drive answered ${a} in a format the console doesn't recognise.`});function q(a,b){if(!a.ok)return a;let c=o.safeParse(a.data);return c.success?{ok:!0,data:c.data.id}:p(b)}async function r(a,d,e={}){let f=`name = '${d.replace(/['\\]/g,"\\$&")}' and mimeType = '${i}' and trashed = false`,g=await n("GET",`${j}?${new URLSearchParams({q:f,fields:"files(id,name)",spaces:"drive",pageSize:"10"})}`,a,null,e);if(!g.ok)return g;let h=b.z.object({files:c.z.array(o)}).safeParse(g.data);return h.success?{ok:!0,data:h.data.files[0]?.id??null}:p("the folder search")}async function s(a,c,d={}){let g=await n("GET",`${j}/${encodeURIComponent(c)}?fields=id,trashed,name`,a,null,d);if(!g.ok)return"missing"===g.kind?{ok:!0,data:{usable:!1,name:null}}:g;let h=b.z.object({id:e.z.string(),trashed:f.z.boolean().optional(),name:e.z.string().optional()}).safeParse(g.data);return h.success?{ok:!0,data:{usable:!h.data.trashed,name:h.data.name?.trim()||null}}:p("the folder")}async function t(a,b,c={}){return q(await n("POST",`${j}?fields=id`,a,{json:{name:b,mimeType:i}},c),"the new folder")}async function u(a,b,c,d={}){return q(await n("POST",`${j}?fields=id`,a,{json:{name:b,mimeType:"application/vnd.google-apps.spreadsheet",parents:[c]}},d),"the new spreadsheet")}let v=a=>`'${a.replace(/'/g,"''")}'`;async function w(a,d,f,h={}){let i=await n("GET",`${l}/${encodeURIComponent(d)}?fields=sheets.properties(sheetId,title)`,a,null,h);if(!i.ok)return i;let j=b.z.object({sheets:c.z.array(b.z.object({properties:b.z.object({sheetId:g.z.number(),title:e.z.string()})})).default([])}).safeParse(i.data);if(!j.success)return p("the spreadsheet's tabs");let k=j.data.sheets.map(a=>a.properties),m=new Set(k.map(a=>a.title)),o=[],q=f.filter(a=>!m.has(a)),r=k[0];for(let a of(r&&q.length&&!f.includes(r.title)&&(o.push({updateSheetProperties:{properties:{sheetId:r.sheetId,title:q[0]},fields:"title"}}),q.shift()),q))o.push({addSheet:{properties:{title:a}}});if(!o.length)return{ok:!0,data:void 0};let s=await n("POST",`${l}/${encodeURIComponent(d)}:batchUpdate`,a,{json:{requests:o}},h);return s.ok?{ok:!0,data:void 0}:s}async function x(a,b,c,d={}){let e=encodeURIComponent(b),f=await n("POST",`${l}/${e}/values:batchClear`,a,{json:{ranges:c.map(a=>v(a.title))}},d);if(!f.ok)return f;let g=c.map(a=>({range:`${v(a.title)}!A1`,majorDimension:"ROWS",values:a.rows.map(a=>a.map(a=>a??""))})),h=await n("POST",`${l}/${e}/values:batchUpdate`,a,{json:{valueInputOption:"RAW",data:g}},d);return h.ok?{ok:!0,data:void 0}:h}let y="watchbell-backup-part";function z(a,b,c){return Buffer.concat([Buffer.from(`--${y}\r
3
3
  Content-Type: application/json; charset=UTF-8\r
4
4
  \r
5
5
  ${JSON.stringify(a)}\r
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[646324,a=>{let b=a=>a?a.getTime():null;function c(a,b){return!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).filter(a=>"string"==typeof a[1]&&new Date(a[1]).getTime()>b.getTime()))}a.s(["Q",0,function(a,b,c,d=new Set){let e=new Set(c.map(a=>`${a.resourceId}/${a.id}`));return a.flatMap(a=>{let c=b.get(a.externalId);return!c||d.has(c)||e.has(`${a.id}/${c}`)?[]:[{appId:a.id,deploymentId:c}]})},"E",0,function(a,c){return!a||a.state!==c.state||a.target!==c.target||a.branch!==c.branch||a.commitSha!==c.commitSha||a.commitMessage!==c.commitMessage||a.source!==c.source||a.url!==c.url||b(a.buildingAt)!==b(c.buildingAt)||b(a.readyAt)!==b(c.readyAt)},"Y",0,function(a,b,d){let e=new Date(d.getTime()+216e5).toISOString();return{...c(a,d),...Object.fromEntries(b.map(a=>[a,e]))}},"K",0,function(a){try{return new URL(a).pathname}catch{return"/"}},"a",0,function(a,b){let c=[...new Map(a.map(a=>[a.id,a])).values()].sort((a,b)=>b.createdAt.getTime()-a.createdAt.getTime()),d=b??c[0]?.id??null,e=c.findIndex(a=>a.id===d);return{currentId:d,previousId:e>=0?c[e+1]?.id??null:null}},"S",0,(a,b)=>new Set(Object.keys(c(a,b)))])},683439,a=>{let b=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;a.s(["f",0,a=>"string"==typeof a&&b.test(a)])},469762,a=>{var b=a.i(245710);function c(a,b){let c=Math.max(0,b.getTime()-a.getTime());return c<6e4?"now":c<36e5?`${Math.floor(c/6e4)} min ago`:c<864e5?`${Math.floor(c/36e5)} h ago`:`${Math.floor(c/864e5)} d ago`}function d(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;let c=Math.floor(b/60);return c<60?`${c}m ${String(b%60).padStart(2,"0")}s`:`${Math.floor(c/60)}h ${String(c%60).padStart(2,"0")}m`}a.s(["m",0,function(a,b){for(let a of b)try{let b=new URL(a);if("https:"!==b.protocol&&"http:"!==b.protocol||!b.host)continue;return b.host}catch{}return`${a}.vercel.app`},"W",0,function(a){return a?a.split(/\r?\n|\r/).map(a=>a.trim()).find(a=>""!==a)??"":""},"h",0,function(a,d){let e=d.getTime()-a.getTime();return e<36e5?c(a,d):(0,b.m)(a,d)?(0,b.U)(a):`${Math.max(1,Math.floor(e/864e5))} d ago`},"A",0,function(a,b){return"building"===a.state?`${d(b.getTime()-(a.buildingAt??a.createdAt).getTime())} elapsed`:a.readyAt&&a.buildingAt?d(a.readyAt.getTime()-a.buildingAt.getTime()):"—"},"v",0,function(a,c){return(0,b.m)(a,c)?(0,b.U)(a):`${(0,b.L)(a)} ${(0,b.U)(a)}`},"o",0,function(a,b){let c=Math.max(0,b.getTime()-a.getTime()),d=(a,b)=>`${a} ${b}${1===a?"":"s"}`;return c<36e5?d(Math.max(1,Math.floor(c/6e4)),"minute"):c<864e5?d(Math.floor(c/36e5),"hour"):d(Math.floor(c/864e5),"day")},"F",0,function(a){try{let b=new URL(a);return`${b.host}${b.pathname}`}catch{return a}},"$",0,function(a,e){if(!a)return"—";if("building"===a.state)return`building ${d(e.getTime()-(a.buildingAt??a.createdAt).getTime())}`;let f=a.readyAt??a.createdAt;return"error"===a.state?`failed ${(0,b.m)(f,e)?(0,b.U)(f):c(f,e)}`:"canceled"===a.state?`canceled ${c(f,e)}`:c(f,e)},"H",0,function(a){let{day:c,month:d,year:e}=(0,b.C)(a);return`${c} ${d} ${e}`},"p",0,a=>null===a?"—":`${Math.round(a)} ms`,"C",0,a=>null===a?"—":`${(Math.floor(100*a+1e-6)/100).toFixed(2)}%`,"J",0,c,"_",0,a=>a?a.slice(0,7):"—"])},910697,a=>{a.s(["O",0,{events:200,deployments:200,apps:200,monitors:200,domains:200,databases:200,recentEvents:5,ongoingBuilds:5},"A",0,{rawChecksMs:6048e5,healthBuckets:30,metricBuckets:48,responseHours:24}])}]})();
1
+ (()=>{"use strict";module.exports=[646324,a=>{let b=a=>a?a.getTime():null;function c(a,b){return!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).filter(a=>"string"==typeof a[1]&&new Date(a[1]).getTime()>b.getTime()))}a.s(["Q",0,function(a,b,c,d=new Set){let e=new Set(c.map(a=>`${a.resourceId}/${a.id}`));return a.flatMap(a=>{let c=b.get(a.externalId);return!c||d.has(c)||e.has(`${a.id}/${c}`)?[]:[{appId:a.id,deploymentId:c}]})},"E",0,function(a,c){return!a||a.state!==c.state||a.target!==c.target||a.branch!==c.branch||a.commitSha!==c.commitSha||a.commitMessage!==c.commitMessage||a.source!==c.source||a.url!==c.url||b(a.buildingAt)!==b(c.buildingAt)||b(a.readyAt)!==b(c.readyAt)},"Y",0,function(a,b,d){let e=new Date(d.getTime()+216e5).toISOString();return{...c(a,d),...Object.fromEntries(b.map(a=>[a,e]))}},"K",0,function(a){try{return new URL(a).pathname}catch{return"/"}},"a",0,function(a,b){let c=[...new Map(a.map(a=>[a.id,a])).values()].sort((a,b)=>b.createdAt.getTime()-a.createdAt.getTime()),d=b??c[0]?.id??null,e=c.findIndex(a=>a.id===d);return{currentId:d,previousId:e>=0?c[e+1]?.id??null:null}},"S",0,(a,b)=>new Set(Object.keys(c(a,b)))])},683439,a=>{let b=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;a.s(["f",0,a=>"string"==typeof a&&b.test(a)])},469762,a=>{var b=a.i(245710);function c(a,b){let c=Math.max(0,b.getTime()-a.getTime());return c<6e4?"now":c<36e5?`${Math.floor(c/6e4)} min ago`:c<864e5?`${Math.floor(c/36e5)} h ago`:`${Math.floor(c/864e5)} d ago`}function d(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;let c=Math.floor(b/60);return c<60?`${c}m ${String(b%60).padStart(2,"0")}s`:`${Math.floor(c/60)}h ${String(c%60).padStart(2,"0")}m`}a.s(["m",0,function(a,b){for(let a of b)try{let b=new URL(a);if("https:"!==b.protocol&&"http:"!==b.protocol||!b.host)continue;return b.host}catch{}return`${a}.vercel.app`},"W",0,function(a){return a?a.split(/\r?\n|\r/).map(a=>a.trim()).find(a=>""!==a)??"":""},"h",0,function(a,d){let e=d.getTime()-a.getTime();return e<36e5?c(a,d):(0,b.m)(a,d)?(0,b.U)(a):`${Math.max(1,Math.floor(e/864e5))} d ago`},"A",0,function(a,b){return"building"===a.state?`${d(b.getTime()-(a.buildingAt??a.createdAt).getTime())} elapsed`:a.readyAt&&a.buildingAt?d(a.readyAt.getTime()-a.buildingAt.getTime()):"—"},"v",0,function(a,c){return(0,b.m)(a,c)?(0,b.U)(a):`${(0,b.L)(a)} ${(0,b.U)(a)}`},"o",0,function(a,b){let c=Math.max(0,b.getTime()-a.getTime()),d=(a,b)=>`${a} ${b}${1===a?"":"s"}`;return c<36e5?d(Math.max(1,Math.floor(c/6e4)),"minute"):c<864e5?d(Math.floor(c/36e5),"hour"):d(Math.floor(c/864e5),"day")},"F",0,function(a){try{let b=new URL(a);return`${b.host}${b.pathname}`}catch{return a}},"$",0,function(a,e){if(!a)return"—";if("building"===a.state)return`building ${d(e.getTime()-(a.buildingAt??a.createdAt).getTime())}`;let f=a.readyAt??a.createdAt;return"error"===a.state?`failed ${(0,b.m)(f,e)?(0,b.U)(f):c(f,e)}`:"canceled"===a.state?`canceled ${c(f,e)}`:c(f,e)},"H",0,function(a){let{day:c,month:d,year:e}=(0,b.e)(a);return`${c} ${d} ${e}`},"p",0,a=>null===a?"—":`${Math.round(a)} ms`,"C",0,a=>null===a?"—":`${(Math.floor(100*a+1e-6)/100).toFixed(2)}%`,"J",0,c,"_",0,a=>a?a.slice(0,7):"—"])},968715,a=>{var b=a.i(245710);function c(a,c){let[d,e,f]=(0,b.x)(a).split("-").map(Number);return Array.from({length:c},(a,b)=>new Date(Date.UTC(d,e-1,f-(c-1-b))).toISOString().slice(0,10))}let d=Date.UTC(2e3,0,1);a.s(["F",0,90,"I",0,30,"W",0,c,"D",0,function(a,b,c){return d+Math.floor((a.getTime()-d)/b)*b-(c-1)*b},"w",0,function(a,b,d){return c(b,d).map(b=>a?.get(b))},"C",0,function(a){let b=new Map;for(let c of a){let a=b.get(c.monitorId);a||(a=new Map,b.set(c.monitorId,a));let d=a.get(c.day);a.set(c.day,{day:c.day,checks:(d?.checks??0)+c.checks,failures:(d?.failures??0)+c.failures,maint:(d?.maint??0)+(c.maint??0)})}return b},"f",0,function(a,b,c,d,e=null){let f=Array.from({length:d},()=>e);for(let e of a){let a=Math.round((e.t-b)/c);a>=0&&a<d&&(f[a]=e.v)}return f},"j",0,function(a){let b={ok:0,warn:0,err:0,maint:0,paused:0};for(let c of a)!c.appGone&&("ok"===c.state||"warn"===c.state||"err"===c.state||"maint"===c.state?b[c.state]++:("paused"===c.state||"off"===c.state)&&b.paused++);return b},"h",0,function(a,b,d=90,e){return c(b,d).map((b,c)=>{let f,g=a?.get(b),h=g&&(0!==g.checks||g.maint)?0===g.checks?"maint":0===g.failures?"ok":g.failures<3?"warn":"err":"none",i=0==(f=d-1-c)?"Today":1===f?"1 day ago":`${f} days ago`,j=e?.get(b),k=g&&"none"!==h?"maint"===h?`${i} \xb7 maintenance, not counted`:`${i} \xb7 ${g.failures} failed of ${g.checks}`:`${i} \xb7 no data`;return{day:b,tone:h,title:j?`${k} \xb7 deployed ${j}`:k,deploy:j}})},"Y",0,function(a){let b=0,c=0;for(let d of a)d&&(b+=d.checks,c+=d.failures);return b?(b-c)/b*100:null}])},910697,a=>{a.s(["O",0,{events:200,deployments:200,apps:200,monitors:200,domains:200,databases:200,recentEvents:5,ongoingBuilds:5},"A",0,{rawChecksMs:6048e5,healthBuckets:30,metricBuckets:48,responseHours:24}])}]})();
2
2
 
3
- //# sourceMappingURL=src_lib_1l8ej-zoyyegd._.js.map
3
+ //# sourceMappingURL=src_lib_0vl2-zp4wzw7n._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[840784,242605,a=>{var b=a.i(93321),c=a.i(530385),d=a.i(548734),e=a.i(837137),f=a.i(469762),g=a.i(631107),h=a.i(968715),i=a.i(910697),j=a.i(72019),k=a.i(519051),l=a.i(858806),m=a.i(601219),n=a.i(714530),o=a.i(513701),p=a.i(895176),q=a.i(351674);a.i(33135);var r=a.i(46126),s=a.i(84979),t=a.i(182357);function u(a){return{version:a.version,status:a.status,findings:Array.isArray(a.findings)?a.findings:[],reason:a.reason,checkedAt:a.checkedAt}}async function v(a){let c=await (0,d.f)().select({id:e.resources.id,name:e.resources.name,sec:e.appSecurity}).from(e.resources).leftJoin(e.appSecurity,(0,b.u)(e.appSecurity.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.kind,"app"),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt),a?(0,b.u)(e.resources.id,a):void 0)).orderBy(q.B`${e.appSecurity.checkedAt} asc nulls first`,e.resources.name).limit(i.O.apps);if(!c.length)return[];let g=await (0,d.f)().select({resourceId:e.monitors.resourceId,url:e.monitors.url}).from(e.monitors).where((0,b.y)(e.monitors.resourceId,c.map(a=>a.id))).orderBy(e.monitors.createdAt).limit(i.O.monitors);return c.map(a=>({id:a.id,name:a.name,prev:a.sec?u(a.sec):null,host:(0,f.m)(a.name,g.filter(b=>b.resourceId===a.id).map(a=>a.url))}))}async function w(a,c){await (0,d.f)().transaction(async d=>{await d.execute(q.B`select pg_advisory_xact_lock(hashtext(${`app_security:${a.id}`}))`);let[f]=await d.select().from(e.appSecurity).where((0,b.u)(e.appSecurity.resourceId,a.id)).limit(1),g=f?u(f):null;if(g&&g.checkedAt.getTime()>=c.checkedAt.getTime())return;let h="unknown"===c.status||"error"===c.status?{...c,version:g?g.version:c.version,findings:g?g.findings:c.findings}:c,i={framework:"next",version:h.version,status:h.status,findings:h.findings,reason:h.reason,checkedAt:h.checkedAt};await d.insert(e.appSecurity).values({resourceId:a.id,...i}).onConflictDoUpdate({target:e.appSecurity.resourceId,set:i,setWhere:q.B`${e.appSecurity.checkedAt} < excluded.checked_at`});let j=(0,s.t)(a.name,g,h);j&&await (0,m.f)([{type:"system",kind:j.kind,message:j.message,detail:j.detail,resourceId:a.id,at:h.checkedAt,reason:"ok"===j.kind?"NextClean":"NextVulnerable"}],d)})}async function x(a,b=2e4){let[c]=await v(a);if(!c)return{ok:!1,error:"That app is no longer in the console."};let d=await (0,r.f)(c.host,c.prev,{deadline:Date.now()+b});return d?(await w(c,d),{ok:!0,message:(0,t.I)(c.name,d),passed:"ok"===d.status||"vulnerable"===d.status,vulnerable:d.findings.length>0,audit:{message:`Security check: ${c.name}`,resourceId:c.id}}):{ok:!1,error:"The check took too long. Try again in a minute."}}a.s(["d",0,x,"Z",0,u],242605);let y=a=>"string"==typeof a&&a?a:null;async function z(a,m){let q=await (0,d.f)().select({r:e.resources,s:e.snapshots,sec:e.appSecurity,accStatus:e.accounts.status}).from(e.resources).leftJoin(e.accounts,(0,b.u)(e.accounts.id,e.resources.accountId)).leftJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).leftJoin(e.appSecurity,(0,b.u)(e.appSecurity.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.kind,"app"),(0,b.u)(e.resources.monitored,!0),m?(0,b.u)(e.resources.id,m):void 0)).orderBy(e.resources.name).limit(i.O.apps);if(!q.length)return[];let r=q.map(a=>a.r.id),s=(await (0,d.f)().select().from(e.monitors).where((0,b.y)(e.monitors.resourceId,r)).orderBy(e.monitors.createdAt).limit(i.O.monitors)).map(p.M),t=await (0,d.f)().selectDistinctOn([e.deployments.resourceId]).from(e.deployments).where((0,b.b)((0,b.y)(e.deployments.resourceId,r),(0,b.u)(e.deployments.target,"production"))).orderBy(e.deployments.resourceId,(0,c.A)(e.deployments.createdAtProvider)),v=await (0,o._)(s.map(a=>a.id),a),w=await (0,o.Q)(r,a),x=await (0,j.F)(r),z=s.length?await (0,n.w)():[];return q.map(({r:b,s:c,sec:d,accStatus:e})=>{let j=s.filter(a=>a.appId===b.id).map(b=>({...b,maintUntil:(0,k.x)(z,{monitorId:b.id,appId:b.appId},a)?.end??null})),m=y(b.meta.createdAt),n=t.find(a=>a.resourceId===b.id);return{id:b.id,name:b.name,gone:null!==b.goneAt,state:c?.state??"unknown",stateSince:c?.stateSince??null,domain:(0,f.m)(b.name,j.map(a=>a.url)),framework:y(b.meta.framework),productionBranch:y(b.meta.productionBranch),createdAt:m?new Date(m):null,teamName:y(b.meta.teamName),teamSlug:y(b.meta.teamSlug),repo:y(b.meta.repo),repoType:y(b.meta.repoType),functionRegions:Array.isArray(b.meta.functionRegions)?b.meta.functionRegions.filter(a=>"string"==typeof a):[],monitors:j,lastDeploy:n?(0,l.u)(n):null,uptime30:(0,h.Y)(j.flatMap(b=>(0,h.w)(v.get(b.id),a,h.I))),response:w.get(b.id)??{hourly:Array.from({length:i.A.responseHours},()=>null),p95:null,p50:null},days:new Map(j.flatMap(a=>{let b=v.get(a.id);return b?[[a.id,b]]:[]})),security:d?u(d):null,database:x.get(b.id)??null,dbPaused:c?.data.dbPaused===!0,pageViews:(0,g.G)(c?.data),pageViewsNote:(0,g.R)({gone:null!==b.goneAt,teamId:y(b.meta.teamId),accountOk:"ok"===e,hasProductionDeploy:void 0!==n})}})}async function A(a,b){return(await z(b,a))[0]??null}async function B(a,c){let[f]=await (0,d.f)().select({id:e.resources.id,name:e.resources.name}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.id,a),(0,b.u)(e.resources.kind,"app"))).limit(1);return f?(await (0,d.f)().transaction(async d=>{let g=new Date;await d.update(e.resources).set({monitored:!1,updatedAt:g}).where((0,b.u)(e.resources.id,a)),await d.delete(e.monitors).where((0,b.u)(e.monitors.resourceId,a)),await d.delete(e.deployments).where((0,b.u)(e.deployments.resourceId,a)),await d.delete(e.snapshots).where((0,b.u)(e.snapshots.resourceId,a)),await d.delete(e.appSecurity).where((0,b.u)(e.appSecurity.resourceId,a)),await d.delete(e.resources).where((0,b.b)((0,b.u)(e.resources.kind,"domain"),(0,b.u)(e.resources.parentId,a))),await (0,m.f)([{type:"action",kind:"ok",message:`${f.name} removed from the console`,detail:null,resourceId:a,actorUserId:c}],d)}),{ok:!0,message:`${f.name} is no longer in the console. The Vercel project itself isn't touched.`}):{ok:!1,error:"That app is no longer in the console."}}a.s(["Z",0,A,"G",0,z,"a",0,B],840784)},46126,a=>{var b=a.i(33135);let c=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?`,d="[\"'`]";function e(a){let b=/^(\d+)\.\d+\.\d+(?:-[0-9A-Za-z.]+)?$/.exec(a);return null!==b&&Number(b[1])>=9&&1e3>Number(b[1])}let f={"&amp;":"&","&quot;":'"',"&#39;":"'","&#x27;":"'","&#x2F;":"/","&#47;":"/"},g=a=>a.replace(/&(?:amp|quot|#39|#x27|#x2F|#47);/gi,a=>f[a]??f[a.toLowerCase()]??a),h=RegExp(String.raw`\bnext\s*=\s*\{\s*version\s*:\s*${d}(${c})${d}`,"g"),i=RegExp(String.raw`version\s*:\s*${d}(${c})${d}\s*,\s*appDir\s*:`,"g"),j=RegExp(String.raw`appDir\s*:\s*[^,{}()]{1,16},\s*version\s*:\s*${d}(${c})${d}`,"g"),k=/\bnext\s*=\s*\{\s*version\s*(?::\s*([A-Za-z_$][\w$]*)\s*)?[,}]/g,l=a=>a.replace(/[$]/g,"\\$");var m=a.i(533957);async function n(a,f,o={}){let p=o.deadline??1/0,q=o.now??(()=>new Date),r=a=>Math.floor(Math.min(a,p)-Date.now()),s=Date.now()+15e3;if(0>=r(s))return null;let t=(a,b)=>({version:f?.version??null,status:a,findings:f?.findings??[],reason:b,checkedAt:q()}),u=(a,c)=>(0,b.K)(a,{maxBytes:3145728,timeoutMs:r(s),lookup:o.lookup,fetch:o.fetch,userAgent:"OpsConsole-Security/1.0 (+https://west-solutions.web.id)",sameOrigin:c}),v=await u(`https://${a}/`,"www");if(!v.ok&&v.error===b.l)return t("unknown","the site redirects to another host");if(!v.ok||200!==v.status)return Date.now()>=p?null:t("error",`Couldn't load the site: ${v.ok?`HTTP ${v.status}`:v.error}`);let w=(function(a,b){let c;try{c=new URL(b)}catch{return[]}let d=new Set,e=[];for(let b of a.matchAll(/<script\b[^>]*?\ssrc\s*=\s*(["'])(.*?)\1/gi)){let a;try{a=new URL(g(b[2].trim()),c)}catch{continue}if("https:"===a.protocol&&a.origin===c.origin&&a.pathname.startsWith("/_next/static/")&&(a.hash="",!d.has(a.href))){var f;d.add(a.href),e.push({href:a.href,rank:(f=a.pathname,/\/main-app[-.]/.test(f)?0:/\/(main|app-index)[-.]/.test(f)?1:/\/(webpack|polyfills|framework)[-.]/.test(f)?3:2),i:e.length})}}return e.sort((a,b)=>a.rank-b.rank||a.i-b.i).map(a=>a.href)})(v.body,v.url).slice(0,12);if(0===w.length)return t("unknown",v.body.includes("/_next/")?"version not exposed":"not a Next.js site");let x=null,y=0,z=!1;for(let a of w){if(0>=r(s)){z=!0;break}let b=await u(a,!0);if(b.ok&&200===b.status&&(y++,x=function(a){for(let b of a.matchAll(h))if(e(b[1]))return b[1];for(let b of[i,j])for(let c of a.matchAll(b))if(e(c[1]))return c[1];for(let b of a.matchAll(k)){let f=b[1]??"version",g=RegExp(String.raw`(?:^|[^\w$.])${l(f)}\s*=\s*${d}(${c})${d}`,"g"),h=null;for(let c of a.matchAll(g)){if((c.index??0)>=(b.index??0))break;h=c[1]}if(h&&e(h))return h}return null}(b.body)))break}if(!x)return Date.now()>=p?null:z||0>=r(s)?t("error","Reading the site's scripts took longer than 15 s"):0===y?t("error","Couldn't load the site's scripts"):t("unknown","version not exposed");let A=r(Date.now()+1e4);if(A<=0)return null;let B=await (0,m.y)(x,{timeoutMs:A,fetch:o.fetch});return B.ok?{version:x,status:B.findings.length?"vulnerable":"ok",findings:B.findings,reason:null,checkedAt:q()}:Date.now()>=p?null:t("error",B.error)}a.s(["f",0,n],46126)},182357,a=>{var b=a.i(84979);let c=a=>!!a&&a.findings.length>0,d=a=>/[.!?]$/.test(a)?a:`${a}.`;a.s(["y",0,{CRITICAL:"Critical",HIGH:"High",MODERATE:"Moderate",LOW:"Low",UNKNOWN:"Unknown"},"I",0,function(a,c){return"vulnerable"===c.status?`${a} runs Next.js ${c.version} with ${(0,b.q)(c.findings.length)}.`:"ok"===c.status?`No known vulnerabilities for Next.js ${c.version}.`:"unknown"===c.status?`Couldn't read the Next.js version: ${d(c.reason??"no reason given")}`:`The check failed: ${d(c.reason??"no reason given")}`},"f",0,function(a){if(!c(a))return null;let d=(0,b.N)(a.findings);return{label:"CVE",severe:(0,b.o)(d),title:`Next.js ${a.version}: ${(0,b.q)(a.findings.length)}, worst ${d.toLowerCase()}`}},"X",0,c,"v",0,function(a){let d=[];for(let e of a){if(e.gone||!c(e.security))continue;let a=e.security,f=(0,b.N)(a.findings),g=(0,b.r)(a.findings);d.push({key:`sec-${e.id}`,tone:(0,b.o)(f)?"danger":"warning",title:`${e.name} runs a vulnerable Next.js (${a.version??"unknown version"})`,body:`${(0,b.q)(a.findings.length)}, worst ${f.toLowerCase()}.${g?` Fixed in ${g}.`:""}`,action:{label:"Open app",href:`/apps/${e.id}`}})}return[...d.filter(a=>"danger"===a.tone),...d.filter(a=>"warning"===a.tone)]},"g",0,function(a){if(!a)return{state:"unknown",text:"Not checked yet. The daily job checks at 03:00 WIB."};if("ok"===a.status)return{state:"ok",text:`No known vulnerabilities for Next.js ${a.version}.`};let b=null!==a.version||a.findings.length>0?" Showing the result from before.":"";return"unknown"===a.status?{state:"unknown",text:`Couldn't read the Next.js version: ${d(a.reason??"no reason given")}${b}`}:"error"===a.status?{state:"warn",text:`The last check failed: ${d(a.reason??"no reason given")}${b}`}:null}])}]})();
1
+ (()=>{"use strict";module.exports=[840784,242605,a=>{var b=a.i(93321),c=a.i(530385),d=a.i(548734),e=a.i(837137),f=a.i(469762),g=a.i(631107),h=a.i(968715),i=a.i(910697),j=a.i(72019),k=a.i(519051),l=a.i(858806),m=a.i(601219),n=a.i(714530),o=a.i(513701),p=a.i(895176),q=a.i(351674);a.i(33135);var r=a.i(46126),s=a.i(84979),t=a.i(182357);function u(a){return{version:a.version,status:a.status,findings:Array.isArray(a.findings)?a.findings:[],reason:a.reason,checkedAt:a.checkedAt}}async function v(a){let c=await (0,d.f)().select({id:e.resources.id,name:e.resources.name,sec:e.appSecurity}).from(e.resources).leftJoin(e.appSecurity,(0,b.u)(e.appSecurity.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.kind,"app"),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt),a?(0,b.u)(e.resources.id,a):void 0)).orderBy(q.B`${e.appSecurity.checkedAt} asc nulls first`,e.resources.name).limit(i.O.apps);if(!c.length)return[];let g=await (0,d.f)().select({resourceId:e.monitors.resourceId,url:e.monitors.url}).from(e.monitors).where((0,b.y)(e.monitors.resourceId,c.map(a=>a.id))).orderBy(e.monitors.createdAt).limit(i.O.monitors);return c.map(a=>({id:a.id,name:a.name,prev:a.sec?u(a.sec):null,host:(0,f.m)(a.name,g.filter(b=>b.resourceId===a.id).map(a=>a.url))}))}async function w(a,c){await (0,d.f)().transaction(async d=>{await d.execute(q.B`select pg_advisory_xact_lock(hashtext(${`app_security:${a.id}`}))`);let[f]=await d.select().from(e.appSecurity).where((0,b.u)(e.appSecurity.resourceId,a.id)).limit(1),g=f?u(f):null;if(g&&g.checkedAt.getTime()>=c.checkedAt.getTime())return;let h="unknown"===c.status||"error"===c.status?{...c,version:g?g.version:c.version,findings:g?g.findings:c.findings}:c,i={framework:"next",version:h.version,status:h.status,findings:h.findings,reason:h.reason,checkedAt:h.checkedAt};await d.insert(e.appSecurity).values({resourceId:a.id,...i}).onConflictDoUpdate({target:e.appSecurity.resourceId,set:i,setWhere:q.B`${e.appSecurity.checkedAt} < excluded.checked_at`});let j=(0,s.t)(a.name,g,h);j&&await (0,m.f)([{type:"system",kind:j.kind,message:j.message,detail:j.detail,resourceId:a.id,at:h.checkedAt,reason:"ok"===j.kind?"NextClean":"NextVulnerable"}],d)})}async function x(a,b=2e4){let[c]=await v(a);if(!c)return{ok:!1,error:"That app is no longer in the console."};let d=await (0,r.f)(c.host,c.prev,{deadline:Date.now()+b});return d?(await w(c,d),{ok:!0,message:(0,t.I)(c.name,d),passed:"ok"===d.status||"vulnerable"===d.status,vulnerable:d.findings.length>0,audit:{message:`Security check: ${c.name}`,resourceId:c.id}}):{ok:!1,error:"The check took too long. Try again in a minute."}}a.s(["d",0,x,"Z",0,u],242605);let y=a=>"string"==typeof a&&a?a:null;async function z(a,m){let q=await (0,d.f)().select({r:e.resources,s:e.snapshots,sec:e.appSecurity,accStatus:e.accounts.status}).from(e.resources).leftJoin(e.accounts,(0,b.u)(e.accounts.id,e.resources.accountId)).leftJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).leftJoin(e.appSecurity,(0,b.u)(e.appSecurity.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.kind,"app"),(0,b.u)(e.resources.monitored,!0),m?(0,b.u)(e.resources.id,m):void 0)).orderBy(e.resources.name).limit(i.O.apps);if(!q.length)return[];let r=q.map(a=>a.r.id),s=(await (0,d.f)().select().from(e.monitors).where((0,b.y)(e.monitors.resourceId,r)).orderBy(e.monitors.createdAt).limit(i.O.monitors)).map(p.M),t=await (0,d.f)().selectDistinctOn([e.deployments.resourceId]).from(e.deployments).where((0,b.b)((0,b.y)(e.deployments.resourceId,r),(0,b.u)(e.deployments.target,"production"))).orderBy(e.deployments.resourceId,(0,c.A)(e.deployments.createdAtProvider)),v=await (0,o._)(s.map(a=>a.id),a),w=await (0,o.Q)(r,a),x=await (0,j.F)(r),z=s.length?await (0,n.w)():[];return q.map(({r:b,s:c,sec:d,accStatus:e})=>{let j=s.filter(a=>a.appId===b.id).map(b=>({...b,maintUntil:(0,k.x)(z,{monitorId:b.id,appId:b.appId},a)?.end??null})),m=y(b.meta.createdAt),n=t.find(a=>a.resourceId===b.id);return{id:b.id,name:b.name,gone:null!==b.goneAt,state:c?.state??"unknown",stateSince:c?.stateSince??null,domain:(0,f.m)(b.name,j.map(a=>a.url)),framework:y(b.meta.framework),productionBranch:y(b.meta.productionBranch),createdAt:m?new Date(m):null,teamName:y(b.meta.teamName),teamSlug:y(b.meta.teamSlug),repo:y(b.meta.repo),repoType:y(b.meta.repoType),functionRegions:Array.isArray(b.meta.functionRegions)?b.meta.functionRegions.filter(a=>"string"==typeof a):[],monitors:j,lastDeploy:n?(0,l.u)(n):null,uptime30:(0,h.Y)(j.flatMap(b=>(0,h.w)(v.get(b.id),a,h.I))),response:w.get(b.id)??{hourly:Array.from({length:i.A.responseHours},()=>null),p95:null,p50:null},days:new Map(j.flatMap(a=>{let b=v.get(a.id);return b?[[a.id,b]]:[]})),security:d?u(d):null,database:x.get(b.id)??null,dbPaused:c?.data.dbPaused===!0,pageViews:(0,g.G)(c?.data),pageViewsNote:(0,g.R)({gone:null!==b.goneAt,teamId:y(b.meta.teamId),accountOk:"ok"===e,hasProductionDeploy:void 0!==n})}})}async function A(a,b){return(await z(b,a))[0]??null}async function B(a,c){let[f]=await (0,d.f)().select({id:e.resources.id,name:e.resources.name}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.id,a),(0,b.u)(e.resources.kind,"app"))).limit(1);return f?(await (0,d.f)().transaction(async d=>{let g=new Date;await d.update(e.resources).set({monitored:!1,updatedAt:g}).where((0,b.u)(e.resources.id,a)),await d.delete(e.monitors).where((0,b.u)(e.monitors.resourceId,a)),await d.delete(e.deployments).where((0,b.u)(e.deployments.resourceId,a)),await d.delete(e.snapshots).where((0,b.u)(e.snapshots.resourceId,a)),await d.delete(e.appSecurity).where((0,b.u)(e.appSecurity.resourceId,a)),await d.delete(e.resources).where((0,b.b)((0,b.u)(e.resources.kind,"domain"),(0,b.u)(e.resources.parentId,a))),await (0,m.f)([{type:"action",kind:"ok",message:`${f.name} removed from the console`,detail:null,resourceId:a,actorUserId:c}],d)}),{ok:!0,message:`${f.name} is no longer in the console. The Vercel project itself isn't touched.`}):{ok:!1,error:"That app is no longer in the console."}}a.s(["Z",0,A,"G",0,z,"a",0,B],840784)},46126,a=>{var b=a.i(33135);let c=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?`,d="[\"'`]";function e(a){let b=/^(\d+)\.\d+\.\d+(?:-[0-9A-Za-z.]+)?$/.exec(a);return null!==b&&Number(b[1])>=9&&1e3>Number(b[1])}let f={"&amp;":"&","&quot;":'"',"&#39;":"'","&#x27;":"'","&#x2F;":"/","&#47;":"/"},g=a=>a.replace(/&(?:amp|quot|#39|#x27|#x2F|#47);/gi,a=>f[a]??f[a.toLowerCase()]??a),h=RegExp(String.raw`\bnext\s*=\s*\{\s*version\s*:\s*${d}(${c})${d}`,"g"),i=RegExp(String.raw`version\s*:\s*${d}(${c})${d}\s*,\s*appDir\s*:`,"g"),j=RegExp(String.raw`appDir\s*:\s*[^,{}()]{1,16},\s*version\s*:\s*${d}(${c})${d}`,"g"),k=/\bnext\s*=\s*\{\s*version\s*(?::\s*([A-Za-z_$][\w$]*)\s*)?[,}]/g,l=a=>a.replace(/[$]/g,"\\$");var m=a.i(533957);async function n(a,f,o={}){let p=o.deadline??1/0,q=o.now??(()=>new Date),r=a=>Math.floor(Math.min(a,p)-Date.now()),s=Date.now()+15e3;if(0>=r(s))return null;let t=(a,b)=>({version:f?.version??null,status:a,findings:f?.findings??[],reason:b,checkedAt:q()}),u=(a,c)=>(0,b.K)(a,{maxBytes:3145728,timeoutMs:r(s),lookup:o.lookup,fetch:o.fetch,userAgent:"OpsConsole-Security/1.0 (+https://west-solutions.web.id)",sameOrigin:c}),v=await u(`https://${a}/`,"www");if(!v.ok&&v.error===b.l)return t("unknown","the site redirects to another host");if(!v.ok||200!==v.status)return Date.now()>=p?null:t("error",`Couldn't load the site: ${v.ok?`HTTP ${v.status}`:v.error}`);let w=(function(a,b){let c;try{c=new URL(b)}catch{return[]}let d=new Set,e=[];for(let b of a.matchAll(/<script\b[^>]*?\ssrc\s*=\s*(["'])(.*?)\1/gi)){let a;try{a=new URL(g(b[2].trim()),c)}catch{continue}if("https:"===a.protocol&&a.origin===c.origin&&a.pathname.startsWith("/_next/static/")&&(a.hash="",!d.has(a.href))){var f;d.add(a.href),e.push({href:a.href,rank:(f=a.pathname,/\/main-app[-.]/.test(f)?0:/\/(main|app-index)[-.]/.test(f)?1:/\/(webpack|polyfills|framework)[-.]/.test(f)?3:2),i:e.length})}}return e.sort((a,b)=>a.rank-b.rank||a.i-b.i).map(a=>a.href)})(v.body,v.url).slice(0,12);if(0===w.length)return t("unknown",v.body.includes("/_next/")?"version not exposed":"not a Next.js site");let x=null,y=0,z=!1;for(let a of w){if(0>=r(s)){z=!0;break}let b=await u(a,!0);if(b.ok&&200===b.status&&(y++,x=function(a){for(let b of a.matchAll(h))if(e(b[1]))return b[1];for(let b of[i,j])for(let c of a.matchAll(b))if(e(c[1]))return c[1];for(let b of a.matchAll(k)){let f=b[1]??"version",g=RegExp(String.raw`(?:^|[^\w$.])${l(f)}\s*=\s*${d}(${c})${d}`,"g"),h=null;for(let c of a.matchAll(g)){if((c.index??0)>=(b.index??0))break;h=c[1]}if(h&&e(h))return h}return null}(b.body)))break}if(!x)return Date.now()>=p?null:z||0>=r(s)?t("error","Reading the site's scripts took longer than 15 s"):0===y?t("error","Couldn't load the site's scripts"):t("unknown","version not exposed");let A=r(Date.now()+1e4);if(A<=0)return null;let B=await (0,m.y)(x,{timeoutMs:A,fetch:o.fetch});return B.ok?{version:x,status:B.findings.length?"vulnerable":"ok",findings:B.findings,reason:null,checkedAt:q()}:Date.now()>=p?null:t("error",B.error)}a.s(["f",0,n],46126)},182357,a=>{var b=a.i(84979),c=a.i(245710);let d=a=>!!a&&a.findings.length>0,e=a=>/[.!?]$/.test(a)?a:`${a}.`;a.s(["y",0,{CRITICAL:"Critical",HIGH:"High",MODERATE:"Moderate",LOW:"Low",UNKNOWN:"Unknown"},"I",0,function(a,c){return"vulnerable"===c.status?`${a} runs Next.js ${c.version} with ${(0,b.q)(c.findings.length)}.`:"ok"===c.status?`No known vulnerabilities for Next.js ${c.version}.`:"unknown"===c.status?`Couldn't read the Next.js version: ${e(c.reason??"no reason given")}`:`The check failed: ${e(c.reason??"no reason given")}`},"f",0,function(a){if(!d(a))return null;let c=(0,b.N)(a.findings);return{label:"CVE",severe:(0,b.o)(c),title:`Next.js ${a.version}: ${(0,b.q)(a.findings.length)}, worst ${c.toLowerCase()}`}},"X",0,d,"v",0,function(a){let c=[];for(let e of a){if(e.gone||!d(e.security))continue;let a=e.security,f=(0,b.N)(a.findings),g=(0,b.r)(a.findings);c.push({key:`sec-${e.id}`,tone:(0,b.o)(f)?"danger":"warning",title:`${e.name} runs a vulnerable Next.js (${a.version??"unknown version"})`,body:`${(0,b.q)(a.findings.length)}, worst ${f.toLowerCase()}.${g?` Fixed in ${g}.`:""}`,action:{label:"Open app",href:`/apps/${e.id}`}})}return[...c.filter(a=>"danger"===a.tone),...c.filter(a=>"warning"===a.tone)]},"g",0,function(a){if(!a)return{state:"unknown",text:`Not checked yet. The daily job checks at ${(0,c.G)()}.`};if("ok"===a.status)return{state:"ok",text:`No known vulnerabilities for Next.js ${a.version}.`};let b=null!==a.version||a.findings.length>0?" Showing the result from before.":"";return"unknown"===a.status?{state:"unknown",text:`Couldn't read the Next.js version: ${e(a.reason??"no reason given")}${b}`}:"error"===a.status?{state:"warn",text:`The last check failed: ${e(a.reason??"no reason given")}${b}`}:null}])}]})();
2
2
 
3
3
  //# sourceMappingURL=src_lib_0x4n8swwa3zn7._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[646324,a=>{let b=a=>a?a.getTime():null;function c(a,b){return!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).filter(a=>"string"==typeof a[1]&&new Date(a[1]).getTime()>b.getTime()))}a.s(["Q",0,function(a,b,c,d=new Set){let e=new Set(c.map(a=>`${a.resourceId}/${a.id}`));return a.flatMap(a=>{let c=b.get(a.externalId);return!c||d.has(c)||e.has(`${a.id}/${c}`)?[]:[{appId:a.id,deploymentId:c}]})},"E",0,function(a,c){return!a||a.state!==c.state||a.target!==c.target||a.branch!==c.branch||a.commitSha!==c.commitSha||a.commitMessage!==c.commitMessage||a.source!==c.source||a.url!==c.url||b(a.buildingAt)!==b(c.buildingAt)||b(a.readyAt)!==b(c.readyAt)},"Y",0,function(a,b,d){let e=new Date(d.getTime()+216e5).toISOString();return{...c(a,d),...Object.fromEntries(b.map(a=>[a,e]))}},"K",0,function(a){try{return new URL(a).pathname}catch{return"/"}},"a",0,function(a,b){let c=[...new Map(a.map(a=>[a.id,a])).values()].sort((a,b)=>b.createdAt.getTime()-a.createdAt.getTime()),d=b??c[0]?.id??null,e=c.findIndex(a=>a.id===d);return{currentId:d,previousId:e>=0?c[e+1]?.id??null:null}},"S",0,(a,b)=>new Set(Object.keys(c(a,b)))])},469762,a=>{var b=a.i(245710);function c(a,b){let c=Math.max(0,b.getTime()-a.getTime());return c<6e4?"now":c<36e5?`${Math.floor(c/6e4)} min ago`:c<864e5?`${Math.floor(c/36e5)} h ago`:`${Math.floor(c/864e5)} d ago`}function d(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;let c=Math.floor(b/60);return c<60?`${c}m ${String(b%60).padStart(2,"0")}s`:`${Math.floor(c/60)}h ${String(c%60).padStart(2,"0")}m`}a.s(["m",0,function(a,b){for(let a of b)try{let b=new URL(a);if("https:"!==b.protocol&&"http:"!==b.protocol||!b.host)continue;return b.host}catch{}return`${a}.vercel.app`},"W",0,function(a){return a?a.split(/\r?\n|\r/).map(a=>a.trim()).find(a=>""!==a)??"":""},"h",0,function(a,d){let e=d.getTime()-a.getTime();return e<36e5?c(a,d):(0,b.m)(a,d)?(0,b.U)(a):`${Math.max(1,Math.floor(e/864e5))} d ago`},"A",0,function(a,b){return"building"===a.state?`${d(b.getTime()-(a.buildingAt??a.createdAt).getTime())} elapsed`:a.readyAt&&a.buildingAt?d(a.readyAt.getTime()-a.buildingAt.getTime()):"—"},"v",0,function(a,c){return(0,b.m)(a,c)?(0,b.U)(a):`${(0,b.L)(a)} ${(0,b.U)(a)}`},"o",0,function(a,b){let c=Math.max(0,b.getTime()-a.getTime()),d=(a,b)=>`${a} ${b}${1===a?"":"s"}`;return c<36e5?d(Math.max(1,Math.floor(c/6e4)),"minute"):c<864e5?d(Math.floor(c/36e5),"hour"):d(Math.floor(c/864e5),"day")},"F",0,function(a){try{let b=new URL(a);return`${b.host}${b.pathname}`}catch{return a}},"$",0,function(a,e){if(!a)return"—";if("building"===a.state)return`building ${d(e.getTime()-(a.buildingAt??a.createdAt).getTime())}`;let f=a.readyAt??a.createdAt;return"error"===a.state?`failed ${(0,b.m)(f,e)?(0,b.U)(f):c(f,e)}`:"canceled"===a.state?`canceled ${c(f,e)}`:c(f,e)},"H",0,function(a){let{day:c,month:d,year:e}=(0,b.C)(a);return`${c} ${d} ${e}`},"p",0,a=>null===a?"—":`${Math.round(a)} ms`,"C",0,a=>null===a?"—":`${(Math.floor(100*a+1e-6)/100).toFixed(2)}%`,"J",0,c,"_",0,a=>a?a.slice(0,7):"—"])}]})();
1
+ (()=>{"use strict";module.exports=[646324,a=>{let b=a=>a?a.getTime():null;function c(a,b){return!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).filter(a=>"string"==typeof a[1]&&new Date(a[1]).getTime()>b.getTime()))}a.s(["Q",0,function(a,b,c,d=new Set){let e=new Set(c.map(a=>`${a.resourceId}/${a.id}`));return a.flatMap(a=>{let c=b.get(a.externalId);return!c||d.has(c)||e.has(`${a.id}/${c}`)?[]:[{appId:a.id,deploymentId:c}]})},"E",0,function(a,c){return!a||a.state!==c.state||a.target!==c.target||a.branch!==c.branch||a.commitSha!==c.commitSha||a.commitMessage!==c.commitMessage||a.source!==c.source||a.url!==c.url||b(a.buildingAt)!==b(c.buildingAt)||b(a.readyAt)!==b(c.readyAt)},"Y",0,function(a,b,d){let e=new Date(d.getTime()+216e5).toISOString();return{...c(a,d),...Object.fromEntries(b.map(a=>[a,e]))}},"K",0,function(a){try{return new URL(a).pathname}catch{return"/"}},"a",0,function(a,b){let c=[...new Map(a.map(a=>[a.id,a])).values()].sort((a,b)=>b.createdAt.getTime()-a.createdAt.getTime()),d=b??c[0]?.id??null,e=c.findIndex(a=>a.id===d);return{currentId:d,previousId:e>=0?c[e+1]?.id??null:null}},"S",0,(a,b)=>new Set(Object.keys(c(a,b)))])},469762,a=>{var b=a.i(245710);function c(a,b){let c=Math.max(0,b.getTime()-a.getTime());return c<6e4?"now":c<36e5?`${Math.floor(c/6e4)} min ago`:c<864e5?`${Math.floor(c/36e5)} h ago`:`${Math.floor(c/864e5)} d ago`}function d(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;let c=Math.floor(b/60);return c<60?`${c}m ${String(b%60).padStart(2,"0")}s`:`${Math.floor(c/60)}h ${String(c%60).padStart(2,"0")}m`}a.s(["m",0,function(a,b){for(let a of b)try{let b=new URL(a);if("https:"!==b.protocol&&"http:"!==b.protocol||!b.host)continue;return b.host}catch{}return`${a}.vercel.app`},"W",0,function(a){return a?a.split(/\r?\n|\r/).map(a=>a.trim()).find(a=>""!==a)??"":""},"h",0,function(a,d){let e=d.getTime()-a.getTime();return e<36e5?c(a,d):(0,b.m)(a,d)?(0,b.U)(a):`${Math.max(1,Math.floor(e/864e5))} d ago`},"A",0,function(a,b){return"building"===a.state?`${d(b.getTime()-(a.buildingAt??a.createdAt).getTime())} elapsed`:a.readyAt&&a.buildingAt?d(a.readyAt.getTime()-a.buildingAt.getTime()):"—"},"v",0,function(a,c){return(0,b.m)(a,c)?(0,b.U)(a):`${(0,b.L)(a)} ${(0,b.U)(a)}`},"o",0,function(a,b){let c=Math.max(0,b.getTime()-a.getTime()),d=(a,b)=>`${a} ${b}${1===a?"":"s"}`;return c<36e5?d(Math.max(1,Math.floor(c/6e4)),"minute"):c<864e5?d(Math.floor(c/36e5),"hour"):d(Math.floor(c/864e5),"day")},"F",0,function(a){try{let b=new URL(a);return`${b.host}${b.pathname}`}catch{return a}},"$",0,function(a,e){if(!a)return"—";if("building"===a.state)return`building ${d(e.getTime()-(a.buildingAt??a.createdAt).getTime())}`;let f=a.readyAt??a.createdAt;return"error"===a.state?`failed ${(0,b.m)(f,e)?(0,b.U)(f):c(f,e)}`:"canceled"===a.state?`canceled ${c(f,e)}`:c(f,e)},"H",0,function(a){let{day:c,month:d,year:e}=(0,b.e)(a);return`${c} ${d} ${e}`},"p",0,a=>null===a?"—":`${Math.round(a)} ms`,"C",0,a=>null===a?"—":`${(Math.floor(100*a+1e-6)/100).toFixed(2)}%`,"J",0,c,"_",0,a=>a?a.slice(0,7):"—"])}]})();
2
2
 
3
3
  //# sourceMappingURL=src_lib_1nkahiclbn55q._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[270432,a=>{"use strict";var b=a.i(93321),c=a.i(351674),d=a.i(548734),e=a.i(837137),f=a.i(109068),g=a.i(678831),h=a.i(45617),i=a.i(455317),j=a.i(383487),k=a.i(714530),l=a.i(601219),m=a.i(358179),n=a.i(292321),o=a.i(49146),p=a.i(33135),q=a.i(669943),r=a.i(26972),s=a.i(811365),t=a.i(689963),u=a.i(191179),v=a.i(427221),w=a.i(530174);let x=/not enabled/i,y=(a,b,c={})=>({ok:!1,kind:a,error:b,...c}),z="Vercel Web Analytics answered in a format the console doesn't recognise.",A=r.z.object({data:r.z.object({pageviews:s.z.number().finite().nonnegative(),visitors:s.z.number().finite().nonnegative()})}),B=r.z.object({data:t.z.array(u.z.unknown())}),C=r.z.object({timestamp:v.z.string().transform((a,b)=>{let c=Date.parse(a);return Number.isNaN(c)?(b.addIssue({code:"custom",message:"bad timestamp"}),w.z.NEVER):c}),pageviews:s.z.number().finite().nonnegative().nullish().catch(null)});async function D(a,b,c,d){let e=d.since.toISOString(),f=d.until.toISOString(),g=d.fetch??fetch,h=new AbortController,i=setTimeout(()=>h.abort(new DOMException("window","TimeoutError")),d.timeoutMs??8e3),j=d.signal?AbortSignal.any([h.signal,d.signal]):h.signal,k=(0,p.X)(j);async function l(i,l){let m=new URLSearchParams({projectId:c,teamId:b,...l,since:e,until:f});try{let b=await Promise.race([g(`https://api.vercel.com/v1/query/web-analytics/visits/${i}?${m}`,{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"},signal:j,cache:"no-store"}),k]),c=null,d=!1;if(401===b.status||403===b.status)c=y("auth",`Vercel rejected this credential (${b.status}).`,{status:b.status});else if(429===b.status){let a=Number(b.headers.get("Retry-After"));c=y("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(a)&&a>0?a:60})}else if(400===b.status){let a=await Promise.race([b.text(),k]).catch(()=>"");x.test(a)?d=!0:c=y("transient","Vercel Web Analytics rejected the request (400).",{status:400})}else b.ok||(c=y("transient",`Vercel Web Analytics returned an error (${b.status}).`,{status:b.status}));if(d)return{kind:"off"};if(c)return await b.body?.cancel().catch(()=>void 0),{kind:"fail",fail:c};try{return{kind:"body",body:await Promise.race([b.json(),k])}}catch(a){if(j.aborted)throw a;return{kind:"fail",fail:y("format",z)}}}catch{return{kind:"fail",fail:j.aborted?h.signal.aborted&&!d.signal?.aborted?y("transient","Vercel Web Analytics didn't answer in time."):y("transient","Reading Vercel Web Analytics was cancelled."):y("transient","Couldn't reach Vercel Web Analytics.")}}}try{let[a,b]=await Promise.all([l("count",{}),l("aggregate",{by:"hour"})]);if("off"===a.kind||"off"===b.kind)return{ok:!0,enabled:!1};let c=[a,b].flatMap(a=>"fail"===a.kind?[a.fail]:[]),d=c.find(a=>"auth"===a.kind);if(d)return d;let e="body"===b.kind?B.safeParse(b.body):null,f="fail"===b.kind?b.fail:e?.success?null:y("format",z),g=c.find(a=>"transient"===a.kind);if(g)return g;if(f)return f;if(!e?.success)return y("format",z);let h="body"===a.kind?A.safeParse(a.body):null,i=e.data.data.flatMap(a=>{let b=C.safeParse(a);return b.success?[b.data]:[]});if(i.length>0&&i.every(a=>null==a.pageviews))return y("format",z);let j=new Map;for(let a of i){let b=36e5*Math.floor(a.timestamp/36e5);j.set(b,(j.get(b)??0)+(a.pageviews??0))}let k=[...j].sort((a,b)=>a[0]-b[0]).slice(-24).map(([a,b])=>({at:new Date(a),views:b}));if(h?.success)return{ok:!0,enabled:!0,total:h.data.data.pageviews,visitors:h.data.data.visitors,hourly:k};return{ok:!0,enabled:!0,total:k.reduce((a,b)=>a+b.views,0),visitors:null,hourly:k}}finally{clearTimeout(i),h.abort()}}var E=a.i(631107);async function F(a,b,c){let d=await (0,n.g)(null);if(!d.length)return;let e=new Date(36e5*Math.floor(a.getTime()/36e5)-828e5);await (0,p.P)(d,3,async d=>{if(Date.now()+8500>b)return;let f=await D(d.token,d.teamId,d.projectId,{since:e,until:a});if(!f.ok)return void c.push(`pageviews/${d.appName}: ${f.error}`);try{await (0,q.r)(d.appId,{pageviews:(0,E.a)(f,a)},a)}catch{c.push(`pageviews/${d.appName}: couldn't save the page views`)}})}var G=a.i(46396),H=a.i(492665),I=a.i(519051),J=a.i(572134),K=a.i(646324),L=a.i(560954),M=a.i(384896);function N(a){if(!a)return null;if("unknown"!==a.state)return a.state;let b=a.data?.lastGoodState;return"string"==typeof b&&M.W.includes(b)?b:null}let O={turso_database:"Turso database",upstash_redis:"Upstash Redis",d1_database:"D1 database"};function P(a,b){return"auth"===a.kind?"auth":"scope"===a.kind?b?"auth":"column":"missing"===a.kind?b?"unknown":"column":"unknown"}var Q=a.i(656298),R=a.i(688275),S=a.i(893893),T=a.i(672319),U=a.i(449734),V=a.i(15827),W=a.i(944808),X=a.i(112735);let Y="skipped the rest, time budget used";function Z(a){let b=a.deadline-Date.now()-500;if(b<250)throw Error(Y);return{timeoutMs:Math.min(5e3,b)}}async function $(a,b,c){let d=!1;return{out:await (0,p.P)(b,3,async b=>{let e;try{e=Z(a)}catch{d=!0;return}return c(b,e)}),skipped:d}}function _(a){if(a)throw Error(Y)}async function aa(a){let c=await (0,d.f)().select().from(e.accounts).where((0,b.b)((0,b.u)(e.accounts.provider,a),(0,b.u)(e.accounts.status,"ok"))),f=(0,H.f)().OPS_ENCRYPTION_KEY;return c.map(a=>({acc:a,credential:(0,m.V)({ciphertext:a.credentialCiphertext,iv:a.credentialIv},f)}))}function ab(a,c){return(0,d.f)().select({r:e.resources,s:e.snapshots}).from(e.resources).leftJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,c),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt))).limit(100)}let ac=a=>c.B`${e.snapshots.data} || ${JSON.stringify(a)}::jsonb`;async function ad(a,b,c){let f=N(a.s?{state:a.s.state,data:a.s.data}:null),g="unknown"===b.state,h=g?f?{lastGoodState:f}:{}:{...b.patch,lastGoodState:b.state},i=!g&&f!==b.state;return await (0,d.f)().insert(e.snapshots).values({resourceId:a.r.id,state:b.state,data:h,collectedAt:c,stateSince:c}).onConflictDoUpdate({target:e.snapshots.resourceId,set:{state:b.state,data:ac(h),...g?{}:{collectedAt:c},...i?{stateSince:c}:{}}}),g?null:function(a){let{prev:b,next:c}=a;if(null===b||"unknown"===b||"unknown"===c||b===c)return null;let d={resourceId:a.resourceId,type:"database",at:a.at};if("supabase_project"===a.kind)return"paused"===c?{...d,reason:"DatabasePaused",kind:"paused",message:"Supabase project paused",detail:"Status changed to INACTIVE"}:"ok"===c?{...d,reason:"DatabaseRestored",kind:"ok",message:"Supabase project active again",detail:"Status changed to ACTIVE_HEALTHY"}:"warn"===c?{...d,reason:"DatabaseUnhealthy",kind:"warn",message:"Supabase project unhealthy",detail:a.label}:"err"===c?{...d,reason:"DatabaseFailed",kind:"err",message:`Supabase project: ${a.label.toLowerCase()}`,detail:a.label}:null;if("neon_project"===a.kind)return"err"===c?{...d,reason:"NeonSuspended",kind:"err",message:"Neon compute suspended",detail:a.label}:"err"===b&&("ok"===c||"idle"===c)?{...d,reason:"NeonAvailable",kind:"ok",message:"Neon compute available again",detail:a.label}:null;let e=O[a.kind];if(e)return"err"===c?{...d,reason:"DatabaseFailed",kind:"err",message:`${e}: ${a.label.toLowerCase()}`,detail:a.label}:"off"===c?{...d,reason:"DatabaseMissing",kind:"off",message:`${e} missing`,detail:a.label}:"ok"===c&&("err"===b||"off"===b)?{...d,reason:"DatabaseRestored",kind:"ok",message:`${e} available again`,detail:a.label}:null;if("err"===c){let b="Daily quota used up"===a.label;return{...d,reason:b?"FirestoreQuotaUsedUp":"FirestoreUnreachable",kind:"err",message:b?"Firestore daily quota used up":"Firestore not reachable",detail:a.label}}return"off"===c?{...d,reason:"FirestoreMissing",kind:"off",message:"Firestore database missing",detail:a.label}:"ok"===c&&("err"===b||"off"===b)?{...d,reason:"FirestoreReachable",kind:"ok",message:"Firestore reachable again",detail:a.label}:null}({kind:a.r.kind,resourceId:a.r.id,prev:f,next:b.state,label:b.label,at:c})}async function ae(a,c){await (0,d.f)().update(e.snapshots).set({data:ac(c)}).where((0,b.u)(e.snapshots.resourceId,a.r.id))}let af=a=>(0,l.f)(a);async function ag(a,c,g,h,i){if("auth"===P(h,!0)){let a=(0,f.E)({ok:!1,kind:"auth",error:h.error});a&&await (0,d.f)().update(e.accounts).set({...a,updatedAt:i.now}).where((0,b.u)(e.accounts.id,c.id))}for(let a of g)await ad(a,{state:"unknown",label:"Unknown",patch:{}},i.now);i.errors.push(`${a}/${c.label}: ${h.error}`)}let ah=a=>a.toISOString();async function ai(a){return a.length?new Set((await (0,d.f)().select({app:e.links.fromResourceId,state:e.snapshots.state,data:e.snapshots.data}).from(e.links).innerJoin(e.resources,(0,b.u)(e.resources.id,e.links.toResourceId)).innerJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.links.kind,"uses_db"),(0,b.y)(e.links.fromResourceId,a),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt)))).filter(a=>"paused"===a.state||"unknown"===a.state&&"paused"===a.data.lastGoodState).map(a=>a.app)):new Set}async function aj(a){for(let{acc:b,credential:c}of(await aa("supabase"))){if(Z(a),!c){a.errors.push(`supabase/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"supabase_project");if(!d.length)continue;let e=await (0,X.X)(c,Z(a));if(!e.ok){await ag("supabase",b,d,e,a);continue}let f=new Map(e.data.map(a=>[a.ref,a])),g=[];for(let b of d){let c=f.get(b.r.externalId);if(!c){g.push(await ad(b,{state:"off",label:"Not found",patch:{status:"REMOVED"}},a.now));continue}let d=(0,T.P)(c.status),e=N(b.s?{state:b.s.state,data:b.s.data}:null),h={status:c.status,region:c.region,pgVersion:c.pgVersion,orgSlug:c.orgSlug};"paused"===d.state&&"paused"!==e&&(h.pausedBeforeSeen=null===e),g.push(await ad(b,{state:d.state,label:d.label,patch:h},a.now))}await af(g);let h=new Map(d.map(a=>[a.r.externalId,a.r.id])),i=e.data.map(a=>({resourceId:h.get(a.ref)??null,accountId:b.id,status:a.status,orgSlug:a.orgSlug}));await (0,L.z)(a.now,i,a.deadline).catch(()=>{console.warn("auto-restore failed"),a.errors.push("auto-restore failed")})}}async function ak(a){for(let{acc:b,credential:c}of(await aa("supabase"))){if(Z(a),!c)continue;let d=await ab(b.id,"supabase_project");if(!d.length)continue;let e=new Map(d.map(a=>[a.r.id,(0,S.k)(S.B,a.s?.data)])),f=new Map;for(let d of new Set([...e.values()].map(a=>a.orgSlug).filter(a=>!!a))){let e=await (0,X.K)(c,d,Z(a));f.set(d,e.ok&&null!==e.data?"free"===e.data:null),e.ok||"scope"===e.kind||a.errors.push(`supabase/${b.label} plan: ${e.error}`)}let{skipped:g}=await $(a,d,async(b,d)=>{let g=e.get(b.r.id),h={freeOrg:g.orgSlug?f.get(g.orgSlug)??null:null};if((g.status??"").startsWith("ACTIVE_")){let[e,f]=await Promise.all([(0,X.F)(c,b.r.externalId,d),(0,X.Z)(c,b.r.externalId,d)]);e.ok?Object.assign(h,{health:e.data.map(({name:a,status:b})=>({name:a,status:b})),healthAt:ah(a.now),healthError:null}):"column"===P(e,!1)?h.healthError=e.error:a.errors.push(`supabase/${b.r.name} health: ${e.error}`),f.ok?Object.assign(h,{lastTrafficAt:(0,T.H)(f.data)?.toISOString()??null,trafficAt:ah(a.now),trafficError:null}):"column"===P(f,!1)?h.trafficError=f.error:a.errors.push(`supabase/${b.r.name} traffic: ${f.error}`)}await ae(b,h)});_(g)}}async function al(a){for(let{acc:b,credential:c}of(await aa("neon"))){if(Z(a),!c){a.errors.push(`neon/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"neon_project");if(!d.length)continue;let{out:e,skipped:f}=await $(a,d,(a,b)=>Promise.all([(0,W.Z)(c,a.r.externalId,b),(0,W.k)(c,a.r.externalId,b),(0,W.e)(c,a.r.externalId,b)])),g=e.flat().find(a=>void 0!==a&&!a.ok&&"auth"===a.kind);if(g){await ag("neon",b,d,g,a);continue}let h=[];for(let[b,c]of d.entries()){let d=e[b];if(!d)continue;let[f,g,i]=d;if(!f.ok||!g.ok||!i.ok){let b=[f,g,i].find(a=>!a.ok);"missing"===b.kind?h.push(await ad(c,{state:"off",label:"Not found",patch:{}},a.now)):(await ad(c,{state:"unknown",label:"Unknown",patch:{}},a.now),a.errors.push(`neon/${c.r.name}: ${b.error}`));continue}let j=(0,R.p)({endpoints:g.data,computeSeconds:f.data.computeSeconds});h.push(await ad(c,{state:j.state,label:j.label,patch:{region:f.data.region,pgVersion:f.data.pgVersion,computeSeconds:f.data.computeSeconds,transferBytes:f.data.transferBytes,activeSeconds:f.data.activeSeconds,periodStart:f.data.periodStart,periodEnd:f.data.periodEnd,endpoints:g.data,branches:i.data}},a.now))}await af(h),_(f)}}async function am(a){for(let{acc:b,credential:c}of(await aa("firebase"))){Z(a);let d=c?(0,V.p)(c):null;if(!d){a.errors.push(`firebase/${b.label}: credential can't be read`);continue}let e=await ab(b.id,"firestore");if(!e.length)continue;let f=await (0,V.X)(d,Z(a));if(!f.ok){await ag("firebase",b,e,f,a);continue}let{out:g,skipped:h}=await $(a,e,(a,b)=>(0,U.G)(f.data,a.r.externalId,b)),i=[];for(let[b,c]of e.entries()){let d=g[b];if(!d)continue;let e=(0,Q.g)(d);"unknown"!==e.state||d.ok||a.errors.push(`firebase/${c.r.name}: ${d.error}`);let f=d.ok?{latencyMs:d.data.latencyMs,pingError:null,pingReason:null,pingKind:null}:{pingError:d.error,pingReason:d.reason??null,pingKind:d.kind};i.push(await ad(c,{...e,patch:f},a.now))}await af(i),_(h)}}async function an(a){for(let{acc:b,credential:c}of(await aa("firebase"))){Z(a);let d=c?(0,V.p)(c):null;if(!d)continue;let e=(await ab(b.id,"firestore")).filter(a=>a.s?.state!=="off");if(!e.length)continue;let f=await (0,V.X)(d,Z(a));if(!f.ok){a.errors.push(`firebase/${b.label}: ${f.error}`);continue}let g=(0,Q.a)(a.now),{skipped:h}=await $(a,e,async(b,c)=>{let d=await (0,U.W)(f.data,b.r.externalId,g,a.now,c);d.ok?await ae(b,{...d.data,opsAt:ah(a.now),opsError:null}):"column"===P(d,!1)?await ae(b,{reads:null,writes:null,deletes:null,opsAt:ah(a.now),opsError:/requires billing/i.test(d.message??"")?"Not available on Spark: Firestore usage needs billing (Blaze plan)":"SERVICE_DISABLED"===d.reason?"Not readable: the Cloud Monitoring API is off in this project":"Not readable: the service account needs monitoring.viewer"}):a.errors.push(`firebase/${b.r.name} usage: ${d.error}`)});_(h)}}async function ao(a){try{return await a(),null}catch(a){return a instanceof Error?a:Error(String(a))}}var ap=a.i(639271),aq=a.i(514670),ar=a.i(354448),as=a.i(584897),at=a.i(697365);async function au(a){let b=[await ao(()=>aw(a)),await ao(()=>ay(a)),await ao(()=>az(a))].find(a=>null!==a);if(b)throw b}let av=a=>a.toISOString();async function aw(a){for(let{acc:b,credential:c}of(await aa("turso"))){if(Z(a),!c){a.errors.push(`turso/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"turso_database");if(!d.length)continue;let e=await (0,ar.u)(c,Z(a));if(!e.ok){await ag("turso",b,d,e,a);continue}let f=new Set(d.map(a=>String(a.r.meta.org??""))),g=[];for(let h of e.data.filter(a=>f.has(a.slug))){let[e,f]=await Promise.all([(0,ar.X)(c,h.slug,Z(a)),(0,ar.d)(c,h.slug,Z(a))]),i=d.filter(a=>a.r.meta.org===h.slug);if(!e.ok){for(let b of i)await ad(b,{state:"unknown",label:"Unknown",patch:{}},a.now);a.errors.push(`turso/${b.label}: ${e.error}`);continue}let j=new Map(e.data.map(a=>[a.id,a]));for(let b of i)g.push(await ax(b,j.get(b.r.externalId),h,f,a))}let h=new Set(e.data.map(a=>a.slug));for(let b of d.filter(a=>!h.has(String(a.r.meta.org??""))))g.push(await ad(b,{state:"off",label:"Organization not visible to this token",patch:{}},a.now));await af(g)}}async function ax(a,b,c,d,e){if(!b)return ad(a,{state:"off",label:"Not found",patch:{}},e.now);let f=(0,ap.i)({blockReads:b.blockReads,blockWrites:b.blockWrites,orgBlockedReads:c.blockedReads,orgBlockedWrites:c.blockedWrites}),g={org:c.slug,group:b.group,primaryRegion:b.primaryRegion,plan:c.plan,blockReads:b.blockReads,blockWrites:b.blockWrites};if(d.ok){let a=d.data.byDb.get(b.id);Object.assign(g,{rowsRead:a?.rowsRead??null,rowsWritten:a?.rowsWritten??null,storageBytes:a?.storageBytes??null,orgRowsRead:d.data.org.rowsRead,orgRowsWritten:d.data.org.rowsWritten,orgStorageBytes:d.data.org.storageBytes,orgDatabases:d.data.org.databases,usageAt:av(e.now),usageError:null})}else"column"===P(d,!1)?g.usageError=d.error:e.errors.push(`turso/${a.r.name} usage: ${d.error}`);return ad(a,{...f,patch:g},e.now)}async function ay(a){for(let{acc:b,credential:c}of(await aa("upstash"))){Z(a);let d=c?(0,as.L)(c):null;if(!d){a.errors.push(`upstash/${b.label}: credential can't be read`);continue}let e=await ab(b.id,"upstash_redis");if(!e.length)continue;let f=await (0,as.M)(d,Z(a));if(!f.ok){await ag("upstash",b,e,f,a);continue}let g=new Map(f.data.map(a=>[a.id,a])),{out:h,skipped:i}=await $(a,e,(a,b)=>g.has(a.r.externalId)?(0,as.Z)(d,a.r.externalId,b):Promise.resolve(null)),j=[];for(let[b,c]of e.entries()){let d=g.get(c.r.externalId);if(!d){j.push(await ad(c,{state:"off",label:"Not found",patch:{}},a.now));continue}let e=(0,ap.t)(d.state),f={region:d.region,status:d.state,type:d.type},i=h[b];i?.ok?Object.assign(f,{...i.data,statsAt:av(a.now),statsError:null}):i&&"column"===P(i,!1)?f.statsError=i.error:i&&a.errors.push(`upstash/${c.r.name} stats: ${i.error}`),j.push(await ad(c,{...e,patch:f},a.now))}await af(j),_(i)}}async function az(a){let b={};for(let{acc:c,credential:d}of(await aa("cloudflare"))){if(Z(a),!d)continue;let e=await aB(c.id,d,a);if(!e.length){b[c.id]={d1:"error",analytics:null,at:av(a.now),note:"No Cloudflare account found for this token"};continue}let f="ok",g=null;for(let b of e){let e=await (0,aq.L)(d,b,Z(a));if(!e.ok){"error"==(f="scope"===e.kind||"auth"===e.kind?"missing":"error")&&a.errors.push(`d1/${c.label}: ${e.error}`);continue}await aC(c.id,b,e.data,a.now);let h=(await ab(c.id,"d1_database")).filter(a=>a.r.meta.accountId===b);if(!h.length)continue;let i=await (0,aq.t)(d,b,(0,aq.Y)(a.now),Z(a));g=i.ok?g??"ok":"scope"===i.kind?"missing":g??"error",i.ok||"scope"===i.kind||a.errors.push(`d1/${c.label} analytics: ${i.error}`);let{out:j,skipped:k}=await $(a,h,(a,c)=>(0,aq.m)(d,b,a.r.externalId,c)),l=new Map((i.ok?i.data:[]).map(a=>[a.databaseId,a])),m=j.map(a=>a?.ok?a.data.sizeBytes??0:0),n={accountRowsRead:i.ok?i.data.reduce((a,b)=>a+b.rowsRead,0):null,accountRowsWritten:i.ok?i.data.reduce((a,b)=>a+b.rowsWritten,0):null,accountSizeBytes:j.every(a=>a?.ok)?m.reduce((a,b)=>a+b,0):null,accountDatabases:e.data.length},o=[];for(let[b,c]of h.entries()){let d=j[b];void 0!==d&&o.push(await aA(c,d,l.get(c.r.externalId)??null,i.ok,i.ok?null:i.error,n,a))}await af(o),_(k)}b[c.id]={d1:f,analytics:g,at:av(a.now),note:null}}await (0,d.f)().insert(e.settings).values({key:at.F,value:b}).onConflictDoUpdate({target:e.settings.key,set:{value:b,updatedAt:a.now}})}async function aA(a,b,c,d,e,f,g){let h={accountId:a.r.meta.accountId??null,createdAt:a.r.meta.createdAt??null,accountDatabases:f.accountDatabases};return(b.ok?Object.assign(h,{sizeBytes:b.data.sizeBytes,numTables:b.data.numTables,readReplication:b.data.readReplication,detailsAt:av(g.now),detailsError:null}):"scope"===b.kind?h.detailsError=b.error:g.errors.push(`d1/${a.r.name}: ${b.error}`),d?Object.assign(h,{rowsRead:c?.rowsRead??0,rowsWritten:c?.rowsWritten??0,readQueries:c?.readQueries??0,writeQueries:c?.writeQueries??0,accountRowsRead:f.accountRowsRead,accountRowsWritten:f.accountRowsWritten,usageDay:(0,aq.Y)(g.now),usageAt:av(g.now),usageError:null}):h.usageError=e,null!==f.accountSizeBytes&&(h.accountSizeBytes=f.accountSizeBytes),b.ok||"transient"!==b.kind)?ad(a,{...(0,ap.c)(d?f:{accountRowsRead:null,accountRowsWritten:null}),patch:h},g.now):ad(a,{state:"unknown",label:"Unknown",patch:{}},g.now)}async function aB(a,c,f){let g=new Set,h=await (0,aq.N)(c,Z(f));if(h.ok)for(let a of h.data)g.add(a.id);for(let c of(await (0,d.f)().select({meta:e.resources.meta}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,"zone"),(0,b.M)(e.resources.goneAt))).limit(200)))"string"==typeof c.meta.accountId&&/^[0-9a-f]{32}$/i.test(c.meta.accountId)&&g.add(c.meta.accountId);return[...g].slice(0,5)}async function aC(a,c,f,g){let h=(await (0,d.f)().select({id:e.resources.id,externalId:e.resources.externalId,meta:e.resources.meta,goneAt:e.resources.goneAt}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,"d1_database")))).filter(a=>a.meta.accountId===c),i=new Map(h.map(a=>[a.externalId,a])),j=new Set(f.map(a=>a.uuid));await (0,d.f)().transaction(async d=>{for(let h of f){let f={accountId:c,createdAt:h.createdAt},j=i.get(h.uuid);j?await d.update(e.resources).set({name:h.name,meta:f,lastSeenAt:g,goneAt:null,updatedAt:g}).where((0,b.u)(e.resources.id,j.id)):await d.insert(e.resources).values({accountId:a,kind:"d1_database",externalId:h.uuid,name:h.name,meta:f,monitored:!0,lastSeenAt:g}).onConflictDoNothing({target:[e.resources.accountId,e.resources.kind,e.resources.externalId]})}let k=h.filter(a=>!j.has(a.externalId)&&!a.goneAt).map(a=>a.id);k.length&&await d.update(e.resources).set({goneAt:g,updatedAt:g}).where((0,b.y)(e.resources.id,k))})}var aD=a.i(666680),aE=a.i(263251),aF=a.i(634418);async function aG(a=new Date){let b=(0,aD.randomUUID)(),e=new Date(a.getTime()+aF.d).toISOString(),f=await (0,d.f)().execute(c.B`
1
+ module.exports=[270432,a=>{"use strict";var b=a.i(93321),c=a.i(351674),d=a.i(548734),e=a.i(837137),f=a.i(109068),g=a.i(678831),h=a.i(45617),i=a.i(455317),j=a.i(383487),k=a.i(714530),l=a.i(601219),m=a.i(358179),n=a.i(785459),o=a.i(49146),p=a.i(33135),q=a.i(669943),r=a.i(26972),s=a.i(811365),t=a.i(689963),u=a.i(191179),v=a.i(427221),w=a.i(530174);let x=/not enabled/i,y=(a,b,c={})=>({ok:!1,kind:a,error:b,...c}),z="Vercel Web Analytics answered in a format the console doesn't recognise.",A=r.z.object({data:r.z.object({pageviews:s.z.number().finite().nonnegative(),visitors:s.z.number().finite().nonnegative()})}),B=r.z.object({data:t.z.array(u.z.unknown())}),C=r.z.object({timestamp:v.z.string().transform((a,b)=>{let c=Date.parse(a);return Number.isNaN(c)?(b.addIssue({code:"custom",message:"bad timestamp"}),w.z.NEVER):c}),pageviews:s.z.number().finite().nonnegative().nullish().catch(null)});async function D(a,b,c,d){let e=d.since.toISOString(),f=d.until.toISOString(),g=d.fetch??fetch,h=new AbortController,i=setTimeout(()=>h.abort(new DOMException("window","TimeoutError")),d.timeoutMs??8e3),j=d.signal?AbortSignal.any([h.signal,d.signal]):h.signal,k=(0,p.X)(j);async function l(i,l){let m=new URLSearchParams({projectId:c,teamId:b,...l,since:e,until:f});try{let b=await Promise.race([g(`https://api.vercel.com/v1/query/web-analytics/visits/${i}?${m}`,{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"},signal:j,cache:"no-store"}),k]),c=null,d=!1;if(401===b.status||403===b.status)c=y("auth",`Vercel rejected this credential (${b.status}).`,{status:b.status});else if(429===b.status){let a=Number(b.headers.get("Retry-After"));c=y("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(a)&&a>0?a:60})}else if(400===b.status){let a=await Promise.race([b.text(),k]).catch(()=>"");x.test(a)?d=!0:c=y("transient","Vercel Web Analytics rejected the request (400).",{status:400})}else b.ok||(c=y("transient",`Vercel Web Analytics returned an error (${b.status}).`,{status:b.status}));if(d)return{kind:"off"};if(c)return await b.body?.cancel().catch(()=>void 0),{kind:"fail",fail:c};try{return{kind:"body",body:await Promise.race([b.json(),k])}}catch(a){if(j.aborted)throw a;return{kind:"fail",fail:y("format",z)}}}catch{return{kind:"fail",fail:j.aborted?h.signal.aborted&&!d.signal?.aborted?y("transient","Vercel Web Analytics didn't answer in time."):y("transient","Reading Vercel Web Analytics was cancelled."):y("transient","Couldn't reach Vercel Web Analytics.")}}}try{let[a,b]=await Promise.all([l("count",{}),l("aggregate",{by:"hour"})]);if("off"===a.kind||"off"===b.kind)return{ok:!0,enabled:!1};let c=[a,b].flatMap(a=>"fail"===a.kind?[a.fail]:[]),d=c.find(a=>"auth"===a.kind);if(d)return d;let e="body"===b.kind?B.safeParse(b.body):null,f="fail"===b.kind?b.fail:e?.success?null:y("format",z),g=c.find(a=>"transient"===a.kind);if(g)return g;if(f)return f;if(!e?.success)return y("format",z);let h="body"===a.kind?A.safeParse(a.body):null,i=e.data.data.flatMap(a=>{let b=C.safeParse(a);return b.success?[b.data]:[]});if(i.length>0&&i.every(a=>null==a.pageviews))return y("format",z);let j=new Map;for(let a of i){let b=36e5*Math.floor(a.timestamp/36e5);j.set(b,(j.get(b)??0)+(a.pageviews??0))}let k=[...j].sort((a,b)=>a[0]-b[0]).slice(-24).map(([a,b])=>({at:new Date(a),views:b}));if(h?.success)return{ok:!0,enabled:!0,total:h.data.data.pageviews,visitors:h.data.data.visitors,hourly:k};return{ok:!0,enabled:!0,total:k.reduce((a,b)=>a+b.views,0),visitors:null,hourly:k}}finally{clearTimeout(i),h.abort()}}var E=a.i(631107);async function F(a,b,c){let d=await (0,n.g)(null);if(!d.length)return;let e=new Date(36e5*Math.floor(a.getTime()/36e5)-828e5);await (0,p.P)(d,3,async d=>{if(Date.now()+8500>b)return;let f=await D(d.token,d.teamId,d.projectId,{since:e,until:a});if(!f.ok)return void c.push(`pageviews/${d.appName}: ${f.error}`);try{await (0,q.r)(d.appId,{pageviews:(0,E.a)(f,a)},a)}catch{c.push(`pageviews/${d.appName}: couldn't save the page views`)}})}var G=a.i(46396),H=a.i(492665),I=a.i(519051),J=a.i(572134),K=a.i(646324),L=a.i(560954),M=a.i(384896);function N(a){if(!a)return null;if("unknown"!==a.state)return a.state;let b=a.data?.lastGoodState;return"string"==typeof b&&M.W.includes(b)?b:null}let O={turso_database:"Turso database",upstash_redis:"Upstash Redis",d1_database:"D1 database"};function P(a,b){return"auth"===a.kind?"auth":"scope"===a.kind?b?"auth":"column":"missing"===a.kind?b?"unknown":"column":"unknown"}var Q=a.i(656298),R=a.i(688275),S=a.i(893893),T=a.i(672319),U=a.i(449734),V=a.i(15827),W=a.i(944808),X=a.i(112735);let Y="skipped the rest, time budget used";function Z(a){let b=a.deadline-Date.now()-500;if(b<250)throw Error(Y);return{timeoutMs:Math.min(5e3,b)}}async function $(a,b,c){let d=!1;return{out:await (0,p.P)(b,3,async b=>{let e;try{e=Z(a)}catch{d=!0;return}return c(b,e)}),skipped:d}}function _(a){if(a)throw Error(Y)}async function aa(a){let c=await (0,d.f)().select().from(e.accounts).where((0,b.b)((0,b.u)(e.accounts.provider,a),(0,b.u)(e.accounts.status,"ok"))),f=(0,H.f)().OPS_ENCRYPTION_KEY;return c.map(a=>({acc:a,credential:(0,m.V)({ciphertext:a.credentialCiphertext,iv:a.credentialIv},f)}))}function ab(a,c){return(0,d.f)().select({r:e.resources,s:e.snapshots}).from(e.resources).leftJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,c),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt))).limit(100)}let ac=a=>c.B`${e.snapshots.data} || ${JSON.stringify(a)}::jsonb`;async function ad(a,b,c){let f=N(a.s?{state:a.s.state,data:a.s.data}:null),g="unknown"===b.state,h=g?f?{lastGoodState:f}:{}:{...b.patch,lastGoodState:b.state},i=!g&&f!==b.state;return await (0,d.f)().insert(e.snapshots).values({resourceId:a.r.id,state:b.state,data:h,collectedAt:c,stateSince:c}).onConflictDoUpdate({target:e.snapshots.resourceId,set:{state:b.state,data:ac(h),...g?{}:{collectedAt:c},...i?{stateSince:c}:{}}}),g?null:function(a){let{prev:b,next:c}=a;if(null===b||"unknown"===b||"unknown"===c||b===c)return null;let d={resourceId:a.resourceId,type:"database",at:a.at};if("supabase_project"===a.kind)return"paused"===c?{...d,reason:"DatabasePaused",kind:"paused",message:"Supabase project paused",detail:"Status changed to INACTIVE"}:"ok"===c?{...d,reason:"DatabaseRestored",kind:"ok",message:"Supabase project active again",detail:"Status changed to ACTIVE_HEALTHY"}:"warn"===c?{...d,reason:"DatabaseUnhealthy",kind:"warn",message:"Supabase project unhealthy",detail:a.label}:"err"===c?{...d,reason:"DatabaseFailed",kind:"err",message:`Supabase project: ${a.label.toLowerCase()}`,detail:a.label}:null;if("neon_project"===a.kind)return"err"===c?{...d,reason:"NeonSuspended",kind:"err",message:"Neon compute suspended",detail:a.label}:"err"===b&&("ok"===c||"idle"===c)?{...d,reason:"NeonAvailable",kind:"ok",message:"Neon compute available again",detail:a.label}:null;let e=O[a.kind];if(e)return"err"===c?{...d,reason:"DatabaseFailed",kind:"err",message:`${e}: ${a.label.toLowerCase()}`,detail:a.label}:"off"===c?{...d,reason:"DatabaseMissing",kind:"off",message:`${e} missing`,detail:a.label}:"ok"===c&&("err"===b||"off"===b)?{...d,reason:"DatabaseRestored",kind:"ok",message:`${e} available again`,detail:a.label}:null;if("err"===c){let b="Daily quota used up"===a.label;return{...d,reason:b?"FirestoreQuotaUsedUp":"FirestoreUnreachable",kind:"err",message:b?"Firestore daily quota used up":"Firestore not reachable",detail:a.label}}return"off"===c?{...d,reason:"FirestoreMissing",kind:"off",message:"Firestore database missing",detail:a.label}:"ok"===c&&("err"===b||"off"===b)?{...d,reason:"FirestoreReachable",kind:"ok",message:"Firestore reachable again",detail:a.label}:null}({kind:a.r.kind,resourceId:a.r.id,prev:f,next:b.state,label:b.label,at:c})}async function ae(a,c){await (0,d.f)().update(e.snapshots).set({data:ac(c)}).where((0,b.u)(e.snapshots.resourceId,a.r.id))}let af=a=>(0,l.f)(a);async function ag(a,c,g,h,i){if("auth"===P(h,!0)){let a=(0,f.E)({ok:!1,kind:"auth",error:h.error});a&&await (0,d.f)().update(e.accounts).set({...a,updatedAt:i.now}).where((0,b.u)(e.accounts.id,c.id))}for(let a of g)await ad(a,{state:"unknown",label:"Unknown",patch:{}},i.now);i.errors.push(`${a}/${c.label}: ${h.error}`)}let ah=a=>a.toISOString();async function ai(a){return a.length?new Set((await (0,d.f)().select({app:e.links.fromResourceId,state:e.snapshots.state,data:e.snapshots.data}).from(e.links).innerJoin(e.resources,(0,b.u)(e.resources.id,e.links.toResourceId)).innerJoin(e.snapshots,(0,b.u)(e.snapshots.resourceId,e.resources.id)).where((0,b.b)((0,b.u)(e.links.kind,"uses_db"),(0,b.y)(e.links.fromResourceId,a),(0,b.u)(e.resources.monitored,!0),(0,b.M)(e.resources.goneAt)))).filter(a=>"paused"===a.state||"unknown"===a.state&&"paused"===a.data.lastGoodState).map(a=>a.app)):new Set}async function aj(a){for(let{acc:b,credential:c}of(await aa("supabase"))){if(Z(a),!c){a.errors.push(`supabase/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"supabase_project");if(!d.length)continue;let e=await (0,X.X)(c,Z(a));if(!e.ok){await ag("supabase",b,d,e,a);continue}let f=new Map(e.data.map(a=>[a.ref,a])),g=[];for(let b of d){let c=f.get(b.r.externalId);if(!c){g.push(await ad(b,{state:"off",label:"Not found",patch:{status:"REMOVED"}},a.now));continue}let d=(0,T.P)(c.status),e=N(b.s?{state:b.s.state,data:b.s.data}:null),h={status:c.status,region:c.region,pgVersion:c.pgVersion,orgSlug:c.orgSlug};"paused"===d.state&&"paused"!==e&&(h.pausedBeforeSeen=null===e),g.push(await ad(b,{state:d.state,label:d.label,patch:h},a.now))}await af(g);let h=new Map(d.map(a=>[a.r.externalId,a.r.id])),i=e.data.map(a=>({resourceId:h.get(a.ref)??null,accountId:b.id,status:a.status,orgSlug:a.orgSlug}));await (0,L.z)(a.now,i,a.deadline).catch(()=>{console.warn("auto-restore failed"),a.errors.push("auto-restore failed")})}}async function ak(a){for(let{acc:b,credential:c}of(await aa("supabase"))){if(Z(a),!c)continue;let d=await ab(b.id,"supabase_project");if(!d.length)continue;let e=new Map(d.map(a=>[a.r.id,(0,S.k)(S.B,a.s?.data)])),f=new Map;for(let d of new Set([...e.values()].map(a=>a.orgSlug).filter(a=>!!a))){let e=await (0,X.K)(c,d,Z(a));f.set(d,e.ok&&null!==e.data?"free"===e.data:null),e.ok||"scope"===e.kind||a.errors.push(`supabase/${b.label} plan: ${e.error}`)}let{skipped:g}=await $(a,d,async(b,d)=>{let g=e.get(b.r.id),h={freeOrg:g.orgSlug?f.get(g.orgSlug)??null:null};if((g.status??"").startsWith("ACTIVE_")){let[e,f]=await Promise.all([(0,X.F)(c,b.r.externalId,d),(0,X.Z)(c,b.r.externalId,d)]);e.ok?Object.assign(h,{health:e.data.map(({name:a,status:b})=>({name:a,status:b})),healthAt:ah(a.now),healthError:null}):"column"===P(e,!1)?h.healthError=e.error:a.errors.push(`supabase/${b.r.name} health: ${e.error}`),f.ok?Object.assign(h,{lastTrafficAt:(0,T.H)(f.data)?.toISOString()??null,trafficAt:ah(a.now),trafficError:null}):"column"===P(f,!1)?h.trafficError=f.error:a.errors.push(`supabase/${b.r.name} traffic: ${f.error}`)}await ae(b,h)});_(g)}}async function al(a){for(let{acc:b,credential:c}of(await aa("neon"))){if(Z(a),!c){a.errors.push(`neon/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"neon_project");if(!d.length)continue;let{out:e,skipped:f}=await $(a,d,(a,b)=>Promise.all([(0,W.Z)(c,a.r.externalId,b),(0,W.k)(c,a.r.externalId,b),(0,W.e)(c,a.r.externalId,b)])),g=e.flat().find(a=>void 0!==a&&!a.ok&&"auth"===a.kind);if(g){await ag("neon",b,d,g,a);continue}let h=[];for(let[b,c]of d.entries()){let d=e[b];if(!d)continue;let[f,g,i]=d;if(!f.ok||!g.ok||!i.ok){let b=[f,g,i].find(a=>!a.ok);"missing"===b.kind?h.push(await ad(c,{state:"off",label:"Not found",patch:{}},a.now)):(await ad(c,{state:"unknown",label:"Unknown",patch:{}},a.now),a.errors.push(`neon/${c.r.name}: ${b.error}`));continue}let j=(0,R.p)({endpoints:g.data,computeSeconds:f.data.computeSeconds});h.push(await ad(c,{state:j.state,label:j.label,patch:{region:f.data.region,pgVersion:f.data.pgVersion,computeSeconds:f.data.computeSeconds,transferBytes:f.data.transferBytes,activeSeconds:f.data.activeSeconds,periodStart:f.data.periodStart,periodEnd:f.data.periodEnd,endpoints:g.data,branches:i.data}},a.now))}await af(h),_(f)}}async function am(a){for(let{acc:b,credential:c}of(await aa("firebase"))){Z(a);let d=c?(0,V.p)(c):null;if(!d){a.errors.push(`firebase/${b.label}: credential can't be read`);continue}let e=await ab(b.id,"firestore");if(!e.length)continue;let f=await (0,V.X)(d,Z(a));if(!f.ok){await ag("firebase",b,e,f,a);continue}let{out:g,skipped:h}=await $(a,e,(a,b)=>(0,U.G)(f.data,a.r.externalId,b)),i=[];for(let[b,c]of e.entries()){let d=g[b];if(!d)continue;let e=(0,Q.g)(d);"unknown"!==e.state||d.ok||a.errors.push(`firebase/${c.r.name}: ${d.error}`);let f=d.ok?{latencyMs:d.data.latencyMs,pingError:null,pingReason:null,pingKind:null}:{pingError:d.error,pingReason:d.reason??null,pingKind:d.kind};i.push(await ad(c,{...e,patch:f},a.now))}await af(i),_(h)}}async function an(a){for(let{acc:b,credential:c}of(await aa("firebase"))){Z(a);let d=c?(0,V.p)(c):null;if(!d)continue;let e=(await ab(b.id,"firestore")).filter(a=>a.s?.state!=="off");if(!e.length)continue;let f=await (0,V.X)(d,Z(a));if(!f.ok){a.errors.push(`firebase/${b.label}: ${f.error}`);continue}let g=(0,Q.a)(a.now),{skipped:h}=await $(a,e,async(b,c)=>{let d=await (0,U.W)(f.data,b.r.externalId,g,a.now,c);d.ok?await ae(b,{...d.data,opsAt:ah(a.now),opsError:null}):"column"===P(d,!1)?await ae(b,{reads:null,writes:null,deletes:null,opsAt:ah(a.now),opsError:/requires billing/i.test(d.message??"")?"Not available on Spark: Firestore usage needs billing (Blaze plan)":"SERVICE_DISABLED"===d.reason?"Not readable: the Cloud Monitoring API is off in this project":"Not readable: the service account needs monitoring.viewer"}):a.errors.push(`firebase/${b.r.name} usage: ${d.error}`)});_(h)}}async function ao(a){try{return await a(),null}catch(a){return a instanceof Error?a:Error(String(a))}}var ap=a.i(639271),aq=a.i(514670),ar=a.i(354448),as=a.i(584897),at=a.i(697365);async function au(a){let b=[await ao(()=>aw(a)),await ao(()=>ay(a)),await ao(()=>az(a))].find(a=>null!==a);if(b)throw b}let av=a=>a.toISOString();async function aw(a){for(let{acc:b,credential:c}of(await aa("turso"))){if(Z(a),!c){a.errors.push(`turso/${b.label}: credential can't be read`);continue}let d=await ab(b.id,"turso_database");if(!d.length)continue;let e=await (0,ar.u)(c,Z(a));if(!e.ok){await ag("turso",b,d,e,a);continue}let f=new Set(d.map(a=>String(a.r.meta.org??""))),g=[];for(let h of e.data.filter(a=>f.has(a.slug))){let[e,f]=await Promise.all([(0,ar.X)(c,h.slug,Z(a)),(0,ar.d)(c,h.slug,Z(a))]),i=d.filter(a=>a.r.meta.org===h.slug);if(!e.ok){for(let b of i)await ad(b,{state:"unknown",label:"Unknown",patch:{}},a.now);a.errors.push(`turso/${b.label}: ${e.error}`);continue}let j=new Map(e.data.map(a=>[a.id,a]));for(let b of i)g.push(await ax(b,j.get(b.r.externalId),h,f,a))}let h=new Set(e.data.map(a=>a.slug));for(let b of d.filter(a=>!h.has(String(a.r.meta.org??""))))g.push(await ad(b,{state:"off",label:"Organization not visible to this token",patch:{}},a.now));await af(g)}}async function ax(a,b,c,d,e){if(!b)return ad(a,{state:"off",label:"Not found",patch:{}},e.now);let f=(0,ap.i)({blockReads:b.blockReads,blockWrites:b.blockWrites,orgBlockedReads:c.blockedReads,orgBlockedWrites:c.blockedWrites}),g={org:c.slug,group:b.group,primaryRegion:b.primaryRegion,plan:c.plan,blockReads:b.blockReads,blockWrites:b.blockWrites};if(d.ok){let a=d.data.byDb.get(b.id);Object.assign(g,{rowsRead:a?.rowsRead??null,rowsWritten:a?.rowsWritten??null,storageBytes:a?.storageBytes??null,orgRowsRead:d.data.org.rowsRead,orgRowsWritten:d.data.org.rowsWritten,orgStorageBytes:d.data.org.storageBytes,orgDatabases:d.data.org.databases,usageAt:av(e.now),usageError:null})}else"column"===P(d,!1)?g.usageError=d.error:e.errors.push(`turso/${a.r.name} usage: ${d.error}`);return ad(a,{...f,patch:g},e.now)}async function ay(a){for(let{acc:b,credential:c}of(await aa("upstash"))){Z(a);let d=c?(0,as.L)(c):null;if(!d){a.errors.push(`upstash/${b.label}: credential can't be read`);continue}let e=await ab(b.id,"upstash_redis");if(!e.length)continue;let f=await (0,as.M)(d,Z(a));if(!f.ok){await ag("upstash",b,e,f,a);continue}let g=new Map(f.data.map(a=>[a.id,a])),{out:h,skipped:i}=await $(a,e,(a,b)=>g.has(a.r.externalId)?(0,as.Z)(d,a.r.externalId,b):Promise.resolve(null)),j=[];for(let[b,c]of e.entries()){let d=g.get(c.r.externalId);if(!d){j.push(await ad(c,{state:"off",label:"Not found",patch:{}},a.now));continue}let e=(0,ap.t)(d.state),f={region:d.region,status:d.state,type:d.type},i=h[b];i?.ok?Object.assign(f,{...i.data,statsAt:av(a.now),statsError:null}):i&&"column"===P(i,!1)?f.statsError=i.error:i&&a.errors.push(`upstash/${c.r.name} stats: ${i.error}`),j.push(await ad(c,{...e,patch:f},a.now))}await af(j),_(i)}}async function az(a){let b={};for(let{acc:c,credential:d}of(await aa("cloudflare"))){if(Z(a),!d)continue;let e=await aB(c.id,d,a);if(!e.length){b[c.id]={d1:"error",analytics:null,at:av(a.now),note:"No Cloudflare account found for this token"};continue}let f="ok",g=null;for(let b of e){let e=await (0,aq.L)(d,b,Z(a));if(!e.ok){"error"==(f="scope"===e.kind||"auth"===e.kind?"missing":"error")&&a.errors.push(`d1/${c.label}: ${e.error}`);continue}await aC(c.id,b,e.data,a.now);let h=(await ab(c.id,"d1_database")).filter(a=>a.r.meta.accountId===b);if(!h.length)continue;let i=await (0,aq.t)(d,b,(0,aq.Y)(a.now),Z(a));g=i.ok?g??"ok":"scope"===i.kind?"missing":g??"error",i.ok||"scope"===i.kind||a.errors.push(`d1/${c.label} analytics: ${i.error}`);let{out:j,skipped:k}=await $(a,h,(a,c)=>(0,aq.m)(d,b,a.r.externalId,c)),l=new Map((i.ok?i.data:[]).map(a=>[a.databaseId,a])),m=j.map(a=>a?.ok?a.data.sizeBytes??0:0),n={accountRowsRead:i.ok?i.data.reduce((a,b)=>a+b.rowsRead,0):null,accountRowsWritten:i.ok?i.data.reduce((a,b)=>a+b.rowsWritten,0):null,accountSizeBytes:j.every(a=>a?.ok)?m.reduce((a,b)=>a+b,0):null,accountDatabases:e.data.length},o=[];for(let[b,c]of h.entries()){let d=j[b];void 0!==d&&o.push(await aA(c,d,l.get(c.r.externalId)??null,i.ok,i.ok?null:i.error,n,a))}await af(o),_(k)}b[c.id]={d1:f,analytics:g,at:av(a.now),note:null}}await (0,d.f)().insert(e.settings).values({key:at.F,value:b}).onConflictDoUpdate({target:e.settings.key,set:{value:b,updatedAt:a.now}})}async function aA(a,b,c,d,e,f,g){let h={accountId:a.r.meta.accountId??null,createdAt:a.r.meta.createdAt??null,accountDatabases:f.accountDatabases};return(b.ok?Object.assign(h,{sizeBytes:b.data.sizeBytes,numTables:b.data.numTables,readReplication:b.data.readReplication,detailsAt:av(g.now),detailsError:null}):"scope"===b.kind?h.detailsError=b.error:g.errors.push(`d1/${a.r.name}: ${b.error}`),d?Object.assign(h,{rowsRead:c?.rowsRead??0,rowsWritten:c?.rowsWritten??0,readQueries:c?.readQueries??0,writeQueries:c?.writeQueries??0,accountRowsRead:f.accountRowsRead,accountRowsWritten:f.accountRowsWritten,usageDay:(0,aq.Y)(g.now),usageAt:av(g.now),usageError:null}):h.usageError=e,null!==f.accountSizeBytes&&(h.accountSizeBytes=f.accountSizeBytes),b.ok||"transient"!==b.kind)?ad(a,{...(0,ap.c)(d?f:{accountRowsRead:null,accountRowsWritten:null}),patch:h},g.now):ad(a,{state:"unknown",label:"Unknown",patch:{}},g.now)}async function aB(a,c,f){let g=new Set,h=await (0,aq.N)(c,Z(f));if(h.ok)for(let a of h.data)g.add(a.id);for(let c of(await (0,d.f)().select({meta:e.resources.meta}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,"zone"),(0,b.M)(e.resources.goneAt))).limit(200)))"string"==typeof c.meta.accountId&&/^[0-9a-f]{32}$/i.test(c.meta.accountId)&&g.add(c.meta.accountId);return[...g].slice(0,5)}async function aC(a,c,f,g){let h=(await (0,d.f)().select({id:e.resources.id,externalId:e.resources.externalId,meta:e.resources.meta,goneAt:e.resources.goneAt}).from(e.resources).where((0,b.b)((0,b.u)(e.resources.accountId,a),(0,b.u)(e.resources.kind,"d1_database")))).filter(a=>a.meta.accountId===c),i=new Map(h.map(a=>[a.externalId,a])),j=new Set(f.map(a=>a.uuid));await (0,d.f)().transaction(async d=>{for(let h of f){let f={accountId:c,createdAt:h.createdAt},j=i.get(h.uuid);j?await d.update(e.resources).set({name:h.name,meta:f,lastSeenAt:g,goneAt:null,updatedAt:g}).where((0,b.u)(e.resources.id,j.id)):await d.insert(e.resources).values({accountId:a,kind:"d1_database",externalId:h.uuid,name:h.name,meta:f,monitored:!0,lastSeenAt:g}).onConflictDoNothing({target:[e.resources.accountId,e.resources.kind,e.resources.externalId]})}let k=h.filter(a=>!j.has(a.externalId)&&!a.goneAt).map(a=>a.id);k.length&&await d.update(e.resources).set({goneAt:g,updatedAt:g}).where((0,b.y)(e.resources.id,k))})}var aD=a.i(666680),aE=a.i(263251),aF=a.i(634418);async function aG(a=new Date){let b=(0,aD.randomUUID)(),e=new Date(a.getTime()+aF.d).toISOString(),f=await (0,d.f)().execute(c.B`
2
2
  insert into ops.settings (key, value) values ('collector.lease', ${JSON.stringify({until:e,owner:b})}::jsonb)
3
3
  on conflict (key) do update set value = excluded.value, updated_at = now()
4
4
  where (ops.settings.value->>'until')::timestamptz < ${a.toISOString()}::timestamptz
@@ -1,4 +1,4 @@
1
- module.exports=[292321,530174,658739,a=>{"use strict";var b=a.i(93321),c=a.i(530385),d=a.i(258261),e=a.i(351674),f=a.i(548734),g=a.i(837137),h=a.i(33135),i=a.i(358179),j=a.i(601219),k=a.i(492665),l=a.i(609007),m=a.i(666680),n=a.i(26972),o=a.i(689963),p=a.i(191179),q=a.i(83931),r=a.i(427221),s=a.i(954757);a.s(["z",0,s],530174);var s=s,t=a.i(811365);let u=["debug","info","warning","error","fatal","trace"],v=n.z.object({rows:o.z.array(p.z.unknown()).catch([]),hasMoreRows:q.z.boolean().catch(!1)}),w=n.z.object({requestId:r.z.string().min(1),timestamp:r.z.string().transform((a,b)=>{let c=Date.parse(a);return Number.isNaN(c)?(b.addIssue({code:"custom",message:"bad timestamp"}),s.NEVER):new Date(c)}),deploymentId:r.z.string().nullish().catch(null),requestMethod:r.z.string().nullish().catch(null),requestPath:r.z.string().nullish().catch(null),statusCode:t.z.number().nullish().catch(null),logs:o.z.array(p.z.unknown()).nullish().catch(null),events:o.z.array(p.z.unknown()).nullish().catch(null)}),x=n.z.object({level:r.z.string().nullish().catch(null),message:r.z.string().nullish().catch(null)}),y=n.z.object({source:r.z.string().nullish().catch(null)}),z=(a,b)=>(0,m.createHash)("sha1").update(`${a}
2
- ${b}`).digest("hex").slice(0,8),A=(a,b,c={})=>({ok:!1,kind:a,error:b,...c});async function B(a,b,c,d){let e=(d.now??new Date).getTime(),f=Math.max(d.since.getTime(),e-864e5),g=d.until.getTime();if(f>=g)return{ok:!0,lines:[],more:!1};let i=d.maxRows??300,j=d.levels?new Set(d.levels):null,k=a=>!j||j.has(a),l=d.levels?[...new Set(d.levels.map(a=>"fatal"===a?"error":a))]:[],m=d.fetch??fetch,n=new AbortController,o=setTimeout(()=>n.abort(new DOMException("window","TimeoutError")),d.timeoutMs??8e3),p=d.signal?AbortSignal.any([n.signal,d.signal]):n.signal,q=(0,h.X)(p),r=()=>n.signal.aborted&&!d.signal?.aborted?A("transient","Vercel's log history didn't answer in time."):A("transient","Reading Vercel's log history was cancelled."),s=[],t=!1;try{for(let e=0;e<3;e++){let h,j=new URLSearchParams({projectId:c,ownerId:b,page:String(e),startDate:String(f),endDate:String(g)});d.deploymentId&&j.set("deploymentId",d.deploymentId),d.environment&&j.set("environment",d.environment),l.length&&j.set("level",l.join(","));let n=null;try{let b=await Promise.race([m(`https://vercel.com/api/logs/request-logs?${j}`,{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"},signal:p,cache:"no-store"}),q]);if(401===b.status||403===b.status)n=A("auth",`Vercel rejected this credential (${b.status}).`,{status:b.status});else if(429===b.status){let a=Number(b.headers.get("Retry-After"));n=A("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(a)&&a>0?a:60})}else if(400===b.status)n=A("transient","Vercel's log history didn't answer (400); the range may be past retention.",{status:400});else if(b.ok)try{h=await Promise.race([b.json(),q])}catch(a){if(p.aborted)throw a;n=A("format","Vercel's log history answered in a format the console doesn't recognise.")}else n=A("transient",`Vercel's log history returned an error (${b.status}).`,{status:b.status});n&&await b.body?.cancel().catch(()=>void 0)}catch{n=p.aborted?r():A("transient","Couldn't reach Vercel's log history.")}if(!n){let a=v.safeParse(h),b=a.success&&h&&"object"==typeof h?Object.keys(h):[];if(!a.success||b.includes("rows")||b.includes("hasMoreRows"))if(a.success){for(let b of a.data.rows)s.push(...function(a,b,c=!1){let d=w.safeParse(a);if(!d.success)return[];let e=d.data,f={at:e.timestamp,requestMethod:e.requestMethod??null,requestPath:e.requestPath??null,statusCode:e.statusCode??null,deploymentId:e.deploymentId??null,source:(e.events??[]).map(a=>y.safeParse(a)).find(a=>a.success&&a.data.source)?.data?.source??null},g=[],h=new Map;for(let a of e.logs??[]){let c=x.safeParse(a);if(!c.success||!c.data.message)continue;let d=function(a){let b=(a??"").toLowerCase();return"warn"===b?"warning":u.includes(b)?b:"info"}(c.data.level),i=z(d,c.data.message),j=h.get(i)??0;h.set(i,j+1),b(d)&&g.push({rowId:`${e.requestId}:${i}${j?`#${j}`:""}`,level:d,message:c.data.message,...f})}if(null!=e.statusCode&&e.statusCode>=500&&b("error")&&!g.some(a=>"error"===a.level||"fatal"===a.level)&&g.push({rowId:`${e.requestId}:status`,level:"error",message:`${e.requestMethod??"GET"} ${e.requestPath??"/"} → ${e.statusCode}`,...f}),c&&0===g.length){let a=e.statusCode??0,c=a>=500?"error":a>=400?"warning":"info";b(c)&&g.push({rowId:`${e.requestId}:request`,level:c,message:`${e.requestMethod??"GET"} ${e.requestPath??"/"}${a>0?` → ${a}`:""}`,...f})}return g}(b,k,d.requests));if(!(t=a.data.hasMoreRows)||s.length>=i)break}else n=A("format","Vercel's log history answered in a format the console doesn't recognise.");else n=A("transient","Vercel's log format changed: the answer has neither rows nor hasMoreRows.")}if(n){if(0===e)return n;t=!0;break}}}finally{clearTimeout(o),n.abort()}return s.sort((a,b)=>a.at.getTime()-b.at.getTime()),s.length>i&&(s.splice(0,s.length-i),t=!0),{ok:!0,lines:s,more:t}}a.s(["f",0,B],658739);var C=a.i(968715);let D=["warning","error","fatal"],E="logs_read_cursor";async function F(a){let[c]=await (0,f.f)().select().from(g.accounts).where((0,b.b)((0,b.u)(g.accounts.provider,"vercel"),(0,b.u)(g.accounts.status,"ok"))).limit(1),d=c?(0,i.V)({ciphertext:c.credentialCiphertext,iv:c.credentialIv},(0,k.f)().OPS_ENCRYPTION_KEY):null;return c&&d?(await (0,f.f)().select({appId:g.resources.id,appName:g.resources.name,projectId:g.resources.externalId,meta:g.resources.meta,deploymentId:g.deployments.externalId}).from(g.deployments).innerJoin(g.resources,(0,b.u)(g.resources.id,g.deployments.resourceId)).where((0,b.b)((0,b.u)(g.deployments.isCurrent,!0),(0,b.u)(g.resources.accountId,c.id),(0,b.u)(g.resources.monitored,!0),(0,b.M)(g.resources.goneAt),...a?[(0,b.u)(g.resources.id,a)]:[]))).map(a=>({appId:a.appId,appName:a.appName,projectId:a.projectId,deploymentId:a.deploymentId,teamId:String(a.meta.teamId??""),token:d})):[]}let G=(a,b)=>({resourceId:a.appId,deploymentId:b.deploymentId??a.deploymentId,rowId:b.rowId,at:b.at,level:b.level,message:(0,l.l)((0,l.h)(b.message),2e3),requestMethod:b.requestMethod,requestPath:(0,l.n)(b.requestPath?(0,l.h)(b.requestPath):null),statusCode:b.statusCode,source:b.source});async function H(a,c,i){let k,[l]=await (0,f.f)().select().from(g.settings).where((0,b.u)(g.settings.key,"logs.disabled")).limit(1);if(l?.value===!0)return;let m=await F(null);if(!m.length)return;let n=(0,C.q)((0,C.m)(a)),o=new Map((await (0,f.f)().select({id:g.storedLogs.resourceId,n:e.B`count(*)::int`}).from(g.storedLogs).where((0,b.b)((0,b.y)(g.storedLogs.resourceId,m.map(a=>a.appId)),(0,b.B)(g.storedLogs.at,n))).groupBy(g.storedLogs.resourceId)).map(a=>[a.id,a.n])),p=new Map((await (0,f.f)().select({id:g.storedLogs.resourceId,at:(0,d.y)(g.storedLogs.at)}).from(g.storedLogs).where((0,b.y)(g.storedLogs.resourceId,m.map(a=>a.appId))).groupBy(g.storedLogs.resourceId)).map(a=>[a.id,a.at])),[q]=await (0,f.f)().select().from(g.settings).where((0,b.u)(g.settings.key,E)).limit(1),r=(k=q?.value)&&"object"==typeof k&&!Array.isArray(k)?Object.fromEntries(Object.entries(k).filter(a=>"string"==typeof a[1]&&!Number.isNaN(Date.parse(a[1])))):{},s=a.getTime()-864e5,t=await (0,h.P)(m,3,b=>{if(Date.now()+8500>c)return Promise.resolve(null);let d=[p.get(b.appId)?.getTime(),r[b.appId]?Date.parse(r[b.appId]):void 0].filter(a=>void 0!==a),e=new Date(Math.max(d.length?Math.max(...d)-3e5:s,s));return B(b.token,b.teamId,b.projectId,{since:e,until:a,now:a,levels:D,environment:"production",maxRows:300})}),u=m.map((a,b)=>{let c=t[b];return c?c.ok?(c.more&&i.push(`logs/${a.appName}: more than 300 log lines since the last read; the oldest were skipped`),c.lines.filter(a=>D.includes(a.level))):(i.push(`logs/${a.appName}: ${c.error}`),[]):[]}),v=u.flat().map(a=>a.rowId),w=new Set(v.length?(await (0,f.f)().select({rowId:g.storedLogs.rowId}).from(g.storedLogs).where((0,b.y)(g.storedLogs.rowId,v))).map(a=>a.rowId):[]),x=[];for(let[a,b]of m.entries()){let c=u[a].filter(a=>!w.has(a.rowId));if(!c.length)continue;let d=o.get(b.appId)??0,e=Math.max(0,1e3-d),h=(e>=c.length?c:c.slice(c.length-e)).map(a=>G(b,a));h.length&&await (0,f.f)().insert(g.storedLogs).values(h).onConflictDoNothing({target:g.storedLogs.rowId}),d+c.length>=1e3&&x.push(b.appId)}let y=m.filter((a,b)=>t[b]?.ok);if(y.length){let b={};for(let a of m)r[a.appId]&&(b[a.appId]=r[a.appId]);for(let c of y)b[c.appId]=a.toISOString();await (0,f.f)().insert(g.settings).values({key:E,value:b}).onConflictDoUpdate({target:g.settings.key,set:{value:b,updatedAt:new Date}})}await (0,j.f)(x.map(a=>({resourceId:a,type:"system",kind:"warn",message:"Stored-log limit reached",detail:"More than 1000 warnings and errors today; the rest stay in Vercel only for its short log history (about a day on Hobby).",reason:"LogCapReached"})))}async function I(a,d={}){let e=new Date(a.getTime()-(d.sinceMs??6048e5));return(await (0,f.f)().select({l:g.storedLogs,app:g.resources.name}).from(g.storedLogs).innerJoin(g.resources,(0,b.u)(g.resources.id,g.storedLogs.resourceId)).where((0,b.b)((0,b.B)(g.storedLogs.at,e),...d.appId?[(0,b.u)(g.storedLogs.resourceId,d.appId)]:[])).orderBy((0,c.A)(g.storedLogs.at)).limit(500)).map(({l:a,app:b})=>({id:a.rowId,at:a.at,level:a.level,app:b,method:a.requestMethod,path:a.requestPath,status:a.statusCode,message:a.message})).reverse()}async function J(a,b){let c=(await F(b)).slice(0,6),d=[],e=await (0,h.P)(c,6,b=>B(b.token,b.teamId,b.projectId,{since:new Date(a.getTime()-36e5),until:a,now:a,environment:"production",maxRows:300,requests:!0})),f=[];for(let[a,b]of c.entries()){let c=e[a];if(!c.ok){d.push(`${b.appName}: ${c.error}`);continue}for(let a of c.lines){let c=G(b,a);f.push({id:a.rowId,at:a.at,level:a.level,app:b.appName,method:c.requestMethod,path:c.requestPath,status:a.statusCode,message:c.message})}}return{lines:[...new Map([...await I(a,{appId:b??void 0,sinceMs:36e5}),...f].map(a=>[a.id,a])).values()].sort((a,b)=>a.at.getTime()-b.at.getTime()).slice(-500),readAt:new Date,problems:d}}a.s(["M",0,I,"$",0,J,"g",0,F,"_",0,H],292321)}];
1
+ module.exports=[785459,530174,658739,a=>{"use strict";var b=a.i(93321),c=a.i(530385),d=a.i(258261),e=a.i(351674),f=a.i(548734),g=a.i(837137),h=a.i(33135),i=a.i(358179),j=a.i(601219),k=a.i(492665),l=a.i(609007),m=a.i(666680),n=a.i(26972),o=a.i(689963),p=a.i(191179),q=a.i(83931),r=a.i(427221),s=a.i(954757);a.s(["z",0,s],530174);var s=s,t=a.i(811365);let u=["debug","info","warning","error","fatal","trace"],v=n.z.object({rows:o.z.array(p.z.unknown()).catch([]),hasMoreRows:q.z.boolean().catch(!1)}),w=n.z.object({requestId:r.z.string().min(1),timestamp:r.z.string().transform((a,b)=>{let c=Date.parse(a);return Number.isNaN(c)?(b.addIssue({code:"custom",message:"bad timestamp"}),s.NEVER):new Date(c)}),deploymentId:r.z.string().nullish().catch(null),requestMethod:r.z.string().nullish().catch(null),requestPath:r.z.string().nullish().catch(null),statusCode:t.z.number().nullish().catch(null),logs:o.z.array(p.z.unknown()).nullish().catch(null),events:o.z.array(p.z.unknown()).nullish().catch(null)}),x=n.z.object({level:r.z.string().nullish().catch(null),message:r.z.string().nullish().catch(null)}),y=n.z.object({source:r.z.string().nullish().catch(null)}),z=(a,b)=>(0,m.createHash)("sha1").update(`${a}
2
+ ${b}`).digest("hex").slice(0,8),A=(a,b,c={})=>({ok:!1,kind:a,error:b,...c});async function B(a,b,c,d){let e=(d.now??new Date).getTime(),f=Math.max(d.since.getTime(),e-864e5),g=d.until.getTime();if(f>=g)return{ok:!0,lines:[],more:!1};let i=d.maxRows??300,j=d.levels?new Set(d.levels):null,k=a=>!j||j.has(a),l=d.levels?[...new Set(d.levels.map(a=>"fatal"===a?"error":a))]:[],m=d.fetch??fetch,n=new AbortController,o=setTimeout(()=>n.abort(new DOMException("window","TimeoutError")),d.timeoutMs??8e3),p=d.signal?AbortSignal.any([n.signal,d.signal]):n.signal,q=(0,h.X)(p),r=()=>n.signal.aborted&&!d.signal?.aborted?A("transient","Vercel's log history didn't answer in time."):A("transient","Reading Vercel's log history was cancelled."),s=[],t=!1;try{for(let e=0;e<3;e++){let h,j=new URLSearchParams({projectId:c,ownerId:b,page:String(e),startDate:String(f),endDate:String(g)});d.deploymentId&&j.set("deploymentId",d.deploymentId),d.environment&&j.set("environment",d.environment),l.length&&j.set("level",l.join(","));let n=null;try{let b=await Promise.race([m(`https://vercel.com/api/logs/request-logs?${j}`,{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"},signal:p,cache:"no-store"}),q]);if(401===b.status||403===b.status)n=A("auth",`Vercel rejected this credential (${b.status}).`,{status:b.status});else if(429===b.status){let a=Number(b.headers.get("Retry-After"));n=A("transient","Vercel says there were too many requests.",{status:429,retryAfterS:Number.isFinite(a)&&a>0?a:60})}else if(400===b.status)n=A("transient","Vercel's log history didn't answer (400); the range may be past retention.",{status:400});else if(b.ok)try{h=await Promise.race([b.json(),q])}catch(a){if(p.aborted)throw a;n=A("format","Vercel's log history answered in a format the console doesn't recognise.")}else n=A("transient",`Vercel's log history returned an error (${b.status}).`,{status:b.status});n&&await b.body?.cancel().catch(()=>void 0)}catch{n=p.aborted?r():A("transient","Couldn't reach Vercel's log history.")}if(!n){let a=v.safeParse(h),b=a.success&&h&&"object"==typeof h?Object.keys(h):[];if(!a.success||b.includes("rows")||b.includes("hasMoreRows"))if(a.success){for(let b of a.data.rows)s.push(...function(a,b,c=!1){let d=w.safeParse(a);if(!d.success)return[];let e=d.data,f={at:e.timestamp,requestMethod:e.requestMethod??null,requestPath:e.requestPath??null,statusCode:e.statusCode??null,deploymentId:e.deploymentId??null,source:(e.events??[]).map(a=>y.safeParse(a)).find(a=>a.success&&a.data.source)?.data?.source??null},g=[],h=new Map;for(let a of e.logs??[]){let c=x.safeParse(a);if(!c.success||!c.data.message)continue;let d=function(a){let b=(a??"").toLowerCase();return"warn"===b?"warning":u.includes(b)?b:"info"}(c.data.level),i=z(d,c.data.message),j=h.get(i)??0;h.set(i,j+1),b(d)&&g.push({rowId:`${e.requestId}:${i}${j?`#${j}`:""}`,level:d,message:c.data.message,...f})}if(null!=e.statusCode&&e.statusCode>=500&&b("error")&&!g.some(a=>"error"===a.level||"fatal"===a.level)&&g.push({rowId:`${e.requestId}:status`,level:"error",message:`${e.requestMethod??"GET"} ${e.requestPath??"/"} → ${e.statusCode}`,...f}),c&&0===g.length){let a=e.statusCode??0,c=a>=500?"error":a>=400?"warning":"info";b(c)&&g.push({rowId:`${e.requestId}:request`,level:c,message:`${e.requestMethod??"GET"} ${e.requestPath??"/"}${a>0?` → ${a}`:""}`,...f})}return g}(b,k,d.requests));if(!(t=a.data.hasMoreRows)||s.length>=i)break}else n=A("format","Vercel's log history answered in a format the console doesn't recognise.");else n=A("transient","Vercel's log format changed: the answer has neither rows nor hasMoreRows.")}if(n){if(0===e)return n;t=!0;break}}}finally{clearTimeout(o),n.abort()}return s.sort((a,b)=>a.at.getTime()-b.at.getTime()),s.length>i&&(s.splice(0,s.length-i),t=!0),{ok:!0,lines:s,more:t}}a.s(["f",0,B],658739);var C=a.i(245710);let D=["warning","error","fatal"],E="logs_read_cursor";async function F(a){let[c]=await (0,f.f)().select().from(g.accounts).where((0,b.b)((0,b.u)(g.accounts.provider,"vercel"),(0,b.u)(g.accounts.status,"ok"))).limit(1),d=c?(0,i.V)({ciphertext:c.credentialCiphertext,iv:c.credentialIv},(0,k.f)().OPS_ENCRYPTION_KEY):null;return c&&d?(await (0,f.f)().select({appId:g.resources.id,appName:g.resources.name,projectId:g.resources.externalId,meta:g.resources.meta,deploymentId:g.deployments.externalId}).from(g.deployments).innerJoin(g.resources,(0,b.u)(g.resources.id,g.deployments.resourceId)).where((0,b.b)((0,b.u)(g.deployments.isCurrent,!0),(0,b.u)(g.resources.accountId,c.id),(0,b.u)(g.resources.monitored,!0),(0,b.M)(g.resources.goneAt),...a?[(0,b.u)(g.resources.id,a)]:[]))).map(a=>({appId:a.appId,appName:a.appName,projectId:a.projectId,deploymentId:a.deploymentId,teamId:String(a.meta.teamId??""),token:d})):[]}let G=(a,b)=>({resourceId:a.appId,deploymentId:b.deploymentId??a.deploymentId,rowId:b.rowId,at:b.at,level:b.level,message:(0,l.l)((0,l.h)(b.message),2e3),requestMethod:b.requestMethod,requestPath:(0,l.n)(b.requestPath?(0,l.h)(b.requestPath):null),statusCode:b.statusCode,source:b.source});async function H(a,c,i){let k,[l]=await (0,f.f)().select().from(g.settings).where((0,b.u)(g.settings.key,"logs.disabled")).limit(1);if(l?.value===!0)return;let m=await F(null);if(!m.length)return;let n=(0,C.y)((0,C.x)(a)),o=new Map((await (0,f.f)().select({id:g.storedLogs.resourceId,n:e.B`count(*)::int`}).from(g.storedLogs).where((0,b.b)((0,b.y)(g.storedLogs.resourceId,m.map(a=>a.appId)),(0,b.B)(g.storedLogs.at,n))).groupBy(g.storedLogs.resourceId)).map(a=>[a.id,a.n])),p=new Map((await (0,f.f)().select({id:g.storedLogs.resourceId,at:(0,d.y)(g.storedLogs.at)}).from(g.storedLogs).where((0,b.y)(g.storedLogs.resourceId,m.map(a=>a.appId))).groupBy(g.storedLogs.resourceId)).map(a=>[a.id,a.at])),[q]=await (0,f.f)().select().from(g.settings).where((0,b.u)(g.settings.key,E)).limit(1),r=(k=q?.value)&&"object"==typeof k&&!Array.isArray(k)?Object.fromEntries(Object.entries(k).filter(a=>"string"==typeof a[1]&&!Number.isNaN(Date.parse(a[1])))):{},s=a.getTime()-864e5,t=await (0,h.P)(m,3,b=>{if(Date.now()+8500>c)return Promise.resolve(null);let d=[p.get(b.appId)?.getTime(),r[b.appId]?Date.parse(r[b.appId]):void 0].filter(a=>void 0!==a),e=new Date(Math.max(d.length?Math.max(...d)-3e5:s,s));return B(b.token,b.teamId,b.projectId,{since:e,until:a,now:a,levels:D,environment:"production",maxRows:300})}),u=m.map((a,b)=>{let c=t[b];return c?c.ok?(c.more&&i.push(`logs/${a.appName}: more than 300 log lines since the last read; the oldest were skipped`),c.lines.filter(a=>D.includes(a.level))):(i.push(`logs/${a.appName}: ${c.error}`),[]):[]}),v=u.flat().map(a=>a.rowId),w=new Set(v.length?(await (0,f.f)().select({rowId:g.storedLogs.rowId}).from(g.storedLogs).where((0,b.y)(g.storedLogs.rowId,v))).map(a=>a.rowId):[]),x=[];for(let[a,b]of m.entries()){let c=u[a].filter(a=>!w.has(a.rowId));if(!c.length)continue;let d=o.get(b.appId)??0,e=Math.max(0,1e3-d),h=(e>=c.length?c:c.slice(c.length-e)).map(a=>G(b,a));h.length&&await (0,f.f)().insert(g.storedLogs).values(h).onConflictDoNothing({target:g.storedLogs.rowId}),d+c.length>=1e3&&x.push(b.appId)}let y=m.filter((a,b)=>t[b]?.ok);if(y.length){let b={};for(let a of m)r[a.appId]&&(b[a.appId]=r[a.appId]);for(let c of y)b[c.appId]=a.toISOString();await (0,f.f)().insert(g.settings).values({key:E,value:b}).onConflictDoUpdate({target:g.settings.key,set:{value:b,updatedAt:new Date}})}await (0,j.f)(x.map(a=>({resourceId:a,type:"system",kind:"warn",message:"Stored-log limit reached",detail:"More than 1000 warnings and errors today; the rest stay in Vercel only for its short log history (about a day on Hobby).",reason:"LogCapReached"})))}async function I(a,d={}){let e=new Date(a.getTime()-(d.sinceMs??6048e5));return(await (0,f.f)().select({l:g.storedLogs,app:g.resources.name}).from(g.storedLogs).innerJoin(g.resources,(0,b.u)(g.resources.id,g.storedLogs.resourceId)).where((0,b.b)((0,b.B)(g.storedLogs.at,e),...d.appId?[(0,b.u)(g.storedLogs.resourceId,d.appId)]:[])).orderBy((0,c.A)(g.storedLogs.at)).limit(500)).map(({l:a,app:b})=>({id:a.rowId,at:a.at,level:a.level,app:b,method:a.requestMethod,path:a.requestPath,status:a.statusCode,message:a.message})).reverse()}async function J(a,b){let c=(await F(b)).slice(0,6),d=[],e=await (0,h.P)(c,6,b=>B(b.token,b.teamId,b.projectId,{since:new Date(a.getTime()-36e5),until:a,now:a,environment:"production",maxRows:300,requests:!0})),f=[];for(let[a,b]of c.entries()){let c=e[a];if(!c.ok){d.push(`${b.appName}: ${c.error}`);continue}for(let a of c.lines){let c=G(b,a);f.push({id:a.rowId,at:a.at,level:a.level,app:b.appName,method:c.requestMethod,path:c.requestPath,status:a.statusCode,message:c.message})}}return{lines:[...new Map([...await I(a,{appId:b??void 0,sinceMs:36e5}),...f].map(a=>[a.id,a])).values()].sort((a,b)=>a.at.getTime()-b.at.getTime()).slice(-500),readAt:new Date,problems:d}}a.s(["M",0,I,"$",0,J,"g",0,F,"_",0,H],785459)}];
3
3
 
4
4
  //# sourceMappingURL=src_lib_data_logs-db_ts_1ddw07do12mmk._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[579739,a=>{"use strict";let b,c=()=>b??=Promise.all([a.A(372153),a.A(106706)]);async function d(a){let[{currentDemoVisitor:b},{withDemoDb:d}]=await c(),e=await b();return d(e.seed,a,e.email)}async function e(){let[{readDemoVisitor:a},{withDemoDb:b}]=await c(),d=await a();d&&await b(d.seed,async()=>void 0,d.email)}a.s(["demoPglite",0,{query:(a,b,c)=>d(d=>d.query(a,b,c)),exec:(a,b)=>d(c=>c.exec(a,b)),transaction:a=>d(b=>b.transaction(a))},"openDemoDb",0,e])},106706,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__11-ssp_43878t._.js","server/chunks/ssr/src_lib_demo_1w8p39upm6ea2._.js","server/chunks/ssr/src_db_pglite_ts_0r1r9wqxilnam._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js","server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js"].map(b=>a.l(b))).then(()=>b(601533)))}];
1
+ module.exports=[579739,a=>{"use strict";let b,c=()=>b??=Promise.all([a.A(372153),a.A(106706)]);async function d(a){let[{currentDemoVisitor:b},{withDemoDb:d}]=await c(),e=await b();return d(e.seed,a,e.email)}async function e(){let[{readDemoVisitor:a},{withDemoDb:b}]=await c(),d=await a();d&&await b(d.seed,async()=>void 0,d.email)}a.s(["demoPglite",0,{query:(a,b,c)=>d(d=>d.query(a,b,c)),exec:(a,b)=>d(c=>c.exec(a,b)),transaction:a=>d(b=>b.transaction(a))},"openDemoDb",0,e])},106706,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__18b1wk6-2gq4x._.js","server/chunks/ssr/src_lib_demo_1w8p39upm6ea2._.js","server/chunks/ssr/src_db_pglite_ts_0r1r9wqxilnam._.js","server/chunks/ssr/node_modules_0vppy-p56c35f._.js","server/chunks/ssr/node_modules_@electric-sql_pglite_dist_0j1fzsq3ed7ph._.js","server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js"].map(b=>a.l(b))).then(()=>b(601533)))}];
2
2
 
3
- //# sourceMappingURL=src_lib_demo_20hj85e_64pp1._.js.map
3
+ //# sourceMappingURL=src_lib_demo_20zjotuzm1lm8._.js.map