apitally 0.25.8 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/README.md +228 -178
  2. package/dist/activation.cjs +393 -0
  3. package/dist/activation.cjs.map +1 -0
  4. package/dist/activation.d.cts +42 -0
  5. package/dist/activation.d.ts +42 -0
  6. package/dist/activation.js +383 -0
  7. package/dist/activation.js.map +1 -0
  8. package/dist/adonisjs/configure.cjs +86 -30
  9. package/dist/adonisjs/configure.cjs.map +1 -1
  10. package/dist/adonisjs/configure.d.cts +0 -4
  11. package/dist/adonisjs/configure.d.ts +0 -4
  12. package/dist/adonisjs/configure.js +83 -29
  13. package/dist/adonisjs/configure.js.map +1 -1
  14. package/dist/adonisjs/index.cjs +38 -21
  15. package/dist/adonisjs/index.cjs.map +1 -1
  16. package/dist/adonisjs/index.d.cts +5 -14
  17. package/dist/adonisjs/index.d.ts +5 -14
  18. package/dist/adonisjs/index.js +39 -18
  19. package/dist/adonisjs/index.js.map +1 -1
  20. package/dist/adonisjs/middleware.cjs +43 -109
  21. package/dist/adonisjs/middleware.cjs.map +1 -1
  22. package/dist/adonisjs/middleware.d.cts +1 -16
  23. package/dist/adonisjs/middleware.d.ts +1 -16
  24. package/dist/adonisjs/middleware.js +43 -110
  25. package/dist/adonisjs/middleware.js.map +1 -1
  26. package/dist/adonisjs/provider.cjs +19 -87
  27. package/dist/adonisjs/provider.cjs.map +1 -1
  28. package/dist/adonisjs/provider.d.cts +0 -22
  29. package/dist/adonisjs/provider.d.ts +0 -22
  30. package/dist/adonisjs/provider.js +19 -88
  31. package/dist/adonisjs/provider.js.map +1 -1
  32. package/dist/adonisjs/stubs/config/apitally.stub +11 -15
  33. package/dist/bodyCapture.cjs +128 -0
  34. package/dist/bodyCapture.cjs.map +1 -0
  35. package/dist/bodyCapture.d.cts +31 -0
  36. package/dist/bodyCapture.d.ts +31 -0
  37. package/dist/bodyCapture.js +101 -0
  38. package/dist/bodyCapture.js.map +1 -0
  39. package/dist/config.cjs +227 -0
  40. package/dist/config.cjs.map +1 -0
  41. package/dist/config.d.cts +45 -0
  42. package/dist/config.d.ts +45 -0
  43. package/dist/config.js +192 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/consumer.cjs +98 -0
  46. package/dist/consumer.cjs.map +1 -0
  47. package/dist/consumer.d.cts +15 -0
  48. package/dist/consumer.d.ts +15 -0
  49. package/dist/consumer.js +78 -0
  50. package/dist/consumer.js.map +1 -0
  51. package/dist/context.cjs +68 -0
  52. package/dist/context.cjs.map +1 -0
  53. package/dist/context.d.cts +33 -0
  54. package/dist/context.d.ts +33 -0
  55. package/dist/context.js +40 -0
  56. package/dist/context.js.map +1 -0
  57. package/dist/elysia/index.cjs +12 -3
  58. package/dist/elysia/index.cjs.map +1 -1
  59. package/dist/elysia/index.d.cts +8 -16
  60. package/dist/elysia/index.d.ts +8 -16
  61. package/dist/elysia/index.js +10 -2
  62. package/dist/elysia/index.js.map +1 -1
  63. package/dist/elysia/middleware.cjs +261 -0
  64. package/dist/elysia/middleware.cjs.map +1 -0
  65. package/dist/elysia/middleware.d.cts +14 -0
  66. package/dist/elysia/middleware.d.ts +14 -0
  67. package/dist/elysia/middleware.js +250 -0
  68. package/dist/elysia/middleware.js.map +1 -0
  69. package/dist/{otel/index.cjs → elysia/routes.cjs} +16 -7
  70. package/dist/elysia/routes.cjs.map +1 -0
  71. package/dist/elysia/routes.d.cts +7 -0
  72. package/dist/elysia/routes.d.ts +7 -0
  73. package/dist/elysia/routes.js +14 -0
  74. package/dist/elysia/routes.js.map +1 -0
  75. package/dist/exceptions.cjs +81 -0
  76. package/dist/exceptions.cjs.map +1 -0
  77. package/dist/exceptions.d.cts +7 -0
  78. package/dist/exceptions.d.ts +7 -0
  79. package/dist/exceptions.js +55 -0
  80. package/dist/exceptions.js.map +1 -0
  81. package/dist/exportSerialization.cjs +56 -0
  82. package/dist/exportSerialization.cjs.map +1 -0
  83. package/dist/exportSerialization.d.cts +7 -0
  84. package/dist/exportSerialization.d.ts +7 -0
  85. package/dist/exportSerialization.js +32 -0
  86. package/dist/exportSerialization.js.map +1 -0
  87. package/dist/exportWorker.cjs +305 -0
  88. package/dist/exportWorker.cjs.map +1 -0
  89. package/dist/exportWorker.d.cts +46 -0
  90. package/dist/exportWorker.d.ts +46 -0
  91. package/dist/exportWorker.js +279 -0
  92. package/dist/exportWorker.js.map +1 -0
  93. package/dist/express/index.cjs +9 -4
  94. package/dist/express/index.cjs.map +1 -1
  95. package/dist/express/index.d.cts +7 -10
  96. package/dist/express/index.d.ts +7 -10
  97. package/dist/express/index.js +8 -2
  98. package/dist/express/index.js.map +1 -1
  99. package/dist/express/install.cjs +45 -0
  100. package/dist/express/install.cjs.map +1 -0
  101. package/dist/express/install.d.cts +10 -0
  102. package/dist/express/install.d.ts +10 -0
  103. package/dist/express/install.js +21 -0
  104. package/dist/express/install.js.map +1 -0
  105. package/dist/express/middleware.cjs +87 -331
  106. package/dist/express/middleware.cjs.map +1 -1
  107. package/dist/express/middleware.d.cts +3 -21
  108. package/dist/express/middleware.d.ts +3 -21
  109. package/dist/express/middleware.js +91 -327
  110. package/dist/express/middleware.js.map +1 -1
  111. package/dist/express/register.cjs +20 -0
  112. package/dist/express/register.cjs.map +1 -0
  113. package/dist/express/register.d.cts +2 -0
  114. package/dist/express/register.d.ts +2 -0
  115. package/dist/express/register.js +19 -0
  116. package/dist/express/register.js.map +1 -0
  117. package/dist/express/routes.cjs +429 -0
  118. package/dist/express/routes.cjs.map +1 -0
  119. package/dist/express/routes.d.cts +14 -0
  120. package/dist/express/routes.d.ts +14 -0
  121. package/dist/express/routes.js +401 -0
  122. package/dist/express/routes.js.map +1 -0
  123. package/dist/fastify/index.cjs +10 -5
  124. package/dist/fastify/index.cjs.map +1 -1
  125. package/dist/fastify/index.d.cts +7 -11
  126. package/dist/fastify/index.d.ts +7 -11
  127. package/dist/fastify/index.js +9 -3
  128. package/dist/fastify/index.js.map +1 -1
  129. package/dist/{loggers/index.cjs → fastify/install.cjs} +17 -19
  130. package/dist/fastify/install.cjs.map +1 -0
  131. package/dist/fastify/install.d.cts +10 -0
  132. package/dist/fastify/install.d.ts +10 -0
  133. package/dist/fastify/install.js +15 -0
  134. package/dist/fastify/install.js.map +1 -0
  135. package/dist/fastify/middleware.cjs +135 -0
  136. package/dist/fastify/middleware.cjs.map +1 -0
  137. package/dist/fastify/middleware.d.cts +7 -0
  138. package/dist/fastify/middleware.d.ts +7 -0
  139. package/dist/fastify/middleware.js +114 -0
  140. package/dist/fastify/middleware.js.map +1 -0
  141. package/dist/{common/paramValidation.cjs → fastify/routes.cjs} +15 -17
  142. package/dist/fastify/routes.cjs.map +1 -0
  143. package/dist/fastify/routes.d.cts +8 -0
  144. package/dist/fastify/routes.d.ts +8 -0
  145. package/dist/fastify/routes.js +14 -0
  146. package/dist/fastify/routes.js.map +1 -0
  147. package/dist/h3/index.cjs +28 -4
  148. package/dist/h3/index.cjs.map +1 -1
  149. package/dist/h3/index.d.cts +8 -10
  150. package/dist/h3/index.d.ts +8 -10
  151. package/dist/h3/index.js +26 -2
  152. package/dist/h3/index.js.map +1 -1
  153. package/dist/h3/middleware.cjs +210 -0
  154. package/dist/h3/middleware.cjs.map +1 -0
  155. package/dist/h3/middleware.d.cts +5 -0
  156. package/dist/h3/middleware.d.ts +5 -0
  157. package/dist/h3/middleware.js +194 -0
  158. package/dist/h3/middleware.js.map +1 -0
  159. package/dist/h3/routes.cjs +66 -0
  160. package/dist/h3/routes.cjs.map +1 -0
  161. package/dist/h3/routes.d.cts +8 -0
  162. package/dist/h3/routes.d.ts +8 -0
  163. package/dist/h3/routes.js +41 -0
  164. package/dist/h3/routes.js.map +1 -0
  165. package/dist/hapi/index.cjs +15 -4
  166. package/dist/hapi/index.cjs.map +1 -1
  167. package/dist/hapi/index.d.cts +8 -10
  168. package/dist/hapi/index.d.ts +8 -10
  169. package/dist/hapi/index.js +13 -2
  170. package/dist/hapi/index.js.map +1 -1
  171. package/dist/{loggers/hapi.cjs → hapi/install.cjs} +20 -26
  172. package/dist/hapi/install.cjs.map +1 -0
  173. package/dist/hapi/install.d.cts +8 -0
  174. package/dist/hapi/install.d.ts +8 -0
  175. package/dist/hapi/install.js +22 -0
  176. package/dist/hapi/install.js.map +1 -0
  177. package/dist/hapi/middleware.cjs +158 -0
  178. package/dist/hapi/middleware.cjs.map +1 -0
  179. package/dist/hapi/middleware.d.cts +5 -0
  180. package/dist/hapi/middleware.d.ts +5 -0
  181. package/dist/hapi/middleware.js +137 -0
  182. package/dist/hapi/middleware.js.map +1 -0
  183. package/dist/{common/logging.cjs → hapi/routes.cjs} +14 -17
  184. package/dist/hapi/routes.cjs.map +1 -0
  185. package/dist/hapi/routes.d.cts +8 -0
  186. package/dist/hapi/routes.d.ts +8 -0
  187. package/dist/hapi/routes.js +12 -0
  188. package/dist/hapi/routes.js.map +1 -0
  189. package/dist/hono/index.cjs +13 -3
  190. package/dist/hono/index.cjs.map +1 -1
  191. package/dist/hono/index.d.cts +7 -10
  192. package/dist/hono/index.d.ts +7 -10
  193. package/dist/hono/index.js +13 -2
  194. package/dist/hono/index.js.map +1 -1
  195. package/dist/hono/middleware.cjs +219 -127
  196. package/dist/hono/middleware.cjs.map +1 -1
  197. package/dist/hono/middleware.d.cts +3 -18
  198. package/dist/hono/middleware.d.ts +3 -18
  199. package/dist/hono/middleware.js +229 -126
  200. package/dist/hono/middleware.js.map +1 -1
  201. package/dist/hono/routes.cjs +74 -0
  202. package/dist/hono/routes.cjs.map +1 -0
  203. package/dist/hono/routes.d.cts +8 -0
  204. package/dist/hono/routes.d.ts +8 -0
  205. package/dist/hono/routes.js +49 -0
  206. package/dist/hono/routes.js.map +1 -0
  207. package/dist/index.cjs +108 -0
  208. package/dist/index.cjs.map +1 -1
  209. package/dist/index.d.cts +29 -1
  210. package/dist/index.d.ts +29 -1
  211. package/dist/index.js +77 -0
  212. package/dist/index.js.map +1 -1
  213. package/dist/koa/index.cjs +13 -3
  214. package/dist/koa/index.cjs.map +1 -1
  215. package/dist/koa/index.d.cts +7 -10
  216. package/dist/koa/index.d.ts +7 -10
  217. package/dist/koa/index.js +13 -2
  218. package/dist/koa/index.js.map +1 -1
  219. package/dist/koa/middleware.cjs +85 -184
  220. package/dist/koa/middleware.cjs.map +1 -1
  221. package/dist/koa/middleware.d.cts +3 -13
  222. package/dist/koa/middleware.d.ts +3 -13
  223. package/dist/koa/middleware.js +88 -183
  224. package/dist/koa/middleware.js.map +1 -1
  225. package/dist/koa/routes.cjs +71 -0
  226. package/dist/koa/routes.cjs.map +1 -0
  227. package/dist/koa/routes.d.cts +8 -0
  228. package/dist/koa/routes.d.ts +8 -0
  229. package/dist/koa/routes.js +46 -0
  230. package/dist/koa/routes.js.map +1 -0
  231. package/dist/logCapture.cjs +417 -0
  232. package/dist/logCapture.cjs.map +1 -0
  233. package/dist/logCapture.d.cts +18 -0
  234. package/dist/logCapture.d.ts +18 -0
  235. package/dist/logCapture.js +390 -0
  236. package/dist/logCapture.js.map +1 -0
  237. package/dist/logRecordExporter.cjs +51 -0
  238. package/dist/logRecordExporter.cjs.map +1 -0
  239. package/dist/logRecordExporter.d.cts +14 -0
  240. package/dist/logRecordExporter.d.ts +14 -0
  241. package/dist/logRecordExporter.js +27 -0
  242. package/dist/logRecordExporter.js.map +1 -0
  243. package/dist/logRecordProcessor.cjs +137 -0
  244. package/dist/logRecordProcessor.cjs.map +1 -0
  245. package/dist/logRecordProcessor.d.cts +27 -0
  246. package/dist/logRecordProcessor.d.ts +27 -0
  247. package/dist/logRecordProcessor.js +113 -0
  248. package/dist/logRecordProcessor.js.map +1 -0
  249. package/dist/logger.cjs +62 -0
  250. package/dist/logger.cjs.map +1 -0
  251. package/dist/logger.d.cts +7 -0
  252. package/dist/logger.d.ts +7 -0
  253. package/dist/logger.js +34 -0
  254. package/dist/logger.js.map +1 -0
  255. package/dist/metrics.cjs +171 -0
  256. package/dist/metrics.cjs.map +1 -0
  257. package/dist/metrics.d.cts +26 -0
  258. package/dist/metrics.d.ts +26 -0
  259. package/dist/metrics.js +153 -0
  260. package/dist/metrics.js.map +1 -0
  261. package/dist/nestjs/index.cjs +81 -71
  262. package/dist/nestjs/index.cjs.map +1 -1
  263. package/dist/nestjs/index.d.cts +4 -11
  264. package/dist/nestjs/index.d.ts +4 -11
  265. package/dist/nestjs/index.js +81 -61
  266. package/dist/nestjs/index.js.map +1 -1
  267. package/dist/packageVersion.cjs +67 -0
  268. package/dist/packageVersion.cjs.map +1 -0
  269. package/dist/packageVersion.d.cts +5 -0
  270. package/dist/packageVersion.d.ts +5 -0
  271. package/dist/packageVersion.js +39 -0
  272. package/dist/packageVersion.js.map +1 -0
  273. package/dist/providers.cjs +149 -0
  274. package/dist/providers.cjs.map +1 -0
  275. package/dist/providers.d.cts +15 -0
  276. package/dist/providers.d.ts +15 -0
  277. package/dist/providers.js +136 -0
  278. package/dist/providers.js.map +1 -0
  279. package/dist/redaction.cjs +116 -0
  280. package/dist/redaction.cjs.map +1 -0
  281. package/dist/redaction.d.cts +17 -0
  282. package/dist/redaction.d.ts +17 -0
  283. package/dist/redaction.js +98 -0
  284. package/dist/redaction.js.map +1 -0
  285. package/dist/{common/packageVersions.cjs → requestAttributes.cjs} +21 -19
  286. package/dist/requestAttributes.cjs.map +1 -0
  287. package/dist/requestAttributes.d.cts +10 -0
  288. package/dist/requestAttributes.d.ts +10 -0
  289. package/dist/requestAttributes.js +22 -0
  290. package/dist/requestAttributes.js.map +1 -0
  291. package/dist/requestObservation.cjs +246 -0
  292. package/dist/requestObservation.cjs.map +1 -0
  293. package/dist/requestObservation.d.cts +62 -0
  294. package/dist/requestObservation.d.ts +62 -0
  295. package/dist/requestObservation.js +226 -0
  296. package/dist/requestObservation.js.map +1 -0
  297. package/dist/requestObservationNode.cjs +193 -0
  298. package/dist/requestObservationNode.cjs.map +1 -0
  299. package/dist/requestObservationNode.d.cts +31 -0
  300. package/dist/requestObservationNode.d.ts +31 -0
  301. package/dist/requestObservationNode.js +170 -0
  302. package/dist/requestObservationNode.js.map +1 -0
  303. package/dist/requestObservationWeb.cjs +202 -0
  304. package/dist/requestObservationWeb.cjs.map +1 -0
  305. package/dist/requestObservationWeb.d.cts +34 -0
  306. package/dist/requestObservationWeb.d.ts +34 -0
  307. package/dist/requestObservationWeb.js +182 -0
  308. package/dist/requestObservationWeb.js.map +1 -0
  309. package/dist/sentry.cjs +103 -0
  310. package/dist/sentry.cjs.map +1 -0
  311. package/dist/sentry.d.cts +3 -0
  312. package/dist/sentry.d.ts +3 -0
  313. package/dist/sentry.js +79 -0
  314. package/dist/sentry.js.map +1 -0
  315. package/dist/serverErrors.cjs +118 -0
  316. package/dist/serverErrors.cjs.map +1 -0
  317. package/dist/serverErrors.d.cts +8 -0
  318. package/dist/serverErrors.d.ts +8 -0
  319. package/dist/serverErrors.js +91 -0
  320. package/dist/serverErrors.js.map +1 -0
  321. package/dist/spanExporter.cjs +217 -0
  322. package/dist/spanExporter.cjs.map +1 -0
  323. package/dist/spanExporter.d.cts +34 -0
  324. package/dist/spanExporter.d.ts +34 -0
  325. package/dist/spanExporter.js +193 -0
  326. package/dist/spanExporter.js.map +1 -0
  327. package/dist/spanProcessor.cjs +535 -0
  328. package/dist/spanProcessor.cjs.map +1 -0
  329. package/dist/spanProcessor.d.cts +70 -0
  330. package/dist/spanProcessor.d.ts +70 -0
  331. package/dist/spanProcessor.js +513 -0
  332. package/dist/spanProcessor.js.map +1 -0
  333. package/dist/spool.cjs +314 -0
  334. package/dist/spool.cjs.map +1 -0
  335. package/dist/spool.d.cts +49 -0
  336. package/dist/spool.d.ts +49 -0
  337. package/dist/spool.js +297 -0
  338. package/dist/spool.js.map +1 -0
  339. package/dist/startup.cjs +98 -0
  340. package/dist/startup.cjs.map +1 -0
  341. package/dist/startup.d.cts +15 -0
  342. package/dist/startup.d.ts +15 -0
  343. package/dist/startup.js +73 -0
  344. package/dist/startup.js.map +1 -0
  345. package/dist/tracing.cjs +116 -0
  346. package/dist/tracing.cjs.map +1 -0
  347. package/dist/tracing.d.cts +5 -0
  348. package/dist/tracing.d.ts +5 -0
  349. package/dist/tracing.js +96 -0
  350. package/dist/tracing.js.map +1 -0
  351. package/dist/validationErrors.cjs +229 -0
  352. package/dist/validationErrors.cjs.map +1 -0
  353. package/dist/validationErrors.d.cts +21 -0
  354. package/dist/validationErrors.d.ts +21 -0
  355. package/dist/validationErrors.js +195 -0
  356. package/dist/validationErrors.js.map +1 -0
  357. package/package.json +113 -154
  358. package/dist/common/client.cjs +0 -335
  359. package/dist/common/client.cjs.map +0 -1
  360. package/dist/common/client.d.cts +0 -50
  361. package/dist/common/client.d.ts +0 -50
  362. package/dist/common/client.js +0 -302
  363. package/dist/common/client.js.map +0 -1
  364. package/dist/common/consumerRegistry.cjs +0 -86
  365. package/dist/common/consumerRegistry.cjs.map +0 -1
  366. package/dist/common/consumerRegistry.d.cts +0 -20
  367. package/dist/common/consumerRegistry.d.ts +0 -20
  368. package/dist/common/consumerRegistry.js +0 -62
  369. package/dist/common/consumerRegistry.js.map +0 -1
  370. package/dist/common/headers.cjs +0 -55
  371. package/dist/common/headers.cjs.map +0 -1
  372. package/dist/common/headers.d.cts +0 -6
  373. package/dist/common/headers.d.ts +0 -6
  374. package/dist/common/headers.js +0 -31
  375. package/dist/common/headers.js.map +0 -1
  376. package/dist/common/instance.cjs +0 -158
  377. package/dist/common/instance.cjs.map +0 -1
  378. package/dist/common/instance.d.cts +0 -4
  379. package/dist/common/instance.d.ts +0 -4
  380. package/dist/common/instance.js +0 -134
  381. package/dist/common/instance.js.map +0 -1
  382. package/dist/common/logging.cjs.map +0 -1
  383. package/dist/common/logging.d.cts +0 -11
  384. package/dist/common/logging.d.ts +0 -11
  385. package/dist/common/logging.js +0 -17
  386. package/dist/common/logging.js.map +0 -1
  387. package/dist/common/packageVersions.cjs.map +0 -1
  388. package/dist/common/packageVersions.d.cts +0 -3
  389. package/dist/common/packageVersions.d.ts +0 -3
  390. package/dist/common/packageVersions.js +0 -21
  391. package/dist/common/packageVersions.js.map +0 -1
  392. package/dist/common/paramValidation.cjs.map +0 -1
  393. package/dist/common/paramValidation.d.cts +0 -4
  394. package/dist/common/paramValidation.d.ts +0 -4
  395. package/dist/common/paramValidation.js +0 -17
  396. package/dist/common/paramValidation.js.map +0 -1
  397. package/dist/common/requestCounter.cjs +0 -114
  398. package/dist/common/requestCounter.cjs.map +0 -1
  399. package/dist/common/requestCounter.d.cts +0 -24
  400. package/dist/common/requestCounter.d.ts +0 -24
  401. package/dist/common/requestCounter.js +0 -91
  402. package/dist/common/requestCounter.js.map +0 -1
  403. package/dist/common/requestLogger.cjs +0 -543
  404. package/dist/common/requestLogger.cjs.map +0 -1
  405. package/dist/common/requestLogger.d.cts +0 -85
  406. package/dist/common/requestLogger.d.ts +0 -85
  407. package/dist/common/requestLogger.js +0 -508
  408. package/dist/common/requestLogger.js.map +0 -1
  409. package/dist/common/resources.cjs +0 -49
  410. package/dist/common/resources.cjs.map +0 -1
  411. package/dist/common/resources.d.cts +0 -6
  412. package/dist/common/resources.d.ts +0 -6
  413. package/dist/common/resources.js +0 -26
  414. package/dist/common/resources.js.map +0 -1
  415. package/dist/common/response.cjs +0 -104
  416. package/dist/common/response.cjs.map +0 -1
  417. package/dist/common/response.d.cts +0 -15
  418. package/dist/common/response.d.ts +0 -15
  419. package/dist/common/response.js +0 -80
  420. package/dist/common/response.js.map +0 -1
  421. package/dist/common/sentry.cjs +0 -56
  422. package/dist/common/sentry.cjs.map +0 -1
  423. package/dist/common/sentry.d.cts +0 -6
  424. package/dist/common/sentry.d.ts +0 -6
  425. package/dist/common/sentry.js +0 -23
  426. package/dist/common/sentry.js.map +0 -1
  427. package/dist/common/serverErrorCounter.cjs +0 -123
  428. package/dist/common/serverErrorCounter.cjs.map +0 -1
  429. package/dist/common/serverErrorCounter.d.cts +0 -23
  430. package/dist/common/serverErrorCounter.d.ts +0 -23
  431. package/dist/common/serverErrorCounter.js +0 -98
  432. package/dist/common/serverErrorCounter.js.map +0 -1
  433. package/dist/common/spanCollector.cjs +0 -201
  434. package/dist/common/spanCollector.cjs.map +0 -1
  435. package/dist/common/spanCollector.d.cts +0 -45
  436. package/dist/common/spanCollector.d.ts +0 -45
  437. package/dist/common/spanCollector.js +0 -177
  438. package/dist/common/spanCollector.js.map +0 -1
  439. package/dist/common/tempGzipFile.cjs +0 -127
  440. package/dist/common/tempGzipFile.cjs.map +0 -1
  441. package/dist/common/tempGzipFile.d.cts +0 -19
  442. package/dist/common/tempGzipFile.d.ts +0 -19
  443. package/dist/common/tempGzipFile.js +0 -103
  444. package/dist/common/tempGzipFile.js.map +0 -1
  445. package/dist/common/types.cjs +0 -17
  446. package/dist/common/types.cjs.map +0 -1
  447. package/dist/common/types.d.cts +0 -95
  448. package/dist/common/types.d.ts +0 -95
  449. package/dist/common/types.js +0 -1
  450. package/dist/common/types.js.map +0 -1
  451. package/dist/common/validationErrorCounter.cjs +0 -79
  452. package/dist/common/validationErrorCounter.cjs.map +0 -1
  453. package/dist/common/validationErrorCounter.d.cts +0 -20
  454. package/dist/common/validationErrorCounter.d.ts +0 -20
  455. package/dist/common/validationErrorCounter.js +0 -56
  456. package/dist/common/validationErrorCounter.js.map +0 -1
  457. package/dist/elysia/plugin.cjs +0 -242
  458. package/dist/elysia/plugin.cjs.map +0 -1
  459. package/dist/elysia/plugin.d.cts +0 -70
  460. package/dist/elysia/plugin.d.ts +0 -70
  461. package/dist/elysia/plugin.js +0 -219
  462. package/dist/elysia/plugin.js.map +0 -1
  463. package/dist/elysia/utils.cjs +0 -77
  464. package/dist/elysia/utils.cjs.map +0 -1
  465. package/dist/elysia/utils.d.cts +0 -14
  466. package/dist/elysia/utils.d.ts +0 -14
  467. package/dist/elysia/utils.js +0 -54
  468. package/dist/elysia/utils.js.map +0 -1
  469. package/dist/express/utils.cjs +0 -217
  470. package/dist/express/utils.cjs.map +0 -1
  471. package/dist/express/utils.d.cts +0 -37
  472. package/dist/express/utils.d.ts +0 -37
  473. package/dist/express/utils.js +0 -189
  474. package/dist/express/utils.js.map +0 -1
  475. package/dist/fastify/plugin.cjs +0 -319
  476. package/dist/fastify/plugin.cjs.map +0 -1
  477. package/dist/fastify/plugin.d.cts +0 -34
  478. package/dist/fastify/plugin.d.ts +0 -34
  479. package/dist/fastify/plugin.js +0 -284
  480. package/dist/fastify/plugin.js.map +0 -1
  481. package/dist/h3/plugin.cjs +0 -183
  482. package/dist/h3/plugin.cjs.map +0 -1
  483. package/dist/h3/plugin.d.cts +0 -27
  484. package/dist/h3/plugin.d.ts +0 -27
  485. package/dist/h3/plugin.js +0 -159
  486. package/dist/h3/plugin.js.map +0 -1
  487. package/dist/h3/utils.cjs +0 -77
  488. package/dist/h3/utils.cjs.map +0 -1
  489. package/dist/h3/utils.d.cts +0 -14
  490. package/dist/h3/utils.d.ts +0 -14
  491. package/dist/h3/utils.js +0 -54
  492. package/dist/h3/utils.js.map +0 -1
  493. package/dist/hapi/plugin.cjs +0 -212
  494. package/dist/hapi/plugin.cjs.map +0 -1
  495. package/dist/hapi/plugin.d.cts +0 -40
  496. package/dist/hapi/plugin.d.ts +0 -40
  497. package/dist/hapi/plugin.js +0 -188
  498. package/dist/hapi/plugin.js.map +0 -1
  499. package/dist/hapi/utils.cjs +0 -77
  500. package/dist/hapi/utils.cjs.map +0 -1
  501. package/dist/hapi/utils.d.cts +0 -16
  502. package/dist/hapi/utils.d.ts +0 -16
  503. package/dist/hapi/utils.js +0 -53
  504. package/dist/hapi/utils.js.map +0 -1
  505. package/dist/hono/utils.cjs +0 -113
  506. package/dist/hono/utils.cjs.map +0 -1
  507. package/dist/hono/utils.d.cts +0 -16
  508. package/dist/hono/utils.d.ts +0 -16
  509. package/dist/hono/utils.js +0 -88
  510. package/dist/hono/utils.js.map +0 -1
  511. package/dist/loggers/console.cjs +0 -67
  512. package/dist/loggers/console.cjs.map +0 -1
  513. package/dist/loggers/console.d.cts +0 -11
  514. package/dist/loggers/console.d.ts +0 -11
  515. package/dist/loggers/console.js +0 -44
  516. package/dist/loggers/console.js.map +0 -1
  517. package/dist/loggers/hapi.cjs.map +0 -1
  518. package/dist/loggers/hapi.d.cts +0 -12
  519. package/dist/loggers/hapi.d.ts +0 -12
  520. package/dist/loggers/hapi.js +0 -29
  521. package/dist/loggers/hapi.js.map +0 -1
  522. package/dist/loggers/index.cjs.map +0 -1
  523. package/dist/loggers/index.d.cts +0 -13
  524. package/dist/loggers/index.d.ts +0 -13
  525. package/dist/loggers/index.js +0 -13
  526. package/dist/loggers/index.js.map +0 -1
  527. package/dist/loggers/nestjs.cjs +0 -104
  528. package/dist/loggers/nestjs.cjs.map +0 -1
  529. package/dist/loggers/nestjs.d.cts +0 -11
  530. package/dist/loggers/nestjs.d.ts +0 -11
  531. package/dist/loggers/nestjs.js +0 -71
  532. package/dist/loggers/nestjs.js.map +0 -1
  533. package/dist/loggers/pino.cjs +0 -152
  534. package/dist/loggers/pino.cjs.map +0 -1
  535. package/dist/loggers/pino.d.cts +0 -11
  536. package/dist/loggers/pino.d.ts +0 -11
  537. package/dist/loggers/pino.js +0 -119
  538. package/dist/loggers/pino.js.map +0 -1
  539. package/dist/loggers/utils.cjs +0 -64
  540. package/dist/loggers/utils.cjs.map +0 -1
  541. package/dist/loggers/utils.d.cts +0 -6
  542. package/dist/loggers/utils.d.ts +0 -6
  543. package/dist/loggers/utils.js +0 -40
  544. package/dist/loggers/utils.js.map +0 -1
  545. package/dist/loggers/winston.cjs +0 -101
  546. package/dist/loggers/winston.cjs.map +0 -1
  547. package/dist/loggers/winston.d.cts +0 -11
  548. package/dist/loggers/winston.d.ts +0 -11
  549. package/dist/loggers/winston.js +0 -68
  550. package/dist/loggers/winston.js.map +0 -1
  551. package/dist/otel/index.cjs.map +0 -1
  552. package/dist/otel/index.d.cts +0 -2
  553. package/dist/otel/index.d.ts +0 -2
  554. package/dist/otel/index.js +0 -5
  555. package/dist/otel/index.js.map +0 -1
