@geekmidas/telescope 10.0.0-alpha.98 → 10.0.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 (480) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +18 -28
  3. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts +47 -0
  4. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts.map +1 -0
  5. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs +247 -0
  6. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs.map +1 -0
  7. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs +252 -0
  8. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs.map +1 -0
  9. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts +47 -0
  10. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts.map +1 -0
  11. package/dist/{MetricsAggregator-BJdIvfEv.d.mts → MetricsAggregator-4SqelGcG.d.cts} +6 -3
  12. package/dist/MetricsAggregator-4SqelGcG.d.cts.map +1 -0
  13. package/dist/MetricsAggregator-B7lUICdH.cjs +363 -0
  14. package/dist/MetricsAggregator-B7lUICdH.cjs.map +1 -0
  15. package/dist/{MetricsAggregator-CnC3oT5q.d.cts → MetricsAggregator-DZrW8ls6.d.mts} +6 -3
  16. package/dist/MetricsAggregator-DZrW8ls6.d.mts.map +1 -0
  17. package/dist/MetricsAggregator-S3DQWNas.mjs +357 -0
  18. package/dist/MetricsAggregator-S3DQWNas.mjs.map +1 -0
  19. package/dist/MetricsStorage-B86e4131.d.cts +60 -0
  20. package/dist/MetricsStorage-B86e4131.d.cts.map +1 -0
  21. package/dist/MetricsStorage-BWyP2_12.d.mts +60 -0
  22. package/dist/MetricsStorage-BWyP2_12.d.mts.map +1 -0
  23. package/dist/MetricsStorage-BypQXWiv.mjs +0 -0
  24. package/dist/MetricsStorage-Or8pVCe4.cjs +0 -0
  25. package/dist/Telescope-Cs3fv8jt.cjs +395 -0
  26. package/dist/Telescope-Cs3fv8jt.cjs.map +1 -0
  27. package/dist/{Telescope-BVfDvVvY.d.mts → Telescope-D4nmwDRA.d.cts} +7 -4
  28. package/dist/Telescope-D4nmwDRA.d.cts.map +1 -0
  29. package/dist/Telescope-Dh5av3FC.mjs +389 -0
  30. package/dist/Telescope-Dh5av3FC.mjs.map +1 -0
  31. package/dist/{Telescope-DeqSHfuB.d.cts → Telescope-Dl6VSfxd.d.mts} +7 -4
  32. package/dist/Telescope-Dl6VSfxd.d.mts.map +1 -0
  33. package/dist/Telescope.cjs +4 -385
  34. package/dist/Telescope.d.cts +3 -1
  35. package/dist/Telescope.d.mts +3 -1
  36. package/dist/Telescope.mjs +4 -384
  37. package/dist/adapters/index.d.cts +2 -2
  38. package/dist/adapters/index.d.mts +2 -2
  39. package/dist/adapters/index.mjs +0 -1
  40. package/dist/adapters/lambda.cjs +10 -9
  41. package/dist/adapters/lambda.cjs.map +1 -1
  42. package/dist/adapters/lambda.d.cts +13 -9
  43. package/dist/adapters/lambda.d.cts.map +1 -1
  44. package/dist/adapters/lambda.d.mts +13 -9
  45. package/dist/adapters/lambda.d.mts.map +1 -1
  46. package/dist/adapters/lambda.mjs +4 -3
  47. package/dist/adapters/lambda.mjs.map +1 -1
  48. package/dist/adapters/middy.cjs +4 -236
  49. package/dist/adapters/middy.d.cts +5 -60
  50. package/dist/adapters/middy.d.mts +5 -60
  51. package/dist/adapters/middy.mjs +3 -234
  52. package/dist/adapters/types.d.cts +2 -162
  53. package/dist/adapters/types.d.mts +2 -162
  54. package/dist/adapters/types.mjs +0 -1
  55. package/dist/{rolldown-runtime-VH7oDXx4.cjs → chunk-CUT6urMc.cjs} +10 -8
  56. package/dist/core--quSp5Qr.d.mts +78 -0
  57. package/dist/core--quSp5Qr.d.mts.map +1 -0
  58. package/dist/core-B4Jpia5H.d.cts +78 -0
  59. package/dist/core-B4Jpia5H.d.cts.map +1 -0
  60. package/dist/core-CtVHRJGv.cjs +199 -0
  61. package/dist/core-CtVHRJGv.cjs.map +1 -0
  62. package/dist/core-D6hJ6exL.mjs +139 -0
  63. package/dist/core-D6hJ6exL.mjs.map +1 -0
  64. package/dist/core.cjs +22 -22
  65. package/dist/core.d.cts +4 -4
  66. package/dist/core.d.mts +4 -4
  67. package/dist/core.mjs +4 -3
  68. package/dist/hono--uKQ7Jgi.d.mts +71 -0
  69. package/dist/hono--uKQ7Jgi.d.mts.map +1 -0
  70. package/dist/hono-C4EgpbKQ.cjs +160 -0
  71. package/dist/hono-C4EgpbKQ.cjs.map +1 -0
  72. package/dist/hono-CemCKU87.d.cts +71 -0
  73. package/dist/hono-CemCKU87.d.cts.map +1 -0
  74. package/dist/hono-DxhvnVbF.mjs +136 -0
  75. package/dist/hono-DxhvnVbF.mjs.map +1 -0
  76. package/dist/http-BiNtg85L.d.mts +107 -0
  77. package/dist/http-BiNtg85L.d.mts.map +1 -0
  78. package/dist/http-DQzgLczm.mjs +159 -0
  79. package/dist/http-DQzgLczm.mjs.map +1 -0
  80. package/dist/http-D_Z8sYXZ.cjs +219 -0
  81. package/dist/http-D_Z8sYXZ.cjs.map +1 -0
  82. package/dist/http-Dvca6fC3.d.cts +107 -0
  83. package/dist/http-Dvca6fC3.d.cts.map +1 -0
  84. package/dist/index-BL32-cvv.d.cts +1 -0
  85. package/dist/index-CsuikFeJ.d.mts +1 -0
  86. package/dist/index.cjs +9 -8
  87. package/dist/index.d.cts +6 -5
  88. package/dist/index.d.mts +6 -5
  89. package/dist/index.mjs +7 -5
  90. package/dist/instrumentation/core.cjs +11 -147
  91. package/dist/instrumentation/core.d.cts +3 -74
  92. package/dist/instrumentation/core.d.mts +3 -74
  93. package/dist/instrumentation/core.mjs +2 -137
  94. package/dist/instrumentation/hono.cjs +6 -174
  95. package/dist/instrumentation/hono.d.cts +2 -86
  96. package/dist/instrumentation/hono.d.mts +2 -86
  97. package/dist/instrumentation/hono.mjs +3 -170
  98. package/dist/instrumentation/http.cjs +11 -189
  99. package/dist/instrumentation/http.d.cts +2 -119
  100. package/dist/instrumentation/http.d.mts +2 -119
  101. package/dist/instrumentation/http.mjs +2 -178
  102. package/dist/instrumentation/index.cjs +47 -56
  103. package/dist/instrumentation/index.d.cts +9 -11
  104. package/dist/instrumentation/index.d.mts +9 -11
  105. package/dist/instrumentation/index.mjs +9 -10
  106. package/dist/instrumentation/middleware.cjs +6 -164
  107. package/dist/instrumentation/middleware.d.cts +2 -83
  108. package/dist/instrumentation/middleware.d.mts +2 -83
  109. package/dist/instrumentation/middleware.mjs +3 -160
  110. package/dist/instrumentation/otel.cjs +3 -137
  111. package/dist/instrumentation/otel.d.cts +2 -97
  112. package/dist/instrumentation/otel.d.mts +2 -97
  113. package/dist/instrumentation/otel.mjs +3 -136
  114. package/dist/instrumentation/setup.cjs +4 -142
  115. package/dist/instrumentation/setup.d.cts +3 -139
  116. package/dist/instrumentation/setup.d.mts +3 -139
  117. package/dist/instrumentation/setup.mjs +3 -139
  118. package/dist/instrumentation/tracing.cjs +10 -114
  119. package/dist/instrumentation/tracing.d.cts +2 -49
  120. package/dist/instrumentation/tracing.d.mts +2 -49
  121. package/dist/instrumentation/tracing.mjs +2 -105
  122. package/dist/logger/console.cjs +12 -18
  123. package/dist/logger/console.cjs.map +1 -1
  124. package/dist/logger/console.d.cts +10 -7
  125. package/dist/logger/console.d.cts.map +1 -1
  126. package/dist/logger/console.d.mts +10 -7
  127. package/dist/logger/console.d.mts.map +1 -1
  128. package/dist/logger/console.mjs +11 -17
  129. package/dist/logger/console.mjs.map +1 -1
  130. package/dist/logger/pino.cjs +5 -6
  131. package/dist/logger/pino.cjs.map +1 -1
  132. package/dist/logger/pino.d.cts +10 -6
  133. package/dist/logger/pino.d.cts.map +1 -1
  134. package/dist/logger/pino.d.mts +10 -6
  135. package/dist/logger/pino.d.mts.map +1 -1
  136. package/dist/logger/pino.mjs +3 -2
  137. package/dist/logger/pino.mjs.map +1 -1
  138. package/dist/memory--BK4iWiv.d.cts +40 -0
  139. package/dist/memory--BK4iWiv.d.cts.map +1 -0
  140. package/dist/memory-6S9H-IF5.mjs +123 -0
  141. package/dist/memory-6S9H-IF5.mjs.map +1 -0
  142. package/dist/memory-B0d_n1g5.cjs +129 -0
  143. package/dist/memory-B0d_n1g5.cjs.map +1 -0
  144. package/dist/memory-DCirEVFW.d.mts +40 -0
  145. package/dist/memory-DCirEVFW.d.mts.map +1 -0
  146. package/dist/metrics/MetricsAggregator.cjs +2 -354
  147. package/dist/metrics/MetricsAggregator.d.cts +2 -1
  148. package/dist/metrics/MetricsAggregator.d.mts +2 -1
  149. package/dist/metrics/MetricsAggregator.mjs +2 -353
  150. package/dist/metrics/index.cjs +4 -3
  151. package/dist/metrics/index.d.cts +4 -2
  152. package/dist/metrics/index.d.mts +4 -2
  153. package/dist/metrics/index.mjs +4 -2
  154. package/dist/metrics/storage/InMemoryMetricsStorage.cjs +3 -240
  155. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts +4 -43
  156. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts +4 -43
  157. package/dist/metrics/storage/InMemoryMetricsStorage.mjs +3 -239
  158. package/dist/metrics/storage/MetricsStorage.cjs +1 -0
  159. package/dist/metrics/storage/MetricsStorage.d.cts +3 -56
  160. package/dist/metrics/storage/MetricsStorage.d.mts +3 -56
  161. package/dist/metrics/storage/MetricsStorage.mjs +1 -1
  162. package/dist/metrics/storage/index.cjs +6 -6
  163. package/dist/metrics/storage/index.d.cts +3 -3
  164. package/dist/metrics/storage/index.d.mts +3 -3
  165. package/dist/metrics/storage/index.mjs +5 -4
  166. package/dist/metrics/storage/types.cjs +2 -34
  167. package/dist/metrics/storage/types.d.cts +2 -207
  168. package/dist/metrics/storage/types.d.mts +2 -207
  169. package/dist/metrics/storage/types.mjs +2 -33
  170. package/dist/metrics-D5YT-Rnq.mjs +0 -0
  171. package/dist/metrics-fhD3l3C3.cjs +0 -0
  172. package/dist/middleware-B2jFUukM.cjs +184 -0
  173. package/dist/middleware-B2jFUukM.cjs.map +1 -0
  174. package/dist/middleware-BTDncHwm.mjs +160 -0
  175. package/dist/middleware-BTDncHwm.mjs.map +1 -0
  176. package/dist/middleware-CA84nsNN.d.cts +74 -0
  177. package/dist/middleware-CA84nsNN.d.cts.map +1 -0
  178. package/dist/middleware-DAceVpfw.d.mts +74 -0
  179. package/dist/middleware-DAceVpfw.d.mts.map +1 -0
  180. package/dist/middy-B6Btl8XE.d.mts +64 -0
  181. package/dist/middy-B6Btl8XE.d.mts.map +1 -0
  182. package/dist/middy-BTR3cyvk.mjs +236 -0
  183. package/dist/middy-BTR3cyvk.mjs.map +1 -0
  184. package/dist/middy-Bq0defVg.d.cts +64 -0
  185. package/dist/middy-Bq0defVg.d.cts.map +1 -0
  186. package/dist/middy-y5Zp27eG.cjs +247 -0
  187. package/dist/middy-y5Zp27eG.cjs.map +1 -0
  188. package/dist/otel-1bJPb2Z7.d.mts +101 -0
  189. package/dist/otel-1bJPb2Z7.d.mts.map +1 -0
  190. package/dist/otel-C1HqHA2O.cjs +136 -0
  191. package/dist/otel-C1HqHA2O.cjs.map +1 -0
  192. package/dist/otel-SBVoVEHr.d.cts +101 -0
  193. package/dist/otel-SBVoVEHr.d.cts.map +1 -0
  194. package/dist/otel-wulj5B-X.mjs +130 -0
  195. package/dist/otel-wulj5B-X.mjs.map +1 -0
  196. package/dist/otlp/hono.cjs +15 -9
  197. package/dist/otlp/hono.cjs.map +1 -1
  198. package/dist/otlp/hono.d.cts +13 -3
  199. package/dist/otlp/hono.d.cts.map +1 -1
  200. package/dist/otlp/hono.d.mts +13 -3
  201. package/dist/otlp/hono.d.mts.map +1 -1
  202. package/dist/otlp/hono.mjs +11 -5
  203. package/dist/otlp/hono.mjs.map +1 -1
  204. package/dist/otlp/index.cjs +11 -11
  205. package/dist/otlp/index.d.cts +7 -4
  206. package/dist/otlp/index.d.mts +7 -4
  207. package/dist/otlp/index.mjs +5 -4
  208. package/dist/otlp/receiver.cjs +4 -88
  209. package/dist/otlp/receiver.d.cts +7 -59
  210. package/dist/otlp/receiver.d.mts +7 -59
  211. package/dist/otlp/receiver.mjs +4 -87
  212. package/dist/otlp/transformer.cjs +5 -214
  213. package/dist/otlp/transformer.d.cts +3 -1
  214. package/dist/otlp/transformer.d.mts +3 -1
  215. package/dist/otlp/transformer.mjs +3 -211
  216. package/dist/otlp/types.cjs +5 -57
  217. package/dist/otlp/types.d.cts +1 -1
  218. package/dist/otlp/types.d.mts +1 -1
  219. package/dist/otlp/types.mjs +2 -53
  220. package/dist/receiver-Cj1lbAOO.cjs +94 -0
  221. package/dist/receiver-Cj1lbAOO.cjs.map +1 -0
  222. package/dist/receiver-CxVd_9CB.mjs +89 -0
  223. package/dist/receiver-CxVd_9CB.mjs.map +1 -0
  224. package/dist/receiver-DLICx5uU.d.cts +63 -0
  225. package/dist/receiver-DLICx5uU.d.cts.map +1 -0
  226. package/dist/receiver-UeZT-H8u.d.mts +63 -0
  227. package/dist/receiver-UeZT-H8u.d.mts.map +1 -0
  228. package/dist/redact-BzkITCNW.mjs +83 -0
  229. package/dist/redact-BzkITCNW.mjs.map +1 -0
  230. package/dist/redact-DVaSSPZT.cjs +95 -0
  231. package/dist/redact-DVaSSPZT.cjs.map +1 -0
  232. package/dist/redact.cjs +3 -84
  233. package/dist/redact.d.cts +8 -4
  234. package/dist/redact.d.cts.map +1 -1
  235. package/dist/redact.d.mts +8 -4
  236. package/dist/redact.d.mts.map +1 -1
  237. package/dist/redact.mjs +2 -80
  238. package/dist/server/hono.cjs +54 -33
  239. package/dist/server/hono.cjs.map +1 -1
  240. package/dist/server/hono.d.cts +14 -19
  241. package/dist/server/hono.d.cts.map +1 -1
  242. package/dist/server/hono.d.mts +14 -19
  243. package/dist/server/hono.d.mts.map +1 -1
  244. package/dist/server/hono.mjs +52 -31
  245. package/dist/server/hono.mjs.map +1 -1
  246. package/dist/setup-B9jM77Qk.mjs +98 -0
  247. package/dist/setup-B9jM77Qk.mjs.map +1 -0
  248. package/dist/setup-Bkxm4g6b.d.mts +87 -0
  249. package/dist/setup-Bkxm4g6b.d.mts.map +1 -0
  250. package/dist/setup-CYpff5B9.cjs +110 -0
  251. package/dist/setup-CYpff5B9.cjs.map +1 -0
  252. package/dist/setup-D58N1f9O.d.cts +87 -0
  253. package/dist/setup-D58N1f9O.d.cts.map +1 -0
  254. package/dist/storage/kysely.cjs +70 -82
  255. package/dist/storage/kysely.cjs.map +1 -1
  256. package/dist/storage/kysely.d.cts +20 -36
  257. package/dist/storage/kysely.d.cts.map +1 -1
  258. package/dist/storage/kysely.d.mts +20 -36
  259. package/dist/storage/kysely.d.mts.map +1 -1
  260. package/dist/storage/kysely.mjs +69 -81
  261. package/dist/storage/kysely.mjs.map +1 -1
  262. package/dist/storage/memory.cjs +2 -122
  263. package/dist/storage/memory.d.cts +3 -36
  264. package/dist/storage/memory.d.mts +3 -36
  265. package/dist/storage/memory.mjs +2 -121
  266. package/dist/tracing-BX8uY2nR.d.cts +53 -0
  267. package/dist/tracing-BX8uY2nR.d.cts.map +1 -0
  268. package/dist/tracing-Bt1zWRlb.cjs +167 -0
  269. package/dist/tracing-Bt1zWRlb.cjs.map +1 -0
  270. package/dist/tracing-Cijm_5NI.mjs +113 -0
  271. package/dist/tracing-Cijm_5NI.mjs.map +1 -0
  272. package/dist/tracing-PnECEbEu.d.mts +53 -0
  273. package/dist/tracing-PnECEbEu.d.mts.map +1 -0
  274. package/dist/transformer-BXQPhzql.mjs +215 -0
  275. package/dist/transformer-BXQPhzql.mjs.map +1 -0
  276. package/dist/transformer-CLGZ0EQc.cjs +232 -0
  277. package/dist/transformer-CLGZ0EQc.cjs.map +1 -0
  278. package/dist/{transformer-BtqjAs0b.d.cts → transformer-CTGsaVfV.d.mts} +8 -4
  279. package/dist/transformer-CTGsaVfV.d.mts.map +1 -0
  280. package/dist/{transformer-DI6t8-YA.d.mts → transformer-ICEbxpFf.d.cts} +8 -4
  281. package/dist/transformer-ICEbxpFf.d.cts.map +1 -0
  282. package/dist/{types-BVujq4zd.d.mts → types-B1EIa_cQ.d.mts} +4 -3
  283. package/dist/types-B1EIa_cQ.d.mts.map +1 -0
  284. package/dist/types-BRzW1NM8.d.cts +166 -0
  285. package/dist/types-BRzW1NM8.d.cts.map +1 -0
  286. package/dist/types-BS3Rx8Sk.d.cts +209 -0
  287. package/dist/types-BS3Rx8Sk.d.cts.map +1 -0
  288. package/dist/types-Bwm_jNU7.mjs +54 -0
  289. package/dist/types-Bwm_jNU7.mjs.map +1 -0
  290. package/dist/types-BzQ78Efw.d.mts +166 -0
  291. package/dist/types-BzQ78Efw.d.mts.map +1 -0
  292. package/dist/types-CbNGXnJE.d.mts +209 -0
  293. package/dist/types-CbNGXnJE.d.mts.map +1 -0
  294. package/dist/{types-DVETVdpa.d.cts → types-CmOB7CLO.d.cts} +7 -6
  295. package/dist/types-CmOB7CLO.d.cts.map +1 -0
  296. package/dist/{types-DVETVdpa.d.mts → types-DBc0q5KD.d.mts} +7 -6
  297. package/dist/types-DBc0q5KD.d.mts.map +1 -0
  298. package/dist/types-Dsh-DIO_.cjs +78 -0
  299. package/dist/types-Dsh-DIO_.cjs.map +1 -0
  300. package/dist/types-ZW-nfWf6.cjs +40 -0
  301. package/dist/types-ZW-nfWf6.cjs.map +1 -0
  302. package/dist/{types-BVujq4zd.d.cts → types-l7Rlb5Mg.d.cts} +4 -3
  303. package/dist/types-l7Rlb5Mg.d.cts.map +1 -0
  304. package/dist/types-ojhnLdwz.mjs +34 -0
  305. package/dist/types-ojhnLdwz.mjs.map +1 -0
  306. package/dist/types.d.cts +1 -1
  307. package/dist/types.d.mts +1 -1
  308. package/dist/types.mjs +0 -1
  309. package/dist/ui-assets-BEXqOQLe.cjs +48 -0
  310. package/dist/ui-assets-BEXqOQLe.cjs.map +1 -0
  311. package/dist/ui-assets-BhTDUsrM.mjs +30 -0
  312. package/dist/ui-assets-BhTDUsrM.mjs.map +1 -0
  313. package/dist/ui-assets.cjs +5 -0
  314. package/dist/ui-assets.d.cts +13 -0
  315. package/dist/ui-assets.d.cts.map +1 -0
  316. package/dist/ui-assets.d.mts +13 -0
  317. package/dist/ui-assets.d.mts.map +1 -0
  318. package/dist/ui-assets.mjs +3 -0
  319. package/package.json +46 -46
  320. package/src/Telescope.ts +561 -0
  321. package/src/__tests__/Telescope.spec.ts +438 -0
  322. package/src/__tests__/pino-transport.spec.ts +115 -0
  323. package/src/__tests__/redact.spec.ts +336 -0
  324. package/src/adapters/__tests__/lambda.spec.ts +318 -0
  325. package/src/adapters/__tests__/middy.spec.ts +741 -0
  326. package/src/adapters/index.ts +22 -0
  327. package/src/adapters/lambda.ts +432 -0
  328. package/src/adapters/middy.ts +402 -0
  329. package/src/adapters/types.ts +181 -0
  330. package/src/core.ts +51 -0
  331. package/src/index.ts +34 -0
  332. package/src/instrumentation/__tests__/core.spec.ts +248 -0
  333. package/src/instrumentation/__tests__/hono.spec.ts +348 -0
  334. package/src/instrumentation/__tests__/middleware.spec.ts +528 -0
  335. package/src/instrumentation/__tests__/otel.spec.ts +291 -0
  336. package/src/instrumentation/__tests__/tracing.spec.ts +208 -0
  337. package/src/instrumentation/core.ts +228 -0
  338. package/src/instrumentation/hono.ts +270 -0
  339. package/src/instrumentation/http.ts +306 -0
  340. package/src/instrumentation/index.ts +90 -0
  341. package/src/instrumentation/middleware.ts +297 -0
  342. package/src/instrumentation/otel.ts +271 -0
  343. package/src/instrumentation/setup.ts +246 -0
  344. package/src/instrumentation/tracing.ts +145 -0
  345. package/src/logger/__tests__/console.spec.ts +366 -0
  346. package/src/logger/__tests__/pino.spec.ts +217 -0
  347. package/src/logger/console.ts +230 -0
  348. package/src/logger/pino.ts +201 -0
  349. package/src/metrics/MetricsAggregator.ts +555 -0
  350. package/src/metrics/__tests__/MetricsAggregator.spec.ts +298 -0
  351. package/src/metrics/index.ts +2 -0
  352. package/src/metrics/storage/InMemoryMetricsStorage.ts +380 -0
  353. package/src/metrics/storage/MetricsStorage.ts +74 -0
  354. package/src/metrics/storage/index.ts +3 -0
  355. package/src/metrics/storage/types.ts +243 -0
  356. package/src/otlp/__tests__/receiver.spec.ts +367 -0
  357. package/src/otlp/__tests__/transformer.spec.ts +455 -0
  358. package/src/otlp/hono.ts +120 -0
  359. package/src/otlp/index.ts +22 -0
  360. package/src/otlp/receiver.ts +162 -0
  361. package/src/otlp/transformer.ts +367 -0
  362. package/src/otlp/types.ts +364 -0
  363. package/src/redact.ts +116 -0
  364. package/src/server/__tests__/hono.spec.ts +814 -0
  365. package/src/server/hono.ts +442 -0
  366. package/src/storage/__tests__/kysely.spec.ts +715 -0
  367. package/src/storage/__tests__/memory.spec.ts +694 -0
  368. package/src/storage/kysely.ts +599 -0
  369. package/src/storage/memory.ts +204 -0
  370. package/src/types.ts +447 -0
  371. package/src/ui-assets.ts +40 -0
  372. package/tsconfig.json +9 -0
  373. package/ui/CHANGELOG.md +7 -0
  374. package/ui/index.html +12 -0
  375. package/ui/node_modules/.bin/tsc +21 -0
  376. package/ui/node_modules/.bin/tsserver +21 -0
  377. package/ui/node_modules/.bin/vite +21 -0
  378. package/ui/package.json +24 -0
  379. package/ui/src/App.tsx +595 -0
  380. package/ui/src/api.ts +88 -0
  381. package/ui/src/components/ExceptionDetail.tsx +100 -0
  382. package/ui/src/components/FilterBar.tsx +162 -0
  383. package/ui/src/components/LogDetail.tsx +91 -0
  384. package/ui/src/components/RequestDetail.tsx +143 -0
  385. package/ui/src/main.tsx +10 -0
  386. package/ui/src/styles.css +11 -0
  387. package/ui/src/types.ts +63 -0
  388. package/ui/src/vite-env.d.ts +1 -0
  389. package/ui/src/vite-plugin-gkm-config.ts +54 -0
  390. package/ui/tsconfig.json +20 -0
  391. package/ui/tsconfig.tsbuildinfo +1 -0
  392. package/ui/vite.config.ts +13 -0
  393. package/dist/MetricsAggregator-BJdIvfEv.d.mts.map +0 -1
  394. package/dist/MetricsAggregator-CnC3oT5q.d.cts.map +0 -1
  395. package/dist/Telescope-BVfDvVvY.d.mts.map +0 -1
  396. package/dist/Telescope-DeqSHfuB.d.cts.map +0 -1
  397. package/dist/Telescope.cjs.map +0 -1
  398. package/dist/Telescope.mjs.map +0 -1
  399. package/dist/adapters/middy.cjs.map +0 -1
  400. package/dist/adapters/middy.d.cts.map +0 -1
  401. package/dist/adapters/middy.d.mts.map +0 -1
  402. package/dist/adapters/middy.mjs.map +0 -1
  403. package/dist/adapters/types.d.cts.map +0 -1
  404. package/dist/adapters/types.d.mts.map +0 -1
  405. package/dist/instrumentation/core.cjs.map +0 -1
  406. package/dist/instrumentation/core.d.cts.map +0 -1
  407. package/dist/instrumentation/core.d.mts.map +0 -1
  408. package/dist/instrumentation/core.mjs.map +0 -1
  409. package/dist/instrumentation/hono.cjs.map +0 -1
  410. package/dist/instrumentation/hono.d.cts.map +0 -1
  411. package/dist/instrumentation/hono.d.mts.map +0 -1
  412. package/dist/instrumentation/hono.mjs.map +0 -1
  413. package/dist/instrumentation/http.cjs.map +0 -1
  414. package/dist/instrumentation/http.d.cts.map +0 -1
  415. package/dist/instrumentation/http.d.mts.map +0 -1
  416. package/dist/instrumentation/http.mjs.map +0 -1
  417. package/dist/instrumentation/middleware.cjs.map +0 -1
  418. package/dist/instrumentation/middleware.d.cts.map +0 -1
  419. package/dist/instrumentation/middleware.d.mts.map +0 -1
  420. package/dist/instrumentation/middleware.mjs.map +0 -1
  421. package/dist/instrumentation/otel.cjs.map +0 -1
  422. package/dist/instrumentation/otel.d.cts.map +0 -1
  423. package/dist/instrumentation/otel.d.mts.map +0 -1
  424. package/dist/instrumentation/otel.mjs.map +0 -1
  425. package/dist/instrumentation/sampler.cjs +0 -54
  426. package/dist/instrumentation/sampler.cjs.map +0 -1
  427. package/dist/instrumentation/sampler.d.cts +0 -38
  428. package/dist/instrumentation/sampler.d.cts.map +0 -1
  429. package/dist/instrumentation/sampler.d.mts +0 -38
  430. package/dist/instrumentation/sampler.d.mts.map +0 -1
  431. package/dist/instrumentation/sampler.mjs +0 -52
  432. package/dist/instrumentation/sampler.mjs.map +0 -1
  433. package/dist/instrumentation/setup.cjs.map +0 -1
  434. package/dist/instrumentation/setup.d.cts.map +0 -1
  435. package/dist/instrumentation/setup.d.mts.map +0 -1
  436. package/dist/instrumentation/setup.mjs.map +0 -1
  437. package/dist/instrumentation/tracing.cjs.map +0 -1
  438. package/dist/instrumentation/tracing.d.cts.map +0 -1
  439. package/dist/instrumentation/tracing.d.mts.map +0 -1
  440. package/dist/instrumentation/tracing.mjs.map +0 -1
  441. package/dist/instrumentation/trust.cjs +0 -107
  442. package/dist/instrumentation/trust.cjs.map +0 -1
  443. package/dist/instrumentation/trust.d.cts +0 -57
  444. package/dist/instrumentation/trust.d.cts.map +0 -1
  445. package/dist/instrumentation/trust.d.mts +0 -57
  446. package/dist/instrumentation/trust.d.mts.map +0 -1
  447. package/dist/instrumentation/trust.mjs +0 -104
  448. package/dist/instrumentation/trust.mjs.map +0 -1
  449. package/dist/metrics/MetricsAggregator.cjs.map +0 -1
  450. package/dist/metrics/MetricsAggregator.mjs.map +0 -1
  451. package/dist/metrics/storage/InMemoryMetricsStorage.cjs.map +0 -1
  452. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts.map +0 -1
  453. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts.map +0 -1
  454. package/dist/metrics/storage/InMemoryMetricsStorage.mjs.map +0 -1
  455. package/dist/metrics/storage/MetricsStorage.d.cts.map +0 -1
  456. package/dist/metrics/storage/MetricsStorage.d.mts.map +0 -1
  457. package/dist/metrics/storage/types.cjs.map +0 -1
  458. package/dist/metrics/storage/types.d.cts.map +0 -1
  459. package/dist/metrics/storage/types.d.mts.map +0 -1
  460. package/dist/metrics/storage/types.mjs.map +0 -1
  461. package/dist/otlp/receiver.cjs.map +0 -1
  462. package/dist/otlp/receiver.d.cts.map +0 -1
  463. package/dist/otlp/receiver.d.mts.map +0 -1
  464. package/dist/otlp/receiver.mjs.map +0 -1
  465. package/dist/otlp/transformer.cjs.map +0 -1
  466. package/dist/otlp/transformer.mjs.map +0 -1
  467. package/dist/otlp/types.cjs.map +0 -1
  468. package/dist/otlp/types.mjs.map +0 -1
  469. package/dist/redact.cjs.map +0 -1
  470. package/dist/redact.mjs.map +0 -1
  471. package/dist/storage/memory.cjs.map +0 -1
  472. package/dist/storage/memory.d.cts.map +0 -1
  473. package/dist/storage/memory.d.mts.map +0 -1
  474. package/dist/storage/memory.mjs.map +0 -1
  475. package/dist/transformer-BtqjAs0b.d.cts.map +0 -1
  476. package/dist/transformer-DI6t8-YA.d.mts.map +0 -1
  477. package/dist/types-BVujq4zd.d.cts.map +0 -1
  478. package/dist/types-BVujq4zd.d.mts.map +0 -1
  479. package/dist/types-DVETVdpa.d.cts.map +0 -1
  480. package/dist/types-DVETVdpa.d.mts.map +0 -1
