watch-tail 0.6.2 → 0.8.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 (275) hide show
  1. package/README.md +37 -15
  2. package/build/client/_app/immutable/assets/0.zDk3x0WE.css +2 -0
  3. package/build/client/_app/immutable/assets/0.zDk3x0WE.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.zDk3x0WE.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/{EventScatter.DA5sZ1c0.css → EventScatter.CCk6ByS3.css} +1 -1
  6. package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.br +0 -0
  7. package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{8x_7TBuS.js → 9z7cmAWt.js} +1 -1
  9. package/build/client/_app/immutable/chunks/9z7cmAWt.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/9z7cmAWt.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{D1Hr4tKw.js → B26Z2DQX.js} +1 -1
  12. package/build/client/_app/immutable/chunks/B26Z2DQX.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/B26Z2DQX.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{KA1QvXmu.js → B5kJ4QGS.js} +1 -1
  15. package/build/client/_app/immutable/chunks/B5kJ4QGS.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/B5kJ4QGS.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{sf5kQ3yV.js → BF1MBUT7.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BF1MBUT7.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/BF1MBUT7.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{F4LqKrLs.js → BJEa1AAY.js} +5 -5
  21. package/build/client/_app/immutable/chunks/BJEa1AAY.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/BJEa1AAY.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{w7c5E2ms.js → BKpbhYu9.js} +1 -1
  24. package/build/client/_app/immutable/chunks/BKpbhYu9.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/BKpbhYu9.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/{DtV-MjyX.js → BVlqiKgb.js} +1 -1
  27. package/build/client/_app/immutable/chunks/BVlqiKgb.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/BVlqiKgb.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{DWm-CGbg.js → BWGaSL1l.js} +1 -1
  30. package/build/client/_app/immutable/chunks/BWGaSL1l.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BWGaSL1l.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{BNDRPiSt.js → B_Z4tBMl.js} +1 -1
  33. package/build/client/_app/immutable/chunks/B_Z4tBMl.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/B_Z4tBMl.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{BWDKMHXq.js → Bo46v6NJ.js} +1 -1
  36. package/build/client/_app/immutable/chunks/Bo46v6NJ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/Bo46v6NJ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/{BKpsnTLG.js → BpDPh_kG.js} +1 -1
  39. package/build/client/_app/immutable/chunks/BpDPh_kG.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BpDPh_kG.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/{DQCjzVyz.js → BzFqst10.js} +1 -1
  42. package/build/client/_app/immutable/chunks/BzFqst10.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BzFqst10.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{KsLFdNDs.js → C3JYac4u.js} +1 -1
  45. package/build/client/_app/immutable/chunks/C3JYac4u.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/C3JYac4u.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/{CG0TPRkn.js → CBzF0p8K.js} +1 -1
  48. package/build/client/_app/immutable/chunks/CBzF0p8K.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/CBzF0p8K.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{1cmfrS0o.js → CM9QBz5w.js} +1 -1
  51. package/build/client/_app/immutable/chunks/CM9QBz5w.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/CM9QBz5w.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/{DznDQzx1.js → CZqQKfBo.js} +1 -1
  54. package/build/client/_app/immutable/chunks/CZqQKfBo.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/CZqQKfBo.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/Cr-NovV3.js +5 -0
  57. package/build/client/_app/immutable/chunks/Cr-NovV3.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Cr-NovV3.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/{DqJI6J5U.js → Cz6pnyFa.js} +1 -1
  60. package/build/client/_app/immutable/chunks/Cz6pnyFa.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/Cz6pnyFa.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/{CBRk0OGa.js → D2fsDTN5.js} +1 -1
  63. package/build/client/_app/immutable/chunks/D2fsDTN5.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/D2fsDTN5.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{CpeJ2iPd.js → DBcd9YbV.js} +1 -1
  66. package/build/client/_app/immutable/chunks/DBcd9YbV.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DBcd9YbV.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/{OoMmWNOu.js → DC_milOQ.js} +1 -1
  69. package/build/client/_app/immutable/chunks/DC_milOQ.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DC_milOQ.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/{CIDBs8t6.js → DNiEIfDZ.js} +1 -1
  72. package/build/client/_app/immutable/chunks/DNiEIfDZ.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/DNiEIfDZ.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{Dc9It0QB.js → DWdskt_Y.js} +1 -1
  75. package/build/client/_app/immutable/chunks/DWdskt_Y.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/DWdskt_Y.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{DYDQbI6D.js → DsMQ6HVM.js} +1 -1
  78. package/build/client/_app/immutable/chunks/DsMQ6HVM.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/DsMQ6HVM.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/Dxeyu30B.js +1 -0
  81. package/build/client/_app/immutable/chunks/Dxeyu30B.js.br +1 -0
  82. package/build/client/_app/immutable/chunks/Dxeyu30B.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/{CfPyeeq3.js → H4Anb6kP.js} +1 -1
  84. package/build/client/_app/immutable/chunks/H4Anb6kP.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/H4Anb6kP.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/MDK8mPOo.js +1 -0
  87. package/build/client/_app/immutable/chunks/MDK8mPOo.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/MDK8mPOo.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/{D0IrjYE5.js → X7CLxGgV.js} +1 -1
  90. package/build/client/_app/immutable/chunks/X7CLxGgV.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/X7CLxGgV.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/{D6rwn6Ed.js → cK-f5ch_.js} +1 -1
  93. package/build/client/_app/immutable/chunks/cK-f5ch_.js.br +2 -0
  94. package/build/client/_app/immutable/chunks/cK-f5ch_.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/{UsO0MS14.js → mhYP0ygJ.js} +1 -1
  96. package/build/client/_app/immutable/chunks/mhYP0ygJ.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/mhYP0ygJ.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/{AAWh0-tL.js → vB0ff9Sn.js} +1 -1
  99. package/build/client/_app/immutable/chunks/vB0ff9Sn.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/vB0ff9Sn.js.gz +0 -0
  101. package/build/client/_app/immutable/entry/{app.FQLd-NC-.js → app.CinEZGkq.js} +2 -2
  102. package/build/client/_app/immutable/entry/app.CinEZGkq.js.br +0 -0
  103. package/build/client/_app/immutable/entry/app.CinEZGkq.js.gz +0 -0
  104. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js +1 -0
  105. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.br +1 -0
  106. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/{0.BN3NguWs.js → 0.CFO0Fthy.js} +1 -1
  108. package/build/client/_app/immutable/nodes/0.CFO0Fthy.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/{0.BN3NguWs.js.gz → 0.CFO0Fthy.js.gz} +0 -0
  110. package/build/client/_app/immutable/nodes/{1.5EZfoLCg.js → 1.kGO9dV9J.js} +1 -1
  111. package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/2.eGSziRQX.js +5 -0
  114. package/build/client/_app/immutable/nodes/2.eGSziRQX.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/2.eGSziRQX.js.gz +0 -0
  116. package/build/client/_app/version.json +1 -1
  117. package/build/client/_app/version.json.br +0 -0
  118. package/build/client/_app/version.json.gz +0 -0
  119. package/build/handler.js +4 -4
  120. package/build/index.js +4 -4
  121. package/build/server/chunks/chunks/{EventScatter.js-D3Jaw_Cw.js → EventScatter.js-CG0RcOU6.js} +82 -20
  122. package/build/server/chunks/chunks/{EventScatter.js-D3Jaw_Cw.js.map → EventScatter.js-CG0RcOU6.js.map} +1 -1
  123. package/build/server/chunks/chunks/{archive.js-C2D-5edp.js → archive.js-D2jtMmDo.js} +134 -26
  124. package/build/server/chunks/chunks/archive.js-D2jtMmDo.js.map +1 -0
  125. package/build/server/chunks/chunks/{aws.js-DkPqAybc.js → env2.js-C5BgBJDY.js} +63 -6
  126. package/build/server/chunks/chunks/env2.js-C5BgBJDY.js.map +1 -0
  127. package/build/server/chunks/chunks/identity.js-NmGXxBz3.js +22 -0
  128. package/build/server/chunks/chunks/identity.js-NmGXxBz3.js.map +1 -0
  129. package/build/server/chunks/chunks/{internal2.js-627EG4am.js → internal2.js-BMcEVxqN.js} +2 -2
  130. package/build/server/chunks/chunks/{internal2.js-627EG4am.js.map → internal2.js-BMcEVxqN.js.map} +1 -1
  131. package/build/server/chunks/chunks/{level-filter.js-B3o2hyWD.js → level-filter.js-D9MNrew3.js} +2 -2
  132. package/build/server/chunks/chunks/{level-filter.js-B3o2hyWD.js.map → level-filter.js-D9MNrew3.js.map} +1 -1
  133. package/build/server/chunks/chunks/{log-buffer.js-BI_gQOls.js → log-buffer.js-A9FA-Qv8.js} +18 -3
  134. package/build/server/chunks/chunks/log-buffer.js-A9FA-Qv8.js.map +1 -0
  135. package/build/server/chunks/chunks/{regions.js-IQPMyP5C.js → regions.js-COf7DgnH.js} +3 -3
  136. package/build/server/chunks/chunks/regions.js-COf7DgnH.js.map +1 -0
  137. package/build/server/chunks/chunks/{series-buckets.js-BjigySff.js → series-buckets.js-DFGWkob5.js} +34 -8
  138. package/build/server/chunks/chunks/series-buckets.js-DFGWkob5.js.map +1 -0
  139. package/build/server/chunks/chunks/{state.js-DbqJPX0Y.js → state.js-vZj9lo1I.js} +2 -2
  140. package/build/server/chunks/chunks/{state.js-DbqJPX0Y.js.map → state.js-vZj9lo1I.js.map} +1 -1
  141. package/build/server/chunks/entries/endpoints/api/archive/{_server.ts.js-83Ch7djd.js → _server.ts.js-C4hWyXuu.js} +17 -9
  142. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-C4hWyXuu.js.map +1 -0
  143. package/build/server/chunks/entries/endpoints/api/health/{_server.ts.js-VctnBhIJ.js → _server.ts.js-C5tfrpmC.js} +4 -5
  144. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-C5tfrpmC.js.map +1 -0
  145. package/build/server/chunks/entries/endpoints/api/identity/{_server.ts.js-Dt540Sio.js → _server.ts.js-PWRPScuN.js} +6 -24
  146. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-PWRPScuN.js.map +1 -0
  147. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-drLgUdvB.js → _server.ts.js-D4y43Vwe.js} +14 -11
  148. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-D4y43Vwe.js.map +1 -0
  149. package/build/server/chunks/entries/endpoints/api/regions/{_server.ts.js-CBqfN6Pg.js → _server.ts.js-9_g0ojki.js} +8 -9
  150. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-9_g0ojki.js.map +1 -0
  151. package/build/server/chunks/entries/endpoints/api/series/{_server.ts.js-DOvBhEDU.js → _server.ts.js-DibT3Hjc.js} +34 -16
  152. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DibT3Hjc.js.map +1 -0
  153. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-B9_-4ssJ.js → _server.ts.js-BxXw5K0R.js} +32 -20
  154. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-BxXw5K0R.js.map +1 -0
  155. package/build/server/chunks/entries/fallbacks/{error.svelte.js-B8dLO9gT.js → error.svelte.js-bokc4skC.js} +3 -3
  156. package/build/server/chunks/entries/fallbacks/{error.svelte.js-B8dLO9gT.js.map → error.svelte.js-bokc4skC.js.map} +1 -1
  157. package/build/server/chunks/entries/pages/{_layout.svelte.js-CBQpEToy.js → _layout.svelte.js-8U7ZeKYO.js} +3 -3
  158. package/build/server/chunks/entries/pages/_layout.svelte.js-8U7ZeKYO.js.map +1 -0
  159. package/build/server/chunks/entries/pages/{_page.svelte.js-BwuzE25P.js → _page.svelte.js-DRoSEPVH.js} +149 -41
  160. package/build/server/chunks/entries/pages/_page.svelte.js-DRoSEPVH.js.map +1 -0
  161. package/build/server/chunks/{handler-hlKcUyVP.js → handler-BkYErjbr.js} +3 -3
  162. package/build/server/chunks/{handler-hlKcUyVP.js.map → handler-BkYErjbr.js.map} +1 -1
  163. package/build/server/chunks/{index.js-BfPWKsz6.js → index.js-5mkIDcpy.js} +2 -2
  164. package/build/server/chunks/{index.js-BfPWKsz6.js.map → index.js-5mkIDcpy.js.map} +1 -1
  165. package/build/server/chunks/{manifest.js-uuijI5lm.js → manifest.js-BGoS-vRx.js} +12 -12
  166. package/build/server/chunks/{manifest.js-uuijI5lm.js.map → manifest.js-BGoS-vRx.js.map} +1 -1
  167. package/build/server/chunks/nodes/{0.js-CNFDDPj5.js → 0.js-BIj6k30n.js} +4 -4
  168. package/build/server/chunks/nodes/{0.js-CNFDDPj5.js.map → 0.js-BIj6k30n.js.map} +1 -1
  169. package/build/server/chunks/nodes/{1.js-bi9PXX_2.js → 1.js-BQibx33b.js} +3 -3
  170. package/build/server/chunks/nodes/{1.js-bi9PXX_2.js.map → 1.js-BQibx33b.js.map} +1 -1
  171. package/build/server/chunks/nodes/{2.js-3MYCPEqM.js → 2.js-CczDSPv9.js} +4 -4
  172. package/build/server/chunks/nodes/{2.js-3MYCPEqM.js.map → 2.js-CczDSPv9.js.map} +1 -1
  173. package/dist/cli/index.js +13 -6
  174. package/dist/cli/options.js +1 -1
  175. package/dist/cli/server.js +19 -4
  176. package/dist/lib/cli/aws.js +4 -4
  177. package/dist/lib/log-buffer.js +1 -1
  178. package/package.json +6 -6
  179. package/build/client/_app/immutable/assets/0.Dfts6BC4.css +0 -2
  180. package/build/client/_app/immutable/assets/0.Dfts6BC4.css.br +0 -0
  181. package/build/client/_app/immutable/assets/0.Dfts6BC4.css.gz +0 -0
  182. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.br +0 -0
  183. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.gz +0 -0
  184. package/build/client/_app/immutable/chunks/1cmfrS0o.js.br +0 -0
  185. package/build/client/_app/immutable/chunks/1cmfrS0o.js.gz +0 -0
  186. package/build/client/_app/immutable/chunks/8x_7TBuS.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/8x_7TBuS.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/AAWh0-tL.js.br +0 -0
  189. package/build/client/_app/immutable/chunks/AAWh0-tL.js.gz +0 -0
  190. package/build/client/_app/immutable/chunks/BKpsnTLG.js.br +0 -0
  191. package/build/client/_app/immutable/chunks/BKpsnTLG.js.gz +0 -0
  192. package/build/client/_app/immutable/chunks/BNDRPiSt.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/BNDRPiSt.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/BWDKMHXq.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/BWDKMHXq.js.gz +0 -0
  196. package/build/client/_app/immutable/chunks/BjxZ_neZ.js +0 -5
  197. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.br +0 -0
  198. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.gz +0 -0
  199. package/build/client/_app/immutable/chunks/CBRk0OGa.js.br +0 -0
  200. package/build/client/_app/immutable/chunks/CBRk0OGa.js.gz +0 -0
  201. package/build/client/_app/immutable/chunks/CG0TPRkn.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/CG0TPRkn.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/CGReuhGk.js +0 -1
  204. package/build/client/_app/immutable/chunks/CGReuhGk.js.br +0 -1
  205. package/build/client/_app/immutable/chunks/CGReuhGk.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/CIDBs8t6.js.br +0 -0
  207. package/build/client/_app/immutable/chunks/CIDBs8t6.js.gz +0 -0
  208. package/build/client/_app/immutable/chunks/CfPyeeq3.js.br +0 -0
  209. package/build/client/_app/immutable/chunks/CfPyeeq3.js.gz +0 -0
  210. package/build/client/_app/immutable/chunks/CpeJ2iPd.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/CpeJ2iPd.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/D0IrjYE5.js.br +0 -0
  213. package/build/client/_app/immutable/chunks/D0IrjYE5.js.gz +0 -0
  214. package/build/client/_app/immutable/chunks/D1Hr4tKw.js.br +0 -0
  215. package/build/client/_app/immutable/chunks/D1Hr4tKw.js.gz +0 -0
  216. package/build/client/_app/immutable/chunks/D6rwn6Ed.js.br +0 -1
  217. package/build/client/_app/immutable/chunks/D6rwn6Ed.js.gz +0 -0
  218. package/build/client/_app/immutable/chunks/DQCjzVyz.js.br +0 -0
  219. package/build/client/_app/immutable/chunks/DQCjzVyz.js.gz +0 -0
  220. package/build/client/_app/immutable/chunks/DWm-CGbg.js.br +0 -0
  221. package/build/client/_app/immutable/chunks/DWm-CGbg.js.gz +0 -0
  222. package/build/client/_app/immutable/chunks/DYDQbI6D.js.br +0 -0
  223. package/build/client/_app/immutable/chunks/DYDQbI6D.js.gz +0 -0
  224. package/build/client/_app/immutable/chunks/Dc9It0QB.js.br +0 -0
  225. package/build/client/_app/immutable/chunks/Dc9It0QB.js.gz +0 -0
  226. package/build/client/_app/immutable/chunks/DkQY3T0m.js +0 -1
  227. package/build/client/_app/immutable/chunks/DkQY3T0m.js.br +0 -0
  228. package/build/client/_app/immutable/chunks/DkQY3T0m.js.gz +0 -0
  229. package/build/client/_app/immutable/chunks/DqJI6J5U.js.br +0 -0
  230. package/build/client/_app/immutable/chunks/DqJI6J5U.js.gz +0 -0
  231. package/build/client/_app/immutable/chunks/DtV-MjyX.js.br +0 -0
  232. package/build/client/_app/immutable/chunks/DtV-MjyX.js.gz +0 -0
  233. package/build/client/_app/immutable/chunks/DznDQzx1.js.br +0 -0
  234. package/build/client/_app/immutable/chunks/DznDQzx1.js.gz +0 -0
  235. package/build/client/_app/immutable/chunks/F4LqKrLs.js.br +0 -0
  236. package/build/client/_app/immutable/chunks/F4LqKrLs.js.gz +0 -0
  237. package/build/client/_app/immutable/chunks/KA1QvXmu.js.br +0 -0
  238. package/build/client/_app/immutable/chunks/KA1QvXmu.js.gz +0 -0
  239. package/build/client/_app/immutable/chunks/KsLFdNDs.js.br +0 -0
  240. package/build/client/_app/immutable/chunks/KsLFdNDs.js.gz +0 -0
  241. package/build/client/_app/immutable/chunks/OoMmWNOu.js.br +0 -0
  242. package/build/client/_app/immutable/chunks/OoMmWNOu.js.gz +0 -0
  243. package/build/client/_app/immutable/chunks/UsO0MS14.js.br +0 -0
  244. package/build/client/_app/immutable/chunks/UsO0MS14.js.gz +0 -0
  245. package/build/client/_app/immutable/chunks/sf5kQ3yV.js.br +0 -0
  246. package/build/client/_app/immutable/chunks/sf5kQ3yV.js.gz +0 -0
  247. package/build/client/_app/immutable/chunks/w7c5E2ms.js.br +0 -0
  248. package/build/client/_app/immutable/chunks/w7c5E2ms.js.gz +0 -0
  249. package/build/client/_app/immutable/entry/app.FQLd-NC-.js.br +0 -0
  250. package/build/client/_app/immutable/entry/app.FQLd-NC-.js.gz +0 -0
  251. package/build/client/_app/immutable/entry/start.DqW_lChD.js +0 -1
  252. package/build/client/_app/immutable/entry/start.DqW_lChD.js.br +0 -1
  253. package/build/client/_app/immutable/entry/start.DqW_lChD.js.gz +0 -0
  254. package/build/client/_app/immutable/nodes/0.BN3NguWs.js.br +0 -0
  255. package/build/client/_app/immutable/nodes/1.5EZfoLCg.js.br +0 -0
  256. package/build/client/_app/immutable/nodes/1.5EZfoLCg.js.gz +0 -0
  257. package/build/client/_app/immutable/nodes/2.CbcDv2oO.js +0 -4
  258. package/build/client/_app/immutable/nodes/2.CbcDv2oO.js.br +0 -0
  259. package/build/client/_app/immutable/nodes/2.CbcDv2oO.js.gz +0 -0
  260. package/build/server/chunks/chunks/archive.js-C2D-5edp.js.map +0 -1
  261. package/build/server/chunks/chunks/aws.js-DkPqAybc.js.map +0 -1
  262. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js +0 -60
  263. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js.map +0 -1
  264. package/build/server/chunks/chunks/log-buffer.js-BI_gQOls.js.map +0 -1
  265. package/build/server/chunks/chunks/regions.js-IQPMyP5C.js.map +0 -1
  266. package/build/server/chunks/chunks/series-buckets.js-BjigySff.js.map +0 -1
  267. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-83Ch7djd.js.map +0 -1
  268. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-VctnBhIJ.js.map +0 -1
  269. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-Dt540Sio.js.map +0 -1
  270. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-drLgUdvB.js.map +0 -1
  271. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-CBqfN6Pg.js.map +0 -1
  272. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DOvBhEDU.js.map +0 -1
  273. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-B9_-4ssJ.js.map +0 -1
  274. package/build/server/chunks/entries/pages/_layout.svelte.js-CBQpEToy.js.map +0 -1
  275. package/build/server/chunks/entries/pages/_page.svelte.js-BwuzE25P.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-buffer.js-BI_gQOls.js","sources":["../../../../.svelte-kit/output/server/chunks/log-buffer.js"],"sourcesContent":["//#region src/lib/log-format.ts\n/**\n* Parses a log message that is entirely JSON.\n*\n* Only objects and arrays count: a message that happens to be `42` or `\"ok\"` is\n* left alone, and anything that does not parse is not JSON. Leading and trailing\n* whitespace is ignored.\n*/\nfunction detectJson(message) {\n\tif (typeof message !== \"string\") return null;\n\tconst trimmed = message.trim();\n\tif (trimmed.length === 0) return null;\n\tconst first = trimmed[0];\n\tif (first !== \"{\" && first !== \"[\") return null;\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\tif (parsed === null || typeof parsed !== \"object\") return null;\n\t\treturn parsed;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Returns the text to render for a log message.\n*\n* `prettyJson` is normally true: JSON messages are re-serialised with two-space\n* indentation. With `prettyJson` false the raw message is returned unchanged,\n* which is what the viewer's JSON toggle switches to.\n*/\nfunction formatLogMessage(message, options = {}) {\n\tconst { prettyJson = true } = options;\n\tconst value = detectJson(message);\n\tif (value === null || !prettyJson) return {\n\t\ttext: message,\n\t\tisJson: value !== null,\n\t\tvalue\n\t};\n\treturn {\n\t\ttext: JSON.stringify(value, null, 2),\n\t\tisJson: true,\n\t\tvalue\n\t};\n}\nvar NUMBER_PATTERN = /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n/**\n* Splits pretty-printed JSON into coloured tokens.\n*\n* The concatenation of every token's `text` is always identical to the input, so\n* rendering tokens can never lose or alter a character. This is a display-only\n* scanner: it assumes well-formed JSON produced by `JSON.stringify`.\n*/\nfunction tokenizeJson(text) {\n\tconst tokens = [];\n\tlet index = 0;\n\tconst push = (type, value) => {\n\t\tif (value.length > 0) tokens.push({\n\t\t\ttype,\n\t\t\ttext: value\n\t\t});\n\t};\n\twhile (index < text.length) {\n\t\tconst char = text[index];\n\t\tif (char === \" \" || char === \"\\n\" || char === \"\t\" || char === \"\\r\") {\n\t\t\tlet end = index;\n\t\t\twhile (end < text.length && \" \\n\t\\r\".includes(text[end])) end += 1;\n\t\t\tpush(\"whitespace\", text.slice(index, end));\n\t\t\tindex = end;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\\"\") {\n\t\t\tlet end = index + 1;\n\t\t\twhile (end < text.length) {\n\t\t\t\tif (text[end] === \"\\\\\") {\n\t\t\t\t\tend += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (text[end] === \"\\\"\") break;\n\t\t\t\tend += 1;\n\t\t\t}\n\t\t\tconst raw = text.slice(index, Math.min(end + 1, text.length));\n\t\t\tlet lookahead = index + raw.length;\n\t\t\twhile (lookahead < text.length && \" \\n\t\\r\".includes(text[lookahead])) lookahead += 1;\n\t\t\tpush(text[lookahead] === \":\" ? \"key\" : \"string\", raw);\n\t\t\tindex += raw.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"{\" || char === \"}\" || char === \"[\" || char === \"]\" || char === \",\" || char === \":\") {\n\t\t\tpush(\"punctuation\", char);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (text.startsWith(\"true\", index) || text.startsWith(\"false\", index)) {\n\t\t\tconst literal = text.startsWith(\"true\", index) ? \"true\" : \"false\";\n\t\t\tpush(\"boolean\", literal);\n\t\t\tindex += literal.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (text.startsWith(\"null\", index)) {\n\t\t\tpush(\"null\", \"null\");\n\t\t\tindex += 4;\n\t\t\tcontinue;\n\t\t}\n\t\tlet end = index;\n\t\twhile (end < text.length && !\"{}[],:\\\" \\n\t\\r\".includes(text[end])) end += 1;\n\t\tconst raw = text.slice(index, Math.max(end, index + 1));\n\t\tpush(NUMBER_PATTERN.test(raw) ? \"number\" : \"other\", raw);\n\t\tindex += raw.length;\n\t}\n\treturn tokens;\n}\n/**\n* Finds the first JSON object or array inside a log message.\n*\n* Whole messages are handled by {@link detectJson}; this also copes with the\n* common \"prefix then payload\" shape (`2026-01-01 INFO {\"level\":\"info\"}`), which\n* is what the viewer expands when pretty-printing is switched off.\n*\n* Strings and escapes are respected while matching brackets, so a `}` inside a\n* message value cannot end the scan early.\n*/\nfunction findJsonInMessage(message) {\n\tif (typeof message !== \"string\") return null;\n\tconst whole = detectJson(message);\n\tif (whole !== null) return whole;\n\tfor (let index = 0; index < message.length; index += 1) {\n\t\tconst opener = message[index];\n\t\tif (opener !== \"{\" && opener !== \"[\") continue;\n\t\tconst closer = opener === \"{\" ? \"}\" : \"]\";\n\t\tlet depth = 0;\n\t\tlet inString = false;\n\t\tlet escaped = false;\n\t\tfor (let scan = index; scan < message.length; scan += 1) {\n\t\t\tconst char = message[scan];\n\t\t\tif (inString) {\n\t\t\t\tif (escaped) escaped = false;\n\t\t\t\telse if (char === \"\\\\\") escaped = true;\n\t\t\t\telse if (char === \"\\\"\") inString = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"\\\"\") {\n\t\t\t\tinString = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === opener) depth += 1;\n\t\t\telse if (char === closer) {\n\t\t\t\tdepth -= 1;\n\t\t\t\tif (depth === 0) {\n\t\t\t\t\tconst candidate = message.slice(index, scan + 1);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst parsed = JSON.parse(candidate);\n\t\t\t\t\t\tif (parsed !== null && typeof parsed === \"object\") return parsed;\n\t\t\t\t\t} catch {}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n//#endregion\n//#region src/lib/log-buffer.ts\n/**\n* Pure client-side log storage and filtering for the watch-stream UI.\n*\n* Design decisions (kept in one place so the UI stays predictable):\n*\n* - The visible buffer is a fixed-capacity ring buffer. When it is full the oldest line is\n* dropped, so memory stays bounded while tailing a busy group.\n* - Pausing keeps the SSE connection open and keeps receiving events. Incoming events are held in\n* a bounded pending buffer instead of the visible buffer, and are flushed in arrival order when\n* the user resumes.\n*/\n/** Maximum number of lines kept in the visible client buffer. */\nvar DEFAULT_CAPACITY = 5e3;\nvar ERROR_PATTERN = /\\b(ERROR|FATAL|CRITICAL|CRIT|PANIC|EXCEPTION|TRACEBACK|SEVERE|FAILED|FAILURE)\\b/;\nvar WARN_PATTERN = /\\b(WARN|WARNING)\\b/;\nvar DEBUG_PATTERN = /\\b(DEBUG|TRACE|VERBOSE)\\b/;\n/** Payload keys checked, in order, for a level the producer declared. */\nvar LEVEL_KEYS = [\n\t\"level\",\n\t\"severity\",\n\t\"lvl\",\n\t\"logLevel\",\n\t\"log_level\"\n];\n/**\n* Declared level words mapped onto the four levels the UI knows.\n*\n* The vocabulary is deliberately small: `fatal` and `critical` are errors to\n* everyone reading a log, and collapsing them keeps the filter and the colours\n* honest instead of inventing levels nothing else understands.\n*/\nvar LEVEL_WORDS = {\n\ttrace: \"debug\",\n\tverbose: \"debug\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\tinformation: \"info\",\n\tnotice: \"info\",\n\tnote: \"info\",\n\twarn: \"warn\",\n\twarning: \"warn\",\n\terror: \"error\",\n\terr: \"error\",\n\texception: \"error\",\n\tfatal: \"error\",\n\tcritical: \"error\",\n\tcrit: \"error\",\n\tpanic: \"error\",\n\tsevere: \"error\",\n\talert: \"error\",\n\temergency: \"error\"\n};\n/**\n* Bunyan/pino style numeric levels.\n*\n* Only exact known values are mapped: a bare number such as `{\"level\":0}` means\n* different things in different loggers, so an unknown number falls through to\n* the text heuristic instead of being guessed at.\n*/\nvar NUMERIC_LEVELS = {\n\t10: \"debug\",\n\t20: \"debug\",\n\t30: \"info\",\n\t40: \"warn\",\n\t50: \"error\",\n\t60: \"error\"\n};\n/** True when a value is one of the four known levels. */\nfunction isLogLevel(value) {\n\treturn value === \"error\" || value === \"warn\" || value === \"info\" || value === \"debug\";\n}\n/** Converts one declared JSON value into a level, or `null` when unrecognised. */\nfunction levelFromDeclared(value) {\n\tif (typeof value === \"number\" && Number.isFinite(value)) return NUMERIC_LEVELS[value] ?? null;\n\tif (typeof value !== \"string\") return null;\n\tconst word = value.trim().toLowerCase();\n\tif (word.length === 0) return null;\n\treturn LEVEL_WORDS[word] ?? null;\n}\n/**\n* Level the payload declares, when the line carries a JSON object with a known\n* level key. Whole messages and \"prefix then payload\" lines are both handled,\n* by the same parser the viewer uses to pretty-print JSON.\n*/\nfunction declaredLevel(message) {\n\tconst payload = findJsonInMessage(message);\n\tif (payload === null || typeof payload !== \"object\" || Array.isArray(payload)) return null;\n\tconst record = payload;\n\tfor (const key of LEVEL_KEYS) {\n\t\tconst level = levelFromDeclared(record[key]);\n\t\tif (level !== null) return level;\n\t}\n\treturn null;\n}\n/**\n* Severity ranks, highest first, with `unknown` below every real level.\n*\n* One ordered table feeds the JavaScript helpers and the SQL the archive runs,\n* so \"most critical\" means exactly the same thing in the chart, in the log view\n* and in DuckDB. Insertion order is severity order.\n*/\nvar LEVEL_RANK = {\n\terror: 4,\n\twarn: 3,\n\tinfo: 2,\n\tdebug: 1,\n\tunknown: 0\n};\n/**\n* Worst level in a set of levels, or `null` when none of them has a level.\n*\n* This is what a request id group is coloured by: a group with one error line\n* and twenty info lines is an error, because that is what a reader needs to see.\n*/\nfunction mostCriticalLevel(levels) {\n\tlet best = null;\n\tlet bestRank = -1;\n\tfor (const level of levels) {\n\t\tif (level === null || level === void 0 || level === \"unknown\") continue;\n\t\tconst rank = LEVEL_RANK[level];\n\t\tif (rank > bestRank) {\n\t\t\tbestRank = rank;\n\t\t\tbest = level;\n\t\t}\n\t}\n\treturn best;\n}\n/**\n* Payload keys checked, in order, for a request id the producer declared.\n*\n* The list is deliberately about the *request*: a trace id, a session id or a\n* tenant id names something else and must not collapse unrelated lines.\n*/\nvar REQUEST_ID_KEYS = [\n\t\"requestId\",\n\t\"request_id\",\n\t\"requestID\",\n\t\"reqId\",\n\t\"req_id\",\n\t\"awsRequestId\",\n\t\"aws_request_id\",\n\t\"xRequestId\",\n\t\"x_request_id\",\n\t\"x-request-id\",\n\t\"X-Request-Id\"\n];\n/** Values that look like an id but mean \"there is none\". */\nvar REQUEST_ID_PLACEHOLDERS = /* @__PURE__ */ new Set([\n\t\"none\",\n\t\"null\",\n\t\"undefined\",\n\t\"n/a\",\n\t\"na\",\n\t\"unknown\",\n\t\"test\",\n\t\"-\",\n\t\"{{requestid}}\",\n\t\"${requestid}\"\n]);\n/** Shortest value treated as a request id, so `id: 1` is not a grouping key. */\nvar REQUEST_ID_MIN_LENGTH = 4;\n/** Characters a request id is made of; anything with a space is not an id. */\nvar REQUEST_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:=-]*$/;\n/**\n* `RequestId: 1234-abcd`, `request_id=abc.def`, `x-request-id: 8f2c`: the\n* separators and the casing both vary, so one pattern covers them.\n*\n* A bare UUID is deliberately *not* matched. Plenty of log lines carry a\n* correlation id, a span id or an uploaded file's id, and grouping by one of\n* those would invent requests that never existed.\n*/\nvar REQUEST_ID_TEXT = /\\brequest[\\s_-]?id\\b\\s*[:=]\\s*\"?([A-Za-z0-9][A-Za-z0-9._:=-]*)\"?/i;\n/** Trims trailing punctuation a sentence adds after an id. */\nfunction cleanRequestId(value) {\n\tconst trimmed = value.replace(/[.,;:]+$/, \"\").trim();\n\tif (trimmed.length < REQUEST_ID_MIN_LENGTH) return null;\n\tif (REQUEST_ID_PLACEHOLDERS.has(trimmed.toLowerCase())) return null;\n\treturn REQUEST_ID_PATTERN.test(trimmed) ? trimmed : null;\n}\n/** Request id the payload declares, when the line carries a JSON object. */\nfunction declaredRequestId(message) {\n\tconst payload = findJsonInMessage(message);\n\tif (payload === null || typeof payload !== \"object\" || Array.isArray(payload)) return null;\n\tconst record = payload;\n\tfor (const key of REQUEST_ID_KEYS) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\") {\n\t\t\tconst cleaned = cleanRequestId(value);\n\t\t\tif (cleaned !== null) return cleaned;\n\t\t}\n\t\tif (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n\t}\n\treturn null;\n}\n/**\n* Detects the request id of a log line, or returns `null` when it has none.\n*\n* A declared payload key wins; the text form is the fallback for the many logs\n* that print their id instead of emitting JSON. Both paths return the id\n* verbatim, because it is an identifier - folding case would merge distinct ids\n* on the one hand and lie about what the log said on the other.\n*/\nfunction detectRequestId(message) {\n\tconst text = message ?? \"\";\n\tif (text === \"\") return null;\n\tconst declared = declaredRequestId(text);\n\tif (declared !== null) return declared;\n\tconst match = REQUEST_ID_TEXT.exec(text);\n\treturn match === null ? null : cleanRequestId(match[1] ?? \"\");\n}\n/**\n* Detects the severity of a log line.\n*\n* A level the payload declares wins, because it is a statement of fact; the\n* text heuristic is the fallback for the many logs that declare nothing. The\n* heuristic matches level words anywhere in the line, so\n* `{\"level\":\"info\",\"msg\":\"retry after error count 0\"}` is `info`, not `error`.\n*/\nfunction detectLevelWithSource(message) {\n\tconst declared = declaredLevel(message ?? \"\");\n\tif (declared !== null) return {\n\t\tlevel: declared,\n\t\tsource: \"json\"\n\t};\n\tconst upper = (message ?? \"\").toUpperCase();\n\tif (ERROR_PATTERN.test(upper)) return {\n\t\tlevel: \"error\",\n\t\tsource: \"text\"\n\t};\n\tif (WARN_PATTERN.test(upper)) return {\n\t\tlevel: \"warn\",\n\t\tsource: \"text\"\n\t};\n\tif (DEBUG_PATTERN.test(upper)) return {\n\t\tlevel: \"debug\",\n\t\tsource: \"text\"\n\t};\n\treturn {\n\t\tlevel: null,\n\t\tsource: null\n\t};\n}\n/**\n* Guesses the severity of a log line from its text, or returns `null` when the\n* line carries no signal at all (a stack-trace continuation, for example).\n*/\nfunction detectLevel(message) {\n\treturn detectLevelWithSource(message).level;\n}\n/** Level of an event: what the server detected, else a guess from the text. */\nfunction effectiveLevel(event) {\n\treturn event.level !== void 0 ? event.level : detectLevel(event.message);\n}\n/** True when an event passes a level filter; a `null` filter accepts every line. */\nfunction matchesLevel(event, level) {\n\treturn level === null || effectiveLevel(event) === level;\n}\n/** Filters events by level, keeping every line when `level` is `null`. */\nfunction filterByLevel(events, level) {\n\tif (level === null) return events.slice();\n\treturn events.filter((event) => matchesLevel(event, level));\n}\n/** Tailwind text colour class for a severity; an unknown level stays neutral. */\nfunction levelColorClass(level) {\n\tswitch (level) {\n\t\tcase \"error\": return \"text-red-400\";\n\t\tcase \"warn\": return \"text-amber-300\";\n\t\tcase \"debug\": return \"text-neutral-500\";\n\t\tdefault: return \"text-neutral-200\";\n\t}\n}\n/** Stable key for rendering a log line, since event ids can repeat or be missing. */\nfunction eventKey(event, index) {\n\treturn `${event.id ?? \"no-id\"}:${event.timestamp}:${index}`;\n}\n/** Case-insensitive substring match over the message and the stream name. */\nfunction matchesFilter(event, query) {\n\tconst needle = (query ?? \"\").trim().toLowerCase();\n\tif (needle === \"\") return true;\n\treturn `${event.message ?? \"\"} ${event.streamName ?? \"\"}`.toLowerCase().includes(needle);\n}\n/** Returns the events matching `query`, in arrival order. */\nfunction filterEvents(events, query) {\n\tif ((query ?? \"\").trim() === \"\") return events.slice();\n\treturn events.filter((event) => matchesFilter(event, query));\n}\n/** Creates an array of `length` undefined slots. */\nfunction emptySlots(length) {\n\treturn Array.from({ length });\n}\n/**\n* Fixed-capacity ring buffer that overwrites the oldest item once it is full.\n*/\nvar LogRingBuffer = class {\n\t/** Maximum number of items kept. */\n\tcapacity;\n\t#items;\n\t#start = 0;\n\t#size = 0;\n\t#dropped = 0;\n\tconstructor(capacity = DEFAULT_CAPACITY) {\n\t\tif (!Number.isInteger(capacity) || capacity <= 0) throw new RangeError(`capacity must be a positive integer, received ${capacity}`);\n\t\tthis.capacity = capacity;\n\t\tthis.#items = emptySlots(capacity);\n\t}\n\t/** Number of items currently stored. */\n\tget size() {\n\t\treturn this.#size;\n\t}\n\t/** Number of items discarded because the buffer was full. */\n\tget dropped() {\n\t\treturn this.#dropped;\n\t}\n\t/** True when the buffer holds `capacity` items. */\n\tget full() {\n\t\treturn this.#size === this.capacity;\n\t}\n\t/** Appends one item, dropping the oldest item when the buffer is full. */\n\tpush(item) {\n\t\tif (this.#size === this.capacity) {\n\t\t\tthis.#dropped += 1;\n\t\t\tthis.#start = (this.#start + 1) % this.capacity;\n\t\t\tthis.#size -= 1;\n\t\t}\n\t\tconst index = (this.#start + this.#size) % this.capacity;\n\t\tthis.#items[index] = item;\n\t\tthis.#size += 1;\n\t}\n\t/** Appends several items in order. */\n\tpushMany(items) {\n\t\tfor (const item of items) this.push(item);\n\t}\n\t/** Copies the stored items into an array ordered oldest to newest. */\n\ttoArray() {\n\t\tconst output = emptySlots(this.#size);\n\t\tfor (let offset = 0; offset < this.#size; offset += 1) output[offset] = this.#items[(this.#start + offset) % this.capacity];\n\t\treturn output;\n\t}\n\t/** Oldest stored item, or `undefined` when empty. */\n\tfirst() {\n\t\treturn this.#size === 0 ? void 0 : this.#items[this.#start];\n\t}\n\t/** Newest stored item, or `undefined` when empty. */\n\tlast() {\n\t\treturn this.#size === 0 ? void 0 : this.#items[(this.#start + this.#size - 1) % this.capacity];\n\t}\n\t/** Removes every item and resets the dropped counter. */\n\tclear() {\n\t\tthis.#items = emptySlots(this.capacity);\n\t\tthis.#start = 0;\n\t\tthis.#size = 0;\n\t\tthis.#dropped = 0;\n\t}\n};\n/**\n* Log store used by the UI: a visible ring buffer plus a pending buffer that fills up while the\n* view is paused. `push()` never drops silent data, it either appends to the visible buffer or to\n* the pending buffer; `resume()` moves the pending events into the visible buffer in order.\n*/\nvar LogStore = class {\n\tbuffer;\n\t#pending;\n\t#paused = false;\n\tconstructor(capacity = DEFAULT_CAPACITY) {\n\t\tthis.buffer = new LogRingBuffer(capacity);\n\t\tthis.#pending = new LogRingBuffer(capacity);\n\t}\n\t/** True when incoming events are buffered instead of appended to the visible buffer. */\n\tget paused() {\n\t\treturn this.#paused;\n\t}\n\t/** Number of visible lines. */\n\tget size() {\n\t\treturn this.buffer.size;\n\t}\n\t/** Number of lines held back while paused. */\n\tget pendingCount() {\n\t\treturn this.#pending.size;\n\t}\n\t/** Number of visible lines dropped because the buffer was full. */\n\tget droppedCount() {\n\t\treturn this.buffer.dropped;\n\t}\n\t/** Appends events to the visible buffer, or holds them back while paused. */\n\tpush(events) {\n\t\tif (this.#paused) {\n\t\t\tthis.#pending.pushMany(events);\n\t\t\treturn;\n\t\t}\n\t\tthis.buffer.pushMany(events);\n\t}\n\t/** Pauses or resumes appending. Resuming flushes the pending events immediately. */\n\tsetPaused(paused) {\n\t\tif (paused === this.#paused) return [];\n\t\tthis.#paused = paused;\n\t\treturn paused ? [] : this.flush();\n\t}\n\t/** Pauses appending to the visible buffer. */\n\tpause() {\n\t\tthis.#paused = true;\n\t}\n\t/** Resumes appending and returns the events flushed from the pending buffer. */\n\tresume() {\n\t\tthis.#paused = false;\n\t\treturn this.flush();\n\t}\n\t/** Moves every pending event into the visible buffer, oldest first. */\n\tflush() {\n\t\tconst flushed = this.#pending.toArray();\n\t\tthis.#pending.clear();\n\t\tthis.buffer.pushMany(flushed);\n\t\treturn flushed;\n\t}\n\t/** Copies the visible lines, oldest first. */\n\ttoArray() {\n\t\treturn this.buffer.toArray();\n\t}\n\t/** Empties the visible buffer and discards pending events. */\n\tclear() {\n\t\tthis.buffer.clear();\n\t\tthis.#pending.clear();\n\t}\n};\n//#endregion\nexport { detectLevelWithSource as a, eventKey as c, isLogLevel as d, levelColorClass as f, tokenizeJson as g, formatLogMessage as h, detectLevel as i, filterByLevel as l, findJsonInMessage as m, LEVEL_RANK as n, detectRequestId as o, mostCriticalLevel as p, LogStore as r, effectiveLevel as s, DEFAULT_CAPACITY as t, filterEvents as u };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"regions.js-IQPMyP5C.js","sources":["../../../../.svelte-kit/output/server/chunks/regions.js"],"sourcesContent":["//#region src/lib/regions.ts\n/**\n* Regions offered by the picker when `WATCH_STREAM_REGIONS` is not set.\n*\n* The list is every AWS region in the standard `aws` partition that publishes a\n* CloudWatch Logs endpoint, taken from the AWS CLI's own endpoint data\n* (`botocore/data/endpoints.json`, filtered to the `aws` partition and with the\n* FIPS pseudo-regions removed). `af-south-1` (Africa, Cape Town) is included.\n* The China, GovCloud and secret partitions are excluded on purpose.\n*\n* Shared by the server (`src/lib/server/regions.ts`) and the browser\n* (`src/lib/groups-client.ts`) so both agree on the same set.\n* Narrow it per deployment with `WATCH_STREAM_REGIONS=eu-west-1,af-south-1`.\n*/\nvar REGION_CODES = [\n\t\"us-east-1\",\n\t\"us-east-2\",\n\t\"us-west-1\",\n\t\"us-west-2\",\n\t\"ca-central-1\",\n\t\"ca-west-1\",\n\t\"mx-central-1\",\n\t\"sa-east-1\",\n\t\"eu-west-1\",\n\t\"eu-west-2\",\n\t\"eu-west-3\",\n\t\"eu-central-1\",\n\t\"eu-central-2\",\n\t\"eu-north-1\",\n\t\"eu-south-1\",\n\t\"eu-south-2\",\n\t\"af-south-1\",\n\t\"me-south-1\",\n\t\"me-central-1\",\n\t\"il-central-1\",\n\t\"ap-east-1\",\n\t\"ap-south-1\",\n\t\"ap-south-2\",\n\t\"ap-southeast-1\",\n\t\"ap-southeast-2\",\n\t\"ap-southeast-3\",\n\t\"ap-southeast-4\",\n\t\"ap-southeast-5\",\n\t\"ap-southeast-6\",\n\t\"ap-southeast-7\",\n\t\"ap-northeast-1\",\n\t\"ap-northeast-2\",\n\t\"ap-northeast-3\"\n];\n//#endregion\nexport { REGION_CODES as t };\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,YAAY,GAAG;AACnB,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,cAAc;AACf,CAAC,YAAY;AACb,CAAC,YAAY;AACb,CAAC,YAAY;AACb,CAAC,YAAY;AACb,CAAC,YAAY;AACb,CAAC,cAAc;AACf,CAAC,cAAc;AACf,CAAC,WAAW;AACZ,CAAC,YAAY;AACb,CAAC,YAAY;AACb,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC,gBAAgB;AACjB,CAAC;AACD;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"series-buckets.js-BjigySff.js","sources":["../../../../.svelte-kit/output/server/chunks/series-buckets.js"],"sourcesContent":["import { o as detectRequestId, p as mostCriticalLevel, s as effectiveLevel } from \"./log-buffer.js\";\n//#region src/lib/request-groups.ts\n/**\n* Request grouping: the one place that decides what a \"request\" is.\n*\n* CloudWatch Logs has no concept of a request. A request is a set of lines that\n* share a detected request id - a Lambda `REPORT RequestId: ...` line, an API\n* Gateway access log, a framework's structured `requestId` - and the same id\n* must produce the same group in the log view and in the chart. Both call the\n* helpers here, so a line that reads as one request in one view reads as one\n* request in the other.\n*\n* Design decisions:\n*\n* - A request is placed where it *starts* (its first line), because a request\n* that logs for two minutes is one event that happened, not two.\n* - A request's level is its most critical line. An error is what a reader\n* needs to see, even when twenty lines around it are info.\n* - Lines without a request id are not grouped: they keep their own row and\n* their own chart mark, which is honest about what the log contains.\n*/\n/**\n* Request id of an event.\n*\n* A value the server already detected wins, because it is the same value the\n* archive stored; only an event that carries no verdict is detected here.\n*/\nfunction requestIdOf(event) {\n\tif (event.requestId !== void 0) {\n\t\tconst declared = event.requestId;\n\t\treturn declared === null || declared === \"\" ? null : declared;\n\t}\n\treturn detectRequestId(event.message ?? \"\");\n}\n/** Level of a request: its worst line, or `unknown` when no line has a level. */\nfunction requestLevel(events) {\n\treturn mostCriticalLevel(events.map((event) => effectiveLevel(event))) ?? \"unknown\";\n}\n/** Groups events by request id, keeping every timestamp and byte of the originals. */\nfunction collectRequests(events) {\n\tconst byId = /* @__PURE__ */ new Map();\n\tevents.forEach((event, index) => {\n\t\tconst id = requestIdOf(event);\n\t\tif (id === null) return;\n\t\tconst existing = byId.get(id);\n\t\tif (existing === void 0) {\n\t\t\tbyId.set(id, {\n\t\t\t\tid,\n\t\t\t\tlevel: \"unknown\",\n\t\t\t\tfirst: event.timestamp,\n\t\t\t\tlast: event.timestamp,\n\t\t\t\tevents: [{\n\t\t\t\t\tevent,\n\t\t\t\t\tindex\n\t\t\t\t}]\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\texisting.events.push({\n\t\t\tevent,\n\t\t\tindex\n\t\t});\n\t\tif (Number.isFinite(event.timestamp)) {\n\t\t\tif (event.timestamp < existing.first) existing.first = event.timestamp;\n\t\t\tif (event.timestamp > existing.last) existing.last = event.timestamp;\n\t\t}\n\t});\n\tconst groups = [...byId.values()];\n\tfor (const group of groups) group.level = requestLevel(group.events.map((entry) => entry.event));\n\treturn groups;\n}\n/** True when an event belongs to a request. */\nfunction hasRequestId(event) {\n\treturn requestIdOf(event) !== null;\n}\n/**\n* Builds the log view's rows for a buffer.\n*\n* A request is placed where its first line appeared, so the view stays in time\n* order and a request never jumps down the list when its last line lands. The\n* lines inside a request keep their own order.\n*/\nfunction requestRows(events) {\n\tconst at = /* @__PURE__ */ new Map();\n\tfor (const group of collectRequests(events)) {\n\t\tconst first = group.events[0];\n\t\tif (first !== void 0) at.set(first.index, group);\n\t}\n\tconst rows = [];\n\tevents.forEach((event, index) => {\n\t\tconst group = at.get(index);\n\t\tif (group !== void 0) {\n\t\t\trows.push({\n\t\t\t\tkind: \"request\",\n\t\t\t\tkey: `req:${group.id}`,\n\t\t\t\trequest: group\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (hasRequestId(event)) return;\n\t\trows.push({\n\t\t\tkind: \"line\",\n\t\t\tkey: `line:${index}`,\n\t\t\tevent,\n\t\t\tindex\n\t\t});\n\t});\n\treturn rows;\n}\n/**\n* Counts requests into buckets, one mark per request, per group and level.\n*\n* A request is counted in the bucket its first line falls in, and only when\n* that first line is inside the window: a request that started before the window\n* is not re-counted in every bucket it touches. Lines that belong to no request\n* are still counted, each as one mark, so nothing disappears from the chart when\n* grouping is on. The level filter is applied to the request's most critical\n* level, matching what the archive answers, so the chips mean the same thing in\n* both sources.\n*/\nfunction bucketRequests(events, options) {\n\tconst bucketMs = options.bucketMs > 0 ? Math.round(options.bucketMs) : 6e4;\n\tconst levelFilter = options.level ?? null;\n\tconst fallbackGroup = options.fallbackGroup ?? \"\";\n\tconst marks = [];\n\tfor (const group of collectRequests(events)) marks.push({\n\t\tt: group.first,\n\t\tgroup: group.events[0]?.event.group ?? fallbackGroup,\n\t\tlevel: group.level\n\t});\n\tfor (const event of events) {\n\t\tif (requestIdOf(event) !== null) continue;\n\t\tmarks.push({\n\t\t\tt: event.timestamp,\n\t\t\tgroup: event.group ?? fallbackGroup,\n\t\t\tlevel: effectiveLevel(event) ?? \"unknown\"\n\t\t});\n\t}\n\tconst counts = /* @__PURE__ */ new Map();\n\tfor (const mark of marks) {\n\t\tconst timestamp = mark.t;\n\t\tif (!Number.isFinite(timestamp)) continue;\n\t\tif (timestamp < options.from || timestamp >= options.to) continue;\n\t\tif (levelFilter !== null && mark.level !== levelFilter) continue;\n\t\tconst t = Math.floor(timestamp / bucketMs) * bucketMs;\n\t\tconst name = mark.group;\n\t\tconst key = `${t}\\u0000${name}\\u0000${mark.level}`;\n\t\tconst existing = counts.get(key);\n\t\tif (existing === void 0) counts.set(key, {\n\t\t\tt,\n\t\t\tgroup: name,\n\t\t\tlevel: mark.level,\n\t\t\tevents: 1\n\t\t});\n\t\telse existing.events += 1;\n\t}\n\treturn [...counts.values()].toSorted((a, b) => a.t === b.t ? a.level.localeCompare(b.level) : a.t - b.t);\n}\n//#endregion\n//#region src/lib/series-buckets.ts\n/**\n* Client-side bucketing for the chart.\n*\n* The archive answers `/api/series` with counts it can compute in DuckDB, but a\n* CloudWatch view has no aggregate API, so the events already streamed into the\n* view are bucketed here instead. Both paths produce the same\n* {@link SeriesPoint} shape, so the chart has one data contract.\n*/\n/** Severity order used wherever levels are listed. */\nvar LEVEL_ORDER = [\n\t\"error\",\n\t\"warn\",\n\t\"info\",\n\t\"debug\",\n\t\"unknown\"\n];\n/** Label shown for a level. */\nvar LEVEL_LABELS = {\n\terror: \"Error\",\n\twarn: \"Warn\",\n\tinfo: \"Info\",\n\tdebug: \"Debug\",\n\tunknown: \"No level\"\n};\n/**\n* Chart palette per level, matching the colours the log viewer uses for lines.\n*\n* SVG needs real colour values rather than Tailwind classes, so the palette is\n* kept next to the level helpers instead of in the component.\n*/\nvar SERIES_LEVEL_COLOR = {\n\terror: \"#f87171\",\n\twarn: \"#fcd34d\",\n\tinfo: \"#a3a3a3\",\n\tdebug: \"#737373\",\n\tunknown: \"#525252\"\n};\n/** Bucket width used when a caller does not ask for one. */\nvar DEFAULT_BUCKET_MS = 6e4;\n/** Level of an event as the chart counts it. */\nfunction seriesLevelOf(event) {\n\treturn effectiveLevel(event) ?? \"unknown\";\n}\n/**\n* Counts events into buckets of one width, per group and level.\n*\n* Events outside the window are ignored, as are events without a usable\n* timestamp: the chart describes exactly the window it is drawn for. With\n* `byRequest`, a request is one mark instead of its lines being many, which is\n* the same thing the archive counts in SQL.\n*/\nfunction bucketEvents(events, options) {\n\tconst requested = options.bucketMs ?? 6e4;\n\tconst bucketMs = Number.isFinite(requested) && requested > 0 ? Math.round(requested) : DEFAULT_BUCKET_MS;\n\tconst levelFilter = options.level ?? null;\n\tconst fallbackGroup = options.fallbackGroup ?? \"\";\n\tif (options.byRequest === true) return bucketRequests(events, {\n\t\tfrom: options.from,\n\t\tto: options.to,\n\t\tbucketMs,\n\t\tlevel: levelFilter,\n\t\tfallbackGroup\n\t});\n\tconst counts = /* @__PURE__ */ new Map();\n\tfor (const event of events) {\n\t\tconst timestamp = event.timestamp;\n\t\tif (!Number.isFinite(timestamp)) continue;\n\t\tif (timestamp < options.from || timestamp >= options.to) continue;\n\t\tconst level = seriesLevelOf(event);\n\t\tif (levelFilter !== null && level !== levelFilter) continue;\n\t\tconst t = Math.floor(timestamp / bucketMs) * bucketMs;\n\t\tconst group = event.group ?? fallbackGroup;\n\t\tconst key = `${t}\\u0000${group}\\u0000${level}`;\n\t\tconst existing = counts.get(key);\n\t\tif (existing === void 0) counts.set(key, {\n\t\t\tt,\n\t\t\tgroup,\n\t\t\tlevel,\n\t\t\tevents: 1\n\t\t});\n\t\telse existing.events += 1;\n\t}\n\treturn [...counts.values()].toSorted((a, b) => a.t === b.t ? a.level.localeCompare(b.level) : a.t - b.t);\n}\n/**\n* Splits points into one series per level, in severity order.\n*\n* A level with no events is left out, so the legend only names what is drawn.\n*/\nfunction groupByLevel(points) {\n\tconst byLevel = /* @__PURE__ */ new Map();\n\tfor (const point of points) {\n\t\tconst bucket = byLevel.get(point.level);\n\t\tif (bucket === void 0) byLevel.set(point.level, [point]);\n\t\telse bucket.push(point);\n\t}\n\treturn LEVEL_ORDER.filter((level) => byLevel.has(level)).map((level) => {\n\t\tconst levelPoints = (byLevel.get(level) ?? []).toSorted((a, b) => a.t - b.t);\n\t\treturn {\n\t\t\tlevel,\n\t\t\tlabel: LEVEL_LABELS[level],\n\t\t\tpoints: levelPoints,\n\t\t\tevents: levelPoints.reduce((sum, point) => sum + point.events, 0)\n\t\t};\n\t});\n}\n/** Fraction of the window a brush must stay under to count as a zoom. */\nvar MAX_BRUSH_FRACTION = .98;\n/**\n* True when a brushed range is a deliberate zoom rather than a stray click.\n*\n* A pointer down and up a couple of pixels apart still produces a range (the\n* chart has a minimum selection width), and a double click on empty space\n* selects the whole domain. Acting on either would re-scope the log view to a\n* window with nothing in it, so a brush is only applied when it spans at least\n* two buckets and a floor of {@link MIN_BRUSH_MS}, and is narrower than almost\n* the whole window.\n*/\nfunction isMeaningfulBrush(range, window, bucketMs) {\n\tconst span = range.to - range.from;\n\tif (!Number.isFinite(span) || span <= 0) return false;\n\tconst windowSpan = window.to - window.from;\n\tif (!Number.isFinite(windowSpan) || windowSpan <= 0) return false;\n\tif (span < Math.max(3e4, bucketMs * 2)) return false;\n\treturn span <= windowSpan * MAX_BRUSH_FRACTION;\n}\n//#endregion\nexport { isMeaningfulBrush as a, groupByLevel as i, SERIES_LEVEL_COLOR as n, requestRows as o, bucketEvents as r, LEVEL_LABELS as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-83Ch7djd.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/archive/_server.ts.js"],"sourcesContent":["import { t as getArchive } from \"../../../../chunks/archive.js\";\nimport { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/routes/api/archive/+server.ts\n/**\n* `GET /api/archive` - what the local DuckDB archive holds.\n*\n* Never fails: an archive that is off by configuration, missing its optional\n* driver or unreadable answers 200 with `available: false` and the reason, so\n* the UI can hide the archive view instead of showing an error.\n*/\nvar GET = async () => {\n\tconst status = await (await getArchive(readEnv())).status();\n\tconst body = {\n\t\tpath: status.path,\n\t\tavailable: status.available,\n\t\terror: status.error,\n\t\tbytes: status.bytes,\n\t\trows: status.totals.rows,\n\t\tgroups: status.totals.groups,\n\t\tregions: status.totals.regions,\n\t\toldest: status.totals.oldest,\n\t\tnewest: status.totals.newest\n\t};\n\treturn json(body);\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,YAAY;AACtB,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;AAC5D,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI;AACnB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS;AAC7B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;AACrB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;AACrB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;AAC1B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;AAC9B,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;AAChC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;AAC9B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACxB,EAAE;AACF,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-VctnBhIJ.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/health/_server.ts.js"],"sourcesContent":["import { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as describeAwsError, c as resolveEffectiveRegion, l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, r as createLogsClient, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/routes/api/health/+server.ts\n/**\n* `GET /api/health?region=` - reports the effective CloudWatch Logs region and endpoint.\n*\n* The region is optional: when it is not supplied anywhere the SDK resolves it\n* from the ambient AWS configuration.\n*/\nvar GET = async ({ url }) => {\n\tconst parsed = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsed.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst config = resolveAwsConfig(readEnv(), parsed.region);\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tconst body = {\n\t\t\tok: true,\n\t\t\tregion: await resolveEffectiveRegion(client, config),\n\t\t\tendpoint: config.endpoint,\n\t\t\tlocal: config.local,\n\t\t\tcredentials: config.credentials\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient?.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK;AAC7B,CAAC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AAC1E,CAAC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AAC1D,CAAC,IAAI,MAAM;AACX,CAAC,IAAI;AACL,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACnC,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,EAAE,EAAE,IAAI;AACX,GAAG,MAAM,EAAE,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;AACvD,GAAG,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC5B,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK;AACtB,GAAG,WAAW,EAAE,MAAM,CAAC;AACvB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAC3C,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC;AACzD,CAAC,CAAC,SAAS;AACX,EAAE,MAAM,EAAE,OAAO,EAAE;AACnB,CAAC;AACD;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-Dt540Sio.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/identity/_server.ts.js"],"sourcesContent":["import { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as describeAwsError, c as resolveEffectiveRegion, i as createStsClient, l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { json } from \"@sveltejs/kit\";\nimport { GetCallerIdentityCommand } from \"@aws-sdk/client-sts\";\n//#region src/lib/server/identity.ts\n/**\n* `sts:GetCallerIdentity` for the resolved configuration.\n*\n* This is the cheapest honest answer to \"do these credentials work, and whose\n* are they?\": one call, no permissions beyond the implicit\n* `sts:GetCallerIdentity`, and it returns the ARN to show the user.\n*/\n/** Reads the caller identity with an existing client. */\nasync function getCallerIdentityWith(client, options = {}) {\n\tconst response = await client.send(new GetCallerIdentityCommand({}), { abortSignal: options.signal });\n\treturn {\n\t\tarn: response.Arn ?? \"\",\n\t\taccount: response.Account ?? \"\",\n\t\tuserId: response.UserId ?? \"\"\n\t};\n}\n//#endregion\n//#region src/routes/api/identity/+server.ts\n/**\n* `GET /api/identity` - whose credentials are these?\n*\n* `sts:GetCallerIdentity` needs no permissions of its own, so a 200 here means\n* the ambient credentials are usable, and the ARN says which account they belong\n* to. The CLI uses it to avoid offering a login for a profile that already\n* works, and to report what it signed in as.\n*\n* The region is optional, like everywhere else: without one the SDK resolves it\n* from the ambient configuration.\n*/\nvar GET = async ({ url, request }) => {\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsedRegion.region);\n\tlet client;\n\tlet region;\n\ttry {\n\t\tclient = createStsClient(config);\n\t\tregion = await resolveEffectiveRegion(client, config);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t}\n\ttry {\n\t\tconst body = {\n\t\t\t...await getCallerIdentityWith(client, { signal: request.signal }),\n\t\t\tregion,\n\t\t\tendpoint: config.endpoint\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tif (request.signal.aborted || error instanceof Error && error.name === \"AbortError\") return apiError(499, \"The client closed the request before STS replied\", \"aborted\");\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC3D,CAAC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACtG,CAAC,OAAO;AACR,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE;AACzB,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;AACjC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI;AAC7B,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK;AACtC,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AAChF,CAAC,MAAM,GAAG,GAAG,OAAO,EAAE;AACtB,CAAC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC;AAC1D,CAAC,IAAI,MAAM;AACX,CAAC,IAAI,MAAM;AACX,CAAC,IAAI;AACL,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;AAClC,EAAE,MAAM,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;AACvD,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAC3C,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC;AACzD,CAAC;AACD,CAAC,IAAI;AACL,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACrE,GAAG,MAAM;AACT,GAAG,QAAQ,EAAE,MAAM,CAAC;AACpB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,kDAAkD,EAAE,SAAS,CAAC;AAC1K,EAAE,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAC3C,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC;AACzD,CAAC,CAAC,SAAS;AACX,EAAE,MAAM,CAAC,OAAO,EAAE;AAClB,CAAC;AACD;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-drLgUdvB.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/log-groups/_server.ts.js"],"sourcesContent":["import { t as getArchive } from \"../../../../chunks/archive.js\";\nimport { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as describeAwsError, c as resolveEffectiveRegion, l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, r as createLogsClient, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { n as parseSourceParam, t as SOURCE_PARAM_HINT } from \"../../../../chunks/source.js\";\nimport { json } from \"@sveltejs/kit\";\nimport { DescribeLogGroupsCommand } from \"@aws-sdk/client-cloudwatch-logs\";\n//#region src/lib/server/log-groups.ts\n/** Page size requested from `DescribeLogGroups` (the API maximum). */\nvar PAGE_SIZE = 50;\nvar DEFAULT_LIMIT = 200;\nvar MIN_LIMIT = 1;\nvar MAX_LIMIT$1 = 1e3;\n/** Clamps the result limit into the supported 1..1000 range. */\nfunction clampLimit(limit) {\n\tif (limit === void 0 || !Number.isFinite(limit)) return DEFAULT_LIMIT;\n\treturn Math.min(Math.max(Math.floor(limit), MIN_LIMIT), MAX_LIMIT$1);\n}\n/** Maps an SDK log group onto the wire type, omitting absent fields. */\nfunction toSummary(group) {\n\tconst summary = { name: group.logGroupName ?? \"\" };\n\tif (group.arn !== void 0) summary.arn = group.arn;\n\tif (group.storedBytes !== void 0) summary.storedBytes = group.storedBytes;\n\tif (group.retentionInDays !== void 0) summary.retentionInDays = group.retentionInDays;\n\tif (group.creationTime !== void 0) summary.creationTime = group.creationTime;\n\treturn summary;\n}\n/** Locale-independent name comparison for a stable sort. */\nfunction byName(a, b) {\n\tif (a.name === b.name) return 0;\n\treturn a.name < b.name ? -1 : 1;\n}\n/**\n* Lists log groups for a region.\n*\n* Pages through `DescribeLogGroups` (50 per page, honouring `nextToken`),\n* filters by prefix on the client too because some emulators ignore\n* `logGroupNamePrefix`, de-duplicates by name, sorts by name and stops at\n* `limit` (default 200, clamped to 1..1000).\n*/\nasync function listLogGroups(client, options = {}) {\n\tconst prefix = options.prefix?.trim() ?? \"\";\n\tconst limit = clampLimit(options.limit);\n\tconst { signal } = options;\n\tconst collected = [];\n\tconst seenNames = /* @__PURE__ */ new Set();\n\tlet nextToken;\n\tdo {\n\t\tif (signal?.aborted) break;\n\t\tconst input = { limit: PAGE_SIZE };\n\t\tif (nextToken !== void 0) input.nextToken = nextToken;\n\t\tif (prefix.length > 0) input.logGroupNamePrefix = prefix;\n\t\tconst response = await client.send(new DescribeLogGroupsCommand(input), { abortSignal: signal });\n\t\tfor (const group of response.logGroups ?? []) {\n\t\t\tconst name = group.logGroupName;\n\t\t\tif (name === void 0 || name.length === 0) continue;\n\t\t\tif (prefix.length > 0 && !name.startsWith(prefix)) continue;\n\t\t\tif (seenNames.has(name)) continue;\n\t\t\tseenNames.add(name);\n\t\t\tcollected.push(toSummary(group));\n\t\t\tif (collected.length >= limit) break;\n\t\t}\n\t\tnextToken = response.nextToken;\n\t} while (nextToken !== void 0 && nextToken.length > 0 && collected.length < limit);\n\treturn collected.toSorted(byName);\n}\n/** Maps archived group rows onto the summary the group list renders. */\nfunction archivedGroupSummaries(rows) {\n\treturn rows.map((row) => {\n\t\tconst summary = {\n\t\t\tname: row.logGroup,\n\t\t\tarchivedEvents: row.events\n\t\t};\n\t\tif (row.oldest !== null) summary.archivedOldest = row.oldest;\n\t\tif (row.newest !== null) summary.archivedNewest = row.newest;\n\t\treturn summary;\n\t});\n}\n/**\n* Lists the log groups the local archive holds.\n*\n* The archive needs no credentials, so this works when CloudWatch is\n* unreachable. Groups are filtered by prefix and clamped to `limit` in process,\n* because the query already returns at most one row per group.\n*/\nfunction listArchivedGroups(rows, options = {}) {\n\tconst prefix = options.prefix?.trim() ?? \"\";\n\tconst limit = clampLimit(options.limit);\n\treturn archivedGroupSummaries(rows).filter((summary) => prefix.length === 0 || summary.name.startsWith(prefix)).slice(0, limit).toSorted(byName);\n}\n//#endregion\n//#region src/routes/api/log-groups/+server.ts\nvar MAX_LIMIT = 1e3;\n/**\n* `GET /api/log-groups?region=&prefix=&limit=&source=` - lists log groups.\n*\n* `source=cloudwatch` (the default) asks CloudWatch Logs for the region; the\n* region is optional there, because the SDK resolves it from the ambient AWS\n* configuration. `source=archive` lists what the local DuckDB file holds for\n* that region and needs no credentials at all. `request.signal` is forwarded to\n* the SDK so a disconnected client cancels the pagination loop.\n*/\nvar GET = async ({ url, request }) => {\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst limitRaw = url.searchParams.get(\"limit\")?.trim() ?? \"\";\n\tlet limit;\n\tif (limitRaw.length > 0) {\n\t\tconst parsed = Number(limitRaw);\n\t\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > MAX_LIMIT) return apiError(400, `Invalid limit: expected an integer between 1 and ${MAX_LIMIT}`, \"invalid-limit\");\n\t\tlimit = parsed;\n\t} else {\n\t\tconst configured = Number((env.WATCH_STREAM_LIMIT ?? \"\").trim());\n\t\tif (Number.isInteger(configured) && configured >= 1 && configured <= MAX_LIMIT) limit = configured;\n\t}\n\tconst prefix = url.searchParams.get(\"prefix\")?.trim();\n\tconst source = parseSourceParam(url.searchParams.get(\"source\"));\n\tif (source === null) return apiError(400, SOURCE_PARAM_HINT, \"invalid-source\");\n\tconst config = resolveAwsConfig(env, parsedRegion.region);\n\tif (source === \"archive\") {\n\t\tconst groups = listArchivedGroups(await (await getArchive(env)).groups(config.region), {\n\t\t\tprefix,\n\t\t\tlimit\n\t\t});\n\t\tconst body = {\n\t\t\tregion: config.region ?? \"\",\n\t\t\tendpoint: null,\n\t\t\tsource,\n\t\t\tgroups\n\t\t};\n\t\treturn json(body);\n\t}\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tconst region = await resolveEffectiveRegion(client, config);\n\t\tconst groups = await listLogGroups(client, {\n\t\t\tprefix: prefix !== void 0 && prefix.length > 0 ? prefix : void 0,\n\t\t\tlimit,\n\t\t\tsignal: request.signal\n\t\t});\n\t\tconst body = {\n\t\t\tregion,\n\t\t\tendpoint: config.endpoint,\n\t\t\tsource,\n\t\t\tgroups\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tif (request.signal.aborted || error instanceof Error && error.name === \"AbortError\") return apiError(499, \"The client closed the request before CloudWatch Logs replied\", \"aborted\");\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient?.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-CBqfN6Pg.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/regions/_server.ts.js"],"sourcesContent":["import { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as describeAwsError, c as resolveEffectiveRegion, l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, r as createLogsClient, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { t as REGION_CODES } from \"../../../../chunks/regions.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/lib/server/regions.ts\n/**\n* Region list used when `WATCH_STREAM_REGIONS` is unset.\n*\n* Every AWS region that publishes CloudWatch Logs endpoints, including\n* `af-south-1`; see `$lib/regions`.\n*/\nvar FALLBACK_REGIONS = [...REGION_CODES];\n/** Splits a comma-separated region list, trimming and dropping blanks. */\nfunction parseRegionList(value) {\n\tif (typeof value !== \"string\") return [];\n\tconst regions = [];\n\tfor (const part of value.split(\",\")) {\n\t\tconst region = part.trim();\n\t\tif (region.length > 0 && !regions.includes(region)) regions.push(region);\n\t}\n\treturn regions;\n}\n/** Trims a value and treats blank strings as absent. */\nfunction normalize(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : null;\n}\n/**\n* Resolves the region list for the picker plus the default region.\n*\n* `defaultRegion` is the explicit environment region when set, otherwise\n* `effectiveRegion` (usually the region the SDK resolved from the ambient AWS\n* configuration), otherwise `us-east-1`. The list comes from\n* `WATCH_STREAM_REGIONS` when set, otherwise from {@link FALLBACK_REGIONS}, and\n* the default region is always present: it is prepended when missing, keeping\n* the remaining order de-duplicated.\n*/\nfunction resolveRegions(env, effectiveRegion) {\n\tconst { region: envRegion } = resolveAwsConfig(env);\n\tconst defaultRegion = envRegion ?? normalize(effectiveRegion) ?? \"us-east-1\";\n\tconst configured = parseRegionList(env.WATCH_STREAM_REGIONS);\n\tconst regions = configured.length > 0 ? configured : [...FALLBACK_REGIONS];\n\tif (!regions.includes(defaultRegion)) regions.unshift(defaultRegion);\n\treturn {\n\t\tregions,\n\t\tdefaultRegion\n\t};\n}\n//#endregion\n//#region src/routes/api/regions/+server.ts\n/**\n* `GET /api/regions?region=` - region list for the picker plus the effective region.\n*\n* The effective region becomes `defaultRegion`, so a region resolved from the\n* ambient AWS configuration is selected by default.\n*/\nvar GET = async ({ url }) => {\n\tconst parsed = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsed.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsed.region);\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tconst { regions, defaultRegion } = resolveRegions(env, await resolveEffectiveRegion(client, config));\n\t\tconst body = {\n\t\t\tregions,\n\t\t\tdefaultRegion,\n\t\t\tendpoint: config.endpoint\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient?.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-DOvBhEDU.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/series/_server.ts.js"],"sourcesContent":["import { t as getArchive } from \"../../../../chunks/archive.js\";\nimport { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { n as parseSourceParam, t as SOURCE_PARAM_HINT } from \"../../../../chunks/source.js\";\nimport { i as parseGroupParams, n as parseLevelParam, o as parseDurationMs, s as resolveWindow, t as LEVEL_PARAM_HINT } from \"../../../../chunks/level-filter.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/lib/server/series.ts\n/** Message used when a caller asks for a series the app cannot aggregate. */\nvar SERIES_SOURCE_HINT = \"Series are only aggregated for source=archive; a live CloudWatch view buckets the events it has loaded\";\n/** Message used when the `by` parameter names something that is not a grouping. */\nvar GROUP_BY_PARAM_HINT = \"Invalid by: expected \\\"event\\\" or \\\"request\\\"\";\n/** Bucket widths offered to an automatic window, smallest first. */\nvar BUCKET_LADDER = [\n\t1e3,\n\t5e3,\n\t1e4,\n\t3e4,\n\t6e4,\n\t3e5,\n\t9e5,\n\t18e5,\n\t36e5,\n\t108e5,\n\t216e5,\n\t432e5,\n\t864e5,\n\t6048e5\n];\n/** Bounds on an explicit bucket width. */\nvar MIN_BUCKET_MS = 1e3;\nvar MAX_BUCKET_MS = 6048e5;\n/**\n* Picks a bucket width for a window.\n*\n* The smallest ladder step that keeps the number of buckets at or below\n* {@link TARGET_BUCKETS} wins, so a fifteen-minute window is bucketed in seconds\n* and a week in hours, and the axis never renders thousands of ticks.\n*/\nfunction chooseBucketMs(windowMs, target = 90) {\n\tconst span = Number.isFinite(windowMs) && windowMs > 0 ? windowMs : 6e4;\n\tconst wanted = Math.max(1, Math.round(target));\n\tfor (const step of BUCKET_LADDER) if (span / step <= wanted) return step;\n\treturn BUCKET_LADDER.at(-1);\n}\n/**\n* Reads an explicit `bucket` parameter.\n*\n* Accepts a duration (`30s`, `5m`, `2h`) or plain milliseconds, and returns\n* `null` for anything unusable so the caller falls back to an automatic width.\n* The result is clamped to {@link MIN_BUCKET_MS}..{@link MAX_BUCKET_MS}.\n*/\nfunction parseBucketParam(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tconst ms = /^\\d+$/.test(trimmed) ? Number(trimmed) : parseDurationMs(trimmed);\n\tif (ms === null || !Number.isFinite(ms) || ms <= 0) return null;\n\treturn Math.min(Math.max(Math.round(ms), MIN_BUCKET_MS), MAX_BUCKET_MS);\n}\n/**\n* Parses the `by` parameter: what one mark on the chart counts.\n*\n* Returns `null` when the parameter is absent or blank (the default grouping) and\n* `undefined` when it names something this app cannot group by, so the caller can\n* answer 400 instead of silently charting a different question.\n*/\nfunction parseGroupByParam(value) {\n\tif (value === null || value === void 0) return null;\n\tconst word = value.trim().toLowerCase();\n\tif (word.length === 0) return null;\n\tif (word === \"event\" || word === \"request\") return word;\n}\n/** Sums rows per level, in a fixed severity order. */\nfunction summariseLevels(points) {\n\tconst order = [\n\t\t\"error\",\n\t\t\"warn\",\n\t\t\"info\",\n\t\t\"debug\",\n\t\t\"unknown\"\n\t];\n\tconst totals = /* @__PURE__ */ new Map();\n\tfor (const point of points) totals.set(point.level, (totals.get(point.level) ?? 0) + point.events);\n\treturn order.filter((level) => totals.has(level)).map((level) => ({\n\t\tlevel,\n\t\tevents: totals.get(level)\n\t}));\n}\n/** Sums rows per group, busiest first. */\nfunction summariseGroups(points) {\n\tconst totals = /* @__PURE__ */ new Map();\n\tfor (const point of points) totals.set(point.group, (totals.get(point.group) ?? 0) + point.events);\n\treturn [...totals.entries()].map(([group, events]) => ({\n\t\tgroup,\n\t\tevents\n\t})).toSorted((a, b) => b.events === a.events ? a.group.localeCompare(b.group) : b.events - a.events);\n}\n/**\n* Builds the response body from raw bucket rows.\n*\n* `groupBy` is echoed back, so the chart can label its marks without guessing\n* which question it asked; it is set on every response, the empty one included.\n*/\nfunction buildSeriesResponse(input) {\n\tconst points = input.rows.map((row) => ({\n\t\tt: row.t,\n\t\tgroup: row.group,\n\t\tlevel: row.level,\n\t\tevents: row.events\n\t}));\n\treturn {\n\t\tfrom: input.from,\n\t\tto: input.to,\n\t\tbucketMs: input.bucketMs,\n\t\tgroupBy: input.groupBy,\n\t\tlevels: summariseLevels(points),\n\t\tgroups: summariseGroups(points),\n\t\tpoints,\n\t\ttotals: {\n\t\t\tevents: points.reduce((sum, point) => sum + point.events, 0),\n\t\t\tpoints: points.length\n\t\t}\n\t};\n}\n/**\n* Reads the archived counts for a window.\n*\n* An unavailable archive answers an empty series rather than an error, so the\n* chart can show \"nothing archived yet\" instead of a failure. `by` picks what a\n* mark counts and defaults to one mark per event.\n*/\nasync function readSeries(input) {\n\tconst bucketMs = input.bucketMs ?? chooseBucketMs(input.to - input.from);\n\tconst groupBy = input.by ?? \"event\";\n\tconst empty = buildSeriesResponse({\n\t\tfrom: input.from,\n\t\tto: input.to,\n\t\tbucketMs,\n\t\tgroupBy,\n\t\trows: []\n\t});\n\tif (!input.archive.available) return empty;\n\tconst rows = await input.archive.seriesQuery({\n\t\tregion: input.region,\n\t\tlogGroups: input.logGroups,\n\t\tstartTime: input.from,\n\t\tendTime: input.to,\n\t\tbucketMs,\n\t\tlevels: input.levels ?? null,\n\t\tby: groupBy\n\t});\n\treturn buildSeriesResponse({\n\t\tfrom: input.from,\n\t\tto: input.to,\n\t\tbucketMs,\n\t\tgroupBy,\n\t\trows\n\t});\n}\n//#endregion\n//#region src/routes/api/series/+server.ts\n/**\n* `GET /api/series` - counts per time bucket, per group and level.\n*\n* This is the chart's data. Only the archive can answer it: DuckDB counts a\n* whole window in one statement, while CloudWatch Logs has no aggregate API, so\n* the UI buckets the events it already streamed for a live or CloudWatch view.\n* `by=request` counts requests instead of lines, placing each request at its\n* first line and colouring it by its most critical level.\n*\n* The window is not clamped to CloudWatch's 14 days, because the archive keeps\n* what CloudWatch has already dropped.\n*/\nvar GET = async ({ url }) => {\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst source = parseSourceParam(url.searchParams.get(\"source\"));\n\tif (source === null) return apiError(400, SOURCE_PARAM_HINT, \"invalid-source\");\n\tif (source !== \"archive\") return apiError(400, SERIES_SOURCE_HINT, \"unsupported-source\");\n\tconst groups = parseGroupParams(url.searchParams.get(\"group\"), url.searchParams.get(\"groups\"));\n\tif (!groups.ok) return apiError(400, groups.message, groups.code);\n\tconst levels = parseLevelParam(url.searchParams.get(\"level\"));\n\tif (levels === void 0) return apiError(400, LEVEL_PARAM_HINT, \"invalid-level\");\n\tconst by = parseGroupByParam(url.searchParams.get(\"by\"));\n\tif (by === void 0) return apiError(400, GROUP_BY_PARAM_HINT, \"invalid-group-by\");\n\tconst env = readEnv();\n\tconst region = resolveAwsConfig(env, parsedRegion.region).region ?? \"\";\n\tif (region === \"\") return apiError(400, \"Query parameter \\\"region\\\" is required when source=archive\", \"missing-region-param\");\n\tconst window = resolveWindow({\n\t\tmode: \"historic\",\n\t\trange: url.searchParams.get(\"range\"),\n\t\tfrom: url.searchParams.get(\"from\"),\n\t\tto: url.searchParams.get(\"to\"),\n\t\tnow: Date.now()\n\t}, { maxLookbackMs: null });\n\tif (!window.ok) return apiError(400, window.message, window.code);\n\tconst endTime = window.endTime ?? Date.now();\n\tconst series = await readSeries({\n\t\tarchive: await getArchive(env),\n\t\tregion,\n\t\tlogGroups: groups.names,\n\t\tfrom: window.startTime,\n\t\tto: endTime,\n\t\tlevels,\n\t\tby,\n\t\tbucketMs: parseBucketParam(url.searchParams.get(\"bucket\"))\n\t});\n\treturn json(series);\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts.js-B9_-4ssJ.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/stream/_server.ts.js"],"sourcesContent":["import { t as getArchive } from \"../../../../chunks/archive.js\";\nimport { t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as describeAwsError, c as resolveEffectiveRegion, l as apiError, n as REGION_PARAM_HINT, o as parseRegionParam, r as createLogsClient, s as resolveAwsConfig } from \"../../../../chunks/aws.js\";\nimport { n as parseSourceParam, t as SOURCE_PARAM_HINT } from \"../../../../chunks/source.js\";\nimport { a as clampPollMs, i as parseGroupParams, n as parseLevelParam, r as withDetections, s as resolveWindow, t as LEVEL_PARAM_HINT } from \"../../../../chunks/level-filter.js\";\nimport \"@sveltejs/kit\";\nimport { FilterLogEventsCommand } from \"@aws-sdk/client-cloudwatch-logs\";\n//#region src/lib/server/live-streams.ts\nvar closers = /* @__PURE__ */ new Set();\nvar listening = false;\n/** Ends every open stream, and reports how many were open. */\nfunction closeLiveStreams() {\n\tconst count = closers.size;\n\tfor (const close of closers) try {\n\t\tclose();\n\t} catch {}\n\tclosers.clear();\n\treturn count;\n}\n/**\n* Registers an open stream, and returns the function that unregisters it.\n*\n* The signal handlers are installed with the first stream and stay installed,\n* so a server that has served a tail stops promptly for the rest of its life.\n*/\nfunction registerLiveStream(close) {\n\tif (!listening) {\n\t\tlistening = true;\n\t\tprocess.on(\"SIGINT\", () => closeLiveStreams());\n\t\tprocess.on(\"SIGTERM\", () => closeLiveStreams());\n\t}\n\tclosers.add(close);\n\treturn () => {\n\t\tclosers.delete(close);\n\t};\n}\n//#endregion\n//#region src/lib/server/archive-tail.ts\n/** Page size used when the caller does not ask for one. */\nvar DEFAULT_ARCHIVE_PAGE_SIZE = 1e3;\n/** Upper bound on one page, so a huge window cannot exhaust memory. */\nvar MAX_ARCHIVE_PAGE_SIZE = 5e3;\n/** Events one archive request may return before it stops (matches the tailer). */\nvar DEFAULT_ARCHIVE_MAX_EVENTS = 1e4;\n/** Message shown when DuckDB is missing or the file cannot be opened. */\nfunction archiveUnavailableMessage(archive) {\n\tconst reason = archive.error;\n\tconst base = \"The local archive is not available on this machine\";\n\treturn reason === null || reason.length === 0 ? base : `${base}: ${reason}`;\n}\n/**\n* Yields archived events for one window, oldest first.\n*\n* An unavailable archive produces a single `error` batch instead of throwing, so\n* the browser shows a normal stream error. An aborted signal ends the generator\n* without yielding an `end` batch, which is what the route treats as a\n* client disconnect.\n*/\nasync function* tailArchivedEvents(options) {\n\tconst { archive, region, logGroups, startTime, endTime, search = null, streamPrefix = null, levels = null, signal } = options;\n\tif (!archive.available) {\n\t\tyield {\n\t\t\ttype: \"error\",\n\t\t\tmessage: archiveUnavailableMessage(archive),\n\t\t\tcode: \"archive-unavailable\"\n\t\t};\n\t\treturn;\n\t}\n\tconst requestedPageSize = options.pageSize ?? 1e3;\n\tconst pageSize = Math.min(Math.max(Number.isFinite(requestedPageSize) ? Math.round(requestedPageSize) : DEFAULT_ARCHIVE_PAGE_SIZE, 1), MAX_ARCHIVE_PAGE_SIZE);\n\tconst requestedMax = options.maxEvents ?? 1e4;\n\tconst maxEvents = Number.isFinite(requestedMax) && requestedMax > 0 ? Math.floor(requestedMax) : DEFAULT_ARCHIVE_MAX_EVENTS;\n\tlet cursor = null;\n\tlet emitted = 0;\n\tfor (;;) {\n\t\tif (signal?.aborted === true) return;\n\t\tconst page = await archive.page({\n\t\t\tregion,\n\t\t\tlogGroups,\n\t\t\tstartTime,\n\t\t\tendTime,\n\t\t\tsearch,\n\t\t\tstreamPrefix,\n\t\t\tlevels,\n\t\t\tafter: cursor,\n\t\t\tlimit: pageSize\n\t\t});\n\t\tif (page.events.length === 0) {\n\t\t\tyield {\n\t\t\t\ttype: \"end\",\n\t\t\t\treason: \"window-complete\"\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\temitted += page.events.length;\n\t\tyield {\n\t\t\ttype: \"events\",\n\t\t\tevents: page.events\n\t\t};\n\t\tcursor = page.last;\n\t\tif (cursor === null || page.events.length < pageSize) {\n\t\t\tyield {\n\t\t\t\ttype: \"end\",\n\t\t\t\treason: \"window-complete\"\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tif (emitted >= maxEvents) {\n\t\t\tyield {\n\t\t\t\ttype: \"end\",\n\t\t\t\treason: \"event-limit\"\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t}\n}\n//#endregion\n//#region src/lib/server/multi-tail.ts\n/** Events-payload batch reasons, worst first. */\nvar END_PRECEDENCE = [\n\t\"repeated-errors\",\n\t\"event-limit\",\n\t\"window-complete\"\n];\n/** Picks the most serious end reason from the sources. */\nfunction mergeEndReason(reasons) {\n\tfor (const candidate of END_PRECEDENCE) if (reasons.includes(candidate)) return candidate;\n\treturn \"window-complete\";\n}\n/**\n* Yields every batch of every source, then one `end`.\n*\n* A failing source yields its own `error` batch; it never cancels the others, so\n* one unreadable group does not silence the rest of the view.\n*/\nasync function* mergeTails(sources) {\n\tif (sources.length === 0) return;\n\tif (sources.length === 1) {\n\t\tyield* sources[0];\n\t\treturn;\n\t}\n\tconst queue = [];\n\tlet waiting = null;\n\t/** Sources whose end marker has been consumed, so their batches are all out. */\n\tlet completed = 0;\n\tconst endReasons = [];\n\tconst push = (item) => {\n\t\tqueue.push(item);\n\t\tconst wake = waiting;\n\t\twaiting = null;\n\t\twake?.();\n\t};\n\tfor (const source of sources) (async () => {\n\t\tlet endReason = null;\n\t\ttry {\n\t\t\tfor await (const batch of source) if (batch.type === \"end\") endReason = batch.reason;\n\t\t\telse push({ batch });\n\t\t} catch {} finally {\n\t\t\tif (endReason !== null) endReasons.push(endReason);\n\t\t\tpush({ done: true });\n\t\t}\n\t})();\n\tfor (;;) {\n\t\tif (queue.length === 0) {\n\t\t\tif (completed >= sources.length) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"end\",\n\t\t\t\t\treason: mergeEndReason(endReasons)\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\twaiting = resolve;\n\t\t\t\tif (queue.length > 0 || completed >= sources.length) {\n\t\t\t\t\twaiting = null;\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst item = queue.shift();\n\t\tif (\"batch\" in item) yield item.batch;\n\t\telse completed += 1;\n\t}\n}\n//#endregion\n//#region src/lib/server/sse.ts\nvar NEWLINE_PATTERN = /\\r?\\n/g;\n/**\n* Encodes a single server-sent event frame.\n*\n* The JSON payload is always kept on one line, so the frame is\n* `event: <name>\\ndata: <json>\\n\\n`.\n*/\nfunction sseFrame(event, data) {\n\treturn `event: ${event.replace(NEWLINE_PATTERN, \" \").trim()}\\ndata: ${(JSON.stringify(data) ?? \"null\").replace(NEWLINE_PATTERN, \" \")}\\n\\n`;\n}\n//#endregion\n//#region src/lib/server/tail.ts\nvar DEFAULT_SEEN_CAPACITY = 5e3;\nvar DEFAULT_POLL_MS = 1e3;\nvar DEFAULT_LIMIT = 1e3;\nvar DEFAULT_MAX_CONSECUTIVE_ERRORS = 8;\nvar MAX_BACKOFF_MS = 15e3;\n/** Empty polls that end a historic window: CloudWatch can lag behind ingestion. */\nvar DEFAULT_IDLE_POLLS = 2;\n/** Upper bound on events yielded for one historic window. */\nvar DEFAULT_MAX_EVENTS = 1e4;\n/** Returns true when the value is an abort error raised by the fetch/SDK layer. */\nfunction isAbortError(error) {\n\tif (error instanceof Error) return error.name === \"AbortError\" || error.code === \"ABORT_ERR\";\n\treturn false;\n}\n/**\n* Abort-aware sleep used by default.\n*\n* Resolves after `ms`, resolves immediately when the signal aborts and always\n* clears its timer. An injected sleep may instead reject on abort, which\n* {@link tailLogEvents} handles by re-checking the signal.\n*/\nvar defaultSleep = (ms, signal) => new Promise((resolve) => {\n\tif (signal?.aborted === true || !Number.isFinite(ms) || ms <= 0) {\n\t\tresolve();\n\t\treturn;\n\t}\n\tconst onAbort = () => {\n\t\tclearTimeout(timer);\n\t\tresolve();\n\t};\n\tconst timer = setTimeout(() => {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\tresolve();\n\t}, ms);\n\ttimer.unref?.();\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n});\n/**\n* Bounded first-in-first-out set of event ids.\n*\n* Keeps at most `capacity` ids (default 5000) so memory stays flat on long\n* streams. The oldest id is evicted first.\n*/\nvar SeenEventIds = class {\n\tids = /* @__PURE__ */ new Set();\n\tcapacity;\n\tconstructor(capacity = DEFAULT_SEEN_CAPACITY) {\n\t\tconst parsed = Number.isFinite(capacity) ? Math.floor(capacity) : DEFAULT_SEEN_CAPACITY;\n\t\tthis.capacity = parsed > 0 ? parsed : DEFAULT_SEEN_CAPACITY;\n\t}\n\t/** True when the id was recorded before. Null and empty ids are never recorded. */\n\thas(id) {\n\t\treturn id !== null && id.length > 0 && this.ids.has(id);\n\t}\n\t/** Records an id, evicting the oldest entry when the capacity is reached. */\n\tadd(id) {\n\t\tif (id === null || id.length === 0 || this.ids.has(id)) return;\n\t\tif (this.ids.size >= this.capacity) {\n\t\t\tconst oldest = this.ids.values().next();\n\t\t\tif (!oldest.done) this.ids.delete(oldest.value);\n\t\t}\n\t\tthis.ids.add(id);\n\t}\n\t/** Number of ids currently remembered. */\n\tget size() {\n\t\treturn this.ids.size;\n\t}\n};\n/**\n* Converts a poll result into the events worth sending downstream.\n*\n* Drops ids seen in earlier polls and duplicates inside the same batch, then\n* records the ids of the accepted events. Events without an id are always kept\n* and never recorded.\n*/\nfunction selectNewEvents(events, seen) {\n\tconst selected = [];\n\tif (events === void 0 || events.length === 0) return selected;\n\tconst freshIds = /* @__PURE__ */ new Set();\n\tfor (const event of events) {\n\t\tconst id = event.eventId !== void 0 && event.eventId.length > 0 ? event.eventId : null;\n\t\tif (id !== null) {\n\t\t\tif (seen.has(id) || freshIds.has(id)) continue;\n\t\t\tfreshIds.add(id);\n\t\t}\n\t\tconst dto = {\n\t\t\tid,\n\t\t\ttimestamp: typeof event.timestamp === \"number\" ? event.timestamp : 0,\n\t\t\tmessage: event.message ?? \"\"\n\t\t};\n\t\tif (event.logStreamName !== void 0) dto.streamName = event.logStreamName;\n\t\tif (typeof event.ingestionTime === \"number\") dto.ingestionTime = event.ingestionTime;\n\t\tselected.push(dto);\n\t}\n\tfor (const id of freshIds) seen.add(id);\n\treturn selected;\n}\n/** Highest timestamp in `events`, never lower than `previous`. */\nfunction nextCursor(previous, events) {\n\tlet cursor = Number.isFinite(previous) ? previous : 0;\n\tfor (const event of events) if (Number.isFinite(event.timestamp) && event.timestamp > cursor) cursor = event.timestamp;\n\treturn cursor;\n}\n/**\n* Polls `FilterLogEvents` and yields batches as they arrive.\n*\n* `startTime` is inclusive upstream, so the cursor advances to the newest\n* timestamp seen and repeated events are removed by {@link SeenEventIds}.\n* Nothing is new in a poll => sleep `pollIntervalMs`. Errors are yielded as\n* `error` batches and retried with exponential backoff\n* (`pollIntervalMs * 2^consecutiveErrors`, capped at 15000 ms) until\n* `maxConsecutiveErrors` (default 8) failures in a row, then the generator\n* returns. An aborted signal ends the generator without throwing.\n*/\nasync function* tailLogEvents(options) {\n\tconst { client, logGroupName, startTime, pollIntervalMs = DEFAULT_POLL_MS, limit = DEFAULT_LIMIT, filterPattern, signal, sleep = defaultSleep, maxConsecutiveErrors = DEFAULT_MAX_CONSECUTIVE_ERRORS, logStreamNamePrefix, endTime = null, idlePolls = DEFAULT_IDLE_POLLS, maxEvents = DEFAULT_MAX_EVENTS } = options;\n\tconst historic = typeof endTime === \"number\" && Number.isFinite(endTime);\n\tconst windowEnd = historic ? endTime : null;\n\tconst idlePollsAllowed = Number.isFinite(idlePolls) && idlePolls > 0 ? Math.floor(idlePolls) : DEFAULT_IDLE_POLLS;\n\tconst eventCap = Number.isFinite(maxEvents) && maxEvents > 0 ? Math.floor(maxEvents) : DEFAULT_MAX_EVENTS;\n\tconst pollMs = Number.isFinite(pollIntervalMs) && pollIntervalMs > 0 ? Math.min(Math.round(pollIntervalMs), MAX_BACKOFF_MS) : DEFAULT_POLL_MS;\n\tconst pageLimit = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : DEFAULT_LIMIT;\n\tconst maxErrors = Number.isFinite(maxConsecutiveErrors) && maxConsecutiveErrors > 0 ? Math.floor(maxConsecutiveErrors) : DEFAULT_MAX_CONSECUTIVE_ERRORS;\n\tconst baseInput = {\n\t\tlogGroupName,\n\t\tstartTime,\n\t\tlimit: pageLimit\n\t};\n\tif (windowEnd !== null) baseInput.endTime = windowEnd;\n\tif (filterPattern !== void 0 && filterPattern.length > 0) baseInput.filterPattern = filterPattern;\n\tif (logStreamNamePrefix !== void 0 && logStreamNamePrefix.length > 0) baseInput.logStreamNamePrefix = logStreamNamePrefix;\n\tconst isAborted = () => signal?.aborted === true;\n\tconst wait = async (ms) => {\n\t\tif (isAborted()) return true;\n\t\ttry {\n\t\t\tawait sleep(ms, signal);\n\t\t} catch {}\n\t\treturn isAborted();\n\t};\n\tconst seen = new SeenEventIds();\n\tlet cursor = Number.isFinite(startTime) ? startTime : 0;\n\tlet consecutiveErrors = 0;\n\tlet emitted = 0;\n\tlet emptyPolls = 0;\n\tfor (;;) {\n\t\tif (isAborted()) return;\n\t\ttry {\n\t\t\tconst input = {\n\t\t\t\t...baseInput,\n\t\t\t\tstartTime: cursor\n\t\t\t};\n\t\t\tconst response = await client.send(new FilterLogEventsCommand(input), { abortSignal: signal });\n\t\t\tconsecutiveErrors = 0;\n\t\t\tconst events = selectNewEvents(response.events, seen);\n\t\t\tif (events.length > 0) {\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcursor = nextCursor(cursor, events);\n\t\t\t\temitted += events.length;\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"events\",\n\t\t\t\t\tevents\n\t\t\t\t};\n\t\t\t\tif (historic && emitted >= eventCap) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"event-limit\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (windowEnd !== null && cursor >= windowEnd) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (historic) {\n\t\t\t\temptyPolls += 1;\n\t\t\t\tif (emptyPolls >= idlePollsAllowed) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAborted() || isAbortError(error)) return;\n\t\t\tconsecutiveErrors += 1;\n\t\t\tconst described = describeAwsError(error);\n\t\t\tyield {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: described.message,\n\t\t\t\tcode: described.code\n\t\t\t};\n\t\t\tif (consecutiveErrors >= maxErrors) {\n\t\t\t\tif (historic) yield {\n\t\t\t\t\ttype: \"end\",\n\t\t\t\t\treason: \"repeated-errors\"\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (await wait(Math.min(pollMs * 2 ** consecutiveErrors, MAX_BACKOFF_MS))) return;\n\t\t\tcontinue;\n\t\t}\n\t\tif (await wait(pollMs)) return;\n\t}\n}\n//#endregion\n//#region src/routes/api/stream/+server.ts\n/** Send a `ping` after this much silence. */\nvar PING_INTERVAL_MS = 15e3;\n/** Stop the stream after this many consecutive failed polls. */\nvar MAX_CONSECUTIVE_ERRORS = 8;\n/** Bounds for the archive `pageSize` parameter. */\nvar ARCHIVE_PAGE_LIMITS = {\n\tmin: 1,\n\tmax: 5e3\n};\n/** Bounds for the archive `max` parameter (events per request). */\nvar ARCHIVE_MAX_LIMITS = {\n\tmin: 1,\n\tmax: 1e5\n};\nvar SSE_HEADERS = {\n\t\"content-type\": \"text/event-stream; charset=utf-8\",\n\t\"cache-control\": \"no-cache, no-transform\",\n\tconnection: \"keep-alive\",\n\t\"x-accel-buffering\": \"no\"\n};\n/**\n* Tags every event of one tail with its log group.\n*\n* A merged multi-group stream has to say which group each line came from, both\n* for the archive and for the group column in the viewer.\n*/\nasync function* taggedEvents(source, group) {\n\tfor await (const batch of source) {\n\t\tif (batch.type !== \"events\") {\n\t\t\tyield batch;\n\t\t\tcontinue;\n\t\t}\n\t\tconst events = [];\n\t\tfor (const event of batch.events) events.push({\n\t\t\t...event,\n\t\t\tgroup\n\t\t});\n\t\tyield {\n\t\t\ttype: \"events\",\n\t\t\tevents\n\t\t};\n\t}\n}\n/**\n* Writes one batch to the archive, under the right group.\n*\n* A merged multi-group stream tags every event with its own group, so a batch\n* that mixes groups is split; a single-group stream falls back to the group the\n* request named.\n*/\nasync function recordBatch(archive, region, groupNames, events) {\n\tconst fallback = groupNames[0] ?? \"\";\n\tconst byGroup = /* @__PURE__ */ new Map();\n\tfor (const event of events) {\n\t\tconst group = event.group ?? fallback;\n\t\tconst bucket = byGroup.get(group);\n\t\tif (bucket === void 0) byGroup.set(group, [event]);\n\t\telse bucket.push(event);\n\t}\n\tfor (const [group, groupEvents] of byGroup) await archive.record(region, group, groupEvents);\n}\n/**\n* Parses a positive integer parameter within `limits`.\n*\n* Returns `null` for a missing value (meaning \"use the default\") and for an\n* unusable one, so a typo falls back to the default instead of failing the\n* stream; an out-of-range value is clamped rather than rejected.\n*/\nfunction parseBoundedInt(value, limits) {\n\tif (value === null) return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tconst parsed = Number(trimmed);\n\tif (!Number.isFinite(parsed)) return null;\n\treturn Math.min(Math.max(Math.round(parsed), limits.min), limits.max);\n}\n/**\n* Builds the feed for a request.\n*\n* The archive path never creates a CloudWatch client, so browsing history works\n* with no credentials and no network; it does need a region, because archived\n* rows are stored per region. Failures come back as an `apiError` response the\n* route returns unchanged.\n*/\nasync function resolveFeed(request) {\n\tconst { source, config, env, groupNames, startTime, endTime, signal } = request;\n\tif (source === \"archive\") {\n\t\tconst region = config.region ?? \"\";\n\t\tif (region === \"\") return apiError(400, \"Query parameter \\\"region\\\" is required when source=archive\", \"missing-region-param\");\n\t\treturn {\n\t\t\tregion,\n\t\t\tgroupNames,\n\t\t\tgenerator: tailArchivedEvents({\n\t\t\t\tarchive: await getArchive(env),\n\t\t\t\tregion,\n\t\t\t\tlogGroups: groupNames,\n\t\t\t\tstartTime,\n\t\t\t\tendTime: endTime ?? Date.now(),\n\t\t\t\tsearch: request.search,\n\t\t\t\tlevels: request.levels,\n\t\t\t\t...request.pageSize === null ? {} : { pageSize: request.pageSize },\n\t\t\t\t...request.maxEvents === null ? {} : { maxEvents: request.maxEvents },\n\t\t\t\tsignal\n\t\t\t}),\n\t\t\trelease: () => void 0\n\t\t};\n\t}\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t}\n\tlet region;\n\ttry {\n\t\tregion = await resolveEffectiveRegion(client, config);\n\t} catch (error) {\n\t\tclient.destroy();\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t}\n\tconst tails = groupNames.map((group) => taggedEvents(tailLogEvents({\n\t\tclient,\n\t\tlogGroupName: group,\n\t\tstartTime,\n\t\tendTime,\n\t\tpollIntervalMs: request.pollIntervalMs,\n\t\tfilterPattern: request.filterPattern,\n\t\tsignal,\n\t\tmaxConsecutiveErrors: MAX_CONSECUTIVE_ERRORS\n\t}), group));\n\treturn {\n\t\tregion,\n\t\tgroupNames,\n\t\tgenerator: mergeTails(tails),\n\t\trelease: () => client.destroy()\n\t};\n}\n/**\n* `GET /api/stream` - server-sent events for one log group.\n*\n* Emits `ready` first, then `log` per batch, `ping` after 15 s of silence and\n* a final `end`. `source=cloudwatch` (the default) polls CloudWatch Logs with\n* the ambient credentials; `source=archive` replays the local DuckDB archive and\n* needs neither credentials nor a region parameter resolution.\n*\n* The stream is cancelled through `request.signal`, and every timer and listener\n* is removed so the dev server can exit.\n*/\nvar GET = async ({ url, request }) => {\n\tconst groupSelection = parseGroupParams(url.searchParams.get(\"group\"), url.searchParams.get(\"groups\"));\n\tif (!groupSelection.ok) return apiError(400, groupSelection.message, groupSelection.code);\n\tconst groupNames = groupSelection.names;\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst source = parseSourceParam(url.searchParams.get(\"source\"));\n\tif (source === null) return apiError(400, SOURCE_PARAM_HINT, \"invalid-source\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsedRegion.region);\n\tconst filterPattern = url.searchParams.get(\"filterPattern\")?.trim();\n\tconst search = url.searchParams.get(\"search\")?.trim() ?? \"\";\n\tconst levels = parseLevelParam(url.searchParams.get(\"level\"));\n\tif (levels === void 0) return apiError(400, LEVEL_PARAM_HINT, \"invalid-level\");\n\tif (levels !== null && source !== \"archive\") return apiError(400, \"The \\\"level\\\" filter applies to source=archive; use filterPattern to filter CloudWatch\", \"invalid-level\");\n\tconst streamWindow = resolveWindow({\n\t\tmode: url.searchParams.get(\"mode\") ?? (source === \"archive\" ? \"historic\" : null),\n\t\trange: url.searchParams.get(\"range\"),\n\t\tfrom: url.searchParams.get(\"from\"),\n\t\tto: url.searchParams.get(\"to\"),\n\t\tstartTime: url.searchParams.get(\"startTime\"),\n\t\tlookback: url.searchParams.get(\"lookback\"),\n\t\tnow: Date.now()\n\t}, source === \"archive\" ? { maxLookbackMs: null } : {});\n\tif (!streamWindow.ok) return apiError(400, streamWindow.message, streamWindow.code);\n\tif (source === \"archive\" && streamWindow.mode === \"live\") return apiError(400, \"The local archive only serves historic windows: use mode=historic, or source=cloudwatch to tail live\", \"invalid-mode\");\n\tconst bodyAbort = new AbortController();\n\tconst feed = await resolveFeed({\n\t\tsource,\n\t\tconfig,\n\t\tenv,\n\t\tgroupNames,\n\t\tstartTime: streamWindow.startTime,\n\t\tendTime: streamWindow.endTime,\n\t\tfilterPattern,\n\t\tsearch: search.length === 0 ? null : search,\n\t\tlevels,\n\t\tpageSize: parseBoundedInt(url.searchParams.get(\"pageSize\"), ARCHIVE_PAGE_LIMITS),\n\t\tmaxEvents: parseBoundedInt(url.searchParams.get(\"max\"), ARCHIVE_MAX_LIMITS),\n\t\tpollIntervalMs: clampPollMs(url.searchParams.get(\"poll\")),\n\t\tsignal: bodyAbort.signal\n\t});\n\tif (feed instanceof Response) return feed;\n\tconst archive = source === \"cloudwatch\" ? await getArchive(env) : null;\n\tconst encoder = new TextEncoder();\n\tlet streamController;\n\t/** Removes this stream from the server's registry of open streams. */\n\tlet unregisterStream;\n\tlet closed = false;\n\tlet pingTimer;\n\tlet cleanedUp = false;\n\tconst clearPing = () => {\n\t\tif (pingTimer !== void 0) {\n\t\t\tclearTimeout(pingTimer);\n\t\t\tpingTimer = void 0;\n\t\t}\n\t};\n\tconst armPing = () => {\n\t\tif (closed) return;\n\t\tclearPing();\n\t\tpingTimer = setTimeout(() => {\n\t\t\tpingTimer = void 0;\n\t\t\tif (closed) return;\n\t\t\tenqueue(sseFrame(\"ping\", { at: Date.now() }), false);\n\t\t\tarmPing();\n\t\t}, PING_INTERVAL_MS);\n\t\tpingTimer.unref?.();\n\t};\n\tconst enqueue = (chunk, rearm = true) => {\n\t\tif (closed || streamController === void 0) return;\n\t\ttry {\n\t\t\tstreamController.enqueue(encoder.encode(chunk));\n\t\t} catch {\n\t\t\tclosed = true;\n\t\t\treturn;\n\t\t}\n\t\tif (rearm) armPing();\n\t};\n\tconst closeStream = () => {\n\t\tclosed = true;\n\t\ttry {\n\t\t\tstreamController?.close();\n\t\t} catch {}\n\t};\n\tconst writeEnd = (reason) => {\n\t\tclearPing();\n\t\tconst payload = { reason };\n\t\ttry {\n\t\t\tstreamController?.enqueue(encoder.encode(sseFrame(\"end\", payload)));\n\t\t} catch {}\n\t\tcloseStream();\n\t};\n\tconst onAbort = () => {\n\t\tbodyAbort.abort();\n\t};\n\tconst cleanup = () => {\n\t\tif (cleanedUp) return;\n\t\tcleanedUp = true;\n\t\tclearPing();\n\t\tunregisterStream?.();\n\t\tunregisterStream = void 0;\n\t\trequest.signal.removeEventListener(\"abort\", onAbort);\n\t\tfeed.release();\n\t};\n\tconst pump = async () => {\n\t\tlet consecutiveErrors = 0;\n\t\tlet reason = \"completed\";\n\t\ttry {\n\t\t\tfor await (const batch of feed.generator) {\n\t\t\t\tif (closed || bodyAbort.signal.aborted) break;\n\t\t\t\tif (batch.type === \"events\") {\n\t\t\t\t\tconst events = withDetections(batch.events);\n\t\t\t\t\tconst payload = { events };\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\tenqueue(sseFrame(\"log\", payload));\n\t\t\t\t\tif (archive !== null) await recordBatch(archive, feed.region, feed.groupNames, events);\n\t\t\t\t} else if (batch.type === \"end\") {\n\t\t\t\t\treason = batch.reason;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tconst payload = { message: batch.message };\n\t\t\t\t\tif (batch.code !== void 0) payload.code = batch.code;\n\t\t\t\t\tconsecutiveErrors += 1;\n\t\t\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (reason === \"completed\") {\n\t\t\t\tif (bodyAbort.signal.aborted) reason = \"client-disconnected\";\n\t\t\t\telse if (consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) reason = \"repeated-errors\";\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst described = describeAwsError(error);\n\t\t\tconst payload = { message: described.message };\n\t\t\tif (described.code !== void 0) payload.code = described.code;\n\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\treason = \"failed\";\n\t\t} finally {\n\t\t\tcleanup();\n\t\t}\n\t\twriteEnd(reason);\n\t};\n\trequest.signal.addEventListener(\"abort\", onAbort, { once: true });\n\tconst stream = new ReadableStream({\n\t\tstart(controller) {\n\t\t\tstreamController = controller;\n\t\t\tconst payload = {\n\t\t\t\tregion: feed.region,\n\t\t\t\tlogGroupName: feed.groupNames[0] ?? \"\",\n\t\t\t\tgroups: [...feed.groupNames],\n\t\t\t\tendpoint: source === \"archive\" ? null : config.endpoint,\n\t\t\t\tsource,\n\t\t\t\tstartTime: streamWindow.startTime,\n\t\t\t\tendTime: streamWindow.endTime,\n\t\t\t\tmode: streamWindow.mode,\n\t\t\t\tpreset: streamWindow.preset,\n\t\t\t\tclamped: streamWindow.clamped\n\t\t\t};\n\t\t\tenqueue(sseFrame(\"ready\", payload));\n\t\t\tarmPing();\n\t\t\tunregisterStream = registerLiveStream(() => writeEnd(\"server-stopping\"));\n\t\t\tpump();\n\t\t},\n\t\tcancel() {\n\t\t\tbodyAbort.abort();\n\t\t\tclearPing();\n\t\t\tcloseStream();\n\t\t\tcleanup();\n\t\t}\n\t});\n\treturn new Response(stream, { headers: SSE_HEADERS });\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_layout.svelte.js-CBQpEToy.js","sources":["../../../../../.svelte-kit/output/server/entries/pages/_layout.svelte.js"],"sourcesContent":["import { c as head, w as attr } from \"../../chunks/server.js\";\n//#region src/lib/assets/favicon.svg\nvar favicon_default = \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20role='img'%20aria-label='watch-tail'%3e%3ctitle%3ewatch-tail%3c/title%3e%3c!--%20A%20log%20window:%20three%20lines,%20the%20newest%20highlighted,%20with%20the%20tail%20still%20running.%20--%3e%3crect%20width='32'%20height='32'%20rx='7'%20fill='%230a0a0a'%20/%3e%3crect%20x='5'%20y='6.6'%20width='14'%20height='4'%20rx='2'%20fill='%2338bdf8'%20/%3e%3crect%20x='5'%20y='14'%20width='22'%20height='4'%20rx='2'%20fill='%23525252'%20/%3e%3crect%20x='5'%20y='21.4'%20width='17'%20height='4'%20rx='2'%20fill='%23404040'%20/%3e%3ccircle%20cx='25.6'%20cy='8.6'%20r='2.8'%20fill='%2338bdf8'%20/%3e%3c/svg%3e\";\n//#endregion\n//#region src/routes/+layout.svelte\nfunction _layout($$renderer, $$props) {\n\tlet { children } = $$props;\n\thead(\"12qhfyh\", $$renderer, ($$renderer) => {\n\t\t$$renderer.title(($$renderer) => {\n\t\t\t$$renderer.push(`<title>watch-stream</title>`);\n\t\t});\n\t\t$$renderer.push(`<link rel=\"icon\"${attr(\"href\", favicon_default)}/>`);\n\t});\n\t$$renderer.push(`<div class=\"flex h-dvh min-h-[30rem] flex-col overflow-hidden bg-neutral-950 font-sans text-neutral-100 antialiased selection:bg-sky-900/60\"><header class=\"flex-none border-b border-neutral-900 bg-neutral-950/90\"><div class=\"flex w-full items-baseline gap-3 px-3 py-2 sm:px-4\"><span class=\"text-sm font-semibold tracking-tight\">watch<span class=\"text-sky-400\">-stream</span></span> <span class=\"hidden text-xs text-neutral-500 sm:inline\">Tail CloudWatch Logs in the browser</span></div></header> <main class=\"flex min-h-0 w-full flex-1 flex-col gap-3 px-3 py-3 sm:px-4\">`);\n\tchildren($$renderer);\n\t$$renderer.push(`<!----></main></div>`);\n}\n//#endregion\nexport { _layout as default };\n"],"names":[],"mappings":";;;AACA;AACA,IAAI,eAAe,GAAG,orBAAorB;AAC1sB;AACA;AACA,SAAS,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC3B,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,UAAU,KAAK;AAC7C,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK;AACnC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC,CAAC;AACjD,EAAE,CAAC,CAAC;AACJ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AACH,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,0jBAA0jB,CAAC,CAAC;AAC9kB,CAAC,QAAQ,CAAC,UAAU,CAAC;AACrB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACxC;;"}