apitally 0.25.7 → 1.0.0-alpha.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 (549) hide show
  1. package/README.md +191 -184
  2. package/dist/activation.cjs +371 -0
  3. package/dist/activation.cjs.map +1 -0
  4. package/dist/activation.d.cts +41 -0
  5. package/dist/activation.d.ts +41 -0
  6. package/dist/activation.js +357 -0
  7. package/dist/activation.js.map +1 -0
  8. package/dist/adonisjs/configure.cjs +88 -31
  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 +85 -30
  13. package/dist/adonisjs/configure.js.map +1 -1
  14. package/dist/adonisjs/index.cjs +4 -23
  15. package/dist/adonisjs/index.cjs.map +1 -1
  16. package/dist/adonisjs/index.d.cts +3 -15
  17. package/dist/adonisjs/index.d.ts +3 -15
  18. package/dist/adonisjs/index.js +3 -20
  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 +209 -0
  40. package/dist/config.cjs.map +1 -0
  41. package/dist/config.d.cts +42 -0
  42. package/dist/config.d.ts +42 -0
  43. package/dist/config.js +174 -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 +13 -0
  48. package/dist/consumer.d.ts +13 -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 +29 -0
  54. package/dist/context.d.ts +29 -0
  55. package/dist/context.js +40 -0
  56. package/dist/context.js.map +1 -0
  57. package/dist/elysia/index.cjs +12 -13
  58. package/dist/elysia/index.cjs.map +1 -1
  59. package/dist/elysia/index.d.cts +7 -16
  60. package/dist/elysia/index.d.ts +7 -16
  61. package/dist/elysia/index.js +10 -2
  62. package/dist/elysia/index.js.map +1 -1
  63. package/dist/elysia/middleware.cjs +248 -0
  64. package/dist/elysia/middleware.cjs.map +1 -0
  65. package/dist/elysia/middleware.d.cts +13 -0
  66. package/dist/elysia/middleware.d.ts +13 -0
  67. package/dist/elysia/middleware.js +237 -0
  68. package/dist/elysia/middleware.js.map +1 -0
  69. package/dist/{loggers/index.cjs → elysia/routes.cjs} +16 -19
  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 +75 -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 +49 -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 +6 -10
  96. package/dist/express/index.d.ts +6 -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 +9 -0
  102. package/dist/express/install.d.ts +9 -0
  103. package/dist/express/install.js +21 -0
  104. package/dist/express/install.js.map +1 -0
  105. package/dist/express/middleware.cjs +80 -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 +81 -328
  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 +419 -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 +391 -0
  122. package/dist/express/routes.js.map +1 -0
  123. package/dist/fastify/index.cjs +10 -15
  124. package/dist/fastify/index.cjs.map +1 -1
  125. package/dist/fastify/index.d.cts +6 -11
  126. package/dist/fastify/index.d.ts +6 -11
  127. package/dist/fastify/index.js +9 -3
  128. package/dist/fastify/index.js.map +1 -1
  129. package/dist/{common/logging.cjs → fastify/install.cjs} +15 -16
  130. package/dist/fastify/install.cjs.map +1 -0
  131. package/dist/fastify/install.d.cts +9 -0
  132. package/dist/fastify/install.d.ts +9 -0
  133. package/dist/fastify/install.js +15 -0
  134. package/dist/fastify/install.js.map +1 -0
  135. package/dist/fastify/middleware.cjs +118 -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 +97 -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 +7 -10
  150. package/dist/h3/index.d.ts +7 -10
  151. package/dist/h3/index.js +26 -2
  152. package/dist/h3/index.js.map +1 -1
  153. package/dist/h3/middleware.cjs +204 -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 +188 -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 -14
  166. package/dist/hapi/index.cjs.map +1 -1
  167. package/dist/hapi/index.d.cts +7 -10
  168. package/dist/hapi/index.d.ts +7 -10
  169. package/dist/hapi/index.js +14 -3
  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 +7 -0
  174. package/dist/hapi/install.d.ts +7 -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/hapi/routes.cjs +37 -0
  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 +6 -10
  192. package/dist/hono/index.d.ts +6 -10
  193. package/dist/hono/index.js +13 -2
  194. package/dist/hono/index.js.map +1 -1
  195. package/dist/hono/middleware.cjs +211 -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 +216 -125
  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 +28 -1
  210. package/dist/index.d.ts +28 -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 +6 -10
  216. package/dist/koa/index.d.ts +6 -10
  217. package/dist/koa/index.js +13 -2
  218. package/dist/koa/index.js.map +1 -1
  219. package/dist/koa/middleware.cjs +75 -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 +78 -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 +410 -0
  232. package/dist/logCapture.cjs.map +1 -0
  233. package/dist/logCapture.d.cts +16 -0
  234. package/dist/logCapture.d.ts +16 -0
  235. package/dist/logCapture.js +383 -0
  236. package/dist/logCapture.js.map +1 -0
  237. package/dist/logRecordExporter.cjs +83 -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 +59 -0
  242. package/dist/logRecordExporter.js.map +1 -0
  243. package/dist/logRecordProcessor.cjs +120 -0
  244. package/dist/logRecordProcessor.cjs.map +1 -0
  245. package/dist/logRecordProcessor.d.cts +23 -0
  246. package/dist/logRecordProcessor.d.ts +23 -0
  247. package/dist/logRecordProcessor.js +96 -0
  248. package/dist/logRecordProcessor.js.map +1 -0
  249. package/dist/{otel/index.cjs → logRecordTruncation.cjs} +10 -7
  250. package/dist/logRecordTruncation.cjs.map +1 -0
  251. package/dist/logRecordTruncation.d.cts +6 -0
  252. package/dist/logRecordTruncation.d.ts +6 -0
  253. package/dist/logRecordTruncation.js +8 -0
  254. package/dist/logRecordTruncation.js.map +1 -0
  255. package/dist/logger.cjs +62 -0
  256. package/dist/logger.cjs.map +1 -0
  257. package/dist/logger.d.cts +7 -0
  258. package/dist/logger.d.ts +7 -0
  259. package/dist/logger.js +34 -0
  260. package/dist/logger.js.map +1 -0
  261. package/dist/metrics.cjs +171 -0
  262. package/dist/metrics.cjs.map +1 -0
  263. package/dist/metrics.d.cts +24 -0
  264. package/dist/metrics.d.ts +24 -0
  265. package/dist/metrics.js +153 -0
  266. package/dist/metrics.js.map +1 -0
  267. package/dist/nestjs/index.cjs +61 -71
  268. package/dist/nestjs/index.cjs.map +1 -1
  269. package/dist/nestjs/index.d.cts +3 -11
  270. package/dist/nestjs/index.d.ts +3 -11
  271. package/dist/nestjs/index.js +61 -61
  272. package/dist/nestjs/index.js.map +1 -1
  273. package/dist/packageVersion.cjs +67 -0
  274. package/dist/packageVersion.cjs.map +1 -0
  275. package/dist/packageVersion.d.cts +5 -0
  276. package/dist/packageVersion.d.ts +5 -0
  277. package/dist/packageVersion.js +39 -0
  278. package/dist/packageVersion.js.map +1 -0
  279. package/dist/providers.cjs +149 -0
  280. package/dist/providers.cjs.map +1 -0
  281. package/dist/providers.d.cts +15 -0
  282. package/dist/providers.d.ts +15 -0
  283. package/dist/providers.js +136 -0
  284. package/dist/providers.js.map +1 -0
  285. package/dist/redaction.cjs +116 -0
  286. package/dist/redaction.cjs.map +1 -0
  287. package/dist/redaction.d.cts +17 -0
  288. package/dist/redaction.d.ts +17 -0
  289. package/dist/redaction.js +98 -0
  290. package/dist/redaction.js.map +1 -0
  291. package/dist/{common/packageVersions.cjs → requestAttributes.cjs} +21 -19
  292. package/dist/requestAttributes.cjs.map +1 -0
  293. package/dist/requestAttributes.d.cts +8 -0
  294. package/dist/requestAttributes.d.ts +8 -0
  295. package/dist/requestAttributes.js +22 -0
  296. package/dist/requestAttributes.js.map +1 -0
  297. package/dist/requestObservation.cjs +228 -0
  298. package/dist/requestObservation.cjs.map +1 -0
  299. package/dist/requestObservation.d.cts +60 -0
  300. package/dist/requestObservation.d.ts +60 -0
  301. package/dist/requestObservation.js +208 -0
  302. package/dist/requestObservation.js.map +1 -0
  303. package/dist/requestObservationNode.cjs +193 -0
  304. package/dist/requestObservationNode.cjs.map +1 -0
  305. package/dist/requestObservationNode.d.cts +29 -0
  306. package/dist/requestObservationNode.d.ts +29 -0
  307. package/dist/requestObservationNode.js +170 -0
  308. package/dist/requestObservationNode.js.map +1 -0
  309. package/dist/requestObservationWeb.cjs +202 -0
  310. package/dist/requestObservationWeb.cjs.map +1 -0
  311. package/dist/requestObservationWeb.d.cts +32 -0
  312. package/dist/requestObservationWeb.d.ts +32 -0
  313. package/dist/requestObservationWeb.js +182 -0
  314. package/dist/requestObservationWeb.js.map +1 -0
  315. package/dist/sentry.cjs +103 -0
  316. package/dist/sentry.cjs.map +1 -0
  317. package/dist/sentry.d.cts +3 -0
  318. package/dist/sentry.d.ts +3 -0
  319. package/dist/sentry.js +79 -0
  320. package/dist/sentry.js.map +1 -0
  321. package/dist/spanExporter.cjs +218 -0
  322. package/dist/spanExporter.cjs.map +1 -0
  323. package/dist/spanExporter.d.cts +33 -0
  324. package/dist/spanExporter.d.ts +33 -0
  325. package/dist/spanExporter.js +194 -0
  326. package/dist/spanExporter.js.map +1 -0
  327. package/dist/spanProcessor.cjs +523 -0
  328. package/dist/spanProcessor.cjs.map +1 -0
  329. package/dist/spanProcessor.d.cts +67 -0
  330. package/dist/spanProcessor.d.ts +67 -0
  331. package/dist/spanProcessor.js +501 -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 +93 -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 +68 -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/package.json +113 -155
  352. package/dist/common/client.cjs +0 -335
  353. package/dist/common/client.cjs.map +0 -1
  354. package/dist/common/client.d.cts +0 -50
  355. package/dist/common/client.d.ts +0 -50
  356. package/dist/common/client.js +0 -302
  357. package/dist/common/client.js.map +0 -1
  358. package/dist/common/consumerRegistry.cjs +0 -84
  359. package/dist/common/consumerRegistry.cjs.map +0 -1
  360. package/dist/common/consumerRegistry.d.cts +0 -20
  361. package/dist/common/consumerRegistry.d.ts +0 -20
  362. package/dist/common/consumerRegistry.js +0 -61
  363. package/dist/common/consumerRegistry.js.map +0 -1
  364. package/dist/common/headers.cjs +0 -55
  365. package/dist/common/headers.cjs.map +0 -1
  366. package/dist/common/headers.d.cts +0 -6
  367. package/dist/common/headers.d.ts +0 -6
  368. package/dist/common/headers.js +0 -31
  369. package/dist/common/headers.js.map +0 -1
  370. package/dist/common/instance.cjs +0 -158
  371. package/dist/common/instance.cjs.map +0 -1
  372. package/dist/common/instance.d.cts +0 -4
  373. package/dist/common/instance.d.ts +0 -4
  374. package/dist/common/instance.js +0 -134
  375. package/dist/common/instance.js.map +0 -1
  376. package/dist/common/logging.cjs.map +0 -1
  377. package/dist/common/logging.d.cts +0 -11
  378. package/dist/common/logging.d.ts +0 -11
  379. package/dist/common/logging.js +0 -17
  380. package/dist/common/logging.js.map +0 -1
  381. package/dist/common/packageVersions.cjs.map +0 -1
  382. package/dist/common/packageVersions.d.cts +0 -3
  383. package/dist/common/packageVersions.d.ts +0 -3
  384. package/dist/common/packageVersions.js +0 -21
  385. package/dist/common/packageVersions.js.map +0 -1
  386. package/dist/common/paramValidation.cjs.map +0 -1
  387. package/dist/common/paramValidation.d.cts +0 -4
  388. package/dist/common/paramValidation.d.ts +0 -4
  389. package/dist/common/paramValidation.js +0 -17
  390. package/dist/common/paramValidation.js.map +0 -1
  391. package/dist/common/requestCounter.cjs +0 -109
  392. package/dist/common/requestCounter.cjs.map +0 -1
  393. package/dist/common/requestCounter.d.cts +0 -24
  394. package/dist/common/requestCounter.d.ts +0 -24
  395. package/dist/common/requestCounter.js +0 -90
  396. package/dist/common/requestCounter.js.map +0 -1
  397. package/dist/common/requestLogger.cjs +0 -541
  398. package/dist/common/requestLogger.cjs.map +0 -1
  399. package/dist/common/requestLogger.d.cts +0 -85
  400. package/dist/common/requestLogger.d.ts +0 -85
  401. package/dist/common/requestLogger.js +0 -507
  402. package/dist/common/requestLogger.js.map +0 -1
  403. package/dist/common/resources.cjs +0 -49
  404. package/dist/common/resources.cjs.map +0 -1
  405. package/dist/common/resources.d.cts +0 -6
  406. package/dist/common/resources.d.ts +0 -6
  407. package/dist/common/resources.js +0 -26
  408. package/dist/common/resources.js.map +0 -1
  409. package/dist/common/response.cjs +0 -104
  410. package/dist/common/response.cjs.map +0 -1
  411. package/dist/common/response.d.cts +0 -15
  412. package/dist/common/response.d.ts +0 -15
  413. package/dist/common/response.js +0 -80
  414. package/dist/common/response.js.map +0 -1
  415. package/dist/common/sentry.cjs +0 -56
  416. package/dist/common/sentry.cjs.map +0 -1
  417. package/dist/common/sentry.d.cts +0 -6
  418. package/dist/common/sentry.d.ts +0 -6
  419. package/dist/common/sentry.js +0 -23
  420. package/dist/common/sentry.js.map +0 -1
  421. package/dist/common/serverErrorCounter.cjs +0 -121
  422. package/dist/common/serverErrorCounter.cjs.map +0 -1
  423. package/dist/common/serverErrorCounter.d.cts +0 -23
  424. package/dist/common/serverErrorCounter.d.ts +0 -23
  425. package/dist/common/serverErrorCounter.js +0 -97
  426. package/dist/common/serverErrorCounter.js.map +0 -1
  427. package/dist/common/spanCollector.cjs +0 -199
  428. package/dist/common/spanCollector.cjs.map +0 -1
  429. package/dist/common/spanCollector.d.cts +0 -45
  430. package/dist/common/spanCollector.d.ts +0 -45
  431. package/dist/common/spanCollector.js +0 -176
  432. package/dist/common/spanCollector.js.map +0 -1
  433. package/dist/common/tempGzipFile.cjs +0 -125
  434. package/dist/common/tempGzipFile.cjs.map +0 -1
  435. package/dist/common/tempGzipFile.d.cts +0 -19
  436. package/dist/common/tempGzipFile.d.ts +0 -19
  437. package/dist/common/tempGzipFile.js +0 -102
  438. package/dist/common/tempGzipFile.js.map +0 -1
  439. package/dist/common/types.cjs +0 -17
  440. package/dist/common/types.cjs.map +0 -1
  441. package/dist/common/types.d.cts +0 -95
  442. package/dist/common/types.d.ts +0 -95
  443. package/dist/common/types.js +0 -1
  444. package/dist/common/types.js.map +0 -1
  445. package/dist/common/validationErrorCounter.cjs +0 -74
  446. package/dist/common/validationErrorCounter.cjs.map +0 -1
  447. package/dist/common/validationErrorCounter.d.cts +0 -20
  448. package/dist/common/validationErrorCounter.d.ts +0 -20
  449. package/dist/common/validationErrorCounter.js +0 -55
  450. package/dist/common/validationErrorCounter.js.map +0 -1
  451. package/dist/elysia/plugin.cjs +0 -237
  452. package/dist/elysia/plugin.cjs.map +0 -1
  453. package/dist/elysia/plugin.d.cts +0 -70
  454. package/dist/elysia/plugin.d.ts +0 -70
  455. package/dist/elysia/plugin.js +0 -218
  456. package/dist/elysia/plugin.js.map +0 -1
  457. package/dist/elysia/utils.cjs +0 -77
  458. package/dist/elysia/utils.cjs.map +0 -1
  459. package/dist/elysia/utils.d.cts +0 -14
  460. package/dist/elysia/utils.d.ts +0 -14
  461. package/dist/elysia/utils.js +0 -54
  462. package/dist/elysia/utils.js.map +0 -1
  463. package/dist/express/utils.cjs +0 -217
  464. package/dist/express/utils.cjs.map +0 -1
  465. package/dist/express/utils.d.cts +0 -37
  466. package/dist/express/utils.d.ts +0 -37
  467. package/dist/express/utils.js +0 -189
  468. package/dist/express/utils.js.map +0 -1
  469. package/dist/fastify/plugin.cjs +0 -316
  470. package/dist/fastify/plugin.cjs.map +0 -1
  471. package/dist/fastify/plugin.d.cts +0 -34
  472. package/dist/fastify/plugin.d.ts +0 -34
  473. package/dist/fastify/plugin.js +0 -282
  474. package/dist/fastify/plugin.js.map +0 -1
  475. package/dist/h3/plugin.cjs +0 -183
  476. package/dist/h3/plugin.cjs.map +0 -1
  477. package/dist/h3/plugin.d.cts +0 -27
  478. package/dist/h3/plugin.d.ts +0 -27
  479. package/dist/h3/plugin.js +0 -159
  480. package/dist/h3/plugin.js.map +0 -1
  481. package/dist/h3/utils.cjs +0 -77
  482. package/dist/h3/utils.cjs.map +0 -1
  483. package/dist/h3/utils.d.cts +0 -14
  484. package/dist/h3/utils.d.ts +0 -14
  485. package/dist/h3/utils.js +0 -54
  486. package/dist/h3/utils.js.map +0 -1
  487. package/dist/hapi/plugin.cjs +0 -210
  488. package/dist/hapi/plugin.cjs.map +0 -1
  489. package/dist/hapi/plugin.d.cts +0 -40
  490. package/dist/hapi/plugin.d.ts +0 -40
  491. package/dist/hapi/plugin.js +0 -187
  492. package/dist/hapi/plugin.js.map +0 -1
  493. package/dist/hapi/utils.cjs +0 -77
  494. package/dist/hapi/utils.cjs.map +0 -1
  495. package/dist/hapi/utils.d.cts +0 -16
  496. package/dist/hapi/utils.d.ts +0 -16
  497. package/dist/hapi/utils.js +0 -53
  498. package/dist/hapi/utils.js.map +0 -1
  499. package/dist/hono/utils.cjs +0 -113
  500. package/dist/hono/utils.cjs.map +0 -1
  501. package/dist/hono/utils.d.cts +0 -16
  502. package/dist/hono/utils.d.ts +0 -16
  503. package/dist/hono/utils.js +0 -88
  504. package/dist/hono/utils.js.map +0 -1
  505. package/dist/loggers/console.cjs +0 -67
  506. package/dist/loggers/console.cjs.map +0 -1
  507. package/dist/loggers/console.d.cts +0 -11
  508. package/dist/loggers/console.d.ts +0 -11
  509. package/dist/loggers/console.js +0 -44
  510. package/dist/loggers/console.js.map +0 -1
  511. package/dist/loggers/hapi.cjs.map +0 -1
  512. package/dist/loggers/hapi.d.cts +0 -12
  513. package/dist/loggers/hapi.d.ts +0 -12
  514. package/dist/loggers/hapi.js +0 -29
  515. package/dist/loggers/hapi.js.map +0 -1
  516. package/dist/loggers/index.cjs.map +0 -1
  517. package/dist/loggers/index.d.cts +0 -13
  518. package/dist/loggers/index.d.ts +0 -13
  519. package/dist/loggers/index.js +0 -13
  520. package/dist/loggers/index.js.map +0 -1
  521. package/dist/loggers/nestjs.cjs +0 -104
  522. package/dist/loggers/nestjs.cjs.map +0 -1
  523. package/dist/loggers/nestjs.d.cts +0 -11
  524. package/dist/loggers/nestjs.d.ts +0 -11
  525. package/dist/loggers/nestjs.js +0 -71
  526. package/dist/loggers/nestjs.js.map +0 -1
  527. package/dist/loggers/pino.cjs +0 -152
  528. package/dist/loggers/pino.cjs.map +0 -1
  529. package/dist/loggers/pino.d.cts +0 -11
  530. package/dist/loggers/pino.d.ts +0 -11
  531. package/dist/loggers/pino.js +0 -119
  532. package/dist/loggers/pino.js.map +0 -1
  533. package/dist/loggers/utils.cjs +0 -64
  534. package/dist/loggers/utils.cjs.map +0 -1
  535. package/dist/loggers/utils.d.cts +0 -6
  536. package/dist/loggers/utils.d.ts +0 -6
  537. package/dist/loggers/utils.js +0 -40
  538. package/dist/loggers/utils.js.map +0 -1
  539. package/dist/loggers/winston.cjs +0 -101
  540. package/dist/loggers/winston.cjs.map +0 -1
  541. package/dist/loggers/winston.d.cts +0 -11
  542. package/dist/loggers/winston.d.ts +0 -11
  543. package/dist/loggers/winston.js +0 -68
  544. package/dist/loggers/winston.js.map +0 -1
  545. package/dist/otel/index.cjs.map +0 -1
  546. package/dist/otel/index.d.cts +0 -2
  547. package/dist/otel/index.d.ts +0 -2
  548. package/dist/otel/index.js +0 -5
  549. package/dist/otel/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/spanExporter.ts"],"sourcesContent":["import type { Attributes } from \"@opentelemetry/api\";\nimport { SpanKind } from \"@opentelemetry/api\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ProtobufTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { type Resource, resourceFromAttributes } from \"@opentelemetry/resources\";\nimport type { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, MAX_BODY_SIZE } from \"./bodyCapture.js\";\nimport { type BodyMaskingCallback, DEFAULT_ENV } from \"./config.js\";\nimport { serializeInChunksToSpool } from \"./exportSerialization.js\";\nimport { logWarning } from \"./logger.js\";\nimport { REDACTED, type Redaction } from \"./redaction.js\";\nimport { copySpan, type SpanCopy } from \"./spanProcessor.js\";\nimport type { Spool } from \"./spool.js\";\n\nconst QUERY_ATTRIBUTES = new Set([\"url.query\", \"url.full\", \"http.target\", \"http.url\"]);\nconst REQUEST_HEADER_ATTRIBUTE_PREFIX = \"http.request.header.\";\nconst RESPONSE_HEADER_ATTRIBUTE_PREFIX = \"http.response.header.\";\nconst DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nconst SERVICE_INSTANCE_ID = \"service.instance.id\";\n\nexport interface ApitallySpanExporterOptions {\n redaction: Redaction;\n env: string;\n instanceId: string;\n spool: Spool;\n maskRequestBody?: BodyMaskingCallback;\n maskResponseBody?: BodyMaskingCallback;\n}\n\n// Export copies receive transport attributes, captured data, and redaction\n// without mutating the original spans.\nexport class ApitallySpanExporter implements SpanExporter {\n private readonly redaction: Redaction;\n private readonly env: string;\n private readonly instanceId: string;\n private readonly spool: Spool;\n private readonly maskRequestBody?: BodyMaskingCallback;\n private readonly maskResponseBody?: BodyMaskingCallback;\n\n constructor(options: ApitallySpanExporterOptions) {\n this.redaction = options.redaction;\n this.env = options.env;\n this.instanceId = options.instanceId;\n this.spool = options.spool;\n this.maskRequestBody = options.maskRequestBody;\n this.maskResponseBody = options.maskResponseBody;\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n // Rewritten resources are shared across the batch: the serializer groups\n // resourceSpans by object identity, never by attribute equality.\n const rewrittenResources = new Map<Resource, Resource>();\n const exportCopies: ReadableSpan[] = [];\n for (const span of spans) {\n try {\n exportCopies.push(this.buildExportCopy(span, rewrittenResources));\n } catch {\n // A span that failed redaction must never leave the process.\n logWarning(\"Failed to prepare a span for export to Apitally, so the span was dropped\");\n }\n }\n serializeInChunksToSpool(\n exportCopies,\n (chunk) => ProtobufTraceSerializer.serializeRequest(chunk),\n this.spool,\n \"traces\",\n resultCallback,\n );\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n private buildExportCopy(\n span: ReadableSpan,\n rewrittenResources: Map<Resource, Resource>,\n ): ReadableSpan {\n const data = (span as SpanCopy).apitallyData;\n const stash = data?.stash;\n // The record is applied last: a transport-observed value wins over anything\n // the producing instrumentation set for the same key.\n const attributes: Record<string, unknown> = {\n ...span.attributes,\n ...data?.record?.attributes,\n };\n this.redactQueryAndHeaderAttributes(attributes);\n if (stash?.requestHeaders) {\n writeCapturedHeaderAttributes(\n attributes,\n REQUEST_HEADER_ATTRIBUTE_PREFIX,\n stash.requestHeaders,\n this.redaction,\n );\n }\n if (stash?.responseHeaders) {\n writeCapturedHeaderAttributes(\n attributes,\n RESPONSE_HEADER_ATTRIBUTE_PREFIX,\n stash.responseHeaders,\n this.redaction,\n );\n }\n const copy = copySpan(span);\n copy.attributes = attributes as Attributes;\n copy.resource = this.resolveExportResource(span.resource, rewrittenResources);\n if (data?.demoteToInternal) {\n copy.kind = SpanKind.INTERNAL;\n }\n if (stash && (stash.requestBody !== undefined || stash.responseBody !== undefined)) {\n // Mask callbacks receive the redacted export copy with captured headers\n // attached, but without body attributes.\n const snapshot = copySpan(copy);\n snapshot.attributes = { ...attributes } as Attributes;\n if (stash.requestBody !== undefined) {\n attributes[\"apitally.request.body\"] = this.processBody(\n snapshot,\n stash.requestBody,\n this.maskRequestBody,\n \"maskRequestBody\",\n );\n }\n if (stash.responseBody !== undefined) {\n attributes[\"apitally.response.body\"] = this.processBody(\n snapshot,\n stash.responseBody,\n this.maskResponseBody,\n \"maskResponseBody\",\n );\n }\n }\n return copy;\n }\n\n // OpenTelemetry HTTP instrumentations leave query and header attributes raw.\n // Both legacy and stable HTTP attribute names are redacted before export.\n private redactQueryAndHeaderAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n if (QUERY_ATTRIBUTES.has(key) && typeof value === \"string\") {\n attributes[key] = this.redaction.redactQueryParams(value, key === \"url.query\");\n } else if (\n key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX) ||\n key.startsWith(RESPONSE_HEADER_ATTRIBUTE_PREFIX)\n ) {\n const headerName = key.slice(\n key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX)\n ? REQUEST_HEADER_ATTRIBUTE_PREFIX.length\n : RESPONSE_HEADER_ATTRIBUTE_PREFIX.length,\n );\n attributes[key] = this.redaction.redactHeaderValue(headerName, value);\n }\n }\n }\n\n // Bodies are masked, parsed, field-redacted, and serialized in that order.\n // Masking failures redact the entire body.\n private processBody(\n snapshot: ReadableSpan,\n body: Buffer,\n maskCallback: BodyMaskingCallback | undefined,\n optionName: string,\n ): string | Buffer {\n if (body.equals(BODY_TOO_LARGE_BUFFER)) {\n return BODY_TOO_LARGE;\n }\n let processed = body;\n if (maskCallback) {\n let masked: unknown;\n try {\n masked = maskCallback(body, snapshot);\n } catch {\n logWarning(\n `The Apitally ${optionName} callback threw an error, so the body was replaced with ${REDACTED}`,\n );\n return REDACTED;\n }\n if (masked === null || masked === undefined) {\n return REDACTED;\n }\n if (!Buffer.isBuffer(masked)) {\n logWarning(\n `The Apitally ${optionName} callback returned an invalid value, so the body was replaced with ${REDACTED}. Mask callbacks must synchronously return a Buffer or null.`,\n );\n return REDACTED;\n }\n if (masked.length > MAX_BODY_SIZE) {\n return BODY_TOO_LARGE;\n }\n processed = masked;\n }\n return this.redaction.redactBody(processed);\n }\n\n // Export resources must carry Apitally's process identity and match Apitally-Env.\n // Rewrites apply only to Apitally's copies.\n private resolveExportResource(\n resource: Resource,\n rewrittenResources: Map<Resource, Resource>,\n ): Resource {\n const resourceEnv = resource.attributes[DEPLOYMENT_ENVIRONMENT_NAME];\n const resourceInstanceId = resource.attributes[SERVICE_INSTANCE_ID];\n const envDiffers = typeof resourceEnv === \"string\" && resourceEnv !== this.env;\n const envMissing = resourceEnv === undefined && this.env !== DEFAULT_ENV;\n const instanceIdDiffers = resourceInstanceId !== this.instanceId;\n if (!envDiffers && !envMissing && !instanceIdDiffers) {\n return resource;\n }\n const existing = rewrittenResources.get(resource);\n if (existing) {\n return existing;\n }\n if (envDiffers) {\n logWarning(\n `The tracer provider's resource sets deployment.environment.name to \"${resourceEnv}\", which differs from the Apitally env \"${this.env}\". Spans are exported to Apitally with the env \"${this.env}\".`,\n );\n }\n const attributes: Attributes = {\n ...resource.attributes,\n [SERVICE_INSTANCE_ID]: this.instanceId,\n };\n if (envDiffers || envMissing) {\n attributes[DEPLOYMENT_ENVIRONMENT_NAME] = this.env;\n }\n const rewritten = resourceFromAttributes(attributes);\n rewrittenResources.set(resource, rewritten);\n return rewritten;\n }\n}\n\nfunction writeCapturedHeaderAttributes(\n attributes: Record<string, unknown>,\n prefix: string,\n headers: Record<string, string | string[]>,\n redaction: Redaction,\n): void {\n for (const [name, values] of Object.entries(headers)) {\n const redactedValues = redaction.redactHeaderValue(name, values);\n attributes[prefix + name] = Array.isArray(redactedValues) ? redactedValues : [redactedValues];\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,33 @@
