autotel 3.6.0 → 3.7.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 (602) 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-D3etyRVc.cjs +713 -0
  12. package/dist/attributes-D3etyRVc.cjs.map +1 -0
  13. package/dist/attributes-ksn4HVbd.js +600 -0
  14. package/dist/attributes-ksn4HVbd.js.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-CX0aG1Uh.d.ts +708 -0
  158. package/dist/index-CX0aG1Uh.d.ts.map +1 -0
  159. package/dist/index-DIWZFKUS.d.cts +708 -0
  160. package/dist/index-DIWZFKUS.d.cts.map +1 -0
  161. package/dist/index.cjs +1049 -1172
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +401 -551
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +401 -551
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +912 -714
  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-DfXA3R1L.js +184 -0
  276. package/dist/registry-DfXA3R1L.js.map +1 -0
  277. package/dist/registry-JZg2J3RZ.cjs +334 -0
  278. package/dist/registry-JZg2J3RZ.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 +440 -39
  308. package/dist/semantic-helpers.cjs.map +1 -1
  309. package/dist/semantic-helpers.d.cts +38 -45
  310. package/dist/semantic-helpers.d.cts.map +1 -0
  311. package/dist/semantic-helpers.d.ts +38 -45
  312. package/dist/semantic-helpers.d.ts.map +1 -0
  313. package/dist/semantic-helpers.js +438 -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/src/index.ts +3 -0
  432. package/src/request-logger.test.ts +53 -1
  433. package/src/request-logger.ts +58 -0
  434. package/src/validate.test.ts +3 -1
  435. package/src/validate.ts +9 -3
  436. package/dist/attributes.cjs.map +0 -1
  437. package/dist/attributes.js.map +0 -1
  438. package/dist/chunk-2ZKEORFN.cjs +0 -14
  439. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  440. package/dist/chunk-3QXBFGKP.js +0 -344
  441. package/dist/chunk-3QXBFGKP.js.map +0 -1
  442. package/dist/chunk-454CH4OV.js +0 -744
  443. package/dist/chunk-454CH4OV.js.map +0 -1
  444. package/dist/chunk-4A53YIAX.js +0 -180
  445. package/dist/chunk-4A53YIAX.js.map +0 -1
  446. package/dist/chunk-4IFSYQVX.js +0 -337
  447. package/dist/chunk-4IFSYQVX.js.map +0 -1
  448. package/dist/chunk-4P6ZOARG.cjs +0 -33
  449. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  450. package/dist/chunk-55ER2KD5.js +0 -228
  451. package/dist/chunk-55ER2KD5.js.map +0 -1
  452. package/dist/chunk-5ZN622AO.js +0 -73
  453. package/dist/chunk-5ZN622AO.js.map +0 -1
  454. package/dist/chunk-66YJ66GG.js +0 -1021
  455. package/dist/chunk-66YJ66GG.js.map +0 -1
  456. package/dist/chunk-6S5RUKU3.cjs +0 -347
  457. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  458. package/dist/chunk-6UQRVUN3.js +0 -222
  459. package/dist/chunk-6UQRVUN3.js.map +0 -1
  460. package/dist/chunk-7552UTQW.js +0 -11
  461. package/dist/chunk-7552UTQW.js.map +0 -1
  462. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  463. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  464. package/dist/chunk-7SAWIN74.js +0 -285
  465. package/dist/chunk-7SAWIN74.js.map +0 -1
  466. package/dist/chunk-A4E5AQFK.js +0 -30
  467. package/dist/chunk-A4E5AQFK.js.map +0 -1
  468. package/dist/chunk-ALPYR2GC.js +0 -1061
  469. package/dist/chunk-ALPYR2GC.js.map +0 -1
  470. package/dist/chunk-B7SWBE4P.cjs +0 -799
  471. package/dist/chunk-B7SWBE4P.cjs.map +0 -1
  472. package/dist/chunk-BZHG5IZ4.js +0 -73
  473. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  474. package/dist/chunk-CEAQK2QY.cjs +0 -32
  475. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  476. package/dist/chunk-CMHVQR6P.js +0 -170
  477. package/dist/chunk-CMHVQR6P.js.map +0 -1
  478. package/dist/chunk-CU6IDACR.cjs +0 -224
  479. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  480. package/dist/chunk-D4TM63S3.js +0 -795
  481. package/dist/chunk-D4TM63S3.js.map +0 -1
  482. package/dist/chunk-DCEDJQGG.js +0 -28
  483. package/dist/chunk-DCEDJQGG.js.map +0 -1
  484. package/dist/chunk-DPSA4QLA.js +0 -344
  485. package/dist/chunk-DPSA4QLA.js.map +0 -1
  486. package/dist/chunk-E6TERL5O.cjs +0 -23
  487. package/dist/chunk-E6TERL5O.cjs.map +0 -1
  488. package/dist/chunk-EE6CPXKH.cjs +0 -164
  489. package/dist/chunk-EE6CPXKH.cjs.map +0 -1
  490. package/dist/chunk-EOFB7XCL.cjs +0 -837
  491. package/dist/chunk-EOFB7XCL.cjs.map +0 -1
  492. package/dist/chunk-ESLWRGAG.cjs +0 -92
  493. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  494. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  495. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  496. package/dist/chunk-FMTHVSYY.cjs +0 -1039
  497. package/dist/chunk-FMTHVSYY.cjs.map +0 -1
  498. package/dist/chunk-FU6R566Y.cjs +0 -236
  499. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  500. package/dist/chunk-GYR5K654.js +0 -91
  501. package/dist/chunk-GYR5K654.js.map +0 -1
  502. package/dist/chunk-HA2WBOGQ.js +0 -57
  503. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  504. package/dist/chunk-HT5JQKN2.js +0 -118
  505. package/dist/chunk-HT5JQKN2.js.map +0 -1
  506. package/dist/chunk-INJD3G4K.cjs +0 -340
  507. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  508. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  509. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  510. package/dist/chunk-J5QENANM.js +0 -87
  511. package/dist/chunk-J5QENANM.js.map +0 -1
  512. package/dist/chunk-J7VGRIAJ.js +0 -64
  513. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  514. package/dist/chunk-KFOHQK7X.js +0 -144
  515. package/dist/chunk-KFOHQK7X.js.map +0 -1
  516. package/dist/chunk-KIL5CUN6.js +0 -31
  517. package/dist/chunk-KIL5CUN6.js.map +0 -1
  518. package/dist/chunk-KYXZS3EA.cjs +0 -100
  519. package/dist/chunk-KYXZS3EA.cjs.map +0 -1
  520. package/dist/chunk-LITNXTTT.js +0 -3
  521. package/dist/chunk-LITNXTTT.js.map +0 -1
  522. package/dist/chunk-LVIPBYFE.js +0 -157
  523. package/dist/chunk-LVIPBYFE.js.map +0 -1
  524. package/dist/chunk-M3LFHHTN.cjs +0 -764
  525. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  526. package/dist/chunk-N25JDZSC.js +0 -95
  527. package/dist/chunk-N25JDZSC.js.map +0 -1
  528. package/dist/chunk-NEIB3TLD.cjs +0 -360
  529. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  530. package/dist/chunk-NENU7E6V.cjs +0 -344
  531. package/dist/chunk-NENU7E6V.cjs.map +0 -1
  532. package/dist/chunk-NVAI5CCN.cjs +0 -39
  533. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  534. package/dist/chunk-NZ72VDNY.cjs +0 -4
  535. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  536. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  537. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  538. package/dist/chunk-Q4EULJQY.js +0 -35
  539. package/dist/chunk-Q4EULJQY.js.map +0 -1
  540. package/dist/chunk-QF7ARNUM.js +0 -339
  541. package/dist/chunk-QF7ARNUM.js.map +0 -1
  542. package/dist/chunk-QWW3E3JM.cjs +0 -178
  543. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  544. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  545. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  546. package/dist/chunk-RUPKBKUF.js +0 -352
  547. package/dist/chunk-RUPKBKUF.js.map +0 -1
  548. package/dist/chunk-SEO6NAQT.js +0 -14
  549. package/dist/chunk-SEO6NAQT.js.map +0 -1
  550. package/dist/chunk-T4B5LB6E.cjs +0 -66
  551. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  552. package/dist/chunk-T5WRA76K.cjs +0 -32
  553. package/dist/chunk-T5WRA76K.cjs.map +0 -1
  554. package/dist/chunk-T7JO2TCP.js +0 -1233
  555. package/dist/chunk-T7JO2TCP.js.map +0 -1
  556. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  557. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  558. package/dist/chunk-TQ5UWA7S.js +0 -26
  559. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  560. package/dist/chunk-UIKYE2QZ.js +0 -833
  561. package/dist/chunk-UIKYE2QZ.js.map +0 -1
  562. package/dist/chunk-UNPLAVE7.js +0 -21
  563. package/dist/chunk-UNPLAVE7.js.map +0 -1
  564. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  565. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  566. package/dist/chunk-V7UBMJAB.cjs +0 -1242
  567. package/dist/chunk-V7UBMJAB.cjs.map +0 -1
  568. package/dist/chunk-VH77IPJN.cjs +0 -358
  569. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  570. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  571. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  572. package/dist/chunk-WGWSHJ2N.js +0 -38
  573. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  574. package/dist/chunk-WJH6IYU2.cjs +0 -32
  575. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  576. package/dist/chunk-YREV3LGG.cjs +0 -61
  577. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  578. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  579. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  580. package/dist/chunk-ZNMBW67B.cjs +0 -40
  581. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  582. package/dist/correlation-id.cjs.map +0 -1
  583. package/dist/correlation-id.js.map +0 -1
  584. package/dist/define-event-BL6Li7CM.d.ts +0 -23
  585. package/dist/define-event-ClP3T1Jx.d.cts +0 -23
  586. package/dist/event-subscriber.cjs.map +0 -1
  587. package/dist/event-subscriber.js.map +0 -1
  588. package/dist/event.cjs.map +0 -1
  589. package/dist/event.js.map +0 -1
  590. package/dist/exporters.cjs.map +0 -1
  591. package/dist/exporters.js.map +0 -1
  592. package/dist/functional.cjs.map +0 -1
  593. package/dist/functional.js.map +0 -1
  594. package/dist/init-DIowiiCh.d.ts +0 -1167
  595. package/dist/init-j-A1zI16.d.cts +0 -1167
  596. package/dist/processors.cjs.map +0 -1
  597. package/dist/processors.js.map +0 -1
  598. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  599. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  600. package/dist/utils-BahBCFtJ.d.cts +0 -712
  601. package/dist/utils-CLKwaUlG.d.ts +0 -712
  602. package/dist/yaml-config.cjs.map +0 -1