@@ -0,0 +1,383 @@
1
+ import { isMainThread } from "node:worker_threads";
2
+ import { ROOT_CONTEXT } from "@opentelemetry/api";
3
+ import { UndiciInstrumentation } from "@opentelemetry/instrumentation-undici";
4
+ import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs";
5
+ import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
6
+ import {
7
+ getConfig,
8
+ isApitallyDisabledViaEnv,
9
+ setConfig
10
+ } from "./config.js";
11
+ import { ExportWorker } from "./exportWorker.js";
12
+ import {
13
+ installConsoleCapture,
14
+ installNestLoggerCapture,
15
+ installPinoCapture,
16
+ installWinstonCapture
17
+ } from "./logCapture.js";
18
+ import { logDebug, logError, logWarning } from "./logger.js";
19
+ import { ApitallyLogRecordExporter } from "./logRecordExporter.js";
20
+ import { ApitallyLogRecordProcessor } from "./logRecordProcessor.js";
21
+ import { MetricsPipeline } from "./metrics.js";
22
+ import { getDistroVersion } from "./packageVersion.js";
23
+ import {
24
+ createLoggerProvider,
25
+ resolveEnvAndCreateResource,
26
+ setupTracerProvider
27
+ } from "./providers.js";
28
+ import { Redaction } from "./redaction.js";
29
+ import { installSentryEventIdRecording } from "./sentry.js";
30
+ import { drainServerErrors, resetServerErrors, SERVER_ERROR_EVENT_NAME } from "./serverErrors.js";
31
+ import { ApitallySpanExporter } from "./spanExporter.js";
32
+ import {
33
+ isApitallySpanProcessorDeclared,
34
+ SpanPipeline,
35
+ setActiveSpanPipeline,
36
+ setServerSpanActivationCallback
37
+ } from "./spanProcessor.js";
38
+ import { Spool } from "./spool.js";
39
+ import { emitStartupEvent } from "./startup.js";
40
+ import {
41
+ drainValidationErrors,
42
+ resetValidationErrors,
43
+ VALIDATION_ERROR_EVENT_NAME
44
+ } from "./validationErrors.js";
45
+ const BATCH_SCHEDULE_DELAY_MILLIS = 1e3;
46
+ const BATCH_EXPORT_TIMEOUT_MILLIS = 3e4;
47
+ const BATCH_MAX_QUEUE_SIZE = 2048;
48
+ const BATCH_MAX_EXPORT_BATCH_SIZE = 512;
49
+ const BATCH_MAX_EXPORT_BATCH_SIZE_WITH_BODY_CAPTURE = 32;
50
+ const SIGNAL_FLUSH_TIMEOUT_MILLIS = 5e3;
51
+ const ACTIVATION_STATE_KEY = /* @__PURE__ */ Symbol.for("apitally.activation");
52
+ function configure(options = {}) {
53
+ const config = setConfig(options);
54
+ if (!config.disabled && process.env.OTEL_SEMCONV_STABILITY_OPT_IN === void 0) {
55
+ process.env.OTEL_SEMCONV_STABILITY_OPT_IN = "http/dup";
56
+ }
57
+ setServerSpanActivationCallback(activate);
58
+ return config;
59
+ }
60
+ function registerStartupEventInfo(info) {
61
+ const activationState = getActivationState();
62
+ activationState.startupEventInfo ??= info;
63
+ }
64
+ function activate(triggeringSpan) {
65
+ const activationState = getActivationState();
66
+ if (activationState.activationAttempted) {
67
+ return;
68
+ }
69
+ activationState.activationAttempted = true;
70
+ if (shouldSkipActivation()) {
71
+ return;
72
+ }
73
+ try {
74
+ const handles = startPipelines(activationState.startupEventInfo, triggeringSpan);
75
+ activationState.handles = handles;
76
+ activationState.runShutdown = () => drainAndStop(handles);
77
+ installBeforeExitHook(activationState);
78
+ installSignalHooks(activationState);
79
+ } catch (error) {
80
+ logError(`Apitally activation failed: ${String(error)}`);
81
+ }
82
+ }
83
+ function isActivated() {
84
+ return getActivationState().handles !== void 0;
85
+ }
86
+ function getActivationHandles() {
87
+ return getActivationState().handles;
88
+ }
89
+ async function flushTelemetry() {
90
+ try {
91
+ await getActivationState().handles?.worker.runCycle();
92
+ } catch (error) {
93
+ logDebug(`Error flushing telemetry: ${String(error)}`);
94
+ }
95
+ }
96
+ function shutdown() {
97
+ const activationState = getActivationState();
98
+ const handles = activationState.handles;
99
+ const runShutdown = activationState.runShutdown;
100
+ if (!handles || !runShutdown) {
101
+ return Promise.resolve();
102
+ }
103
+ if (!activationState.shutdownPromise) {
104
+ removeLifecycleHooks(activationState);
105
+ const signalDrainPromise = activationState.signalDrainPromise;
106
+ activationState.shutdownPromise = (signalDrainPromise ? signalDrainPromise.then(() => handles.worker.waitForIdle()) : Promise.resolve()).then(runShutdown);
107
+ }
108
+ return activationState.shutdownPromise;
109
+ }
110
+ const activationFactories = {
111
+ createSpool: () => new Spool(),
112
+ createExportWorker: (options) => new ExportWorker(options)
113
+ };
114
+ const defaultFactories = { ...activationFactories };
115
+ async function resetActivation() {
116
+ Object.assign(activationFactories, defaultFactories);
117
+ const holder = globalThis;
118
+ const activationState = holder[ACTIVATION_STATE_KEY];
119
+ delete holder[ACTIVATION_STATE_KEY];
120
+ hasWarnedAboutVersionSkew = false;
121
+ resetValidationErrors();
122
+ resetServerErrors();
123
+ if (!activationState) {
124
+ return;
125
+ }
126
+ removeLifecycleHooks(activationState);
127
+ const handles = activationState.handles;
128
+ if (!handles) {
129
+ return;
130
+ }
131
+ handles.undiciInstrumentation?.disable();
132
+ await handles.worker.stop();
133
+ await handles.spanPipeline.shutdown();
134
+ await handles.loggerProvider.shutdown();
135
+ await handles.spool.clear();
136
+ }
137
+ let hasWarnedAboutVersionSkew = false;
138
+ function emitErrorEvents(loggerProvider) {
139
+ const logger = loggerProvider.getLogger("apitally");
140
+ const events = [
141
+ [VALIDATION_ERROR_EVENT_NAME, drainValidationErrors()],
142
+ [SERVER_ERROR_EVENT_NAME, drainServerErrors()]
143
+ ];
144
+ for (const [eventName, bodies] of events) {
145
+ for (const body of bodies) {
146
+ logger.emit({ timestamp: Date.now(), context: ROOT_CONTEXT, eventName, body });
147
+ }
148
+ }
149
+ }
150
+ function getActivationState() {
151
+ const holder = globalThis;
152
+ const existing = holder[ACTIVATION_STATE_KEY];
153
+ if (existing) {
154
+ if (!hasWarnedAboutVersionSkew && existing.sdkVersion !== getDistroVersion()) {
155
+ hasWarnedAboutVersionSkew = true;
156
+ logWarning(
157
+ `Two copies of the apitally package with different versions (${existing.sdkVersion} and ${getDistroVersion()}) are loaded in this process; version ${existing.sdkVersion} stays active. To resolve this, deduplicate the apitally installation.`
158
+ );
159
+ }
160
+ return existing;
161
+ }
162
+ const activationState = {
163
+ sdkVersion: getDistroVersion(),
164
+ activationAttempted: false
165
+ };
166
+ holder[ACTIVATION_STATE_KEY] = activationState;
167
+ return activationState;
168
+ }
169
+ function shouldSkipActivation() {
170
+ return Boolean(process.env.JEST_WORKER_ID) || Boolean(process.env.VITEST) || process.env.NODE_ENV === "test" || // The emergency kill switch overrides an explicit disabled: false option.
171
+ isApitallyDisabledViaEnv() || getConfig().disabled;
172
+ }
173
+ function startPipelines(startupEventInfo, triggeringSpan) {
174
+ const config = getConfig();
175
+ let hasUserProvider = isApitallySpanProcessorDeclared();
176
+ const { env, resource } = resolveEnvAndCreateResource(hasUserProvider, triggeringSpan?.resource);
177
+ const instanceId = resource.attributes["service.instance.id"];
178
+ const spool = activationFactories.createSpool();
179
+ const spanExporter = new ApitallySpanExporter({
180
+ redaction: new Redaction(),
181
+ env,
182
+ instanceId,
183
+ spool,
184
+ maskRequestBody: config.maskRequestBody,
185
+ maskResponseBody: config.maskResponseBody
186
+ });
187
+ const batchSpanProcessor = new BatchSpanProcessor(spanExporter, {
188
+ scheduledDelayMillis: BATCH_SCHEDULE_DELAY_MILLIS,
189
+ exportTimeoutMillis: BATCH_EXPORT_TIMEOUT_MILLIS,
190
+ maxQueueSize: BATCH_MAX_QUEUE_SIZE,
191
+ maxExportBatchSize: config.captureRequestBody || config.captureResponseBody ? BATCH_MAX_EXPORT_BATCH_SIZE_WITH_BODY_CAPTURE : BATCH_MAX_EXPORT_BATCH_SIZE
192
+ });
193
+ const spanPipeline = new SpanPipeline(batchSpanProcessor);
194
+ let tracerProvider;
195
+ if (!hasUserProvider) {
196
+ tracerProvider = setupTracerProvider(resource, [spanPipeline]);
197
+ if (!tracerProvider) {
198
+ hasUserProvider = true;
199
+ logWarning(
200
+ "Apitally could not register its OpenTelemetry tracer provider because another provider is already registered. Only metrics and the startup event are sent to Apitally until you add ApitallySpanProcessor (exported by the apitally package) to your tracer provider's spanProcessors constructor option or the NodeSDK spanProcessors option."
201
+ );
202
+ }
203
+ }
204
+ setActiveSpanPipeline(spanPipeline);
205
+ const batchLogProcessor = new BatchLogRecordProcessor({
206
+ exporter: new ApitallyLogRecordExporter(spool),
207
+ scheduledDelayMillis: BATCH_SCHEDULE_DELAY_MILLIS,
208
+ exportTimeoutMillis: BATCH_EXPORT_TIMEOUT_MILLIS,
209
+ maxQueueSize: BATCH_MAX_QUEUE_SIZE,
210
+ maxExportBatchSize: BATCH_MAX_EXPORT_BATCH_SIZE
211
+ });
212
+ const logRecordProcessor = new ApitallyLogRecordProcessor(
213
+ batchLogProcessor,
214
+ spanPipeline,
215
+ config.maskLogRecord
216
+ );
217
+ const loggerProvider = createLoggerProvider(resource, [logRecordProcessor]);
218
+ const metricsPipeline = new MetricsPipeline(resource, spool);
219
+ spanPipeline.metricsRecorder = (record) => metricsPipeline.recordFromRequest(record);
220
+ const worker = activationFactories.createExportWorker({
221
+ spool,
222
+ otlpEndpoint: config.otlpEndpoint,
223
+ writeToken: config.writeToken,
224
+ env
225
+ });
226
+ worker.flushCallbacks.push(
227
+ () => metricsPipeline.collectAndExport(),
228
+ () => batchSpanProcessor.forceFlush(),
229
+ () => emitErrorEvents(loggerProvider),
230
+ () => batchLogProcessor.forceFlush()
231
+ );
232
+ if (config.captureLogs) {
233
+ installConsoleCapture(loggerProvider);
234
+ installNestLoggerCapture(loggerProvider);
235
+ installWinstonCapture(loggerProvider);
236
+ installPinoCapture(loggerProvider);
237
+ }
238
+ installSentryEventIdRecording();
239
+ let undiciInstrumentation;
240
+ if (!hasUserProvider) {
241
+ undiciInstrumentation = createUndiciInstrumentation(config.otlpEndpoint);
242
+ }
243
+ worker.start();
244
+ if (startupEventInfo) {
245
+ emitStartupEvent(loggerProvider, startupEventInfo);
246
+ }
247
+ return {
248
+ spanPipeline,
249
+ tracerProvider,
250
+ loggerProvider,
251
+ metricsPipeline,
252
+ spool,
253
+ worker,
254
+ undiciInstrumentation
255
+ };
256
+ }
257
+ function createUndiciInstrumentation(otlpEndpoint) {
258
+ const endpointOrigin = new URL(otlpEndpoint).origin;
259
+ return new UndiciInstrumentation({
260
+ ignoreRequestHook: (request) => {
261
+ try {
262
+ return new URL(String(request.origin)).origin === endpointOrigin;
263
+ } catch {
264
+ return false;
265
+ }
266
+ }
267
+ });
268
+ }
269
+ async function drainAndStop(handles) {
270
+ try {
271
+ await handles.spanPipeline.shutdown();
272
+ await handles.worker.finalDrain();
273
+ await handles.loggerProvider.shutdown();
274
+ await handles.worker.stop();
275
+ } catch (error) {
276
+ logWarning(`Error draining telemetry on shutdown: ${String(error)}`);
277
+ }
278
+ }
279
+ function installSignalHooks(activationState) {
280
+ if (process.platform === "win32" || !isMainThread) {
281
+ return;
282
+ }
283
+ let listeners;
284
+ listeners = {
285
+ SIGTERM: () => handleTerminationSignal(activationState, listeners, "SIGTERM"),
286
+ SIGINT: () => handleTerminationSignal(activationState, listeners, "SIGINT")
287
+ };
288
+ activationState.signalListeners = listeners;
289
+ try {
290
+ process.prependOnceListener("SIGTERM", listeners.SIGTERM);
291
+ process.prependOnceListener("SIGINT", listeners.SIGINT);
292
+ } catch (error) {
293
+ removeSignalHooks(activationState, listeners);
294
+ logWarning(`Unable to install Apitally signal handlers: ${String(error)}`);
295
+ }
296
+ }
297
+ function handleTerminationSignal(activationState, listeners, signal) {
298
+ const hasApplicationListener = process.listeners(signal).some((listener) => listener !== listeners[signal]);
299
+ removeSignalHooks(activationState, listeners);
300
+ const drainPromise = flushAfterTerminationSignal(activationState, signal, hasApplicationListener);
301
+ activationState.signalDrainPromise = drainPromise;
302
+ void drainPromise.catch((error) => {
303
+ logDebug(`Error flushing telemetry on ${signal}: ${String(error)}`);
304
+ });
305
+ }
306
+ async function flushAfterTerminationSignal(activationState, signal, hasApplicationListener) {
307
+ const handles = activationState.handles;
308
+ if (!handles) {
309
+ return;
310
+ }
311
+ try {
312
+ if (activationState.shutdownPromise) {
313
+ await waitForSignalDeadline(activationState.shutdownPromise);
314
+ } else {
315
+ await handles.worker.finalDrain(SIGNAL_FLUSH_TIMEOUT_MILLIS);
316
+ }
317
+ } catch (error) {
318
+ logDebug(`Error flushing telemetry on ${signal}: ${String(error)}`);
319
+ }
320
+ if (hasApplicationListener || process.listeners(signal).length > 0) {
321
+ return;
322
+ }
323
+ const exitCode = signal === "SIGTERM" ? 143 : 130;
324
+ if (process.platform === "linux" && process.pid === 1) {
325
+ process.exit(exitCode);
326
+ }
327
+ try {
328
+ process.kill(process.pid, signal);
329
+ } catch {
330
+ process.exit(exitCode);
331
+ }
332
+ }
333
+ async function waitForSignalDeadline(promise) {
334
+ let deadlineTimer;
335
+ const deadlineReached = new Promise((resolve) => {
336
+ deadlineTimer = setTimeout(resolve, SIGNAL_FLUSH_TIMEOUT_MILLIS);
337
+ });
338
+ try {
339
+ await Promise.race([promise, deadlineReached]);
340
+ } finally {
341
+ if (deadlineTimer) {
342
+ clearTimeout(deadlineTimer);
343
+ }
344
+ }
345
+ }
346
+ function removeSignalHooks(activationState, listeners = activationState.signalListeners) {
347
+ if (!listeners) {
348
+ return;
349
+ }
350
+ process.removeListener("SIGTERM", listeners.SIGTERM);
351
+ process.removeListener("SIGINT", listeners.SIGINT);
352
+ if (activationState.signalListeners === listeners) {
353
+ activationState.signalListeners = void 0;
354
+ }
355
+ }
356
+ function removeLifecycleHooks(activationState) {
357
+ removeSignalHooks(activationState);
358
+ if (activationState.beforeExitListener) {
359
+ process.removeListener("beforeExit", activationState.beforeExitListener);
360
+ activationState.beforeExitListener = void 0;
361
+ }
362
+ }
363
+ function installBeforeExitHook(activationState) {
364
+ const listener = () => {
365
+ void shutdown().catch((error) => {
366
+ logDebug(`Error draining telemetry on shutdown: ${String(error)}`);
367
+ });
368
+ };
369
+ activationState.beforeExitListener = listener;
370
+ process.on("beforeExit", listener);
371
+ }
372
+ export {
373
+ activate,
374
+ activationFactories,
375
+ configure,
376
+ flushTelemetry,
377
+ getActivationHandles,
378
+ isActivated,
379
+ registerStartupEventInfo,
380
+ resetActivation,
381
+ shutdown
382
+ };
383
+ //# sourceMappingURL=activation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/activation.ts"],"sourcesContent":["import { isMainThread } from \"node:worker_threads\";\nimport { ROOT_CONTEXT } from \"@opentelemetry/api\";\nimport type { AnyValueMap } from \"@opentelemetry/api-logs\";\nimport { UndiciInstrumentation } from \"@opentelemetry/instrumentation-undici\";\nimport { BatchLogRecordProcessor, type LoggerProvider } from \"@opentelemetry/sdk-logs\";\nimport { BatchSpanProcessor, type Span } from \"@opentelemetry/sdk-trace-base\";\nimport type { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport {\n type ApitallyConfig,\n type ApitallyOptions,\n getConfig,\n isApitallyDisabledViaEnv,\n setConfig,\n} from \"./config.js\";\nimport { ExportWorker, type ExportWorkerOptions } from \"./exportWorker.js\";\nimport {\n installConsoleCapture,\n installNestLoggerCapture,\n installPinoCapture,\n installWinstonCapture,\n} from \"./logCapture.js\";\nimport { logDebug, logError, logWarning } from \"./logger.js\";\nimport { ApitallyLogRecordExporter } from \"./logRecordExporter.js\";\nimport { ApitallyLogRecordProcessor } from \"./logRecordProcessor.js\";\nimport { MetricsPipeline } from \"./metrics.js\";\nimport { getDistroVersion } from \"./packageVersion.js\";\nimport {\n createLoggerProvider,\n resolveEnvAndCreateResource,\n setupTracerProvider,\n} from \"./providers.js\";\nimport { Redaction } from \"./redaction.js\";\nimport { installSentryEventIdRecording } from \"./sentry.js\";\nimport { drainServerErrors, resetServerErrors, SERVER_ERROR_EVENT_NAME } from \"./serverErrors.js\";\nimport { ApitallySpanExporter } from \"./spanExporter.js\";\nimport {\n isApitallySpanProcessorDeclared,\n SpanPipeline,\n setActiveSpanPipeline,\n setServerSpanActivationCallback,\n} from \"./spanProcessor.js\";\nimport { Spool } from \"./spool.js\";\nimport { emitStartupEvent, type StartupEventInfo } from \"./startup.js\";\nimport {\n drainValidationErrors,\n resetValidationErrors,\n VALIDATION_ERROR_EVENT_NAME,\n} from \"./validationErrors.js\";\n\n// The worker sends every 15 seconds, so batches only need to reach the spool\n// within that interval.\nconst BATCH_SCHEDULE_DELAY_MILLIS = 1_000;\nconst BATCH_EXPORT_TIMEOUT_MILLIS = 30_000;\nconst BATCH_MAX_QUEUE_SIZE = 2_048;\nconst BATCH_MAX_EXPORT_BATCH_SIZE = 512;\nconst BATCH_MAX_EXPORT_BATCH_SIZE_WITH_BODY_CAPTURE = 32;\nconst SIGNAL_FLUSH_TIMEOUT_MILLIS = 5_000;\n\ntype TerminationSignal = \"SIGTERM\" | \"SIGINT\";\ntype SignalListeners = Record<TerminationSignal, () => void>;\n\n// The ESM and CJS builds can load together, so a Symbol.for key gives both\n// copies the same activation state.\nconst ACTIVATION_STATE_KEY = Symbol.for(\"apitally.activation\");\n\ninterface ActivationState {\n sdkVersion: string;\n activationAttempted: boolean;\n startupEventInfo?: StartupEventInfo;\n handles?: ActivationHandles;\n runShutdown?: () => Promise<void>;\n shutdownPromise?: Promise<void>;\n beforeExitListener?: () => void;\n signalListeners?: SignalListeners;\n signalDrainPromise?: Promise<void>;\n}\n\ninterface ActivationHandles {\n spanPipeline: SpanPipeline;\n tracerProvider?: NodeTracerProvider;\n loggerProvider: LoggerProvider;\n metricsPipeline: MetricsPipeline;\n spool: Spool;\n worker: ExportWorker;\n undiciInstrumentation?: UndiciInstrumentation;\n}\n\n// Configuration stays synchronous; activate() defers timers and I/O.\nexport function configure(options: ApitallyOptions = {}): ApitallyConfig {\n const config = setConfig(options);\n // User instrumentations read this at initialization. `http/dup` adds stable\n // HTTP attributes alongside legacy ones; a user-set value takes precedence.\n if (!config.disabled && process.env.OTEL_SEMCONV_STABILITY_OPT_IN === undefined) {\n process.env.OTEL_SEMCONV_STABILITY_OPT_IN = \"http/dup\";\n }\n setServerSpanActivationCallback(activate);\n return config;\n}\n\n// The first integration registration wins so one process emits one startup event.\nexport function registerStartupEventInfo(info: StartupEventInfo): void {\n const activationState = getActivationState();\n activationState.startupEventInfo ??= info;\n}\n\n// Activation is synchronous and attempted once, so concurrent first requests\n// observe either no activation or completed activation.\nexport function activate(triggeringSpan?: Span): void {\n const activationState = getActivationState();\n if (activationState.activationAttempted) {\n return;\n }\n activationState.activationAttempted = true;\n if (shouldSkipActivation()) {\n return;\n }\n try {\n const handles = startPipelines(activationState.startupEventInfo, triggeringSpan);\n activationState.handles = handles;\n activationState.runShutdown = () => drainAndStop(handles);\n installBeforeExitHook(activationState);\n installSignalHooks(activationState);\n } catch (error) {\n logError(`Apitally activation failed: ${String(error)}`);\n }\n}\n\nexport function isActivated(): boolean {\n return getActivationState().handles !== undefined;\n}\n\nexport function getActivationHandles(): ActivationHandles | undefined {\n return getActivationState().handles;\n}\n\nexport async function flushTelemetry(): Promise<void> {\n try {\n await getActivationState().handles?.worker.runCycle();\n } catch (error) {\n logDebug(`Error flushing telemetry: ${String(error)}`);\n }\n}\n\n// Concurrent calls and lifecycle hooks share one final drain; calls before\n// activation are no-ops.\nexport function shutdown(): Promise<void> {\n const activationState = getActivationState();\n const handles = activationState.handles;\n const runShutdown = activationState.runShutdown;\n if (!handles || !runShutdown) {\n return Promise.resolve();\n }\n if (!activationState.shutdownPromise) {\n removeLifecycleHooks(activationState);\n const signalDrainPromise = activationState.signalDrainPromise;\n activationState.shutdownPromise = (\n signalDrainPromise\n ? signalDrainPromise.then(() => handles.worker.waitForIdle())\n : Promise.resolve()\n ).then(runShutdown);\n }\n return activationState.shutdownPromise;\n}\n\n// Tests replace these factories to isolate spool files and worker timing.\nexport const activationFactories = {\n createSpool: (): Spool => new Spool(),\n createExportWorker: (options: ExportWorkerOptions): ExportWorker => new ExportWorker(options),\n};\nconst defaultFactories = { ...activationFactories };\n\n// Tests reset process-global activation and its side effects between cases.\nexport async function resetActivation(): Promise<void> {\n Object.assign(activationFactories, defaultFactories);\n const holder = globalThis as Record<symbol, ActivationState | undefined>;\n const activationState = holder[ACTIVATION_STATE_KEY];\n delete holder[ACTIVATION_STATE_KEY];\n hasWarnedAboutVersionSkew = false;\n resetValidationErrors();\n resetServerErrors();\n if (!activationState) {\n return;\n }\n removeLifecycleHooks(activationState);\n const handles = activationState.handles;\n if (!handles) {\n return;\n }\n handles.undiciInstrumentation?.disable();\n await handles.worker.stop();\n await handles.spanPipeline.shutdown();\n await handles.loggerProvider.shutdown();\n await handles.spool.clear();\n}\n\nlet hasWarnedAboutVersionSkew = false;\n\n// One root-context record per aggregate group, drained right before the log\n// processor flush so the records leave with the same export cycle.\nfunction emitErrorEvents(loggerProvider: LoggerProvider): void {\n const logger = loggerProvider.getLogger(\"apitally\");\n const events: [string, AnyValueMap[]][] = [\n [VALIDATION_ERROR_EVENT_NAME, drainValidationErrors()],\n [SERVER_ERROR_EVENT_NAME, drainServerErrors()],\n ];\n for (const [eventName, bodies] of events) {\n for (const body of bodies) {\n logger.emit({ timestamp: Date.now(), context: ROOT_CONTEXT, eventName, body });\n }\n }\n}\n\nfunction getActivationState(): ActivationState {\n const holder = globalThis as Record<symbol, ActivationState | undefined>;\n const existing = holder[ACTIVATION_STATE_KEY];\n if (existing) {\n if (!hasWarnedAboutVersionSkew && existing.sdkVersion !== getDistroVersion()) {\n hasWarnedAboutVersionSkew = true;\n logWarning(\n `Two copies of the apitally package with different versions (${existing.sdkVersion} and ${getDistroVersion()}) are loaded in this process; version ${existing.sdkVersion} stays active. To resolve this, deduplicate the apitally installation.`,\n );\n }\n return existing;\n }\n const activationState: ActivationState = {\n sdkVersion: getDistroVersion(),\n activationAttempted: false,\n };\n holder[ACTIVATION_STATE_KEY] = activationState;\n return activationState;\n}\n\nfunction shouldSkipActivation(): boolean {\n return (\n Boolean(process.env.JEST_WORKER_ID) ||\n Boolean(process.env.VITEST) ||\n process.env.NODE_ENV === \"test\" ||\n // The emergency kill switch overrides an explicit disabled: false option.\n isApitallyDisabledViaEnv() ||\n getConfig().disabled\n );\n}\n\nfunction startPipelines(\n startupEventInfo: StartupEventInfo | undefined,\n triggeringSpan?: Span,\n): ActivationHandles {\n const config = getConfig();\n let hasUserProvider = isApitallySpanProcessorDeclared();\n const { env, resource } = resolveEnvAndCreateResource(hasUserProvider, triggeringSpan?.resource);\n const instanceId = resource.attributes[\"service.instance.id\"] as string;\n const spool = activationFactories.createSpool();\n const spanExporter = new ApitallySpanExporter({\n redaction: new Redaction(),\n env,\n instanceId,\n spool,\n maskRequestBody: config.maskRequestBody,\n maskResponseBody: config.maskResponseBody,\n });\n // Concrete options prevent OTel environment variables from changing batch\n // behavior. Each processor gets a fresh object because its config is mutated.\n const batchSpanProcessor = new BatchSpanProcessor(spanExporter, {\n scheduledDelayMillis: BATCH_SCHEDULE_DELAY_MILLIS,\n exportTimeoutMillis: BATCH_EXPORT_TIMEOUT_MILLIS,\n maxQueueSize: BATCH_MAX_QUEUE_SIZE,\n maxExportBatchSize:\n config.captureRequestBody || config.captureResponseBody\n ? BATCH_MAX_EXPORT_BATCH_SIZE_WITH_BODY_CAPTURE\n : BATCH_MAX_EXPORT_BATCH_SIZE,\n });\n const spanPipeline = new SpanPipeline(batchSpanProcessor);\n let tracerProvider: NodeTracerProvider | undefined;\n if (!hasUserProvider) {\n tracerProvider = setupTracerProvider(resource, [spanPipeline]);\n if (!tracerProvider) {\n hasUserProvider = true;\n logWarning(\n \"Apitally could not register its OpenTelemetry tracer provider because another provider is already registered. Only metrics and the startup event are sent to Apitally until you add ApitallySpanProcessor (exported by the apitally package) to your tracer provider's spanProcessors constructor option or the NodeSDK spanProcessors option.\",\n );\n }\n }\n setActiveSpanPipeline(spanPipeline);\n // BatchLogRecordProcessor requires its single-options-object form; positional\n // arguments create a broken processor.\n const batchLogProcessor = new BatchLogRecordProcessor({\n exporter: new ApitallyLogRecordExporter(spool),\n scheduledDelayMillis: BATCH_SCHEDULE_DELAY_MILLIS,\n exportTimeoutMillis: BATCH_EXPORT_TIMEOUT_MILLIS,\n maxQueueSize: BATCH_MAX_QUEUE_SIZE,\n maxExportBatchSize: BATCH_MAX_EXPORT_BATCH_SIZE,\n });\n const logRecordProcessor = new ApitallyLogRecordProcessor(\n batchLogProcessor,\n spanPipeline,\n config.maskLogRecord,\n );\n const loggerProvider = createLoggerProvider(resource, [logRecordProcessor]);\n const metricsPipeline = new MetricsPipeline(resource, spool);\n spanPipeline.metricsRecorder = (record) => metricsPipeline.recordFromRequest(record);\n const worker = activationFactories.createExportWorker({\n spool,\n otlpEndpoint: config.otlpEndpoint,\n writeToken: config.writeToken,\n env,\n });\n worker.flushCallbacks.push(\n () => metricsPipeline.collectAndExport(),\n () => batchSpanProcessor.forceFlush(),\n () => emitErrorEvents(loggerProvider),\n () => batchLogProcessor.forceFlush(),\n );\n if (config.captureLogs) {\n installConsoleCapture(loggerProvider);\n installNestLoggerCapture(loggerProvider);\n installWinstonCapture(loggerProvider);\n installPinoCapture(loggerProvider);\n }\n installSentryEventIdRecording();\n let undiciInstrumentation: UndiciInstrumentation | undefined;\n if (!hasUserProvider) {\n undiciInstrumentation = createUndiciInstrumentation(config.otlpEndpoint);\n }\n worker.start();\n if (startupEventInfo) {\n emitStartupEvent(loggerProvider, startupEventInfo);\n }\n return {\n spanPipeline,\n tracerProvider,\n loggerProvider,\n metricsPipeline,\n spool,\n worker,\n undiciInstrumentation,\n };\n}\n\n// ignoreRequestHook prevents telemetry for export POSTs. The request origin can\n// be a string or URL at runtime despite its string type.\nfunction createUndiciInstrumentation(otlpEndpoint: string): UndiciInstrumentation {\n const endpointOrigin = new URL(otlpEndpoint).origin;\n return new UndiciInstrumentation({\n ignoreRequestHook: (request) => {\n try {\n return new URL(String(request.origin)).origin === endpointOrigin;\n } catch {\n return false;\n }\n },\n });\n}\n\nasync function drainAndStop(handles: ActivationHandles): Promise<void> {\n try {\n await handles.spanPipeline.shutdown();\n await handles.worker.finalDrain();\n await handles.loggerProvider.shutdown();\n await handles.worker.stop();\n } catch (error) {\n logWarning(`Error draining telemetry on shutdown: ${String(error)}`);\n }\n}\n\nfunction installSignalHooks(activationState: ActivationState): void {\n if (process.platform === \"win32\" || !isMainThread) {\n return;\n }\n let listeners: SignalListeners;\n listeners = {\n SIGTERM: () => handleTerminationSignal(activationState, listeners, \"SIGTERM\"),\n SIGINT: () => handleTerminationSignal(activationState, listeners, \"SIGINT\"),\n };\n activationState.signalListeners = listeners;\n try {\n process.prependOnceListener(\"SIGTERM\", listeners.SIGTERM);\n process.prependOnceListener(\"SIGINT\", listeners.SIGINT);\n } catch (error) {\n removeSignalHooks(activationState, listeners);\n logWarning(`Unable to install Apitally signal handlers: ${String(error)}`);\n }\n}\n\nfunction handleTerminationSignal(\n activationState: ActivationState,\n listeners: SignalListeners,\n signal: TerminationSignal,\n): void {\n const hasApplicationListener = process\n .listeners(signal)\n .some((listener) => listener !== listeners[signal]);\n removeSignalHooks(activationState, listeners);\n const drainPromise = flushAfterTerminationSignal(activationState, signal, hasApplicationListener);\n activationState.signalDrainPromise = drainPromise;\n void drainPromise.catch((error: unknown) => {\n logDebug(`Error flushing telemetry on ${signal}: ${String(error)}`);\n });\n}\n\nasync function flushAfterTerminationSignal(\n activationState: ActivationState,\n signal: TerminationSignal,\n hasApplicationListener: boolean,\n): Promise<void> {\n const handles = activationState.handles;\n if (!handles) {\n return;\n }\n try {\n if (activationState.shutdownPromise) {\n await waitForSignalDeadline(activationState.shutdownPromise);\n } else {\n await handles.worker.finalDrain(SIGNAL_FLUSH_TIMEOUT_MILLIS);\n }\n } catch (error) {\n logDebug(`Error flushing telemetry on ${signal}: ${String(error)}`);\n }\n if (hasApplicationListener || process.listeners(signal).length > 0) {\n return;\n }\n const exitCode = signal === \"SIGTERM\" ? 143 : 130;\n if (process.platform === \"linux\" && process.pid === 1) {\n process.exit(exitCode);\n }\n try {\n process.kill(process.pid, signal);\n } catch {\n process.exit(exitCode);\n }\n}\n\nasync function waitForSignalDeadline(promise: Promise<void>): Promise<void> {\n let deadlineTimer: NodeJS.Timeout | undefined;\n const deadlineReached = new Promise<void>((resolve) => {\n deadlineTimer = setTimeout(resolve, SIGNAL_FLUSH_TIMEOUT_MILLIS);\n });\n try {\n await Promise.race([promise, deadlineReached]);\n } finally {\n if (deadlineTimer) {\n clearTimeout(deadlineTimer);\n }\n }\n}\n\nfunction removeSignalHooks(\n activationState: ActivationState,\n listeners = activationState.signalListeners,\n): void {\n if (!listeners) {\n return;\n }\n process.removeListener(\"SIGTERM\", listeners.SIGTERM);\n process.removeListener(\"SIGINT\", listeners.SIGINT);\n if (activationState.signalListeners === listeners) {\n activationState.signalListeners = undefined;\n }\n}\n\nfunction removeLifecycleHooks(activationState: ActivationState): void {\n removeSignalHooks(activationState);\n if (activationState.beforeExitListener) {\n process.removeListener(\"beforeExit\", activationState.beforeExitListener);\n activationState.beforeExitListener = undefined;\n }\n}\n\nfunction installBeforeExitHook(activationState: ActivationState): void {\n const listener = () => {\n // The drain keeps the event loop alive until shutdown settles.\n void shutdown().catch((error: unknown) => {\n logDebug(`Error draining telemetry on shutdown: ${String(error)}`);\n });\n };\n activationState.beforeExitListener = listener;\n process.on(\"beforeExit\", listener);\n}\n"],"mappings":"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","names":[]}
@@ -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 });
@@ -22,56 +21,113 @@ __export(configure_exports, {
22
21
  configure: () => configure
23
22
  });
