apitally 0.25.8 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/README.md +228 -178
  2. package/dist/activation.cjs +393 -0
  3. package/dist/activation.cjs.map +1 -0
  4. package/dist/activation.d.cts +42 -0
  5. package/dist/activation.d.ts +42 -0
  6. package/dist/activation.js +383 -0
  7. package/dist/activation.js.map +1 -0
  8. package/dist/adonisjs/configure.cjs +86 -30
  9. package/dist/adonisjs/configure.cjs.map +1 -1
  10. package/dist/adonisjs/configure.d.cts +0 -4
  11. package/dist/adonisjs/configure.d.ts +0 -4
  12. package/dist/adonisjs/configure.js +83 -29
  13. package/dist/adonisjs/configure.js.map +1 -1
  14. package/dist/adonisjs/index.cjs +38 -21
  15. package/dist/adonisjs/index.cjs.map +1 -1
  16. package/dist/adonisjs/index.d.cts +5 -14
  17. package/dist/adonisjs/index.d.ts +5 -14
  18. package/dist/adonisjs/index.js +39 -18
  19. package/dist/adonisjs/index.js.map +1 -1
  20. package/dist/adonisjs/middleware.cjs +43 -109
  21. package/dist/adonisjs/middleware.cjs.map +1 -1
  22. package/dist/adonisjs/middleware.d.cts +1 -16
  23. package/dist/adonisjs/middleware.d.ts +1 -16
  24. package/dist/adonisjs/middleware.js +43 -110
  25. package/dist/adonisjs/middleware.js.map +1 -1
  26. package/dist/adonisjs/provider.cjs +19 -87
  27. package/dist/adonisjs/provider.cjs.map +1 -1
  28. package/dist/adonisjs/provider.d.cts +0 -22
  29. package/dist/adonisjs/provider.d.ts +0 -22
  30. package/dist/adonisjs/provider.js +19 -88
  31. package/dist/adonisjs/provider.js.map +1 -1
  32. package/dist/adonisjs/stubs/config/apitally.stub +11 -15
  33. package/dist/bodyCapture.cjs +128 -0
  34. package/dist/bodyCapture.cjs.map +1 -0
  35. package/dist/bodyCapture.d.cts +31 -0
  36. package/dist/bodyCapture.d.ts +31 -0
  37. package/dist/bodyCapture.js +101 -0
  38. package/dist/bodyCapture.js.map +1 -0
  39. package/dist/config.cjs +227 -0
  40. package/dist/config.cjs.map +1 -0
  41. package/dist/config.d.cts +45 -0
  42. package/dist/config.d.ts +45 -0
  43. package/dist/config.js +192 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/consumer.cjs +98 -0
  46. package/dist/consumer.cjs.map +1 -0
  47. package/dist/consumer.d.cts +15 -0
  48. package/dist/consumer.d.ts +15 -0
  49. package/dist/consumer.js +78 -0
  50. package/dist/consumer.js.map +1 -0
  51. package/dist/context.cjs +68 -0
  52. package/dist/context.cjs.map +1 -0
  53. package/dist/context.d.cts +33 -0
  54. package/dist/context.d.ts +33 -0
  55. package/dist/context.js +40 -0
  56. package/dist/context.js.map +1 -0
  57. package/dist/elysia/index.cjs +12 -3
  58. package/dist/elysia/index.cjs.map +1 -1
  59. package/dist/elysia/index.d.cts +8 -16
  60. package/dist/elysia/index.d.ts +8 -16
  61. package/dist/elysia/index.js +10 -2
  62. package/dist/elysia/index.js.map +1 -1
  63. package/dist/elysia/middleware.cjs +261 -0
  64. package/dist/elysia/middleware.cjs.map +1 -0
  65. package/dist/elysia/middleware.d.cts +14 -0
  66. package/dist/elysia/middleware.d.ts +14 -0
  67. package/dist/elysia/middleware.js +250 -0
  68. package/dist/elysia/middleware.js.map +1 -0
  69. package/dist/{otel/index.cjs → elysia/routes.cjs} +16 -7
  70. package/dist/elysia/routes.cjs.map +1 -0
  71. package/dist/elysia/routes.d.cts +7 -0
  72. package/dist/elysia/routes.d.ts +7 -0
  73. package/dist/elysia/routes.js +14 -0
  74. package/dist/elysia/routes.js.map +1 -0
  75. package/dist/exceptions.cjs +81 -0
  76. package/dist/exceptions.cjs.map +1 -0
  77. package/dist/exceptions.d.cts +7 -0
  78. package/dist/exceptions.d.ts +7 -0
  79. package/dist/exceptions.js +55 -0
  80. package/dist/exceptions.js.map +1 -0
  81. package/dist/exportSerialization.cjs +56 -0
  82. package/dist/exportSerialization.cjs.map +1 -0
  83. package/dist/exportSerialization.d.cts +7 -0
  84. package/dist/exportSerialization.d.ts +7 -0
  85. package/dist/exportSerialization.js +32 -0
  86. package/dist/exportSerialization.js.map +1 -0
  87. package/dist/exportWorker.cjs +305 -0
  88. package/dist/exportWorker.cjs.map +1 -0
  89. package/dist/exportWorker.d.cts +46 -0
  90. package/dist/exportWorker.d.ts +46 -0
  91. package/dist/exportWorker.js +279 -0
  92. package/dist/exportWorker.js.map +1 -0
  93. package/dist/express/index.cjs +9 -4
  94. package/dist/express/index.cjs.map +1 -1
  95. package/dist/express/index.d.cts +7 -10
  96. package/dist/express/index.d.ts +7 -10
  97. package/dist/express/index.js +8 -2
  98. package/dist/express/index.js.map +1 -1
  99. package/dist/express/install.cjs +45 -0
  100. package/dist/express/install.cjs.map +1 -0
  101. package/dist/express/install.d.cts +10 -0
  102. package/dist/express/install.d.ts +10 -0
  103. package/dist/express/install.js +21 -0
  104. package/dist/express/install.js.map +1 -0
  105. package/dist/express/middleware.cjs +87 -331
  106. package/dist/express/middleware.cjs.map +1 -1
  107. package/dist/express/middleware.d.cts +3 -21
  108. package/dist/express/middleware.d.ts +3 -21
  109. package/dist/express/middleware.js +91 -327
  110. package/dist/express/middleware.js.map +1 -1
  111. package/dist/express/register.cjs +20 -0
  112. package/dist/express/register.cjs.map +1 -0
  113. package/dist/express/register.d.cts +2 -0
  114. package/dist/express/register.d.ts +2 -0
  115. package/dist/express/register.js +19 -0
  116. package/dist/express/register.js.map +1 -0
  117. package/dist/express/routes.cjs +429 -0
  118. package/dist/express/routes.cjs.map +1 -0
  119. package/dist/express/routes.d.cts +14 -0
  120. package/dist/express/routes.d.ts +14 -0
  121. package/dist/express/routes.js +401 -0
  122. package/dist/express/routes.js.map +1 -0
  123. package/dist/fastify/index.cjs +10 -5
  124. package/dist/fastify/index.cjs.map +1 -1
  125. package/dist/fastify/index.d.cts +7 -11
  126. package/dist/fastify/index.d.ts +7 -11
  127. package/dist/fastify/index.js +9 -3
  128. package/dist/fastify/index.js.map +1 -1
  129. package/dist/{loggers/index.cjs → fastify/install.cjs} +17 -19
  130. package/dist/fastify/install.cjs.map +1 -0
  131. package/dist/fastify/install.d.cts +10 -0
  132. package/dist/fastify/install.d.ts +10 -0
  133. package/dist/fastify/install.js +15 -0
  134. package/dist/fastify/install.js.map +1 -0
  135. package/dist/fastify/middleware.cjs +135 -0
  136. package/dist/fastify/middleware.cjs.map +1 -0
  137. package/dist/fastify/middleware.d.cts +7 -0
  138. package/dist/fastify/middleware.d.ts +7 -0
  139. package/dist/fastify/middleware.js +114 -0
  140. package/dist/fastify/middleware.js.map +1 -0
  141. package/dist/{common/paramValidation.cjs → fastify/routes.cjs} +15 -17
  142. package/dist/fastify/routes.cjs.map +1 -0
  143. package/dist/fastify/routes.d.cts +8 -0
  144. package/dist/fastify/routes.d.ts +8 -0
  145. package/dist/fastify/routes.js +14 -0
  146. package/dist/fastify/routes.js.map +1 -0
  147. package/dist/h3/index.cjs +28 -4
  148. package/dist/h3/index.cjs.map +1 -1
  149. package/dist/h3/index.d.cts +8 -10
  150. package/dist/h3/index.d.ts +8 -10
  151. package/dist/h3/index.js +26 -2
  152. package/dist/h3/index.js.map +1 -1
  153. package/dist/h3/middleware.cjs +210 -0
  154. package/dist/h3/middleware.cjs.map +1 -0
  155. package/dist/h3/middleware.d.cts +5 -0
  156. package/dist/h3/middleware.d.ts +5 -0
  157. package/dist/h3/middleware.js +194 -0
  158. package/dist/h3/middleware.js.map +1 -0
  159. package/dist/h3/routes.cjs +66 -0
  160. package/dist/h3/routes.cjs.map +1 -0
  161. package/dist/h3/routes.d.cts +8 -0
  162. package/dist/h3/routes.d.ts +8 -0
  163. package/dist/h3/routes.js +41 -0
  164. package/dist/h3/routes.js.map +1 -0
  165. package/dist/hapi/index.cjs +15 -4
  166. package/dist/hapi/index.cjs.map +1 -1
  167. package/dist/hapi/index.d.cts +8 -10
  168. package/dist/hapi/index.d.ts +8 -10
  169. package/dist/hapi/index.js +13 -2
  170. package/dist/hapi/index.js.map +1 -1
  171. package/dist/{loggers/hapi.cjs → hapi/install.cjs} +20 -26
  172. package/dist/hapi/install.cjs.map +1 -0
  173. package/dist/hapi/install.d.cts +8 -0
  174. package/dist/hapi/install.d.ts +8 -0
  175. package/dist/hapi/install.js +22 -0
  176. package/dist/hapi/install.js.map +1 -0
  177. package/dist/hapi/middleware.cjs +158 -0
  178. package/dist/hapi/middleware.cjs.map +1 -0
  179. package/dist/hapi/middleware.d.cts +5 -0
  180. package/dist/hapi/middleware.d.ts +5 -0
  181. package/dist/hapi/middleware.js +137 -0
  182. package/dist/hapi/middleware.js.map +1 -0
  183. package/dist/{common/logging.cjs → hapi/routes.cjs} +14 -17
  184. package/dist/hapi/routes.cjs.map +1 -0
  185. package/dist/hapi/routes.d.cts +8 -0
  186. package/dist/hapi/routes.d.ts +8 -0
  187. package/dist/hapi/routes.js +12 -0
  188. package/dist/hapi/routes.js.map +1 -0
  189. package/dist/hono/index.cjs +13 -3
  190. package/dist/hono/index.cjs.map +1 -1
  191. package/dist/hono/index.d.cts +7 -10
  192. package/dist/hono/index.d.ts +7 -10
  193. package/dist/hono/index.js +13 -2
  194. package/dist/hono/index.js.map +1 -1
  195. package/dist/hono/middleware.cjs +219 -127
  196. package/dist/hono/middleware.cjs.map +1 -1
  197. package/dist/hono/middleware.d.cts +3 -18
  198. package/dist/hono/middleware.d.ts +3 -18
  199. package/dist/hono/middleware.js +229 -126
  200. package/dist/hono/middleware.js.map +1 -1
  201. package/dist/hono/routes.cjs +74 -0
  202. package/dist/hono/routes.cjs.map +1 -0
  203. package/dist/hono/routes.d.cts +8 -0
  204. package/dist/hono/routes.d.ts +8 -0
  205. package/dist/hono/routes.js +49 -0
  206. package/dist/hono/routes.js.map +1 -0
  207. package/dist/index.cjs +108 -0
  208. package/dist/index.cjs.map +1 -1
  209. package/dist/index.d.cts +29 -1
  210. package/dist/index.d.ts +29 -1
  211. package/dist/index.js +77 -0
  212. package/dist/index.js.map +1 -1
  213. package/dist/koa/index.cjs +13 -3
  214. package/dist/koa/index.cjs.map +1 -1
  215. package/dist/koa/index.d.cts +7 -10
  216. package/dist/koa/index.d.ts +7 -10
  217. package/dist/koa/index.js +13 -2
  218. package/dist/koa/index.js.map +1 -1
  219. package/dist/koa/middleware.cjs +85 -184
  220. package/dist/koa/middleware.cjs.map +1 -1
  221. package/dist/koa/middleware.d.cts +3 -13
  222. package/dist/koa/middleware.d.ts +3 -13
  223. package/dist/koa/middleware.js +88 -183
  224. package/dist/koa/middleware.js.map +1 -1
  225. package/dist/koa/routes.cjs +71 -0
  226. package/dist/koa/routes.cjs.map +1 -0
  227. package/dist/koa/routes.d.cts +8 -0
  228. package/dist/koa/routes.d.ts +8 -0
  229. package/dist/koa/routes.js +46 -0
  230. package/dist/koa/routes.js.map +1 -0
  231. package/dist/logCapture.cjs +417 -0
  232. package/dist/logCapture.cjs.map +1 -0
  233. package/dist/logCapture.d.cts +18 -0
  234. package/dist/logCapture.d.ts +18 -0
  235. package/dist/logCapture.js +390 -0
  236. package/dist/logCapture.js.map +1 -0
  237. package/dist/logRecordExporter.cjs +51 -0
  238. package/dist/logRecordExporter.cjs.map +1 -0
  239. package/dist/logRecordExporter.d.cts +14 -0
  240. package/dist/logRecordExporter.d.ts +14 -0
  241. package/dist/logRecordExporter.js +27 -0
  242. package/dist/logRecordExporter.js.map +1 -0
  243. package/dist/logRecordProcessor.cjs +137 -0
  244. package/dist/logRecordProcessor.cjs.map +1 -0
  245. package/dist/logRecordProcessor.d.cts +27 -0
  246. package/dist/logRecordProcessor.d.ts +27 -0
  247. package/dist/logRecordProcessor.js +113 -0
  248. package/dist/logRecordProcessor.js.map +1 -0
  249. package/dist/logger.cjs +62 -0
  250. package/dist/logger.cjs.map +1 -0
  251. package/dist/logger.d.cts +7 -0
  252. package/dist/logger.d.ts +7 -0
  253. package/dist/logger.js +34 -0
  254. package/dist/logger.js.map +1 -0
  255. package/dist/metrics.cjs +171 -0
  256. package/dist/metrics.cjs.map +1 -0
  257. package/dist/metrics.d.cts +26 -0
  258. package/dist/metrics.d.ts +26 -0
  259. package/dist/metrics.js +153 -0
  260. package/dist/metrics.js.map +1 -0
  261. package/dist/nestjs/index.cjs +81 -71
  262. package/dist/nestjs/index.cjs.map +1 -1
  263. package/dist/nestjs/index.d.cts +4 -11
  264. package/dist/nestjs/index.d.ts +4 -11
  265. package/dist/nestjs/index.js +81 -61
  266. package/dist/nestjs/index.js.map +1 -1
  267. package/dist/packageVersion.cjs +67 -0
  268. package/dist/packageVersion.cjs.map +1 -0
  269. package/dist/packageVersion.d.cts +5 -0
  270. package/dist/packageVersion.d.ts +5 -0
  271. package/dist/packageVersion.js +39 -0
  272. package/dist/packageVersion.js.map +1 -0
  273. package/dist/providers.cjs +149 -0
  274. package/dist/providers.cjs.map +1 -0
  275. package/dist/providers.d.cts +15 -0
  276. package/dist/providers.d.ts +15 -0
  277. package/dist/providers.js +136 -0
  278. package/dist/providers.js.map +1 -0
  279. package/dist/redaction.cjs +116 -0
  280. package/dist/redaction.cjs.map +1 -0
  281. package/dist/redaction.d.cts +17 -0
  282. package/dist/redaction.d.ts +17 -0
  283. package/dist/redaction.js +98 -0
  284. package/dist/redaction.js.map +1 -0
  285. package/dist/{common/packageVersions.cjs → requestAttributes.cjs} +21 -19
  286. package/dist/requestAttributes.cjs.map +1 -0
  287. package/dist/requestAttributes.d.cts +10 -0
  288. package/dist/requestAttributes.d.ts +10 -0
  289. package/dist/requestAttributes.js +22 -0
  290. package/dist/requestAttributes.js.map +1 -0
  291. package/dist/requestObservation.cjs +246 -0
  292. package/dist/requestObservation.cjs.map +1 -0
  293. package/dist/requestObservation.d.cts +62 -0
  294. package/dist/requestObservation.d.ts +62 -0
  295. package/dist/requestObservation.js +226 -0
  296. package/dist/requestObservation.js.map +1 -0
  297. package/dist/requestObservationNode.cjs +193 -0
  298. package/dist/requestObservationNode.cjs.map +1 -0
  299. package/dist/requestObservationNode.d.cts +31 -0
  300. package/dist/requestObservationNode.d.ts +31 -0
  301. package/dist/requestObservationNode.js +170 -0
  302. package/dist/requestObservationNode.js.map +1 -0
  303. package/dist/requestObservationWeb.cjs +202 -0
  304. package/dist/requestObservationWeb.cjs.map +1 -0
  305. package/dist/requestObservationWeb.d.cts +34 -0
  306. package/dist/requestObservationWeb.d.ts +34 -0
  307. package/dist/requestObservationWeb.js +182 -0
  308. package/dist/requestObservationWeb.js.map +1 -0
  309. package/dist/sentry.cjs +103 -0
  310. package/dist/sentry.cjs.map +1 -0
  311. package/dist/sentry.d.cts +3 -0
  312. package/dist/sentry.d.ts +3 -0
  313. package/dist/sentry.js +79 -0
  314. package/dist/sentry.js.map +1 -0
  315. package/dist/serverErrors.cjs +118 -0
  316. package/dist/serverErrors.cjs.map +1 -0
  317. package/dist/serverErrors.d.cts +8 -0
  318. package/dist/serverErrors.d.ts +8 -0
  319. package/dist/serverErrors.js +91 -0
  320. package/dist/serverErrors.js.map +1 -0
  321. package/dist/spanExporter.cjs +217 -0
  322. package/dist/spanExporter.cjs.map +1 -0
  323. package/dist/spanExporter.d.cts +34 -0
  324. package/dist/spanExporter.d.ts +34 -0
  325. package/dist/spanExporter.js +193 -0
  326. package/dist/spanExporter.js.map +1 -0
  327. package/dist/spanProcessor.cjs +535 -0
  328. package/dist/spanProcessor.cjs.map +1 -0
  329. package/dist/spanProcessor.d.cts +70 -0
  330. package/dist/spanProcessor.d.ts +70 -0
  331. package/dist/spanProcessor.js +513 -0
  332. package/dist/spanProcessor.js.map +1 -0
  333. package/dist/spool.cjs +314 -0
  334. package/dist/spool.cjs.map +1 -0
  335. package/dist/spool.d.cts +49 -0
  336. package/dist/spool.d.ts +49 -0
  337. package/dist/spool.js +297 -0
  338. package/dist/spool.js.map +1 -0
  339. package/dist/startup.cjs +98 -0
  340. package/dist/startup.cjs.map +1 -0
  341. package/dist/startup.d.cts +15 -0
  342. package/dist/startup.d.ts +15 -0
  343. package/dist/startup.js +73 -0
  344. package/dist/startup.js.map +1 -0
  345. package/dist/tracing.cjs +116 -0
  346. package/dist/tracing.cjs.map +1 -0
  347. package/dist/tracing.d.cts +5 -0
  348. package/dist/tracing.d.ts +5 -0
  349. package/dist/tracing.js +96 -0
  350. package/dist/tracing.js.map +1 -0
  351. package/dist/validationErrors.cjs +229 -0
  352. package/dist/validationErrors.cjs.map +1 -0
  353. package/dist/validationErrors.d.cts +21 -0
  354. package/dist/validationErrors.d.ts +21 -0
  355. package/dist/validationErrors.js +195 -0
  356. package/dist/validationErrors.js.map +1 -0
  357. package/package.json +113 -154
  358. package/dist/common/client.cjs +0 -335
  359. package/dist/common/client.cjs.map +0 -1
  360. package/dist/common/client.d.cts +0 -50
  361. package/dist/common/client.d.ts +0 -50
  362. package/dist/common/client.js +0 -302
  363. package/dist/common/client.js.map +0 -1
  364. package/dist/common/consumerRegistry.cjs +0 -86
  365. package/dist/common/consumerRegistry.cjs.map +0 -1
  366. package/dist/common/consumerRegistry.d.cts +0 -20
  367. package/dist/common/consumerRegistry.d.ts +0 -20
  368. package/dist/common/consumerRegistry.js +0 -62
  369. package/dist/common/consumerRegistry.js.map +0 -1
  370. package/dist/common/headers.cjs +0 -55
  371. package/dist/common/headers.cjs.map +0 -1
  372. package/dist/common/headers.d.cts +0 -6
  373. package/dist/common/headers.d.ts +0 -6
  374. package/dist/common/headers.js +0 -31
  375. package/dist/common/headers.js.map +0 -1
  376. package/dist/common/instance.cjs +0 -158
  377. package/dist/common/instance.cjs.map +0 -1
  378. package/dist/common/instance.d.cts +0 -4
  379. package/dist/common/instance.d.ts +0 -4
  380. package/dist/common/instance.js +0 -134
  381. package/dist/common/instance.js.map +0 -1
  382. package/dist/common/logging.cjs.map +0 -1
  383. package/dist/common/logging.d.cts +0 -11
  384. package/dist/common/logging.d.ts +0 -11
  385. package/dist/common/logging.js +0 -17
  386. package/dist/common/logging.js.map +0 -1
  387. package/dist/common/packageVersions.cjs.map +0 -1
  388. package/dist/common/packageVersions.d.cts +0 -3
  389. package/dist/common/packageVersions.d.ts +0 -3
  390. package/dist/common/packageVersions.js +0 -21
  391. package/dist/common/packageVersions.js.map +0 -1
  392. package/dist/common/paramValidation.cjs.map +0 -1
  393. package/dist/common/paramValidation.d.cts +0 -4
  394. package/dist/common/paramValidation.d.ts +0 -4
  395. package/dist/common/paramValidation.js +0 -17
  396. package/dist/common/paramValidation.js.map +0 -1
  397. package/dist/common/requestCounter.cjs +0 -114
  398. package/dist/common/requestCounter.cjs.map +0 -1
  399. package/dist/common/requestCounter.d.cts +0 -24
  400. package/dist/common/requestCounter.d.ts +0 -24
  401. package/dist/common/requestCounter.js +0 -91
  402. package/dist/common/requestCounter.js.map +0 -1
  403. package/dist/common/requestLogger.cjs +0 -543
  404. package/dist/common/requestLogger.cjs.map +0 -1
  405. package/dist/common/requestLogger.d.cts +0 -85
  406. package/dist/common/requestLogger.d.ts +0 -85
  407. package/dist/common/requestLogger.js +0 -508
  408. package/dist/common/requestLogger.js.map +0 -1
  409. package/dist/common/resources.cjs +0 -49
  410. package/dist/common/resources.cjs.map +0 -1
  411. package/dist/common/resources.d.cts +0 -6
  412. package/dist/common/resources.d.ts +0 -6
  413. package/dist/common/resources.js +0 -26
  414. package/dist/common/resources.js.map +0 -1
  415. package/dist/common/response.cjs +0 -104
  416. package/dist/common/response.cjs.map +0 -1
  417. package/dist/common/response.d.cts +0 -15
  418. package/dist/common/response.d.ts +0 -15
  419. package/dist/common/response.js +0 -80
  420. package/dist/common/response.js.map +0 -1
  421. package/dist/common/sentry.cjs +0 -56
  422. package/dist/common/sentry.cjs.map +0 -1
  423. package/dist/common/sentry.d.cts +0 -6
  424. package/dist/common/sentry.d.ts +0 -6
  425. package/dist/common/sentry.js +0 -23
  426. package/dist/common/sentry.js.map +0 -1
  427. package/dist/common/serverErrorCounter.cjs +0 -123
  428. package/dist/common/serverErrorCounter.cjs.map +0 -1
  429. package/dist/common/serverErrorCounter.d.cts +0 -23
  430. package/dist/common/serverErrorCounter.d.ts +0 -23
  431. package/dist/common/serverErrorCounter.js +0 -98
  432. package/dist/common/serverErrorCounter.js.map +0 -1
  433. package/dist/common/spanCollector.cjs +0 -201
  434. package/dist/common/spanCollector.cjs.map +0 -1
  435. package/dist/common/spanCollector.d.cts +0 -45
  436. package/dist/common/spanCollector.d.ts +0 -45
  437. package/dist/common/spanCollector.js +0 -177
  438. package/dist/common/spanCollector.js.map +0 -1
  439. package/dist/common/tempGzipFile.cjs +0 -127
  440. package/dist/common/tempGzipFile.cjs.map +0 -1
  441. package/dist/common/tempGzipFile.d.cts +0 -19
  442. package/dist/common/tempGzipFile.d.ts +0 -19
  443. package/dist/common/tempGzipFile.js +0 -103
  444. package/dist/common/tempGzipFile.js.map +0 -1
  445. package/dist/common/types.cjs +0 -17
  446. package/dist/common/types.cjs.map +0 -1
  447. package/dist/common/types.d.cts +0 -95
  448. package/dist/common/types.d.ts +0 -95
  449. package/dist/common/types.js +0 -1
  450. package/dist/common/types.js.map +0 -1
  451. package/dist/common/validationErrorCounter.cjs +0 -79
  452. package/dist/common/validationErrorCounter.cjs.map +0 -1
  453. package/dist/common/validationErrorCounter.d.cts +0 -20
  454. package/dist/common/validationErrorCounter.d.ts +0 -20
  455. package/dist/common/validationErrorCounter.js +0 -56
  456. package/dist/common/validationErrorCounter.js.map +0 -1
  457. package/dist/elysia/plugin.cjs +0 -242
  458. package/dist/elysia/plugin.cjs.map +0 -1
  459. package/dist/elysia/plugin.d.cts +0 -70
  460. package/dist/elysia/plugin.d.ts +0 -70
  461. package/dist/elysia/plugin.js +0 -219
  462. package/dist/elysia/plugin.js.map +0 -1
  463. package/dist/elysia/utils.cjs +0 -77
  464. package/dist/elysia/utils.cjs.map +0 -1
  465. package/dist/elysia/utils.d.cts +0 -14
  466. package/dist/elysia/utils.d.ts +0 -14
  467. package/dist/elysia/utils.js +0 -54
  468. package/dist/elysia/utils.js.map +0 -1
  469. package/dist/express/utils.cjs +0 -217
  470. package/dist/express/utils.cjs.map +0 -1
  471. package/dist/express/utils.d.cts +0 -37
  472. package/dist/express/utils.d.ts +0 -37
  473. package/dist/express/utils.js +0 -189
  474. package/dist/express/utils.js.map +0 -1
  475. package/dist/fastify/plugin.cjs +0 -319
  476. package/dist/fastify/plugin.cjs.map +0 -1
  477. package/dist/fastify/plugin.d.cts +0 -34
  478. package/dist/fastify/plugin.d.ts +0 -34
  479. package/dist/fastify/plugin.js +0 -284
  480. package/dist/fastify/plugin.js.map +0 -1
  481. package/dist/h3/plugin.cjs +0 -183
  482. package/dist/h3/plugin.cjs.map +0 -1
  483. package/dist/h3/plugin.d.cts +0 -27
  484. package/dist/h3/plugin.d.ts +0 -27
  485. package/dist/h3/plugin.js +0 -159
  486. package/dist/h3/plugin.js.map +0 -1
  487. package/dist/h3/utils.cjs +0 -77
  488. package/dist/h3/utils.cjs.map +0 -1
  489. package/dist/h3/utils.d.cts +0 -14
  490. package/dist/h3/utils.d.ts +0 -14
  491. package/dist/h3/utils.js +0 -54
  492. package/dist/h3/utils.js.map +0 -1
  493. package/dist/hapi/plugin.cjs +0 -212
  494. package/dist/hapi/plugin.cjs.map +0 -1
  495. package/dist/hapi/plugin.d.cts +0 -40
  496. package/dist/hapi/plugin.d.ts +0 -40
  497. package/dist/hapi/plugin.js +0 -188
  498. package/dist/hapi/plugin.js.map +0 -1
  499. package/dist/hapi/utils.cjs +0 -77
  500. package/dist/hapi/utils.cjs.map +0 -1
  501. package/dist/hapi/utils.d.cts +0 -16
  502. package/dist/hapi/utils.d.ts +0 -16
  503. package/dist/hapi/utils.js +0 -53
  504. package/dist/hapi/utils.js.map +0 -1
  505. package/dist/hono/utils.cjs +0 -113
  506. package/dist/hono/utils.cjs.map +0 -1
  507. package/dist/hono/utils.d.cts +0 -16
  508. package/dist/hono/utils.d.ts +0 -16
  509. package/dist/hono/utils.js +0 -88
  510. package/dist/hono/utils.js.map +0 -1
  511. package/dist/loggers/console.cjs +0 -67
  512. package/dist/loggers/console.cjs.map +0 -1
  513. package/dist/loggers/console.d.cts +0 -11
  514. package/dist/loggers/console.d.ts +0 -11
  515. package/dist/loggers/console.js +0 -44
  516. package/dist/loggers/console.js.map +0 -1
  517. package/dist/loggers/hapi.cjs.map +0 -1
  518. package/dist/loggers/hapi.d.cts +0 -12
  519. package/dist/loggers/hapi.d.ts +0 -12
  520. package/dist/loggers/hapi.js +0 -29
  521. package/dist/loggers/hapi.js.map +0 -1
  522. package/dist/loggers/index.cjs.map +0 -1
  523. package/dist/loggers/index.d.cts +0 -13
  524. package/dist/loggers/index.d.ts +0 -13
  525. package/dist/loggers/index.js +0 -13
  526. package/dist/loggers/index.js.map +0 -1
  527. package/dist/loggers/nestjs.cjs +0 -104
  528. package/dist/loggers/nestjs.cjs.map +0 -1
  529. package/dist/loggers/nestjs.d.cts +0 -11
  530. package/dist/loggers/nestjs.d.ts +0 -11
  531. package/dist/loggers/nestjs.js +0 -71
  532. package/dist/loggers/nestjs.js.map +0 -1
  533. package/dist/loggers/pino.cjs +0 -152
  534. package/dist/loggers/pino.cjs.map +0 -1
  535. package/dist/loggers/pino.d.cts +0 -11
  536. package/dist/loggers/pino.d.ts +0 -11
  537. package/dist/loggers/pino.js +0 -119
  538. package/dist/loggers/pino.js.map +0 -1
  539. package/dist/loggers/utils.cjs +0 -64
  540. package/dist/loggers/utils.cjs.map +0 -1
  541. package/dist/loggers/utils.d.cts +0 -6
  542. package/dist/loggers/utils.d.ts +0 -6
  543. package/dist/loggers/utils.js +0 -40
  544. package/dist/loggers/utils.js.map +0 -1
  545. package/dist/loggers/winston.cjs +0 -101
  546. package/dist/loggers/winston.cjs.map +0 -1
  547. package/dist/loggers/winston.d.cts +0 -11
  548. package/dist/loggers/winston.d.ts +0 -11
  549. package/dist/loggers/winston.js +0 -68
  550. package/dist/loggers/winston.js.map +0 -1
  551. package/dist/otel/index.cjs.map +0 -1
  552. package/dist/otel/index.d.cts +0 -2
  553. package/dist/otel/index.d.ts +0 -2
  554. package/dist/otel/index.js +0 -5
  555. package/dist/otel/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fastify/plugin.ts"],"sourcesContent":["import type {\n FastifyError,\n FastifyPluginAsync,\n FastifyReply,\n FastifyRequest,\n} from \"fastify\";\nimport fp from \"fastify-plugin\";\nimport { AsyncLocalStorage, AsyncResource } from \"node:async_hooks\";\n\nimport { ApitallyClient } from \"../common/client.js\";\nimport { consumerFromStringOrObject } from \"../common/consumerRegistry.js\";\nimport { parseContentLength } from \"../common/headers.js\";\nimport { getPackageVersion } from \"../common/packageVersions.js\";\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { convertBody, convertHeaders } from \"../common/requestLogger.js\";\nimport type { SpanHandle } from \"../common/spanCollector.js\";\nimport {\n ApitallyConfig,\n ApitallyConsumer,\n PathInfo,\n ValidationError,\n} from \"../common/types.js\";\nimport {\n patchConsole,\n patchNestLogger,\n patchPinoLogger,\n patchWinston,\n} from \"../loggers/index.js\";\n\nconst LOGS_SYMBOL = Symbol(\"apitally.logs\");\nconst ASYNC_RESOURCE_SYMBOL = Symbol(\"apitally.asyncResource\");\nconst SPAN_HANDLE_SYMBOL = Symbol(\"apitally.spanHandle\");\n\ndeclare module \"fastify\" {\n interface FastifyReply {\n payload: any;\n serverError?: FastifyError;\n }\n\n interface FastifyRequest {\n apitallyConsumer?: ApitallyConsumer | string | null;\n consumerIdentifier?: ApitallyConsumer | string | null; // For backwards compatibility\n\n [LOGS_SYMBOL]?: LogRecord[];\n [ASYNC_RESOURCE_SYMBOL]?: AsyncResource;\n [SPAN_HANDLE_SYMBOL]?: SpanHandle;\n }\n}\n\nconst apitallyPlugin: FastifyPluginAsync<ApitallyConfig> = async (\n fastify,\n config,\n) => {\n const client = new ApitallyClient(config);\n const routes: PathInfo[] = [];\n const logsContext = new AsyncLocalStorage<LogRecord[]>();\n\n if (client.requestLogger.config.captureLogs) {\n patchConsole(logsContext);\n patchWinston(logsContext);\n patchPinoLogger(fastify.log, logsContext);\n patchNestLogger(logsContext);\n }\n\n fastify.decorateRequest(\"apitallyConsumer\", null);\n fastify.decorateRequest(\"consumerIdentifier\", null); // For backwards compatibility\n fastify.decorateReply(\"payload\", null);\n\n fastify.addHook(\"onRoute\", (routeOptions) => {\n const methods = Array.isArray(routeOptions.method)\n ? routeOptions.method\n : [routeOptions.method];\n methods.forEach((method) => {\n if (![\"HEAD\", \"OPTIONS\"].includes(method.toUpperCase())) {\n routes.push({\n method: method.toUpperCase(),\n path: routeOptions.url,\n });\n }\n });\n });\n\n fastify.addHook(\"onReady\", () => {\n client.setStartupData(getAppInfo(routes, config.appVersion));\n client.startSync();\n });\n\n fastify.addHook(\"onClose\", async () => {\n await client.handleShutdown();\n });\n\n // Establish logs context and start span for each request\n fastify.addHook(\"onRequest\", (request, reply, done) => {\n if (client.isEnabled()) {\n const logs: LogRecord[] = [];\n request[LOGS_SYMBOL] = logs;\n logsContext.run(logs, () => {\n const spanHandle = client.spanCollector.startSpan();\n request[SPAN_HANDLE_SYMBOL] = spanHandle;\n spanHandle.runInContext(() => {\n const asyncResource = new AsyncResource(\"ApitallyContext\");\n request[ASYNC_RESOURCE_SYMBOL] = asyncResource;\n asyncResource.runInAsyncScope(done, request.raw);\n });\n });\n } else {\n done();\n }\n });\n\n // Restore async context for later hooks and route handlers\n fastify.addHook(\"preValidation\", (request, reply, done) => {\n if (client.isEnabled() && request[ASYNC_RESOURCE_SYMBOL]) {\n const asyncResource = request[ASYNC_RESOURCE_SYMBOL];\n asyncResource.runInAsyncScope(done, request.raw);\n } else {\n done();\n }\n });\n\n fastify.addHook(\"onSend\", (request, reply, payload: any, done) => {\n const contentType = reply.getHeader(\"content-type\") as string | undefined;\n if (client.requestLogger.isSupportedContentType(contentType)) {\n reply.payload = payload;\n }\n done();\n });\n\n fastify.addHook(\"onError\", (request, reply, error, done) => {\n if (!error.statusCode || error.statusCode === 500) {\n reply.serverError = error;\n }\n done();\n });\n\n fastify.addHook(\"onResponse\", (request, reply, done) => {\n if (client.isEnabled() && request.method.toUpperCase() !== \"OPTIONS\") {\n // Get path from routeOptions if available (from v4), otherwise fallback to deprecated routerPath\n const consumer = getConsumer(request);\n const path =\n \"routeOptions\" in request\n ? (request as any).routeOptions.url\n : (request as any).routerPath;\n const requestSize = parseContentLength(request.headers[\"content-length\"]);\n const responseSize = parseContentLength(\n reply.getHeader(\"content-length\"),\n );\n const responseTime = getResponseTime(reply);\n client.consumerRegistry.addOrUpdateConsumer(consumer);\n client.requestCounter.addRequest({\n consumer: consumer?.identifier,\n method: request.method,\n path,\n statusCode: reply.statusCode,\n responseTime,\n requestSize,\n responseSize,\n });\n\n if (\n (reply.statusCode === 400 || reply.statusCode === 422) &&\n reply.payload\n ) {\n try {\n const parsedPayload = JSON.parse(reply.payload);\n const validationErrors: ValidationError[] = [];\n\n if (\n (!parsedPayload.code ||\n parsedPayload.code === \"FST_ERR_VALIDATION\") &&\n typeof parsedPayload.message === \"string\"\n ) {\n validationErrors.push(...extractAjvErrors(parsedPayload.message));\n } else if (Array.isArray(parsedPayload.message)) {\n validationErrors.push(\n ...extractNestValidationErrors(parsedPayload.message),\n );\n }\n\n validationErrors.forEach((error) => {\n client.validationErrorCounter.addValidationError({\n consumer: consumer?.identifier,\n method: request.method,\n path: path,\n ...error,\n });\n });\n } catch (error) {} // eslint-disable-line no-empty\n }\n\n if (reply.statusCode === 500 && reply.serverError) {\n client.serverErrorCounter.addServerError({\n consumer: consumer?.identifier,\n method: request.method,\n path: path,\n type: reply.serverError.name,\n msg: reply.serverError.message,\n traceback: reply.serverError.stack || \"\",\n });\n }\n\n const spanHandle = request[SPAN_HANDLE_SYMBOL];\n spanHandle?.setName(`${request.method} ${path}`);\n const spans = spanHandle?.end();\n const traceId = spanHandle?.traceId;\n\n if (client.requestLogger.enabled) {\n const logs = request[LOGS_SYMBOL];\n client.requestLogger.logRequest(\n {\n timestamp: Date.now() / 1000,\n method: request.method,\n path,\n url: `${request.protocol}://${request.host ?? request.hostname}${request.originalUrl ?? request.url}`,\n headers: convertHeaders(request.headers),\n size: requestSize,\n consumer: consumer?.identifier,\n body: convertBody(request.body, request.headers[\"content-type\"]),\n },\n {\n statusCode: reply.statusCode,\n responseTime: responseTime / 1000,\n headers: convertHeaders(reply.getHeaders()),\n size: responseSize,\n body: convertBody(\n reply.payload,\n reply.getHeader(\"content-type\")?.toString(),\n ),\n },\n reply.serverError,\n logs,\n spans,\n traceId,\n );\n }\n }\n\n done();\n });\n};\n\nfunction getAppInfo(routes: PathInfo[], appVersion?: string) {\n const versions = [[\"nodejs\", process.version.replace(/^v/, \"\")]];\n const fastifyVersion = getPackageVersion(\"fastify\");\n const pinoVersion = getPackageVersion(\"pino\");\n const nestjsVersion = getPackageVersion(\"@nestjs/core\");\n const apitallyVersion = getPackageVersion(\"../..\");\n if (fastifyVersion) {\n versions.push([\"fastify\", fastifyVersion]);\n }\n if (pinoVersion) {\n versions.push([\"pino\", pinoVersion]);\n }\n if (nestjsVersion) {\n versions.push([\"nestjs\", nestjsVersion]);\n }\n if (apitallyVersion) {\n versions.push([\"apitally\", apitallyVersion]);\n }\n if (appVersion) {\n versions.push([\"app\", appVersion]);\n }\n return {\n paths: routes,\n versions: Object.fromEntries(versions),\n client: \"js:fastify\",\n };\n}\n\nexport function setConsumer(\n request: FastifyRequest,\n consumer: ApitallyConsumer | string | null | undefined,\n) {\n request.apitallyConsumer = consumer || undefined;\n}\n\nfunction getConsumer(request: FastifyRequest) {\n if (request.apitallyConsumer) {\n return consumerFromStringOrObject(request.apitallyConsumer);\n } else if (request.consumerIdentifier) {\n // For backwards compatibility\n process.emitWarning(\n \"The consumerIdentifier property on the request object is deprecated. Use apitallyConsumer instead.\",\n \"DeprecationWarning\",\n );\n return consumerFromStringOrObject(request.consumerIdentifier);\n }\n return null;\n}\n\nfunction getResponseTime(reply: FastifyReply) {\n if (reply.elapsedTime !== undefined) {\n return reply.elapsedTime;\n } else if ((reply as any).getResponseTime !== undefined) {\n return (reply as any).getResponseTime();\n }\n return 0;\n}\n\nfunction extractAjvErrors(message: string): ValidationError[] {\n try {\n const regex =\n /(?<=^|, )((?:headers|params|query|querystring|body)[/.][^ ]+)(?= )/g;\n const matches: { match: string; index: number }[] = [];\n let match: RegExpExecArray | null;\n while ((match = regex.exec(message)) !== null) {\n matches.push({ match: match[0], index: match.index });\n }\n\n return matches.map((m, i) => {\n const endIndex =\n i + 1 < matches.length ? matches[i + 1].index - 2 : message.length;\n const matchSplit = m.match.split(/[/.]/);\n if (matchSplit[0] === \"querystring\") {\n matchSplit[0] = \"query\";\n }\n return {\n loc: matchSplit.join(\".\"),\n msg: message.substring(m.index, endIndex),\n type: \"\",\n };\n });\n } catch (error) {\n return [];\n }\n}\n\nfunction extractNestValidationErrors(message: any[]): ValidationError[] {\n try {\n return message\n .filter((msg: any) => typeof msg === \"string\")\n .map((msg: any) => ({\n loc: \"\",\n msg,\n type: \"\",\n }));\n } catch (error) {\n return [];\n }\n}\n\nexport { apitallyPlugin };\n\nexport const apitallyFastifyPlugin = fp(apitallyPlugin, {\n name: \"apitally\",\n});\n\nexport default apitallyFastifyPlugin;\n"],"mappings":"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","names":["LOGS_SYMBOL","Symbol","ASYNC_RESOURCE_SYMBOL","SPAN_HANDLE_SYMBOL","apitallyPlugin","fastify","config","client","ApitallyClient","routes","logsContext","AsyncLocalStorage","requestLogger","captureLogs","patchConsole","patchWinston","patchPinoLogger","log","patchNestLogger","decorateRequest","decorateReply","addHook","routeOptions","methods","Array","isArray","method","forEach","includes","toUpperCase","push","path","url","setStartupData","getAppInfo","appVersion","startSync","handleShutdown","request","reply","done","isEnabled","logs","run","spanHandle","spanCollector","startSpan","runInContext","asyncResource","AsyncResource","runInAsyncScope","raw","payload","contentType","getHeader","isSupportedContentType","error","statusCode","serverError","consumer","getConsumer","routerPath","requestSize","parseContentLength","headers","responseSize","responseTime","getResponseTime","consumerRegistry","addOrUpdateConsumer","requestCounter","addRequest","identifier","parsedPayload","JSON","parse","validationErrors","code","message","extractAjvErrors","extractNestValidationErrors","validationErrorCounter","addValidationError","serverErrorCounter","addServerError","type","name","msg","traceback","stack","setName","spans","end","traceId","enabled","logRequest","timestamp","Date","now","protocol","host","hostname","originalUrl","convertHeaders","size","body","convertBody","getHeaders","toString","versions","process","version","replace","fastifyVersion","getPackageVersion","pinoVersion","nestjsVersion","apitallyVersion","paths","Object","fromEntries","setConsumer","apitallyConsumer","undefined","consumerFromStringOrObject","consumerIdentifier","emitWarning","elapsedTime","regex","matches","match","exec","index","map","m","i","endIndex","length","matchSplit","split","loc","join","substring","filter","apitallyFastifyPlugin","fp"]}
