@geekmidas/telescope 10.0.0-alpha.99 → 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,366 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { InMemoryStorage } from '../../storage/memory';
3
+ import { Telescope } from '../../Telescope';
4
+ import type { Logger } from '../console';
5
+ import { createTelescopeLogger, TelescopeLogger } from '../console';
6
+
7
+ describe('TelescopeLogger', () => {
8
+ let telescope: Telescope;
9
+ let storage: InMemoryStorage;
10
+
11
+ beforeEach(() => {
12
+ storage = new InMemoryStorage();
13
+ telescope = new Telescope({ storage });
14
+ });
15
+
16
+ afterEach(() => {
17
+ telescope.destroy();
18
+ });
19
+
20
+ describe('without underlying logger', () => {
21
+ it('should log to Telescope only', async () => {
22
+ const logger = new TelescopeLogger({ telescope });
23
+
24
+ logger.info({ userId: '123' }, 'User logged in');
25
+
26
+ // Wait for async log
27
+ await new Promise((r) => setTimeout(r, 10));
28
+
29
+ const logs = await telescope.getLogs();
30
+ expect(logs).toHaveLength(1);
31
+ expect(logs[0].level).toBe('info');
32
+ expect(logs[0].message).toBe('User logged in');
33
+ expect(logs[0].context).toEqual({ userId: '123' });
34
+ });
35
+
36
+ it('should handle string-only logging', async () => {
37
+ const logger = new TelescopeLogger({ telescope });
38
+
39
+ logger.debug('Simple debug message');
40
+
41
+ await new Promise((r) => setTimeout(r, 10));
42
+
43
+ const logs = await telescope.getLogs();
44
+ expect(logs[0].message).toBe('Simple debug message');
45
+ expect(logs[0].level).toBe('debug');
46
+ });
47
+ });
48
+
49
+ describe('with underlying logger', () => {
50
+ it('should forward logs to both Telescope and underlying logger', async () => {
51
+ const mockLogger: Logger = {
52
+ debug: vi.fn(),
53
+ info: vi.fn(),
54
+ warn: vi.fn(),
55
+ error: vi.fn(),
56
+ fatal: vi.fn(),
57
+ trace: vi.fn(),
58
+ child: vi.fn(() => mockLogger),
59
+ };
60
+
61
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
62
+
63
+ logger.info({ action: 'test' }, 'Test message');
64
+
65
+ expect(mockLogger.info).toHaveBeenCalledWith(
66
+ { action: 'test' },
67
+ 'Test message',
68
+ );
69
+
70
+ await new Promise((r) => setTimeout(r, 10));
71
+
72
+ const logs = await telescope.getLogs();
73
+ expect(logs).toHaveLength(1);
74
+ });
75
+
76
+ it('should forward string-only logs to underlying logger', async () => {
77
+ const mockLogger: Logger = {
78
+ debug: vi.fn(),
79
+ info: vi.fn(),
80
+ warn: vi.fn(),
81
+ error: vi.fn(),
82
+ fatal: vi.fn(),
83
+ trace: vi.fn(),
84
+ child: vi.fn(() => mockLogger),
85
+ };
86
+
87
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
88
+
89
+ logger.warn('Warning message');
90
+
91
+ expect(mockLogger.warn).toHaveBeenCalledWith('Warning message');
92
+ });
93
+ });
94
+
95
+ describe('log levels', () => {
96
+ it('should support all log levels', async () => {
97
+ const logger = new TelescopeLogger({ telescope });
98
+
99
+ logger.debug({}, 'Debug');
100
+ logger.info({}, 'Info');
101
+ logger.warn({}, 'Warn');
102
+ logger.error({}, 'Error');
103
+
104
+ await new Promise((r) => setTimeout(r, 10));
105
+
106
+ const logs = await telescope.getLogs();
107
+ expect(logs).toHaveLength(4);
108
+
109
+ const levels = logs.map((l) => l.level);
110
+ expect(levels).toContain('debug');
111
+ expect(levels).toContain('info');
112
+ expect(levels).toContain('warn');
113
+ expect(levels).toContain('error');
114
+ });
115
+
116
+ it('should map fatal to error level for Telescope', async () => {
117
+ const logger = new TelescopeLogger({ telescope });
118
+
119
+ logger.fatal({}, 'Fatal error');
120
+
121
+ await new Promise((r) => setTimeout(r, 10));
122
+
123
+ const logs = await telescope.getLogs();
124
+ expect(logs[0].level).toBe('error');
125
+ expect(logs[0].context).toEqual({ level: 'fatal' });
126
+ });
127
+
128
+ it('should map trace to debug level for Telescope', async () => {
129
+ const logger = new TelescopeLogger({ telescope });
130
+
131
+ logger.trace({}, 'Trace message');
132
+
133
+ await new Promise((r) => setTimeout(r, 10));
134
+
135
+ const logs = await telescope.getLogs();
136
+ expect(logs[0].level).toBe('debug');
137
+ expect(logs[0].context).toEqual({ level: 'trace' });
138
+ });
139
+
140
+ it('should handle fatal with string-only and underlying logger', async () => {
141
+ const mockLogger: Logger = {
142
+ debug: vi.fn(),
143
+ info: vi.fn(),
144
+ warn: vi.fn(),
145
+ error: vi.fn(),
146
+ fatal: vi.fn(),
147
+ trace: vi.fn(),
148
+ child: vi.fn(() => mockLogger),
149
+ };
150
+
151
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
152
+
153
+ logger.fatal('Fatal string message');
154
+
155
+ expect(mockLogger.fatal).toHaveBeenCalledWith('Fatal string message');
156
+
157
+ await new Promise((r) => setTimeout(r, 10));
158
+
159
+ const logs = await telescope.getLogs();
160
+ expect(logs[0].level).toBe('error');
161
+ expect(logs[0].message).toBe('Fatal string message');
162
+ });
163
+
164
+ it('should handle trace with string-only and underlying logger', async () => {
165
+ const mockLogger: Logger = {
166
+ debug: vi.fn(),
167
+ info: vi.fn(),
168
+ warn: vi.fn(),
169
+ error: vi.fn(),
170
+ fatal: vi.fn(),
171
+ trace: vi.fn(),
172
+ child: vi.fn(() => mockLogger),
173
+ };
174
+
175
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
176
+
177
+ logger.trace('Trace string message');
178
+
179
+ expect(mockLogger.trace).toHaveBeenCalledWith('Trace string message');
180
+
181
+ await new Promise((r) => setTimeout(r, 10));
182
+
183
+ const logs = await telescope.getLogs();
184
+ expect(logs[0].level).toBe('debug');
185
+ expect(logs[0].message).toBe('Trace string message');
186
+ });
187
+
188
+ it('should handle fatal with object and underlying logger', async () => {
189
+ const mockLogger: Logger = {
190
+ debug: vi.fn(),
191
+ info: vi.fn(),
192
+ warn: vi.fn(),
193
+ error: vi.fn(),
194
+ fatal: vi.fn(),
195
+ trace: vi.fn(),
196
+ child: vi.fn(() => mockLogger),
197
+ };
198
+
199
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
200
+
201
+ logger.fatal({ errorCode: 500 }, 'Fatal error message');
202
+
203
+ expect(mockLogger.fatal).toHaveBeenCalledWith(
204
+ { errorCode: 500 },
205
+ 'Fatal error message',
206
+ );
207
+
208
+ await new Promise((r) => setTimeout(r, 10));
209
+
210
+ const logs = await telescope.getLogs();
211
+ expect(logs[0].context).toEqual({ errorCode: 500, level: 'fatal' });
212
+ });
213
+
214
+ it('should handle trace with object and underlying logger', async () => {
215
+ const mockLogger: Logger = {
216
+ debug: vi.fn(),
217
+ info: vi.fn(),
218
+ warn: vi.fn(),
219
+ error: vi.fn(),
220
+ fatal: vi.fn(),
221
+ trace: vi.fn(),
222
+ child: vi.fn(() => mockLogger),
223
+ };
224
+
225
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
226
+
227
+ logger.trace({ traceId: 'abc123' }, 'Trace event');
228
+
229
+ expect(mockLogger.trace).toHaveBeenCalledWith(
230
+ { traceId: 'abc123' },
231
+ 'Trace event',
232
+ );
233
+
234
+ await new Promise((r) => setTimeout(r, 10));
235
+
236
+ const logs = await telescope.getLogs();
237
+ expect(logs[0].context).toEqual({ traceId: 'abc123', level: 'trace' });
238
+ });
239
+ });
240
+
241
+ describe('child loggers', () => {
242
+ it('should create child logger with inherited context', async () => {
243
+ const logger = new TelescopeLogger({
244
+ telescope,
245
+ context: { app: 'myApp' },
246
+ });
247
+
248
+ const childLogger = logger.child({ module: 'auth' });
249
+ childLogger.info({}, 'Child log');
250
+
251
+ await new Promise((r) => setTimeout(r, 10));
252
+
253
+ const logs = await telescope.getLogs();
254
+ expect(logs[0].context).toEqual({ app: 'myApp', module: 'auth' });
255
+ });
256
+
257
+ it('should create child of underlying logger too', async () => {
258
+ const childMock: Logger = {
259
+ debug: vi.fn(),
260
+ info: vi.fn(),
261
+ warn: vi.fn(),
262
+ error: vi.fn(),
263
+ fatal: vi.fn(),
264
+ trace: vi.fn(),
265
+ child: vi.fn(() => childMock),
266
+ };
267
+
268
+ const mockLogger: Logger = {
269
+ debug: vi.fn(),
270
+ info: vi.fn(),
271
+ warn: vi.fn(),
272
+ error: vi.fn(),
273
+ fatal: vi.fn(),
274
+ trace: vi.fn(),
275
+ child: vi.fn(() => childMock),
276
+ };
277
+
278
+ const logger = new TelescopeLogger({ telescope, logger: mockLogger });
279
+ const child = logger.child({ module: 'test' });
280
+
281
+ expect(mockLogger.child).toHaveBeenCalledWith({ module: 'test' });
282
+
283
+ child.info({}, 'Test');
284
+ expect(childMock.info).toHaveBeenCalled();
285
+ });
286
+ });
287
+
288
+ describe('withRequestId', () => {
289
+ it('should bind logs to a request ID', async () => {
290
+ const logger = new TelescopeLogger({ telescope });
291
+ const requestLogger = logger.withRequestId('req-123');
292
+
293
+ requestLogger.info({}, 'Request log');
294
+
295
+ await new Promise((r) => setTimeout(r, 10));
296
+
297
+ const logs = await telescope.getLogs();
298
+ expect(logs[0].requestId).toBe('req-123');
299
+ });
300
+
301
+ it('should preserve context when binding request ID', async () => {
302
+ const logger = new TelescopeLogger({
303
+ telescope,
304
+ context: { app: 'test' },
305
+ });
306
+ const requestLogger = logger.withRequestId('req-456');
307
+
308
+ requestLogger.info({ action: 'test' }, 'Log');
309
+
310
+ await new Promise((r) => setTimeout(r, 10));
311
+
312
+ const logs = await telescope.getLogs();
313
+ expect(logs[0].context).toEqual({ app: 'test', action: 'test' });
314
+ expect(logs[0].requestId).toBe('req-456');
315
+ });
316
+ });
317
+
318
+ describe('createTelescopeLogger factory', () => {
319
+ it('should create logger without underlying logger', async () => {
320
+ const logger = createTelescopeLogger(telescope);
321
+
322
+ logger.info({}, 'Factory test');
323
+
324
+ await new Promise((r) => setTimeout(r, 10));
325
+
326
+ const logs = await telescope.getLogs();
327
+ expect(logs).toHaveLength(1);
328
+ });
329
+
330
+ it('should create logger with underlying logger', async () => {
331
+ const mockLogger: Logger = {
332
+ debug: vi.fn(),
333
+ info: vi.fn(),
334
+ warn: vi.fn(),
335
+ error: vi.fn(),
336
+ fatal: vi.fn(),
337
+ trace: vi.fn(),
338
+ child: vi.fn(() => mockLogger),
339
+ };
340
+
341
+ const logger = createTelescopeLogger(telescope, mockLogger);
342
+
343
+ logger.error({ err: 'test' }, 'Error message');
344
+
345
+ expect(mockLogger.error).toHaveBeenCalled();
346
+
347
+ await new Promise((r) => setTimeout(r, 10));
348
+
349
+ const logs = await telescope.getLogs();
350
+ expect(logs).toHaveLength(1);
351
+ });
352
+
353
+ it('should create logger with initial context', async () => {
354
+ const logger = createTelescopeLogger(telescope, undefined, {
355
+ service: 'api',
356
+ });
357
+
358
+ logger.info({}, 'With context');
359
+
360
+ await new Promise((r) => setTimeout(r, 10));
361
+
362
+ const logs = await telescope.getLogs();
363
+ expect(logs[0].context).toEqual({ service: 'api' });
364
+ });
365
+ });
366
+ });
@@ -0,0 +1,217 @@
1
+ import pino from 'pino';
2
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
+ import { InMemoryStorage } from '../../storage/memory';
4
+ import { Telescope } from '../../Telescope';
5
+ import { createPinoDestination, createPinoTransport } from '../pino';
6
+
7
+ describe('Pino Transport', () => {
8
+ let telescope: Telescope;
9
+ let storage: InMemoryStorage;
10
+
11
+ beforeEach(() => {
12
+ storage = new InMemoryStorage();
13
+ telescope = new Telescope({ storage });
14
+ });
15
+
16
+ afterEach(() => {
17
+ telescope.destroy();
18
+ });
19
+
20
+ // Helper to create transport with fast flush for tests
21
+ const createTestTransport = (
22
+ opts: Parameters<typeof createPinoTransport>[0],
23
+ ) => createPinoTransport({ flushIntervalMs: 50, ...opts });
24
+
25
+ describe('createPinoTransport', () => {
26
+ it('should parse and forward JSON log lines', async () => {
27
+ const transport = createTestTransport({ telescope });
28
+ const logger = pino({ level: 'debug' }, transport);
29
+
30
+ logger.info({ userId: '123' }, 'Test message');
31
+
32
+ // Wait for flush interval
33
+ await new Promise((r) => setTimeout(r, 100));
34
+
35
+ const logs = await telescope.getLogs();
36
+ expect(logs).toHaveLength(1);
37
+ expect(logs[0].level).toBe('info');
38
+ expect(logs[0].message).toBe('Test message');
39
+ expect(logs[0].context).toMatchObject({ userId: '123' });
40
+ });
41
+
42
+ it('should map Pino log levels correctly', async () => {
43
+ const transport = createTestTransport({ telescope });
44
+ const logger = pino({ level: 'trace' }, transport);
45
+
46
+ logger.trace('Trace message');
47
+ logger.debug('Debug message');
48
+ logger.info('Info message');
49
+ logger.warn('Warn message');
50
+ logger.error('Error message');
51
+ logger.fatal('Fatal message');
52
+
53
+ await new Promise((r) => setTimeout(r, 150));
54
+
55
+ const logs = await telescope.getLogs();
56
+ expect(logs).toHaveLength(6);
57
+
58
+ const logLevels = logs.map((l) => l.level);
59
+ expect(logLevels.filter((l) => l === 'debug')).toHaveLength(2); // trace + debug
60
+ expect(logLevels).toContain('info');
61
+ expect(logLevels).toContain('warn');
62
+ expect(logLevels.filter((l) => l === 'error')).toHaveLength(2); // error + fatal
63
+ });
64
+
65
+ it('should extract requestId from log data', async () => {
66
+ const transport = createTestTransport({ telescope });
67
+ const logger = pino({ level: 'debug' }, transport);
68
+
69
+ logger.info({ requestId: 'req-abc123' }, 'Request log');
70
+
71
+ await new Promise((r) => setTimeout(r, 100));
72
+
73
+ const logs = await telescope.getLogs();
74
+ expect(logs[0].requestId).toBe('req-abc123');
75
+ // requestId should not be in context
76
+ expect(logs[0].context).not.toHaveProperty('requestId');
77
+ });
78
+
79
+ it('should use static requestId option', async () => {
80
+ const transport = createTestTransport({
81
+ telescope,
82
+ requestId: 'static-req-id',
83
+ });
84
+ const logger = pino({ level: 'debug' }, transport);
85
+
86
+ logger.info('Log with static ID');
87
+
88
+ await new Promise((r) => setTimeout(r, 100));
89
+
90
+ const logs = await telescope.getLogs();
91
+ expect(logs[0].requestId).toBe('static-req-id');
92
+ });
93
+
94
+ it('should use requestId function option', async () => {
95
+ const transport = createTestTransport({
96
+ telescope,
97
+ requestId: (data) => data.traceId as string | undefined,
98
+ });
99
+ const logger = pino({ level: 'debug' }, transport);
100
+
101
+ logger.info({ traceId: 'trace-xyz' }, 'Log with extracted ID');
102
+
103
+ await new Promise((r) => setTimeout(r, 100));
104
+
105
+ const logs = await telescope.getLogs();
106
+ expect(logs[0].requestId).toBe('trace-xyz');
107
+ });
108
+
109
+ it('should handle empty message', async () => {
110
+ const transport = createTestTransport({ telescope });
111
+ const logger = pino({ level: 'debug' }, transport);
112
+
113
+ logger.info({ data: 'some data' });
114
+
115
+ await new Promise((r) => setTimeout(r, 100));
116
+
117
+ const logs = await telescope.getLogs();
118
+ expect(logs[0].message).toBe('');
119
+ });
120
+
121
+ it('should strip Pino metadata from context', async () => {
122
+ const transport = createTestTransport({ telescope });
123
+ const logger = pino({ level: 'debug' }, transport);
124
+
125
+ logger.info({ customField: 'value' }, 'Test');
126
+
127
+ await new Promise((r) => setTimeout(r, 100));
128
+
129
+ const logs = await telescope.getLogs();
130
+ const context = logs[0].context;
131
+
132
+ expect(context).not.toHaveProperty('level');
133
+ expect(context).not.toHaveProperty('msg');
134
+ expect(context).not.toHaveProperty('time');
135
+ expect(context).not.toHaveProperty('pid');
136
+ expect(context).not.toHaveProperty('hostname');
137
+ expect(context).toMatchObject({ customField: 'value' });
138
+ });
139
+
140
+ it('should return a writable stream', () => {
141
+ const transport = createPinoTransport({ telescope });
142
+
143
+ expect(typeof transport.write).toBe('function');
144
+ expect(typeof transport.end).toBe('function');
145
+ });
146
+
147
+ it('should batch logs and flush at batchSize', async () => {
148
+ const transport = createPinoTransport({
149
+ telescope,
150
+ batchSize: 3,
151
+ flushIntervalMs: 5000, // Long interval to test batch size trigger
152
+ });
153
+ const logger = pino({ level: 'debug' }, transport);
154
+
155
+ // Write 2 logs - should not flush yet
156
+ logger.info('Log 1');
157
+ logger.info('Log 2');
158
+
159
+ await new Promise((r) => setTimeout(r, 50));
160
+ let logs = await telescope.getLogs();
161
+ expect(logs).toHaveLength(0); // Not flushed yet
162
+
163
+ // Write 3rd log - should trigger flush
164
+ logger.info('Log 3');
165
+
166
+ await new Promise((r) => setTimeout(r, 100));
167
+ logs = await telescope.getLogs();
168
+ expect(logs).toHaveLength(3);
169
+ });
170
+
171
+ it('should flush on close', async () => {
172
+ const transport = createPinoTransport({
173
+ telescope,
174
+ batchSize: 100,
175
+ flushIntervalMs: 10000, // Long interval
176
+ });
177
+ const logger = pino({ level: 'debug' }, transport);
178
+
179
+ logger.info('Will be flushed on close');
180
+
181
+ // End the stream to trigger close
182
+ transport.end();
183
+
184
+ await new Promise((r) => setTimeout(r, 100));
185
+
186
+ const logs = await telescope.getLogs();
187
+ expect(logs).toHaveLength(1);
188
+ expect(logs[0].message).toBe('Will be flushed on close');
189
+ });
190
+ });
191
+
192
+ describe('createPinoDestination', () => {
193
+ it('should be an alias for createPinoTransport', () => {
194
+ const transport = createPinoTransport({ telescope });
195
+ const destination = createPinoDestination({ telescope });
196
+
197
+ expect(typeof transport.write).toBe('function');
198
+ expect(typeof destination.write).toBe('function');
199
+ });
200
+
201
+ it('should work the same as createPinoTransport', async () => {
202
+ const destination = createPinoDestination({
203
+ telescope,
204
+ flushIntervalMs: 50,
205
+ });
206
+ const logger = pino({ level: 'debug' }, destination);
207
+
208
+ logger.info('Destination test');
209
+
210
+ await new Promise((r) => setTimeout(r, 100));
211
+
212
+ const logs = await telescope.getLogs();
213
+ expect(logs).toHaveLength(1);
214
+ expect(logs[0].message).toBe('Destination test');
215
+ });
216
+ });
217
+ });