autotel 4.3.0 → 5.0.0

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 (381) hide show
  1. package/README.md +125 -103
  2. package/dist/analysis.cjs +87 -0
  3. package/dist/analysis.cjs.map +1 -0
  4. package/dist/analysis.d.cts +87 -0
  5. package/dist/analysis.d.cts.map +1 -0
  6. package/dist/analysis.d.ts +87 -0
  7. package/dist/analysis.d.ts.map +1 -0
  8. package/dist/analysis.js +85 -0
  9. package/dist/analysis.js.map +1 -0
  10. package/dist/{attribute-redacting-processor-DtTS9xxh.d.ts → attribute-redacting-processor-Pk7lAzWd.d.cts} +13 -8
  11. package/dist/attribute-redacting-processor-Pk7lAzWd.d.cts.map +1 -0
  12. package/dist/{attribute-redacting-processor-DtTS9xxh.d.cts → attribute-redacting-processor-Pk7lAzWd.d.ts} +13 -8
  13. package/dist/attribute-redacting-processor-Pk7lAzWd.d.ts.map +1 -0
  14. package/dist/attribute-redacting-processor.cjs +4 -4
  15. package/dist/attribute-redacting-processor.cjs.map +1 -1
  16. package/dist/attribute-redacting-processor.d.cts +1 -1
  17. package/dist/attribute-redacting-processor.d.ts +1 -1
  18. package/dist/attribute-redacting-processor.js +4 -4
  19. package/dist/attribute-redacting-processor.js.map +1 -1
  20. package/dist/attributes.d.cts +1 -1
  21. package/dist/attributes.d.ts +1 -1
  22. package/dist/auto.cjs +1 -1
  23. package/dist/auto.cjs.map +1 -1
  24. package/dist/auto.d.cts +1 -1
  25. package/dist/auto.d.ts +1 -1
  26. package/dist/auto.js +1 -1
  27. package/dist/auto.js.map +1 -1
  28. package/dist/business-baggage.d.cts +2 -3
  29. package/dist/business-baggage.d.cts.map +1 -1
  30. package/dist/business-baggage.d.ts +2 -3
  31. package/dist/business-baggage.d.ts.map +1 -1
  32. package/dist/{canonical-log-line-processor-xvjMgtpF.d.cts → canonical-log-line-processor-B4WgG-VS.d.cts} +2 -3
  33. package/dist/canonical-log-line-processor-B4WgG-VS.d.cts.map +1 -0
  34. package/dist/{canonical-log-line-processor-BcRuAdRk.d.ts → canonical-log-line-processor-CL_J7gb5.d.ts} +2 -3
  35. package/dist/canonical-log-line-processor-CL_J7gb5.d.ts.map +1 -0
  36. package/dist/{canonical-log-line-processor-CcrDi6TO.cjs → canonical-log-line-processor-DOjb6Kxy.cjs} +5 -5
  37. package/dist/canonical-log-line-processor-DOjb6Kxy.cjs.map +1 -0
  38. package/dist/{canonical-log-line-processor-FLezvFCB.js → canonical-log-line-processor-mKABvGP0.js} +5 -5
  39. package/dist/canonical-log-line-processor-mKABvGP0.js.map +1 -0
  40. package/dist/config.d.cts +12 -7
  41. package/dist/config.d.cts.map +1 -1
  42. package/dist/config.d.ts +12 -7
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/correlation-id.cjs +1 -1
  45. package/dist/correlation-id.d.cts +0 -1
  46. package/dist/correlation-id.d.cts.map +1 -1
  47. package/dist/correlation-id.d.ts +0 -1
  48. package/dist/correlation-id.d.ts.map +1 -1
  49. package/dist/correlation-id.js +1 -1
  50. package/dist/db.d.cts.map +1 -1
  51. package/dist/db.d.ts.map +1 -1
  52. package/dist/decorators.cjs +1 -1
  53. package/dist/decorators.cjs.map +1 -1
  54. package/dist/decorators.d.cts +1 -2
  55. package/dist/decorators.d.cts.map +1 -1
  56. package/dist/decorators.d.ts +1 -2
  57. package/dist/decorators.d.ts.map +1 -1
  58. package/dist/decorators.js +1 -1
  59. package/dist/decorators.js.map +1 -1
  60. package/dist/{define-event-CreknLm3.d.ts → define-event-B2z1SBe7.d.ts} +2 -3
  61. package/dist/define-event-B2z1SBe7.d.ts.map +1 -0
  62. package/dist/{define-event-HZRizPwz.d.cts → define-event-CGG048HE.d.cts} +2 -3
  63. package/dist/define-event-CGG048HE.d.cts.map +1 -0
  64. package/dist/diagnostics.cjs +10 -1
  65. package/dist/diagnostics.cjs.map +1 -1
  66. package/dist/diagnostics.d.cts +0 -1
  67. package/dist/diagnostics.d.cts.map +1 -1
  68. package/dist/diagnostics.d.ts +0 -1
  69. package/dist/diagnostics.d.ts.map +1 -1
  70. package/dist/diagnostics.js +10 -1
  71. package/dist/diagnostics.js.map +1 -1
  72. package/dist/drain-pipeline.d.cts +12 -5
  73. package/dist/drain-pipeline.d.cts.map +1 -1
  74. package/dist/drain-pipeline.d.ts +12 -5
  75. package/dist/drain-pipeline.d.ts.map +1 -1
  76. package/dist/enrichers.d.cts.map +1 -1
  77. package/dist/enrichers.d.ts.map +1 -1
  78. package/dist/{event-rzA1X5h3.cjs → event-CwIpFdoY.cjs} +3 -3
  79. package/dist/event-CwIpFdoY.cjs.map +1 -0
  80. package/dist/{event-BEm5IJ8U.js → event-pLMF5b3d.js} +4 -4
  81. package/dist/event-pLMF5b3d.js.map +1 -0
  82. package/dist/{event-subscriber-D1XLkPzi.d.ts → event-subscriber-CWh8sTGh.d.cts} +2 -2
  83. package/dist/event-subscriber-CWh8sTGh.d.cts.map +1 -0
  84. package/dist/{event-subscriber-D1XLkPzi.d.cts → event-subscriber-CWh8sTGh.d.ts} +2 -2
  85. package/dist/event-subscriber-CWh8sTGh.d.ts.map +1 -0
  86. package/dist/event-subscriber.d.cts +1 -1
  87. package/dist/event-subscriber.d.ts +1 -1
  88. package/dist/{event-testing-CfFs3to2.d.ts → event-testing-CA2mIx1E.d.ts} +2 -3
  89. package/dist/event-testing-CA2mIx1E.d.ts.map +1 -0
  90. package/dist/{event-testing-BqRnI0z4.d.cts → event-testing-D0qWfqAy.d.cts} +2 -3
  91. package/dist/event-testing-D0qWfqAy.d.cts.map +1 -0
  92. package/dist/event-testing.d.cts +1 -1
  93. package/dist/event-testing.d.ts +1 -1
  94. package/dist/event.cjs +1 -1
  95. package/dist/event.d.cts +3 -4
  96. package/dist/event.d.cts.map +1 -1
  97. package/dist/event.d.ts +3 -4
  98. package/dist/event.d.ts.map +1 -1
  99. package/dist/event.js +1 -1
  100. package/dist/exporters.d.cts +0 -4
  101. package/dist/exporters.d.cts.map +1 -1
  102. package/dist/exporters.d.ts +0 -4
  103. package/dist/exporters.d.ts.map +1 -1
  104. package/dist/{filtering-span-processor-B8R8B7Uk.d.ts → filtering-span-processor-BpDagWNa.d.cts} +1 -2
  105. package/dist/filtering-span-processor-BpDagWNa.d.cts.map +1 -0
  106. package/dist/{filtering-span-processor-B8R8B7Uk.d.cts → filtering-span-processor-BpDagWNa.d.ts} +1 -2
  107. package/dist/filtering-span-processor-BpDagWNa.d.ts.map +1 -0
  108. package/dist/filtering-span-processor.d.cts +1 -1
  109. package/dist/filtering-span-processor.d.ts +1 -1
  110. package/dist/functional-Bit6noRu.js +840 -0
  111. package/dist/functional-Bit6noRu.js.map +1 -0
  112. package/dist/functional-Cj7PSItS.cjs +890 -0
  113. package/dist/functional-Cj7PSItS.cjs.map +1 -0
  114. package/dist/functional.cjs +2 -2
  115. package/dist/functional.d.cts +79 -130
  116. package/dist/functional.d.cts.map +1 -1
  117. package/dist/functional.d.ts +79 -130
  118. package/dist/functional.d.ts.map +1 -1
  119. package/dist/functional.js +2 -2
  120. package/dist/http.cjs +5 -5
  121. package/dist/http.cjs.map +1 -1
  122. package/dist/http.d.cts +4 -5
  123. package/dist/http.d.cts.map +1 -1
  124. package/dist/http.d.ts +4 -5
  125. package/dist/http.d.ts.map +1 -1
  126. package/dist/http.js +5 -5
  127. package/dist/http.js.map +1 -1
  128. package/dist/{index-eKuioqT1.d.cts → index-BPcxVucm.d.cts} +2 -3
  129. package/dist/index-BPcxVucm.d.cts.map +1 -0
  130. package/dist/{index-Ck06vlW2.d.ts → index-DolOVX6F.d.ts} +2 -3
  131. package/dist/index-DolOVX6F.d.ts.map +1 -0
  132. package/dist/index.cjs +7 -8
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.d.cts +14 -14
  135. package/dist/index.d.cts.map +1 -1
  136. package/dist/index.d.ts +14 -14
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -8
  139. package/dist/index.js.map +1 -1
  140. package/dist/{init-BxJEJ9Tn.cjs → init-B2uvZReD.cjs} +19 -10
  141. package/dist/init-B2uvZReD.cjs.map +1 -0
  142. package/dist/{init-B7u-DjxM.d.ts → init-CTyqG9qR.d.ts} +24 -17
  143. package/dist/init-CTyqG9qR.d.ts.map +1 -0
  144. package/dist/{init-BvBB45-T.js → init-CdEWjhvl.js} +20 -11
  145. package/dist/init-CdEWjhvl.js.map +1 -0
  146. package/dist/{init-DSrRmVnz.d.cts → init-a4yPDYqC.d.cts} +24 -17
  147. package/dist/init-a4yPDYqC.d.cts.map +1 -0
  148. package/dist/instrumentation.cjs +7 -13
  149. package/dist/instrumentation.cjs.map +1 -1
  150. package/dist/instrumentation.d.cts +0 -1
  151. package/dist/instrumentation.d.cts.map +1 -1
  152. package/dist/instrumentation.d.ts +0 -1
  153. package/dist/instrumentation.d.ts.map +1 -1
  154. package/dist/instrumentation.js +8 -14
  155. package/dist/instrumentation.js.map +1 -1
  156. package/dist/{logger-BauSUhUv.d.ts → logger-CN4xpzMd.d.cts} +1 -2
  157. package/dist/logger-CN4xpzMd.d.cts.map +1 -0
  158. package/dist/{logger-BauSUhUv.d.cts → logger-CN4xpzMd.d.ts} +1 -2
  159. package/dist/logger-CN4xpzMd.d.ts.map +1 -0
  160. package/dist/logger-D3Ej3DII.js.map +1 -1
  161. package/dist/logger-thMPLpOG.cjs.map +1 -1
  162. package/dist/logger.d.cts +1 -1
  163. package/dist/logger.d.ts +1 -1
  164. package/dist/messaging-adapters.cjs.map +1 -1
  165. package/dist/messaging-adapters.d.cts +0 -1
  166. package/dist/messaging-adapters.d.cts.map +1 -1
  167. package/dist/messaging-adapters.d.ts +0 -1
  168. package/dist/messaging-adapters.d.ts.map +1 -1
  169. package/dist/messaging-adapters.js.map +1 -1
  170. package/dist/messaging-testing.d.cts +0 -1
  171. package/dist/messaging-testing.d.cts.map +1 -1
  172. package/dist/messaging-testing.d.ts +0 -1
  173. package/dist/messaging-testing.d.ts.map +1 -1
  174. package/dist/messaging.cjs +27 -10
  175. package/dist/messaging.cjs.map +1 -1
  176. package/dist/messaging.d.cts +6 -7
  177. package/dist/messaging.d.cts.map +1 -1
  178. package/dist/messaging.d.ts +6 -7
  179. package/dist/messaging.d.ts.map +1 -1
  180. package/dist/messaging.js +27 -10
  181. package/dist/messaging.js.map +1 -1
  182. package/dist/metric-helpers.d.cts +0 -1
  183. package/dist/metric-helpers.d.cts.map +1 -1
  184. package/dist/metric-helpers.d.ts +0 -1
  185. package/dist/metric-helpers.d.ts.map +1 -1
  186. package/dist/{metric-testing-DXdK3-Q3.d.ts → metric-testing-CWm6UhaR.d.ts} +2 -3
  187. package/dist/metric-testing-CWm6UhaR.d.ts.map +1 -0
  188. package/dist/{metric-testing-MxvzChDp.d.cts → metric-testing-CpvP3ZIa.d.cts} +2 -3
  189. package/dist/metric-testing-CpvP3ZIa.d.cts.map +1 -0
  190. package/dist/metric-testing.d.cts +1 -1
  191. package/dist/metric-testing.d.ts +1 -1
  192. package/dist/metric.d.cts +3 -4
  193. package/dist/metric.d.cts.map +1 -1
  194. package/dist/metric.d.ts +3 -4
  195. package/dist/metric.d.ts.map +1 -1
  196. package/dist/parse-error.d.cts.map +1 -1
  197. package/dist/parse-error.d.ts.map +1 -1
  198. package/dist/processors.cjs +1 -1
  199. package/dist/processors.d.cts +1 -1
  200. package/dist/processors.d.ts +1 -1
  201. package/dist/processors.js +1 -1
  202. package/dist/register.d.cts +1 -1
  203. package/dist/register.d.ts +1 -1
  204. package/dist/{sampling-DfYhDJij.d.cts → sampling-BR9fkSwx.d.cts} +127 -10
  205. package/dist/sampling-BR9fkSwx.d.cts.map +1 -0
  206. package/dist/{sampling-CR0Va1VB.d.ts → sampling-CP3e7-Yr.d.ts} +127 -10
  207. package/dist/sampling-CP3e7-Yr.d.ts.map +1 -0
  208. package/dist/sampling.cjs +160 -12
  209. package/dist/sampling.cjs.map +1 -1
  210. package/dist/sampling.d.cts +2 -2
  211. package/dist/sampling.d.ts +2 -2
  212. package/dist/sampling.js +157 -13
  213. package/dist/sampling.js.map +1 -1
  214. package/dist/security-schema.d.cts +9 -4
  215. package/dist/security-schema.d.cts.map +1 -1
  216. package/dist/security-schema.d.ts +9 -4
  217. package/dist/security-schema.d.ts.map +1 -1
  218. package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -1
  219. package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -1
  220. package/dist/semantic-conventions.cjs.map +1 -1
  221. package/dist/semantic-conventions.js.map +1 -1
  222. package/dist/semantic-helpers.cjs +85 -304
  223. package/dist/semantic-helpers.cjs.map +1 -1
  224. package/dist/semantic-helpers.d.cts +21 -12
  225. package/dist/semantic-helpers.d.cts.map +1 -1
  226. package/dist/semantic-helpers.d.ts +21 -12
  227. package/dist/semantic-helpers.d.ts.map +1 -1
  228. package/dist/semantic-helpers.js +85 -304
  229. package/dist/semantic-helpers.js.map +1 -1
  230. package/dist/slo.cjs +225 -0
  231. package/dist/slo.cjs.map +1 -0
  232. package/dist/slo.d.cts +97 -0
  233. package/dist/slo.d.cts.map +1 -0
  234. package/dist/slo.d.ts +97 -0
  235. package/dist/slo.d.ts.map +1 -0
  236. package/dist/slo.js +223 -0
  237. package/dist/slo.js.map +1 -0
  238. package/dist/{span-name-normalizer-8ZOGJuwv.d.ts → span-name-normalizer-CN1-8C76.d.cts} +1 -2
  239. package/dist/span-name-normalizer-CN1-8C76.d.cts.map +1 -0
  240. package/dist/{span-name-normalizer-8ZOGJuwv.d.cts → span-name-normalizer-CN1-8C76.d.ts} +1 -2
  241. package/dist/span-name-normalizer-CN1-8C76.d.ts.map +1 -0
  242. package/dist/span-name-normalizer.cjs.map +1 -1
  243. package/dist/span-name-normalizer.d.cts +1 -1
  244. package/dist/span-name-normalizer.d.ts +1 -1
  245. package/dist/span-name-normalizer.js.map +1 -1
  246. package/dist/tail-sampling-processor.d.cts +0 -1
  247. package/dist/tail-sampling-processor.d.cts.map +1 -1
  248. package/dist/tail-sampling-processor.d.ts +0 -1
  249. package/dist/tail-sampling-processor.d.ts.map +1 -1
  250. package/dist/test-span-collector.cjs.map +1 -1
  251. package/dist/test-span-collector.d.cts +0 -1
  252. package/dist/test-span-collector.d.cts.map +1 -1
  253. package/dist/test-span-collector.d.ts +0 -1
  254. package/dist/test-span-collector.d.ts.map +1 -1
  255. package/dist/test-span-collector.js.map +1 -1
  256. package/dist/testing.cjs +76 -11
  257. package/dist/testing.cjs.map +1 -1
  258. package/dist/testing.d.cts +30 -5
  259. package/dist/testing.d.cts.map +1 -1
  260. package/dist/testing.d.ts +30 -5
  261. package/dist/testing.d.ts.map +1 -1
  262. package/dist/testing.js +73 -12
  263. package/dist/testing.js.map +1 -1
  264. package/dist/{trace-context-Cijqoi6e.d.ts → trace-context-IuyoPyNq.d.cts} +9 -9
  265. package/dist/trace-context-IuyoPyNq.d.cts.map +1 -0
  266. package/dist/{trace-context-Cijqoi6e.d.cts → trace-context-IuyoPyNq.d.ts} +9 -9
  267. package/dist/trace-context-IuyoPyNq.d.ts.map +1 -0
  268. package/dist/trace-factory-validation-BjVAinz6.js +13 -0
  269. package/dist/trace-factory-validation-BjVAinz6.js.map +1 -0
  270. package/dist/trace-factory-validation-Dc8epn87.cjs +19 -0
  271. package/dist/trace-factory-validation-Dc8epn87.cjs.map +1 -0
  272. package/dist/trace-helpers.cjs +7 -7
  273. package/dist/trace-helpers.cjs.map +1 -1
  274. package/dist/trace-helpers.d.cts +6 -7
  275. package/dist/trace-helpers.d.cts.map +1 -1
  276. package/dist/trace-helpers.d.ts +6 -7
  277. package/dist/trace-helpers.d.ts.map +1 -1
  278. package/dist/trace-helpers.js +7 -7
  279. package/dist/trace-helpers.js.map +1 -1
  280. package/dist/tracer-provider.d.cts +0 -1
  281. package/dist/tracer-provider.d.cts.map +1 -1
  282. package/dist/tracer-provider.d.ts +0 -1
  283. package/dist/tracer-provider.d.ts.map +1 -1
  284. package/dist/{track-D7O7oIZa.js → track-BBcxEJEC.js} +7 -12
  285. package/dist/track-BBcxEJEC.js.map +1 -0
  286. package/dist/{track-eovhCJ-I.cjs → track-BI6dmZ2X.cjs} +6 -17
  287. package/dist/track-BI6dmZ2X.cjs.map +1 -0
  288. package/dist/validate.cjs.map +1 -1
  289. package/dist/validate.d.cts +1 -2
  290. package/dist/validate.d.cts.map +1 -1
  291. package/dist/validate.d.ts +1 -2
  292. package/dist/validate.d.ts.map +1 -1
  293. package/dist/validate.js.map +1 -1
  294. package/dist/validation-attributes.d.cts +17 -8
  295. package/dist/validation-attributes.d.cts.map +1 -1
  296. package/dist/validation-attributes.d.ts +17 -8
  297. package/dist/validation-attributes.d.ts.map +1 -1
  298. package/dist/webhook.cjs +5 -4
  299. package/dist/webhook.cjs.map +1 -1
  300. package/dist/webhook.d.cts +4 -4
  301. package/dist/webhook.d.cts.map +1 -1
  302. package/dist/webhook.d.ts +4 -4
  303. package/dist/webhook.d.ts.map +1 -1
  304. package/dist/webhook.js +5 -4
  305. package/dist/webhook.js.map +1 -1
  306. package/dist/workflow-distributed.cjs +5 -5
  307. package/dist/workflow-distributed.cjs.map +1 -1
  308. package/dist/workflow-distributed.d.cts +25 -15
  309. package/dist/workflow-distributed.d.cts.map +1 -1
  310. package/dist/workflow-distributed.d.ts +25 -15
  311. package/dist/workflow-distributed.d.ts.map +1 -1
  312. package/dist/workflow-distributed.js +5 -5
  313. package/dist/workflow-distributed.js.map +1 -1
  314. package/dist/workflow.cjs +24 -30
  315. package/dist/workflow.cjs.map +1 -1
  316. package/dist/workflow.d.cts +11 -6
  317. package/dist/workflow.d.cts.map +1 -1
  318. package/dist/workflow.d.ts +11 -6
  319. package/dist/workflow.d.ts.map +1 -1
  320. package/dist/workflow.js +24 -30
  321. package/dist/workflow.js.map +1 -1
  322. package/dist/yaml-config.d.cts +2 -3
  323. package/dist/yaml-config.d.cts.map +1 -1
  324. package/dist/yaml-config.d.ts +2 -3
  325. package/dist/yaml-config.d.ts.map +1 -1
  326. package/package.json +23 -14
  327. package/skills/analyze-traces/SKILL.md +42 -13
  328. package/skills/autotel-core/SKILL.md +24 -17
  329. package/skills/autotel-events/SKILL.md +1 -1
  330. package/skills/autotel-frameworks/SKILL.md +41 -6
  331. package/skills/autotel-instrumentation/SKILL.md +14 -9
  332. package/skills/autotel-request-logging/SKILL.md +19 -14
  333. package/skills/autotel-structured-errors/SKILL.md +2 -2
  334. package/skills/build-audit-trails/SKILL.md +11 -11
  335. package/skills/build-audit-trails/references/audit-queries.md +3 -3
  336. package/skills/debug-missing-spans/SKILL.md +12 -12
  337. package/skills/migrate-to-autotel/SKILL.md +20 -20
  338. package/skills/review-otel-patterns/SKILL.md +44 -42
  339. package/skills/review-otel-patterns/references/code-review.md +4 -4
  340. package/skills/review-otel-patterns/references/processor-pipeline.md +3 -3
  341. package/skills/review-otel-patterns/references/structured-errors.md +1 -1
  342. package/skills/review-otel-patterns/references/wide-spans.md +2 -2
  343. package/skills/tune-sampling/SKILL.md +91 -16
  344. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +0 -1
  345. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +0 -1
  346. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +0 -1
  347. package/dist/canonical-log-line-processor-CcrDi6TO.cjs.map +0 -1
  348. package/dist/canonical-log-line-processor-FLezvFCB.js.map +0 -1
  349. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +0 -1
  350. package/dist/define-event-CreknLm3.d.ts.map +0 -1
  351. package/dist/define-event-HZRizPwz.d.cts.map +0 -1
  352. package/dist/event-BEm5IJ8U.js.map +0 -1
  353. package/dist/event-rzA1X5h3.cjs.map +0 -1
  354. package/dist/event-subscriber-D1XLkPzi.d.cts.map +0 -1
  355. package/dist/event-subscriber-D1XLkPzi.d.ts.map +0 -1
  356. package/dist/event-testing-BqRnI0z4.d.cts.map +0 -1
  357. package/dist/event-testing-CfFs3to2.d.ts.map +0 -1
  358. package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +0 -1
  359. package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +0 -1
  360. package/dist/functional-CwsPyc4l.cjs +0 -1298
  361. package/dist/functional-CwsPyc4l.cjs.map +0 -1
  362. package/dist/functional-dAYhXQPA.js +0 -1248
  363. package/dist/functional-dAYhXQPA.js.map +0 -1
  364. package/dist/index-Ck06vlW2.d.ts.map +0 -1
  365. package/dist/index-eKuioqT1.d.cts.map +0 -1
  366. package/dist/init-B7u-DjxM.d.ts.map +0 -1
  367. package/dist/init-BvBB45-T.js.map +0 -1
  368. package/dist/init-BxJEJ9Tn.cjs.map +0 -1
  369. package/dist/init-DSrRmVnz.d.cts.map +0 -1
  370. package/dist/logger-BauSUhUv.d.cts.map +0 -1
  371. package/dist/logger-BauSUhUv.d.ts.map +0 -1
  372. package/dist/metric-testing-DXdK3-Q3.d.ts.map +0 -1
  373. package/dist/metric-testing-MxvzChDp.d.cts.map +0 -1
  374. package/dist/sampling-CR0Va1VB.d.ts.map +0 -1
  375. package/dist/sampling-DfYhDJij.d.cts.map +0 -1
  376. package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +0 -1
  377. package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +0 -1
  378. package/dist/trace-context-Cijqoi6e.d.cts.map +0 -1
  379. package/dist/trace-context-Cijqoi6e.d.ts.map +0 -1
  380. package/dist/track-D7O7oIZa.js.map +0 -1
  381. package/dist/track-eovhCJ-I.cjs.map +0 -1
