autotel 3.5.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 (591) 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 -53
  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 -16
  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 -65
  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 -63
  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 -36
  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 -20
  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 -56
  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 -19
  149. package/dist/http.cjs +276 -175
  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 -173
  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 +1050 -1184
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +401 -570
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +401 -570
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +913 -725
  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 -35
  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 -20
  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 -38
  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 -19
  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 +201 -0
  382. package/dist/validate.cjs.map +1 -0
  383. package/dist/validate.d.cts +105 -0
  384. package/dist/validate.d.cts.map +1 -0
  385. package/dist/validate.d.ts +105 -0
  386. package/dist/validate.d.ts.map +1 -0
  387. package/dist/validate.js +197 -0
  388. package/dist/validate.js.map +1 -0
  389. package/dist/validation-attributes.cjs +45 -0
  390. package/dist/validation-attributes.cjs.map +1 -0
  391. package/dist/validation-attributes.d.cts +33 -0
  392. package/dist/validation-attributes.d.cts.map +1 -0
  393. package/dist/validation-attributes.d.ts +33 -0
  394. package/dist/validation-attributes.d.ts.map +1 -0
  395. package/dist/validation-attributes.js +41 -0
  396. package/dist/validation-attributes.js.map +1 -0
  397. package/dist/webhook.cjs +286 -255
  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 -253
  404. package/dist/webhook.js.map +1 -1
  405. package/dist/workflow-distributed.cjs +498 -411
  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 -409
  412. package/dist/workflow-distributed.js.map +1 -1
  413. package/dist/workflow.cjs +405 -39
  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 -20
  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 +14 -4
  431. package/src/define-event.ts +2 -21
  432. package/src/index.ts +3 -0
  433. package/src/request-logger.test.ts +53 -1
  434. package/src/request-logger.ts +58 -0
  435. package/src/stable-hash.ts +27 -0
  436. package/src/validate.test.ts +287 -0
  437. package/src/validate.ts +307 -0
  438. package/src/validation-attributes.ts +43 -0
  439. package/dist/attributes.cjs.map +0 -1
  440. package/dist/attributes.js.map +0 -1
  441. package/dist/chunk-2ZKEORFN.cjs +0 -14
  442. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  443. package/dist/chunk-3QXBFGKP.js +0 -344
  444. package/dist/chunk-3QXBFGKP.js.map +0 -1
  445. package/dist/chunk-454CH4OV.js +0 -744
  446. package/dist/chunk-454CH4OV.js.map +0 -1
  447. package/dist/chunk-4A53YIAX.js +0 -180
  448. package/dist/chunk-4A53YIAX.js.map +0 -1
  449. package/dist/chunk-4IFSYQVX.js +0 -337
  450. package/dist/chunk-4IFSYQVX.js.map +0 -1
  451. package/dist/chunk-4P6ZOARG.cjs +0 -33
  452. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  453. package/dist/chunk-55ER2KD5.js +0 -228
  454. package/dist/chunk-55ER2KD5.js.map +0 -1
  455. package/dist/chunk-5ZN622AO.js +0 -73
  456. package/dist/chunk-5ZN622AO.js.map +0 -1
  457. package/dist/chunk-6S5RUKU3.cjs +0 -347
  458. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  459. package/dist/chunk-6UQRVUN3.js +0 -222
  460. package/dist/chunk-6UQRVUN3.js.map +0 -1
  461. package/dist/chunk-7552UTQW.js +0 -11
  462. package/dist/chunk-7552UTQW.js.map +0 -1
  463. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  464. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  465. package/dist/chunk-7SAWIN74.js +0 -285
  466. package/dist/chunk-7SAWIN74.js.map +0 -1
  467. package/dist/chunk-A4E5AQFK.js +0 -30
  468. package/dist/chunk-A4E5AQFK.js.map +0 -1
  469. package/dist/chunk-AC5GNZKB.cjs +0 -344
  470. package/dist/chunk-AC5GNZKB.cjs.map +0 -1
  471. package/dist/chunk-ALPYR2GC.js +0 -1061
  472. package/dist/chunk-ALPYR2GC.js.map +0 -1
  473. package/dist/chunk-BZHG5IZ4.js +0 -73
  474. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  475. package/dist/chunk-CEAQK2QY.cjs +0 -32
  476. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  477. package/dist/chunk-CMHVQR6P.js +0 -170
  478. package/dist/chunk-CMHVQR6P.js.map +0 -1
  479. package/dist/chunk-CU6IDACR.cjs +0 -224
  480. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  481. package/dist/chunk-DPSA4QLA.js +0 -344
  482. package/dist/chunk-DPSA4QLA.js.map +0 -1
  483. package/dist/chunk-DQEHQNQE.js +0 -795
  484. package/dist/chunk-DQEHQNQE.js.map +0 -1
  485. package/dist/chunk-ESLWRGAG.cjs +0 -92
  486. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  487. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  488. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  489. package/dist/chunk-FGNDN2FD.cjs +0 -1242
  490. package/dist/chunk-FGNDN2FD.cjs.map +0 -1
  491. package/dist/chunk-FU6R566Y.cjs +0 -236
  492. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  493. package/dist/chunk-GBFTC7Q7.cjs +0 -837
  494. package/dist/chunk-GBFTC7Q7.cjs.map +0 -1
  495. package/dist/chunk-GYR5K654.js +0 -91
  496. package/dist/chunk-GYR5K654.js.map +0 -1
  497. package/dist/chunk-HA2WBOGQ.js +0 -57
  498. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  499. package/dist/chunk-HT5JQKN2.js +0 -118
  500. package/dist/chunk-HT5JQKN2.js.map +0 -1
  501. package/dist/chunk-INJD3G4K.cjs +0 -340
  502. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  503. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  504. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  505. package/dist/chunk-J5QENANM.js +0 -87
  506. package/dist/chunk-J5QENANM.js.map +0 -1
  507. package/dist/chunk-J7VGRIAJ.js +0 -64
  508. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  509. package/dist/chunk-KFOHQK7X.js +0 -144
  510. package/dist/chunk-KFOHQK7X.js.map +0 -1
  511. package/dist/chunk-KIL5CUN6.js +0 -31
  512. package/dist/chunk-KIL5CUN6.js.map +0 -1
  513. package/dist/chunk-LITNXTTT.js +0 -3
  514. package/dist/chunk-LITNXTTT.js.map +0 -1
  515. package/dist/chunk-M3LFHHTN.cjs +0 -764
  516. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  517. package/dist/chunk-NEIB3TLD.cjs +0 -360
  518. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  519. package/dist/chunk-NVAI5CCN.cjs +0 -39
  520. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  521. package/dist/chunk-NVGPMGI4.js +0 -95
  522. package/dist/chunk-NVGPMGI4.js.map +0 -1
  523. package/dist/chunk-NZ72VDNY.cjs +0 -4
  524. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  525. package/dist/chunk-O4JZUCUE.js +0 -1174
  526. package/dist/chunk-O4JZUCUE.js.map +0 -1
  527. package/dist/chunk-O7JOKRN2.js +0 -833
  528. package/dist/chunk-O7JOKRN2.js.map +0 -1
  529. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  530. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  531. package/dist/chunk-Q4EULJQY.js +0 -35
  532. package/dist/chunk-Q4EULJQY.js.map +0 -1
  533. package/dist/chunk-QWW3E3JM.cjs +0 -178
  534. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  535. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  536. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  537. package/dist/chunk-RUPKBKUF.js +0 -352
  538. package/dist/chunk-RUPKBKUF.js.map +0 -1
  539. package/dist/chunk-SEO6NAQT.js +0 -14
  540. package/dist/chunk-SEO6NAQT.js.map +0 -1
  541. package/dist/chunk-T4B5LB6E.cjs +0 -66
  542. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  543. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  544. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  545. package/dist/chunk-TQ5UWA7S.js +0 -26
  546. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  547. package/dist/chunk-URHPSJW2.js +0 -339
  548. package/dist/chunk-URHPSJW2.js.map +0 -1
  549. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  550. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  551. package/dist/chunk-VG2ABKJX.cjs +0 -100
  552. package/dist/chunk-VG2ABKJX.cjs.map +0 -1
  553. package/dist/chunk-VH77IPJN.cjs +0 -358
  554. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  555. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  556. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  557. package/dist/chunk-WGWSHJ2N.js +0 -38
  558. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  559. package/dist/chunk-WJH6IYU2.cjs +0 -32
  560. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  561. package/dist/chunk-YREV3LGG.cjs +0 -61
  562. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  563. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  564. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  565. package/dist/chunk-YWCESU4Y.js +0 -1233
  566. package/dist/chunk-YWCESU4Y.js.map +0 -1
  567. package/dist/chunk-Z6HRSM2Y.cjs +0 -799
  568. package/dist/chunk-Z6HRSM2Y.cjs.map +0 -1
  569. package/dist/chunk-Z7PW3KHL.cjs +0 -1198
  570. package/dist/chunk-Z7PW3KHL.cjs.map +0 -1
  571. package/dist/chunk-ZNMBW67B.cjs +0 -40
  572. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  573. package/dist/correlation-id.cjs.map +0 -1
  574. package/dist/correlation-id.js.map +0 -1
  575. package/dist/event-subscriber.cjs.map +0 -1
  576. package/dist/event-subscriber.js.map +0 -1
  577. package/dist/event.cjs.map +0 -1
  578. package/dist/event.js.map +0 -1
  579. package/dist/exporters.cjs.map +0 -1
  580. package/dist/exporters.js.map +0 -1
  581. package/dist/functional.cjs.map +0 -1
  582. package/dist/functional.js.map +0 -1
  583. package/dist/init-DIowiiCh.d.ts +0 -1167
  584. package/dist/init-j-A1zI16.d.cts +0 -1167
  585. package/dist/processors.cjs.map +0 -1
  586. package/dist/processors.js.map +0 -1
  587. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  588. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  589. package/dist/utils-BahBCFtJ.d.cts +0 -712
  590. package/dist/utils-CLKwaUlG.d.ts +0 -712
  591. package/dist/yaml-config.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","names":[],"sources":["../src/validate.ts"],"mappings":";;;KAyCY,cAAA;AAAA,KACA,kBAAA;;UAGK,eAAA;EAYf;EAVA,IAAA;EAYA;EAVA,IAAA;EAWA;EATA,QAAA;AAAA;;UAIe,kBAAA;EAOc;EAL7B,IAAA;EACA,QAAA;EACA,IAAA,EAAM,cAAA;EACN,MAAA,EAAQ,eAAA;EACR,IAAA;EACA,QAAA,GAAW,kBAAA;AAAA;AAAA,KAaR,gBAAA,IAAoB,QAA4B,EAAlB,kBAAkB;;;AAcS;AAe9D;;;;AAAqE;AAqDrE;;;iBApEgB,oBAAA,CAAqB,OAAyB,EAAhB,gBAAgB;AAoES;AAmCvE;;;;AAnCuE,iBArDvD,wBAAA,CAAyB,QAA4B,EAAlB,kBAAkB;;;;;;;;iBAqDrD,sBAAA,CAAuB,KAAA,YAAiB,eAAe;AAAA,UAmCtD,sBAAA;EAMf;EAJA,QAAA;EAIgB;EAFhB,UAAA,GAAa,cAAA;EAGF;EADX,YAAA,IAAgB,MAAA,EAAQ,CAAA;EACxB,QAAA,GAAW,kBAAA;EAEC;EAAZ,QAAA,IAAY,MAAA,EAAQ,eAAA,IAAmB,IAAA,aAAiB,KAAA;AAAA;AAAA,KAG9C,eAAA;EACN,OAAA;EAAe,IAAA,EAAM,CAAA;AAAA;EACrB,OAAA;EAAgB,MAAA,EAAQ,eAAe;AAAA;AAAA,UAE5B,SAAA;EAAA,SACN,IAAA;EAAA,SACA,IAAA,EAAM,cAAA;EAJX;EAMJ,SAAA,CAAU,KAAA,YAAiB,eAAA,CAAgB,CAAA;EANf;;AAAe;AAE7C;EASE,KAAA,CAAM,KAAA,YAAiB,CAAA;AAAA;;;;;;;;;;;;;;;;;;;AAAC;AA2C1B;;iBAAgB,eAAA,cAA6B,UAAA,CAAW,CAAA,GACtD,IAAA,UACA,MAAA,EAAQ,CAAA,EACR,OAAA,GAAS,sBAAA,CAAuB,CAAA,IAC/B,SAAA,CAAU,CAAA"}
