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
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
6
  var __export = (target, all) => {
8
7
  for (var name in all)
9
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -19,202 +18,94 @@ var __copyProps = (to, from, except, desc) => {
19
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
19
  var middleware_exports = {};
21
20
  __export(middleware_exports, {
22
- setConsumer: () => setConsumer,
23
- useApitally: () => useApitally
21
+ installKoaMiddleware: () => installKoaMiddleware
24
22
  });
25
23
  module.exports = __toCommonJS(middleware_exports);
26
- var import_node_async_hooks = require("node:async_hooks");
27
- var import_client = require('../common/client.cjs');
28
- var import_consumerRegistry = require('../common/consumerRegistry.cjs');
29
- var import_packageVersions = require('../common/packageVersions.cjs');
30
- var import_requestLogger = require('../common/requestLogger.cjs');
31
- var import_loggers = require('../loggers/index.cjs');
32
- function useApitally(app, config) {
33
- const client = new import_client.ApitallyClient(config);
34
- const middleware = getMiddleware(client);
35
- app.use(middleware);
36
- const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
37
- const appInfo = getAppInfo(app, config.appVersion);
38
- if (appInfo.paths.length > 0 || attempt >= 10) {
39
- client.setStartupData(appInfo);
40
- client.startSync();
41
- } else {
42
- setTimeout(() => setStartupData(attempt + 1), 500);
43
- }
44
- }, "setStartupData");
45
- setTimeout(() => setStartupData(), 500);
46
- }
47
- __name(useApitally, "useApitally");
48
- function getMiddleware(client) {
49
- const logsContext = new import_node_async_hooks.AsyncLocalStorage();
50
- if (client.requestLogger.config.captureLogs) {
51
- (0, import_loggers.patchConsole)(logsContext);
52
- (0, import_loggers.patchWinston)(logsContext);
24
+ var import_api = require("@opentelemetry/api");
25
+ var import_activation = require('../activation.cjs');
26
+ var import_config = require('../config.cjs');
27
+ var import_exceptions = require('../exceptions.cjs');
28
+ var import_logger = require('../logger.cjs');
29
+ var import_requestObservation = require('../requestObservation.cjs');
30
+ var import_requestObservationNode = require('../requestObservationNode.cjs');
31
+ var import_routes = require('./routes.cjs');
32
+ const MIDDLEWARE_MARKER = /* @__PURE__ */ Symbol.for("apitally.koaMiddleware");
33
+ const TRACER_NAME = "apitally.koa";
34
+ function installKoaMiddleware(app) {
35
+ const markedApp = app;
36
+ if (markedApp[MIDDLEWARE_MARKER] === true) {
37
+ return;
53
38
  }
54
- return async (ctx, next) => {
55
- if (!client.isEnabled() || ctx.request.method.toUpperCase() === "OPTIONS") {
39
+ markedApp[MIDDLEWARE_MARKER] = true;
40
+ warnIfMiddlewareAlreadyRegistered(app);
41
+ app.use(async (ctx, next) => {
42
+ let started;
43
+ try {
44
+ started = observeRequest(ctx);
45
+ } catch (error) {
46
+ (0, import_logger.logWarning)(`Error in the Apitally middleware: ${String(error)}`);
47
+ }
48
+ if (!started) {
56
49
  await next();
57
50
  return;
58
51
  }
59
- await logsContext.run([], async () => {
60
- var _a;
61
- let path;
62
- let statusCode;
63
- let serverError;
64
- const startTime = performance.now();
65
- const spanHandle = client.spanCollector.startSpan();
66
- try {
67
- await spanHandle.runInContext(next);
68
- } catch (error) {
69
- path = getPath(ctx);
70
- statusCode = error.statusCode || error.status || 500;
71
- if (path && statusCode === 500 && error instanceof Error) {
72
- serverError = error;
73
- client.serverErrorCounter.addServerError({
74
- consumer: (_a = getConsumer(ctx)) == null ? void 0 : _a.identifier,
75
- method: ctx.request.method,
76
- path,
77
- type: error.name,
78
- msg: error.message,
79
- traceback: error.stack || ""
80
- });
81
- }
82
- throw error;
83
- } finally {
84
- const responseTime = performance.now() - startTime;
85
- if (!path) {
86
- path = getPath(ctx);
87
- }
88
- spanHandle.setName(`${ctx.request.method} ${path}`);
89
- const spans = spanHandle.end();
90
- const traceId = spanHandle.traceId;
91
- const consumer = getConsumer(ctx);
92
- client.consumerRegistry.addOrUpdateConsumer(consumer);
93
- if (path) {
94
- try {
95
- client.requestCounter.addRequest({
96
- consumer: consumer == null ? void 0 : consumer.identifier,
97
- method: ctx.request.method,
98
- path,
99
- statusCode: statusCode || ctx.response.status,
100
- responseTime,
101
- requestSize: ctx.request.length,
102
- responseSize: ctx.response.length
103
- });
104
- } catch (error) {
105
- client.logger.error("Error while logging request in Apitally middleware.", {
106
- context: ctx,
107
- error
108
- });
109
- }
110
- }
111
- if (client.requestLogger.enabled) {
112
- const logs = logsContext.getStore();
113
- client.requestLogger.logRequest({
114
- timestamp: Date.now() / 1e3,
115
- method: ctx.request.method,
116
- path,
117
- url: ctx.request.href,
118
- headers: (0, import_requestLogger.convertHeaders)(ctx.request.headers),
119
- size: ctx.request.length,
120
- consumer: consumer == null ? void 0 : consumer.identifier,
121
- body: (0, import_requestLogger.convertBody)(ctx.request.body, ctx.request.get("content-type"))
122
- }, {
123
- statusCode: statusCode || ctx.response.status,
124
- responseTime: responseTime / 1e3,
125
- headers: (0, import_requestLogger.convertHeaders)(ctx.response.headers),
126
- size: ctx.response.length,
127
- body: (0, import_requestLogger.convertBody)(ctx.response.body, ctx.response.get("content-type"))
128
- }, serverError, logs, spans, traceId);
129
- }
52
+ try {
53
+ await import_api.context.with(started.requestContext, next);
54
+ } catch (error) {
55
+ const errorStatus = (0, import_exceptions.resolveErrorStatus)(error);
56
+ if (errorStatus === void 0 || errorStatus >= 500) {
57
+ import_api.context.with(started.requestContext, () => (0, import_exceptions.captureException)(error));
130
58
  }
131
- });
132
- };
133
- }
134
- __name(getMiddleware, "getMiddleware");
135
- function getPath(ctx) {
136
- return ctx._matchedRoute || ctx.routePath;
137
- }
138
- __name(getPath, "getPath");
139
- function setConsumer(ctx, consumer) {
140
- ctx.state.apitallyConsumer = consumer || void 0;
141
- }
142
- __name(setConsumer, "setConsumer");
143
- function getConsumer(ctx) {
144
- if (ctx.state.apitallyConsumer) {
145
- return (0, import_consumerRegistry.consumerFromStringOrObject)(ctx.state.apitallyConsumer);
146
- } else if (ctx.state.consumerIdentifier) {
147
- process.emitWarning("The consumerIdentifier property on the ctx.state object is deprecated. Use apitallyConsumer instead.", "DeprecationWarning");
148
- return (0, import_consumerRegistry.consumerFromStringOrObject)(ctx.state.consumerIdentifier);
149
- }
150
- return null;
59
+ throw error;
60
+ } finally {
61
+ started.observation.route = (0, import_routes.resolveMatchedRoute)(ctx);
62
+ }
63
+ });
151
64
  }
152
- __name(getConsumer, "getConsumer");
153
- function getAppInfo(app, appVersion) {
154
- const versions = [
155
- [
156
- "nodejs",
157
- process.version.replace(/^v/, "")
158
- ]
159
- ];
160
- const koaVersion = (0, import_packageVersions.getPackageVersion)("koa");
161
- const apitallyVersion = (0, import_packageVersions.getPackageVersion)("../..");
162
- if (koaVersion) {
163
- versions.push([
164
- "koa",
165
- koaVersion
166
- ]);
167
- }
168
- if (apitallyVersion) {
169
- versions.push([
170
- "apitally",
171
- apitallyVersion
172
- ]);
65
+ function observeRequest(ctx) {
66
+ (0, import_activation.activate)();
67
+ if (!(0, import_activation.isActivated)()) {
68
+ return void 0;
173
69
  }
174
- if (appVersion) {
175
- versions.push([
176
- "app",
177
- appVersion
178
- ]);
179
- }
180
- return {
181
- paths: listEndpoints(app),
182
- versions: Object.fromEntries(versions),
183
- client: "js:koa"
184
- };
185
- }
186
- __name(getAppInfo, "getAppInfo");
187
- function isKoaRouterMiddleware(middleware) {
188
- return typeof middleware === "function" && middleware.router && Array.isArray(middleware.router.stack);
70
+ (0, import_requestObservationNode.registerServerCloseFlush)(ctx.req);
71
+ const started = (0, import_requestObservationNode.startNodeRequestObservation)({ request: ctx.req, tracerName: TRACER_NAME });
72
+ import_api.context.bind(started.requestContext, ctx.req);
73
+ import_api.context.bind(started.requestContext, ctx.res);
74
+ const observation = started.observation;
75
+ (0, import_requestObservationNode.captureNodeResponse)(
76
+ ctx.res,
77
+ (0, import_config.getConfig)().captureResponseBody && observation.requestRecord.dropReason === void 0,
78
+ observation.requestBodyCapture
79
+ ).then((completion) => {
80
+ (0, import_requestObservation.finalizeRequestObservation)({
81
+ observation,
82
+ completedAtMillis: completion.completedAtMillis,
83
+ statusCode: ctx.res.statusCode,
84
+ route: observation.route ?? (0, import_routes.resolveMatchedRoute)(ctx),
85
+ clientAddress: ctx.ip,
86
+ requestHeaders: ctx.req.headers,
87
+ responseHeaders: ctx.res.getHeaders(),
88
+ capturedRequestBody: completion.requestBody,
89
+ capturedResponseBody: completion
90
+ });
91
+ }).catch((error) => {
92
+ (0, import_logger.logWarning)(`Error in the Apitally middleware: ${String(error)}`);
93
+ });
94
+ return { observation, requestContext: started.requestContext };
189
95
  }
190
- __name(isKoaRouterMiddleware, "isKoaRouterMiddleware");
191
- function listEndpoints(app) {
192
- const endpoints = [];
193
- app.middleware.forEach((middleware) => {
194
- if (isKoaRouterMiddleware(middleware)) {
195
- middleware.router.stack.forEach((layer) => {
196
- if (layer.methods && layer.methods.length > 0) {
197
- layer.methods.forEach((method) => {
198
- if (![
199
- "HEAD",
200
- "OPTIONS"
201
- ].includes(method.toUpperCase())) {
202
- endpoints.push({
203
- method: method.toUpperCase(),
204
- path: layer.path
205
- });
206
- }
207
- });
208
- }
209
- });
96
+ function warnIfMiddlewareAlreadyRegistered(app) {
97
+ try {
98
+ if (app.middleware.length > 0) {
99
+ (0, import_logger.logWarning)(
100
+ "useApitally() was called after middleware was registered on the Koa app, so earlier middleware may handle or consume requests before Apitally observes them. To resolve this, call useApitally() immediately after creating the app, before registering middleware and routes."
101
+ );
210
102
  }
211
- });
212
- return endpoints;
103
+ } catch (error) {
104
+ (0, import_logger.logDebug)(`Error inspecting the koa app's middleware: ${String(error)}`);
105
+ }
213
106
  }
214
- __name(listEndpoints, "listEndpoints");
215
107
  // Annotate the CommonJS export names for ESM import in node:
216
108
  0 && (module.exports = {
217
- setConsumer,
218
- useApitally
109
+ installKoaMiddleware
219
110
  });
220
111
  //# sourceMappingURL=middleware.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/koa/middleware.ts"],"sourcesContent":["import Koa from \"koa\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { ApitallyClient } from \"../common/client.js\";\nimport { consumerFromStringOrObject } from \"../common/consumerRegistry.js\";\nimport { getPackageVersion } from \"../common/packageVersions.js\";\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { convertBody, convertHeaders } from \"../common/requestLogger.js\";\nimport {\n ApitallyConfig,\n ApitallyConsumer,\n PathInfo,\n StartupData,\n} from \"../common/types.js\";\nimport { patchConsole, patchWinston } from \"../loggers/index.js\";\n\nexport function useApitally(app: Koa, config: ApitallyConfig) {\n const client = new ApitallyClient(config);\n const middleware = getMiddleware(client);\n app.use(middleware);\n\n const setStartupData = (attempt: number = 1) => {\n const appInfo = getAppInfo(app, config.appVersion);\n if (appInfo.paths.length > 0 || attempt >= 10) {\n client.setStartupData(appInfo);\n client.startSync();\n } else {\n setTimeout(() => setStartupData(attempt + 1), 500);\n }\n };\n setTimeout(() => setStartupData(), 500);\n}\n\nfunction getMiddleware(client: ApitallyClient) {\n const logsContext = new AsyncLocalStorage<LogRecord[]>();\n\n if (client.requestLogger.config.captureLogs) {\n patchConsole(logsContext);\n patchWinston(logsContext);\n }\n\n return async (ctx: Koa.Context, next: Koa.Next) => {\n if (!client.isEnabled() || ctx.request.method.toUpperCase() === \"OPTIONS\") {\n await next();\n return;\n }\n\n await logsContext.run([], async () => {\n let path: string | undefined;\n let statusCode: number | undefined;\n let serverError: Error | undefined;\n const startTime = performance.now();\n const spanHandle = client.spanCollector.startSpan();\n try {\n await spanHandle.runInContext(next);\n } catch (error: any) {\n path = getPath(ctx);\n statusCode = error.statusCode || error.status || 500;\n if (path && statusCode === 500 && error instanceof Error) {\n serverError = error;\n client.serverErrorCounter.addServerError({\n consumer: getConsumer(ctx)?.identifier,\n method: ctx.request.method,\n path,\n type: error.name,\n msg: error.message,\n traceback: error.stack || \"\",\n });\n }\n throw error;\n } finally {\n const responseTime = performance.now() - startTime;\n\n if (!path) {\n path = getPath(ctx);\n }\n\n spanHandle.setName(`${ctx.request.method} ${path}`);\n const spans = spanHandle.end();\n const traceId = spanHandle.traceId;\n\n const consumer = getConsumer(ctx);\n client.consumerRegistry.addOrUpdateConsumer(consumer);\n\n if (path) {\n try {\n client.requestCounter.addRequest({\n consumer: consumer?.identifier,\n method: ctx.request.method,\n path,\n statusCode: statusCode || ctx.response.status,\n responseTime,\n requestSize: ctx.request.length,\n responseSize: ctx.response.length,\n });\n } catch (error) {\n client.logger.error(\n \"Error while logging request in Apitally middleware.\",\n { context: ctx, error },\n );\n }\n }\n\n if (client.requestLogger.enabled) {\n const logs = logsContext.getStore();\n client.requestLogger.logRequest(\n {\n timestamp: Date.now() / 1000,\n method: ctx.request.method,\n path,\n url: ctx.request.href,\n headers: convertHeaders(ctx.request.headers),\n size: ctx.request.length,\n consumer: consumer?.identifier,\n body: convertBody(\n ctx.request.body,\n ctx.request.get(\"content-type\"),\n ),\n },\n {\n statusCode: statusCode || ctx.response.status,\n responseTime: responseTime / 1000,\n headers: convertHeaders(ctx.response.headers),\n size: ctx.response.length,\n body: convertBody(\n ctx.response.body,\n ctx.response.get(\"content-type\"),\n ),\n },\n serverError,\n logs,\n spans,\n traceId,\n );\n }\n }\n });\n };\n}\n\nfunction getPath(ctx: Koa.Context) {\n return ctx._matchedRoute || ctx.routePath; // _matchedRoute is set by koa-router, routePath is set by koa-route\n}\n\nexport function setConsumer(\n ctx: Koa.Context,\n consumer: ApitallyConsumer | string | null | undefined,\n) {\n ctx.state.apitallyConsumer = consumer || undefined;\n}\n\nfunction getConsumer(ctx: Koa.Context) {\n if (ctx.state.apitallyConsumer) {\n return consumerFromStringOrObject(ctx.state.apitallyConsumer);\n } else if (ctx.state.consumerIdentifier) {\n // For backwards compatibility\n process.emitWarning(\n \"The consumerIdentifier property on the ctx.state object is deprecated. Use apitallyConsumer instead.\",\n \"DeprecationWarning\",\n );\n return consumerFromStringOrObject(ctx.state.consumerIdentifier);\n }\n return null;\n}\n\nfunction getAppInfo(app: Koa, appVersion?: string): StartupData {\n const versions: Array<[string, string]> = [\n [\"nodejs\", process.version.replace(/^v/, \"\")],\n ];\n const koaVersion = getPackageVersion(\"koa\");\n const apitallyVersion = getPackageVersion(\"../..\");\n if (koaVersion) {\n versions.push([\"koa\", koaVersion]);\n }\n if (apitallyVersion) {\n versions.push([\"apitally\", apitallyVersion]);\n }\n if (appVersion) {\n versions.push([\"app\", appVersion]);\n }\n return {\n paths: listEndpoints(app),\n versions: Object.fromEntries(versions),\n client: \"js:koa\",\n };\n}\n\nfunction isKoaRouterMiddleware(middleware: any) {\n return (\n typeof middleware === \"function\" &&\n middleware.router &&\n Array.isArray(middleware.router.stack)\n );\n}\n\nfunction listEndpoints(app: Koa) {\n const endpoints: Array<PathInfo> = [];\n app.middleware.forEach((middleware: any) => {\n if (isKoaRouterMiddleware(middleware)) {\n middleware.router.stack.forEach((layer: any) => {\n if (layer.methods && layer.methods.length > 0) {\n layer.methods.forEach((method: string) => {\n if (![\"HEAD\", \"OPTIONS\"].includes(method.toUpperCase())) {\n endpoints.push({\n method: method.toUpperCase(),\n path: layer.path,\n });\n }\n });\n }\n });\n }\n });\n return endpoints;\n}\n"],"mappings":"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","names":["useApitally","app","config","client","ApitallyClient","middleware","getMiddleware","use","setStartupData","attempt","appInfo","getAppInfo","appVersion","paths","length","startSync","setTimeout","logsContext","AsyncLocalStorage","requestLogger","captureLogs","patchConsole","patchWinston","ctx","next","isEnabled","request","method","toUpperCase","run","path","statusCode","serverError","startTime","performance","now","spanHandle","spanCollector","startSpan","runInContext","error","getPath","status","Error","serverErrorCounter","addServerError","consumer","getConsumer","identifier","type","name","msg","message","traceback","stack","responseTime","setName","spans","end","traceId","consumerRegistry","addOrUpdateConsumer","requestCounter","addRequest","response","requestSize","responseSize","logger","context","enabled","logs","getStore","logRequest","timestamp","Date","url","href","headers","convertHeaders","size","body","convertBody","get","_matchedRoute","routePath","setConsumer","state","apitallyConsumer","undefined","consumerFromStringOrObject","consumerIdentifier","process","emitWarning","versions","version","replace","koaVersion","getPackageVersion","apitallyVersion","push","listEndpoints","Object","fromEntries","isKoaRouterMiddleware","router","Array","isArray","endpoints","forEach","layer","methods","includes"]}
1
+ {"version":3,"sources":["../../src/koa/middleware.ts"],"sourcesContent":["import { type Context, context } from \"@opentelemetry/api\";\n\nimport type Koa = require(\"koa\");\n\nimport { activate, isActivated } from \"../activation.js\";\nimport { getConfig } from \"../config.js\";\nimport { captureException, resolveErrorStatus } from \"../exceptions.js\";\nimport { logDebug, logWarning } from \"../logger.js\";\nimport { finalizeRequestObservation } from \"../requestObservation.js\";\nimport {\n captureNodeResponse,\n type NodeRequestObservation,\n registerServerCloseFlush,\n startNodeRequestObservation,\n} from \"../requestObservationNode.js\";\nimport { resolveMatchedRoute } from \"./routes.js\";\n\nconst MIDDLEWARE_MARKER = Symbol.for(\"apitally.koaMiddleware\");\nconst TRACER_NAME = \"apitally.koa\";\n\ninterface KoaRequestObservation extends NodeRequestObservation {\n route?: string;\n}\n\ninterface ObservedRequestStart {\n observation: KoaRequestObservation;\n requestContext: Context;\n}\n\nexport function installKoaMiddleware(app: Koa): void {\n const markedApp = app as unknown as Record<symbol, boolean | undefined>;\n if (markedApp[MIDDLEWARE_MARKER] === true) {\n return;\n }\n markedApp[MIDDLEWARE_MARKER] = true;\n warnIfMiddlewareAlreadyRegistered(app);\n\n app.use(async (ctx, next) => {\n let started: ObservedRequestStart | undefined;\n try {\n started = observeRequest(ctx);\n } catch (error) {\n logWarning(`Error in the Apitally middleware: ${String(error)}`);\n }\n if (!started) {\n await next();\n return;\n }\n\n try {\n await context.with(started.requestContext, next);\n } catch (error) {\n const errorStatus = resolveErrorStatus(error);\n if (errorStatus === undefined || errorStatus >= 500) {\n context.with(started.requestContext, () => captureException(error));\n }\n throw error;\n } finally {\n started.observation.route = resolveMatchedRoute(ctx);\n }\n });\n}\n\nfunction observeRequest(ctx: Koa.Context): ObservedRequestStart | undefined {\n activate();\n if (!isActivated()) {\n return undefined;\n }\n registerServerCloseFlush(ctx.req);\n const started = startNodeRequestObservation({ request: ctx.req, tracerName: TRACER_NAME });\n context.bind(started.requestContext, ctx.req);\n context.bind(started.requestContext, ctx.res);\n const observation: KoaRequestObservation = started.observation;\n captureNodeResponse(\n ctx.res,\n getConfig().captureResponseBody && observation.requestRecord.dropReason === undefined,\n observation.requestBodyCapture,\n )\n .then((completion) => {\n finalizeRequestObservation({\n observation,\n completedAtMillis: completion.completedAtMillis,\n statusCode: ctx.res.statusCode,\n route: observation.route ?? resolveMatchedRoute(ctx),\n clientAddress: ctx.ip,\n requestHeaders: ctx.req.headers,\n responseHeaders: ctx.res.getHeaders(),\n capturedRequestBody: completion.requestBody,\n capturedResponseBody: completion,\n });\n })\n .catch((error: unknown) => {\n logWarning(`Error in the Apitally middleware: ${String(error)}`);\n });\n return { observation, requestContext: started.requestContext };\n}\n\nfunction warnIfMiddlewareAlreadyRegistered(app: Koa): void {\n try {\n if (app.middleware.length > 0) {\n logWarning(\n \"useApitally() was called after middleware was registered on the Koa app, so earlier middleware may handle or consume requests before Apitally observes them. To resolve this, call useApitally() immediately after creating the app, before registering middleware and routes.\",\n );\n }\n } catch (error) {\n logDebug(`Error inspecting the koa app's middleware: ${String(error)}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAsC;AAItC,wBAAsC;AACtC,oBAA0B;AAC1B,wBAAqD;AACrD,oBAAqC;AACrC,gCAA2C;AAC3C,oCAKO;AACP,oBAAoC;AAEpC,MAAM,oBAAoB,uBAAO,IAAI,wBAAwB;AAC7D,MAAM,cAAc;AAWb,SAAS,qBAAqB,KAAgB;AACnD,QAAM,YAAY;AAClB,MAAI,UAAU,iBAAiB,MAAM,MAAM;AACzC;AAAA,EACF;AACA,YAAU,iBAAiB,IAAI;AAC/B,oCAAkC,GAAG;AAErC,MAAI,IAAI,OAAO,KAAK,SAAS;AAC3B,QAAI;AACJ,QAAI;AACF,gBAAU,eAAe,GAAG;AAAA,IAC9B,SAAS,OAAO;AACd,oCAAW,qCAAqC,OAAO,KAAK,CAAC,EAAE;AAAA,IACjE;AACA,QAAI,CAAC,SAAS;AACZ,YAAM,KAAK;AACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,mBAAQ,KAAK,QAAQ,gBAAgB,IAAI;AAAA,IACjD,SAAS,OAAO;AACd,YAAM,kBAAc,sCAAmB,KAAK;AAC5C,UAAI,gBAAgB,UAAa,eAAe,KAAK;AACnD,2BAAQ,KAAK,QAAQ,gBAAgB,UAAM,oCAAiB,KAAK,CAAC;AAAA,MACpE;AACA,YAAM;AAAA,IACR,UAAE;AACA,cAAQ,YAAY,YAAQ,mCAAoB,GAAG;AAAA,IACrD;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,KAAoD;AAC1E,kCAAS;AACT,MAAI,KAAC,+BAAY,GAAG;AAClB,WAAO;AAAA,EACT;AACA,8DAAyB,IAAI,GAAG;AAChC,QAAM,cAAU,2DAA4B,EAAE,SAAS,IAAI,KAAK,YAAY,YAAY,CAAC;AACzF,qBAAQ,KAAK,QAAQ,gBAAgB,IAAI,GAAG;AAC5C,qBAAQ,KAAK,QAAQ,gBAAgB,IAAI,GAAG;AAC5C,QAAM,cAAqC,QAAQ;AACnD;AAAA,IACE,IAAI;AAAA,QACJ,yBAAU,EAAE,uBAAuB,YAAY,cAAc,eAAe;AAAA,IAC5E,YAAY;AAAA,EACd,EACG,KAAK,CAAC,eAAe;AACpB,8DAA2B;AAAA,MACzB;AAAA,MACA,mBAAmB,WAAW;AAAA,MAC9B,YAAY,IAAI,IAAI;AAAA,MACpB,OAAO,YAAY,aAAS,mCAAoB,GAAG;AAAA,MACnD,eAAe,IAAI;AAAA,MACnB,gBAAgB,IAAI,IAAI;AAAA,MACxB,iBAAiB,IAAI,IAAI,WAAW;AAAA,MACpC,qBAAqB,WAAW;AAAA,MAChC,sBAAsB;AAAA,IACxB,CAAC;AAAA,EACH,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,kCAAW,qCAAqC,OAAO,KAAK,CAAC,EAAE;AAAA,EACjE,CAAC;AACH,SAAO,EAAE,aAAa,gBAAgB,QAAQ,eAAe;AAC/D;AAEA,SAAS,kCAAkC,KAAgB;AACzD,MAAI;AACF,QAAI,IAAI,WAAW,SAAS,GAAG;AAC7B;AAAA,QACE;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,gCAAS,8CAA8C,OAAO,KAAK,CAAC,EAAE;AAAA,EACxE;AACF;","names":[]}
@@ -1,15 +1,5 @@
1
- import { ApitallyConsumer, ApitallyConfig } from '../common/types.cjs';
2
- import Koa from 'koa';
3
- import '../common/logging.cjs';
4
- import 'winston';
5
- import '../common/requestLogger.cjs';
6
- import 'node:buffer';
7
- import 'node:http';
8
- import '../common/spanCollector.cjs';
9
- import '@opentelemetry/sdk-trace-base';
10
- import '../common/tempGzipFile.cjs';
1
+ import Koa__default from 'koa';
11
2
 
12
- declare function useApitally(app: Koa, config: ApitallyConfig): void;
13
- declare function setConsumer(ctx: Koa.Context, consumer: ApitallyConsumer | string | null | undefined): void;
3
+ declare function installKoaMiddleware(app: Koa__default): void;
14
4
 
15
- export { setConsumer, useApitally };
5
+ export { installKoaMiddleware };
@@ -1,15 +1,5 @@
1
- import { ApitallyConsumer, ApitallyConfig } from '../common/types.js';
2
- import Koa from 'koa';
3
- import '../common/logging.js';
4
- import 'winston';
5
- import '../common/requestLogger.js';
6
- import 'node:buffer';
7
- import 'node:http';
8
- import '../common/spanCollector.js';
9
- import '@opentelemetry/sdk-trace-base';
10
- import '../common/tempGzipFile.js';
1
+ import Koa__default from 'koa';
11
2
 
12
- declare function useApitally(app: Koa, config: ApitallyConfig): void;
13
- declare function setConsumer(ctx: Koa.Context, consumer: ApitallyConsumer | string | null | undefined): void;
3
+ declare function installKoaMiddleware(app: Koa__default): void;
14
4
 
15
- export { setConsumer, useApitally };
5
+ export { installKoaMiddleware };
@@ -1,196 +1,91 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { AsyncLocalStorage } from "node:async_hooks";
4
- import { ApitallyClient } from "../common/client.js";
5
- import { consumerFromStringOrObject } from "../common/consumerRegistry.js";
6
- import { getPackageVersion } from "../common/packageVersions.js";
7
- import { convertBody, convertHeaders } from "../common/requestLogger.js";
8
- import { patchConsole, patchWinston } from "../loggers/index.js";
9
- function useApitally(app, config) {
10
- const client = new ApitallyClient(config);
11
- const middleware = getMiddleware(client);
12
- app.use(middleware);
13
- const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
14
- const appInfo = getAppInfo(app, config.appVersion);
15
- if (appInfo.paths.length > 0 || attempt >= 10) {
16
- client.setStartupData(appInfo);
17
- client.startSync();
18
- } else {
19
- setTimeout(() => setStartupData(attempt + 1), 500);
20
- }
21
- }, "setStartupData");
22
- setTimeout(() => setStartupData(), 500);
23
- }
24
- __name(useApitally, "useApitally");
25
- function getMiddleware(client) {
26
- const logsContext = new AsyncLocalStorage();
27
- if (client.requestLogger.config.captureLogs) {
28
- patchConsole(logsContext);
29
- patchWinston(logsContext);
1
+ import { context } from "@opentelemetry/api";
2
+ import { activate, isActivated } from "../activation.js";
3
+ import { getConfig } from "../config.js";
4
+ import { captureException, resolveErrorStatus } from "../exceptions.js";
5
+ import { logDebug, logWarning } from "../logger.js";
6
+ import { finalizeRequestObservation } from "../requestObservation.js";
7
+ import {
8
+ captureNodeResponse,
9
+ registerServerCloseFlush,
10
+ startNodeRequestObservation
11
+ } from "../requestObservationNode.js";
12
+ import { resolveMatchedRoute } from "./routes.js";
13
+ const MIDDLEWARE_MARKER = /* @__PURE__ */ Symbol.for("apitally.koaMiddleware");
14
+ const TRACER_NAME = "apitally.koa";
15
+ function installKoaMiddleware(app) {
16
+ const markedApp = app;
17
+ if (markedApp[MIDDLEWARE_MARKER] === true) {
18
+ return;
30
19
  }
31
- return async (ctx, next) => {
32
- if (!client.isEnabled() || ctx.request.method.toUpperCase() === "OPTIONS") {
20
+ markedApp[MIDDLEWARE_MARKER] = true;
21
+ warnIfMiddlewareAlreadyRegistered(app);
22
+ app.use(async (ctx, next) => {
23
+ let started;
24
+ try {
25
+ started = observeRequest(ctx);
26
+ } catch (error) {
27
+ logWarning(`Error in the Apitally middleware: ${String(error)}`);
28
+ }
29
+ if (!started) {
33
30
  await next();
34
31
  return;
35
32
  }
36
- await logsContext.run([], async () => {
37
- var _a;
38
- let path;
39
- let statusCode;
40
- let serverError;
41
- const startTime = performance.now();
42
- const spanHandle = client.spanCollector.startSpan();
43
- try {
44
- await spanHandle.runInContext(next);
45
- } catch (error) {
46
- path = getPath(ctx);
47
- statusCode = error.statusCode || error.status || 500;
48
- if (path && statusCode === 500 && error instanceof Error) {
49
- serverError = error;
50
- client.serverErrorCounter.addServerError({
51
- consumer: (_a = getConsumer(ctx)) == null ? void 0 : _a.identifier,
52
- method: ctx.request.method,
53
- path,
54
- type: error.name,
55
- msg: error.message,
56
- traceback: error.stack || ""
57
- });
58
- }
59
- throw error;
60
- } finally {
61
- const responseTime = performance.now() - startTime;
62
- if (!path) {
63
- path = getPath(ctx);
64
- }
65
- spanHandle.setName(`${ctx.request.method} ${path}`);
66
- const spans = spanHandle.end();
67
- const traceId = spanHandle.traceId;
68
- const consumer = getConsumer(ctx);
69
- client.consumerRegistry.addOrUpdateConsumer(consumer);
70
- if (path) {
71
- try {
72
- client.requestCounter.addRequest({
73
- consumer: consumer == null ? void 0 : consumer.identifier,
74
- method: ctx.request.method,
75
- path,
76
- statusCode: statusCode || ctx.response.status,
77
- responseTime,
78
- requestSize: ctx.request.length,
79
- responseSize: ctx.response.length
80
- });
81
- } catch (error) {
82
- client.logger.error("Error while logging request in Apitally middleware.", {
83
- context: ctx,
84
- error
85
- });
86
- }
87
- }
88
- if (client.requestLogger.enabled) {
89
- const logs = logsContext.getStore();
90
- client.requestLogger.logRequest({
91
- timestamp: Date.now() / 1e3,
92
- method: ctx.request.method,
93
- path,
94
- url: ctx.request.href,
95
- headers: convertHeaders(ctx.request.headers),
96
- size: ctx.request.length,
97
- consumer: consumer == null ? void 0 : consumer.identifier,
98
- body: convertBody(ctx.request.body, ctx.request.get("content-type"))
99
- }, {
100
- statusCode: statusCode || ctx.response.status,
101
- responseTime: responseTime / 1e3,
102
- headers: convertHeaders(ctx.response.headers),
103
- size: ctx.response.length,
104
- body: convertBody(ctx.response.body, ctx.response.get("content-type"))
105
- }, serverError, logs, spans, traceId);
106
- }
33
+ try {
34
+ await context.with(started.requestContext, next);
35
+ } catch (error) {
36
+ const errorStatus = resolveErrorStatus(error);
37
+ if (errorStatus === void 0 || errorStatus >= 500) {
38
+ context.with(started.requestContext, () => captureException(error));
107
39
  }
108
- });
109
- };
110
- }
111
- __name(getMiddleware, "getMiddleware");
112
- function getPath(ctx) {
113
- return ctx._matchedRoute || ctx.routePath;
114
- }
115
- __name(getPath, "getPath");
116
- function setConsumer(ctx, consumer) {
117
- ctx.state.apitallyConsumer = consumer || void 0;
118
- }
119
- __name(setConsumer, "setConsumer");
120
- function getConsumer(ctx) {
121
- if (ctx.state.apitallyConsumer) {
122
- return consumerFromStringOrObject(ctx.state.apitallyConsumer);
123
- } else if (ctx.state.consumerIdentifier) {
124
- process.emitWarning("The consumerIdentifier property on the ctx.state object is deprecated. Use apitallyConsumer instead.", "DeprecationWarning");
125
- return consumerFromStringOrObject(ctx.state.consumerIdentifier);
126
- }
127
- return null;
40
+ throw error;
41
+ } finally {
42
+ started.observation.route = resolveMatchedRoute(ctx);
43
+ }
44
+ });
128
45
  }
129
- __name(getConsumer, "getConsumer");
130
- function getAppInfo(app, appVersion) {
131
- const versions = [
132
- [
133
- "nodejs",
134
- process.version.replace(/^v/, "")
135
- ]
136
- ];
137
- const koaVersion = getPackageVersion("koa");
138
- const apitallyVersion = getPackageVersion("../..");
139
- if (koaVersion) {
140
- versions.push([
141
- "koa",
142
- koaVersion
143
- ]);
144
- }
145
- if (apitallyVersion) {
146
- versions.push([
147
- "apitally",
148
- apitallyVersion
149
- ]);
46
+ function observeRequest(ctx) {
47
+ activate();
48
+ if (!isActivated()) {
49
+ return void 0;
150
50
  }
151
- if (appVersion) {
152
- versions.push([
153
- "app",
154
- appVersion
155
- ]);
156
- }
157
- return {
158
- paths: listEndpoints(app),
159
- versions: Object.fromEntries(versions),
160
- client: "js:koa"
161
- };
162
- }
163
- __name(getAppInfo, "getAppInfo");
164
- function isKoaRouterMiddleware(middleware) {
165
- return typeof middleware === "function" && middleware.router && Array.isArray(middleware.router.stack);
51
+ registerServerCloseFlush(ctx.req);
52
+ const started = startNodeRequestObservation({ request: ctx.req, tracerName: TRACER_NAME });
53
+ context.bind(started.requestContext, ctx.req);
54
+ context.bind(started.requestContext, ctx.res);
55
+ const observation = started.observation;
56
+ captureNodeResponse(
57
+ ctx.res,
58
+ getConfig().captureResponseBody && observation.requestRecord.dropReason === void 0,
59
+ observation.requestBodyCapture
60
+ ).then((completion) => {
61
+ finalizeRequestObservation({
62
+ observation,
63
+ completedAtMillis: completion.completedAtMillis,
64
+ statusCode: ctx.res.statusCode,
65
+ route: observation.route ?? resolveMatchedRoute(ctx),
66
+ clientAddress: ctx.ip,
67
+ requestHeaders: ctx.req.headers,
68
+ responseHeaders: ctx.res.getHeaders(),
69
+ capturedRequestBody: completion.requestBody,
70
+ capturedResponseBody: completion
71
+ });
72
+ }).catch((error) => {
73
+ logWarning(`Error in the Apitally middleware: ${String(error)}`);
74
+ });
75
+ return { observation, requestContext: started.requestContext };
166
76
  }
167
- __name(isKoaRouterMiddleware, "isKoaRouterMiddleware");
168
- function listEndpoints(app) {
169
- const endpoints = [];
170
- app.middleware.forEach((middleware) => {
171
- if (isKoaRouterMiddleware(middleware)) {
172
- middleware.router.stack.forEach((layer) => {
173
- if (layer.methods && layer.methods.length > 0) {
174
- layer.methods.forEach((method) => {
175
- if (![
176
- "HEAD",
177
- "OPTIONS"
178
- ].includes(method.toUpperCase())) {
179
- endpoints.push({
180
- method: method.toUpperCase(),
181
- path: layer.path
182
- });
183
- }
184
- });
185
- }
186
- });
77
+ function warnIfMiddlewareAlreadyRegistered(app) {
78
+ try {
79
+ if (app.middleware.length > 0) {
80
+ logWarning(
81
+ "useApitally() was called after middleware was registered on the Koa app, so earlier middleware may handle or consume requests before Apitally observes them. To resolve this, call useApitally() immediately after creating the app, before registering middleware and routes."
82
+ );
187
83
  }
188
- });
189
- return endpoints;
84
+ } catch (error) {
85
+ logDebug(`Error inspecting the koa app's middleware: ${String(error)}`);
86
+ }
190
87
  }
191
- __name(listEndpoints, "listEndpoints");
192
88
  export {
193
- setConsumer,
194
- useApitally
89
+ installKoaMiddleware
195
90
  };
196
91
  //# sourceMappingURL=middleware.js.map