@geekmidas/telescope 10.0.0-alpha.98 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +18 -28
  3. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts +47 -0
  4. package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts.map +1 -0
  5. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs +247 -0
  6. package/dist/InMemoryMetricsStorage-C4drxT7G.mjs.map +1 -0
  7. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs +252 -0
  8. package/dist/InMemoryMetricsStorage-D0njWUSi.cjs.map +1 -0
  9. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts +47 -0
  10. package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts.map +1 -0
  11. package/dist/{MetricsAggregator-BJdIvfEv.d.mts → MetricsAggregator-4SqelGcG.d.cts} +6 -3
  12. package/dist/MetricsAggregator-4SqelGcG.d.cts.map +1 -0
  13. package/dist/MetricsAggregator-B7lUICdH.cjs +363 -0
  14. package/dist/MetricsAggregator-B7lUICdH.cjs.map +1 -0
  15. package/dist/{MetricsAggregator-CnC3oT5q.d.cts → MetricsAggregator-DZrW8ls6.d.mts} +6 -3
  16. package/dist/MetricsAggregator-DZrW8ls6.d.mts.map +1 -0
  17. package/dist/MetricsAggregator-S3DQWNas.mjs +357 -0
  18. package/dist/MetricsAggregator-S3DQWNas.mjs.map +1 -0
  19. package/dist/MetricsStorage-B86e4131.d.cts +60 -0
  20. package/dist/MetricsStorage-B86e4131.d.cts.map +1 -0
  21. package/dist/MetricsStorage-BWyP2_12.d.mts +60 -0
  22. package/dist/MetricsStorage-BWyP2_12.d.mts.map +1 -0
  23. package/dist/MetricsStorage-BypQXWiv.mjs +0 -0
  24. package/dist/MetricsStorage-Or8pVCe4.cjs +0 -0
  25. package/dist/Telescope-Cs3fv8jt.cjs +395 -0
  26. package/dist/Telescope-Cs3fv8jt.cjs.map +1 -0
  27. package/dist/{Telescope-BVfDvVvY.d.mts → Telescope-D4nmwDRA.d.cts} +7 -4
  28. package/dist/Telescope-D4nmwDRA.d.cts.map +1 -0
  29. package/dist/Telescope-Dh5av3FC.mjs +389 -0
  30. package/dist/Telescope-Dh5av3FC.mjs.map +1 -0
  31. package/dist/{Telescope-DeqSHfuB.d.cts → Telescope-Dl6VSfxd.d.mts} +7 -4
  32. package/dist/Telescope-Dl6VSfxd.d.mts.map +1 -0
  33. package/dist/Telescope.cjs +4 -385
  34. package/dist/Telescope.d.cts +3 -1
  35. package/dist/Telescope.d.mts +3 -1
  36. package/dist/Telescope.mjs +4 -384
  37. package/dist/adapters/index.d.cts +2 -2
  38. package/dist/adapters/index.d.mts +2 -2
  39. package/dist/adapters/index.mjs +0 -1
  40. package/dist/adapters/lambda.cjs +10 -9
  41. package/dist/adapters/lambda.cjs.map +1 -1
  42. package/dist/adapters/lambda.d.cts +13 -9
  43. package/dist/adapters/lambda.d.cts.map +1 -1
  44. package/dist/adapters/lambda.d.mts +13 -9
  45. package/dist/adapters/lambda.d.mts.map +1 -1
  46. package/dist/adapters/lambda.mjs +4 -3
  47. package/dist/adapters/lambda.mjs.map +1 -1
  48. package/dist/adapters/middy.cjs +4 -236
  49. package/dist/adapters/middy.d.cts +5 -60
  50. package/dist/adapters/middy.d.mts +5 -60
  51. package/dist/adapters/middy.mjs +3 -234
  52. package/dist/adapters/types.d.cts +2 -162
  53. package/dist/adapters/types.d.mts +2 -162
  54. package/dist/adapters/types.mjs +0 -1
  55. package/dist/{rolldown-runtime-VH7oDXx4.cjs → chunk-CUT6urMc.cjs} +10 -8
  56. package/dist/core--quSp5Qr.d.mts +78 -0
  57. package/dist/core--quSp5Qr.d.mts.map +1 -0
  58. package/dist/core-B4Jpia5H.d.cts +78 -0
  59. package/dist/core-B4Jpia5H.d.cts.map +1 -0
  60. package/dist/core-CtVHRJGv.cjs +199 -0
  61. package/dist/core-CtVHRJGv.cjs.map +1 -0
  62. package/dist/core-D6hJ6exL.mjs +139 -0
  63. package/dist/core-D6hJ6exL.mjs.map +1 -0
  64. package/dist/core.cjs +22 -22
  65. package/dist/core.d.cts +4 -4
  66. package/dist/core.d.mts +4 -4
  67. package/dist/core.mjs +4 -3
  68. package/dist/hono--uKQ7Jgi.d.mts +71 -0
  69. package/dist/hono--uKQ7Jgi.d.mts.map +1 -0
  70. package/dist/hono-C4EgpbKQ.cjs +160 -0
  71. package/dist/hono-C4EgpbKQ.cjs.map +1 -0
  72. package/dist/hono-CemCKU87.d.cts +71 -0
  73. package/dist/hono-CemCKU87.d.cts.map +1 -0
  74. package/dist/hono-DxhvnVbF.mjs +136 -0
  75. package/dist/hono-DxhvnVbF.mjs.map +1 -0
  76. package/dist/http-BiNtg85L.d.mts +107 -0
  77. package/dist/http-BiNtg85L.d.mts.map +1 -0
  78. package/dist/http-DQzgLczm.mjs +159 -0
  79. package/dist/http-DQzgLczm.mjs.map +1 -0
  80. package/dist/http-D_Z8sYXZ.cjs +219 -0
  81. package/dist/http-D_Z8sYXZ.cjs.map +1 -0
  82. package/dist/http-Dvca6fC3.d.cts +107 -0
  83. package/dist/http-Dvca6fC3.d.cts.map +1 -0
  84. package/dist/index-BL32-cvv.d.cts +1 -0
  85. package/dist/index-CsuikFeJ.d.mts +1 -0
  86. package/dist/index.cjs +9 -8
  87. package/dist/index.d.cts +6 -5
  88. package/dist/index.d.mts +6 -5
  89. package/dist/index.mjs +7 -5
  90. package/dist/instrumentation/core.cjs +11 -147
  91. package/dist/instrumentation/core.d.cts +3 -74
  92. package/dist/instrumentation/core.d.mts +3 -74
  93. package/dist/instrumentation/core.mjs +2 -137
  94. package/dist/instrumentation/hono.cjs +6 -174
  95. package/dist/instrumentation/hono.d.cts +2 -86
  96. package/dist/instrumentation/hono.d.mts +2 -86
  97. package/dist/instrumentation/hono.mjs +3 -170
  98. package/dist/instrumentation/http.cjs +11 -189
  99. package/dist/instrumentation/http.d.cts +2 -119
  100. package/dist/instrumentation/http.d.mts +2 -119
  101. package/dist/instrumentation/http.mjs +2 -178
  102. package/dist/instrumentation/index.cjs +47 -56
  103. package/dist/instrumentation/index.d.cts +9 -11
  104. package/dist/instrumentation/index.d.mts +9 -11
  105. package/dist/instrumentation/index.mjs +9 -10
  106. package/dist/instrumentation/middleware.cjs +6 -164
  107. package/dist/instrumentation/middleware.d.cts +2 -83
  108. package/dist/instrumentation/middleware.d.mts +2 -83
  109. package/dist/instrumentation/middleware.mjs +3 -160
  110. package/dist/instrumentation/otel.cjs +3 -137
  111. package/dist/instrumentation/otel.d.cts +2 -97
  112. package/dist/instrumentation/otel.d.mts +2 -97
  113. package/dist/instrumentation/otel.mjs +3 -136
  114. package/dist/instrumentation/setup.cjs +4 -142
  115. package/dist/instrumentation/setup.d.cts +3 -139
  116. package/dist/instrumentation/setup.d.mts +3 -139
  117. package/dist/instrumentation/setup.mjs +3 -139
  118. package/dist/instrumentation/tracing.cjs +10 -114
  119. package/dist/instrumentation/tracing.d.cts +2 -49
  120. package/dist/instrumentation/tracing.d.mts +2 -49
  121. package/dist/instrumentation/tracing.mjs +2 -105
  122. package/dist/logger/console.cjs +12 -18
  123. package/dist/logger/console.cjs.map +1 -1
  124. package/dist/logger/console.d.cts +10 -7
  125. package/dist/logger/console.d.cts.map +1 -1
  126. package/dist/logger/console.d.mts +10 -7
  127. package/dist/logger/console.d.mts.map +1 -1
  128. package/dist/logger/console.mjs +11 -17
  129. package/dist/logger/console.mjs.map +1 -1
  130. package/dist/logger/pino.cjs +5 -6
  131. package/dist/logger/pino.cjs.map +1 -1
  132. package/dist/logger/pino.d.cts +10 -6
  133. package/dist/logger/pino.d.cts.map +1 -1
  134. package/dist/logger/pino.d.mts +10 -6
  135. package/dist/logger/pino.d.mts.map +1 -1
  136. package/dist/logger/pino.mjs +3 -2
  137. package/dist/logger/pino.mjs.map +1 -1
  138. package/dist/memory--BK4iWiv.d.cts +40 -0
  139. package/dist/memory--BK4iWiv.d.cts.map +1 -0
  140. package/dist/memory-6S9H-IF5.mjs +123 -0
  141. package/dist/memory-6S9H-IF5.mjs.map +1 -0
  142. package/dist/memory-B0d_n1g5.cjs +129 -0
  143. package/dist/memory-B0d_n1g5.cjs.map +1 -0
  144. package/dist/memory-DCirEVFW.d.mts +40 -0
  145. package/dist/memory-DCirEVFW.d.mts.map +1 -0
  146. package/dist/metrics/MetricsAggregator.cjs +2 -354
  147. package/dist/metrics/MetricsAggregator.d.cts +2 -1
  148. package/dist/metrics/MetricsAggregator.d.mts +2 -1
  149. package/dist/metrics/MetricsAggregator.mjs +2 -353
  150. package/dist/metrics/index.cjs +4 -3
  151. package/dist/metrics/index.d.cts +4 -2
  152. package/dist/metrics/index.d.mts +4 -2
  153. package/dist/metrics/index.mjs +4 -2
  154. package/dist/metrics/storage/InMemoryMetricsStorage.cjs +3 -240
  155. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts +4 -43
  156. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts +4 -43
  157. package/dist/metrics/storage/InMemoryMetricsStorage.mjs +3 -239
  158. package/dist/metrics/storage/MetricsStorage.cjs +1 -0
  159. package/dist/metrics/storage/MetricsStorage.d.cts +3 -56
  160. package/dist/metrics/storage/MetricsStorage.d.mts +3 -56
  161. package/dist/metrics/storage/MetricsStorage.mjs +1 -1
  162. package/dist/metrics/storage/index.cjs +6 -6
  163. package/dist/metrics/storage/index.d.cts +3 -3
  164. package/dist/metrics/storage/index.d.mts +3 -3
  165. package/dist/metrics/storage/index.mjs +5 -4
  166. package/dist/metrics/storage/types.cjs +2 -34
  167. package/dist/metrics/storage/types.d.cts +2 -207
  168. package/dist/metrics/storage/types.d.mts +2 -207
  169. package/dist/metrics/storage/types.mjs +2 -33
  170. package/dist/metrics-D5YT-Rnq.mjs +0 -0
  171. package/dist/metrics-fhD3l3C3.cjs +0 -0
  172. package/dist/middleware-B2jFUukM.cjs +184 -0
  173. package/dist/middleware-B2jFUukM.cjs.map +1 -0
  174. package/dist/middleware-BTDncHwm.mjs +160 -0
  175. package/dist/middleware-BTDncHwm.mjs.map +1 -0
  176. package/dist/middleware-CA84nsNN.d.cts +74 -0
  177. package/dist/middleware-CA84nsNN.d.cts.map +1 -0
  178. package/dist/middleware-DAceVpfw.d.mts +74 -0
  179. package/dist/middleware-DAceVpfw.d.mts.map +1 -0
  180. package/dist/middy-B6Btl8XE.d.mts +64 -0
  181. package/dist/middy-B6Btl8XE.d.mts.map +1 -0
  182. package/dist/middy-BTR3cyvk.mjs +236 -0
  183. package/dist/middy-BTR3cyvk.mjs.map +1 -0
  184. package/dist/middy-Bq0defVg.d.cts +64 -0
  185. package/dist/middy-Bq0defVg.d.cts.map +1 -0
  186. package/dist/middy-y5Zp27eG.cjs +247 -0
  187. package/dist/middy-y5Zp27eG.cjs.map +1 -0
  188. package/dist/otel-1bJPb2Z7.d.mts +101 -0
  189. package/dist/otel-1bJPb2Z7.d.mts.map +1 -0
  190. package/dist/otel-C1HqHA2O.cjs +136 -0
  191. package/dist/otel-C1HqHA2O.cjs.map +1 -0
  192. package/dist/otel-SBVoVEHr.d.cts +101 -0
  193. package/dist/otel-SBVoVEHr.d.cts.map +1 -0
  194. package/dist/otel-wulj5B-X.mjs +130 -0
  195. package/dist/otel-wulj5B-X.mjs.map +1 -0
  196. package/dist/otlp/hono.cjs +15 -9
  197. package/dist/otlp/hono.cjs.map +1 -1
  198. package/dist/otlp/hono.d.cts +13 -3
  199. package/dist/otlp/hono.d.cts.map +1 -1
  200. package/dist/otlp/hono.d.mts +13 -3
  201. package/dist/otlp/hono.d.mts.map +1 -1
  202. package/dist/otlp/hono.mjs +11 -5
  203. package/dist/otlp/hono.mjs.map +1 -1
  204. package/dist/otlp/index.cjs +11 -11
  205. package/dist/otlp/index.d.cts +7 -4
  206. package/dist/otlp/index.d.mts +7 -4
  207. package/dist/otlp/index.mjs +5 -4
  208. package/dist/otlp/receiver.cjs +4 -88
  209. package/dist/otlp/receiver.d.cts +7 -59
  210. package/dist/otlp/receiver.d.mts +7 -59
  211. package/dist/otlp/receiver.mjs +4 -87
  212. package/dist/otlp/transformer.cjs +5 -214
  213. package/dist/otlp/transformer.d.cts +3 -1
  214. package/dist/otlp/transformer.d.mts +3 -1
  215. package/dist/otlp/transformer.mjs +3 -211
  216. package/dist/otlp/types.cjs +5 -57
  217. package/dist/otlp/types.d.cts +1 -1
  218. package/dist/otlp/types.d.mts +1 -1
  219. package/dist/otlp/types.mjs +2 -53
  220. package/dist/receiver-Cj1lbAOO.cjs +94 -0
  221. package/dist/receiver-Cj1lbAOO.cjs.map +1 -0
  222. package/dist/receiver-CxVd_9CB.mjs +89 -0
  223. package/dist/receiver-CxVd_9CB.mjs.map +1 -0
  224. package/dist/receiver-DLICx5uU.d.cts +63 -0
  225. package/dist/receiver-DLICx5uU.d.cts.map +1 -0
  226. package/dist/receiver-UeZT-H8u.d.mts +63 -0
  227. package/dist/receiver-UeZT-H8u.d.mts.map +1 -0
  228. package/dist/redact-BzkITCNW.mjs +83 -0
  229. package/dist/redact-BzkITCNW.mjs.map +1 -0
  230. package/dist/redact-DVaSSPZT.cjs +95 -0
  231. package/dist/redact-DVaSSPZT.cjs.map +1 -0
  232. package/dist/redact.cjs +3 -84
  233. package/dist/redact.d.cts +8 -4
  234. package/dist/redact.d.cts.map +1 -1
  235. package/dist/redact.d.mts +8 -4
  236. package/dist/redact.d.mts.map +1 -1
  237. package/dist/redact.mjs +2 -80
  238. package/dist/server/hono.cjs +54 -33
  239. package/dist/server/hono.cjs.map +1 -1
  240. package/dist/server/hono.d.cts +14 -19
  241. package/dist/server/hono.d.cts.map +1 -1
  242. package/dist/server/hono.d.mts +14 -19
  243. package/dist/server/hono.d.mts.map +1 -1
  244. package/dist/server/hono.mjs +52 -31
  245. package/dist/server/hono.mjs.map +1 -1
  246. package/dist/setup-B9jM77Qk.mjs +98 -0
  247. package/dist/setup-B9jM77Qk.mjs.map +1 -0
  248. package/dist/setup-Bkxm4g6b.d.mts +87 -0
  249. package/dist/setup-Bkxm4g6b.d.mts.map +1 -0
  250. package/dist/setup-CYpff5B9.cjs +110 -0
  251. package/dist/setup-CYpff5B9.cjs.map +1 -0
  252. package/dist/setup-D58N1f9O.d.cts +87 -0
  253. package/dist/setup-D58N1f9O.d.cts.map +1 -0
  254. package/dist/storage/kysely.cjs +70 -82
  255. package/dist/storage/kysely.cjs.map +1 -1
  256. package/dist/storage/kysely.d.cts +20 -36
  257. package/dist/storage/kysely.d.cts.map +1 -1
  258. package/dist/storage/kysely.d.mts +20 -36
  259. package/dist/storage/kysely.d.mts.map +1 -1
  260. package/dist/storage/kysely.mjs +69 -81
  261. package/dist/storage/kysely.mjs.map +1 -1
  262. package/dist/storage/memory.cjs +2 -122
  263. package/dist/storage/memory.d.cts +3 -36
  264. package/dist/storage/memory.d.mts +3 -36
  265. package/dist/storage/memory.mjs +2 -121
  266. package/dist/tracing-BX8uY2nR.d.cts +53 -0
  267. package/dist/tracing-BX8uY2nR.d.cts.map +1 -0
  268. package/dist/tracing-Bt1zWRlb.cjs +167 -0
  269. package/dist/tracing-Bt1zWRlb.cjs.map +1 -0
  270. package/dist/tracing-Cijm_5NI.mjs +113 -0
  271. package/dist/tracing-Cijm_5NI.mjs.map +1 -0
  272. package/dist/tracing-PnECEbEu.d.mts +53 -0
  273. package/dist/tracing-PnECEbEu.d.mts.map +1 -0
  274. package/dist/transformer-BXQPhzql.mjs +215 -0
  275. package/dist/transformer-BXQPhzql.mjs.map +1 -0
  276. package/dist/transformer-CLGZ0EQc.cjs +232 -0
  277. package/dist/transformer-CLGZ0EQc.cjs.map +1 -0
  278. package/dist/{transformer-BtqjAs0b.d.cts → transformer-CTGsaVfV.d.mts} +8 -4
  279. package/dist/transformer-CTGsaVfV.d.mts.map +1 -0
  280. package/dist/{transformer-DI6t8-YA.d.mts → transformer-ICEbxpFf.d.cts} +8 -4
  281. package/dist/transformer-ICEbxpFf.d.cts.map +1 -0
  282. package/dist/{types-BVujq4zd.d.mts → types-B1EIa_cQ.d.mts} +4 -3
  283. package/dist/types-B1EIa_cQ.d.mts.map +1 -0
  284. package/dist/types-BRzW1NM8.d.cts +166 -0
  285. package/dist/types-BRzW1NM8.d.cts.map +1 -0
  286. package/dist/types-BS3Rx8Sk.d.cts +209 -0
  287. package/dist/types-BS3Rx8Sk.d.cts.map +1 -0
  288. package/dist/types-Bwm_jNU7.mjs +54 -0
  289. package/dist/types-Bwm_jNU7.mjs.map +1 -0
  290. package/dist/types-BzQ78Efw.d.mts +166 -0
  291. package/dist/types-BzQ78Efw.d.mts.map +1 -0
  292. package/dist/types-CbNGXnJE.d.mts +209 -0
  293. package/dist/types-CbNGXnJE.d.mts.map +1 -0
  294. package/dist/{types-DVETVdpa.d.cts → types-CmOB7CLO.d.cts} +7 -6
  295. package/dist/types-CmOB7CLO.d.cts.map +1 -0
  296. package/dist/{types-DVETVdpa.d.mts → types-DBc0q5KD.d.mts} +7 -6
  297. package/dist/types-DBc0q5KD.d.mts.map +1 -0
  298. package/dist/types-Dsh-DIO_.cjs +78 -0
  299. package/dist/types-Dsh-DIO_.cjs.map +1 -0
  300. package/dist/types-ZW-nfWf6.cjs +40 -0
  301. package/dist/types-ZW-nfWf6.cjs.map +1 -0
  302. package/dist/{types-BVujq4zd.d.cts → types-l7Rlb5Mg.d.cts} +4 -3
  303. package/dist/types-l7Rlb5Mg.d.cts.map +1 -0
  304. package/dist/types-ojhnLdwz.mjs +34 -0
  305. package/dist/types-ojhnLdwz.mjs.map +1 -0
  306. package/dist/types.d.cts +1 -1
  307. package/dist/types.d.mts +1 -1
  308. package/dist/types.mjs +0 -1
  309. package/dist/ui-assets-BEXqOQLe.cjs +48 -0
  310. package/dist/ui-assets-BEXqOQLe.cjs.map +1 -0
  311. package/dist/ui-assets-BhTDUsrM.mjs +30 -0
  312. package/dist/ui-assets-BhTDUsrM.mjs.map +1 -0
  313. package/dist/ui-assets.cjs +5 -0
  314. package/dist/ui-assets.d.cts +13 -0
  315. package/dist/ui-assets.d.cts.map +1 -0
  316. package/dist/ui-assets.d.mts +13 -0
  317. package/dist/ui-assets.d.mts.map +1 -0
  318. package/dist/ui-assets.mjs +3 -0
  319. package/package.json +46 -46
  320. package/src/Telescope.ts +561 -0
  321. package/src/__tests__/Telescope.spec.ts +438 -0
  322. package/src/__tests__/pino-transport.spec.ts +115 -0
  323. package/src/__tests__/redact.spec.ts +336 -0
  324. package/src/adapters/__tests__/lambda.spec.ts +318 -0
  325. package/src/adapters/__tests__/middy.spec.ts +741 -0
  326. package/src/adapters/index.ts +22 -0
  327. package/src/adapters/lambda.ts +432 -0
  328. package/src/adapters/middy.ts +402 -0
  329. package/src/adapters/types.ts +181 -0
  330. package/src/core.ts +51 -0
  331. package/src/index.ts +34 -0
  332. package/src/instrumentation/__tests__/core.spec.ts +248 -0
  333. package/src/instrumentation/__tests__/hono.spec.ts +348 -0
  334. package/src/instrumentation/__tests__/middleware.spec.ts +528 -0
  335. package/src/instrumentation/__tests__/otel.spec.ts +291 -0
  336. package/src/instrumentation/__tests__/tracing.spec.ts +208 -0
  337. package/src/instrumentation/core.ts +228 -0
  338. package/src/instrumentation/hono.ts +270 -0
  339. package/src/instrumentation/http.ts +306 -0
  340. package/src/instrumentation/index.ts +90 -0
  341. package/src/instrumentation/middleware.ts +297 -0
  342. package/src/instrumentation/otel.ts +271 -0
  343. package/src/instrumentation/setup.ts +246 -0
  344. package/src/instrumentation/tracing.ts +145 -0
  345. package/src/logger/__tests__/console.spec.ts +366 -0
  346. package/src/logger/__tests__/pino.spec.ts +217 -0
  347. package/src/logger/console.ts +230 -0
  348. package/src/logger/pino.ts +201 -0
  349. package/src/metrics/MetricsAggregator.ts +555 -0
  350. package/src/metrics/__tests__/MetricsAggregator.spec.ts +298 -0
  351. package/src/metrics/index.ts +2 -0
  352. package/src/metrics/storage/InMemoryMetricsStorage.ts +380 -0
  353. package/src/metrics/storage/MetricsStorage.ts +74 -0
  354. package/src/metrics/storage/index.ts +3 -0
  355. package/src/metrics/storage/types.ts +243 -0
  356. package/src/otlp/__tests__/receiver.spec.ts +367 -0
  357. package/src/otlp/__tests__/transformer.spec.ts +455 -0
  358. package/src/otlp/hono.ts +120 -0
  359. package/src/otlp/index.ts +22 -0
  360. package/src/otlp/receiver.ts +162 -0
  361. package/src/otlp/transformer.ts +367 -0
  362. package/src/otlp/types.ts +364 -0
  363. package/src/redact.ts +116 -0
  364. package/src/server/__tests__/hono.spec.ts +814 -0
  365. package/src/server/hono.ts +442 -0
  366. package/src/storage/__tests__/kysely.spec.ts +715 -0
  367. package/src/storage/__tests__/memory.spec.ts +694 -0
  368. package/src/storage/kysely.ts +599 -0
  369. package/src/storage/memory.ts +204 -0
  370. package/src/types.ts +447 -0
  371. package/src/ui-assets.ts +40 -0
  372. package/tsconfig.json +9 -0
  373. package/ui/CHANGELOG.md +7 -0
  374. package/ui/index.html +12 -0
  375. package/ui/node_modules/.bin/tsc +21 -0
  376. package/ui/node_modules/.bin/tsserver +21 -0
  377. package/ui/node_modules/.bin/vite +21 -0
  378. package/ui/package.json +24 -0
  379. package/ui/src/App.tsx +595 -0
  380. package/ui/src/api.ts +88 -0
  381. package/ui/src/components/ExceptionDetail.tsx +100 -0
  382. package/ui/src/components/FilterBar.tsx +162 -0
  383. package/ui/src/components/LogDetail.tsx +91 -0
  384. package/ui/src/components/RequestDetail.tsx +143 -0
  385. package/ui/src/main.tsx +10 -0
  386. package/ui/src/styles.css +11 -0
  387. package/ui/src/types.ts +63 -0
  388. package/ui/src/vite-env.d.ts +1 -0
  389. package/ui/src/vite-plugin-gkm-config.ts +54 -0
  390. package/ui/tsconfig.json +20 -0
  391. package/ui/tsconfig.tsbuildinfo +1 -0
  392. package/ui/vite.config.ts +13 -0
  393. package/dist/MetricsAggregator-BJdIvfEv.d.mts.map +0 -1
  394. package/dist/MetricsAggregator-CnC3oT5q.d.cts.map +0 -1
  395. package/dist/Telescope-BVfDvVvY.d.mts.map +0 -1
  396. package/dist/Telescope-DeqSHfuB.d.cts.map +0 -1
  397. package/dist/Telescope.cjs.map +0 -1
  398. package/dist/Telescope.mjs.map +0 -1
  399. package/dist/adapters/middy.cjs.map +0 -1
  400. package/dist/adapters/middy.d.cts.map +0 -1
  401. package/dist/adapters/middy.d.mts.map +0 -1
  402. package/dist/adapters/middy.mjs.map +0 -1
  403. package/dist/adapters/types.d.cts.map +0 -1
  404. package/dist/adapters/types.d.mts.map +0 -1
  405. package/dist/instrumentation/core.cjs.map +0 -1
  406. package/dist/instrumentation/core.d.cts.map +0 -1
  407. package/dist/instrumentation/core.d.mts.map +0 -1
  408. package/dist/instrumentation/core.mjs.map +0 -1
  409. package/dist/instrumentation/hono.cjs.map +0 -1
  410. package/dist/instrumentation/hono.d.cts.map +0 -1
  411. package/dist/instrumentation/hono.d.mts.map +0 -1
  412. package/dist/instrumentation/hono.mjs.map +0 -1
  413. package/dist/instrumentation/http.cjs.map +0 -1
  414. package/dist/instrumentation/http.d.cts.map +0 -1
  415. package/dist/instrumentation/http.d.mts.map +0 -1
  416. package/dist/instrumentation/http.mjs.map +0 -1
  417. package/dist/instrumentation/middleware.cjs.map +0 -1
  418. package/dist/instrumentation/middleware.d.cts.map +0 -1
  419. package/dist/instrumentation/middleware.d.mts.map +0 -1
  420. package/dist/instrumentation/middleware.mjs.map +0 -1
  421. package/dist/instrumentation/otel.cjs.map +0 -1
  422. package/dist/instrumentation/otel.d.cts.map +0 -1
  423. package/dist/instrumentation/otel.d.mts.map +0 -1
  424. package/dist/instrumentation/otel.mjs.map +0 -1
  425. package/dist/instrumentation/sampler.cjs +0 -54
  426. package/dist/instrumentation/sampler.cjs.map +0 -1
  427. package/dist/instrumentation/sampler.d.cts +0 -38
  428. package/dist/instrumentation/sampler.d.cts.map +0 -1
  429. package/dist/instrumentation/sampler.d.mts +0 -38
  430. package/dist/instrumentation/sampler.d.mts.map +0 -1
  431. package/dist/instrumentation/sampler.mjs +0 -52
  432. package/dist/instrumentation/sampler.mjs.map +0 -1
  433. package/dist/instrumentation/setup.cjs.map +0 -1
  434. package/dist/instrumentation/setup.d.cts.map +0 -1
  435. package/dist/instrumentation/setup.d.mts.map +0 -1
  436. package/dist/instrumentation/setup.mjs.map +0 -1
  437. package/dist/instrumentation/tracing.cjs.map +0 -1
  438. package/dist/instrumentation/tracing.d.cts.map +0 -1
  439. package/dist/instrumentation/tracing.d.mts.map +0 -1
  440. package/dist/instrumentation/tracing.mjs.map +0 -1
  441. package/dist/instrumentation/trust.cjs +0 -107
  442. package/dist/instrumentation/trust.cjs.map +0 -1
  443. package/dist/instrumentation/trust.d.cts +0 -57
  444. package/dist/instrumentation/trust.d.cts.map +0 -1
  445. package/dist/instrumentation/trust.d.mts +0 -57
  446. package/dist/instrumentation/trust.d.mts.map +0 -1
  447. package/dist/instrumentation/trust.mjs +0 -104
  448. package/dist/instrumentation/trust.mjs.map +0 -1
  449. package/dist/metrics/MetricsAggregator.cjs.map +0 -1
  450. package/dist/metrics/MetricsAggregator.mjs.map +0 -1
  451. package/dist/metrics/storage/InMemoryMetricsStorage.cjs.map +0 -1
  452. package/dist/metrics/storage/InMemoryMetricsStorage.d.cts.map +0 -1
  453. package/dist/metrics/storage/InMemoryMetricsStorage.d.mts.map +0 -1
  454. package/dist/metrics/storage/InMemoryMetricsStorage.mjs.map +0 -1
  455. package/dist/metrics/storage/MetricsStorage.d.cts.map +0 -1
  456. package/dist/metrics/storage/MetricsStorage.d.mts.map +0 -1
  457. package/dist/metrics/storage/types.cjs.map +0 -1
  458. package/dist/metrics/storage/types.d.cts.map +0 -1
  459. package/dist/metrics/storage/types.d.mts.map +0 -1
  460. package/dist/metrics/storage/types.mjs.map +0 -1
  461. package/dist/otlp/receiver.cjs.map +0 -1
  462. package/dist/otlp/receiver.d.cts.map +0 -1
  463. package/dist/otlp/receiver.d.mts.map +0 -1
  464. package/dist/otlp/receiver.mjs.map +0 -1
  465. package/dist/otlp/transformer.cjs.map +0 -1
  466. package/dist/otlp/transformer.mjs.map +0 -1
  467. package/dist/otlp/types.cjs.map +0 -1
  468. package/dist/otlp/types.mjs.map +0 -1
  469. package/dist/redact.cjs.map +0 -1
  470. package/dist/redact.mjs.map +0 -1
  471. package/dist/storage/memory.cjs.map +0 -1
  472. package/dist/storage/memory.d.cts.map +0 -1
  473. package/dist/storage/memory.d.mts.map +0 -1
  474. package/dist/storage/memory.mjs.map +0 -1
  475. package/dist/transformer-BtqjAs0b.d.cts.map +0 -1
  476. package/dist/transformer-DI6t8-YA.d.mts.map +0 -1
  477. package/dist/types-BVujq4zd.d.cts.map +0 -1
  478. package/dist/types-BVujq4zd.d.mts.map +0 -1
  479. package/dist/types-DVETVdpa.d.cts.map +0 -1
  480. package/dist/types-DVETVdpa.d.mts.map +0 -1