@@ -1,37 +1,8 @@
1
- import { n as TraceContext } from "./trace-context-Cijqoi6e.js";
2
- import { u as Sampler } from "./sampling-CR0Va1VB.js";
1
+ import { n as TraceContext } from "./trace-context-IuyoPyNq.js";
2
+ import { p as Sampler } from "./sampling-CP3e7-Yr.js";
3
3
  import { Span } from "@opentelemetry/api";
4
-
5
4
  //#region src/functional.d.ts
6
- /**
7
- * Helper type to extract function signature from factory pattern
8
- * This helps TypeScript infer types correctly for factory functions
9
- */
10
- type ExtractFunctionSignature<T> = T extends ((ctx: TraceContext) => infer F) ? F extends ((...args: infer Args) => infer Return) ? (...args: Args) => Return : never : never;
11
- /**
12
- * Helper type to exclude functions that return functions from immediate execution overloads
13
- */
14
- type ExcludeFactoryReturn<T> = T extends ((ctx: TraceContext) => infer F) ? F extends ((...args: any[]) => any) ? never : T : T;
15
- /**
16
- * Mark a function as immediate-execution-with-ctx so `trace(name, fn)`
17
- * dispatch doesn't depend on the first parameter being named `ctx`.
18
- *
19
- * Necessary when the function will be bundled by a minifier (esbuild,
20
- * terser, etc.) that renames identifiers. The name-allowlist heuristic in
21
- * `looksLikeTraceFactory` cannot recover from that; the marker can.
22
- *
23
- * @example
24
- * ```ts
25
- * import { markAsImmediate, trace } from 'autotel';
26
- *
27
- * const inner = markAsImmediate(async (ctx) => {
28
- * ctx.setAttribute('user.id', '123');
29
- * return { ok: true };
30
- * });
31
- * const result = await trace('user.read', inner);
32
- * ```
33
- */
34
- declare function markAsImmediate<F>(fn: F): F;
5
+ type WrappedFunction<TArgs extends unknown[], TReturn> = (...args: TArgs) => TReturn | Promise<TReturn>;
35
6
  /**
36
7
  * Common options for functional tracing
37
8
  */
