@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,537 @@
1
+ "use strict";
2
+ /**
3
+ * NPM Registry Metrics Emitter (APPS-4378 / APPS-4189)
4
+ *
5
+ * One emitter for the whole npm-registry subsystem. It owns every
6
+ * `superblocks.npm.*` metric and centralizes the sanitize-at-emit-boundary
7
+ * discipline: no raw registry hostname, package name, or token can escape via
8
+ * a metric label because every dimension is coerced to a closed enum or a
9
+ * bounded bucket here, the moment before it reaches an OTel instrument.
10
+ *
11
+ * Wiring follows the rest of the npm subsystem: the meter is resolved lazily
12
+ * from the OTel global (`metrics.getMeter`) and instruments are cached and
13
+ * re-bound when the global MeterProvider changes (the typical case is a test
14
+ * installing its own provider for isolation). The emitter is therefore a
15
+ * zero-config process singleton (`npmRegistryEmitter`) — no DI plumbing
16
+ * through AiServiceConfig / NpmRegistryClientDeps.
17
+ *
18
+ * Metrics (all `superblocks.npm.*`, durations in seconds):
19
+ *
20
+ * - `config.lookup_total` counter {result}
21
+ * - `config.lookup_duration_seconds` histogram {result} buckets [0.05,0.25,1,3,10,30]
22
+ * - `config.policy_fallback_total` counter {branch} lastKnownPolicy supplied the policy
23
+ * - `sync_home_npmrc.outcome_total` counter {outcome} CLI boot home npmrc materialization
24
+ * - `sync_project_npmrc.outcome_total` counter {outcome} project-dir .npmrc reconcile (boot + install)
25
+ * - `install.outcome_total` counter {outcome, configured, registry_host, runner}
26
+ * - `install.duration_seconds`histogram {…same…} buckets [0.5,2,5,15,60,300]
27
+ * - `install.status` gauge {…same…} last-seen 1=success/0=else
28
+ * - `probe.outcome_total` counter {outcome, registry_host}
29
+ * - `probe.duration_seconds` histogram {…same…} buckets [0.1,0.5,1,3,10,30]
30
+ * - `lookup.calls_total` counter {outcome, registry_host}
31
+ * - `lookup.duration_seconds` histogram {…same…} buckets [0.05,0.25,1,3,10,30]
32
+ * - `killswitch.enabled` gauge {} 1 when the feature is suppressed
33
+ *
34
+ * Cardinality budget (documented contract — must not regress without a
35
+ * migration plan; every dashboard / Datadog facet pins on these):
36
+ *
37
+ * - registry_host ≤ 3 (`public_npm | private | unknown`)
38
+ * - install.outcome ≤ 7 (`NPM_INSTALL_OUTCOMES`)
39
+ * - probe.outcome ≤ 5 (`NPM_PROBE_OUTCOMES`)
40
+ * - lookup.outcome ≤ 3 (`NPM_LOOKUP_TOOL_OUTCOMES`)
41
+ * - config.result ≤ 5 (`NPM_CONFIG_LOOKUP_RESULTS`)
42
+ * - config.force_refresh ≤ 2 (boolean)
43
+ * - config.policy_fallback.branch ≤ 2 (`NPM_POLICY_FALLBACK_BRANCHES`)
44
+ * - sync_home_npmrc.outcome ≤ 5 (`NPM_SYNC_HOME_NPMRC_OUTCOMES`)
45
+ * - sync_project_npmrc.outcome ≤ 5 (`NPM_SYNC_PROJECT_NPMRC_OUTCOMES`)
46
+ * - configured ≤ 2, runner ≤ 5 (`NPM_INSTALL_RUNNERS`)
47
+ *
48
+ * Worst-case distinct series across every instrument is ≈ 730: the three
49
+ * install instruments (status gauge + counter + histogram) dominate at
50
+ * outcome×configured×registry_host×runner = 7×2×3×5 = 210 each → 630, plus
51
+ * probe 5×3×2=30, config 5×2(force_refresh)×2(counter+histogram)=20, lookup
52
+ * 3×3×2=18, the policy-fallback counter 2, the sync-home-npmrc counter 5,
53
+ * the sync-project-npmrc counter 5, and the killswitch gauge 1. How it grew
54
+ * over time: the runner count went from 3 to 4 (`auto_upgrade`) then 5
55
+ * (`uninstall`), adding `config.force_refresh` grew config from 8 to 16,
56
+ * adding `stale` as its own config result grew it from 16 to 20, and the
57
+ * policy-fallback (2 series), sync-home-npmrc (5 series), and
58
+ * sync-project-npmrc (5 series) counters were added. Adding a label value
59
+ * must increase the count, not decrease it.
60
+ * Still well under the internal 150K flag and the Datadog billing boundary.
61
+ * Per-pod `host` is stripped at the collector for the `superblocks.npm.*`
62
+ * family so series are aggregated by `service.name`.
63
+ *
64
+ * Each path has its OWN closed outcome enum + `normalize*` coercer because the
65
+ * paths legitimately diverge (probe has `ok`/`invalid_response`, install has
66
+ * `tls_failed`/`lockfile_url_mismatch`, …). `auth_failed` is deliberately a
67
+ * first-class outcome on install/probe — an expected, fast-failing
68
+ * customer-config mode — kept separable from infra failures (`unreachable` /
69
+ * `tls_failed`) so a future alert can page on infra spikes while routing auth
70
+ * to a dashboard. These short names diverge from the long-form `NPM_OUTCOMES`
71
+ * in `./sanitize` (which stays as the audit-event surface): the install path
72
+ * normalizes the long `NpmInstallBlocked.reason` values to the short forms.
73
+ */
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.npmRegistryEmitter = exports.NpmRegistryEmitter = exports.NPM_LOOKUP_TOOL_OUTCOMES = exports.NPM_PROBE_OUTCOMES = exports.NPM_INSTALL_OUTCOMES = exports.NPM_SYNC_PROJECT_NPMRC_OUTCOMES = exports.NPM_SYNC_HOME_NPMRC_OUTCOMES = exports.NPM_POLICY_FALLBACK_BRANCHES = exports.NPM_CONFIG_LOOKUP_RESULTS = exports.NPM_INSTALL_RUNNERS = void 0;
76
+ exports.normalizeConfigLookupResult = normalizeConfigLookupResult;
77
+ exports.normalizeSyncHomeNpmrcOutcome = normalizeSyncHomeNpmrcOutcome;
78
+ exports.normalizeSyncProjectNpmrcOutcome = normalizeSyncProjectNpmrcOutcome;
79
+ exports.normalizeInstallOutcome = normalizeInstallOutcome;
80
+ exports.normalizeProbeOutcome = normalizeProbeOutcome;
81
+ exports.normalizeLookupToolOutcome = normalizeLookupToolOutcome;
82
+ exports.recordNpmInstall = recordNpmInstall;
83
+ exports._resetNpmRegistryEmitterForTesting = _resetNpmRegistryEmitterForTesting;
84
+ const api_1 = require("@opentelemetry/api");
85
+ const sanitize_js_1 = require("./sanitize.js");
86
+ /**
87
+ * Closed enum of npm install call sites that emit metrics. One value per call
88
+ * site Superblocks owns; renaming a value breaks every dashboard split on
89
+ * `runner`, so additions/removals need a migration plan.
90
+ *
91
+ * - `install_all` — full install from package.json (no specific
92
+ * packages). Covers both `AppShell.runNpmInstall`
93
+ * and `AppShell.runPackageManagerInstall`.
94
+ * - `install_specific` — `AppShell.installSpecificPackages` (`npm add`).
95
+ * - `prefetch` — `installTemplateModules` (template `node_modules`
96
+ * prefetch during AiService construction).
97
+ * - `auto_upgrade` — `upgradeCliWithPackageManager` in the CLI SDK
98
+ * (`automatic-upgrades.ts`). Owns the dev-server
99
+ * self-upgrade install; a perimeter block here
100
+ * crash-loops the live-edit pod, so the metric is
101
+ * the only signal that distinguishes that from a
102
+ * working upgrade. APPS-4544.
103
+ * - `uninstall` — `AppShell.uninstallPackages` (`npm uninstall` /
104
+ * `pnpm remove`). Same registry and script-policy
105
+ * wrappers as install; a distinct runner so
106
+ * dashboards can split remove from add.
107
+ */
108
+ exports.NPM_INSTALL_RUNNERS = [
109
+ "auto_upgrade",
110
+ "install_all",
111
+ "install_specific",
112
+ "prefetch",
113
+ "uninstall",
114
+ ];
115
+ const METER_NAME = "@superblocksteam/telemetry/npm-registry";
116
+ const METRIC_CONFIG_LOOKUP = "superblocks.npm.config.lookup_total";
117
+ const METRIC_CONFIG_DURATION = "superblocks.npm.config.lookup_duration_seconds";
118
+ const METRIC_POLICY_FALLBACK = "superblocks.npm.config.policy_fallback_total";
119
+ const METRIC_SYNC_HOME_NPMRC = "superblocks.npm.sync_home_npmrc.outcome_total";
120
+ const METRIC_SYNC_PROJECT_NPMRC = "superblocks.npm.sync_project_npmrc.outcome_total";
121
+ const METRIC_INSTALL_OUTCOME = "superblocks.npm.install.outcome_total";
122
+ const METRIC_INSTALL_DURATION = "superblocks.npm.install.duration_seconds";
123
+ const METRIC_INSTALL_STATUS = "superblocks.npm.install.status";
124
+ const METRIC_PROBE_OUTCOME = "superblocks.npm.probe.outcome_total";
125
+ const METRIC_PROBE_DURATION = "superblocks.npm.probe.duration_seconds";
126
+ const METRIC_LOOKUP_CALLS = "superblocks.npm.lookup.calls_total";
127
+ const METRIC_LOOKUP_DURATION = "superblocks.npm.lookup.duration_seconds";
128
+ const METRIC_KILLSWITCH = "superblocks.npm.killswitch.enabled";
129
+ /**
130
+ * Explicit histogram boundaries (seconds). Coarse on purpose: latency
131
+ * histograms here exist to detect regressions / alert on pathological cases,
132
+ * not for fine percentile work, so 6 finite buckets beat OTel's default 12.
133
+ * The SDK appends an implicit `(last, +∞)` overflow bucket, so values past the
134
+ * top boundary are still counted — the arrays stay finite (no `Infinity`).
135
+ */
136
+ const INSTALL_DURATION_BUCKETS = [0.5, 2, 5, 15, 60, 300];
137
+ const PROBE_DURATION_BUCKETS = [0.1, 0.5, 1, 3, 10, 30];
138
+ const LOOKUP_DURATION_BUCKETS = [0.05, 0.25, 1, 3, 10, 30];
139
+ // Config lookups span sub-ms cache hits to multi-second cold fetches (network
140
+ // round-trip + possible JWT-refresh retry), so reuse the lookup-tool scale.
141
+ const CONFIG_DURATION_BUCKETS = [0.05, 0.25, 1, 3, 10, 30];
142
+ // ---------------------------------------------------------------------------
143
+ // Per-path closed outcome enums + emit-boundary coercers.
144
+ // ---------------------------------------------------------------------------
145
+ /**
146
+ * `config.lookup_total` result. Derived inside `NpmRegistryClient.getConfig`
147
+ * (the only place that knows cache hit vs miss): in-TTL non-empty hit → `hit`;
148
+ * fresh fetch with a configured registry → `miss`; empty / 404 / flag-off →
149
+ * `not_configured`; serving last-known-good config during an outage → `stale`;
150
+ * no usable cache during an outage / any throw → `error`.
151
+ *
152
+ * `stale` means the client is still serving a real configured registry from
153
+ * cache, just past the point where it would normally refresh. On-call needs to
154
+ * tell this apart from a real failure, so it is its own result instead of
155
+ * folding into `error` (which used to mix "still working off cache" with
156
+ * "broken"). The age of the cached value rides on the WARN log only, never as
157
+ * a metric label, so it adds no metric series.
158
+ */
159
+ exports.NPM_CONFIG_LOOKUP_RESULTS = [
160
+ "hit",
161
+ "miss",
162
+ "not_configured",
163
+ "stale",
164
+ "error",
165
+ ];
166
+ /** Unknown config-lookup states are an error condition, not a new series. */
167
+ function normalizeConfigLookupResult(input) {
168
+ return (exports.NPM_CONFIG_LOOKUP_RESULTS.find((result) => result === input) ?? "error");
169
+ }
170
+ /**
171
+ * `config.policy_fallback_total` branch. Records where the in-memory cache
172
+ * could not supply an `npmAllowInstallScripts` policy, so
173
+ * `NpmRegistryClient.lastKnownPolicy` was used instead. That happens when an
174
+ * earlier auth-failure or 4xx branch wiped the cache, which is a sign
175
+ * something went wrong, so it is worth alerting on.
176
+ *
177
+ * - `not_configured_404`: the branch of `getConfig` that keeps the policy on a 404.
178
+ * - `unreachable`: the no-usable-cache branch of `serveStaleOrUnconfigured`.
179
+ */
180
+ exports.NPM_POLICY_FALLBACK_BRANCHES = [
181
+ "not_configured_404",
182
+ "unreachable",
183
+ ];
184
+ /**
185
+ * `sync_home_npmrc.outcome_total` outcome. Mirrors the `SyncHomeNpmrcOutcome`
186
+ * union in the CLI's `home-npmrc.mts` and the `outcome` span attribute, so the
187
+ * metric and the `npm_registry.sync_home_npmrc` span join on the same value.
188
+ * Keep this list in sync with that union; an unknown value folds to `error`
189
+ * rather than adding a new series.
190
+ */
191
+ exports.NPM_SYNC_HOME_NPMRC_OUTCOMES = [
192
+ "written",
193
+ "restored-not-configured",
194
+ "skipped-unreachable",
195
+ "skipped-snapshot-failed",
196
+ "error",
197
+ ];
198
+ function normalizeSyncHomeNpmrcOutcome(input) {
199
+ return (exports.NPM_SYNC_HOME_NPMRC_OUTCOMES.find((outcome) => outcome === input) ?? "error");
200
+ }
201
+ /**
202
+ * `sync_project_npmrc.outcome_total` outcome. Mirrors project-dir reconcile
203
+ * in `maybeWriteNpmrcForDir` (boot + install). Keep in sync with that call
204
+ * site; unknown values fold to `error`.
205
+ *
206
+ * - `written`: configured rewrite with a fresh JWT
207
+ * - `restored-not-configured`: restored from a clean backup, or noop
208
+ * - `deleted-not-configured`: removed a Superblocks-authored stale file
209
+ * - `skipped-unreachable`: fail-closed leave-alone on cold-cache outage
210
+ * - `error`: unexpected failure (gitignore refuse, unlink/restore miss, boot catch)
211
+ */
212
+ exports.NPM_SYNC_PROJECT_NPMRC_OUTCOMES = [
213
+ "written",
214
+ "restored-not-configured",
215
+ "deleted-not-configured",
216
+ "skipped-unreachable",
217
+ "error",
218
+ ];
219
+ function normalizeSyncProjectNpmrcOutcome(input) {
220
+ return (exports.NPM_SYNC_PROJECT_NPMRC_OUTCOMES.find((outcome) => outcome === input) ??
221
+ "error");
222
+ }
223
+ /**
224
+ * `install.outcome_total` outcome. Short forms; the install path normalizes
225
+ * the long `NpmInstallBlocked.reason` values (`registry_auth_failed`,
226
+ * `registry_unreachable`) to these via {@link normalizeInstallOutcome}.
227
+ */
228
+ exports.NPM_INSTALL_OUTCOMES = [
229
+ "success",
230
+ "auth_failed",
231
+ "not_in_registry",
232
+ "unreachable",
233
+ "tls_failed",
234
+ "lockfile_url_mismatch",
235
+ "package_substituted",
236
+ "vulnerable_package",
237
+ "other",
238
+ ];
239
+ /**
240
+ * Long-form `NpmInstallBlocked.reason` → short install-metric outcome.
241
+ * `NPM_INSTALL_OUTCOMES` above is the canonical list for the metric; a blocked
242
+ * reason that is neither already a short outcome nor aliased here folds to
243
+ * `other` on the metric (the precise reason still rides on the log/audit
244
+ * surface via `NPM_OUTCOMES` in ./sanitize). Add an entry here when a new
245
+ * `NpmInstallBlocked.reason` should get its own metric facet rather than
246
+ * collapsing to `other`.
247
+ */
248
+ const INSTALL_OUTCOME_ALIASES = new Map([
249
+ ["registry_auth_failed", "auth_failed"],
250
+ ["registry_unreachable", "unreachable"],
251
+ ]);
252
+ function normalizeInstallOutcome(input) {
253
+ if (input == null)
254
+ return "other";
255
+ return (exports.NPM_INSTALL_OUTCOMES.find((outcome) => outcome === input) ??
256
+ INSTALL_OUTCOME_ALIASES.get(input) ??
257
+ "other");
258
+ }
259
+ /** `probe.outcome_total` outcome. Mapped from the server `ProbeResult`. */
260
+ exports.NPM_PROBE_OUTCOMES = [
261
+ "ok",
262
+ "auth_failed",
263
+ "unreachable",
264
+ "tls_failed",
265
+ "invalid_response",
266
+ ];
267
+ /**
268
+ * Unknown → `unreachable`: the typed call site maps the closed `ProbeReason`
269
+ * exhaustively, so this floor only fires on a non-typed (JS) caller, where
270
+ * "we couldn't classify the probe" is safest reported as a connectivity
271
+ * failure rather than silently dropped or minted as a new series.
272
+ */
273
+ function normalizeProbeOutcome(input) {
274
+ return (exports.NPM_PROBE_OUTCOMES.find((outcome) => outcome === input) ?? "unreachable");
275
+ }
276
+ /** `lookup.calls_total` outcome (the Clark `lookupNpmPackage` tool). */
277
+ exports.NPM_LOOKUP_TOOL_OUTCOMES = [
278
+ "in_registry",
279
+ "not_in_registry",
280
+ "error",
281
+ ];
282
+ /** Auth / unreachable / fail-closed / throw all collapse to `error` here. */
283
+ function normalizeLookupToolOutcome(input) {
284
+ return (exports.NPM_LOOKUP_TOOL_OUTCOMES.find((outcome) => outcome === input) ?? "error");
285
+ }
286
+ const SECONDS_PER_MS = 1 / 1000;
287
+ const toSeconds = (durationMs) => Math.max(0, durationMs) * SECONDS_PER_MS;
288
+ /**
289
+ * The npm-registry metrics emitter. Constructed once as the
290
+ * {@link npmRegistryEmitter} singleton; no `Meter` is injected — instruments
291
+ * resolve lazily from the OTel global and re-bind on provider change.
292
+ */
293
+ class NpmRegistryEmitter {
294
+ /**
295
+ * Last-seen install status keyed by the attribute tuple. The observable
296
+ * gauge reads this each collection cycle. Every key component is coerced to
297
+ * a closed enum / bounded bucket at the emit boundary
298
+ * (`normalizeInstallOutcome`, `bucketNpmRegistryHost`, the `NpmInstallRunner`
299
+ * union, a boolean), so the map is **bounded by construction** at
300
+ * runner(4) × configured(2) × registry_host(3) × outcome(7) = 168 entries —
301
+ * it cannot grow with traffic, only with deliberate enum changes. Entries
302
+ * persist until process exit / `_resetForTesting` (a "last-seen for
303
+ * dashboards" gauge must not drop a combo and lie about the most recent
304
+ * outcome); no eviction is needed at this bound. The cardinality regression
305
+ * test pins the resulting series count.
306
+ */
307
+ lastInstallStatus = new Map();
308
+ /** Returns `true` when the kill-switch is asserting (feature suppressed). */
309
+ killswitchState;
310
+ cachedMeter;
311
+ cachedInstruments;
312
+ /**
313
+ * Lazy instrument factory. Re-creates instruments and re-registers the
314
+ * observable-gauge callbacks when the global MeterProvider changes (a stale
315
+ * instrument bound to a replaced provider silently drops data).
316
+ */
317
+ getInstruments() {
318
+ const meter = api_1.metrics.getMeter(METER_NAME);
319
+ if (meter === this.cachedMeter && this.cachedInstruments) {
320
+ return this.cachedInstruments;
321
+ }
322
+ this.cachedMeter = meter;
323
+ this.cachedInstruments = {
324
+ configCounter: meter.createCounter(METRIC_CONFIG_LOOKUP, {
325
+ description: "Count of NpmRegistryClient.getConfig outcomes (cache hit/miss, not-configured, error).",
326
+ unit: "{lookup}",
327
+ }),
328
+ configHistogram: meter.createHistogram(METRIC_CONFIG_DURATION, {
329
+ description: "Duration of NpmRegistryClient.getConfig resolutions (cache hits are sub-ms; misses include the network fetch).",
330
+ unit: "s",
331
+ advice: { explicitBucketBoundaries: CONFIG_DURATION_BUCKETS },
332
+ }),
333
+ policyFallbackCounter: meter.createCounter(METRIC_POLICY_FALLBACK, {
334
+ description: "Count of times NpmRegistryClient.lastKnownPolicy supplied the install-scripts policy because the cache could not (cache hard-cleared by an earlier auth/4xx branch).",
335
+ unit: "{fallback}",
336
+ }),
337
+ syncHomeNpmrcCounter: meter.createCounter(METRIC_SYNC_HOME_NPMRC, {
338
+ description: "Count of CLI ~/.superblocks/npmrc materialization outcomes at dev-server boot / cache refresh.",
339
+ unit: "{sync}",
340
+ }),
341
+ syncProjectNpmrcCounter: meter.createCounter(METRIC_SYNC_PROJECT_NPMRC, {
342
+ description: "Count of project-dir .npmrc reconcile outcomes (boot + install write boundaries).",
343
+ unit: "{sync}",
344
+ }),
345
+ installCounter: meter.createCounter(METRIC_INSTALL_OUTCOME, {
346
+ description: "Count of npm install outcomes from Superblocks-owned paths.",
347
+ unit: "{install}",
348
+ }),
349
+ installHistogram: meter.createHistogram(METRIC_INSTALL_DURATION, {
350
+ description: "Duration of npm install invocations.",
351
+ unit: "s",
352
+ advice: { explicitBucketBoundaries: INSTALL_DURATION_BUCKETS },
353
+ }),
354
+ probeCounter: meter.createCounter(METRIC_PROBE_OUTCOME, {
355
+ description: "Count of org npm-registry verify-probe outcomes.",
356
+ unit: "{probe}",
357
+ }),
358
+ probeHistogram: meter.createHistogram(METRIC_PROBE_DURATION, {
359
+ description: "Duration of org npm-registry verify probes.",
360
+ unit: "s",
361
+ advice: { explicitBucketBoundaries: PROBE_DURATION_BUCKETS },
362
+ }),
363
+ lookupCounter: meter.createCounter(METRIC_LOOKUP_CALLS, {
364
+ description: "Count of Clark lookupNpmPackage tool outcomes.",
365
+ unit: "{call}",
366
+ }),
367
+ lookupHistogram: meter.createHistogram(METRIC_LOOKUP_DURATION, {
368
+ description: "Duration of Clark lookupNpmPackage tool calls.",
369
+ unit: "s",
370
+ advice: { explicitBucketBoundaries: LOOKUP_DURATION_BUCKETS },
371
+ }),
372
+ };
373
+ const statusGauge = meter.createObservableGauge(METRIC_INSTALL_STATUS, {
374
+ description: "Last-seen npm install status (1 = success, 0 = anything else) per runner+configured+registry+outcome. For at-a-glance dashboards.",
375
+ });
376
+ statusGauge.addCallback((result) => {
377
+ // Observable callbacks run on the metric export thread; an uncaught
378
+ // throw here aborts the whole collection cycle and drops every metric.
379
+ // Never let one escape.
380
+ try {
381
+ for (const { value, attrs } of this.lastInstallStatus.values()) {
382
+ result.observe(value, attrs);
383
+ }
384
+ }
385
+ catch {
386
+ // Swallow: a metrics callback must not crash collection.
387
+ }
388
+ });
389
+ const killswitchGauge = meter.createObservableGauge(METRIC_KILLSWITCH, {
390
+ description: "1 when the npm-registry feature is suppressed (LD flag off / kill-switch active), 0 otherwise. One series per process.",
391
+ });
392
+ killswitchGauge.addCallback((result) => {
393
+ // Same export-thread safety as the status gauge: if the kill-switch
394
+ // state source throws (e.g. a flag client is momentarily unavailable),
395
+ // don't take down the whole npm-registry metric stream with it.
396
+ try {
397
+ if (this.killswitchState) {
398
+ result.observe(this.killswitchState() ? 1 : 0);
399
+ }
400
+ }
401
+ catch {
402
+ // Swallow: a metrics callback must not crash collection.
403
+ }
404
+ });
405
+ return this.cachedInstruments;
406
+ }
407
+ /**
408
+ * Emit one `config.lookup_total` + `config.lookup_duration_seconds`
409
+ * observation. `durationMs` is the time `getConfig` spent resolving — sub-ms
410
+ * for a cache hit, the network round-trip (+ any JWT-refresh retry) for a
411
+ * miss — so dashboards can tell fast cache hits from slow cold fetches.
412
+ * `forceRefresh` records whether the caller bypassed the TTL cache hit, so
413
+ * forced just-in-time refreshes can be split from organic TTL-expiry misses.
414
+ */
415
+ recordConfigLookup(result, durationMs, forceRefresh = false) {
416
+ const attrs = {
417
+ result: normalizeConfigLookupResult(result),
418
+ force_refresh: forceRefresh,
419
+ };
420
+ const { configCounter, configHistogram } = this.getInstruments();
421
+ configCounter.add(1, attrs);
422
+ configHistogram.record(toSeconds(durationMs), attrs);
423
+ }
424
+ /**
425
+ * Emit one `config.policy_fallback_total` observation. Call from the
426
+ * `getConfig` 404 branch and the `serveStaleOrUnconfigured` no-cache branch
427
+ * when `lastKnownPolicy` supplied a value the cache could not. That means an
428
+ * earlier auth or 4xx branch wiped the cache, which is a sign something went
429
+ * wrong and is worth alerting on.
430
+ */
431
+ recordPolicyFallback(branch) {
432
+ const { policyFallbackCounter } = this.getInstruments();
433
+ policyFallbackCounter.add(1, { branch });
434
+ }
435
+ /**
436
+ * Emit one `sync_home_npmrc.outcome_total` observation alongside the
437
+ * `npm_registry.sync_home_npmrc` span, so the health of writing the npmrc at
438
+ * boot can be alerted on per `service.name` without querying traces.
439
+ * `outcome` is the `SyncHomeNpmrcOutcome`; an unknown value folds to `error`.
440
+ */
441
+ recordSyncHomeNpmrc(outcome) {
442
+ const { syncHomeNpmrcCounter } = this.getInstruments();
443
+ syncHomeNpmrcCounter.add(1, {
444
+ outcome: normalizeSyncHomeNpmrcOutcome(outcome),
445
+ });
446
+ }
447
+ /**
448
+ * Emit one `sync_project_npmrc.outcome_total` observation for project-dir
449
+ * `.npmrc` reconcile (boot + install). Unknown outcomes fold to `error`.
450
+ */
451
+ recordSyncProjectNpmrc(outcome) {
452
+ const { syncProjectNpmrcCounter } = this.getInstruments();
453
+ syncProjectNpmrcCounter.add(1, {
454
+ outcome: normalizeSyncProjectNpmrcOutcome(outcome),
455
+ });
456
+ }
457
+ /**
458
+ * Emit the install outcome counter + duration histogram + last-seen status
459
+ * gauge, and return the matching span-attribute pair for `llmobs.annotate`.
460
+ * Safe to call from a `finally` block.
461
+ */
462
+ recordInstall(input) {
463
+ const { installCounter, installHistogram } = this.getInstruments();
464
+ const registry_host = (0, sanitize_js_1.bucketNpmRegistryHost)(input.registryHost);
465
+ const outcome = normalizeInstallOutcome(input.outcome);
466
+ const attrs = {
467
+ runner: input.runner,
468
+ outcome,
469
+ configured: input.configured,
470
+ registry_host,
471
+ };
472
+ installCounter.add(1, attrs);
473
+ installHistogram.record(toSeconds(input.durationMs), attrs);
474
+ const key = `${attrs.runner}|${attrs.configured}|${attrs.registry_host}|${attrs.outcome}`;
475
+ this.lastInstallStatus.set(key, {
476
+ value: outcome === "success" ? 1 : 0,
477
+ attrs,
478
+ });
479
+ return { "npm.registry_host": registry_host, "npm.outcome": outcome };
480
+ }
481
+ /** Emit one `probe.outcome_total` + `probe.duration_seconds` observation. */
482
+ recordProbe(input) {
483
+ const { probeCounter, probeHistogram } = this.getInstruments();
484
+ const attrs = {
485
+ outcome: normalizeProbeOutcome(input.outcome),
486
+ registry_host: (0, sanitize_js_1.bucketNpmRegistryHost)(input.registryHost),
487
+ };
488
+ probeCounter.add(1, attrs);
489
+ probeHistogram.record(toSeconds(input.durationMs), attrs);
490
+ }
491
+ /** Emit one `lookup.calls_total` + `lookup.duration_seconds` observation. */
492
+ recordLookupTool(input) {
493
+ const { lookupCounter, lookupHistogram } = this.getInstruments();
494
+ const attrs = {
495
+ outcome: normalizeLookupToolOutcome(input.outcome),
496
+ registry_host: (0, sanitize_js_1.bucketNpmRegistryHost)(input.registryHost),
497
+ };
498
+ lookupCounter.add(1, attrs);
499
+ lookupHistogram.record(toSeconds(input.durationMs), attrs);
500
+ }
501
+ /**
502
+ * Register the kill-switch state source. `getCurrentState` returns `true`
503
+ * when the feature is suppressed (LD flag off). Idempotent — the latest
504
+ * source wins; the observable gauge reads it on each scrape. Calling this
505
+ * also ensures the instruments (and thus the gauge callback) are wired.
506
+ */
507
+ setKillswitch(getCurrentState) {
508
+ this.killswitchState = getCurrentState;
509
+ this.getInstruments();
510
+ }
511
+ /**
512
+ * Test-only: drop cached instruments, last-seen status, and the kill-switch
513
+ * source so the next emit re-binds to a freshly-installed test provider.
514
+ */
515
+ _resetForTesting() {
516
+ this.cachedMeter = undefined;
517
+ this.cachedInstruments = undefined;
518
+ this.lastInstallStatus.clear();
519
+ this.killswitchState = undefined;
520
+ }
521
+ }
522
+ exports.NpmRegistryEmitter = NpmRegistryEmitter;
523
+ /** Process-wide singleton. All npm-registry call sites emit through this. */
524
+ exports.npmRegistryEmitter = new NpmRegistryEmitter();
525
+ /**
526
+ * Back-compat free function for the install path (APPS-4189 call sites in
527
+ * `shell.ts` / `template-renderer.ts`). Delegates to the singleton and returns
528
+ * the span-attribute pair for `llmobs.annotate`.
529
+ */
530
+ function recordNpmInstall(input) {
531
+ return exports.npmRegistryEmitter.recordInstall(input);
532
+ }
533
+ /** Test-only reset for the singleton (see {@link NpmRegistryEmitter._resetForTesting}). */
534
+ function _resetNpmRegistryEmitterForTesting() {
535
+ exports.npmRegistryEmitter._resetForTesting();
536
+ }
537
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/npm-registry/emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * NPM Registry Telemetry
3
+ *
4
+ * Sanitization helpers, the unified metrics emitter, and the named OTel spans
5
+ * for the npm-registry subsystem (config fetch, install, verify probe, the
6
+ * Clark lookup tool, CLI npmrc sync). Re-exported from the package root, so
7
+ * callers import from `@superblocksteam/telemetry` rather than this subpath.
8
+ */
9
+ export * from "./sanitize.js";
10
+ export * from "./emitter.js";
11
+ export * from "./spans.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/npm-registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * NPM Registry Telemetry
4
+ *
5
+ * Sanitization helpers, the unified metrics emitter, and the named OTel spans
6
+ * for the npm-registry subsystem (config fetch, install, verify probe, the
7
+ * Clark lookup tool, CLI npmrc sync). Re-exported from the package root, so
8
+ * callers import from `@superblocksteam/telemetry` rather than this subpath.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ __exportStar(require("./sanitize.js"), exports);
26
+ __exportStar(require("./emitter.js"), exports);
27
+ __exportStar(require("./spans.js"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/npm-registry/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,+CAA6B;AAC7B,6CAA2B"}