1
+ import { ExportResult } from '@opentelemetry/core';
2
+ import { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
3
+ import { BodyMaskingCallback } from './config.cjs';
4
+ import { Redaction } from './redaction.cjs';
5
+ import { Spool } from './spool.cjs';
6
+ import 'node:zlib';
7
+
8
+ interface ApitallySpanExporterOptions {
9
+ redaction: Redaction;
10
+ env: string;
11
+ instanceId: string;
12
+ spool: Spool;
13
+ maskRequestBody?: BodyMaskingCallback;
14
+ maskResponseBody?: BodyMaskingCallback;
15
+ }
16
+ declare class ApitallySpanExporter implements SpanExporter {
17
+ private readonly redaction;
18
+ private readonly env;
19
+ private readonly instanceId;
20
+ private readonly spool;
21
+ private readonly maskRequestBody?;
22
+ private readonly maskResponseBody?;
23
+ constructor(options: ApitallySpanExporterOptions);
24
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
25
+ forceFlush(): Promise<void>;
26
+ shutdown(): Promise<void>;
27
+ private buildExportCopy;
28
+ private redactQueryAndHeaderAttributes;
29
+ private processBody;
30
+ private resolveExportResource;
31
+ }
32
+
33
+ export { ApitallySpanExporter, type ApitallySpanExporterOptions };
@@ -0,0 +1,33 @@
1
+ import { ExportResult } from '@opentelemetry/core';
2
+ import { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
3
+ import { BodyMaskingCallback } from './config.js';
4
+ import { Redaction } from './redaction.js';
5
+ import { Spool } from './spool.js';
6
+ import 'node:zlib';
7
+
8
+ interface ApitallySpanExporterOptions {
9
+ redaction: Redaction;
10
+ env: string;
11
+ instanceId: string;
12
+ spool: Spool;
13
+ maskRequestBody?: BodyMaskingCallback;
14
+ maskResponseBody?: BodyMaskingCallback;
15
+ }
16
+ declare class ApitallySpanExporter implements SpanExporter {
17
+ private readonly redaction;
18
+ private readonly env;
19
+ private readonly instanceId;
20
+ private readonly spool;
21
+ private readonly maskRequestBody?;
22
+ private readonly maskResponseBody?;
23
+ constructor(options: ApitallySpanExporterOptions);
24
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
25
+ forceFlush(): Promise<void>;
26
+ shutdown(): Promise<void>;
27
+ private buildExportCopy;
28
+ private redactQueryAndHeaderAttributes;
29
+ private processBody;
30
+ private resolveExportResource;
31
+ }
32
+
33
+ export { ApitallySpanExporter, type ApitallySpanExporterOptions };
@@ -0,0 +1,194 @@
1
+ import { SpanKind } from "@opentelemetry/api";
2
+ import { ProtobufTraceSerializer } from "@opentelemetry/otlp-transformer";
3
+ import { resourceFromAttributes } from "@opentelemetry/resources";
4
+ import { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, MAX_BODY_SIZE } from "./bodyCapture.js";
5
+ import { DEFAULT_ENV } from "./config.js";
6
+ import { serializeInChunksToSpool } from "./exportSerialization.js";
7
+ import { logWarning } from "./logger.js";
8
+ import { REDACTED } from "./redaction.js";
9
+ import { copySpan } from "./spanProcessor.js";
10
+ const QUERY_ATTRIBUTES = /* @__PURE__ */ new Set(["url.query", "url.full", "http.target", "http.url"]);
11
+ const REQUEST_HEADER_ATTRIBUTE_PREFIX = "http.request.header.";
12
+ const RESPONSE_HEADER_ATTRIBUTE_PREFIX = "http.response.header.";
13
+ const DEPLOYMENT_ENVIRONMENT_NAME = "deployment.environment.name";
14
+ const SERVICE_INSTANCE_ID = "service.instance.id";
15
+ class ApitallySpanExporter {
16
+ redaction;
17
+ env;
18
+ instanceId;
19
+ spool;
20
+ maskRequestBody;
21
+ maskResponseBody;
22
+ constructor(options) {
23
+ this.redaction = options.redaction;
24
+ this.env = options.env;
25
+ this.instanceId = options.instanceId;
26
+ this.spool = options.spool;
27
+ this.maskRequestBody = options.maskRequestBody;
28
+ this.maskResponseBody = options.maskResponseBody;
29
+ }
30
+ export(spans, resultCallback) {
31
+ const rewrittenResources = /* @__PURE__ */ new Map();
32
+ const exportCopies = [];
33
+ for (const span of spans) {
34
+ try {
35
+ exportCopies.push(this.buildExportCopy(span, rewrittenResources));
36
+ } catch {
37
+ logWarning("Failed to prepare a span for export to Apitally, so the span was dropped");
38
+ }
39
+ }
40
+ serializeInChunksToSpool(
41
+ exportCopies,
42
+ (chunk) => ProtobufTraceSerializer.serializeRequest(chunk),
43
+ this.spool,
44
+ "traces",
45
+ resultCallback
46
+ );
47
+ }
48
+ forceFlush() {
49
+ return Promise.resolve();
50
+ }
51
+ shutdown() {
52
+ return Promise.resolve();
53
+ }
54
+ buildExportCopy(span, rewrittenResources) {
55
+ const data = span.apitallyData;
56
+ const stash = data?.stash;
57
+ const attributes = {
58
+ ...span.attributes,
59
+ ...data?.record?.attributes
60
+ };
61
+ this.redactQueryAndHeaderAttributes(attributes);
62
+ if (stash?.requestHeaders) {
63
+ writeCapturedHeaderAttributes(
64
+ attributes,
65
+ REQUEST_HEADER_ATTRIBUTE_PREFIX,
66
+ stash.requestHeaders,
67
+ this.redaction
68
+ );
69
+ }
70
+ if (stash?.responseHeaders) {
71
+ writeCapturedHeaderAttributes(
72
+ attributes,
73
+ RESPONSE_HEADER_ATTRIBUTE_PREFIX,
74
+ stash.responseHeaders,
75
+ this.redaction
76
+ );
77
+ }
78
+ const copy = copySpan(span);
79
+ copy.attributes = attributes;
80
+ copy.resource = this.resolveExportResource(span.resource, rewrittenResources);
81
+ if (data?.demoteToInternal) {
82
+ copy.kind = SpanKind.INTERNAL;
83
+ }
84
+ if (stash && (stash.requestBody !== void 0 || stash.responseBody !== void 0)) {
85
+ const snapshot = copySpan(copy);
86
+ snapshot.attributes = { ...attributes };
87
+ if (stash.requestBody !== void 0) {
88
+ attributes["apitally.request.body"] = this.processBody(
89
+ snapshot,
90
+ stash.requestBody,
91
+ this.maskRequestBody,
92
+ "maskRequestBody"
93
+ );
94
+ }
95
+ if (stash.responseBody !== void 0) {
96
+ attributes["apitally.response.body"] = this.processBody(
97
+ snapshot,
98
+ stash.responseBody,
99
+ this.maskResponseBody,
100
+ "maskResponseBody"
101
+ );
102
+ }
103
+ }
104
+ return copy;
105
+ }
106
+ // OpenTelemetry HTTP instrumentations leave query and header attributes raw.
107
+ // Both legacy and stable HTTP attribute names are redacted before export.
108
+ redactQueryAndHeaderAttributes(attributes) {
109
+ for (const [key, value] of Object.entries(attributes)) {
110
+ if (QUERY_ATTRIBUTES.has(key) && typeof value === "string") {
111
+ attributes[key] = this.redaction.redactQueryParams(value, key === "url.query");
112
+ } else if (key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX) || key.startsWith(RESPONSE_HEADER_ATTRIBUTE_PREFIX)) {
113
+ const headerName = key.slice(
114
+ key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX) ? REQUEST_HEADER_ATTRIBUTE_PREFIX.length : RESPONSE_HEADER_ATTRIBUTE_PREFIX.length
115
+ );
116
+ attributes[key] = this.redaction.redactHeaderValue(headerName, value);
117
+ }
118
+ }
119
+ }
120
+ // Bodies are masked, parsed, field-redacted, and serialized in that order.
121
+ // Masking failures redact the entire body.
122
+ processBody(snapshot, body, maskCallback, optionName) {
123
+ if (body.equals(BODY_TOO_LARGE_BUFFER)) {
124
+ return BODY_TOO_LARGE;
125
+ }
126
+ let processed = body;
127
+ if (maskCallback) {
128
+ let masked;
129
+ try {
130
+ masked = maskCallback(body, snapshot);
131
+ } catch {
132
+ logWarning(
133
+ `The Apitally ${optionName} callback threw an error, so the body was replaced with ${REDACTED}`
134
+ );
135
+ return REDACTED;
136
+ }
137
+ if (masked === null || masked === void 0) {
138
+ return REDACTED;
139
+ }
140
+ if (!Buffer.isBuffer(masked)) {
141
+ logWarning(
142
+ `The Apitally ${optionName} callback returned an invalid value, so the body was replaced with ${REDACTED}. Mask callbacks must synchronously return a Buffer or null.`
143
+ );
144
+ return REDACTED;
145
+ }
146
+ if (masked.length > MAX_BODY_SIZE) {
147
+ return BODY_TOO_LARGE;
148
+ }
149
+ processed = masked;
150
+ }
151
+ return this.redaction.redactBody(processed);
152
+ }
153
+ // Export resources must carry Apitally's process identity and match Apitally-Env.
154
+ // Rewrites apply only to Apitally's copies.
155
+ resolveExportResource(resource, rewrittenResources) {
156
+ const resourceEnv = resource.attributes[DEPLOYMENT_ENVIRONMENT_NAME];
157
+ const resourceInstanceId = resource.attributes[SERVICE_INSTANCE_ID];
158
+ const envDiffers = typeof resourceEnv === "string" && resourceEnv !== this.env;
159
+ const envMissing = resourceEnv === void 0 && this.env !== DEFAULT_ENV;
160
+ const instanceIdDiffers = resourceInstanceId !== this.instanceId;
161
+ if (!envDiffers && !envMissing && !instanceIdDiffers) {
162
+ return resource;
163
+ }
164
+ const existing = rewrittenResources.get(resource);
165
+ if (existing) {
166
+ return existing;
167
+ }
168
+ if (envDiffers) {
169
+ logWarning(
170
+ `The tracer provider's resource sets deployment.environment.name to "${resourceEnv}", which differs from the Apitally env "${this.env}". Spans are exported to Apitally with the env "${this.env}".`
171
+ );
172
+ }
173
+ const attributes = {
174
+ ...resource.attributes,
175
+ [SERVICE_INSTANCE_ID]: this.instanceId
176
+ };
177
+ if (envDiffers || envMissing) {
178
+ attributes[DEPLOYMENT_ENVIRONMENT_NAME] = this.env;
179
+ }
180
+ const rewritten = resourceFromAttributes(attributes);
181
+ rewrittenResources.set(resource, rewritten);
182
+ return rewritten;
183
+ }
184
+ }
185
+ function writeCapturedHeaderAttributes(attributes, prefix, headers, redaction) {
186
+ for (const [name, values] of Object.entries(headers)) {
187
+ const redactedValues = redaction.redactHeaderValue(name, values);
188
+ attributes[prefix + name] = Array.isArray(redactedValues) ? redactedValues : [redactedValues];
189
+ }
190
+ }
191
+ export {
192
+ ApitallySpanExporter
193
+ };
194
+ //# sourceMappingURL=spanExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/spanExporter.ts"],"sourcesContent":["import type { Attributes } from \"@opentelemetry/api\";\nimport { SpanKind } from \"@opentelemetry/api\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ProtobufTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { type Resource, resourceFromAttributes } from \"@opentelemetry/resources\";\nimport type { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, MAX_BODY_SIZE } from \"./bodyCapture.js\";\nimport { type BodyMaskingCallback, DEFAULT_ENV } from \"./config.js\";\nimport { serializeInChunksToSpool } from \"./exportSerialization.js\";\nimport { logWarning } from \"./logger.js\";\nimport { REDACTED, type Redaction } from \"./redaction.js\";\nimport { copySpan, type SpanCopy } from \"./spanProcessor.js\";\nimport type { Spool } from \"./spool.js\";\n\nconst QUERY_ATTRIBUTES = new Set([\"url.query\", \"url.full\", \"http.target\", \"http.url\"]);\nconst REQUEST_HEADER_ATTRIBUTE_PREFIX = \"http.request.header.\";\nconst RESPONSE_HEADER_ATTRIBUTE_PREFIX = \"http.response.header.\";\nconst DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nconst SERVICE_INSTANCE_ID = \"service.instance.id\";\n\nexport interface ApitallySpanExporterOptions {\n redaction: Redaction;\n env: string;\n instanceId: string;\n spool: Spool;\n maskRequestBody?: BodyMaskingCallback;\n maskResponseBody?: BodyMaskingCallback;\n}\n\n// Export copies receive transport attributes, captured data, and redaction\n// without mutating the original spans.\nexport class ApitallySpanExporter implements SpanExporter {\n private readonly redaction: Redaction;\n private readonly env: string;\n private readonly instanceId: string;\n private readonly spool: Spool;\n private readonly maskRequestBody?: BodyMaskingCallback;\n private readonly maskResponseBody?: BodyMaskingCallback;\n\n constructor(options: ApitallySpanExporterOptions) {\n this.redaction = options.redaction;\n this.env = options.env;\n this.instanceId = options.instanceId;\n this.spool = options.spool;\n this.maskRequestBody = options.maskRequestBody;\n this.maskResponseBody = options.maskResponseBody;\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n // Rewritten resources are shared across the batch: the serializer groups\n // resourceSpans by object identity, never by attribute equality.\n const rewrittenResources = new Map<Resource, Resource>();\n const exportCopies: ReadableSpan[] = [];\n for (const span of spans) {\n try {\n exportCopies.push(this.buildExportCopy(span, rewrittenResources));\n } catch {\n // A span that failed redaction must never leave the process.\n logWarning(\"Failed to prepare a span for export to Apitally, so the span was dropped\");\n }\n }\n serializeInChunksToSpool(\n exportCopies,\n (chunk) => ProtobufTraceSerializer.serializeRequest(chunk),\n this.spool,\n \"traces\",\n resultCallback,\n );\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n private buildExportCopy(\n span: ReadableSpan,\n rewrittenResources: Map<Resource, Resource>,\n ): ReadableSpan {\n const data = (span as SpanCopy).apitallyData;\n const stash = data?.stash;\n // The record is applied last: a transport-observed value wins over anything\n // the producing instrumentation set for the same key.\n const attributes: Record<string, unknown> = {\n ...span.attributes,\n ...data?.record?.attributes,\n };\n this.redactQueryAndHeaderAttributes(attributes);\n if (stash?.requestHeaders) {\n writeCapturedHeaderAttributes(\n attributes,\n REQUEST_HEADER_ATTRIBUTE_PREFIX,\n stash.requestHeaders,\n this.redaction,\n );\n }\n if (stash?.responseHeaders) {\n writeCapturedHeaderAttributes(\n attributes,\n RESPONSE_HEADER_ATTRIBUTE_PREFIX,\n stash.responseHeaders,\n this.redaction,\n );\n }\n const copy = copySpan(span);\n copy.attributes = attributes as Attributes;\n copy.resource = this.resolveExportResource(span.resource, rewrittenResources);\n if (data?.demoteToInternal) {\n copy.kind = SpanKind.INTERNAL;\n }\n if (stash && (stash.requestBody !== undefined || stash.responseBody !== undefined)) {\n // Mask callbacks receive the redacted export copy with captured headers\n // attached, but without body attributes.\n const snapshot = copySpan(copy);\n snapshot.attributes = { ...attributes } as Attributes;\n if (stash.requestBody !== undefined) {\n attributes[\"apitally.request.body\"] = this.processBody(\n snapshot,\n stash.requestBody,\n this.maskRequestBody,\n \"maskRequestBody\",\n );\n }\n if (stash.responseBody !== undefined) {\n attributes[\"apitally.response.body\"] = this.processBody(\n snapshot,\n stash.responseBody,\n this.maskResponseBody,\n \"maskResponseBody\",\n );\n }\n }\n return copy;\n }\n\n // OpenTelemetry HTTP instrumentations leave query and header attributes raw.\n // Both legacy and stable HTTP attribute names are redacted before export.\n private redactQueryAndHeaderAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n if (QUERY_ATTRIBUTES.has(key) && typeof value === \"string\") {\n attributes[key] = this.redaction.redactQueryParams(value, key === \"url.query\");\n } else if (\n key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX) ||\n key.startsWith(RESPONSE_HEADER_ATTRIBUTE_PREFIX)\n ) {\n const headerName = key.slice(\n key.startsWith(REQUEST_HEADER_ATTRIBUTE_PREFIX)\n ? REQUEST_HEADER_ATTRIBUTE_PREFIX.length\n : RESPONSE_HEADER_ATTRIBUTE_PREFIX.length,\n );\n attributes[key] = this.redaction.redactHeaderValue(headerName, value);\n }\n }\n }\n\n // Bodies are masked, parsed, field-redacted, and serialized in that order.\n // Masking failures redact the entire body.\n private processBody(\n snapshot: ReadableSpan,\n body: Buffer,\n maskCallback: BodyMaskingCallback | undefined,\n optionName: string,\n ): string | Buffer {\n if (body.equals(BODY_TOO_LARGE_BUFFER)) {\n return BODY_TOO_LARGE;\n }\n let processed = body;\n if (maskCallback) {\n let masked: unknown;\n try {\n masked = maskCallback(body, snapshot);\n } catch {\n logWarning(\n `The Apitally ${optionName} callback threw an error, so the body was replaced with ${REDACTED}`,\n );\n return REDACTED;\n }\n if (masked === null || masked === undefined) {\n return REDACTED;\n }\n if (!Buffer.isBuffer(masked)) {\n logWarning(\n `The Apitally ${optionName} callback returned an invalid value, so the body was replaced with ${REDACTED}. Mask callbacks must synchronously return a Buffer or null.`,\n );\n return REDACTED;\n }\n if (masked.length > MAX_BODY_SIZE) {\n return BODY_TOO_LARGE;\n }\n processed = masked;\n }\n return this.redaction.redactBody(processed);\n }\n\n // Export resources must carry Apitally's process identity and match Apitally-Env.\n // Rewrites apply only to Apitally's copies.\n private resolveExportResource(\n resource: Resource,\n rewrittenResources: Map<Resource, Resource>,\n ): Resource {\n const resourceEnv = resource.attributes[DEPLOYMENT_ENVIRONMENT_NAME];\n const resourceInstanceId = resource.attributes[SERVICE_INSTANCE_ID];\n const envDiffers = typeof resourceEnv === \"string\" && resourceEnv !== this.env;\n const envMissing = resourceEnv === undefined && this.env !== DEFAULT_ENV;\n const instanceIdDiffers = resourceInstanceId !== this.instanceId;\n if (!envDiffers && !envMissing && !instanceIdDiffers) {\n return resource;\n }\n const existing = rewrittenResources.get(resource);\n if (existing) {\n return existing;\n }\n if (envDiffers) {\n logWarning(\n `The tracer provider's resource sets deployment.environment.name to \"${resourceEnv}\", which differs from the Apitally env \"${this.env}\". Spans are exported to Apitally with the env \"${this.env}\".`,\n );\n }\n const attributes: Attributes = {\n ...resource.attributes,\n [SERVICE_INSTANCE_ID]: this.instanceId,\n };\n if (envDiffers || envMissing) {\n attributes[DEPLOYMENT_ENVIRONMENT_NAME] = this.env;\n }\n const rewritten = resourceFromAttributes(attributes);\n rewrittenResources.set(resource, rewritten);\n return rewritten;\n }\n}\n\nfunction writeCapturedHeaderAttributes(\n attributes: Record<string, unknown>,\n prefix: string,\n headers: Record<string, string | string[]>,\n redaction: Redaction,\n): void {\n for (const [name, values] of Object.entries(headers)) {\n const redactedValues = redaction.redactHeaderValue(name, values);\n attributes[prefix + name] = Array.isArray(redactedValues) ? redactedValues : [redactedValues];\n }\n}\n"],"mappings":"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","names":[]}