@superblocksteam/telemetry 2.0.0-SNAPSHOT.329be19cb7ca892b

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 (388) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +298 -0
  3. package/dist/browser/console-logging.d.ts +18 -0
  4. package/dist/browser/console-logging.d.ts.map +1 -0
  5. package/dist/browser/console-logging.js +32 -0
  6. package/dist/browser/console-logging.js.map +1 -0
  7. package/dist/browser/early-console-buffer.d.ts +49 -0
  8. package/dist/browser/early-console-buffer.d.ts.map +1 -0
  9. package/dist/browser/early-console-buffer.js +182 -0
  10. package/dist/browser/early-console-buffer.js.map +1 -0
  11. package/dist/browser/index.d.ts +17 -0
  12. package/dist/browser/index.d.ts.map +1 -0
  13. package/dist/browser/index.js +50 -0
  14. package/dist/browser/index.js.map +1 -0
  15. package/dist/browser/init.d.ts +101 -0
  16. package/dist/browser/init.d.ts.map +1 -0
  17. package/dist/browser/init.js +329 -0
  18. package/dist/browser/init.js.map +1 -0
  19. package/dist/browser/instrumentations.d.ts +67 -0
  20. package/dist/browser/instrumentations.d.ts.map +1 -0
  21. package/dist/browser/instrumentations.js +83 -0
  22. package/dist/browser/instrumentations.js.map +1 -0
  23. package/dist/browser/logs.d.ts +55 -0
  24. package/dist/browser/logs.d.ts.map +1 -0
  25. package/dist/browser/logs.js +86 -0
  26. package/dist/browser/logs.js.map +1 -0
  27. package/dist/browser/metrics.d.ts +29 -0
  28. package/dist/browser/metrics.d.ts.map +1 -0
  29. package/dist/browser/metrics.js +49 -0
  30. package/dist/browser/metrics.js.map +1 -0
  31. package/dist/browser/resilient-exporter.d.ts +43 -0
  32. package/dist/browser/resilient-exporter.d.ts.map +1 -0
  33. package/dist/browser/resilient-exporter.js +88 -0
  34. package/dist/browser/resilient-exporter.js.map +1 -0
  35. package/dist/browser/sanitizer.d.ts +35 -0
  36. package/dist/browser/sanitizer.d.ts.map +1 -0
  37. package/dist/browser/sanitizer.js +211 -0
  38. package/dist/browser/sanitizer.js.map +1 -0
  39. package/dist/browser/traced-socket.d.ts +102 -0
  40. package/dist/browser/traced-socket.d.ts.map +1 -0
  41. package/dist/browser/traced-socket.js +203 -0
  42. package/dist/browser/traced-socket.js.map +1 -0
  43. package/dist/common/contracts/tier2-traces.d.ts +116 -0
  44. package/dist/common/contracts/tier2-traces.d.ts.map +1 -0
  45. package/dist/common/contracts/tier2-traces.js +736 -0
  46. package/dist/common/contracts/tier2-traces.js.map +1 -0
  47. package/dist/common/deployment-type.d.ts +18 -0
  48. package/dist/common/deployment-type.d.ts.map +1 -0
  49. package/dist/common/deployment-type.js +30 -0
  50. package/dist/common/deployment-type.js.map +1 -0
  51. package/dist/common/guardrails.d.ts +116 -0
  52. package/dist/common/guardrails.d.ts.map +1 -0
  53. package/dist/common/guardrails.js +189 -0
  54. package/dist/common/guardrails.js.map +1 -0
  55. package/dist/common/index.d.ts +18 -0
  56. package/dist/common/index.d.ts.map +1 -0
  57. package/dist/common/index.js +34 -0
  58. package/dist/common/index.js.map +1 -0
  59. package/dist/common/log-sanitizer.d.ts +170 -0
  60. package/dist/common/log-sanitizer.d.ts.map +1 -0
  61. package/dist/common/log-sanitizer.js +690 -0
  62. package/dist/common/log-sanitizer.js.map +1 -0
  63. package/dist/common/normalize-metric-path.d.ts +2 -0
  64. package/dist/common/normalize-metric-path.d.ts.map +1 -0
  65. package/dist/common/normalize-metric-path.js +22 -0
  66. package/dist/common/normalize-metric-path.js.map +1 -0
  67. package/dist/common/policy-evaluator.d.ts +103 -0
  68. package/dist/common/policy-evaluator.d.ts.map +1 -0
  69. package/dist/common/policy-evaluator.js +200 -0
  70. package/dist/common/policy-evaluator.js.map +1 -0
  71. package/dist/common/resource.d.ts +79 -0
  72. package/dist/common/resource.d.ts.map +1 -0
  73. package/dist/common/resource.js +128 -0
  74. package/dist/common/resource.js.map +1 -0
  75. package/dist/common/tier-hints.d.ts +182 -0
  76. package/dist/common/tier-hints.d.ts.map +1 -0
  77. package/dist/common/tier-hints.js +209 -0
  78. package/dist/common/tier-hints.js.map +1 -0
  79. package/dist/common/trace-sanitizer.d.ts +82 -0
  80. package/dist/common/trace-sanitizer.d.ts.map +1 -0
  81. package/dist/common/trace-sanitizer.js +234 -0
  82. package/dist/common/trace-sanitizer.js.map +1 -0
  83. package/dist/common/traced-socket-types.d.ts +43 -0
  84. package/dist/common/traced-socket-types.d.ts.map +1 -0
  85. package/dist/common/traced-socket-types.js +17 -0
  86. package/dist/common/traced-socket-types.js.map +1 -0
  87. package/dist/index.d.ts +45 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +88 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/lint/forbidden-attributes.d.ts +149 -0
  92. package/dist/lint/forbidden-attributes.d.ts.map +1 -0
  93. package/dist/lint/forbidden-attributes.js +215 -0
  94. package/dist/lint/forbidden-attributes.js.map +1 -0
  95. package/dist/lint/index.d.ts +9 -0
  96. package/dist/lint/index.d.ts.map +1 -0
  97. package/dist/lint/index.js +16 -0
  98. package/dist/lint/index.js.map +1 -0
  99. package/dist/llmobs/index.d.ts +22 -0
  100. package/dist/llmobs/index.d.ts.map +1 -0
  101. package/dist/llmobs/index.js +29 -0
  102. package/dist/llmobs/index.js.map +1 -0
  103. package/dist/llmobs/tier1-exporter.d.ts +146 -0
  104. package/dist/llmobs/tier1-exporter.d.ts.map +1 -0
  105. package/dist/llmobs/tier1-exporter.js +199 -0
  106. package/dist/llmobs/tier1-exporter.js.map +1 -0
  107. package/dist/llmobs/tier2-summarizer.d.ts +268 -0
  108. package/dist/llmobs/tier2-summarizer.d.ts.map +1 -0
  109. package/dist/llmobs/tier2-summarizer.js +656 -0
  110. package/dist/llmobs/tier2-summarizer.js.map +1 -0
  111. package/dist/node/dynamic-attribute-processor.d.ts +43 -0
  112. package/dist/node/dynamic-attribute-processor.d.ts.map +1 -0
  113. package/dist/node/dynamic-attribute-processor.js +79 -0
  114. package/dist/node/dynamic-attribute-processor.js.map +1 -0
  115. package/dist/node/exporters/resilient-exporter.d.ts +91 -0
  116. package/dist/node/exporters/resilient-exporter.d.ts.map +1 -0
  117. package/dist/node/exporters/resilient-exporter.js +136 -0
  118. package/dist/node/exporters/resilient-exporter.js.map +1 -0
  119. package/dist/node/index.d.ts +13 -0
  120. package/dist/node/index.d.ts.map +1 -0
  121. package/dist/node/index.js +32 -0
  122. package/dist/node/index.js.map +1 -0
  123. package/dist/node/init.d.ts +97 -0
  124. package/dist/node/init.d.ts.map +1 -0
  125. package/dist/node/init.js +365 -0
  126. package/dist/node/init.js.map +1 -0
  127. package/dist/node/local-obs-mode.d.ts +17 -0
  128. package/dist/node/local-obs-mode.d.ts.map +1 -0
  129. package/dist/node/local-obs-mode.js +22 -0
  130. package/dist/node/local-obs-mode.js.map +1 -0
  131. package/dist/node/log-processor.d.ts +132 -0
  132. package/dist/node/log-processor.d.ts.map +1 -0
  133. package/dist/node/log-processor.js +397 -0
  134. package/dist/node/log-processor.js.map +1 -0
  135. package/dist/node/metrics-client.d.ts +88 -0
  136. package/dist/node/metrics-client.d.ts.map +1 -0
  137. package/dist/node/metrics-client.js +209 -0
  138. package/dist/node/metrics-client.js.map +1 -0
  139. package/dist/node/safe-logger.d.ts +55 -0
  140. package/dist/node/safe-logger.d.ts.map +1 -0
  141. package/dist/node/safe-logger.js +158 -0
  142. package/dist/node/safe-logger.js.map +1 -0
  143. package/dist/node/sanitizing-processor.d.ts +67 -0
  144. package/dist/node/sanitizing-processor.d.ts.map +1 -0
  145. package/dist/node/sanitizing-processor.js +167 -0
  146. package/dist/node/sanitizing-processor.js.map +1 -0
  147. package/dist/node/service-tracers.d.ts +52 -0
  148. package/dist/node/service-tracers.d.ts.map +1 -0
  149. package/dist/node/service-tracers.js +81 -0
  150. package/dist/node/service-tracers.js.map +1 -0
  151. package/dist/node/traced-socket.d.ts +120 -0
  152. package/dist/node/traced-socket.d.ts.map +1 -0
  153. package/dist/node/traced-socket.js +338 -0
  154. package/dist/node/traced-socket.js.map +1 -0
  155. package/dist/npm-registry/emitter.d.ts +310 -0
  156. package/dist/npm-registry/emitter.d.ts.map +1 -0
  157. package/dist/npm-registry/emitter.js +537 -0
  158. package/dist/npm-registry/emitter.js.map +1 -0
  159. package/dist/npm-registry/index.d.ts +12 -0
  160. package/dist/npm-registry/index.d.ts.map +1 -0
  161. package/dist/npm-registry/index.js +28 -0
  162. package/dist/npm-registry/index.js.map +1 -0
  163. package/dist/npm-registry/sanitize.d.ts +174 -0
  164. package/dist/npm-registry/sanitize.d.ts.map +1 -0
  165. package/dist/npm-registry/sanitize.js +342 -0
  166. package/dist/npm-registry/sanitize.js.map +1 -0
  167. package/dist/npm-registry/spans.d.ts +61 -0
  168. package/dist/npm-registry/spans.d.ts.map +1 -0
  169. package/dist/npm-registry/spans.js +91 -0
  170. package/dist/npm-registry/spans.js.map +1 -0
  171. package/dist/testing/in-memory-exporter.d.ts +179 -0
  172. package/dist/testing/in-memory-exporter.d.ts.map +1 -0
  173. package/dist/testing/in-memory-exporter.js +256 -0
  174. package/dist/testing/in-memory-exporter.js.map +1 -0
  175. package/dist/testing/index.d.ts +9 -0
  176. package/dist/testing/index.d.ts.map +1 -0
  177. package/dist/testing/index.js +21 -0
  178. package/dist/testing/index.js.map +1 -0
  179. package/dist/testing/metrics-capture.d.ts +29 -0
  180. package/dist/testing/metrics-capture.d.ts.map +1 -0
  181. package/dist/testing/metrics-capture.js +74 -0
  182. package/dist/testing/metrics-capture.js.map +1 -0
  183. package/dist/testing/test-init.d.ts +80 -0
  184. package/dist/testing/test-init.d.ts.map +1 -0
  185. package/dist/testing/test-init.js +144 -0
  186. package/dist/testing/test-init.js.map +1 -0
  187. package/dist/types/index.d.ts +84 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +23 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/policy.d.ts +92 -0
  192. package/dist/types/policy.d.ts.map +1 -0
  193. package/dist/types/policy.js +125 -0
  194. package/dist/types/policy.js.map +1 -0
  195. package/dist-esm/browser/console-logging.d.ts +18 -0
  196. package/dist-esm/browser/console-logging.d.ts.map +1 -0
  197. package/dist-esm/browser/console-logging.js +27 -0
  198. package/dist-esm/browser/console-logging.js.map +1 -0
  199. package/dist-esm/browser/early-console-buffer.d.ts +49 -0
  200. package/dist-esm/browser/early-console-buffer.d.ts.map +1 -0
  201. package/dist-esm/browser/early-console-buffer.js +180 -0
  202. package/dist-esm/browser/early-console-buffer.js.map +1 -0
  203. package/dist-esm/browser/index.d.ts +17 -0
  204. package/dist-esm/browser/index.d.ts.map +1 -0
  205. package/dist-esm/browser/index.js +22 -0
  206. package/dist-esm/browser/index.js.map +1 -0
  207. package/dist-esm/browser/init.d.ts +101 -0
  208. package/dist-esm/browser/init.d.ts.map +1 -0
  209. package/dist-esm/browser/init.js +319 -0
  210. package/dist-esm/browser/init.js.map +1 -0
  211. package/dist-esm/browser/instrumentations.d.ts +67 -0
  212. package/dist-esm/browser/instrumentations.d.ts.map +1 -0
  213. package/dist-esm/browser/instrumentations.js +79 -0
  214. package/dist-esm/browser/instrumentations.js.map +1 -0
  215. package/dist-esm/browser/logs.d.ts +55 -0
  216. package/dist-esm/browser/logs.d.ts.map +1 -0
  217. package/dist-esm/browser/logs.js +79 -0
  218. package/dist-esm/browser/logs.js.map +1 -0
  219. package/dist-esm/browser/metrics.d.ts +29 -0
  220. package/dist-esm/browser/metrics.d.ts.map +1 -0
  221. package/dist-esm/browser/metrics.js +46 -0
  222. package/dist-esm/browser/metrics.js.map +1 -0
  223. package/dist-esm/browser/resilient-exporter.d.ts +43 -0
  224. package/dist-esm/browser/resilient-exporter.d.ts.map +1 -0
  225. package/dist-esm/browser/resilient-exporter.js +84 -0
  226. package/dist-esm/browser/resilient-exporter.js.map +1 -0
  227. package/dist-esm/browser/sanitizer.d.ts +35 -0
  228. package/dist-esm/browser/sanitizer.d.ts.map +1 -0
  229. package/dist-esm/browser/sanitizer.js +207 -0
  230. package/dist-esm/browser/sanitizer.js.map +1 -0
  231. package/dist-esm/browser/traced-socket.d.ts +102 -0
  232. package/dist-esm/browser/traced-socket.d.ts.map +1 -0
  233. package/dist-esm/browser/traced-socket.js +199 -0
  234. package/dist-esm/browser/traced-socket.js.map +1 -0
  235. package/dist-esm/common/contracts/tier2-traces.d.ts +116 -0
  236. package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -0
  237. package/dist-esm/common/contracts/tier2-traces.js +725 -0
  238. package/dist-esm/common/contracts/tier2-traces.js.map +1 -0
  239. package/dist-esm/common/deployment-type.d.ts +18 -0
  240. package/dist-esm/common/deployment-type.d.ts.map +1 -0
  241. package/dist-esm/common/deployment-type.js +27 -0
  242. package/dist-esm/common/deployment-type.js.map +1 -0
  243. package/dist-esm/common/guardrails.d.ts +116 -0
  244. package/dist-esm/common/guardrails.d.ts.map +1 -0
  245. package/dist-esm/common/guardrails.js +179 -0
  246. package/dist-esm/common/guardrails.js.map +1 -0
  247. package/dist-esm/common/index.d.ts +18 -0
  248. package/dist-esm/common/index.d.ts.map +1 -0
  249. package/dist-esm/common/index.js +18 -0
  250. package/dist-esm/common/index.js.map +1 -0
  251. package/dist-esm/common/log-sanitizer.d.ts +170 -0
  252. package/dist-esm/common/log-sanitizer.d.ts.map +1 -0
  253. package/dist-esm/common/log-sanitizer.js +672 -0
  254. package/dist-esm/common/log-sanitizer.js.map +1 -0
  255. package/dist-esm/common/normalize-metric-path.d.ts +2 -0
  256. package/dist-esm/common/normalize-metric-path.d.ts.map +1 -0
  257. package/dist-esm/common/normalize-metric-path.js +19 -0
  258. package/dist-esm/common/normalize-metric-path.js.map +1 -0
  259. package/dist-esm/common/policy-evaluator.d.ts +103 -0
  260. package/dist-esm/common/policy-evaluator.d.ts.map +1 -0
  261. package/dist-esm/common/policy-evaluator.js +196 -0
  262. package/dist-esm/common/policy-evaluator.js.map +1 -0
  263. package/dist-esm/common/resource.d.ts +79 -0
  264. package/dist-esm/common/resource.d.ts.map +1 -0
  265. package/dist-esm/common/resource.js +121 -0
  266. package/dist-esm/common/resource.js.map +1 -0
  267. package/dist-esm/common/tier-hints.d.ts +182 -0
  268. package/dist-esm/common/tier-hints.d.ts.map +1 -0
  269. package/dist-esm/common/tier-hints.js +199 -0
  270. package/dist-esm/common/tier-hints.js.map +1 -0
  271. package/dist-esm/common/trace-sanitizer.d.ts +82 -0
  272. package/dist-esm/common/trace-sanitizer.d.ts.map +1 -0
  273. package/dist-esm/common/trace-sanitizer.js +230 -0
  274. package/dist-esm/common/trace-sanitizer.js.map +1 -0
  275. package/dist-esm/common/traced-socket-types.d.ts +43 -0
  276. package/dist-esm/common/traced-socket-types.d.ts.map +1 -0
  277. package/dist-esm/common/traced-socket-types.js +16 -0
  278. package/dist-esm/common/traced-socket-types.js.map +1 -0
  279. package/dist-esm/index.d.ts +45 -0
  280. package/dist-esm/index.d.ts.map +1 -0
  281. package/dist-esm/index.js +56 -0
  282. package/dist-esm/index.js.map +1 -0
  283. package/dist-esm/lint/forbidden-attributes.d.ts +149 -0
  284. package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -0
  285. package/dist-esm/lint/forbidden-attributes.js +210 -0
  286. package/dist-esm/lint/forbidden-attributes.js.map +1 -0
  287. package/dist-esm/lint/index.d.ts +9 -0
  288. package/dist-esm/lint/index.d.ts.map +1 -0
  289. package/dist-esm/lint/index.js +9 -0
  290. package/dist-esm/lint/index.js.map +1 -0
  291. package/dist-esm/llmobs/index.d.ts +22 -0
  292. package/dist-esm/llmobs/index.d.ts.map +1 -0
  293. package/dist-esm/llmobs/index.js +22 -0
  294. package/dist-esm/llmobs/index.js.map +1 -0
  295. package/dist-esm/llmobs/tier1-exporter.d.ts +146 -0
  296. package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -0
  297. package/dist-esm/llmobs/tier1-exporter.js +193 -0
  298. package/dist-esm/llmobs/tier1-exporter.js.map +1 -0
  299. package/dist-esm/llmobs/tier2-summarizer.d.ts +268 -0
  300. package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -0
  301. package/dist-esm/llmobs/tier2-summarizer.js +652 -0
  302. package/dist-esm/llmobs/tier2-summarizer.js.map +1 -0
  303. package/dist-esm/node/dynamic-attribute-processor.d.ts +43 -0
  304. package/dist-esm/node/dynamic-attribute-processor.d.ts.map +1 -0
  305. package/dist-esm/node/dynamic-attribute-processor.js +74 -0
  306. package/dist-esm/node/dynamic-attribute-processor.js.map +1 -0
  307. package/dist-esm/node/exporters/resilient-exporter.d.ts +91 -0
  308. package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -0
  309. package/dist-esm/node/exporters/resilient-exporter.js +132 -0
  310. package/dist-esm/node/exporters/resilient-exporter.js.map +1 -0
  311. package/dist-esm/node/index.d.ts +13 -0
  312. package/dist-esm/node/index.d.ts.map +1 -0
  313. package/dist-esm/node/index.js +13 -0
  314. package/dist-esm/node/index.js.map +1 -0
  315. package/dist-esm/node/init.d.ts +97 -0
  316. package/dist-esm/node/init.d.ts.map +1 -0
  317. package/dist-esm/node/init.js +359 -0
  318. package/dist-esm/node/init.js.map +1 -0
  319. package/dist-esm/node/local-obs-mode.d.ts +17 -0
  320. package/dist-esm/node/local-obs-mode.d.ts.map +1 -0
  321. package/dist-esm/node/local-obs-mode.js +19 -0
  322. package/dist-esm/node/local-obs-mode.js.map +1 -0
  323. package/dist-esm/node/log-processor.d.ts +132 -0
  324. package/dist-esm/node/log-processor.d.ts.map +1 -0
  325. package/dist-esm/node/log-processor.js +389 -0
  326. package/dist-esm/node/log-processor.js.map +1 -0
  327. package/dist-esm/node/metrics-client.d.ts +88 -0
  328. package/dist-esm/node/metrics-client.d.ts.map +1 -0
  329. package/dist-esm/node/metrics-client.js +205 -0
  330. package/dist-esm/node/metrics-client.js.map +1 -0
  331. package/dist-esm/node/safe-logger.d.ts +55 -0
  332. package/dist-esm/node/safe-logger.d.ts.map +1 -0
  333. package/dist-esm/node/safe-logger.js +154 -0
  334. package/dist-esm/node/safe-logger.js.map +1 -0
  335. package/dist-esm/node/sanitizing-processor.d.ts +67 -0
  336. package/dist-esm/node/sanitizing-processor.d.ts.map +1 -0
  337. package/dist-esm/node/sanitizing-processor.js +163 -0
  338. package/dist-esm/node/sanitizing-processor.js.map +1 -0
  339. package/dist-esm/node/service-tracers.d.ts +52 -0
  340. package/dist-esm/node/service-tracers.d.ts.map +1 -0
  341. package/dist-esm/node/service-tracers.js +78 -0
  342. package/dist-esm/node/service-tracers.js.map +1 -0
  343. package/dist-esm/node/traced-socket.d.ts +120 -0
  344. package/dist-esm/node/traced-socket.d.ts.map +1 -0
  345. package/dist-esm/node/traced-socket.js +334 -0
  346. package/dist-esm/node/traced-socket.js.map +1 -0
  347. package/dist-esm/npm-registry/emitter.d.ts +310 -0
  348. package/dist-esm/npm-registry/emitter.d.ts.map +1 -0
  349. package/dist-esm/npm-registry/emitter.js +525 -0
  350. package/dist-esm/npm-registry/emitter.js.map +1 -0
  351. package/dist-esm/npm-registry/index.d.ts +12 -0
  352. package/dist-esm/npm-registry/index.d.ts.map +1 -0
  353. package/dist-esm/npm-registry/index.js +12 -0
  354. package/dist-esm/npm-registry/index.js.map +1 -0
  355. package/dist-esm/npm-registry/sanitize.d.ts +174 -0
  356. package/dist-esm/npm-registry/sanitize.d.ts.map +1 -0
  357. package/dist-esm/npm-registry/sanitize.js +331 -0
  358. package/dist-esm/npm-registry/sanitize.js.map +1 -0
  359. package/dist-esm/npm-registry/spans.d.ts +61 -0
  360. package/dist-esm/npm-registry/spans.d.ts.map +1 -0
  361. package/dist-esm/npm-registry/spans.js +86 -0
  362. package/dist-esm/npm-registry/spans.js.map +1 -0
  363. package/dist-esm/package.json +1 -0
  364. package/dist-esm/testing/in-memory-exporter.d.ts +179 -0
  365. package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -0
  366. package/dist-esm/testing/in-memory-exporter.js +250 -0
  367. package/dist-esm/testing/in-memory-exporter.js.map +1 -0
  368. package/dist-esm/testing/index.d.ts +9 -0
  369. package/dist-esm/testing/index.d.ts.map +1 -0
  370. package/dist-esm/testing/index.js +9 -0
  371. package/dist-esm/testing/index.js.map +1 -0
  372. package/dist-esm/testing/metrics-capture.d.ts +29 -0
  373. package/dist-esm/testing/metrics-capture.d.ts.map +1 -0
  374. package/dist-esm/testing/metrics-capture.js +71 -0
  375. package/dist-esm/testing/metrics-capture.js.map +1 -0
  376. package/dist-esm/testing/test-init.d.ts +80 -0
  377. package/dist-esm/testing/test-init.d.ts.map +1 -0
  378. package/dist-esm/testing/test-init.js +137 -0
  379. package/dist-esm/testing/test-init.js.map +1 -0
  380. package/dist-esm/types/index.d.ts +84 -0
  381. package/dist-esm/types/index.d.ts.map +1 -0
  382. package/dist-esm/types/index.js +7 -0
  383. package/dist-esm/types/index.js.map +1 -0
  384. package/dist-esm/types/policy.d.ts +92 -0
  385. package/dist-esm/types/policy.d.ts.map +1 -0
  386. package/dist-esm/types/policy.js +122 -0
  387. package/dist-esm/types/policy.js.map +1 -0
  388. package/package.json +102 -0
