autotel 3.6.0 → 4.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 (617) hide show
  1. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts +175 -0
  2. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +1 -0
  3. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts +175 -0
  4. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +1 -0
  5. package/dist/attribute-redacting-processor.cjs +374 -33
  6. package/dist/attribute-redacting-processor.cjs.map +1 -1
  7. package/dist/attribute-redacting-processor.d.cts +2 -207
  8. package/dist/attribute-redacting-processor.d.ts +2 -207
  9. package/dist/attribute-redacting-processor.js +368 -2
  10. package/dist/attribute-redacting-processor.js.map +1 -1
  11. package/dist/attributes-CmYpdqCN.js +591 -0
  12. package/dist/attributes-CmYpdqCN.js.map +1 -0
  13. package/dist/attributes-PZ5doLgw.cjs +704 -0
  14. package/dist/attributes-PZ5doLgw.cjs.map +1 -0
  15. package/dist/attributes.cjs +21 -85
  16. package/dist/attributes.d.cts +2 -20
  17. package/dist/attributes.d.ts +2 -20
  18. package/dist/attributes.js +3 -5
  19. package/dist/auto.cjs +50 -28
  20. package/dist/auto.cjs.map +1 -1
  21. package/dist/auto.d.cts +1 -2
  22. package/dist/auto.d.ts +1 -2
  23. package/dist/auto.js +49 -23
  24. package/dist/auto.js.map +1 -1
  25. package/dist/business-baggage.cjs +357 -13
  26. package/dist/business-baggage.cjs.map +1 -1
  27. package/dist/business-baggage.d.cts +106 -139
  28. package/dist/business-baggage.d.cts.map +1 -0
  29. package/dist/business-baggage.d.ts +106 -139
  30. package/dist/business-baggage.d.ts.map +1 -0
  31. package/dist/business-baggage.js +357 -2
  32. package/dist/business-baggage.js.map +1 -1
  33. package/dist/canonical-log-line-processor--RlFDHhm.cjs +377 -0
  34. package/dist/canonical-log-line-processor--RlFDHhm.cjs.map +1 -0
  35. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts +147 -0
  36. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +1 -0
  37. package/dist/canonical-log-line-processor-DbBQT5vY.js +366 -0
  38. package/dist/canonical-log-line-processor-DbBQT5vY.js.map +1 -0
  39. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts +147 -0
  40. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +1 -0
  41. package/dist/config.cjs +118 -22
  42. package/dist/config.cjs.map +1 -1
  43. package/dist/config.d.cts +33 -45
  44. package/dist/config.d.cts.map +1 -0
  45. package/dist/config.d.ts +33 -45
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +116 -3
  48. package/dist/config.js.map +1 -1
  49. package/dist/correlated-events-Bzh5y-UB.js +28 -0
  50. package/dist/correlated-events-Bzh5y-UB.js.map +1 -0
  51. package/dist/correlated-events-kSwLo3mi.cjs +34 -0
  52. package/dist/correlated-events-kSwLo3mi.cjs.map +1 -0
  53. package/dist/correlation-id.cjs +11 -54
  54. package/dist/correlation-id.d.cts +6 -5
  55. package/dist/correlation-id.d.cts.map +1 -0
  56. package/dist/correlation-id.d.ts +6 -5
  57. package/dist/correlation-id.d.ts.map +1 -0
  58. package/dist/correlation-id.js +3 -17
  59. package/dist/db.cjs +244 -209
  60. package/dist/db.cjs.map +1 -1
  61. package/dist/db.d.cts +28 -26
  62. package/dist/db.d.cts.map +1 -0
  63. package/dist/db.d.ts +28 -26
  64. package/dist/db.d.ts.map +1 -0
  65. package/dist/db.js +243 -207
  66. package/dist/db.js.map +1 -1
  67. package/dist/decorators.cjs +39 -66
  68. package/dist/decorators.cjs.map +1 -1
  69. package/dist/decorators.d.cts +10 -37
  70. package/dist/decorators.d.cts.map +1 -0
  71. package/dist/decorators.d.ts +10 -37
  72. package/dist/decorators.d.ts.map +1 -0
  73. package/dist/decorators.js +38 -64
  74. package/dist/decorators.js.map +1 -1
  75. package/dist/define-event-CreknLm3.d.ts +25 -0
  76. package/dist/define-event-CreknLm3.d.ts.map +1 -0
  77. package/dist/define-event-HZRizPwz.d.cts +25 -0
  78. package/dist/define-event-HZRizPwz.d.cts.map +1 -0
  79. package/dist/drain-pipeline.cjs +111 -9
  80. package/dist/drain-pipeline.cjs.map +1 -1
  81. package/dist/drain-pipeline.d.cts +27 -32
  82. package/dist/drain-pipeline.d.cts.map +1 -0
  83. package/dist/drain-pipeline.d.ts +27 -32
  84. package/dist/drain-pipeline.d.ts.map +1 -0
  85. package/dist/drain-pipeline.js +111 -2
  86. package/dist/drain-pipeline.js.map +1 -1
  87. package/dist/enrichers.cjs +59 -66
  88. package/dist/enrichers.cjs.map +1 -1
  89. package/dist/enrichers.d.cts +15 -13
  90. package/dist/enrichers.d.cts.map +1 -0
  91. package/dist/enrichers.d.ts +15 -13
  92. package/dist/enrichers.d.ts.map +1 -0
  93. package/dist/enrichers.js +58 -65
  94. package/dist/enrichers.js.map +1 -1
  95. package/dist/event-Dlqr4ZNL.cjs +778 -0
  96. package/dist/event-Dlqr4ZNL.cjs.map +1 -0
  97. package/dist/event-_58ryBjh.js +761 -0
  98. package/dist/event-_58ryBjh.js.map +1 -0
  99. package/dist/event-subscriber-D1XLkPzi.d.cts +223 -0
  100. package/dist/event-subscriber-D1XLkPzi.d.cts.map +1 -0
  101. package/dist/event-subscriber-D1XLkPzi.d.ts +223 -0
  102. package/dist/event-subscriber-D1XLkPzi.d.ts.map +1 -0
  103. package/dist/event-subscriber.cjs +0 -6
  104. package/dist/event-subscriber.d.cts +2 -221
  105. package/dist/event-subscriber.d.ts +2 -221
  106. package/dist/event-subscriber.js +1 -3
  107. package/dist/event-testing-BqRnI0z4.d.cts +106 -0
  108. package/dist/event-testing-BqRnI0z4.d.cts.map +1 -0
  109. package/dist/event-testing-CfFs3to2.d.ts +106 -0
  110. package/dist/event-testing-CfFs3to2.d.ts.map +1 -0
  111. package/dist/event-testing.cjs +93 -17
  112. package/dist/event-testing.cjs.map +1 -1
  113. package/dist/event-testing.d.cts +2 -110
  114. package/dist/event-testing.d.ts +2 -110
  115. package/dist/event-testing.js +91 -2
  116. package/dist/event-testing.js.map +1 -1
  117. package/dist/event.cjs +5 -37
  118. package/dist/event.d.cts +295 -340
  119. package/dist/event.d.cts.map +1 -0
  120. package/dist/event.d.ts +295 -340
  121. package/dist/event.d.ts.map +1 -0
  122. package/dist/event.js +3 -21
  123. package/dist/exporters.cjs +12 -16
  124. package/dist/exporters.d.cts +86 -111
  125. package/dist/exporters.d.cts.map +1 -0
  126. package/dist/exporters.d.ts +86 -111
  127. package/dist/exporters.d.ts.map +1 -0
  128. package/dist/exporters.js +4 -4
  129. package/dist/filtering-span-processor-B8R8B7Uk.d.cts +59 -0
  130. package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +1 -0
  131. package/dist/filtering-span-processor-B8R8B7Uk.d.ts +59 -0
  132. package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +1 -0
  133. package/dist/filtering-span-processor.cjs +49 -9
  134. package/dist/filtering-span-processor.cjs.map +1 -1
  135. package/dist/filtering-span-processor.d.cts +2 -80
  136. package/dist/filtering-span-processor.d.ts +2 -80
  137. package/dist/filtering-span-processor.js +49 -2
  138. package/dist/filtering-span-processor.js.map +1 -1
  139. package/dist/functional-BGkT8J-h.js +1265 -0
  140. package/dist/functional-BGkT8J-h.js.map +1 -0
  141. package/dist/functional-C4CzoVrX.cjs +1312 -0
  142. package/dist/functional-C4CzoVrX.cjs.map +1 -0
  143. package/dist/functional.cjs +11 -57
  144. package/dist/functional.d.cts +96 -97
  145. package/dist/functional.d.cts.map +1 -0
  146. package/dist/functional.d.ts +96 -97
  147. package/dist/functional.d.ts.map +1 -0
  148. package/dist/functional.js +3 -20
  149. package/dist/http.cjs +276 -176
  150. package/dist/http.cjs.map +1 -1
  151. package/dist/http.d.cts +17 -37
  152. package/dist/http.d.cts.map +1 -0
  153. package/dist/http.d.ts +17 -37
  154. package/dist/http.d.ts.map +1 -0
  155. package/dist/http.js +275 -174
  156. package/dist/http.js.map +1 -1
  157. package/dist/index-Ck06vlW2.d.ts +678 -0
  158. package/dist/index-Ck06vlW2.d.ts.map +1 -0
  159. package/dist/index-eKuioqT1.d.cts +678 -0
  160. package/dist/index-eKuioqT1.d.cts.map +1 -0
  161. package/dist/index.cjs +751 -1218
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +341 -659
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +341 -659
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +606 -737
  168. package/dist/index.js.map +1 -1
  169. package/dist/init-CNp-ee80.d.cts +1157 -0
  170. package/dist/init-CNp-ee80.d.cts.map +1 -0
  171. package/dist/init-Ch6t7MNI.js +1015 -0
  172. package/dist/init-Ch6t7MNI.js.map +1 -0
  173. package/dist/init-DJQOdVlN.d.ts +1157 -0
  174. package/dist/init-DJQOdVlN.d.ts.map +1 -0
  175. package/dist/init-DvapOXCc.cjs +1092 -0
  176. package/dist/init-DvapOXCc.cjs.map +1 -0
  177. package/dist/instrumentation.cjs +159 -185
  178. package/dist/instrumentation.cjs.map +1 -1
  179. package/dist/instrumentation.d.cts +42 -40
  180. package/dist/instrumentation.d.cts.map +1 -0
  181. package/dist/instrumentation.d.ts +42 -40
  182. package/dist/instrumentation.d.ts.map +1 -0
  183. package/dist/instrumentation.js +158 -183
  184. package/dist/instrumentation.js.map +1 -1
  185. package/dist/logger-BauSUhUv.d.cts +313 -0
  186. package/dist/logger-BauSUhUv.d.cts.map +1 -0
  187. package/dist/logger-BauSUhUv.d.ts +313 -0
  188. package/dist/logger-BauSUhUv.d.ts.map +1 -0
  189. package/dist/logger.cjs +225 -25
  190. package/dist/logger.cjs.map +1 -1
  191. package/dist/logger.d.cts +2 -348
  192. package/dist/logger.d.ts +2 -348
  193. package/dist/logger.js +204 -4
  194. package/dist/logger.js.map +1 -1
  195. package/dist/messaging-adapters.cjs +292 -187
  196. package/dist/messaging-adapters.cjs.map +1 -1
  197. package/dist/messaging-adapters.d.cts +28 -66
  198. package/dist/messaging-adapters.d.cts.map +1 -0
  199. package/dist/messaging-adapters.d.ts +28 -66
  200. package/dist/messaging-adapters.d.ts.map +1 -0
  201. package/dist/messaging-adapters.js +291 -185
  202. package/dist/messaging-adapters.js.map +1 -1
  203. package/dist/messaging-testing.cjs +306 -372
  204. package/dist/messaging-testing.cjs.map +1 -1
  205. package/dist/messaging-testing.d.cts +194 -223
  206. package/dist/messaging-testing.d.cts.map +1 -0
  207. package/dist/messaging-testing.d.ts +194 -223
  208. package/dist/messaging-testing.d.ts.map +1 -0
  209. package/dist/messaging-testing.js +305 -371
  210. package/dist/messaging-testing.js.map +1 -1
  211. package/dist/messaging.cjs +757 -36
  212. package/dist/messaging.cjs.map +1 -1
  213. package/dist/messaging.d.cts +603 -644
  214. package/dist/messaging.d.cts.map +1 -0
  215. package/dist/messaging.d.ts +603 -644
  216. package/dist/messaging.d.ts.map +1 -0
  217. package/dist/messaging.js +756 -21
  218. package/dist/messaging.js.map +1 -1
  219. package/dist/metric-helpers.cjs +27 -27
  220. package/dist/metric-helpers.cjs.map +1 -1
  221. package/dist/metric-helpers.d.cts +4 -2
  222. package/dist/metric-helpers.d.cts.map +1 -0
  223. package/dist/metric-helpers.d.ts +4 -2
  224. package/dist/metric-helpers.d.ts.map +1 -0
  225. package/dist/metric-helpers.js +24 -4
  226. package/dist/metric-helpers.js.map +1 -1
  227. package/dist/metric-testing-DXdK3-Q3.d.ts +106 -0
  228. package/dist/metric-testing-DXdK3-Q3.d.ts.map +1 -0
  229. package/dist/metric-testing-MxvzChDp.d.cts +106 -0
  230. package/dist/metric-testing-MxvzChDp.d.cts.map +1 -0
  231. package/dist/metric-testing.cjs +93 -17
  232. package/dist/metric-testing.cjs.map +1 -1
  233. package/dist/metric-testing.d.cts +2 -110
  234. package/dist/metric-testing.d.ts +2 -110
  235. package/dist/metric-testing.js +91 -2
  236. package/dist/metric-testing.js.map +1 -1
  237. package/dist/metric.cjs +306 -22
  238. package/dist/metric.cjs.map +1 -1
  239. package/dist/metric.d.cts +170 -198
  240. package/dist/metric.d.cts.map +1 -0
  241. package/dist/metric.d.ts +170 -198
  242. package/dist/metric.d.ts.map +1 -0
  243. package/dist/metric.js +277 -7
  244. package/dist/metric.js.map +1 -1
  245. package/dist/node-require-DF5QBX6z.cjs +99 -0
  246. package/dist/node-require-DF5QBX6z.cjs.map +1 -0
  247. package/dist/node-require-Db1oDpLj.js +88 -0
  248. package/dist/node-require-Db1oDpLj.js.map +1 -0
  249. package/dist/operation-context-C-2hmmtP.js +59 -0
  250. package/dist/operation-context-C-2hmmtP.js.map +1 -0
  251. package/dist/operation-context-n4_obUwq.cjs +70 -0
  252. package/dist/operation-context-n4_obUwq.cjs.map +1 -0
  253. package/dist/parse-error.cjs +55 -9
  254. package/dist/parse-error.cjs.map +1 -1
  255. package/dist/parse-error.d.cts +12 -10
  256. package/dist/parse-error.d.cts.map +1 -0
  257. package/dist/parse-error.d.ts +12 -10
  258. package/dist/parse-error.d.ts.map +1 -0
  259. package/dist/parse-error.js +55 -2
  260. package/dist/parse-error.js.map +1 -1
  261. package/dist/pretty-console-exporter-CMzlrRNg.cjs +232 -0
  262. package/dist/pretty-console-exporter-CMzlrRNg.cjs.map +1 -0
  263. package/dist/pretty-console-exporter-DqKl_q9z.js +227 -0
  264. package/dist/pretty-console-exporter-DqKl_q9z.js.map +1 -0
  265. package/dist/processors.cjs +13 -17
  266. package/dist/processors.d.cts +3 -171
  267. package/dist/processors.d.ts +3 -171
  268. package/dist/processors.js +4 -4
  269. package/dist/register.cjs +35 -6
  270. package/dist/register.cjs.map +1 -1
  271. package/dist/register.d.cts +1 -2
  272. package/dist/register.d.ts +1 -2
  273. package/dist/register.js +36 -3
  274. package/dist/register.js.map +1 -1
  275. package/dist/registry-DVSmWg6Y.js +175 -0
  276. package/dist/registry-DVSmWg6Y.js.map +1 -0
  277. package/dist/registry-DYgvb62e.cjs +319 -0
  278. package/dist/registry-DYgvb62e.cjs.map +1 -0
  279. package/dist/sampling-CR0Va1VB.d.ts +351 -0
  280. package/dist/sampling-CR0Va1VB.d.ts.map +1 -0
  281. package/dist/sampling-DfYhDJij.d.cts +351 -0
  282. package/dist/sampling-DfYhDJij.d.cts.map +1 -0
  283. package/dist/sampling.cjs +452 -60
  284. package/dist/sampling.cjs.map +1 -1
  285. package/dist/sampling.d.cts +2 -379
  286. package/dist/sampling.d.ts +2 -379
  287. package/dist/sampling.js +441 -5
  288. package/dist/sampling.js.map +1 -1
  289. package/dist/security-schema.cjs +65 -46
  290. package/dist/security-schema.cjs.map +1 -1
  291. package/dist/security-schema.d.cts +23 -26
  292. package/dist/security-schema.d.cts.map +1 -0
  293. package/dist/security-schema.d.ts +23 -26
  294. package/dist/security-schema.d.ts.map +1 -0
  295. package/dist/security-schema.js +64 -45
  296. package/dist/security-schema.js.map +1 -1
  297. package/dist/semantic-conventions-FhSxv-bK.d.cts +32 -0
  298. package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -0
  299. package/dist/semantic-conventions-FhSxv-bK.d.ts +32 -0
  300. package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -0
  301. package/dist/semantic-conventions.cjs +15 -26
  302. package/dist/semantic-conventions.cjs.map +1 -1
  303. package/dist/semantic-conventions.d.cts +2 -29
  304. package/dist/semantic-conventions.d.ts +2 -29
  305. package/dist/semantic-conventions.js +12 -3
  306. package/dist/semantic-conventions.js.map +1 -1
  307. package/dist/semantic-helpers.cjs +327 -39
  308. package/dist/semantic-helpers.cjs.map +1 -1
  309. package/dist/semantic-helpers.d.cts +30 -150
  310. package/dist/semantic-helpers.d.cts.map +1 -0
  311. package/dist/semantic-helpers.d.ts +30 -150
  312. package/dist/semantic-helpers.d.ts.map +1 -0
  313. package/dist/semantic-helpers.js +326 -20
  314. package/dist/semantic-helpers.js.map +1 -1
  315. package/dist/span-name-normalizer-8ZOGJuwv.d.cts +70 -0
  316. package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +1 -0
  317. package/dist/span-name-normalizer-8ZOGJuwv.d.ts +70 -0
  318. package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +1 -0
  319. package/dist/span-name-normalizer.cjs +95 -17
  320. package/dist/span-name-normalizer.cjs.map +1 -1
  321. package/dist/span-name-normalizer.d.cts +2 -94
  322. package/dist/span-name-normalizer.d.ts +2 -94
  323. package/dist/span-name-normalizer.js +93 -2
  324. package/dist/span-name-normalizer.js.map +1 -1
  325. package/dist/stable-hash-BNTMrmdB.cjs +28 -0
  326. package/dist/stable-hash-BNTMrmdB.cjs.map +1 -0
  327. package/dist/stable-hash-Cg5cT34Q.js +23 -0
  328. package/dist/stable-hash-Cg5cT34Q.js.map +1 -0
  329. package/dist/structured-error-9--cxBay.js +143 -0
  330. package/dist/structured-error-9--cxBay.js.map +1 -0
  331. package/dist/structured-error-CHg7DoIQ.cjs +178 -0
  332. package/dist/structured-error-CHg7DoIQ.cjs.map +1 -0
  333. package/dist/tail-sampling-processor.cjs +26 -13
  334. package/dist/tail-sampling-processor.cjs.map +1 -1
  335. package/dist/tail-sampling-processor.d.cts +11 -23
  336. package/dist/tail-sampling-processor.d.cts.map +1 -0
  337. package/dist/tail-sampling-processor.d.ts +11 -23
  338. package/dist/tail-sampling-processor.d.ts.map +1 -0
  339. package/dist/tail-sampling-processor.js +27 -6
  340. package/dist/tail-sampling-processor.js.map +1 -1
  341. package/dist/test-span-collector.cjs +70 -72
  342. package/dist/test-span-collector.cjs.map +1 -1
  343. package/dist/test-span-collector.d.cts +25 -43
  344. package/dist/test-span-collector.d.cts.map +1 -0
  345. package/dist/test-span-collector.d.ts +25 -43
  346. package/dist/test-span-collector.d.ts.map +1 -0
  347. package/dist/test-span-collector.js +69 -70
  348. package/dist/test-span-collector.js.map +1 -1
  349. package/dist/testing.cjs +389 -278
  350. package/dist/testing.cjs.map +1 -1
  351. package/dist/testing.d.cts +39 -62
  352. package/dist/testing.d.cts.map +1 -0
  353. package/dist/testing.d.ts +39 -62
  354. package/dist/testing.d.ts.map +1 -0
  355. package/dist/testing.js +386 -265
  356. package/dist/testing.js.map +1 -1
  357. package/dist/trace-context-Cijqoi6e.d.cts +212 -0
  358. package/dist/trace-context-Cijqoi6e.d.cts.map +1 -0
  359. package/dist/trace-context-Cijqoi6e.d.ts +212 -0
  360. package/dist/trace-context-Cijqoi6e.d.ts.map +1 -0
  361. package/dist/trace-helpers.cjs +634 -54
  362. package/dist/trace-helpers.cjs.map +1 -1
  363. package/dist/trace-helpers.d.cts +17 -49
  364. package/dist/trace-helpers.d.cts.map +1 -0
  365. package/dist/trace-helpers.d.ts +17 -49
  366. package/dist/trace-helpers.d.ts.map +1 -0
  367. package/dist/trace-helpers.js +624 -3
  368. package/dist/trace-helpers.js.map +1 -1
  369. package/dist/tracer-provider.cjs +227 -16
  370. package/dist/tracer-provider.cjs.map +1 -1
  371. package/dist/tracer-provider.d.cts +5 -4
  372. package/dist/tracer-provider.d.cts.map +1 -0
  373. package/dist/tracer-provider.d.ts +5 -4
  374. package/dist/tracer-provider.d.ts.map +1 -0
  375. package/dist/tracer-provider.js +227 -2
  376. package/dist/tracer-provider.js.map +1 -1
  377. package/dist/track-3HY4NGV-.cjs +1212 -0
  378. package/dist/track-3HY4NGV-.cjs.map +1 -0
  379. package/dist/track-nsKVy-pj.js +1111 -0
  380. package/dist/track-nsKVy-pj.js.map +1 -0
  381. package/dist/validate.cjs +178 -115
  382. package/dist/validate.cjs.map +1 -1
  383. package/dist/validate.d.cts +40 -64
  384. package/dist/validate.d.cts.map +1 -0
  385. package/dist/validate.d.ts +40 -64
  386. package/dist/validate.d.ts.map +1 -0
  387. package/dist/validate.js +177 -113
  388. package/dist/validate.js.map +1 -1
  389. package/dist/validation-attributes.cjs +42 -17
  390. package/dist/validation-attributes.cjs.map +1 -1
  391. package/dist/validation-attributes.d.cts +13 -20
  392. package/dist/validation-attributes.d.cts.map +1 -0
  393. package/dist/validation-attributes.d.ts +13 -20
  394. package/dist/validation-attributes.d.ts.map +1 -0
  395. package/dist/validation-attributes.js +40 -2
  396. package/dist/validation-attributes.js.map +1 -1
  397. package/dist/webhook.cjs +286 -256
  398. package/dist/webhook.cjs.map +1 -1
  399. package/dist/webhook.d.cts +157 -192
  400. package/dist/webhook.d.cts.map +1 -0
  401. package/dist/webhook.d.ts +157 -192
  402. package/dist/webhook.d.ts.map +1 -0
  403. package/dist/webhook.js +285 -254
  404. package/dist/webhook.js.map +1 -1
  405. package/dist/workflow-distributed.cjs +498 -412
  406. package/dist/workflow-distributed.cjs.map +1 -1
  407. package/dist/workflow-distributed.d.cts +163 -173
  408. package/dist/workflow-distributed.d.cts.map +1 -0
  409. package/dist/workflow-distributed.d.ts +163 -173
  410. package/dist/workflow-distributed.d.ts.map +1 -0
  411. package/dist/workflow-distributed.js +497 -410
  412. package/dist/workflow-distributed.js.map +1 -1
  413. package/dist/workflow.cjs +405 -40
  414. package/dist/workflow.cjs.map +1 -1
  415. package/dist/workflow.d.cts +78 -131
  416. package/dist/workflow.d.cts.map +1 -0
  417. package/dist/workflow.d.ts +78 -131
  418. package/dist/workflow.d.ts.map +1 -0
  419. package/dist/workflow.js +403 -21
  420. package/dist/workflow.js.map +1 -1
  421. package/dist/yaml-config-B3dQ82GR.cjs +272 -0
  422. package/dist/yaml-config-B3dQ82GR.cjs.map +1 -0
  423. package/dist/yaml-config.cjs +5 -24
  424. package/dist/yaml-config.d.cts +30 -64
  425. package/dist/yaml-config.d.cts.map +1 -0
  426. package/dist/yaml-config.d.ts +30 -64
  427. package/dist/yaml-config.d.ts.map +1 -0
  428. package/dist/yaml-config.js +226 -7
  429. package/dist/yaml-config.js.map +1 -1
  430. package/package.json +4 -4
  431. package/skills/analyze-traces/SKILL.md +14 -12
  432. package/skills/review-otel-patterns/SKILL.md +4 -2
  433. package/skills/tune-sampling/SKILL.md +8 -3
  434. package/src/attributes/builders.ts +2 -20
  435. package/src/attributes/index.ts +0 -1
  436. package/src/attributes/registry.ts +2 -9
  437. package/src/attributes/types.ts +0 -8
  438. package/src/index.ts +7 -41
  439. package/src/request-logger.test.ts +53 -1
  440. package/src/request-logger.ts +58 -0
  441. package/src/semantic-helpers.test.ts +2 -87
  442. package/src/semantic-helpers.ts +0 -146
  443. package/src/validate.test.ts +3 -1
  444. package/src/validate.ts +9 -3
  445. package/dist/attributes.cjs.map +0 -1
  446. package/dist/attributes.js.map +0 -1
  447. package/dist/chunk-2ZKEORFN.cjs +0 -14
  448. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  449. package/dist/chunk-3QXBFGKP.js +0 -344
  450. package/dist/chunk-3QXBFGKP.js.map +0 -1
  451. package/dist/chunk-454CH4OV.js +0 -744
  452. package/dist/chunk-454CH4OV.js.map +0 -1
  453. package/dist/chunk-4A53YIAX.js +0 -180
  454. package/dist/chunk-4A53YIAX.js.map +0 -1
  455. package/dist/chunk-4IFSYQVX.js +0 -337
  456. package/dist/chunk-4IFSYQVX.js.map +0 -1
  457. package/dist/chunk-4P6ZOARG.cjs +0 -33
  458. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  459. package/dist/chunk-55ER2KD5.js +0 -228
  460. package/dist/chunk-55ER2KD5.js.map +0 -1
  461. package/dist/chunk-5ZN622AO.js +0 -73
  462. package/dist/chunk-5ZN622AO.js.map +0 -1
  463. package/dist/chunk-66YJ66GG.js +0 -1021
  464. package/dist/chunk-66YJ66GG.js.map +0 -1
  465. package/dist/chunk-6S5RUKU3.cjs +0 -347
  466. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  467. package/dist/chunk-6UQRVUN3.js +0 -222
  468. package/dist/chunk-6UQRVUN3.js.map +0 -1
  469. package/dist/chunk-7552UTQW.js +0 -11
  470. package/dist/chunk-7552UTQW.js.map +0 -1
  471. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  472. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  473. package/dist/chunk-7SAWIN74.js +0 -285
  474. package/dist/chunk-7SAWIN74.js.map +0 -1
  475. package/dist/chunk-A4E5AQFK.js +0 -30
  476. package/dist/chunk-A4E5AQFK.js.map +0 -1
  477. package/dist/chunk-ALPYR2GC.js +0 -1061
  478. package/dist/chunk-ALPYR2GC.js.map +0 -1
  479. package/dist/chunk-B7SWBE4P.cjs +0 -799
  480. package/dist/chunk-B7SWBE4P.cjs.map +0 -1
  481. package/dist/chunk-BZHG5IZ4.js +0 -73
  482. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  483. package/dist/chunk-CEAQK2QY.cjs +0 -32
  484. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  485. package/dist/chunk-CMHVQR6P.js +0 -170
  486. package/dist/chunk-CMHVQR6P.js.map +0 -1
  487. package/dist/chunk-CU6IDACR.cjs +0 -224
  488. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  489. package/dist/chunk-D4TM63S3.js +0 -795
  490. package/dist/chunk-D4TM63S3.js.map +0 -1
  491. package/dist/chunk-DCEDJQGG.js +0 -28
  492. package/dist/chunk-DCEDJQGG.js.map +0 -1
  493. package/dist/chunk-DPSA4QLA.js +0 -344
  494. package/dist/chunk-DPSA4QLA.js.map +0 -1
  495. package/dist/chunk-E6TERL5O.cjs +0 -23
  496. package/dist/chunk-E6TERL5O.cjs.map +0 -1
  497. package/dist/chunk-EE6CPXKH.cjs +0 -164
  498. package/dist/chunk-EE6CPXKH.cjs.map +0 -1
  499. package/dist/chunk-EOFB7XCL.cjs +0 -837
  500. package/dist/chunk-EOFB7XCL.cjs.map +0 -1
  501. package/dist/chunk-ESLWRGAG.cjs +0 -92
  502. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  503. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  504. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  505. package/dist/chunk-FMTHVSYY.cjs +0 -1039
  506. package/dist/chunk-FMTHVSYY.cjs.map +0 -1
  507. package/dist/chunk-FU6R566Y.cjs +0 -236
  508. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  509. package/dist/chunk-GYR5K654.js +0 -91
  510. package/dist/chunk-GYR5K654.js.map +0 -1
  511. package/dist/chunk-HA2WBOGQ.js +0 -57
  512. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  513. package/dist/chunk-HT5JQKN2.js +0 -118
  514. package/dist/chunk-HT5JQKN2.js.map +0 -1
  515. package/dist/chunk-INJD3G4K.cjs +0 -340
  516. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  517. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  518. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  519. package/dist/chunk-J5QENANM.js +0 -87
  520. package/dist/chunk-J5QENANM.js.map +0 -1
  521. package/dist/chunk-J7VGRIAJ.js +0 -64
  522. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  523. package/dist/chunk-KFOHQK7X.js +0 -144
  524. package/dist/chunk-KFOHQK7X.js.map +0 -1
  525. package/dist/chunk-KIL5CUN6.js +0 -31
  526. package/dist/chunk-KIL5CUN6.js.map +0 -1
  527. package/dist/chunk-KYXZS3EA.cjs +0 -100
  528. package/dist/chunk-KYXZS3EA.cjs.map +0 -1
  529. package/dist/chunk-LITNXTTT.js +0 -3
  530. package/dist/chunk-LITNXTTT.js.map +0 -1
  531. package/dist/chunk-LVIPBYFE.js +0 -157
  532. package/dist/chunk-LVIPBYFE.js.map +0 -1
  533. package/dist/chunk-M3LFHHTN.cjs +0 -764
  534. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  535. package/dist/chunk-N25JDZSC.js +0 -95
  536. package/dist/chunk-N25JDZSC.js.map +0 -1
  537. package/dist/chunk-NEIB3TLD.cjs +0 -360
  538. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  539. package/dist/chunk-NENU7E6V.cjs +0 -344
  540. package/dist/chunk-NENU7E6V.cjs.map +0 -1
  541. package/dist/chunk-NVAI5CCN.cjs +0 -39
  542. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  543. package/dist/chunk-NZ72VDNY.cjs +0 -4
  544. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  545. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  546. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  547. package/dist/chunk-Q4EULJQY.js +0 -35
  548. package/dist/chunk-Q4EULJQY.js.map +0 -1
  549. package/dist/chunk-QF7ARNUM.js +0 -339
  550. package/dist/chunk-QF7ARNUM.js.map +0 -1
  551. package/dist/chunk-QWW3E3JM.cjs +0 -178
  552. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  553. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  554. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  555. package/dist/chunk-RUPKBKUF.js +0 -352
  556. package/dist/chunk-RUPKBKUF.js.map +0 -1
  557. package/dist/chunk-SEO6NAQT.js +0 -14
  558. package/dist/chunk-SEO6NAQT.js.map +0 -1
  559. package/dist/chunk-T4B5LB6E.cjs +0 -66
  560. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  561. package/dist/chunk-T5WRA76K.cjs +0 -32
  562. package/dist/chunk-T5WRA76K.cjs.map +0 -1
  563. package/dist/chunk-T7JO2TCP.js +0 -1233
  564. package/dist/chunk-T7JO2TCP.js.map +0 -1
  565. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  566. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  567. package/dist/chunk-TQ5UWA7S.js +0 -26
  568. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  569. package/dist/chunk-UIKYE2QZ.js +0 -833
  570. package/dist/chunk-UIKYE2QZ.js.map +0 -1
  571. package/dist/chunk-UNPLAVE7.js +0 -21
  572. package/dist/chunk-UNPLAVE7.js.map +0 -1
  573. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  574. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  575. package/dist/chunk-V7UBMJAB.cjs +0 -1242
  576. package/dist/chunk-V7UBMJAB.cjs.map +0 -1
  577. package/dist/chunk-VH77IPJN.cjs +0 -358
  578. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  579. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  580. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  581. package/dist/chunk-WGWSHJ2N.js +0 -38
  582. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  583. package/dist/chunk-WJH6IYU2.cjs +0 -32
  584. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  585. package/dist/chunk-YREV3LGG.cjs +0 -61
  586. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  587. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  588. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  589. package/dist/chunk-ZNMBW67B.cjs +0 -40
  590. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  591. package/dist/correlation-id.cjs.map +0 -1
  592. package/dist/correlation-id.js.map +0 -1
  593. package/dist/define-event-BL6Li7CM.d.ts +0 -23
  594. package/dist/define-event-ClP3T1Jx.d.cts +0 -23
  595. package/dist/event-subscriber.cjs.map +0 -1
  596. package/dist/event-subscriber.js.map +0 -1
  597. package/dist/event.cjs.map +0 -1
  598. package/dist/event.js.map +0 -1
  599. package/dist/exporters.cjs.map +0 -1
  600. package/dist/exporters.js.map +0 -1
  601. package/dist/functional.cjs.map +0 -1
  602. package/dist/functional.js.map +0 -1
  603. package/dist/init-DIowiiCh.d.ts +0 -1167
  604. package/dist/init-j-A1zI16.d.cts +0 -1167
  605. package/dist/processors.cjs.map +0 -1
  606. package/dist/processors.js.map +0 -1
  607. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  608. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  609. package/dist/utils-BahBCFtJ.d.cts +0 -712
  610. package/dist/utils-CLKwaUlG.d.ts +0 -712
  611. package/dist/yaml-config.cjs.map +0 -1
  612. package/src/gen-ai-cost.test.ts +0 -81
  613. package/src/gen-ai-cost.ts +0 -145
  614. package/src/gen-ai-events.test.ts +0 -135
  615. package/src/gen-ai-events.ts +0 -208
  616. package/src/gen-ai-metrics.test.ts +0 -96
  617. package/src/gen-ai-metrics.ts +0 -128