@@ -0,0 +1,395 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_MetricsAggregator = require('./MetricsAggregator-B7lUICdH.cjs');
3
+ const require_redact = require('./redact-DVaSSPZT.cjs');
4
+ const nanoid = require_chunk.__toESM(require("nanoid"));
5
+
6
+ //#region src/Telescope.ts
7
+ /**
8
+ * Framework-agnostic Telescope class for debugging and monitoring applications.
9
+ * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.
10
+ */
11
+ var Telescope = class {
12
+ storage;
13
+ options;
14
+ wsClients = /* @__PURE__ */ new Set();
15
+ pruneInterval;
16
+ metricsBroadcastInterval;
17
+ redactor;
18
+ metricsAggregator;
19
+ constructor(options) {
20
+ this.storage = options.storage;
21
+ this.options = this.normalizeOptions(options);
22
+ this.redactor = require_redact.createRedactor(options.redact);
23
+ this.metricsAggregator = new require_MetricsAggregator.MetricsAggregator(options.metrics);
24
+ if (this.options.pruneAfterHours) {
25
+ const intervalMs = 60 * 60 * 1e3;
26
+ this.pruneInterval = setInterval(() => {
27
+ this.autoPrune().catch(console.error);
28
+ }, intervalMs);
29
+ }
30
+ }
31
+ /**
32
+ * Record a request entry
33
+ */
34
+ async recordRequest(entry) {
35
+ if (!this.options.enabled) return "";
36
+ const id = this.options.getRequestId?.() ?? (0, nanoid.nanoid)();
37
+ let fullEntry = {
38
+ ...entry,
39
+ id,
40
+ timestamp: /* @__PURE__ */ new Date()
41
+ };
42
+ if (this.redactor) fullEntry = this.redactor(fullEntry);
43
+ this.metricsAggregator.record(fullEntry);
44
+ await this.storage.saveRequest(fullEntry);
45
+ this.broadcast({
46
+ type: "request",
47
+ payload: fullEntry,
48
+ timestamp: Date.now()
49
+ });
50
+ return id;
51
+ }
52
+ /**
53
+ * Log entry input for batch operations
54
+ */
55
+ async saveLogEntries(entries) {
56
+ if (this.storage.saveLogs) await this.storage.saveLogs(entries);
57
+ else await Promise.all(entries.map((entry) => this.storage.saveLog(entry)));
58
+ for (const entry of entries) this.broadcast({
59
+ type: "log",
60
+ payload: entry,
61
+ timestamp: Date.now()
62
+ });
63
+ }
64
+ /**
65
+ * Record log entries in batch.
66
+ * More efficient than individual calls for database storage.
67
+ *
68
+ * @example
69
+ * await telescope.log([
70
+ * { level: 'info', message: 'Request started' },
71
+ * { level: 'debug', message: 'Processing...', context: { step: 1 } },
72
+ * ]);
73
+ */
74
+ async log(entries) {
75
+ if (!this.options.enabled || entries.length === 0) return;
76
+ const timestamp = /* @__PURE__ */ new Date();
77
+ const logEntries = entries.map((e) => {
78
+ const entry = {
79
+ id: (0, nanoid.nanoid)(),
80
+ level: e.level,
81
+ message: e.message,
82
+ context: e.context,
83
+ requestId: e.requestId,
84
+ timestamp
85
+ };
86
+ return this.redactor ? this.redactor(entry) : entry;
87
+ });
88
+ await this.saveLogEntries(logEntries);
89
+ }
90
+ /**
91
+ * Log a debug message
92
+ */
93
+ async debug(message, context, requestId) {
94
+ return this.logSingle("debug", message, context, requestId);
95
+ }
96
+ /**
97
+ * Log an info message
98
+ */
99
+ async info(message, context, requestId) {
100
+ return this.logSingle("info", message, context, requestId);
101
+ }
102
+ /**
103
+ * Log a warning message
104
+ */
105
+ async warn(message, context, requestId) {
106
+ return this.logSingle("warn", message, context, requestId);
107
+ }
108
+ /**
109
+ * Log an error message
110
+ */
111
+ async error(message, context, requestId) {
112
+ return this.logSingle("error", message, context, requestId);
113
+ }
114
+ async logSingle(level, message, context, requestId) {
115
+ if (!this.options.enabled) return;
116
+ let entry = {
117
+ id: (0, nanoid.nanoid)(),
118
+ level,
119
+ message,
120
+ context,
121
+ requestId,
122
+ timestamp: /* @__PURE__ */ new Date()
123
+ };
124
+ if (this.redactor) entry = this.redactor(entry);
125
+ await this.storage.saveLog(entry);
126
+ this.broadcast({
127
+ type: "log",
128
+ payload: entry,
129
+ timestamp: Date.now()
130
+ });
131
+ }
132
+ /**
133
+ * Record an exception
134
+ */
135
+ async exception(error, requestId) {
136
+ if (!this.options.enabled) return;
137
+ const stack = this.parseStack(error.stack || "");
138
+ const entry = {
139
+ id: (0, nanoid.nanoid)(),
140
+ name: error.name,
141
+ message: error.message,
142
+ stack,
143
+ requestId,
144
+ timestamp: /* @__PURE__ */ new Date(),
145
+ handled: false
146
+ };
147
+ await this.storage.saveException(entry);
148
+ this.broadcast({
149
+ type: "exception",
150
+ payload: entry,
151
+ timestamp: Date.now()
152
+ });
153
+ }
154
+ /**
155
+ * Get requests from storage
156
+ */
157
+ async getRequests(options) {
158
+ return this.storage.getRequests(options);
159
+ }
160
+ /**
161
+ * Get a single request by ID
162
+ */
163
+ async getRequest(id) {
164
+ return this.storage.getRequest(id);
165
+ }
166
+ /**
167
+ * Get exceptions from storage
168
+ */
169
+ async getExceptions(options) {
170
+ return this.storage.getExceptions(options);
171
+ }
172
+ /**
173
+ * Get a single exception by ID
174
+ */
175
+ async getException(id) {
176
+ return this.storage.getException(id);
177
+ }
178
+ /**
179
+ * Get logs from storage
180
+ */
181
+ async getLogs(options) {
182
+ return this.storage.getLogs(options);
183
+ }
184
+ /**
185
+ * Get storage statistics
186
+ */
187
+ async getStats() {
188
+ return this.storage.getStats();
189
+ }
190
+ /**
191
+ * Get aggregated request metrics
192
+ */
193
+ getMetrics(options) {
194
+ return this.metricsAggregator.getMetrics(options);
195
+ }
196
+ /**
197
+ * Get metrics for individual endpoints
198
+ */
199
+ getEndpointMetrics(options) {
200
+ return this.metricsAggregator.getEndpointMetrics(options);
201
+ }
202
+ /**
203
+ * Get detailed metrics for a specific endpoint
204
+ */
205
+ getEndpointDetails(method, path, options) {
206
+ return this.metricsAggregator.getEndpointDetails(method, path, options);
207
+ }
208
+ /**
209
+ * Get status code distribution
210
+ */
211
+ getStatusDistribution(options) {
212
+ return this.metricsAggregator.getStatusDistribution(options);
213
+ }
214
+ /**
215
+ * Reset metrics data
216
+ */
217
+ resetMetrics() {
218
+ this.metricsAggregator.reset();
219
+ }
220
+ /**
221
+ * Get a real-time metrics snapshot for broadcasting
222
+ */
223
+ getMetricsSnapshot() {
224
+ const metrics = this.metricsAggregator.getMetrics();
225
+ const statusDist = this.metricsAggregator.getStatusDistribution();
226
+ return {
227
+ timestamp: Date.now(),
228
+ totalRequests: metrics.totalRequests,
229
+ requestsPerSecond: metrics.requestsPerSecond,
230
+ avgDuration: metrics.avgDuration,
231
+ errorRate: metrics.errorRate,
232
+ p50: metrics.p50Duration,
233
+ p95: metrics.p95Duration,
234
+ p99: metrics.p99Duration,
235
+ statusDistribution: statusDist
236
+ };
237
+ }
238
+ /**
239
+ * Start broadcasting metrics to WebSocket clients at a given interval.
240
+ * Call this after setting up WebSocket to enable real-time metrics updates.
241
+ *
242
+ * @param intervalMs - Broadcast interval in milliseconds (default: 5000)
243
+ */
244
+ startMetricsBroadcast(intervalMs = 5e3) {
245
+ if (this.metricsBroadcastInterval) return;
246
+ this.metricsBroadcastInterval = setInterval(() => {
247
+ if (this.wsClients.size > 0) {
248
+ const snapshot = this.getMetricsSnapshot();
249
+ this.broadcast({
250
+ type: "metrics",
251
+ payload: snapshot,
252
+ timestamp: Date.now()
253
+ });
254
+ }
255
+ }, intervalMs);
256
+ }
257
+ /**
258
+ * Stop broadcasting metrics to WebSocket clients
259
+ */
260
+ stopMetricsBroadcast() {
261
+ if (this.metricsBroadcastInterval) {
262
+ clearInterval(this.metricsBroadcastInterval);
263
+ this.metricsBroadcastInterval = void 0;
264
+ }
265
+ }
266
+ /**
267
+ * Add a WebSocket client for real-time updates
268
+ */
269
+ addWsClient(ws) {
270
+ this.wsClients.add(ws);
271
+ this.broadcast({
272
+ type: "connected",
273
+ payload: { clientCount: this.wsClients.size },
274
+ timestamp: Date.now()
275
+ });
276
+ }
277
+ /**
278
+ * Remove a WebSocket client
279
+ */
280
+ removeWsClient(ws) {
281
+ this.wsClients.delete(ws);
282
+ }
283
+ /**
284
+ * Broadcast an event to all connected WebSocket clients
285
+ */
286
+ broadcast(event) {
287
+ const data = JSON.stringify(event);
288
+ for (const client of this.wsClients) try {
289
+ client.send(data);
290
+ } catch {
291
+ this.wsClients.delete(client);
292
+ }
293
+ }
294
+ /**
295
+ * Manually prune old entries
296
+ */
297
+ async prune(olderThan) {
298
+ return this.storage.prune(olderThan);
299
+ }
300
+ /**
301
+ * Clean up resources
302
+ */
303
+ destroy() {
304
+ if (this.pruneInterval) clearInterval(this.pruneInterval);
305
+ this.stopMetricsBroadcast();
306
+ this.wsClients.clear();
307
+ }
308
+ /**
309
+ * Get the telescope path
310
+ */
311
+ get path() {
312
+ return this.options.path;
313
+ }
314
+ /**
315
+ * Check if telescope is enabled
316
+ */
317
+ get enabled() {
318
+ return this.options.enabled;
319
+ }
320
+ /**
321
+ * Check if body recording is enabled
322
+ */
323
+ get recordBody() {
324
+ return this.options.recordBody;
325
+ }
326
+ /**
327
+ * Get max body size
328
+ */
329
+ get maxBodySize() {
330
+ return this.options.maxBodySize;
331
+ }
332
+ /**
333
+ * Check if a path should be ignored
334
+ */
335
+ shouldIgnore(path) {
336
+ if (path.startsWith(this.options.path)) return true;
337
+ return this.options.ignorePatterns.some((pattern) => {
338
+ if (pattern.includes("*")) {
339
+ const regex = new RegExp(`^${pattern.replace(/\*/g, ".*").replace(/\?/g, ".")}$`);
340
+ return regex.test(path);
341
+ }
342
+ return path.startsWith(pattern);
343
+ });
344
+ }
345
+ normalizeOptions(options) {
346
+ return {
347
+ storage: options.storage,
348
+ enabled: options.enabled ?? true,
349
+ path: options.path ?? "/__telescope",
350
+ recordBody: options.recordBody ?? true,
351
+ maxBodySize: options.maxBodySize ?? 64 * 1024,
352
+ ignorePatterns: options.ignorePatterns ?? [],
353
+ pruneAfterHours: options.pruneAfterHours,
354
+ getRequestId: options.getRequestId
355
+ };
356
+ }
357
+ parseStack(stack) {
358
+ const lines = stack.split("\n").slice(1);
359
+ const frames = [];
360
+ for (const line of lines) {
361
+ const match = line.match(/at\s+(.+?)\s+\((.+):(\d+):(\d+)\)/) || line.match(/at\s+(.+):(\d+):(\d+)/);
362
+ if (match) {
363
+ if (match.length === 5 && match[1] && match[2] && match[3] && match[4]) frames.push({
364
+ function: match[1],
365
+ file: match[2],
366
+ line: parseInt(match[3], 10),
367
+ column: parseInt(match[4], 10),
368
+ isApp: !match[2].includes("node_modules")
369
+ });
370
+ else if (match.length === 4 && match[1] && match[2] && match[3]) frames.push({
371
+ function: "<anonymous>",
372
+ file: match[1],
373
+ line: parseInt(match[2], 10),
374
+ column: parseInt(match[3], 10),
375
+ isApp: !match[1].includes("node_modules")
376
+ });
377
+ }
378
+ }
379
+ return frames;
380
+ }
381
+ async autoPrune() {
382
+ if (!this.options.pruneAfterHours) return;
383
+ const olderThan = new Date(Date.now() - this.options.pruneAfterHours * 60 * 60 * 1e3);
384
+ await this.storage.prune(olderThan);
385
+ }
386
+ };
387
+
388
+ //#endregion
389
+ Object.defineProperty(exports, 'Telescope', {
390
+ enumerable: true,
391
+ get: function () {
392
+ return Telescope;
393
+ }
394
+ });
395
+ //# sourceMappingURL=Telescope-Cs3fv8jt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telescope-Cs3fv8jt.cjs","names":["options: TelescopeOptions & { metrics?: MetricsAggregatorOptions }","MetricsAggregator","entry: Omit<RequestEntry, 'id' | 'timestamp'>","fullEntry: RequestEntry","entries: LogEntry[]","entries: 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}>","logEntries: LogEntry[]","entry: LogEntry","message: string","context?: Record<string, unknown>","requestId?: string","level: LogEntry['level']","error: Error","entry: ExceptionEntry","options?: QueryOptions","id: string","options?: MetricsQueryOptions","method: string","path: string","ws: WebSocket","event: TelescopeEvent","olderThan: Date","options: TelescopeOptions","stack: string","frames: StackFrame[]"],"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,6 +1,8 @@
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";
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
+
3
4
  //#region src/Telescope.d.ts