package/dist/db.js CHANGED
@@ -1,227 +1,263 @@
1
- import { getConfig } from './chunk-J5QENANM.js';
2
- import './chunk-HA2WBOGQ.js';
3
- import { SpanStatusCode } from '@opentelemetry/api';
1
+ import { getConfig } from "./config.js";
2
+ import { SpanStatusCode } from "@opentelemetry/api";
4
3
 
4
+ //#region src/db.ts
5
+ /**
6
+ * Database Instrumentation Helpers
7
+ *
8
+ * Optional import: Not included in main bundle
9
+ * Import from: 'autotel/db'
10
+ *
11
+ * Provides functional utilities for database query instrumentation.
12
+ * Works with Prisma, Drizzle, TypeORM, raw SQL, and more.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { instrumentDatabase } from 'autotel/db'
17
+ *
18
+ * const db = drizzle(pool)
19
+ * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })
20
+ *
21
+ * // Now all queries are automatically trace
22
+ * await db.select().from(users)
23
+ * ```
24
+ */
25
+ /**
26
+ * Helper: Trace a single database query
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { tracebQuery } from 'autotel/db'
31
+ *
32
+ * const users = await tracebQuery(
33
+ * 'postgresql',
34
+ * 'SELECT',
35
+ * () => db.query('SELECT * FROM users WHERE active = true')
36
+ * )
37
+ * ```
38
+ */
5
39
  async function tracebQuery(dbSystem, operation, fn, attributes) {
6
- const config = getConfig();
7
- const tracer = config.tracer;
8
- const spanName = `${dbSystem}.${operation}`;
9
- return tracer.startActiveSpan(spanName, async (span) => {
10
- const startTime = performance.now();
11
- try {
12
- span.setAttributes({
13
- "db.system": dbSystem,
14
- "db.operation": operation,
15
- ...attributes
16
- });
17
- const result = await fn();
18
- const duration = performance.now() - startTime;
19
- span.setStatus({ code: SpanStatusCode.OK });
20
- span.setAttribute("db.duration_ms", duration);
21
- if (Array.isArray(result)) {
22
- span.setAttribute("db.result_count", result.length);
23
- }
24
- return result;
25
- } catch (error) {
26
- const duration = performance.now() - startTime;
27
- span.setStatus({
28
- code: SpanStatusCode.ERROR,
29
- message: error instanceof Error ? error.message : "Unknown error"
30
- });
31
- span.setAttributes({
32
- "db.duration_ms": duration,
33
- "error.type": error instanceof Error ? error.constructor.name : "Unknown",
34
- "error.message": error instanceof Error ? error.message : "Unknown error"
35
- });
36
- throw error;
37
- } finally {
38
- span.end();
39
- }
40
- });
40
+ const tracer = getConfig().tracer;
41
+ const spanName = `${dbSystem}.${operation}`;
42
+ return tracer.startActiveSpan(spanName, async (span) => {
43
+ const startTime = performance.now();
44
+ try {
45
+ span.setAttributes({
46
+ "db.system": dbSystem,
47
+ "db.operation": operation,
48
+ ...attributes
49
+ });
50
+ const result = await fn();
51
+ const duration = performance.now() - startTime;
52
+ span.setStatus({ code: SpanStatusCode.OK });
53
+ span.setAttribute("db.duration_ms", duration);
54
+ if (Array.isArray(result)) span.setAttribute("db.result_count", result.length);
55
+ return result;
56
+ } catch (error) {
57
+ const duration = performance.now() - startTime;
58
+ span.setStatus({
59
+ code: SpanStatusCode.ERROR,
60
+ message: error instanceof Error ? error.message : "Unknown error"
61
+ });
62
+ span.setAttributes({
63
+ "db.duration_ms": duration,
64
+ "error.type": error instanceof Error ? error.constructor.name : "Unknown",
65
+ "error.message": error instanceof Error ? error.message : "Unknown error"
66
+ });
67
+ throw error;
68
+ } finally {
69
+ span.end();
70
+ }
71
+ });
41
72
  }