@@ -1,6 +1,7 @@
1
- import { flushTelemetry } from "../instrumentation/core.mjs";
2
- import { createTelescopeHandler, telescopeMiddleware } from "./middy.mjs";
1
+ import { flushTelemetry } from "../core-D6hJ6exL.mjs";
2
+ import { createTelescopeHandler, telescopeMiddleware } from "../middy-BTR3cyvk.mjs";
3
3
  import { nanoid } from "nanoid";
4
+
4
5
  //#region src/adapters/lambda.ts
5
6
  /**
6
7
  * Detect Lambda resource attributes from environment
@@ -234,7 +235,7 @@ function parseBody(body, isBase64Encoded) {
234
235
  return body;
235
236
  }
236
237
  }
238
+
237
239
  //#endregion
238
240
  export { LambdaAdapter, createTelescopeHandler, detectLambdaResources, extractLambdaInvocationContext, telescopeMiddleware, wrapLambdaHandler };
239
-
240
241
  //# sourceMappingURL=lambda.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"lambda.mjs","names":[],"sources":["../../src/adapters/lambda.ts"],"sourcesContent":["import type { Context as LambdaContext } from 'aws-lambda';\nimport { nanoid } from 'nanoid';\nimport { flushTelemetry } from '../instrumentation/core';\nimport type { Telescope } from '../Telescope';\nimport type {\n\tAdapterRequestContext,\n\tAdapterResponseContext,\n\tLambdaAdapterConfig,\n\tTelescopeAdapter,\n} from './types';\n\n// Re-export Middy middleware for convenience\nexport {\n\tcreateTelescopeHandler,\n\ttype TelescopeMiddlewareOptions,\n\ttelescopeMiddleware,\n} from './middy';\n\n/**\n * Lambda resource attributes detected from environment\n */\nexport interface LambdaResourceAttributes {\n\t'cloud.provider': 'aws';\n\t'cloud.region': string;\n\t'faas.name': string;\n\t'faas.version': string;\n\t'faas.instance': string;\n\t'faas.max_memory': number;\n\t[key: string]: string | number;\n}\n\n/**\n * Detect Lambda resource attributes from environment\n */\nexport function detectLambdaResources(): LambdaResourceAttributes {\n\treturn {\n\t\t'cloud.provider': 'aws',\n\t\t'cloud.region': process.env.AWS_REGION || 'unknown',\n\t\t'faas.name': process.env.AWS_LAMBDA_FUNCTION_NAME || 'unknown',\n\t\t'faas.version': process.env.AWS_LAMBDA_FUNCTION_VERSION || 'unknown',\n\t\t'faas.instance': process.env.AWS_LAMBDA_LOG_STREAM_NAME || 'unknown',\n\t\t'faas.max_memory': parseInt(\n\t\t\tprocess.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE || '128',\n\t\t\t10,\n\t\t),\n\t};\n}\n\n/**\n * Extract invocation context from Lambda event\n */\nexport function extractLambdaInvocationContext(\n\t_event: unknown,\n\tcontext: LambdaContext,\n): {\n\trequestId: string;\n\tcoldStart: boolean;\n\tremainingTimeMs: number;\n\tmemoryLimitMB: number;\n\tfunctionName: string;\n\tfunctionVersion: string;\n} {\n\treturn {\n\t\trequestId: context.awsRequestId,\n\t\tcoldStart: !globalLambdaState.initialized,\n\t\tremainingTimeMs: context.getRemainingTimeInMillis(),\n\t\tmemoryLimitMB: parseInt(String(context.memoryLimitInMB), 10),\n\t\tfunctionName: context.functionName,\n\t\tfunctionVersion: context.functionVersion,\n\t};\n}\n\n/**\n * Global state to track Lambda cold starts\n */\nconst globalLambdaState = {\n\tinitialized: false,\n};\n\n/**\n * Default Lambda adapter configuration\n */\nconst DEFAULT_LAMBDA_CONFIG: LambdaAdapterConfig = {\n\tenvironment: 'lambda',\n\tspanProcessor: {\n\t\tstrategy: 'simple', // Always use simple for Lambda\n\t},\n\tautoFlush: true,\n\tdetectResource: true,\n};\n\n/**\n * Lambda adapter for Telescope.\n * Provides Lambda-specific request/response handling with auto-flush.\n */\nexport class LambdaAdapter implements TelescopeAdapter<LambdaAdapterConfig> {\n\treadonly config: LambdaAdapterConfig;\n\treadonly telescope: Telescope;\n\tprivate resourceAttributes: LambdaResourceAttributes | null = null;\n\n\tconstructor(telescope: Telescope, config: Partial<LambdaAdapterConfig> = {}) {\n\t\tthis.telescope = telescope;\n\t\tthis.config = { ...DEFAULT_LAMBDA_CONFIG, ...config };\n\t}\n\n\tasync onSetup(): Promise<void> {\n\t\tif (this.config.detectResource) {\n\t\t\tthis.resourceAttributes = detectLambdaResources();\n\t\t}\n\t\tglobalLambdaState.initialized = true;\n\t}\n\n\tasync onDestroy(): Promise<void> {\n\t\tawait flushTelemetry();\n\t}\n\n\t/**\n\t * Extract request context from API Gateway event\n\t */\n\textractRequestContext(event: unknown): AdapterRequestContext {\n\t\t// Handle API Gateway v1 (REST API)\n\t\tif (isApiGatewayV1Event(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: event.requestContext?.requestId || nanoid(),\n\t\t\t\tmethod: event.httpMethod || 'UNKNOWN',\n\t\t\t\tpath: event.path || '/',\n\t\t\t\turl: event.path || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip:\n\t\t\t\t\tevent.requestContext?.identity?.sourceIp ||\n\t\t\t\t\tevent.headers?.['X-Forwarded-For']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Handle API Gateway v2 (HTTP API)\n\t\tif (isApiGatewayV2Event(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: event.requestContext?.requestId || nanoid(),\n\t\t\t\tmethod: event.requestContext?.http?.method || 'UNKNOWN',\n\t\t\t\tpath: event.rawPath || '/',\n\t\t\t\turl: event.rawPath || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip:\n\t\t\t\t\tevent.requestContext?.http?.sourceIp ||\n\t\t\t\t\tevent.headers?.['x-forwarded-for']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Handle ALB event\n\t\tif (isAlbEvent(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: nanoid(),\n\t\t\t\tmethod: event.httpMethod || 'UNKNOWN',\n\t\t\t\tpath: event.path || '/',\n\t\t\t\turl: event.path || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip: event.headers?.['x-forwarded-for']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Generic Lambda invocation (not HTTP)\n\t\treturn {\n\t\t\tid: nanoid(),\n\t\t\tmethod: 'INVOKE',\n\t\t\tpath: '/',\n\t\t\turl: '/',\n\t\t\theaders: {},\n\t\t\tquery: {},\n\t\t\tbody: event,\n\t\t\tstartTime: Date.now(),\n\t\t};\n\t}\n\n\t/**\n\t * Extract response context from Lambda response\n\t */\n\textractResponseContext(\n\t\tresponse: unknown,\n\t\tstartTime: number,\n\t): AdapterResponseContext {\n\t\tconst duration = Date.now() - startTime;\n\n\t\t// API Gateway response format\n\t\tif (isApiGatewayResponse(response)) {\n\t\t\tconst headers = normalizeHeaders(response.headers || {});\n\t\t\t// Prefer Content-Length header, fallback to body size\n\t\t\tconst responseSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: typeof response.body === 'string'\n\t\t\t\t\t? Buffer.byteLength(response.body, 'utf8')\n\t\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tstatus: response.statusCode || 200,\n\t\t\t\theaders,\n\t\t\t\tbody: response.body,\n\t\t\t\tduration,\n\t\t\t\tresponseSize,\n\t\t\t};\n\t\t}\n\n\t\t// Generic response\n\t\treturn {\n\t\t\tstatus: 200,\n\t\t\theaders: {},\n\t\t\tbody: response,\n\t\t\tduration,\n\t\t};\n\t}\n\n\t/**\n\t * Flush telemetry data before Lambda context freezes\n\t */\n\tasync flush(): Promise<void> {\n\t\tawait flushTelemetry();\n\t}\n\n\t/**\n\t * Get resource attributes for the Lambda function\n\t */\n\tgetResourceAttributes(): LambdaResourceAttributes | null {\n\t\treturn this.resourceAttributes;\n\t}\n}\n\n/**\n * Wrap a Lambda handler to automatically record requests and flush telemetry.\n *\n * @example\n * ```typescript\n * import { wrapLambdaHandler } from '@geekmidas/telescope/adapters/lambda';\n *\n * const telescope = new Telescope({ storage: new InMemoryStorage() });\n *\n * export const handler = wrapLambdaHandler(telescope, async (event, context) => {\n * // Your Lambda logic here\n * return { statusCode: 200, body: JSON.stringify({ success: true }) };\n * });\n * ```\n */\nexport function wrapLambdaHandler<TEvent, TResult>(\n\ttelescope: Telescope,\n\thandler: (event: TEvent, context: LambdaContext) => Promise<TResult>,\n\toptions: Partial<LambdaAdapterConfig> = {},\n): (event: TEvent, context: LambdaContext) => Promise<TResult> {\n\tconst adapter = new LambdaAdapter(telescope, options);\n\n\treturn async (event: TEvent, context: LambdaContext): Promise<TResult> => {\n\t\tconst requestContext = adapter.extractRequestContext(event);\n\n\t\ttry {\n\t\t\tconst result = await handler(event, context);\n\n\t\t\t// Record the request\n\t\t\tconst responseContext = adapter.extractResponseContext(\n\t\t\t\tresult,\n\t\t\t\trequestContext.startTime,\n\t\t\t);\n\n\t\t\tawait telescope.recordRequest({\n\t\t\t\tmethod: requestContext.method,\n\t\t\t\tpath: requestContext.path,\n\t\t\t\turl: requestContext.url,\n\t\t\t\theaders: requestContext.headers,\n\t\t\t\tquery: requestContext.query,\n\t\t\t\tbody: requestContext.body,\n\t\t\t\tip: requestContext.ip,\n\t\t\t\tstatus: responseContext.status,\n\t\t\t\tresponseHeaders: responseContext.headers,\n\t\t\t\tresponseBody: responseContext.body,\n\t\t\t\tduration: responseContext.duration,\n\t\t\t\trequestSize: requestContext.requestSize,\n\t\t\t\tresponseSize: responseContext.responseSize,\n\t\t\t});\n\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\t// Record the exception\n\t\t\tif (error instanceof Error) {\n\t\t\t\tawait telescope.exception(error, requestContext.id);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\t// Always flush before Lambda freezes\n\t\t\tif (options.autoFlush !== false) {\n\t\t\t\tawait adapter.flush();\n\t\t\t}\n\t\t}\n\t};\n}\n\n// ============================================\n// Type Guards and Helpers\n// ============================================\n\ninterface ApiGatewayV1Event {\n\thttpMethod?: string;\n\tpath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n\trequestContext?: {\n\t\trequestId?: string;\n\t\tidentity?: {\n\t\t\tsourceIp?: string;\n\t\t};\n\t};\n}\n\ninterface ApiGatewayV2Event {\n\trawPath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n\trequestContext?: {\n\t\trequestId?: string;\n\t\thttp?: {\n\t\t\tmethod?: string;\n\t\t\tsourceIp?: string;\n\t\t};\n\t};\n}\n\ninterface AlbEvent {\n\thttpMethod?: string;\n\tpath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n}\n\ninterface ApiGatewayResponse {\n\tstatusCode?: number;\n\theaders?: Record<string, string | undefined>;\n\tbody?: unknown;\n}\n\nfunction isApiGatewayV1Event(event: unknown): event is ApiGatewayV1Event {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'httpMethod' in event &&\n\t\t'path' in event\n\t);\n}\n\nfunction isApiGatewayV2Event(event: unknown): event is ApiGatewayV2Event {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'rawPath' in event &&\n\t\t'requestContext' in event &&\n\t\ttypeof (event as ApiGatewayV2Event).requestContext === 'object' &&\n\t\t'http' in ((event as ApiGatewayV2Event).requestContext || {})\n\t);\n}\n\nfunction isAlbEvent(event: unknown): event is AlbEvent {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'httpMethod' in event &&\n\t\t!('requestContext' in event)\n\t);\n}\n\nfunction isApiGatewayResponse(\n\tresponse: unknown,\n): response is ApiGatewayResponse {\n\treturn (\n\t\ttypeof response === 'object' &&\n\t\tresponse !== null &&\n\t\t'statusCode' in response\n\t);\n}\n\nfunction normalizeHeaders(\n\theaders: Record<string, string | undefined>,\n): Record<string, string> {\n\tconst normalized: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (value !== undefined) {\n\t\t\tnormalized[key.toLowerCase()] = value;\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction parseBody(\n\tbody: string | null | undefined,\n\tisBase64Encoded?: boolean,\n): unknown {\n\tif (!body) return undefined;\n\n\ttry {\n\t\tconst decoded = isBase64Encoded\n\t\t\t? Buffer.from(body, 'base64').toString('utf-8')\n\t\t\t: body;\n\n\t\t// Try to parse as JSON\n\t\treturn JSON.parse(decoded);\n\t} catch {\n\t\t// Return raw string if not JSON\n\t\treturn body;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"lambda.mjs","names":["_event: unknown","context: LambdaContext","DEFAULT_LAMBDA_CONFIG: LambdaAdapterConfig","telescope: Telescope","config: Partial<LambdaAdapterConfig>","event: unknown","response: unknown","startTime: number","handler: (event: TEvent, context: LambdaContext) => Promise<TResult>","options: Partial<LambdaAdapterConfig>","event: TEvent","headers: Record<string, string | undefined>","normalized: Record<string, string>","body: string | null | undefined","isBase64Encoded?: boolean"],"sources":["../../src/adapters/lambda.ts"],"sourcesContent":["import type { Context as LambdaContext } from 'aws-lambda';\nimport { nanoid } from 'nanoid';\nimport { flushTelemetry } from '../instrumentation/core';\nimport type { Telescope } from '../Telescope';\nimport type {\n\tAdapterRequestContext,\n\tAdapterResponseContext,\n\tLambdaAdapterConfig,\n\tTelescopeAdapter,\n} from './types';\n\n// Re-export Middy middleware for convenience\nexport {\n\tcreateTelescopeHandler,\n\ttype TelescopeMiddlewareOptions,\n\ttelescopeMiddleware,\n} from './middy';\n\n/**\n * Lambda resource attributes detected from environment\n */\nexport interface LambdaResourceAttributes {\n\t'cloud.provider': 'aws';\n\t'cloud.region': string;\n\t'faas.name': string;\n\t'faas.version': string;\n\t'faas.instance': string;\n\t'faas.max_memory': number;\n\t[key: string]: string | number;\n}\n\n/**\n * Detect Lambda resource attributes from environment\n */\nexport function detectLambdaResources(): LambdaResourceAttributes {\n\treturn {\n\t\t'cloud.provider': 'aws',\n\t\t'cloud.region': process.env.AWS_REGION || 'unknown',\n\t\t'faas.name': process.env.AWS_LAMBDA_FUNCTION_NAME || 'unknown',\n\t\t'faas.version': process.env.AWS_LAMBDA_FUNCTION_VERSION || 'unknown',\n\t\t'faas.instance': process.env.AWS_LAMBDA_LOG_STREAM_NAME || 'unknown',\n\t\t'faas.max_memory': parseInt(\n\t\t\tprocess.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE || '128',\n\t\t\t10,\n\t\t),\n\t};\n}\n\n/**\n * Extract invocation context from Lambda event\n */\nexport function extractLambdaInvocationContext(\n\t_event: unknown,\n\tcontext: LambdaContext,\n): {\n\trequestId: string;\n\tcoldStart: boolean;\n\tremainingTimeMs: number;\n\tmemoryLimitMB: number;\n\tfunctionName: string;\n\tfunctionVersion: string;\n} {\n\treturn {\n\t\trequestId: context.awsRequestId,\n\t\tcoldStart: !globalLambdaState.initialized,\n\t\tremainingTimeMs: context.getRemainingTimeInMillis(),\n\t\tmemoryLimitMB: parseInt(String(context.memoryLimitInMB), 10),\n\t\tfunctionName: context.functionName,\n\t\tfunctionVersion: context.functionVersion,\n\t};\n}\n\n/**\n * Global state to track Lambda cold starts\n */\nconst globalLambdaState = {\n\tinitialized: false,\n};\n\n/**\n * Default Lambda adapter configuration\n */\nconst DEFAULT_LAMBDA_CONFIG: LambdaAdapterConfig = {\n\tenvironment: 'lambda',\n\tspanProcessor: {\n\t\tstrategy: 'simple', // Always use simple for Lambda\n\t},\n\tautoFlush: true,\n\tdetectResource: true,\n};\n\n/**\n * Lambda adapter for Telescope.\n * Provides Lambda-specific request/response handling with auto-flush.\n */\nexport class LambdaAdapter implements TelescopeAdapter<LambdaAdapterConfig> {\n\treadonly config: LambdaAdapterConfig;\n\treadonly telescope: Telescope;\n\tprivate resourceAttributes: LambdaResourceAttributes | null = null;\n\n\tconstructor(telescope: Telescope, config: Partial<LambdaAdapterConfig> = {}) {\n\t\tthis.telescope = telescope;\n\t\tthis.config = { ...DEFAULT_LAMBDA_CONFIG, ...config };\n\t}\n\n\tasync onSetup(): Promise<void> {\n\t\tif (this.config.detectResource) {\n\t\t\tthis.resourceAttributes = detectLambdaResources();\n\t\t}\n\t\tglobalLambdaState.initialized = true;\n\t}\n\n\tasync onDestroy(): Promise<void> {\n\t\tawait flushTelemetry();\n\t}\n\n\t/**\n\t * Extract request context from API Gateway event\n\t */\n\textractRequestContext(event: unknown): AdapterRequestContext {\n\t\t// Handle API Gateway v1 (REST API)\n\t\tif (isApiGatewayV1Event(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: event.requestContext?.requestId || nanoid(),\n\t\t\t\tmethod: event.httpMethod || 'UNKNOWN',\n\t\t\t\tpath: event.path || '/',\n\t\t\t\turl: event.path || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip:\n\t\t\t\t\tevent.requestContext?.identity?.sourceIp ||\n\t\t\t\t\tevent.headers?.['X-Forwarded-For']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Handle API Gateway v2 (HTTP API)\n\t\tif (isApiGatewayV2Event(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: event.requestContext?.requestId || nanoid(),\n\t\t\t\tmethod: event.requestContext?.http?.method || 'UNKNOWN',\n\t\t\t\tpath: event.rawPath || '/',\n\t\t\t\turl: event.rawPath || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip:\n\t\t\t\t\tevent.requestContext?.http?.sourceIp ||\n\t\t\t\t\tevent.headers?.['x-forwarded-for']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Handle ALB event\n\t\tif (isAlbEvent(event)) {\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst requestSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tid: nanoid(),\n\t\t\t\tmethod: event.httpMethod || 'UNKNOWN',\n\t\t\t\tpath: event.path || '/',\n\t\t\t\turl: event.path || '/',\n\t\t\t\theaders,\n\t\t\t\tquery: event.queryStringParameters || {},\n\t\t\t\tbody: parseBody(event.body, event.isBase64Encoded),\n\t\t\t\tip: event.headers?.['x-forwarded-for']?.split(',')[0],\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\trequestSize,\n\t\t\t};\n\t\t}\n\n\t\t// Generic Lambda invocation (not HTTP)\n\t\treturn {\n\t\t\tid: nanoid(),\n\t\t\tmethod: 'INVOKE',\n\t\t\tpath: '/',\n\t\t\turl: '/',\n\t\t\theaders: {},\n\t\t\tquery: {},\n\t\t\tbody: event,\n\t\t\tstartTime: Date.now(),\n\t\t};\n\t}\n\n\t/**\n\t * Extract response context from Lambda response\n\t */\n\textractResponseContext(\n\t\tresponse: unknown,\n\t\tstartTime: number,\n\t): AdapterResponseContext {\n\t\tconst duration = Date.now() - startTime;\n\n\t\t// API Gateway response format\n\t\tif (isApiGatewayResponse(response)) {\n\t\t\tconst headers = normalizeHeaders(response.headers || {});\n\t\t\t// Prefer Content-Length header, fallback to body size\n\t\t\tconst responseSize = headers['content-length']\n\t\t\t\t? parseInt(headers['content-length'], 10)\n\t\t\t\t: typeof response.body === 'string'\n\t\t\t\t\t? Buffer.byteLength(response.body, 'utf8')\n\t\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tstatus: response.statusCode || 200,\n\t\t\t\theaders,\n\t\t\t\tbody: response.body,\n\t\t\t\tduration,\n\t\t\t\tresponseSize,\n\t\t\t};\n\t\t}\n\n\t\t// Generic response\n\t\treturn {\n\t\t\tstatus: 200,\n\t\t\theaders: {},\n\t\t\tbody: response,\n\t\t\tduration,\n\t\t};\n\t}\n\n\t/**\n\t * Flush telemetry data before Lambda context freezes\n\t */\n\tasync flush(): Promise<void> {\n\t\tawait flushTelemetry();\n\t}\n\n\t/**\n\t * Get resource attributes for the Lambda function\n\t */\n\tgetResourceAttributes(): LambdaResourceAttributes | null {\n\t\treturn this.resourceAttributes;\n\t}\n}\n\n/**\n * Wrap a Lambda handler to automatically record requests and flush telemetry.\n *\n * @example\n * ```typescript\n * import { wrapLambdaHandler } from '@geekmidas/telescope/adapters/lambda';\n *\n * const telescope = new Telescope({ storage: new InMemoryStorage() });\n *\n * export const handler = wrapLambdaHandler(telescope, async (event, context) => {\n * // Your Lambda logic here\n * return { statusCode: 200, body: JSON.stringify({ success: true }) };\n * });\n * ```\n */\nexport function wrapLambdaHandler<TEvent, TResult>(\n\ttelescope: Telescope,\n\thandler: (event: TEvent, context: LambdaContext) => Promise<TResult>,\n\toptions: Partial<LambdaAdapterConfig> = {},\n): (event: TEvent, context: LambdaContext) => Promise<TResult> {\n\tconst adapter = new LambdaAdapter(telescope, options);\n\n\treturn async (event: TEvent, context: LambdaContext): Promise<TResult> => {\n\t\tconst requestContext = adapter.extractRequestContext(event);\n\n\t\ttry {\n\t\t\tconst result = await handler(event, context);\n\n\t\t\t// Record the request\n\t\t\tconst responseContext = adapter.extractResponseContext(\n\t\t\t\tresult,\n\t\t\t\trequestContext.startTime,\n\t\t\t);\n\n\t\t\tawait telescope.recordRequest({\n\t\t\t\tmethod: requestContext.method,\n\t\t\t\tpath: requestContext.path,\n\t\t\t\turl: requestContext.url,\n\t\t\t\theaders: requestContext.headers,\n\t\t\t\tquery: requestContext.query,\n\t\t\t\tbody: requestContext.body,\n\t\t\t\tip: requestContext.ip,\n\t\t\t\tstatus: responseContext.status,\n\t\t\t\tresponseHeaders: responseContext.headers,\n\t\t\t\tresponseBody: responseContext.body,\n\t\t\t\tduration: responseContext.duration,\n\t\t\t\trequestSize: requestContext.requestSize,\n\t\t\t\tresponseSize: responseContext.responseSize,\n\t\t\t});\n\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\t// Record the exception\n\t\t\tif (error instanceof Error) {\n\t\t\t\tawait telescope.exception(error, requestContext.id);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\t// Always flush before Lambda freezes\n\t\t\tif (options.autoFlush !== false) {\n\t\t\t\tawait adapter.flush();\n\t\t\t}\n\t\t}\n\t};\n}\n\n// ============================================\n// Type Guards and Helpers\n// ============================================\n\ninterface ApiGatewayV1Event {\n\thttpMethod?: string;\n\tpath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n\trequestContext?: {\n\t\trequestId?: string;\n\t\tidentity?: {\n\t\t\tsourceIp?: string;\n\t\t};\n\t};\n}\n\ninterface ApiGatewayV2Event {\n\trawPath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n\trequestContext?: {\n\t\trequestId?: string;\n\t\thttp?: {\n\t\t\tmethod?: string;\n\t\t\tsourceIp?: string;\n\t\t};\n\t};\n}\n\ninterface AlbEvent {\n\thttpMethod?: string;\n\tpath?: string;\n\theaders?: Record<string, string | undefined>;\n\tqueryStringParameters?: Record<string, string>;\n\tbody?: string | null;\n\tisBase64Encoded?: boolean;\n}\n\ninterface ApiGatewayResponse {\n\tstatusCode?: number;\n\theaders?: Record<string, string | undefined>;\n\tbody?: unknown;\n}\n\nfunction isApiGatewayV1Event(event: unknown): event is ApiGatewayV1Event {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'httpMethod' in event &&\n\t\t'path' in event\n\t);\n}\n\nfunction isApiGatewayV2Event(event: unknown): event is ApiGatewayV2Event {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'rawPath' in event &&\n\t\t'requestContext' in event &&\n\t\ttypeof (event as ApiGatewayV2Event).requestContext === 'object' &&\n\t\t'http' in ((event as ApiGatewayV2Event).requestContext || {})\n\t);\n}\n\nfunction isAlbEvent(event: unknown): event is AlbEvent {\n\treturn (\n\t\ttypeof event === 'object' &&\n\t\tevent !== null &&\n\t\t'httpMethod' in event &&\n\t\t!('requestContext' in event)\n\t);\n}\n\nfunction isApiGatewayResponse(\n\tresponse: unknown,\n): response is ApiGatewayResponse {\n\treturn (\n\t\ttypeof response === 'object' &&\n\t\tresponse !== null &&\n\t\t'statusCode' in response\n\t);\n}\n\nfunction normalizeHeaders(\n\theaders: Record<string, string | undefined>,\n): Record<string, string> {\n\tconst normalized: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (value !== undefined) {\n\t\t\tnormalized[key.toLowerCase()] = value;\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction parseBody(\n\tbody: string | null | undefined,\n\tisBase64Encoded?: boolean,\n): unknown {\n\tif (!body) return undefined;\n\n\ttry {\n\t\tconst decoded = isBase64Encoded\n\t\t\t? Buffer.from(body, 'base64').toString('utf-8')\n\t\t\t: body;\n\n\t\t// Try to parse as JSON\n\t\treturn JSON.parse(decoded);\n\t} catch {\n\t\t// Return raw string if not JSON\n\t\treturn body;\n\t}\n}\n"],"mappings":"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"}
@@ -1,237 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_instrumentation_core = require("../instrumentation/core.cjs");
3
- //#region src/adapters/middy.ts
4
- let processHooksRegistered = false;
5
- /**
6
- * Register process-level hooks for telemetry flush.
7
- * Called once per Lambda cold start.
8
- */
9
- function registerProcessHooks() {
10
- if (processHooksRegistered) return;
11
- processHooksRegistered = true;
12
- process.on("SIGTERM", async () => {
13
- await require_instrumentation_core.flushTelemetry(5e3).catch(() => {});
14
- });
15
- }
16
- /**
17
- * Extract request data from API Gateway event (v1 or v2)
18
- */
19
- function extractRequestData(event) {
20
- const headers = {};
21
- if (event.headers) {
22
- for (const [key, value] of Object.entries(event.headers)) if (value) headers[key.toLowerCase()] = value;
23
- }
24
- const contentLength = headers["content-length"];
25
- const requestSize = contentLength ? parseInt(contentLength, 10) : void 0;
26
- if ("rawPath" in event && event.requestContext?.http) {
27
- const v2Event = event;
28
- const query = {};
29
- if (v2Event.queryStringParameters) {
30
- for (const [key, value] of Object.entries(v2Event.queryStringParameters)) if (value !== void 0) query[key] = value;
31
- }
32
- return {
33
- method: v2Event.requestContext.http.method,
34
- path: v2Event.rawPath,
35
- url: v2Event.rawPath + (v2Event.rawQueryString ? `?${v2Event.rawQueryString}` : ""),
36
- headers,
37
- query,
38
- body: parseBody(v2Event.body, v2Event.isBase64Encoded),
39
- ip: v2Event.requestContext.http.sourceIp,
40
- requestId: v2Event.requestContext.requestId,
41
- requestSize
42
- };
43
- }
44
- const v1Event = event;
45
- const queryString = v1Event.queryStringParameters ? new URLSearchParams(v1Event.queryStringParameters).toString() : "";
46
- return {
47
- method: v1Event.httpMethod,
48
- path: v1Event.path,
49
- url: v1Event.path + (queryString ? `?${queryString}` : ""),
50
- headers,
51
- query: v1Event.queryStringParameters || {},
52
- body: parseBody(v1Event.body, v1Event.isBase64Encoded),
53
- ip: v1Event.requestContext?.identity?.sourceIp,
54
- requestId: v1Event.requestContext?.requestId,
55
- requestSize
56
- };
57
- }
58
- /**
59
- * Parse request body
60
- */
61
- function parseBody(body, isBase64Encoded) {
62
- if (!body) return void 0;
63
- try {
64
- const decoded = isBase64Encoded ? Buffer.from(body, "base64").toString("utf-8") : body;
65
- return JSON.parse(decoded);
66
- } catch {
67
- return body;
68
- }
69
- }
70
- /**
71
- * Extract response data from Lambda response
72
- */
73
- function extractResponseData(response) {
74
- if (response && typeof response === "object" && "statusCode" in response) {
75
- const res = response;
76
- const headers = res.headers || {};
77
- const contentLengthKey = Object.keys(headers).find((k) => k.toLowerCase() === "content-length");
78
- const contentLengthValue = contentLengthKey ? headers[contentLengthKey] : void 0;
79
- const responseSize = contentLengthValue ? parseInt(contentLengthValue, 10) : res.body ? Buffer.byteLength(res.body, "utf8") : void 0;
80
- return {
81
- status: res.statusCode || 200,
82
- headers,
83
- body: res.body ? tryParseJson(res.body) : void 0,
84
- responseSize
85
- };
86
- }
87
- return {
88
- status: 200,
89
- headers: {},
90
- body: response
91
- };
92
- }
93
- function tryParseJson(str) {
94
- try {
95
- return JSON.parse(str);
96
- } catch {
97
- return str;
98
- }
99
- }
100
- /**
101
- * Middy middleware that integrates Telescope with Lambda handlers.
102
- *
103
- * Features:
104
- * - Records all requests and responses to Telescope
105
- * - Captures exceptions automatically
106
- * - Flushes telemetry before Lambda freezes
107
- * - Uses Lambda context for smart flush timing
108
- *
109
- * @example
110
- * ```typescript
111
- * import middy from '@middy/core';
112
- * import { telescopeMiddleware } from '@geekmidas/telescope/lambda';
113
- *
114
- * const handler = middy(baseHandler)
115
- * .use(telescopeMiddleware(telescope));
116
- * ```
117
- */
118
- function telescopeMiddleware(telescope, options = {}) {
119
- const { flushThresholdMs = 1e3, recordBody = true, flushTimeoutMs = 5e3 } = options;
120
- registerProcessHooks();
121
- return {
122
- before: async (request) => {
123
- request.__telescopeStartTime = Date.now();
124
- request.context.callbackWaitsForEmptyEventLoop = false;
125
- },
126
- after: async (request) => {
127
- const startTime = request.__telescopeStartTime || Date.now();
128
- const duration = Date.now() - startTime;
129
- try {
130
- const reqData = extractRequestData(request.event);
131
- const resData = extractResponseData(request.response);
132
- await telescope.recordRequest({
133
- method: reqData.method,
134
- path: reqData.path,
135
- url: reqData.url,
136
- headers: reqData.headers,
137
- query: reqData.query,
138
- body: recordBody ? reqData.body : void 0,
139
- ip: reqData.ip,
140
- status: resData.status,
141
- responseHeaders: resData.headers,
142
- responseBody: recordBody ? resData.body : void 0,
143
- duration,
144
- requestSize: reqData.requestSize,
145
- responseSize: resData.responseSize
146
- });
147
- } catch {}
148
- await smartFlush(request.context, flushThresholdMs, flushTimeoutMs);
149
- },
150
- onError: async (request) => {
151
- const startTime = request.__telescopeStartTime || Date.now();
152
- const duration = Date.now() - startTime;
153
- try {
154
- if (request.error) await telescope.exception(request.error);
155
- const reqData = extractRequestData(request.event);
156
- await telescope.recordRequest({
157
- method: reqData.method,
158
- path: reqData.path,
159
- url: reqData.url,
160
- headers: reqData.headers,
161
- query: reqData.query,
162
- body: recordBody ? reqData.body : void 0,
163
- ip: reqData.ip,
164
- status: 500,
165
- responseHeaders: {},
166
- responseBody: { error: request.error?.message },
167
- duration,
168
- requestSize: reqData.requestSize
169
- });
170
- } catch {}
171
- await smartFlush(request.context, flushThresholdMs, flushTimeoutMs);
172
- }
173
- };
174
- }
175
- /**
176
- * Smart flush that respects Lambda's remaining execution time
177
- */
178
- async function smartFlush(context, thresholdMs, timeoutMs) {
179
- const remaining = context.getRemainingTimeInMillis();
180
- const effectiveTimeout = Math.min(timeoutMs, Math.max(remaining - thresholdMs, 100));
181
- if (effectiveTimeout > 0) await require_instrumentation_core.flushTelemetry(effectiveTimeout).catch(() => {});
182
- }
183
- /**
184
- * Create a wrapped Lambda handler with Telescope integration.
185
- * Alternative to using Middy middleware directly.
186
- *
187
- * @example
188
- * ```typescript
189
- * import { createTelescopeHandler } from '@geekmidas/telescope/lambda';
190
- *
191
- * export const handler = createTelescopeHandler(telescope, async (event, context) => {
192
- * return { statusCode: 200, body: 'OK' };
193
- * });
194
- * ```
195
- */
196
- function createTelescopeHandler(telescope, handler, options = {}) {
197
- const { flushThresholdMs = 1e3, recordBody = true, flushTimeoutMs = 5e3 } = options;
198
- registerProcessHooks();
199
- return async (event, context) => {
200
- const startTime = Date.now();
201
- context.callbackWaitsForEmptyEventLoop = false;
202
- try {
203
- const result = await handler(event, context);
204
- const duration = Date.now() - startTime;
205
- try {
206
- const reqData = extractRequestData(event);
207
- const resData = extractResponseData(result);
208
- await telescope.recordRequest({
209
- method: reqData.method,
210
- path: reqData.path,
211
- url: reqData.url,
212
- headers: reqData.headers,
213
- query: reqData.query,
214
- body: recordBody ? reqData.body : void 0,
215
- ip: reqData.ip,
216
- status: resData.status,
217
- responseHeaders: resData.headers,
218
- responseBody: recordBody ? resData.body : void 0,
219
- duration,
220
- requestSize: reqData.requestSize,
221
- responseSize: resData.responseSize
222
- });
223
- } catch {}
224
- await smartFlush(context, flushThresholdMs, flushTimeoutMs);
225
- return result;
226
- } catch (error) {
227
- if (error instanceof Error) await telescope.exception(error).catch(() => {});
228
- await smartFlush(context, flushThresholdMs, flushTimeoutMs);
229
- throw error;
230
- }
231
- };
232
- }
233
- //#endregion
234
- exports.createTelescopeHandler = createTelescopeHandler;
235
- exports.telescopeMiddleware = telescopeMiddleware;
1
+ require('../core-CtVHRJGv.cjs');
2
+ const require_middy = require('../middy-y5Zp27eG.cjs');
236
3
 
237
- //# sourceMappingURL=middy.cjs.map
4
+ exports.createTelescopeHandler = require_middy.createTelescopeHandler;
5
+ exports.telescopeMiddleware = require_middy.telescopeMiddleware;
@@ -1,60 +1,5 @@
1
- import { t as Telescope } from "../Telescope-DeqSHfuB.cjs";
2
- import { APIGatewayProxyEvent, APIGatewayProxyEventV2, Context } from "aws-lambda";
3
- import { MiddlewareObj } from "@middy/core";
4
- //#region src/adapters/middy.d.ts
5
- /**
6
- * Options for the Telescope Middy middleware
7
- */
8
- export interface TelescopeMiddlewareOptions {
9
- /**
10
- * Minimum remaining time (ms) before forcing a flush.
11
- * If remaining time drops below this, flush immediately.
12
- * @default 1000 (1 second)
13
- */
14
- flushThresholdMs?: number;
15
- /**
16
- * Whether to record request/response bodies
17
- * @default true
18
- */
19
- recordBody?: boolean;
20
- /**
21
- * Timeout for flush operation in ms
22
- * @default 5000
23
- */
24
- flushTimeoutMs?: number;
25
- }
26
- /**
27
- * Middy middleware that integrates Telescope with Lambda handlers.
28
- *
29
- * Features:
30
- * - Records all requests and responses to Telescope
31
- * - Captures exceptions automatically
32
- * - Flushes telemetry before Lambda freezes
33
- * - Uses Lambda context for smart flush timing
34
- *
35
- * @example
36
- * ```typescript
37
- * import middy from '@middy/core';
38
- * import { telescopeMiddleware } from '@geekmidas/telescope/lambda';
39
- *
40
- * const handler = middy(baseHandler)
41
- * .use(telescopeMiddleware(telescope));
42
- * ```
43
- */
44
- export declare function telescopeMiddleware(telescope: Telescope, options?: TelescopeMiddlewareOptions): MiddlewareObj<APIGatewayProxyEvent | APIGatewayProxyEventV2, any, Error, Context>;
45
- /**
46
- * Create a wrapped Lambda handler with Telescope integration.
47
- * Alternative to using Middy middleware directly.
48
- *
49
- * @example
50
- * ```typescript
51
- * import { createTelescopeHandler } from '@geekmidas/telescope/lambda';
52
- *
53
- * export const handler = createTelescopeHandler(telescope, async (event, context) => {
54
- * return { statusCode: 200, body: 'OK' };
55
- * });
56
- * ```
57
- */
58
- export declare function createTelescopeHandler<TEvent, TResult>(telescope: Telescope, handler: (event: TEvent, context: Context) => Promise<TResult>, options?: TelescopeMiddlewareOptions): (event: TEvent, context: Context) => Promise<TResult>;
59
- //#endregion
60
- //# sourceMappingURL=middy.d.cts.map
1
+ import "../types-l7Rlb5Mg.cjs";
2
+ import "../MetricsAggregator-4SqelGcG.cjs";
3
+ import "../Telescope-D4nmwDRA.cjs";
4
+ import { TelescopeMiddlewareOptions, createTelescopeHandler, telescopeMiddleware } from "../middy-Bq0defVg.cjs";
5
+ export { TelescopeMiddlewareOptions, createTelescopeHandler, telescopeMiddleware };
@@ -1,60 +1,5 @@
1
- import { t as Telescope } from "../Telescope-BVfDvVvY.mjs";
2
- import { APIGatewayProxyEvent, APIGatewayProxyEventV2, Context } from "aws-lambda";
3
- import { MiddlewareObj } from "@middy/core";
4
- //#region src/adapters/middy.d.ts
5
- /**
6
- * Options for the Telescope Middy middleware
7
- */
8
- export interface TelescopeMiddlewareOptions {
9
- /**
10
- * Minimum remaining time (ms) before forcing a flush.
11
- * If remaining time drops below this, flush immediately.
12
- * @default 1000 (1 second)
13
- */
14
- flushThresholdMs?: number;
15
- /**
16
- * Whether to record request/response bodies
17
- * @default true
18
- */
19
- recordBody?: boolean;
20
- /**
21
- * Timeout for flush operation in ms
22
- * @default 5000
23
- */
24
- flushTimeoutMs?: number;
25
- }
26
- /**
27
- * Middy middleware that integrates Telescope with Lambda handlers.
28
- *
29
- * Features:
30
- * - Records all requests and responses to Telescope
31
- * - Captures exceptions automatically
32
- * - Flushes telemetry before Lambda freezes
33
- * - Uses Lambda context for smart flush timing
34
- *
35
- * @example
36
- * ```typescript
37
- * import middy from '@middy/core';
38
- * import { telescopeMiddleware } from '@geekmidas/telescope/lambda';
39
- *
40
- * const handler = middy(baseHandler)
41
- * .use(telescopeMiddleware(telescope));
42
- * ```
43
- */
44
- export declare function telescopeMiddleware(telescope: Telescope, options?: TelescopeMiddlewareOptions): MiddlewareObj<APIGatewayProxyEvent | APIGatewayProxyEventV2, any, Error, Context>;
45
- /**
46
- * Create a wrapped Lambda handler with Telescope integration.
47
- * Alternative to using Middy middleware directly.
48
- *
49
- * @example
50
- * ```typescript
51
- * import { createTelescopeHandler } from '@geekmidas/telescope/lambda';
52
- *
53
- * export const handler = createTelescopeHandler(telescope, async (event, context) => {
54
- * return { statusCode: 200, body: 'OK' };
55
- * });
56
- * ```
57
- */
58
- export declare function createTelescopeHandler<TEvent, TResult>(telescope: Telescope, handler: (event: TEvent, context: Context) => Promise<TResult>, options?: TelescopeMiddlewareOptions): (event: TEvent, context: Context) => Promise<TResult>;
59
- //#endregion
60
- //# sourceMappingURL=middy.d.mts.map
1
+ import "../types-B1EIa_cQ.mjs";
2
+ import "../MetricsAggregator-DZrW8ls6.mjs";
3
+ import "../Telescope-Dl6VSfxd.mjs";
4
+ import { TelescopeMiddlewareOptions, createTelescopeHandler, telescopeMiddleware } from "../middy-B6Btl8XE.mjs";
5
+ export { TelescopeMiddlewareOptions, createTelescopeHandler, telescopeMiddleware };