@geekmidas/telescope 10.0.0-alpha.9 → 10.0.0-alpha.90

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 (406) hide show
  1. package/README.md +14 -14
  2. package/dist/{MetricsAggregator-4SqelGcG.d.cts → MetricsAggregator-BJdIvfEv.d.mts} +3 -6
  3. package/dist/MetricsAggregator-BJdIvfEv.d.mts.map +1 -0
  4. package/dist/{MetricsAggregator-DZrW8ls6.d.mts → MetricsAggregator-CnC3oT5q.d.cts} +3 -6
  5. package/dist/MetricsAggregator-CnC3oT5q.d.cts.map +1 -0
  6. package/dist/{Telescope-D4nmwDRA.d.cts → Telescope-BVfDvVvY.d.mts} +4 -7
  7. package/dist/Telescope-BVfDvVvY.d.mts.map +1 -0
  8. package/dist/{Telescope-Dl6VSfxd.d.mts → Telescope-DeqSHfuB.d.cts} +4 -7
  9. package/dist/Telescope-DeqSHfuB.d.cts.map +1 -0
  10. package/dist/Telescope.cjs +385 -4
  11. package/dist/Telescope.cjs.map +1 -0
  12. package/dist/Telescope.d.cts +1 -3
  13. package/dist/Telescope.d.mts +1 -3
  14. package/dist/Telescope.mjs +384 -4
  15. package/dist/Telescope.mjs.map +1 -0
  16. package/dist/adapters/index.d.cts +2 -2
  17. package/dist/adapters/index.d.mts +2 -2
  18. package/dist/adapters/index.mjs +1 -0
  19. package/dist/adapters/lambda.cjs +9 -10
  20. package/dist/adapters/lambda.cjs.map +1 -1
  21. package/dist/adapters/lambda.d.cts +9 -13
  22. package/dist/adapters/lambda.d.cts.map +1 -1
  23. package/dist/adapters/lambda.d.mts +9 -13
  24. package/dist/adapters/lambda.d.mts.map +1 -1
  25. package/dist/adapters/lambda.mjs +3 -4
  26. package/dist/adapters/lambda.mjs.map +1 -1
  27. package/dist/adapters/middy.cjs +236 -4
  28. package/dist/adapters/middy.cjs.map +1 -0
  29. package/dist/adapters/middy.d.cts +60 -5
  30. package/dist/adapters/middy.d.cts.map +1 -0
  31. package/dist/adapters/middy.d.mts +60 -5
  32. package/dist/adapters/middy.d.mts.map +1 -0
  33. package/dist/adapters/middy.mjs +234 -3
  34. package/dist/adapters/middy.mjs.map +1 -0
  35. package/dist/adapters/types.d.cts +162 -2
  36. package/dist/adapters/types.d.cts.map +1 -0
  37. package/dist/adapters/types.d.mts +162 -2
  38. package/dist/adapters/types.d.mts.map +1 -0
  39. package/dist/adapters/types.mjs +1 -0
  40. package/dist/core.cjs +22 -22
  41. package/dist/core.d.cts +4 -4
  42. package/dist/core.d.mts +4 -4
  43. package/dist/core.mjs +3 -4
  44. package/dist/index.cjs +8 -9
  45. package/dist/index.d.cts +5 -6
  46. package/dist/index.d.mts +5 -6
  47. package/dist/index.mjs +5 -7
  48. package/dist/instrumentation/core.cjs +147 -11
  49. package/dist/instrumentation/core.cjs.map +1 -0
  50. package/dist/instrumentation/core.d.cts +74 -3
  51. package/dist/instrumentation/core.d.cts.map +1 -0
  52. package/dist/instrumentation/core.d.mts +74 -3
  53. package/dist/instrumentation/core.d.mts.map +1 -0
  54. package/dist/instrumentation/core.mjs +137 -2
  55. package/dist/instrumentation/core.mjs.map +1 -0
  56. package/dist/instrumentation/hono.cjs +174 -6
  57. package/dist/instrumentation/hono.cjs.map +1 -0
  58. package/dist/instrumentation/hono.d.cts +86 -2
  59. package/dist/instrumentation/hono.d.cts.map +1 -0
  60. package/dist/instrumentation/hono.d.mts +86 -2
  61. package/dist/instrumentation/hono.d.mts.map +1 -0
  62. package/dist/instrumentation/hono.mjs +170 -3
  63. package/dist/instrumentation/hono.mjs.map +1 -0
  64. package/dist/instrumentation/http.cjs +189 -11
  65. package/dist/instrumentation/http.cjs.map +1 -0
  66. package/dist/instrumentation/http.d.cts +119 -2
  67. package/dist/instrumentation/http.d.cts.map +1 -0
  68. package/dist/instrumentation/http.d.mts +119 -2
  69. package/dist/instrumentation/http.d.mts.map +1 -0
  70. package/dist/instrumentation/http.mjs +178 -2
  71. package/dist/instrumentation/http.mjs.map +1 -0
  72. package/dist/instrumentation/index.cjs +56 -47
  73. package/dist/instrumentation/index.d.cts +11 -9
  74. package/dist/instrumentation/index.d.mts +11 -9
  75. package/dist/instrumentation/index.mjs +10 -9
  76. package/dist/instrumentation/middleware.cjs +164 -6
  77. package/dist/instrumentation/middleware.cjs.map +1 -0
  78. package/dist/instrumentation/middleware.d.cts +83 -2
  79. package/dist/instrumentation/middleware.d.cts.map +1 -0
  80. package/dist/instrumentation/middleware.d.mts +83 -2
  81. package/dist/instrumentation/middleware.d.mts.map +1 -0
  82. package/dist/instrumentation/middleware.mjs +160 -3
  83. package/dist/instrumentation/middleware.mjs.map +1 -0
  84. package/dist/instrumentation/otel.cjs +137 -3
  85. package/dist/instrumentation/otel.cjs.map +1 -0
  86. package/dist/instrumentation/otel.d.cts +97 -2
  87. package/dist/instrumentation/otel.d.cts.map +1 -0
  88. package/dist/instrumentation/otel.d.mts +97 -2
  89. package/dist/instrumentation/otel.d.mts.map +1 -0
  90. package/dist/instrumentation/otel.mjs +136 -3
  91. package/dist/instrumentation/otel.mjs.map +1 -0
  92. package/dist/instrumentation/sampler.cjs +54 -0
  93. package/dist/instrumentation/sampler.cjs.map +1 -0
  94. package/dist/instrumentation/sampler.d.cts +38 -0
  95. package/dist/instrumentation/sampler.d.cts.map +1 -0
  96. package/dist/instrumentation/sampler.d.mts +38 -0
  97. package/dist/instrumentation/sampler.d.mts.map +1 -0
  98. package/dist/instrumentation/sampler.mjs +52 -0
  99. package/dist/instrumentation/sampler.mjs.map +1 -0
  100. package/dist/instrumentation/setup.cjs +142 -4
  101. package/dist/instrumentation/setup.cjs.map +1 -0
  102. package/dist/instrumentation/setup.d.cts +139 -3
  103. package/dist/instrumentation/setup.d.cts.map +1 -0
  104. package/dist/instrumentation/setup.d.mts +139 -3
  105. package/dist/instrumentation/setup.d.mts.map +1 -0
  106. package/dist/instrumentation/setup.mjs +139 -3
  107. package/dist/instrumentation/setup.mjs.map +1 -0
  108. package/dist/instrumentation/tracing.cjs +114 -10
  109. package/dist/instrumentation/tracing.cjs.map +1 -0
  110. package/dist/instrumentation/tracing.d.cts +49 -2
  111. package/dist/instrumentation/tracing.d.cts.map +1 -0
  112. package/dist/instrumentation/tracing.d.mts +49 -2
  113. package/dist/instrumentation/tracing.d.mts.map +1 -0
  114. package/dist/instrumentation/tracing.mjs +105 -2
  115. package/dist/instrumentation/tracing.mjs.map +1 -0
  116. package/dist/instrumentation/trust.cjs +107 -0
  117. package/dist/instrumentation/trust.cjs.map +1 -0
  118. package/dist/instrumentation/trust.d.cts +57 -0
  119. package/dist/instrumentation/trust.d.cts.map +1 -0
  120. package/dist/instrumentation/trust.d.mts +57 -0
  121. package/dist/instrumentation/trust.d.mts.map +1 -0
  122. package/dist/instrumentation/trust.mjs +104 -0
  123. package/dist/instrumentation/trust.mjs.map +1 -0
  124. package/dist/logger/console.cjs +18 -12
  125. package/dist/logger/console.cjs.map +1 -1
  126. package/dist/logger/console.d.cts +7 -10
  127. package/dist/logger/console.d.cts.map +1 -1
  128. package/dist/logger/console.d.mts +7 -10
  129. package/dist/logger/console.d.mts.map +1 -1
  130. package/dist/logger/console.mjs +17 -11
  131. package/dist/logger/console.mjs.map +1 -1
  132. package/dist/logger/pino.cjs +6 -5
  133. package/dist/logger/pino.cjs.map +1 -1
  134. package/dist/logger/pino.d.cts +6 -10
  135. package/dist/logger/pino.d.cts.map +1 -1
  136. package/dist/logger/pino.d.mts +6 -10
  137. package/dist/logger/pino.d.mts.map +1 -1
  138. package/dist/logger/pino.mjs +2 -3
  139. package/dist/logger/pino.mjs.map +1 -1
  140. package/dist/metrics/MetricsAggregator.cjs +354 -2
  141. package/dist/metrics/MetricsAggregator.cjs.map +1 -0
  142. package/dist/metrics/MetricsAggregator.d.cts +1 -2
  143. package/dist/metrics/MetricsAggregator.d.mts +1 -2
  144. package/dist/metrics/MetricsAggregator.mjs +353 -2
  145. package/dist/metrics/MetricsAggregator.mjs.map +1 -0
  146. package/dist/metrics/index.cjs +3 -4
  147. package/dist/metrics/index.d.cts +2 -4
  148. package/dist/metrics/index.d.mts +2 -4
  149. package/dist/metrics/index.mjs +2 -4
  150. package/dist/metrics/storage/InMemoryMetricsStorage.cjs +240 -3
  151. package/dist/metrics/storage/InMemoryMetricsStorage.cjs.map +1 -0
  152. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts +43 -4
  153. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts.map +1 -0
  154. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts +43 -4
  155. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts.map +1 -0
  156. package/dist/metrics/storage/InMemoryMetricsStorage.mjs +239 -3
  157. package/dist/metrics/storage/InMemoryMetricsStorage.mjs.map +1 -0
  158. package/dist/metrics/storage/MetricsStorage.cjs +0 -1
  159. package/dist/metrics/storage/MetricsStorage.d.cts +56 -3
  160. package/dist/metrics/storage/MetricsStorage.d.cts.map +1 -0
  161. package/dist/metrics/storage/MetricsStorage.d.mts +56 -3
  162. package/dist/metrics/storage/MetricsStorage.d.mts.map +1 -0
  163. package/dist/metrics/storage/MetricsStorage.mjs +1 -1
  164. package/dist/metrics/storage/index.cjs +6 -6
  165. package/dist/metrics/storage/index.d.cts +3 -3
  166. package/dist/metrics/storage/index.d.mts +3 -3
  167. package/dist/metrics/storage/index.mjs +4 -5
  168. package/dist/metrics/storage/types.cjs +34 -2
  169. package/dist/metrics/storage/types.cjs.map +1 -0
  170. package/dist/metrics/storage/types.d.cts +207 -2
  171. package/dist/metrics/storage/types.d.cts.map +1 -0
  172. package/dist/metrics/storage/types.d.mts +207 -2
  173. package/dist/metrics/storage/types.d.mts.map +1 -0
  174. package/dist/metrics/storage/types.mjs +33 -2
  175. package/dist/metrics/storage/types.mjs.map +1 -0
  176. package/dist/otlp/hono.cjs +9 -15
  177. package/dist/otlp/hono.cjs.map +1 -1
  178. package/dist/otlp/hono.d.cts +3 -13
  179. package/dist/otlp/hono.d.cts.map +1 -1
  180. package/dist/otlp/hono.d.mts +3 -13
  181. package/dist/otlp/hono.d.mts.map +1 -1
  182. package/dist/otlp/hono.mjs +5 -11
  183. package/dist/otlp/hono.mjs.map +1 -1
  184. package/dist/otlp/index.cjs +11 -11
  185. package/dist/otlp/index.d.cts +4 -7
  186. package/dist/otlp/index.d.mts +4 -7
  187. package/dist/otlp/index.mjs +4 -5
  188. package/dist/otlp/receiver.cjs +88 -4
  189. package/dist/otlp/receiver.cjs.map +1 -0
  190. package/dist/otlp/receiver.d.cts +59 -7
  191. package/dist/otlp/receiver.d.cts.map +1 -0
  192. package/dist/otlp/receiver.d.mts +59 -7
  193. package/dist/otlp/receiver.d.mts.map +1 -0
  194. package/dist/otlp/receiver.mjs +87 -4
  195. package/dist/otlp/receiver.mjs.map +1 -0
  196. package/dist/otlp/transformer.cjs +214 -5
  197. package/dist/otlp/transformer.cjs.map +1 -0
  198. package/dist/otlp/transformer.d.cts +1 -3
  199. package/dist/otlp/transformer.d.mts +1 -3
  200. package/dist/otlp/transformer.mjs +211 -3
  201. package/dist/otlp/transformer.mjs.map +1 -0
  202. package/dist/otlp/types.cjs +57 -5
  203. package/dist/otlp/types.cjs.map +1 -0
  204. package/dist/otlp/types.d.cts +1 -1
  205. package/dist/otlp/types.d.mts +1 -1
  206. package/dist/otlp/types.mjs +53 -2
  207. package/dist/otlp/types.mjs.map +1 -0
  208. package/dist/redact.cjs +84 -3
  209. package/dist/redact.cjs.map +1 -0
  210. package/dist/redact.d.cts +4 -8
  211. package/dist/redact.d.cts.map +1 -1
  212. package/dist/redact.d.mts +4 -8
  213. package/dist/redact.d.mts.map +1 -1
  214. package/dist/redact.mjs +80 -2
  215. package/dist/redact.mjs.map +1 -0
  216. package/dist/{chunk-CUT6urMc.cjs → rolldown-runtime-VH7oDXx4.cjs} +8 -10
  217. package/dist/server/hono.cjs +33 -54
  218. package/dist/server/hono.cjs.map +1 -1
  219. package/dist/server/hono.d.cts +19 -14
  220. package/dist/server/hono.d.cts.map +1 -1
  221. package/dist/server/hono.d.mts +19 -14
  222. package/dist/server/hono.d.mts.map +1 -1
  223. package/dist/server/hono.mjs +31 -52
  224. package/dist/server/hono.mjs.map +1 -1
  225. package/dist/storage/kysely.cjs +34 -32
  226. package/dist/storage/kysely.cjs.map +1 -1
  227. package/dist/storage/kysely.d.cts +8 -12
  228. package/dist/storage/kysely.d.cts.map +1 -1
  229. package/dist/storage/kysely.d.mts +8 -12
  230. package/dist/storage/kysely.d.mts.map +1 -1
  231. package/dist/storage/kysely.mjs +33 -31
  232. package/dist/storage/kysely.mjs.map +1 -1
  233. package/dist/storage/memory.cjs +122 -2
  234. package/dist/storage/memory.cjs.map +1 -0
  235. package/dist/storage/memory.d.cts +36 -3
  236. package/dist/storage/memory.d.cts.map +1 -0
  237. package/dist/storage/memory.d.mts +36 -3
  238. package/dist/storage/memory.d.mts.map +1 -0
  239. package/dist/storage/memory.mjs +121 -2
  240. package/dist/storage/memory.mjs.map +1 -0
  241. package/dist/{transformer-CTGsaVfV.d.mts → transformer-BtqjAs0b.d.cts} +4 -8
  242. package/dist/transformer-BtqjAs0b.d.cts.map +1 -0
  243. package/dist/{transformer-ICEbxpFf.d.cts → transformer-DI6t8-YA.d.mts} +4 -8
  244. package/dist/transformer-DI6t8-YA.d.mts.map +1 -0
  245. package/dist/{types-B1EIa_cQ.d.mts → types-BVujq4zd.d.cts} +3 -4
  246. package/dist/types-BVujq4zd.d.cts.map +1 -0
  247. package/dist/{types-l7Rlb5Mg.d.cts → types-BVujq4zd.d.mts} +3 -4
  248. package/dist/types-BVujq4zd.d.mts.map +1 -0
  249. package/dist/{types-CmOB7CLO.d.cts → types-DVETVdpa.d.cts} +6 -7
  250. package/dist/types-DVETVdpa.d.cts.map +1 -0
  251. package/dist/{types-DBc0q5KD.d.mts → types-DVETVdpa.d.mts} +6 -7
  252. package/dist/types-DVETVdpa.d.mts.map +1 -0
  253. package/dist/types.d.cts +1 -1
  254. package/dist/types.d.mts +1 -1
  255. package/dist/types.mjs +1 -0
  256. package/package.json +9 -5
  257. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts +0 -47
  258. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts.map +0 -1
  259. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs +0 -247
  260. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs.map +0 -1
  261. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs +0 -252
  262. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs.map +0 -1
  263. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts +0 -47
  264. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts.map +0 -1
  265. package/dist/MetricsAggregator-4SqelGcG.d.cts.map +0 -1
  266. package/dist/MetricsAggregator-B7lUICdH.cjs +0 -363
  267. package/dist/MetricsAggregator-B7lUICdH.cjs.map +0 -1
  268. package/dist/MetricsAggregator-DZrW8ls6.d.mts.map +0 -1
  269. package/dist/MetricsAggregator-S3DQWNas.mjs +0 -357
  270. package/dist/MetricsAggregator-S3DQWNas.mjs.map +0 -1
  271. package/dist/MetricsStorage-B86e4131.d.cts +0 -60
  272. package/dist/MetricsStorage-B86e4131.d.cts.map +0 -1
  273. package/dist/MetricsStorage-BWyP2_12.d.mts +0 -60
  274. package/dist/MetricsStorage-BWyP2_12.d.mts.map +0 -1
  275. package/dist/MetricsStorage-BypQXWiv.mjs +0 -0
  276. package/dist/MetricsStorage-Or8pVCe4.cjs +0 -0
  277. package/dist/Telescope-Cs3fv8jt.cjs +0 -395
  278. package/dist/Telescope-Cs3fv8jt.cjs.map +0 -1
  279. package/dist/Telescope-D4nmwDRA.d.cts.map +0 -1
  280. package/dist/Telescope-Dh5av3FC.mjs +0 -389
  281. package/dist/Telescope-Dh5av3FC.mjs.map +0 -1
  282. package/dist/Telescope-Dl6VSfxd.d.mts.map +0 -1
  283. package/dist/core--quSp5Qr.d.mts +0 -78
  284. package/dist/core--quSp5Qr.d.mts.map +0 -1
  285. package/dist/core-B4Jpia5H.d.cts +0 -78
  286. package/dist/core-B4Jpia5H.d.cts.map +0 -1
  287. package/dist/core-CtVHRJGv.cjs +0 -199
  288. package/dist/core-CtVHRJGv.cjs.map +0 -1
  289. package/dist/core-D6hJ6exL.mjs +0 -139
  290. package/dist/core-D6hJ6exL.mjs.map +0 -1
  291. package/dist/hono--uKQ7Jgi.d.mts +0 -71
  292. package/dist/hono--uKQ7Jgi.d.mts.map +0 -1
  293. package/dist/hono-Bw-ey6CT.mjs +0 -136
  294. package/dist/hono-Bw-ey6CT.mjs.map +0 -1
  295. package/dist/hono-CPHX7FAm.cjs +0 -160
  296. package/dist/hono-CPHX7FAm.cjs.map +0 -1
  297. package/dist/hono-CemCKU87.d.cts +0 -71
  298. package/dist/hono-CemCKU87.d.cts.map +0 -1
  299. package/dist/http-BIvr0YdI.mjs +0 -159
  300. package/dist/http-BIvr0YdI.mjs.map +0 -1
  301. package/dist/http-BiNtg85L.d.mts +0 -107
  302. package/dist/http-BiNtg85L.d.mts.map +0 -1
  303. package/dist/http-BsqmhurZ.cjs +0 -219
  304. package/dist/http-BsqmhurZ.cjs.map +0 -1
  305. package/dist/http-D1oTbfap.d.cts +0 -107
  306. package/dist/http-D1oTbfap.d.cts.map +0 -1
  307. package/dist/index-BL32-cvv.d.cts +0 -1
  308. package/dist/index-CsuikFeJ.d.mts +0 -1
  309. package/dist/memory--BK4iWiv.d.cts +0 -40
  310. package/dist/memory--BK4iWiv.d.cts.map +0 -1
  311. package/dist/memory-6S9H-IF5.mjs +0 -123
  312. package/dist/memory-6S9H-IF5.mjs.map +0 -1
  313. package/dist/memory-B0d_n1g5.cjs +0 -129
  314. package/dist/memory-B0d_n1g5.cjs.map +0 -1
  315. package/dist/memory-DCirEVFW.d.mts +0 -40
  316. package/dist/memory-DCirEVFW.d.mts.map +0 -1
  317. package/dist/metrics-D5YT-Rnq.mjs +0 -0
  318. package/dist/metrics-fhD3l3C3.cjs +0 -0
  319. package/dist/middleware-Bcq6XXGG.cjs +0 -184
  320. package/dist/middleware-Bcq6XXGG.cjs.map +0 -1
  321. package/dist/middleware-D1XEHvyy.mjs +0 -160
  322. package/dist/middleware-D1XEHvyy.mjs.map +0 -1
  323. package/dist/middleware-PeyS-9Ny.d.cts +0 -74
  324. package/dist/middleware-PeyS-9Ny.d.cts.map +0 -1
  325. package/dist/middleware-oHvo_ZgU.d.mts +0 -74
  326. package/dist/middleware-oHvo_ZgU.d.mts.map +0 -1
  327. package/dist/middy-B6Btl8XE.d.mts +0 -64
  328. package/dist/middy-B6Btl8XE.d.mts.map +0 -1
  329. package/dist/middy-Bq0defVg.d.cts +0 -64
  330. package/dist/middy-Bq0defVg.d.cts.map +0 -1
  331. package/dist/middy-DHWLmUAD.mjs +0 -236
  332. package/dist/middy-DHWLmUAD.mjs.map +0 -1
  333. package/dist/middy-DlWnZilH.cjs +0 -247
  334. package/dist/middy-DlWnZilH.cjs.map +0 -1
  335. package/dist/otel-B9bNoeZ2.mjs +0 -130
  336. package/dist/otel-B9bNoeZ2.mjs.map +0 -1
  337. package/dist/otel-Bk89b1lX.d.cts +0 -101
  338. package/dist/otel-Bk89b1lX.d.cts.map +0 -1
  339. package/dist/otel-BzjOtVxZ.cjs +0 -136
  340. package/dist/otel-BzjOtVxZ.cjs.map +0 -1
  341. package/dist/otel-lPMsM26e.d.mts +0 -101
  342. package/dist/otel-lPMsM26e.d.mts.map +0 -1
  343. package/dist/receiver-D46dfkYI.mjs +0 -89
  344. package/dist/receiver-D46dfkYI.mjs.map +0 -1
  345. package/dist/receiver-DLICx5uU.d.cts +0 -63
  346. package/dist/receiver-DLICx5uU.d.cts.map +0 -1
  347. package/dist/receiver-UeZT-H8u.d.mts +0 -63
  348. package/dist/receiver-UeZT-H8u.d.mts.map +0 -1
  349. package/dist/receiver-slCoAFat.cjs +0 -94
  350. package/dist/receiver-slCoAFat.cjs.map +0 -1
  351. package/dist/redact-BzkITCNW.mjs +0 -83
  352. package/dist/redact-BzkITCNW.mjs.map +0 -1
  353. package/dist/redact-DVaSSPZT.cjs +0 -95
  354. package/dist/redact-DVaSSPZT.cjs.map +0 -1
  355. package/dist/setup-Bkxm4g6b.d.mts +0 -87
  356. package/dist/setup-Bkxm4g6b.d.mts.map +0 -1
  357. package/dist/setup-CbqELCtm.cjs +0 -112
  358. package/dist/setup-CbqELCtm.cjs.map +0 -1
  359. package/dist/setup-D58N1f9O.d.cts +0 -87
  360. package/dist/setup-D58N1f9O.d.cts.map +0 -1
  361. package/dist/setup-P7dAjwih.mjs +0 -100
  362. package/dist/setup-P7dAjwih.mjs.map +0 -1
  363. package/dist/tracing-BX8uY2nR.d.cts +0 -53
  364. package/dist/tracing-BX8uY2nR.d.cts.map +0 -1
  365. package/dist/tracing-Bt1zWRlb.cjs +0 -167
  366. package/dist/tracing-Bt1zWRlb.cjs.map +0 -1
  367. package/dist/tracing-Cijm_5NI.mjs +0 -113
  368. package/dist/tracing-Cijm_5NI.mjs.map +0 -1
  369. package/dist/tracing-PnECEbEu.d.mts +0 -53
  370. package/dist/tracing-PnECEbEu.d.mts.map +0 -1
  371. package/dist/transformer-CFQ4WFk6.mjs +0 -215
  372. package/dist/transformer-CFQ4WFk6.mjs.map +0 -1
  373. package/dist/transformer-CTGsaVfV.d.mts.map +0 -1
  374. package/dist/transformer-Csl6fbgv.cjs +0 -232
  375. package/dist/transformer-Csl6fbgv.cjs.map +0 -1
  376. package/dist/transformer-ICEbxpFf.d.cts.map +0 -1
  377. package/dist/types-B1EIa_cQ.d.mts.map +0 -1
  378. package/dist/types-BMiHgsi4.cjs +0 -78
  379. package/dist/types-BMiHgsi4.cjs.map +0 -1
  380. package/dist/types-BRzW1NM8.d.cts +0 -166
  381. package/dist/types-BRzW1NM8.d.cts.map +0 -1
  382. package/dist/types-BS3Rx8Sk.d.cts +0 -209
  383. package/dist/types-BS3Rx8Sk.d.cts.map +0 -1
  384. package/dist/types-BzQ78Efw.d.mts +0 -166
  385. package/dist/types-BzQ78Efw.d.mts.map +0 -1
  386. package/dist/types-CbNGXnJE.d.mts +0 -209
  387. package/dist/types-CbNGXnJE.d.mts.map +0 -1
  388. package/dist/types-Cj59nqy7.mjs +0 -54
  389. package/dist/types-Cj59nqy7.mjs.map +0 -1
  390. package/dist/types-CmOB7CLO.d.cts.map +0 -1
  391. package/dist/types-DBc0q5KD.d.mts.map +0 -1
  392. package/dist/types-ZW-nfWf6.cjs +0 -40
  393. package/dist/types-ZW-nfWf6.cjs.map +0 -1
  394. package/dist/types-l7Rlb5Mg.d.cts.map +0 -1
  395. package/dist/types-ojhnLdwz.mjs +0 -34
  396. package/dist/types-ojhnLdwz.mjs.map +0 -1
  397. package/dist/ui-assets-BEXqOQLe.cjs +0 -48
  398. package/dist/ui-assets-BEXqOQLe.cjs.map +0 -1
  399. package/dist/ui-assets-BhTDUsrM.mjs +0 -30
  400. package/dist/ui-assets-BhTDUsrM.mjs.map +0 -1
  401. package/dist/ui-assets.cjs +0 -5
  402. package/dist/ui-assets.d.cts +0 -13
  403. package/dist/ui-assets.d.cts.map +0 -1
  404. package/dist/ui-assets.d.mts +0 -13
  405. package/dist/ui-assets.d.mts.map +0 -1
  406. package/dist/ui-assets.mjs +0 -3
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @geekmidas/telescope
2
2
 
