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,128 @@
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 bodyCapture_exports = {};
20
+ __export(bodyCapture_exports, {
21
+ BODY_TOO_LARGE: () => BODY_TOO_LARGE,
22
+ BODY_TOO_LARGE_BUFFER: () => BODY_TOO_LARGE_BUFFER,
23
+ BodyCapture: () => BodyCapture,
24
+ MAX_BODY_SIZE: () => MAX_BODY_SIZE
25
+ });
26
+ module.exports = __toCommonJS(bodyCapture_exports);
27
+ const MAX_BODY_SIZE = 5e4;
28
+ const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
29
+ const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);
30
+ const ALLOWED_CONTENT_TYPES = [
31
+ "application/json",
32
+ "application/problem+json",
33
+ "application/vnd.api+json",
34
+ "application/ld+json",
35
+ "application/x-ndjson",
36
+ "text/markdown",
37
+ "text/plain"
38
+ ];
39
+ class BodyCapture {
40
+ shouldCapture;
41
+ declaredSize;
42
+ tooLarge;
43
+ chunks = [];
44
+ bufferedLength = 0;
45
+ observedLength = 0;
46
+ completed = false;
47
+ constructor(options) {
48
+ this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);
49
+ const transferEncoding = Array.isArray(options.transferEncoding) ? options.transferEncoding.join(",") : options.transferEncoding;
50
+ const isChunkedTransferEncoding = typeof transferEncoding === "string" && transferEncoding.toLowerCase().includes("chunked");
51
+ this.declaredSize = isChunkedTransferEncoding ? void 0 : parseContentLength(options.contentLength);
52
+ this.tooLarge = this.shouldCapture && this.declaredSize !== void 0 && this.declaredSize > MAX_BODY_SIZE;
53
+ }
54
+ get isBuffering() {
55
+ return this.shouldCapture && !this.tooLarge;
56
+ }
57
+ addChunk(chunk, encoding) {
58
+ const byteLength = typeof chunk === "string" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;
59
+ this.observedLength += byteLength;
60
+ if (!this.shouldCapture || this.tooLarge) {
61
+ return;
62
+ }
63
+ const bytes = typeof chunk === "string" ? Buffer.from(chunk, encoding) : chunk;
64
+ this.bufferedLength += byteLength;
65
+ if (this.bufferedLength > MAX_BODY_SIZE) {
66
+ this.tooLarge = true;
67
+ this.chunks = [];
68
+ return;
69
+ }
70
+ this.chunks.push(bytes);
71
+ }
72
+ stopBuffering() {
73
+ this.shouldCapture = false;
74
+ this.tooLarge = false;
75
+ this.chunks = [];
76
+ this.bufferedLength = 0;
77
+ }
78
+ markComplete() {
79
+ this.completed = true;
80
+ }
81
+ // The sentinel is exported even when the stream never completed; a partial
82
+ // buffer from an aborted stream never is.
83
+ get body() {
84
+ if (this.tooLarge) {
85
+ return BODY_TOO_LARGE_BUFFER;
86
+ }
87
+ if (!this.completed || this.bufferedLength === 0) {
88
+ return void 0;
89
+ }
90
+ return Buffer.concat(this.chunks);
91
+ }
92
+ // The trusted declared size, else the running byte count once the stream was
93
+ // observed to completion; undefined means no size attribute.
94
+ get size() {
95
+ if (this.declaredSize !== void 0) {
96
+ return this.declaredSize;
97
+ }
98
+ return this.completed ? this.observedLength : void 0;
99
+ }
100
+ }
101
+ function isAllowedContentType(contentType) {
102
+ if (!contentType) {
103
+ return false;
104
+ }
105
+ const normalized = contentType.trim().toLowerCase();
106
+ return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));
107
+ }
108
+ function parseContentLength(value) {
109
+ if (typeof value === "number") {
110
+ return value;
111
+ }
112
+ if (typeof value === "string") {
113
+ const parsed = Number.parseInt(value, 10);
114
+ return Number.isNaN(parsed) ? void 0 : parsed;
115
+ }
116
+ if (Array.isArray(value)) {
117
+ return parseContentLength(value[0]);
118
+ }
119
+ return void 0;
120
+ }
121
+ // Annotate the CommonJS export names for ESM import in node:
122
+ 0 && (module.exports = {
123
+ BODY_TOO_LARGE,
124
+ BODY_TOO_LARGE_BUFFER,
125
+ BodyCapture,
126
+ MAX_BODY_SIZE
127
+ });
128
+ //# sourceMappingURL=bodyCapture.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bodyCapture.ts"],"sourcesContent":["// Captured bodies above the cap are represented by a sentinel and never\n// exported truncated.\nexport const MAX_BODY_SIZE = 50_000;\nexport const BODY_TOO_LARGE = \"[BODY_TOO_LARGE]\";\nexport const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);\n\nconst ALLOWED_CONTENT_TYPES = [\n \"application/json\",\n \"application/problem+json\",\n \"application/vnd.api+json\",\n \"application/ld+json\",\n \"application/x-ndjson\",\n \"text/markdown\",\n \"text/plain\",\n];\n\ninterface BodyCaptureOptions {\n captureBody: boolean;\n contentType?: string | null;\n contentLength?: string | number | string[] | null;\n transferEncoding?: string | string[] | null;\n}\n\n// Capture eligibility and declared oversize decisions use headers only; all\n// observed bytes still count toward size.\nexport class BodyCapture {\n private shouldCapture: boolean;\n private readonly declaredSize?: number;\n private tooLarge: boolean;\n private chunks: Uint8Array[] = [];\n private bufferedLength = 0;\n private observedLength = 0;\n private completed = false;\n\n constructor(options: BodyCaptureOptions) {\n this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);\n // Transfer-Encoding: chunked makes Content-Length unusable, so observed\n // decoded bytes determine size.\n const transferEncoding = Array.isArray(options.transferEncoding)\n ? options.transferEncoding.join(\",\")\n : options.transferEncoding;\n const isChunkedTransferEncoding =\n typeof transferEncoding === \"string\" && transferEncoding.toLowerCase().includes(\"chunked\");\n this.declaredSize = isChunkedTransferEncoding\n ? undefined\n : parseContentLength(options.contentLength);\n this.tooLarge =\n this.shouldCapture && this.declaredSize !== undefined && this.declaredSize > MAX_BODY_SIZE;\n }\n\n get isBuffering(): boolean {\n return this.shouldCapture && !this.tooLarge;\n }\n\n addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void {\n const byteLength =\n typeof chunk === \"string\" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;\n this.observedLength += byteLength;\n if (!this.shouldCapture || this.tooLarge) {\n return;\n }\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk, encoding) : chunk;\n this.bufferedLength += byteLength;\n if (this.bufferedLength > MAX_BODY_SIZE) {\n // A body must never be exported truncated, so crossing the cap discards\n // the buffer and yields the sentinel.\n this.tooLarge = true;\n this.chunks = [];\n return;\n }\n this.chunks.push(bytes);\n }\n\n stopBuffering(): void {\n this.shouldCapture = false;\n this.tooLarge = false;\n this.chunks = [];\n this.bufferedLength = 0;\n }\n\n markComplete(): void {\n this.completed = true;\n }\n\n // The sentinel is exported even when the stream never completed; a partial\n // buffer from an aborted stream never is.\n get body(): Buffer | undefined {\n if (this.tooLarge) {\n return BODY_TOO_LARGE_BUFFER;\n }\n if (!this.completed || this.bufferedLength === 0) {\n return undefined;\n }\n return Buffer.concat(this.chunks);\n }\n\n // The trusted declared size, else the running byte count once the stream was\n // observed to completion; undefined means no size attribute.\n get size(): number | undefined {\n if (this.declaredSize !== undefined) {\n return this.declaredSize;\n }\n return this.completed ? this.observedLength : undefined;\n }\n}\n\nexport interface CapturedBody {\n body?: Buffer;\n size?: number;\n}\n\nfunction isAllowedContentType(contentType: string | null | undefined): boolean {\n if (!contentType) {\n return false;\n }\n const normalized = contentType.trim().toLowerCase();\n return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));\n}\n\nfunction parseContentLength(\n value: string | number | string[] | null | undefined,\n): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n if (Array.isArray(value)) {\n return parseContentLength(value[0]);\n }\n return undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB,OAAO,KAAK,cAAc;AAE/D,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,MAAM,YAAY;AAAA,EACf;AAAA,EACS;AAAA,EACT;AAAA,EACA,SAAuB,CAAC;AAAA,EACxB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EAEpB,YAAY,SAA6B;AACvC,SAAK,gBAAgB,QAAQ,eAAe,qBAAqB,QAAQ,WAAW;AAGpF,UAAM,mBAAmB,MAAM,QAAQ,QAAQ,gBAAgB,IAC3D,QAAQ,iBAAiB,KAAK,GAAG,IACjC,QAAQ;AACZ,UAAM,4BACJ,OAAO,qBAAqB,YAAY,iBAAiB,YAAY,EAAE,SAAS,SAAS;AAC3F,SAAK,eAAe,4BAChB,SACA,mBAAmB,QAAQ,aAAa;AAC5C,SAAK,WACH,KAAK,iBAAiB,KAAK,iBAAiB,UAAa,KAAK,eAAe;AAAA,EACjF;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK,iBAAiB,CAAC,KAAK;AAAA,EACrC;AAAA,EAEA,SAAS,OAAqC,UAAiC;AAC7E,UAAM,aACJ,OAAO,UAAU,WAAW,OAAO,WAAW,OAAO,QAAQ,IAAI,MAAM;AACzE,SAAK,kBAAkB;AACvB,QAAI,CAAC,KAAK,iBAAiB,KAAK,UAAU;AACxC;AAAA,IACF;AACA,UAAM,QAAQ,OAAO,UAAU,WAAW,OAAO,KAAK,OAAO,QAAQ,IAAI;AACzE,SAAK,kBAAkB;AACvB,QAAI,KAAK,iBAAiB,eAAe;AAGvC,WAAK,WAAW;AAChB,WAAK,SAAS,CAAC;AACf;AAAA,IACF;AACA,SAAK,OAAO,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,gBAAsB;AACpB,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AACf,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,eAAqB;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,UAAU;AACjB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,aAAa,KAAK,mBAAmB,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,iBAAiB,QAAW;AACnC,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAChD;AACF;AAOA,SAAS,qBAAqB,aAAiD;AAC7E,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AACA,QAAM,aAAa,YAAY,KAAK,EAAE,YAAY;AAClD,SAAO,sBAAsB,KAAK,CAAC,YAAY,WAAW,WAAW,OAAO,CAAC;AAC/E;AAEA,SAAS,mBACP,OACoB;AACpB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,SAAS,OAAO,SAAS,OAAO,EAAE;AACxC,WAAO,OAAO,MAAM,MAAM,IAAI,SAAY;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,mBAAmB,MAAM,CAAC,CAAC;AAAA,EACpC;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,31 @@
1
+ declare const MAX_BODY_SIZE = 50000;
2
+ declare const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
3
+ declare const BODY_TOO_LARGE_BUFFER: Buffer<ArrayBuffer>;
4
+ interface BodyCaptureOptions {
5
+ captureBody: boolean;
6
+ contentType?: string | null;
7
+ contentLength?: string | number | string[] | null;
8
+ transferEncoding?: string | string[] | null;
9
+ }
10
+ declare class BodyCapture {
11
+ private shouldCapture;
12
+ private readonly declaredSize?;
13
+ private tooLarge;
14
+ private chunks;
15
+ private bufferedLength;
16
+ private observedLength;
17
+ private completed;
18
+ constructor(options: BodyCaptureOptions);
19
+ get isBuffering(): boolean;
20
+ addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void;
21
+ stopBuffering(): void;
22
+ markComplete(): void;
23
+ get body(): Buffer | undefined;
24
+ get size(): number | undefined;
25
+ }
26
+ interface CapturedBody {
27
+ body?: Buffer;
28
+ size?: number;
29
+ }
30
+
31
+ export { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, BodyCapture, type CapturedBody, MAX_BODY_SIZE };
@@ -0,0 +1,31 @@
1
+ declare const MAX_BODY_SIZE = 50000;
2
+ declare const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
3
+ declare const BODY_TOO_LARGE_BUFFER: Buffer<ArrayBuffer>;
4
+ interface BodyCaptureOptions {
5
+ captureBody: boolean;
6
+ contentType?: string | null;
7
+ contentLength?: string | number | string[] | null;
8
+ transferEncoding?: string | string[] | null;
9
+ }
10
+ declare class BodyCapture {
11
+ private shouldCapture;
12
+ private readonly declaredSize?;
13
+ private tooLarge;
14
+ private chunks;
15
+ private bufferedLength;
16
+ private observedLength;
17
+ private completed;
18
+ constructor(options: BodyCaptureOptions);
19
+ get isBuffering(): boolean;
20
+ addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void;
21
+ stopBuffering(): void;
22
+ markComplete(): void;
23
+ get body(): Buffer | undefined;
24
+ get size(): number | undefined;
25
+ }
26
+ interface CapturedBody {
27
+ body?: Buffer;
28
+ size?: number;
29
+ }
30
+
31
+ export { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, BodyCapture, type CapturedBody, MAX_BODY_SIZE };
@@ -0,0 +1,101 @@
1
+ const MAX_BODY_SIZE = 5e4;
2
+ const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
3
+ const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);
4
+ const ALLOWED_CONTENT_TYPES = [
5
+ "application/json",
6
+ "application/problem+json",
7
+ "application/vnd.api+json",
8
+ "application/ld+json",
9
+ "application/x-ndjson",
10
+ "text/markdown",
11
+ "text/plain"
12
+ ];
13
+ class BodyCapture {
14
+ shouldCapture;
15
+ declaredSize;
16
+ tooLarge;
17
+ chunks = [];
18
+ bufferedLength = 0;
19
+ observedLength = 0;
20
+ completed = false;
21
+ constructor(options) {
22
+ this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);
23
+ const transferEncoding = Array.isArray(options.transferEncoding) ? options.transferEncoding.join(",") : options.transferEncoding;
24
+ const isChunkedTransferEncoding = typeof transferEncoding === "string" && transferEncoding.toLowerCase().includes("chunked");
25
+ this.declaredSize = isChunkedTransferEncoding ? void 0 : parseContentLength(options.contentLength);
26
+ this.tooLarge = this.shouldCapture && this.declaredSize !== void 0 && this.declaredSize > MAX_BODY_SIZE;
27
+ }
28
+ get isBuffering() {
29
+ return this.shouldCapture && !this.tooLarge;
30
+ }
31
+ addChunk(chunk, encoding) {
32
+ const byteLength = typeof chunk === "string" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;
33
+ this.observedLength += byteLength;
34
+ if (!this.shouldCapture || this.tooLarge) {
35
+ return;
36
+ }
37
+ const bytes = typeof chunk === "string" ? Buffer.from(chunk, encoding) : chunk;
38
+ this.bufferedLength += byteLength;
39
+ if (this.bufferedLength > MAX_BODY_SIZE) {
40
+ this.tooLarge = true;
41
+ this.chunks = [];
42
+ return;
43
+ }
44
+ this.chunks.push(bytes);
45
+ }
46
+ stopBuffering() {
47
+ this.shouldCapture = false;
48
+ this.tooLarge = false;
49
+ this.chunks = [];
50
+ this.bufferedLength = 0;
51
+ }
52
+ markComplete() {
53
+ this.completed = true;
54
+ }
55
+ // The sentinel is exported even when the stream never completed; a partial
56
+ // buffer from an aborted stream never is.
57
+ get body() {
58
+ if (this.tooLarge) {
59
+ return BODY_TOO_LARGE_BUFFER;
60
+ }
61
+ if (!this.completed || this.bufferedLength === 0) {
62
+ return void 0;
63
+ }
64
+ return Buffer.concat(this.chunks);
65
+ }
66
+ // The trusted declared size, else the running byte count once the stream was
67
+ // observed to completion; undefined means no size attribute.
68
+ get size() {
69
+ if (this.declaredSize !== void 0) {
70
+ return this.declaredSize;
71
+ }
72
+ return this.completed ? this.observedLength : void 0;
73
+ }
74
+ }
75
+ function isAllowedContentType(contentType) {
76
+ if (!contentType) {
77
+ return false;
78
+ }
79
+ const normalized = contentType.trim().toLowerCase();
80
+ return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));
81
+ }
82
+ function parseContentLength(value) {
83
+ if (typeof value === "number") {
84
+ return value;
85
+ }
86
+ if (typeof value === "string") {
87
+ const parsed = Number.parseInt(value, 10);
88
+ return Number.isNaN(parsed) ? void 0 : parsed;
89
+ }
90
+ if (Array.isArray(value)) {
91
+ return parseContentLength(value[0]);
92
+ }
93
+ return void 0;
94
+ }
95
+ export {
96
+ BODY_TOO_LARGE,
97
+ BODY_TOO_LARGE_BUFFER,
98
+ BodyCapture,
99
+ MAX_BODY_SIZE
100
+ };
101
+ //# sourceMappingURL=bodyCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bodyCapture.ts"],"sourcesContent":["// Captured bodies above the cap are represented by a sentinel and never\n// exported truncated.\nexport const MAX_BODY_SIZE = 50_000;\nexport const BODY_TOO_LARGE = \"[BODY_TOO_LARGE]\";\nexport const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);\n\nconst ALLOWED_CONTENT_TYPES = [\n \"application/json\",\n \"application/problem+json\",\n \"application/vnd.api+json\",\n \"application/ld+json\",\n \"application/x-ndjson\",\n \"text/markdown\",\n \"text/plain\",\n];\n\ninterface BodyCaptureOptions {\n captureBody: boolean;\n contentType?: string | null;\n contentLength?: string | number | string[] | null;\n transferEncoding?: string | string[] | null;\n}\n\n// Capture eligibility and declared oversize decisions use headers only; all\n// observed bytes still count toward size.\nexport class BodyCapture {\n private shouldCapture: boolean;\n private readonly declaredSize?: number;\n private tooLarge: boolean;\n private chunks: Uint8Array[] = [];\n private bufferedLength = 0;\n private observedLength = 0;\n private completed = false;\n\n constructor(options: BodyCaptureOptions) {\n this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);\n // Transfer-Encoding: chunked makes Content-Length unusable, so observed\n // decoded bytes determine size.\n const transferEncoding = Array.isArray(options.transferEncoding)\n ? options.transferEncoding.join(\",\")\n : options.transferEncoding;\n const isChunkedTransferEncoding =\n typeof transferEncoding === \"string\" && transferEncoding.toLowerCase().includes(\"chunked\");\n this.declaredSize = isChunkedTransferEncoding\n ? undefined\n : parseContentLength(options.contentLength);\n this.tooLarge =\n this.shouldCapture && this.declaredSize !== undefined && this.declaredSize > MAX_BODY_SIZE;\n }\n\n get isBuffering(): boolean {\n return this.shouldCapture && !this.tooLarge;\n }\n\n addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void {\n const byteLength =\n typeof chunk === \"string\" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;\n this.observedLength += byteLength;\n if (!this.shouldCapture || this.tooLarge) {\n return;\n }\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk, encoding) : chunk;\n this.bufferedLength += byteLength;\n if (this.bufferedLength > MAX_BODY_SIZE) {\n // A body must never be exported truncated, so crossing the cap discards\n // the buffer and yields the sentinel.\n this.tooLarge = true;\n this.chunks = [];\n return;\n }\n this.chunks.push(bytes);\n }\n\n stopBuffering(): void {\n this.shouldCapture = false;\n this.tooLarge = false;\n this.chunks = [];\n this.bufferedLength = 0;\n }\n\n markComplete(): void {\n this.completed = true;\n }\n\n // The sentinel is exported even when the stream never completed; a partial\n // buffer from an aborted stream never is.\n get body(): Buffer | undefined {\n if (this.tooLarge) {\n return BODY_TOO_LARGE_BUFFER;\n }\n if (!this.completed || this.bufferedLength === 0) {\n return undefined;\n }\n return Buffer.concat(this.chunks);\n }\n\n // The trusted declared size, else the running byte count once the stream was\n // observed to completion; undefined means no size attribute.\n get size(): number | undefined {\n if (this.declaredSize !== undefined) {\n return this.declaredSize;\n }\n return this.completed ? this.observedLength : undefined;\n }\n}\n\nexport interface CapturedBody {\n body?: Buffer;\n size?: number;\n}\n\nfunction isAllowedContentType(contentType: string | null | undefined): boolean {\n if (!contentType) {\n return false;\n }\n const normalized = contentType.trim().toLowerCase();\n return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));\n}\n\nfunction parseContentLength(\n value: string | number | string[] | null | undefined,\n): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n if (Array.isArray(value)) {\n return parseContentLength(value[0]);\n }\n return undefined;\n}\n"],"mappings":"AAEO,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB,OAAO,KAAK,cAAc;AAE/D,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,MAAM,YAAY;AAAA,EACf;AAAA,EACS;AAAA,EACT;AAAA,EACA,SAAuB,CAAC;AAAA,EACxB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EAEpB,YAAY,SAA6B;AACvC,SAAK,gBAAgB,QAAQ,eAAe,qBAAqB,QAAQ,WAAW;AAGpF,UAAM,mBAAmB,MAAM,QAAQ,QAAQ,gBAAgB,IAC3D,QAAQ,iBAAiB,KAAK,GAAG,IACjC,QAAQ;AACZ,UAAM,4BACJ,OAAO,qBAAqB,YAAY,iBAAiB,YAAY,EAAE,SAAS,SAAS;AAC3F,SAAK,eAAe,4BAChB,SACA,mBAAmB,QAAQ,aAAa;AAC5C,SAAK,WACH,KAAK,iBAAiB,KAAK,iBAAiB,UAAa,KAAK,eAAe;AAAA,EACjF;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK,iBAAiB,CAAC,KAAK;AAAA,EACrC;AAAA,EAEA,SAAS,OAAqC,UAAiC;AAC7E,UAAM,aACJ,OAAO,UAAU,WAAW,OAAO,WAAW,OAAO,QAAQ,IAAI,MAAM;AACzE,SAAK,kBAAkB;AACvB,QAAI,CAAC,KAAK,iBAAiB,KAAK,UAAU;AACxC;AAAA,IACF;AACA,UAAM,QAAQ,OAAO,UAAU,WAAW,OAAO,KAAK,OAAO,QAAQ,IAAI;AACzE,SAAK,kBAAkB;AACvB,QAAI,KAAK,iBAAiB,eAAe;AAGvC,WAAK,WAAW;AAChB,WAAK,SAAS,CAAC;AACf;AAAA,IACF;AACA,SAAK,OAAO,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,gBAAsB;AACpB,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AACf,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,eAAqB;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,UAAU;AACjB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,aAAa,KAAK,mBAAmB,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,iBAAiB,QAAW;AACnC,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAChD;AACF;AAOA,SAAS,qBAAqB,aAAiD;AAC7E,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AACA,QAAM,aAAa,YAAY,KAAK,EAAE,YAAY;AAClD,SAAO,sBAAsB,KAAK,CAAC,YAAY,WAAW,WAAW,OAAO,CAAC;AAC/E;AAEA,SAAS,mBACP,OACoB;AACpB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,SAAS,OAAO,SAAS,OAAO,EAAE;AACxC,WAAO,OAAO,MAAM,MAAM,IAAI,SAAY;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,mBAAmB,MAAM,CAAC,CAAC;AAAA,EACpC;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,209 @@
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 config_exports = {};
20
+ __export(config_exports, {
21
+ DEFAULT_ENV: () => DEFAULT_ENV,
22
+ DEFAULT_EXCLUDE_PATHS: () => DEFAULT_EXCLUDE_PATHS,
23
+ DEFAULT_MASK_BODY_FIELDS: () => DEFAULT_MASK_BODY_FIELDS,
24
+ DEFAULT_MASK_HEADERS: () => DEFAULT_MASK_HEADERS,
25
+ DEFAULT_MASK_QUERY_PARAMS: () => DEFAULT_MASK_QUERY_PARAMS,
26
+ EXCLUDE_USER_AGENTS: () => EXCLUDE_USER_AGENTS,
27
+ compilePatterns: () => compilePatterns,
28
+ getConfig: () => getConfig,
29
+ isApitallyDisabledViaEnv: () => isApitallyDisabledViaEnv,
30
+ isValidWriteToken: () => isValidWriteToken,
31
+ matchesAny: () => matchesAny,
32
+ setConfig: () => setConfig
33
+ });
34
+ module.exports = __toCommonJS(config_exports);
35
+ var import_logger = require('./logger.cjs');
36
+ const DEFAULT_OTLP_ENDPOINT = "https://otlp.apitally.io";
37
+ const DEFAULT_ENV = "dev";
38
+ const DEFAULT_MASK_QUERY_PARAMS = ["auth", "api-?key", "secret", "token", "password", "pwd"];
39
+ const DEFAULT_MASK_HEADERS = ["auth", "api-?key", "secret", "token", "cookie"];
40
+ const DEFAULT_MASK_BODY_FIELDS = [
41
+ "password",
42
+ "pwd",
43
+ "token",
44
+ "secret",
45
+ "auth",
46
+ "card[-_ ]?number",
47
+ "ccv",
48
+ "ssn"
49
+ ];
50
+ const DEFAULT_EXCLUDE_PATHS = [
51
+ "/_?healthz?$",
52
+ "/_?health[-_]?checks?$",
53
+ "/_?heart[-_]?beats?$",
54
+ "/ping$",
55
+ "/ready$",
56
+ "/live$",
57
+ "/favicon(?:-[\\w-]+)?\\.(ico|png|svg)$",
58
+ "/apple-touch-icon(?:-[\\w-]+)?\\.png$",
59
+ "/robots\\.txt$",
60
+ "/sitemap\\.xml$",
61
+ "/manifest\\.json$",
62
+ "/site\\.webmanifest$",
63
+ "/service-worker\\.js$",
64
+ "/sw\\.js$",
65
+ "/\\.well-known/"
66
+ ];
67
+ const EXCLUDE_USER_AGENTS = [
68
+ "health[-_ ]?check",
69
+ "microsoft-azure-application-lb",
70
+ "googlehc",
71
+ "kube-probe"
72
+ ];
73
+ const WRITE_TOKEN_FORMAT = /^apt_[a-zA-Z0-9]{24}$/;
74
+ const TRUE_VALUES = /* @__PURE__ */ new Set(["1", "true", "yes"]);
75
+ const GLOBAL_CONFIG_KEY = /* @__PURE__ */ Symbol.for("apitally.config");
76
+ const configHolder = globalThis;
77
+ function setConfig(options = {}) {
78
+ const { config, error } = resolveConfig(options);
79
+ const currentConfig = configHolder[GLOBAL_CONFIG_KEY];
80
+ if (currentConfig) {
81
+ if (!isSameConfig(config, currentConfig)) {
82
+ (0, import_logger.logWarning)(
83
+ "useApitally() was called again with different options; the first call's configuration stays in effect"
84
+ );
85
+ }
86
+ return currentConfig;
87
+ }
88
+ if (error) {
89
+ (0, import_logger.logError)(error);
90
+ }
91
+ configHolder[GLOBAL_CONFIG_KEY] = config;
92
+ return config;
93
+ }
94
+ function getConfig() {
95
+ return configHolder[GLOBAL_CONFIG_KEY] ?? resolveConfig({}).config;
96
+ }
97
+ function isValidWriteToken(value) {
98
+ return WRITE_TOKEN_FORMAT.test(value);
99
+ }
100
+ function isApitallyDisabledViaEnv() {
101
+ return isTruthyEnvValue(process.env.APITALLY_DISABLED);
102
+ }
103
+ function matchesAny(patterns, value) {
104
+ return patterns.some((pattern) => pattern.test(value));
105
+ }
106
+ function compilePatterns(defaults, userPatterns = []) {
107
+ return [...defaults, ...userPatterns].map((pattern) => new RegExp(pattern, "i"));
108
+ }
109
+ function resolveConfig(options) {
110
+ const config = {
111
+ writeToken: options.writeToken ?? nonEmptyEnvVar("APITALLY_WRITE_TOKEN") ?? "",
112
+ env: options.env ?? nonEmptyEnvVar("APITALLY_ENV") ?? DEFAULT_ENV,
113
+ appVersion: options.appVersion,
114
+ disabled: options.disabled ?? (isTruthyEnvValue(process.env.APITALLY_DISABLED) || isTruthyEnvValue(process.env.OTEL_SDK_DISABLED)),
115
+ captureLogs: options.captureLogs ?? true,
116
+ captureRequestHeaders: options.captureRequestHeaders ?? false,
117
+ captureRequestBody: options.captureRequestBody ?? false,
118
+ captureResponseHeaders: options.captureResponseHeaders ?? true,
119
+ captureResponseBody: options.captureResponseBody ?? false,
120
+ maskQueryParams: dropInvalidPatterns("maskQueryParams", options.maskQueryParams),
121
+ maskHeaders: dropInvalidPatterns("maskHeaders", options.maskHeaders),
122
+ maskBodyFields: dropInvalidPatterns("maskBodyFields", options.maskBodyFields),
123
+ maskRequestBody: options.maskRequestBody,
124
+ maskResponseBody: options.maskResponseBody,
125
+ excludePaths: dropInvalidPatterns("excludePaths", options.excludePaths),
126
+ // An invalid sampleRate resolves to capturing everything: no data is lost, so no warning.
127
+ sampleRate: typeof options.sampleRate === "number" && options.sampleRate >= 0 && options.sampleRate <= 1 ? options.sampleRate : 1,
128
+ sampleOnRequest: options.sampleOnRequest,
129
+ sampleOnResponse: options.sampleOnResponse,
130
+ otlpEndpoint: nonEmptyEnvVar("APITALLY_OTLP_ENDPOINT") ?? DEFAULT_OTLP_ENDPOINT
131
+ };
132
+ if (config.disabled) {
133
+ return { config };
134
+ }
135
+ if (!config.writeToken) {
136
+ config.disabled = true;
137
+ return {
138
+ config,
139
+ error: "Apitally write token is missing (set the writeToken option or the APITALLY_WRITE_TOKEN environment variable)"
140
+ };
141
+ }
142
+ if (!isValidWriteToken(config.writeToken)) {
143
+ config.disabled = true;
144
+ return {
145
+ config,
146
+ error: `Apitally write token has an invalid format: ${config.writeToken.slice(0, 8)}...`
147
+ };
148
+ }
149
+ if (!isHttpUrl(config.otlpEndpoint)) {
150
+ config.disabled = true;
151
+ return {
152
+ config,
153
+ error: `Apitally OTLP endpoint is not a valid HTTP or HTTPS URL: ${config.otlpEndpoint}`
154
+ };
155
+ }
156
+ return { config };
157
+ }
158
+ function isHttpUrl(value) {
159
+ let url;
160
+ try {
161
+ url = new URL(value);
162
+ } catch {
163
+ return false;
164
+ }
165
+ return url.protocol === "http:" || url.protocol === "https:";
166
+ }
167
+ function dropInvalidPatterns(optionName, patterns = []) {
168
+ return patterns.filter((pattern) => {
169
+ try {
170
+ new RegExp(pattern);
171
+ return true;
172
+ } catch {
173
+ (0, import_logger.logError)(`Invalid regular expression pattern in ${optionName} ignored: ${pattern}`);
174
+ return false;
175
+ }
176
+ });
177
+ }
178
+ function isSameConfig(a, b) {
179
+ return Object.keys(a).every((key) => {
180
+ const left = a[key];
181
+ const right = b[key];
182
+ if (Array.isArray(left) && Array.isArray(right)) {
183
+ return left.length === right.length && left.every((item, index) => item === right[index]);
184
+ }
185
+ return left === right;
186
+ });
187
+ }
188
+ function isTruthyEnvValue(value) {
189
+ return value !== void 0 && TRUE_VALUES.has(value.trim().toLowerCase());
190
+ }
191
+ function nonEmptyEnvVar(name) {
192
+ return process.env[name] || void 0;
193
+ }
194
+ // Annotate the CommonJS export names for ESM import in node:
195
+ 0 && (module.exports = {
196
+ DEFAULT_ENV,
197
+ DEFAULT_EXCLUDE_PATHS,
198
+ DEFAULT_MASK_BODY_FIELDS,
199
+ DEFAULT_MASK_HEADERS,
200
+ DEFAULT_MASK_QUERY_PARAMS,
201
+ EXCLUDE_USER_AGENTS,
202
+ compilePatterns,
203
+ getConfig,
204
+ isApitallyDisabledViaEnv,
205
+ isValidWriteToken,
206
+ matchesAny,
207
+ setConfig
208
+ });
209
+ //# sourceMappingURL=config.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { logError, logWarning } from \"./logger.js\";\n\nexport type BodyMaskingCallback = (body: Buffer, span: ReadableSpan) => Buffer | null;\nexport type SamplingCallback = (span: ReadableSpan) => number | boolean | undefined;\n\nexport interface ApitallyOptions {\n writeToken?: string;\n env?: string;\n appVersion?: string;\n disabled?: boolean;\n captureLogs?: boolean;\n captureRequestHeaders?: boolean;\n captureRequestBody?: boolean;\n captureResponseHeaders?: boolean;\n captureResponseBody?: boolean;\n maskQueryParams?: string[];\n maskHeaders?: string[];\n maskBodyFields?: string[];\n maskRequestBody?: BodyMaskingCallback;\n maskResponseBody?: BodyMaskingCallback;\n excludePaths?: string[];\n sampleRate?: number;\n sampleOnRequest?: SamplingCallback;\n sampleOnResponse?: SamplingCallback;\n}\n\ntype OptionalConfigKeys =\n | \"appVersion\"\n | \"maskRequestBody\"\n | \"maskResponseBody\"\n | \"sampleOnRequest\"\n | \"sampleOnResponse\";\n\nexport type ApitallyConfig = Required<Omit<ApitallyOptions, OptionalConfigKeys>> &\n Pick<ApitallyOptions, OptionalConfigKeys> & { otlpEndpoint: string };\n\nconst DEFAULT_OTLP_ENDPOINT = \"https://otlp.apitally.io\";\nexport const DEFAULT_ENV = \"dev\";\n\n// User-supplied patterns extend these defaults, never replace them.\nexport const DEFAULT_MASK_QUERY_PARAMS = [\"auth\", \"api-?key\", \"secret\", \"token\", \"password\", \"pwd\"];\nexport const DEFAULT_MASK_HEADERS = [\"auth\", \"api-?key\", \"secret\", \"token\", \"cookie\"];\nexport const DEFAULT_MASK_BODY_FIELDS = [\n \"password\",\n \"pwd\",\n \"token\",\n \"secret\",\n \"auth\",\n \"card[-_ ]?number\",\n \"ccv\",\n \"ssn\",\n];\nexport const DEFAULT_EXCLUDE_PATHS = [\n \"/_?healthz?$\",\n \"/_?health[-_]?checks?$\",\n \"/_?heart[-_]?beats?$\",\n \"/ping$\",\n \"/ready$\",\n \"/live$\",\n \"/favicon(?:-[\\\\w-]+)?\\\\.(ico|png|svg)$\",\n \"/apple-touch-icon(?:-[\\\\w-]+)?\\\\.png$\",\n \"/robots\\\\.txt$\",\n \"/sitemap\\\\.xml$\",\n \"/manifest\\\\.json$\",\n \"/site\\\\.webmanifest$\",\n \"/service-worker\\\\.js$\",\n \"/sw\\\\.js$\",\n \"/\\\\.well-known/\",\n];\nexport const EXCLUDE_USER_AGENTS = [\n \"health[-_ ]?check\",\n \"microsoft-azure-application-lb\",\n \"googlehc\",\n \"kube-probe\",\n];\n\nconst WRITE_TOKEN_FORMAT = /^apt_[a-zA-Z0-9]{24}$/;\nconst TRUE_VALUES = new Set([\"1\", \"true\", \"yes\"]);\n\n// The ESM and CJS builds can load together, so a Symbol.for key gives both\n// copies the same configuration.\nconst GLOBAL_CONFIG_KEY = Symbol.for(\"apitally.config\");\nconst configHolder = globalThis as Record<symbol, ApitallyConfig | undefined>;\n\nexport function setConfig(options: ApitallyOptions = {}): ApitallyConfig {\n const { config, error } = resolveConfig(options);\n const currentConfig = configHolder[GLOBAL_CONFIG_KEY];\n if (currentConfig) {\n if (!isSameConfig(config, currentConfig)) {\n logWarning(\n \"useApitally() was called again with different options; the first call's configuration stays in effect\",\n );\n }\n return currentConfig;\n }\n if (error) {\n logError(error);\n }\n configHolder[GLOBAL_CONFIG_KEY] = config;\n return config;\n}\n\nexport function getConfig(): ApitallyConfig {\n return configHolder[GLOBAL_CONFIG_KEY] ?? resolveConfig({}).config;\n}\n\nexport function isValidWriteToken(value: string): boolean {\n return WRITE_TOKEN_FORMAT.test(value);\n}\n\n// The emergency kill switch, re-checked at the activation boundary so it wins\n// even over an explicit disabled: false option.\nexport function isApitallyDisabledViaEnv(): boolean {\n return isTruthyEnvValue(process.env.APITALLY_DISABLED);\n}\n\nexport function matchesAny(patterns: RegExp[], value: string): boolean {\n return patterns.some((pattern) => pattern.test(value));\n}\n\nexport function compilePatterns(defaults: string[], userPatterns: string[] = []): RegExp[] {\n return [...defaults, ...userPatterns].map((pattern) => new RegExp(pattern, \"i\"));\n}\n\nfunction resolveConfig(options: ApitallyOptions): {\n config: ApitallyConfig;\n error?: string;\n} {\n const config: ApitallyConfig = {\n writeToken: options.writeToken ?? nonEmptyEnvVar(\"APITALLY_WRITE_TOKEN\") ?? \"\",\n env: options.env ?? nonEmptyEnvVar(\"APITALLY_ENV\") ?? DEFAULT_ENV,\n appVersion: options.appVersion,\n disabled:\n options.disabled ??\n (isTruthyEnvValue(process.env.APITALLY_DISABLED) ||\n isTruthyEnvValue(process.env.OTEL_SDK_DISABLED)),\n captureLogs: options.captureLogs ?? true,\n captureRequestHeaders: options.captureRequestHeaders ?? false,\n captureRequestBody: options.captureRequestBody ?? false,\n captureResponseHeaders: options.captureResponseHeaders ?? true,\n captureResponseBody: options.captureResponseBody ?? false,\n maskQueryParams: dropInvalidPatterns(\"maskQueryParams\", options.maskQueryParams),\n maskHeaders: dropInvalidPatterns(\"maskHeaders\", options.maskHeaders),\n maskBodyFields: dropInvalidPatterns(\"maskBodyFields\", options.maskBodyFields),\n maskRequestBody: options.maskRequestBody,\n maskResponseBody: options.maskResponseBody,\n excludePaths: dropInvalidPatterns(\"excludePaths\", options.excludePaths),\n // An invalid sampleRate resolves to capturing everything: no data is lost, so no warning.\n sampleRate:\n typeof options.sampleRate === \"number\" && options.sampleRate >= 0 && options.sampleRate <= 1\n ? options.sampleRate\n : 1,\n sampleOnRequest: options.sampleOnRequest,\n sampleOnResponse: options.sampleOnResponse,\n otlpEndpoint: nonEmptyEnvVar(\"APITALLY_OTLP_ENDPOINT\") ?? DEFAULT_OTLP_ENDPOINT,\n };\n if (config.disabled) {\n return { config };\n }\n if (!config.writeToken) {\n config.disabled = true;\n return {\n config,\n error:\n \"Apitally write token is missing (set the writeToken option or the APITALLY_WRITE_TOKEN environment variable)\",\n };\n }\n if (!isValidWriteToken(config.writeToken)) {\n config.disabled = true;\n // The write token is a credential and must never appear unmasked in logs.\n return {\n config,\n error: `Apitally write token has an invalid format: ${config.writeToken.slice(0, 8)}...`,\n };\n }\n if (!isHttpUrl(config.otlpEndpoint)) {\n config.disabled = true;\n return {\n config,\n error: `Apitally OTLP endpoint is not a valid HTTP or HTTPS URL: ${config.otlpEndpoint}`,\n };\n }\n return { config };\n}\n\nfunction isHttpUrl(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n\n// An invalid pattern without an error could leave data unredacted, so invalid\n// patterns are logged and omitted.\nfunction dropInvalidPatterns(optionName: string, patterns: string[] = []): string[] {\n return patterns.filter((pattern) => {\n try {\n new RegExp(pattern);\n return true;\n } catch {\n logError(`Invalid regular expression pattern in ${optionName} ignored: ${pattern}`);\n return false;\n }\n });\n}\n\nfunction isSameConfig(a: ApitallyConfig, b: ApitallyConfig): boolean {\n return (Object.keys(a) as (keyof ApitallyConfig)[]).every((key) => {\n const left = a[key];\n const right = b[key];\n if (Array.isArray(left) && Array.isArray(right)) {\n return left.length === right.length && left.every((item, index) => item === right[index]);\n }\n return left === right;\n });\n}\n\nfunction isTruthyEnvValue(value: string | undefined): boolean {\n return value !== undefined && TRUE_VALUES.has(value.trim().toLowerCase());\n}\n\nfunction nonEmptyEnvVar(name: string): string | undefined {\n return process.env[name] || undefined;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,42 @@
1
+ import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
2
+
3
+ type BodyMaskingCallback = (body: Buffer, span: ReadableSpan) => Buffer | null;
4
+ type SamplingCallback = (span: ReadableSpan) => number | boolean | undefined;
5
+ interface ApitallyOptions {
6
+ writeToken?: string;
7
+ env?: string;
8
+ appVersion?: string;
9
+ disabled?: boolean;
10
+ captureLogs?: boolean;
11
+ captureRequestHeaders?: boolean;
12
+ captureRequestBody?: boolean;
13
+ captureResponseHeaders?: boolean;
14
+ captureResponseBody?: boolean;
15
+ maskQueryParams?: string[];
16
+ maskHeaders?: string[];
17
+ maskBodyFields?: string[];
18
+ maskRequestBody?: BodyMaskingCallback;
19
+ maskResponseBody?: BodyMaskingCallback;
20
+ excludePaths?: string[];
21
+ sampleRate?: number;
22
+ sampleOnRequest?: SamplingCallback;
23
+ sampleOnResponse?: SamplingCallback;
24
+ }
25
+ type OptionalConfigKeys = "appVersion" | "maskRequestBody" | "maskResponseBody" | "sampleOnRequest" | "sampleOnResponse";
26
+ type ApitallyConfig = Required<Omit<ApitallyOptions, OptionalConfigKeys>> & Pick<ApitallyOptions, OptionalConfigKeys> & {
27
+ otlpEndpoint: string;
28
+ };
29
+ declare const DEFAULT_ENV = "dev";
30
+ declare const DEFAULT_MASK_QUERY_PARAMS: string[];
31
+ declare const DEFAULT_MASK_HEADERS: string[];
32
+ declare const DEFAULT_MASK_BODY_FIELDS: string[];
33
+ declare const DEFAULT_EXCLUDE_PATHS: string[];
34
+ declare const EXCLUDE_USER_AGENTS: string[];
35
+ declare function setConfig(options?: ApitallyOptions): ApitallyConfig;
36
+ declare function getConfig(): ApitallyConfig;
37
+ declare function isValidWriteToken(value: string): boolean;
38
+ declare function isApitallyDisabledViaEnv(): boolean;
39
+ declare function matchesAny(patterns: RegExp[], value: string): boolean;
40
+ declare function compilePatterns(defaults: string[], userPatterns?: string[]): RegExp[];
41
+
42
+ export { type ApitallyConfig, type ApitallyOptions, type BodyMaskingCallback, DEFAULT_ENV, DEFAULT_EXCLUDE_PATHS, DEFAULT_MASK_BODY_FIELDS, DEFAULT_MASK_HEADERS, DEFAULT_MASK_QUERY_PARAMS, EXCLUDE_USER_AGENTS, type SamplingCallback, compilePatterns, getConfig, isApitallyDisabledViaEnv, isValidWriteToken, matchesAny, setConfig };
@@ -0,0 +1,42 @@
1
+ import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
2
+
3
+ type BodyMaskingCallback = (body: Buffer, span: ReadableSpan) => Buffer | null;
4
+ type SamplingCallback = (span: ReadableSpan) => number | boolean | undefined;
5
+ interface ApitallyOptions {
6
+ writeToken?: string;
7
+ env?: string;
8
+ appVersion?: string;
9
+ disabled?: boolean;
10
+ captureLogs?: boolean;
11
+ captureRequestHeaders?: boolean;
12
+ captureRequestBody?: boolean;
13
+ captureResponseHeaders?: boolean;
14
+ captureResponseBody?: boolean;
15
+ maskQueryParams?: string[];
16
+ maskHeaders?: string[];
17
+ maskBodyFields?: string[];
18
+ maskRequestBody?: BodyMaskingCallback;
19
+ maskResponseBody?: BodyMaskingCallback;
20
+ excludePaths?: string[];
21
+ sampleRate?: number;
22
+ sampleOnRequest?: SamplingCallback;
23
+ sampleOnResponse?: SamplingCallback;
24
+ }
25
+ type OptionalConfigKeys = "appVersion" | "maskRequestBody" | "maskResponseBody" | "sampleOnRequest" | "sampleOnResponse";
26
+ type ApitallyConfig = Required<Omit<ApitallyOptions, OptionalConfigKeys>> & Pick<ApitallyOptions, OptionalConfigKeys> & {
27
+ otlpEndpoint: string;
28
+ };
29
+ declare const DEFAULT_ENV = "dev";
30
+ declare const DEFAULT_MASK_QUERY_PARAMS: string[];
31
+ declare const DEFAULT_MASK_HEADERS: string[];
32
+ declare const DEFAULT_MASK_BODY_FIELDS: string[];
33
+ declare const DEFAULT_EXCLUDE_PATHS: string[];
34
+ declare const EXCLUDE_USER_AGENTS: string[];
35
+ declare function setConfig(options?: ApitallyOptions): ApitallyConfig;
36
+ declare function getConfig(): ApitallyConfig;
37
+ declare function isValidWriteToken(value: string): boolean;
38
+ declare function isApitallyDisabledViaEnv(): boolean;
39
+ declare function matchesAny(patterns: RegExp[], value: string): boolean;
40
+ declare function compilePatterns(defaults: string[], userPatterns?: string[]): RegExp[];
41
+
42
+ export { type ApitallyConfig, type ApitallyOptions, type BodyMaskingCallback, DEFAULT_ENV, DEFAULT_EXCLUDE_PATHS, DEFAULT_MASK_BODY_FIELDS, DEFAULT_MASK_HEADERS, DEFAULT_MASK_QUERY_PARAMS, EXCLUDE_USER_AGENTS, type SamplingCallback, compilePatterns, getConfig, isApitallyDisabledViaEnv, isValidWriteToken, matchesAny, setConfig };