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
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,23 +15,24 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var elysia_exports = {};
30
20
  __export(elysia_exports, {
31
- apitallyPlugin: () => import_plugin.default
21
+ apitallyPlugin: () => apitallyPlugin,
22
+ useApitally: () => useApitally
32
23
  });
33
24
  module.exports = __toCommonJS(elysia_exports);
34
- var import_plugin = __toESM(require('./plugin.cjs'), 1);
25
+ var import_elysia = require("elysia");
26
+ var import_middleware = require('./middleware.cjs');
27
+ function apitallyPlugin(options) {
28
+ return (0, import_middleware.createElysiaPlugin)(import_elysia.Elysia, options);
29
+ }
30
+ function useApitally(app, options) {
31
+ (0, import_middleware.installElysiaIntegration)(app, options);
32
+ }
35
33
  // Annotate the CommonJS export names for ESM import in node:
36
34
  0 && (module.exports = {
37
- apitallyPlugin
35
+ apitallyPlugin,
36
+ useApitally
38
37
  });
39
38
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/elysia/index.ts"],"sourcesContent":["export type { ApitallyConfig, ApitallyConsumer } from \"../common/types.js\";\nexport { default as apitallyPlugin } from \"./plugin.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;;;oBAA0C;","names":[]}
1
+ {"version":3,"sources":["../../src/elysia/index.ts"],"sourcesContent":["import { type AnyElysia, Elysia } from \"elysia\";\nimport type { ApitallyOptions } from \"../config.js\";\nimport { createElysiaPlugin, installElysiaIntegration } from \"./middleware.js\";\n\nexport type { ApitallyOptions };\n\nexport function apitallyPlugin(options?: ApitallyOptions): Elysia {\n return createElysiaPlugin(Elysia, options) as Elysia;\n}\n\n// Setup stays synchronous; activation begins on the first request.\nexport function useApitally(app: AnyElysia, options?: ApitallyOptions): void {\n installElysiaIntegration(app, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuC;AAEvC,wBAA6D;AAItD,SAAS,eAAe,SAAmC;AAChE,aAAO,sCAAmB,sBAAQ,OAAO;AAC3C;AAGO,SAAS,YAAY,KAAgB,SAAiC;AAC3E,kDAAyB,KAAK,OAAO;AACvC;","names":[]}
@@ -1,17 +1,8 @@
1
- export { ApitallyConfig, ApitallyConsumer } from '../common/types.cjs';
2
- export { default as apitallyPlugin } from './plugin.cjs';
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';
1
+ import { Elysia, AnyElysia } from 'elysia';
2
+ import { ApitallyOptions } from '../config.cjs';
9
3
  import '@opentelemetry/sdk-trace-base';
10
- import '../common/tempGzipFile.cjs';
11
- import 'elysia';
12
- import '../common/client.cjs';
13
- import '../common/consumerRegistry.cjs';
14
- import '../common/requestCounter.cjs';
15
- import '../common/serverErrorCounter.cjs';
16
- import '../common/validationErrorCounter.cjs';
17
- import '../common/response.cjs';
4
+
5
+ declare function apitallyPlugin(options?: ApitallyOptions): Elysia;
6
+ declare function useApitally(app: AnyElysia, options?: ApitallyOptions): void;
7
+
8
+ export { ApitallyOptions, apitallyPlugin, useApitally };
@@ -1,17 +1,8 @@
1
- export { ApitallyConfig, ApitallyConsumer } from '../common/types.js';
2
- export { default as apitallyPlugin } from './plugin.js';
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';
1
+ import { Elysia, AnyElysia } from 'elysia';
2
+ import { ApitallyOptions } from '../config.js';
9
3
  import '@opentelemetry/sdk-trace-base';
10
- import '../common/tempGzipFile.js';
11
- import 'elysia';
12
- import '../common/client.js';
13
- import '../common/consumerRegistry.js';
14
- import '../common/requestCounter.js';
15
- import '../common/serverErrorCounter.js';
16
- import '../common/validationErrorCounter.js';
17
- import '../common/response.js';
4
+
5
+ declare function apitallyPlugin(options?: ApitallyOptions): Elysia;
6
+ declare function useApitally(app: AnyElysia, options?: ApitallyOptions): void;
7
+
8
+ export { ApitallyOptions, apitallyPlugin, useApitally };
@@ -1,5 +1,13 @@
1
- import { default as default2 } from "./plugin.js";
1
+ import { Elysia } from "elysia";
2
+ import { createElysiaPlugin, installElysiaIntegration } from "./middleware.js";
3
+ function apitallyPlugin(options) {
4
+ return createElysiaPlugin(Elysia, options);
5
+ }
6
+ function useApitally(app, options) {
7
+ installElysiaIntegration(app, options);
8
+ }
2
9
  export {
3
- default2 as apitallyPlugin
10
+ apitallyPlugin,
11
+ useApitally
4
12
  };
5
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/elysia/index.ts"],"sourcesContent":["export type { ApitallyConfig, ApitallyConsumer } from \"../common/types.js\";\nexport { default as apitallyPlugin } from \"./plugin.js\";\n"],"mappings":"AACA,SAAoBA,WAAXC,gBAAiC;","names":["apitallyPlugin","default"]}
1
+ {"version":3,"sources":["../../src/elysia/index.ts"],"sourcesContent":["import { type AnyElysia, Elysia } from \"elysia\";\nimport type { ApitallyOptions } from \"../config.js\";\nimport { createElysiaPlugin, installElysiaIntegration } from \"./middleware.js\";\n\nexport type { ApitallyOptions };\n\nexport function apitallyPlugin(options?: ApitallyOptions): Elysia {\n return createElysiaPlugin(Elysia, options) as Elysia;\n}\n\n// Setup stays synchronous; activation begins on the first request.\nexport function useApitally(app: AnyElysia, options?: ApitallyOptions): void {\n installElysiaIntegration(app, options);\n}\n"],"mappings":"AAAA,SAAyB,cAAc;AAEvC,SAAS,oBAAoB,gCAAgC;AAItD,SAAS,eAAe,SAAmC;AAChE,SAAO,mBAAmB,QAAQ,OAAO;AAC3C;AAGO,SAAS,YAAY,KAAgB,SAAiC;AAC3E,2BAAyB,KAAK,OAAO;AACvC;","names":[]}
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var middleware_exports = {};
20
+ __export(middleware_exports, {
21
+ createElysiaPlugin: () => createElysiaPlugin,
22
+ installElysiaIntegration: () => installElysiaIntegration
23
+ });
24
+ module.exports = __toCommonJS(middleware_exports);
25
+ var import_api = require("@opentelemetry/api");
26
+ var import_activation = require('../activation.cjs');
27
+ var import_config = require('../config.cjs');
28
+ var import_exceptions = require('../exceptions.cjs');
29
+ var import_logger = require('../logger.cjs');
30
+ var import_packageVersion = require('../packageVersion.cjs');
31
+ var import_requestObservation = require('../requestObservation.cjs');
32
+ var import_requestObservationWeb = require('../requestObservationWeb.cjs');
33
+ var import_routes = require('./routes.cjs');
34
+ const INSTALL_MARKER = /* @__PURE__ */ Symbol.for("apitally.elysiaInstall");
35
+ const PLUGIN_NAME = "apitally";
36
+ const TRACER_NAME = "apitally.elysia";
37
+ function createElysiaPlugin(ElysiaClass, options) {
38
+ (0, import_activation.configure)(options);
39
+ let app;
40
+ (0, import_activation.registerStartupEventInfo)({
41
+ framework: "elysia",
42
+ frameworkVersion: (0, import_packageVersion.resolvePackageVersion)("elysia"),
43
+ resolvePaths: () => app ? (0, import_routes.resolveStartupPaths)(app) : []
44
+ });
45
+ return buildElysiaPlugin(ElysiaClass, (startedApp) => {
46
+ app = startedApp;
47
+ });
48
+ }
49
+ function installElysiaIntegration(app, options) {
50
+ (0, import_activation.configure)(options);
51
+ const markedApp = app;
52
+ if (markedApp[INSTALL_MARKER] === true) {
53
+ return;
54
+ }
55
+ if (app.routes.length > 0) {
56
+ (0, import_logger.logWarning)(
57
+ "useApitally() was called after routes were registered on the Elysia app, so Apitally was not installed. To resolve this, call useApitally() immediately after creating the app, before registering routes or plugins that contain routes."
58
+ );
59
+ return;
60
+ }
61
+ markedApp[INSTALL_MARKER] = true;
62
+ (0, import_activation.registerStartupEventInfo)({
63
+ framework: "elysia",
64
+ frameworkVersion: (0, import_packageVersion.resolvePackageVersion)("elysia"),
65
+ resolvePaths: () => (0, import_routes.resolveStartupPaths)(app)
66
+ });
67
+ const ElysiaClass = app.constructor;
68
+ app.use(buildElysiaPlugin(ElysiaClass));
69
+ }
70
+ function buildElysiaPlugin(ElysiaClass, recordStartedApp) {
71
+ const observations = /* @__PURE__ */ new WeakMap();
72
+ const plugin = new ElysiaClass({ name: PLUGIN_NAME });
73
+ plugin.wrap(
74
+ ((dispatcher, request) => function(...args) {
75
+ let observation;
76
+ try {
77
+ (0, import_activation.activate)();
78
+ if (!(0, import_activation.isActivated)() || (0, import_requestObservationWeb.isWebSocketUpgrade)(request)) {
79
+ return dispatcher.apply(this, args);
80
+ }
81
+ const started = (0, import_requestObservationWeb.startWebRequestObservation)({
82
+ request,
83
+ tracerName: TRACER_NAME
84
+ });
85
+ observation = {
86
+ ...started.observation,
87
+ requestContext: started.requestContext,
88
+ requestBodyCompletion: (0, import_requestObservationWeb.captureWebRequestBody)(
89
+ request,
90
+ started.observation.requestBodyCapture
91
+ )
92
+ };
93
+ observations.set(request, observation);
94
+ } catch (error) {
95
+ (0, import_logger.logWarning)(`Error in the Apitally Elysia middleware: ${String(error)}`);
96
+ return dispatcher.apply(this, args);
97
+ }
98
+ let result;
99
+ try {
100
+ result = import_api.context.with(observation.requestContext, () => dispatcher.apply(this, args));
101
+ } catch (error) {
102
+ finalizeFailedRequestObservation(observations, request, error);
103
+ throw error;
104
+ }
105
+ if (typeof result?.then === "function") {
106
+ return Promise.resolve(result).then(
107
+ (response) => observeResponse(observations, request, response),
108
+ (error) => {
109
+ finalizeFailedRequestObservation(observations, request, error);
110
+ throw error;
111
+ }
112
+ );
113
+ }
114
+ return observeResponse(observations, request, result);
115
+ })
116
+ );
117
+ plugin.onStart((app) => {
118
+ recordStartedApp?.(app);
119
+ });
120
+ plugin.onTransform({ as: "global" }, ({ request, route }) => {
121
+ try {
122
+ const observation = observations.get(request);
123
+ if (observation && typeof route === "string" && route.length > 0) {
124
+ observation.route = route;
125
+ }
126
+ } catch (error) {
127
+ (0, import_logger.logDebug)(`Error recording the matched Elysia route: ${String(error)}`);
128
+ }
129
+ });
130
+ plugin.onError({ as: "global" }, ({ request, route, error }) => {
131
+ try {
132
+ const observation = observations.get(request);
133
+ if (!observation) {
134
+ return;
135
+ }
136
+ if (typeof route === "string" && route.length > 0) {
137
+ observation.route = route;
138
+ }
139
+ observation.error = error;
140
+ } catch (hookError) {
141
+ (0, import_logger.logDebug)(`Error recording an Elysia error: ${String(hookError)}`);
142
+ }
143
+ });
144
+ plugin.onStop(() => {
145
+ (0, import_activation.flushTelemetry)().catch((error) => {
146
+ (0, import_logger.logWarning)(`Error flushing Apitally telemetry: ${String(error)}`);
147
+ });
148
+ });
149
+ return plugin;
150
+ }
151
+ function observeResponse(observations, request, response) {
152
+ const observation = observations.get(request);
153
+ if (!observation) {
154
+ return response;
155
+ }
156
+ observations.delete(request);
157
+ const statusCode = response.status;
158
+ if (observation.route === void 0 && statusCode !== 404) {
159
+ (0, import_logger.logWarning)(
160
+ "A request matched a route registered before the Apitally plugin was applied, so it is exported without a route template and is not counted in the request metrics. To resolve this, apply the Apitally plugin immediately after creating the app, before registering routes."
161
+ );
162
+ }
163
+ let responseHeaders = response.headers;
164
+ try {
165
+ responseHeaders = new Headers(response.headers);
166
+ const shouldAddContentType = shouldAddBunErrorContentType(observation, responseHeaders);
167
+ if (shouldAddContentType) {
168
+ responseHeaders.set("content-type", "text/plain;charset=utf-8");
169
+ }
170
+ if (observation.error !== void 0 && statusCode >= 500) {
171
+ import_api.context.with(observation.requestContext, () => (0, import_exceptions.captureException)(observation.error));
172
+ }
173
+ const captured = (0, import_requestObservationWeb.captureWebResponse)(
174
+ response,
175
+ (0, import_config.getConfig)().captureResponseBody && observation.requestRecord.dropReason === void 0
176
+ );
177
+ captured.completion.then(async (completion) => {
178
+ await observation.requestBodyCompletion;
179
+ (0, import_requestObservation.finalizeRequestObservation)({
180
+ observation,
181
+ completedAtMillis: completion.completedAtMillis,
182
+ statusCode,
183
+ route: observation.route,
184
+ requestHeaders: observation.requestHeaders,
185
+ responseHeaders,
186
+ capturedRequestBody: observation.requestBodyCapture,
187
+ capturedResponseBody: completion
188
+ });
189
+ }).catch((error) => {
190
+ (0, import_logger.logWarning)(`Error in the Apitally Elysia middleware: ${String(error)}`);
191
+ });
192
+ if (!shouldAddContentType) {
193
+ return captured.response;
194
+ }
195
+ return new Response(captured.response.body, {
196
+ status: captured.response.status,
197
+ statusText: captured.response.statusText,
198
+ headers: responseHeaders
199
+ });
200
+ } catch (error) {
201
+ const completedAtMillis = performance.now();
202
+ (0, import_logger.logWarning)(`Error in the Apitally Elysia middleware: ${String(error)}`);
203
+ observation.requestBodyCompletion.then(
204
+ () => (0, import_requestObservation.finalizeRequestObservation)({
205
+ observation,
206
+ completedAtMillis,
207
+ statusCode,
208
+ route: observation.route,
209
+ requestHeaders: observation.requestHeaders,
210
+ responseHeaders,
211
+ capturedRequestBody: observation.requestBodyCapture
212
+ })
213
+ ).catch((completionError) => {
214
+ (0, import_logger.logWarning)(`Error in the Apitally Elysia middleware: ${String(completionError)}`);
215
+ });
216
+ return response;
217
+ }
218
+ }
219
+ function shouldAddBunErrorContentType(observation, responseHeaders) {
220
+ if (typeof process.versions.bun !== "string" || responseHeaders.has("content-type")) {
221
+ return false;
222
+ }
223
+ const errorCode = observation.error?.code;
224
+ return errorCode === "NOT_FOUND" || errorCode === "VALIDATION";
225
+ }
226
+ function finalizeFailedRequestObservation(observations, request, error) {
227
+ const observation = observations.get(request);
228
+ if (!observation) {
229
+ return;
230
+ }
231
+ observations.delete(request);
232
+ try {
233
+ (0, import_requestObservation.finalizeRequestObservationWithError)({
234
+ requestRecord: observation.requestRecord,
235
+ spanHandle: observation.spanHandle,
236
+ error,
237
+ durationSeconds: (performance.now() - observation.startTimeMillis) / 1e3
238
+ });
239
+ } catch (finalizeError) {
240
+ (0, import_logger.logWarning)(`Error in the Apitally Elysia middleware: ${String(finalizeError)}`);
241
+ }
242
+ }
243
+ // Annotate the CommonJS export names for ESM import in node:
244
+ 0 && (module.exports = {
245
+ createElysiaPlugin,
246
+ installElysiaIntegration
247
+ });
248
+ //# sourceMappingURL=middleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/elysia/middleware.ts"],"sourcesContent":["import { type Context, context } from \"@opentelemetry/api\";\nimport type { AnyElysia } from \"elysia\";\nimport {\n activate,\n configure,\n flushTelemetry,\n isActivated,\n registerStartupEventInfo,\n} from \"../activation.js\";\nimport type { ApitallyOptions } from \"../config.js\";\nimport { getConfig } from \"../config.js\";\nimport { captureException } from \"../exceptions.js\";\nimport { logDebug, logWarning } from \"../logger.js\";\nimport { resolvePackageVersion } from \"../packageVersion.js\";\nimport {\n finalizeRequestObservation,\n finalizeRequestObservationWithError,\n} from \"../requestObservation.js\";\nimport {\n captureWebRequestBody,\n captureWebResponse,\n isWebSocketUpgrade,\n startWebRequestObservation,\n type WebRequestObservation,\n} from \"../requestObservationWeb.js\";\nimport { resolveStartupPaths } from \"./routes.js\";\n\nconst INSTALL_MARKER = Symbol.for(\"apitally.elysiaInstall\");\nconst PLUGIN_NAME = \"apitally\";\nconst TRACER_NAME = \"apitally.elysia\";\n\ninterface ElysiaConstructor {\n new (config?: { name?: string }): AnyElysia;\n}\n\ntype ElysiaDispatcher = (this: unknown, ...args: unknown[]) => Response | Promise<Response>;\ntype ElysiaWrap = Parameters<AnyElysia[\"wrap\"]>[0];\n\ninterface ElysiaRequestObservation extends WebRequestObservation {\n requestContext: Context;\n requestBodyCompletion: Promise<void>;\n route?: string;\n error?: unknown;\n}\n\nexport function createElysiaPlugin(\n ElysiaClass: ElysiaConstructor,\n options?: ApitallyOptions,\n): AnyElysia {\n configure(options);\n let app: AnyElysia | undefined;\n registerStartupEventInfo({\n framework: \"elysia\",\n frameworkVersion: resolvePackageVersion(\"elysia\"),\n resolvePaths: () => (app ? resolveStartupPaths(app) : []),\n });\n return buildElysiaPlugin(ElysiaClass, (startedApp) => {\n app = startedApp;\n });\n}\n\nexport function installElysiaIntegration(app: AnyElysia, options?: ApitallyOptions): void {\n configure(options);\n const markedApp = app as unknown as Record<symbol, boolean | undefined>;\n if (markedApp[INSTALL_MARKER] === true) {\n return;\n }\n if (app.routes.length > 0) {\n logWarning(\n \"useApitally() was called after routes were registered on the Elysia app, so Apitally was not installed. To resolve this, call useApitally() immediately after creating the app, before registering routes or plugins that contain routes.\",\n );\n return;\n }\n markedApp[INSTALL_MARKER] = true;\n registerStartupEventInfo({\n framework: \"elysia\",\n frameworkVersion: resolvePackageVersion(\"elysia\"),\n resolvePaths: () => resolveStartupPaths(app),\n });\n const ElysiaClass = app.constructor as ElysiaConstructor;\n app.use(buildElysiaPlugin(ElysiaClass));\n}\n\nfunction buildElysiaPlugin(\n ElysiaClass: ElysiaConstructor,\n recordStartedApp?: (app: AnyElysia) => void,\n): AnyElysia {\n const observations = new WeakMap<Request, ElysiaRequestObservation>();\n const plugin = new ElysiaClass({ name: PLUGIN_NAME });\n\n plugin.wrap(\n ((dispatcher: ElysiaDispatcher, request: Request) =>\n function (this: unknown, ...args: unknown[]): Response | Promise<Response> {\n let observation: ElysiaRequestObservation;\n try {\n activate();\n if (!isActivated() || isWebSocketUpgrade(request)) {\n return dispatcher.apply(this, args);\n }\n const started = startWebRequestObservation({\n request,\n tracerName: TRACER_NAME,\n });\n observation = {\n ...started.observation,\n requestContext: started.requestContext,\n requestBodyCompletion: captureWebRequestBody(\n request,\n started.observation.requestBodyCapture,\n ),\n };\n observations.set(request, observation);\n } catch (error) {\n logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);\n return dispatcher.apply(this, args);\n }\n\n let result: Response | Promise<Response>;\n try {\n result = context.with(observation.requestContext, () => dispatcher.apply(this, args));\n } catch (error) {\n finalizeFailedRequestObservation(observations, request, error);\n throw error;\n }\n if (typeof (result as PromiseLike<Response>)?.then === \"function\") {\n return Promise.resolve(result).then(\n (response) => observeResponse(observations, request, response),\n (error: unknown) => {\n finalizeFailedRequestObservation(observations, request, error);\n throw error;\n },\n );\n }\n return observeResponse(observations, request, result as Response);\n }) as unknown as ElysiaWrap,\n );\n\n plugin.onStart((app) => {\n recordStartedApp?.(app);\n });\n plugin.onTransform({ as: \"global\" }, ({ request, route }) => {\n try {\n const observation = observations.get(request);\n if (observation && typeof route === \"string\" && route.length > 0) {\n observation.route = route;\n }\n } catch (error) {\n logDebug(`Error recording the matched Elysia route: ${String(error)}`);\n }\n });\n plugin.onError({ as: \"global\" }, ({ request, route, error }) => {\n try {\n const observation = observations.get(request);\n if (!observation) {\n return;\n }\n if (typeof route === \"string\" && route.length > 0) {\n observation.route = route;\n }\n observation.error = error;\n } catch (hookError) {\n logDebug(`Error recording an Elysia error: ${String(hookError)}`);\n }\n });\n plugin.onStop(() => {\n flushTelemetry().catch((error: unknown) => {\n logWarning(`Error flushing Apitally telemetry: ${String(error)}`);\n });\n });\n\n return plugin;\n}\n\nfunction observeResponse(\n observations: WeakMap<Request, ElysiaRequestObservation>,\n request: Request,\n response: Response,\n): Response {\n const observation = observations.get(request);\n if (!observation) {\n return response;\n }\n observations.delete(request);\n const statusCode = response.status;\n // A non-404 response without a recorded route matched a route registered\n // before the plugin was applied; the plugin cannot detect this at setup.\n if (observation.route === undefined && statusCode !== 404) {\n logWarning(\n \"A request matched a route registered before the Apitally plugin was applied, so it is exported without a route template and is not counted in the request metrics. To resolve this, apply the Apitally plugin immediately after creating the app, before registering routes.\",\n );\n }\n let responseHeaders = response.headers;\n try {\n responseHeaders = new Headers(response.headers);\n const shouldAddContentType = shouldAddBunErrorContentType(observation, responseHeaders);\n if (shouldAddContentType) {\n responseHeaders.set(\"content-type\", \"text/plain;charset=utf-8\");\n }\n if (observation.error !== undefined && statusCode >= 500) {\n context.with(observation.requestContext, () => captureException(observation.error));\n }\n const captured = captureWebResponse(\n response,\n getConfig().captureResponseBody && observation.requestRecord.dropReason === undefined,\n );\n captured.completion\n .then(async (completion) => {\n await observation.requestBodyCompletion;\n finalizeRequestObservation({\n observation,\n completedAtMillis: completion.completedAtMillis,\n statusCode,\n route: observation.route,\n requestHeaders: observation.requestHeaders,\n responseHeaders,\n capturedRequestBody: observation.requestBodyCapture,\n capturedResponseBody: completion,\n });\n })\n .catch((error: unknown) => {\n logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);\n });\n if (!shouldAddContentType) {\n return captured.response;\n }\n // Bun adds this header after .wrap(); retain it when replacing the body stream.\n return new Response(captured.response.body, {\n status: captured.response.status,\n statusText: captured.response.statusText,\n headers: responseHeaders,\n });\n } catch (error) {\n const completedAtMillis = performance.now();\n logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);\n observation.requestBodyCompletion\n .then(() =>\n finalizeRequestObservation({\n observation,\n completedAtMillis,\n statusCode,\n route: observation.route,\n requestHeaders: observation.requestHeaders,\n responseHeaders,\n capturedRequestBody: observation.requestBodyCapture,\n }),\n )\n .catch((completionError: unknown) => {\n logWarning(`Error in the Apitally Elysia middleware: ${String(completionError)}`);\n });\n return response;\n }\n}\n\nfunction shouldAddBunErrorContentType(\n observation: ElysiaRequestObservation,\n responseHeaders: Headers,\n): boolean {\n if (\n typeof (process.versions as { bun?: unknown }).bun !== \"string\" ||\n responseHeaders.has(\"content-type\")\n ) {\n return false;\n }\n const errorCode = (observation.error as { code?: unknown } | undefined)?.code;\n return errorCode === \"NOT_FOUND\" || errorCode === \"VALIDATION\";\n}\n\nfunction finalizeFailedRequestObservation(\n observations: WeakMap<Request, ElysiaRequestObservation>,\n request: Request,\n error: unknown,\n): void {\n const observation = observations.get(request);\n if (!observation) {\n return;\n }\n observations.delete(request);\n try {\n finalizeRequestObservationWithError({\n requestRecord: observation.requestRecord,\n spanHandle: observation.spanHandle,\n error,\n durationSeconds: (performance.now() - observation.startTimeMillis) / 1000,\n });\n } catch (finalizeError) {\n logWarning(`Error in the Apitally Elysia middleware: ${String(finalizeError)}`);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,13 @@
1
+ import { AnyElysia } from 'elysia';
2
+ import { ApitallyOptions } from '../config.cjs';
3
+ import '@opentelemetry/sdk-trace-base';
4
+
5
+ interface ElysiaConstructor {
6
+ new (config?: {
7
+ name?: string;
8
+ }): AnyElysia;
9
+ }
10
+ declare function createElysiaPlugin(ElysiaClass: ElysiaConstructor, options?: ApitallyOptions): AnyElysia;
11
+ declare function installElysiaIntegration(app: AnyElysia, options?: ApitallyOptions): void;
12
+
13
+ export { createElysiaPlugin, installElysiaIntegration };
@@ -0,0 +1,13 @@
1
+ import { AnyElysia } from 'elysia';
2
+ import { ApitallyOptions } from '../config.js';
3
+ import '@opentelemetry/sdk-trace-base';
4
+
5
+ interface ElysiaConstructor {
6
+ new (config?: {
7
+ name?: string;
8
+ }): AnyElysia;
9
+ }
10
+ declare function createElysiaPlugin(ElysiaClass: ElysiaConstructor, options?: ApitallyOptions): AnyElysia;
11
+ declare function installElysiaIntegration(app: AnyElysia, options?: ApitallyOptions): void;
12
+
13
+ export { createElysiaPlugin, installElysiaIntegration };
@@ -0,0 +1,237 @@
1
+ import { context } from "@opentelemetry/api";
2
+ import {
3
+ activate,
4
+ configure,
5
+ flushTelemetry,
6
+ isActivated,
7
+ registerStartupEventInfo
8
+ } from "../activation.js";
9
+ import { getConfig } from "../config.js";
10
+ import { captureException } from "../exceptions.js";
11
+ import { logDebug, logWarning } from "../logger.js";
12
+ import { resolvePackageVersion } from "../packageVersion.js";
13
+ import {
14
+ finalizeRequestObservation,
15
+ finalizeRequestObservationWithError
16
+ } from "../requestObservation.js";
17
+ import {
18
+ captureWebRequestBody,
19
+ captureWebResponse,
20
+ isWebSocketUpgrade,
21
+ startWebRequestObservation
22
+ } from "../requestObservationWeb.js";
23
+ import { resolveStartupPaths } from "./routes.js";
24
+ const INSTALL_MARKER = /* @__PURE__ */ Symbol.for("apitally.elysiaInstall");
25
+ const PLUGIN_NAME = "apitally";
26
+ const TRACER_NAME = "apitally.elysia";
27
+ function createElysiaPlugin(ElysiaClass, options) {
28
+ configure(options);
29
+ let app;
30
+ registerStartupEventInfo({
31
+ framework: "elysia",
32
+ frameworkVersion: resolvePackageVersion("elysia"),
33
+ resolvePaths: () => app ? resolveStartupPaths(app) : []
34
+ });
35
+ return buildElysiaPlugin(ElysiaClass, (startedApp) => {
36
+ app = startedApp;
37
+ });
38
+ }
39
+ function installElysiaIntegration(app, options) {
40
+ configure(options);
41
+ const markedApp = app;
42
+ if (markedApp[INSTALL_MARKER] === true) {
43
+ return;
44
+ }
45
+ if (app.routes.length > 0) {
46
+ logWarning(
47
+ "useApitally() was called after routes were registered on the Elysia app, so Apitally was not installed. To resolve this, call useApitally() immediately after creating the app, before registering routes or plugins that contain routes."
48
+ );
49
+ return;
50
+ }
51
+ markedApp[INSTALL_MARKER] = true;
52
+ registerStartupEventInfo({
53
+ framework: "elysia",
54
+ frameworkVersion: resolvePackageVersion("elysia"),
55
+ resolvePaths: () => resolveStartupPaths(app)
56
+ });
57
+ const ElysiaClass = app.constructor;
58
+ app.use(buildElysiaPlugin(ElysiaClass));
59
+ }
60
+ function buildElysiaPlugin(ElysiaClass, recordStartedApp) {
61
+ const observations = /* @__PURE__ */ new WeakMap();
62
+ const plugin = new ElysiaClass({ name: PLUGIN_NAME });
63
+ plugin.wrap(
64
+ ((dispatcher, request) => function(...args) {
65
+ let observation;
66
+ try {
67
+ activate();
68
+ if (!isActivated() || isWebSocketUpgrade(request)) {
69
+ return dispatcher.apply(this, args);
70
+ }
71
+ const started = startWebRequestObservation({
72
+ request,
73
+ tracerName: TRACER_NAME
74
+ });
75
+ observation = {
76
+ ...started.observation,
77
+ requestContext: started.requestContext,
78
+ requestBodyCompletion: captureWebRequestBody(
79
+ request,
80
+ started.observation.requestBodyCapture
81
+ )
82
+ };
83
+ observations.set(request, observation);
84
+ } catch (error) {
85
+ logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);
86
+ return dispatcher.apply(this, args);
87
+ }
88
+ let result;
89
+ try {
90
+ result = context.with(observation.requestContext, () => dispatcher.apply(this, args));
91
+ } catch (error) {
92
+ finalizeFailedRequestObservation(observations, request, error);
93
+ throw error;
94
+ }
95
+ if (typeof result?.then === "function") {
96
+ return Promise.resolve(result).then(
97
+ (response) => observeResponse(observations, request, response),
98
+ (error) => {
99
+ finalizeFailedRequestObservation(observations, request, error);
100
+ throw error;
101
+ }
102
+ );
103
+ }
104
+ return observeResponse(observations, request, result);
105
+ })
106
+ );
107
+ plugin.onStart((app) => {
108
+ recordStartedApp?.(app);
109
+ });
110
+ plugin.onTransform({ as: "global" }, ({ request, route }) => {
111
+ try {
112
+ const observation = observations.get(request);
113
+ if (observation && typeof route === "string" && route.length > 0) {
114
+ observation.route = route;
115
+ }
116
+ } catch (error) {
117
+ logDebug(`Error recording the matched Elysia route: ${String(error)}`);
118
+ }
119
+ });
120
+ plugin.onError({ as: "global" }, ({ request, route, error }) => {
121
+ try {
122
+ const observation = observations.get(request);
123
+ if (!observation) {
124
+ return;
125
+ }
126
+ if (typeof route === "string" && route.length > 0) {
127
+ observation.route = route;
128
+ }
129
+ observation.error = error;
130
+ } catch (hookError) {
131
+ logDebug(`Error recording an Elysia error: ${String(hookError)}`);
132
+ }
133
+ });
134
+ plugin.onStop(() => {
135
+ flushTelemetry().catch((error) => {
136
+ logWarning(`Error flushing Apitally telemetry: ${String(error)}`);
137
+ });
138
+ });
139
+ return plugin;
140
+ }
141
+ function observeResponse(observations, request, response) {
142
+ const observation = observations.get(request);
143
+ if (!observation) {
144
+ return response;
145
+ }
146
+ observations.delete(request);
147
+ const statusCode = response.status;
148
+ if (observation.route === void 0 && statusCode !== 404) {
149
+ logWarning(
150
+ "A request matched a route registered before the Apitally plugin was applied, so it is exported without a route template and is not counted in the request metrics. To resolve this, apply the Apitally plugin immediately after creating the app, before registering routes."
151
+ );
152
+ }
153
+ let responseHeaders = response.headers;
154
+ try {
155
+ responseHeaders = new Headers(response.headers);
156
+ const shouldAddContentType = shouldAddBunErrorContentType(observation, responseHeaders);
157
+ if (shouldAddContentType) {
158
+ responseHeaders.set("content-type", "text/plain;charset=utf-8");
159
+ }
160
+ if (observation.error !== void 0 && statusCode >= 500) {
161
+ context.with(observation.requestContext, () => captureException(observation.error));
162
+ }
163
+ const captured = captureWebResponse(
164
+ response,
165
+ getConfig().captureResponseBody && observation.requestRecord.dropReason === void 0
166
+ );
167
+ captured.completion.then(async (completion) => {
168
+ await observation.requestBodyCompletion;
169
+ finalizeRequestObservation({
170
+ observation,
171
+ completedAtMillis: completion.completedAtMillis,
172
+ statusCode,
173
+ route: observation.route,
174
+ requestHeaders: observation.requestHeaders,
175
+ responseHeaders,
176
+ capturedRequestBody: observation.requestBodyCapture,
177
+ capturedResponseBody: completion
178
+ });
179
+ }).catch((error) => {
180
+ logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);
181
+ });
182
+ if (!shouldAddContentType) {
183
+ return captured.response;
184
+ }
185
+ return new Response(captured.response.body, {
186
+ status: captured.response.status,
187
+ statusText: captured.response.statusText,
188
+ headers: responseHeaders
189
+ });
190
+ } catch (error) {
191
+ const completedAtMillis = performance.now();
192
+ logWarning(`Error in the Apitally Elysia middleware: ${String(error)}`);
193
+ observation.requestBodyCompletion.then(
194
+ () => finalizeRequestObservation({
195
+ observation,
196
+ completedAtMillis,
197
+ statusCode,
198
+ route: observation.route,
199
+ requestHeaders: observation.requestHeaders,
200
+ responseHeaders,
201
+ capturedRequestBody: observation.requestBodyCapture
202
+ })
203
+ ).catch((completionError) => {
204
+ logWarning(`Error in the Apitally Elysia middleware: ${String(completionError)}`);
205
+ });
206
+ return response;
207
+ }
208
+ }
209
+ function shouldAddBunErrorContentType(observation, responseHeaders) {
210
+ if (typeof process.versions.bun !== "string" || responseHeaders.has("content-type")) {
211
+ return false;
212
+ }
213
+ const errorCode = observation.error?.code;
214
+ return errorCode === "NOT_FOUND" || errorCode === "VALIDATION";
215
+ }
216
+ function finalizeFailedRequestObservation(observations, request, error) {
217
+ const observation = observations.get(request);
218
+ if (!observation) {
219
+ return;
220
+ }
221
+ observations.delete(request);
222
+ try {
223
+ finalizeRequestObservationWithError({
224
+ requestRecord: observation.requestRecord,
225
+ spanHandle: observation.spanHandle,
226
+ error,
227
+ durationSeconds: (performance.now() - observation.startTimeMillis) / 1e3
228
+ });
229
+ } catch (finalizeError) {
230
+ logWarning(`Error in the Apitally Elysia middleware: ${String(finalizeError)}`);
231
+ }
232
+ }
233
+ export {
234
+ createElysiaPlugin,
235
+ installElysiaIntegration
236
+ };
237
+ //# sourceMappingURL=middleware.js.map