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,136 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import {
3
+ context,
4
+ createContextKey,
5
+ propagation,
6
+ SpanKind,
7
+ TraceFlags,
8
+ trace
9
+ } from "@opentelemetry/api";
10
+ import { AsyncLocalStorageContextManager } from "@opentelemetry/context-async-hooks";
11
+ import { W3CTraceContextPropagator } from "@opentelemetry/core";
12
+ import {
13
+ defaultResource,
14
+ detectResources,
15
+ envDetector,
16
+ resourceFromAttributes
17
+ } from "@opentelemetry/resources";
18
+ import { LoggerProvider } from "@opentelemetry/sdk-logs";
19
+ import { MeterProvider } from "@opentelemetry/sdk-metrics";
20
+ import {
21
+ SamplingDecision
22
+ } from "@opentelemetry/sdk-trace-base";
23
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
24
+ import { DEFAULT_ENV, getConfig } from "./config.js";
25
+ import { logDebug, logWarning } from "./logger.js";
26
+ import { getDistroVersion } from "./packageVersion.js";
27
+ const MAX_ATTRIBUTE_VALUE_LENGTH = 65536;
28
+ const DEPLOYMENT_ENVIRONMENT_NAME = "deployment.environment.name";
29
+ class RequestRootedSampler {
30
+ shouldSample(parentContext, _traceId, _spanName, spanKind) {
31
+ const parent = trace.getSpanContext(parentContext);
32
+ const shouldRecord = spanKind === SpanKind.SERVER || parent !== void 0 && !parent.isRemote && (parent.traceFlags & TraceFlags.SAMPLED) !== 0;
33
+ return {
34
+ decision: shouldRecord ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD
35
+ };
36
+ }
37
+ toString() {
38
+ return "RequestRootedSampler";
39
+ }
40
+ }
41
+ function resolveEnvAndCreateResource(hasUserProvider, triggeringResource) {
42
+ const environmentResource = detectResources({ detectors: [envDetector] });
43
+ const env = resolveEnv(hasUserProvider, triggeringResource, environmentResource);
44
+ const resource = defaultResource().merge(environmentResource).merge(
45
+ resourceFromAttributes({
46
+ "service.instance.id": randomUUID(),
47
+ [DEPLOYMENT_ENVIRONMENT_NAME]: env,
48
+ "telemetry.distro.name": "apitally-js",
49
+ "telemetry.distro.version": getDistroVersion()
50
+ })
51
+ );
52
+ return { env, resource };
53
+ }
54
+ function resolveEnv(hasUserProvider, triggeringResource, environmentResource) {
55
+ const configuredEnv = getConfig().env;
56
+ const triggeringResourceEnv = readDeploymentEnvironmentNameFromResource(triggeringResource);
57
+ if (triggeringResourceEnv !== void 0) {
58
+ if (configuredEnv !== DEFAULT_ENV && configuredEnv !== triggeringResourceEnv) {
59
+ logWarning(
60
+ `The configured Apitally env "${configuredEnv}" conflicts with deployment.environment.name=${triggeringResourceEnv} on the OpenTelemetry SERVER span; using "${triggeringResourceEnv}". To resolve this, remove the env option from useApitally() or configure the provider resource with "${configuredEnv}".`
61
+ );
62
+ }
63
+ return triggeringResourceEnv;
64
+ }
65
+ const resourceAttributesEnv = readDeploymentEnvironmentNameFromResource(environmentResource);
66
+ if (!hasUserProvider) {
67
+ return configuredEnv !== DEFAULT_ENV ? configuredEnv : resourceAttributesEnv ?? DEFAULT_ENV;
68
+ }
69
+ if (resourceAttributesEnv === void 0) {
70
+ return configuredEnv;
71
+ }
72
+ if (configuredEnv !== DEFAULT_ENV && configuredEnv !== resourceAttributesEnv) {
73
+ logWarning(
74
+ `The configured Apitally env "${configuredEnv}" conflicts with the OTEL_RESOURCE_ATTRIBUTES entry deployment.environment.name=${resourceAttributesEnv} of the existing OpenTelemetry setup; using "${resourceAttributesEnv}". To resolve this, remove the env option from useApitally() or change the OTEL_RESOURCE_ATTRIBUTES entry to "${configuredEnv}".`
75
+ );
76
+ }
77
+ return resourceAttributesEnv;
78
+ }
79
+ function setupTracerProvider(resource, spanProcessors) {
80
+ const provider = new NodeTracerProvider({
81
+ sampler: new RequestRootedSampler(),
82
+ resource,
83
+ spanProcessors,
84
+ generalLimits: { attributeValueLengthLimit: MAX_ATTRIBUTE_VALUE_LENGTH },
85
+ spanLimits: { attributeValueLengthLimit: MAX_ATTRIBUTE_VALUE_LENGTH }
86
+ });
87
+ if (!trace.setGlobalTracerProvider(provider)) {
88
+ return void 0;
89
+ }
90
+ const contextManager = new AsyncLocalStorageContextManager();
91
+ contextManager.enable();
92
+ if (!context.setGlobalContextManager(contextManager)) {
93
+ try {
94
+ contextManager.disable();
95
+ } catch (error) {
96
+ logDebug(`Error disabling an unused OpenTelemetry context manager: ${String(error)}`);
97
+ }
98
+ warnIfContextDoesNotPropagate();
99
+ }
100
+ propagation.setGlobalPropagator(new W3CTraceContextPropagator());
101
+ return provider;
102
+ }
103
+ function createMeterProvider(resource, readers) {
104
+ return new MeterProvider({ resource, readers });
105
+ }
106
+ function createLoggerProvider(resource, processors) {
107
+ return new LoggerProvider({ resource, processors });
108
+ }
109
+ function readDeploymentEnvironmentNameFromResource(resource) {
110
+ const value = resource?.attributes[DEPLOYMENT_ENVIRONMENT_NAME];
111
+ return typeof value === "string" && value.length > 0 ? value : void 0;
112
+ }
113
+ function warnIfContextDoesNotPropagate() {
114
+ let isPropagated = false;
115
+ try {
116
+ const probeKey = createContextKey("apitally-context-probe");
117
+ isPropagated = context.with(
118
+ context.active().setValue(probeKey, true),
119
+ () => context.active().getValue(probeKey) === true
120
+ );
121
+ } catch (error) {
122
+ logDebug(`Error probing OpenTelemetry context propagation: ${String(error)}`);
123
+ }
124
+ if (!isPropagated) {
125
+ logWarning(
126
+ "OpenTelemetry context propagation is not working, so Apitally cannot associate telemetry with requests. This can happen when conflicting versions of @opentelemetry/api are installed."
127
+ );
128
+ }
129
+ }
130
+ export {
131
+ createLoggerProvider,
132
+ createMeterProvider,
133
+ resolveEnvAndCreateResource,
134
+ setupTracerProvider
135
+ };
136
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providers.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n type Context,\n context,\n createContextKey,\n propagation,\n SpanKind,\n TraceFlags,\n trace,\n} from \"@opentelemetry/api\";\nimport { AsyncLocalStorageContextManager } from \"@opentelemetry/context-async-hooks\";\nimport { W3CTraceContextPropagator } from \"@opentelemetry/core\";\nimport {\n defaultResource,\n detectResources,\n envDetector,\n type Resource,\n resourceFromAttributes,\n} from \"@opentelemetry/resources\";\nimport { LoggerProvider, type LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { type IMetricReader, MeterProvider } from \"@opentelemetry/sdk-metrics\";\nimport {\n type Sampler,\n SamplingDecision,\n type SamplingResult,\n type SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { DEFAULT_ENV, getConfig } from \"./config.js\";\nimport { logDebug, logWarning } from \"./logger.js\";\nimport { getDistroVersion } from \"./packageVersion.js\";\n\nconst MAX_ATTRIBUTE_VALUE_LENGTH = 65_536;\nconst DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\n\nclass RequestRootedSampler implements Sampler {\n shouldSample(\n parentContext: Context,\n _traceId: string,\n _spanName: string,\n spanKind: SpanKind,\n ): SamplingResult {\n const parent = trace.getSpanContext(parentContext);\n const shouldRecord =\n spanKind === SpanKind.SERVER ||\n (parent !== undefined && !parent.isRemote && (parent.traceFlags & TraceFlags.SAMPLED) !== 0);\n return {\n decision: shouldRecord ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD,\n };\n }\n\n toString(): string {\n return \"RequestRootedSampler\";\n }\n}\n\n// Apitally-Env and deployment.environment.name use the same detected resource\n// so they cannot disagree.\nexport function resolveEnvAndCreateResource(\n hasUserProvider: boolean,\n triggeringResource?: Pick<Resource, \"attributes\">,\n): { env: string; resource: Resource } {\n const environmentResource = detectResources({ detectors: [envDetector] });\n const env = resolveEnv(hasUserProvider, triggeringResource, environmentResource);\n // defaultResource() ignores environment variables. Apitally attributes merge\n // last to keep the resource aligned with Apitally-Env.\n const resource = defaultResource()\n .merge(environmentResource)\n .merge(\n resourceFromAttributes({\n \"service.instance.id\": randomUUID(),\n [DEPLOYMENT_ENVIRONMENT_NAME]: env,\n \"telemetry.distro.name\": \"apitally-js\",\n \"telemetry.distro.version\": getDistroVersion(),\n }),\n );\n return { env, resource };\n}\n\nfunction resolveEnv(\n hasUserProvider: boolean,\n triggeringResource: Pick<Resource, \"attributes\"> | undefined,\n environmentResource: Pick<Resource, \"attributes\">,\n): string {\n // The env option and APITALLY_ENV are already resolved into config.env; its\n // default also indicates that neither was configured.\n const configuredEnv = getConfig().env;\n const triggeringResourceEnv = readDeploymentEnvironmentNameFromResource(triggeringResource);\n if (triggeringResourceEnv !== undefined) {\n if (configuredEnv !== DEFAULT_ENV && configuredEnv !== triggeringResourceEnv) {\n logWarning(\n `The configured Apitally env \"${configuredEnv}\" conflicts with deployment.environment.name=${triggeringResourceEnv} on the OpenTelemetry SERVER span; using \"${triggeringResourceEnv}\". To resolve this, remove the env option from useApitally() or configure the provider resource with \"${configuredEnv}\".`,\n );\n }\n return triggeringResourceEnv;\n }\n const resourceAttributesEnv = readDeploymentEnvironmentNameFromResource(environmentResource);\n if (!hasUserProvider) {\n return configuredEnv !== DEFAULT_ENV ? configuredEnv : (resourceAttributesEnv ?? DEFAULT_ENV);\n }\n if (resourceAttributesEnv === undefined) {\n return configuredEnv;\n }\n if (configuredEnv !== DEFAULT_ENV && configuredEnv !== resourceAttributesEnv) {\n logWarning(\n `The configured Apitally env \"${configuredEnv}\" conflicts with the OTEL_RESOURCE_ATTRIBUTES entry deployment.environment.name=${resourceAttributesEnv} of the existing OpenTelemetry setup; using \"${resourceAttributesEnv}\". To resolve this, remove the env option from useApitally() or change the OTEL_RESOURCE_ATTRIBUTES entry to \"${configuredEnv}\".`,\n );\n }\n return resourceAttributesEnv;\n}\n\nexport function setupTracerProvider(\n resource: Resource,\n spanProcessors: SpanProcessor[],\n): NodeTracerProvider | undefined {\n // Explicit sampler and length limits prevent OTel environment variables from\n // dropping upstream-unsampled SERVER spans or truncating long attributes.\n const provider = new NodeTracerProvider({\n sampler: new RequestRootedSampler(),\n resource,\n spanProcessors,\n generalLimits: { attributeValueLengthLimit: MAX_ATTRIBUTE_VALUE_LENGTH },\n spanLimits: { attributeValueLengthLimit: MAX_ATTRIBUTE_VALUE_LENGTH },\n });\n // OTel global setters reject duplicate or version-mismatched registrations,\n // preserving existing registrations.\n if (!trace.setGlobalTracerProvider(provider)) {\n return undefined;\n }\n const contextManager = new AsyncLocalStorageContextManager();\n contextManager.enable();\n if (!context.setGlobalContextManager(contextManager)) {\n try {\n contextManager.disable();\n } catch (error) {\n logDebug(`Error disabling an unused OpenTelemetry context manager: ${String(error)}`);\n }\n warnIfContextDoesNotPropagate();\n }\n propagation.setGlobalPropagator(new W3CTraceContextPropagator());\n return provider;\n}\n\n// Meter and logger providers remain private because global registration could\n// replace or race a user's metrics or logs pipeline.\nexport function createMeterProvider(resource: Resource, readers: IMetricReader[]): MeterProvider {\n return new MeterProvider({ resource, readers });\n}\n\nexport function createLoggerProvider(\n resource: Resource,\n processors: LogRecordProcessor[],\n): LoggerProvider {\n return new LoggerProvider({ resource, processors });\n}\n\nfunction readDeploymentEnvironmentNameFromResource(\n resource: Pick<Resource, \"attributes\"> | undefined,\n): string | undefined {\n const value = resource?.attributes[DEPLOYMENT_ENVIRONMENT_NAME];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\n// OTel exposes no context-manager getter, so a propagated probe verifies\n// registration. Without propagation, request contexts and suppression fail without an error.\nfunction warnIfContextDoesNotPropagate(): void {\n let isPropagated = false;\n try {\n const probeKey = createContextKey(\"apitally-context-probe\");\n isPropagated = context.with(\n context.active().setValue(probeKey, true),\n () => context.active().getValue(probeKey) === true,\n );\n } catch (error) {\n logDebug(`Error probing OpenTelemetry context propagation: ${String(error)}`);\n }\n if (!isPropagated) {\n logWarning(\n \"OpenTelemetry context propagation is not working, so Apitally cannot associate telemetry with requests. This can happen when conflicting versions of @opentelemetry/api are installed.\",\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,116 @@
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 redaction_exports = {};
20
+ __export(redaction_exports, {
21
+ REDACTED: () => REDACTED,
22
+ Redaction: () => Redaction
23
+ });
24
+ module.exports = __toCommonJS(redaction_exports);
25
+ var import_config = require('./config.cjs');
26
+ const REDACTED = "[REDACTED]";
27
+ const URL_HEADER_NAMES = /* @__PURE__ */ new Set(["location", "content-location"]);
28
+ const utf8Decoder = new TextDecoder("utf-8", { fatal: true });
29
+ class Redaction {
30
+ queryParamPatterns;
31
+ headerPatterns;
32
+ bodyFieldPatterns;
33
+ constructor() {
34
+ const config = (0, import_config.getConfig)();
35
+ this.queryParamPatterns = (0, import_config.compilePatterns)(import_config.DEFAULT_MASK_QUERY_PARAMS, config.maskQueryParams);
36
+ this.headerPatterns = (0, import_config.compilePatterns)(import_config.DEFAULT_MASK_HEADERS, config.maskHeaders);
37
+ this.bodyFieldPatterns = (0, import_config.compilePatterns)(import_config.DEFAULT_MASK_BODY_FIELDS, config.maskBodyFields);
38
+ }
39
+ // Redacts matching parameter names in a path with a query, a full URL, or a
40
+ // bare query string when `assumeQuery` is true.
41
+ redactQueryParams(value, assumeQuery = true) {
42
+ const separatorIndex = assumeQuery ? -1 : value.indexOf("?");
43
+ if (separatorIndex === -1 && !assumeQuery) {
44
+ return value;
45
+ }
46
+ const base = separatorIndex === -1 ? "" : value.slice(0, separatorIndex);
47
+ const query = separatorIndex === -1 ? value : value.slice(separatorIndex + 1);
48
+ const redactedParams = new URLSearchParams();
49
+ for (const [name, paramValue] of new URLSearchParams(query)) {
50
+ redactedParams.append(name, this.shouldRedactQueryParam(name) ? REDACTED : paramValue);
51
+ }
52
+ return separatorIndex === -1 ? redactedParams.toString() : `${base}?${redactedParams.toString()}`;
53
+ }
54
+ redactHeaderValue(name, value) {
55
+ if (this.shouldRedactHeader(name)) {
56
+ return Array.isArray(value) ? [REDACTED] : REDACTED;
57
+ }
58
+ if (!URL_HEADER_NAMES.has(name.toLowerCase())) {
59
+ return value;
60
+ }
61
+ if (typeof value === "string") {
62
+ return this.redactQueryParams(value, false);
63
+ }
64
+ if (Array.isArray(value)) {
65
+ return value.map(
66
+ (item) => typeof item === "string" ? this.redactQueryParams(item, false) : item
67
+ );
68
+ }
69
+ return value;
70
+ }
71
+ // Whether a body is JSON is decided by a parse attempt, never by content type.
72
+ redactBody(body) {
73
+ let text;
74
+ try {
75
+ text = utf8Decoder.decode(body);
76
+ } catch {
77
+ return body;
78
+ }
79
+ let data;
80
+ try {
81
+ data = JSON.parse(text);
82
+ } catch {
83
+ return text;
84
+ }
85
+ return JSON.stringify(this.redactBodyFields(data));
86
+ }
87
+ shouldRedactHeader(name) {
88
+ return (0, import_config.matchesAny)(this.headerPatterns, name) || (0, import_config.matchesAny)(this.headerPatterns, name.replaceAll("_", "-"));
89
+ }
90
+ shouldRedactQueryParam(name) {
91
+ return (0, import_config.matchesAny)(this.queryParamPatterns, name);
92
+ }
93
+ shouldRedactBodyField(name) {
94
+ return (0, import_config.matchesAny)(this.bodyFieldPatterns, name);
95
+ }
96
+ redactBodyFields(data) {
97
+ if (Array.isArray(data)) {
98
+ return data.map((item) => this.redactBodyFields(item));
99
+ }
100
+ if (typeof data === "object" && data !== null) {
101
+ return Object.fromEntries(
102
+ Object.entries(data).map(([key, value]) => [
103
+ key,
104
+ typeof value === "string" && this.shouldRedactBodyField(key) ? REDACTED : this.redactBodyFields(value)
105
+ ])
106
+ );
107
+ }
108
+ return data;
109
+ }
110
+ }
111
+ // Annotate the CommonJS export names for ESM import in node:
112
+ 0 && (module.exports = {
113
+ REDACTED,
114
+ Redaction
115
+ });
116
+ //# sourceMappingURL=redaction.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/redaction.ts"],"sourcesContent":["import {\n compilePatterns,\n DEFAULT_MASK_BODY_FIELDS,\n DEFAULT_MASK_HEADERS,\n DEFAULT_MASK_QUERY_PARAMS,\n getConfig,\n matchesAny,\n} from \"./config.js\";\n\nexport const REDACTED = \"[REDACTED]\";\n\n// Location headers can contain secret query values, so redaction targets only\n// their query parameters.\nconst URL_HEADER_NAMES = new Set([\"location\", \"content-location\"]);\n\nconst utf8Decoder = new TextDecoder(\"utf-8\", { fatal: true });\n\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport class Redaction {\n private queryParamPatterns: RegExp[];\n private headerPatterns: RegExp[];\n private bodyFieldPatterns: RegExp[];\n\n constructor() {\n const config = getConfig();\n this.queryParamPatterns = compilePatterns(DEFAULT_MASK_QUERY_PARAMS, config.maskQueryParams);\n this.headerPatterns = compilePatterns(DEFAULT_MASK_HEADERS, config.maskHeaders);\n this.bodyFieldPatterns = compilePatterns(DEFAULT_MASK_BODY_FIELDS, config.maskBodyFields);\n }\n\n // Redacts matching parameter names in a path with a query, a full URL, or a\n // bare query string when `assumeQuery` is true.\n redactQueryParams(value: string, assumeQuery = true): string {\n const separatorIndex = assumeQuery ? -1 : value.indexOf(\"?\");\n if (separatorIndex === -1 && !assumeQuery) {\n return value;\n }\n const base = separatorIndex === -1 ? \"\" : value.slice(0, separatorIndex);\n const query = separatorIndex === -1 ? value : value.slice(separatorIndex + 1);\n const redactedParams = new URLSearchParams();\n for (const [name, paramValue] of new URLSearchParams(query)) {\n redactedParams.append(name, this.shouldRedactQueryParam(name) ? REDACTED : paramValue);\n }\n return separatorIndex === -1\n ? redactedParams.toString()\n : `${base}?${redactedParams.toString()}`;\n }\n\n redactHeaderValue(name: string, value: string | string[]): string | string[];\n redactHeaderValue(name: string, value: unknown): unknown;\n redactHeaderValue(name: string, value: unknown): unknown {\n if (this.shouldRedactHeader(name)) {\n return Array.isArray(value) ? [REDACTED] : REDACTED;\n }\n if (!URL_HEADER_NAMES.has(name.toLowerCase())) {\n return value;\n }\n if (typeof value === \"string\") {\n return this.redactQueryParams(value, false);\n }\n if (Array.isArray(value)) {\n return value.map((item) =>\n typeof item === \"string\" ? this.redactQueryParams(item, false) : item,\n );\n }\n return value;\n }\n\n // Whether a body is JSON is decided by a parse attempt, never by content type.\n redactBody(body: Buffer): string | Buffer {\n let text: string;\n try {\n text = utf8Decoder.decode(body);\n } catch {\n return body;\n }\n let data: JsonValue;\n try {\n data = JSON.parse(text);\n } catch {\n return text;\n }\n return JSON.stringify(this.redactBodyFields(data));\n }\n\n private shouldRedactHeader(name: string): boolean {\n // OpenTelemetry HTTP header attributes normalize hyphens to underscores.\n return (\n matchesAny(this.headerPatterns, name) ||\n matchesAny(this.headerPatterns, name.replaceAll(\"_\", \"-\"))\n );\n }\n\n private shouldRedactQueryParam(name: string): boolean {\n return matchesAny(this.queryParamPatterns, name);\n }\n\n private shouldRedactBodyField(name: string): boolean {\n return matchesAny(this.bodyFieldPatterns, name);\n }\n\n private redactBodyFields(data: JsonValue): JsonValue {\n if (Array.isArray(data)) {\n return data.map((item) => this.redactBodyFields(item));\n }\n if (typeof data === \"object\" && data !== null) {\n return Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n key,\n typeof value === \"string\" && this.shouldRedactBodyField(key)\n ? REDACTED\n : this.redactBodyFields(value),\n ]),\n );\n }\n return data;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,17 @@
1
+ declare const REDACTED = "[REDACTED]";
2
+ declare class Redaction {
3
+ private queryParamPatterns;
4
+ private headerPatterns;
5
+ private bodyFieldPatterns;
6
+ constructor();
7
+ redactQueryParams(value: string, assumeQuery?: boolean): string;
8
+ redactHeaderValue(name: string, value: string | string[]): string | string[];
9
+ redactHeaderValue(name: string, value: unknown): unknown;
10
+ redactBody(body: Buffer): string | Buffer;
11
+ private shouldRedactHeader;
12
+ private shouldRedactQueryParam;
13
+ private shouldRedactBodyField;
14
+ private redactBodyFields;
15
+ }
16
+
17
+ export { REDACTED, Redaction };
@@ -0,0 +1,17 @@
1
+ declare const REDACTED = "[REDACTED]";
2
+ declare class Redaction {
3
+ private queryParamPatterns;
4
+ private headerPatterns;
5
+ private bodyFieldPatterns;
6
+ constructor();
7
+ redactQueryParams(value: string, assumeQuery?: boolean): string;
8
+ redactHeaderValue(name: string, value: string | string[]): string | string[];
9
+ redactHeaderValue(name: string, value: unknown): unknown;
10
+ redactBody(body: Buffer): string | Buffer;
11
+ private shouldRedactHeader;
12
+ private shouldRedactQueryParam;
13
+ private shouldRedactBodyField;
14
+ private redactBodyFields;
15
+ }
16
+
17
+ export { REDACTED, Redaction };
@@ -0,0 +1,98 @@
1
+ import {
2
+ compilePatterns,
3
+ DEFAULT_MASK_BODY_FIELDS,
4
+ DEFAULT_MASK_HEADERS,
5
+ DEFAULT_MASK_QUERY_PARAMS,
6
+ getConfig,
7
+ matchesAny
8
+ } from "./config.js";
9
+ const REDACTED = "[REDACTED]";
10
+ const URL_HEADER_NAMES = /* @__PURE__ */ new Set(["location", "content-location"]);
11
+ const utf8Decoder = new TextDecoder("utf-8", { fatal: true });
12
+ class Redaction {
13
+ queryParamPatterns;
14
+ headerPatterns;
15
+ bodyFieldPatterns;
16
+ constructor() {
17
+ const config = getConfig();
18
+ this.queryParamPatterns = compilePatterns(DEFAULT_MASK_QUERY_PARAMS, config.maskQueryParams);
19
+ this.headerPatterns = compilePatterns(DEFAULT_MASK_HEADERS, config.maskHeaders);
20
+ this.bodyFieldPatterns = compilePatterns(DEFAULT_MASK_BODY_FIELDS, config.maskBodyFields);
21
+ }
22
+ // Redacts matching parameter names in a path with a query, a full URL, or a
23
+ // bare query string when `assumeQuery` is true.
24
+ redactQueryParams(value, assumeQuery = true) {
25
+ const separatorIndex = assumeQuery ? -1 : value.indexOf("?");
26
+ if (separatorIndex === -1 && !assumeQuery) {
27
+ return value;
28
+ }
29
+ const base = separatorIndex === -1 ? "" : value.slice(0, separatorIndex);
30
+ const query = separatorIndex === -1 ? value : value.slice(separatorIndex + 1);
31
+ const redactedParams = new URLSearchParams();
32
+ for (const [name, paramValue] of new URLSearchParams(query)) {
33
+ redactedParams.append(name, this.shouldRedactQueryParam(name) ? REDACTED : paramValue);
34
+ }
35
+ return separatorIndex === -1 ? redactedParams.toString() : `${base}?${redactedParams.toString()}`;
36
+ }
37
+ redactHeaderValue(name, value) {
38
+ if (this.shouldRedactHeader(name)) {
39
+ return Array.isArray(value) ? [REDACTED] : REDACTED;
40
+ }
41
+ if (!URL_HEADER_NAMES.has(name.toLowerCase())) {
42
+ return value;
43
+ }
44
+ if (typeof value === "string") {
45
+ return this.redactQueryParams(value, false);
46
+ }
47
+ if (Array.isArray(value)) {
48
+ return value.map(
49
+ (item) => typeof item === "string" ? this.redactQueryParams(item, false) : item
50
+ );
51
+ }
52
+ return value;
53
+ }
54
+ // Whether a body is JSON is decided by a parse attempt, never by content type.
55
+ redactBody(body) {
56
+ let text;
57
+ try {
58
+ text = utf8Decoder.decode(body);
59
+ } catch {
60
+ return body;
61
+ }
62
+ let data;
63
+ try {
64
+ data = JSON.parse(text);
65
+ } catch {
66
+ return text;
67
+ }
68
+ return JSON.stringify(this.redactBodyFields(data));
69
+ }
70
+ shouldRedactHeader(name) {
71
+ return matchesAny(this.headerPatterns, name) || matchesAny(this.headerPatterns, name.replaceAll("_", "-"));
72
+ }
73
+ shouldRedactQueryParam(name) {
74
+ return matchesAny(this.queryParamPatterns, name);
75
+ }
76
+ shouldRedactBodyField(name) {
77
+ return matchesAny(this.bodyFieldPatterns, name);
78
+ }
79
+ redactBodyFields(data) {
80
+ if (Array.isArray(data)) {
81
+ return data.map((item) => this.redactBodyFields(item));
82
+ }
83
+ if (typeof data === "object" && data !== null) {
84
+ return Object.fromEntries(
85
+ Object.entries(data).map(([key, value]) => [
86
+ key,
87
+ typeof value === "string" && this.shouldRedactBodyField(key) ? REDACTED : this.redactBodyFields(value)
88
+ ])
89
+ );
90
+ }
91
+ return data;
92
+ }
93
+ }
94
+ export {
95
+ REDACTED,
96
+ Redaction
97
+ };
98
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/redaction.ts"],"sourcesContent":["import {\n compilePatterns,\n DEFAULT_MASK_BODY_FIELDS,\n DEFAULT_MASK_HEADERS,\n DEFAULT_MASK_QUERY_PARAMS,\n getConfig,\n matchesAny,\n} from \"./config.js\";\n\nexport const REDACTED = \"[REDACTED]\";\n\n// Location headers can contain secret query values, so redaction targets only\n// their query parameters.\nconst URL_HEADER_NAMES = new Set([\"location\", \"content-location\"]);\n\nconst utf8Decoder = new TextDecoder(\"utf-8\", { fatal: true });\n\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport class Redaction {\n private queryParamPatterns: RegExp[];\n private headerPatterns: RegExp[];\n private bodyFieldPatterns: RegExp[];\n\n constructor() {\n const config = getConfig();\n this.queryParamPatterns = compilePatterns(DEFAULT_MASK_QUERY_PARAMS, config.maskQueryParams);\n this.headerPatterns = compilePatterns(DEFAULT_MASK_HEADERS, config.maskHeaders);\n this.bodyFieldPatterns = compilePatterns(DEFAULT_MASK_BODY_FIELDS, config.maskBodyFields);\n }\n\n // Redacts matching parameter names in a path with a query, a full URL, or a\n // bare query string when `assumeQuery` is true.\n redactQueryParams(value: string, assumeQuery = true): string {\n const separatorIndex = assumeQuery ? -1 : value.indexOf(\"?\");\n if (separatorIndex === -1 && !assumeQuery) {\n return value;\n }\n const base = separatorIndex === -1 ? \"\" : value.slice(0, separatorIndex);\n const query = separatorIndex === -1 ? value : value.slice(separatorIndex + 1);\n const redactedParams = new URLSearchParams();\n for (const [name, paramValue] of new URLSearchParams(query)) {\n redactedParams.append(name, this.shouldRedactQueryParam(name) ? REDACTED : paramValue);\n }\n return separatorIndex === -1\n ? redactedParams.toString()\n : `${base}?${redactedParams.toString()}`;\n }\n\n redactHeaderValue(name: string, value: string | string[]): string | string[];\n redactHeaderValue(name: string, value: unknown): unknown;\n redactHeaderValue(name: string, value: unknown): unknown {\n if (this.shouldRedactHeader(name)) {\n return Array.isArray(value) ? [REDACTED] : REDACTED;\n }\n if (!URL_HEADER_NAMES.has(name.toLowerCase())) {\n return value;\n }\n if (typeof value === \"string\") {\n return this.redactQueryParams(value, false);\n }\n if (Array.isArray(value)) {\n return value.map((item) =>\n typeof item === \"string\" ? this.redactQueryParams(item, false) : item,\n );\n }\n return value;\n }\n\n // Whether a body is JSON is decided by a parse attempt, never by content type.\n redactBody(body: Buffer): string | Buffer {\n let text: string;\n try {\n text = utf8Decoder.decode(body);\n } catch {\n return body;\n }\n let data: JsonValue;\n try {\n data = JSON.parse(text);\n } catch {\n return text;\n }\n return JSON.stringify(this.redactBodyFields(data));\n }\n\n private shouldRedactHeader(name: string): boolean {\n // OpenTelemetry HTTP header attributes normalize hyphens to underscores.\n return (\n matchesAny(this.headerPatterns, name) ||\n matchesAny(this.headerPatterns, name.replaceAll(\"_\", \"-\"))\n );\n }\n\n private shouldRedactQueryParam(name: string): boolean {\n return matchesAny(this.queryParamPatterns, name);\n }\n\n private shouldRedactBodyField(name: string): boolean {\n return matchesAny(this.bodyFieldPatterns, name);\n }\n\n private redactBodyFields(data: JsonValue): JsonValue {\n if (Array.isArray(data)) {\n return data.map((item) => this.redactBodyFields(item));\n }\n if (typeof data === \"object\" && data !== null) {\n return Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n key,\n typeof value === \"string\" && this.shouldRedactBodyField(key)\n ? REDACTED\n : this.redactBodyFields(value),\n ]),\n );\n }\n return data;\n }\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
6
  var __export = (target, all) => {
8
7
  for (var name in all)
9
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -17,29 +16,32 @@ var __copyProps = (to, from, except, desc) => {
17
16
  return to;
18
17
  };
19
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var packageVersions_exports = {};
21
- __export(packageVersions_exports, {
22
- getPackageVersion: () => getPackageVersion
19
+ var requestAttributes_exports = {};
20
+ __export(requestAttributes_exports, {
21
+ setRequestAttribute: () => setRequestAttribute,
22
+ writeRequestAttribute: () => writeRequestAttribute
23
23
  });
24
- module.exports = __toCommonJS(packageVersions_exports);
25
- const import_meta = {};
26
- var import_node_module = require("node:module");
27
- function getPackageVersion(name) {
28
- const packageJsonPath = `${name}/package.json`;
24
+ module.exports = __toCommonJS(requestAttributes_exports);
25
+ var import_context = require('./context.cjs');
26
+ var import_logger = require('./logger.cjs');
27
+ function setRequestAttribute(key, value) {
29
28
  try {
30
- return require(packageJsonPath).version || null;
29
+ writeRequestAttribute((0, import_context.getServerSpan)(), (0, import_context.getRequestRecord)(), key, value);
31
30
  } catch (error) {
32
- try {
33
- const _require = (0, import_node_module.createRequire)(import_meta.url);
34
- return _require(packageJsonPath).version || null;
35
- } catch (error2) {
36
- return null;
37
- }
31
+ (0, import_logger.logDebug)(`Error setting request attribute: ${String(error)}`);
32
+ }
33
+ }
34
+ function writeRequestAttribute(span, record, key, value) {
35
+ if (span?.isRecording()) {
36
+ span.setAttribute(key, value);
37
+ }
38
+ if (record) {
39
+ record.attributes[key] = value;
38
40
  }
39
41
  }
40
- __name(getPackageVersion, "getPackageVersion");
41
42
  // Annotate the CommonJS export names for ESM import in node:
42
43
  0 && (module.exports = {
43
- getPackageVersion
44
+ setRequestAttribute,
45
+ writeRequestAttribute
44
46
  });
45
- //# sourceMappingURL=packageVersions.cjs.map
47
+ //# sourceMappingURL=requestAttributes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/requestAttributes.ts"],"sourcesContent":["import type { AttributeValue, Span } from \"@opentelemetry/api\";\nimport { getRequestRecord, getServerSpan, type RequestRecord } from \"./context.js\";\nimport { logDebug } from \"./logger.js\";\n\nexport function setRequestAttribute(key: string, value: AttributeValue): void {\n try {\n writeRequestAttribute(getServerSpan(), getRequestRecord(), key, value);\n } catch (error) {\n logDebug(`Error setting request attribute: ${String(error)}`);\n }\n}\n\n// Mirroring attributes into the request record preserves values learned after\n// the live span stops recording.\nexport function writeRequestAttribute(\n span: Span | undefined,\n record: RequestRecord | undefined,\n key: string,\n value: AttributeValue,\n): void {\n if (span?.isRecording()) {\n span.setAttribute(key, value);\n }\n if (record) {\n record.attributes[key] = value;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAoE;AACpE,oBAAyB;AAElB,SAAS,oBAAoB,KAAa,OAA6B;AAC5E,MAAI;AACF,8BAAsB,8BAAc,OAAG,iCAAiB,GAAG,KAAK,KAAK;AAAA,EACvE,SAAS,OAAO;AACd,gCAAS,oCAAoC,OAAO,KAAK,CAAC,EAAE;AAAA,EAC9D;AACF;AAIO,SAAS,sBACd,MACA,QACA,KACA,OACM;AACN,MAAI,MAAM,YAAY,GAAG;AACvB,SAAK,aAAa,KAAK,KAAK;AAAA,EAC9B;AACA,MAAI,QAAQ;AACV,WAAO,WAAW,GAAG,IAAI;AAAA,EAC3B;AACF;","names":[]}
@@ -0,0 +1,10 @@
1
+ import { AttributeValue, Span } from '@opentelemetry/api';
2
+ import { RequestRecord } from './context.cjs';
3
+ import '@opentelemetry/core';
4
+ import './validationErrors.cjs';
5
+ import '@opentelemetry/api-logs';
6
+
7
+ declare function setRequestAttribute(key: string, value: AttributeValue): void;
8
+ declare function writeRequestAttribute(span: Span | undefined, record: RequestRecord | undefined, key: string, value: AttributeValue): void;
9
+
10
+ export { setRequestAttribute, writeRequestAttribute };
@@ -0,0 +1,10 @@
1
+ import { AttributeValue, Span } from '@opentelemetry/api';
2
+ import { RequestRecord } from './context.js';
3
+ import '@opentelemetry/core';
4
+ import './validationErrors.js';
5
+ import '@opentelemetry/api-logs';
6
+
7
+ declare function setRequestAttribute(key: string, value: AttributeValue): void;
8
+ declare function writeRequestAttribute(span: Span | undefined, record: RequestRecord | undefined, key: string, value: AttributeValue): void;
9
+
10
+ export { setRequestAttribute, writeRequestAttribute };
@@ -0,0 +1,22 @@
1
+ import { getRequestRecord, getServerSpan } from "./context.js";
2
+ import { logDebug } from "./logger.js";
3
+ function setRequestAttribute(key, value) {
4
+ try {
5
+ writeRequestAttribute(getServerSpan(), getRequestRecord(), key, value);
6
+ } catch (error) {
7
+ logDebug(`Error setting request attribute: ${String(error)}`);
8
+ }
9
+ }
10
+ function writeRequestAttribute(span, record, key, value) {
11
+ if (span?.isRecording()) {
12
+ span.setAttribute(key, value);
13
+ }
14
+ if (record) {
15
+ record.attributes[key] = value;
16
+ }
17
+ }
18
+ export {
19
+ setRequestAttribute,
20
+ writeRequestAttribute
21
+ };
22
+ //# sourceMappingURL=requestAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/requestAttributes.ts"],"sourcesContent":["import type { AttributeValue, Span } from \"@opentelemetry/api\";\nimport { getRequestRecord, getServerSpan, type RequestRecord } from \"./context.js\";\nimport { logDebug } from \"./logger.js\";\n\nexport function setRequestAttribute(key: string, value: AttributeValue): void {\n try {\n writeRequestAttribute(getServerSpan(), getRequestRecord(), key, value);\n } catch (error) {\n logDebug(`Error setting request attribute: ${String(error)}`);\n }\n}\n\n// Mirroring attributes into the request record preserves values learned after\n// the live span stops recording.\nexport function writeRequestAttribute(\n span: Span | undefined,\n record: RequestRecord | undefined,\n key: string,\n value: AttributeValue,\n): void {\n if (span?.isRecording()) {\n span.setAttribute(key, value);\n }\n if (record) {\n record.attributes[key] = value;\n }\n}\n"],"mappings":"AACA,SAAS,kBAAkB,qBAAyC;AACpE,SAAS,gBAAgB;AAElB,SAAS,oBAAoB,KAAa,OAA6B;AAC5E,MAAI;AACF,0BAAsB,cAAc,GAAG,iBAAiB,GAAG,KAAK,KAAK;AAAA,EACvE,SAAS,OAAO;AACd,aAAS,oCAAoC,OAAO,KAAK,CAAC,EAAE;AAAA,EAC9D;AACF;AAIO,SAAS,sBACd,MACA,QACA,KACA,OACM;AACN,MAAI,MAAM,YAAY,GAAG;AACvB,SAAK,aAAa,KAAK,KAAK;AAAA,EAC9B;AACA,MAAI,QAAQ;AACV,WAAO,WAAW,GAAG,IAAI;AAAA,EAC3B;AACF;","names":[]}