@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,397 @@
1
+ "use strict";
2
+ /**
3
+ * Policy-Aware Log Processor
4
+ *
5
+ * Wraps a delegate LogRecordProcessor to provide:
6
+ * 1. Export mode filtering (LOCAL_ONLY, ERRORS_ONLY, INFO_AND_ABOVE)
7
+ * 2. Severity level filtering
8
+ * 3. Log body and attribute sanitization
9
+ *
10
+ * @see https://github.com/superblocksteam/engineering/blob/main/projects/o11y-refactor/epics/epic-c4-logging-strategy.md
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PolicyAwareLogProcessor = exports.LogExportMode = void 0;
14
+ exports.parseLogExportMode = parseLogExportMode;
15
+ exports.getLoggingPolicy = getLoggingPolicy;
16
+ exports.getMinimumPinoLevelFromLoggingPolicy = getMinimumPinoLevelFromLoggingPolicy;
17
+ exports.getMinimumPinoLevelForDeployment = getMinimumPinoLevelForDeployment;
18
+ const shared_1 = require("@superblocksteam/shared");
19
+ const log_sanitizer_js_1 = require("../common/log-sanitizer.js");
20
+ const policy_evaluator_js_1 = require("../common/policy-evaluator.js");
21
+ const policy_js_1 = require("../types/policy.js");
22
+ const local_obs_mode_js_1 = require("./local-obs-mode.js");
23
+ // ============================================================================
24
+ // Log Export Mode
25
+ // ============================================================================
26
+ /**
27
+ * Controls what logs are exported via OTEL.
28
+ */
29
+ var LogExportMode;
30
+ (function (LogExportMode) {
31
+ /** No log export - local stdout/stderr only */
32
+ LogExportMode["LOCAL_ONLY"] = "local_only";
33
+ /** Export WARN/ERROR/FATAL only (default for cloud-prem) */
34
+ LogExportMode["ERRORS_ONLY"] = "errors_only";
35
+ /** Export INFO and above (not recommended for cloud-prem) */
36
+ LogExportMode["INFO_AND_ABOVE"] = "info_and_above";
37
+ })(LogExportMode || (exports.LogExportMode = LogExportMode = {}));
38
+ /**
39
+ * Parse a string value into a LogExportMode, returning undefined if unrecognized.
40
+ * Used to validate SUPERBLOCKS_LOG_EXPORT_MODE env var values.
41
+ */
42
+ function parseLogExportMode(value) {
43
+ if (!value)
44
+ return undefined;
45
+ const normalized = value.toLowerCase();
46
+ if (normalized === LogExportMode.INFO_AND_ABOVE)
47
+ return LogExportMode.INFO_AND_ABOVE;
48
+ if (normalized === LogExportMode.ERRORS_ONLY)
49
+ return LogExportMode.ERRORS_ONLY;
50
+ if (normalized === LogExportMode.LOCAL_ONLY)
51
+ return LogExportMode.LOCAL_ONLY;
52
+ return undefined;
53
+ }
54
+ /**
55
+ * Get logging policy based on telemetry policy.
56
+ *
57
+ * @param policy - Telemetry policy
58
+ * @param exportModeOverride - Optional override for the export mode. When set, overrides the
59
+ * deployment-type default (e.g. allows INFO_AND_ABOVE on a cloud-prem trial environment).
60
+ * Cloud-prem sanitization (redaction, forbidden fields) is still applied regardless of override.
61
+ * @returns Logging policy configuration
62
+ */
63
+ function getLoggingPolicy(policy, exportModeOverride) {
64
+ const evaluator = new policy_evaluator_js_1.TelemetryPolicyEvaluator(policy);
65
+ // Check if Tier 2 export is allowed.
66
+ // ORDERING IS SECURITY-CRITICAL: this gate MUST come before the cloud-prem branch.
67
+ // exportModeOverride must never escalate a LOCAL_ONLY (Tier 2 disabled) deployment to
68
+ // INFO_AND_ABOVE. Do not move the cloud-prem branch above this check.
69
+ const canExportTier2 = evaluator.isExportEnabled(policy_js_1.TelemetryTier.TIER_2_OPERATIONAL);
70
+ if (!canExportTier2) {
71
+ return {
72
+ exportMode: LogExportMode.LOCAL_ONLY,
73
+ localMaxLevel: "debug",
74
+ messageSecretPatterns: log_sanitizer_js_1.DEFAULT_SECRET_PATTERNS,
75
+ secretFieldNames: log_sanitizer_js_1.SECRET_FIELDS,
76
+ secretFieldPatterns: log_sanitizer_js_1.SECRET_FIELD_PATTERNS,
77
+ redactStackTraces: true,
78
+ redactPatterns: [],
79
+ sensitivePatterns: log_sanitizer_js_1.DEFAULT_SENSITIVE_PATTERNS,
80
+ forbiddenFields: log_sanitizer_js_1.TIER1_FORBIDDEN_LOG_FIELDS,
81
+ };
82
+ }
83
+ // Cloud-prem: export errors only by default, with full sanitization (secrets + sensitive patterns).
84
+ // exportModeOverride allows specific deployments (e.g. trial environments) to opt into INFO_AND_ABOVE
85
+ // for debugging. Sanitization is always applied on cloud-prem regardless of the override.
86
+ if (policy.deploymentType === shared_1.DeploymentTypeEnum.CLOUD_PREM) {
87
+ return {
88
+ exportMode: exportModeOverride ?? LogExportMode.ERRORS_ONLY,
89
+ localMaxLevel: "debug",
90
+ messageSecretPatterns: log_sanitizer_js_1.DEFAULT_SECRET_PATTERNS,
91
+ secretFieldNames: log_sanitizer_js_1.SECRET_FIELDS,
92
+ secretFieldPatterns: log_sanitizer_js_1.SECRET_FIELD_PATTERNS,
93
+ redactStackTraces: true,
94
+ redactPatterns: log_sanitizer_js_1.CLOUD_PREM_REDACT_PATTERNS,
95
+ sensitivePatterns: log_sanitizer_js_1.DEFAULT_SENSITIVE_PATTERNS,
96
+ forbiddenFields: new Set([
97
+ ...log_sanitizer_js_1.TIER1_FORBIDDEN_LOG_FIELDS,
98
+ ...log_sanitizer_js_1.EXPORT_FORBIDDEN_FIELDS_CLOUD_PREM,
99
+ ]),
100
+ };
101
+ }
102
+ // Cloud: all sanitization off (logs sent as-is)
103
+ return {
104
+ exportMode: LogExportMode.INFO_AND_ABOVE,
105
+ localMaxLevel: "debug",
106
+ messageSecretPatterns: [],
107
+ secretFieldNames: new Set(),
108
+ secretFieldPatterns: [],
109
+ redactStackTraces: false,
110
+ redactPatterns: [],
111
+ sensitivePatterns: [],
112
+ forbiddenFields: new Set(),
113
+ };
114
+ }
115
+ /**
116
+ * Pino levels below WARN; when exportMode is ERRORS_ONLY we never write these to stdout.
117
+ */
118
+ const LEVELS_BELOW_WARN = new Set(["trace", "debug", "info"]);
119
+ /**
120
+ * Ordered from most verbose (index 0) to least verbose (index 5).
121
+ * Used to compare levels: "more restrictive" = higher index = fewer logs retained.
122
+ */
123
+ const PINO_LEVEL_ORDER = ["trace", "debug", "info", "warn", "error", "fatal"];
124
+ function levelOrderIndex(level) {
125
+ const normalized = level.toLowerCase();
126
+ const idx = PINO_LEVEL_ORDER.indexOf(normalized);
127
+ return idx >= 0 ? idx : PINO_LEVEL_ORDER.indexOf("info");
128
+ }
129
+ /**
130
+ * Returns the more restrictive of two levels (the one that retains fewer logs).
131
+ * E.g. moreRestrictiveLevel("trace", "debug") === "debug".
132
+ */
133
+ function moreRestrictiveLevel(a, b) {
134
+ const idxA = levelOrderIndex(a);
135
+ const idxB = levelOrderIndex(b);
136
+ return PINO_LEVEL_ORDER[Math.max(idxA, idxB)] ?? "info";
137
+ }
138
+ /**
139
+ * Returns the effective Pino log level from the current logging policy and env level.
140
+ * 1. Applies exportMode: when ERRORS_ONLY, never below warn so export paths never see INFO/DEBUG.
141
+ * 2. Applies localMaxLevel: caps local retention so we never set the logger more verbose than
142
+ * policy.localMaxLevel (e.g. localMaxLevel "debug" prevents trace from being written locally).
143
+ *
144
+ * Use when policy is available (e.g. after initNodeTelemetry) to sync logger level from policy.
145
+ *
146
+ * @param loggingPolicy - Logging policy (e.g. from getLoggingPolicy(telemetryPolicy))
147
+ * @param envLevel - Level from env (e.g. SUPERBLOCKS_SERVER_LOG_LEVEL)
148
+ * @returns Level to pass to Pino
149
+ */
150
+ function getMinimumPinoLevelFromLoggingPolicy(loggingPolicy, envLevel) {
151
+ let level;
152
+ const envLevelNormalized = envLevel.toLowerCase();
153
+ // Under local-obs the OTLP log processor exports INFO+ (see the override in
154
+ // init.ts), so the Pino floor must also allow INFO. Without this, a cloud-prem
155
+ // deployment type keeps the ERRORS_ONLY 'warn' floor and INFO lines are dropped
156
+ // by Pino before they can reach the pino->OTel tee. See isLocalObsMode.
157
+ if (loggingPolicy.exportMode === LogExportMode.ERRORS_ONLY &&
158
+ !(0, local_obs_mode_js_1.isLocalObsMode)() &&
159
+ LEVELS_BELOW_WARN.has(envLevelNormalized)) {
160
+ level = "warn";
161
+ }
162
+ else {
163
+ level = envLevel;
164
+ }
165
+ return moreRestrictiveLevel(level, loggingPolicy.localMaxLevel);
166
+ }
167
+ /**
168
+ * Returns the effective Pino log level for a deployment given the env-configured level.
169
+ * Used at logger bootstrap when policy is not yet initialized (e.g. server logger module load).
170
+ * Delegates to getMinimumPinoLevelFromLoggingPolicy with a synthetic policy from deployment type
171
+ * so the exportMode → level rule lives in one place.
172
+ *
173
+ * @param envLevel - Level from env (e.g. SUPERBLOCKS_SERVER_LOG_LEVEL)
174
+ * @param deploymentType - Deployment type from env (e.g. SUPERBLOCKS_DEPLOYMENT_TYPE)
175
+ * @param exportModeOverride - Optional override from env (e.g. SUPERBLOCKS_LOG_EXPORT_MODE).
176
+ * When set to a valid LogExportMode, overrides the deployment-type default.
177
+ * NOTE: This function runs at bootstrap before the policy evaluator is initialized,
178
+ * so it cannot verify the Tier 2 export gate. The override only lowers the Pino
179
+ * stdout level; actual telemetry export is gated by getLoggingPolicy() after init,
180
+ * which always enforces !canExportTier2 before applying the override.
181
+ * @returns Level to pass to Pino (envLevel or 'warn' for cloud-prem when envLevel is below warn)
182
+ */
183
+ function getMinimumPinoLevelForDeployment(envLevel, deploymentType, exportModeOverride) {
184
+ const isCloudPrem = deploymentType === shared_1.DeploymentTypeEnum.CLOUD_PREM;
185
+ const deploymentDefault = isCloudPrem
186
+ ? LogExportMode.ERRORS_ONLY
187
+ : LogExportMode.INFO_AND_ABOVE;
188
+ // Only apply the override for cloud-prem; cloud always uses INFO_AND_ABOVE (mirrors getLoggingPolicy).
189
+ const exportMode = (isCloudPrem ? exportModeOverride : undefined) ?? deploymentDefault;
190
+ return getMinimumPinoLevelFromLoggingPolicy({
191
+ exportMode,
192
+ localMaxLevel: "debug",
193
+ messageSecretPatterns: [],
194
+ secretFieldNames: new Set(),
195
+ secretFieldPatterns: [],
196
+ redactStackTraces: false,
197
+ redactPatterns: [],
198
+ sensitivePatterns: [],
199
+ forbiddenFields: new Set(),
200
+ }, envLevel);
201
+ }
202
+ // ============================================================================
203
+ // Severity Level Utilities
204
+ // ============================================================================
205
+ /**
206
+ * OTEL severity numbers:
207
+ * 1-4: TRACE
208
+ * 5-8: DEBUG
209
+ * 9-12: INFO
210
+ * 13-16: WARN
211
+ * 17-20: ERROR
212
+ * 21-24: FATAL
213
+ */
214
+ function getSeverityName(severityNumber) {
215
+ if (!severityNumber)
216
+ return "info";
217
+ if (severityNumber <= 4)
218
+ return "trace";
219
+ if (severityNumber <= 8)
220
+ return "debug";
221
+ if (severityNumber <= 12)
222
+ return "info";
223
+ if (severityNumber <= 16)
224
+ return "warn";
225
+ if (severityNumber <= 20)
226
+ return "error";
227
+ return "fatal";
228
+ }
229
+ /**
230
+ * Check if a severity level should be exported based on export mode.
231
+ */
232
+ function shouldExportSeverity(severityNumber, mode) {
233
+ if (mode === LogExportMode.LOCAL_ONLY) {
234
+ return false;
235
+ }
236
+ const severity = getSeverityName(severityNumber);
237
+ if (mode === LogExportMode.ERRORS_ONLY) {
238
+ return severity === "warn" || severity === "error" || severity === "fatal";
239
+ }
240
+ // INFO_AND_ABOVE
241
+ return (severity === "info" ||
242
+ severity === "warn" ||
243
+ severity === "error" ||
244
+ severity === "fatal");
245
+ }
246
+ // ============================================================================
247
+ // Policy-Aware Log Processor
248
+ // ============================================================================
249
+ /**
250
+ * Log processor that filters and sanitizes logs based on policy.
251
+ *
252
+ * This processor:
253
+ * 1. Blocks all logs if exportMode is LOCAL_ONLY
254
+ * 2. Filters by severity level based on exportMode
255
+ * 3. Sanitizes log body and attributes before forwarding
256
+ */
257
+ class PolicyAwareLogProcessor {
258
+ policy;
259
+ delegate;
260
+ constructor(policy, delegate) {
261
+ this.policy = policy;
262
+ this.delegate = delegate;
263
+ }
264
+ /**
265
+ * Called when a log record is emitted.
266
+ */
267
+ onEmit(logRecord, context) {
268
+ // Check if export mode allows this log
269
+ if (this.policy.exportMode === LogExportMode.LOCAL_ONLY) {
270
+ return; // Don't export anything
271
+ }
272
+ // Check if severity level should be exported
273
+ if (!shouldExportSeverity(logRecord.severityNumber, this.policy.exportMode)) {
274
+ return;
275
+ }
276
+ // Sanitize the log record in place before forwarding (policy-driven; empty config = passthrough)
277
+ this.sanitizeLogRecord(logRecord);
278
+ // Forward to delegate - cast is safe because logRecord is SdkLogRecord at runtime
279
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
280
+ this.delegate.onEmit(logRecord, context);
281
+ }
282
+ /** True when policy has no sanitization (cloud passthrough). */
283
+ isPassthroughPolicy() {
284
+ const p = this.policy;
285
+ return (p.messageSecretPatterns.length === 0 &&
286
+ p.secretFieldNames.size === 0 &&
287
+ p.secretFieldPatterns.length === 0 &&
288
+ !p.redactStackTraces &&
289
+ p.forbiddenFields.size === 0 &&
290
+ p.sensitivePatterns.length === 0 &&
291
+ p.redactPatterns.length === 0);
292
+ }
293
+ /**
294
+ * Sanitize a log record for export.
295
+ * Mutates the log record in place to preserve OTEL SDK internal state.
296
+ * All redaction is policy-driven; when config is empty/off, content is left as-is.
297
+ */
298
+ sanitizeLogRecord(logRecord) {
299
+ const p = this.policy;
300
+ // Sanitize body - mutate in place
301
+ if (typeof logRecord.body === "string") {
302
+ let body = p.messageSecretPatterns.length > 0
303
+ ? (0, log_sanitizer_js_1.redactSensitivePatterns)(logRecord.body, p.messageSecretPatterns)
304
+ : logRecord.body;
305
+ body = (0, log_sanitizer_js_1.redactSensitivePatterns)(body, p.sensitivePatterns);
306
+ body = (0, log_sanitizer_js_1.applyRedactPatterns)(body, p.redactPatterns);
307
+ if (p.redactStackTraces && (0, log_sanitizer_js_1.containsStackTrace)(body)) {
308
+ body = (0, log_sanitizer_js_1.redactStackTraceForExport)(body, p.sensitivePatterns, p.messageSecretPatterns);
309
+ }
310
+ logRecord.body = body;
311
+ }
312
+ else if (logRecord.body && typeof logRecord.body === "object") {
313
+ if (!this.isPassthroughPolicy()) {
314
+ logRecord.body =
315
+ (0, log_sanitizer_js_1.sanitizeLogObjectForExport)(logRecord.body, p.forbiddenFields, 0, p.sensitivePatterns);
316
+ }
317
+ }
318
+ // Sanitize attributes - mutate in place
319
+ const attrs = logRecord.attributes;
320
+ if (attrs) {
321
+ const sanitizedAttributes = this.sanitizeAttributes(attrs);
322
+ // Clear and repopulate attributes
323
+ for (const key of Object.keys(attrs)) {
324
+ delete attrs[key];
325
+ }
326
+ for (const [key, value] of Object.entries(sanitizedAttributes)) {
327
+ attrs[key] = value;
328
+ }
329
+ }
330
+ }
331
+ /**
332
+ * Sanitize log attributes.
333
+ */
334
+ sanitizeAttributes(attributes) {
335
+ if (!attributes) {
336
+ return {};
337
+ }
338
+ const p = this.policy;
339
+ const sanitized = {};
340
+ for (const [key, value] of Object.entries(attributes)) {
341
+ const lowerKey = key.toLowerCase();
342
+ if ((0, log_sanitizer_js_1.isSecretFieldFromPolicy)(key, p.secretFieldNames, p.secretFieldPatterns)) {
343
+ sanitized[key] = log_sanitizer_js_1.REDACTED_PLACEHOLDER;
344
+ continue;
345
+ }
346
+ if (p.forbiddenFields.has(lowerKey)) {
347
+ continue;
348
+ }
349
+ if (typeof value === "string") {
350
+ let str = p.messageSecretPatterns.length > 0
351
+ ? (0, log_sanitizer_js_1.redactSensitivePatterns)(value, p.messageSecretPatterns)
352
+ : value;
353
+ str = (0, log_sanitizer_js_1.redactSensitivePatterns)(str, p.sensitivePatterns);
354
+ str = (0, log_sanitizer_js_1.applyRedactPatterns)(str, p.redactPatterns);
355
+ if (p.redactStackTraces) {
356
+ if ((0, log_sanitizer_js_1.isStackAttributeKey)(key)) {
357
+ sanitized[key] = (0, log_sanitizer_js_1.containsStackTrace)(str)
358
+ ? (0, log_sanitizer_js_1.redactStackTraceForExport)(str, p.sensitivePatterns, p.messageSecretPatterns)
359
+ : log_sanitizer_js_1.STACK_TRACE_REDACTED_PLACEHOLDER;
360
+ }
361
+ else if ((0, log_sanitizer_js_1.containsStackTrace)(str)) {
362
+ sanitized[key] = (0, log_sanitizer_js_1.redactStackTraceForExport)(str, p.sensitivePatterns, p.messageSecretPatterns);
363
+ }
364
+ else {
365
+ sanitized[key] = str;
366
+ }
367
+ }
368
+ else {
369
+ sanitized[key] = str;
370
+ }
371
+ }
372
+ else if (value &&
373
+ typeof value === "object" &&
374
+ !this.isPassthroughPolicy()) {
375
+ sanitized[key] = (0, log_sanitizer_js_1.sanitizeLogObjectForExport)(value, p.forbiddenFields, 0, p.sensitivePatterns);
376
+ }
377
+ else {
378
+ sanitized[key] = value;
379
+ }
380
+ }
381
+ return sanitized;
382
+ }
383
+ /**
384
+ * Shutdown the processor.
385
+ */
386
+ async shutdown() {
387
+ return this.delegate.shutdown();
388
+ }
389
+ /**
390
+ * Force flush pending logs.
391
+ */
392
+ async forceFlush() {
393
+ return this.delegate.forceFlush();
394
+ }
395
+ }
396
+ exports.PolicyAwareLogProcessor = PolicyAwareLogProcessor;
397
+ //# sourceMappingURL=log-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-processor.js","sourceRoot":"","sources":["../../src/node/log-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Metrics Client for Node.js Telemetry
3
+ *
4
+ * Provides a simple interface for recording metrics via OpenTelemetry.
5
+ * This is the recommended way to record metrics in services using the telemetry package.
6
+ */
7
+ import type { Meter } from "@opentelemetry/api";
8
+ /**
9
+ * Labels for metrics (key-value pairs).
10
+ */
11
+ export type Labels = Record<string, string | number>;
12
+ /**
13
+ * Handle for a counter metric.
14
+ */
15
+ export interface CounterHandle {
16
+ inc(labels?: Labels, value?: number): void;
17
+ }
18
+ /**
19
+ * Handle for a gauge metric.
20
+ */
21
+ export interface GaugeHandle {
22
+ set(labels: Labels, value: number): void;
23
+ }
24
+ /**
25
+ * Handle for a histogram metric.
26
+ */
27
+ export interface HistogramHandle {
28
+ observe(labels: Labels, value: number): void;
29
+ }
30
+ /**
31
+ * Options for counter creation. Only applied the first time a counter name is
32
+ * registered; later calls reuse the existing instrument.
33
+ */
34
+ export interface CounterOptions {
35
+ description?: string;
36
+ unit?: string;
37
+ }
38
+ /**
39
+ * Options for histogram creation. Only applied the first time a histogram
40
+ * name is registered; later calls reuse the existing instrument.
41
+ */
42
+ export interface HistogramOptions extends CounterOptions {
43
+ /**
44
+ * Explicit bucket boundaries advice for the OTEL SDK. Without this, the
45
+ * SDK's default boundaries top out at 10,000 — long-tail observations
46
+ * (e.g. multi-minute latencies in ms) all collapse into the +Inf bucket.
47
+ */
48
+ bucketBoundaries?: number[];
49
+ }
50
+ /**
51
+ * Metrics client that provides a unified interface for recording OTEL metrics.
52
+ */
53
+ export declare class MetricsClient {
54
+ private readonly meter;
55
+ private counters;
56
+ private histograms;
57
+ private gaugeValues;
58
+ constructor(meter: Meter);
59
+ /**
60
+ * Creates or retrieves a counter and returns a handle.
61
+ */
62
+ counter(name: string, options?: CounterOptions): CounterHandle;
63
+ /**
64
+ * Creates or retrieves a gauge and returns a handle.
65
+ * Note: OTEL gauges are async/observable, so we store the value and emit via callback.
66
+ * Values are automatically expired after 5 minutes to prevent unbounded memory growth.
67
+ */
68
+ gauge(name: string): GaugeHandle;
69
+ /**
70
+ * Creates or retrieves a histogram and returns a handle.
71
+ */
72
+ histogram(name: string, options?: HistogramOptions): HistogramHandle;
73
+ /**
74
+ * Increments a counter by name (creates if not exists). `options` is only
75
+ * applied on the instrument's first registration; see `counter`.
76
+ */
77
+ incCounter(name: string, labels?: Labels, value?: number, options?: CounterOptions): void;
78
+ /**
79
+ * Sets a gauge value by name (creates if not exists).
80
+ */
81
+ setGauge(name: string, labels: Labels, value: number): void;
82
+ /**
83
+ * Observes a histogram value by name (creates if not exists). `options` is
84
+ * only applied on the instrument's first registration; see `histogram`.
85
+ */
86
+ observeHistogram(name: string, labels: Labels, value: number, options?: HistogramOptions): void;
87
+ }
88
+ //# sourceMappingURL=metrics-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-client.d.ts","sourceRoot":"","sources":["../../src/node/metrics-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAkC,MAAM,oBAAoB,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAuHrD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,WAAW,CAAkC;gBAExB,KAAK,EAAE,KAAK;IAEzC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa;IAa9D;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IA2BhC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe;IAiCpE;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAU,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,IAAI;IAIP;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3D;;;OAGG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,IAAI;CAGR"}