@@ -1,34 +0,0 @@
1
- import { ApitallyConsumer, ApitallyConfig } from '../common/types.cjs';
2
- import { FastifyError, FastifyPluginAsync, FastifyRequest } from 'fastify';
3
- import { AsyncResource } from 'node:async_hooks';
4
- import { LogRecord } from '../common/requestLogger.cjs';
5
- import { SpanHandle } from '../common/spanCollector.cjs';
6
- import '../common/logging.cjs';
7
- import 'winston';
8
- import 'node:buffer';
9
- import 'node:http';
10
- import '@opentelemetry/sdk-trace-base';
11
- import '../common/tempGzipFile.cjs';
12
-
13
- declare const LOGS_SYMBOL: unique symbol;
14
- declare const ASYNC_RESOURCE_SYMBOL: unique symbol;
15
- declare const SPAN_HANDLE_SYMBOL: unique symbol;
16
- declare module "fastify" {
17
- interface FastifyReply {
18
- payload: any;
19
- serverError?: FastifyError;
20
- }
21
- interface FastifyRequest {
22
- apitallyConsumer?: ApitallyConsumer | string | null;
23
- consumerIdentifier?: ApitallyConsumer | string | null;
24
- [LOGS_SYMBOL]?: LogRecord[];
25
- [ASYNC_RESOURCE_SYMBOL]?: AsyncResource;
26
- [SPAN_HANDLE_SYMBOL]?: SpanHandle;
27
- }
28
- }
29
- declare const apitallyPlugin: FastifyPluginAsync<ApitallyConfig>;
30
- declare function setConsumer(request: FastifyRequest, consumer: ApitallyConsumer | string | null | undefined): void;
31
-
32
- declare const apitallyFastifyPlugin: FastifyPluginAsync<ApitallyConfig>;
33
-
34
- export { apitallyFastifyPlugin, apitallyPlugin, apitallyFastifyPlugin as default, setConsumer };
@@ -1,34 +0,0 @@
1
- import { ApitallyConsumer, ApitallyConfig } from '../common/types.js';
2
- import { FastifyError, FastifyPluginAsync, FastifyRequest } from 'fastify';
3
- import { AsyncResource } from 'node:async_hooks';
4
- import { LogRecord } from '../common/requestLogger.js';
5
- import { SpanHandle } from '../common/spanCollector.js';
6
- import '../common/logging.js';
7
- import 'winston';
8
- import 'node:buffer';
9
- import 'node:http';
10
- import '@opentelemetry/sdk-trace-base';
11
- import '../common/tempGzipFile.js';
12
-
13
- declare const LOGS_SYMBOL: unique symbol;
14
- declare const ASYNC_RESOURCE_SYMBOL: unique symbol;
15
- declare const SPAN_HANDLE_SYMBOL: unique symbol;
16
- declare module "fastify" {
17
- interface FastifyReply {
18
- payload: any;
19
- serverError?: FastifyError;
20
- }
21
- interface FastifyRequest {
22
- apitallyConsumer?: ApitallyConsumer | string | null;
23
- consumerIdentifier?: ApitallyConsumer | string | null;
24
- [LOGS_SYMBOL]?: LogRecord[];
25
- [ASYNC_RESOURCE_SYMBOL]?: AsyncResource;
26
- [SPAN_HANDLE_SYMBOL]?: SpanHandle;
27
- }
28
- }
29
- declare const apitallyPlugin: FastifyPluginAsync<ApitallyConfig>;
30
- declare function setConsumer(request: FastifyRequest, consumer: ApitallyConsumer | string | null | undefined): void;
31
-
32
- declare const apitallyFastifyPlugin: FastifyPluginAsync<ApitallyConfig>;
33
-
34
- export { apitallyFastifyPlugin, apitallyPlugin, apitallyFastifyPlugin as default, setConsumer };
@@ -1,284 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import fp from "fastify-plugin";
4
- import { AsyncLocalStorage, AsyncResource } from "node:async_hooks";
5
- import { ApitallyClient } from "../common/client.js";
6
- import { consumerFromStringOrObject } from "../common/consumerRegistry.js";
7
- import { parseContentLength } from "../common/headers.js";
8
- import { getPackageVersion } from "../common/packageVersions.js";
9
- import { convertBody, convertHeaders } from "../common/requestLogger.js";
10
- import { patchConsole, patchNestLogger, patchPinoLogger, patchWinston } from "../loggers/index.js";
11
- const LOGS_SYMBOL = /* @__PURE__ */ Symbol("apitally.logs");
12
- const ASYNC_RESOURCE_SYMBOL = /* @__PURE__ */ Symbol("apitally.asyncResource");
13
- const SPAN_HANDLE_SYMBOL = /* @__PURE__ */ Symbol("apitally.spanHandle");
14
- const apitallyPlugin = /* @__PURE__ */ __name(async (fastify, config) => {
15
- const client = new ApitallyClient(config);
16
- const routes = [];
17
- const logsContext = new AsyncLocalStorage();
18
- if (client.requestLogger.config.captureLogs) {
19
- patchConsole(logsContext);
20
- patchWinston(logsContext);
21
- patchPinoLogger(fastify.log, logsContext);
22
- patchNestLogger(logsContext);
23
- }
24
- fastify.decorateRequest("apitallyConsumer", null);
25
- fastify.decorateRequest("consumerIdentifier", null);
26
- fastify.decorateReply("payload", null);
27
- fastify.addHook("onRoute", (routeOptions) => {
28
- const methods = Array.isArray(routeOptions.method) ? routeOptions.method : [
29
- routeOptions.method
30
- ];
31
- methods.forEach((method) => {
32
- if (![
33
- "HEAD",
34
- "OPTIONS"
35
- ].includes(method.toUpperCase())) {
36
- routes.push({
37
- method: method.toUpperCase(),
38
- path: routeOptions.url
39
- });
40
- }
41
- });
42
- });
43
- fastify.addHook("onReady", () => {
44
- client.setStartupData(getAppInfo(routes, config.appVersion));
45
- client.startSync();
46
- });
47
- fastify.addHook("onClose", async () => {
48
- await client.handleShutdown();
49
- });
50
- fastify.addHook("onRequest", (request, reply, done) => {
51
- if (client.isEnabled()) {
52
- const logs = [];
53
- request[LOGS_SYMBOL] = logs;
54
- logsContext.run(logs, () => {
55
- const spanHandle = client.spanCollector.startSpan();
56
- request[SPAN_HANDLE_SYMBOL] = spanHandle;
57
- spanHandle.runInContext(() => {
58
- const asyncResource = new AsyncResource("ApitallyContext");
59
- request[ASYNC_RESOURCE_SYMBOL] = asyncResource;
60
- asyncResource.runInAsyncScope(done, request.raw);
61
- });
62
- });
63
- } else {
64
- done();
65
- }
66
- });
67
- fastify.addHook("preValidation", (request, reply, done) => {
68
- if (client.isEnabled() && request[ASYNC_RESOURCE_SYMBOL]) {
69
- const asyncResource = request[ASYNC_RESOURCE_SYMBOL];
70
- asyncResource.runInAsyncScope(done, request.raw);
71
- } else {
72
- done();
73
- }
74
- });
75
- fastify.addHook("onSend", (request, reply, payload, done) => {
76
- const contentType = reply.getHeader("content-type");
77
- if (client.requestLogger.isSupportedContentType(contentType)) {
78
- reply.payload = payload;
79
- }
80
- done();
81
- });
82
- fastify.addHook("onError", (request, reply, error, done) => {
83
- if (!error.statusCode || error.statusCode === 500) {
84
- reply.serverError = error;
85
- }
86
- done();
87
- });
88
- fastify.addHook("onResponse", (request, reply, done) => {
89
- var _a;
90
- if (client.isEnabled() && request.method.toUpperCase() !== "OPTIONS") {
91
- const consumer = getConsumer(request);
92
- const path = "routeOptions" in request ? request.routeOptions.url : request.routerPath;
93
- const requestSize = parseContentLength(request.headers["content-length"]);
94
- const responseSize = parseContentLength(reply.getHeader("content-length"));
95
- const responseTime = getResponseTime(reply);
96
- client.consumerRegistry.addOrUpdateConsumer(consumer);
97
- client.requestCounter.addRequest({
98
- consumer: consumer == null ? void 0 : consumer.identifier,
99
- method: request.method,
100
- path,
101
- statusCode: reply.statusCode,
102
- responseTime,
103
- requestSize,
104
- responseSize
105
- });
106
- if ((reply.statusCode === 400 || reply.statusCode === 422) && reply.payload) {
107
- try {
108
- const parsedPayload = JSON.parse(reply.payload);
109
- const validationErrors = [];
110
- if ((!parsedPayload.code || parsedPayload.code === "FST_ERR_VALIDATION") && typeof parsedPayload.message === "string") {
111
- validationErrors.push(...extractAjvErrors(parsedPayload.message));
112
- } else if (Array.isArray(parsedPayload.message)) {
113
- validationErrors.push(...extractNestValidationErrors(parsedPayload.message));
114
- }
115
- validationErrors.forEach((error) => {
116
- client.validationErrorCounter.addValidationError({
117
- consumer: consumer == null ? void 0 : consumer.identifier,
118
- method: request.method,
119
- path,
120
- ...error
121
- });
122
- });
123
- } catch (error) {
124
- }
125
- }
126
- if (reply.statusCode === 500 && reply.serverError) {
127
- client.serverErrorCounter.addServerError({
128
- consumer: consumer == null ? void 0 : consumer.identifier,
129
- method: request.method,
130
- path,
131
- type: reply.serverError.name,
132
- msg: reply.serverError.message,
133
- traceback: reply.serverError.stack || ""
134
- });
135
- }
136
- const spanHandle = request[SPAN_HANDLE_SYMBOL];
137
- spanHandle == null ? void 0 : spanHandle.setName(`${request.method} ${path}`);
138
- const spans = spanHandle == null ? void 0 : spanHandle.end();
139
- const traceId = spanHandle == null ? void 0 : spanHandle.traceId;
140
- if (client.requestLogger.enabled) {
141
- const logs = request[LOGS_SYMBOL];
142
- client.requestLogger.logRequest({
143
- timestamp: Date.now() / 1e3,
144
- method: request.method,
145
- path,
146
- url: `${request.protocol}://${request.host ?? request.hostname}${request.originalUrl ?? request.url}`,
147
- headers: convertHeaders(request.headers),
148
- size: requestSize,
149
- consumer: consumer == null ? void 0 : consumer.identifier,
150
- body: convertBody(request.body, request.headers["content-type"])
151
- }, {
152
- statusCode: reply.statusCode,
153
- responseTime: responseTime / 1e3,
154
- headers: convertHeaders(reply.getHeaders()),
155
- size: responseSize,
156
- body: convertBody(reply.payload, (_a = reply.getHeader("content-type")) == null ? void 0 : _a.toString())
157
- }, reply.serverError, logs, spans, traceId);
158
- }
159
- }
160
- done();
161
- });
162
- }, "apitallyPlugin");
163
- function getAppInfo(routes, appVersion) {
164
- const versions = [
165
- [
166
- "nodejs",
167
- process.version.replace(/^v/, "")
168
- ]
169
- ];
170
- const fastifyVersion = getPackageVersion("fastify");
171
- const pinoVersion = getPackageVersion("pino");
172
- const nestjsVersion = getPackageVersion("@nestjs/core");
173
- const apitallyVersion = getPackageVersion("../..");
174
- if (fastifyVersion) {
175
- versions.push([
176
- "fastify",
177
- fastifyVersion
178
- ]);
179
- }
180
- if (pinoVersion) {
181
- versions.push([
182
- "pino",
183
- pinoVersion
184
- ]);
185
- }
186
- if (nestjsVersion) {
187
- versions.push([
188
- "nestjs",
189
- nestjsVersion
190
- ]);
191
- }
192
- if (apitallyVersion) {
193
- versions.push([
194
- "apitally",
195
- apitallyVersion
196
- ]);
197
- }
198
- if (appVersion) {
199
- versions.push([
200
- "app",
201
- appVersion
202
- ]);
203
- }
204
- return {
205
- paths: routes,
206
- versions: Object.fromEntries(versions),
207
- client: "js:fastify"
208
- };
209
- }
210
- __name(getAppInfo, "getAppInfo");
211
- function setConsumer(request, consumer) {
212
- request.apitallyConsumer = consumer || void 0;
213
- }
214
- __name(setConsumer, "setConsumer");
215
- function getConsumer(request) {
216
- if (request.apitallyConsumer) {
217
- return consumerFromStringOrObject(request.apitallyConsumer);
218
- } else if (request.consumerIdentifier) {
219
- process.emitWarning("The consumerIdentifier property on the request object is deprecated. Use apitallyConsumer instead.", "DeprecationWarning");
220
- return consumerFromStringOrObject(request.consumerIdentifier);
221
- }
222
- return null;
223
- }
224
- __name(getConsumer, "getConsumer");
225
- function getResponseTime(reply) {
226
- if (reply.elapsedTime !== void 0) {
227
- return reply.elapsedTime;
228
- } else if (reply.getResponseTime !== void 0) {
229
- return reply.getResponseTime();
230
- }
231
- return 0;
232
- }
233
- __name(getResponseTime, "getResponseTime");
234
- function extractAjvErrors(message) {
235
- try {
236
- const regex = /(?<=^|, )((?:headers|params|query|querystring|body)[/.][^ ]+)(?= )/g;
237
- const matches = [];
238
- let match;
239
- while ((match = regex.exec(message)) !== null) {
240
- matches.push({
241
- match: match[0],
242
- index: match.index
243
- });
244
- }
245
- return matches.map((m, i) => {
246
- const endIndex = i + 1 < matches.length ? matches[i + 1].index - 2 : message.length;
247
- const matchSplit = m.match.split(/[/.]/);
248
- if (matchSplit[0] === "querystring") {
249
- matchSplit[0] = "query";
250
- }
251
- return {
252
- loc: matchSplit.join("."),
253
- msg: message.substring(m.index, endIndex),
254
- type: ""
255
- };
256
- });
257
- } catch (error) {
258
- return [];
259
- }
260
- }
261
- __name(extractAjvErrors, "extractAjvErrors");
262
- function extractNestValidationErrors(message) {
263
- try {
264
- return message.filter((msg) => typeof msg === "string").map((msg) => ({
265
- loc: "",
266
- msg,
267
- type: ""
268
- }));
269
- } catch (error) {
270
- return [];
271
- }
272
- }
273
- __name(extractNestValidationErrors, "extractNestValidationErrors");
274
- const apitallyFastifyPlugin = fp(apitallyPlugin, {
275
- name: "apitally"
276
- });
277
- var plugin_default = apitallyFastifyPlugin;
278
- export {
279
- apitallyFastifyPlugin,
280
- apitallyPlugin,
281
- plugin_default as default,
282
- setConsumer
283
- };
284
- //# sourceMappingURL=plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fastify/plugin.ts"],"sourcesContent":["import type {\n FastifyError,\n FastifyPluginAsync,\n FastifyReply,\n FastifyRequest,\n} from \"fastify\";\nimport fp from \"fastify-plugin\";\nimport { AsyncLocalStorage, AsyncResource } from \"node:async_hooks\";\n\nimport { ApitallyClient } from \"../common/client.js\";\nimport { consumerFromStringOrObject } from \"../common/consumerRegistry.js\";\nimport { parseContentLength } from \"../common/headers.js\";\nimport { getPackageVersion } from \"../common/packageVersions.js\";\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { convertBody, convertHeaders } from \"../common/requestLogger.js\";\nimport type { SpanHandle } from \"../common/spanCollector.js\";\nimport {\n ApitallyConfig,\n ApitallyConsumer,\n PathInfo,\n ValidationError,\n} from \"../common/types.js\";\nimport {\n patchConsole,\n patchNestLogger,\n patchPinoLogger,\n patchWinston,\n} from \"../loggers/index.js\";\n\nconst LOGS_SYMBOL = Symbol(\"apitally.logs\");\nconst ASYNC_RESOURCE_SYMBOL = Symbol(\"apitally.asyncResource\");\nconst SPAN_HANDLE_SYMBOL = Symbol(\"apitally.spanHandle\");\n\ndeclare module \"fastify\" {\n interface FastifyReply {\n payload: any;\n serverError?: FastifyError;\n }\n\n interface FastifyRequest {\n apitallyConsumer?: ApitallyConsumer | string | null;\n consumerIdentifier?: ApitallyConsumer | string | null; // For backwards compatibility\n\n [LOGS_SYMBOL]?: LogRecord[];\n [ASYNC_RESOURCE_SYMBOL]?: AsyncResource;\n [SPAN_HANDLE_SYMBOL]?: SpanHandle;\n }\n}\n\nconst apitallyPlugin: FastifyPluginAsync<ApitallyConfig> = async (\n fastify,\n config,\n) => {\n const client = new ApitallyClient(config);\n const routes: PathInfo[] = [];\n const logsContext = new AsyncLocalStorage<LogRecord[]>();\n\n if (client.requestLogger.config.captureLogs) {\n patchConsole(logsContext);\n patchWinston(logsContext);\n patchPinoLogger(fastify.log, logsContext);\n patchNestLogger(logsContext);\n }\n\n fastify.decorateRequest(\"apitallyConsumer\", null);\n fastify.decorateRequest(\"consumerIdentifier\", null); // For backwards compatibility\n fastify.decorateReply(\"payload\", null);\n\n fastify.addHook(\"onRoute\", (routeOptions) => {\n const methods = Array.isArray(routeOptions.method)\n ? routeOptions.method\n : [routeOptions.method];\n methods.forEach((method) => {\n if (![\"HEAD\", \"OPTIONS\"].includes(method.toUpperCase())) {\n routes.push({\n method: method.toUpperCase(),\n path: routeOptions.url,\n });\n }\n });\n });\n\n fastify.addHook(\"onReady\", () => {\n client.setStartupData(getAppInfo(routes, config.appVersion));\n client.startSync();\n });\n\n fastify.addHook(\"onClose\", async () => {\n await client.handleShutdown();\n });\n\n // Establish logs context and start span for each request\n fastify.addHook(\"onRequest\", (request, reply, done) => {\n if (client.isEnabled()) {\n const logs: LogRecord[] = [];\n request[LOGS_SYMBOL] = logs;\n logsContext.run(logs, () => {\n const spanHandle = client.spanCollector.startSpan();\n request[SPAN_HANDLE_SYMBOL] = spanHandle;\n spanHandle.runInContext(() => {\n const asyncResource = new AsyncResource(\"ApitallyContext\");\n request[ASYNC_RESOURCE_SYMBOL] = asyncResource;\n asyncResource.runInAsyncScope(done, request.raw);\n });\n });\n } else {\n done();\n }\n });\n\n // Restore async context for later hooks and route handlers\n fastify.addHook(\"preValidation\", (request, reply, done) => {\n if (client.isEnabled() && request[ASYNC_RESOURCE_SYMBOL]) {\n const asyncResource = request[ASYNC_RESOURCE_SYMBOL];\n asyncResource.runInAsyncScope(done, request.raw);\n } else {\n done();\n }\n });\n\n fastify.addHook(\"onSend\", (request, reply, payload: any, done) => {\n const contentType = reply.getHeader(\"content-type\") as string | undefined;\n if (client.requestLogger.isSupportedContentType(contentType)) {\n reply.payload = payload;\n }\n done();\n });\n\n fastify.addHook(\"onError\", (request, reply, error, done) => {\n if (!error.statusCode || error.statusCode === 500) {\n reply.serverError = error;\n }\n done();\n });\n\n fastify.addHook(\"onResponse\", (request, reply, done) => {\n if (client.isEnabled() && request.method.toUpperCase() !== \"OPTIONS\") {\n // Get path from routeOptions if available (from v4), otherwise fallback to deprecated routerPath\n const consumer = getConsumer(request);\n const path =\n \"routeOptions\" in request\n ? (request as any).routeOptions.url\n : (request as any).routerPath;\n const requestSize = parseContentLength(request.headers[\"content-length\"]);\n const responseSize = parseContentLength(\n reply.getHeader(\"content-length\"),\n );\n const responseTime = getResponseTime(reply);\n client.consumerRegistry.addOrUpdateConsumer(consumer);\n client.requestCounter.addRequest({\n consumer: consumer?.identifier,\n method: request.method,\n path,\n statusCode: reply.statusCode,\n responseTime,\n requestSize,\n responseSize,\n });\n\n if (\n (reply.statusCode === 400 || reply.statusCode === 422) &&\n reply.payload\n ) {\n try {\n const parsedPayload = JSON.parse(reply.payload);\n const validationErrors: ValidationError[] = [];\n\n if (\n (!parsedPayload.code ||\n parsedPayload.code === \"FST_ERR_VALIDATION\") &&\n typeof parsedPayload.message === \"string\"\n ) {\n validationErrors.push(...extractAjvErrors(parsedPayload.message));\n } else if (Array.isArray(parsedPayload.message)) {\n validationErrors.push(\n ...extractNestValidationErrors(parsedPayload.message),\n );\n }\n\n validationErrors.forEach((error) => {\n client.validationErrorCounter.addValidationError({\n consumer: consumer?.identifier,\n method: request.method,\n path: path,\n ...error,\n });\n });\n } catch (error) {} // eslint-disable-line no-empty\n }\n\n if (reply.statusCode === 500 && reply.serverError) {\n client.serverErrorCounter.addServerError({\n consumer: consumer?.identifier,\n method: request.method,\n path: path,\n type: reply.serverError.name,\n msg: reply.serverError.message,\n traceback: reply.serverError.stack || \"\",\n });\n }\n\n const spanHandle = request[SPAN_HANDLE_SYMBOL];\n spanHandle?.setName(`${request.method} ${path}`);\n const spans = spanHandle?.end();\n const traceId = spanHandle?.traceId;\n\n if (client.requestLogger.enabled) {\n const logs = request[LOGS_SYMBOL];\n client.requestLogger.logRequest(\n {\n timestamp: Date.now() / 1000,\n method: request.method,\n path,\n url: `${request.protocol}://${request.host ?? request.hostname}${request.originalUrl ?? request.url}`,\n headers: convertHeaders(request.headers),\n size: requestSize,\n consumer: consumer?.identifier,\n body: convertBody(request.body, request.headers[\"content-type\"]),\n },\n {\n statusCode: reply.statusCode,\n responseTime: responseTime / 1000,\n headers: convertHeaders(reply.getHeaders()),\n size: responseSize,\n body: convertBody(\n reply.payload,\n reply.getHeader(\"content-type\")?.toString(),\n ),\n },\n reply.serverError,\n logs,\n spans,\n traceId,\n );\n }\n }\n\n done();\n });\n};\n\nfunction getAppInfo(routes: PathInfo[], appVersion?: string) {\n const versions = [[\"nodejs\", process.version.replace(/^v/, \"\")]];\n const fastifyVersion = getPackageVersion(\"fastify\");\n const pinoVersion = getPackageVersion(\"pino\");\n const nestjsVersion = getPackageVersion(\"@nestjs/core\");\n const apitallyVersion = getPackageVersion(\"../..\");\n if (fastifyVersion) {\n versions.push([\"fastify\", fastifyVersion]);\n }\n if (pinoVersion) {\n versions.push([\"pino\", pinoVersion]);\n }\n if (nestjsVersion) {\n versions.push([\"nestjs\", nestjsVersion]);\n }\n if (apitallyVersion) {\n versions.push([\"apitally\", apitallyVersion]);\n }\n if (appVersion) {\n versions.push([\"app\", appVersion]);\n }\n return {\n paths: routes,\n versions: Object.fromEntries(versions),\n client: \"js:fastify\",\n };\n}\n\nexport function setConsumer(\n request: FastifyRequest,\n consumer: ApitallyConsumer | string | null | undefined,\n) {\n request.apitallyConsumer = consumer || undefined;\n}\n\nfunction getConsumer(request: FastifyRequest) {\n if (request.apitallyConsumer) {\n return consumerFromStringOrObject(request.apitallyConsumer);\n } else if (request.consumerIdentifier) {\n // For backwards compatibility\n process.emitWarning(\n \"The consumerIdentifier property on the request object is deprecated. Use apitallyConsumer instead.\",\n \"DeprecationWarning\",\n );\n return consumerFromStringOrObject(request.consumerIdentifier);\n }\n return null;\n}\n\nfunction getResponseTime(reply: FastifyReply) {\n if (reply.elapsedTime !== undefined) {\n return reply.elapsedTime;\n } else if ((reply as any).getResponseTime !== undefined) {\n return (reply as any).getResponseTime();\n }\n return 0;\n}\n\nfunction extractAjvErrors(message: string): ValidationError[] {\n try {\n const regex =\n /(?<=^|, )((?:headers|params|query|querystring|body)[/.][^ ]+)(?= )/g;\n const matches: { match: string; index: number }[] = [];\n let match: RegExpExecArray | null;\n while ((match = regex.exec(message)) !== null) {\n matches.push({ match: match[0], index: match.index });\n }\n\n return matches.map((m, i) => {\n const endIndex =\n i + 1 < matches.length ? matches[i + 1].index - 2 : message.length;\n const matchSplit = m.match.split(/[/.]/);\n if (matchSplit[0] === \"querystring\") {\n matchSplit[0] = \"query\";\n }\n return {\n loc: matchSplit.join(\".\"),\n msg: message.substring(m.index, endIndex),\n type: \"\",\n };\n });\n } catch (error) {\n return [];\n }\n}\n\nfunction extractNestValidationErrors(message: any[]): ValidationError[] {\n try {\n return message\n .filter((msg: any) => typeof msg === \"string\")\n .map((msg: any) => ({\n loc: \"\",\n msg,\n type: \"\",\n }));\n } catch (error) {\n return [];\n }\n}\n\nexport { apitallyPlugin };\n\nexport const apitallyFastifyPlugin = fp(apitallyPlugin, {\n name: \"apitally\",\n});\n\nexport default apitallyFastifyPlugin;\n"],"mappings":"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","names":["fp","AsyncLocalStorage","AsyncResource","ApitallyClient","consumerFromStringOrObject","parseContentLength","getPackageVersion","convertBody","convertHeaders","patchConsole","patchNestLogger","patchPinoLogger","patchWinston","LOGS_SYMBOL","Symbol","ASYNC_RESOURCE_SYMBOL","SPAN_HANDLE_SYMBOL","apitallyPlugin","fastify","config","client","routes","logsContext","requestLogger","captureLogs","log","decorateRequest","decorateReply","addHook","routeOptions","methods","Array","isArray","method","forEach","includes","toUpperCase","push","path","url","setStartupData","getAppInfo","appVersion","startSync","handleShutdown","request","reply","done","isEnabled","logs","run","spanHandle","spanCollector","startSpan","runInContext","asyncResource","runInAsyncScope","raw","payload","contentType","getHeader","isSupportedContentType","error","statusCode","serverError","consumer","getConsumer","routerPath","requestSize","headers","responseSize","responseTime","getResponseTime","consumerRegistry","addOrUpdateConsumer","requestCounter","addRequest","identifier","parsedPayload","JSON","parse","validationErrors","code","message","extractAjvErrors","extractNestValidationErrors","validationErrorCounter","addValidationError","serverErrorCounter","addServerError","type","name","msg","traceback","stack","setName","spans","end","traceId","enabled","logRequest","timestamp","Date","now","protocol","host","hostname","originalUrl","size","body","getHeaders","toString","versions","process","version","replace","fastifyVersion","pinoVersion","nestjsVersion","apitallyVersion","paths","Object","fromEntries","setConsumer","apitallyConsumer","undefined","consumerIdentifier","emitWarning","elapsedTime","regex","matches","match","exec","index","map","m","i","endIndex","length","matchSplit","split","loc","join","substring","filter","apitallyFastifyPlugin"]}
@@ -1,183 +0,0 @@
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var plugin_exports = {};
21
- __export(plugin_exports, {
22
- apitallyPlugin: () => apitallyPlugin,
23
- setConsumer: () => setConsumer
24
- });
25
- module.exports = __toCommonJS(plugin_exports);
26
- var import_h3 = require("h3");
27
- var import_node_async_hooks = require("node:async_hooks");
28
- var import_node_perf_hooks = require("node:perf_hooks");
29
- var import_client = require('../common/client.cjs');
30
- var import_consumerRegistry = require('../common/consumerRegistry.cjs');
31
- var import_headers = require('../common/headers.cjs');
32
- var import_requestLogger = require('../common/requestLogger.cjs');
33
- var import_response = require('../common/response.cjs');
34
- var import_loggers = require('../loggers/index.cjs');
35
- var import_utils = require('./utils.cjs');
36
- const REQUEST_TIMESTAMP_SYMBOL = /* @__PURE__ */ Symbol("apitally.requestTimestamp");
37
- const REQUEST_BODY_SYMBOL = /* @__PURE__ */ Symbol("apitally.requestBody");
38
- const SPAN_HANDLE_SYMBOL = /* @__PURE__ */ Symbol("apitally.spanHandle");
39
- const jsonHeaders = new Headers({
40
- "content-type": "application/json;charset=UTF-8"
41
- });
42
- const apitallyPlugin = (0, import_h3.definePlugin)((app, config) => {
43
- const client = new import_client.ApitallyClient(config);
44
- const logsContext = new import_node_async_hooks.AsyncLocalStorage();
45
- const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
46
- const appInfo = (0, import_utils.getAppInfo)(app, config.appVersion);
47
- if (appInfo.paths.length > 0 || attempt >= 10) {
48
- client.setStartupData(appInfo);
49
- client.startSync();
50
- } else {
51
- setTimeout(() => setStartupData(attempt + 1), 500);
52
- }
53
- }, "setStartupData");
54
- setTimeout(() => setStartupData(), 500);
55
- if (client.requestLogger.config.captureLogs) {
56
- (0, import_loggers.patchConsole)(logsContext);
57
- (0, import_loggers.patchWinston)(logsContext);
58
- }
59
- const handleResponse = /* @__PURE__ */ __name(async (event, response, error) => {
60
- var _a;
61
- if (event.req.method.toUpperCase() === "OPTIONS") {
62
- return response;
63
- }
64
- const startTime = event.context[REQUEST_TIMESTAMP_SYMBOL];
65
- const path = (_a = event.context.matchedRoute) == null ? void 0 : _a.route;
66
- const consumer = getConsumer(event);
67
- client.consumerRegistry.addOrUpdateConsumer(consumer);
68
- if (!response) {
69
- response = new Response(null, {
70
- status: (error == null ? void 0 : error.status) || 500,
71
- statusText: (error == null ? void 0 : error.statusText) || "Internal Server Error",
72
- headers: (error == null ? void 0 : error.headers) ? (0, import_headers.mergeHeaders)(jsonHeaders, error.headers) : jsonHeaders
73
- });
74
- }
75
- const [newResponse, responsePromise] = (0, import_response.captureResponse)(response, {
76
- captureBody: client.requestLogger.enabled && client.requestLogger.config.logResponseBody,
77
- maxBodySize: client.requestLogger.maxBodySize
78
- });
79
- responsePromise.then(async (capturedResponse) => {
80
- const responseTime = startTime ? import_node_perf_hooks.performance.now() - startTime : 0;
81
- const spanHandle = event.context[SPAN_HANDLE_SYMBOL];
82
- spanHandle == null ? void 0 : spanHandle.setName(`${event.req.method} ${path}`);
83
- const spans = spanHandle == null ? void 0 : spanHandle.end();
84
- const traceId = spanHandle == null ? void 0 : spanHandle.traceId;
85
- const responseSize = capturedResponse.completed ? capturedResponse.size : void 0;
86
- const requestSize = (0, import_headers.parseContentLength)(event.req.headers.get("content-length"));
87
- if (path) {
88
- client.requestCounter.addRequest({
89
- consumer: consumer == null ? void 0 : consumer.identifier,
90
- method: event.req.method,
91
- path,
92
- statusCode: response.status,
93
- responseTime,
94
- requestSize,
95
- responseSize
96
- });
97
- }
98
- if (client.requestLogger.enabled) {
99
- const logs = logsContext.getStore();
100
- client.requestLogger.logRequest({
101
- timestamp: (Date.now() - responseTime) / 1e3,
102
- method: event.req.method,
103
- path,
104
- url: event.req.url,
105
- headers: (0, import_requestLogger.convertHeaders)(Object.fromEntries(event.req.headers.entries())),
106
- size: requestSize,
107
- consumer: consumer == null ? void 0 : consumer.identifier,
108
- body: event.context[REQUEST_BODY_SYMBOL]
109
- }, {
110
- statusCode: response.status,
111
- responseTime: responseTime / 1e3,
112
- headers: (0, import_requestLogger.convertHeaders)(Object.fromEntries(response.headers.entries())),
113
- size: responseSize,
114
- body: capturedResponse.body
115
- }, (error == null ? void 0 : error.cause) instanceof Error ? error.cause : void 0, logs, spans, traceId);
116
- }
117
- });
118
- if (path && (error == null ? void 0 : error.status) === 400 && error.data && Array.isArray(error.data.issues)) {
119
- const issues = error.data.issues;
120
- issues.forEach((issue) => {
121
- client.validationErrorCounter.addValidationError({
122
- consumer: consumer == null ? void 0 : consumer.identifier,
123
- method: event.req.method,
124
- path,
125
- loc: issue.path.join("."),
126
- msg: issue.message,
127
- type: issue.code
128
- });
129
- });
130
- }
131
- if (path && (error == null ? void 0 : error.status) === 500 && error.cause instanceof Error) {
132
- client.serverErrorCounter.addServerError({
133
- consumer: consumer == null ? void 0 : consumer.identifier,
134
- method: event.req.method,
135
- path,
136
- type: error.cause.name,
137
- msg: error.cause.message,
138
- traceback: error.cause.stack || ""
139
- });
140
- }
141
- return newResponse;
142
- }, "handleResponse");
143
- app.use((0, import_h3.onRequest)(async (event) => {
144
- logsContext.enterWith([]);
145
- event.context[REQUEST_TIMESTAMP_SYMBOL] = import_node_perf_hooks.performance.now();
146
- const spanHandle = client.spanCollector.startSpan();
147
- event.context[SPAN_HANDLE_SYMBOL] = spanHandle;
148
- spanHandle.enterContext();
149
- const requestContentType = event.req.headers.get("content-type");
150
- const requestSize = (0, import_headers.parseContentLength)(event.req.headers.get("content-length")) ?? 0;
151
- if (client.requestLogger.enabled && client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType) && requestSize <= client.requestLogger.maxBodySize) {
152
- const clonedRequest = event.req.clone();
153
- const requestBody = Buffer.from(await clonedRequest.arrayBuffer());
154
- event.context[REQUEST_BODY_SYMBOL] = requestBody;
155
- }
156
- })).use((0, import_h3.onResponse)((response, event) => {
157
- if (client.isEnabled()) {
158
- return handleResponse(event, response, void 0);
159
- }
160
- })).use((0, import_h3.onError)((error, event) => {
161
- if (client.isEnabled()) {
162
- handleResponse(event, void 0, error);
163
- }
164
- }));
165
- });
166
- function setConsumer(event, consumer) {
167
- event.context.apitallyConsumer = consumer || void 0;
168
- }
169
- __name(setConsumer, "setConsumer");
170
- function getConsumer(event) {
171
- const consumer = event.context.apitallyConsumer;
172
- if (consumer) {
173
- return (0, import_consumerRegistry.consumerFromStringOrObject)(consumer);
174
- }
175
- return null;
176
- }
177
- __name(getConsumer, "getConsumer");
178
- // Annotate the CommonJS export names for ESM import in node:
179
- 0 && (module.exports = {
180
- apitallyPlugin,
181
- setConsumer
182
- });
183
- //# sourceMappingURL=plugin.cjs.map