@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,455 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import {
3
+ transformLogs,
4
+ transformMetrics,
5
+ transformTraces,
6
+ } from '../transformer';
7
+ import {
8
+ type ExportLogsServiceRequest,
9
+ type ExportMetricsServiceRequest,
10
+ type ExportTraceServiceRequest,
11
+ SeverityNumber,
12
+ SpanKind,
13
+ SpanStatusCode,
14
+ } from '../types';
15
+
16
+ describe('OTLP Transformer', () => {
17
+ describe('transformTraces', () => {
18
+ it('should transform HTTP server spans to request entries', () => {
19
+ const request: ExportTraceServiceRequest = {
20
+ resourceSpans: [
21
+ {
22
+ resource: {
23
+ attributes: [
24
+ { key: 'service.name', value: { stringValue: 'my-api' } },
25
+ ],
26
+ },
27
+ scopeSpans: [
28
+ {
29
+ scope: { name: '@opentelemetry/instrumentation-http' },
30
+ spans: [
31
+ {
32
+ traceId: 'abc123',
33
+ spanId: 'def456',
34
+ name: 'GET /users',
35
+ kind: SpanKind.SPAN_KIND_SERVER,
36
+ startTimeUnixNano: '1704067200000000000', // 2024-01-01 00:00:00
37
+ endTimeUnixNano: '1704067200050000000', // +50ms
38
+ attributes: [
39
+ { key: 'http.method', value: { stringValue: 'GET' } },
40
+ { key: 'http.target', value: { stringValue: '/users' } },
41
+ { key: 'http.status_code', value: { intValue: '200' } },
42
+ {
43
+ key: 'http.url',
44
+ value: { stringValue: 'http://localhost:3000/users' },
45
+ },
46
+ ],
47
+ status: { code: SpanStatusCode.STATUS_CODE_OK },
48
+ },
49
+ ],
50
+ },
51
+ ],
52
+ },
53
+ ],
54
+ };
55
+
56
+ const entries = transformTraces(request);
57
+
58
+ expect(entries).toHaveLength(1);
59
+ expect(entries[0]).toMatchObject({
60
+ method: 'GET',
61
+ path: '/users',
62
+ url: 'http://localhost:3000/users',
63
+ status: 200,
64
+ duration: 50,
65
+ });
66
+ expect(entries[0].tags).toContain('trace:abc123');
67
+ expect(entries[0].tags).toContain('span:def456');
68
+ expect(entries[0].tags).toContain('service:my-api');
69
+ });
70
+
71
+ it('should ignore non-HTTP server spans', () => {
72
+ const request: ExportTraceServiceRequest = {
73
+ resourceSpans: [
74
+ {
75
+ scopeSpans: [
76
+ {
77
+ spans: [
78
+ {
79
+ traceId: 'abc123',
80
+ spanId: 'def456',
81
+ name: 'internal-operation',
82
+ kind: SpanKind.SPAN_KIND_INTERNAL,
83
+ startTimeUnixNano: '1704067200000000000',
84
+ endTimeUnixNano: '1704067200050000000',
85
+ attributes: [],
86
+ },
87
+ {
88
+ traceId: 'abc123',
89
+ spanId: 'ghi789',
90
+ name: 'db-query',
91
+ kind: SpanKind.SPAN_KIND_CLIENT,
92
+ startTimeUnixNano: '1704067200000000000',
93
+ endTimeUnixNano: '1704067200010000000',
94
+ attributes: [
95
+ {
96
+ key: 'db.system',
97
+ value: { stringValue: 'postgresql' },
98
+ },
99
+ ],
100
+ },
101
+ ],
102
+ },
103
+ ],
104
+ },
105
+ ],
106
+ };
107
+
108
+ const entries = transformTraces(request);
109
+ expect(entries).toHaveLength(0);
110
+ });
111
+
112
+ it('should handle error spans', () => {
113
+ const request: ExportTraceServiceRequest = {
114
+ resourceSpans: [
115
+ {
116
+ scopeSpans: [
117
+ {
118
+ spans: [
119
+ {
120
+ traceId: 'abc123',
121
+ spanId: 'def456',
122
+ name: 'POST /error',
123
+ kind: SpanKind.SPAN_KIND_SERVER,
124
+ startTimeUnixNano: '1704067200000000000',
125
+ endTimeUnixNano: '1704067200100000000',
126
+ attributes: [
127
+ { key: 'http.method', value: { stringValue: 'POST' } },
128
+ { key: 'http.target', value: { stringValue: '/error' } },
129
+ ],
130
+ status: {
131
+ code: SpanStatusCode.STATUS_CODE_ERROR,
132
+ message: 'Internal server error',
133
+ },
134
+ },
135
+ ],
136
+ },
137
+ ],
138
+ },
139
+ ],
140
+ };
141
+
142
+ const entries = transformTraces(request);
143
+
144
+ expect(entries).toHaveLength(1);
145
+ expect(entries[0].status).toBe(500);
146
+ });
147
+
148
+ it('should handle empty request', () => {
149
+ const entries = transformTraces({});
150
+ expect(entries).toHaveLength(0);
151
+ });
152
+
153
+ it('should extract client IP from attributes', () => {
154
+ const request: ExportTraceServiceRequest = {
155
+ resourceSpans: [
156
+ {
157
+ scopeSpans: [
158
+ {
159
+ spans: [
160
+ {
161
+ traceId: 'abc123',
162
+ spanId: 'def456',
163
+ name: 'GET /test',
164
+ kind: SpanKind.SPAN_KIND_SERVER,
165
+ startTimeUnixNano: '1704067200000000000',
166
+ endTimeUnixNano: '1704067200050000000',
167
+ attributes: [
168
+ { key: 'http.method', value: { stringValue: 'GET' } },
169
+ { key: 'http.target', value: { stringValue: '/test' } },
170
+ { key: 'http.status_code', value: { intValue: '200' } },
171
+ {
172
+ key: 'client.address',
173
+ value: { stringValue: '192.168.1.1' },
174
+ },
175
+ ],
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ },
181
+ ],
182
+ };
183
+
184
+ const entries = transformTraces(request);
185
+ expect(entries[0].ip).toBe('192.168.1.1');
186
+ });
187
+ });
188
+
189
+ describe('transformLogs', () => {
190
+ it('should transform log records to log entries', () => {
191
+ const request: ExportLogsServiceRequest = {
192
+ resourceLogs: [
193
+ {
194
+ resource: {
195
+ attributes: [
196
+ { key: 'service.name', value: { stringValue: 'my-api' } },
197
+ ],
198
+ },
199
+ scopeLogs: [
200
+ {
201
+ scope: { name: 'my-logger' },
202
+ logRecords: [
203
+ {
204
+ observedTimeUnixNano: '1704067200000000000',
205
+ severityNumber: SeverityNumber.SEVERITY_NUMBER_INFO,
206
+ severityText: 'INFO',
207
+ body: { stringValue: 'User logged in' },
208
+ attributes: [
209
+ { key: 'userId', value: { stringValue: '123' } },
210
+ ],
211
+ traceId: 'abc123',
212
+ spanId: 'def456',
213
+ },
214
+ ],
215
+ },
216
+ ],
217
+ },
218
+ ],
219
+ };
220
+
221
+ const entries = transformLogs(request);
222
+
223
+ expect(entries).toHaveLength(1);
224
+ expect(entries[0]).toMatchObject({
225
+ level: 'info',
226
+ message: 'User logged in',
227
+ requestId: 'span:def456',
228
+ });
229
+ expect(entries[0].context).toMatchObject({
230
+ userId: '123',
231
+ 'service.name': 'my-api',
232
+ 'instrumentation.scope': 'my-logger',
233
+ });
234
+ });
235
+
236
+ it('should map severity levels correctly', () => {
237
+ const createLogRequest = (
238
+ severity: SeverityNumber,
239
+ ): ExportLogsServiceRequest => ({
240
+ resourceLogs: [
241
+ {
242
+ scopeLogs: [
243
+ {
244
+ logRecords: [
245
+ {
246
+ observedTimeUnixNano: '1704067200000000000',
247
+ severityNumber: severity,
248
+ body: { stringValue: 'Test message' },
249
+ },
250
+ ],
251
+ },
252
+ ],
253
+ },
254
+ ],
255
+ });
256
+
257
+ expect(
258
+ transformLogs(createLogRequest(SeverityNumber.SEVERITY_NUMBER_DEBUG))[0]
259
+ .level,
260
+ ).toBe('debug');
261
+ expect(
262
+ transformLogs(createLogRequest(SeverityNumber.SEVERITY_NUMBER_INFO))[0]
263
+ .level,
264
+ ).toBe('info');
265
+ expect(
266
+ transformLogs(createLogRequest(SeverityNumber.SEVERITY_NUMBER_WARN))[0]
267
+ .level,
268
+ ).toBe('warn');
269
+ expect(
270
+ transformLogs(createLogRequest(SeverityNumber.SEVERITY_NUMBER_ERROR))[0]
271
+ .level,
272
+ ).toBe('error');
273
+ expect(
274
+ transformLogs(createLogRequest(SeverityNumber.SEVERITY_NUMBER_FATAL))[0]
275
+ .level,
276
+ ).toBe('error');
277
+ });
278
+
279
+ it('should handle object body', () => {
280
+ const request: ExportLogsServiceRequest = {
281
+ resourceLogs: [
282
+ {
283
+ scopeLogs: [
284
+ {
285
+ logRecords: [
286
+ {
287
+ observedTimeUnixNano: '1704067200000000000',
288
+ severityNumber: SeverityNumber.SEVERITY_NUMBER_INFO,
289
+ body: {
290
+ kvlistValue: {
291
+ values: [
292
+ { key: 'event', value: { stringValue: 'login' } },
293
+ { key: 'success', value: { boolValue: true } },
294
+ ],
295
+ },
296
+ },
297
+ },
298
+ ],
299
+ },
300
+ ],
301
+ },
302
+ ],
303
+ };
304
+
305
+ const entries = transformLogs(request);
306
+ expect(entries[0].message).toBe('{"event":"login","success":true}');
307
+ });
308
+
309
+ it('should handle empty request', () => {
310
+ const entries = transformLogs({});
311
+ expect(entries).toHaveLength(0);
312
+ });
313
+ });
314
+
315
+ describe('transformMetrics', () => {
316
+ it('should transform gauge metrics', () => {
317
+ const request: ExportMetricsServiceRequest = {
318
+ resourceMetrics: [
319
+ {
320
+ resource: {
321
+ attributes: [
322
+ { key: 'service.name', value: { stringValue: 'my-api' } },
323
+ ],
324
+ },
325
+ scopeMetrics: [
326
+ {
327
+ metrics: [
328
+ {
329
+ name: 'cpu_usage',
330
+ description: 'CPU usage percentage',
331
+ unit: '%',
332
+ gauge: {
333
+ dataPoints: [
334
+ {
335
+ timeUnixNano: '1704067200000000000',
336
+ asDouble: 45.5,
337
+ attributes: [
338
+ { key: 'host', value: { stringValue: 'server-1' } },
339
+ ],
340
+ },
341
+ ],
342
+ },
343
+ },
344
+ ],
345
+ },
346
+ ],
347
+ },
348
+ ],
349
+ };
350
+
351
+ const points = transformMetrics(request);
352
+
353
+ expect(points).toHaveLength(1);
354
+ expect(points[0]).toMatchObject({
355
+ name: 'cpu_usage',
356
+ description: 'CPU usage percentage',
357
+ unit: '%',
358
+ value: 45.5,
359
+ type: 'gauge',
360
+ });
361
+ expect(points[0].attributes).toMatchObject({ host: 'server-1' });
362
+ expect(points[0].resourceAttributes).toMatchObject({
363
+ 'service.name': 'my-api',
364
+ });
365
+ });
366
+
367
+ it('should transform sum (counter) metrics', () => {
368
+ const request: ExportMetricsServiceRequest = {
369
+ resourceMetrics: [
370
+ {
371
+ scopeMetrics: [
372
+ {
373
+ metrics: [
374
+ {
375
+ name: 'http_requests_total',
376
+ sum: {
377
+ dataPoints: [
378
+ {
379
+ timeUnixNano: '1704067200000000000',
380
+ asInt: '1234',
381
+ },
382
+ ],
383
+ aggregationTemporality: 2, // CUMULATIVE
384
+ isMonotonic: true,
385
+ },
386
+ },
387
+ ],
388
+ },
389
+ ],
390
+ },
391
+ ],
392
+ };
393
+
394
+ const points = transformMetrics(request);
395
+
396
+ expect(points).toHaveLength(1);
397
+ expect(points[0]).toMatchObject({
398
+ name: 'http_requests_total',
399
+ value: 1234,
400
+ type: 'sum',
401
+ });
402
+ });
403
+
404
+ it('should transform histogram metrics', () => {
405
+ const request: ExportMetricsServiceRequest = {
406
+ resourceMetrics: [
407
+ {
408
+ scopeMetrics: [
409
+ {
410
+ metrics: [
411
+ {
412
+ name: 'http_request_duration',
413
+ histogram: {
414
+ dataPoints: [
415
+ {
416
+ timeUnixNano: '1704067200000000000',
417
+ count: '100',
418
+ sum: 5000,
419
+ min: 10,
420
+ max: 500,
421
+ bucketCounts: ['10', '30', '40', '15', '5'],
422
+ explicitBounds: [50, 100, 200, 500],
423
+ },
424
+ ],
425
+ aggregationTemporality: 2,
426
+ },
427
+ },
428
+ ],
429
+ },
430
+ ],
431
+ },
432
+ ],
433
+ };
434
+
435
+ const points = transformMetrics(request);
436
+
437
+ expect(points).toHaveLength(1);
438
+ expect(points[0]).toMatchObject({
439
+ name: 'http_request_duration',
440
+ value: 5000,
441
+ type: 'histogram',
442
+ });
443
+ expect(points[0].attributes).toMatchObject({
444
+ count: 100,
445
+ min: 10,
446
+ max: 500,
447
+ });
448
+ });
449
+
450
+ it('should handle empty request', () => {
451
+ const points = transformMetrics({});
452
+ expect(points).toHaveLength(0);
453
+ });
454
+ });
455
+ });
@@ -0,0 +1,120 @@
1
+ import { Hono } from 'hono';
2
+ import type { MetricsHandler, OTLPReceiverOptions } from './receiver';
3
+ import { OTLPReceiver } from './receiver';
4
+ import type {
5
+ ExportLogsServiceRequest,
6
+ ExportMetricsServiceRequest,
7
+ ExportTraceServiceRequest,
8
+ } from './types';
9
+
10
+ /**
11
+ * Create Hono routes for OTLP endpoints.
12
+ *
13
+ * Mount this at /v1 to get the standard OTLP paths:
14
+ * - POST /v1/traces
15
+ * - POST /v1/logs
16
+ * - POST /v1/metrics
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { createOTLPRoutes } from '@geekmidas/telescope/otlp/hono';
21
+ *
22
+ * const telescope = new Telescope({ storage: new InMemoryStorage() });
23
+ * const app = new Hono();
24
+ *
25
+ * // Mount OTLP endpoints at /v1
26
+ * app.route('/v1', createOTLPRoutes({ telescope }));
27
+ *
28
+ * // Now accepts:
29
+ * // POST /v1/traces
30
+ * // POST /v1/logs
31
+ * // POST /v1/metrics
32
+ * ```
33
+ */
34
+ export function createOTLPRoutes(options: OTLPReceiverOptions): Hono {
35
+ const receiver = new OTLPReceiver(options);
36
+ const app = new Hono();
37
+
38
+ // POST /traces - Receive trace data
39
+ app.post('/traces', async (c) => {
40
+ try {
41
+ const contentType = c.req.header('content-type') || '';
42
+
43
+ // Only support JSON for now
44
+ if (!contentType.includes('application/json')) {
45
+ return c.json({ error: 'Only application/json is supported' }, 415);
46
+ }
47
+
48
+ const request = await c.req.json<ExportTraceServiceRequest>();
49
+ const response = await receiver.receiveTraces(request);
50
+
51
+ return c.json(response, response.partialSuccess ? 206 : 200);
52
+ } catch (error) {
53
+ return c.json(
54
+ {
55
+ error:
56
+ error instanceof Error ? error.message : 'Failed to process traces',
57
+ },
58
+ 400,
59
+ );
60
+ }
61
+ });
62
+
63
+ // POST /logs - Receive log data
64
+ app.post('/logs', async (c) => {
65
+ try {
66
+ const contentType = c.req.header('content-type') || '';
67
+
68
+ if (!contentType.includes('application/json')) {
69
+ return c.json({ error: 'Only application/json is supported' }, 415);
70
+ }
71
+
72
+ const request = await c.req.json<ExportLogsServiceRequest>();
73
+ const response = await receiver.receiveLogs(request);
74
+
75
+ return c.json(response, response.partialSuccess ? 206 : 200);
76
+ } catch (error) {
77
+ return c.json(
78
+ {
79
+ error:
80
+ error instanceof Error ? error.message : 'Failed to process logs',
81
+ },
82
+ 400,
83
+ );
84
+ }
85
+ });
86
+
87
+ // POST /metrics - Receive metrics data
88
+ app.post('/metrics', async (c) => {
89
+ try {
90
+ const contentType = c.req.header('content-type') || '';
91
+
92
+ if (!contentType.includes('application/json')) {
93
+ return c.json({ error: 'Only application/json is supported' }, 415);
94
+ }
95
+
96
+ const request = await c.req.json<ExportMetricsServiceRequest>();
97
+ const response = await receiver.receiveMetrics(request);
98
+
99
+ return c.json(response, response.partialSuccess ? 206 : 200);
100
+ } catch (error) {
101
+ return c.json(
102
+ {
103
+ error:
104
+ error instanceof Error
105
+ ? error.message
106
+ : 'Failed to process metrics',
107
+ },
108
+ 400,
109
+ );
110
+ }
111
+ });
112
+
113
+ return app;
114
+ }
115
+
116
+ /**
117
+ * Re-export the receiver for custom usage
118
+ */
119
+ export { OTLPReceiver };
120
+ export type { MetricsHandler, OTLPReceiverOptions };
@@ -0,0 +1,22 @@
1
+ export type { MetricsHandler, OTLPReceiverOptions } from './receiver';
2
+ export { OTLPReceiver } from './receiver';
3
+ export type { MetricDataPoint } from './transformer';
4
+ export {
5
+ transformLogs,
6
+ transformMetrics,
7
+ transformTraces,
8
+ } from './transformer';
9
+ export type {
10
+ ExportLogsServiceRequest,
11
+ ExportLogsServiceResponse,
12
+ ExportMetricsServiceRequest,
13
+ ExportMetricsServiceResponse,
14
+ ExportTraceServiceRequest,
15
+ ExportTraceServiceResponse,
16
+ KeyValue,
17
+ LogRecord,
18
+ Metric,
19
+ Resource,
20
+ Span,
21
+ } from './types';
22
+ export { SeverityNumber, SpanKind, SpanStatusCode } from './types';