42
73
  function inferDbOperation(methodName) {
43
- const lower = methodName.toLowerCase();
44
- if (lower.includes("find") || lower.includes("get") || lower.includes("list"))
45
- return "SELECT";
46
- if (lower.includes("create") || lower.includes("insert")) return "INSERT";
47
- if (lower.includes("update") || lower.includes("modify")) return "UPDATE";
48
- if (lower.includes("delete") || lower.includes("remove")) return "DELETE";
49
- if (lower.includes("count")) return "COUNT";
50
- return "QUERY";
74
+ const lower = methodName.toLowerCase();
75
+ if (lower.includes("find") || lower.includes("get") || lower.includes("list")) return "SELECT";
76
+ if (lower.includes("create") || lower.includes("insert")) return "INSERT";
77
+ if (lower.includes("update") || lower.includes("modify")) return "UPDATE";
78
+ if (lower.includes("delete") || lower.includes("remove")) return "DELETE";
79
+ if (lower.includes("count")) return "COUNT";
80
+ return "QUERY";
51
81
  }
52
82
  function inferTableName(methodName) {
53
- const patterns = [
54
- /find([A-Z][a-zA-Z]+)/,
55
- /get([A-Z][a-zA-Z]+)/,
56
- /list([A-Z][a-zA-Z]+)/,
57
- /create([A-Z][a-zA-Z]+)/,
58
- /update([A-Z][a-zA-Z]+)/,
59
- /delete([A-Z][a-zA-Z]+)/,
60
- /remove([A-Z][a-zA-Z]+)/
61
- ];
62
- for (const pattern of patterns) {
63
- const match = methodName.match(pattern);
64
- if (match && match[1]) {
65
- return match[1].toLowerCase();
66
- }
67
- }
68
- return void 0;
83
+ for (const pattern of [
84
+ /find([A-Z][a-zA-Z]+)/,
85
+ /get([A-Z][a-zA-Z]+)/,
86
+ /list([A-Z][a-zA-Z]+)/,
87
+ /create([A-Z][a-zA-Z]+)/,
88
+ /update([A-Z][a-zA-Z]+)/,
89
+ /delete([A-Z][a-zA-Z]+)/,
90
+ /remove([A-Z][a-zA-Z]+)/
91
+ ]) {
92
+ const match = methodName.match(pattern);
93
+ if (match && match[1]) return match[1].toLowerCase();
94
+ }
69
95
  }
70
96
  function sanitizeSqlQuery(query) {
71
- return query.replaceAll(/'[^']*'/g, "'?'").replaceAll(/"[^"]*"/g, '"?"').replaceAll(/\b\d+\b/g, "?").trim();
97
+ return query.replaceAll(/'[^']*'/g, "'?'").replaceAll(/"[^"]*"/g, "\"?\"").replaceAll(/\b\d+\b/g, "?").trim();
72
98
  }