@@ -0,0 +1,1015 @@
1
+ import { resolveSamplingPreset, samplingPresets } from "./sampling.js";
2
+ import { n as safeRequire, t as requireModule } from "./node-require-Db1oDpLj.js";
3
+ import { TailSamplingSpanProcessor } from "./tail-sampling-processor.js";
4
+ import { FilteringSpanProcessor } from "./filtering-span-processor.js";
5
+ import { SpanNameNormalizingProcessor } from "./span-name-normalizer.js";
6
+ import { AttributeRedactingProcessor, REDACTOR_PRESETS, normalizeAttributeRedactorConfig } from "./attribute-redacting-processor.js";
7
+ import { t as PrettyConsoleExporter } from "./pretty-console-exporter-DqKl_q9z.js";
8
+ import { loadYamlConfig } from "./yaml-config.js";
9
+ import { t as CanonicalLogLineProcessor } from "./canonical-log-line-processor-DbBQT5vY.js";
10
+ import { NodeSDK } from "@opentelemetry/sdk-node";
11
+ import { AlwaysOffSampler, AlwaysOnSampler, BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, SamplingDecision, SimpleSpanProcessor, TraceIdRatioBasedSampler } from "@opentelemetry/sdk-trace-base";
12
+ import { resourceFromAttributes } from "@opentelemetry/resources";
13
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
14
+ import { context, propagation } from "@opentelemetry/api";
15
+ import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
16
+ import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
17
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
18
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
19
+ import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs";
20
+
21
+ //#region src/posthog-logs.ts
22
+ var RedactingLogRecordProcessor = class {
23
+ wrapped;
24
+ redact;
25
+ constructor(wrapped, redact) {
26
+ this.wrapped = wrapped;
27
+ this.redact = redact;
28
+ }
29
+ onEmit(logRecord, context) {
30
+ if (logRecord.body && typeof logRecord.body === "string") logRecord.body = this.redact(logRecord.body);
31
+ if (logRecord.attributes) {
32
+ for (const [key, value] of Object.entries(logRecord.attributes)) if (typeof value === "string") logRecord.attributes[key] = this.redact(value);
33
+ else if (Array.isArray(value)) logRecord.attributes[key] = value.map((item) => typeof item === "string" ? this.redact(item) : item);
34
+ }
35
+ this.wrapped.onEmit(logRecord, context);
36
+ }
37
+ shutdown() {
38
+ return this.wrapped.shutdown();
39
+ }
40
+ forceFlush() {
41
+ return this.wrapped.forceFlush();
42
+ }
43
+ };
44
+ /**
45
+ * Build log record processors for PostHog OTLP logs integration.
46
+ *
47
+ * Resolution order:
48
+ * 1. config.url if provided
49
+ * 2. POSTHOG_LOGS_URL env var
50
+ * 3. Empty array (disabled)
51
+ */
52
+ function buildPostHogLogProcessors(config, stringRedactor) {
53
+ const url = config?.url || process.env.POSTHOG_LOGS_URL;
54
+ if (!url) return [];
55
+ const sdkLogs = safeRequire("@opentelemetry/sdk-logs");
56
+ const exporterModule = safeRequire("@opentelemetry/exporter-logs-otlp-http");
57
+ if (!sdkLogs || !exporterModule) return [];
58
+ const exporter = new exporterModule.OTLPLogExporter({ url });
59
+ let processor = new sdkLogs.BatchLogRecordProcessor(exporter);
60
+ if (stringRedactor) processor = new RedactingLogRecordProcessor(processor, stringRedactor);
61
+ return [processor];
62
+ }
63
+
64
+ //#endregion
65
+ //#region src/baggage-span-processor.ts
66
+ /**
67
+ * Span processor that automatically copies baggage entries to span attributes
68
+ *
69
+ * This makes baggage visible in trace UIs (Jaeger, Grafana, DataDog, etc.)
70
+ * without manually calling ctx.setAttribute() for each baggage entry.
71
+ *
72
+ * @example Enable in init()
73
+ * ```typescript
74
+ * init({
75
+ * service: 'my-app',
76
+ * baggage: true // Uses default 'baggage.' prefix
77
+ * });
78
+ *
79
+ * // Now baggage automatically appears as span attributes
80
+ * await withBaggage({
81
+ * baggage: { 'tenant.id': 't1', 'user.id': 'u1' },
82
+ * fn: async () => {
83
+ * // Span has baggage.tenant.id and baggage.user.id attributes!
84
+ * }
85
+ * });
86
+ * ```
87
+ *
88
+ * @example Custom prefix
89
+ * ```typescript
90
+ * init({
91
+ * service: 'my-app',
92
+ * baggage: 'ctx' // Uses 'ctx.' prefix
93
+ * });
94
+ * // Creates attributes: ctx.tenant.id, ctx.user.id
95
+ * ```
96
+ */
97
+ var BaggageSpanProcessor = class {
98
+ prefix;
99
+ constructor(options = {}) {
100
+ this.prefix = options.prefix ?? "baggage.";
101
+ }
102
+ onStart(span, parentContext) {
103
+ let baggage = propagation.getBaggage(parentContext);
104
+ if (!baggage) baggage = propagation.getBaggage(context.active());
105
+ if (!baggage) try {
106
+ const { getActiveContextWithBaggage } = requireModule("./trace-context");
107
+ const storedContext = getActiveContextWithBaggage();
108
+ baggage = propagation.getBaggage(storedContext);
109
+ } catch {}
110
+ if (!baggage) return;
111
+ for (const [key, entry] of baggage.getAllEntries()) span.setAttribute(`${this.prefix}${key}`, entry.value);
112
+ }
113
+ onEnd(_span) {}
114
+ async shutdown() {}
115
+ async forceFlush() {}
116
+ };
117
+
118
+ //#endregion
119
+ //#region src/redact-values.ts
120
+ /** Standalone string redaction for use outside the span processor pipeline. */
121
+ function createStringRedactor(config) {
122
+ const resolved = typeof config === "string" ? REDACTOR_PRESETS[config] : config;
123
+ const valuePatterns = resolved.valuePatterns ?? [];
124
+ const defaultReplacement = resolved.replacement ?? "[REDACTED]";
125
+ return (value) => {
126
+ let result = value;
127
+ for (const { pattern, replacement, mask } of valuePatterns) {
128
+ pattern.lastIndex = 0;
129
+ if (mask) result = result.replaceAll(pattern, (match) => mask(match));
130
+ else result = result.replaceAll(pattern, replacement ?? defaultReplacement);
131
+ }
132
+ return result;
133
+ };
134
+ }
135
+
136
+ //#endregion
137
+ //#region src/env-config.ts
138
+ /**
139
+ * Validate URL format
140
+ */
141
+ function isValidUrl(urlString) {
142
+ try {
143
+ const url = new URL(urlString);
144
+ return url.protocol === "http:" || url.protocol === "https:";
145
+ } catch {
146
+ return false;
147
+ }
148
+ }
149
+ /**
150
+ * Resolve OpenTelemetry environment variables from process.env
151
+ */
152
+ function resolveOtelEnv() {
153
+ const env = {};
154
+ if (process.env.OTEL_SERVICE_NAME) {
155
+ const value = process.env.OTEL_SERVICE_NAME.trim();
156
+ if (value) env.OTEL_SERVICE_NAME = value;
157
+ }
158
+ if (process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {
159
+ const value = process.env.OTEL_EXPORTER_OTLP_ENDPOINT.trim();
160
+ if (value && isValidUrl(value)) env.OTEL_EXPORTER_OTLP_ENDPOINT = value;
161
+ }
162
+ if (process.env.OTEL_EXPORTER_OTLP_HEADERS) {
163
+ const value = process.env.OTEL_EXPORTER_OTLP_HEADERS.trim();
164
+ if (value) env.OTEL_EXPORTER_OTLP_HEADERS = value;
165
+ }
166
+ if (process.env.OTEL_RESOURCE_ATTRIBUTES) {
167
+ const value = process.env.OTEL_RESOURCE_ATTRIBUTES.trim();
168
+ if (value) env.OTEL_RESOURCE_ATTRIBUTES = value;
169
+ }
170
+ if (process.env.OTEL_EXPORTER_OTLP_PROTOCOL) {
171
+ const value = process.env.OTEL_EXPORTER_OTLP_PROTOCOL.trim().toLowerCase();
172
+ if (value === "http" || value === "grpc") env.OTEL_EXPORTER_OTLP_PROTOCOL = value;
173
+ }
174
+ if (process.env.OTEL_TRACES_SAMPLER) {
175
+ const value = process.env.OTEL_TRACES_SAMPLER.trim();
176
+ if (value) env.OTEL_TRACES_SAMPLER = value;
177
+ }
178
+ if (process.env.OTEL_TRACES_SAMPLER_ARG) {
179
+ const value = process.env.OTEL_TRACES_SAMPLER_ARG.trim();
180
+ if (value) env.OTEL_TRACES_SAMPLER_ARG = value;
181
+ }
182
+ return env;
183
+ }
184
+ function parseRatioSamplerArg(samplerName, samplerArg) {
185
+ if (samplerArg === void 0) return 1;
186
+ const ratio = Number(samplerArg);
187
+ if (!Number.isFinite(ratio) || ratio < 0 || ratio > 1) {
188
+ console.error(`[autotel] Invalid OTEL_TRACES_SAMPLER_ARG="${samplerArg}" for ${samplerName}. Expected a number in [0..1]. Falling back to 1.0.`);
189
+ return 1;
190
+ }
191
+ return ratio;
192
+ }
193
+ function warnOnUnusedSamplerArg(samplerName, samplerArg) {
194
+ if (samplerArg !== void 0) console.error(`[autotel] OTEL_TRACES_SAMPLER_ARG is not used by OTEL_TRACES_SAMPLER="${samplerName}". Ignoring value "${samplerArg}".`);
195
+ }
196
+ function createSamplerFromEnv(env) {
197
+ const samplerName = env.OTEL_TRACES_SAMPLER;
198
+ if (!samplerName) return;
199
+ switch (samplerName) {
200
+ case "always_on":
201
+ warnOnUnusedSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG);
202
+ return new AlwaysOnSampler();
203
+ case "always_off":
204
+ warnOnUnusedSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG);
205
+ return new AlwaysOffSampler();
206
+ case "traceidratio": return new TraceIdRatioBasedSampler(parseRatioSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG));
207
+ case "parentbased_always_on":
208
+ warnOnUnusedSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG);
209
+ return new ParentBasedSampler({ root: new AlwaysOnSampler() });
210
+ case "parentbased_always_off":
211
+ warnOnUnusedSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG);
212
+ return new ParentBasedSampler({ root: new AlwaysOffSampler() });
213
+ case "parentbased_traceidratio": return new ParentBasedSampler({ root: new TraceIdRatioBasedSampler(parseRatioSamplerArg(samplerName, env.OTEL_TRACES_SAMPLER_ARG)) });
214
+ case "jaeger_remote":
215
+ case "parentbased_jaeger_remote":
216
+ case "xray":
217
+ console.error(`[autotel] OTEL_TRACES_SAMPLER="${samplerName}" is not supported yet by autotel. Falling back to the next sampler source.`);
218
+ return;
219
+ default:
220
+ console.error(`[autotel] Unknown OTEL_TRACES_SAMPLER="${samplerName}". Falling back to the next sampler source.`);
221
+ return;
222
+ }
223
+ }
224
+ /**
225
+ * Parse OTEL_RESOURCE_ATTRIBUTES from comma-separated key=value pairs
226
+ * Example: "service.version=1.0.0,deployment.environment=production"
227
+ */
228
+ function parseResourceAttributes(input) {
229
+ if (!input || input.trim() === "") return {};
230
+ const attributes = {};
231
+ const pairs = input.split(",");
232
+ for (const pair of pairs) {
233
+ const trimmedPair = pair.trim();
234
+ if (!trimmedPair) continue;
235
+ const equalIndex = trimmedPair.indexOf("=");
236
+ if (equalIndex === -1) continue;
237
+ const key = trimmedPair.slice(0, equalIndex).trim();
238
+ const value = trimmedPair.slice(equalIndex + 1).trim();
239
+ if (key && value) attributes[key] = value;
240
+ }
241
+ return attributes;
242
+ }
243
+ /**
244
+ * Parse OTEL_EXPORTER_OTLP_HEADERS from comma-separated key=value pairs
245
+ * Example: "api-key=secret123,x-custom-header=value"
246
+ */
247
+ function parseOtlpHeaders(input) {
248
+ if (!input || input.trim() === "") return {};
249
+ const headers = {};
250
+ const pairs = input.split(",");
251
+ for (const pair of pairs) {
252
+ const trimmedPair = pair.trim();
253
+ if (!trimmedPair) continue;
254
+ const equalIndex = trimmedPair.indexOf("=");
255
+ if (equalIndex === -1) continue;
256
+ const key = trimmedPair.slice(0, equalIndex).trim();
257
+ const value = trimmedPair.slice(equalIndex + 1).trim();
258
+ if (key && value) headers[key] = value;
259
+ }
260
+ return headers;
261
+ }
262
+ /**
263
+ * Convert resolved environment variables to config
264
+ */
265
+ function envToConfig(env) {
266
+ const config = {};
267
+ if (env.OTEL_SERVICE_NAME) config.service = env.OTEL_SERVICE_NAME;
268
+ if (env.OTEL_EXPORTER_OTLP_ENDPOINT) config.endpoint = env.OTEL_EXPORTER_OTLP_ENDPOINT;
269
+ if (env.OTEL_EXPORTER_OTLP_PROTOCOL) config.protocol = env.OTEL_EXPORTER_OTLP_PROTOCOL;
270
+ if (env.OTEL_EXPORTER_OTLP_HEADERS) config.headers = parseOtlpHeaders(env.OTEL_EXPORTER_OTLP_HEADERS);
271
+ const resourceAttrs = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
272
+ if (Object.keys(resourceAttrs).length > 0) config.resourceAttributes = resourceAttrs;
273
+ const sampler = createSamplerFromEnv(env);
274
+ if (sampler) config.otelSampler = sampler;
275
+ return config;
276
+ }
277
+ /**
278
+ * Main function to resolve config from environment variables
279
+ */
280
+ function resolveConfigFromEnv() {
281
+ return envToConfig(resolveOtelEnv());
282
+ }
283
+
284
+ //#endregion
285
+ //#region src/devtools.ts
286
+ const defaultHost = "127.0.0.1";
287
+ const defaultPort = 4318;
288
+ function resolveDevtoolsConfig(config) {
289
+ if (!config) return {
290
+ enabled: false,
291
+ endpoint: void 0,
292
+ embedded: false,
293
+ host: defaultHost,
294
+ port: defaultPort,
295
+ verbose: false
296
+ };
297
+ if (config === true) return {
298
+ enabled: true,
299
+ endpoint: `http://${defaultHost}:${defaultPort}`,
300
+ embedded: false,
301
+ host: defaultHost,
302
+ port: defaultPort,
303
+ verbose: false
304
+ };
305
+ const enabled = config.enabled ?? true;
306
+ const host = config.host ?? defaultHost;
307
+ const port = config.port ?? defaultPort;
308
+ const endpoint = config.endpoint ?? `http://${host}:${port}`;
309
+ return {
310
+ enabled,
311
+ endpoint: enabled ? endpoint : void 0,
312
+ embedded: enabled && (config.embedded ?? false),
313
+ host,
314
+ port,
315
+ verbose: config.verbose ?? false
316
+ };
317
+ }
318
+
319
+ //#endregion
320
+ //#region src/init.ts
321
+ /**
322
+ * Simplified initialization for autotel
323
+ *
324
+ * Single init() function with sensible defaults.
325
+ * Replaces initInstrumentation() and separate events config.
326
+ */
327
+ /**
328
+ * Silent logger (no-op) - used as default when user doesn't provide one.
329
+ * Internal autotel logs are silent by default to avoid spam.
330
+ * Users can import { autotelLogger } from 'autotel/logger' to create their own.
331
+ */
332
+ const silentLogger = {
333
+ info: () => {},
334
+ warn: () => {},
335
+ error: () => {},
336
+ debug: () => {}
337
+ };
338
+ /**
339
+ * Adapts an Autotel Sampler to the OTel SDK Sampler interface.
340
+ */
341
+ function toOtelSampler(sampler) {
342
+ return {
343
+ shouldSample(_context, _traceId, spanName, _spanKind, _attributes, links) {
344
+ return { decision: sampler.shouldSample({
345
+ operationName: spanName,
346
+ args: [],
347
+ links
348
+ }) ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD };
349
+ },
350
+ toString() {
351
+ return `AutotelSamplerAdapter`;
352
+ }
353
+ };
354
+ }
355
+ let OTLPTraceExporterGRPC;
356
+ let OTLPMetricExporterGRPC;
357
+ let OTLPLogExporterGRPC;
358
+ /**
359
+ * Helper: Lazy-load gRPC trace exporter
360
+ */
361
+ function loadGRPCTraceExporter() {
362
+ if (OTLPTraceExporterGRPC) return OTLPTraceExporterGRPC;
363
+ try {
364
+ OTLPTraceExporterGRPC = requireModule("@opentelemetry/exporter-trace-otlp-grpc").OTLPTraceExporter;
365
+ return OTLPTraceExporterGRPC;
366
+ } catch {
367
+ throw new Error("gRPC trace exporter not found. Install @opentelemetry/exporter-trace-otlp-grpc");
368
+ }
369
+ }
370
+ /**
371
+ * Helper: Lazy-load gRPC metric exporter
372
+ */
373
+ function loadGRPCMetricExporter() {
374
+ if (OTLPMetricExporterGRPC) return OTLPMetricExporterGRPC;
375
+ try {
376
+ OTLPMetricExporterGRPC = requireModule("@opentelemetry/exporter-metrics-otlp-grpc").OTLPMetricExporter;
377
+ return OTLPMetricExporterGRPC;
378
+ } catch {
379
+ throw new Error("gRPC metric exporter not found. Install @opentelemetry/exporter-metrics-otlp-grpc");
380
+ }
381
+ }
382
+ /**
383
+ * Helper: Create trace exporter based on protocol
384
+ */
385
+ function createTraceExporter(protocol, config) {
386
+ if (protocol === "grpc") return new (loadGRPCTraceExporter())(config);
387
+ return new OTLPTraceExporter(config);
388
+ }
389
+ /**
390
+ * Helper: Create metric exporter based on protocol
391
+ */
392
+ function createMetricExporter(protocol, config) {
393
+ if (protocol === "grpc") return new (loadGRPCMetricExporter())(config);
394
+ return new OTLPMetricExporter(config);
395
+ }
396
+ /**
397
+ * Helper: Lazy-load gRPC log exporter
398
+ */
399
+ function loadGRPCLogExporter() {
400
+ if (OTLPLogExporterGRPC) return OTLPLogExporterGRPC;
401
+ try {
402
+ OTLPLogExporterGRPC = requireModule("@opentelemetry/exporter-logs-otlp-grpc").OTLPLogExporter;
403
+ return OTLPLogExporterGRPC;
404
+ } catch {
405
+ throw new Error("gRPC log exporter not found. Install @opentelemetry/exporter-logs-otlp-grpc");
406
+ }
407
+ }
408
+ /**
409
+ * Helper: Create log exporter based on protocol
410
+ */
411
+ function createLogExporter(protocol, config) {
412
+ if (protocol === "grpc") return new (loadGRPCLogExporter())(config);
413
+ return new OTLPLogExporter(config);
414
+ }
415
+ /**
416
+ * Helper: Resolve protocol from config and environment
417
+ */
418
+ function resolveProtocol(configProtocol) {
419
+ if (configProtocol === "grpc" || configProtocol === "http") return configProtocol;
420
+ const envProtocol = process.env.OTEL_EXPORTER_OTLP_PROTOCOL;
421
+ if (envProtocol === "grpc") return "grpc";
422
+ if (envProtocol === "http/protobuf" || envProtocol === "http") return "http";
423
+ return "http";
424
+ }
425
+ /**
426
+ * Helper: Adjust endpoint URL for protocol
427
+ * gRPC exporters don't need the /v1/traces or /v1/metrics path
428
+ * HTTP exporters need the full path
429
+ */
430
+ function formatEndpointUrl(endpoint, signal, protocol) {
431
+ if (protocol === "grpc") return endpoint.replace(/\/(v1\/)?(traces|metrics|logs)$/, "");
432
+ if (!endpoint.endsWith(`/v1/${signal}`)) return `${endpoint}/v1/${signal}`;
433
+ return endpoint;
434
+ }
435
+ let initialized = false;
436
+ let locked = false;
437
+ let config = null;
438
+ let sdk = null;
439
+ let warnedOnce = false;
440
+ let logger = silentLogger;
441
+ let validationConfig = null;
442
+ let eventsConfig = null;
443
+ let _stringRedactor = null;
444
+ let _optionalRequire = safeRequire;
445
+ let _devtoolsClose = null;
446
+ const LOG_LEVELS = {
447
+ debug: 0,
448
+ info: 1,
449
+ warn: 2,
450
+ error: 3
451
+ };
452
+ /**
453
+ * Lock the logger to prevent further `init()` calls.
454
+ * Use this when framework plugins set up instrumentation and you want
455
+ * to prevent accidental re-initialization from user code.
456
+ */
457
+ function lockLogger() {
458
+ locked = true;
459
+ }
460
+ /**
461
+ * Check if the logger has been locked.
462
+ */
463
+ function isLoggerLocked() {
464
+ return locked;
465
+ }
466
+ function createSilentLogger() {
467
+ return {
468
+ info: () => {},
469
+ warn: () => {},
470
+ error: () => {},
471
+ debug: () => {}
472
+ };
473
+ }
474
+ function wrapLogger(base, silent, minLevel) {
475
+ if (silent) return createSilentLogger();
476
+ const threshold = LOG_LEVELS[minLevel];
477
+ const wrap = (fn, level) => {
478
+ if (LOG_LEVELS[level] < threshold) return (() => {});
479
+ return ((...args) => fn(...args));
480
+ };
481
+ return {
482
+ debug: wrap(base.debug, "debug"),
483
+ info: wrap(base.info, "info"),
484
+ warn: wrap(base.warn, "warn"),
485
+ error: wrap(base.error, "error")
486
+ };
487
+ }
488
+ /**
489
+ * Resolve the effective attribute redactor. Explicit config wins (`false`
490
+ * disables). Otherwise the `AUTOTEL_REDACT_PII` env var controls it, and as a
491
+ * final default PII redaction is auto-enabled in production.
492
+ */
493
+ function resolveAttributeRedactor(explicit, environment) {
494
+ if (explicit === false) return void 0;
495
+ if (explicit !== void 0) return explicit;
496
+ const flag = process.env.AUTOTEL_REDACT_PII?.trim().toLowerCase();
497
+ if (flag) {
498
+ if ([
499
+ "off",
500
+ "false",
501
+ "0",
502
+ "none",
503
+ "disabled"
504
+ ].includes(flag)) return;
505
+ if (flag === "default" || flag === "strict" || flag === "pci-dss") return flag;
506
+ if ([
507
+ "on",
508
+ "true",
509
+ "1",
510
+ "enabled"
511
+ ].includes(flag)) return "default";
512
+ }
513
+ return environment === "production" ? "default" : void 0;
514
+ }
515
+ function detectEnvironmentAttributes() {
516
+ const attrs = {};
517
+ const commitSha = process.env.COMMIT_SHA || process.env.GITHUB_SHA || process.env.VERCEL_GIT_COMMIT_SHA || process.env.CF_PAGES_COMMIT_SHA || process.env.AWS_CODEPIPELINE_EXECUTION_ID;
518
+ if (commitSha) attrs["service.commit.sha"] = commitSha;
519
+ const region = process.env.VERCEL_REGION || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || process.env.FLY_REGION || process.env.CF_REGION || process.env.GOOGLE_CLOUD_REGION;
520
+ if (region) attrs["service.region"] = region;
521
+ const version = process.env.APP_VERSION || process.env.HEROKU_RELEASE_VERSION || process.env.VERCEL_GIT_COMMIT_REF;
522
+ if (version) attrs["service.deploy.version"] = version;
523
+ return attrs;
524
+ }
525
+ /**
526
+ * Resolve metrics flag with env var override support
527
+ */
528
+ function resolveMetricsFlag(configFlag = "auto") {
529
+ const envFlag = process.env.AUTOTEL_METRICS;
530
+ if (envFlag === "on" || envFlag === "true") return true;
531
+ if (envFlag === "off" || envFlag === "false") return false;
532
+ if (configFlag === true) return true;
533
+ if (configFlag === false) return false;
534
+ return true;
535
+ }
536
+ /**
537
+ * Resolve logs flag with env var override support.
538
+ * Defaults to disabled (opt-in only) to avoid unexpected log export
539
+ * and to preserve the upstream SDK's OTEL_LOGS_EXPORTER handling.
540
+ */
541
+ function resolveLogsFlag(configFlag = "auto") {
542
+ const envFlag = process.env.AUTOTEL_LOGS;
543
+ if (envFlag === "on" || envFlag === "true") return true;
544
+ if (envFlag === "off" || envFlag === "false") return false;
545
+ if (configFlag === true) return true;
546
+ if (configFlag === false) return false;
547
+ return false;
548
+ }
549
+ /**
550
+ * Resolve debug flag with env var override support
551
+ *
552
+ * Supports:
553
+ * - `'pretty'`: Colorized, hierarchical output (PrettyConsoleExporter)
554
+ * - `true` / `'true'` / `'1'`: Raw JSON output (ConsoleSpanExporter)
555
+ * - `false` / `'false'` / `'0'`: Disabled
556
+ */
557
+ function resolveDebugFlag(configFlag) {
558
+ const envFlag = process.env.AUTOTEL_DEBUG;
559
+ if (envFlag === "pretty") return "pretty";
560
+ if (envFlag === "true" || envFlag === "1") return true;
561
+ if (envFlag === "false" || envFlag === "0") return false;
562
+ return configFlag ?? false;
563
+ }
564
+ function normalizeOtlpHeaders(headers) {
565
+ if (!headers) return void 0;
566
+ if (typeof headers !== "string") return headers;
567
+ const parsed = {};
568
+ for (const pair of headers.split(",")) {
569
+ const [key, ...valueParts] = pair.split("=");
570
+ if (!key || valueParts.length === 0) continue;
571
+ parsed[key.trim()] = valueParts.join("=").trim();
572
+ }
573
+ return parsed;
574
+ }
575
+ /**
576
+ * Initialize autotel - Write Once, Observe Everywhere
577
+ *
578
+ * Follows OpenTelemetry standards: opinionated defaults with full flexibility
579
+ * Idempotent: multiple calls are safe, last one wins
580
+ *
581
+ * @example Minimal setup (OTLP default)
582
+ * ```typescript
583
+ * init({ service: 'my-app' })
584
+ * ```
585
+ *
586
+ * @example With events (observe in PostHog, Mixpanel, etc.)
587
+ * ```typescript
588
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
589
+ *
590
+ * init({
591
+ * service: 'my-app',
592
+ * subscribers: [new PostHogSubscriber({ apiKey: '...' })]
593
+ * })
594
+ * ```
595
+ *
596
+ * @example Observe in Jaeger
597
+ * ```typescript
598
+ * import { JaegerExporter } from '@opentelemetry/exporter-jaeger'
599
+ *
600
+ * init({
601
+ * service: 'my-app',
602
+ * spanExporter: new JaegerExporter({ endpoint: 'http://localhost:14268/api/traces' })
603
+ * })
604
+ * ```
605
+ *
606
+ * @example Observe in Zipkin
607
+ * ```typescript
608
+ * import { ZipkinExporter } from '@opentelemetry/exporter-zipkin'
609
+ *
610
+ * init({
611
+ * service: 'my-app',
612
+ * spanExporter: new ZipkinExporter({ url: 'http://localhost:9411/api/v2/spans' })
613
+ * })
614
+ * ```
615
+ *
616
+ * @example Observe in Datadog
617
+ * ```typescript
618
+ * import { DatadogSpanProcessor } from '@opentelemetry/exporter-datadog'
619
+ *
620
+ * init({
621
+ * service: 'my-app',
622
+ * spanProcessor: new DatadogSpanProcessor({ ... })
623
+ * })
624
+ * ```
625
+ *
626
+ * @example Console output (dev)
627
+ * ```typescript
628
+ * import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
629
+ *
630
+ * init({
631
+ * service: 'my-app',
632
+ * spanProcessor: new SimpleSpanProcessor(new ConsoleSpanExporter())
633
+ * })
634
+ * ```
635
+ */
636
+ function init(cfg) {
637
+ if (locked) return;
638
+ const envConfig = resolveConfigFromEnv();
639
+ const yamlConfig = loadYamlConfig() ?? {};
640
+ const mergedConfig = {
641
+ ...envConfig,
642
+ ...yamlConfig,
643
+ ...cfg,
644
+ resourceAttributes: {
645
+ ...envConfig.resourceAttributes,
646
+ ...yamlConfig.resourceAttributes,
647
+ ...detectEnvironmentAttributes(),
648
+ ...cfg.resourceAttributes
649
+ },
650
+ headers: cfg.headers ?? yamlConfig.headers ?? envConfig.headers
651
+ };
652
+ const resolvedRedactor = resolveAttributeRedactor(mergedConfig.attributeRedactor, mergedConfig.environment || process.env.NODE_ENV || "development");
653
+ if (resolvedRedactor === void 0) mergedConfig.attributeRedactor = void 0;
654
+ else {
655
+ const normalizedRedactor = normalizeAttributeRedactorConfig(resolvedRedactor);
656
+ if (!normalizedRedactor) throw new Error("Invalid attributeRedactor config");
657
+ mergedConfig.attributeRedactor = normalizedRedactor;
658
+ }
659
+ const devtoolsConfig = resolveDevtoolsConfig(mergedConfig.devtools);
660
+ if (devtoolsConfig.enabled && mergedConfig.logs === void 0) mergedConfig.logs = true;
661
+ const silent = mergedConfig.silent ?? false;
662
+ const minLevel = mergedConfig.minLevel ?? "info";
663
+ logger = wrapLogger(mergedConfig.logger || silentLogger, silent, minLevel);
664
+ if (initialized) logger.warn({}, "[autotel] init() called again - last config wins. This may cause unexpected behavior.");
665
+ config = mergedConfig;
666
+ validationConfig = mergedConfig.validation || null;
667
+ eventsConfig = mergedConfig.events || null;
668
+ let endpoint = mergedConfig.endpoint ?? devtoolsConfig.endpoint;
669
+ const otlpHeaders = normalizeOtlpHeaders(mergedConfig.headers);
670
+ const version = mergedConfig.version || detectVersion();
671
+ const environment = mergedConfig.environment || process.env.NODE_ENV || "development";
672
+ const metricsEnabled = resolveMetricsFlag(mergedConfig.metrics);
673
+ const logsEnabled = resolveLogsFlag(mergedConfig.logs);
674
+ if (devtoolsConfig.enabled && devtoolsConfig.embedded) {
675
+ const devtoolsModule = _optionalRequire("autotel-devtools");
676
+ if (devtoolsModule?.createDevtools) {
677
+ const devtoolsInstance = devtoolsModule.createDevtools({
678
+ port: devtoolsConfig.port,
679
+ host: devtoolsConfig.host,
680
+ verbose: devtoolsConfig.verbose
681
+ });
682
+ _devtoolsClose = devtoolsInstance.close;
683
+ endpoint = `http://${devtoolsConfig.host}:${devtoolsInstance.port}`;
684
+ logger.info({}, `[autotel] autotel-devtools embedded server started at ${endpoint}`);
685
+ } else logger.warn({}, "[autotel] devtools.embedded requested but autotel-devtools is not installed. Falling back to endpoint-only mode.");
686
+ }
687
+ const hostname = detectHostname();
688
+ let resource = resourceFromAttributes({
689
+ [ATTR_SERVICE_NAME]: mergedConfig.service,
690
+ [ATTR_SERVICE_VERSION]: version,
691
+ "deployment.environment": environment,
692
+ "deployment.environment.name": environment
693
+ });
694
+ if (hostname) resource = resource.merge(resourceFromAttributes({
695
+ "host.name": hostname,
696
+ "datadog.host.name": hostname
697
+ }));
698
+ if (mergedConfig.resource) resource = resource.merge(mergedConfig.resource);
699
+ if (mergedConfig.resourceAttributes) resource = resource.merge(resourceFromAttributes(mergedConfig.resourceAttributes));
700
+ const protocol = resolveProtocol(mergedConfig.protocol);
701
+ const configuredSpanProcessors = mergedConfig.spanProcessors && mergedConfig.spanProcessors.length > 0 ? mergedConfig.spanProcessors : mergedConfig.spanProcessor ? [mergedConfig.spanProcessor] : void 0;
702
+ const configuredSpanExporters = mergedConfig.spanExporters && mergedConfig.spanExporters.length > 0 ? mergedConfig.spanExporters : mergedConfig.spanExporter ? [mergedConfig.spanExporter] : void 0;
703
+ const configuredMetricReaders = mergedConfig.metricReaders && mergedConfig.metricReaders.length > 0 ? mergedConfig.metricReaders : mergedConfig.metricReader ? [mergedConfig.metricReader] : void 0;
704
+ const configuredLogRecordProcessors = mergedConfig.logRecordProcessors && mergedConfig.logRecordProcessors.length > 0 ? mergedConfig.logRecordProcessors : mergedConfig.logRecordProcessor ? [mergedConfig.logRecordProcessor] : void 0;
705
+ let spanProcessors = [];
706
+ if (configuredSpanProcessors && configuredSpanProcessors.length > 0) spanProcessors.push(...configuredSpanProcessors);
707
+ else if (configuredSpanExporters && configuredSpanExporters.length > 0) for (const exporter of configuredSpanExporters) spanProcessors.push(new TailSamplingSpanProcessor(new BatchSpanProcessor(exporter)));
708
+ else if (endpoint) {
709
+ const traceExporter = createTraceExporter(protocol, {
710
+ url: formatEndpointUrl(endpoint, "traces", protocol),
711
+ headers: otlpHeaders
712
+ });
713
+ spanProcessors.push(new TailSamplingSpanProcessor(new BatchSpanProcessor(traceExporter)));
714
+ }
715
+ if (mergedConfig.baggage) {
716
+ const prefix = typeof mergedConfig.baggage === "string" ? mergedConfig.baggage ? `${mergedConfig.baggage}.` : "" : "baggage.";
717
+ spanProcessors.push(new BaggageSpanProcessor({ prefix }));
718
+ }
719
+ const debugMode = resolveDebugFlag(mergedConfig.debug);
720
+ if (debugMode === "pretty") spanProcessors.push(new SimpleSpanProcessor(new PrettyConsoleExporter()));
721
+ else if (debugMode === true) spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));
722
+ if (mergedConfig.canonicalLogLines?.enabled) {
723
+ const canonicalOptions = {
724
+ logger: mergedConfig.canonicalLogLines.logger || mergedConfig.logger,
725
+ rootSpansOnly: mergedConfig.canonicalLogLines.rootSpansOnly,
726
+ minLevel: mergedConfig.canonicalLogLines.minLevel,
727
+ messageFormat: mergedConfig.canonicalLogLines.messageFormat,
728
+ includeResourceAttributes: mergedConfig.canonicalLogLines.includeResourceAttributes,
729
+ shouldEmit: mergedConfig.canonicalLogLines.shouldEmit,
730
+ keep: mergedConfig.canonicalLogLines.keep,
731
+ drain: mergedConfig.canonicalLogLines.drain,
732
+ onDrainError: mergedConfig.canonicalLogLines.onDrainError,
733
+ pretty: mergedConfig.canonicalLogLines.pretty
734
+ };
735
+ spanProcessors.push(new CanonicalLogLineProcessor(canonicalOptions));
736
+ }
737
+ if (mergedConfig.attributeRedactor && spanProcessors.length > 0) {
738
+ const redactor = mergedConfig.attributeRedactor;
739
+ spanProcessors = spanProcessors.map((processor) => new AttributeRedactingProcessor(processor, { redactor }));
740
+ }
741
+ if (mergedConfig.attributeRedactor) _stringRedactor = createStringRedactor(mergedConfig.attributeRedactor);
742
+ if (_stringRedactor && mergedConfig.subscribers) {
743
+ for (const subscriber of mergedConfig.subscribers) if ("setStringRedactor" in subscriber && typeof subscriber.setStringRedactor === "function") subscriber.setStringRedactor(_stringRedactor);
744
+ }
745
+ if (mergedConfig.spanNameNormalizer && spanProcessors.length > 0) spanProcessors = spanProcessors.map((processor) => new SpanNameNormalizingProcessor(processor, { normalizer: mergedConfig.spanNameNormalizer }));
746
+ if (mergedConfig.spanFilter && spanProcessors.length > 0) spanProcessors = spanProcessors.map((processor) => new FilteringSpanProcessor(processor, { filter: mergedConfig.spanFilter }));
747
+ const metricReaders = [];
748
+ if (configuredMetricReaders && configuredMetricReaders.length > 0) metricReaders.push(...configuredMetricReaders);
749
+ else if (metricsEnabled && endpoint) {
750
+ const metricExporter = createMetricExporter(protocol, {
751
+ url: formatEndpointUrl(endpoint, "metrics", protocol),
752
+ headers: otlpHeaders
753
+ });
754
+ metricReaders.push(new PeriodicExportingMetricReader({ exporter: metricExporter }));
755
+ }
756
+ let logRecordProcessors;
757
+ if (configuredLogRecordProcessors && configuredLogRecordProcessors.length > 0) logRecordProcessors = [...configuredLogRecordProcessors];
758
+ if (logsEnabled && endpoint) {
759
+ let processor = new BatchLogRecordProcessor(createLogExporter(protocol, {
760
+ url: formatEndpointUrl(endpoint, "logs", protocol),
761
+ headers: otlpHeaders
762
+ }));
763
+ if (_stringRedactor) processor = new RedactingLogRecordProcessor(processor, _stringRedactor);
764
+ if (!logRecordProcessors) logRecordProcessors = [];
765
+ logRecordProcessors.push(processor);
766
+ logger.info({}, "[autotel] OTLP log exporter configured");
767
+ }
768
+ const posthogProcessors = buildPostHogLogProcessors(mergedConfig.posthog, _stringRedactor);
769
+ if (posthogProcessors.length > 0) {
770
+ if (!logRecordProcessors) logRecordProcessors = [];
771
+ logRecordProcessors.push(...posthogProcessors);
772
+ logger.info({}, "[autotel] PostHog OTLP logs configured");
773
+ }
774
+ let finalInstrumentations = mergedConfig.instrumentations ? [...mergedConfig.instrumentations] : [];
775
+ if (mergedConfig.autoInstrumentations !== void 0 && mergedConfig.autoInstrumentations !== false) {
776
+ if (isESMMode()) logger.info({}, "[autotel] ESM mode detected. For auto-instrumentation to work:\n 1. Install @opentelemetry/auto-instrumentations-node as a direct dependency\n 2. Import autotel/register FIRST in your instrumentation file\n 3. Use getNodeAutoInstrumentations() directly instead of autoInstrumentations\n See: https://github.com/jagreehal/autotel#esm-setup");
777
+ try {
778
+ const manualInstrumentationNames = getInstrumentationNames(mergedConfig.instrumentations ?? []);
779
+ if (manualInstrumentationNames.size > 0) {
780
+ const manualNames = [...manualInstrumentationNames].join(", ");
781
+ logger.info({}, `[autotel] Detected manual instrumentations (${manualNames}). These will take precedence over auto-instrumentations. Tip: Set autoInstrumentations:false if you want full manual control, or remove manual configs to use auto-instrumentations.`);
782
+ }
783
+ const autoInstrumentations = getAutoInstrumentations(mergedConfig.autoInstrumentations, manualInstrumentationNames);
784
+ if (autoInstrumentations && autoInstrumentations.length > 0) finalInstrumentations = [...finalInstrumentations, ...autoInstrumentations];
785
+ } catch (error) {
786
+ logger.warn({}, `[autotel] Failed to configure auto-instrumentations: ${error instanceof Error ? error.message : String(error)}`);
787
+ }
788
+ }
789
+ const autotelSampler = mergedConfig.sampler ?? (mergedConfig.sampling ? resolveSamplingPreset(mergedConfig.sampling) : void 0);
790
+ if (autotelSampler) mergedConfig.sampler = autotelSampler;
791
+ const sampler = autotelSampler ? toOtelSampler(autotelSampler) : envConfig.otelSampler ?? toOtelSampler(samplingPresets.production());
792
+ const sdkOptions = {
793
+ resource,
794
+ sampler,
795
+ instrumentations: finalInstrumentations
796
+ };
797
+ if (spanProcessors.length > 0) sdkOptions.spanProcessors = spanProcessors;
798
+ if (metricReaders.length > 0) sdkOptions.metricReaders = metricReaders;
799
+ if (logRecordProcessors && logRecordProcessors.length > 0) sdkOptions.logRecordProcessors = logRecordProcessors;
800
+ sdk = mergedConfig.sdkFactory ? mergedConfig.sdkFactory(sdkOptions) : new NodeSDK(sdkOptions);
801
+ if (!sdk) throw new Error("[autotel] sdkFactory must return a NodeSDK instance");
802
+ sdk.start();
803
+ if (mergedConfig.openllmetry?.enabled) {
804
+ const traceloop = _optionalRequire("@traceloop/node-server-sdk");
805
+ if (traceloop) {
806
+ const initOptions = { ...mergedConfig.openllmetry.options };
807
+ try {
808
+ initOptions.tracerProvider = sdk.getTracerProvider();
809
+ } catch {}
810
+ if (configuredSpanExporters?.[0]) initOptions.exporter = configuredSpanExporters[0];
811
+ if (typeof traceloop.initialize === "function") {
812
+ traceloop.initialize(initOptions);
813
+ logger.info({}, "[autotel] OpenLLMetry initialized successfully");
814
+ } else logger.warn({}, "[autotel] OpenLLMetry initialize function not found. Check @traceloop/node-server-sdk version.");
815
+ } else logger.warn({}, "[autotel] OpenLLMetry enabled but @traceloop/node-server-sdk is not installed. Install it as a peer dependency to use OpenLLMetry integration.");
816
+ }
817
+ initialized = true;
818
+ }
819
+ /**
820
+ * Extract instrumentation class names from instrumentation instances
821
+ * Used to detect duplicates between manual and auto instrumentations
822
+ */
823
+ function getInstrumentationNames(instrumentations) {
824
+ const names = /* @__PURE__ */ new Set();
825
+ if (!instrumentations) return names;
826
+ for (const instrumentation of instrumentations) if (instrumentation && typeof instrumentation === "object") names.add(instrumentation.constructor.name);
827
+ return names;
828
+ }
829
+ /**
830
+ * Map common instrumentation class names to their package names
831
+ * Used to disable auto-instrumentations when user provides manual configs
832
+ */
833
+ const INSTRUMENTATION_CLASS_TO_PACKAGE = {
834
+ HttpInstrumentation: "@opentelemetry/instrumentation-http",
835
+ HttpsInstrumentation: "@opentelemetry/instrumentation-http",
836
+ ExpressInstrumentation: "@opentelemetry/instrumentation-express",
837
+ FastifyInstrumentation: "@opentelemetry/instrumentation-fastify",
838
+ MongoDBInstrumentation: "@opentelemetry/instrumentation-mongodb",
839
+ MongooseInstrumentation: "@opentelemetry/instrumentation-mongoose",
840
+ PrismaInstrumentation: "@opentelemetry/instrumentation-prisma",
841
+ PinoInstrumentation: "@opentelemetry/instrumentation-pino",
842
+ WinstonInstrumentation: "@opentelemetry/instrumentation-winston",
843
+ RedisInstrumentation: "@opentelemetry/instrumentation-redis",
844
+ GraphQLInstrumentation: "@opentelemetry/instrumentation-graphql",
845
+ GrpcInstrumentation: "@opentelemetry/instrumentation-grpc",
846
+ IORedisInstrumentation: "@opentelemetry/instrumentation-ioredis",
847
+ KnexInstrumentation: "@opentelemetry/instrumentation-knex",
848
+ NestJsInstrumentation: "@opentelemetry/instrumentation-nestjs-core",
849
+ PgInstrumentation: "@opentelemetry/instrumentation-pg",
850
+ MySQLInstrumentation: "@opentelemetry/instrumentation-mysql",
851
+ MySQL2Instrumentation: "@opentelemetry/instrumentation-mysql2"
852
+ };
853
+ /**
854
+ * Detect if we're running in ESM mode
855
+ */
856
+ function isESMMode() {
857
+ try {
858
+ const fs = requireModule("node:fs");
859
+ try {
860
+ return JSON.parse(fs.readFileSync(`${process.cwd()}/package.json`, "utf8")).type === "module";
861
+ } catch {
862
+ return false;
863
+ }
864
+ } catch {
865
+ return false;
866
+ }
867
+ }
868
+ /**
869
+ * Lazy-load auto-instrumentations (optional peer dependency)
870
+ * Only loads when integrations config is truthy, avoiding ~40+ package imports at startup.
871
+ */
872
+ function loadNodeAutoInstrumentations() {
873
+ try {
874
+ return requireModule("@opentelemetry/auto-instrumentations-node").getNodeAutoInstrumentations;
875
+ } catch {
876
+ const isESM = isESMMode();
877
+ const baseMessage = "@opentelemetry/auto-instrumentations-node not found.";
878
+ if (isESM) throw new Error(`${baseMessage}\n\nESM Setup Required:
879
+ 1. Install as a direct dependency: pnpm add @opentelemetry/auto-instrumentations-node
880
+ 2. Create instrumentation.mjs with:
881
+ import 'autotel/register'; // MUST be first!
882
+ import { init } from 'autotel';
883
+ import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
884
+ init({ service: "my-app", instrumentations: getNodeAutoInstrumentations() });
885
+ 3. Run with: tsx --import ./instrumentation.mjs src/index.ts
886
+
887
+ See: https://github.com/jagreehal/autotel#esm-setup`);
888
+ throw new Error(`${baseMessage} Install it: pnpm add @opentelemetry/auto-instrumentations-node`);
889
+ }
890
+ }
891
+ /**
892
+ * Injectable loader for testing. Set to override the default loader.
893
+ * @internal
894
+ */
895
+ let _autoInstrumentationsLoader = null;
896
+ /**
897
+ * Get auto-instrumentations based on simple integration names
898
+ * Excludes instrumentations that are manually provided to avoid conflicts
899
+ */
900
+ function getAutoInstrumentations(integrations, manualInstrumentationNames = /* @__PURE__ */ new Set()) {
901
+ if (integrations === false) return [];
902
+ const getNodeAutoInstrumentations = _autoInstrumentationsLoader ? _autoInstrumentationsLoader() : loadNodeAutoInstrumentations();
903
+ const exclusionConfig = {};
904
+ for (const className of manualInstrumentationNames) {
905
+ const packageName = INSTRUMENTATION_CLASS_TO_PACKAGE[className];
906
+ if (packageName) exclusionConfig[packageName] = { enabled: false };
907
+ }
908
+ if (integrations === true) {
909
+ if (Object.keys(exclusionConfig).length > 0) return getNodeAutoInstrumentations(exclusionConfig);
910
+ return getNodeAutoInstrumentations();
911
+ }
912
+ if (Array.isArray(integrations)) {
913
+ const config = { ...exclusionConfig };
914
+ for (const name of integrations) {
915
+ const packageName = `@opentelemetry/instrumentation-${name}`;
916
+ if (!exclusionConfig[packageName]) config[packageName] = { enabled: true };
917
+ }
918
+ return getNodeAutoInstrumentations(config);
919
+ }
920
+ const config = {
921
+ ...exclusionConfig,
922
+ ...integrations
923
+ };
924
+ for (const packageName of Object.keys(exclusionConfig)) if (Object.keys(integrations).find((key) => packageName.includes(key))) config[packageName] = { enabled: false };
925
+ return getNodeAutoInstrumentations(config);
926
+ }
927
+ /**
928
+ * Check if autotel has been initialized
929
+ */
930
+ function isInitialized() {
931
+ return initialized;
932
+ }
933
+ /**
934
+ * Get current config (internal use)
935
+ */
936
+ function getConfig() {
937
+ return config;
938
+ }
939
+ /**
940
+ * Get current logger (internal use)
941
+ */
942
+ function getLogger() {
943
+ return logger;
944
+ }
945
+ /**
946
+ * Get validation config (internal use)
947
+ */
948
+ function getValidationConfig() {
949
+ return validationConfig;
950
+ }
951
+ /**
952
+ * Get events config (internal use)
953
+ */
954
+ function getEventsConfig() {
955
+ return eventsConfig;
956
+ }
957
+ /**
958
+ * Warn once if not initialized (same behavior in all environments)
959
+ */
960
+ function warnIfNotInitialized(context) {
961
+ if (!initialized && !warnedOnce) {
962
+ logger.warn({}, `[autotel] ${context} used before init() called. Call init({ service: "..." }) first. See: https://docs.autotel.dev/quickstart`);
963
+ warnedOnce = true;
964
+ }
965
+ }
966
+ /**
967
+ * Auto-detect version from package.json
968
+ */
969
+ function detectVersion() {
970
+ try {
971
+ const fs = requireModule("node:fs");
972
+ return JSON.parse(fs.readFileSync(`${process.cwd()}/package.json`, "utf8")).version || "1.0.0";
973
+ } catch {
974
+ return "1.0.0";
975
+ }
976
+ }
977
+ /**
978
+ * Detect hostname for resource attributes.
979
+ * Supports Datadog conventions (DD_HOSTNAME) and falls back to system hostname.
980
+ *
981
+ * Priority order:
982
+ * 1. DD_HOSTNAME environment variable (Datadog convention)
983
+ * 2. HOSTNAME environment variable (common Unix convention)
984
+ * 3. os.hostname() (system hostname)
985
+ *
986
+ * @returns hostname string or undefined if detection fails
987
+ */
988
+ function detectHostname() {
989
+ if (process.env.DD_HOSTNAME) return process.env.DD_HOSTNAME;
990
+ if (process.env.HOSTNAME) return process.env.HOSTNAME;
991
+ try {
992
+ return requireModule("node:os").hostname();
993
+ } catch {
994
+ return;
995
+ }
996
+ }
997
+ /**
998
+ * @internal Close embedded devtools if running.
999
+ */
1000
+ async function _closeEmbeddedDevtools() {
1001
+ if (_devtoolsClose) {
1002
+ await _devtoolsClose();
1003
+ _devtoolsClose = null;
1004
+ }
1005
+ }
1006
+ /**
1007
+ * Get SDK instance (for shutdown)
1008
+ */
1009
+ function getSdk() {
1010
+ return sdk;
1011
+ }
1012
+
1013
+ //#endregion
1014
+ export { getSdk as a, isInitialized as c, warnIfNotInitialized as d, createStringRedactor as f, getLogger as i, isLoggerLocked as l, getConfig as n, getValidationConfig as o, BaggageSpanProcessor as p, getEventsConfig as r, init as s, _closeEmbeddedDevtools as t, lockLogger as u };
1015
+ //# sourceMappingURL=init-Ch6t7MNI.js.map