24
23
  module.exports = __toCommonJS(configure_exports);
25
- const import_meta = {};
24
+ var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
25
+ var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
26
26
  var import_node_url = require("node:url");
27
- var import_paramValidation = require('../common/paramValidation.cjs');
28
- const STUBS_ROOT = (0, import_node_url.fileURLToPath)(new URL("./stubs/", import_meta.url));
27
+ var import_config = require('../config.cjs');
28
+ const STUBS_ROOT = (0, import_node_url.fileURLToPath)(new URL("./stubs/", importMetaUrl));
29
+ const ENV_FORMAT = /^[a-z0-9-]{1,32}$/;
29
30
  async function configure(command) {
30
- const clientId = await command.prompt.ask("Apitally client ID", {
31
- result(value) {
32
- return value.trim().toLowerCase();
33
- },
34
- validate(value) {
35
- return (0, import_paramValidation.isValidClientId)(value);
36
- }
31
+ const writeToken = await command.prompt.ask("Apitally write token", {
32
+ result: (value) => value.trim(),
33
+ validate: (value) => (0, import_config.isValidWriteToken)(value.trim())
37
34
  });
38
- const env = await command.prompt.ask("Environment name", {
39
- default: "dev",
40
- result(value) {
41
- return value.trim().toLowerCase().replaceAll("_", "-").replaceAll(" ", "-");
42
- },
43
- validate(value) {
44
- return (0, import_paramValidation.isValidEnv)(value);
45
- }
35
+ const env = await command.prompt.ask("Environment", {
36
+ default: import_config.DEFAULT_ENV,
37
+ result: normalizeEnv,
38
+ validate: (value) => ENV_FORMAT.test(normalizeEnv(value))
39
+ });
40
+ const captureRequestHeaders = await command.prompt.confirm("Capture request headers?", {
41
+ default: false
42
+ });
43
+ const captureRequestBody = await command.prompt.confirm("Capture request bodies?", {
44
+ default: false
46
45
  });
47
- const enableRequestLogging = await command.prompt.confirm("Enable request logging?", {
46
+ const captureResponseBody = await command.prompt.confirm("Capture response bodies?", {
48
47
  default: false
49
48
  });
50
49
  const codemods = await command.createCodemods();
51
50
  await codemods.makeUsingStub(STUBS_ROOT, "config/apitally.stub", {
52
- enableRequestLogging
51
+ captureRequestHeaders,
52
+ captureRequestBody,
53
+ captureResponseBody
53
54
  });
54
- await codemods.registerMiddleware("router", [
55
- {
56
- path: "apitally/adonisjs/middleware"
57
- }
58
- ]);
59
55
  await codemods.updateRcFile((rcFile) => {
60
56
  rcFile.addProvider("apitally/adonisjs/provider");
61
57
  });
58
+ await codemods.registerMiddleware("server", [{ path: "apitally/adonisjs/middleware" }]);
62
59
  await codemods.defineEnvVariables({
63
- APITALLY_CLIENT_ID: clientId,
60
+ APITALLY_WRITE_TOKEN: writeToken,
64
61
  APITALLY_ENV: env
65
62
  });
66
63
  await codemods.defineEnvValidations({
67
- leadingComment: "Variables for configuring the apitally package",
68
64
  variables: {
69
- APITALLY_CLIENT_ID: "Env.schema.string()",
65
+ APITALLY_WRITE_TOKEN: "Env.schema.string.optional()",
70
66
  APITALLY_ENV: "Env.schema.string.optional()"
71
67
  }
72
68
  });
69
+ await updateExceptionHandler(codemods, command);
70
+ }
71
+ function normalizeEnv(value) {
72
+ return value.trim().toLowerCase().replace(/[ _]/g, "-");
73
+ }
74
+ async function updateExceptionHandler(codemods, command) {
75
+ const project = await codemods.getTsMorphProject();
76
+ const handlerPath = command.app.makePath("app/exceptions/handler.ts");
77
+ const sourceFile = project?.getSourceFile(handlerPath) ?? project?.addSourceFileAtPathIfExists(handlerPath);
78
+ const handlerClass = sourceFile?.getClasses().find((candidate) => candidate.isDefaultExport());
79
+ const method = handlerClass?.getMethod("handle");
80
+ if (method) {
81
+ const alreadyConfigured = method.getDescendants().some((node) => {
82
+ if (node.getKindName() !== "CallExpression") {
83
+ return false;
84
+ }
85
+ const call = node;
86
+ return call.getExpression().getText() === "captureException" && call.getArguments().length === 2;
87
+ });
88
+ if (alreadyConfigured) {
89
+ return;
90
+ }
91
+ const parameters = method.getParameters();
92
+ const statements = method.getStatements();
93
+ const statement = statements[0];
94
+ if (method.isAsync() && parameters.length >= 2 && statements.length === 1 && statement?.getKindName() === "ReturnStatement") {
95
+ const returnExpression = statement.getExpression();
96
+ const errorName = parameters[0].getName();
97
+ const contextName = parameters[1].getName();
98
+ if (returnExpression?.getKindName() === "CallExpression" && returnExpression.getExpression().getText() === "super.handle" && returnExpression.getArguments().map((argument) => argument.getText()).join(",") === `${errorName},${contextName}`) {
99
+ const importDeclaration = sourceFile?.getImportDeclaration(
100
+ (candidate) => candidate.getModuleSpecifierValue() === "apitally/adonisjs"
101
+ );
102
+ if (importDeclaration) {
103
+ if (!importDeclaration.getNamedImports().some(
104
+ (namedImport) => namedImport.getName() === "captureException"
105
+ )) {
106
+ importDeclaration.addNamedImport("captureException");
107
+ }
108
+ } else {
109
+ sourceFile?.addImportDeclaration({
110
+ moduleSpecifier: "apitally/adonisjs",
111
+ namedImports: ["captureException"]
112
+ });
113
+ }
114
+ method.setBodyText(
115
+ `const result = await super.handle(${errorName}, ${contextName})
116
+ captureException(${errorName}, ${contextName})
117
+ return result`
118
+ );
119
+ await sourceFile?.save();
120
+ return;
121
+ }
122
+ }
123
+ }
124
+ command.logger.warning(
125
+ 'Could not update "app/exceptions/handler.ts" automatically. Add the following import and method:'
126
+ );
127
+ command.logger.info(
128
+ 'import { captureException } from "apitally/adonisjs"\n\nasync handle(error: unknown, ctx: HttpContext) {\n const result = await super.handle(error, ctx)\n captureException(error, ctx)\n return result\n}'
129
+ );
73
130
  }
74
- __name(configure, "configure");
75
131
  // Annotate the CommonJS export names for ESM import in node:
76
132
  0 && (module.exports = {
77
133
  configure
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adonisjs/configure.ts"],"sourcesContent":["/**\n * Allows users to add Apitally to their AdonisJS application using the built-in Ace command.\n */\n\nimport type Configure from \"@adonisjs/core/commands/configure\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { isValidClientId, isValidEnv } from \"../common/paramValidation.js\";\n\nconst STUBS_ROOT = fileURLToPath(new URL(\"./stubs/\", import.meta.url));\n\nexport async function configure(command: Configure) {\n const clientId = await command.prompt.ask(\"Apitally client ID\", {\n result(value) {\n return value.trim().toLowerCase();\n },\n validate(value) {\n return isValidClientId(value);\n },\n });\n const env = await command.prompt.ask(\"Environment name\", {\n default: \"dev\",\n result(value) {\n return value\n .trim()\n .toLowerCase()\n .replaceAll(\"_\", \"-\")\n .replaceAll(\" \", \"-\");\n },\n validate(value) {\n return isValidEnv(value);\n },\n });\n const enableRequestLogging = await command.prompt.confirm(\n \"Enable request logging?\",\n {\n default: false,\n },\n );\n\n const codemods = await command.createCodemods();\n\n await codemods.makeUsingStub(STUBS_ROOT, \"config/apitally.stub\", {\n enableRequestLogging,\n });\n\n await codemods.registerMiddleware(\"router\", [\n {\n path: \"apitally/adonisjs/middleware\",\n },\n ]);\n\n await codemods.updateRcFile((rcFile: any) => {\n rcFile.addProvider(\"apitally/adonisjs/provider\");\n });\n\n await codemods.defineEnvVariables({\n APITALLY_CLIENT_ID: clientId,\n APITALLY_ENV: env,\n });\n\n await codemods.defineEnvValidations({\n leadingComment: \"Variables for configuring the apitally package\",\n variables: {\n APITALLY_CLIENT_ID: \"Env.schema.string()\",\n APITALLY_ENV: \"Env.schema.string.optional()\",\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAKA,sBAA8B;AAE9B,6BAA4C;AAE5C,MAAMA,iBAAaC,+BAAc,IAAIC,IAAI,YAAY,YAAYC,GAAG,CAAA;AAEpE,eAAsBC,UAAUC,SAAkB;AAChD,QAAMC,WAAW,MAAMD,QAAQE,OAAOC,IAAI,sBAAsB;IAC9DC,OAAOC,OAAK;AACV,aAAOA,MAAMC,KAAI,EAAGC,YAAW;IACjC;IACAC,SAASH,OAAK;AACZ,iBAAOI,wCAAgBJ,KAAAA;IACzB;EACF,CAAA;AACA,QAAMK,MAAM,MAAMV,QAAQE,OAAOC,IAAI,oBAAoB;IACvDQ,SAAS;IACTP,OAAOC,OAAK;AACV,aAAOA,MACJC,KAAI,EACJC,YAAW,EACXK,WAAW,KAAK,GAAA,EAChBA,WAAW,KAAK,GAAA;IACrB;IACAJ,SAASH,OAAK;AACZ,iBAAOQ,mCAAWR,KAAAA;IACpB;EACF,CAAA;AACA,QAAMS,uBAAuB,MAAMd,QAAQE,OAAOa,QAChD,2BACA;IACEJ,SAAS;EACX,CAAA;AAGF,QAAMK,WAAW,MAAMhB,QAAQiB,eAAc;AAE7C,QAAMD,SAASE,cAAcvB,YAAY,wBAAwB;IAC/DmB;EACF,CAAA;AAEA,QAAME,SAASG,mBAAmB,UAAU;IAC1C;MACEC,MAAM;IACR;GACD;AAED,QAAMJ,SAASK,aAAa,CAACC,WAAAA;AAC3BA,WAAOC,YAAY,4BAAA;EACrB,CAAA;AAEA,QAAMP,SAASQ,mBAAmB;IAChCC,oBAAoBxB;IACpByB,cAAchB;EAChB,CAAA;AAEA,QAAMM,SAASW,qBAAqB;IAClCC,gBAAgB;IAChBC,WAAW;MACTJ,oBAAoB;MACpBC,cAAc;IAChB;EACF,CAAA;AACF;AAzDsB3B;","names":["STUBS_ROOT","fileURLToPath","URL","url","configure","command","clientId","prompt","ask","result","value","trim","toLowerCase","validate","isValidClientId","env","default","replaceAll","isValidEnv","enableRequestLogging","confirm","codemods","createCodemods","makeUsingStub","registerMiddleware","path","updateRcFile","rcFile","addProvider","defineEnvVariables","APITALLY_CLIENT_ID","APITALLY_ENV","defineEnvValidations","leadingComment","variables"]}
1
+ {"version":3,"sources":["../../src/adonisjs/configure.ts","../../node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["import { fileURLToPath } from \"node:url\";\n\nimport type Configure from \"@adonisjs/core/commands/configure\";\n\nimport { DEFAULT_ENV, isValidWriteToken } from \"../config.js\";\n\nconst STUBS_ROOT = fileURLToPath(new URL(\"./stubs/\", import.meta.url));\nconst ENV_FORMAT = /^[a-z0-9-]{1,32}$/;\n\nexport async function configure(command: Configure): Promise<void> {\n const writeToken = await command.prompt.ask(\"Apitally write token\", {\n result: (value) => value.trim(),\n validate: (value) => isValidWriteToken(value.trim()),\n });\n const env = await command.prompt.ask(\"Environment\", {\n default: DEFAULT_ENV,\n result: normalizeEnv,\n validate: (value) => ENV_FORMAT.test(normalizeEnv(value)),\n });\n const captureRequestHeaders = await command.prompt.confirm(\"Capture request headers?\", {\n default: false,\n });\n const captureRequestBody = await command.prompt.confirm(\"Capture request bodies?\", {\n default: false,\n });\n const captureResponseBody = await command.prompt.confirm(\"Capture response bodies?\", {\n default: false,\n });\n\n const codemods = await command.createCodemods();\n await codemods.makeUsingStub(STUBS_ROOT, \"config/apitally.stub\", {\n captureRequestHeaders,\n captureRequestBody,\n captureResponseBody,\n });\n await codemods.updateRcFile((rcFile) => {\n rcFile.addProvider(\"apitally/adonisjs/provider\");\n });\n await codemods.registerMiddleware(\"server\", [{ path: \"apitally/adonisjs/middleware\" }]);\n await codemods.defineEnvVariables({\n APITALLY_WRITE_TOKEN: writeToken,\n APITALLY_ENV: env,\n });\n await codemods.defineEnvValidations({\n variables: {\n APITALLY_WRITE_TOKEN: \"Env.schema.string.optional()\",\n APITALLY_ENV: \"Env.schema.string.optional()\",\n },\n });\n await updateExceptionHandler(codemods, command);\n}\n\nfunction normalizeEnv(value: string): string {\n return value.trim().toLowerCase().replace(/[ _]/g, \"-\");\n}\n\nasync function updateExceptionHandler(\n codemods: Awaited<ReturnType<Configure[\"createCodemods\"]>>,\n command: Configure,\n): Promise<void> {\n const project = await codemods.getTsMorphProject();\n const handlerPath = command.app.makePath(\"app/exceptions/handler.ts\");\n const sourceFile =\n project?.getSourceFile(handlerPath) ?? project?.addSourceFileAtPathIfExists(handlerPath);\n const handlerClass = sourceFile\n ?.getClasses()\n .find((candidate: { isDefaultExport: () => boolean }) => candidate.isDefaultExport());\n const method = handlerClass?.getMethod(\"handle\");\n if (method) {\n const alreadyConfigured = method\n .getDescendants()\n .some((node: { getKindName: () => string }) => {\n if (node.getKindName() !== \"CallExpression\") {\n return false;\n }\n const call = node as typeof node & {\n getArguments: () => unknown[];\n getExpression: () => { getText: () => string };\n };\n return (\n call.getExpression().getText() === \"captureException\" && call.getArguments().length === 2\n );\n });\n if (alreadyConfigured) {\n return;\n }\n\n const parameters = method.getParameters();\n const statements = method.getStatements();\n const statement = statements[0];\n if (\n method.isAsync() &&\n parameters.length >= 2 &&\n statements.length === 1 &&\n statement?.getKindName() === \"ReturnStatement\"\n ) {\n const returnExpression = (\n statement as typeof statement & {\n getExpression: () =>\n | {\n getArguments: () => Array<{ getText: () => string }>;\n getExpression: () => { getText: () => string };\n getKindName: () => string;\n }\n | undefined;\n }\n ).getExpression();\n const errorName = parameters[0].getName();\n const contextName = parameters[1].getName();\n if (\n returnExpression?.getKindName() === \"CallExpression\" &&\n returnExpression.getExpression().getText() === \"super.handle\" &&\n returnExpression\n .getArguments()\n .map((argument: { getText: () => string }) => argument.getText())\n .join(\",\") === `${errorName},${contextName}`\n ) {\n const importDeclaration = sourceFile?.getImportDeclaration(\n (candidate: { getModuleSpecifierValue: () => string }) =>\n candidate.getModuleSpecifierValue() === \"apitally/adonisjs\",\n );\n if (importDeclaration) {\n if (\n !importDeclaration\n .getNamedImports()\n .some(\n (namedImport: { getName: () => string }) =>\n namedImport.getName() === \"captureException\",\n )\n ) {\n importDeclaration.addNamedImport(\"captureException\");\n }\n } else {\n sourceFile?.addImportDeclaration({\n moduleSpecifier: \"apitally/adonisjs\",\n namedImports: [\"captureException\"],\n });\n }\n method.setBodyText(\n `const result = await super.handle(${errorName}, ${contextName})\\n` +\n `captureException(${errorName}, ${contextName})\\n` +\n `return result`,\n );\n await sourceFile?.save();\n return;\n }\n }\n }\n\n command.logger.warning(\n 'Could not update \"app/exceptions/handler.ts\" automatically. Add the following import and method:',\n );\n command.logger.info(\n 'import { captureException } from \"apitally/adonisjs\"\\n\\n' +\n \"async handle(error: unknown, ctx: HttpContext) {\\n\" +\n \" const result = await super.handle(error, ctx)\\n\" +\n \" captureException(error, ctx)\\n\" +\n \" return result\\n\" +\n \"}\",\n );\n}\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":"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","names":[]}
@@ -1,9 +1,5 @@
1
1
  import Configure from '@adonisjs/core/commands/configure';
2
2
 
3
- /**
4
- * Allows users to add Apitally to their AdonisJS application using the built-in Ace command.
5
- */
6
-
7
3
  declare function configure(command: Configure): Promise<void>;
8
4
 
9
5
  export { configure };
@@ -1,9 +1,5 @@
1
1
  import Configure from '@adonisjs/core/commands/configure';
2
2
 
3
- /**
4
- * Allows users to add Apitally to their AdonisJS application using the built-in Ace command.
5
- */
6
-
7
3
  declare function configure(command: Configure): Promise<void>;
8
4
 
9
5
  export { configure };