@@ -0,0 +1,197 @@
1
+ import { t as createStructuredError } from "./structured-error-9--cxBay.js";
2
+ import { t as hashJson } from "./stable-hash-Cg5cT34Q.js";
3
+ import { createCounter } from "./metric-helpers.js";
4
+ import { VALIDATION_ATTR, VALIDATION_ISSUE_CAP, VALIDATION_METRICS } from "./validation-attributes.js";
5
+ import { trace } from "@opentelemetry/api";
6
+
7
+ //#region src/validate.ts
8
+ /**
9
+ * Validation telemetry — connect runtime input validation (Zod or any
10
+ * `safeParse` schema) to your traces and metrics at the boundaries where bad
11
+ * data actually enters: HTTP bodies, events, messages.
12
+ *
13
+ * Today a `safeParse` failure either throws (no span, no metric, no alert) or
14
+ * is silently swallowed in a handler. `defineValidator` makes the mismatch
15
+ * **observable** — a `validation.*` span attribute set and a counter
16
+ * incremented — with a per-validator `observe` vs `reject` mode:
17
+ *
18
+ * - `reject` (default): record telemetry, then throw a structured 400-shaped
19
+ * error so the boundary can fail cleanly.
20
+ * - `observe`: record telemetry, return the raw input so the handler continues
21
+ * — useful for measuring real-world drift before you enforce it.
22
+ *
23
+ * **Not a security feature by default.** A malformed body is usually a bug or
24
+ * version skew, not an attack. Validation telemetry is first-class on its own
25
+ * metric; escalation to the security path is a deliberate opt-in via
26
+ * {@link onValidationMismatch} (e.g. wired by `autotel-audit`), never automatic.
27
+ *
28
+ * **PII-safe by construction.** Only field *paths*, issue *codes*, and the
29
+ * declared *type* are ever recorded — never the offending value, and never a
30
+ * validator's error `message` (which routinely embeds the received value).
31
+ */
32
+ let mismatchCounter;
33
+ function counter() {
34
+ if (!mismatchCounter) mismatchCounter = createCounter(VALIDATION_METRICS.mismatches, { description: "Input payloads that did not match their declared shape" });
35
+ return mismatchCounter;
36
+ }
37
+ const listeners = /* @__PURE__ */ new Set();
38
+ /**
39
+ * Register an explicit handler called on every recorded mismatch — the opt-in
40
+ * seam for escalating to security events, a webhook, or a custom sink. There is
41
+ * no automatic, package-presence-driven escalation: nothing fires here unless
42
+ * you (or a package you wire up) register a handler.
43
+ *
44
+ * Multiple subscribers coexist: a package (e.g. `autotel-audit` bridging to
45
+ * security events) and your own app code (a webhook, a logger) can both
46
+ * register and all fire. Returns an unsubscribe fn that removes only this
47
+ * handler; registering the same function twice is a no-op (Set semantics).
48
+ */
49
+ function onValidationMismatch(handler) {
50
+ listeners.add(handler);
51
+ return () => {
52
+ listeners.delete(handler);
53
+ };
54
+ }
55
+ const truncate = (values) => values.slice(0, 20).join(",");
56
+ /**
57
+ * Record a validation mismatch as telemetry: `validation.*` attributes on the
58
+ * active span (if any) and an increment on `autotel.validation.mismatches`.
59
+ * Fail-open — never throws, so instrumentation can't break the boundary.
60
+ */
61
+ function recordValidationMismatch(mismatch) {
62
+ try {
63
+ const paths = mismatch.issues.map((i) => i.path).filter(Boolean);
64
+ const codes = [...new Set(mismatch.issues.map((i) => i.code))];
65
+ const span = trace.getActiveSpan();
66
+ if (span) span.setAttributes({
67
+ [VALIDATION_ATTR.name]: mismatch.name,
68
+ [VALIDATION_ATTR.boundary]: mismatch.boundary,
69
+ [VALIDATION_ATTR.mode]: mismatch.mode,
70
+ [VALIDATION_ATTR.issueCount]: mismatch.issues.length,
71
+ [VALIDATION_ATTR.issuePaths]: truncate(paths),
72
+ [VALIDATION_ATTR.issueCodes]: truncate(codes),
73
+ ...mismatch.hash ? { [VALIDATION_ATTR.hash]: mismatch.hash } : {},
74
+ ...mismatch.severity ? { [VALIDATION_ATTR.severity]: mismatch.severity } : {}
75
+ });
76
+ try {
77
+ counter().add(1, {
78
+ boundary: mismatch.boundary,
79
+ validation: mismatch.name,
80
+ mode: mismatch.mode
81
+ });
82
+ } catch {}
83
+ for (const listener of listeners) try {
84
+ listener(mismatch);
85
+ } catch {}
86
+ } catch {}
87
+ }
88
+ /**
89
+ * Normalise an arbitrary validation error into PII-safe issues. Reads only
90
+ * `path`, `code`, and (when it is a declared type name) `expected` — and never
91
+ * `message`, `received`, or any value-bearing field. Understands the Zod shape
92
+ * (`error.issues`) and a generic `error.errors` fallback; returns `[]` for
93
+ * anything unrecognised.
94
+ */
95
+ function formatValidationIssues(error) {
96
+ return extractRawIssues(error).map((issue) => toSafeIssue(issue));
97
+ }
98
+ function extractRawIssues(error) {
99
+ if (error && typeof error === "object") {
100
+ const candidate = error.issues ?? error.errors;
101
+ if (Array.isArray(candidate)) return candidate.filter((i) => i !== null && typeof i === "object");
102
+ }
103
+ return [];
104
+ }
105
+ function toSafeIssue(issue) {
106
+ const rawPath = issue.path;
107
+ const path = Array.isArray(rawPath) ? rawPath.map(String).join(".") : typeof rawPath === "string" ? rawPath : "";
108
+ const code = typeof issue.code === "string" ? issue.code : "invalid";
109
+ const expected = typeof issue.expected === "string" ? issue.expected : void 0;
110
+ return expected ? {
111
+ path,
112
+ code,
113
+ expected
114
+ } : {
115
+ path,
116
+ code
117
+ };
118
+ }
119
+ function defaultRejectError(issues, name) {
120
+ return createStructuredError({
121
+ name: "ValidationError",
122
+ status: 400,
123
+ code: "validation_failed",
124
+ message: `Input for "${name}" did not match its declared shape.`,
125
+ why: `${issues.length} field(s) failed validation: ${issues.map((i) => i.path || "(root)").slice(0, 20).join(", ")}.`,
126
+ fix: "Send a payload that matches the schema, or switch this validator to observe mode while you investigate.",
127
+ details: {
128
+ validation: name,
129
+ issues
130
+ }
131
+ });
132
+ }
133
+ /**
134
+ * Declare an expected input shape once and get a validator that records every
135
+ * mismatch as telemetry.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * import { z } from 'zod';
140
+ * import { defineValidator } from 'autotel/validate';
141
+ *
142
+ * const OrderBody = defineValidator('POST /orders', z.object({
143
+ * items: z.array(z.object({ sku: z.string(), qty: z.number().int() })),
144
+ * }), { boundary: 'http', toJsonSchema: (s) => z.toJSONSchema(s) });
145
+ *
146
+ * // reject mode (default): records + throws a 400-shaped structured error
147
+ * const order = OrderBody.parse(req.body);
148
+ *
149
+ * // observe mode: records, returns the result, never throws
150
+ * const result = OrderBody.safeParse(req.body);
151
+ * if (!result.success) metrics.onDrift(result.issues);
152
+ * ```
153
+ */
154
+ function defineValidator(name, schema, options = {}) {
155
+ const mode = options.onMismatch ?? "reject";
156
+ const boundary = options.boundary ?? "input";
157
+ const hash = options.toJsonSchema ? hashJson(options.toJsonSchema(schema)) : void 0;
158
+ const record = (issues) => {
159
+ recordValidationMismatch({
160
+ name,
161
+ boundary,
162
+ mode,
163
+ issues,
164
+ hash,
165
+ severity: options.severity
166
+ });
167
+ };
168
+ return {
169
+ name,
170
+ mode,
171
+ safeParse(input) {
172
+ const parsed = schema.safeParse(input);
173
+ if (parsed.success) return {
174
+ success: true,
175
+ data: parsed.data
176
+ };
177
+ const issues = formatValidationIssues(parsed.error);
178
+ record(issues);
179
+ return {
180
+ success: false,
181
+ issues
182
+ };
183
+ },
184
+ parse(input) {
185
+ const parsed = schema.safeParse(input);
186
+ if (parsed.success) return parsed.data;
187
+ const issues = formatValidationIssues(parsed.error);
188
+ record(issues);
189
+ if (mode === "reject") throw options.onReject?.(issues, name) ?? defaultRejectError(issues, name);
190
+ return input;
191
+ }
192
+ };
193
+ }
194
+
195
+ //#endregion
196
+ export { defineValidator, formatValidationIssues, onValidationMismatch, recordValidationMismatch };
197
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","names":[],"sources":["../src/validate.ts"],"sourcesContent":["/**\n * Validation telemetry — connect runtime input validation (Zod or any\n * `safeParse` schema) to your traces and metrics at the boundaries where bad\n * data actually enters: HTTP bodies, events, messages.\n *\n * Today a `safeParse` failure either throws (no span, no metric, no alert) or\n * is silently swallowed in a handler. `defineValidator` makes the mismatch\n * **observable** — a `validation.*` span attribute set and a counter\n * incremented — with a per-validator `observe` vs `reject` mode:\n *\n * - `reject` (default): record telemetry, then throw a structured 400-shaped\n * error so the boundary can fail cleanly.\n * - `observe`: record telemetry, return the raw input so the handler continues\n * — useful for measuring real-world drift before you enforce it.\n *\n * **Not a security feature by default.** A malformed body is usually a bug or\n * version skew, not an attack. Validation telemetry is first-class on its own\n * metric; escalation to the security path is a deliberate opt-in via\n * {@link onValidationMismatch} (e.g. wired by `autotel-audit`), never automatic.\n *\n * **PII-safe by construction.** Only field *paths*, issue *codes*, and the\n * declared *type* are ever recorded — never the offending value, and never a\n * validator's error `message` (which routinely embeds the received value).\n */\n\nimport { trace } from '@opentelemetry/api';\nimport { createCounter } from './metric-helpers';\nimport {\n createStructuredError,\n type StructuredError,\n} from './structured-error';\nimport { hashJson } from './stable-hash';\nimport type { SchemaLike } from './define-event';\nimport {\n VALIDATION_ATTR,\n VALIDATION_ISSUE_CAP,\n VALIDATION_METRICS,\n} from './validation-attributes';\n\nexport type { SchemaLike } from './define-event';\n\nexport type ValidationMode = 'observe' | 'reject';\nexport type ValidationSeverity = 'info' | 'warning' | 'error';\n\n/** A single failing field, stripped of any payload values. */\nexport interface ValidationIssue {\n /** Dotted field path, e.g. `items.0.price`. Never a value. */\n path: string;\n /** Issue code (e.g. Zod's `invalid_type`, `too_small`). Never a value. */\n code: string;\n /** Declared type/constraint summary, e.g. `string`. Never a received value. */\n expected?: string;\n}\n\n/** Everything the recorder needs — already PII-stripped by the caller. */\nexport interface ValidationMismatch {\n /** Contract id, e.g. `POST /orders` or `order.placed`. */\n name: string;\n boundary: string;\n mode: ValidationMode;\n issues: ValidationIssue[];\n hash?: string;\n severity?: ValidationSeverity;\n}\n\nlet mismatchCounter: ReturnType<typeof createCounter> | undefined;\nfunction counter(): ReturnType<typeof createCounter> {\n if (!mismatchCounter) {\n mismatchCounter = createCounter(VALIDATION_METRICS.mismatches, {\n description: 'Input payloads that did not match their declared shape',\n });\n }\n return mismatchCounter;\n}\n\ntype MismatchListener = (mismatch: ValidationMismatch) => void;\nconst listeners = new Set<MismatchListener>();\n\n/**\n * Register an explicit handler called on every recorded mismatch — the opt-in\n * seam for escalating to security events, a webhook, or a custom sink. There is\n * no automatic, package-presence-driven escalation: nothing fires here unless\n * you (or a package you wire up) register a handler.\n *\n * Multiple subscribers coexist: a package (e.g. `autotel-audit` bridging to\n * security events) and your own app code (a webhook, a logger) can both\n * register and all fire. Returns an unsubscribe fn that removes only this\n * handler; registering the same function twice is a no-op (Set semantics).\n */\nexport function onValidationMismatch(handler: MismatchListener): () => void {\n listeners.add(handler);\n return () => {\n listeners.delete(handler);\n };\n}\n\nconst truncate = (values: string[]): string =>\n values.slice(0, VALIDATION_ISSUE_CAP).join(',');\n\n/**\n * Record a validation mismatch as telemetry: `validation.*` attributes on the\n * active span (if any) and an increment on `autotel.validation.mismatches`.\n * Fail-open — never throws, so instrumentation can't break the boundary.\n */\nexport function recordValidationMismatch(mismatch: ValidationMismatch): void {\n try {\n const paths = mismatch.issues.map((i) => i.path).filter(Boolean);\n const codes = [...new Set(mismatch.issues.map((i) => i.code))];\n\n const span = trace.getActiveSpan();\n if (span) {\n span.setAttributes({\n [VALIDATION_ATTR.name]: mismatch.name,\n [VALIDATION_ATTR.boundary]: mismatch.boundary,\n [VALIDATION_ATTR.mode]: mismatch.mode,\n [VALIDATION_ATTR.issueCount]: mismatch.issues.length,\n [VALIDATION_ATTR.issuePaths]: truncate(paths),\n [VALIDATION_ATTR.issueCodes]: truncate(codes),\n ...(mismatch.hash ? { [VALIDATION_ATTR.hash]: mismatch.hash } : {}),\n ...(mismatch.severity\n ? { [VALIDATION_ATTR.severity]: mismatch.severity }\n : {}),\n });\n }\n\n try {\n counter().add(1, {\n boundary: mismatch.boundary,\n validation: mismatch.name,\n mode: mismatch.mode,\n });\n } catch {\n // meter not initialised yet — skip the count, keep the span attrs\n }\n\n // Dispatch to every subscriber with per-listener fault isolation: one\n // throwing subscriber must not starve its peers or break the boundary.\n // Set iteration tolerates concurrent (un)subscription safely.\n for (const listener of listeners) {\n try {\n listener(mismatch);\n } catch {\n // a misbehaving subscriber must not break the boundary or its peers\n }\n }\n } catch {\n // fail-open: telemetry must never break the validated boundary\n }\n}\n\n/**\n * Normalise an arbitrary validation error into PII-safe issues. Reads only\n * `path`, `code`, and (when it is a declared type name) `expected` — and never\n * `message`, `received`, or any value-bearing field. Understands the Zod shape\n * (`error.issues`) and a generic `error.errors` fallback; returns `[]` for\n * anything unrecognised.\n */\nexport function formatValidationIssues(error: unknown): ValidationIssue[] {\n const raw = extractRawIssues(error);\n return raw.map((issue) => toSafeIssue(issue));\n}\n\nfunction extractRawIssues(error: unknown): Array<Record<string, unknown>> {\n if (error && typeof error === 'object') {\n const candidate =\n (error as { issues?: unknown }).issues ??\n (error as { errors?: unknown }).errors;\n if (Array.isArray(candidate)) {\n return candidate.filter(\n (i): i is Record<string, unknown> =>\n i !== null && typeof i === 'object',\n );\n }\n }\n return [];\n}\n\nfunction toSafeIssue(issue: Record<string, unknown>): ValidationIssue {\n const rawPath = issue.path;\n const path = Array.isArray(rawPath)\n ? rawPath.map(String).join('.')\n : typeof rawPath === 'string'\n ? rawPath\n : '';\n const code = typeof issue.code === 'string' ? issue.code : 'invalid';\n // `expected` is a declared type name in Zod (e.g. 'string'); safe. We never\n // read `received`/`message`/`value`, which can carry the offending payload.\n const expected =\n typeof issue.expected === 'string' ? issue.expected : undefined;\n return expected ? { path, code, expected } : { path, code };\n}\n\nexport interface DefineValidatorOptions<S> {\n /** Where validation runs. Defaults to `input`. */\n boundary?: string;\n /** `reject` (default): record then throw. `observe`: record then continue. */\n onMismatch?: ValidationMode;\n /** Project the schema to JSON Schema for a stable `validation.hash`. */\n toJsonSchema?: (schema: S) => unknown;\n severity?: ValidationSeverity;\n /** Build the error thrown in `reject` mode (defaults to a 400 structured error). */\n onReject?: (issues: ValidationIssue[], name: string) => Error;\n}\n\nexport type ValidatorResult<T> =\n | { success: true; data: T }\n | { success: false; issues: ValidationIssue[] };\n\nexport interface Validator<T> {\n readonly name: string;\n readonly mode: ValidationMode;\n /** Validate and record on failure; never throws. */\n safeParse(input: unknown): ValidatorResult<T>;\n /**\n * Validate, record on failure, then apply the mode: `reject` throws,\n * `observe` returns the raw input so the handler can continue.\n */\n parse(input: unknown): T;\n}\n\nfunction defaultRejectError(\n issues: ValidationIssue[],\n name: string,\n): StructuredError {\n return createStructuredError({\n name: 'ValidationError',\n status: 400,\n code: 'validation_failed',\n message: `Input for \"${name}\" did not match its declared shape.`,\n why: `${issues.length} field(s) failed validation: ${issues\n .map((i) => i.path || '(root)')\n .slice(0, VALIDATION_ISSUE_CAP)\n .join(', ')}.`,\n fix: 'Send a payload that matches the schema, or switch this validator to observe mode while you investigate.',\n // PII-safe: paths + codes only, no received values.\n details: { validation: name, issues },\n });\n}\n\n/**\n * Declare an expected input shape once and get a validator that records every\n * mismatch as telemetry.\n *\n * @example\n * ```ts\n * import { z } from 'zod';\n * import { defineValidator } from 'autotel/validate';\n *\n * const OrderBody = defineValidator('POST /orders', z.object({\n * items: z.array(z.object({ sku: z.string(), qty: z.number().int() })),\n * }), { boundary: 'http', toJsonSchema: (s) => z.toJSONSchema(s) });\n *\n * // reject mode (default): records + throws a 400-shaped structured error\n * const order = OrderBody.parse(req.body);\n *\n * // observe mode: records, returns the result, never throws\n * const result = OrderBody.safeParse(req.body);\n * if (!result.success) metrics.onDrift(result.issues);\n * ```\n */\nexport function defineValidator<T, S extends SchemaLike<T>>(\n name: string,\n schema: S,\n options: DefineValidatorOptions<S> = {},\n): Validator<T> {\n const mode = options.onMismatch ?? 'reject';\n const boundary = options.boundary ?? 'input';\n const hash = options.toJsonSchema\n ? hashJson(options.toJsonSchema(schema))\n : undefined;\n\n const record = (issues: ValidationIssue[]): void => {\n recordValidationMismatch({\n name,\n boundary,\n mode,\n issues,\n hash,\n severity: options.severity,\n });\n };\n\n return {\n name,\n mode,\n safeParse(input: unknown): ValidatorResult<T> {\n const parsed = schema.safeParse(input);\n if (parsed.success) return { success: true, data: parsed.data };\n const issues = formatValidationIssues(parsed.error);\n record(issues);\n return { success: false, issues };\n },\n parse(input: unknown): T {\n const parsed = schema.safeParse(input);\n if (parsed.success) return parsed.data;\n const issues = formatValidationIssues(parsed.error);\n record(issues);\n if (mode === 'reject') {\n throw (\n options.onReject?.(issues, name) ?? defaultRejectError(issues, name)\n );\n }\n // observe: continue with the raw input (documented type caveat)\n return input as T;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,IAAI;AACJ,SAAS,UAA4C;CACnD,IAAI,CAAC,iBACH,kBAAkB,cAAc,mBAAmB,YAAY,EAC7D,aAAa,yDACf,CAAC;CAEH,OAAO;AACT;AAGA,MAAM,4BAAY,IAAI,IAAsB;;;;;;;;;;;;AAa5C,SAAgB,qBAAqB,SAAuC;CAC1E,UAAU,IAAI,OAAO;CACrB,aAAa;EACX,UAAU,OAAO,OAAO;CAC1B;AACF;AAEA,MAAM,YAAY,WAChB,OAAO,MAAM,KAAuB,CAAC,CAAC,KAAK,GAAG;;;;;;AAOhD,SAAgB,yBAAyB,UAAoC;CAC3E,IAAI;EACF,MAAM,QAAQ,SAAS,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,OAAO;EAC/D,MAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,SAAS,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC;EAE7D,MAAM,OAAO,MAAM,cAAc;EACjC,IAAI,MACF,KAAK,cAAc;IAChB,gBAAgB,OAAO,SAAS;IAChC,gBAAgB,WAAW,SAAS;IACpC,gBAAgB,OAAO,SAAS;IAChC,gBAAgB,aAAa,SAAS,OAAO;IAC7C,gBAAgB,aAAa,SAAS,KAAK;IAC3C,gBAAgB,aAAa,SAAS,KAAK;GAC5C,GAAI,SAAS,OAAO,GAAG,gBAAgB,OAAO,SAAS,KAAK,IAAI,CAAC;GACjE,GAAI,SAAS,WACT,GAAG,gBAAgB,WAAW,SAAS,SAAS,IAChD,CAAC;EACP,CAAC;EAGH,IAAI;GACF,QAAQ,CAAC,CAAC,IAAI,GAAG;IACf,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB,MAAM,SAAS;GACjB,CAAC;EACH,QAAQ,CAER;EAKA,KAAK,MAAM,YAAY,WACrB,IAAI;GACF,SAAS,QAAQ;EACnB,QAAQ,CAER;CAEJ,QAAQ,CAER;AACF;;;;;;;;AASA,SAAgB,uBAAuB,OAAmC;CAExE,OADY,iBAAiB,KACpB,CAAC,CAAC,KAAK,UAAU,YAAY,KAAK,CAAC;AAC9C;AAEA,SAAS,iBAAiB,OAAgD;CACxE,IAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,YACH,MAA+B,UAC/B,MAA+B;EAClC,IAAI,MAAM,QAAQ,SAAS,GACzB,OAAO,UAAU,QACd,MACC,MAAM,QAAQ,OAAO,MAAM,QAC/B;CAEJ;CACA,OAAO,CAAC;AACV;AAEA,SAAS,YAAY,OAAiD;CACpE,MAAM,UAAU,MAAM;CACtB,MAAM,OAAO,MAAM,QAAQ,OAAO,IAC9B,QAAQ,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG,IAC5B,OAAO,YAAY,WACjB,UACA;CACN,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;CAG3D,MAAM,WACJ,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;CACxD,OAAO,WAAW;EAAE;EAAM;EAAM;CAAS,IAAI;EAAE;EAAM;CAAK;AAC5D;AA8BA,SAAS,mBACP,QACA,MACiB;CACjB,OAAO,sBAAsB;EAC3B,MAAM;EACN,QAAQ;EACR,MAAM;EACN,SAAS,cAAc,KAAK;EAC5B,KAAK,GAAG,OAAO,OAAO,+BAA+B,OAClD,KAAK,MAAM,EAAE,QAAQ,QAAQ,CAAC,CAC9B,MAAM,KAAuB,CAAC,CAC9B,KAAK,IAAI,EAAE;EACd,KAAK;EAEL,SAAS;GAAE,YAAY;GAAM;EAAO;CACtC,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,gBACd,MACA,QACA,UAAqC,CAAC,GACxB;CACd,MAAM,OAAO,QAAQ,cAAc;CACnC,MAAM,WAAW,QAAQ,YAAY;CACrC,MAAM,OAAO,QAAQ,eACjB,SAAS,QAAQ,aAAa,MAAM,CAAC,IACrC;CAEJ,MAAM,UAAU,WAAoC;EAClD,yBAAyB;GACvB;GACA;GACA;GACA;GACA;GACA,UAAU,QAAQ;EACpB,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA,UAAU,OAAoC;GAC5C,MAAM,SAAS,OAAO,UAAU,KAAK;GACrC,IAAI,OAAO,SAAS,OAAO;IAAE,SAAS;IAAM,MAAM,OAAO;GAAK;GAC9D,MAAM,SAAS,uBAAuB,OAAO,KAAK;GAClD,OAAO,MAAM;GACb,OAAO;IAAE,SAAS;IAAO;GAAO;EAClC;EACA,MAAM,OAAmB;GACvB,MAAM,SAAS,OAAO,UAAU,KAAK;GACrC,IAAI,OAAO,SAAS,OAAO,OAAO;GAClC,MAAM,SAAS,uBAAuB,OAAO,KAAK;GAClD,OAAO,MAAM;GACb,IAAI,SAAS,UACX,MACE,QAAQ,WAAW,QAAQ,IAAI,KAAK,mBAAmB,QAAQ,IAAI;GAIvE,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,45 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/validation-attributes.ts
4
+ /**
5
+ * Validation telemetry wire constants — the single source of truth for the
6
+ * `validation.*` span attributes and the `autotel.validation.mismatches` metric
7
+ * emitted when an input payload (HTTP body, event, message) fails to match its
8
+ * declared shape.
9
+ *
10
+ * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):
11
+ * safe to import from anything that only needs the constant strings — a
12
+ * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.
13
+ *
14
+ * These keys are a public API for the agents that query your telemetry. Treat a
15
+ * rename here the way you'd treat a breaking change to any other contract.
16
+ */
17
+ const VALIDATION_ATTR = {
18
+ /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */
19
+ name: "validation.name",
20
+ /** Where validation ran: `http` | `event` | `message` | a custom label. */
21
+ boundary: "validation.boundary",
22
+ /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */
23
+ mode: "validation.mode",
24
+ /** Stable hash of the declared shape, when a JSON-schema projection is given. */
25
+ hash: "validation.hash",
26
+ /** `info` | `warning` | `error`. */
27
+ severity: "validation.severity",
28
+ /** Number of failing fields. */
29
+ issueCount: "validation.issue.count",
30
+ /** Comma-separated failing field paths (capped). Never contains values. */
31
+ issuePaths: "validation.issue.paths",
32
+ /** Comma-separated distinct issue codes (capped). Never contains values. */
33
+ issueCodes: "validation.issue.codes"
34
+ };
35
+ const VALIDATION_METRICS = {
36
+ /** Counter, labelled `{ boundary, validation, mode }`. */
37
+ mismatches: "autotel.validation.mismatches" };
38
+ /** Max field paths / codes stamped onto a span, to bound attribute size. */
39
+ const VALIDATION_ISSUE_CAP = 20;
40
+
41
+ //#endregion
42
+ exports.VALIDATION_ATTR = VALIDATION_ATTR;
43
+ exports.VALIDATION_ISSUE_CAP = VALIDATION_ISSUE_CAP;
44
+ exports.VALIDATION_METRICS = VALIDATION_METRICS;
45
+ //# sourceMappingURL=validation-attributes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-attributes.cjs","names":[],"sources":["../src/validation-attributes.ts"],"sourcesContent":["/**\n * Validation telemetry wire constants — the single source of truth for the\n * `validation.*` span attributes and the `autotel.validation.mismatches` metric\n * emitted when an input payload (HTTP body, event, message) fails to match its\n * declared shape.\n *\n * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):\n * safe to import from anything that only needs the constant strings — a\n * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.\n *\n * These keys are a public API for the agents that query your telemetry. Treat a\n * rename here the way you'd treat a breaking change to any other contract.\n */\n\nexport const VALIDATION_ATTR = {\n /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */\n name: 'validation.name',\n /** Where validation ran: `http` | `event` | `message` | a custom label. */\n boundary: 'validation.boundary',\n /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */\n mode: 'validation.mode',\n /** Stable hash of the declared shape, when a JSON-schema projection is given. */\n hash: 'validation.hash',\n /** `info` | `warning` | `error`. */\n severity: 'validation.severity',\n /** Number of failing fields. */\n issueCount: 'validation.issue.count',\n /** Comma-separated failing field paths (capped). Never contains values. */\n issuePaths: 'validation.issue.paths',\n /** Comma-separated distinct issue codes (capped). Never contains values. */\n issueCodes: 'validation.issue.codes',\n} as const;\n\nexport type ValidationAttributeKey =\n (typeof VALIDATION_ATTR)[keyof typeof VALIDATION_ATTR];\n\nexport const VALIDATION_METRICS = {\n /** Counter, labelled `{ boundary, validation, mode }`. */\n mismatches: 'autotel.validation.mismatches',\n} as const;\n\n/** Max field paths / codes stamped onto a span, to bound attribute size. */\nexport const VALIDATION_ISSUE_CAP = 20;\n"],"mappings":";;;;;;;;;;;;;;;;AAcA,MAAa,kBAAkB;;CAE7B,MAAM;;CAEN,UAAU;;CAEV,MAAM;;CAEN,MAAM;;CAEN,UAAU;;CAEV,YAAY;;CAEZ,YAAY;;CAEZ,YAAY;AACd;AAKA,MAAa,qBAAqB;;AAEhC,YAAY,gCACd;;AAGA,MAAa,uBAAuB"}
@@ -0,0 +1,33 @@
1
+ //#region src/validation-attributes.d.ts
2
+ /**
3
+ * Validation telemetry wire constants — the single source of truth for the
4
+ * `validation.*` span attributes and the `autotel.validation.mismatches` metric
5
+ * emitted when an input payload (HTTP body, event, message) fails to match its
6
+ * declared shape.
7
+ *
8
+ * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):
9
+ * safe to import from anything that only needs the constant strings — a
10
+ * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.
11
+ *
12
+ * These keys are a public API for the agents that query your telemetry. Treat a
13
+ * rename here the way you'd treat a breaking change to any other contract.
14
+ */
15
+ declare const VALIDATION_ATTR: {
16
+ /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */readonly name: "validation.name"; /** Where validation ran: `http` | `event` | `message` | a custom label. */
17
+ readonly boundary: "validation.boundary"; /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */
18
+ readonly mode: "validation.mode"; /** Stable hash of the declared shape, when a JSON-schema projection is given. */
19
+ readonly hash: "validation.hash"; /** `info` | `warning` | `error`. */
20
+ readonly severity: "validation.severity"; /** Number of failing fields. */
21
+ readonly issueCount: "validation.issue.count"; /** Comma-separated failing field paths (capped). Never contains values. */
22
+ readonly issuePaths: "validation.issue.paths"; /** Comma-separated distinct issue codes (capped). Never contains values. */
23
+ readonly issueCodes: "validation.issue.codes";
24
+ };
25
+ type ValidationAttributeKey = (typeof VALIDATION_ATTR)[keyof typeof VALIDATION_ATTR];
26
+ declare const VALIDATION_METRICS: {
27
+ /** Counter, labelled `{ boundary, validation, mode }`. */readonly mismatches: "autotel.validation.mismatches";
28
+ };
29
+ /** Max field paths / codes stamped onto a span, to bound attribute size. */
30
+ declare const VALIDATION_ISSUE_CAP = 20;
31
+ //#endregion
32
+ export { VALIDATION_ATTR, VALIDATION_ISSUE_CAP, VALIDATION_METRICS, ValidationAttributeKey };
33
+ //# sourceMappingURL=validation-attributes.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-attributes.d.cts","names":[],"sources":["../src/validation-attributes.ts"],"mappings":";;AAcA;;;;;;;;;;;;cAAa,eAAA;sHAmBqB;EAAA,0CACxB;EAAA,kCAEG;EAAA;;iDAMoB;EAAA,+CAAA;EAAA;;KATrB,sBAAA,WACF,eAAA,eAA8B,eAAe;AAAA,cAE1C,kBAAA;qEAGH,UAAA;AAAA;;cAGG,oBAAA"}
@@ -0,0 +1,33 @@
1
+ //#region src/validation-attributes.d.ts
2
+ /**
3
+ * Validation telemetry wire constants — the single source of truth for the
4
+ * `validation.*` span attributes and the `autotel.validation.mismatches` metric
5
+ * emitted when an input payload (HTTP body, event, message) fails to match its
6
+ * declared shape.
7
+ *
8
+ * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):
9
+ * safe to import from anything that only needs the constant strings — a
10
+ * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.
11
+ *
12
+ * These keys are a public API for the agents that query your telemetry. Treat a
13
+ * rename here the way you'd treat a breaking change to any other contract.
14
+ */
15
+ declare const VALIDATION_ATTR: {
16
+ /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */readonly name: "validation.name"; /** Where validation ran: `http` | `event` | `message` | a custom label. */
17
+ readonly boundary: "validation.boundary"; /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */
18
+ readonly mode: "validation.mode"; /** Stable hash of the declared shape, when a JSON-schema projection is given. */
19
+ readonly hash: "validation.hash"; /** `info` | `warning` | `error`. */
20
+ readonly severity: "validation.severity"; /** Number of failing fields. */
21
+ readonly issueCount: "validation.issue.count"; /** Comma-separated failing field paths (capped). Never contains values. */
22
+ readonly issuePaths: "validation.issue.paths"; /** Comma-separated distinct issue codes (capped). Never contains values. */
23
+ readonly issueCodes: "validation.issue.codes";
24
+ };
25
+ type ValidationAttributeKey = (typeof VALIDATION_ATTR)[keyof typeof VALIDATION_ATTR];
26
+ declare const VALIDATION_METRICS: {
27
+ /** Counter, labelled `{ boundary, validation, mode }`. */readonly mismatches: "autotel.validation.mismatches";
28
+ };
29
+ /** Max field paths / codes stamped onto a span, to bound attribute size. */
30
+ declare const VALIDATION_ISSUE_CAP = 20;
31
+ //#endregion
32
+ export { VALIDATION_ATTR, VALIDATION_ISSUE_CAP, VALIDATION_METRICS, ValidationAttributeKey };
33
+ //# sourceMappingURL=validation-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-attributes.d.ts","names":[],"sources":["../src/validation-attributes.ts"],"mappings":";;AAcA;;;;;;;;;;;;cAAa,eAAA;sHAmBqB;EAAA,0CACxB;EAAA,kCAEG;EAAA;;iDAMoB;EAAA,+CAAA;EAAA;;KATrB,sBAAA,WACF,eAAA,eAA8B,eAAe;AAAA,cAE1C,kBAAA;qEAGH,UAAA;AAAA;;cAGG,oBAAA"}
@@ -0,0 +1,41 @@
1
+ //#region src/validation-attributes.ts
2
+ /**
3
+ * Validation telemetry wire constants — the single source of truth for the
4
+ * `validation.*` span attributes and the `autotel.validation.mismatches` metric
5
+ * emitted when an input payload (HTTP body, event, message) fails to match its
6
+ * declared shape.
7
+ *
8
+ * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):
9
+ * safe to import from anything that only needs the constant strings — a
10
+ * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.
11
+ *
12
+ * These keys are a public API for the agents that query your telemetry. Treat a
13
+ * rename here the way you'd treat a breaking change to any other contract.
14
+ */
15
+ const VALIDATION_ATTR = {
16
+ /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */
17
+ name: "validation.name",
18
+ /** Where validation ran: `http` | `event` | `message` | a custom label. */
19
+ boundary: "validation.boundary",
20
+ /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */
21
+ mode: "validation.mode",
22
+ /** Stable hash of the declared shape, when a JSON-schema projection is given. */
23
+ hash: "validation.hash",
24
+ /** `info` | `warning` | `error`. */
25
+ severity: "validation.severity",
26
+ /** Number of failing fields. */
27
+ issueCount: "validation.issue.count",
28
+ /** Comma-separated failing field paths (capped). Never contains values. */
29
+ issuePaths: "validation.issue.paths",
30
+ /** Comma-separated distinct issue codes (capped). Never contains values. */
31
+ issueCodes: "validation.issue.codes"
32
+ };
33
+ const VALIDATION_METRICS = {
34
+ /** Counter, labelled `{ boundary, validation, mode }`. */
35
+ mismatches: "autotel.validation.mismatches" };
36
+ /** Max field paths / codes stamped onto a span, to bound attribute size. */
37
+ const VALIDATION_ISSUE_CAP = 20;
38
+
39
+ //#endregion
40
+ export { VALIDATION_ATTR, VALIDATION_ISSUE_CAP, VALIDATION_METRICS };
41
+ //# sourceMappingURL=validation-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-attributes.js","names":[],"sources":["../src/validation-attributes.ts"],"sourcesContent":["/**\n * Validation telemetry wire constants — the single source of truth for the\n * `validation.*` span attributes and the `autotel.validation.mismatches` metric\n * emitted when an input payload (HTTP body, event, message) fails to match its\n * declared shape.\n *\n * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):\n * safe to import from anything that only needs the constant strings — a\n * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.\n *\n * These keys are a public API for the agents that query your telemetry. Treat a\n * rename here the way you'd treat a breaking change to any other contract.\n */\n\nexport const VALIDATION_ATTR = {\n /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */\n name: 'validation.name',\n /** Where validation ran: `http` | `event` | `message` | a custom label. */\n boundary: 'validation.boundary',\n /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */\n mode: 'validation.mode',\n /** Stable hash of the declared shape, when a JSON-schema projection is given. */\n hash: 'validation.hash',\n /** `info` | `warning` | `error`. */\n severity: 'validation.severity',\n /** Number of failing fields. */\n issueCount: 'validation.issue.count',\n /** Comma-separated failing field paths (capped). Never contains values. */\n issuePaths: 'validation.issue.paths',\n /** Comma-separated distinct issue codes (capped). Never contains values. */\n issueCodes: 'validation.issue.codes',\n} as const;\n\nexport type ValidationAttributeKey =\n (typeof VALIDATION_ATTR)[keyof typeof VALIDATION_ATTR];\n\nexport const VALIDATION_METRICS = {\n /** Counter, labelled `{ boundary, validation, mode }`. */\n mismatches: 'autotel.validation.mismatches',\n} as const;\n\n/** Max field paths / codes stamped onto a span, to bound attribute size. */\nexport const VALIDATION_ISSUE_CAP = 20;\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAa,kBAAkB;;CAE7B,MAAM;;CAEN,UAAU;;CAEV,MAAM;;CAEN,MAAM;;CAEN,UAAU;;CAEV,YAAY;;CAEZ,YAAY;;CAEZ,YAAY;AACd;AAKA,MAAa,qBAAqB;;AAEhC,YAAY,gCACd;;AAGA,MAAa,uBAAuB"}