3
- Laravel Telescope-style debugging and monitoring for web applications. Capture and inspect HTTP requests, exceptions, and logs in real-time.
3
+ Laravel Telescope-style debugging and monitoring for web applications. Capture HTTP requests, exceptions and logs, and read them back as a JSON API with a WebSocket feed. Headless: there is no dashboard — build whatever UI you want on the JSON.
4
4
 
5
5
  **Framework-agnostic core** with adapters for Hono, AWS Lambda, and more.
6
6
 
@@ -17,7 +17,7 @@ pnpm add @geekmidas/telescope
17
17
  ```typescript
18
18
  import { Hono } from 'hono';
19
19
  import { Telescope, InMemoryStorage } from '@geekmidas/telescope';
20
- import { createMiddleware, createUI } from '@geekmidas/telescope/server/hono';
20
+ import { createApi, createMiddleware } from '@geekmidas/telescope/server/hono';
21
21
 
22
22
  const telescope = new Telescope({
23
23
  storage: new InMemoryStorage(),
@@ -28,8 +28,8 @@ const app = new Hono();
28
28
  // Add middleware to capture requests
29
29
  app.use('*', createMiddleware(telescope));
30
30
 
31
- // Mount the dashboard
32
- app.route('/__telescope', createUI(telescope));
31
+ // Mount the JSON API
32
+ app.route('/__telescope', createApi(telescope));
33
33
 
34
34
  // Your routes
35
35
  app.get('/users', (c) => c.json({ users: [] }));
@@ -37,7 +37,7 @@ app.get('/users', (c) => c.json({ users: [] }));
37
37
  export default app;
38
38
  ```