@@ -95,12 +66,21 @@ interface TracingOptions<TArgs extends unknown[] = unknown[], TReturn = unknown>
95
66
  * @default SpanKind.INTERNAL
96
67
  */
97
68
  spanKind?: import('@opentelemetry/api').SpanKind;
69
+ /**
70
+ * Classify a thrown value as a real error. Return `false` to treat the throw
71
+ * as expected control flow: the span is marked OK, no exception is recorded,
72
+ * and the value is rethrown untouched. Use this for framework control-flow
73
+ * signals that propagate via `throw` but are not failures — e.g. TanStack
74
+ * Router / Next.js `redirect()` and `notFound()`.
75
+ * @default every throw is treated as an error
76
+ */
77
+ isError?: (error: unknown) => boolean;
98
78
  }
99
79
  /**
100
80
  * Options for instrument() batch instrumentation
101
81
  */
102
- interface InstrumentOptions<T extends Record<string, InstrumentableFunction> = Record<string, InstrumentableFunction>> extends TracingOptions {
103
- /** Functions to instrument */
82
+ interface InstrumentOptions<T extends Record<string, AnyInstrumentable> = Record<string, AnyInstrumentable>> extends TracingOptions {
83
+ /** Object whose function properties should be instrumented */
104
84
  functions: T;
105
85
  /**
106
86
  * Per-function configuration overrides
@@ -117,10 +97,47 @@ interface InstrumentOptions<T extends Record<string, InstrumentableFunction> = R
117
97
  */
118
98
  skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[];
119
99
  }
120
- type InstrumentableFunction<TArgs extends unknown[] = unknown[], TReturn = unknown> = ((...args: TArgs) => TReturn | Promise<TReturn>) & {
100
+ /**
101
+ * Options for instrumenting one function with an explicit stable key.
102
+ */
103
+ interface SingleInstrumentOptions<TFunction extends AnyInstrumentable = AnyInstrumentable> extends TracingOptions {
104
+ /** Stable function key used for span naming */
105
+ key: string;
106
+ /** Function to instrument */
107
+ fn: TFunction;
108
+ }
109
+ /**
110
+ * Constraint alias for `instrument()` and friends. `never[]` parameters make
111
+ * every concretely-typed function (e.g. `(name: string) => Promise<User>`)
112
+ * satisfy the constraint under `strictFunctionTypes` without resorting to
113
+ * `any`. Use ONLY in constraint positions — the concrete `T` is still
114
+ * inferred from the actual argument, so call-site argument and return types
115
+ * are fully preserved.
116
+ */
117
+ type AnyInstrumentable = ((...args: never[]) => unknown) & {
121
118
  displayName?: string;
122
119
  name?: string;
123
120
  };
121
+ /**
122
+ * Get the autotel {@link TraceContext} for the currently active span.
123
+ *
124
+ * This is the ambient accessor for the functional API: instead of threading a
125
+ * `ctx` parameter through a factory, call this inside any traced function (or a
126
+ * helper it calls) to reach `setAttribute`, `setUser`, `getBaggage`, and the
127
+ * rest of the context surface. Returns `undefined` when no span is active.
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * const getUser = trace('getUser', async (id: string) => {
132
+ * getActiveTraceContext()?.setAttribute('user.id', id);
133
+ * return db.users.find(id);
134
+ * });
135
+ * ```
136
+ *
137
+ * @see getActiveSpan for the raw OpenTelemetry span
138
+ * @see getRequestLogger which reads the active context when called with no args
139
+ */
140
+ declare function getActiveTraceContext<TBaggage extends Record<string, unknown> | undefined = undefined>(): TraceContext<TBaggage> | undefined;
124
141
  /**
125
142
  * Context object that lazily evaluates the active span on property access
126
143
  *
@@ -139,16 +156,14 @@ type InstrumentableFunction<TArgs extends unknown[] = unknown[], TReturn = unkno
139
156
  * })
140
157
  * ```
141
158
  */
142
- declare const ctx: {};
159
+ declare const ctx: TraceContext;
143
160
  /**
144
161
  * Approach 1: trace() - Zero-ceremony HOF
145
162
  *
146
- * Wrap a single function with automatic tracing.
147
- * The function receives a context object as the first parameter.
148
- *
149
- * Supports two patterns:
150
- * 1. **Factory pattern** - Returns a traced function: `trace(ctx => (...args) => result)`
151
- * 2. **Immediate execution** - Executes immediately with tracing: `trace(ctx => result)`
163
+ * Wrap a plain function with automatic tracing. The function receives its real
164
+ * arguments; no context parameter is injected. Use
165
+ * {@link getActiveTraceContext} inside the function, or use {@link withTracing}
166
+ * for the explicit `(ctx) => (...args) => result` factory form.
152
167
  *
153
168
  * @example Auto-inferred name - Plain function
154
169
  * ```typescript
@@ -158,25 +173,12 @@ declare const ctx: {};
158
173
  * // → Traced as "createUser"
159
174
  * ```
160
175
  *
161
- * @example Auto-inferred name - Factory pattern (with ctx access)
176
+ * @example Ambient context access
162
177
  * ```typescript
163
- * export const createUser = trace(ctx => async (data) => {
164
- * ctx.setAttribute('user.id', data.id)
178
+ * export const createUser = trace(async (data) => {
179
+ * getActiveTraceContext()?.setAttribute('user.id', data.id)
165
180
  * return await db.users.create(data)
166
181
  * })
167
- * // → Traced as "createUser", returns wrapped function
168
- * ```
169
- *
170
- * @example Immediate execution - Execute once with tracing
171
- * ```typescript
172
- * // Wraps an existing function and executes immediately
173
- * function timed<T>(fn: () => Promise<T>): Promise<T> {
174
- * return trace(async (ctx) => {
175
- * ctx.setAttribute('operation', 'timed')
176
- * return await fn()
177
- * })
178
- * }
179
- * // → Executes immediately, returns result directly
180
182
  * ```
181
183
  *
182
184
  * @example Custom name - Plain function
@@ -187,22 +189,12 @@ declare const ctx: {};
187
189
  * // → Traced as "user.create"
188
190
  * ```
189
191
  *
190
- * @example Custom name - Factory pattern
192
+ * @example Explicit factory context with withTracing()
191
193
  * ```typescript
192
- * export const createUser = trace('user.create', ctx => async (data) => {
194
+ * export const createUser = withTracing({ name: 'user.create' })((ctx) => async (data) => {
193
195
  * ctx.setAttribute('user.id', data.id)
194
196
  * return await db.users.create(data)
195
197
  * })
196
- * // → Traced as "user.create"
197
- * ```
198
- *
199
- * @example Custom name - Immediate execution
200
- * ```typescript
201
- * const result = trace('fetch.user', async (ctx) => {
202
- * ctx.setAttribute('userId', '123')
203
- * return await fetchUser('123')
204
- * })
205
- * // → Executes immediately with span name "fetch.user"
206
198
  * ```
207
199
  *
208
200
  * @example Full options - Plain function
@@ -216,56 +208,10 @@ declare const ctx: {};
216
208
  * })
217
209
  * ```
218
210
  *
219
- * @example Full options - Factory pattern
220
- * ```typescript
221
- * export const createUser = trace({
222
- * name: 'user.create',
223
- * sampler: new AdaptiveSampler(),
224
- * withMetrics: true
225
- * }, ctx => async (data) => {
226
- * ctx.setAttribute('user.id', data.id)
227
- * return await db.users.create(data)
228
- * })
229
- * ```
230
211
  */
231
- declare function trace<TBaggage extends Record<string, unknown> | undefined = undefined, TReturn = unknown>(fn: (ctx: TraceContext<TBaggage>) => TReturn): TReturn;
232
- declare function trace<TBaggage extends Record<string, unknown> | undefined = undefined>(fnFactory: (ctx: TraceContext<TBaggage>) => () => unknown): () => unknown;
233
- declare function trace<TBaggage extends Record<string, unknown> | undefined = undefined, TArgs extends unknown[] = unknown[], TReturn = unknown>(fnFactory: (ctx: TraceContext<TBaggage>) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
234
- declare function trace<TReturn = unknown>(fnFactory: (ctx: TraceContext) => () => TReturn): () => TReturn;
235
- declare function trace<TFactory extends (ctx: TraceContext) => (...args: unknown[]) => unknown>(fnFactory: TFactory): ExtractFunctionSignature<TFactory>;
236
- declare function trace<TArgs extends unknown[], TReturn = unknown>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
237
- declare function trace<TReturn = unknown>(fn: () => TReturn): () => TReturn;
238
- declare function trace<TArgs extends unknown[], TReturn = unknown>(fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
239
- declare function trace<TReturn = unknown>(name: string, fn: ExcludeFactoryReturn<(ctx: TraceContext) => TReturn>): TReturn;
240
- declare function trace<TReturn = unknown>(name: string, fnFactory: (ctx: TraceContext) => () => TReturn): () => TReturn;
241
- declare function trace<TArgs extends unknown[], TReturn>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
242
- declare function trace<TFactory extends (ctx: TraceContext) => (...args: unknown[]) => unknown>(name: string, fnFactory: TFactory): ExtractFunctionSignature<TFactory>;
243
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
244
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(name: string, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
245
- declare function trace<TReturn = unknown>(options: TracingOptions<[], TReturn>, fn: (ctx: TraceContext) => TReturn): TReturn;
246
- declare function trace<TReturn = unknown>(options: TracingOptions<[], TReturn>, fnFactory: (ctx: TraceContext) => () => TReturn): () => TReturn;
247
- declare function trace<TArgs extends unknown[], TReturn>(options: TracingOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
248
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(options: TracingOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
249
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(options: TracingOptions<TArgs, TReturn>, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
250
- declare function trace<TReturn = unknown>(fn: (ctx: TraceContext) => Promise<TReturn>): Promise<TReturn>;
251
- declare function trace(fnFactory: (ctx: TraceContext) => () => Promise<unknown>): () => Promise<unknown>;
252
- declare function trace<TArgs extends unknown[], TReturn>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
253
- declare function trace<TReturn = unknown>(fnFactory: (ctx: TraceContext) => () => Promise<TReturn>): () => Promise<TReturn>;
254
- declare function trace<TFactory extends (ctx: TraceContext) => (...args: unknown[]) => Promise<unknown>>(fnFactory: TFactory): ExtractFunctionSignature<TFactory>;
255
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
256
- declare function trace<TReturn = unknown>(fn: () => Promise<TReturn>): () => Promise<TReturn>;
257
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
258
- declare function trace<TReturn = unknown>(name: string, fn: ExcludeFactoryReturn<(ctx: TraceContext) => Promise<TReturn>>): Promise<TReturn>;
259
- declare function trace<TReturn = unknown>(name: string, fnFactory: (ctx: TraceContext) => () => Promise<TReturn>): () => Promise<TReturn>;
260
- declare function trace<TArgs extends unknown[], TReturn>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
261
- declare function trace<TFactory extends (ctx: TraceContext) => (...args: unknown[]) => Promise<unknown>>(name: string, fnFactory: TFactory): ExtractFunctionSignature<TFactory>;
262
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
263
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(name: string, fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
264
- declare function trace<TReturn = unknown>(options: TracingOptions<[], TReturn>, fn: (ctx: TraceContext) => Promise<TReturn>): Promise<TReturn>;
265
- declare function trace<TReturn = unknown>(options: TracingOptions<[], TReturn>, fnFactory: (ctx: TraceContext) => () => Promise<TReturn>): () => Promise<TReturn>;
266
- declare function trace<TArgs extends unknown[], TReturn>(options: TracingOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
267
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(options: TracingOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
268
- declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(options: TracingOptions<TArgs, TReturn>, fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
212
+ declare function trace<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
213
+ declare function trace<TArgs extends unknown[], TReturn>(name: string, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
214
+ declare function trace<TArgs extends unknown[], TReturn>(options: TracingOptions<TArgs, TReturn>, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
269
215
  /**
270
216
  * Approach 2: withTracing() - Middleware-style composable wrapper
271
217
  *
@@ -284,10 +230,10 @@ declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(o
284
230
  *
285
231
  * @example Composable
286
232
  * ```typescript
287
- * const trace = withTracing({ serviceName: 'user' })
233
+ * const tracer = withTracing({ serviceName: 'user' })
288
234
  *
289
- * export const createUser = trace(ctx => async (data) => { })
290
- * export const updateUser = trace(ctx => async (id, data) => { })
235
+ * export const createUser = tracer(ctx => async (data) => { })
236
+ * export const updateUser = tracer(ctx => async (id, data) => { })
291
237
  * ```
292
238
  *
293
239
  * @example With other middleware
@@ -299,7 +245,7 @@ declare function trace<TArgs extends unknown[] = unknown[], TReturn = unknown>(o
299
245
  * )(ctx => async (data) => { })
300
246
  * ```
301
247
  */
302
- declare function withTracing<TArgs extends unknown[] = unknown[], TReturn = unknown>(options?: TracingOptions<TArgs, TReturn>): (fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>) => (...args: TArgs) => TReturn | Promise<TReturn>;
248
+ declare function withTracing<TCfgArgs extends unknown[] = unknown[], TCfgReturn = unknown>(options?: TracingOptions<TCfgArgs, TCfgReturn>): <TArgs extends TCfgArgs, TReturn extends TCfgReturn>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>) => WrappedFunction<TArgs, TReturn>;
303
249
  /**
304
250
  * Approach 3: instrument() - Batch auto-instrumentation
305
251
  *
@@ -350,7 +296,8 @@ declare function withTracing<TArgs extends unknown[] = unknown[], TReturn = unkn
350
296
  * })
351
297
  * ```
352
298
  */
353
- declare function instrument<T extends Record<string, InstrumentableFunction>>(options: InstrumentOptions<T>): T;
299
+ declare function instrument<TFunction extends AnyInstrumentable>(options: SingleInstrumentOptions<TFunction>): TFunction;
300
+ declare function instrument<T extends Record<string, AnyInstrumentable>>(options: InstrumentOptions<T>): T;
354
301
  /**
355
302
  * Options for span() function
356
303
  */
@@ -359,6 +306,8 @@ interface SpanOptions {
359
306
  name: string;
360
307
  /** Attributes to set on the span */
361
308
  attributes?: Record<string, string | number | boolean>;
309
+ /** OpenTelemetry span kind */
310
+ spanKind?: import('@opentelemetry/api').SpanKind;
362
311
  }
363
312
  /**
364
313
  * Execute a function within a named span
@@ -413,9 +362,9 @@ interface WithNewContextOptions<T = unknown> {
413
362
  * // This creates a new root trace, not connected to the HTTP request trace
414
363
  * await withNewContext({
415
364
  * fn: async () => {
416
- * await trace(ctx => async () => {
365
+ * await span('webhook.process', async () => {
417
366
  * await processWebhookPayload(payload)
418
- * })()
367
+ * })
419
368
  * }
420
369
  * })
421
370
  * }
@@ -440,9 +389,9 @@ interface WithBaggageOptions<T = unknown> {
440
389
  *
441
390
  * @example Setting baggage for downstream services
442
391
  * ```typescript
443
- * import { trace, withBaggage } from 'autotel';
392
+ * import { withTracing, withBaggage } from 'autotel';
444
393
  *
445
- * export const createOrder = trace((ctx) => async (order: Order) => {
394
+ * export const createOrder = withTracing({ name: 'order.create' })((ctx) => async (order: Order) => {
446
395
  * // Set baggage that will be propagated to downstream HTTP calls
447
396
  * return await withBaggage({
448
397
  * baggage: {
@@ -462,7 +411,7 @@ interface WithBaggageOptions<T = unknown> {
462
411
  *
463
412
  * @example Using with existing baggage
464
413
  * ```typescript
465
- * export const processOrder = trace((ctx) => async (order: Order) => {
414
+ * export const processOrder = withTracing({ name: 'order.process' })((ctx) => async (order: Order) => {
466
415
  * // Read existing baggage
467
416
  * const tenantId = ctx.getBaggage('tenant.id');
468
417
  *
@@ -481,5 +430,5 @@ interface WithBaggageOptions<T = unknown> {
481
430
  */
482
431
  declare function withBaggage<T = unknown>(options: WithBaggageOptions<T>): T | Promise<T>;
483
432
  //#endregion
484
- export { InstrumentOptions, SpanOptions, type TraceContext, TracingOptions, WithBaggageOptions, WithNewContextOptions, ctx, instrument, markAsImmediate, span, trace, withBaggage, withNewContext, withTracing };
433
+ export { InstrumentOptions, SingleInstrumentOptions, SpanOptions, type TraceContext, TracingOptions, WithBaggageOptions, WithNewContextOptions, ctx, getActiveTraceContext, instrument, span, trace, withBaggage, withNewContext, withTracing };
485
434
  //# sourceMappingURL=functional.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"functional.d.ts","names":[],"sources":["../src/functional.ts"],"mappings":"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"}
1
+ {"version":3,"file":"functional.d.ts","names":[],"sources":["../src/functional.ts"],"mappings":";;;;KAgGK,gBAAgB,yBAAyB,eACzC,MAAM,UACN,UAAU,QAAQ;;;;UA+DN,eACf,qCACA;;;;;EAMA;;;;;EAMA;;;;;EAMA,UAAU;;;;;EAMV;;;;EAKA,sBAAsB,MAAM,UAAU;;;;EAKtC,wBAAwB,QAAQ,YAAY;;;;;;;;EAS5C;;;;;EAMA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA,wCAAwC;;;;;;;;;EAUxC,WAAW;;;;;UAMI,kBACf,UAAU,eAAe,qBAAqB,eAE5C,4BAEM;;EAER,WAAW;;;;EAIX,YAAY,eAAe,QAAQ;;;;;;;;;;EAYnC,iBAAiB,WAAW,aAAa,IAAI;;;;;UAM9B,wBACf,kBAAkB,oBAAoB,2BAC9B;;EAER;;EAEA,IAAI;;;;;;;;;;KAyMD,yBAAyB;EAC5B;EACA;;;;;;;;;;;;;;;;;;;;;iBAqJc,sBACd,iBAAiB,oDACd,aAAa;;;;;;;;;;;;;;;;;;;cAsBL,KAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyXA,MAAM,yBAAyB,SAC7C,QAAQ,MAAM,UAAU,cACnB,MAAM,UAAU;iBAEP,MAAM,yBAAyB,SAC7C,cACA,QAAQ,MAAM,UAAU,cACnB,MAAM,UAAU;iBAEP,MAAM,yBAAyB,SAC7C,SAAS,eAAe,OAAO,UAC/B,QAAQ,MAAM,UAAU,cACnB,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkEP,YACd,wCACA,sBACA,UAAS,eAAe,UAAU,eAC1B,cAAc,UAAU,gBAAgB,YAC9C,YACE,KAAK,qBACE,MAAM,UAAU,UAAU,QAAQ,aAC1C,gBAAgB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsDZ,WAAW,kBAAkB,mBAC3C,SAAS,wBAAwB,aAChC;iBACa,WAAW,UAAU,eAAe,oBAClD,SAAS,kBAAkB,KAC1B;;;;UAuFc;;EAEf;;EAEA,aAAa;;EAEb,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoC1B,KAAK,aAAa,cAAc,KAAK,MAAM,SAAS,IAAI;iBACxD,KAAK,aACnB,cACA,KAAK,MAAM,SAAS,QAAQ,KAC3B,QAAQ;iBACK,KAAK,aACnB,SAAS,aACT,KAAK,MAAM,SAAS,IACnB;iBACa,KAAK,aACnB,SAAS,aACT,KAAK,MAAM,SAAS,QAAQ,KAC3B,QAAQ;;;;UAmGM,sBAAsB;;EAErC,UAAU,QAAQ;;;;;;;;;;;;;;;;;;;;;;iBAuBE,eAAe,aACnC,SAAS,sBAAsB,KAC9B,QAAQ;;;;UA0BM,mBAAmB;;EAElC,SAAS;;EAET,UAAU,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmDR,YAAY,aAC1B,SAAS,mBAAmB,KAC3B,IAAI,QAAQ"}
@@ -1,3 +1,3 @@
1
- import { a as trace, c as withTracing, i as span, n as instrument, o as withBaggage, r as markAsImmediate, s as withNewContext, t as ctx } from "./functional-dAYhXQPA.js";
1
+ import { a as trace, c as withTracing, i as span, n as getActiveTraceContext, o as withBaggage, r as instrument, s as withNewContext, t as ctx } from "./functional-Bit6noRu.js";
2
2
 
3
- export { ctx, instrument, markAsImmediate, span, trace, withBaggage, withNewContext, withTracing };
3
+ export { ctx, getActiveTraceContext, instrument, span, trace, withBaggage, withNewContext, withTracing };
package/dist/http.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_config = require('./config.cjs');
3
- const require_track = require('./track-eovhCJ-I.cjs');
3
+ const require_track = require('./track-BI6dmZ2X.cjs');
4
4
  let _opentelemetry_api = require("@opentelemetry/api");
5
5
 
6
6
  //#region src/http.ts
@@ -231,9 +231,9 @@ function extractStatusCode(result) {
231
231
  *
232
232
  * @example With baggage
233
233
  * ```typescript
234
- * import { trace, withBaggage, injectTraceContext } from 'autotel'
234
+ * import { trace, withTracing, withBaggage, injectTraceContext } from 'autotel'
235
235
  *
236
- * export const createOrder = trace((ctx) => async (order: Order) => {
236
+ * export const createOrder = withTracing({})((ctx) => async (order: Order) => {
237
237
  * return await withBaggage({
238
238
  * baggage: { 'tenant.id': order.tenantId },
239
239
  * fn: async () => {
@@ -261,7 +261,7 @@ function injectTraceContext(headers = {}) {
261
261
  *
262
262
  * @example
263
263
  * ```typescript
264
- * import { extractTraceContext, trace } from 'autotel'
264
+ * import { extractTraceContext, trace, withTracing } from 'autotel'
265
265
  * import { context } from 'autotel'
266
266
  *
267
267
  * // In Express middleware
@@ -275,7 +275,7 @@ function injectTraceContext(headers = {}) {
275
275
  *
276
276
  * @example In a traced function
277
277
  * ```typescript
278
- * export const handleWebhook = trace((ctx) => async (req: Request) => {
278
+ * export const handleWebhook = withTracing({})((ctx) => async (req: Request) => {
279
279
  * const extractedContext = extractTraceContext(req.headers);
280
280
  * return await context.with(extractedContext, async () => {
281
281
  * // Now ctx.getBaggage() will return baggage from the incoming request
package/dist/http.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.cjs","names":["getConfig","SpanStatusCode","getActiveContextWithBaggage","propagation","context"],"sources":["../src/http.ts"],"sourcesContent":["/**\n * HTTP Instrumentation Helpers\n *\n * Optional import: Not included in main bundle\n * Import from: 'autotel/http'\n *\n * Provides decorators and utilities for HTTP client instrumentation.\n * Works with fetch, axios, and other HTTP clients.\n *\n * @example\n * ```typescript\n * import { HttpInstrumented } from 'autotel/http'\n *\n * @HttpInstrumented()\n * class ApiClient {\n * async getUser(id: string) {\n * return fetch(`/api/users/${id}`)\n * }\n * }\n * ```\n */\n\nimport { SpanStatusCode, context, propagation } from '@opentelemetry/api';\nimport { getConfig } from './config';\nimport { getActiveContextWithBaggage } from './trace-context';\n\nexport interface HttpInstrumentedOptions {\n /** Service name for HTTP calls (default: 'http-client') */\n serviceName?: string;\n /** Extract URL from method arguments (default: first arg) */\n urlExtractor?: (args: unknown[]) => string | undefined;\n /** Extract HTTP method from method name or args */\n methodExtractor?: (methodName: string, args: unknown[]) => string;\n /** Add custom attributes to spans */\n attributesFromArgs?: (args: unknown[]) => Record<string, string | number>;\n /** Slow request threshold in milliseconds (adds warning attribute) - default: 3000ms */\n slowRequestThresholdMs?: number;\n}\n\n/**\n * Decorator for auto-instrumenting HTTP client methods\n *\n * @example Basic usage\n * ```typescript\n * @HttpInstrumented()\n * class ApiClient {\n * async fetchUser(userId: string) {\n * const res = await fetch(`https://api.example.com/users/${userId}`)\n * return res.json()\n * }\n *\n * async createOrder(order: Order) {\n * const res = await fetch('https://api.example.com/orders', {\n * method: 'POST',\n * body: JSON.stringify(order)\n * })\n * return res.json()\n * }\n * }\n * ```\n *\n * @example Advanced usage with custom extractors\n * ```typescript\n * @HttpInstrumented({\n * serviceName: 'payment-gateway',\n * urlExtractor: (args) => {\n * const config = args[0] as RequestConfig\n * return config.url\n * },\n * attributesFromArgs: (args) => ({\n * 'http.request_id': args[0]?.requestId,\n * 'http.retry_count': args[0]?.retryCount || 0\n * })\n * })\n * class PaymentClient {\n * async charge(config: RequestConfig) {\n * return axios(config)\n * }\n * }\n * ```\n */\nexport function HttpInstrumented(options: HttpInstrumentedOptions = {}) {\n const serviceName = options.serviceName || 'http-client';\n const slowRequestThresholdMs = options.slowRequestThresholdMs ?? 3000;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type\n return function <T extends { new (...args: any[]): {} }>(\n target: T,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _context: ClassDecoratorContext,\n ) {\n return class extends target {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n\n const proto = target.prototype;\n const methodNames = Object.getOwnPropertyNames(proto).filter(\n (name) =>\n name !== 'constructor' &&\n typeof proto[name] === 'function' &&\n !name.startsWith('_'),\n );\n\n for (const methodName of methodNames) {\n const originalMethod = proto[methodName];\n\n if (\n originalMethod.constructor.name === 'AsyncFunction' ||\n originalMethod.toString().startsWith('async ')\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wrappedMethod = async (...args: any[]) => {\n const config = getConfig();\n const tracer = config.tracer;\n\n const url = options.urlExtractor\n ? options.urlExtractor(args)\n : (args[0] as string | undefined);\n\n const method = options.methodExtractor\n ? options.methodExtractor(methodName, args)\n : inferHttpMethod(methodName);\n\n const spanName = url\n ? `HTTP ${method} ${extractPath(url)}`\n : `HTTP ${method}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'http.method': method,\n 'http.url': url || 'unknown',\n 'service.name': serviceName,\n 'operation.name': `${serviceName}.${methodName}`,\n });\n\n if (url) {\n const urlObj = parseUrl(url);\n span.setAttributes({\n 'http.scheme': urlObj.protocol,\n 'http.host': urlObj.host,\n 'http.target': urlObj.path,\n });\n }\n\n if (options.attributesFromArgs) {\n span.setAttributes(options.attributesFromArgs(args));\n }\n\n const result = await originalMethod.apply(this, args);\n\n const duration = performance.now() - startTime;\n\n // Extract status code from response\n const statusCode = extractStatusCode(result);\n if (statusCode) {\n span.setAttribute('http.status_code', statusCode);\n\n if (statusCode >= 400) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `HTTP ${statusCode}`,\n });\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n\n span.setAttributes({\n 'http.duration_ms': duration,\n });\n\n // Mark slow requests for investigation\n if (duration > slowRequestThresholdMs) {\n span.setAttribute('http.slow_request', true);\n span.setAttribute(\n 'http.slow_request_threshold_ms',\n slowRequestThresholdMs,\n );\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'http.duration_ms': duration,\n 'error.type':\n error instanceof Error\n ? error.constructor.name\n : 'Unknown',\n 'error.message':\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n throw error;\n } finally {\n span.end();\n }\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this as any)[methodName] = wrappedMethod;\n }\n }\n }\n };\n };\n}\n\n/**\n * Helper: Trace a single HTTP request\n *\n * @example\n * ```typescript\n * import { traceHttpRequest } from 'autotel/http'\n *\n * const data = await traceHttpRequest(\n * 'GET /api/users',\n * () => fetch('https://api.example.com/users')\n * )\n * ```\n */\nexport async function traceHttpRequest<T>(\n spanName: string,\n fn: () => Promise<T>,\n attributes?: Record<string, string | number>,\n): Promise<T> {\n const config = getConfig();\n const tracer = config.tracer;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n try {\n if (attributes) {\n span.setAttributes(attributes);\n }\n\n const result = await fn();\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\n// Helper functions\n\nfunction inferHttpMethod(methodName: string): string {\n const lower = methodName.toLowerCase();\n if (\n lower.includes('get') ||\n lower.includes('fetch') ||\n lower.includes('list')\n )\n return 'GET';\n if (lower.includes('post') || lower.includes('create')) return 'POST';\n if (lower.includes('put') || lower.includes('update')) return 'PUT';\n if (lower.includes('delete') || lower.includes('remove')) return 'DELETE';\n if (lower.includes('patch')) return 'PATCH';\n return 'GET'; // Default\n}\n\nfunction extractPath(url: string): string {\n try {\n const urlObj = new URL(url);\n return urlObj.pathname;\n } catch {\n // Relative URL or invalid\n return url.split('?')[0] || url;\n }\n}\n\nfunction parseUrl(url: string): {\n protocol: string;\n host: string;\n path: string;\n} {\n try {\n const urlObj = new URL(url);\n return {\n protocol: urlObj.protocol.replace(':', ''),\n host: urlObj.host,\n path: urlObj.pathname + urlObj.search,\n };\n } catch {\n return {\n protocol: 'http',\n host: 'unknown',\n path: url,\n };\n }\n}\n\nfunction extractStatusCode(result: unknown): number | undefined {\n if (result && typeof result === 'object') {\n // Check for Response.status (fetch API)\n if ('status' in result && typeof result.status === 'number') {\n return result.status;\n }\n // Check for statusCode (axios, node http)\n if ('statusCode' in result && typeof result.statusCode === 'number') {\n return result.statusCode;\n }\n }\n return undefined;\n}\n\n/**\n * Inject trace context into HTTP headers (for distributed tracing)\n *\n * This includes W3C Trace Context (traceparent, tracestate) and W3C Baggage headers.\n * Uses OpenTelemetry's propagation system for full compatibility.\n *\n * @example\n * ```typescript\n * import { injectTraceContext } from 'autotel/http'\n *\n * const headers = injectTraceContext({\n * 'Content-Type': 'application/json'\n * })\n *\n * fetch('/api/users', { headers })\n * ```\n *\n * @example With baggage\n * ```typescript\n * import { trace, withBaggage, injectTraceContext } from 'autotel'\n *\n * export const createOrder = trace((ctx) => async (order: Order) => {\n * return await withBaggage({\n * baggage: { 'tenant.id': order.tenantId },\n * fn: async () => {\n * const headers = injectTraceContext();\n * // Headers now include 'baggage' header with tenant.id\n * await fetch('/api/charge', { headers });\n * },\n * });\n * });\n * ```\n */\nexport function injectTraceContext(\n headers: Record<string, string> = {},\n): Record<string, string> {\n // Use getActiveContextWithBaggage to check stored context (from baggage setters)\n // This ensures ctx.setBaggage() changes are included in injected headers\n const currentContext = getActiveContextWithBaggage();\n\n // Use OpenTelemetry's propagation.inject for full W3C support\n // This includes traceparent, tracestate, and baggage headers\n propagation.inject(currentContext, headers);\n\n return headers;\n}\n\n/**\n * Extract trace context from HTTP headers (for distributed tracing)\n *\n * This extracts W3C Trace Context (traceparent, tracestate) and W3C Baggage headers.\n * Uses OpenTelemetry's propagation system for full compatibility.\n *\n * Returns a context that can be used with context.with() to run code\n * with the extracted trace context and baggage.\n *\n * @example\n * ```typescript\n * import { extractTraceContext, trace } from 'autotel'\n * import { context } from 'autotel'\n *\n * // In Express middleware\n * app.use((req, res, next) => {\n * const extractedContext = extractTraceContext(req.headers);\n * context.with(extractedContext, () => {\n * next();\n * });\n * });\n * ```\n *\n * @example In a traced function\n * ```typescript\n * export const handleWebhook = trace((ctx) => async (req: Request) => {\n * const extractedContext = extractTraceContext(req.headers);\n * return await context.with(extractedContext, async () => {\n * // Now ctx.getBaggage() will return baggage from the incoming request\n * const tenantId = ctx.getBaggage('tenant.id');\n * await processWebhook(req.body);\n * });\n * });\n * ```\n */\nexport function extractTraceContext(\n headers: Record<string, string | string[] | undefined>,\n): ReturnType<typeof context.active> {\n const carrier: Record<string, string> = {};\n\n // Convert headers to flat string format expected by propagation\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n carrier[key] = Array.isArray(value) ? (value[0] ?? '') : value;\n }\n }\n\n // Extract context using OpenTelemetry's propagation system\n // Returns a Context that can be used with context.with()\n return propagation.extract(context.active(), carrier);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"http.cjs","names":["getConfig","SpanStatusCode","getActiveContextWithBaggage","propagation","context"],"sources":["../src/http.ts"],"sourcesContent":["/**\n * HTTP Instrumentation Helpers\n *\n * Optional import: Not included in main bundle\n * Import from: 'autotel/http'\n *\n * Provides decorators and utilities for HTTP client instrumentation.\n * Works with fetch, axios, and other HTTP clients.\n *\n * @example\n * ```typescript\n * import { HttpInstrumented } from 'autotel/http'\n *\n * @HttpInstrumented()\n * class ApiClient {\n * async getUser(id: string) {\n * return fetch(`/api/users/${id}`)\n * }\n * }\n * ```\n */\n\nimport { SpanStatusCode, context, propagation } from '@opentelemetry/api';\nimport { getConfig } from './config';\nimport { getActiveContextWithBaggage } from './trace-context';\n\nexport interface HttpInstrumentedOptions {\n /** Service name for HTTP calls (default: 'http-client') */\n serviceName?: string;\n /** Extract URL from method arguments (default: first arg) */\n urlExtractor?: (args: unknown[]) => string | undefined;\n /** Extract HTTP method from method name or args */\n methodExtractor?: (methodName: string, args: unknown[]) => string;\n /** Add custom attributes to spans */\n attributesFromArgs?: (args: unknown[]) => Record<string, string | number>;\n /** Slow request threshold in milliseconds (adds warning attribute) - default: 3000ms */\n slowRequestThresholdMs?: number;\n}\n\n/**\n * Decorator for auto-instrumenting HTTP client methods\n *\n * @example Basic usage\n * ```typescript\n * @HttpInstrumented()\n * class ApiClient {\n * async fetchUser(userId: string) {\n * const res = await fetch(`https://api.example.com/users/${userId}`)\n * return res.json()\n * }\n *\n * async createOrder(order: Order) {\n * const res = await fetch('https://api.example.com/orders', {\n * method: 'POST',\n * body: JSON.stringify(order)\n * })\n * return res.json()\n * }\n * }\n * ```\n *\n * @example Advanced usage with custom extractors\n * ```typescript\n * @HttpInstrumented({\n * serviceName: 'payment-gateway',\n * urlExtractor: (args) => {\n * const config = args[0] as RequestConfig\n * return config.url\n * },\n * attributesFromArgs: (args) => ({\n * 'http.request_id': args[0]?.requestId,\n * 'http.retry_count': args[0]?.retryCount || 0\n * })\n * })\n * class PaymentClient {\n * async charge(config: RequestConfig) {\n * return axios(config)\n * }\n * }\n * ```\n */\nexport function HttpInstrumented(options: HttpInstrumentedOptions = {}) {\n const serviceName = options.serviceName || 'http-client';\n const slowRequestThresholdMs = options.slowRequestThresholdMs ?? 3000;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type\n return function <T extends { new (...args: any[]): {} }>(\n target: T,\n _context: ClassDecoratorContext,\n ) {\n return class extends target {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n\n const proto = target.prototype;\n const methodNames = Object.getOwnPropertyNames(proto).filter(\n (name) =>\n name !== 'constructor' &&\n typeof proto[name] === 'function' &&\n !name.startsWith('_'),\n );\n\n for (const methodName of methodNames) {\n const originalMethod = proto[methodName];\n\n if (\n originalMethod.constructor.name === 'AsyncFunction' ||\n originalMethod.toString().startsWith('async ')\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wrappedMethod = async (...args: any[]) => {\n const config = getConfig();\n const tracer = config.tracer;\n\n const url = options.urlExtractor\n ? options.urlExtractor(args)\n : (args[0] as string | undefined);\n\n const method = options.methodExtractor\n ? options.methodExtractor(methodName, args)\n : inferHttpMethod(methodName);\n\n const spanName = url\n ? `HTTP ${method} ${extractPath(url)}`\n : `HTTP ${method}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'http.method': method,\n 'http.url': url || 'unknown',\n 'service.name': serviceName,\n 'operation.name': `${serviceName}.${methodName}`,\n });\n\n if (url) {\n const urlObj = parseUrl(url);\n span.setAttributes({\n 'http.scheme': urlObj.protocol,\n 'http.host': urlObj.host,\n 'http.target': urlObj.path,\n });\n }\n\n if (options.attributesFromArgs) {\n span.setAttributes(options.attributesFromArgs(args));\n }\n\n const result = await originalMethod.apply(this, args);\n\n const duration = performance.now() - startTime;\n\n // Extract status code from response\n const statusCode = extractStatusCode(result);\n if (statusCode) {\n span.setAttribute('http.status_code', statusCode);\n\n if (statusCode >= 400) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `HTTP ${statusCode}`,\n });\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n\n span.setAttributes({\n 'http.duration_ms': duration,\n });\n\n // Mark slow requests for investigation\n if (duration > slowRequestThresholdMs) {\n span.setAttribute('http.slow_request', true);\n span.setAttribute(\n 'http.slow_request_threshold_ms',\n slowRequestThresholdMs,\n );\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'http.duration_ms': duration,\n 'error.type':\n error instanceof Error\n ? error.constructor.name\n : 'Unknown',\n 'error.message':\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n throw error;\n } finally {\n span.end();\n }\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this as any)[methodName] = wrappedMethod;\n }\n }\n }\n };\n };\n}\n\n/**\n * Helper: Trace a single HTTP request\n *\n * @example\n * ```typescript\n * import { traceHttpRequest } from 'autotel/http'\n *\n * const data = await traceHttpRequest(\n * 'GET /api/users',\n * () => fetch('https://api.example.com/users')\n * )\n * ```\n */\nexport async function traceHttpRequest<T>(\n spanName: string,\n fn: () => Promise<T>,\n attributes?: Record<string, string | number>,\n): Promise<T> {\n const config = getConfig();\n const tracer = config.tracer;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n try {\n if (attributes) {\n span.setAttributes(attributes);\n }\n\n const result = await fn();\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\n// Helper functions\n\nfunction inferHttpMethod(methodName: string): string {\n const lower = methodName.toLowerCase();\n if (\n lower.includes('get') ||\n lower.includes('fetch') ||\n lower.includes('list')\n )\n return 'GET';\n if (lower.includes('post') || lower.includes('create')) return 'POST';\n if (lower.includes('put') || lower.includes('update')) return 'PUT';\n if (lower.includes('delete') || lower.includes('remove')) return 'DELETE';\n if (lower.includes('patch')) return 'PATCH';\n return 'GET'; // Default\n}\n\nfunction extractPath(url: string): string {\n try {\n const urlObj = new URL(url);\n return urlObj.pathname;\n } catch {\n // Relative URL or invalid\n return url.split('?')[0] || url;\n }\n}\n\nfunction parseUrl(url: string): {\n protocol: string;\n host: string;\n path: string;\n} {\n try {\n const urlObj = new URL(url);\n return {\n protocol: urlObj.protocol.replace(':', ''),\n host: urlObj.host,\n path: urlObj.pathname + urlObj.search,\n };\n } catch {\n return {\n protocol: 'http',\n host: 'unknown',\n path: url,\n };\n }\n}\n\nfunction extractStatusCode(result: unknown): number | undefined {\n if (result && typeof result === 'object') {\n // Check for Response.status (fetch API)\n if ('status' in result && typeof result.status === 'number') {\n return result.status;\n }\n // Check for statusCode (axios, node http)\n if ('statusCode' in result && typeof result.statusCode === 'number') {\n return result.statusCode;\n }\n }\n return undefined;\n}\n\n/**\n * Inject trace context into HTTP headers (for distributed tracing)\n *\n * This includes W3C Trace Context (traceparent, tracestate) and W3C Baggage headers.\n * Uses OpenTelemetry's propagation system for full compatibility.\n *\n * @example\n * ```typescript\n * import { injectTraceContext } from 'autotel/http'\n *\n * const headers = injectTraceContext({\n * 'Content-Type': 'application/json'\n * })\n *\n * fetch('/api/users', { headers })\n * ```\n *\n * @example With baggage\n * ```typescript\n * import { trace, withTracing, withBaggage, injectTraceContext } from 'autotel'\n *\n * export const createOrder = withTracing({})((ctx) => async (order: Order) => {\n * return await withBaggage({\n * baggage: { 'tenant.id': order.tenantId },\n * fn: async () => {\n * const headers = injectTraceContext();\n * // Headers now include 'baggage' header with tenant.id\n * await fetch('/api/charge', { headers });\n * },\n * });\n * });\n * ```\n */\nexport function injectTraceContext(\n headers: Record<string, string> = {},\n): Record<string, string> {\n // Use getActiveContextWithBaggage to check stored context (from baggage setters)\n // This ensures ctx.setBaggage() changes are included in injected headers\n const currentContext = getActiveContextWithBaggage();\n\n // Use OpenTelemetry's propagation.inject for full W3C support\n // This includes traceparent, tracestate, and baggage headers\n propagation.inject(currentContext, headers);\n\n return headers;\n}\n\n/**\n * Extract trace context from HTTP headers (for distributed tracing)\n *\n * This extracts W3C Trace Context (traceparent, tracestate) and W3C Baggage headers.\n * Uses OpenTelemetry's propagation system for full compatibility.\n *\n * Returns a context that can be used with context.with() to run code\n * with the extracted trace context and baggage.\n *\n * @example\n * ```typescript\n * import { extractTraceContext, trace, withTracing } from 'autotel'\n * import { context } from 'autotel'\n *\n * // In Express middleware\n * app.use((req, res, next) => {\n * const extractedContext = extractTraceContext(req.headers);\n * context.with(extractedContext, () => {\n * next();\n * });\n * });\n * ```\n *\n * @example In a traced function\n * ```typescript\n * export const handleWebhook = withTracing({})((ctx) => async (req: Request) => {\n * const extractedContext = extractTraceContext(req.headers);\n * return await context.with(extractedContext, async () => {\n * // Now ctx.getBaggage() will return baggage from the incoming request\n * const tenantId = ctx.getBaggage('tenant.id');\n * await processWebhook(req.body);\n * });\n * });\n * ```\n */\nexport function extractTraceContext(\n headers: Record<string, string | string[] | undefined>,\n): ReturnType<typeof context.active> {\n const carrier: Record<string, string> = {};\n\n // Convert headers to flat string format expected by propagation\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n carrier[key] = Array.isArray(value) ? (value[0] ?? '') : value;\n }\n }\n\n // Extract context using OpenTelemetry's propagation system\n // Returns a Context that can be used with context.with()\n return propagation.extract(context.active(), carrier);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFA,SAAgB,iBAAiB,UAAmC,CAAC,GAAG;CACtE,MAAM,cAAc,QAAQ,eAAe;CAC3C,MAAM,yBAAyB,QAAQ,0BAA0B;CAGjE,OAAO,SACL,QACA,UACA;EACA,OAAO,cAAc,OAAO;GAE1B,YAAY,GAAG,MAAa;IAC1B,MAAM,GAAG,IAAI;IAEb,MAAM,QAAQ,OAAO;IACrB,MAAM,cAAc,OAAO,oBAAoB,KAAK,CAAC,CAAC,QACnD,SACC,SAAS,iBACT,OAAO,MAAM,UAAU,cACvB,CAAC,KAAK,WAAW,GAAG,CACxB;IAEA,KAAK,MAAM,cAAc,aAAa;KACpC,MAAM,iBAAiB,MAAM;KAE7B,IACE,eAAe,YAAY,SAAS,mBACpC,eAAe,SAAS,CAAC,CAAC,WAAW,QAAQ,GAC7C;MAEA,MAAM,gBAAgB,OAAO,GAAG,SAAgB;OAE9C,MAAM,SADSA,yBACK,CAAC,CAAC;OAEtB,MAAM,MAAM,QAAQ,eAChB,QAAQ,aAAa,IAAI,IACxB,KAAK;OAEV,MAAM,SAAS,QAAQ,kBACnB,QAAQ,gBAAgB,YAAY,IAAI,IACxC,gBAAgB,UAAU;OAE9B,MAAM,WAAW,MACb,QAAQ,OAAO,GAAG,YAAY,GAAG,MACjC,QAAQ;OAEZ,OAAO,OAAO,gBAAgB,UAAU,OAAO,SAAS;QACtD,MAAM,YAAY,YAAY,IAAI;QAElC,IAAI;SACF,KAAK,cAAc;UACjB,eAAe;UACf,YAAY,OAAO;UACnB,gBAAgB;UAChB,kBAAkB,GAAG,YAAY,GAAG;SACtC,CAAC;SAED,IAAI,KAAK;UACP,MAAM,SAAS,SAAS,GAAG;UAC3B,KAAK,cAAc;WACjB,eAAe,OAAO;WACtB,aAAa,OAAO;WACpB,eAAe,OAAO;UACxB,CAAC;SACH;SAEA,IAAI,QAAQ,oBACV,KAAK,cAAc,QAAQ,mBAAmB,IAAI,CAAC;SAGrD,MAAM,SAAS,MAAM,eAAe,MAAM,MAAM,IAAI;SAEpD,MAAM,WAAW,YAAY,IAAI,IAAI;SAGrC,MAAM,aAAa,kBAAkB,MAAM;SAC3C,IAAI,YAAY;UACd,KAAK,aAAa,oBAAoB,UAAU;UAEhD,IAAI,cAAc,KAChB,KAAK,UAAU;WACb,MAAMC,kCAAe;WACrB,SAAS,QAAQ;UACnB,CAAC;eAED,KAAK,UAAU,EAAE,MAAMA,kCAAe,GAAG,CAAC;SAE9C,OACE,KAAK,UAAU,EAAE,MAAMA,kCAAe,GAAG,CAAC;SAG5C,KAAK,cAAc,EACjB,oBAAoB,SACtB,CAAC;SAGD,IAAI,WAAW,wBAAwB;UACrC,KAAK,aAAa,qBAAqB,IAAI;UAC3C,KAAK,aACH,kCACA,sBACF;SACF;SAEA,OAAO;QACT,SAAS,OAAO;SACd,MAAM,WAAW,YAAY,IAAI,IAAI;SAErC,KAAK,UAAU;UACb,MAAMA,kCAAe;UACrB,SACE,iBAAiB,QAAQ,MAAM,UAAU;SAC7C,CAAC;SAED,KAAK,cAAc;UACjB,oBAAoB;UACpB,cACE,iBAAiB,QACb,MAAM,YAAY,OAClB;UACN,iBACE,iBAAiB,QAAQ,MAAM,UAAU;SAC7C,CAAC;SAED,MAAM;QACR,UAAU;SACR,KAAK,IAAI;QACX;OACF,CAAC;MACH;MAGA,AAAC,KAAa,cAAc;KAC9B;IACF;GACF;EACF;CACF;AACF;;;;;;;;;;;;;;AAeA,eAAsB,iBACpB,UACA,IACA,YACY;CAIZ,OAHeD,yBACK,CAAC,CAAC,OAER,gBAAgB,UAAU,OAAO,SAAS;EACtD,IAAI;GACF,IAAI,YACF,KAAK,cAAc,UAAU;GAG/B,MAAM,SAAS,MAAM,GAAG;GACxB,KAAK,UAAU,EAAE,MAAMC,kCAAe,GAAG,CAAC;GAC1C,OAAO;EACT,SAAS,OAAO;GACd,KAAK,UAAU;IACb,MAAMA,kCAAe;IACrB,SAAS,iBAAiB,QAAQ,MAAM,UAAU;GACpD,CAAC;GACD,MAAM;EACR,UAAU;GACR,KAAK,IAAI;EACX;CACF,CAAC;AACH;AAIA,SAAS,gBAAgB,YAA4B;CACnD,MAAM,QAAQ,WAAW,YAAY;CACrC,IACE,MAAM,SAAS,KAAK,KACpB,MAAM,SAAS,OAAO,KACtB,MAAM,SAAS,MAAM,GAErB,OAAO;CACT,IAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,QAAQ,GAAG,OAAO;CAC/D,IAAI,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,QAAQ,GAAG,OAAO;CAC9D,IAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,QAAQ,GAAG,OAAO;CACjE,IAAI,MAAM,SAAS,OAAO,GAAG,OAAO;CACpC,OAAO;AACT;AAEA,SAAS,YAAY,KAAqB;CACxC,IAAI;EAEF,OAAO,IADY,IAAI,GACX,CAAC,CAAC;CAChB,QAAQ;EAEN,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;CAC9B;AACF;AAEA,SAAS,SAAS,KAIhB;CACA,IAAI;EACF,MAAM,SAAS,IAAI,IAAI,GAAG;EAC1B,OAAO;GACL,UAAU,OAAO,SAAS,QAAQ,KAAK,EAAE;GACzC,MAAM,OAAO;GACb,MAAM,OAAO,WAAW,OAAO;EACjC;CACF,QAAQ;EACN,OAAO;GACL,UAAU;GACV,MAAM;GACN,MAAM;EACR;CACF;AACF;AAEA,SAAS,kBAAkB,QAAqC;CAC9D,IAAI,UAAU,OAAO,WAAW,UAAU;EAExC,IAAI,YAAY,UAAU,OAAO,OAAO,WAAW,UACjD,OAAO,OAAO;EAGhB,IAAI,gBAAgB,UAAU,OAAO,OAAO,eAAe,UACzD,OAAO,OAAO;CAElB;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,mBACd,UAAkC,CAAC,GACX;CAGxB,MAAM,iBAAiBC,0CAA4B;CAInD,+BAAY,OAAO,gBAAgB,OAAO;CAE1C,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,oBACd,SACmC;CACnC,MAAM,UAAkC,CAAC;CAGzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,UAAU,QACZ,QAAQ,OAAO,MAAM,QAAQ,KAAK,IAAK,MAAM,MAAM,KAAM;CAM7D,OAAOC,+BAAY,QAAQC,2BAAQ,OAAO,GAAG,OAAO;AACtD"}
package/dist/http.d.cts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { context } from "@opentelemetry/api";
2
-
3
2
  //#region src/http.d.ts
4
3
  interface HttpInstrumentedOptions {
5
4
  /** Service name for HTTP calls (default: 'http-client') */
@@ -93,9 +92,9 @@ declare function traceHttpRequest<T>(spanName: string, fn: () => Promise<T>, att
93
92
  *
94
93
  * @example With baggage
95
94
  * ```typescript
96
- * import { trace, withBaggage, injectTraceContext } from 'autotel'
95
+ * import { trace, withTracing, withBaggage, injectTraceContext } from 'autotel'
97
96
  *
98
- * export const createOrder = trace((ctx) => async (order: Order) => {
97
+ * export const createOrder = withTracing({})((ctx) => async (order: Order) => {
99
98
  * return await withBaggage({
100
99
  * baggage: { 'tenant.id': order.tenantId },
101
100
  * fn: async () => {
@@ -119,7 +118,7 @@ declare function injectTraceContext(headers?: Record<string, string>): Record<st
119
118
  *
120
119
  * @example
121
120
  * ```typescript
122
- * import { extractTraceContext, trace } from 'autotel'
121
+ * import { extractTraceContext, trace, withTracing } from 'autotel'
123
122
  * import { context } from 'autotel'
124
123
  *
125
124
  * // In Express middleware
@@ -133,7 +132,7 @@ declare function injectTraceContext(headers?: Record<string, string>): Record<st
133
132
  *
134
133
  * @example In a traced function
135
134
  * ```typescript
136
- * export const handleWebhook = trace((ctx) => async (req: Request) => {
135
+ * export const handleWebhook = withTracing({})((ctx) => async (req: Request) => {
137
136
  * const extractedContext = extractTraceContext(req.headers);
138
137
  * return await context.with(extractedContext, async () => {
139
138
  * // Now ctx.getBaggage() will return baggage from the incoming request
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.cts","names":[],"sources":["../src/http.ts"],"mappings":";;;UA0BiB,uBAAA;EA6DL;EA3DV,WAAA;;EAEA,YAAA,IAAgB,IAAA;;EAEhB,eAAA,IAAmB,UAAA,UAAoB,IAAA;EAiDR;EA/C/B,kBAAA,IAAsB,IAAA,gBAAoB,MAAM;EAoDX;EAlDrC,sBAAA;AAAA;;;;;;;AAuMF;;;;;;;;;;;;;;;;;;;;AAIY;AAwHZ;;;;;;;;AAES;AA+CT;;;;;;iBAvUgB,gBAAA,CAAiB,OAAA,GAAS,uBAAA;EAAA,QAKH,IAAA;AAAA,GACnC,MAAA,EAAQ,CAAA,EAER,QAAA,EAAU,qBAAA;EAAA;;;;;AAiUqB;;;;;;;;;;iBA/Kb,gBAAA,IACpB,QAAA,UACA,EAAA,QAAU,OAAA,CAAQ,CAAA,GAClB,UAAA,GAAa,MAAA,4BACZ,OAAA,CAAQ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwHK,kBAAA,CACd,OAAA,GAAS,MAAA,mBACR,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+CO,mBAAA,CACd,OAAA,EAAS,MAAA,0CACR,UAAA,QAAkB,OAAA,CAAQ,MAAA"}
1
+ {"version":3,"file":"http.d.cts","names":[],"sources":["../src/http.ts"],"mappings":";;UA0BiB;;EAEf;;EAEA,gBAAgB;;EAEhB,mBAAmB,oBAAoB;;EAEvC,sBAAsB,oBAAoB;;EAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6Cc,iBAAiB,UAAS,2BAKvB;UAAoB;GACnC,QAAQ,GACR,UAAU;UAIa;IA+H1B;;;;;;;;;;;;;;iBAeqB,iBAAiB,GACrC,kBACA,UAAU,QAAQ,IAClB,aAAa,kCACZ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwHK,mBACd,UAAS,yBACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+Ca,oBACd,SAAS,gDACR,kBAAkB,QAAQ"}
package/dist/http.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { context } from "@opentelemetry/api";
2
-
3
2
  //#region src/http.d.ts
4
3
  interface HttpInstrumentedOptions {
5
4
  /** Service name for HTTP calls (default: 'http-client') */
@@ -93,9 +92,9 @@ declare function traceHttpRequest<T>(spanName: string, fn: () => Promise<T>, att
93
92
  *
94
93
  * @example With baggage
95
94
  * ```typescript
96
- * import { trace, withBaggage, injectTraceContext } from 'autotel'
95
+ * import { trace, withTracing, withBaggage, injectTraceContext } from 'autotel'
97
96
  *
98
- * export const createOrder = trace((ctx) => async (order: Order) => {
97
+ * export const createOrder = withTracing({})((ctx) => async (order: Order) => {
99
98
  * return await withBaggage({
100
99
  * baggage: { 'tenant.id': order.tenantId },
101
100
  * fn: async () => {
@@ -119,7 +118,7 @@ declare function injectTraceContext(headers?: Record<string, string>): Record<st
119
118
  *
120
119
  * @example
121
120
  * ```typescript
122
- * import { extractTraceContext, trace } from 'autotel'
121
+ * import { extractTraceContext, trace, withTracing } from 'autotel'
123
122
  * import { context } from 'autotel'
124
123
  *
125
124
  * // In Express middleware
@@ -133,7 +132,7 @@ declare function injectTraceContext(headers?: Record<string, string>): Record<st
133
132
  *
134
133
  * @example In a traced function
135
134
  * ```typescript
136
- * export const handleWebhook = trace((ctx) => async (req: Request) => {
135
+ * export const handleWebhook = withTracing({})((ctx) => async (req: Request) => {
137
136
  * const extractedContext = extractTraceContext(req.headers);
138
137
  * return await context.with(extractedContext, async () => {
139
138
  * // Now ctx.getBaggage() will return baggage from the incoming request
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","names":[],"sources":["../src/http.ts"],"mappings":";;;UA0BiB,uBAAA;EA6DL;EA3DV,WAAA;;EAEA,YAAA,IAAgB,IAAA;;EAEhB,eAAA,IAAmB,UAAA,UAAoB,IAAA;EAiDR;EA/C/B,kBAAA,IAAsB,IAAA,gBAAoB,MAAM;EAoDX;EAlDrC,sBAAA;AAAA;;;;;;;AAuMF;;;;;;;;;;;;;;;;;;;;AAIY;AAwHZ;;;;;;;;AAES;AA+CT;;;;;;iBAvUgB,gBAAA,CAAiB,OAAA,GAAS,uBAAA;EAAA,QAKH,IAAA;AAAA,GACnC,MAAA,EAAQ,CAAA,EAER,QAAA,EAAU,qBAAA;EAAA;;;;;AAiUqB;;;;;;;;;;iBA/Kb,gBAAA,IACpB,QAAA,UACA,EAAA,QAAU,OAAA,CAAQ,CAAA,GAClB,UAAA,GAAa,MAAA,4BACZ,OAAA,CAAQ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwHK,kBAAA,CACd,OAAA,GAAS,MAAA,mBACR,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+CO,mBAAA,CACd,OAAA,EAAS,MAAA,0CACR,UAAA,QAAkB,OAAA,CAAQ,MAAA"}
1
+ {"version":3,"file":"http.d.ts","names":[],"sources":["../src/http.ts"],"mappings":";;UA0BiB;;EAEf;;EAEA,gBAAgB;;EAEhB,mBAAmB,oBAAoB;;EAEvC,sBAAsB,oBAAoB;;EAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6Cc,iBAAiB,UAAS,2BAKvB;UAAoB;GACnC,QAAQ,GACR,UAAU;UAIa;IA+H1B;;;;;;;;;;;;;;iBAeqB,iBAAiB,GACrC,kBACA,UAAU,QAAQ,IAClB,aAAa,kCACZ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwHK,mBACd,UAAS,yBACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+Ca,oBACd,SAAS,gDACR,kBAAkB,QAAQ"}
package/dist/http.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { getConfig } from "./config.js";
2
- import { g as getActiveContextWithBaggage } from "./track-D7O7oIZa.js";
2
+ import { h as getActiveContextWithBaggage } from "./track-BBcxEJEC.js";
3
3
  import { SpanStatusCode, context, propagation } from "@opentelemetry/api";
4
4
 
5
5
  //#region src/http.ts
@@ -230,9 +230,9 @@ function extractStatusCode(result) {
230
230
  *
231
231
  * @example With baggage
232
232
  * ```typescript
233
- * import { trace, withBaggage, injectTraceContext } from 'autotel'
233
+ * import { trace, withTracing, withBaggage, injectTraceContext } from 'autotel'
234
234
  *
235
- * export const createOrder = trace((ctx) => async (order: Order) => {
235
+ * export const createOrder = withTracing({})((ctx) => async (order: Order) => {
236
236
  * return await withBaggage({
237
237
  * baggage: { 'tenant.id': order.tenantId },
238
238
  * fn: async () => {
@@ -260,7 +260,7 @@ function injectTraceContext(headers = {}) {
260
260
  *
261
261
  * @example
262
262
  * ```typescript
263
- * import { extractTraceContext, trace } from 'autotel'
263
+ * import { extractTraceContext, trace, withTracing } from 'autotel'
264
264
  * import { context } from 'autotel'
265
265
  *
266
266
  * // In Express middleware
@@ -274,7 +274,7 @@ function injectTraceContext(headers = {}) {
274
274
  *
275
275
  * @example In a traced function
276
276
  * ```typescript
277
- * export const handleWebhook = trace((ctx) => async (req: Request) => {
277
+ * export const handleWebhook = withTracing({})((ctx) => async (req: Request) => {
278
278
  * const extractedContext = extractTraceContext(req.headers);
279
279
  * return await context.with(extractedContext, async () => {
280
280
  * // Now ctx.getBaggage() will return baggage from the incoming request