@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,91 @@
1
+ "use strict";
2
+ /**
3
+ * NPM Registry Spans (APPS-4378)
4
+ *
5
+ * OTel-native `startActiveSpan` helpers for the four named npm-registry spans.
6
+ * Using the global tracer (`trace.getTracer`) means LLMObs interop is
7
+ * automatic: a span started inside an `@llmobs.decorate`'d context becomes a
8
+ * child of that task span (shared global tracer provider); outside any LLMObs
9
+ * context (server verify, CLI bootstrap) it is a root span.
10
+ *
11
+ * `org_id` rides on spans (per-trace context), never on a metric label. Raw
12
+ * registry hostnames are bucketed via {@link bucketNpmRegistryHost} before
13
+ * they reach a span attribute, matching the metric path — the one exception
14
+ * is the structured-log path, which keeps the raw host (see
15
+ * {@link auditNpmRegistryHost} in ./sanitize).
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.NPM_REGISTRY_SPAN_ATTR = exports.NPM_REGISTRY_SPAN = void 0;
19
+ exports.withNpmRegistrySpan = withNpmRegistrySpan;
20
+ exports.npmPackageUnpackedSizeBytes = npmPackageUnpackedSizeBytes;
21
+ const api_1 = require("@opentelemetry/api");
22
+ /** Instrumentation scope for every npm-registry span. */
23
+ const TRACER_NAME = "superblocks.npm-registry";
24
+ /** The four named spans (APPS-4378). */
25
+ exports.NPM_REGISTRY_SPAN = {
26
+ VERIFY: "npm_registry.verify",
27
+ LOOKUP_PACKAGE: "npm_registry.lookup_package",
28
+ PREPARE_FOR_PRIVATE_REGISTRY: "npm_registry.prepare_for_private_registry",
29
+ SYNC_HOME_NPMRC: "npm_registry.sync_home_npmrc",
30
+ };
31
+ /**
32
+ * Canonical span-attribute keys, shared across the four spans so the
33
+ * dimension names never drift between call sites.
34
+ */
35
+ exports.NPM_REGISTRY_SPAN_ATTR = {
36
+ ORG_ID: "org_id",
37
+ /** Bucketed (`public_npm | private | unknown`) — never the raw host. */
38
+ REGISTRY_HOST: "registry_host",
39
+ OUTCOME: "outcome",
40
+ DURATION_MS: "duration_ms",
41
+ /** Richer `NpmRegistryFetchResult.source` for drill-down. */
42
+ SOURCE: "source",
43
+ REGISTRY_CONFIGURED: "registry_configured",
44
+ /** Tri-valued: `true | false | "unknown"`. */
45
+ ALLOW_INSTALL_SCRIPTS: "allow_install_scripts",
46
+ PACKAGE_NAME_BUCKET: "package_name_bucket",
47
+ /** Span-attribute ONLY — raw byte counts are unbounded, never a metric label. */
48
+ PACKAGE_UNPACKED_SIZE_BYTES: "package_unpacked_size_bytes",
49
+ };
50
+ /**
51
+ * Start an active npm-registry span over the global tracer, run `fn`, and
52
+ * end the span in `finally`. On throw, the error is recorded
53
+ * (`span.recordException`) and the span status set to ERROR before the throw
54
+ * propagates. `fn` receives the span so it can attach final attributes
55
+ * (outcome / duration) once the operation resolves.
56
+ */
57
+ async function withNpmRegistrySpan(spanName, initialAttributes, fn) {
58
+ const tracer = api_1.trace.getTracer(TRACER_NAME);
59
+ return tracer.startActiveSpan(spanName, async (span) => {
60
+ if (Object.keys(initialAttributes).length > 0) {
61
+ span.setAttributes(initialAttributes);
62
+ }
63
+ try {
64
+ return await fn(span);
65
+ }
66
+ catch (err) {
67
+ // `recordException` accepts Error | string; narrow rather than cast.
68
+ span.recordException(err instanceof Error ? err : String(err));
69
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR });
70
+ throw err;
71
+ }
72
+ finally {
73
+ span.end();
74
+ }
75
+ });
76
+ }
77
+ /**
78
+ * Coerce a registry-reported `dist.unpackedSize` to a span-safe value: a
79
+ * finite, non-negative number, else `undefined`. A hostile or buggy registry
80
+ * cannot smuggle a non-numeric byte count onto the span through this guard.
81
+ *
82
+ * Callers MUST omit the attribute when this returns `undefined` rather than
83
+ * calling `setAttribute(key, undefined)` (some OTel exporters mishandle
84
+ * undefined values). The lookup call site guards with `if (size !== undefined)`.
85
+ */
86
+ function npmPackageUnpackedSizeBytes(raw) {
87
+ return typeof raw === "number" && Number.isFinite(raw) && raw >= 0
88
+ ? raw
89
+ : undefined;
90
+ }
91
+ //# sourceMappingURL=spans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.js","sourceRoot":"","sources":["../../src/npm-registry/spans.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AA+CH,kDAqBC;AAWD,kEAIC;AAjFD,4CAK4B;AAE5B,yDAAyD;AACzD,MAAM,WAAW,GAAG,0BAA0B,CAAC;AAE/C,wCAAwC;AAC3B,QAAA,iBAAiB,GAAG;IAC/B,MAAM,EAAE,qBAAqB;IAC7B,cAAc,EAAE,6BAA6B;IAC7C,4BAA4B,EAAE,2CAA2C;IACzE,eAAe,EAAE,8BAA8B;CACvC,CAAC;AAEX;;;GAGG;AACU,QAAA,sBAAsB,GAAG;IACpC,MAAM,EAAE,QAAQ;IAChB,wEAAwE;IACxE,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,6DAA6D;IAC7D,MAAM,EAAE,QAAQ;IAChB,mBAAmB,EAAE,qBAAqB;IAC1C,8CAA8C;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,iFAAiF;IACjF,2BAA2B,EAAE,6BAA6B;CAClD,CAAC;AAEX;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,iBAA6B,EAC7B,EAA8B;IAE9B,MAAM,MAAM,GAAG,WAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACrD,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,IAAI,CAAC,eAAe,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,2BAA2B,CAAC,GAAY;IACtD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChE,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * In-Memory Exporters for Testing
3
+ *
4
+ * These exporters capture telemetry data in memory for assertion in tests.
5
+ * No external connections are made.
6
+ */
7
+ import { ExportResult } from "@opentelemetry/core";
8
+ import type { SpanExporter, ReadableSpan } from "@opentelemetry/sdk-trace-base";
9
+ /**
10
+ * In-memory span exporter for testing.
11
+ * Captures all exported spans for assertion.
12
+ */
13
+ export declare class InMemorySpanExporter implements SpanExporter {
14
+ private spans;
15
+ private stopped;
16
+ /**
17
+ * Export spans to in-memory storage.
18
+ */
19
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
20
+ /**
21
+ * Shutdown the exporter.
22
+ */
23
+ shutdown(): Promise<void>;
24
+ /**
25
+ * Force flush (no-op for in-memory).
26
+ */
27
+ forceFlush(): Promise<void>;
28
+ /**
29
+ * Get all captured spans.
30
+ */
31
+ getSpans(): ReadableSpan[];
32
+ /**
33
+ * Get the number of captured spans.
34
+ */
35
+ getSpanCount(): number;
36
+ /**
37
+ * Clear captured spans.
38
+ */
39
+ reset(): void;
40
+ /**
41
+ * Find spans by name.
42
+ *
43
+ * @param name - Span name to search for
44
+ * @returns Matching spans
45
+ */
46
+ findSpansByName(name: string): ReadableSpan[];
47
+ /**
48
+ * Find spans by name pattern (regex).
49
+ *
50
+ * @param pattern - Regex pattern to match span names
51
+ * @returns Matching spans
52
+ */
53
+ findSpansByPattern(pattern: RegExp): ReadableSpan[];
54
+ /**
55
+ * Find spans with a specific attribute value.
56
+ *
57
+ * @param key - Attribute key
58
+ * @param value - Attribute value (or regex for pattern matching)
59
+ * @returns Matching spans
60
+ */
61
+ findSpansByAttribute(key: string, value: string | RegExp): ReadableSpan[];
62
+ /**
63
+ * Assert no spans have a specific attribute value.
64
+ * Useful for ensuring Tier 1 data doesn't leak.
65
+ *
66
+ * @param key - Attribute key
67
+ * @param value - Forbidden attribute value (or regex pattern)
68
+ * @throws Error if forbidden attribute is found
69
+ */
70
+ assertNoAttribute(key: string, value: string | RegExp): void;
71
+ /**
72
+ * Assert all spans have a required attribute.
73
+ *
74
+ * @param key - Attribute key
75
+ * @throws Error if any span is missing the attribute
76
+ */
77
+ assertAllHaveAttribute(key: string): void;
78
+ /**
79
+ * Get span names for debugging.
80
+ */
81
+ getSpanNames(): string[];
82
+ }
83
+ /**
84
+ * Metric data point captured by in-memory exporter.
85
+ */
86
+ export interface CapturedMetric {
87
+ name: string;
88
+ description?: string;
89
+ unit?: string;
90
+ type: "counter" | "gauge" | "histogram" | "observable";
91
+ dataPoints: Array<{
92
+ value: number;
93
+ attributes: Record<string, unknown>;
94
+ timestamp: number;
95
+ }>;
96
+ }
97
+ /**
98
+ * In-memory metric exporter for testing.
99
+ */
100
+ export declare class InMemoryMetricExporter {
101
+ private metrics;
102
+ /**
103
+ * Export metrics to in-memory storage.
104
+ */
105
+ export(metrics: CapturedMetric[]): void;
106
+ /**
107
+ * Get all captured metrics.
108
+ */
109
+ getMetrics(): CapturedMetric[];
110
+ /**
111
+ * Find metrics by name.
112
+ *
113
+ * @param name - Metric name
114
+ * @returns Matching metrics
115
+ */
116
+ findMetricsByName(name: string): CapturedMetric[];
117
+ /**
118
+ * Clear captured metrics.
119
+ */
120
+ reset(): void;
121
+ /**
122
+ * Assert no metrics have a specific label value.
123
+ *
124
+ * @param labelKey - Label key
125
+ * @param value - Forbidden value
126
+ * @throws Error if forbidden label is found
127
+ */
128
+ assertNoLabel(labelKey: string, value: string | RegExp): void;
129
+ }
130
+ /**
131
+ * Log record captured by in-memory exporter.
132
+ */
133
+ export interface CapturedLogRecord {
134
+ timestamp: number;
135
+ severityNumber: number;
136
+ severityText?: string;
137
+ body?: unknown;
138
+ attributes: Record<string, unknown>;
139
+ }
140
+ /**
141
+ * In-memory log exporter for testing.
142
+ */
143
+ export declare class InMemoryLogExporter {
144
+ private logs;
145
+ /**
146
+ * Export logs to in-memory storage.
147
+ */
148
+ export(logs: CapturedLogRecord[]): void;
149
+ /**
150
+ * Get all captured logs.
151
+ */
152
+ getLogs(): CapturedLogRecord[];
153
+ /**
154
+ * Find logs by severity.
155
+ *
156
+ * @param severityNumber - Severity level (e.g., 9 for INFO, 13 for WARN, 17 for ERROR)
157
+ * @returns Matching logs
158
+ */
159
+ findLogsBySeverity(severityNumber: number): CapturedLogRecord[];
160
+ /**
161
+ * Find logs containing text.
162
+ *
163
+ * @param text - Text to search for in log body
164
+ * @returns Matching logs
165
+ */
166
+ findLogsContaining(text: string | RegExp): CapturedLogRecord[];
167
+ /**
168
+ * Clear captured logs.
169
+ */
170
+ reset(): void;
171
+ /**
172
+ * Assert no logs contain sensitive data.
173
+ *
174
+ * @param pattern - Pattern to check for (forbidden content)
175
+ * @throws Error if forbidden content is found
176
+ */
177
+ assertNoLogContains(pattern: RegExp): void;
178
+ }
179
+ //# sourceMappingURL=in-memory-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-exporter.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ /**
3
+ * In-Memory Exporters for Testing
4
+ *
5
+ * These exporters capture telemetry data in memory for assertion in tests.
6
+ * No external connections are made.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.InMemoryLogExporter = exports.InMemoryMetricExporter = exports.InMemorySpanExporter = void 0;
10
+ const core_1 = require("@opentelemetry/core");
11
+ /**
12
+ * In-memory span exporter for testing.
13
+ * Captures all exported spans for assertion.
14
+ */
15
+ class InMemorySpanExporter {
16
+ spans = [];
17
+ stopped = false;
18
+ /**
19
+ * Export spans to in-memory storage.
20
+ */
21
+ export(spans, resultCallback) {
22
+ if (this.stopped) {
23
+ resultCallback({ code: core_1.ExportResultCode.FAILED });
24
+ return;
25
+ }
26
+ this.spans.push(...spans);
27
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
28
+ }
29
+ /**
30
+ * Shutdown the exporter.
31
+ */
32
+ shutdown() {
33
+ this.stopped = true;
34
+ return Promise.resolve();
35
+ }
36
+ /**
37
+ * Force flush (no-op for in-memory).
38
+ */
39
+ forceFlush() {
40
+ return Promise.resolve();
41
+ }
42
+ /**
43
+ * Get all captured spans.
44
+ */
45
+ getSpans() {
46
+ return [...this.spans];
47
+ }
48
+ /**
49
+ * Get the number of captured spans.
50
+ */
51
+ getSpanCount() {
52
+ return this.spans.length;
53
+ }
54
+ /**
55
+ * Clear captured spans.
56
+ */
57
+ reset() {
58
+ this.spans = [];
59
+ }
60
+ /**
61
+ * Find spans by name.
62
+ *
63
+ * @param name - Span name to search for
64
+ * @returns Matching spans
65
+ */
66
+ findSpansByName(name) {
67
+ return this.spans.filter((s) => s.name === name);
68
+ }
69
+ /**
70
+ * Find spans by name pattern (regex).
71
+ *
72
+ * @param pattern - Regex pattern to match span names
73
+ * @returns Matching spans
74
+ */
75
+ findSpansByPattern(pattern) {
76
+ return this.spans.filter((s) => pattern.test(s.name));
77
+ }
78
+ /**
79
+ * Find spans with a specific attribute value.
80
+ *
81
+ * @param key - Attribute key
82
+ * @param value - Attribute value (or regex for pattern matching)
83
+ * @returns Matching spans
84
+ */
85
+ findSpansByAttribute(key, value) {
86
+ return this.spans.filter((s) => {
87
+ const attr = s.attributes[key];
88
+ if (attr === undefined)
89
+ return false;
90
+ if (value instanceof RegExp) {
91
+ return value.test(String(attr));
92
+ }
93
+ return attr === value;
94
+ });
95
+ }
96
+ /**
97
+ * Assert no spans have a specific attribute value.
98
+ * Useful for ensuring Tier 1 data doesn't leak.
99
+ *
100
+ * @param key - Attribute key
101
+ * @param value - Forbidden attribute value (or regex pattern)
102
+ * @throws Error if forbidden attribute is found
103
+ */
104
+ assertNoAttribute(key, value) {
105
+ for (const span of this.spans) {
106
+ const attr = span.attributes[key];
107
+ if (attr === undefined)
108
+ continue;
109
+ const matches = value instanceof RegExp ? value.test(String(attr)) : attr === value;
110
+ if (matches) {
111
+ throw new Error(`Found forbidden attribute ${key}=${String(attr)} on span "${span.name}"`);
112
+ }
113
+ }
114
+ }
115
+ /**
116
+ * Assert all spans have a required attribute.
117
+ *
118
+ * @param key - Attribute key
119
+ * @throws Error if any span is missing the attribute
120
+ */
121
+ assertAllHaveAttribute(key) {
122
+ for (const span of this.spans) {
123
+ if (span.attributes[key] === undefined) {
124
+ throw new Error(`Span "${span.name}" is missing required attribute "${key}"`);
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Get span names for debugging.
130
+ */
131
+ getSpanNames() {
132
+ return this.spans.map((s) => s.name);
133
+ }
134
+ }
135
+ exports.InMemorySpanExporter = InMemorySpanExporter;
136
+ /**
137
+ * In-memory metric exporter for testing.
138
+ */
139
+ class InMemoryMetricExporter {
140
+ metrics = [];
141
+ /**
142
+ * Export metrics to in-memory storage.
143
+ */
144
+ export(metrics) {
145
+ this.metrics.push(...metrics);
146
+ }
147
+ /**
148
+ * Get all captured metrics.
149
+ */
150
+ getMetrics() {
151
+ return [...this.metrics];
152
+ }
153
+ /**
154
+ * Find metrics by name.
155
+ *
156
+ * @param name - Metric name
157
+ * @returns Matching metrics
158
+ */
159
+ findMetricsByName(name) {
160
+ return this.metrics.filter((m) => m.name === name);
161
+ }
162
+ /**
163
+ * Clear captured metrics.
164
+ */
165
+ reset() {
166
+ this.metrics = [];
167
+ }
168
+ /**
169
+ * Assert no metrics have a specific label value.
170
+ *
171
+ * @param labelKey - Label key
172
+ * @param value - Forbidden value
173
+ * @throws Error if forbidden label is found
174
+ */
175
+ assertNoLabel(labelKey, value) {
176
+ for (const metric of this.metrics) {
177
+ for (const dp of metric.dataPoints) {
178
+ const label = dp.attributes[labelKey];
179
+ if (label === undefined)
180
+ continue;
181
+ const matches = value instanceof RegExp ? value.test(String(label)) : label === value;
182
+ if (matches) {
183
+ throw new Error(`Found forbidden label ${labelKey}=${String(label)} on metric "${metric.name}"`);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ exports.InMemoryMetricExporter = InMemoryMetricExporter;
190
+ /**
191
+ * In-memory log exporter for testing.
192
+ */
193
+ class InMemoryLogExporter {
194
+ logs = [];
195
+ /**
196
+ * Export logs to in-memory storage.
197
+ */
198
+ export(logs) {
199
+ this.logs.push(...logs);
200
+ }
201
+ /**
202
+ * Get all captured logs.
203
+ */
204
+ getLogs() {
205
+ return [...this.logs];
206
+ }
207
+ /**
208
+ * Find logs by severity.
209
+ *
210
+ * @param severityNumber - Severity level (e.g., 9 for INFO, 13 for WARN, 17 for ERROR)
211
+ * @returns Matching logs
212
+ */
213
+ findLogsBySeverity(severityNumber) {
214
+ return this.logs.filter((l) => l.severityNumber === severityNumber);
215
+ }
216
+ /**
217
+ * Find logs containing text.
218
+ *
219
+ * @param text - Text to search for in log body
220
+ * @returns Matching logs
221
+ */
222
+ findLogsContaining(text) {
223
+ return this.logs.filter((l) => {
224
+ if (l.body === undefined)
225
+ return false;
226
+ const bodyStr = String(l.body);
227
+ return text instanceof RegExp
228
+ ? text.test(bodyStr)
229
+ : bodyStr.includes(text);
230
+ });
231
+ }
232
+ /**
233
+ * Clear captured logs.
234
+ */
235
+ reset() {
236
+ this.logs = [];
237
+ }
238
+ /**
239
+ * Assert no logs contain sensitive data.
240
+ *
241
+ * @param pattern - Pattern to check for (forbidden content)
242
+ * @throws Error if forbidden content is found
243
+ */
244
+ assertNoLogContains(pattern) {
245
+ for (const log of this.logs) {
246
+ if (log.body === undefined)
247
+ continue;
248
+ const bodyStr = String(log.body);
249
+ if (pattern.test(bodyStr)) {
250
+ throw new Error(`Found forbidden content in log: ${bodyStr.slice(0, 100)}...`);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ exports.InMemoryLogExporter = InMemoryLogExporter;
256
+ //# sourceMappingURL=in-memory-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-exporter.js","sourceRoot":"","sources":["../../src/testing/in-memory-exporter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,8CAAqE;AAGrE;;;GAGG;AACH,MAAa,oBAAoB;IACvB,KAAK,GAAmB,EAAE,CAAC;IAC3B,OAAO,GAAG,KAAK,CAAC;IAExB;;OAEG;IACH,MAAM,CACJ,KAAqB,EACrB,cAA8C;QAE9C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;OAMG;IACH,oBAAoB,CAAC,GAAW,EAAE,KAAsB;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACrC,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,KAAK,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,GAAW,EAAE,KAAsB;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YAEjC,MAAM,OAAO,GACX,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;YAEtE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,6BAA6B,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,GAAG,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,GAAW;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,CAAC,IAAI,oCAAoC,GAAG,GAAG,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AA3ID,oDA2IC;AAiBD;;GAEG;AACH,MAAa,sBAAsB;IACzB,OAAO,GAAqB,EAAE,CAAC;IAEvC;;OAEG;IACH,MAAM,CAAC,OAAyB;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,QAAgB,EAAE,KAAsB;QACpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAElC,MAAM,OAAO,GACX,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;gBAExE,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,GAAG,CAChF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA1DD,wDA0DC;AAaD;;GAEG;AACH,MAAa,mBAAmB;IACtB,IAAI,GAAwB,EAAE,CAAC;IAEvC;;OAEG;IACH,MAAM,CAAC,IAAyB;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,cAAsB;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,IAAqB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,IAAI,YAAY,MAAM;gBAC3B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBACpB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,OAAe;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,SAAS;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACb,mCAAmC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnED,kDAmEC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Testing Utilities
3
+ *
4
+ * In-memory exporters and test helpers for telemetry assertions.
5
+ */
6
+ export { InMemorySpanExporter, InMemoryMetricExporter, InMemoryLogExporter, type CapturedMetric, type CapturedLogRecord, } from "./in-memory-exporter.js";
7
+ export { initTestTelemetry, getTestTelemetryInstance, resetTestTelemetry, getTestTracer, withTestSpan, type TestTelemetryInstance, } from "./test-init.js";
8
+ export { captureMetrics, type CapturedPoint, type MetricsCapture, } from "./metrics-capture.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Testing Utilities
4
+ *
5
+ * In-memory exporters and test helpers for telemetry assertions.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.captureMetrics = exports.withTestSpan = exports.getTestTracer = exports.resetTestTelemetry = exports.getTestTelemetryInstance = exports.initTestTelemetry = exports.InMemoryLogExporter = exports.InMemoryMetricExporter = exports.InMemorySpanExporter = void 0;
9
+ var in_memory_exporter_js_1 = require("./in-memory-exporter.js");
10
+ Object.defineProperty(exports, "InMemorySpanExporter", { enumerable: true, get: function () { return in_memory_exporter_js_1.InMemorySpanExporter; } });
11
+ Object.defineProperty(exports, "InMemoryMetricExporter", { enumerable: true, get: function () { return in_memory_exporter_js_1.InMemoryMetricExporter; } });
12
+ Object.defineProperty(exports, "InMemoryLogExporter", { enumerable: true, get: function () { return in_memory_exporter_js_1.InMemoryLogExporter; } });
13
+ var test_init_js_1 = require("./test-init.js");
14
+ Object.defineProperty(exports, "initTestTelemetry", { enumerable: true, get: function () { return test_init_js_1.initTestTelemetry; } });
15
+ Object.defineProperty(exports, "getTestTelemetryInstance", { enumerable: true, get: function () { return test_init_js_1.getTestTelemetryInstance; } });
16
+ Object.defineProperty(exports, "resetTestTelemetry", { enumerable: true, get: function () { return test_init_js_1.resetTestTelemetry; } });
17
+ Object.defineProperty(exports, "getTestTracer", { enumerable: true, get: function () { return test_init_js_1.getTestTracer; } });
18
+ Object.defineProperty(exports, "withTestSpan", { enumerable: true, get: function () { return test_init_js_1.withTestSpan; } });
19
+ var metrics_capture_js_1 = require("./metrics-capture.js");
20
+ Object.defineProperty(exports, "captureMetrics", { enumerable: true, get: function () { return metrics_capture_js_1.captureMetrics; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iEAMiC;AAL/B,6HAAA,oBAAoB,OAAA;AACpB,+HAAA,sBAAsB,OAAA;AACtB,4HAAA,mBAAmB,OAAA;AAKrB,+CAOwB;AANtB,iHAAA,iBAAiB,OAAA;AACjB,wHAAA,wBAAwB,OAAA;AACxB,kHAAA,kBAAkB,OAAA;AAClB,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AAId,2DAI8B;AAH5B,oHAAA,cAAc,OAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * In-memory metric capture for tests.
3
+ *
4
+ * `initTestTelemetry` registers only a tracer provider, so instruments have
5
+ * nowhere to record and its `metricExporter` always reads back empty. This
6
+ * installs a real SDK MeterProvider as the global and flattens what it
7
+ * collects into (name, attributes, value) triples.
8
+ *
9
+ * Installing a provider also re-binds instruments written against the lazy
10
+ * pattern, so a module imported before the harness ran still records.
11
+ */
12
+ export interface CapturedPoint {
13
+ attributes: Record<string, unknown>;
14
+ /** Histogram data points only. */
15
+ count?: number;
16
+ /** Histogram data points only. */
17
+ sum?: number;
18
+ /** Counter and gauge data points only. */
19
+ value?: number;
20
+ }
21
+ export interface MetricsCapture {
22
+ /** Every data point recorded since the last read. */
23
+ collect: () => Promise<CapturedPoint[]>;
24
+ /** Data points for one metric name, recorded since the last read. */
25
+ pointsFor: (metricName: string) => Promise<CapturedPoint[]>;
26
+ shutdown: () => Promise<void>;
27
+ }
28
+ export declare function captureMetrics(): MetricsCapture;
29
+ //# sourceMappingURL=metrics-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-capture.d.ts","sourceRoot":"","sources":["../../src/testing/metrics-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,qEAAqE;IACrE,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5D,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,wBAAgB,cAAc,IAAI,cAAc,CA+D/C"}