39
39
 
40
- Visit `http://localhost:3000/__telescope` to view the dashboard.
40
+ Read the data at `http://localhost:3000/__telescope/api/requests` (and `/api/exceptions`, `/api/logs`, …).
41
41
 
42
42
  ### Framework-Agnostic Core
43
43
 
@@ -80,7 +80,7 @@ try {
80
80
  - **Request Recording**: Capture HTTP requests with headers, body, query params, and response
81
81
  - **Exception Tracking**: Record exceptions with stack traces and source context
82
82
  - **Log Aggregation**: Collect application logs with context
83
- - **Real-time Updates**: WebSocket-powered live dashboard
83
+ - **Real-time Updates**: a WebSocket feed of new entries
84
84
  - **Storage Agnostic**: Use in-memory for dev, database for production
85
85
  - **Hono Integration**: First-class middleware and route mounting
86
86
  - **Lambda Integration**: Wrapper and Middy middleware for AWS Lambda with auto-flush
@@ -95,7 +95,7 @@ const telescope = new Telescope({
95
95
  // Optional: Enable/disable telescope (default: true)
96
96
  enabled: true,
97
97
 
98
- // Optional: Dashboard path (default: '/__telescope')
98
+ // Optional: where the JSON API is mounted (default: '/__telescope')
99
99
  path: '/__telescope',
100
100
 
101
101
  // Optional: Record request/response bodies (default: true)
@@ -344,7 +344,7 @@ telescope.destroy();
344
344
  Import from `@geekmidas/telescope/server/hono`:
345
345
 
346
346
  ```typescript
347
- import { createMiddleware, createUI, setupWebSocket, getRequestId } from '@geekmidas/telescope/server/hono';
347
+ import { createApi, createMiddleware, setupWebSocket, getRequestId } from '@geekmidas/telescope/server/hono';
348
348
  ```
349
349
 
350
350
  #### `createMiddleware(telescope)`
@@ -355,12 +355,12 @@ Returns Hono middleware that captures requests and responses.
355
355
  app.use('*', createMiddleware(telescope));
356
356
  ```
357
357
 
358
- #### `createUI(telescope)`
358
+ #### `createApi(telescope)`
359
359
 
360
- Returns a Hono app with dashboard UI and API routes.
360
+ Returns a Hono app serving the JSON API under `/api`.
361
361
 
362
362
  ```typescript
363
- app.route('/__telescope', createUI(telescope));
363
+ app.route('/__telescope', createApi(telescope));
364
364
  ```
365
365
 
366
366
  #### `setupWebSocket(app, telescope, upgradeWebSocket)`
@@ -371,7 +371,7 @@ Set up WebSocket routes for real-time updates.
371
371
  import { createNodeWebSocket } from '@hono/node-ws';
372
372
 
373
373
  const { upgradeWebSocket } = createNodeWebSocket({ app });
374
- setupWebSocket(createUI(telescope), telescope, upgradeWebSocket);
374
+ setupWebSocket(createApi(telescope), telescope, upgradeWebSocket);
375
375
  ```
376
376
 
377
377
  #### `getRequestId(c)`
@@ -542,9 +542,9 @@ const requestLogger = logger.withRequestId('req-abc123');
542
542
  requestLogger.info('Processing request');
543
543
  ```
544
544
 
545
- ## Dashboard API
545
+ ## JSON API
546
546
 
547
- The dashboard UI is served at the configured path. It also exposes a REST API:
547
+ `createApi` serves a read API at the path it is mounted on:
548
548
 
549
549
  | Endpoint | Description |
550
550
  |----------|-------------|
@@ -1,7 +1,5 @@
1
- import { EndpointDetails, EndpointMetrics, MetricsQueryOptions, RequestEntry, RequestMetrics, StatusDistribution } from "./types-l7Rlb5Mg.cjs";
2
-
1
+ import { f as RequestEntry, g as StatusDistribution, n as EndpointDetails, p as RequestMetrics, r as EndpointMetrics, s as MetricsQueryOptions } from "./types-BVujq4zd.mjs";
3
2
  //#region src/metrics/MetricsAggregator.d.ts
4
-
5
3
  /**
6
4
  * Configuration for MetricsAggregator
7
5
  */
@@ -55,7 +53,6 @@ declare class MetricsAggregator {
55
53
  private percentile;
56
54
  private emptyMetrics;
57
55
  }
58
- //# sourceMappingURL=MetricsAggregator.d.ts.map
59
56
  //#endregion
60
- export { MetricsAggregator, MetricsAggregatorOptions };
61
- //# sourceMappingURL=MetricsAggregator-4SqelGcG.d.cts.map
57
+ export { MetricsAggregatorOptions as n, MetricsAggregator as t };
58
+ //# sourceMappingURL=MetricsAggregator-BJdIvfEv.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsAggregator-BJdIvfEv.d.mts","names":[],"sources":["../src/metrics/MetricsAggregator.ts"],"mappings":";;;;;UAgBiB;;EAEhB;;EAEA;;EAEA;;cAwBY;UACJ;UACA;UACA;UAEA;EAGR,YAAY,UAAS;;;;EAOrB,OAAO,OAAO;;;;EAiBd,WAAW,UAAS,sBAA2B;;;;EAwD/C,mBAAmB,UAAS,sBAA2B;;;;EAiCvD,sBAAsB,UAAS,sBAA2B;;;;EAwB1D,mBACC,gBACA,cACA,UAAS,sBACP;;;;EAyEH;UAUQ;UAMA;UAuCA;UAuCA;UAsDA;UAmBA;UAgBA;UAMA;UAcA;UAqDA;UAiBA"}
@@ -1,7 +1,5 @@
1
- import { EndpointDetails, EndpointMetrics, MetricsQueryOptions, RequestEntry, RequestMetrics, StatusDistribution } from "./types-B1EIa_cQ.mjs";
2
-
1
+ import { f as RequestEntry, g as StatusDistribution, n as EndpointDetails, p as RequestMetrics, r as EndpointMetrics, s as MetricsQueryOptions } from "./types-BVujq4zd.cjs";
3
2
  //#region src/metrics/MetricsAggregator.d.ts
4
-
5
3
  /**
6
4
  * Configuration for MetricsAggregator
7
5
  */
@@ -55,7 +53,6 @@ declare class MetricsAggregator {
55
53
  private percentile;
56
54
  private emptyMetrics;
57
55
  }
58
- //# sourceMappingURL=MetricsAggregator.d.ts.map
59
56
  //#endregion
60
- export { MetricsAggregator, MetricsAggregatorOptions };
61
- //# sourceMappingURL=MetricsAggregator-DZrW8ls6.d.mts.map
57
+ export { MetricsAggregatorOptions as n, MetricsAggregator as t };
58
+ //# sourceMappingURL=MetricsAggregator-CnC3oT5q.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsAggregator-CnC3oT5q.d.cts","names":[],"sources":["../src/metrics/MetricsAggregator.ts"],"mappings":";;;;;UAgBiB;;EAEhB;;EAEA;;EAEA;;cAwBY;UACJ;UACA;UACA;UAEA;EAGR,YAAY,UAAS;;;;EAOrB,OAAO,OAAO;;;;EAiBd,WAAW,UAAS,sBAA2B;;;;EAwD/C,mBAAmB,UAAS,sBAA2B;;;;EAiCvD,sBAAsB,UAAS,sBAA2B;;;;EAwB1D,mBACC,gBACA,cACA,UAAS,sBACP;;;;EAyEH;UAUQ;UAMA;UAuCA;UAuCA;UAsDA;UAmBA;UAgBA;UAMA;UAcA;UAqDA;UAiBA"}
@@ -1,8 +1,6 @@
1
- import { EndpointDetails, EndpointMetrics, ExceptionEntry, LogEntry, MetricsQueryOptions, MetricsSnapshot, QueryOptions, RequestEntry, RequestMetrics, StatusDistribution, TelescopeEvent, TelescopeOptions, TelescopeStats } from "./types-l7Rlb5Mg.cjs";
2
- import { MetricsAggregatorOptions } from "./MetricsAggregator-4SqelGcG.cjs";
3
-
1
+ import { _ as TelescopeEvent, a as LogEntry, c as MetricsSnapshot, f as RequestEntry, g as StatusDistribution, i as ExceptionEntry, n as EndpointDetails, p as RequestMetrics, r as EndpointMetrics, s as MetricsQueryOptions, u as QueryOptions, x as TelescopeStats, y as TelescopeOptions } from "./types-BVujq4zd.mjs";
2
+ import { n as MetricsAggregatorOptions } from "./MetricsAggregator-BJdIvfEv.mjs";
4
3
  //#region src/Telescope.d.ts
5
-
6
4
  /**
7
5
  * Framework-agnostic Telescope class for debugging and monitoring applications.
8
6
  * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.
@@ -166,7 +164,6 @@ declare class Telescope {
166
164
  private parseStack;
167
165
  private autoPrune;
168
166
  }
169
- //# sourceMappingURL=Telescope.d.ts.map
170
167
  //#endregion
171
- export { Telescope };
172
- //# sourceMappingURL=Telescope-D4nmwDRA.d.cts.map
168
+ export { Telescope as t };
169
+ //# sourceMappingURL=Telescope-BVfDvVvY.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telescope-BVfDvVvY.d.mts","names":["_$__types0.TelescopeStats"],"sources":["../src/Telescope.ts"],"mappings":";;;;;;;cA4Ba;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;EAER,YACC,SAAS;IAAqB,UAAU;;;;;EAuBnC,cACL,OAAO,KAAK,oCACV;;;;UA+BW;;;;;;;;;;;EAsBR,IACL,SAAS;IACR;IACA;IACA,UAAU;IACV;OAEC;;;;EAsBG,MACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,KACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,KACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,MACL,iBACA,UAAU,yBACV,qBACE;UAIW;;;;EA4BR,UAAU,OAAO,OAAO,qBAAqB;;;;EA8B7C,YAAY,UAAU,eAAe,QAAQ;;;;EAO7C,WAAW,aAAa,QAAQ;;;;EAOhC,cAAc,UAAU,eAAe,QAAQ;;;;EAO/C,aAAa,aAAa,QAAQ;;;;EAOlC,QAAQ,UAAU,eAAe,QAAQ;;;;EAOzC,YAAQ,QAPyBA;;;;EAkBvC,WAAW,UAAU,sBAAsB;;;;EAO3C,mBAAmB,UAAU,sBAAsB;;;;EAOnD,mBACC,gBACA,cACA,UAAU,sBACR;;;;EAOH,sBAAsB,UAAU,sBAAsB;;;;EAOtD;;;;EAOA,sBAAsB;;;;;;;EAuBtB,sBAAsB;;;;EAoBtB;;;;EAcA,YAAY,IAAI;;;;EAYhB,eAAe,IAAI;;;;EAOnB,UAAU,OAAO;;;;EAkBX,MAAM,WAAW,OAAO;;;;EAO9B;;;;MAeI;;;;MAOA;;;;MAOA;;;;MAOA;;;;EAOJ,aAAa;UAqBL;UAeA;UA2CM"}
@@ -1,8 +1,6 @@
1
- import { EndpointDetails, EndpointMetrics, ExceptionEntry, LogEntry, MetricsQueryOptions, MetricsSnapshot, QueryOptions, RequestEntry, RequestMetrics, StatusDistribution, TelescopeEvent, TelescopeOptions, TelescopeStats } from "./types-B1EIa_cQ.mjs";
2
- import { MetricsAggregatorOptions } from "./MetricsAggregator-DZrW8ls6.mjs";
3
-
1
+ import { _ as TelescopeEvent, a as LogEntry, c as MetricsSnapshot, f as RequestEntry, g as StatusDistribution, i as ExceptionEntry, n as EndpointDetails, p as RequestMetrics, r as EndpointMetrics, s as MetricsQueryOptions, u as QueryOptions, x as TelescopeStats, y as TelescopeOptions } from "./types-BVujq4zd.cjs";
2
+ import { n as MetricsAggregatorOptions } from "./MetricsAggregator-CnC3oT5q.cjs";
4
3
  //#region src/Telescope.d.ts
5
-
6
4
  /**
7
5
  * Framework-agnostic Telescope class for debugging and monitoring applications.
8
6
  * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.
@@ -166,7 +164,6 @@ declare class Telescope {
166
164
  private parseStack;
167
165
  private autoPrune;
168
166
  }
169
- //# sourceMappingURL=Telescope.d.ts.map
170
167
  //#endregion
171
- export { Telescope };
172
- //# sourceMappingURL=Telescope-Dl6VSfxd.d.mts.map
168
+ export { Telescope as t };
169
+ //# sourceMappingURL=Telescope-DeqSHfuB.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telescope-DeqSHfuB.d.cts","names":["_$__types0.TelescopeStats"],"sources":["../src/Telescope.ts"],"mappings":";;;;;;;cA4Ba;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;EAER,YACC,SAAS;IAAqB,UAAU;;;;;EAuBnC,cACL,OAAO,KAAK,oCACV;;;;UA+BW;;;;;;;;;;;EAsBR,IACL,SAAS;IACR;IACA;IACA,UAAU;IACV;OAEC;;;;EAsBG,MACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,KACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,KACL,iBACA,UAAU,yBACV,qBACE;;;;EAOG,MACL,iBACA,UAAU,yBACV,qBACE;UAIW;;;;EA4BR,UAAU,OAAO,OAAO,qBAAqB;;;;EA8B7C,YAAY,UAAU,eAAe,QAAQ;;;;EAO7C,WAAW,aAAa,QAAQ;;;;EAOhC,cAAc,UAAU,eAAe,QAAQ;;;;EAO/C,aAAa,aAAa,QAAQ;;;;EAOlC,QAAQ,UAAU,eAAe,QAAQ;;;;EAOzC,YAAQ,QAPyBA;;;;EAkBvC,WAAW,UAAU,sBAAsB;;;;EAO3C,mBAAmB,UAAU,sBAAsB;;;;EAOnD,mBACC,gBACA,cACA,UAAU,sBACR;;;;EAOH,sBAAsB,UAAU,sBAAsB;;;;EAOtD;;;;EAOA,sBAAsB;;;;;;;EAuBtB,sBAAsB;;;;EAoBtB;;;;EAcA,YAAY,IAAI;;;;EAYhB,eAAe,IAAI;;;;EAOnB,UAAU,OAAO;;;;EAkBX,MAAM,WAAW,OAAO;;;;EAO9B;;;;MAeI;;;;MAOA;;;;MAOA;;;;MAOA;;;;EAOJ,aAAa;UAqBL;UAeA;UA2CM"}
@@ -1,5 +1,386 @@
1
- require('./MetricsAggregator-B7lUICdH.cjs');
2
- require('./redact-DVaSSPZT.cjs');
3
- const require_Telescope = require('./Telescope-Cs3fv8jt.cjs');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_metrics_MetricsAggregator = require("./metrics/MetricsAggregator.cjs");
3
+ const require_redact = require("./redact.cjs");
4
+ let nanoid = require("nanoid");
5
+ //#region src/Telescope.ts
6
+ /**
7
+ * Framework-agnostic Telescope class for debugging and monitoring applications.
8
+ * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.
9
+ */
10
+ var Telescope = class {
11
+ storage;
12
+ options;
13
+ wsClients = /* @__PURE__ */ new Set();
14
+ pruneInterval;
15
+ metricsBroadcastInterval;
16
+ redactor;
17
+ metricsAggregator;
18
+ constructor(options) {
19
+ this.storage = options.storage;
20
+ this.options = this.normalizeOptions(options);
21
+ this.redactor = require_redact.createRedactor(options.redact);
22
+ this.metricsAggregator = new require_metrics_MetricsAggregator.MetricsAggregator(options.metrics);
23
+ if (this.options.pruneAfterHours) {
24
+ const intervalMs = 36e5;
25
+ this.pruneInterval = setInterval(() => {
26
+ this.autoPrune().catch(console.error);
27
+ }, intervalMs);
28
+ }
29
+ }
30
+ /**
31
+ * Record a request entry
32
+ */
33
+ async recordRequest(entry) {
34
+ if (!this.options.enabled) return "";
35
+ const id = this.options.getRequestId?.() ?? (0, nanoid.nanoid)();
36
+ let fullEntry = {
37
+ ...entry,
38
+ id,
39
+ timestamp: /* @__PURE__ */ new Date()
40
+ };
41
+ if (this.redactor) fullEntry = this.redactor(fullEntry);
42
+ this.metricsAggregator.record(fullEntry);
43
+ await this.storage.saveRequest(fullEntry);
44
+ this.broadcast({
45
+ type: "request",
46
+ payload: fullEntry,
47
+ timestamp: Date.now()
48
+ });
49
+ return id;
50
+ }
51
+ /**
52
+ * Log entry input for batch operations
53
+ */
54
+ async saveLogEntries(entries) {
55
+ if (this.storage.saveLogs) await this.storage.saveLogs(entries);
56
+ else await Promise.all(entries.map((entry) => this.storage.saveLog(entry)));
57
+ for (const entry of entries) this.broadcast({
58
+ type: "log",
59
+ payload: entry,
60
+ timestamp: Date.now()
61
+ });
62
+ }
63
+ /**
64
+ * Record log entries in batch.
65
+ * More efficient than individual calls for database storage.
66
+ *
67
+ * @example
68
+ * await telescope.log([
69
+ * { level: 'info', message: 'Request started' },
70
+ * { level: 'debug', message: 'Processing...', context: { step: 1 } },
71
+ * ]);
72
+ */
73
+ async log(entries) {
74
+ if (!this.options.enabled || entries.length === 0) return;
75
+ const timestamp = /* @__PURE__ */ new Date();
76
+ const logEntries = entries.map((e) => {
77
+ const entry = {
78
+ id: (0, nanoid.nanoid)(),
79
+ level: e.level,
80
+ message: e.message,
81
+ context: e.context,
82
+ requestId: e.requestId,
83
+ timestamp
84
+ };
85
+ return this.redactor ? this.redactor(entry) : entry;
86
+ });
87
+ await this.saveLogEntries(logEntries);
88
+ }
89
+ /**
90
+ * Log a debug message
91
+ */
92
+ async debug(message, context, requestId) {
93
+ return this.logSingle("debug", message, context, requestId);
94
+ }
95
+ /**
96
+ * Log an info message
97
+ */
98
+ async info(message, context, requestId) {
99
+ return this.logSingle("info", message, context, requestId);
100
+ }
101
+ /**
102
+ * Log a warning message
103
+ */
104
+ async warn(message, context, requestId) {
105
+ return this.logSingle("warn", message, context, requestId);
106
+ }
107
+ /**
108
+ * Log an error message
109
+ */
110
+ async error(message, context, requestId) {
111
+ return this.logSingle("error", message, context, requestId);
112
+ }
113
+ async logSingle(level, message, context, requestId) {
114
+ if (!this.options.enabled) return;
115
+ let entry = {
116
+ id: (0, nanoid.nanoid)(),
117
+ level,
118
+ message,
119
+ context,
120
+ requestId,
121
+ timestamp: /* @__PURE__ */ new Date()
122
+ };
123
+ if (this.redactor) entry = this.redactor(entry);
124
+ await this.storage.saveLog(entry);
125
+ this.broadcast({
126
+ type: "log",
127
+ payload: entry,
128
+ timestamp: Date.now()
129
+ });
130
+ }
131
+ /**
132
+ * Record an exception
133
+ */
134
+ async exception(error, requestId) {
135
+ if (!this.options.enabled) return;
136
+ const stack = this.parseStack(error.stack || "");
137
+ const entry = {
138
+ id: (0, nanoid.nanoid)(),
139
+ name: error.name,
140
+ message: error.message,
141
+ stack,
142
+ requestId,
143
+ timestamp: /* @__PURE__ */ new Date(),
144
+ handled: false
145
+ };
146
+ await this.storage.saveException(entry);
147
+ this.broadcast({
148
+ type: "exception",
149
+ payload: entry,
150
+ timestamp: Date.now()
151
+ });
152
+ }
153
+ /**
154
+ * Get requests from storage
155
+ */
156
+ async getRequests(options) {
157
+ return this.storage.getRequests(options);
158
+ }
159
+ /**
160
+ * Get a single request by ID
161
+ */
162
+ async getRequest(id) {
163
+ return this.storage.getRequest(id);
164
+ }
165
+ /**
166
+ * Get exceptions from storage
167
+ */
168
+ async getExceptions(options) {
169
+ return this.storage.getExceptions(options);
170
+ }
171
+ /**
172
+ * Get a single exception by ID
173
+ */
174
+ async getException(id) {
175
+ return this.storage.getException(id);
176
+ }
177
+ /**
178
+ * Get logs from storage
179
+ */
180
+ async getLogs(options) {
181
+ return this.storage.getLogs(options);
182
+ }
183
+ /**
184
+ * Get storage statistics
185
+ */
186
+ async getStats() {
187
+ return this.storage.getStats();
188
+ }
189
+ /**
190
+ * Get aggregated request metrics
191
+ */
192
+ getMetrics(options) {
193
+ return this.metricsAggregator.getMetrics(options);
194
+ }
195
+ /**
196
+ * Get metrics for individual endpoints
197
+ */
198
+ getEndpointMetrics(options) {
199
+ return this.metricsAggregator.getEndpointMetrics(options);
200
+ }
201
+ /**
202
+ * Get detailed metrics for a specific endpoint
203
+ */
204
+ getEndpointDetails(method, path, options) {
205
+ return this.metricsAggregator.getEndpointDetails(method, path, options);
206
+ }
207
+ /**
208
+ * Get status code distribution
209
+ */
210
+ getStatusDistribution(options) {
211
+ return this.metricsAggregator.getStatusDistribution(options);
212
+ }
213
+ /**
214
+ * Reset metrics data
215
+ */
216
+ resetMetrics() {
217
+ this.metricsAggregator.reset();
218
+ }
219
+ /**
220
+ * Get a real-time metrics snapshot for broadcasting
221
+ */
222
+ getMetricsSnapshot() {
223
+ const metrics = this.metricsAggregator.getMetrics();
224
+ const statusDist = this.metricsAggregator.getStatusDistribution();
225
+ return {
226
+ timestamp: Date.now(),
227
+ totalRequests: metrics.totalRequests,
228
+ requestsPerSecond: metrics.requestsPerSecond,
229
+ avgDuration: metrics.avgDuration,
230
+ errorRate: metrics.errorRate,
231
+ p50: metrics.p50Duration,
232
+ p95: metrics.p95Duration,
233
+ p99: metrics.p99Duration,
234
+ statusDistribution: statusDist
235
+ };
236
+ }
237
+ /**
238
+ * Start broadcasting metrics to WebSocket clients at a given interval.
239
+ * Call this after setting up WebSocket to enable real-time metrics updates.
240
+ *
241
+ * @param intervalMs - Broadcast interval in milliseconds (default: 5000)
242
+ */
243
+ startMetricsBroadcast(intervalMs = 5e3) {
244
+ if (this.metricsBroadcastInterval) return;
245
+ this.metricsBroadcastInterval = setInterval(() => {
246
+ if (this.wsClients.size > 0) {
247
+ const snapshot = this.getMetricsSnapshot();
248
+ this.broadcast({
249
+ type: "metrics",
250
+ payload: snapshot,
251
+ timestamp: Date.now()
252
+ });
253
+ }
254
+ }, intervalMs);
255
+ }
256
+ /**
257
+ * Stop broadcasting metrics to WebSocket clients
258
+ */
259
+ stopMetricsBroadcast() {
260
+ if (this.metricsBroadcastInterval) {
261
+ clearInterval(this.metricsBroadcastInterval);
262
+ this.metricsBroadcastInterval = void 0;
263
+ }
264
+ }
265
+ /**
266
+ * Add a WebSocket client for real-time updates
267
+ */
268
+ addWsClient(ws) {
269
+ this.wsClients.add(ws);
270
+ this.broadcast({
271
+ type: "connected",
272
+ payload: { clientCount: this.wsClients.size },
273
+ timestamp: Date.now()
274
+ });
275
+ }
276
+ /**
277
+ * Remove a WebSocket client
278
+ */
279
+ removeWsClient(ws) {
280
+ this.wsClients.delete(ws);
281
+ }
282
+ /**
283
+ * Broadcast an event to all connected WebSocket clients
284
+ */
285
+ broadcast(event) {
286
+ const data = JSON.stringify(event);
287
+ for (const client of this.wsClients) try {
288
+ client.send(data);
289
+ } catch {
290
+ this.wsClients.delete(client);
291
+ }
292
+ }
293
+ /**
294
+ * Manually prune old entries
295
+ */
296
+ async prune(olderThan) {
297
+ return this.storage.prune(olderThan);
298
+ }
299
+ /**
300
+ * Clean up resources
301
+ */
302
+ destroy() {
303
+ if (this.pruneInterval) clearInterval(this.pruneInterval);
304
+ this.stopMetricsBroadcast();
305
+ this.wsClients.clear();
306
+ }
307
+ /**
308
+ * Get the telescope path
309
+ */
310
+ get path() {
311
+ return this.options.path;
312
+ }
313
+ /**
314
+ * Check if telescope is enabled
315
+ */
316
+ get enabled() {
317
+ return this.options.enabled;
318
+ }
319
+ /**
320
+ * Check if body recording is enabled
321
+ */
322
+ get recordBody() {
323
+ return this.options.recordBody;
324
+ }
325
+ /**
326
+ * Get max body size
327
+ */
328
+ get maxBodySize() {
329
+ return this.options.maxBodySize;
330
+ }
331
+ /**
332
+ * Check if a path should be ignored
333
+ */
334
+ shouldIgnore(path) {
335
+ if (path.startsWith(this.options.path)) return true;
336
+ return this.options.ignorePatterns.some((pattern) => {
337
+ if (pattern.includes("*")) return new RegExp(`^${pattern.replace(/\*/g, ".*").replace(/\?/g, ".")}$`).test(path);
338
+ return path.startsWith(pattern);
339
+ });
340
+ }
341
+ normalizeOptions(options) {
342
+ return {
343
+ storage: options.storage,
344
+ enabled: options.enabled ?? true,
345
+ path: options.path ?? "/__telescope",
346
+ recordBody: options.recordBody ?? true,
347
+ maxBodySize: options.maxBodySize ?? 65536,
348
+ ignorePatterns: options.ignorePatterns ?? [],
349
+ pruneAfterHours: options.pruneAfterHours,
350
+ getRequestId: options.getRequestId
351
+ };
352
+ }
353
+ parseStack(stack) {
354
+ const lines = stack.split("\n").slice(1);
355
+ const frames = [];
356
+ for (const line of lines) {
357
+ const match = line.match(/at\s+(.+?)\s+\((.+):(\d+):(\d+)\)/) || line.match(/at\s+(.+):(\d+):(\d+)/);
358
+ if (match) {
359
+ if (match.length === 5 && match[1] && match[2] && match[3] && match[4]) frames.push({
360
+ function: match[1],
361
+ file: match[2],
362
+ line: parseInt(match[3], 10),
363
+ column: parseInt(match[4], 10),
364
+ isApp: !match[2].includes("node_modules")
365
+ });
366
+ else if (match.length === 4 && match[1] && match[2] && match[3]) frames.push({
367
+ function: "<anonymous>",
368
+ file: match[1],
369
+ line: parseInt(match[2], 10),
370
+ column: parseInt(match[3], 10),
371
+ isApp: !match[1].includes("node_modules")
372
+ });
373
+ }
374
+ }
375
+ return frames;
376
+ }
377
+ async autoPrune() {
378
+ if (!this.options.pruneAfterHours) return;
379
+ const olderThan = /* @__PURE__ */ new Date(Date.now() - this.options.pruneAfterHours * 60 * 60 * 1e3);
380
+ await this.storage.prune(olderThan);
381
+ }
382
+ };
383
+ //#endregion
384
+ exports.Telescope = Telescope;
4
385
 
5
- exports.Telescope = require_Telescope.Telescope;
386
+ //# sourceMappingURL=Telescope.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telescope.cjs","names":["createRedactor","MetricsAggregator"],"sources":["../src/Telescope.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport {\n\tMetricsAggregator,\n\ttype MetricsAggregatorOptions,\n} from './metrics/MetricsAggregator';\nimport { createRedactor, type Redactor } from './redact';\nimport type {\n\tEndpointDetails,\n\tEndpointMetrics,\n\tExceptionEntry,\n\tLogEntry,\n\tMetricsQueryOptions,\n\tMetricsSnapshot,\n\tNormalizedTelescopeOptions,\n\tQueryOptions,\n\tRequestEntry,\n\tRequestMetrics,\n\tStackFrame,\n\tStatusDistribution,\n\tTelescopeEvent,\n\tTelescopeOptions,\n\tTelescopeStorage,\n} from './types';\n\n/**\n * Framework-agnostic Telescope class for debugging and monitoring applications.\n * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.\n */\nexport class Telescope {\n\tprivate storage: TelescopeStorage;\n\tprivate options: NormalizedTelescopeOptions;\n\tprivate wsClients = new Set<WebSocket>();\n\tprivate pruneInterval?: ReturnType<typeof setInterval>;\n\tprivate metricsBroadcastInterval?: ReturnType<typeof setInterval>;\n\tprivate redactor?: Redactor;\n\tprivate metricsAggregator: MetricsAggregator;\n\n\tconstructor(\n\t\toptions: TelescopeOptions & { metrics?: MetricsAggregatorOptions },\n\t) {\n\t\tthis.storage = options.storage;\n\t\tthis.options = this.normalizeOptions(options);\n\t\tthis.redactor = createRedactor(options.redact);\n\t\tthis.metricsAggregator = new MetricsAggregator(options.metrics);\n\n\t\t// Set up auto-pruning if configured\n\t\tif (this.options.pruneAfterHours) {\n\t\t\tconst intervalMs = 60 * 60 * 1000; // 1 hour\n\t\t\tthis.pruneInterval = setInterval(() => {\n\t\t\t\tthis.autoPrune().catch(console.error);\n\t\t\t}, intervalMs);\n\t\t}\n\t}\n\n\t// ============================================\n\t// Public API - Recording\n\t// ============================================\n\n\t/**\n\t * Record a request entry\n\t */\n\tasync recordRequest(\n\t\tentry: Omit<RequestEntry, 'id' | 'timestamp'>,\n\t): Promise<string> {\n\t\tif (!this.options.enabled) return '';\n\n\t\t// Use injected request ID from context if available, otherwise generate one\n\t\tconst id = this.options.getRequestId?.() ?? nanoid();\n\t\tlet fullEntry: RequestEntry = {\n\t\t\t...entry,\n\t\t\tid,\n\t\t\ttimestamp: new Date(),\n\t\t};\n\n\t\t// Apply redaction if configured\n\t\tif (this.redactor) {\n\t\t\tfullEntry = this.redactor(fullEntry);\n\t\t}\n\n\t\t// Record metrics (before storage for real-time aggregation)\n\t\tthis.metricsAggregator.record(fullEntry);\n\n\t\tawait this.storage.saveRequest(fullEntry);\n\t\tthis.broadcast({\n\t\t\ttype: 'request',\n\t\t\tpayload: fullEntry,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t\treturn id;\n\t}\n\n\t/**\n\t * Log entry input for batch operations\n\t */\n\tprivate async saveLogEntries(entries: LogEntry[]): Promise<void> {\n\t\tif (this.storage.saveLogs) {\n\t\t\tawait this.storage.saveLogs(entries);\n\t\t} else {\n\t\t\tawait Promise.all(entries.map((entry) => this.storage.saveLog(entry)));\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tthis.broadcast({ type: 'log', payload: entry, timestamp: Date.now() });\n\t\t}\n\t}\n\n\t/**\n\t * Record log entries in batch.\n\t * More efficient than individual calls for database storage.\n\t *\n\t * @example\n\t * await telescope.log([\n\t * { level: 'info', message: 'Request started' },\n\t * { level: 'debug', message: 'Processing...', context: { step: 1 } },\n\t * ]);\n\t */\n\tasync log(\n\t\tentries: Array<{\n\t\t\tlevel: 'debug' | 'info' | 'warn' | 'error';\n\t\t\tmessage: string;\n\t\t\tcontext?: Record<string, unknown>;\n\t\t\trequestId?: string;\n\t\t}>,\n\t): Promise<void> {\n\t\tif (!this.options.enabled || entries.length === 0) return;\n\n\t\tconst timestamp = new Date();\n\t\tconst logEntries: LogEntry[] = entries.map((e) => {\n\t\t\tconst entry: LogEntry = {\n\t\t\t\tid: nanoid(),\n\t\t\t\tlevel: e.level,\n\t\t\t\tmessage: e.message,\n\t\t\t\tcontext: e.context,\n\t\t\t\trequestId: e.requestId,\n\t\t\t\ttimestamp,\n\t\t\t};\n\t\t\treturn this.redactor ? this.redactor(entry) : entry;\n\t\t});\n\n\t\tawait this.saveLogEntries(logEntries);\n\t}\n\n\t/**\n\t * Log a debug message\n\t */\n\tasync debug(\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>,\n\t\trequestId?: string,\n\t): Promise<void> {\n\t\treturn this.logSingle('debug', message, context, requestId);\n\t}\n\n\t/**\n\t * Log an info message\n\t */\n\tasync info(\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>,\n\t\trequestId?: string,\n\t): Promise<void> {\n\t\treturn this.logSingle('info', message, context, requestId);\n\t}\n\n\t/**\n\t * Log a warning message\n\t */\n\tasync warn(\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>,\n\t\trequestId?: string,\n\t): Promise<void> {\n\t\treturn this.logSingle('warn', message, context, requestId);\n\t}\n\n\t/**\n\t * Log an error message\n\t */\n\tasync error(\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>,\n\t\trequestId?: string,\n\t): Promise<void> {\n\t\treturn this.logSingle('error', message, context, requestId);\n\t}\n\n\tprivate async logSingle(\n\t\tlevel: LogEntry['level'],\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>,\n\t\trequestId?: string,\n\t): Promise<void> {\n\t\tif (!this.options.enabled) return;\n\n\t\tlet entry: LogEntry = {\n\t\t\tid: nanoid(),\n\t\t\tlevel,\n\t\t\tmessage,\n\t\t\tcontext,\n\t\t\trequestId,\n\t\t\ttimestamp: new Date(),\n\t\t};\n\n\t\tif (this.redactor) {\n\t\t\tentry = this.redactor(entry);\n\t\t}\n\n\t\tawait this.storage.saveLog(entry);\n\t\tthis.broadcast({ type: 'log', payload: entry, timestamp: Date.now() });\n\t}\n\n\t/**\n\t * Record an exception\n\t */\n\tasync exception(error: Error, requestId?: string): Promise<void> {\n\t\tif (!this.options.enabled) return;\n\n\t\tconst stack = this.parseStack(error.stack || '');\n\n\t\tconst entry: ExceptionEntry = {\n\t\t\tid: nanoid(),\n\t\t\tname: error.name,\n\t\t\tmessage: error.message,\n\t\t\tstack,\n\t\t\trequestId,\n\t\t\ttimestamp: new Date(),\n\t\t\thandled: false,\n\t\t};\n\n\t\tawait this.storage.saveException(entry);\n\t\tthis.broadcast({\n\t\t\ttype: 'exception',\n\t\t\tpayload: entry,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t// ============================================\n\t// Public API - Data Access\n\t// ============================================\n\n\t/**\n\t * Get requests from storage\n\t */\n\tasync getRequests(options?: QueryOptions): Promise<RequestEntry[]> {\n\t\treturn this.storage.getRequests(options);\n\t}\n\n\t/**\n\t * Get a single request by ID\n\t */\n\tasync getRequest(id: string): Promise<RequestEntry | null> {\n\t\treturn this.storage.getRequest(id);\n\t}\n\n\t/**\n\t * Get exceptions from storage\n\t */\n\tasync getExceptions(options?: QueryOptions): Promise<ExceptionEntry[]> {\n\t\treturn this.storage.getExceptions(options);\n\t}\n\n\t/**\n\t * Get a single exception by ID\n\t */\n\tasync getException(id: string): Promise<ExceptionEntry | null> {\n\t\treturn this.storage.getException(id);\n\t}\n\n\t/**\n\t * Get logs from storage\n\t */\n\tasync getLogs(options?: QueryOptions): Promise<LogEntry[]> {\n\t\treturn this.storage.getLogs(options);\n\t}\n\n\t/**\n\t * Get storage statistics\n\t */\n\tasync getStats() {\n\t\treturn this.storage.getStats();\n\t}\n\n\t// ============================================\n\t// Public API - Metrics\n\t// ============================================\n\n\t/**\n\t * Get aggregated request metrics\n\t */\n\tgetMetrics(options?: MetricsQueryOptions): RequestMetrics {\n\t\treturn this.metricsAggregator.getMetrics(options);\n\t}\n\n\t/**\n\t * Get metrics for individual endpoints\n\t */\n\tgetEndpointMetrics(options?: MetricsQueryOptions): EndpointMetrics[] {\n\t\treturn this.metricsAggregator.getEndpointMetrics(options);\n\t}\n\n\t/**\n\t * Get detailed metrics for a specific endpoint\n\t */\n\tgetEndpointDetails(\n\t\tmethod: string,\n\t\tpath: string,\n\t\toptions?: MetricsQueryOptions,\n\t): EndpointDetails | null {\n\t\treturn this.metricsAggregator.getEndpointDetails(method, path, options);\n\t}\n\n\t/**\n\t * Get status code distribution\n\t */\n\tgetStatusDistribution(options?: MetricsQueryOptions): StatusDistribution {\n\t\treturn this.metricsAggregator.getStatusDistribution(options);\n\t}\n\n\t/**\n\t * Reset metrics data\n\t */\n\tresetMetrics(): void {\n\t\tthis.metricsAggregator.reset();\n\t}\n\n\t/**\n\t * Get a real-time metrics snapshot for broadcasting\n\t */\n\tgetMetricsSnapshot(): MetricsSnapshot {\n\t\tconst metrics = this.metricsAggregator.getMetrics();\n\t\tconst statusDist = this.metricsAggregator.getStatusDistribution();\n\n\t\treturn {\n\t\t\ttimestamp: Date.now(),\n\t\t\ttotalRequests: metrics.totalRequests,\n\t\t\trequestsPerSecond: metrics.requestsPerSecond,\n\t\t\tavgDuration: metrics.avgDuration,\n\t\t\terrorRate: metrics.errorRate,\n\t\t\tp50: metrics.p50Duration,\n\t\t\tp95: metrics.p95Duration,\n\t\t\tp99: metrics.p99Duration,\n\t\t\tstatusDistribution: statusDist,\n\t\t};\n\t}\n\n\t/**\n\t * Start broadcasting metrics to WebSocket clients at a given interval.\n\t * Call this after setting up WebSocket to enable real-time metrics updates.\n\t *\n\t * @param intervalMs - Broadcast interval in milliseconds (default: 5000)\n\t */\n\tstartMetricsBroadcast(intervalMs = 5000): void {\n\t\tif (this.metricsBroadcastInterval) {\n\t\t\treturn; // Already running\n\t\t}\n\n\t\tthis.metricsBroadcastInterval = setInterval(() => {\n\t\t\tif (this.wsClients.size > 0) {\n\t\t\t\tconst snapshot = this.getMetricsSnapshot();\n\t\t\t\tthis.broadcast({\n\t\t\t\t\ttype: 'metrics',\n\t\t\t\t\tpayload: snapshot,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\t\t\t}\n\t\t}, intervalMs);\n\t}\n\n\t/**\n\t * Stop broadcasting metrics to WebSocket clients\n\t */\n\tstopMetricsBroadcast(): void {\n\t\tif (this.metricsBroadcastInterval) {\n\t\t\tclearInterval(this.metricsBroadcastInterval);\n\t\t\tthis.metricsBroadcastInterval = undefined;\n\t\t}\n\t}\n\n\t// ============================================\n\t// Public API - WebSocket\n\t// ============================================\n\n\t/**\n\t * Add a WebSocket client for real-time updates\n\t */\n\taddWsClient(ws: WebSocket): void {\n\t\tthis.wsClients.add(ws);\n\t\tthis.broadcast({\n\t\t\ttype: 'connected',\n\t\t\tpayload: { clientCount: this.wsClients.size },\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t/**\n\t * Remove a WebSocket client\n\t */\n\tremoveWsClient(ws: WebSocket): void {\n\t\tthis.wsClients.delete(ws);\n\t}\n\n\t/**\n\t * Broadcast an event to all connected WebSocket clients\n\t */\n\tbroadcast(event: TelescopeEvent): void {\n\t\tconst data = JSON.stringify(event);\n\t\tfor (const client of this.wsClients) {\n\t\t\ttry {\n\t\t\t\tclient.send(data);\n\t\t\t} catch {\n\t\t\t\tthis.wsClients.delete(client);\n\t\t\t}\n\t\t}\n\t}\n\n\t// ============================================\n\t// Public API - Lifecycle\n\t// ============================================\n\n\t/**\n\t * Manually prune old entries\n\t */\n\tasync prune(olderThan: Date): Promise<number> {\n\t\treturn this.storage.prune(olderThan);\n\t}\n\n\t/**\n\t * Clean up resources\n\t */\n\tdestroy(): void {\n\t\tif (this.pruneInterval) {\n\t\t\tclearInterval(this.pruneInterval);\n\t\t}\n\t\tthis.stopMetricsBroadcast();\n\t\tthis.wsClients.clear();\n\t}\n\n\t// ============================================\n\t// Public API - Configuration\n\t// ============================================\n\n\t/**\n\t * Get the telescope path\n\t */\n\tget path(): string {\n\t\treturn this.options.path;\n\t}\n\n\t/**\n\t * Check if telescope is enabled\n\t */\n\tget enabled(): boolean {\n\t\treturn this.options.enabled;\n\t}\n\n\t/**\n\t * Check if body recording is enabled\n\t */\n\tget recordBody(): boolean {\n\t\treturn this.options.recordBody;\n\t}\n\n\t/**\n\t * Get max body size\n\t */\n\tget maxBodySize(): number {\n\t\treturn this.options.maxBodySize;\n\t}\n\n\t/**\n\t * Check if a path should be ignored\n\t */\n\tshouldIgnore(path: string): boolean {\n\t\t// Always ignore telescope's own routes\n\t\tif (path.startsWith(this.options.path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.options.ignorePatterns.some((pattern) => {\n\t\t\tif (pattern.includes('*')) {\n\t\t\t\tconst regex = new RegExp(\n\t\t\t\t\t`^${pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.')}$`,\n\t\t\t\t);\n\t\t\t\treturn regex.test(path);\n\t\t\t}\n\t\t\treturn path.startsWith(pattern);\n\t\t});\n\t}\n\n\t// ============================================\n\t// Private Methods\n\t// ============================================\n\n\tprivate normalizeOptions(\n\t\toptions: TelescopeOptions,\n\t): NormalizedTelescopeOptions {\n\t\treturn {\n\t\t\tstorage: options.storage,\n\t\t\tenabled: options.enabled ?? true,\n\t\t\tpath: options.path ?? '/__telescope',\n\t\t\trecordBody: options.recordBody ?? true,\n\t\t\tmaxBodySize: options.maxBodySize ?? 64 * 1024, // 64KB\n\t\t\tignorePatterns: options.ignorePatterns ?? [],\n\t\t\tpruneAfterHours: options.pruneAfterHours,\n\t\t\tgetRequestId: options.getRequestId,\n\t\t};\n\t}\n\n\tprivate parseStack(stack: string): StackFrame[] {\n\t\tconst lines = stack.split('\\n').slice(1);\n\t\tconst frames: StackFrame[] = [];\n\n\t\tfor (const line of lines) {\n\t\t\t// Match: \" at functionName (file:line:column)\"\n\t\t\t// or: \" at file:line:column\"\n\t\t\tconst match =\n\t\t\t\tline.match(/at\\s+(.+?)\\s+\\((.+):(\\d+):(\\d+)\\)/) ||\n\t\t\t\tline.match(/at\\s+(.+):(\\d+):(\\d+)/);\n\n\t\t\tif (match) {\n\t\t\t\tif (\n\t\t\t\t\tmatch.length === 5 &&\n\t\t\t\t\tmatch[1] &&\n\t\t\t\t\tmatch[2] &&\n\t\t\t\t\tmatch[3] &&\n\t\t\t\t\tmatch[4]\n\t\t\t\t) {\n\t\t\t\t\t// Has function name\n\t\t\t\t\tframes.push({\n\t\t\t\t\t\tfunction: match[1],\n\t\t\t\t\t\tfile: match[2],\n\t\t\t\t\t\tline: parseInt(match[3], 10),\n\t\t\t\t\t\tcolumn: parseInt(match[4], 10),\n\t\t\t\t\t\tisApp: !match[2].includes('node_modules'),\n\t\t\t\t\t});\n\t\t\t\t} else if (match.length === 4 && match[1] && match[2] && match[3]) {\n\t\t\t\t\t// No function name\n\t\t\t\t\tframes.push({\n\t\t\t\t\t\tfunction: '<anonymous>',\n\t\t\t\t\t\tfile: match[1],\n\t\t\t\t\t\tline: parseInt(match[2], 10),\n\t\t\t\t\t\tcolumn: parseInt(match[3], 10),\n\t\t\t\t\t\tisApp: !match[1].includes('node_modules'),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn frames;\n\t}\n\n\tprivate async autoPrune(): Promise<void> {\n\t\tif (!this.options.pruneAfterHours) return;\n\n\t\tconst olderThan = new Date(\n\t\t\tDate.now() - this.options.pruneAfterHours * 60 * 60 * 1000,\n\t\t);\n\t\tawait this.storage.prune(olderThan);\n\t}\n}\n"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- import "./types-l7Rlb5Mg.cjs";
2
- import "./MetricsAggregator-4SqelGcG.cjs";
3
- import { Telescope } from "./Telescope-D4nmwDRA.cjs";
1
+ import { t as Telescope } from "./Telescope-DeqSHfuB.cjs";
4
2
  export { Telescope };
@@ -1,4 +1,2 @@
1
- import "./types-B1EIa_cQ.mjs";
2
- import "./MetricsAggregator-DZrW8ls6.mjs";
3
- import { Telescope } from "./Telescope-Dl6VSfxd.mjs";
1
+ import { t as Telescope } from "./Telescope-BVfDvVvY.mjs";
4
2
  export { Telescope };