@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,402 @@
1
+ import type { MiddlewareObj } from '@middy/core';
2
+ import type {
3
+ APIGatewayProxyEvent,
4
+ APIGatewayProxyEventV2,
5
+ Context,
6
+ } from 'aws-lambda';
7
+ import { flushTelemetry } from '../instrumentation/core';
8
+ import type { Telescope } from '../Telescope';
9
+
10
+ /**
11
+ * Options for the Telescope Middy middleware
12
+ */
13
+ export interface TelescopeMiddlewareOptions {
14
+ /**
15
+ * Minimum remaining time (ms) before forcing a flush.
16
+ * If remaining time drops below this, flush immediately.
17
+ * @default 1000 (1 second)
18
+ */
19
+ flushThresholdMs?: number;
20
+
21
+ /**
22
+ * Whether to record request/response bodies
23
+ * @default true
24
+ */
25
+ recordBody?: boolean;
26
+
27
+ /**
28
+ * Timeout for flush operation in ms
29
+ * @default 5000
30
+ */
31
+ flushTimeoutMs?: number;
32
+ }
33
+
34
+ // Track if we've registered the process hooks
35
+ let processHooksRegistered = false;
36
+
37
+ /**
38
+ * Register process-level hooks for telemetry flush.
39
+ * Called once per Lambda cold start.
40
+ */
41
+ function registerProcessHooks(): void {
42
+ if (processHooksRegistered) return;
43
+ processHooksRegistered = true;
44
+
45
+ // Flush on SIGTERM (Lambda shutdown)
46
+ process.on('SIGTERM', async () => {
47
+ await flushTelemetry(5000).catch(() => {});
48
+ });
49
+
50
+ // Note: beforeExit doesn't work reliably in Lambda
51
+ // because Lambda freezes rather than exits
52
+ }
53
+
54
+ /**
55
+ * Extract request data from API Gateway event (v1 or v2)
56
+ */
57
+ function extractRequestData(
58
+ event: APIGatewayProxyEvent | APIGatewayProxyEventV2,
59
+ ): {
60
+ method: string;
61
+ path: string;
62
+ url: string;
63
+ headers: Record<string, string>;
64
+ query: Record<string, string>;
65
+ body: unknown;
66
+ ip?: string;
67
+ requestId?: string;
68
+ requestSize?: number;
69
+ } {
70
+ const headers: Record<string, string> = {};
71
+ if (event.headers) {
72
+ for (const [key, value] of Object.entries(event.headers)) {
73
+ if (value) headers[key.toLowerCase()] = value;
74
+ }
75
+ }
76
+
77
+ // Get request size from Content-Length header
78
+ const contentLength = headers['content-length'];
79
+ const requestSize = contentLength ? parseInt(contentLength, 10) : undefined;
80
+
81
+ // API Gateway v2 (HTTP API)
82
+ if ('rawPath' in event && event.requestContext?.http) {
83
+ const v2Event = event as APIGatewayProxyEventV2;
84
+ // Filter out undefined values from query parameters
85
+ const query: Record<string, string> = {};
86
+ if (v2Event.queryStringParameters) {
87
+ for (const [key, value] of Object.entries(
88
+ v2Event.queryStringParameters,
89
+ )) {
90
+ if (value !== undefined) {
91
+ query[key] = value;
92
+ }
93
+ }
94
+ }
95
+ return {
96
+ method: v2Event.requestContext.http.method,
97
+ path: v2Event.rawPath,
98
+ url:
99
+ v2Event.rawPath +
100
+ (v2Event.rawQueryString ? `?${v2Event.rawQueryString}` : ''),
101
+ headers,
102
+ query,
103
+ body: parseBody(v2Event.body, v2Event.isBase64Encoded),
104
+ ip: v2Event.requestContext.http.sourceIp,
105
+ requestId: v2Event.requestContext.requestId,
106
+ requestSize,
107
+ };
108
+ }
109
+
110
+ // API Gateway v1 (REST API)
111
+ const v1Event = event as APIGatewayProxyEvent;
112
+ const queryString = v1Event.queryStringParameters
113
+ ? new URLSearchParams(
114
+ v1Event.queryStringParameters as Record<string, string>,
115
+ ).toString()
116
+ : '';
117
+
118
+ return {
119
+ method: v1Event.httpMethod,
120
+ path: v1Event.path,
121
+ url: v1Event.path + (queryString ? `?${queryString}` : ''),
122
+ headers,
123
+ query: (v1Event.queryStringParameters as Record<string, string>) || {},
124
+ body: parseBody(v1Event.body, v1Event.isBase64Encoded),
125
+ ip: v1Event.requestContext?.identity?.sourceIp,
126
+ requestId: v1Event.requestContext?.requestId,
127
+ requestSize,
128
+ };
129
+ }
130
+
131
+ /**
132
+ * Parse request body
133
+ */
134
+ function parseBody(
135
+ body: string | null | undefined,
136
+ isBase64Encoded?: boolean,
137
+ ): unknown {
138
+ if (!body) return undefined;
139
+
140
+ try {
141
+ const decoded = isBase64Encoded
142
+ ? Buffer.from(body, 'base64').toString('utf-8')
143
+ : body;
144
+ return JSON.parse(decoded);
145
+ } catch {
146
+ return body;
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Extract response data from Lambda response
152
+ */
153
+ function extractResponseData(response: unknown): {
154
+ status: number;
155
+ headers: Record<string, string>;
156
+ body: unknown;
157
+ responseSize?: number;
158
+ } {
159
+ if (response && typeof response === 'object' && 'statusCode' in response) {
160
+ const res = response as {
161
+ statusCode?: number;
162
+ headers?: Record<string, string>;
163
+ body?: string;
164
+ };
165
+ const headers = res.headers || {};
166
+ // Get response size from Content-Length header (case-insensitive)
167
+ const contentLengthKey = Object.keys(headers).find(
168
+ (k) => k.toLowerCase() === 'content-length',
169
+ );
170
+ const contentLengthValue = contentLengthKey
171
+ ? headers[contentLengthKey]
172
+ : undefined;
173
+ // Prefer Content-Length header, fallback to body size
174
+ const responseSize = contentLengthValue
175
+ ? parseInt(contentLengthValue, 10)
176
+ : res.body
177
+ ? Buffer.byteLength(res.body, 'utf8')
178
+ : undefined;
179
+ return {
180
+ status: res.statusCode || 200,
181
+ headers,
182
+ body: res.body ? tryParseJson(res.body) : undefined,
183
+ responseSize,
184
+ };
185
+ }
186
+
187
+ return { status: 200, headers: {}, body: response };
188
+ }
189
+
190
+ function tryParseJson(str: string): unknown {
191
+ try {
192
+ return JSON.parse(str);
193
+ } catch {
194
+ return str;
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Middy middleware that integrates Telescope with Lambda handlers.
200
+ *
201
+ * Features:
202
+ * - Records all requests and responses to Telescope
203
+ * - Captures exceptions automatically
204
+ * - Flushes telemetry before Lambda freezes
205
+ * - Uses Lambda context for smart flush timing
206
+ *
207
+ * @example
208
+ * ```typescript
209
+ * import middy from '@middy/core';
210
+ * import { telescopeMiddleware } from '@geekmidas/telescope/lambda';
211
+ *
212
+ * const handler = middy(baseHandler)
213
+ * .use(telescopeMiddleware(telescope));
214
+ * ```
215
+ */
216
+ export function telescopeMiddleware(
217
+ telescope: Telescope,
218
+ options: TelescopeMiddlewareOptions = {},
219
+ ): MiddlewareObj<
220
+ APIGatewayProxyEvent | APIGatewayProxyEventV2,
221
+ any,
222
+ Error,
223
+ Context
224
+ > {
225
+ const {
226
+ flushThresholdMs = 1000,
227
+ recordBody = true,
228
+ flushTimeoutMs = 5000,
229
+ } = options;
230
+
231
+ // Register process hooks on first use
232
+ registerProcessHooks();
233
+
234
+ return {
235
+ before: async (request) => {
236
+ // Store start time for duration calculation
237
+ (request as any).__telescopeStartTime = Date.now();
238
+
239
+ // Don't wait for empty event loop - we'll flush manually
240
+ request.context.callbackWaitsForEmptyEventLoop = false;
241
+ },
242
+
243
+ after: async (request) => {
244
+ const startTime = (request as any).__telescopeStartTime || Date.now();
245
+ const duration = Date.now() - startTime;
246
+
247
+ try {
248
+ const reqData = extractRequestData(request.event);
249
+ const resData = extractResponseData(request.response);
250
+
251
+ await telescope.recordRequest({
252
+ method: reqData.method,
253
+ path: reqData.path,
254
+ url: reqData.url,
255
+ headers: reqData.headers,
256
+ query: reqData.query,
257
+ body: recordBody ? reqData.body : undefined,
258
+ ip: reqData.ip,
259
+ status: resData.status,
260
+ responseHeaders: resData.headers,
261
+ responseBody: recordBody ? resData.body : undefined,
262
+ duration,
263
+ requestSize: reqData.requestSize,
264
+ responseSize: resData.responseSize,
265
+ });
266
+ } catch {
267
+ // Don't let telescope errors break the response
268
+ }
269
+
270
+ // Smart flush: check remaining time
271
+ await smartFlush(request.context, flushThresholdMs, flushTimeoutMs);
272
+ },
273
+
274
+ onError: async (request) => {
275
+ const startTime = (request as any).__telescopeStartTime || Date.now();
276
+ const duration = Date.now() - startTime;
277
+
278
+ try {
279
+ // Record the exception
280
+ if (request.error) {
281
+ await telescope.exception(request.error);
282
+ }
283
+
284
+ // Also record the failed request
285
+ const reqData = extractRequestData(request.event);
286
+ await telescope.recordRequest({
287
+ method: reqData.method,
288
+ path: reqData.path,
289
+ url: reqData.url,
290
+ headers: reqData.headers,
291
+ query: reqData.query,
292
+ body: recordBody ? reqData.body : undefined,
293
+ ip: reqData.ip,
294
+ status: 500,
295
+ responseHeaders: {},
296
+ responseBody: { error: request.error?.message },
297
+ duration,
298
+ requestSize: reqData.requestSize,
299
+ });
300
+ } catch {
301
+ // Don't let telescope errors mask the original error
302
+ }
303
+
304
+ // Always flush on error
305
+ await smartFlush(request.context, flushThresholdMs, flushTimeoutMs);
306
+ },
307
+ };
308
+ }
309
+
310
+ /**
311
+ * Smart flush that respects Lambda's remaining execution time
312
+ */
313
+ async function smartFlush(
314
+ context: Context,
315
+ thresholdMs: number,
316
+ timeoutMs: number,
317
+ ): Promise<void> {
318
+ const remaining = context.getRemainingTimeInMillis();
319
+
320
+ // If we have plenty of time, use normal timeout
321
+ // If time is running low, use a shorter timeout
322
+ const effectiveTimeout = Math.min(
323
+ timeoutMs,
324
+ Math.max(remaining - thresholdMs, 100), // Leave at least threshold ms for response
325
+ );
326
+
327
+ if (effectiveTimeout > 0) {
328
+ await flushTelemetry(effectiveTimeout).catch(() => {});
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Create a wrapped Lambda handler with Telescope integration.
334
+ * Alternative to using Middy middleware directly.
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * import { createTelescopeHandler } from '@geekmidas/telescope/lambda';
339
+ *
340
+ * export const handler = createTelescopeHandler(telescope, async (event, context) => {
341
+ * return { statusCode: 200, body: 'OK' };
342
+ * });
343
+ * ```
344
+ */
345
+ export function createTelescopeHandler<TEvent, TResult>(
346
+ telescope: Telescope,
347
+ handler: (event: TEvent, context: Context) => Promise<TResult>,
348
+ options: TelescopeMiddlewareOptions = {},
349
+ ): (event: TEvent, context: Context) => Promise<TResult> {
350
+ const {
351
+ flushThresholdMs = 1000,
352
+ recordBody = true,
353
+ flushTimeoutMs = 5000,
354
+ } = options;
355
+
356
+ registerProcessHooks();
357
+
358
+ return async (event: TEvent, context: Context): Promise<TResult> => {
359
+ const startTime = Date.now();
360
+ context.callbackWaitsForEmptyEventLoop = false;
361
+
362
+ try {
363
+ const result = await handler(event, context);
364
+ const duration = Date.now() - startTime;
365
+
366
+ // Record successful request
367
+ try {
368
+ const reqData = extractRequestData(event as any);
369
+ const resData = extractResponseData(result);
370
+
371
+ await telescope.recordRequest({
372
+ method: reqData.method,
373
+ path: reqData.path,
374
+ url: reqData.url,
375
+ headers: reqData.headers,
376
+ query: reqData.query,
377
+ body: recordBody ? reqData.body : undefined,
378
+ ip: reqData.ip,
379
+ status: resData.status,
380
+ responseHeaders: resData.headers,
381
+ responseBody: recordBody ? resData.body : undefined,
382
+ duration,
383
+ requestSize: reqData.requestSize,
384
+ responseSize: resData.responseSize,
385
+ });
386
+ } catch {
387
+ // Ignore telescope errors
388
+ }
389
+
390
+ await smartFlush(context, flushThresholdMs, flushTimeoutMs);
391
+ return result;
392
+ } catch (error) {
393
+ // Record exception
394
+ if (error instanceof Error) {
395
+ await telescope.exception(error).catch(() => {});
396
+ }
397
+
398
+ await smartFlush(context, flushThresholdMs, flushTimeoutMs);
399
+ throw error;
400
+ }
401
+ };
402
+ }
@@ -0,0 +1,181 @@
1
+ import type { Context as HonoContext } from 'hono';
2
+
3
+ /**
4
+ * Environment types for adapter configuration
5
+ */
6
+ export type TelescopeEnvironment = 'server' | 'lambda' | 'edge' | 'custom';
7
+
8
+ /**
9
+ * Request context passed to adapters
10
+ */
11
+ export interface AdapterRequestContext {
12
+ /** Unique request ID */
13
+ id: string;
14
+ /** HTTP method */
15
+ method: string;
16
+ /** Request path */
17
+ path: string;
18
+ /** Full URL */
19
+ url: string;
20
+ /** Request headers */
21
+ headers: Record<string, string>;
22
+ /** Query parameters */
23
+ query: Record<string, string>;
24
+ /** Request body (if recorded) */
25
+ body?: unknown;
26
+ /** Client IP address */
27
+ ip?: string;
28
+ /** Request start time */
29
+ startTime: number;
30
+ /** Request body size in bytes */
31
+ requestSize?: number;
32
+ }
33
+
34
+ /**
35
+ * Response context passed to adapters
36
+ */
37
+ export interface AdapterResponseContext {
38
+ /** HTTP status code */
39
+ status: number;
40
+ /** Response headers */
41
+ headers: Record<string, string>;
42
+ /** Response body (if recorded) */
43
+ body?: unknown;
44
+ /** Request duration in milliseconds */
45
+ duration: number;
46
+ /** Response body size in bytes */
47
+ responseSize?: number;
48
+ }
49
+
50
+ /**
51
+ * Error context for exception handling
52
+ */
53
+ export interface AdapterErrorContext {
54
+ /** The error that occurred */
55
+ error: Error;
56
+ /** Associated request ID */
57
+ requestId?: string;
58
+ /** Whether the error was handled */
59
+ handled: boolean;
60
+ }
61
+
62
+ /**
63
+ * Span processor strategy for telemetry export
64
+ */
65
+ export type SpanProcessorStrategy = 'batch' | 'simple';
66
+
67
+ /**
68
+ * Options for span processor configuration
69
+ */
70
+ export interface SpanProcessorOptions {
71
+ /** Processor strategy (batch for servers, simple for Lambda) */
72
+ strategy: SpanProcessorStrategy;
73
+ /** Maximum queue size for batch processor (default: 2048) */
74
+ maxQueueSize?: number;
75
+ /** Scheduled delay for batch processor in ms (default: 5000) */
76
+ scheduledDelayMillis?: number;
77
+ /** Export timeout in ms (default: 30000) */
78
+ exportTimeoutMillis?: number;
79
+ /** Maximum export batch size (default: 512) */
80
+ maxExportBatchSize?: number;
81
+ }
82
+
83
+ /**
84
+ * Adapter lifecycle hooks
85
+ */
86
+ export interface AdapterLifecycle {
87
+ /**
88
+ * Called when the adapter is initialized
89
+ */
90
+ onSetup?(): Promise<void> | void;
91
+
92
+ /**
93
+ * Called before the adapter is destroyed
94
+ */
95
+ onDestroy?(): Promise<void> | void;
96
+ }
97
+
98
+ /**
99
+ * Base adapter configuration
100
+ */
101
+ export interface AdapterConfig {
102
+ /** Environment type */
103
+ environment: TelescopeEnvironment;
104
+ /** Span processor options */
105
+ spanProcessor?: SpanProcessorOptions;
106
+ /** Whether to auto-flush on response */
107
+ autoFlush?: boolean;
108
+ }
109
+
110
+ /**
111
+ * Interface for environment-specific adapters.
112
+ * Adapters handle the integration between Telescope core and the runtime environment.
113
+ */
114
+ export interface TelescopeAdapter<TConfig extends AdapterConfig = AdapterConfig>
115
+ extends AdapterLifecycle {
116
+ /** Adapter configuration */
117
+ readonly config: TConfig;
118
+
119
+ /**
120
+ * Extract request context from the runtime's request object.
121
+ * This is called at the start of request processing.
122
+ */
123
+ extractRequestContext(request: unknown): AdapterRequestContext;
124
+
125
+ /**
126
+ * Extract response context from the runtime's response object.
127
+ * This is called after the response is generated.
128
+ */
129
+ extractResponseContext(
130
+ response: unknown,
131
+ startTime: number,
132
+ ): AdapterResponseContext;
133
+
134
+ /**
135
+ * Flush any pending telemetry data.
136
+ * Critical for serverless environments where the process may be frozen.
137
+ */
138
+ flush(): Promise<void>;
139
+ }
140
+
141
+ /**
142
+ * Hono-specific adapter configuration
143
+ */
144
+ export interface HonoAdapterConfig extends AdapterConfig {
145
+ environment: 'server' | 'lambda' | 'edge';
146
+ }
147
+
148
+ /**
149
+ * Lambda-specific adapter configuration
150
+ */
151
+ export interface LambdaAdapterConfig extends AdapterConfig {
152
+ environment: 'lambda';
153
+ /** Whether to detect Lambda resource attributes */
154
+ detectResource?: boolean;
155
+ /** Custom resource attributes */
156
+ resourceAttributes?: Record<string, string>;
157
+ }
158
+
159
+ /**
160
+ * Type helper for Hono context with Telescope
161
+ */
162
+ export interface TelescopeHonoContext {
163
+ /** Request ID for correlation */
164
+ requestId: string;
165
+ /** Request start time */
166
+ startTime: number;
167
+ }
168
+
169
+ /**
170
+ * Hono context variables type
171
+ */
172
+ export interface TelescopeHonoVariables {
173
+ telescope: TelescopeHonoContext;
174
+ }
175
+
176
+ /**
177
+ * Extended Hono context with Telescope variables
178
+ */
179
+ export type HonoContextWithTelescope = HonoContext<{
180
+ Variables: TelescopeHonoVariables;
181
+ }>;
package/src/core.ts ADDED
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Telescope Core
3
+ *
4
+ * Core types, interfaces, and utilities for Telescope.
5
+ * This module is environment-agnostic and can be used anywhere.
6
+ */
7
+
8
+ // Adapter types and interfaces
9
+ export type {
10
+ AdapterConfig,
11
+ AdapterErrorContext,
12
+ AdapterLifecycle,
13
+ AdapterRequestContext,
14
+ AdapterResponseContext,
15
+ HonoAdapterConfig,
16
+ HonoContextWithTelescope,
17
+ LambdaAdapterConfig,
18
+ SpanProcessorOptions,
19
+ SpanProcessorStrategy,
20
+ TelescopeAdapter,
21
+ TelescopeEnvironment,
22
+ TelescopeHonoContext,
23
+ TelescopeHonoVariables,
24
+ } from './adapters/types';
25
+
26
+ // Instrumentation core utilities
27
+ export {
28
+ createSpanProcessor,
29
+ enableTelemetryDebug,
30
+ flushTelemetry,
31
+ getRecommendedStrategy,
32
+ isTelemetryInitialized,
33
+ NoopSpanProcessor,
34
+ setGlobalLogProcessor,
35
+ setGlobalSpanProcessor,
36
+ shutdownTelemetry,
37
+ withTelemetryFlush,
38
+ } from './instrumentation/core';
39
+
40
+ // Tracing utilities
41
+ export {
42
+ addSpanEvent,
43
+ createSpan,
44
+ getActiveSpan,
45
+ getSpanId,
46
+ getTraceId,
47
+ recordException,
48
+ setSpanAttributes,
49
+ withSpan,
50
+ withSpanSync,
51
+ } from './instrumentation/tracing';
package/src/index.ts ADDED
@@ -0,0 +1,34 @@
1
+ // Core
2
+
3
+ export type { MetricsAggregatorOptions } from './metrics';
4
+ // Metrics
5
+ export { MetricsAggregator } from './metrics';
6
+ export type { InMemoryStorageOptions } from './storage/memory';
7
+ // Storage
8
+ export { InMemoryStorage } from './storage/memory';
9
+ export { Telescope } from './Telescope';
10
+
11
+ // Types
12
+ export type {
13
+ EndpointBucket,
14
+ EndpointMetrics,
15
+ ExceptionEntry,
16
+ LogEntry,
17
+ MetricsBucket,
18
+ MetricsQueryOptions,
19
+ NormalizedTelescopeOptions,
20
+ QueryOptions,
21
+ RequestContext,
22
+ RequestEntry,
23
+ RequestMetrics,
24
+ SourceContext,
25
+ StackFrame,
26
+ StatusDistribution,
27
+ TelescopeEvent,
28
+ TelescopeEventType,
29
+ TelescopeOptions,
30
+ TelescopeStats,
31
+ TelescopeStorage,
32
+ TimeRange,
33
+ TimeSeriesPoint,
34
+ } from './types';