@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
@@ -1 +1 @@
1
- {"version":3,"file":"kysely.cjs","names":[],"sources":["../../src/storage/kysely.ts"],"sourcesContent":["import type { Kysely } from 'kysely';\nimport type {\n\tExceptionEntry,\n\tLogEntry,\n\tQueryOptions,\n\tRequestEntry,\n\tTelescopeStats,\n\tTelescopeStorage,\n} from '../types';\n\n/**\n * Database table interface for telescope requests.\n * Use this to define your telescope_requests table in your Kysely database schema.\n */\nexport interface TelescopeRequestTable {\n\tid: string;\n\tmethod: string;\n\tpath: string;\n\turl: string;\n\theaders: unknown;\n\tbody: unknown | null;\n\tquery: unknown | null;\n\tstatus: number;\n\tresponse_headers: unknown;\n\tresponse_body: unknown | null;\n\tduration: number;\n\ttimestamp: Date;\n\tip: string | null;\n\tuser_id: string | null;\n\ttags: unknown | null;\n}\n\n/**\n * Database table interface for telescope exceptions.\n */\nexport interface TelescopeExceptionTable {\n\tid: string;\n\tname: string;\n\tmessage: string;\n\tstack: unknown;\n\tsource: unknown | null;\n\trequest_id: string | null;\n\ttimestamp: Date;\n\thandled: boolean;\n\ttags: unknown | null;\n}\n\n/**\n * Database table interface for telescope logs.\n */\nexport interface TelescopeLogTable {\n\tid: string;\n\tlevel: string;\n\tmessage: string;\n\tcontext: unknown | null;\n\trequest_id: string | null;\n\ttimestamp: Date;\n}\n\n/**\n * Combined database interface for all telescope tables.\n * Use this to extend your database schema.\n *\n * @example\n * ```typescript\n * import type { TelescopeTables } from '@geekmidas/telescope/storage/kysely';\n *\n * interface Database extends TelescopeTables {\n * users: UserTable;\n * // ... other tables\n * }\n * ```\n */\nexport interface TelescopeTables {\n\trequests: TelescopeRequestTable;\n\texceptions: TelescopeExceptionTable;\n\tlogs: TelescopeLogTable;\n}\n\n/**\n * Configuration for KyselyStorage.\n */\nexport interface KyselyStorageConfig<DB> {\n\t/** Kysely database instance */\n\tdb: Kysely<DB>;\n\t/**\n\t * The schema holding `requests`, `exceptions` and `logs`.\n\t *\n\t * Normally omitted. A telescope derived from a database gets a schema of its\n\t * own and a role whose `search_path` is pinned to it, so an unqualified name\n\t * already resolves there — which is the same rule every other tenant here\n\t * follows, and the reason a connection string never has to remember where\n\t * its tables live.\n\t *\n\t * Name one only when the connection is *not* pinned: a shared pool, a\n\t * migration run as an owner whose `search_path` finds `public` first.\n\t */\n\tschema?: string;\n}\n\n/**\n * Kysely-based storage implementation for Telescope.\n * Stores telescope data in PostgreSQL, MySQL, or SQLite using Kysely.\n *\n * @template DB - Your Kysely database schema (must include TelescopeTables)\n *\n * @example\n * ```typescript\n * import { Kysely, PostgresDialect } from 'kysely';\n * import { KyselyStorage, type TelescopeTables } from '@geekmidas/telescope/storage/kysely';\n *\n * interface Database extends TelescopeTables {\n * users: UserTable;\n * }\n *\n * const db = new Kysely<Database>({ dialect: new PostgresDialect({ pool }) });\n * const storage = new KyselyStorage({ db });\n *\n * const telescope = new Telescope({ storage });\n * ```\n */\nexport class KyselyStorage<DB> implements TelescopeStorage {\n\tprivate readonly db: Kysely<DB>;\n\n\t/**\n\t * Unqualified, and deliberately.\n\t *\n\t * These were `telescope_requests`, `telescope_exceptions` and\n\t * `telescope_logs` — a prefix, which is what you reach for when the tables\n\t * have to share a schema with an application's own. They do not: a telescope\n\t * derived from a database is a schema tenant, so the names are just the\n\t * names, and `DROP SCHEMA telescope CASCADE` is the whole cleanup.\n\t */\n\tprivate readonly requestsTable = 'requests';\n\tprivate readonly exceptionsTable = 'exceptions';\n\tprivate readonly logsTable = 'logs';\n\n\tconstructor(config: KyselyStorageConfig<DB>) {\n\t\t// `withSchema` only where the connection is not already pinned to one.\n\t\tthis.db = config.schema\n\t\t\t? (config.db.withSchema(config.schema) as Kysely<DB>)\n\t\t\t: config.db;\n\t}\n\n\t// ============================================\n\t// Requests\n\t// ============================================\n\n\tasync saveRequest(entry: RequestEntry): Promise<void> {\n\t\tconst row = this.requestToRow(entry);\n\t\tawait (this.db as any).insertInto(this.requestsTable).values(row).execute();\n\t}\n\n\tasync saveRequests(entries: RequestEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.requestToRow(e));\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.requestsTable)\n\t\t\t.values(rows)\n\t\t\t.execute();\n\t}\n\n\tasync getRequests(options?: QueryOptions): Promise<RequestEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.requestsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\t// Apply request-specific filters\n\t\tif (options?.method) {\n\t\t\tquery = query.where('method', '=', options.method);\n\t\t}\n\n\t\tif (options?.status) {\n\t\t\tconst statusFilter = options.status;\n\t\t\tif (statusFilter.endsWith('xx')) {\n\t\t\t\t// Handle status ranges like \"2xx\", \"4xx\", \"5xx\"\n\t\t\t\tconst firstChar = statusFilter[0];\n\t\t\t\tif (firstChar) {\n\t\t\t\t\tconst category = parseInt(firstChar, 10);\n\t\t\t\t\tconst minStatus = category * 100;\n\t\t\t\t\tconst maxStatus = minStatus + 99;\n\t\t\t\t\tquery = query\n\t\t\t\t\t\t.where('status', '>=', minStatus)\n\t\t\t\t\t\t.where('status', '<=', maxStatus);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Handle exact status codes\n\t\t\t\tquery = query.where('status', '=', parseInt(statusFilter, 10));\n\t\t\t}\n\t\t}\n\n\t\tquery = this.applyQueryOptions(query, options, ['path', 'url']);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeRequestTable) => this.rowToRequest(row));\n\t}\n\n\tasync getRequest(id: string): Promise<RequestEntry | null> {\n\t\tconst row = await (this.db as any)\n\t\t\t.selectFrom(this.requestsTable)\n\t\t\t.selectAll()\n\t\t\t.where('id', '=', id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.rowToRequest(row) : null;\n\t}\n\n\t// ============================================\n\t// Exceptions\n\t// ============================================\n\n\tasync saveException(entry: ExceptionEntry): Promise<void> {\n\t\tconst row = this.exceptionToRow(entry);\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.exceptionsTable)\n\t\t\t.values(row)\n\t\t\t.execute();\n\t}\n\n\tasync saveExceptions(entries: ExceptionEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.exceptionToRow(e));\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.exceptionsTable)\n\t\t\t.values(rows)\n\t\t\t.execute();\n\t}\n\n\tasync getExceptions(options?: QueryOptions): Promise<ExceptionEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\tquery = this.applyQueryOptions(query, options, ['name', 'message']);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeExceptionTable) => this.rowToException(row));\n\t}\n\n\tasync getException(id: string): Promise<ExceptionEntry | null> {\n\t\tconst row = await (this.db as any)\n\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t.selectAll()\n\t\t\t.where('id', '=', id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.rowToException(row) : null;\n\t}\n\n\t// ============================================\n\t// Logs\n\t// ============================================\n\n\tasync saveLog(entry: LogEntry): Promise<void> {\n\t\tconst row = this.logToRow(entry);\n\t\tawait (this.db as any).insertInto(this.logsTable).values(row).execute();\n\t}\n\n\tasync saveLogs(entries: LogEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.logToRow(e));\n\t\tawait (this.db as any).insertInto(this.logsTable).values(rows).execute();\n\t}\n\n\tasync getLogs(options?: QueryOptions): Promise<LogEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.logsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\t// Apply log-specific filters\n\t\tif (options?.level) {\n\t\t\tquery = query.where('level', '=', options.level);\n\t\t}\n\n\t\tquery = this.applyQueryOptions(query, options, ['message']);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeLogTable) => this.rowToLog(row));\n\t}\n\n\t// ============================================\n\t// Cleanup\n\t// ============================================\n\n\tasync prune(olderThan: Date): Promise<number> {\n\t\tconst results = await Promise.all([\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.requestsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.exceptionsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.logsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t]);\n\n\t\treturn results.reduce(\n\t\t\t(sum, result) => sum + Number(result.numDeletedRows ?? 0),\n\t\t\t0,\n\t\t);\n\t}\n\n\t// ============================================\n\t// Stats\n\t// ============================================\n\n\tasync getStats(): Promise<TelescopeStats> {\n\t\tconst [requestsResult, exceptionsResult, logsResult] = await Promise.all([\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.requestsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.logsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t]);\n\n\t\tconst allDates = [\n\t\t\trequestsResult?.oldest,\n\t\t\trequestsResult?.newest,\n\t\t\texceptionsResult?.oldest,\n\t\t\texceptionsResult?.newest,\n\t\t\tlogsResult?.oldest,\n\t\t\tlogsResult?.newest,\n\t\t]\n\t\t\t.filter((d): d is Date => d != null)\n\t\t\t.sort((a, b) => new Date(a).getTime() - new Date(b).getTime());\n\n\t\tconst newestDate = allDates[allDates.length - 1];\n\t\treturn {\n\t\t\trequests: Number(requestsResult?.count ?? 0),\n\t\t\texceptions: Number(exceptionsResult?.count ?? 0),\n\t\t\tlogs: Number(logsResult?.count ?? 0),\n\t\t\toldestEntry: allDates[0] ? new Date(allDates[0]) : undefined,\n\t\t\tnewestEntry: newestDate ? new Date(newestDate) : undefined,\n\t\t};\n\t}\n\n\t// ============================================\n\t// Private Helpers\n\t// ============================================\n\n\tprivate applyQueryOptions(\n\t\tquery: any,\n\t\toptions: QueryOptions | undefined,\n\t\tsearchColumns: readonly string[],\n\t): any {\n\t\tif (!options) {\n\t\t\treturn query.limit(50);\n\t\t}\n\n\t\tif (options.after) {\n\t\t\tquery = query.where('timestamp', '>=', options.after);\n\t\t}\n\n\t\tif (options.before) {\n\t\t\tquery = query.where('timestamp', '<=', options.before);\n\t\t}\n\n\t\tif (options.search) {\n\t\t\t// Search in relevant text fields - using ILIKE for case-insensitive\n\t\t\t// This is a simple implementation; for production you'd want full-text search\n\t\t\t// Only the columns this table has: a column another table has and\n\t\t\t// this one lacks is a query error, not a miss.\n\t\t\tquery = query.where((eb: any) =>\n\t\t\t\teb.or(\n\t\t\t\t\tsearchColumns.map((column) =>\n\t\t\t\t\t\teb(column, 'ilike', `%${options.search}%`),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Tags filter would require array contains operation\n\t\t// which is database-specific (PostgreSQL: @>, etc.)\n\n\t\tconst limit = options.limit ?? 50;\n\t\tconst offset = options.offset ?? 0;\n\n\t\treturn query.limit(limit).offset(offset);\n\t}\n\n\tprivate requestToRow(entry: RequestEntry): TelescopeRequestTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tmethod: entry.method,\n\t\t\tpath: entry.path,\n\t\t\turl: entry.url,\n\t\t\theaders: toJson(entry.headers),\n\t\t\tbody: toJson(entry.body),\n\t\t\tquery: toJson(entry.query),\n\t\t\tstatus: entry.status,\n\t\t\tresponse_headers: toJson(entry.responseHeaders),\n\t\t\tresponse_body: toJson(entry.responseBody),\n\t\t\tduration: entry.duration,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\tip: entry.ip ?? null,\n\t\t\tuser_id: entry.userId ?? null,\n\t\t\ttags: toJson(entry.tags),\n\t\t};\n\t}\n\n\tprivate rowToRequest(row: TelescopeRequestTable): RequestEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tmethod: row.method,\n\t\t\tpath: row.path,\n\t\t\turl: row.url,\n\t\t\theaders: this.parseJson(row.headers) as Record<string, string>,\n\t\t\tbody: row.body ? this.parseJson(row.body) : undefined,\n\t\t\tquery: row.query\n\t\t\t\t? (this.parseJson(row.query) as Record<string, string>)\n\t\t\t\t: undefined,\n\t\t\tstatus: row.status,\n\t\t\tresponseHeaders: this.parseJson(row.response_headers) as Record<\n\t\t\t\tstring,\n\t\t\t\tstring\n\t\t\t>,\n\t\t\tresponseBody: row.response_body\n\t\t\t\t? this.parseJson(row.response_body)\n\t\t\t\t: undefined,\n\t\t\tduration: row.duration,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t\tip: row.ip ?? undefined,\n\t\t\tuserId: row.user_id ?? undefined,\n\t\t\ttags: row.tags ? (this.parseJson(row.tags) as string[]) : undefined,\n\t\t};\n\t}\n\n\tprivate exceptionToRow(entry: ExceptionEntry): TelescopeExceptionTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tname: entry.name,\n\t\t\tmessage: entry.message,\n\t\t\tstack: toJson(entry.stack),\n\t\t\tsource: toJson(entry.source),\n\t\t\trequest_id: entry.requestId ?? null,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\thandled: entry.handled,\n\t\t\ttags: toJson(entry.tags),\n\t\t};\n\t}\n\n\tprivate rowToException(row: TelescopeExceptionTable): ExceptionEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tname: row.name,\n\t\t\tmessage: row.message,\n\t\t\tstack: this.parseJson(row.stack) as ExceptionEntry['stack'],\n\t\t\tsource: row.source\n\t\t\t\t? (this.parseJson(row.source) as ExceptionEntry['source'])\n\t\t\t\t: undefined,\n\t\t\trequestId: row.request_id ?? undefined,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t\thandled: row.handled,\n\t\t\ttags: row.tags ? (this.parseJson(row.tags) as string[]) : undefined,\n\t\t};\n\t}\n\n\tprivate logToRow(entry: LogEntry): TelescopeLogTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tlevel: entry.level,\n\t\t\tmessage: entry.message,\n\t\t\tcontext: toJson(entry.context),\n\t\t\trequest_id: entry.requestId ?? null,\n\t\t\ttimestamp: entry.timestamp,\n\t\t};\n\t}\n\n\tprivate rowToLog(row: TelescopeLogTable): LogEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tlevel: row.level as LogEntry['level'],\n\t\t\tmessage: row.message,\n\t\t\tcontext: row.context\n\t\t\t\t? (this.parseJson(row.context) as Record<string, unknown>)\n\t\t\t\t: undefined,\n\t\t\trequestId: row.request_id ?? undefined,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t};\n\t}\n\n\t/**\n\t * Parse a JSON value that may already be parsed (e.g., from jsonb columns).\n\t */\n\tprivate parseJson(value: unknown): unknown {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === 'string') {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n}\n\n/**\n * A value for a JSON column, as JSON text.\n *\n * Handed an object, node-postgres writes JSON; handed an array it writes a\n * Postgres array literal (`{1,2}`), which a `jsonb` column rejects — so every\n * exception (its stack is an array) failed to save. Serialising here makes\n * the column's type the only thing that decides.\n */\nfunction toJson(value: unknown): string | null {\n\treturn value === undefined || value === null ? null : JSON.stringify(value);\n}\n\n/**\n * SQL migration to create telescope's tables.\n *\n * Pass a schema to have them created in one, and to have `down` drop the whole\n * schema rather than three tables. Pass nothing where the connection's\n * `search_path` already places them.\n *\n * @example\n * ```typescript\n * import { getTelescopeMigration } from '@geekmidas/telescope/storage/kysely';\n *\n * // In your migration file\n * export async function up(db: Kysely<any>): Promise<void> {\n * const migration = getTelescopeMigration();\n * await db.schema.executeRaw(migration.up).execute();\n * }\n *\n * export async function down(db: Kysely<any>): Promise<void> {\n * const migration = getTelescopeMigration();\n * await db.schema.executeRaw(migration.down).execute();\n * }\n * ```\n */\nexport function getTelescopeMigration(schema?: string): {\n\tup: string;\n\tdown: string;\n} {\n\t// Qualified only when a schema is named. Unqualified otherwise, so the\n\t// connection's `search_path` places them — the same rule the tables\n\t// themselves follow at query time.\n\tconst q = (name: string) => (schema ? `${schema}.${name}` : name);\n\tconst idx = (name: string) => (schema ? `${schema}_${name}` : name);\n\n\treturn {\n\t\tup: `${schema ? `CREATE SCHEMA IF NOT EXISTS ${schema};\\n` : ''}\n-- Telescope requests\nCREATE TABLE IF NOT EXISTS ${q('requests')} (\n id VARCHAR(21) PRIMARY KEY,\n method VARCHAR(10) NOT NULL,\n path TEXT NOT NULL,\n url TEXT NOT NULL,\n headers JSONB NOT NULL,\n body JSONB,\n query JSONB,\n status INTEGER NOT NULL,\n response_headers JSONB NOT NULL,\n response_body JSONB,\n duration DOUBLE PRECISION NOT NULL,\n timestamp TIMESTAMPTZ NOT NULL,\n ip VARCHAR(45),\n user_id VARCHAR(255),\n tags JSONB\n);\n\nCREATE INDEX IF NOT EXISTS idx_${idx('requests')}_timestamp\n ON ${q('requests')} (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${idx('requests')}_path\n ON ${q('requests')} (path);\nCREATE INDEX IF NOT EXISTS idx_${idx('requests')}_status\n ON ${q('requests')} (status);\n\n-- Telescope exceptions\nCREATE TABLE IF NOT EXISTS ${q('exceptions')} (\n id VARCHAR(21) PRIMARY KEY,\n name VARCHAR(255) NOT NULL,\n message TEXT NOT NULL,\n stack JSONB NOT NULL,\n source JSONB,\n request_id VARCHAR(21),\n timestamp TIMESTAMPTZ NOT NULL,\n handled BOOLEAN NOT NULL DEFAULT FALSE,\n tags JSONB\n);\n\nCREATE INDEX IF NOT EXISTS idx_${idx('exceptions')}_timestamp\n ON ${q('exceptions')} (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${idx('exceptions')}_request_id\n ON ${q('exceptions')} (request_id);\n\n-- Telescope logs\nCREATE TABLE IF NOT EXISTS ${q('logs')} (\n id VARCHAR(21) PRIMARY KEY,\n level VARCHAR(10) NOT NULL,\n message TEXT NOT NULL,\n context JSONB,\n request_id VARCHAR(21),\n timestamp TIMESTAMPTZ NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_${idx('logs')}_timestamp\n ON ${q('logs')} (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${idx('logs')}_level\n ON ${q('logs')} (level);\nCREATE INDEX IF NOT EXISTS idx_${idx('logs')}_request_id\n ON ${q('logs')} (request_id);\n`,\n\t\t// A schema tenant drops whole; only the unqualified case drops tables.\n\t\tdown: schema\n\t\t\t? `DROP SCHEMA IF EXISTS ${schema} CASCADE;\\n`\n\t\t\t: `\nDROP TABLE IF EXISTS logs;\nDROP TABLE IF EXISTS exceptions;\nDROP TABLE IF EXISTS requests;\n`,\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kysely.cjs","names":["config: KyselyStorageConfig<DB>","entry: RequestEntry","entries: RequestEntry[]","options?: QueryOptions","row: TelescopeRequestTable","id: string","entry: ExceptionEntry","entries: ExceptionEntry[]","row: TelescopeExceptionTable","entry: LogEntry","entries: LogEntry[]","row: TelescopeLogTable","olderThan: Date","eb: any","query: any","value: unknown"],"sources":["../../src/storage/kysely.ts"],"sourcesContent":["import type { Kysely } from 'kysely';\nimport type {\n\tExceptionEntry,\n\tLogEntry,\n\tQueryOptions,\n\tRequestEntry,\n\tTelescopeStats,\n\tTelescopeStorage,\n} from '../types';\n\n/**\n * Database table interface for telescope requests.\n * Use this to define your telescope_requests table in your Kysely database schema.\n */\nexport interface TelescopeRequestTable {\n\tid: string;\n\tmethod: string;\n\tpath: string;\n\turl: string;\n\theaders: unknown;\n\tbody: unknown | null;\n\tquery: unknown | null;\n\tstatus: number;\n\tresponse_headers: unknown;\n\tresponse_body: unknown | null;\n\tduration: number;\n\ttimestamp: Date;\n\tip: string | null;\n\tuser_id: string | null;\n\ttags: unknown | null;\n}\n\n/**\n * Database table interface for telescope exceptions.\n */\nexport interface TelescopeExceptionTable {\n\tid: string;\n\tname: string;\n\tmessage: string;\n\tstack: unknown;\n\tsource: unknown | null;\n\trequest_id: string | null;\n\ttimestamp: Date;\n\thandled: boolean;\n\ttags: unknown | null;\n}\n\n/**\n * Database table interface for telescope logs.\n */\nexport interface TelescopeLogTable {\n\tid: string;\n\tlevel: string;\n\tmessage: string;\n\tcontext: unknown | null;\n\trequest_id: string | null;\n\ttimestamp: Date;\n}\n\n/**\n * Combined database interface for all telescope tables.\n * Use this to extend your database schema.\n *\n * @example\n * ```typescript\n * import type { TelescopeTables } from '@geekmidas/telescope/storage/kysely';\n *\n * interface Database extends TelescopeTables {\n * users: UserTable;\n * // ... other tables\n * }\n * ```\n */\nexport interface TelescopeTables {\n\ttelescope_requests: TelescopeRequestTable;\n\ttelescope_exceptions: TelescopeExceptionTable;\n\ttelescope_logs: TelescopeLogTable;\n}\n\n/**\n * Configuration for KyselyStorage.\n */\nexport interface KyselyStorageConfig<DB> {\n\t/** Kysely database instance */\n\tdb: Kysely<DB>;\n\t/**\n\t * Table name prefix (default: 'telescope').\n\t * Tables will be named: {prefix}_requests, {prefix}_exceptions, {prefix}_logs\n\t */\n\ttablePrefix?: string;\n}\n\n/**\n * Kysely-based storage implementation for Telescope.\n * Stores telescope data in PostgreSQL, MySQL, or SQLite using Kysely.\n *\n * @template DB - Your Kysely database schema (must include TelescopeTables)\n *\n * @example\n * ```typescript\n * import { Kysely, PostgresDialect } from 'kysely';\n * import { KyselyStorage, type TelescopeTables } from '@geekmidas/telescope/storage/kysely';\n *\n * interface Database extends TelescopeTables {\n * users: UserTable;\n * }\n *\n * const db = new Kysely<Database>({ dialect: new PostgresDialect({ pool }) });\n * const storage = new KyselyStorage({ db });\n *\n * const telescope = new Telescope({ storage });\n * ```\n */\nexport class KyselyStorage<DB> implements TelescopeStorage {\n\tprivate readonly db: Kysely<DB>;\n\tprivate readonly requestsTable: string;\n\tprivate readonly exceptionsTable: string;\n\tprivate readonly logsTable: string;\n\n\tconstructor(config: KyselyStorageConfig<DB>) {\n\t\tthis.db = config.db;\n\t\tconst prefix = config.tablePrefix ?? 'telescope';\n\t\tthis.requestsTable = `${prefix}_requests`;\n\t\tthis.exceptionsTable = `${prefix}_exceptions`;\n\t\tthis.logsTable = `${prefix}_logs`;\n\t}\n\n\t// ============================================\n\t// Requests\n\t// ============================================\n\n\tasync saveRequest(entry: RequestEntry): Promise<void> {\n\t\tconst row = this.requestToRow(entry);\n\t\tawait (this.db as any).insertInto(this.requestsTable).values(row).execute();\n\t}\n\n\tasync saveRequests(entries: RequestEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.requestToRow(e));\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.requestsTable)\n\t\t\t.values(rows)\n\t\t\t.execute();\n\t}\n\n\tasync getRequests(options?: QueryOptions): Promise<RequestEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.requestsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\t// Apply request-specific filters\n\t\tif (options?.method) {\n\t\t\tquery = query.where('method', '=', options.method);\n\t\t}\n\n\t\tif (options?.status) {\n\t\t\tconst statusFilter = options.status;\n\t\t\tif (statusFilter.endsWith('xx')) {\n\t\t\t\t// Handle status ranges like \"2xx\", \"4xx\", \"5xx\"\n\t\t\t\tconst firstChar = statusFilter[0];\n\t\t\t\tif (firstChar) {\n\t\t\t\t\tconst category = parseInt(firstChar, 10);\n\t\t\t\t\tconst minStatus = category * 100;\n\t\t\t\t\tconst maxStatus = minStatus + 99;\n\t\t\t\t\tquery = query\n\t\t\t\t\t\t.where('status', '>=', minStatus)\n\t\t\t\t\t\t.where('status', '<=', maxStatus);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Handle exact status codes\n\t\t\t\tquery = query.where('status', '=', parseInt(statusFilter, 10));\n\t\t\t}\n\t\t}\n\n\t\tquery = this.applyQueryOptions(query, options);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeRequestTable) => this.rowToRequest(row));\n\t}\n\n\tasync getRequest(id: string): Promise<RequestEntry | null> {\n\t\tconst row = await (this.db as any)\n\t\t\t.selectFrom(this.requestsTable)\n\t\t\t.selectAll()\n\t\t\t.where('id', '=', id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.rowToRequest(row) : null;\n\t}\n\n\t// ============================================\n\t// Exceptions\n\t// ============================================\n\n\tasync saveException(entry: ExceptionEntry): Promise<void> {\n\t\tconst row = this.exceptionToRow(entry);\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.exceptionsTable)\n\t\t\t.values(row)\n\t\t\t.execute();\n\t}\n\n\tasync saveExceptions(entries: ExceptionEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.exceptionToRow(e));\n\t\tawait (this.db as any)\n\t\t\t.insertInto(this.exceptionsTable)\n\t\t\t.values(rows)\n\t\t\t.execute();\n\t}\n\n\tasync getExceptions(options?: QueryOptions): Promise<ExceptionEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\tquery = this.applyQueryOptions(query, options);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeExceptionTable) => this.rowToException(row));\n\t}\n\n\tasync getException(id: string): Promise<ExceptionEntry | null> {\n\t\tconst row = await (this.db as any)\n\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t.selectAll()\n\t\t\t.where('id', '=', id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.rowToException(row) : null;\n\t}\n\n\t// ============================================\n\t// Logs\n\t// ============================================\n\n\tasync saveLog(entry: LogEntry): Promise<void> {\n\t\tconst row = this.logToRow(entry);\n\t\tawait (this.db as any).insertInto(this.logsTable).values(row).execute();\n\t}\n\n\tasync saveLogs(entries: LogEntry[]): Promise<void> {\n\t\tif (entries.length === 0) return;\n\n\t\tconst rows = entries.map((e) => this.logToRow(e));\n\t\tawait (this.db as any).insertInto(this.logsTable).values(rows).execute();\n\t}\n\n\tasync getLogs(options?: QueryOptions): Promise<LogEntry[]> {\n\t\tlet query = (this.db as any)\n\t\t\t.selectFrom(this.logsTable)\n\t\t\t.selectAll()\n\t\t\t.orderBy('timestamp', 'desc');\n\n\t\t// Apply log-specific filters\n\t\tif (options?.level) {\n\t\t\tquery = query.where('level', '=', options.level);\n\t\t}\n\n\t\tquery = this.applyQueryOptions(query, options);\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row: TelescopeLogTable) => this.rowToLog(row));\n\t}\n\n\t// ============================================\n\t// Cleanup\n\t// ============================================\n\n\tasync prune(olderThan: Date): Promise<number> {\n\t\tconst results = await Promise.all([\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.requestsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.exceptionsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.deleteFrom(this.logsTable)\n\t\t\t\t.where('timestamp', '<', olderThan)\n\t\t\t\t.executeTakeFirst(),\n\t\t]);\n\n\t\treturn results.reduce(\n\t\t\t(sum, result) => sum + Number(result.numDeletedRows ?? 0),\n\t\t\t0,\n\t\t);\n\t}\n\n\t// ============================================\n\t// Stats\n\t// ============================================\n\n\tasync getStats(): Promise<TelescopeStats> {\n\t\tconst [requestsResult, exceptionsResult, logsResult] = await Promise.all([\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.requestsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.exceptionsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t\t(this.db as any)\n\t\t\t\t.selectFrom(this.logsTable)\n\t\t\t\t.select((eb: any) => [\n\t\t\t\t\teb.fn.count('id').as('count'),\n\t\t\t\t\teb.fn.min('timestamp').as('oldest'),\n\t\t\t\t\teb.fn.max('timestamp').as('newest'),\n\t\t\t\t])\n\t\t\t\t.executeTakeFirst(),\n\t\t]);\n\n\t\tconst allDates = [\n\t\t\trequestsResult?.oldest,\n\t\t\trequestsResult?.newest,\n\t\t\texceptionsResult?.oldest,\n\t\t\texceptionsResult?.newest,\n\t\t\tlogsResult?.oldest,\n\t\t\tlogsResult?.newest,\n\t\t]\n\t\t\t.filter((d): d is Date => d != null)\n\t\t\t.sort((a, b) => new Date(a).getTime() - new Date(b).getTime());\n\n\t\tconst newestDate = allDates[allDates.length - 1];\n\t\treturn {\n\t\t\trequests: Number(requestsResult?.count ?? 0),\n\t\t\texceptions: Number(exceptionsResult?.count ?? 0),\n\t\t\tlogs: Number(logsResult?.count ?? 0),\n\t\t\toldestEntry: allDates[0] ? new Date(allDates[0]) : undefined,\n\t\t\tnewestEntry: newestDate ? new Date(newestDate) : undefined,\n\t\t};\n\t}\n\n\t// ============================================\n\t// Private Helpers\n\t// ============================================\n\n\tprivate applyQueryOptions(query: any, options?: QueryOptions): any {\n\t\tif (!options) {\n\t\t\treturn query.limit(50);\n\t\t}\n\n\t\tif (options.after) {\n\t\t\tquery = query.where('timestamp', '>=', options.after);\n\t\t}\n\n\t\tif (options.before) {\n\t\t\tquery = query.where('timestamp', '<=', options.before);\n\t\t}\n\n\t\tif (options.search) {\n\t\t\t// Search in relevant text fields - using ILIKE for case-insensitive\n\t\t\t// This is a simple implementation; for production you'd want full-text search\n\t\t\tquery = query.where((eb: any) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb('message', 'ilike', `%${options.search}%`),\n\t\t\t\t\teb('path', 'ilike', `%${options.search}%`),\n\t\t\t\t\teb('url', 'ilike', `%${options.search}%`),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\t// Tags filter would require array contains operation\n\t\t// which is database-specific (PostgreSQL: @>, etc.)\n\n\t\tconst limit = options.limit ?? 50;\n\t\tconst offset = options.offset ?? 0;\n\n\t\treturn query.limit(limit).offset(offset);\n\t}\n\n\tprivate requestToRow(entry: RequestEntry): TelescopeRequestTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tmethod: entry.method,\n\t\t\tpath: entry.path,\n\t\t\turl: entry.url,\n\t\t\theaders: entry.headers,\n\t\t\tbody: entry.body ?? null,\n\t\t\tquery: entry.query ?? null,\n\t\t\tstatus: entry.status,\n\t\t\tresponse_headers: entry.responseHeaders,\n\t\t\tresponse_body: entry.responseBody ?? null,\n\t\t\tduration: entry.duration,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\tip: entry.ip ?? null,\n\t\t\tuser_id: entry.userId ?? null,\n\t\t\ttags: entry.tags ?? null,\n\t\t};\n\t}\n\n\tprivate rowToRequest(row: TelescopeRequestTable): RequestEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tmethod: row.method,\n\t\t\tpath: row.path,\n\t\t\turl: row.url,\n\t\t\theaders: this.parseJson(row.headers) as Record<string, string>,\n\t\t\tbody: row.body ? this.parseJson(row.body) : undefined,\n\t\t\tquery: row.query\n\t\t\t\t? (this.parseJson(row.query) as Record<string, string>)\n\t\t\t\t: undefined,\n\t\t\tstatus: row.status,\n\t\t\tresponseHeaders: this.parseJson(row.response_headers) as Record<\n\t\t\t\tstring,\n\t\t\t\tstring\n\t\t\t>,\n\t\t\tresponseBody: row.response_body\n\t\t\t\t? this.parseJson(row.response_body)\n\t\t\t\t: undefined,\n\t\t\tduration: row.duration,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t\tip: row.ip ?? undefined,\n\t\t\tuserId: row.user_id ?? undefined,\n\t\t\ttags: row.tags ? (this.parseJson(row.tags) as string[]) : undefined,\n\t\t};\n\t}\n\n\tprivate exceptionToRow(entry: ExceptionEntry): TelescopeExceptionTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tname: entry.name,\n\t\t\tmessage: entry.message,\n\t\t\tstack: entry.stack,\n\t\t\tsource: entry.source ?? null,\n\t\t\trequest_id: entry.requestId ?? null,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\thandled: entry.handled,\n\t\t\ttags: entry.tags ?? null,\n\t\t};\n\t}\n\n\tprivate rowToException(row: TelescopeExceptionTable): ExceptionEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tname: row.name,\n\t\t\tmessage: row.message,\n\t\t\tstack: this.parseJson(row.stack) as ExceptionEntry['stack'],\n\t\t\tsource: row.source\n\t\t\t\t? (this.parseJson(row.source) as ExceptionEntry['source'])\n\t\t\t\t: undefined,\n\t\t\trequestId: row.request_id ?? undefined,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t\thandled: row.handled,\n\t\t\ttags: row.tags ? (this.parseJson(row.tags) as string[]) : undefined,\n\t\t};\n\t}\n\n\tprivate logToRow(entry: LogEntry): TelescopeLogTable {\n\t\treturn {\n\t\t\tid: entry.id,\n\t\t\tlevel: entry.level,\n\t\t\tmessage: entry.message,\n\t\t\tcontext: entry.context ?? null,\n\t\t\trequest_id: entry.requestId ?? null,\n\t\t\ttimestamp: entry.timestamp,\n\t\t};\n\t}\n\n\tprivate rowToLog(row: TelescopeLogTable): LogEntry {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tlevel: row.level as LogEntry['level'],\n\t\t\tmessage: row.message,\n\t\t\tcontext: row.context\n\t\t\t\t? (this.parseJson(row.context) as Record<string, unknown>)\n\t\t\t\t: undefined,\n\t\t\trequestId: row.request_id ?? undefined,\n\t\t\ttimestamp: new Date(row.timestamp),\n\t\t};\n\t}\n\n\t/**\n\t * Parse a JSON value that may already be parsed (e.g., from jsonb columns).\n\t */\n\tprivate parseJson(value: unknown): unknown {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === 'string') {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n}\n\n/**\n * SQL migration to create telescope tables.\n * Use this to set up the required tables in your database.\n *\n * @example\n * ```typescript\n * import { getTelescopeMigration } from '@geekmidas/telescope/storage/kysely';\n *\n * // In your migration file\n * export async function up(db: Kysely<any>): Promise<void> {\n * const migration = getTelescopeMigration();\n * await db.schema.executeRaw(migration.up).execute();\n * }\n *\n * export async function down(db: Kysely<any>): Promise<void> {\n * const migration = getTelescopeMigration();\n * await db.schema.executeRaw(migration.down).execute();\n * }\n * ```\n */\nexport function getTelescopeMigration(tablePrefix = 'telescope'): {\n\tup: string;\n\tdown: string;\n} {\n\treturn {\n\t\tup: `\n-- Telescope requests table\nCREATE TABLE IF NOT EXISTS ${tablePrefix}_requests (\n id VARCHAR(21) PRIMARY KEY,\n method VARCHAR(10) NOT NULL,\n path TEXT NOT NULL,\n url TEXT NOT NULL,\n headers JSONB NOT NULL,\n body JSONB,\n query JSONB,\n status INTEGER NOT NULL,\n response_headers JSONB NOT NULL,\n response_body JSONB,\n duration DOUBLE PRECISION NOT NULL,\n timestamp TIMESTAMPTZ NOT NULL,\n ip VARCHAR(45),\n user_id VARCHAR(255),\n tags JSONB\n);\n\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_requests_timestamp\n ON ${tablePrefix}_requests (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_requests_path\n ON ${tablePrefix}_requests (path);\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_requests_status\n ON ${tablePrefix}_requests (status);\n\n-- Telescope exceptions table\nCREATE TABLE IF NOT EXISTS ${tablePrefix}_exceptions (\n id VARCHAR(21) PRIMARY KEY,\n name VARCHAR(255) NOT NULL,\n message TEXT NOT NULL,\n stack JSONB NOT NULL,\n source JSONB,\n request_id VARCHAR(21),\n timestamp TIMESTAMPTZ NOT NULL,\n handled BOOLEAN NOT NULL DEFAULT FALSE,\n tags JSONB\n);\n\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_exceptions_timestamp\n ON ${tablePrefix}_exceptions (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_exceptions_request_id\n ON ${tablePrefix}_exceptions (request_id);\n\n-- Telescope logs table\nCREATE TABLE IF NOT EXISTS ${tablePrefix}_logs (\n id VARCHAR(21) PRIMARY KEY,\n level VARCHAR(10) NOT NULL,\n message TEXT NOT NULL,\n context JSONB,\n request_id VARCHAR(21),\n timestamp TIMESTAMPTZ NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_logs_timestamp\n ON ${tablePrefix}_logs (timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_logs_level\n ON ${tablePrefix}_logs (level);\nCREATE INDEX IF NOT EXISTS idx_${tablePrefix}_logs_request_id\n ON ${tablePrefix}_logs (request_id);\n`,\n\t\tdown: `\nDROP TABLE IF EXISTS ${tablePrefix}_logs;\nDROP TABLE IF EXISTS ${tablePrefix}_exceptions;\nDROP TABLE IF EXISTS ${tablePrefix}_requests;\n`,\n\t};\n}\n"],"mappings":"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"}
@@ -1,11 +1,13 @@
1
- import { S as TelescopeStorage, a as LogEntry, f as RequestEntry, i as ExceptionEntry, u as QueryOptions, x as TelescopeStats } from "../types-BVujq4zd.cjs";
1
+ import { ExceptionEntry, LogEntry, QueryOptions, RequestEntry, TelescopeStats, TelescopeStorage } from "../types-l7Rlb5Mg.cjs";
2
2
  import { Kysely } from "kysely";
3
+
3
4
  //#region src/storage/kysely.d.ts
5
+
4
6
  /**
5
7
  * Database table interface for telescope requests.
6
8
  * Use this to define your telescope_requests table in your Kysely database schema.
7
9
  */
8
- export interface TelescopeRequestTable {
10
+ interface TelescopeRequestTable {
9
11
  id: string;
10
12
  method: string;
11
13
  path: string;
@@ -25,7 +27,7 @@ export interface TelescopeRequestTable {
25
27
  /**
26
28
  * Database table interface for telescope exceptions.
27
29
  */
28
- export interface TelescopeExceptionTable {
30
+ interface TelescopeExceptionTable {
29
31
  id: string;
30
32
  name: string;
31
33
  message: string;
@@ -39,7 +41,7 @@ export interface TelescopeExceptionTable {
39
41
  /**
40
42
  * Database table interface for telescope logs.
41
43
  */
42
- export interface TelescopeLogTable {
44
+ interface TelescopeLogTable {
43
45
  id: string;
44
46
  level: string;
45
47
  message: string;
@@ -61,30 +63,22 @@ export interface TelescopeLogTable {
61
63
  * }
62
64
  * ```
63
65
  */
64
- export interface TelescopeTables {
65
- requests: TelescopeRequestTable;
66
- exceptions: TelescopeExceptionTable;
67
- logs: TelescopeLogTable;
66
+ interface TelescopeTables {
67
+ telescope_requests: TelescopeRequestTable;
68
+ telescope_exceptions: TelescopeExceptionTable;
69
+ telescope_logs: TelescopeLogTable;
68
70
  }
69
71
  /**
70
72
  * Configuration for KyselyStorage.
71
73
  */
72
- export interface KyselyStorageConfig<DB> {
74
+ interface KyselyStorageConfig<DB> {
73
75
  /** Kysely database instance */
74
76
  db: Kysely<DB>;
75
77
  /**
76
- * The schema holding `requests`, `exceptions` and `logs`.
77
- *
78
- * Normally omitted. A telescope derived from a database gets a schema of its
79
- * own and a role whose `search_path` is pinned to it, so an unqualified name
80
- * already resolves there — which is the same rule every other tenant here
81
- * follows, and the reason a connection string never has to remember where
82
- * its tables live.
83
- *
84
- * Name one only when the connection is *not* pinned: a shared pool, a
85
- * migration run as an owner whose `search_path` finds `public` first.
78
+ * Table name prefix (default: 'telescope').
79
+ * Tables will be named: {prefix}_requests, {prefix}_exceptions, {prefix}_logs
86
80
  */
87
- schema?: string;
81
+ tablePrefix?: string;
88
82
  }
89
83
  /**
90
84
  * Kysely-based storage implementation for Telescope.
@@ -107,17 +101,8 @@ export interface KyselyStorageConfig<DB> {
107
101
  * const telescope = new Telescope({ storage });
108
102
  * ```
109
103
  */
110
- export declare class KyselyStorage<DB> implements TelescopeStorage {
104
+ declare class KyselyStorage<DB> implements TelescopeStorage {
111
105
  private readonly db;
112
- /**
113
- * Unqualified, and deliberately.
114
- *
115
- * These were `telescope_requests`, `telescope_exceptions` and
116
- * `telescope_logs` — a prefix, which is what you reach for when the tables
117
- * have to share a schema with an application's own. They do not: a telescope
118
- * derived from a database is a schema tenant, so the names are just the
119
- * names, and `DROP SCHEMA telescope CASCADE` is the whole cleanup.
120
- */
121
106
  private readonly requestsTable;
122
107
  private readonly exceptionsTable;
123
108
  private readonly logsTable;
@@ -148,11 +133,8 @@ export declare class KyselyStorage<DB> implements TelescopeStorage {
148
133
  private parseJson;
149
134
  }
150
135
  /**
151
- * SQL migration to create telescope's tables.
152
- *
153
- * Pass a schema to have them created in one, and to have `down` drop the whole
154
- * schema rather than three tables. Pass nothing where the connection's
155
- * `search_path` already places them.
136
+ * SQL migration to create telescope tables.
137
+ * Use this to set up the required tables in your database.
156
138
  *
157
139
  * @example
158
140
  * ```typescript
@@ -170,9 +152,11 @@ export declare class KyselyStorage<DB> implements TelescopeStorage {
170
152
  * }
171
153
  * ```
172
154
  */
173
- export declare function getTelescopeMigration(schema?: string): {
155
+ declare function getTelescopeMigration(tablePrefix?: string): {
174
156
  up: string;
175
157
  down: string;
176
158
  };
159
+ //# sourceMappingURL=kysely.d.ts.map
177
160
  //#endregion
161
+ export { KyselyStorage, KyselyStorageConfig, TelescopeExceptionTable, TelescopeLogTable, TelescopeRequestTable, TelescopeTables, getTelescopeMigration };
178
162
  //# sourceMappingURL=kysely.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kysely.d.cts","names":[],"sources":["../../src/storage/kysely.ts"],"mappings":";;;;;;;iBAciB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;;;;;iBAMgB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;;;;;iBAMgB;EAChB;EACA;EACA;EACA;EACA;EACA,WAAW;;;;;;;;;;;;;;;;iBAiBK;EAChB,UAAU;EACV,YAAY;EACZ,MAAM;;;;;iBAMU,oBAAoB;;EAEpC,IAAI,OAAO;;;;;;;;;;;;;EAaX;;;;;;;;;;;;;;;;;;;;;;;qBAwBY,cAAc,eAAe;mBACxB;;;;;;;;;;mBAWA;mBACA;mBACA;EAEjB,YAAY,QAAQ,oBAAoB;EAWlC,YAAY,OAAO,eAAe;EAKlC,aAAa,SAAS,iBAAiB;EAUvC,YAAY,UAAU,eAAe,QAAQ;EAoC7C,WAAW,aAAa,QAAQ;EAchC,cAAc,OAAO,iBAAiB;EAQtC,eAAe,SAAS,mBAAmB;EAU3C,cAAc,UAAU,eAAe,QAAQ;EAY/C,aAAa,aAAa,QAAQ;EAclC,QAAQ,OAAO,WAAW;EAK1B,SAAS,SAAS,aAAa;EAO/B,QAAQ,UAAU,eAAe,QAAQ;EAqBzC,MAAM,WAAW,OAAO;EA0BxB,YAAY,QAAQ;UAqDlB;UAwCA;UAoBA;UA2BA;UAcA;UAgBA;UAWA;;;;UAgBA;;;;;;;;;;;;;;;;;;;;;;;;;wBAkDO,sBAAsB;EACrC;EACA"}
1
+ {"version":3,"file":"kysely.d.cts","names":[],"sources":["../../src/storage/kysely.ts"],"sourcesContent":[],"mappings":";;;;;;;AAcA;AAqBA;AAeiB,UApCA,qBAAA,CA0CL;EAiBK,EAAA,EAAA,MAAA;EAAe,MAAA,EAAA,MAAA;EAAA,IACX,EAAA,MAAA;EAAqB,GACnB,EAAA,MAAA;EAAuB,OAC7B,EAAA,OAAA;EAAiB,IAAA,EAAA,OAAA,GAAA,IAAA;EAMjB,KAAA,EAAA,OAAA,GAAA,IAAA;EAAmB,MAAA,EAAA,MAAA;EAAA,gBAExB,EAAA,OAAA;EAAE,aAAT,EAAA,OAAA,GAAA,IAAA;EAAM,QAAA,EAAA,MAAA;EA6BE,SAAA,EAvFD,IAuFC;EAAa,EAAA,EAAA,MAAA,GAAA,IAAA;EAAA,OAMe,EAAA,MAAA,GAAA,IAAA;EAAE,IAAtB,EAAA,OAAA,GAAA,IAAA;;;;;AA2BQ,UA/GZ,uBAAA,CA+GY;EAAY,EAAA,EAAW,MAAA;EAAY,IAApB,EAAA,MAAA;EAAO,OAoCZ,EAAA,MAAA;EAAY,KAApB,EAAA,OAAA;EAAO,MAcV,EAAA,OAAA,GAAA,IAAA;EAAc,UAAG,EAAA,MAAA,GAAA,IAAA;EAAO,SAQrB,EAlKnB,IAkKmB;EAAc,OAAK,EAAA,OAAA;EAAO,IAU1B,EAAA,OAAA,GAAA,IAAA;;;;;AA0BT,UA9LL,iBAAA,CA8LK;EAAQ,EAAA,EAAG,MAAA;EAAO,KAKf,EAAA,MAAA;EAAQ,OAAK,EAAA,MAAA;EAAO,OAOpB,EAAA,OAAA,GAAA,IAAA;EAAY,UAAW,EAAA,MAAA,GAAA,IAAA;EAAQ,SAAhB,EApM5B,IAoM4B;;;;;;AA3IkB;AA4Z1D;;;;;;;;;UApciB,eAAA;sBACI;wBACE;kBACN;;;;;UAMA;;MAEZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6BC,6BAA6B;;;;;sBAMrB,oBAAoB;qBAYf,eAAe;wBAKZ,iBAAiB;wBAUjB,eAAe,QAAQ;0BAoCrB,QAAQ;uBAcX,iBAAiB;0BAQd,mBAAmB;0BAUnB,eAAe,QAAQ;4BAYrB,QAAQ;iBAcnB,WAAW;oBAKR,aAAa;oBAOb,eAAe,QAAQ;mBAqBxB,OAAO;cA0BZ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkOX,qBAAA"}
@@ -1,11 +1,13 @@
1
- import { S as TelescopeStorage, a as LogEntry, f as RequestEntry, i as ExceptionEntry, u as QueryOptions, x as TelescopeStats } from "../types-BVujq4zd.mjs";
1
+ import { ExceptionEntry, LogEntry, QueryOptions, RequestEntry, TelescopeStats, TelescopeStorage } from "../types-B1EIa_cQ.mjs";
2
2
  import { Kysely } from "kysely";
3
+
3
4
  //#region src/storage/kysely.d.ts
5
+
4
6
  /**
5
7
  * Database table interface for telescope requests.
6
8
  * Use this to define your telescope_requests table in your Kysely database schema.
7
9
  */
8
- export interface TelescopeRequestTable {
10
+ interface TelescopeRequestTable {
9
11
  id: string;
10
12
  method: string;
11
13
  path: string;
@@ -25,7 +27,7 @@ export interface TelescopeRequestTable {
25
27
  /**
26
28
  * Database table interface for telescope exceptions.
27
29
  */
28
- export interface TelescopeExceptionTable {
30
+ interface TelescopeExceptionTable {
29
31
  id: string;
30
32
  name: string;
31
33
  message: string;
@@ -39,7 +41,7 @@ export interface TelescopeExceptionTable {
39
41
  /**
40
42
  * Database table interface for telescope logs.
41
43
  */
42
- export interface TelescopeLogTable {
44
+ interface TelescopeLogTable {
43
45
  id: string;
44
46
  level: string;
45
47
  message: string;
@@ -61,30 +63,22 @@ export interface TelescopeLogTable {
61
63
  * }
62
64
  * ```
63
65
  */
64
- export interface TelescopeTables {
65
- requests: TelescopeRequestTable;
66
- exceptions: TelescopeExceptionTable;
67
- logs: TelescopeLogTable;
66
+ interface TelescopeTables {
67
+ telescope_requests: TelescopeRequestTable;
68
+ telescope_exceptions: TelescopeExceptionTable;
69
+ telescope_logs: TelescopeLogTable;
68
70
  }
69
71
  /**
70
72
  * Configuration for KyselyStorage.
71
73
  */
72
- export interface KyselyStorageConfig<DB> {
74
+ interface KyselyStorageConfig<DB> {
73
75
  /** Kysely database instance */
74
76
  db: Kysely<DB>;
75
77
  /**
76
- * The schema holding `requests`, `exceptions` and `logs`.
77
- *
78
- * Normally omitted. A telescope derived from a database gets a schema of its
79
- * own and a role whose `search_path` is pinned to it, so an unqualified name
80
- * already resolves there — which is the same rule every other tenant here
81
- * follows, and the reason a connection string never has to remember where
82
- * its tables live.
83
- *
84
- * Name one only when the connection is *not* pinned: a shared pool, a
85
- * migration run as an owner whose `search_path` finds `public` first.
78
+ * Table name prefix (default: 'telescope').
79
+ * Tables will be named: {prefix}_requests, {prefix}_exceptions, {prefix}_logs
86
80
  */
87
- schema?: string;
81
+ tablePrefix?: string;
88
82
  }
89
83
  /**
90
84
  * Kysely-based storage implementation for Telescope.
@@ -107,17 +101,8 @@ export interface KyselyStorageConfig<DB> {
107
101
  * const telescope = new Telescope({ storage });
108
102
  * ```
109
103
  */
110
- export declare class KyselyStorage<DB> implements TelescopeStorage {
104
+ declare class KyselyStorage<DB> implements TelescopeStorage {
111
105
  private readonly db;
112
- /**
113
- * Unqualified, and deliberately.
114
- *
115
- * These were `telescope_requests`, `telescope_exceptions` and
116
- * `telescope_logs` — a prefix, which is what you reach for when the tables
117
- * have to share a schema with an application's own. They do not: a telescope
118
- * derived from a database is a schema tenant, so the names are just the
119
- * names, and `DROP SCHEMA telescope CASCADE` is the whole cleanup.
120
- */
121
106
  private readonly requestsTable;
122
107
  private readonly exceptionsTable;
123
108
  private readonly logsTable;
@@ -148,11 +133,8 @@ export declare class KyselyStorage<DB> implements TelescopeStorage {
148
133
  private parseJson;
149
134
  }
150
135
  /**
151
- * SQL migration to create telescope's tables.
152
- *
153
- * Pass a schema to have them created in one, and to have `down` drop the whole
154
- * schema rather than three tables. Pass nothing where the connection's
155
- * `search_path` already places them.
136
+ * SQL migration to create telescope tables.
137
+ * Use this to set up the required tables in your database.
156
138
  *
157
139
  * @example
158
140
  * ```typescript
@@ -170,9 +152,11 @@ export declare class KyselyStorage<DB> implements TelescopeStorage {
170
152
  * }
171
153
  * ```
172
154
  */
173
- export declare function getTelescopeMigration(schema?: string): {
155
+ declare function getTelescopeMigration(tablePrefix?: string): {
174
156
  up: string;
175
157
  down: string;
176
158
  };
159
+ //# sourceMappingURL=kysely.d.ts.map
177
160
  //#endregion
161
+ export { KyselyStorage, KyselyStorageConfig, TelescopeExceptionTable, TelescopeLogTable, TelescopeRequestTable, TelescopeTables, getTelescopeMigration };
178
162
  //# sourceMappingURL=kysely.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kysely.d.mts","names":[],"sources":["../../src/storage/kysely.ts"],"mappings":";;;;;;;iBAciB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;;;;;iBAMgB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;;;;;iBAMgB;EAChB;EACA;EACA;EACA;EACA;EACA,WAAW;;;;;;;;;;;;;;;;iBAiBK;EAChB,UAAU;EACV,YAAY;EACZ,MAAM;;;;;iBAMU,oBAAoB;;EAEpC,IAAI,OAAO;;;;;;;;;;;;;EAaX;;;;;;;;;;;;;;;;;;;;;;;qBAwBY,cAAc,eAAe;mBACxB;;;;;;;;;;mBAWA;mBACA;mBACA;EAEjB,YAAY,QAAQ,oBAAoB;EAWlC,YAAY,OAAO,eAAe;EAKlC,aAAa,SAAS,iBAAiB;EAUvC,YAAY,UAAU,eAAe,QAAQ;EAoC7C,WAAW,aAAa,QAAQ;EAchC,cAAc,OAAO,iBAAiB;EAQtC,eAAe,SAAS,mBAAmB;EAU3C,cAAc,UAAU,eAAe,QAAQ;EAY/C,aAAa,aAAa,QAAQ;EAclC,QAAQ,OAAO,WAAW;EAK1B,SAAS,SAAS,aAAa;EAO/B,QAAQ,UAAU,eAAe,QAAQ;EAqBzC,MAAM,WAAW,OAAO;EA0BxB,YAAY,QAAQ;UAqDlB;UAwCA;UAoBA;UA2BA;UAcA;UAgBA;UAWA;;;;UAgBA;;;;;;;;;;;;;;;;;;;;;;;;;wBAkDO,sBAAsB;EACrC;EACA"}
1
+ {"version":3,"file":"kysely.d.mts","names":[],"sources":["../../src/storage/kysely.ts"],"sourcesContent":[],"mappings":";;;;;;;AAcA;AAqBA;AAeiB,UApCA,qBAAA,CA0CL;EAiBK,EAAA,EAAA,MAAA;EAAe,MAAA,EAAA,MAAA;EAAA,IACX,EAAA,MAAA;EAAqB,GACnB,EAAA,MAAA;EAAuB,OAC7B,EAAA,OAAA;EAAiB,IAAA,EAAA,OAAA,GAAA,IAAA;EAMjB,KAAA,EAAA,OAAA,GAAA,IAAA;EAAmB,MAAA,EAAA,MAAA;EAAA,gBAExB,EAAA,OAAA;EAAE,aAAT,EAAA,OAAA,GAAA,IAAA;EAAM,QAAA,EAAA,MAAA;EA6BE,SAAA,EAvFD,IAuFC;EAAa,EAAA,EAAA,MAAA,GAAA,IAAA;EAAA,OAMe,EAAA,MAAA,GAAA,IAAA;EAAE,IAAtB,EAAA,OAAA,GAAA,IAAA;;;;;AA2BQ,UA/GZ,uBAAA,CA+GY;EAAY,EAAA,EAAW,MAAA;EAAY,IAApB,EAAA,MAAA;EAAO,OAoCZ,EAAA,MAAA;EAAY,KAApB,EAAA,OAAA;EAAO,MAcV,EAAA,OAAA,GAAA,IAAA;EAAc,UAAG,EAAA,MAAA,GAAA,IAAA;EAAO,SAQrB,EAlKnB,IAkKmB;EAAc,OAAK,EAAA,OAAA;EAAO,IAU1B,EAAA,OAAA,GAAA,IAAA;;;;;AA0BT,UA9LL,iBAAA,CA8LK;EAAQ,EAAA,EAAG,MAAA;EAAO,KAKf,EAAA,MAAA;EAAQ,OAAK,EAAA,MAAA;EAAO,OAOpB,EAAA,OAAA,GAAA,IAAA;EAAY,UAAW,EAAA,MAAA,GAAA,IAAA;EAAQ,SAAhB,EApM5B,IAoM4B;;;;;;AA3IkB;AA4Z1D;;;;;;;;;UApciB,eAAA;sBACI;wBACE;kBACN;;;;;UAMA;;MAEZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6BC,6BAA6B;;;;;sBAMrB,oBAAoB;qBAYf,eAAe;wBAKZ,iBAAiB;wBAUjB,eAAe,QAAQ;0BAoCrB,QAAQ;uBAcX,iBAAiB;0BAQd,mBAAmB;0BAUnB,eAAe,QAAQ;4BAYrB,QAAQ;iBAcnB,WAAW;oBAKR,aAAa;oBAOb,eAAe,QAAQ;mBAqBxB,OAAO;cA0BZ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkOX,qBAAA"}