shield360 1.1.0 → 1.2.1

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 (400) hide show
  1. package/README.md +330 -3
  2. package/dist/__tests__/build-info.test.js +8 -1
  3. package/dist/__tests__/build-info.test.js.map +1 -1
  4. package/dist/__tests__/code-location.test.js +1 -1
  5. package/dist/__tests__/destination.test.js +15 -0
  6. package/dist/__tests__/destination.test.js.map +1 -1
  7. package/dist/__tests__/masking.test.d.ts +1 -0
  8. package/dist/__tests__/masking.test.js +66 -0
  9. package/dist/__tests__/masking.test.js.map +1 -0
  10. package/dist/__tests__/register.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/register.e2e.test.js +279 -0
  12. package/dist/__tests__/register.e2e.test.js.map +1 -0
  13. package/dist/__tests__/register.test.js +60 -0
  14. package/dist/__tests__/register.test.js.map +1 -1
  15. package/dist/agents/__tests__/agents.test.d.ts +1 -0
  16. package/dist/agents/__tests__/agents.test.js +529 -0
  17. package/dist/agents/__tests__/agents.test.js.map +1 -0
  18. package/dist/agents/index.d.ts +15 -0
  19. package/dist/agents/index.js +25 -0
  20. package/dist/agents/index.js.map +1 -0
  21. package/dist/agents/passport.d.ts +92 -0
  22. package/dist/agents/passport.js +301 -0
  23. package/dist/agents/passport.js.map +1 -0
  24. package/dist/agents/policy.d.ts +24 -0
  25. package/dist/agents/policy.js +93 -0
  26. package/dist/agents/policy.js.map +1 -0
  27. package/dist/agents/replay.d.ts +20 -0
  28. package/dist/agents/replay.js +47 -0
  29. package/dist/agents/replay.js.map +1 -0
  30. package/dist/agents/report.d.ts +30 -0
  31. package/dist/agents/report.js +93 -0
  32. package/dist/agents/report.js.map +1 -0
  33. package/dist/agents/types.d.ts +148 -0
  34. package/dist/agents/types.js +37 -0
  35. package/dist/agents/types.js.map +1 -0
  36. package/dist/agents/verifier.d.ts +33 -0
  37. package/dist/agents/verifier.js +276 -0
  38. package/dist/agents/verifier.js.map +1 -0
  39. package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
  40. package/dist/ai-security/__tests__/bench.test.js +50 -0
  41. package/dist/ai-security/__tests__/bench.test.js.map +1 -0
  42. package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
  43. package/dist/ai-security/__tests__/checks.test.js +248 -0
  44. package/dist/ai-security/__tests__/checks.test.js.map +1 -0
  45. package/dist/ai-security/__tests__/config.test.d.ts +1 -0
  46. package/dist/ai-security/__tests__/config.test.js +164 -0
  47. package/dist/ai-security/__tests__/config.test.js.map +1 -0
  48. package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
  49. package/dist/ai-security/__tests__/detection.test.js +114 -0
  50. package/dist/ai-security/__tests__/detection.test.js.map +1 -0
  51. package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
  52. package/dist/ai-security/__tests__/fixtures.js +30 -0
  53. package/dist/ai-security/__tests__/fixtures.js.map +1 -0
  54. package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
  55. package/dist/ai-security/__tests__/hooks.test.js +174 -0
  56. package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
  57. package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
  58. package/dist/ai-security/__tests__/stream.test.js +85 -0
  59. package/dist/ai-security/__tests__/stream.test.js.map +1 -0
  60. package/dist/ai-security/config.d.ts +94 -0
  61. package/dist/ai-security/config.js +241 -0
  62. package/dist/ai-security/config.js.map +1 -0
  63. package/dist/ai-security/context.d.ts +45 -0
  64. package/dist/ai-security/context.js +108 -0
  65. package/dist/ai-security/context.js.map +1 -0
  66. package/dist/ai-security/custom-kinds.d.ts +23 -0
  67. package/dist/ai-security/custom-kinds.js +97 -0
  68. package/dist/ai-security/custom-kinds.js.map +1 -0
  69. package/dist/ai-security/events.d.ts +77 -0
  70. package/dist/ai-security/events.js +153 -0
  71. package/dist/ai-security/events.js.map +1 -0
  72. package/dist/ai-security/hooks.d.ts +48 -0
  73. package/dist/ai-security/hooks.js +461 -0
  74. package/dist/ai-security/hooks.js.map +1 -0
  75. package/dist/ai-security/index.d.ts +209 -0
  76. package/dist/ai-security/index.js +587 -0
  77. package/dist/ai-security/index.js.map +1 -0
  78. package/dist/ai-security/injection-rules.json +1024 -0
  79. package/dist/ai-security/injection.d.ts +46 -0
  80. package/dist/ai-security/injection.js +635 -0
  81. package/dist/ai-security/injection.js.map +1 -0
  82. package/dist/ai-security/jailbreak.d.ts +38 -0
  83. package/dist/ai-security/jailbreak.js +73 -0
  84. package/dist/ai-security/jailbreak.js.map +1 -0
  85. package/dist/ai-security/limits.d.ts +84 -0
  86. package/dist/ai-security/limits.js +195 -0
  87. package/dist/ai-security/limits.js.map +1 -0
  88. package/dist/ai-security/mcp.d.ts +82 -0
  89. package/dist/ai-security/mcp.js +150 -0
  90. package/dist/ai-security/mcp.js.map +1 -0
  91. package/dist/ai-security/output.d.ts +107 -0
  92. package/dist/ai-security/output.js +390 -0
  93. package/dist/ai-security/output.js.map +1 -0
  94. package/dist/ai-security/policy.d.ts +125 -0
  95. package/dist/ai-security/policy.js +196 -0
  96. package/dist/ai-security/policy.js.map +1 -0
  97. package/dist/ai-security/rag.d.ts +70 -0
  98. package/dist/ai-security/rag.js +174 -0
  99. package/dist/ai-security/rag.js.map +1 -0
  100. package/dist/ai-security/tool-rules.json +203 -0
  101. package/dist/ai-security/tools.d.ts +46 -0
  102. package/dist/ai-security/tools.js +62 -0
  103. package/dist/ai-security/tools.js.map +1 -0
  104. package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
  105. package/dist/budgets/__tests__/budgets.test.js +134 -0
  106. package/dist/budgets/__tests__/budgets.test.js.map +1 -0
  107. package/dist/budgets/auto.d.ts +25 -0
  108. package/dist/budgets/auto.js +63 -0
  109. package/dist/budgets/auto.js.map +1 -0
  110. package/dist/budgets/index.d.ts +110 -0
  111. package/dist/budgets/index.js +239 -0
  112. package/dist/budgets/index.js.map +1 -0
  113. package/dist/customer/__tests__/customer.test.d.ts +1 -0
  114. package/dist/customer/__tests__/customer.test.js +155 -0
  115. package/dist/customer/__tests__/customer.test.js.map +1 -0
  116. package/dist/customer/index.d.ts +48 -0
  117. package/dist/customer/index.js +132 -0
  118. package/dist/customer/index.js.map +1 -0
  119. package/dist/destination.d.ts +14 -0
  120. package/dist/destination.js +16 -0
  121. package/dist/destination.js.map +1 -1
  122. package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
  123. package/dist/feedback/__tests__/feedback.test.js +80 -0
  124. package/dist/feedback/__tests__/feedback.test.js.map +1 -0
  125. package/dist/feedback/index.d.ts +48 -0
  126. package/dist/feedback/index.js +97 -0
  127. package/dist/feedback/index.js.map +1 -0
  128. package/dist/flags/__tests__/flags.test.d.ts +1 -0
  129. package/dist/flags/__tests__/flags.test.js +301 -0
  130. package/dist/flags/__tests__/flags.test.js.map +1 -0
  131. package/dist/flags/client.d.ts +131 -0
  132. package/dist/flags/client.js +301 -0
  133. package/dist/flags/client.js.map +1 -0
  134. package/dist/flags/engine.d.ts +200 -0
  135. package/dist/flags/engine.js +677 -0
  136. package/dist/flags/engine.js.map +1 -0
  137. package/dist/flags/index.d.ts +4 -0
  138. package/dist/flags/index.js +16 -0
  139. package/dist/flags/index.js.map +1 -0
  140. package/dist/guard/__tests__/findings.test.js +1 -1
  141. package/dist/guard/__tests__/report.test.js +67 -0
  142. package/dist/guard/__tests__/report.test.js.map +1 -1
  143. package/dist/guard/heartbeat.d.ts +34 -0
  144. package/dist/guard/heartbeat.js +83 -0
  145. package/dist/guard/heartbeat.js.map +1 -0
  146. package/dist/guard/integration.d.ts +9 -0
  147. package/dist/guard/integration.js +4 -2
  148. package/dist/guard/integration.js.map +1 -1
  149. package/dist/guard/report.d.ts +24 -1
  150. package/dist/guard/report.js +67 -18
  151. package/dist/guard/report.js.map +1 -1
  152. package/dist/index.d.ts +88 -0
  153. package/dist/index.js +203 -2
  154. package/dist/index.js.map +1 -1
  155. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
  156. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
  157. package/dist/instrumentation/anthropic/wrapper.js +4 -0
  158. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  159. package/dist/instrumentation/openai/wrapper.js +6 -0
  160. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  161. package/dist/masking.d.ts +42 -0
  162. package/dist/masking.js +197 -0
  163. package/dist/masking.js.map +1 -0
  164. package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
  165. package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
  166. package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
  167. package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
  168. package/dist/otel/__tests__/app-logs.test.js +269 -0
  169. package/dist/otel/__tests__/app-logs.test.js.map +1 -0
  170. package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
  171. package/dist/otel/__tests__/log-auto.test.js +125 -0
  172. package/dist/otel/__tests__/log-auto.test.js.map +1 -0
  173. package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
  174. package/dist/otel/__tests__/log-bridges.test.js +170 -0
  175. package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
  176. package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
  177. package/dist/otel/__tests__/system-metrics.test.js +79 -0
  178. package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
  179. package/dist/otel/app-logs.d.ts +80 -0
  180. package/dist/otel/app-logs.js +195 -0
  181. package/dist/otel/app-logs.js.map +1 -0
  182. package/dist/otel/build-info.d.ts +2 -1
  183. package/dist/otel/build-info.js +3 -2
  184. package/dist/otel/build-info.js.map +1 -1
  185. package/dist/otel/events.d.ts +1 -0
  186. package/dist/otel/events.js +22 -13
  187. package/dist/otel/events.js.map +1 -1
  188. package/dist/otel/log-auto.d.ts +44 -0
  189. package/dist/otel/log-auto.js +200 -0
  190. package/dist/otel/log-auto.js.map +1 -0
  191. package/dist/otel/log-bridges.d.ts +54 -0
  192. package/dist/otel/log-bridges.js +307 -0
  193. package/dist/otel/log-bridges.js.map +1 -0
  194. package/dist/otel/metrics.js +1 -1
  195. package/dist/otel/metrics.js.map +1 -1
  196. package/dist/otel/system-metrics.d.ts +39 -0
  197. package/dist/otel/system-metrics.js +166 -0
  198. package/dist/otel/system-metrics.js.map +1 -0
  199. package/dist/otel/tracing.js +6 -2
  200. package/dist/otel/tracing.js.map +1 -1
  201. package/dist/protect/__tests__/protect.test.js +4 -0
  202. package/dist/protect/__tests__/protect.test.js.map +1 -1
  203. package/dist/protect/index.js +9 -4
  204. package/dist/protect/index.js.map +1 -1
  205. package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
  206. package/dist/rasp/__tests__/auto-http.test.js +136 -0
  207. package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
  208. package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
  209. package/dist/rasp/__tests__/baseline.test.js +86 -0
  210. package/dist/rasp/__tests__/baseline.test.js.map +1 -0
  211. package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
  212. package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
  213. package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
  214. package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
  215. package/dist/rasp/__tests__/capture-context.test.js +135 -0
  216. package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
  217. package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
  218. package/dist/rasp/__tests__/code-hook.test.js +218 -0
  219. package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
  220. package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
  221. package/dist/rasp/__tests__/config-client.test.js +283 -0
  222. package/dist/rasp/__tests__/config-client.test.js.map +1 -0
  223. package/dist/rasp/__tests__/corpus.d.ts +13 -0
  224. package/dist/rasp/__tests__/corpus.js +111 -0
  225. package/dist/rasp/__tests__/corpus.js.map +1 -0
  226. package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
  227. package/dist/rasp/__tests__/custom-rules.test.js +276 -0
  228. package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
  229. package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
  230. package/dist/rasp/__tests__/db-hook.test.js +438 -0
  231. package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
  232. package/dist/rasp/__tests__/deception.test.d.ts +1 -0
  233. package/dist/rasp/__tests__/deception.test.js +567 -0
  234. package/dist/rasp/__tests__/deception.test.js.map +1 -0
  235. package/dist/rasp/__tests__/detect.test.d.ts +1 -0
  236. package/dist/rasp/__tests__/detect.test.js +276 -0
  237. package/dist/rasp/__tests__/detect.test.js.map +1 -0
  238. package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
  239. package/dist/rasp/__tests__/esm-exports.test.js +20 -0
  240. package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
  241. package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
  242. package/dist/rasp/__tests__/fs-hook.test.js +241 -0
  243. package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
  244. package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
  245. package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
  246. package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
  247. package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
  248. package/dist/rasp/__tests__/hook-kit.js +139 -0
  249. package/dist/rasp/__tests__/hook-kit.js.map +1 -0
  250. package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
  251. package/dist/rasp/__tests__/http-hook.test.js +250 -0
  252. package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
  253. package/dist/rasp/__tests__/iast.test.d.ts +1 -0
  254. package/dist/rasp/__tests__/iast.test.js +361 -0
  255. package/dist/rasp/__tests__/iast.test.js.map +1 -0
  256. package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
  257. package/dist/rasp/__tests__/include-hook.test.js +122 -0
  258. package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
  259. package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
  260. package/dist/rasp/__tests__/middleware.test.js +302 -0
  261. package/dist/rasp/__tests__/middleware.test.js.map +1 -0
  262. package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
  263. package/dist/rasp/__tests__/process-hook.test.js +238 -0
  264. package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
  265. package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
  266. package/dist/rasp/__tests__/reporter.test.js +114 -0
  267. package/dist/rasp/__tests__/reporter.test.js.map +1 -0
  268. package/dist/rasp/__tests__/route.test.d.ts +1 -0
  269. package/dist/rasp/__tests__/route.test.js +46 -0
  270. package/dist/rasp/__tests__/route.test.js.map +1 -0
  271. package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
  272. package/dist/rasp/__tests__/rule-expr.test.js +151 -0
  273. package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
  274. package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
  275. package/dist/rasp/__tests__/rule-phases.test.js +271 -0
  276. package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
  277. package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
  278. package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
  279. package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
  280. package/dist/rasp/__tests__/targets.test.d.ts +1 -0
  281. package/dist/rasp/__tests__/targets.test.js +82 -0
  282. package/dist/rasp/__tests__/targets.test.js.map +1 -0
  283. package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
  284. package/dist/rasp/__tests__/template-hook.test.js +254 -0
  285. package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
  286. package/dist/rasp/__tests__/upload.test.d.ts +1 -0
  287. package/dist/rasp/__tests__/upload.test.js +81 -0
  288. package/dist/rasp/__tests__/upload.test.js.map +1 -0
  289. package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
  290. package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
  291. package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
  292. package/dist/rasp/auto-http.d.ts +6 -0
  293. package/dist/rasp/auto-http.js +194 -0
  294. package/dist/rasp/auto-http.js.map +1 -0
  295. package/dist/rasp/baseline.d.ts +35 -0
  296. package/dist/rasp/baseline.js +91 -0
  297. package/dist/rasp/baseline.js.map +1 -0
  298. package/dist/rasp/capture.d.ts +76 -0
  299. package/dist/rasp/capture.js +304 -0
  300. package/dist/rasp/capture.js.map +1 -0
  301. package/dist/rasp/config-client.d.ts +122 -0
  302. package/dist/rasp/config-client.js +337 -0
  303. package/dist/rasp/config-client.js.map +1 -0
  304. package/dist/rasp/context.d.ts +65 -0
  305. package/dist/rasp/context.js +68 -0
  306. package/dist/rasp/context.js.map +1 -0
  307. package/dist/rasp/custom-rules.d.ts +68 -0
  308. package/dist/rasp/custom-rules.js +222 -0
  309. package/dist/rasp/custom-rules.js.map +1 -0
  310. package/dist/rasp/data/default-rules.json +199 -0
  311. package/dist/rasp/data/default-sinks.json +4 -0
  312. package/dist/rasp/data/dnslog-domains.json +11 -0
  313. package/dist/rasp/deception.d.ts +70 -0
  314. package/dist/rasp/deception.js +220 -0
  315. package/dist/rasp/deception.js.map +1 -0
  316. package/dist/rasp/detect.d.ts +68 -0
  317. package/dist/rasp/detect.js +671 -0
  318. package/dist/rasp/detect.js.map +1 -0
  319. package/dist/rasp/engine.d.ts +107 -0
  320. package/dist/rasp/engine.js +330 -0
  321. package/dist/rasp/engine.js.map +1 -0
  322. package/dist/rasp/hooks/code.d.ts +20 -0
  323. package/dist/rasp/hooks/code.js +334 -0
  324. package/dist/rasp/hooks/code.js.map +1 -0
  325. package/dist/rasp/hooks/db.d.ts +48 -0
  326. package/dist/rasp/hooks/db.js +322 -0
  327. package/dist/rasp/hooks/db.js.map +1 -0
  328. package/dist/rasp/hooks/esm.d.ts +7 -0
  329. package/dist/rasp/hooks/esm.js +18 -0
  330. package/dist/rasp/hooks/esm.js.map +1 -0
  331. package/dist/rasp/hooks/fs.d.ts +3 -0
  332. package/dist/rasp/hooks/fs.js +206 -0
  333. package/dist/rasp/hooks/fs.js.map +1 -0
  334. package/dist/rasp/hooks/http.d.ts +4 -0
  335. package/dist/rasp/hooks/http.js +213 -0
  336. package/dist/rasp/hooks/http.js.map +1 -0
  337. package/dist/rasp/hooks/include.d.ts +9 -0
  338. package/dist/rasp/hooks/include.js +79 -0
  339. package/dist/rasp/hooks/include.js.map +1 -0
  340. package/dist/rasp/hooks/marks.d.ts +2 -0
  341. package/dist/rasp/hooks/marks.js +16 -0
  342. package/dist/rasp/hooks/marks.js.map +1 -0
  343. package/dist/rasp/hooks/process.d.ts +22 -0
  344. package/dist/rasp/hooks/process.js +191 -0
  345. package/dist/rasp/hooks/process.js.map +1 -0
  346. package/dist/rasp/hooks/sinks.d.ts +54 -0
  347. package/dist/rasp/hooks/sinks.js +329 -0
  348. package/dist/rasp/hooks/sinks.js.map +1 -0
  349. package/dist/rasp/hooks/template.d.ts +21 -0
  350. package/dist/rasp/hooks/template.js +152 -0
  351. package/dist/rasp/hooks/template.js.map +1 -0
  352. package/dist/rasp/iast-rules.d.ts +82 -0
  353. package/dist/rasp/iast-rules.js +240 -0
  354. package/dist/rasp/iast-rules.js.map +1 -0
  355. package/dist/rasp/iast-scope.d.ts +29 -0
  356. package/dist/rasp/iast-scope.js +54 -0
  357. package/dist/rasp/iast-scope.js.map +1 -0
  358. package/dist/rasp/iast.d.ts +81 -0
  359. package/dist/rasp/iast.js +272 -0
  360. package/dist/rasp/iast.js.map +1 -0
  361. package/dist/rasp/index.d.ts +52 -0
  362. package/dist/rasp/index.js +280 -0
  363. package/dist/rasp/index.js.map +1 -0
  364. package/dist/rasp/lexers.d.ts +32 -0
  365. package/dist/rasp/lexers.js +444 -0
  366. package/dist/rasp/lexers.js.map +1 -0
  367. package/dist/rasp/middleware.d.ts +155 -0
  368. package/dist/rasp/middleware.js +568 -0
  369. package/dist/rasp/middleware.js.map +1 -0
  370. package/dist/rasp/model-output.d.ts +14 -0
  371. package/dist/rasp/model-output.js +107 -0
  372. package/dist/rasp/model-output.js.map +1 -0
  373. package/dist/rasp/normalize.d.ts +23 -0
  374. package/dist/rasp/normalize.js +140 -0
  375. package/dist/rasp/normalize.js.map +1 -0
  376. package/dist/rasp/reporter.d.ts +60 -0
  377. package/dist/rasp/reporter.js +230 -0
  378. package/dist/rasp/reporter.js.map +1 -0
  379. package/dist/rasp/rule-expr.d.ts +236 -0
  380. package/dist/rasp/rule-expr.js +1253 -0
  381. package/dist/rasp/rule-expr.js.map +1 -0
  382. package/dist/rasp/template.d.ts +53 -0
  383. package/dist/rasp/template.js +336 -0
  384. package/dist/rasp/template.js.map +1 -0
  385. package/dist/rasp/types.d.ts +110 -0
  386. package/dist/rasp/types.js +51 -0
  387. package/dist/rasp/types.js.map +1 -0
  388. package/dist/rasp/vpatch.d.ts +55 -0
  389. package/dist/rasp/vpatch.js +120 -0
  390. package/dist/rasp/vpatch.js.map +1 -0
  391. package/dist/register.js +52 -11
  392. package/dist/register.js.map +1 -1
  393. package/dist/semantic-convention.d.ts +2 -0
  394. package/dist/semantic-convention.js +5 -0
  395. package/dist/semantic-convention.js.map +1 -1
  396. package/dist/types.d.ts +77 -1
  397. package/dist/zero-code.d.ts +8 -0
  398. package/dist/zero-code.js +38 -0
  399. package/dist/zero-code.js.map +1 -0
  400. package/package.json +18 -2
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const stream_1 = require("stream");
4
+ const api_logs_1 = require("@opentelemetry/api-logs");
5
+ const sdk_logs_1 = require("@opentelemetry/sdk-logs");
6
+ const app_logs_1 = require("../app-logs");
7
+ const log_auto_1 = require("../log-auto");
8
+ /**
9
+ * With application logs on, winston and pino loggers the app creates also
10
+ * write to Shield360, through the real libraries, without changing their own
11
+ * output; with them off, loggers are created exactly as before.
12
+ */
13
+ function memory() {
14
+ const exporter = new sdk_logs_1.InMemoryLogRecordExporter();
15
+ const provider = new sdk_logs_1.LoggerProvider({ processors: [new sdk_logs_1.SimpleLogRecordProcessor({ exporter })] });
16
+ return { exporter, provider };
17
+ }
18
+ function sink() {
19
+ const lines = [];
20
+ const stream = new stream_1.Writable({
21
+ write(chunk, _enc, done) {
22
+ lines.push(String(chunk));
23
+ done();
24
+ },
25
+ });
26
+ return { lines, stream };
27
+ }
28
+ describe('winston and pino auto bridges', () => {
29
+ let exporter;
30
+ beforeEach(() => {
31
+ const m = memory();
32
+ exporter = m.exporter;
33
+ (0, app_logs_1.enableAppLogs)(m.provider, 'info', { captureCodeLocation: false });
34
+ });
35
+ afterEach(() => (0, app_logs_1.disableAppLogs)());
36
+ it('adds the Shield360 transport to winston loggers and keeps their own transports', () => {
37
+ jest.isolateModules(() => {
38
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
39
+ const winston = (0, log_auto_1.patchWinston)(require('winston'));
40
+ try {
41
+ const own = sink();
42
+ const logger = winston.createLogger({
43
+ level: 'info',
44
+ transports: [new winston.transports.Stream({ stream: own.stream })],
45
+ });
46
+ logger.info('order placed', { orderId: 'o-1' });
47
+ logger.warn('api key=k3j4h5g6f7d8s9a0q1w2e3r4 used');
48
+ logger.debug('below the level');
49
+ expect(logger.transports).toHaveLength(2);
50
+ expect(own.lines).toHaveLength(2);
51
+ const records = exporter.getFinishedLogRecords();
52
+ expect(records.map((r) => r.body)).toEqual(['order placed', 'api *** used']);
53
+ expect(records[0].attributes).toEqual({ orderId: 'o-1' });
54
+ expect(records[1].severityNumber).toBe(api_logs_1.SeverityNumber.WARN);
55
+ expect(records[0].instrumentationScope.name).toBe('winston');
56
+ // Patching twice is a no-op; unpatching restores createLogger.
57
+ expect((0, log_auto_1.patchWinston)(winston).createLogger).toBe(winston.createLogger);
58
+ }
59
+ finally {
60
+ (0, log_auto_1.unpatchWinston)(winston);
61
+ }
62
+ const plain = winston.createLogger({ transports: [new winston.transports.Stream({ stream: sink().stream })] });
63
+ expect(plain.transports).toHaveLength(1);
64
+ });
65
+ });
66
+ it('creates winston loggers unchanged while application logs are off', () => {
67
+ (0, app_logs_1.disableAppLogs)();
68
+ jest.isolateModules(() => {
69
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
70
+ const winston = (0, log_auto_1.patchWinston)(require('winston'));
71
+ const logger = winston.createLogger({ transports: [new winston.transports.Stream({ stream: sink().stream })] });
72
+ expect(logger.transports).toHaveLength(1);
73
+ (0, log_auto_1.unpatchWinston)(winston);
74
+ });
75
+ });
76
+ it('writes pino records to the destination and to Shield360', () => {
77
+ jest.isolateModules(() => {
78
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
79
+ const pino = (0, log_auto_1.patchPino)(require('pino'));
80
+ expect(pino.default).toBe(pino);
81
+ expect(typeof pino.destination).toBe('function');
82
+ const own = sink();
83
+ const logger = pino({ level: 'info' }, own.stream);
84
+ logger.info({ orderId: 'o-1' }, 'order placed');
85
+ logger.error(new Error('session=xyz expired'));
86
+ logger.debug('below the level');
87
+ expect(own.lines).toHaveLength(2);
88
+ expect(JSON.parse(own.lines[0]).msg).toBe('order placed');
89
+ const records = exporter.getFinishedLogRecords();
90
+ expect(records.map((r) => r.body)).toEqual(['order placed', 'session=*** expired']);
91
+ expect(records[0].attributes).toEqual({ orderId: 'o-1' });
92
+ expect(records[1].severityNumber).toBe(api_logs_1.SeverityNumber.ERROR);
93
+ expect(records[1].attributes['exception.message']).toBe('session=*** expired');
94
+ // pino(stream) works too.
95
+ const second = sink();
96
+ pino(second.stream).warn('disk slow');
97
+ expect(second.lines).toHaveLength(1);
98
+ expect(exporter.getFinishedLogRecords().map((r) => r.body)).toContain('disk slow');
99
+ });
100
+ });
101
+ it('creates pino loggers unchanged while application logs are off', () => {
102
+ (0, app_logs_1.disableAppLogs)();
103
+ jest.isolateModules(() => {
104
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
105
+ const pino = (0, log_auto_1.patchPino)(require('pino'));
106
+ const own = sink();
107
+ pino(own.stream).info('x');
108
+ expect(own.lines).toHaveLength(1);
109
+ expect(exporter.getFinishedLogRecords()).toHaveLength(0);
110
+ });
111
+ });
112
+ it('leaves pino arguments it cannot bridge alone', () => {
113
+ const fake = Object.assign(() => undefined, { multistream: () => ({ write: () => true }), destination: () => ({ write: () => true }) });
114
+ expect((0, log_auto_1.bridgePinoArgs)(fake, [{}, { write: () => true }, 'extra'])).toBeNull();
115
+ expect((0, log_auto_1.bridgePinoArgs)(fake, ['/var/log/app.log'])).not.toBeNull(); // pino('path'): a file destination
116
+ expect((0, log_auto_1.bridgePinoArgs)(fake, [{ transport: { target: 'x' } }, { write: () => true }])).toBeNull();
117
+ expect((0, log_auto_1.bridgePinoArgs)(fake, [[1, 2]])).toBeNull();
118
+ });
119
+ it('never throws from a broken module', () => {
120
+ expect((0, log_auto_1.patchWinston)(undefined)).toBeUndefined();
121
+ expect((0, log_auto_1.patchWinston)({ createLogger: 'nope' })).toEqual({ createLogger: 'nope' });
122
+ expect((0, log_auto_1.patchPino)({})).toEqual({});
123
+ });
124
+ });
125
+ //# sourceMappingURL=log-auto.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-auto.test.js","sourceRoot":"","sources":["../../../src/otel/__tests__/log-auto.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const api_logs_1 = require("@opentelemetry/api-logs");
4
+ const sdk_logs_1 = require("@opentelemetry/sdk-logs");
5
+ const app_logs_1 = require("../app-logs");
6
+ const log_bridges_1 = require("../log-bridges");
7
+ /**
8
+ * pino, winston and console reach Shield360 only when application logs are
9
+ * on, with their levels mapped, errors as exception attributes, and never
10
+ * feeding back into themselves.
11
+ */
12
+ function memory() {
13
+ const exporter = new sdk_logs_1.InMemoryLogRecordExporter();
14
+ const provider = new sdk_logs_1.LoggerProvider({ processors: [new sdk_logs_1.SimpleLogRecordProcessor({ exporter })] });
15
+ return { exporter, provider };
16
+ }
17
+ describe('logger bridges', () => {
18
+ let exporter;
19
+ beforeEach(() => {
20
+ const m = memory();
21
+ exporter = m.exporter;
22
+ (0, app_logs_1.enableAppLogs)(m.provider, 'debug', { captureCodeLocation: false });
23
+ });
24
+ afterEach(() => {
25
+ (0, log_bridges_1.releaseConsole)();
26
+ (0, log_bridges_1.releaseStdio)();
27
+ (0, app_logs_1.disableAppLogs)();
28
+ });
29
+ describe('stdout and stderr', () => {
30
+ // Fake streams, so the test runner's own output is never part of the test.
31
+ function fakeStream() {
32
+ const written = [];
33
+ const stream = {
34
+ write(chunk, encoding, callback) {
35
+ written.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8'));
36
+ if (typeof encoding === 'function')
37
+ encoding();
38
+ else if (typeof callback === 'function')
39
+ callback();
40
+ return true;
41
+ },
42
+ };
43
+ return { stream, written };
44
+ }
45
+ it('turns JSON log lines into records with their level, message, fields and error, still writing them', () => {
46
+ const out = fakeStream();
47
+ const err = fakeStream();
48
+ (0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
49
+ const line = JSON.stringify({ time: '2026-10-30T00:00:00Z', level: 'info', msg: 'request', service: 'api', requestId: 'r-1', status: 200 });
50
+ expect(out.stream.write(line + '\n')).toBe(true);
51
+ err.stream.write(JSON.stringify({ level: 'error', msg: 'tick failed', err: { name: 'TypeError', message: 'boom', stack: 'TypeError: boom\n at x' } }) + '\n');
52
+ const records = exporter.getFinishedLogRecords();
53
+ expect(records.map((r) => [r.body, r.severityNumber])).toEqual([
54
+ ['request', api_logs_1.SeverityNumber.INFO],
55
+ ['tick failed', api_logs_1.SeverityNumber.ERROR],
56
+ ]);
57
+ expect(records[0].attributes).toEqual({ service: 'api', requestId: 'r-1', status: 200 });
58
+ expect(records[1].attributes).toMatchObject({ 'exception.type': 'TypeError', 'exception.message': 'boom' });
59
+ expect(records[0].instrumentationScope.name).toBe('stdout');
60
+ expect(records[1].instrumentationScope.name).toBe('stderr');
61
+ expect(out.written).toEqual([line + '\n']);
62
+ });
63
+ it('joins lines split across writes, takes plain lines as text, and passes callbacks through', () => {
64
+ const out = fakeStream();
65
+ const err = fakeStream();
66
+ (0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
67
+ out.stream.write('{"level":"warn","message":"slow ');
68
+ out.stream.write('query"}\nplain text line\n');
69
+ err.stream.write(Buffer.from('something broke\n'));
70
+ const done = jest.fn();
71
+ out.stream.write('', done);
72
+ expect(done).toHaveBeenCalledTimes(1);
73
+ expect(exporter.getFinishedLogRecords().map((r) => [r.body, r.severityNumber])).toEqual([
74
+ ['slow query', api_logs_1.SeverityNumber.WARN],
75
+ ['plain text line', api_logs_1.SeverityNumber.INFO],
76
+ ['something broke', api_logs_1.SeverityNumber.ERROR],
77
+ ]);
78
+ });
79
+ it('masks credentials, never captures the pipeline\'s own output, and puts the streams back on release', () => {
80
+ const out = fakeStream();
81
+ const err = fakeStream();
82
+ const write = out.stream.write;
83
+ (0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
84
+ out.stream.write(JSON.stringify({ level: 'info', msg: 'login', password: 'hunter2-secret' }) + '\n');
85
+ err.stream.write('OTLPExporterError: Bad Request\n');
86
+ const records = exporter.getFinishedLogRecords();
87
+ expect(records).toHaveLength(1);
88
+ expect(JSON.stringify(records[0].attributes)).not.toContain('hunter2-secret');
89
+ (0, log_bridges_1.releaseStdio)();
90
+ expect(out.stream.write).toBe(write);
91
+ out.stream.write('after release\n');
92
+ expect(exporter.getFinishedLogRecords()).toHaveLength(1);
93
+ });
94
+ });
95
+ it('turns pino JSON lines into records, with levels, attributes and errors', () => {
96
+ const stream = (0, log_bridges_1.pinoStream)();
97
+ stream.write(JSON.stringify({ level: 30, time: 1, msg: 'order placed', orderId: 'o-1', pid: 1, hostname: 'h' }) + '\n');
98
+ stream.write(JSON.stringify({ level: 50, msg: 'payment failed', err: { type: 'TypeError', message: 'boom', stack: 'TypeError: boom\n at x' } }) + '\n');
99
+ const records = exporter.getFinishedLogRecords();
100
+ expect(records.map((r) => [r.body, r.severityNumber])).toEqual([
101
+ ['order placed', api_logs_1.SeverityNumber.INFO],
102
+ ['payment failed', api_logs_1.SeverityNumber.ERROR],
103
+ ]);
104
+ expect(records[0].attributes).toEqual({ orderId: 'o-1' });
105
+ expect(records[1].attributes).toMatchObject({ 'exception.type': 'TypeError', 'exception.message': 'boom' });
106
+ expect(records[0].instrumentationScope.name).toBe('pino');
107
+ expect((0, log_bridges_1.pinoLevel)(60)).toBe('fatal');
108
+ expect((0, log_bridges_1.pinoLevel)(10)).toBe('debug');
109
+ });
110
+ it('builds a winston transport on the app\'s own Transport class', () => {
111
+ class FakeTransport {
112
+ constructor(options) {
113
+ this.options = options;
114
+ this.emitted = [];
115
+ }
116
+ emit(event) {
117
+ this.emitted.push(event);
118
+ return true;
119
+ }
120
+ }
121
+ const Transport = (0, log_bridges_1.winstonTransport)(FakeTransport);
122
+ const t = new Transport();
123
+ const done = jest.fn();
124
+ t.log({ level: 'warn', message: 'disk slow', [Symbol.for('level')]: 'warn', route: '/checkout' }, done);
125
+ expect(done).toHaveBeenCalled();
126
+ const record = exporter.getFinishedLogRecords()[0];
127
+ expect(record.body).toBe('disk slow');
128
+ expect(record.severityNumber).toBe(api_logs_1.SeverityNumber.WARN);
129
+ expect(record.attributes).toEqual({ route: '/checkout' });
130
+ expect((0, log_bridges_1.winstonLevel)('emerg')).toBe('fatal');
131
+ });
132
+ it('copies console output, still printing it, and stops on release', () => {
133
+ const printed = [];
134
+ const real = console.warn;
135
+ console.warn = (...args) => void printed.push(args);
136
+ try {
137
+ (0, log_bridges_1.captureConsole)();
138
+ console.warn('cache miss', { key: 'k' });
139
+ console.warn(new Error('kaput'));
140
+ (0, log_bridges_1.releaseConsole)();
141
+ console.warn('after release');
142
+ }
143
+ finally {
144
+ console.warn = real;
145
+ }
146
+ expect(printed).toHaveLength(3);
147
+ const records = exporter.getFinishedLogRecords();
148
+ expect(records.map((r) => r.body)).toEqual(['cache miss {"key":"k"}', 'kaput']);
149
+ expect(records[1].attributes).toMatchObject({ 'exception.message': 'kaput' });
150
+ });
151
+ it('never captures the telemetry pipeline\'s own messages, and caps records per second', () => {
152
+ const stream = (0, log_bridges_1.pinoStream)({ maxPerSecond: 2 });
153
+ stream.write(JSON.stringify({ level: 50, msg: 'OTLPExporterError: Bad Request' }));
154
+ stream.write(JSON.stringify({ level: 30, msg: '@opentelemetry/api: Registered a global' }));
155
+ for (let i = 0; i < 5; i++)
156
+ stream.write(JSON.stringify({ level: 30, msg: `m${i}` }));
157
+ expect(exporter.getFinishedLogRecords().map((r) => r.body)).toEqual(['m0', 'm1']);
158
+ let t = 0;
159
+ const allow = (0, log_bridges_1.createLimiter)(1, () => t);
160
+ expect([allow(), allow()]).toEqual([true, false]);
161
+ t = 1000;
162
+ expect(allow()).toBe(true);
163
+ });
164
+ it('sends nothing while application logs are off', () => {
165
+ (0, app_logs_1.disableAppLogs)();
166
+ (0, log_bridges_1.pinoStream)().write(JSON.stringify({ level: 30, msg: 'x' }));
167
+ expect(exporter.getFinishedLogRecords()).toHaveLength(0);
168
+ });
169
+ });
170
+ //# sourceMappingURL=log-bridges.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-bridges.test.js","sourceRoot":"","sources":["../../../src/otel/__tests__/log-bridges.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
4
+ const system_metrics_1 = require("../system-metrics");
5
+ /**
6
+ * Host and process metrics are opt-in, named the way Shield360's
7
+ * Infrastructure view reads them, and never throw into the application.
8
+ */
9
+ class TestReader extends sdk_metrics_1.MetricReader {
10
+ constructor() {
11
+ super({ aggregationTemporalitySelector: (_t) => sdk_metrics_1.AggregationTemporality.CUMULATIVE });
12
+ }
13
+ async onForceFlush() { }
14
+ async onShutdown() { }
15
+ }
16
+ describe('system metrics', () => {
17
+ const originalEnv = process.env;
18
+ beforeEach(() => {
19
+ process.env = { ...originalEnv };
20
+ delete process.env.SHIELD360_COLLECT_SYSTEM_METRICS;
21
+ });
22
+ afterAll(() => {
23
+ process.env = originalEnv;
24
+ });
25
+ it('is off unless asked for', () => {
26
+ expect((0, system_metrics_1.resolveCollectSystemMetrics)()).toBe(false);
27
+ process.env.SHIELD360_COLLECT_SYSTEM_METRICS = 'true';
28
+ expect((0, system_metrics_1.resolveCollectSystemMetrics)()).toBe(true);
29
+ expect((0, system_metrics_1.resolveCollectSystemMetrics)(false)).toBe(false);
30
+ });
31
+ it('computes CPU busy from two samples', () => {
32
+ expect((0, system_metrics_1.cpuBusy)({ idle: 100, total: 200 }, { idle: 150, total: 400 })).toBeCloseTo(0.75);
33
+ expect((0, system_metrics_1.cpuBusy)({ idle: 1, total: 1 }, { idle: 1, total: 1 })).toBeNull();
34
+ });
35
+ it('exports the gauges with host.name, skipping readings that are not available', async () => {
36
+ const reader = new TestReader();
37
+ const provider = new sdk_metrics_1.MeterProvider({ readers: [reader] });
38
+ const sampler = {
39
+ host: () => 0.42,
40
+ process: () => null,
41
+ memory: () => ({ used: 3, total: 4 }),
42
+ rss: () => 123,
43
+ loopDelaySeconds: () => 0.015,
44
+ stop: jest.fn(),
45
+ };
46
+ (0, system_metrics_1.setupSystemMetrics)(provider.getMeter('test'), sampler);
47
+ const { resourceMetrics } = await reader.collect();
48
+ const metrics = resourceMetrics.scopeMetrics.flatMap((s) => s.metrics);
49
+ const value = (name) => metrics.find((m) => m.descriptor.name === name)?.dataPoints[0];
50
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemCpu)?.value).toBeCloseTo(0.42);
51
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemMemoryUtilization)?.value).toBeCloseTo(0.75);
52
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemMemoryUsage)?.attributes).toMatchObject({ state: 'used' });
53
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.processMemory)?.value).toBe(123);
54
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.eventLoopDelay)?.value).toBeCloseTo(0.015);
55
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.processCpu)).toBeUndefined();
56
+ expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemCpu)?.attributes['host.name']).toBeTruthy();
57
+ await provider.shutdown();
58
+ });
59
+ it('keeps a failing sampler from throwing', async () => {
60
+ const reader = new TestReader();
61
+ const provider = new sdk_metrics_1.MeterProvider({ readers: [reader] });
62
+ const boom = () => {
63
+ throw new Error('no');
64
+ };
65
+ (0, system_metrics_1.setupSystemMetrics)(provider.getMeter('test'), { host: boom, process: boom, memory: boom, rss: boom, loopDelaySeconds: boom });
66
+ await expect(reader.collect()).resolves.toBeDefined();
67
+ await provider.shutdown();
68
+ });
69
+ it('samples Node itself', () => {
70
+ const sampler = (0, system_metrics_1.nodeSampler)();
71
+ expect(sampler.memory().total).toBeGreaterThan(0);
72
+ expect(sampler.rss()).toBeGreaterThan(0);
73
+ sampler.host();
74
+ const busy = sampler.host();
75
+ expect(busy === null || (busy >= 0 && busy <= 1)).toBe(true);
76
+ sampler.stop();
77
+ });
78
+ });
79
+ //# sourceMappingURL=system-metrics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-metrics.test.js","sourceRoot":"","sources":["../../../src/otel/__tests__/system-metrics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Application logs to Shield360, when asked for.
3
+ *
4
+ * Shield360 ingests OTLP logs on the same per-API-key route as traces. The
5
+ * logger here writes OpenTelemetry log records through the SDK's own
6
+ * LoggerProvider (otel/events.ts), so they go to the same destination with the
7
+ * same Authorization header as the spans, and carry the trace and span ids of
8
+ * whatever span is active when they are written.
9
+ *
10
+ * Nothing is sent unless it is turned on: `captureLogs: true` in init(), or
11
+ * SHIELD360_CAPTURE_LOGS=true. Until then every logger is a no-op, so a
12
+ * library can create one at import time without deciding for the application.
13
+ *
14
+ * Every record, from Shield360.logger() or a bridge (log-bridges.ts), passes
15
+ * the same checks as the Python SDK's handler: the level; never the SDK's own
16
+ * scopes (`shield360`, `opentelemetry`); at most `maxPerSecond` records a
17
+ * second per logger (500 by default); masking by the contract every SDK
18
+ * shares (sdk/rasp/README.md, "Masking"): credential pairs, bearer
19
+ * credentials and opaque tokens in the body and attributes, the whole value of
20
+ * an attribute named like a credential, lists and maps item by item, readable
21
+ * identifiers kept (not `code.*` or `exception.type`); the body and stack
22
+ * trace cut to 16,384 characters after masking, other strings to 4,096; and
23
+ * the application call site as `code.function.name`,
24
+ * `code.file.path` and `code.line.number` unless captureCodeLocation is off.
25
+ */
26
+ import { LogAttributes } from '@opentelemetry/api-logs';
27
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
28
+ export interface Shield360Logger {
29
+ debug(message: string | Error, attributes?: LogAttributes): void;
30
+ info(message: string | Error, attributes?: LogAttributes): void;
31
+ warn(message: string | Error, attributes?: LogAttributes): void;
32
+ error(message: string | Error, attributes?: LogAttributes): void;
33
+ fatal(message: string | Error, attributes?: LogAttributes): void;
34
+ }
35
+ interface ProviderLike {
36
+ getLogger(name: string): {
37
+ emit(record: Record<string, unknown>): void;
38
+ };
39
+ }
40
+ export declare const DEFAULT_LOG_LEVEL: LogLevel;
41
+ export declare const DEFAULT_LOGGER_NAME = "app";
42
+ export declare const DEFAULT_MAX_PER_SECOND = 500;
43
+ export declare const MAX_BODY_LENGTH = 16384;
44
+ export declare const MAX_ATTRIBUTE_LENGTH = 4096;
45
+ export type AppLogsOptions = {
46
+ /** Record the application call site (code.*). Default true. */
47
+ captureCodeLocation?: boolean;
48
+ /** Directory code.file.path is made relative to (init()'s codeRoot). */
49
+ codeRoot?: string;
50
+ };
51
+ export type LoggerOptions = {
52
+ /** Records per second at most (default 500); the rest are dropped. */
53
+ maxPerSecond?: number;
54
+ };
55
+ /** A fixed-window limiter: true for at most `maxPerSecond` calls in each second. */
56
+ export declare function createLimiter(maxPerSecond?: number, now?: () => number): () => boolean;
57
+ /** Whether a scope is the SDK's own (`shield360`, `opentelemetry`, or below them). */
58
+ export declare function isOwnScope(name: string): boolean;
59
+ /**
60
+ * An attribute value as it may leave the process (sdk/rasp/README.md, Masking):
61
+ * the whole value under a credential name, strings masked then cut, lists and
62
+ * maps item by item; code.* and exception.type as they are.
63
+ */
64
+ export declare function maskAttribute(key: string, value: unknown): unknown;
65
+ /** The option, else SHIELD360_CAPTURE_LOGS, else off. */
66
+ export declare function resolveCaptureLogs(option?: boolean): boolean;
67
+ /** The option, else SHIELD360_LOG_LEVEL, else `info`. Unknown names fall back to `info`. */
68
+ export declare function resolveLogLevel(option?: string): LogLevel;
69
+ /** Start sending: records at `level` and above go through `logProvider`. */
70
+ export declare function enableAppLogs(logProvider: ProviderLike, level?: LogLevel, options?: AppLogsOptions): void;
71
+ /** Stop sending; every logger goes back to a no-op. */
72
+ export declare function disableAppLogs(): void;
73
+ export declare function appLogsEnabled(): boolean;
74
+ /**
75
+ * A logger whose records go to Shield360 when application logs are on
76
+ * (`captureLogs: true` or SHIELD360_CAPTURE_LOGS=true), and nowhere otherwise.
77
+ * `name` becomes the record's instrumentation scope; it defaults to `app`.
78
+ */
79
+ export declare function createLogger(name?: string, options?: LoggerOptions): Shield360Logger;
80
+ export {};