apitally 0.25.8 → 1.0.0-beta.1

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 (555) hide show
  1. package/README.md +228 -178
  2. package/dist/activation.cjs +393 -0
  3. package/dist/activation.cjs.map +1 -0
  4. package/dist/activation.d.cts +42 -0
  5. package/dist/activation.d.ts +42 -0
  6. package/dist/activation.js +383 -0
  7. package/dist/activation.js.map +1 -0
  8. package/dist/adonisjs/configure.cjs +86 -30
  9. package/dist/adonisjs/configure.cjs.map +1 -1
  10. package/dist/adonisjs/configure.d.cts +0 -4
  11. package/dist/adonisjs/configure.d.ts +0 -4
  12. package/dist/adonisjs/configure.js +83 -29
  13. package/dist/adonisjs/configure.js.map +1 -1
  14. package/dist/adonisjs/index.cjs +38 -21
  15. package/dist/adonisjs/index.cjs.map +1 -1
  16. package/dist/adonisjs/index.d.cts +5 -14
  17. package/dist/adonisjs/index.d.ts +5 -14
  18. package/dist/adonisjs/index.js +39 -18
  19. package/dist/adonisjs/index.js.map +1 -1
  20. package/dist/adonisjs/middleware.cjs +43 -109
  21. package/dist/adonisjs/middleware.cjs.map +1 -1
  22. package/dist/adonisjs/middleware.d.cts +1 -16
  23. package/dist/adonisjs/middleware.d.ts +1 -16
  24. package/dist/adonisjs/middleware.js +43 -110
  25. package/dist/adonisjs/middleware.js.map +1 -1
  26. package/dist/adonisjs/provider.cjs +19 -87
  27. package/dist/adonisjs/provider.cjs.map +1 -1
  28. package/dist/adonisjs/provider.d.cts +0 -22
  29. package/dist/adonisjs/provider.d.ts +0 -22
  30. package/dist/adonisjs/provider.js +19 -88
  31. package/dist/adonisjs/provider.js.map +1 -1
  32. package/dist/adonisjs/stubs/config/apitally.stub +11 -15
  33. package/dist/bodyCapture.cjs +128 -0
  34. package/dist/bodyCapture.cjs.map +1 -0
  35. package/dist/bodyCapture.d.cts +31 -0
  36. package/dist/bodyCapture.d.ts +31 -0
  37. package/dist/bodyCapture.js +101 -0
  38. package/dist/bodyCapture.js.map +1 -0
  39. package/dist/config.cjs +227 -0
  40. package/dist/config.cjs.map +1 -0
  41. package/dist/config.d.cts +45 -0
  42. package/dist/config.d.ts +45 -0
  43. package/dist/config.js +192 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/consumer.cjs +98 -0
  46. package/dist/consumer.cjs.map +1 -0
  47. package/dist/consumer.d.cts +15 -0
  48. package/dist/consumer.d.ts +15 -0
  49. package/dist/consumer.js +78 -0
  50. package/dist/consumer.js.map +1 -0
  51. package/dist/context.cjs +68 -0
  52. package/dist/context.cjs.map +1 -0
  53. package/dist/context.d.cts +33 -0
  54. package/dist/context.d.ts +33 -0
  55. package/dist/context.js +40 -0
  56. package/dist/context.js.map +1 -0
  57. package/dist/elysia/index.cjs +12 -3
  58. package/dist/elysia/index.cjs.map +1 -1
  59. package/dist/elysia/index.d.cts +8 -16
  60. package/dist/elysia/index.d.ts +8 -16
  61. package/dist/elysia/index.js +10 -2
  62. package/dist/elysia/index.js.map +1 -1
  63. package/dist/elysia/middleware.cjs +261 -0
  64. package/dist/elysia/middleware.cjs.map +1 -0
  65. package/dist/elysia/middleware.d.cts +14 -0
  66. package/dist/elysia/middleware.d.ts +14 -0
  67. package/dist/elysia/middleware.js +250 -0
  68. package/dist/elysia/middleware.js.map +1 -0
  69. package/dist/{otel/index.cjs → elysia/routes.cjs} +16 -7
  70. package/dist/elysia/routes.cjs.map +1 -0
  71. package/dist/elysia/routes.d.cts +7 -0
  72. package/dist/elysia/routes.d.ts +7 -0
  73. package/dist/elysia/routes.js +14 -0
  74. package/dist/elysia/routes.js.map +1 -0
  75. package/dist/exceptions.cjs +81 -0
  76. package/dist/exceptions.cjs.map +1 -0
  77. package/dist/exceptions.d.cts +7 -0
  78. package/dist/exceptions.d.ts +7 -0
  79. package/dist/exceptions.js +55 -0
  80. package/dist/exceptions.js.map +1 -0
  81. package/dist/exportSerialization.cjs +56 -0
  82. package/dist/exportSerialization.cjs.map +1 -0
  83. package/dist/exportSerialization.d.cts +7 -0
  84. package/dist/exportSerialization.d.ts +7 -0
  85. package/dist/exportSerialization.js +32 -0
  86. package/dist/exportSerialization.js.map +1 -0
  87. package/dist/exportWorker.cjs +305 -0
  88. package/dist/exportWorker.cjs.map +1 -0
  89. package/dist/exportWorker.d.cts +46 -0
  90. package/dist/exportWorker.d.ts +46 -0
  91. package/dist/exportWorker.js +279 -0
  92. package/dist/exportWorker.js.map +1 -0
  93. package/dist/express/index.cjs +9 -4
  94. package/dist/express/index.cjs.map +1 -1
  95. package/dist/express/index.d.cts +7 -10
  96. package/dist/express/index.d.ts +7 -10
  97. package/dist/express/index.js +8 -2
  98. package/dist/express/index.js.map +1 -1
  99. package/dist/express/install.cjs +45 -0
  100. package/dist/express/install.cjs.map +1 -0
  101. package/dist/express/install.d.cts +10 -0
  102. package/dist/express/install.d.ts +10 -0
  103. package/dist/express/install.js +21 -0
  104. package/dist/express/install.js.map +1 -0
  105. package/dist/express/middleware.cjs +87 -331
  106. package/dist/express/middleware.cjs.map +1 -1
  107. package/dist/express/middleware.d.cts +3 -21
  108. package/dist/express/middleware.d.ts +3 -21
  109. package/dist/express/middleware.js +91 -327
  110. package/dist/express/middleware.js.map +1 -1
  111. package/dist/express/register.cjs +20 -0
  112. package/dist/express/register.cjs.map +1 -0
  113. package/dist/express/register.d.cts +2 -0
  114. package/dist/express/register.d.ts +2 -0
  115. package/dist/express/register.js +19 -0
  116. package/dist/express/register.js.map +1 -0
  117. package/dist/express/routes.cjs +429 -0
  118. package/dist/express/routes.cjs.map +1 -0
  119. package/dist/express/routes.d.cts +14 -0
  120. package/dist/express/routes.d.ts +14 -0
  121. package/dist/express/routes.js +401 -0
  122. package/dist/express/routes.js.map +1 -0
  123. package/dist/fastify/index.cjs +10 -5
  124. package/dist/fastify/index.cjs.map +1 -1
  125. package/dist/fastify/index.d.cts +7 -11
  126. package/dist/fastify/index.d.ts +7 -11
  127. package/dist/fastify/index.js +9 -3
  128. package/dist/fastify/index.js.map +1 -1
  129. package/dist/{loggers/index.cjs → fastify/install.cjs} +17 -19
  130. package/dist/fastify/install.cjs.map +1 -0
  131. package/dist/fastify/install.d.cts +10 -0
  132. package/dist/fastify/install.d.ts +10 -0
  133. package/dist/fastify/install.js +15 -0
  134. package/dist/fastify/install.js.map +1 -0
  135. package/dist/fastify/middleware.cjs +135 -0
  136. package/dist/fastify/middleware.cjs.map +1 -0
  137. package/dist/fastify/middleware.d.cts +7 -0
  138. package/dist/fastify/middleware.d.ts +7 -0
  139. package/dist/fastify/middleware.js +114 -0
  140. package/dist/fastify/middleware.js.map +1 -0
  141. package/dist/{common/paramValidation.cjs → fastify/routes.cjs} +15 -17
  142. package/dist/fastify/routes.cjs.map +1 -0
  143. package/dist/fastify/routes.d.cts +8 -0
  144. package/dist/fastify/routes.d.ts +8 -0
  145. package/dist/fastify/routes.js +14 -0
  146. package/dist/fastify/routes.js.map +1 -0
  147. package/dist/h3/index.cjs +28 -4
  148. package/dist/h3/index.cjs.map +1 -1
  149. package/dist/h3/index.d.cts +8 -10
  150. package/dist/h3/index.d.ts +8 -10
  151. package/dist/h3/index.js +26 -2
  152. package/dist/h3/index.js.map +1 -1
  153. package/dist/h3/middleware.cjs +210 -0
  154. package/dist/h3/middleware.cjs.map +1 -0
  155. package/dist/h3/middleware.d.cts +5 -0
  156. package/dist/h3/middleware.d.ts +5 -0
  157. package/dist/h3/middleware.js +194 -0
  158. package/dist/h3/middleware.js.map +1 -0
  159. package/dist/h3/routes.cjs +66 -0
  160. package/dist/h3/routes.cjs.map +1 -0
  161. package/dist/h3/routes.d.cts +8 -0
  162. package/dist/h3/routes.d.ts +8 -0
  163. package/dist/h3/routes.js +41 -0
  164. package/dist/h3/routes.js.map +1 -0
  165. package/dist/hapi/index.cjs +15 -4
  166. package/dist/hapi/index.cjs.map +1 -1
  167. package/dist/hapi/index.d.cts +8 -10
  168. package/dist/hapi/index.d.ts +8 -10
  169. package/dist/hapi/index.js +13 -2
  170. package/dist/hapi/index.js.map +1 -1
  171. package/dist/{loggers/hapi.cjs → hapi/install.cjs} +20 -26
  172. package/dist/hapi/install.cjs.map +1 -0
  173. package/dist/hapi/install.d.cts +8 -0
  174. package/dist/hapi/install.d.ts +8 -0
  175. package/dist/hapi/install.js +22 -0
  176. package/dist/hapi/install.js.map +1 -0
  177. package/dist/hapi/middleware.cjs +158 -0
  178. package/dist/hapi/middleware.cjs.map +1 -0
  179. package/dist/hapi/middleware.d.cts +5 -0
  180. package/dist/hapi/middleware.d.ts +5 -0
  181. package/dist/hapi/middleware.js +137 -0
  182. package/dist/hapi/middleware.js.map +1 -0
  183. package/dist/{common/logging.cjs → hapi/routes.cjs} +14 -17
  184. package/dist/hapi/routes.cjs.map +1 -0
  185. package/dist/hapi/routes.d.cts +8 -0
  186. package/dist/hapi/routes.d.ts +8 -0
  187. package/dist/hapi/routes.js +12 -0
  188. package/dist/hapi/routes.js.map +1 -0
  189. package/dist/hono/index.cjs +13 -3
  190. package/dist/hono/index.cjs.map +1 -1
  191. package/dist/hono/index.d.cts +7 -10
  192. package/dist/hono/index.d.ts +7 -10
  193. package/dist/hono/index.js +13 -2
  194. package/dist/hono/index.js.map +1 -1
  195. package/dist/hono/middleware.cjs +219 -127
  196. package/dist/hono/middleware.cjs.map +1 -1
  197. package/dist/hono/middleware.d.cts +3 -18
  198. package/dist/hono/middleware.d.ts +3 -18
  199. package/dist/hono/middleware.js +229 -126
  200. package/dist/hono/middleware.js.map +1 -1
  201. package/dist/hono/routes.cjs +74 -0
  202. package/dist/hono/routes.cjs.map +1 -0
  203. package/dist/hono/routes.d.cts +8 -0
  204. package/dist/hono/routes.d.ts +8 -0
  205. package/dist/hono/routes.js +49 -0
  206. package/dist/hono/routes.js.map +1 -0
  207. package/dist/index.cjs +108 -0
  208. package/dist/index.cjs.map +1 -1
  209. package/dist/index.d.cts +29 -1
  210. package/dist/index.d.ts +29 -1
  211. package/dist/index.js +77 -0
  212. package/dist/index.js.map +1 -1
  213. package/dist/koa/index.cjs +13 -3
  214. package/dist/koa/index.cjs.map +1 -1
  215. package/dist/koa/index.d.cts +7 -10
  216. package/dist/koa/index.d.ts +7 -10
  217. package/dist/koa/index.js +13 -2
  218. package/dist/koa/index.js.map +1 -1
  219. package/dist/koa/middleware.cjs +85 -184
  220. package/dist/koa/middleware.cjs.map +1 -1
  221. package/dist/koa/middleware.d.cts +3 -13
  222. package/dist/koa/middleware.d.ts +3 -13
  223. package/dist/koa/middleware.js +88 -183
  224. package/dist/koa/middleware.js.map +1 -1
  225. package/dist/koa/routes.cjs +71 -0
  226. package/dist/koa/routes.cjs.map +1 -0
  227. package/dist/koa/routes.d.cts +8 -0
  228. package/dist/koa/routes.d.ts +8 -0
  229. package/dist/koa/routes.js +46 -0
  230. package/dist/koa/routes.js.map +1 -0
  231. package/dist/logCapture.cjs +417 -0
  232. package/dist/logCapture.cjs.map +1 -0
  233. package/dist/logCapture.d.cts +18 -0
  234. package/dist/logCapture.d.ts +18 -0
  235. package/dist/logCapture.js +390 -0
  236. package/dist/logCapture.js.map +1 -0
  237. package/dist/logRecordExporter.cjs +51 -0
  238. package/dist/logRecordExporter.cjs.map +1 -0
  239. package/dist/logRecordExporter.d.cts +14 -0
  240. package/dist/logRecordExporter.d.ts +14 -0
  241. package/dist/logRecordExporter.js +27 -0
  242. package/dist/logRecordExporter.js.map +1 -0
  243. package/dist/logRecordProcessor.cjs +137 -0
  244. package/dist/logRecordProcessor.cjs.map +1 -0
  245. package/dist/logRecordProcessor.d.cts +27 -0
  246. package/dist/logRecordProcessor.d.ts +27 -0
  247. package/dist/logRecordProcessor.js +113 -0
  248. package/dist/logRecordProcessor.js.map +1 -0
  249. package/dist/logger.cjs +62 -0
  250. package/dist/logger.cjs.map +1 -0
  251. package/dist/logger.d.cts +7 -0
  252. package/dist/logger.d.ts +7 -0
  253. package/dist/logger.js +34 -0
  254. package/dist/logger.js.map +1 -0
  255. package/dist/metrics.cjs +171 -0
  256. package/dist/metrics.cjs.map +1 -0
  257. package/dist/metrics.d.cts +26 -0
  258. package/dist/metrics.d.ts +26 -0
  259. package/dist/metrics.js +153 -0
  260. package/dist/metrics.js.map +1 -0
  261. package/dist/nestjs/index.cjs +81 -71
  262. package/dist/nestjs/index.cjs.map +1 -1
  263. package/dist/nestjs/index.d.cts +4 -11
  264. package/dist/nestjs/index.d.ts +4 -11
  265. package/dist/nestjs/index.js +81 -61
  266. package/dist/nestjs/index.js.map +1 -1
  267. package/dist/packageVersion.cjs +67 -0
  268. package/dist/packageVersion.cjs.map +1 -0
  269. package/dist/packageVersion.d.cts +5 -0
  270. package/dist/packageVersion.d.ts +5 -0
  271. package/dist/packageVersion.js +39 -0
  272. package/dist/packageVersion.js.map +1 -0
  273. package/dist/providers.cjs +149 -0
  274. package/dist/providers.cjs.map +1 -0
  275. package/dist/providers.d.cts +15 -0
  276. package/dist/providers.d.ts +15 -0
  277. package/dist/providers.js +136 -0
  278. package/dist/providers.js.map +1 -0
  279. package/dist/redaction.cjs +116 -0
  280. package/dist/redaction.cjs.map +1 -0
  281. package/dist/redaction.d.cts +17 -0
  282. package/dist/redaction.d.ts +17 -0
  283. package/dist/redaction.js +98 -0
  284. package/dist/redaction.js.map +1 -0
  285. package/dist/{common/packageVersions.cjs → requestAttributes.cjs} +21 -19
  286. package/dist/requestAttributes.cjs.map +1 -0
  287. package/dist/requestAttributes.d.cts +10 -0
  288. package/dist/requestAttributes.d.ts +10 -0
  289. package/dist/requestAttributes.js +22 -0
  290. package/dist/requestAttributes.js.map +1 -0
  291. package/dist/requestObservation.cjs +246 -0
  292. package/dist/requestObservation.cjs.map +1 -0
  293. package/dist/requestObservation.d.cts +62 -0
  294. package/dist/requestObservation.d.ts +62 -0
  295. package/dist/requestObservation.js +226 -0
  296. package/dist/requestObservation.js.map +1 -0
  297. package/dist/requestObservationNode.cjs +193 -0
  298. package/dist/requestObservationNode.cjs.map +1 -0
  299. package/dist/requestObservationNode.d.cts +31 -0
  300. package/dist/requestObservationNode.d.ts +31 -0
  301. package/dist/requestObservationNode.js +170 -0
  302. package/dist/requestObservationNode.js.map +1 -0
  303. package/dist/requestObservationWeb.cjs +202 -0
  304. package/dist/requestObservationWeb.cjs.map +1 -0
  305. package/dist/requestObservationWeb.d.cts +34 -0
  306. package/dist/requestObservationWeb.d.ts +34 -0
  307. package/dist/requestObservationWeb.js +182 -0
  308. package/dist/requestObservationWeb.js.map +1 -0
  309. package/dist/sentry.cjs +103 -0
  310. package/dist/sentry.cjs.map +1 -0
  311. package/dist/sentry.d.cts +3 -0
  312. package/dist/sentry.d.ts +3 -0
  313. package/dist/sentry.js +79 -0
  314. package/dist/sentry.js.map +1 -0
  315. package/dist/serverErrors.cjs +118 -0
  316. package/dist/serverErrors.cjs.map +1 -0
  317. package/dist/serverErrors.d.cts +8 -0
  318. package/dist/serverErrors.d.ts +8 -0
  319. package/dist/serverErrors.js +91 -0
  320. package/dist/serverErrors.js.map +1 -0
  321. package/dist/spanExporter.cjs +217 -0
  322. package/dist/spanExporter.cjs.map +1 -0
  323. package/dist/spanExporter.d.cts +34 -0
  324. package/dist/spanExporter.d.ts +34 -0
  325. package/dist/spanExporter.js +193 -0
  326. package/dist/spanExporter.js.map +1 -0
  327. package/dist/spanProcessor.cjs +535 -0
  328. package/dist/spanProcessor.cjs.map +1 -0
  329. package/dist/spanProcessor.d.cts +70 -0
  330. package/dist/spanProcessor.d.ts +70 -0
  331. package/dist/spanProcessor.js +513 -0
  332. package/dist/spanProcessor.js.map +1 -0
  333. package/dist/spool.cjs +314 -0
  334. package/dist/spool.cjs.map +1 -0
  335. package/dist/spool.d.cts +49 -0
  336. package/dist/spool.d.ts +49 -0
  337. package/dist/spool.js +297 -0
  338. package/dist/spool.js.map +1 -0
  339. package/dist/startup.cjs +98 -0
  340. package/dist/startup.cjs.map +1 -0
  341. package/dist/startup.d.cts +15 -0
  342. package/dist/startup.d.ts +15 -0
  343. package/dist/startup.js +73 -0
  344. package/dist/startup.js.map +1 -0
  345. package/dist/tracing.cjs +116 -0
  346. package/dist/tracing.cjs.map +1 -0
  347. package/dist/tracing.d.cts +5 -0
  348. package/dist/tracing.d.ts +5 -0
  349. package/dist/tracing.js +96 -0
  350. package/dist/tracing.js.map +1 -0
  351. package/dist/validationErrors.cjs +229 -0
  352. package/dist/validationErrors.cjs.map +1 -0
  353. package/dist/validationErrors.d.cts +21 -0
  354. package/dist/validationErrors.d.ts +21 -0
  355. package/dist/validationErrors.js +195 -0
  356. package/dist/validationErrors.js.map +1 -0
  357. package/package.json +113 -154
  358. package/dist/common/client.cjs +0 -335
  359. package/dist/common/client.cjs.map +0 -1
  360. package/dist/common/client.d.cts +0 -50
  361. package/dist/common/client.d.ts +0 -50
  362. package/dist/common/client.js +0 -302
  363. package/dist/common/client.js.map +0 -1
  364. package/dist/common/consumerRegistry.cjs +0 -86
  365. package/dist/common/consumerRegistry.cjs.map +0 -1
  366. package/dist/common/consumerRegistry.d.cts +0 -20
  367. package/dist/common/consumerRegistry.d.ts +0 -20
  368. package/dist/common/consumerRegistry.js +0 -62
  369. package/dist/common/consumerRegistry.js.map +0 -1
  370. package/dist/common/headers.cjs +0 -55
  371. package/dist/common/headers.cjs.map +0 -1
  372. package/dist/common/headers.d.cts +0 -6
  373. package/dist/common/headers.d.ts +0 -6
  374. package/dist/common/headers.js +0 -31
  375. package/dist/common/headers.js.map +0 -1
  376. package/dist/common/instance.cjs +0 -158
  377. package/dist/common/instance.cjs.map +0 -1
  378. package/dist/common/instance.d.cts +0 -4
  379. package/dist/common/instance.d.ts +0 -4
  380. package/dist/common/instance.js +0 -134
  381. package/dist/common/instance.js.map +0 -1
  382. package/dist/common/logging.cjs.map +0 -1
  383. package/dist/common/logging.d.cts +0 -11
  384. package/dist/common/logging.d.ts +0 -11
  385. package/dist/common/logging.js +0 -17
  386. package/dist/common/logging.js.map +0 -1
  387. package/dist/common/packageVersions.cjs.map +0 -1
  388. package/dist/common/packageVersions.d.cts +0 -3
  389. package/dist/common/packageVersions.d.ts +0 -3
  390. package/dist/common/packageVersions.js +0 -21
  391. package/dist/common/packageVersions.js.map +0 -1
  392. package/dist/common/paramValidation.cjs.map +0 -1
  393. package/dist/common/paramValidation.d.cts +0 -4
  394. package/dist/common/paramValidation.d.ts +0 -4
  395. package/dist/common/paramValidation.js +0 -17
  396. package/dist/common/paramValidation.js.map +0 -1
  397. package/dist/common/requestCounter.cjs +0 -114
  398. package/dist/common/requestCounter.cjs.map +0 -1
  399. package/dist/common/requestCounter.d.cts +0 -24
  400. package/dist/common/requestCounter.d.ts +0 -24
  401. package/dist/common/requestCounter.js +0 -91
  402. package/dist/common/requestCounter.js.map +0 -1
  403. package/dist/common/requestLogger.cjs +0 -543
  404. package/dist/common/requestLogger.cjs.map +0 -1
  405. package/dist/common/requestLogger.d.cts +0 -85
  406. package/dist/common/requestLogger.d.ts +0 -85
  407. package/dist/common/requestLogger.js +0 -508
  408. package/dist/common/requestLogger.js.map +0 -1
  409. package/dist/common/resources.cjs +0 -49
  410. package/dist/common/resources.cjs.map +0 -1
  411. package/dist/common/resources.d.cts +0 -6
  412. package/dist/common/resources.d.ts +0 -6
  413. package/dist/common/resources.js +0 -26
  414. package/dist/common/resources.js.map +0 -1
  415. package/dist/common/response.cjs +0 -104
  416. package/dist/common/response.cjs.map +0 -1
  417. package/dist/common/response.d.cts +0 -15
  418. package/dist/common/response.d.ts +0 -15
  419. package/dist/common/response.js +0 -80
  420. package/dist/common/response.js.map +0 -1
  421. package/dist/common/sentry.cjs +0 -56
  422. package/dist/common/sentry.cjs.map +0 -1
  423. package/dist/common/sentry.d.cts +0 -6
  424. package/dist/common/sentry.d.ts +0 -6
  425. package/dist/common/sentry.js +0 -23
  426. package/dist/common/sentry.js.map +0 -1
  427. package/dist/common/serverErrorCounter.cjs +0 -123
  428. package/dist/common/serverErrorCounter.cjs.map +0 -1
  429. package/dist/common/serverErrorCounter.d.cts +0 -23
  430. package/dist/common/serverErrorCounter.d.ts +0 -23
  431. package/dist/common/serverErrorCounter.js +0 -98
  432. package/dist/common/serverErrorCounter.js.map +0 -1
  433. package/dist/common/spanCollector.cjs +0 -201
  434. package/dist/common/spanCollector.cjs.map +0 -1
  435. package/dist/common/spanCollector.d.cts +0 -45
  436. package/dist/common/spanCollector.d.ts +0 -45
  437. package/dist/common/spanCollector.js +0 -177
  438. package/dist/common/spanCollector.js.map +0 -1
  439. package/dist/common/tempGzipFile.cjs +0 -127
  440. package/dist/common/tempGzipFile.cjs.map +0 -1
  441. package/dist/common/tempGzipFile.d.cts +0 -19
  442. package/dist/common/tempGzipFile.d.ts +0 -19
  443. package/dist/common/tempGzipFile.js +0 -103
  444. package/dist/common/tempGzipFile.js.map +0 -1
  445. package/dist/common/types.cjs +0 -17
  446. package/dist/common/types.cjs.map +0 -1
  447. package/dist/common/types.d.cts +0 -95
  448. package/dist/common/types.d.ts +0 -95
  449. package/dist/common/types.js +0 -1
  450. package/dist/common/types.js.map +0 -1
  451. package/dist/common/validationErrorCounter.cjs +0 -79
  452. package/dist/common/validationErrorCounter.cjs.map +0 -1
  453. package/dist/common/validationErrorCounter.d.cts +0 -20
  454. package/dist/common/validationErrorCounter.d.ts +0 -20
  455. package/dist/common/validationErrorCounter.js +0 -56
  456. package/dist/common/validationErrorCounter.js.map +0 -1
  457. package/dist/elysia/plugin.cjs +0 -242
  458. package/dist/elysia/plugin.cjs.map +0 -1
  459. package/dist/elysia/plugin.d.cts +0 -70
  460. package/dist/elysia/plugin.d.ts +0 -70
  461. package/dist/elysia/plugin.js +0 -219
  462. package/dist/elysia/plugin.js.map +0 -1
  463. package/dist/elysia/utils.cjs +0 -77
  464. package/dist/elysia/utils.cjs.map +0 -1
  465. package/dist/elysia/utils.d.cts +0 -14
  466. package/dist/elysia/utils.d.ts +0 -14
  467. package/dist/elysia/utils.js +0 -54
  468. package/dist/elysia/utils.js.map +0 -1
  469. package/dist/express/utils.cjs +0 -217
  470. package/dist/express/utils.cjs.map +0 -1
  471. package/dist/express/utils.d.cts +0 -37
  472. package/dist/express/utils.d.ts +0 -37
  473. package/dist/express/utils.js +0 -189
  474. package/dist/express/utils.js.map +0 -1
  475. package/dist/fastify/plugin.cjs +0 -319
  476. package/dist/fastify/plugin.cjs.map +0 -1
  477. package/dist/fastify/plugin.d.cts +0 -34
  478. package/dist/fastify/plugin.d.ts +0 -34
  479. package/dist/fastify/plugin.js +0 -284
  480. package/dist/fastify/plugin.js.map +0 -1
  481. package/dist/h3/plugin.cjs +0 -183
  482. package/dist/h3/plugin.cjs.map +0 -1
  483. package/dist/h3/plugin.d.cts +0 -27
  484. package/dist/h3/plugin.d.ts +0 -27
  485. package/dist/h3/plugin.js +0 -159
  486. package/dist/h3/plugin.js.map +0 -1
  487. package/dist/h3/utils.cjs +0 -77
  488. package/dist/h3/utils.cjs.map +0 -1
  489. package/dist/h3/utils.d.cts +0 -14
  490. package/dist/h3/utils.d.ts +0 -14
  491. package/dist/h3/utils.js +0 -54
  492. package/dist/h3/utils.js.map +0 -1
  493. package/dist/hapi/plugin.cjs +0 -212
  494. package/dist/hapi/plugin.cjs.map +0 -1
  495. package/dist/hapi/plugin.d.cts +0 -40
  496. package/dist/hapi/plugin.d.ts +0 -40
  497. package/dist/hapi/plugin.js +0 -188
  498. package/dist/hapi/plugin.js.map +0 -1
  499. package/dist/hapi/utils.cjs +0 -77
  500. package/dist/hapi/utils.cjs.map +0 -1
  501. package/dist/hapi/utils.d.cts +0 -16
  502. package/dist/hapi/utils.d.ts +0 -16
  503. package/dist/hapi/utils.js +0 -53
  504. package/dist/hapi/utils.js.map +0 -1
  505. package/dist/hono/utils.cjs +0 -113
  506. package/dist/hono/utils.cjs.map +0 -1
  507. package/dist/hono/utils.d.cts +0 -16
  508. package/dist/hono/utils.d.ts +0 -16
  509. package/dist/hono/utils.js +0 -88
  510. package/dist/hono/utils.js.map +0 -1
  511. package/dist/loggers/console.cjs +0 -67
  512. package/dist/loggers/console.cjs.map +0 -1
  513. package/dist/loggers/console.d.cts +0 -11
  514. package/dist/loggers/console.d.ts +0 -11
  515. package/dist/loggers/console.js +0 -44
  516. package/dist/loggers/console.js.map +0 -1
  517. package/dist/loggers/hapi.cjs.map +0 -1
  518. package/dist/loggers/hapi.d.cts +0 -12
  519. package/dist/loggers/hapi.d.ts +0 -12
  520. package/dist/loggers/hapi.js +0 -29
  521. package/dist/loggers/hapi.js.map +0 -1
  522. package/dist/loggers/index.cjs.map +0 -1
  523. package/dist/loggers/index.d.cts +0 -13
  524. package/dist/loggers/index.d.ts +0 -13
  525. package/dist/loggers/index.js +0 -13
  526. package/dist/loggers/index.js.map +0 -1
  527. package/dist/loggers/nestjs.cjs +0 -104
  528. package/dist/loggers/nestjs.cjs.map +0 -1
  529. package/dist/loggers/nestjs.d.cts +0 -11
  530. package/dist/loggers/nestjs.d.ts +0 -11
  531. package/dist/loggers/nestjs.js +0 -71
  532. package/dist/loggers/nestjs.js.map +0 -1
  533. package/dist/loggers/pino.cjs +0 -152
  534. package/dist/loggers/pino.cjs.map +0 -1
  535. package/dist/loggers/pino.d.cts +0 -11
  536. package/dist/loggers/pino.d.ts +0 -11
  537. package/dist/loggers/pino.js +0 -119
  538. package/dist/loggers/pino.js.map +0 -1
  539. package/dist/loggers/utils.cjs +0 -64
  540. package/dist/loggers/utils.cjs.map +0 -1
  541. package/dist/loggers/utils.d.cts +0 -6
  542. package/dist/loggers/utils.d.ts +0 -6
  543. package/dist/loggers/utils.js +0 -40
  544. package/dist/loggers/utils.js.map +0 -1
  545. package/dist/loggers/winston.cjs +0 -101
  546. package/dist/loggers/winston.cjs.map +0 -1
  547. package/dist/loggers/winston.d.cts +0 -11
  548. package/dist/loggers/winston.d.ts +0 -11
  549. package/dist/loggers/winston.js +0 -68
  550. package/dist/loggers/winston.js.map +0 -1
  551. package/dist/otel/index.cjs.map +0 -1
  552. package/dist/otel/index.d.cts +0 -2
  553. package/dist/otel/index.d.ts +0 -2
  554. package/dist/otel/index.js +0 -5
  555. package/dist/otel/index.js.map +0 -1
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var requestObservationWeb_exports = {};
20
+ __export(requestObservationWeb_exports, {
21
+ captureWebRequestBody: () => captureWebRequestBody,
22
+ captureWebResponse: () => captureWebResponse,
23
+ isWebSocketUpgrade: () => isWebSocketUpgrade,
24
+ startWebRequestObservation: () => startWebRequestObservation
25
+ });
26
+ module.exports = __toCommonJS(requestObservationWeb_exports);
27
+ var import_api = require("@opentelemetry/api");
28
+ var import_bodyCapture = require('./bodyCapture.cjs');
29
+ var import_config = require('./config.cjs');
30
+ var import_requestObservation = require('./requestObservation.cjs');
31
+ const READ_TIMEOUT_MILLIS = 5e3;
32
+ const WEB_HEADERS_GETTER = {
33
+ get: (carrier, key) => carrier.get(key) ?? void 0,
34
+ keys: (carrier) => [...carrier.keys()]
35
+ };
36
+ function isWebSocketUpgrade(request) {
37
+ return request.headers.get("upgrade")?.toLowerCase() === "websocket";
38
+ }
39
+ function startWebRequestObservation(options) {
40
+ const { request } = options;
41
+ const startTimeMillis = performance.now();
42
+ const method = request.method.toUpperCase();
43
+ const requestBodyCapture = new import_bodyCapture.BodyCapture({
44
+ captureBody: (0, import_config.getConfig)().captureRequestBody,
45
+ contentType: request.headers.get("content-type"),
46
+ contentLength: request.headers.get("content-length"),
47
+ transferEncoding: request.headers.get("transfer-encoding")
48
+ });
49
+ const attributeInput = {
50
+ method,
51
+ clientAddress: options.clientAddress,
52
+ userAgent: request.headers.get("user-agent") ?? void 0,
53
+ requestBodySize: requestBodyCapture.size
54
+ };
55
+ let startAttributes = (0, import_requestObservation.resolveHttpRequestStartAttributes)(attributeInput);
56
+ try {
57
+ const url = new URL(request.url);
58
+ startAttributes = (0, import_requestObservation.resolveHttpRequestStartAttributes)({
59
+ ...attributeInput,
60
+ path: url.pathname,
61
+ query: url.search.slice(1) || void 0,
62
+ scheme: url.protocol.replace(/:$/, ""),
63
+ serverAddress: url.hostname,
64
+ fullUrl: request.url
65
+ });
66
+ } catch {
67
+ }
68
+ const { requestRecord, requestContext, spanHandle, rpcMetadata } = (0, import_requestObservation.startRequestObservation)({
69
+ activeContext: import_api.context.active(),
70
+ extractedContext: import_api.propagation.extract(import_api.ROOT_CONTEXT, request.headers, WEB_HEADERS_GETTER),
71
+ tracerName: options.tracerName,
72
+ method,
73
+ startAttributes,
74
+ requestBodyCapture
75
+ });
76
+ return {
77
+ observation: {
78
+ requestRecord,
79
+ spanHandle,
80
+ rpcMetadata,
81
+ requestBodyCapture,
82
+ requestHeaders: request.headers,
83
+ startTimeMillis,
84
+ method
85
+ },
86
+ requestContext
87
+ };
88
+ }
89
+ function captureWebRequestBody(request, bodyCapture, readTimeoutMillis = READ_TIMEOUT_MILLIS) {
90
+ if (!request.body || !bodyCapture.isBuffering) {
91
+ return Promise.resolve();
92
+ }
93
+ let reader;
94
+ try {
95
+ reader = request.clone().body?.getReader();
96
+ } catch {
97
+ return Promise.resolve();
98
+ }
99
+ if (!reader) {
100
+ return Promise.resolve();
101
+ }
102
+ let isStopped = false;
103
+ const readPromise = (async () => {
104
+ try {
105
+ while (true) {
106
+ const { done, value } = await reader.read();
107
+ if (isStopped) {
108
+ return;
109
+ }
110
+ if (done) {
111
+ bodyCapture.markComplete();
112
+ return;
113
+ }
114
+ bodyCapture.addChunk(value);
115
+ if (!bodyCapture.isBuffering) {
116
+ cancelReader(reader);
117
+ return;
118
+ }
119
+ }
120
+ } catch {
121
+ }
122
+ })();
123
+ let readTimeout;
124
+ const timeoutPromise = new Promise((resolve) => {
125
+ readTimeout = setTimeout(() => {
126
+ isStopped = true;
127
+ bodyCapture.stopBuffering();
128
+ cancelReader(reader);
129
+ resolve();
130
+ }, readTimeoutMillis);
131
+ readTimeout.unref();
132
+ });
133
+ return Promise.race([readPromise, timeoutPromise]).finally(() => clearTimeout(readTimeout));
134
+ }
135
+ function captureWebResponse(response, shouldCaptureBody, readTimeoutMillis = READ_TIMEOUT_MILLIS) {
136
+ const bodyCapture = new import_bodyCapture.BodyCapture({
137
+ captureBody: shouldCaptureBody,
138
+ contentType: response.headers.get("content-type"),
139
+ contentLength: response.headers.get("content-length"),
140
+ transferEncoding: response.headers.get("transfer-encoding")
141
+ });
142
+ if (!response.body) {
143
+ bodyCapture.markComplete();
144
+ return {
145
+ response,
146
+ completion: Promise.resolve({
147
+ body: bodyCapture.body,
148
+ size: bodyCapture.size,
149
+ completedAtMillis: performance.now()
150
+ })
151
+ };
152
+ }
153
+ let readStarted = false;
154
+ const { readable, writable } = new TransformStream({
155
+ transform: (chunk, controller) => {
156
+ readStarted = true;
157
+ bodyCapture.addChunk(chunk);
158
+ controller.enqueue(chunk);
159
+ }
160
+ });
161
+ const pipePromise = response.body.pipeTo(writable).then(
162
+ () => {
163
+ const completedAtMillis = performance.now();
164
+ bodyCapture.markComplete();
165
+ return { body: bodyCapture.body, size: bodyCapture.size, completedAtMillis };
166
+ },
167
+ () => ({ completedAtMillis: performance.now() })
168
+ );
169
+ let readTimeout;
170
+ const timeoutPromise = new Promise((resolve) => {
171
+ readTimeout = setTimeout(() => {
172
+ if (!readStarted && !readable.locked) {
173
+ resolve({ completedAtMillis: performance.now() });
174
+ }
175
+ }, readTimeoutMillis);
176
+ readTimeout.unref();
177
+ });
178
+ const capturedResponse = new Response(readable, {
179
+ status: response.status,
180
+ statusText: response.statusText,
181
+ headers: response.headers
182
+ });
183
+ const completion = Promise.race([pipePromise, timeoutPromise]).finally(
184
+ () => clearTimeout(readTimeout)
185
+ );
186
+ return { response: capturedResponse, completion };
187
+ }
188
+ function cancelReader(reader) {
189
+ try {
190
+ reader.cancel().catch(() => {
191
+ });
192
+ } catch {
193
+ }
194
+ }
195
+ // Annotate the CommonJS export names for ESM import in node:
196
+ 0 && (module.exports = {
197
+ captureWebRequestBody,
198
+ captureWebResponse,
199
+ isWebSocketUpgrade,
200
+ startWebRequestObservation
201
+ });
202
+ //# sourceMappingURL=requestObservationWeb.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/requestObservationWeb.ts"],"sourcesContent":["import {\n type Context,\n context,\n propagation,\n ROOT_CONTEXT,\n type TextMapGetter,\n} from \"@opentelemetry/api\";\nimport { BodyCapture, type CapturedBody } from \"./bodyCapture.js\";\nimport { getConfig } from \"./config.js\";\nimport {\n type RequestObservation,\n resolveHttpRequestStartAttributes,\n startRequestObservation,\n} from \"./requestObservation.js\";\n\nconst READ_TIMEOUT_MILLIS = 5_000;\n\nconst WEB_HEADERS_GETTER: TextMapGetter<Headers> = {\n get: (carrier, key) => carrier.get(key) ?? undefined,\n keys: (carrier) => [...carrier.keys()],\n};\n\nexport interface StartWebRequestObservationOptions {\n request: Request;\n tracerName: string;\n clientAddress?: string;\n}\n\nexport function isWebSocketUpgrade(request: Request): boolean {\n return request.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\";\n}\n\nexport interface WebRequestObservation extends RequestObservation {\n requestBodyCapture: BodyCapture;\n requestHeaders: Headers;\n}\n\nexport interface StartedWebRequestObservation {\n observation: WebRequestObservation;\n requestContext: Context;\n}\n\nexport function startWebRequestObservation(\n options: StartWebRequestObservationOptions,\n): StartedWebRequestObservation {\n const { request } = options;\n const startTimeMillis = performance.now();\n const method = request.method.toUpperCase();\n const requestBodyCapture = new BodyCapture({\n captureBody: getConfig().captureRequestBody,\n contentType: request.headers.get(\"content-type\"),\n contentLength: request.headers.get(\"content-length\"),\n transferEncoding: request.headers.get(\"transfer-encoding\"),\n });\n const attributeInput = {\n method,\n clientAddress: options.clientAddress,\n userAgent: request.headers.get(\"user-agent\") ?? undefined,\n requestBodySize: requestBodyCapture.size,\n };\n let startAttributes = resolveHttpRequestStartAttributes(attributeInput);\n try {\n const url = new URL(request.url);\n startAttributes = resolveHttpRequestStartAttributes({\n ...attributeInput,\n path: url.pathname,\n query: url.search.slice(1) || undefined,\n scheme: url.protocol.replace(/:$/, \"\"),\n serverAddress: url.hostname,\n fullUrl: request.url,\n });\n } catch {\n // An unparseable request URL leaves only attributes from other request metadata.\n }\n const { requestRecord, requestContext, spanHandle, rpcMetadata } = startRequestObservation({\n activeContext: context.active(),\n extractedContext: propagation.extract(ROOT_CONTEXT, request.headers, WEB_HEADERS_GETTER),\n tracerName: options.tracerName,\n method,\n startAttributes,\n requestBodyCapture,\n });\n return {\n observation: {\n requestRecord,\n spanHandle,\n rpcMetadata,\n requestBodyCapture,\n requestHeaders: request.headers,\n startTimeMillis,\n method,\n },\n requestContext,\n };\n}\n\nexport function captureWebRequestBody(\n request: Request,\n bodyCapture: BodyCapture,\n readTimeoutMillis: number = READ_TIMEOUT_MILLIS,\n): Promise<void> {\n if (!request.body || !bodyCapture.isBuffering) {\n return Promise.resolve();\n }\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n try {\n reader = request.clone().body?.getReader();\n } catch {\n return Promise.resolve();\n }\n if (!reader) {\n return Promise.resolve();\n }\n let isStopped = false;\n const readPromise = (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (isStopped) {\n return;\n }\n if (done) {\n bodyCapture.markComplete();\n return;\n }\n bodyCapture.addChunk(value);\n if (!bodyCapture.isBuffering) {\n cancelReader(reader);\n return;\n }\n }\n } catch {\n // A partial body is intentionally unavailable when the clone cannot be read.\n }\n })();\n let readTimeout: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<void>((resolve) => {\n readTimeout = setTimeout(() => {\n isStopped = true;\n bodyCapture.stopBuffering();\n cancelReader(reader);\n resolve();\n }, readTimeoutMillis);\n readTimeout.unref();\n });\n return Promise.race([readPromise, timeoutPromise]).finally(() => clearTimeout(readTimeout));\n}\n\nexport interface WebResponseCompletion extends CapturedBody {\n completedAtMillis: number;\n}\n\nexport interface CapturedWebResponse {\n response: Response;\n completion: Promise<WebResponseCompletion>;\n}\n\n// The response is teed so capture does not consume or delay the application's\n// copy. Observation ends on completion, stream failure, or read timeout.\nexport function captureWebResponse(\n response: Response,\n shouldCaptureBody: boolean,\n readTimeoutMillis: number = READ_TIMEOUT_MILLIS,\n): CapturedWebResponse {\n const bodyCapture = new BodyCapture({\n captureBody: shouldCaptureBody,\n contentType: response.headers.get(\"content-type\"),\n contentLength: response.headers.get(\"content-length\"),\n transferEncoding: response.headers.get(\"transfer-encoding\"),\n });\n if (!response.body) {\n bodyCapture.markComplete();\n return {\n response,\n completion: Promise.resolve({\n body: bodyCapture.body,\n size: bodyCapture.size,\n completedAtMillis: performance.now(),\n }),\n };\n }\n let readStarted = false;\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>({\n transform: (chunk, controller) => {\n readStarted = true;\n bodyCapture.addChunk(chunk);\n controller.enqueue(chunk);\n },\n });\n const pipePromise = response.body.pipeTo(writable).then(\n () => {\n const completedAtMillis = performance.now();\n bodyCapture.markComplete();\n return { body: bodyCapture.body, size: bodyCapture.size, completedAtMillis };\n },\n () => ({ completedAtMillis: performance.now() }),\n );\n let readTimeout: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<WebResponseCompletion>((resolve) => {\n readTimeout = setTimeout(() => {\n if (!readStarted && !readable.locked) {\n resolve({ completedAtMillis: performance.now() });\n }\n }, readTimeoutMillis);\n readTimeout.unref();\n });\n const capturedResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n const completion = Promise.race([pipePromise, timeoutPromise]).finally(() =>\n clearTimeout(readTimeout),\n );\n return { response: capturedResponse, completion };\n}\n\nfunction cancelReader(reader: ReadableStreamDefaultReader<Uint8Array>): void {\n try {\n reader.cancel().catch(() => {});\n } catch {\n // Cancellation is best-effort after capture has already stopped.\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,34 @@
1
+ import { Context } from '@opentelemetry/api';
2
+ import { CapturedBody, BodyCapture } from './bodyCapture.cjs';
3
+ import { RequestObservation } from './requestObservation.cjs';
4
+ import '@opentelemetry/core';
5
+ import './context.cjs';
6
+ import './validationErrors.cjs';
7
+ import '@opentelemetry/api-logs';
8
+
9
+ interface StartWebRequestObservationOptions {
10
+ request: Request;
11
+ tracerName: string;
12
+ clientAddress?: string;
13
+ }
14
+ declare function isWebSocketUpgrade(request: Request): boolean;
15
+ interface WebRequestObservation extends RequestObservation {
16
+ requestBodyCapture: BodyCapture;
17
+ requestHeaders: Headers;
18
+ }
19
+ interface StartedWebRequestObservation {
20
+ observation: WebRequestObservation;
21
+ requestContext: Context;
22
+ }
23
+ declare function startWebRequestObservation(options: StartWebRequestObservationOptions): StartedWebRequestObservation;
24
+ declare function captureWebRequestBody(request: Request, bodyCapture: BodyCapture, readTimeoutMillis?: number): Promise<void>;
25
+ interface WebResponseCompletion extends CapturedBody {
26
+ completedAtMillis: number;
27
+ }
28
+ interface CapturedWebResponse {
29
+ response: Response;
30
+ completion: Promise<WebResponseCompletion>;
31
+ }
32
+ declare function captureWebResponse(response: Response, shouldCaptureBody: boolean, readTimeoutMillis?: number): CapturedWebResponse;
33
+
34
+ export { type CapturedWebResponse, type StartWebRequestObservationOptions, type StartedWebRequestObservation, type WebRequestObservation, type WebResponseCompletion, captureWebRequestBody, captureWebResponse, isWebSocketUpgrade, startWebRequestObservation };
@@ -0,0 +1,34 @@
1
+ import { Context } from '@opentelemetry/api';
2
+ import { CapturedBody, BodyCapture } from './bodyCapture.js';
3
+ import { RequestObservation } from './requestObservation.js';
4
+ import '@opentelemetry/core';
5
+ import './context.js';
6
+ import './validationErrors.js';
7
+ import '@opentelemetry/api-logs';
8
+
9
+ interface StartWebRequestObservationOptions {
10
+ request: Request;
11
+ tracerName: string;
12
+ clientAddress?: string;
13
+ }
14
+ declare function isWebSocketUpgrade(request: Request): boolean;
15
+ interface WebRequestObservation extends RequestObservation {
16
+ requestBodyCapture: BodyCapture;
17
+ requestHeaders: Headers;
18
+ }
19
+ interface StartedWebRequestObservation {
20
+ observation: WebRequestObservation;
21
+ requestContext: Context;
22
+ }
23
+ declare function startWebRequestObservation(options: StartWebRequestObservationOptions): StartedWebRequestObservation;
24
+ declare function captureWebRequestBody(request: Request, bodyCapture: BodyCapture, readTimeoutMillis?: number): Promise<void>;
25
+ interface WebResponseCompletion extends CapturedBody {
26
+ completedAtMillis: number;
27
+ }
28
+ interface CapturedWebResponse {
29
+ response: Response;
30
+ completion: Promise<WebResponseCompletion>;
31
+ }
32
+ declare function captureWebResponse(response: Response, shouldCaptureBody: boolean, readTimeoutMillis?: number): CapturedWebResponse;
33
+
34
+ export { type CapturedWebResponse, type StartWebRequestObservationOptions, type StartedWebRequestObservation, type WebRequestObservation, type WebResponseCompletion, captureWebRequestBody, captureWebResponse, isWebSocketUpgrade, startWebRequestObservation };
@@ -0,0 +1,182 @@
1
+ import {
2
+ context,
3
+ propagation,
4
+ ROOT_CONTEXT
5
+ } from "@opentelemetry/api";
6
+ import { BodyCapture } from "./bodyCapture.js";
7
+ import { getConfig } from "./config.js";
8
+ import {
9
+ resolveHttpRequestStartAttributes,
10
+ startRequestObservation
11
+ } from "./requestObservation.js";
12
+ const READ_TIMEOUT_MILLIS = 5e3;
13
+ const WEB_HEADERS_GETTER = {
14
+ get: (carrier, key) => carrier.get(key) ?? void 0,
15
+ keys: (carrier) => [...carrier.keys()]
16
+ };
17
+ function isWebSocketUpgrade(request) {
18
+ return request.headers.get("upgrade")?.toLowerCase() === "websocket";
19
+ }
20
+ function startWebRequestObservation(options) {
21
+ const { request } = options;
22
+ const startTimeMillis = performance.now();
23
+ const method = request.method.toUpperCase();
24
+ const requestBodyCapture = new BodyCapture({
25
+ captureBody: getConfig().captureRequestBody,
26
+ contentType: request.headers.get("content-type"),
27
+ contentLength: request.headers.get("content-length"),
28
+ transferEncoding: request.headers.get("transfer-encoding")
29
+ });
30
+ const attributeInput = {
31
+ method,
32
+ clientAddress: options.clientAddress,
33
+ userAgent: request.headers.get("user-agent") ?? void 0,
34
+ requestBodySize: requestBodyCapture.size
35
+ };
36
+ let startAttributes = resolveHttpRequestStartAttributes(attributeInput);
37
+ try {
38
+ const url = new URL(request.url);
39
+ startAttributes = resolveHttpRequestStartAttributes({
40
+ ...attributeInput,
41
+ path: url.pathname,
42
+ query: url.search.slice(1) || void 0,
43
+ scheme: url.protocol.replace(/:$/, ""),
44
+ serverAddress: url.hostname,
45
+ fullUrl: request.url
46
+ });
47
+ } catch {
48
+ }
49
+ const { requestRecord, requestContext, spanHandle, rpcMetadata } = startRequestObservation({
50
+ activeContext: context.active(),
51
+ extractedContext: propagation.extract(ROOT_CONTEXT, request.headers, WEB_HEADERS_GETTER),
52
+ tracerName: options.tracerName,
53
+ method,
54
+ startAttributes,
55
+ requestBodyCapture
56
+ });
57
+ return {
58
+ observation: {
59
+ requestRecord,
60
+ spanHandle,
61
+ rpcMetadata,
62
+ requestBodyCapture,
63
+ requestHeaders: request.headers,
64
+ startTimeMillis,
65
+ method
66
+ },
67
+ requestContext
68
+ };
69
+ }
70
+ function captureWebRequestBody(request, bodyCapture, readTimeoutMillis = READ_TIMEOUT_MILLIS) {
71
+ if (!request.body || !bodyCapture.isBuffering) {
72
+ return Promise.resolve();
73
+ }
74
+ let reader;
75
+ try {
76
+ reader = request.clone().body?.getReader();
77
+ } catch {
78
+ return Promise.resolve();
79
+ }
80
+ if (!reader) {
81
+ return Promise.resolve();
82
+ }
83
+ let isStopped = false;
84
+ const readPromise = (async () => {
85
+ try {
86
+ while (true) {
87
+ const { done, value } = await reader.read();
88
+ if (isStopped) {
89
+ return;
90
+ }
91
+ if (done) {
92
+ bodyCapture.markComplete();
93
+ return;
94
+ }
95
+ bodyCapture.addChunk(value);
96
+ if (!bodyCapture.isBuffering) {
97
+ cancelReader(reader);
98
+ return;
99
+ }
100
+ }
101
+ } catch {
102
+ }
103
+ })();
104
+ let readTimeout;
105
+ const timeoutPromise = new Promise((resolve) => {
106
+ readTimeout = setTimeout(() => {
107
+ isStopped = true;
108
+ bodyCapture.stopBuffering();
109
+ cancelReader(reader);
110
+ resolve();
111
+ }, readTimeoutMillis);
112
+ readTimeout.unref();
113
+ });
114
+ return Promise.race([readPromise, timeoutPromise]).finally(() => clearTimeout(readTimeout));
115
+ }
116
+ function captureWebResponse(response, shouldCaptureBody, readTimeoutMillis = READ_TIMEOUT_MILLIS) {
117
+ const bodyCapture = new BodyCapture({
118
+ captureBody: shouldCaptureBody,
119
+ contentType: response.headers.get("content-type"),
120
+ contentLength: response.headers.get("content-length"),
121
+ transferEncoding: response.headers.get("transfer-encoding")
122
+ });
123
+ if (!response.body) {
124
+ bodyCapture.markComplete();
125
+ return {
126
+ response,
127
+ completion: Promise.resolve({
128
+ body: bodyCapture.body,
129
+ size: bodyCapture.size,
130
+ completedAtMillis: performance.now()
131
+ })
132
+ };
133
+ }
134
+ let readStarted = false;
135
+ const { readable, writable } = new TransformStream({
136
+ transform: (chunk, controller) => {
137
+ readStarted = true;
138
+ bodyCapture.addChunk(chunk);
139
+ controller.enqueue(chunk);
140
+ }
141
+ });
142
+ const pipePromise = response.body.pipeTo(writable).then(
143
+ () => {
144
+ const completedAtMillis = performance.now();
145
+ bodyCapture.markComplete();
146
+ return { body: bodyCapture.body, size: bodyCapture.size, completedAtMillis };
147
+ },
148
+ () => ({ completedAtMillis: performance.now() })
149
+ );
150
+ let readTimeout;
151
+ const timeoutPromise = new Promise((resolve) => {
152
+ readTimeout = setTimeout(() => {
153
+ if (!readStarted && !readable.locked) {
154
+ resolve({ completedAtMillis: performance.now() });
155
+ }
156
+ }, readTimeoutMillis);
157
+ readTimeout.unref();
158
+ });
159
+ const capturedResponse = new Response(readable, {
160
+ status: response.status,
161
+ statusText: response.statusText,
162
+ headers: response.headers
163
+ });
164
+ const completion = Promise.race([pipePromise, timeoutPromise]).finally(
165
+ () => clearTimeout(readTimeout)
166
+ );
167
+ return { response: capturedResponse, completion };
168
+ }
169
+ function cancelReader(reader) {
170
+ try {
171
+ reader.cancel().catch(() => {
172
+ });
173
+ } catch {
174
+ }
175
+ }
176
+ export {
177
+ captureWebRequestBody,
178
+ captureWebResponse,
179
+ isWebSocketUpgrade,
180
+ startWebRequestObservation
181
+ };
182
+ //# sourceMappingURL=requestObservationWeb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/requestObservationWeb.ts"],"sourcesContent":["import {\n type Context,\n context,\n propagation,\n ROOT_CONTEXT,\n type TextMapGetter,\n} from \"@opentelemetry/api\";\nimport { BodyCapture, type CapturedBody } from \"./bodyCapture.js\";\nimport { getConfig } from \"./config.js\";\nimport {\n type RequestObservation,\n resolveHttpRequestStartAttributes,\n startRequestObservation,\n} from \"./requestObservation.js\";\n\nconst READ_TIMEOUT_MILLIS = 5_000;\n\nconst WEB_HEADERS_GETTER: TextMapGetter<Headers> = {\n get: (carrier, key) => carrier.get(key) ?? undefined,\n keys: (carrier) => [...carrier.keys()],\n};\n\nexport interface StartWebRequestObservationOptions {\n request: Request;\n tracerName: string;\n clientAddress?: string;\n}\n\nexport function isWebSocketUpgrade(request: Request): boolean {\n return request.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\";\n}\n\nexport interface WebRequestObservation extends RequestObservation {\n requestBodyCapture: BodyCapture;\n requestHeaders: Headers;\n}\n\nexport interface StartedWebRequestObservation {\n observation: WebRequestObservation;\n requestContext: Context;\n}\n\nexport function startWebRequestObservation(\n options: StartWebRequestObservationOptions,\n): StartedWebRequestObservation {\n const { request } = options;\n const startTimeMillis = performance.now();\n const method = request.method.toUpperCase();\n const requestBodyCapture = new BodyCapture({\n captureBody: getConfig().captureRequestBody,\n contentType: request.headers.get(\"content-type\"),\n contentLength: request.headers.get(\"content-length\"),\n transferEncoding: request.headers.get(\"transfer-encoding\"),\n });\n const attributeInput = {\n method,\n clientAddress: options.clientAddress,\n userAgent: request.headers.get(\"user-agent\") ?? undefined,\n requestBodySize: requestBodyCapture.size,\n };\n let startAttributes = resolveHttpRequestStartAttributes(attributeInput);\n try {\n const url = new URL(request.url);\n startAttributes = resolveHttpRequestStartAttributes({\n ...attributeInput,\n path: url.pathname,\n query: url.search.slice(1) || undefined,\n scheme: url.protocol.replace(/:$/, \"\"),\n serverAddress: url.hostname,\n fullUrl: request.url,\n });\n } catch {\n // An unparseable request URL leaves only attributes from other request metadata.\n }\n const { requestRecord, requestContext, spanHandle, rpcMetadata } = startRequestObservation({\n activeContext: context.active(),\n extractedContext: propagation.extract(ROOT_CONTEXT, request.headers, WEB_HEADERS_GETTER),\n tracerName: options.tracerName,\n method,\n startAttributes,\n requestBodyCapture,\n });\n return {\n observation: {\n requestRecord,\n spanHandle,\n rpcMetadata,\n requestBodyCapture,\n requestHeaders: request.headers,\n startTimeMillis,\n method,\n },\n requestContext,\n };\n}\n\nexport function captureWebRequestBody(\n request: Request,\n bodyCapture: BodyCapture,\n readTimeoutMillis: number = READ_TIMEOUT_MILLIS,\n): Promise<void> {\n if (!request.body || !bodyCapture.isBuffering) {\n return Promise.resolve();\n }\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n try {\n reader = request.clone().body?.getReader();\n } catch {\n return Promise.resolve();\n }\n if (!reader) {\n return Promise.resolve();\n }\n let isStopped = false;\n const readPromise = (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (isStopped) {\n return;\n }\n if (done) {\n bodyCapture.markComplete();\n return;\n }\n bodyCapture.addChunk(value);\n if (!bodyCapture.isBuffering) {\n cancelReader(reader);\n return;\n }\n }\n } catch {\n // A partial body is intentionally unavailable when the clone cannot be read.\n }\n })();\n let readTimeout: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<void>((resolve) => {\n readTimeout = setTimeout(() => {\n isStopped = true;\n bodyCapture.stopBuffering();\n cancelReader(reader);\n resolve();\n }, readTimeoutMillis);\n readTimeout.unref();\n });\n return Promise.race([readPromise, timeoutPromise]).finally(() => clearTimeout(readTimeout));\n}\n\nexport interface WebResponseCompletion extends CapturedBody {\n completedAtMillis: number;\n}\n\nexport interface CapturedWebResponse {\n response: Response;\n completion: Promise<WebResponseCompletion>;\n}\n\n// The response is teed so capture does not consume or delay the application's\n// copy. Observation ends on completion, stream failure, or read timeout.\nexport function captureWebResponse(\n response: Response,\n shouldCaptureBody: boolean,\n readTimeoutMillis: number = READ_TIMEOUT_MILLIS,\n): CapturedWebResponse {\n const bodyCapture = new BodyCapture({\n captureBody: shouldCaptureBody,\n contentType: response.headers.get(\"content-type\"),\n contentLength: response.headers.get(\"content-length\"),\n transferEncoding: response.headers.get(\"transfer-encoding\"),\n });\n if (!response.body) {\n bodyCapture.markComplete();\n return {\n response,\n completion: Promise.resolve({\n body: bodyCapture.body,\n size: bodyCapture.size,\n completedAtMillis: performance.now(),\n }),\n };\n }\n let readStarted = false;\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>({\n transform: (chunk, controller) => {\n readStarted = true;\n bodyCapture.addChunk(chunk);\n controller.enqueue(chunk);\n },\n });\n const pipePromise = response.body.pipeTo(writable).then(\n () => {\n const completedAtMillis = performance.now();\n bodyCapture.markComplete();\n return { body: bodyCapture.body, size: bodyCapture.size, completedAtMillis };\n },\n () => ({ completedAtMillis: performance.now() }),\n );\n let readTimeout: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<WebResponseCompletion>((resolve) => {\n readTimeout = setTimeout(() => {\n if (!readStarted && !readable.locked) {\n resolve({ completedAtMillis: performance.now() });\n }\n }, readTimeoutMillis);\n readTimeout.unref();\n });\n const capturedResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n const completion = Promise.race([pipePromise, timeoutPromise]).finally(() =>\n clearTimeout(readTimeout),\n );\n return { response: capturedResponse, completion };\n}\n\nfunction cancelReader(reader: ReadableStreamDefaultReader<Uint8Array>): void {\n try {\n reader.cancel().catch(() => {});\n } catch {\n // Cancellation is best-effort after capture has already stopped.\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var sentry_exports = {};
20
+ __export(sentry_exports, {
21
+ installSentryEventIdRecording: () => installSentryEventIdRecording
22
+ });
23
+ module.exports = __toCommonJS(sentry_exports);
24
+ var import_node_module = require("node:module");
25
+ var import_context = require('./context.cjs');
26
+ var import_logger = require('./logger.cjs');
27
+ var import_packageVersion = require('./packageVersion.cjs');
28
+ var import_requestAttributes = require('./requestAttributes.cjs');
29
+ function installSentryEventIdRecording() {
30
+ try {
31
+ const client = getClientThroughPeerResolution() ?? getClientFromGlobalCarrier();
32
+ if (!client) {
33
+ (0, import_logger.logDebug)("No Sentry client was detected");
34
+ return;
35
+ }
36
+ client.on("preprocessEvent", (event) => {
37
+ try {
38
+ if (typeof event.event_id !== "string" || !event.exception?.values?.length) {
39
+ return;
40
+ }
41
+ (0, import_requestAttributes.writeRequestAttribute)(
42
+ (0, import_context.getServerSpan)(),
43
+ (0, import_context.getRequestRecord)(),
44
+ "apitally.exception.sentry_event_id",
45
+ event.event_id
46
+ );
47
+ } catch (error) {
48
+ (0, import_logger.logDebug)(`Error writing the Sentry event id: ${String(error)}`);
49
+ }
50
+ });
51
+ } catch (error) {
52
+ (0, import_logger.logDebug)(`Error setting up the Sentry integration: ${String(error)}`);
53
+ }
54
+ }
55
+ function getClientThroughPeerResolution() {
56
+ try {
57
+ const entryPath = (0, import_packageVersion.resolvePackageEntryPath)("@sentry/node");
58
+ const sentry = (0, import_node_module.createRequire)(entryPath)(entryPath);
59
+ return typeof sentry.getClient === "function" ? asSentryClient(sentry.getClient()) : void 0;
60
+ } catch {
61
+ return void 0;
62
+ }
63
+ }
64
+ function getClientFromGlobalCarrier() {
65
+ const carrier = globalThis.__SENTRY__;
66
+ if (!isRecord(carrier)) {
67
+ return void 0;
68
+ }
69
+ const hub = carrier.hub;
70
+ if (isRecord(hub) && typeof hub.getClient === "function") {
71
+ return asSentryClient(hub.getClient());
72
+ }
73
+ const versioned = typeof carrier.version === "string" ? carrier[carrier.version] : void 0;
74
+ if (!isRecord(versioned)) {
75
+ return void 0;
76
+ }
77
+ const acs = versioned.acs;
78
+ if (isRecord(acs) && typeof acs.getCurrentScope === "function") {
79
+ const scope = acs.getCurrentScope();
80
+ if (isRecord(scope) && typeof scope.getClient === "function") {
81
+ const client = asSentryClient(scope.getClient());
82
+ if (client) {
83
+ return client;
84
+ }
85
+ }
86
+ }
87
+ const defaultScope = versioned.defaultCurrentScope;
88
+ if (isRecord(defaultScope) && typeof defaultScope.getClient === "function") {
89
+ return asSentryClient(defaultScope.getClient());
90
+ }
91
+ return void 0;
92
+ }
93
+ function asSentryClient(value) {
94
+ return isRecord(value) && typeof value.on === "function" ? value : void 0;
95
+ }
96
+ function isRecord(value) {
97
+ return typeof value === "object" && value !== null;
98
+ }
99
+ // Annotate the CommonJS export names for ESM import in node:
100
+ 0 && (module.exports = {
101
+ installSentryEventIdRecording
102
+ });
103
+ //# sourceMappingURL=sentry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sentry.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { getRequestRecord, getServerSpan } from \"./context.js\";\nimport { logDebug } from \"./logger.js\";\nimport { resolvePackageEntryPath } from \"./packageVersion.js\";\nimport { writeRequestAttribute } from \"./requestAttributes.js\";\n\n// Minimal structural types: @sentry/node is an optional peer that is resolved\n// at runtime and never imported.\ninterface SentryEvent {\n event_id?: string;\n exception?: { values?: unknown[] };\n}\n\ninterface SentryClient {\n on(hook: \"preprocessEvent\", callback: (event: SentryEvent) => void): unknown;\n}\n\n// An initialized Sentry client opts in to recording exception event IDs on\n// active SERVER spans. Calls outside a request are no-ops.\nexport function installSentryEventIdRecording(): void {\n try {\n const client = getClientThroughPeerResolution() ?? getClientFromGlobalCarrier();\n if (!client) {\n logDebug(\"No Sentry client was detected\");\n return;\n }\n // preprocessEvent runs before asynchronous event processors can outlive the request.\n client.on(\"preprocessEvent\", (event) => {\n try {\n if (typeof event.event_id !== \"string\" || !event.exception?.values?.length) {\n return;\n }\n writeRequestAttribute(\n getServerSpan(),\n getRequestRecord(),\n \"apitally.exception.sentry_event_id\",\n event.event_id,\n );\n } catch (error) {\n logDebug(`Error writing the Sentry event id: ${String(error)}`);\n }\n });\n } catch (error) {\n logDebug(`Error setting up the Sentry integration: ${String(error)}`);\n }\n}\n\n// getClient() resolves wherever @sentry/node is reachable, including as the\n// transitive dependency of a Sentry wrapper package on npm-style layouts.\nfunction getClientThroughPeerResolution(): SentryClient | undefined {\n try {\n const entryPath = resolvePackageEntryPath(\"@sentry/node\");\n const sentry = createRequire(entryPath)(entryPath) as {\n getClient?: () => unknown;\n };\n return typeof sentry.getClient === \"function\" ? asSentryClient(sentry.getClient()) : undefined;\n } catch {\n return undefined;\n }\n}\n\n// Strict package layouts may prevent peer resolution. Sentry 7 to 10 still\n// expose initialized clients through two globalThis carrier shapes.\nfunction getClientFromGlobalCarrier(): SentryClient | undefined {\n const carrier = (globalThis as { __SENTRY__?: unknown }).__SENTRY__;\n if (!isRecord(carrier)) {\n return undefined;\n }\n const hub = carrier.hub;\n if (isRecord(hub) && typeof hub.getClient === \"function\") {\n return asSentryClient(hub.getClient());\n }\n const versioned = typeof carrier.version === \"string\" ? carrier[carrier.version] : undefined;\n if (!isRecord(versioned)) {\n return undefined;\n }\n const acs = versioned.acs;\n if (isRecord(acs) && typeof acs.getCurrentScope === \"function\") {\n const scope: unknown = acs.getCurrentScope();\n if (isRecord(scope) && typeof scope.getClient === \"function\") {\n const client = asSentryClient(scope.getClient());\n if (client) {\n return client;\n }\n }\n }\n const defaultScope = versioned.defaultCurrentScope;\n if (isRecord(defaultScope) && typeof defaultScope.getClient === \"function\") {\n return asSentryClient(defaultScope.getClient());\n }\n return undefined;\n}\n\nfunction asSentryClient(value: unknown): SentryClient | undefined {\n return isRecord(value) && typeof value.on === \"function\"\n ? (value as unknown as SentryClient)\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA8B;AAC9B,qBAAgD;AAChD,oBAAyB;AACzB,4BAAwC;AACxC,+BAAsC;AAe/B,SAAS,gCAAsC;AACpD,MAAI;AACF,UAAM,SAAS,+BAA+B,KAAK,2BAA2B;AAC9E,QAAI,CAAC,QAAQ;AACX,kCAAS,+BAA+B;AACxC;AAAA,IACF;AAEA,WAAO,GAAG,mBAAmB,CAAC,UAAU;AACtC,UAAI;AACF,YAAI,OAAO,MAAM,aAAa,YAAY,CAAC,MAAM,WAAW,QAAQ,QAAQ;AAC1E;AAAA,QACF;AACA;AAAA,cACE,8BAAc;AAAA,cACd,iCAAiB;AAAA,UACjB;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF,SAAS,OAAO;AACd,oCAAS,sCAAsC,OAAO,KAAK,CAAC,EAAE;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,gCAAS,4CAA4C,OAAO,KAAK,CAAC,EAAE;AAAA,EACtE;AACF;AAIA,SAAS,iCAA2D;AAClE,MAAI;AACF,UAAM,gBAAY,+CAAwB,cAAc;AACxD,UAAM,aAAS,kCAAc,SAAS,EAAE,SAAS;AAGjD,WAAO,OAAO,OAAO,cAAc,aAAa,eAAe,OAAO,UAAU,CAAC,IAAI;AAAA,EACvF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAIA,SAAS,6BAAuD;AAC9D,QAAM,UAAW,WAAwC;AACzD,MAAI,CAAC,SAAS,OAAO,GAAG;AACtB,WAAO;AAAA,EACT;AACA,QAAM,MAAM,QAAQ;AACpB,MAAI,SAAS,GAAG,KAAK,OAAO,IAAI,cAAc,YAAY;AACxD,WAAO,eAAe,IAAI,UAAU,CAAC;AAAA,EACvC;AACA,QAAM,YAAY,OAAO,QAAQ,YAAY,WAAW,QAAQ,QAAQ,OAAO,IAAI;AACnF,MAAI,CAAC,SAAS,SAAS,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,MAAM,UAAU;AACtB,MAAI,SAAS,GAAG,KAAK,OAAO,IAAI,oBAAoB,YAAY;AAC9D,UAAM,QAAiB,IAAI,gBAAgB;AAC3C,QAAI,SAAS,KAAK,KAAK,OAAO,MAAM,cAAc,YAAY;AAC5D,YAAM,SAAS,eAAe,MAAM,UAAU,CAAC;AAC/C,UAAI,QAAQ;AACV,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,QAAM,eAAe,UAAU;AAC/B,MAAI,SAAS,YAAY,KAAK,OAAO,aAAa,cAAc,YAAY;AAC1E,WAAO,eAAe,aAAa,UAAU,CAAC;AAAA,EAChD;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAA0C;AAChE,SAAO,SAAS,KAAK,KAAK,OAAO,MAAM,OAAO,aACzC,QACD;AACN;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function installSentryEventIdRecording(): void;
2
+
3
+ export { installSentryEventIdRecording };
@@ -0,0 +1,3 @@
1
+ declare function installSentryEventIdRecording(): void;
2
+
3
+ export { installSentryEventIdRecording };