@@ -0,0 +1,736 @@
1
+ "use strict";
2
+ /**
3
+ * Tier 2 Traces Contract (v0.6.0) — TypeScript mirror.
4
+ *
5
+ * THIS FILE IS A MIRROR, NOT THE SOURCE OF TRUTH. The canonical Tier 2 traces
6
+ * contract lives in the `engineering` repo:
7
+ * - engineering/projects/o11y-refactor/contracts/tier2-traces.v0.6.0.json (canonical contract)
8
+ * - engineering/projects/o11y-refactor/contracts/README.md (rationale, Versioning Policy, Review Checklist)
9
+ * Org-wide telemetry naming and the Tier 2 privacy boundary are documented in the
10
+ * `workspace` repo: workspace/docs/naming-conventions.md and the `observability`
11
+ * skill (.agents/skills/observability/SKILL.md).
12
+ *
13
+ * CHANGING TIER 2 BEHAVIOR (forbidden / hashed / dropped / allowed attributes):
14
+ * 1. Update the canonical JSON in `engineering` FIRST, as a NEW version, per the
15
+ * README Versioning Policy (breaking = MAJOR, additive = MINOR, docs = PATCH).
16
+ * 2. Propagate the SAME change to every mirror so they stay byte-for-byte aligned:
17
+ * - this file (TS SDK sanitizer / ESLint / guardrails)
18
+ * - orchestrator/pkg/telemetry/forbidden_attributes.go (Go SDK maps)
19
+ * - orchestrator/pkg/telemetry/contracts/tier2-traces.json (Go embedded; regenerate via
20
+ * orchestrator/scripts/sync-ts-telemetry-contracts.sh — do not hand-edit)
21
+ * Editing this file alone silently drifts from the contract and the other SDKs, which
22
+ * lets a re-cased or newly added attribute bypass the Tier 2 privacy boundary. Cross-surface
23
+ * parity is enforced by the orchestrator Go tests (TestForbiddenAttributesMatchTSContract,
24
+ * TestDroppedAttributesMatchTS).
25
+ *
26
+ * Used by: trace-sanitizer (which spans/attributes to export), lint/forbidden-attributes
27
+ * (ESLint), guardrails (dev-time warnings), and Collector config generation.
28
+ * "request handler *" is a local extension for Express instrumentation (not in the JSON).
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.FORBIDDEN_VALUE_PATTERNS = exports.ALWAYS_SAMPLE_SPANS = exports.TIER2_DROPPED_ATTRIBUTES = exports.TIER2_HASHED_ATTRIBUTES = exports.TIER2_FORBIDDEN_ATTRIBUTES = exports.DROPPED_HIGH_CARDINALITY_ATTRIBUTES = exports.HASHED_TIER_2_SPAN_ATTRIBUTES = exports.FORBIDDEN_TIER_2_SPAN_ATTRIBUTES = exports.CLOUD_TRACE_CONTRACT = exports.TIER_2_TRACE_CONTRACT = void 0;
32
+ exports.getAttributeName = getAttributeName;
33
+ exports.getTraceContract = getTraceContract;
34
+ exports.getTraceSanitizerAttributeSets = getTraceSanitizerAttributeSets;
35
+ exports.isForbiddenAttribute = isForbiddenAttribute;
36
+ exports.isHashedAttribute = isHashedAttribute;
37
+ exports.isDroppedAttribute = isDroppedAttribute;
38
+ exports.containsForbiddenPattern = containsForbiddenPattern;
39
+ exports.shouldAlwaysSample = shouldAlwaysSample;
40
+ const shared_1 = require("@superblocksteam/shared");
41
+ function getAttributeName(attr) {
42
+ return typeof attr === "string" ? attr : attr.name;
43
+ }
44
+ /**
45
+ * OTEL GenAI semantic conventions (gen_ai.*) are preferred; llm.* attribute names are legacy.
46
+ * Span names: gen_ai.request / gen_ai.tool_call / gen_ai.stream* (vite-plugin-file-sync LLMObsOtelExporter);
47
+ * llm.request / llm.tool_call / ai.streamText* are legacy aliases for the same shapes.
48
+ */
49
+ const GEN_AI_REQUEST_LIKE_ATTRIBUTES = [
50
+ { name: "error", type: "boolean" },
51
+ { name: "gen_ai.client.duration_ms", type: "number" },
52
+ { name: "gen_ai.client.time_to_first_token", type: "number" },
53
+ {
54
+ name: "gen_ai.error.category",
55
+ allowedValues: [
56
+ "aborted",
57
+ "api_error",
58
+ "auth_error",
59
+ "content_filter",
60
+ "context_length",
61
+ "none",
62
+ "network",
63
+ "quota",
64
+ "rate_limit",
65
+ "timeout",
66
+ "unknown",
67
+ "validation_error",
68
+ ],
69
+ },
70
+ {
71
+ name: "gen_ai.operation.name",
72
+ allowedValues: [
73
+ "chat",
74
+ "embeddings",
75
+ "execute_tool",
76
+ "generate_content",
77
+ "invoke_agent",
78
+ "text_completion",
79
+ ],
80
+ },
81
+ {
82
+ name: "gen_ai.provider.name",
83
+ allowedValues: [
84
+ "anthropic",
85
+ "aws.bedrock",
86
+ "azure.ai.inference",
87
+ "azure.ai.openai",
88
+ "cohere",
89
+ "deepseek",
90
+ "gcp.gemini",
91
+ "gcp.vertex_ai",
92
+ "groq",
93
+ "mistral_ai",
94
+ "openai",
95
+ ],
96
+ },
97
+ { name: "gen_ai.request.model", maxCardinality: 50 },
98
+ {
99
+ name: "gen_ai.request.status",
100
+ allowedValues: ["error", "success"],
101
+ },
102
+ {
103
+ name: "gen_ai.response.finish_reasons",
104
+ allowedValues: ["content_filter", "error", "length", "stop", "tool_calls"],
105
+ },
106
+ { name: "gen_ai.response.model", maxCardinality: 50 },
107
+ {
108
+ name: "gen_ai.system",
109
+ allowedValues: [
110
+ "anthropic",
111
+ "aws.bedrock",
112
+ "azure.ai.inference",
113
+ "azure.ai.openai",
114
+ "cohere",
115
+ "deepseek",
116
+ "gcp.gemini",
117
+ "gcp.vertex_ai",
118
+ "groq",
119
+ "mistral_ai",
120
+ "openai",
121
+ ],
122
+ },
123
+ { name: "gen_ai.usage.cached_tokens", type: "number" },
124
+ { name: "gen_ai.usage.input_tokens", type: "number" },
125
+ { name: "gen_ai.usage.output_tokens", type: "number" },
126
+ { name: "gen_ai.usage.reasoning_tokens", type: "number" },
127
+ { name: "gen_ai.usage.total_tokens", type: "number" },
128
+ { name: "llm.cached_tokens", type: "number" },
129
+ { name: "llm.cost_usd", type: "number" },
130
+ { name: "llm.duration_ms", type: "number" },
131
+ {
132
+ name: "llm.error_category",
133
+ allowedValues: [
134
+ "aborted",
135
+ "api_error",
136
+ "auth_error",
137
+ "content_filter",
138
+ "context_length",
139
+ "none",
140
+ "network",
141
+ "quota",
142
+ "rate_limit",
143
+ "timeout",
144
+ "unknown",
145
+ "validation_error",
146
+ ],
147
+ },
148
+ {
149
+ name: "llm.finish_reason",
150
+ allowedValues: ["content_filter", "error", "length", "stop", "tool_calls"],
151
+ },
152
+ { name: "llm.input_tokens", type: "number" },
153
+ { name: "llm.model", maxCardinality: 50 },
154
+ { name: "llm.output_tokens", type: "number" },
155
+ {
156
+ name: "llm.provider",
157
+ allowedValues: [
158
+ "anthropic",
159
+ "azure",
160
+ "bedrock",
161
+ "cohere",
162
+ "google",
163
+ "mistral",
164
+ "openai",
165
+ ],
166
+ },
167
+ { name: "llm.reasoning_tokens", type: "number" },
168
+ {
169
+ name: "llm.status",
170
+ allowedValues: ["error", "success"],
171
+ },
172
+ { name: "llm.time_to_first_token_ms", type: "number" },
173
+ { name: "llm.total_tokens", type: "number" },
174
+ "otel.status_code",
175
+ {
176
+ name: "superblocks.tier_hint",
177
+ allowedValues: ["include_tier3", "skip_export", "tier1_only"],
178
+ },
179
+ ];
180
+ const GEN_AI_TOOL_CALL_ATTRIBUTES = [
181
+ ...GEN_AI_REQUEST_LIKE_ATTRIBUTES,
182
+ { name: "tool.duration_ms", type: "number" },
183
+ {
184
+ name: "tool.error_category",
185
+ allowedValues: [
186
+ "execution_error",
187
+ "none",
188
+ "not_found",
189
+ "permission_denied",
190
+ "timeout",
191
+ "unknown",
192
+ "validation_error",
193
+ ],
194
+ },
195
+ { name: "tool.name", maxCardinality: 50 },
196
+ {
197
+ name: "tool.status",
198
+ allowedValues: ["error", "success"],
199
+ },
200
+ ];
201
+ const GEN_AI_STREAM_STEP_ATTRIBUTES = [
202
+ ...GEN_AI_REQUEST_LIKE_ATTRIBUTES,
203
+ { name: "step.number", type: "number" },
204
+ {
205
+ name: "step.type",
206
+ allowedValues: ["reasoning", "text", "thinking", "tool_call"],
207
+ },
208
+ ];
209
+ /**
210
+ * Span patterns from tier2-traces.v0.4.0.json.
211
+ * Suffix wildcard only: "HTTP POST *" matches "HTTP POST /api/..." or "POST /api/...".
212
+ */
213
+ exports.TIER_2_TRACE_CONTRACT = [
214
+ {
215
+ name: "HTTP GET *",
216
+ allowedAttributes: [
217
+ "http.method",
218
+ { name: "http.route", maxCardinality: 150 },
219
+ "http.status_code",
220
+ "http.response_content_length",
221
+ { name: "http.flavor", allowedValues: ["1.0", "1.1", "2.0", "3.0"] },
222
+ ],
223
+ },
224
+ {
225
+ name: "HTTP POST *",
226
+ allowedAttributes: [
227
+ "http.method",
228
+ { name: "http.route", maxCardinality: 150 },
229
+ "http.status_code",
230
+ "http.response_content_length",
231
+ "http.request_content_length",
232
+ { name: "http.flavor", allowedValues: ["1.0", "1.1", "2.0", "3.0"] },
233
+ ],
234
+ },
235
+ {
236
+ name: "HTTP PUT *",
237
+ allowedAttributes: [
238
+ "http.method",
239
+ { name: "http.route", maxCardinality: 150 },
240
+ "http.status_code",
241
+ "http.response_content_length",
242
+ "http.request_content_length",
243
+ ],
244
+ },
245
+ {
246
+ name: "HTTP DELETE *",
247
+ allowedAttributes: [
248
+ "http.method",
249
+ { name: "http.route", maxCardinality: 150 },
250
+ "http.status_code",
251
+ "http.response_content_length",
252
+ ],
253
+ },
254
+ {
255
+ name: "HTTP PATCH *",
256
+ allowedAttributes: [
257
+ "http.method",
258
+ { name: "http.route", maxCardinality: 150 },
259
+ "http.status_code",
260
+ "http.response_content_length",
261
+ "http.request_content_length",
262
+ ],
263
+ },
264
+ {
265
+ name: "request handler *",
266
+ allowedAttributes: [
267
+ "http.method",
268
+ { name: "http.route", maxCardinality: 150 },
269
+ "http.status_code",
270
+ "http.response_content_length",
271
+ "http.request_content_length",
272
+ { name: "http.flavor", allowedValues: ["1.0", "1.1", "2.0", "3.0"] },
273
+ "express.route",
274
+ ],
275
+ },
276
+ {
277
+ name: "WS SERVER *",
278
+ allowedAttributes: [
279
+ { name: "messaging.system", allowedValues: ["ws", "websocket"] },
280
+ { name: "messaging.destination_kind", allowedValues: ["websocket"] },
281
+ { name: "ws.handler", maxCardinality: 80 },
282
+ ],
283
+ },
284
+ {
285
+ name: "WS CLIENT *",
286
+ allowedAttributes: [
287
+ { name: "messaging.system", allowedValues: ["ws", "websocket"] },
288
+ ],
289
+ },
290
+ {
291
+ name: "WS HANDLER *",
292
+ allowedAttributes: [
293
+ { name: "messaging.system", allowedValues: ["ws", "websocket"] },
294
+ { name: "messaging.destination_kind", allowedValues: ["websocket"] },
295
+ ],
296
+ },
297
+ {
298
+ name: "api.execute",
299
+ alwaysSample: true,
300
+ allowedAttributes: [
301
+ { name: "view-mode", allowedValues: ["edit", "deployed", "preview"] },
302
+ {
303
+ name: "api.status",
304
+ allowedValues: ["success", "error", "timeout", "cancelled"],
305
+ },
306
+ { name: "api.type", allowedValues: ["api", "workflow", "scheduled_job"] },
307
+ { name: "api.step_count", type: "number" },
308
+ { name: "api.duration_ms", type: "number" },
309
+ { name: "remote", allowedValues: ["true", "false"] },
310
+ "otel.status_code",
311
+ "otel.status_description",
312
+ ],
313
+ },
314
+ {
315
+ name: "api.step",
316
+ allowedAttributes: [
317
+ { name: "step.type", maxCardinality: 50 },
318
+ { name: "step.status", allowedValues: ["success", "error"] },
319
+ { name: "step.duration_ms", type: "number" },
320
+ { name: "step.retry_count", type: "number" },
321
+ "otel.status_code",
322
+ ],
323
+ },
324
+ {
325
+ name: "api.block.*",
326
+ allowedAttributes: [
327
+ { name: "block.type", maxCardinality: 30 },
328
+ { name: "block.status", allowedValues: ["success", "error"] },
329
+ ],
330
+ },
331
+ {
332
+ name: "plugin.*",
333
+ allowedAttributes: [
334
+ { name: "plugin.name", maxCardinality: 80 },
335
+ {
336
+ name: "plugin.event",
337
+ allowedValues: ["execute", "test", "metadata", "pre_delete"],
338
+ },
339
+ { name: "plugin.result", allowedValues: ["succeeded", "failed"] },
340
+ { name: "plugin.duration_ms", type: "number" },
341
+ "otel.status_code",
342
+ ],
343
+ },
344
+ {
345
+ name: "db.*",
346
+ allowedAttributes: [
347
+ {
348
+ name: "db.system",
349
+ allowedValues: [
350
+ "postgresql",
351
+ "mysql",
352
+ "mssql",
353
+ "mongodb",
354
+ "redis",
355
+ "snowflake",
356
+ "bigquery",
357
+ "databricks",
358
+ "dynamodb",
359
+ "sqlite",
360
+ ],
361
+ },
362
+ {
363
+ name: "db.operation",
364
+ allowedValues: ["select", "insert", "update", "delete", "other"],
365
+ },
366
+ { name: "db.name", maxCardinality: 50 },
367
+ "otel.status_code",
368
+ ],
369
+ },
370
+ {
371
+ name: "gen_ai.request",
372
+ description: "LLM API request (OTEL GenAI span name). Emitted by vite-plugin-file-sync LLMObsOtelExporter.",
373
+ allowedAttributes: GEN_AI_REQUEST_LIKE_ATTRIBUTES,
374
+ },
375
+ {
376
+ name: "gen_ai.stream",
377
+ description: "Streaming LLM session (OTEL GenAI span name). Emitted by LLMObsOtelExporter for ai.streamText.",
378
+ allowedAttributes: GEN_AI_REQUEST_LIKE_ATTRIBUTES,
379
+ },
380
+ {
381
+ name: "gen_ai.stream.step",
382
+ description: "Streaming LLM step (OTEL GenAI span name). Emitted by LLMObsOtelExporter for ai.streamText.step.",
383
+ allowedAttributes: GEN_AI_STREAM_STEP_ATTRIBUTES,
384
+ },
385
+ {
386
+ name: "gen_ai.tool_call",
387
+ description: "Tool/function call within GenAI workflow (OTEL GenAI span name). Emitted by LLMObsOtelExporter.",
388
+ allowedAttributes: GEN_AI_TOOL_CALL_ATTRIBUTES,
389
+ },
390
+ {
391
+ name: "llm.request",
392
+ description: "Legacy span name; prefer gen_ai.request.",
393
+ allowedAttributes: GEN_AI_REQUEST_LIKE_ATTRIBUTES,
394
+ },
395
+ {
396
+ name: "llm.tool_call",
397
+ description: "Legacy span name; prefer gen_ai.tool_call.",
398
+ allowedAttributes: GEN_AI_TOOL_CALL_ATTRIBUTES,
399
+ },
400
+ {
401
+ name: "ai.streamText",
402
+ description: "Legacy span name; prefer gen_ai.stream.",
403
+ allowedAttributes: [
404
+ "llm.model",
405
+ "llm.provider",
406
+ { name: "llm.step_count", type: "number" },
407
+ { name: "llm.total_tokens", type: "number" },
408
+ ],
409
+ },
410
+ {
411
+ name: "ai.streamText.step",
412
+ description: "Legacy span name; prefer gen_ai.stream.step.",
413
+ allowedAttributes: [
414
+ { name: "step.number", type: "number" },
415
+ {
416
+ name: "step.type",
417
+ allowedValues: ["reasoning", "text", "thinking", "tool_call"],
418
+ },
419
+ ],
420
+ },
421
+ {
422
+ name: "clark.session",
423
+ allowedAttributes: [
424
+ "session.duration_ms",
425
+ "session.step_count",
426
+ "session.llm_call_count",
427
+ "session.tool_call_count",
428
+ "session.total_tokens",
429
+ {
430
+ name: "session.outcome",
431
+ allowedValues: ["success", "error", "aborted"],
432
+ },
433
+ ],
434
+ },
435
+ {
436
+ name: "clark.debug_loop",
437
+ allowedAttributes: [
438
+ { name: "loop.iteration", type: "number" },
439
+ {
440
+ name: "loop.reason",
441
+ allowedValues: ["error_recovery", "validation_failure", "retry"],
442
+ },
443
+ { name: "loop.duration_ms", type: "number" },
444
+ ],
445
+ },
446
+ {
447
+ name: "grpc.*",
448
+ allowedAttributes: [
449
+ { name: "rpc.system", allowedValues: ["grpc"] },
450
+ { name: "rpc.service", maxCardinality: 50 },
451
+ { name: "rpc.method", maxCardinality: 100 },
452
+ { name: "rpc.grpc.status_code", type: "number" },
453
+ ],
454
+ },
455
+ {
456
+ name: "kafka.*",
457
+ allowedAttributes: [
458
+ { name: "messaging.system", allowedValues: ["kafka"] },
459
+ { name: "messaging.destination", maxCardinality: 50 },
460
+ {
461
+ name: "messaging.operation",
462
+ allowedValues: ["publish", "receive", "process"],
463
+ },
464
+ ],
465
+ },
466
+ {
467
+ name: "redis.*",
468
+ allowedAttributes: [
469
+ { name: "db.system", allowedValues: ["redis"] },
470
+ { name: "db.operation", maxCardinality: 30 },
471
+ ],
472
+ },
473
+ {
474
+ name: "fetch",
475
+ allowedAttributes: [
476
+ "http.method",
477
+ "http.status_code",
478
+ { name: "http.host", maxCardinality: 200 },
479
+ ],
480
+ },
481
+ {
482
+ name: "schedule.*",
483
+ allowedAttributes: [
484
+ {
485
+ name: "schedule.type",
486
+ allowedValues: ["cron", "interval", "one_time"],
487
+ },
488
+ {
489
+ name: "schedule.status",
490
+ allowedValues: ["success", "error", "skipped"],
491
+ },
492
+ ],
493
+ },
494
+ // SABS app-builder spans (v0.3.0) + bundle download span (v0.4.0)
495
+ {
496
+ name: "sabs.build",
497
+ allowedAttributes: [
498
+ { name: "build.id", maxCardinality: 10000 },
499
+ {
500
+ name: "build.outcome",
501
+ allowedValues: ["success", "failed"],
502
+ },
503
+ "otel.status_code",
504
+ "otel.status_description",
505
+ ],
506
+ },
507
+ {
508
+ name: "sabs.build.*",
509
+ allowedAttributes: [
510
+ { name: "build.id", maxCardinality: 10000 },
511
+ "otel.status_code",
512
+ "otel.status_description",
513
+ ],
514
+ },
515
+ // AGENT-2723: aggregate download span replacing ~511 per-file RPC spans
516
+ {
517
+ name: "sabs.bundle.download",
518
+ description: "Aggregate span for the full SABS bundle download. Replaces per-file spans; per-file metrics emitted as sabs.bundle.files_downloaded, sabs.bundle.bytes_downloaded, sabs.bundle.file_fetch_ms.",
519
+ allowedAttributes: [
520
+ { name: "files.count", type: "number" },
521
+ { name: "bytes.sum", type: "number" },
522
+ { name: "slowest.ms", type: "number" },
523
+ "otel.status_code",
524
+ "otel.status_description",
525
+ ],
526
+ },
527
+ ];
528
+ /**
529
+ * Cloud trace contract: match-all span name ("*") so no spans are dropped by name.
530
+ * Attribute allowlist is not used when attributeAllowlistPassthrough is true.
531
+ */
532
+ exports.CLOUD_TRACE_CONTRACT = [
533
+ { name: "*", allowedAttributes: [] },
534
+ ];
535
+ /**
536
+ * Returns the trace contract (span definitions) for the given deployment type.
537
+ * Cloud: match-all so no traces are dropped by span name.
538
+ * Cloud-prem: Tier 2 contract (named spans only).
539
+ */
540
+ function getTraceContract(deploymentType) {
541
+ switch (deploymentType) {
542
+ case shared_1.DeploymentTypeEnum.CLOUD:
543
+ return exports.CLOUD_TRACE_CONTRACT;
544
+ case shared_1.DeploymentTypeEnum.CLOUD_PREM:
545
+ default:
546
+ return exports.TIER_2_TRACE_CONTRACT;
547
+ }
548
+ }
549
+ // ---------------------------------------------------------------------------
550
+ // Forbidden / hashed / dropped attribute names (v0.6.0 JSON)
551
+ // ---------------------------------------------------------------------------
552
+ /** Forbidden in Tier 2 (forbiddenAttributes in contract). Collector strips these entirely. */
553
+ exports.FORBIDDEN_TIER_2_SPAN_ATTRIBUTES = [
554
+ "llmobs.input",
555
+ "llmobs.output",
556
+ "prompt",
557
+ "code",
558
+ "code.path",
559
+ "code.function.name",
560
+ "tool_input",
561
+ "tool_output",
562
+ "tool.input",
563
+ "tool.output",
564
+ "file_path",
565
+ "file_content",
566
+ "file.path",
567
+ "file.content",
568
+ "db.statement",
569
+ "db.query.text",
570
+ "db.query_text",
571
+ "http.request.body",
572
+ "http.response.body",
573
+ "url.full",
574
+ "url.query",
575
+ "http.url",
576
+ "http.target",
577
+ "user-email",
578
+ "user.email",
579
+ "user_email",
580
+ "enduser.email",
581
+ // v0.5.0 (AGENT-3255): opaque product-resource identifiers are NOT forbidden.
582
+ // application-id/_id, api-id/_id, resource-id/_id, integration-id/_id,
583
+ // commit-id/_id, profile-id/_id are randomly generated UUIDv4 handles for
584
+ // non-person resources (no embedded PII or customer content), so they pass
585
+ // through. The per-user identifier (user-id/user.id/user_id) is hashed instead
586
+ // of forbidden — see HASHED_TIER_2_SPAN_ATTRIBUTES below. Resource NAMES
587
+ // (api-name, resource-name) and widget-type stay forbidden as customer content.
588
+ "api-name",
589
+ "api_name",
590
+ "api.name",
591
+ "resource-name",
592
+ "resource_name",
593
+ "resource.name",
594
+ "widget-type",
595
+ "widget_type",
596
+ "widget.type",
597
+ "branch",
598
+ "error.stack",
599
+ "exception.stacktrace",
600
+ "auth_token",
601
+ "api_key",
602
+ "api-key",
603
+ "api.key",
604
+ "authorization",
605
+ "cookie",
606
+ "x-api-key",
607
+ // APPS-4190: npm registry tokens. Bucketing in sanitize-npm-attributes.ts
608
+ // is the primary defense; this list is the lint/runtime backstop so a
609
+ // future emitter that names an attribute after the token is stripped.
610
+ "npm.token",
611
+ "npm_token",
612
+ "npm-token",
613
+ "npm.registry.token",
614
+ "npm.registry_token",
615
+ "registry_token",
616
+ "registry-token",
617
+ "registry.token",
618
+ ];
619
+ /**
620
+ * Hashed (keyed HMAC) for Tier 2 (hashedAttributes in contract).
621
+ * v0.5.0 (AGENT-3255): per-user / per-session identifiers single out a natural
622
+ * person (pseudonymous personal data even as a UUID), so pseudonymize rather than
623
+ * forbid. This is the full contract hashedAttributes set: enduser.id, session.id,
624
+ * and the user-id variants. organization-id is intentionally NOT hashed (single
625
+ * customer org per cloud-prem deployment → pass-through).
626
+ * NOTE: with no hashConfig, TraceSanitizer.hashValue() emits "[redacted]", so
627
+ * these fail closed and never flow raw until an HMAC key is provisioned.
628
+ */
629
+ exports.HASHED_TIER_2_SPAN_ATTRIBUTES = [
630
+ "enduser-id",
631
+ "enduser.id",
632
+ "enduser_id",
633
+ "session-id",
634
+ "session.id",
635
+ "session_id",
636
+ "user-id",
637
+ "user.id",
638
+ "user_id",
639
+ ];
640
+ /**
641
+ * Dropped — high cardinality, no hash value (droppedAttributes in contract).
642
+ * The contract's dropped set also lists correlation/request/trace/execution ids,
643
+ * but those are dropped at the collector (and pass through at the SDK in
644
+ * pass-through mode); the SDK only hard-drops binding keys. v0.6.0 adds the
645
+ * dotted/kebab spellings of binding_keys for casing parity.
646
+ */
647
+ exports.DROPPED_HIGH_CARDINALITY_ATTRIBUTES = [
648
+ "binding-keys",
649
+ "binding.keys",
650
+ "binding_keys",
651
+ ];
652
+ // ---------------------------------------------------------------------------
653
+ // Set views (for lint, guardrails: fast .has() lookup)
654
+ // ---------------------------------------------------------------------------
655
+ exports.TIER2_FORBIDDEN_ATTRIBUTES = new Set(exports.FORBIDDEN_TIER_2_SPAN_ATTRIBUTES);
656
+ exports.TIER2_HASHED_ATTRIBUTES = new Set(exports.HASHED_TIER_2_SPAN_ATTRIBUTES);
657
+ exports.TIER2_DROPPED_ATTRIBUTES = new Set(exports.DROPPED_HIGH_CARDINALITY_ATTRIBUTES);
658
+ // ---------------------------------------------------------------------------
659
+ // Per-deployment attribute sets (for trace-sanitizer)
660
+ // ---------------------------------------------------------------------------
661
+ /** Empty set used for cloud (relaxed policy: no drop, no hash, no forbidden). */
662
+ const EMPTY_ATTRIBUTE_SET = new Set();
663
+ /**
664
+ * Returns the Tier 2 trace attribute sets and contract options for the given deployment type.
665
+ * Cloud: relaxed policy (no attributes dropped/hashed), match-all span names, pass-through attributes.
666
+ * Cloud-prem: full Tier 2 contract (forbidden/dropped/hashed), named spans only, allowlist enforced.
667
+ */
668
+ function getTraceSanitizerAttributeSets(deploymentType) {
669
+ const spanDefinitions = getTraceContract(deploymentType);
670
+ switch (deploymentType) {
671
+ case shared_1.DeploymentTypeEnum.CLOUD:
672
+ return {
673
+ forbiddenAttributes: EMPTY_ATTRIBUTE_SET,
674
+ droppedAttributes: EMPTY_ATTRIBUTE_SET,
675
+ hashedAttributes: EMPTY_ATTRIBUTE_SET,
676
+ spanDefinitions,
677
+ attributeAllowlistPassthrough: true,
678
+ };
679
+ case shared_1.DeploymentTypeEnum.CLOUD_PREM:
680
+ default:
681
+ return {
682
+ forbiddenAttributes: exports.TIER2_FORBIDDEN_ATTRIBUTES,
683
+ droppedAttributes: exports.TIER2_DROPPED_ATTRIBUTES,
684
+ hashedAttributes: exports.TIER2_HASHED_ATTRIBUTES,
685
+ spanDefinitions,
686
+ // Enforce per-span allowlists for cloud-prem: attributes not explicitly
687
+ // listed in the span definition's allowedAttributes are dropped before
688
+ // forwarding to Superblocks' internal Datadog.
689
+ attributeAllowlistPassthrough: false,
690
+ };
691
+ }
692
+ }
693
+ // ---------------------------------------------------------------------------
694
+ // Always-sample and value patterns (v0.3.0 samplingPolicy + lint-time)
695
+ // ---------------------------------------------------------------------------
696
+ /** Spans that should ALWAYS be sampled (samplingPolicy.alwaysSampleSpans in contract). */
697
+ exports.ALWAYS_SAMPLE_SPANS = new Set(["api.execute"]);
698
+ /**
699
+ * Patterns that indicate forbidden content in attribute values (e.g. secrets in strings).
700
+ * No ^/$ anchors so they match secrets embedded anywhere.
701
+ * It's not used by TraceSanitizer, only in guardrails.
702
+ */
703
+ exports.FORBIDDEN_VALUE_PATTERNS = [
704
+ /eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]+/,
705
+ /\b(sk|pk)-[a-zA-Z0-9]{32,}\b/,
706
+ /Bearer\s+[A-Za-z0-9._-]{20,}/,
707
+ /-----BEGIN\s+(RSA\s+)?(PRIVATE|PUBLIC)\s+KEY-----/,
708
+ /\bAKIA[A-Z0-9]{16}\b/,
709
+ /\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/,
710
+ // npm registry tokens (`npm_<36+ alphanumerics>`). The npm-name spec allows
711
+ // underscores, so without this pattern a token shaped like `npm_AAAA...`
712
+ // would slip through `sanitizeNpmPackageName` as a "valid" package name.
713
+ /\bnpm_[A-Za-z0-9]{36,}\b/,
714
+ /\b(api[_-]?key|apikey|secret[_-]?key|access[_-]?token)[=:]\s*[A-Za-z0-9_-]{20,}\b/i,
715
+ ];
716
+ // ---------------------------------------------------------------------------
717
+ // Helpers (for lint, guardrails)
718
+ // ---------------------------------------------------------------------------
719
+ function isForbiddenAttribute(name) {
720
+ return exports.TIER2_FORBIDDEN_ATTRIBUTES.has(name);
721
+ }
722
+ function isHashedAttribute(name) {
723
+ return exports.TIER2_HASHED_ATTRIBUTES.has(name);
724
+ }
725
+ function isDroppedAttribute(name) {
726
+ return exports.TIER2_DROPPED_ATTRIBUTES.has(name);
727
+ }
728
+ function containsForbiddenPattern(value) {
729
+ if (typeof value !== "string")
730
+ return false;
731
+ return exports.FORBIDDEN_VALUE_PATTERNS.some((pattern) => pattern.test(value));
732
+ }
733
+ function shouldAlwaysSample(spanName) {
734
+ return exports.ALWAYS_SAMPLE_SPANS.has(spanName);
735
+ }
736
+ //# sourceMappingURL=tier2-traces.js.map