5
+
4
6
  /**
5
7
  * Framework-agnostic Telescope class for debugging and monitoring applications.
6
8
  * Use framework-specific adapters (e.g., @geekmidas/telescope/hono) for integration.
@@ -164,6 +166,7 @@ declare class Telescope {
164
166
  private parseStack;
165
167
  private autoPrune;
166
168
  }
169
+ //# sourceMappingURL=Telescope.d.ts.map
167
170
  //#endregion
168
- export { Telescope as t };
169
- //# sourceMappingURL=Telescope-BVfDvVvY.d.mts.map
171
+ export { Telescope };
172
+ //# sourceMappingURL=Telescope-D4nmwDRA.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telescope-D4nmwDRA.d.cts","names":[],"sources":["../src/Telescope.ts"],"sourcesContent":[],"mappings":";;;;;;;AA4BA;;AAUW,cAVE,SAAA,CAUF;EAAgB,QAAe,OAAA;EAAwB,QAwBpD,OAAA;EAAY,QAAjB,SAAA;EAAI,QACT,aAAA;EAAO,QAyDE,wBAAA;EAAM,QAHR,QAAA;EAAK,QAMZ,iBAAA;EAAO,WAwBC,CAAA,OAAA,EA7GD,gBA6GC,GAAA;IAER,OAAA,CAAA,EA/GsC,wBA+GtC;EAAO,CAAA;EASO;;;EAaP,aASC,CAAA,KAAA,EAtHH,IAsHG,CAtHE,YAsHF,EAAA,IAAA,GAAA,WAAA,CAAA,CAAA,EArHR,OAqHQ,CAAA,MAAA,CAAA;EAAM;;;EAkCyC,QA8B9B,cAAA;EAAY;;;;;;;;;;EA4BJ,GAAW,CAAA,OAAA,EA3JrC,KA2JqC,CAAA;IAAR,KAAA,EAAA,OAAA,GAAA,MAAA,GAAA,MAAA,GAAA,OAAA;IAAO,OAAA,EAAA,MAAA;IAOhC,OAAA,CAAA,EA/JF,MA+JE,CAAA,MAAA,EAAA,OAAA,CAAA;IAWO,SAAA,CAAA,EAAA,MAAA;EAAmB,CAAA,CAAA,CAAG,EAvKxC,OAuKwC,CAAA,IAAA,CAAA;EAAc;;;EAiB3B,KAC3B,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAjKQ,MAiKR,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EA/JA,OA+JA,CAAA,IAAA,CAAA;EAAe;;;EAqBmB,IAyDrB,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EApOL,MAoOK,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAlOb,OAkOa,CAAA,IAAA,CAAA;EAAS;;;EAqCE,IAAG,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA9PnB,MA8PmB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EA5P3B,OA4P2B,CAAA,IAAA,CAAA;EAAO;;;mCAnP1B,8CAER;;;;;mBAgCoB,4BAA4B;;;;wBA8BvB,eAAe,QAAQ;;;;0BAOrB,QAAQ;;;;0BAOR,eAAe,QAAQ;;;;4BAOrB,QAAQ;;;;oBAOhB,eAAe,QAAQ;;;;cAOjC,QAPgC,cAAA;;;;uBAkBzB,sBAAsB;;;;+BAOd,sBAAsB;;;;6DAUxC,sBACR;;;;kCAO6B,sBAAsB;;;;;;;;wBAchC;;;;;;;;;;;;;;;kBAyDN;;;;qBAYG;;;;mBAOF;;;;mBAkBM,OAAO"}