73
- var DB_OPERATIONS = {
74
- SELECT: "SELECT",
75
- INSERT: "INSERT",
76
- UPDATE: "UPDATE",
77
- DELETE: "DELETE",
78
- COUNT: "COUNT",
79
- AGGREGATE: "AGGREGATE"
99
+ /**
100
+ * Common database operation metrics
101
+ */
102
+ const DB_OPERATIONS = {
103
+ SELECT: "SELECT",
104
+ INSERT: "INSERT",
105
+ UPDATE: "UPDATE",
106
+ DELETE: "DELETE",
107
+ COUNT: "COUNT",
108
+ AGGREGATE: "AGGREGATE"
80
109
  };
81
- var DB_SYSTEMS = {
82
- POSTGRESQL: "postgresql",
83
- MYSQL: "mysql",
84
- MONGODB: "mongodb",
85
- REDIS: "redis",
86
- SQLITE: "sqlite",
87
- MSSQL: "mssql"
110
+ /**
111
+ * Common database systems
112
+ */
113
+ const DB_SYSTEMS = {
114
+ POSTGRESQL: "postgresql",
115
+ MYSQL: "mysql",
116
+ MONGODB: "mongodb",
117
+ REDIS: "redis",
118
+ SQLITE: "sqlite",
119
+ MSSQL: "mssql"
88
120
  };
89
- var INSTRUMENTED_SYMBOL = /* @__PURE__ */ Symbol.for("autotel.db.instrumented");
121
+ const INSTRUMENTED_SYMBOL = Symbol.for("autotel.db.instrumented");
122
+ /**
123
+ * Instrument a database client instance with OpenTelemetry tracing
124
+ *
125
+ * This is a function-based alternative to @DbInstrumented decorator.
126
+ * Modifies the client in-place and returns it (idempotent - safe to call multiple times).
127
+ *
128
+ * Inspired by otel-drizzle and other otel instrumentation packages.
129
+ *
130
+ * @example Drizzle ORM
131
+ * ```typescript
132
+ * import { drizzle } from 'drizzle-orm/node-postgres'
133
+ * import { instrumentDatabase } from 'autotel/db'
134
+ *
135
+ * const db = drizzle(pool)
136
+ * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })
137
+ *
138
+ * // Now all db queries are automatically trace
139
+ * await db.select().from(users)
140
+ * ```
141
+ *
142
+ * @example Prisma
143
+ * ```typescript
144
+ * import { PrismaClient } from '@prisma/client'
145
+ * import { instrumentDatabase } from 'autotel/db'
146
+ *
147
+ * const prisma = new PrismaClient()
148
+ * instrumentDatabase(prisma, {
149
+ * dbSystem: 'postgresql',
150
+ * methods: ['findMany', 'findUnique', 'create', 'update', 'delete']
151
+ * })
152
+ *
153
+ * // All specified methods are trace
154
+ * await prisma.user.findMany()
155
+ * ```
156
+ *
157
+ * @example Generic database client
158
+ * ```typescript
159
+ * import { instrumentDatabase } from 'autotel/db'
160
+ *
161
+ * const db = createDatabaseClient()
162
+ * instrumentDatabase(db, {
163
+ * dbSystem: 'mongodb',
164
+ * methods: ['find', 'findOne', 'insertOne', 'updateOne', 'deleteOne']
165
+ * })
166
+ * ```
167
+ */
90
168
  function instrumentDatabase(client, options) {
91
- if (client[INSTRUMENTED_SYMBOL]) {
92
- return client;
93
- }
94
- const {
95
- dbSystem,
96
- dbName,
97
- methods,
98
- skipMethods = [],
99
- sanitizeQuery = true,
100
- slowQueryThresholdMs = 1e3
101
- } = options;
102
- const config = getConfig();
103
- const tracer = config.tracer;
104
- const methodsToInstrument = methods || extractDatabaseMethods(client);
105
- const skipSet = new Set(skipMethods);
106
- for (const methodName of methodsToInstrument) {
107
- if (skipSet.has(methodName)) continue;
108
- if (methodName.startsWith("_")) continue;
109
- const method = client[methodName];
110
- if (typeof method !== "function") continue;
111
- const originalMethod = method;
112
- client[methodName] = async function(...args) {
113
- const operation = inferDbOperation(methodName);
114
- const table = inferTableName(methodName);
115
- const spanName = table ? `${dbSystem}.${operation} ${table}` : `${dbSystem}.${operation}`;
116
- return tracer.startActiveSpan(spanName, async (span) => {
117
- const startTime = performance.now();
118
- try {
119
- span.setAttributes({
120
- "db.system": dbSystem,
121
- "db.operation": operation
122
- });
123
- if (dbName) {
124
- span.setAttribute("db.name", dbName);
125
- }
126
- if (table) {
127
- span.setAttribute("db.sql.table", table);
128
- }
129
- const query = extractQueryFromArgs(args);
130
- if (query) {
131
- span.setAttribute(
132
- "db.statement",
133
- sanitizeQuery ? sanitizeSqlQuery(query) : query
134
- );
135
- }
136
- const result = await originalMethod.apply(this, args);
137
- const duration = performance.now() - startTime;
138
- span.setStatus({ code: SpanStatusCode.OK });
139
- span.setAttributes({
140
- "db.duration_ms": duration
141
- });
142
- if (duration > slowQueryThresholdMs) {
143
- span.setAttribute("db.slow_query", true);
144
- span.setAttribute(
145
- "db.slow_query_threshold_ms",
146
- slowQueryThresholdMs
147
- );
148
- }
149
- if (Array.isArray(result)) {
150
- span.setAttribute("db.result_count", result.length);
151
- }
152
- return result;
153
- } catch (error) {
154
- const duration = performance.now() - startTime;
155
- span.setStatus({
156
- code: SpanStatusCode.ERROR,
157
- message: error instanceof Error ? error.message : "Unknown error"
158
- });
159
- span.setAttributes({
160
- "db.duration_ms": duration,
161
- "error.type": error instanceof Error ? error.constructor.name : "Unknown",
162
- "error.message": error instanceof Error ? error.message : "Unknown error"
163
- });
164
- span.recordException(
165
- error instanceof Error ? error : new Error(String(error))
166
- );
167
- throw error;
168
- } finally {
169
- span.end();
170
- }
171
- });
172
- };
173
- Object.defineProperty(client[methodName], "name", {
174
- value: methodName,
175
- configurable: true
176
- });
177
- }
178
- client[INSTRUMENTED_SYMBOL] = true;
179
- return client;
169
+ if (client[INSTRUMENTED_SYMBOL]) return client;
170
+ const { dbSystem, dbName, methods, skipMethods = [], sanitizeQuery = true, slowQueryThresholdMs = 1e3 } = options;
171
+ const tracer = getConfig().tracer;
172
+ const methodsToInstrument = methods || extractDatabaseMethods(client);
173
+ const skipSet = new Set(skipMethods);
174
+ for (const methodName of methodsToInstrument) {
175
+ if (skipSet.has(methodName)) continue;
176
+ if (methodName.startsWith("_")) continue;
177
+ const method = client[methodName];
178
+ if (typeof method !== "function") continue;
179
+ const originalMethod = method;
180
+ client[methodName] = async function(...args) {
181
+ const operation = inferDbOperation(methodName);
182
+ const table = inferTableName(methodName);
183
+ const spanName = table ? `${dbSystem}.${operation} ${table}` : `${dbSystem}.${operation}`;
184
+ return tracer.startActiveSpan(spanName, async (span) => {
185
+ const startTime = performance.now();
186
+ try {
187
+ span.setAttributes({
188
+ "db.system": dbSystem,
189
+ "db.operation": operation
190
+ });
191
+ if (dbName) span.setAttribute("db.name", dbName);
192
+ if (table) span.setAttribute("db.sql.table", table);
193
+ const query = extractQueryFromArgs(args);
194
+ if (query) span.setAttribute("db.statement", sanitizeQuery ? sanitizeSqlQuery(query) : query);
195
+ const result = await originalMethod.apply(this, args);
196
+ const duration = performance.now() - startTime;
197
+ span.setStatus({ code: SpanStatusCode.OK });
198
+ span.setAttributes({ "db.duration_ms": duration });
199
+ if (duration > slowQueryThresholdMs) {
200
+ span.setAttribute("db.slow_query", true);
201
+ span.setAttribute("db.slow_query_threshold_ms", slowQueryThresholdMs);
202
+ }
203
+ if (Array.isArray(result)) span.setAttribute("db.result_count", result.length);
204
+ return result;
205
+ } catch (error) {
206
+ const duration = performance.now() - startTime;
207
+ span.setStatus({
208
+ code: SpanStatusCode.ERROR,
209
+ message: error instanceof Error ? error.message : "Unknown error"
210
+ });
211
+ span.setAttributes({
212
+ "db.duration_ms": duration,
213
+ "error.type": error instanceof Error ? error.constructor.name : "Unknown",
214
+ "error.message": error instanceof Error ? error.message : "Unknown error"
215
+ });
216
+ span.recordException(error instanceof Error ? error : new Error(String(error)));
217
+ throw error;
218
+ } finally {
219
+ span.end();
220
+ }
221
+ });
222
+ };
223
+ Object.defineProperty(client[methodName], "name", {
224
+ value: methodName,
225
+ configurable: true
226
+ });
227
+ }
228
+ client[INSTRUMENTED_SYMBOL] = true;
229
+ return client;
180
230
  }
231
+ /**
232
+ * Extract method names from a database client that should be instrumented
233
+ */
181
234
  function extractDatabaseMethods(client) {
182
- const methods = [];
183
- const proto = Object.getPrototypeOf(client);
184
- for (const key of Object.getOwnPropertyNames(client)) {
185
- if (typeof client[key] === "function" && !key.startsWith("_")) {
186
- methods.push(key);
187
- }
188
- }
189
- if (proto) {
190
- for (const key of Object.getOwnPropertyNames(proto)) {
191
- if (typeof proto[key] === "function" && !key.startsWith("_") && key !== "constructor") {
192
- methods.push(key);
193
- }
194
- }
195
- }
196
- return [...new Set(methods)];
235
+ const methods = [];
236
+ const proto = Object.getPrototypeOf(client);
237
+ for (const key of Object.getOwnPropertyNames(client)) if (typeof client[key] === "function" && !key.startsWith("_")) methods.push(key);
238
+ if (proto) {
239
+ for (const key of Object.getOwnPropertyNames(proto)) if (typeof proto[key] === "function" && !key.startsWith("_") && key !== "constructor") methods.push(key);
240
+ }
241
+ return [...new Set(methods)];
197
242
  }
243
+ /**
244
+ * Try to extract SQL query from common argument patterns
245
+ */
198
246
  function extractQueryFromArgs(args) {
199
- if (args.length === 0) return void 0;
200
- const firstArg = args[0];
201
- if (typeof firstArg === "string") {
202
- return firstArg;
203
- }
204
- if (firstArg && typeof firstArg === "object") {
205
- if ("sql" in firstArg && typeof firstArg.sql === "string") {
206
- return firstArg.sql;
207
- }
208
- if ("text" in firstArg && typeof firstArg.text === "string") {
209
- return firstArg.text;
210
- }
211
- if ("toQuery" in firstArg && typeof firstArg.toQuery === "function") {
212
- try {
213
- const queryResult = firstArg.toQuery();
214
- if (typeof queryResult === "string") return queryResult;
215
- if (queryResult && typeof queryResult === "object" && "sql" in queryResult) {
216
- return queryResult.sql;
217
- }
218
- } catch {
219
- }
220
- }
221
- }
222
- return void 0;
247
+ if (args.length === 0) return void 0;
248
+ const firstArg = args[0];
249
+ if (typeof firstArg === "string") return firstArg;
250
+ if (firstArg && typeof firstArg === "object") {
251
+ if ("sql" in firstArg && typeof firstArg.sql === "string") return firstArg.sql;
252
+ if ("text" in firstArg && typeof firstArg.text === "string") return firstArg.text;
253
+ if ("toQuery" in firstArg && typeof firstArg.toQuery === "function") try {
254
+ const queryResult = firstArg.toQuery();
255
+ if (typeof queryResult === "string") return queryResult;
256
+ if (queryResult && typeof queryResult === "object" && "sql" in queryResult) return queryResult.sql;
257
+ } catch {}
258
+ }
223
259
  }
224
260
 
261
+ //#endregion
225
262
  export { DB_OPERATIONS, DB_SYSTEMS, instrumentDatabase, tracebQuery };
226
- //# sourceMappingURL=db.js.map
227
263
  //# sourceMappingURL=db.js.map
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/db.ts"],"names":[],"mappings":"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","file":"db.js","sourcesContent":["/**\n * Database Instrumentation Helpers\n *\n * Optional import: Not included in main bundle\n * Import from: 'autotel/db'\n *\n * Provides functional utilities for database query instrumentation.\n * Works with Prisma, Drizzle, TypeORM, raw SQL, and more.\n *\n * @example\n * ```typescript\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = drizzle(pool)\n * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })\n *\n * // Now all queries are automatically trace\n * await db.select().from(users)\n * ```\n */\n\nimport { SpanStatusCode } from '@opentelemetry/api';\nimport { getConfig } from './config';\n\n/**\n * Helper: Trace a single database query\n *\n * @example\n * ```typescript\n * import { tracebQuery } from 'autotel/db'\n *\n * const users = await tracebQuery(\n * 'postgresql',\n * 'SELECT',\n * () => db.query('SELECT * FROM users WHERE active = true')\n * )\n * ```\n */\nexport async function tracebQuery<T>(\n dbSystem: string,\n operation: 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 const spanName = `${dbSystem}.${operation}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'db.system': dbSystem,\n 'db.operation': operation,\n ...attributes,\n });\n\n const result = await fn();\n\n const duration = performance.now() - startTime;\n span.setStatus({ code: SpanStatusCode.OK });\n span.setAttribute('db.duration_ms', duration);\n\n if (Array.isArray(result)) {\n span.setAttribute('db.result_count', result.length);\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'db.duration_ms': duration,\n 'error.type':\n error instanceof Error ? error.constructor.name : '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// Helper functions\n\nfunction inferDbOperation(methodName: string): string {\n const lower = methodName.toLowerCase();\n if (lower.includes('find') || lower.includes('get') || lower.includes('list'))\n return 'SELECT';\n if (lower.includes('create') || lower.includes('insert')) return 'INSERT';\n if (lower.includes('update') || lower.includes('modify')) return 'UPDATE';\n if (lower.includes('delete') || lower.includes('remove')) return 'DELETE';\n if (lower.includes('count')) return 'COUNT';\n return 'QUERY';\n}\n\nfunction inferTableName(methodName: string): string | undefined {\n // Extract table name from method patterns like:\n // findUser -> user\n // listUsers -> users\n // createOrder -> order\n\n const patterns = [\n /find([A-Z][a-zA-Z]+)/,\n /get([A-Z][a-zA-Z]+)/,\n /list([A-Z][a-zA-Z]+)/,\n /create([A-Z][a-zA-Z]+)/,\n /update([A-Z][a-zA-Z]+)/,\n /delete([A-Z][a-zA-Z]+)/,\n /remove([A-Z][a-zA-Z]+)/,\n ];\n\n for (const pattern of patterns) {\n const match = methodName.match(pattern);\n if (match && match[1]) {\n return match[1].toLowerCase();\n }\n }\n\n return undefined;\n}\n\nfunction sanitizeSqlQuery(query: string): string {\n // Remove string literals and sensitive values (PII, credentials, etc.)\n // Preserves query structure for debugging while protecting data\n return query\n .replaceAll(/'[^']*'/g, \"'?'\")\n .replaceAll(/\"[^\"]*\"/g, '\"?\"')\n .replaceAll(/\\b\\d+\\b/g, '?') // Replace literal numbers\n .trim();\n}\n\n/**\n * Common database operation metrics\n */\nexport const DB_OPERATIONS = {\n SELECT: 'SELECT',\n INSERT: 'INSERT',\n UPDATE: 'UPDATE',\n DELETE: 'DELETE',\n COUNT: 'COUNT',\n AGGREGATE: 'AGGREGATE',\n} as const;\n\n/**\n * Common database systems\n */\nexport const DB_SYSTEMS = {\n POSTGRESQL: 'postgresql',\n MYSQL: 'mysql',\n MONGODB: 'mongodb',\n REDIS: 'redis',\n SQLITE: 'sqlite',\n MSSQL: 'mssql',\n} as const;\n\n// Symbol for idempotency - prevents double-instrumentation\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel.db.instrumented');\n\n/**\n * Options for instrumentDatabase\n */\nexport interface InstrumentDatabaseOptions {\n /** Database system (e.g., 'postgresql', 'mysql') */\n dbSystem: string;\n /** Database name (optional) */\n dbName?: string;\n /** Method names to instrument (if not provided, instruments common patterns) */\n methods?: string[];\n /** Method names to skip */\n skipMethods?: string[];\n /** Sanitize queries (remove sensitive data) - default: true */\n sanitizeQuery?: boolean;\n /** Slow query threshold in milliseconds - default: 1000ms */\n slowQueryThresholdMs?: number;\n}\n\n/**\n * Instrument a database client instance with OpenTelemetry tracing\n *\n * This is a function-based alternative to @DbInstrumented decorator.\n * Modifies the client in-place and returns it (idempotent - safe to call multiple times).\n *\n * Inspired by otel-drizzle and other otel instrumentation packages.\n *\n * @example Drizzle ORM\n * ```typescript\n * import { drizzle } from 'drizzle-orm/node-postgres'\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = drizzle(pool)\n * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })\n *\n * // Now all db queries are automatically trace\n * await db.select().from(users)\n * ```\n *\n * @example Prisma\n * ```typescript\n * import { PrismaClient } from '@prisma/client'\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const prisma = new PrismaClient()\n * instrumentDatabase(prisma, {\n * dbSystem: 'postgresql',\n * methods: ['findMany', 'findUnique', 'create', 'update', 'delete']\n * })\n *\n * // All specified methods are trace\n * await prisma.user.findMany()\n * ```\n *\n * @example Generic database client\n * ```typescript\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = createDatabaseClient()\n * instrumentDatabase(db, {\n * dbSystem: 'mongodb',\n * methods: ['find', 'findOne', 'insertOne', 'updateOne', 'deleteOne']\n * })\n * ```\n */\nexport function instrumentDatabase<T extends object>(\n client: T,\n options: InstrumentDatabaseOptions,\n): T {\n // Idempotency check - if already instrumented, return as-is\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((client as any)[INSTRUMENTED_SYMBOL]) {\n return client;\n }\n\n const {\n dbSystem,\n dbName,\n methods,\n skipMethods = [],\n sanitizeQuery = true,\n slowQueryThresholdMs = 1000,\n } = options;\n\n const config = getConfig();\n const tracer = config.tracer;\n\n // Determine which methods to instrument\n const methodsToInstrument = methods || extractDatabaseMethods(client);\n const skipSet = new Set(skipMethods);\n\n for (const methodName of methodsToInstrument) {\n if (skipSet.has(methodName)) continue;\n if (methodName.startsWith('_')) continue; // Skip private methods\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const method = (client as any)[methodName];\n if (typeof method !== 'function') continue;\n\n // Preserve the original method\n const originalMethod = method;\n\n // Wrap the method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[methodName] = async function (this: T, ...args: any[]) {\n const operation = inferDbOperation(methodName);\n const table = inferTableName(methodName);\n\n const spanName = table\n ? `${dbSystem}.${operation} ${table}`\n : `${dbSystem}.${operation}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'db.system': dbSystem,\n 'db.operation': operation,\n });\n\n if (dbName) {\n span.setAttribute('db.name', dbName);\n }\n\n if (table) {\n span.setAttribute('db.sql.table', table);\n }\n\n // Try to extract query from arguments (common patterns)\n const query = extractQueryFromArgs(args);\n if (query) {\n span.setAttribute(\n 'db.statement',\n sanitizeQuery ? sanitizeSqlQuery(query) : query,\n );\n }\n\n // Execute original method\n const result = await originalMethod.apply(this, args);\n\n const duration = performance.now() - startTime;\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.setAttributes({\n 'db.duration_ms': duration,\n });\n\n // Mark slow queries\n if (duration > slowQueryThresholdMs) {\n span.setAttribute('db.slow_query', true);\n span.setAttribute(\n 'db.slow_query_threshold_ms',\n slowQueryThresholdMs,\n );\n }\n\n // Track result count if it's an array\n if (Array.isArray(result)) {\n span.setAttribute('db.result_count', result.length);\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'db.duration_ms': duration,\n 'error.type':\n error instanceof Error ? error.constructor.name : 'Unknown',\n 'error.message':\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n throw error;\n } finally {\n span.end();\n }\n });\n };\n\n // Preserve function name\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.defineProperty((client as any)[methodName], 'name', {\n value: methodName,\n configurable: true,\n });\n }\n\n // Mark as instrumented\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[INSTRUMENTED_SYMBOL] = true;\n\n return client;\n}\n\n/**\n * Extract method names from a database client that should be instrumented\n */\nfunction extractDatabaseMethods(client: object): string[] {\n const methods: string[] = [];\n const proto = Object.getPrototypeOf(client);\n\n // Get own methods\n for (const key of Object.getOwnPropertyNames(client)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (typeof (client as any)[key] === 'function' && !key.startsWith('_')) {\n methods.push(key);\n }\n }\n\n // Get prototype methods\n if (proto) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (\n typeof proto[key] === 'function' &&\n !key.startsWith('_') &&\n key !== 'constructor'\n ) {\n methods.push(key);\n }\n }\n }\n\n return [...new Set(methods)]; // Deduplicate\n}\n\n/**\n * Try to extract SQL query from common argument patterns\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractQueryFromArgs(args: any[]): string | undefined {\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n\n // String query (raw SQL)\n if (typeof firstArg === 'string') {\n return firstArg;\n }\n\n // Object with sql property\n if (firstArg && typeof firstArg === 'object') {\n if ('sql' in firstArg && typeof firstArg.sql === 'string') {\n return firstArg.sql;\n }\n // PostgreSQL-style query object\n if ('text' in firstArg && typeof firstArg.text === 'string') {\n return firstArg.text;\n }\n // Query builder pattern\n if ('toQuery' in firstArg && typeof firstArg.toQuery === 'function') {\n try {\n const queryResult = firstArg.toQuery();\n if (typeof queryResult === 'string') return queryResult;\n if (\n queryResult &&\n typeof queryResult === 'object' &&\n 'sql' in queryResult\n ) {\n return queryResult.sql as string;\n }\n } catch {\n // Ignore errors from toQuery()\n }\n }\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"db.js","names":[],"sources":["../src/db.ts"],"sourcesContent":["/**\n * Database Instrumentation Helpers\n *\n * Optional import: Not included in main bundle\n * Import from: 'autotel/db'\n *\n * Provides functional utilities for database query instrumentation.\n * Works with Prisma, Drizzle, TypeORM, raw SQL, and more.\n *\n * @example\n * ```typescript\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = drizzle(pool)\n * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })\n *\n * // Now all queries are automatically trace\n * await db.select().from(users)\n * ```\n */\n\nimport { SpanStatusCode } from '@opentelemetry/api';\nimport { getConfig } from './config';\n\n/**\n * Helper: Trace a single database query\n *\n * @example\n * ```typescript\n * import { tracebQuery } from 'autotel/db'\n *\n * const users = await tracebQuery(\n * 'postgresql',\n * 'SELECT',\n * () => db.query('SELECT * FROM users WHERE active = true')\n * )\n * ```\n */\nexport async function tracebQuery<T>(\n dbSystem: string,\n operation: 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 const spanName = `${dbSystem}.${operation}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'db.system': dbSystem,\n 'db.operation': operation,\n ...attributes,\n });\n\n const result = await fn();\n\n const duration = performance.now() - startTime;\n span.setStatus({ code: SpanStatusCode.OK });\n span.setAttribute('db.duration_ms', duration);\n\n if (Array.isArray(result)) {\n span.setAttribute('db.result_count', result.length);\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'db.duration_ms': duration,\n 'error.type':\n error instanceof Error ? error.constructor.name : '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// Helper functions\n\nfunction inferDbOperation(methodName: string): string {\n const lower = methodName.toLowerCase();\n if (lower.includes('find') || lower.includes('get') || lower.includes('list'))\n return 'SELECT';\n if (lower.includes('create') || lower.includes('insert')) return 'INSERT';\n if (lower.includes('update') || lower.includes('modify')) return 'UPDATE';\n if (lower.includes('delete') || lower.includes('remove')) return 'DELETE';\n if (lower.includes('count')) return 'COUNT';\n return 'QUERY';\n}\n\nfunction inferTableName(methodName: string): string | undefined {\n // Extract table name from method patterns like:\n // findUser -> user\n // listUsers -> users\n // createOrder -> order\n\n const patterns = [\n /find([A-Z][a-zA-Z]+)/,\n /get([A-Z][a-zA-Z]+)/,\n /list([A-Z][a-zA-Z]+)/,\n /create([A-Z][a-zA-Z]+)/,\n /update([A-Z][a-zA-Z]+)/,\n /delete([A-Z][a-zA-Z]+)/,\n /remove([A-Z][a-zA-Z]+)/,\n ];\n\n for (const pattern of patterns) {\n const match = methodName.match(pattern);\n if (match && match[1]) {\n return match[1].toLowerCase();\n }\n }\n\n return undefined;\n}\n\nfunction sanitizeSqlQuery(query: string): string {\n // Remove string literals and sensitive values (PII, credentials, etc.)\n // Preserves query structure for debugging while protecting data\n return query\n .replaceAll(/'[^']*'/g, \"'?'\")\n .replaceAll(/\"[^\"]*\"/g, '\"?\"')\n .replaceAll(/\\b\\d+\\b/g, '?') // Replace literal numbers\n .trim();\n}\n\n/**\n * Common database operation metrics\n */\nexport const DB_OPERATIONS = {\n SELECT: 'SELECT',\n INSERT: 'INSERT',\n UPDATE: 'UPDATE',\n DELETE: 'DELETE',\n COUNT: 'COUNT',\n AGGREGATE: 'AGGREGATE',\n} as const;\n\n/**\n * Common database systems\n */\nexport const DB_SYSTEMS = {\n POSTGRESQL: 'postgresql',\n MYSQL: 'mysql',\n MONGODB: 'mongodb',\n REDIS: 'redis',\n SQLITE: 'sqlite',\n MSSQL: 'mssql',\n} as const;\n\n// Symbol for idempotency - prevents double-instrumentation\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel.db.instrumented');\n\n/**\n * Options for instrumentDatabase\n */\nexport interface InstrumentDatabaseOptions {\n /** Database system (e.g., 'postgresql', 'mysql') */\n dbSystem: string;\n /** Database name (optional) */\n dbName?: string;\n /** Method names to instrument (if not provided, instruments common patterns) */\n methods?: string[];\n /** Method names to skip */\n skipMethods?: string[];\n /** Sanitize queries (remove sensitive data) - default: true */\n sanitizeQuery?: boolean;\n /** Slow query threshold in milliseconds - default: 1000ms */\n slowQueryThresholdMs?: number;\n}\n\n/**\n * Instrument a database client instance with OpenTelemetry tracing\n *\n * This is a function-based alternative to @DbInstrumented decorator.\n * Modifies the client in-place and returns it (idempotent - safe to call multiple times).\n *\n * Inspired by otel-drizzle and other otel instrumentation packages.\n *\n * @example Drizzle ORM\n * ```typescript\n * import { drizzle } from 'drizzle-orm/node-postgres'\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = drizzle(pool)\n * instrumentDatabase(db, { dbSystem: 'postgresql', dbName: 'myapp' })\n *\n * // Now all db queries are automatically trace\n * await db.select().from(users)\n * ```\n *\n * @example Prisma\n * ```typescript\n * import { PrismaClient } from '@prisma/client'\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const prisma = new PrismaClient()\n * instrumentDatabase(prisma, {\n * dbSystem: 'postgresql',\n * methods: ['findMany', 'findUnique', 'create', 'update', 'delete']\n * })\n *\n * // All specified methods are trace\n * await prisma.user.findMany()\n * ```\n *\n * @example Generic database client\n * ```typescript\n * import { instrumentDatabase } from 'autotel/db'\n *\n * const db = createDatabaseClient()\n * instrumentDatabase(db, {\n * dbSystem: 'mongodb',\n * methods: ['find', 'findOne', 'insertOne', 'updateOne', 'deleteOne']\n * })\n * ```\n */\nexport function instrumentDatabase<T extends object>(\n client: T,\n options: InstrumentDatabaseOptions,\n): T {\n // Idempotency check - if already instrumented, return as-is\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((client as any)[INSTRUMENTED_SYMBOL]) {\n return client;\n }\n\n const {\n dbSystem,\n dbName,\n methods,\n skipMethods = [],\n sanitizeQuery = true,\n slowQueryThresholdMs = 1000,\n } = options;\n\n const config = getConfig();\n const tracer = config.tracer;\n\n // Determine which methods to instrument\n const methodsToInstrument = methods || extractDatabaseMethods(client);\n const skipSet = new Set(skipMethods);\n\n for (const methodName of methodsToInstrument) {\n if (skipSet.has(methodName)) continue;\n if (methodName.startsWith('_')) continue; // Skip private methods\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const method = (client as any)[methodName];\n if (typeof method !== 'function') continue;\n\n // Preserve the original method\n const originalMethod = method;\n\n // Wrap the method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[methodName] = async function (this: T, ...args: any[]) {\n const operation = inferDbOperation(methodName);\n const table = inferTableName(methodName);\n\n const spanName = table\n ? `${dbSystem}.${operation} ${table}`\n : `${dbSystem}.${operation}`;\n\n return tracer.startActiveSpan(spanName, async (span) => {\n const startTime = performance.now();\n\n try {\n span.setAttributes({\n 'db.system': dbSystem,\n 'db.operation': operation,\n });\n\n if (dbName) {\n span.setAttribute('db.name', dbName);\n }\n\n if (table) {\n span.setAttribute('db.sql.table', table);\n }\n\n // Try to extract query from arguments (common patterns)\n const query = extractQueryFromArgs(args);\n if (query) {\n span.setAttribute(\n 'db.statement',\n sanitizeQuery ? sanitizeSqlQuery(query) : query,\n );\n }\n\n // Execute original method\n const result = await originalMethod.apply(this, args);\n\n const duration = performance.now() - startTime;\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.setAttributes({\n 'db.duration_ms': duration,\n });\n\n // Mark slow queries\n if (duration > slowQueryThresholdMs) {\n span.setAttribute('db.slow_query', true);\n span.setAttribute(\n 'db.slow_query_threshold_ms',\n slowQueryThresholdMs,\n );\n }\n\n // Track result count if it's an array\n if (Array.isArray(result)) {\n span.setAttribute('db.result_count', result.length);\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.setAttributes({\n 'db.duration_ms': duration,\n 'error.type':\n error instanceof Error ? error.constructor.name : 'Unknown',\n 'error.message':\n error instanceof Error ? error.message : 'Unknown error',\n });\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n throw error;\n } finally {\n span.end();\n }\n });\n };\n\n // Preserve function name\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.defineProperty((client as any)[methodName], 'name', {\n value: methodName,\n configurable: true,\n });\n }\n\n // Mark as instrumented\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[INSTRUMENTED_SYMBOL] = true;\n\n return client;\n}\n\n/**\n * Extract method names from a database client that should be instrumented\n */\nfunction extractDatabaseMethods(client: object): string[] {\n const methods: string[] = [];\n const proto = Object.getPrototypeOf(client);\n\n // Get own methods\n for (const key of Object.getOwnPropertyNames(client)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (typeof (client as any)[key] === 'function' && !key.startsWith('_')) {\n methods.push(key);\n }\n }\n\n // Get prototype methods\n if (proto) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (\n typeof proto[key] === 'function' &&\n !key.startsWith('_') &&\n key !== 'constructor'\n ) {\n methods.push(key);\n }\n }\n }\n\n return [...new Set(methods)]; // Deduplicate\n}\n\n/**\n * Try to extract SQL query from common argument patterns\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractQueryFromArgs(args: any[]): string | undefined {\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n\n // String query (raw SQL)\n if (typeof firstArg === 'string') {\n return firstArg;\n }\n\n // Object with sql property\n if (firstArg && typeof firstArg === 'object') {\n if ('sql' in firstArg && typeof firstArg.sql === 'string') {\n return firstArg.sql;\n }\n // PostgreSQL-style query object\n if ('text' in firstArg && typeof firstArg.text === 'string') {\n return firstArg.text;\n }\n // Query builder pattern\n if ('toQuery' in firstArg && typeof firstArg.toQuery === 'function') {\n try {\n const queryResult = firstArg.toQuery();\n if (typeof queryResult === 'string') return queryResult;\n if (\n queryResult &&\n typeof queryResult === 'object' &&\n 'sql' in queryResult\n ) {\n return queryResult.sql as string;\n }\n } catch {\n // Ignore errors from toQuery()\n }\n }\n }\n\n return undefined;\n}\n"],"mappings":"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"}