shield360 1.0.1 → 1.2.0

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 (424) hide show
  1. package/README.md +392 -37
  2. package/dist/__tests__/build-info.test.d.ts +1 -0
  3. package/dist/__tests__/build-info.test.js +196 -0
  4. package/dist/__tests__/build-info.test.js.map +1 -0
  5. package/dist/__tests__/code-location.test.d.ts +1 -0
  6. package/dist/__tests__/code-location.test.js +180 -0
  7. package/dist/__tests__/code-location.test.js.map +1 -0
  8. package/dist/__tests__/masking.test.d.ts +1 -0
  9. package/dist/__tests__/masking.test.js +66 -0
  10. package/dist/__tests__/masking.test.js.map +1 -0
  11. package/dist/__tests__/pricing-claude-5.test.js +3 -0
  12. package/dist/__tests__/pricing-claude-5.test.js.map +1 -1
  13. package/dist/__tests__/register.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/register.e2e.test.js +264 -0
  15. package/dist/__tests__/register.e2e.test.js.map +1 -0
  16. package/dist/__tests__/register.test.js +60 -0
  17. package/dist/__tests__/register.test.js.map +1 -1
  18. package/dist/agents/__tests__/agents.test.d.ts +1 -0
  19. package/dist/agents/__tests__/agents.test.js +529 -0
  20. package/dist/agents/__tests__/agents.test.js.map +1 -0
  21. package/dist/agents/index.d.ts +15 -0
  22. package/dist/agents/index.js +25 -0
  23. package/dist/agents/index.js.map +1 -0
  24. package/dist/agents/passport.d.ts +92 -0
  25. package/dist/agents/passport.js +301 -0
  26. package/dist/agents/passport.js.map +1 -0
  27. package/dist/agents/policy.d.ts +24 -0
  28. package/dist/agents/policy.js +93 -0
  29. package/dist/agents/policy.js.map +1 -0
  30. package/dist/agents/replay.d.ts +20 -0
  31. package/dist/agents/replay.js +47 -0
  32. package/dist/agents/replay.js.map +1 -0
  33. package/dist/agents/report.d.ts +30 -0
  34. package/dist/agents/report.js +93 -0
  35. package/dist/agents/report.js.map +1 -0
  36. package/dist/agents/types.d.ts +148 -0
  37. package/dist/agents/types.js +37 -0
  38. package/dist/agents/types.js.map +1 -0
  39. package/dist/agents/verifier.d.ts +33 -0
  40. package/dist/agents/verifier.js +276 -0
  41. package/dist/agents/verifier.js.map +1 -0
  42. package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
  43. package/dist/ai-security/__tests__/bench.test.js +50 -0
  44. package/dist/ai-security/__tests__/bench.test.js.map +1 -0
  45. package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
  46. package/dist/ai-security/__tests__/checks.test.js +248 -0
  47. package/dist/ai-security/__tests__/checks.test.js.map +1 -0
  48. package/dist/ai-security/__tests__/config.test.d.ts +1 -0
  49. package/dist/ai-security/__tests__/config.test.js +164 -0
  50. package/dist/ai-security/__tests__/config.test.js.map +1 -0
  51. package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
  52. package/dist/ai-security/__tests__/detection.test.js +114 -0
  53. package/dist/ai-security/__tests__/detection.test.js.map +1 -0
  54. package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
  55. package/dist/ai-security/__tests__/fixtures.js +30 -0
  56. package/dist/ai-security/__tests__/fixtures.js.map +1 -0
  57. package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
  58. package/dist/ai-security/__tests__/hooks.test.js +174 -0
  59. package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
  60. package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
  61. package/dist/ai-security/__tests__/stream.test.js +85 -0
  62. package/dist/ai-security/__tests__/stream.test.js.map +1 -0
  63. package/dist/ai-security/config.d.ts +94 -0
  64. package/dist/ai-security/config.js +241 -0
  65. package/dist/ai-security/config.js.map +1 -0
  66. package/dist/ai-security/context.d.ts +45 -0
  67. package/dist/ai-security/context.js +108 -0
  68. package/dist/ai-security/context.js.map +1 -0
  69. package/dist/ai-security/custom-kinds.d.ts +23 -0
  70. package/dist/ai-security/custom-kinds.js +97 -0
  71. package/dist/ai-security/custom-kinds.js.map +1 -0
  72. package/dist/ai-security/events.d.ts +77 -0
  73. package/dist/ai-security/events.js +153 -0
  74. package/dist/ai-security/events.js.map +1 -0
  75. package/dist/ai-security/hooks.d.ts +48 -0
  76. package/dist/ai-security/hooks.js +461 -0
  77. package/dist/ai-security/hooks.js.map +1 -0
  78. package/dist/ai-security/index.d.ts +209 -0
  79. package/dist/ai-security/index.js +587 -0
  80. package/dist/ai-security/index.js.map +1 -0
  81. package/dist/ai-security/injection-rules.json +1024 -0
  82. package/dist/ai-security/injection.d.ts +46 -0
  83. package/dist/ai-security/injection.js +635 -0
  84. package/dist/ai-security/injection.js.map +1 -0
  85. package/dist/ai-security/jailbreak.d.ts +38 -0
  86. package/dist/ai-security/jailbreak.js +73 -0
  87. package/dist/ai-security/jailbreak.js.map +1 -0
  88. package/dist/ai-security/limits.d.ts +84 -0
  89. package/dist/ai-security/limits.js +195 -0
  90. package/dist/ai-security/limits.js.map +1 -0
  91. package/dist/ai-security/mcp.d.ts +82 -0
  92. package/dist/ai-security/mcp.js +150 -0
  93. package/dist/ai-security/mcp.js.map +1 -0
  94. package/dist/ai-security/output.d.ts +107 -0
  95. package/dist/ai-security/output.js +390 -0
  96. package/dist/ai-security/output.js.map +1 -0
  97. package/dist/ai-security/policy.d.ts +125 -0
  98. package/dist/ai-security/policy.js +196 -0
  99. package/dist/ai-security/policy.js.map +1 -0
  100. package/dist/ai-security/rag.d.ts +70 -0
  101. package/dist/ai-security/rag.js +174 -0
  102. package/dist/ai-security/rag.js.map +1 -0
  103. package/dist/ai-security/tool-rules.json +203 -0
  104. package/dist/ai-security/tools.d.ts +46 -0
  105. package/dist/ai-security/tools.js +62 -0
  106. package/dist/ai-security/tools.js.map +1 -0
  107. package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
  108. package/dist/budgets/__tests__/budgets.test.js +134 -0
  109. package/dist/budgets/__tests__/budgets.test.js.map +1 -0
  110. package/dist/budgets/auto.d.ts +25 -0
  111. package/dist/budgets/auto.js +63 -0
  112. package/dist/budgets/auto.js.map +1 -0
  113. package/dist/budgets/index.d.ts +110 -0
  114. package/dist/budgets/index.js +239 -0
  115. package/dist/budgets/index.js.map +1 -0
  116. package/dist/config.js +1 -1
  117. package/dist/config.js.map +1 -1
  118. package/dist/customer/__tests__/customer.test.d.ts +1 -0
  119. package/dist/customer/__tests__/customer.test.js +155 -0
  120. package/dist/customer/__tests__/customer.test.js.map +1 -0
  121. package/dist/customer/index.d.ts +48 -0
  122. package/dist/customer/index.js +132 -0
  123. package/dist/customer/index.js.map +1 -0
  124. package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
  125. package/dist/feedback/__tests__/feedback.test.js +80 -0
  126. package/dist/feedback/__tests__/feedback.test.js.map +1 -0
  127. package/dist/feedback/index.d.ts +48 -0
  128. package/dist/feedback/index.js +97 -0
  129. package/dist/feedback/index.js.map +1 -0
  130. package/dist/flags/__tests__/flags.test.d.ts +1 -0
  131. package/dist/flags/__tests__/flags.test.js +301 -0
  132. package/dist/flags/__tests__/flags.test.js.map +1 -0
  133. package/dist/flags/client.d.ts +131 -0
  134. package/dist/flags/client.js +301 -0
  135. package/dist/flags/client.js.map +1 -0
  136. package/dist/flags/engine.d.ts +200 -0
  137. package/dist/flags/engine.js +677 -0
  138. package/dist/flags/engine.js.map +1 -0
  139. package/dist/flags/index.d.ts +4 -0
  140. package/dist/flags/index.js +16 -0
  141. package/dist/flags/index.js.map +1 -0
  142. package/dist/guard/__tests__/findings.test.js +28 -9
  143. package/dist/guard/__tests__/findings.test.js.map +1 -1
  144. package/dist/guard/__tests__/report.test.js +67 -0
  145. package/dist/guard/__tests__/report.test.js.map +1 -1
  146. package/dist/guard/base.d.ts +2 -0
  147. package/dist/guard/base.js +4 -0
  148. package/dist/guard/base.js.map +1 -1
  149. package/dist/guard/findings.d.ts +12 -2
  150. package/dist/guard/findings.js +19 -49
  151. package/dist/guard/findings.js.map +1 -1
  152. package/dist/guard/heartbeat.d.ts +34 -0
  153. package/dist/guard/heartbeat.js +83 -0
  154. package/dist/guard/heartbeat.js.map +1 -0
  155. package/dist/guard/integration.d.ts +33 -3
  156. package/dist/guard/integration.js +106 -32
  157. package/dist/guard/integration.js.map +1 -1
  158. package/dist/guard/pipeline.d.ts +10 -1
  159. package/dist/guard/pipeline.js +14 -0
  160. package/dist/guard/pipeline.js.map +1 -1
  161. package/dist/guard/report.d.ts +24 -1
  162. package/dist/guard/report.js +67 -18
  163. package/dist/guard/report.js.map +1 -1
  164. package/dist/index.d.ts +90 -0
  165. package/dist/index.js +225 -3
  166. package/dist/index.js.map +1 -1
  167. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
  168. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
  169. package/dist/instrumentation/anthropic/wrapper.js +4 -0
  170. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  171. package/dist/instrumentation/mcp/wrapper.js +7 -1
  172. package/dist/instrumentation/mcp/wrapper.js.map +1 -1
  173. package/dist/instrumentation/openai/wrapper.js +6 -0
  174. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  175. package/dist/masking.d.ts +42 -0
  176. package/dist/masking.js +197 -0
  177. package/dist/masking.js.map +1 -0
  178. package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
  179. package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
  180. package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
  181. package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
  182. package/dist/otel/__tests__/app-logs.test.js +269 -0
  183. package/dist/otel/__tests__/app-logs.test.js.map +1 -0
  184. package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
  185. package/dist/otel/__tests__/log-auto.test.js +125 -0
  186. package/dist/otel/__tests__/log-auto.test.js.map +1 -0
  187. package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
  188. package/dist/otel/__tests__/log-bridges.test.js +170 -0
  189. package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
  190. package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
  191. package/dist/otel/__tests__/system-metrics.test.js +79 -0
  192. package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
  193. package/dist/otel/app-logs.d.ts +80 -0
  194. package/dist/otel/app-logs.js +195 -0
  195. package/dist/otel/app-logs.js.map +1 -0
  196. package/dist/otel/build-info.d.ts +23 -0
  197. package/dist/otel/build-info.js +176 -0
  198. package/dist/otel/build-info.js.map +1 -0
  199. package/dist/otel/code-location.d.ts +49 -0
  200. package/dist/otel/code-location.js +233 -0
  201. package/dist/otel/code-location.js.map +1 -0
  202. package/dist/otel/events.d.ts +1 -0
  203. package/dist/otel/events.js +21 -12
  204. package/dist/otel/events.js.map +1 -1
  205. package/dist/otel/log-auto.d.ts +44 -0
  206. package/dist/otel/log-auto.js +200 -0
  207. package/dist/otel/log-auto.js.map +1 -0
  208. package/dist/otel/log-bridges.d.ts +54 -0
  209. package/dist/otel/log-bridges.js +307 -0
  210. package/dist/otel/log-bridges.js.map +1 -0
  211. package/dist/otel/system-metrics.d.ts +39 -0
  212. package/dist/otel/system-metrics.js +166 -0
  213. package/dist/otel/system-metrics.js.map +1 -0
  214. package/dist/otel/tracing.js +12 -1
  215. package/dist/otel/tracing.js.map +1 -1
  216. package/dist/pricing.json +100 -42
  217. package/dist/protect/__tests__/protect.test.d.ts +1 -0
  218. package/dist/protect/__tests__/protect.test.js +210 -0
  219. package/dist/protect/__tests__/protect.test.js.map +1 -0
  220. package/dist/protect/index.d.ts +103 -0
  221. package/dist/protect/index.js +196 -0
  222. package/dist/protect/index.js.map +1 -0
  223. package/dist/protect/mcp.d.ts +13 -0
  224. package/dist/protect/mcp.js +49 -0
  225. package/dist/protect/mcp.js.map +1 -0
  226. package/dist/protect/mode.d.ts +89 -0
  227. package/dist/protect/mode.js +134 -0
  228. package/dist/protect/mode.js.map +1 -0
  229. package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
  230. package/dist/rasp/__tests__/auto-http.test.js +136 -0
  231. package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
  232. package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
  233. package/dist/rasp/__tests__/baseline.test.js +86 -0
  234. package/dist/rasp/__tests__/baseline.test.js.map +1 -0
  235. package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
  236. package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
  237. package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
  238. package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
  239. package/dist/rasp/__tests__/capture-context.test.js +135 -0
  240. package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
  241. package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
  242. package/dist/rasp/__tests__/code-hook.test.js +218 -0
  243. package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
  244. package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
  245. package/dist/rasp/__tests__/config-client.test.js +283 -0
  246. package/dist/rasp/__tests__/config-client.test.js.map +1 -0
  247. package/dist/rasp/__tests__/corpus.d.ts +13 -0
  248. package/dist/rasp/__tests__/corpus.js +111 -0
  249. package/dist/rasp/__tests__/corpus.js.map +1 -0
  250. package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
  251. package/dist/rasp/__tests__/custom-rules.test.js +276 -0
  252. package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
  253. package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
  254. package/dist/rasp/__tests__/db-hook.test.js +438 -0
  255. package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
  256. package/dist/rasp/__tests__/deception.test.d.ts +1 -0
  257. package/dist/rasp/__tests__/deception.test.js +567 -0
  258. package/dist/rasp/__tests__/deception.test.js.map +1 -0
  259. package/dist/rasp/__tests__/detect.test.d.ts +1 -0
  260. package/dist/rasp/__tests__/detect.test.js +276 -0
  261. package/dist/rasp/__tests__/detect.test.js.map +1 -0
  262. package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
  263. package/dist/rasp/__tests__/esm-exports.test.js +20 -0
  264. package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
  265. package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
  266. package/dist/rasp/__tests__/fs-hook.test.js +241 -0
  267. package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
  268. package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
  269. package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
  270. package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
  271. package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
  272. package/dist/rasp/__tests__/hook-kit.js +139 -0
  273. package/dist/rasp/__tests__/hook-kit.js.map +1 -0
  274. package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
  275. package/dist/rasp/__tests__/http-hook.test.js +250 -0
  276. package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
  277. package/dist/rasp/__tests__/iast.test.d.ts +1 -0
  278. package/dist/rasp/__tests__/iast.test.js +361 -0
  279. package/dist/rasp/__tests__/iast.test.js.map +1 -0
  280. package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
  281. package/dist/rasp/__tests__/include-hook.test.js +122 -0
  282. package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
  283. package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
  284. package/dist/rasp/__tests__/middleware.test.js +302 -0
  285. package/dist/rasp/__tests__/middleware.test.js.map +1 -0
  286. package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
  287. package/dist/rasp/__tests__/process-hook.test.js +238 -0
  288. package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
  289. package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
  290. package/dist/rasp/__tests__/reporter.test.js +114 -0
  291. package/dist/rasp/__tests__/reporter.test.js.map +1 -0
  292. package/dist/rasp/__tests__/route.test.d.ts +1 -0
  293. package/dist/rasp/__tests__/route.test.js +46 -0
  294. package/dist/rasp/__tests__/route.test.js.map +1 -0
  295. package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
  296. package/dist/rasp/__tests__/rule-expr.test.js +151 -0
  297. package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
  298. package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
  299. package/dist/rasp/__tests__/rule-phases.test.js +271 -0
  300. package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
  301. package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
  302. package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
  303. package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
  304. package/dist/rasp/__tests__/targets.test.d.ts +1 -0
  305. package/dist/rasp/__tests__/targets.test.js +82 -0
  306. package/dist/rasp/__tests__/targets.test.js.map +1 -0
  307. package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
  308. package/dist/rasp/__tests__/template-hook.test.js +254 -0
  309. package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
  310. package/dist/rasp/__tests__/upload.test.d.ts +1 -0
  311. package/dist/rasp/__tests__/upload.test.js +81 -0
  312. package/dist/rasp/__tests__/upload.test.js.map +1 -0
  313. package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
  314. package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
  315. package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
  316. package/dist/rasp/auto-http.d.ts +6 -0
  317. package/dist/rasp/auto-http.js +194 -0
  318. package/dist/rasp/auto-http.js.map +1 -0
  319. package/dist/rasp/baseline.d.ts +35 -0
  320. package/dist/rasp/baseline.js +91 -0
  321. package/dist/rasp/baseline.js.map +1 -0
  322. package/dist/rasp/capture.d.ts +76 -0
  323. package/dist/rasp/capture.js +304 -0
  324. package/dist/rasp/capture.js.map +1 -0
  325. package/dist/rasp/config-client.d.ts +122 -0
  326. package/dist/rasp/config-client.js +337 -0
  327. package/dist/rasp/config-client.js.map +1 -0
  328. package/dist/rasp/context.d.ts +65 -0
  329. package/dist/rasp/context.js +68 -0
  330. package/dist/rasp/context.js.map +1 -0
  331. package/dist/rasp/custom-rules.d.ts +68 -0
  332. package/dist/rasp/custom-rules.js +222 -0
  333. package/dist/rasp/custom-rules.js.map +1 -0
  334. package/dist/rasp/data/default-rules.json +199 -0
  335. package/dist/rasp/data/default-sinks.json +4 -0
  336. package/dist/rasp/data/dnslog-domains.json +11 -0
  337. package/dist/rasp/deception.d.ts +70 -0
  338. package/dist/rasp/deception.js +220 -0
  339. package/dist/rasp/deception.js.map +1 -0
  340. package/dist/rasp/detect.d.ts +68 -0
  341. package/dist/rasp/detect.js +671 -0
  342. package/dist/rasp/detect.js.map +1 -0
  343. package/dist/rasp/engine.d.ts +107 -0
  344. package/dist/rasp/engine.js +330 -0
  345. package/dist/rasp/engine.js.map +1 -0
  346. package/dist/rasp/hooks/code.d.ts +20 -0
  347. package/dist/rasp/hooks/code.js +334 -0
  348. package/dist/rasp/hooks/code.js.map +1 -0
  349. package/dist/rasp/hooks/db.d.ts +48 -0
  350. package/dist/rasp/hooks/db.js +322 -0
  351. package/dist/rasp/hooks/db.js.map +1 -0
  352. package/dist/rasp/hooks/esm.d.ts +7 -0
  353. package/dist/rasp/hooks/esm.js +18 -0
  354. package/dist/rasp/hooks/esm.js.map +1 -0
  355. package/dist/rasp/hooks/fs.d.ts +3 -0
  356. package/dist/rasp/hooks/fs.js +206 -0
  357. package/dist/rasp/hooks/fs.js.map +1 -0
  358. package/dist/rasp/hooks/http.d.ts +4 -0
  359. package/dist/rasp/hooks/http.js +213 -0
  360. package/dist/rasp/hooks/http.js.map +1 -0
  361. package/dist/rasp/hooks/include.d.ts +9 -0
  362. package/dist/rasp/hooks/include.js +79 -0
  363. package/dist/rasp/hooks/include.js.map +1 -0
  364. package/dist/rasp/hooks/marks.d.ts +2 -0
  365. package/dist/rasp/hooks/marks.js +16 -0
  366. package/dist/rasp/hooks/marks.js.map +1 -0
  367. package/dist/rasp/hooks/process.d.ts +22 -0
  368. package/dist/rasp/hooks/process.js +191 -0
  369. package/dist/rasp/hooks/process.js.map +1 -0
  370. package/dist/rasp/hooks/sinks.d.ts +54 -0
  371. package/dist/rasp/hooks/sinks.js +329 -0
  372. package/dist/rasp/hooks/sinks.js.map +1 -0
  373. package/dist/rasp/hooks/template.d.ts +21 -0
  374. package/dist/rasp/hooks/template.js +152 -0
  375. package/dist/rasp/hooks/template.js.map +1 -0
  376. package/dist/rasp/iast-rules.d.ts +82 -0
  377. package/dist/rasp/iast-rules.js +240 -0
  378. package/dist/rasp/iast-rules.js.map +1 -0
  379. package/dist/rasp/iast-scope.d.ts +29 -0
  380. package/dist/rasp/iast-scope.js +54 -0
  381. package/dist/rasp/iast-scope.js.map +1 -0
  382. package/dist/rasp/iast.d.ts +81 -0
  383. package/dist/rasp/iast.js +272 -0
  384. package/dist/rasp/iast.js.map +1 -0
  385. package/dist/rasp/index.d.ts +52 -0
  386. package/dist/rasp/index.js +280 -0
  387. package/dist/rasp/index.js.map +1 -0
  388. package/dist/rasp/lexers.d.ts +32 -0
  389. package/dist/rasp/lexers.js +444 -0
  390. package/dist/rasp/lexers.js.map +1 -0
  391. package/dist/rasp/middleware.d.ts +155 -0
  392. package/dist/rasp/middleware.js +568 -0
  393. package/dist/rasp/middleware.js.map +1 -0
  394. package/dist/rasp/model-output.d.ts +14 -0
  395. package/dist/rasp/model-output.js +107 -0
  396. package/dist/rasp/model-output.js.map +1 -0
  397. package/dist/rasp/normalize.d.ts +23 -0
  398. package/dist/rasp/normalize.js +140 -0
  399. package/dist/rasp/normalize.js.map +1 -0
  400. package/dist/rasp/reporter.d.ts +60 -0
  401. package/dist/rasp/reporter.js +230 -0
  402. package/dist/rasp/reporter.js.map +1 -0
  403. package/dist/rasp/rule-expr.d.ts +236 -0
  404. package/dist/rasp/rule-expr.js +1253 -0
  405. package/dist/rasp/rule-expr.js.map +1 -0
  406. package/dist/rasp/template.d.ts +53 -0
  407. package/dist/rasp/template.js +336 -0
  408. package/dist/rasp/template.js.map +1 -0
  409. package/dist/rasp/types.d.ts +110 -0
  410. package/dist/rasp/types.js +51 -0
  411. package/dist/rasp/types.js.map +1 -0
  412. package/dist/rasp/vpatch.d.ts +55 -0
  413. package/dist/rasp/vpatch.js +120 -0
  414. package/dist/rasp/vpatch.js.map +1 -0
  415. package/dist/register.js +52 -11
  416. package/dist/register.js.map +1 -1
  417. package/dist/semantic-convention.d.ts +2 -0
  418. package/dist/semantic-convention.js +5 -0
  419. package/dist/semantic-convention.js.map +1 -1
  420. package/dist/types.d.ts +96 -0
  421. package/dist/zero-code.d.ts +8 -0
  422. package/dist/zero-code.js +38 -0
  423. package/dist/zero-code.js.map +1 -0
  424. package/package.json +18 -2
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_BODY_LENGTH = exports.DEFAULT_MAX_PER_SECOND = exports.DEFAULT_LOGGER_NAME = exports.DEFAULT_LOG_LEVEL = void 0;
4
+ exports.createLimiter = createLimiter;
5
+ exports.isOwnScope = isOwnScope;
6
+ exports.maskAttribute = maskAttribute;
7
+ exports.resolveCaptureLogs = resolveCaptureLogs;
8
+ exports.resolveLogLevel = resolveLogLevel;
9
+ exports.enableAppLogs = enableAppLogs;
10
+ exports.disableAppLogs = disableAppLogs;
11
+ exports.appLogsEnabled = appLogsEnabled;
12
+ exports.createLogger = createLogger;
13
+ /**
14
+ * Application logs to Shield360, when asked for.
15
+ *
16
+ * Shield360 ingests OTLP logs on the same per-API-key route as traces. The
17
+ * logger here writes OpenTelemetry log records through the SDK's own
18
+ * LoggerProvider (otel/events.ts), so they go to the same destination with the
19
+ * same Authorization header as the spans, and carry the trace and span ids of
20
+ * whatever span is active when they are written.
21
+ *
22
+ * Nothing is sent unless it is turned on: `captureLogs: true` in init(), or
23
+ * SHIELD360_CAPTURE_LOGS=true. Until then every logger is a no-op, so a
24
+ * library can create one at import time without deciding for the application.
25
+ *
26
+ * Every record, from Shield360.logger() or a bridge (log-bridges.ts), passes
27
+ * the same checks as the Python SDK's handler: the level; never the SDK's own
28
+ * scopes (`shield360`, `opentelemetry`); at most `maxPerSecond` records a
29
+ * second per logger (500 by default); masking by the contract every SDK
30
+ * shares (sdk/rasp/README.md, "Masking"): credential pairs, bearer
31
+ * credentials and opaque tokens in the body and attributes, the whole value of
32
+ * an attribute named like a credential, lists and maps item by item, readable
33
+ * identifiers kept (not `code.*` or `exception.type`); the body and stack
34
+ * trace cut to 16,384 characters after masking, other strings to 4,096; and
35
+ * the application call site as `code.function.name`,
36
+ * `code.file.path` and `code.line.number` unless captureCodeLocation is off.
37
+ */
38
+ const api_logs_1 = require("@opentelemetry/api-logs");
39
+ const masking_1 = require("../masking");
40
+ const code_location_1 = require("./code-location");
41
+ const utils_1 = require("./utils");
42
+ // The OpenTelemetry log data model's severity numbers and short names.
43
+ const SEVERITY = {
44
+ debug: api_logs_1.SeverityNumber.DEBUG,
45
+ info: api_logs_1.SeverityNumber.INFO,
46
+ warn: api_logs_1.SeverityNumber.WARN,
47
+ error: api_logs_1.SeverityNumber.ERROR,
48
+ fatal: api_logs_1.SeverityNumber.FATAL,
49
+ };
50
+ const SEVERITY_TEXT = {
51
+ debug: 'DEBUG',
52
+ info: 'INFO',
53
+ warn: 'WARN',
54
+ error: 'ERROR',
55
+ fatal: 'FATAL',
56
+ };
57
+ const LEVEL_ALIASES = { warning: 'warn', critical: 'fatal' };
58
+ exports.DEFAULT_LOG_LEVEL = 'info';
59
+ exports.DEFAULT_LOGGER_NAME = 'app';
60
+ exports.DEFAULT_MAX_PER_SECOND = 500;
61
+ exports.MAX_BODY_LENGTH = 16384;
62
+ exports.MAX_ATTRIBUTE_LENGTH = 4096;
63
+ const OWN_SCOPES = ['shield360', 'opentelemetry', '@opentelemetry'];
64
+ const LONG_ATTRIBUTES = new Set(['exception.stacktrace']);
65
+ const UNMASKED_ATTRIBUTES = new Set(['exception.type']);
66
+ const STACK_LIMIT = 64;
67
+ let provider = null;
68
+ let minSeverity = SEVERITY[exports.DEFAULT_LOG_LEVEL];
69
+ let locator = null;
70
+ /** A fixed-window limiter: true for at most `maxPerSecond` calls in each second. */
71
+ function createLimiter(maxPerSecond = exports.DEFAULT_MAX_PER_SECOND, now = Date.now) {
72
+ let windowStart = 0;
73
+ let count = 0;
74
+ return () => {
75
+ const t = now();
76
+ if (t - windowStart >= 1000) {
77
+ windowStart = t;
78
+ count = 0;
79
+ }
80
+ count += 1;
81
+ return count <= maxPerSecond;
82
+ };
83
+ }
84
+ /** Whether a scope is the SDK's own (`shield360`, `opentelemetry`, or below them). */
85
+ function isOwnScope(name) {
86
+ const lower = name.toLowerCase();
87
+ return OWN_SCOPES.some((own) => lower === own || lower.startsWith(own + '.') || lower.startsWith(own + '/'));
88
+ }
89
+ /**
90
+ * An attribute value as it may leave the process (sdk/rasp/README.md, Masking):
91
+ * the whole value under a credential name, strings masked then cut, lists and
92
+ * maps item by item; code.* and exception.type as they are.
93
+ */
94
+ function maskAttribute(key, value) {
95
+ if (key.startsWith('code.') || UNMASKED_ATTRIBUTES.has(key))
96
+ return value;
97
+ return (0, masking_1.maskValue)(key, value, LONG_ATTRIBUTES.has(key) ? exports.MAX_BODY_LENGTH : exports.MAX_ATTRIBUTE_LENGTH);
98
+ }
99
+ function captureStack() {
100
+ const previous = Error.stackTraceLimit;
101
+ try {
102
+ Error.stackTraceLimit = STACK_LIMIT;
103
+ return new Error().stack;
104
+ }
105
+ finally {
106
+ Error.stackTraceLimit = previous;
107
+ }
108
+ }
109
+ /** The option, else SHIELD360_CAPTURE_LOGS, else off. */
110
+ function resolveCaptureLogs(option) {
111
+ return option ?? (0, utils_1.parseBoolEnv)('SHIELD360_CAPTURE_LOGS') ?? false;
112
+ }
113
+ /** The option, else SHIELD360_LOG_LEVEL, else `info`. Unknown names fall back to `info`. */
114
+ function resolveLogLevel(option) {
115
+ const raw = (option ?? process.env.SHIELD360_LOG_LEVEL ?? exports.DEFAULT_LOG_LEVEL).trim().toLowerCase();
116
+ const name = LEVEL_ALIASES[raw] ?? raw;
117
+ return name in SEVERITY ? name : exports.DEFAULT_LOG_LEVEL;
118
+ }
119
+ /** Start sending: records at `level` and above go through `logProvider`. */
120
+ function enableAppLogs(logProvider, level = exports.DEFAULT_LOG_LEVEL, options = {}) {
121
+ provider = logProvider;
122
+ minSeverity = SEVERITY[level];
123
+ locator = options.captureCodeLocation === false ? null : new code_location_1.CodeLocationSpanProcessor({ codeRoot: options.codeRoot });
124
+ }
125
+ /** Stop sending; every logger goes back to a no-op. */
126
+ function disableAppLogs() {
127
+ provider = null;
128
+ minSeverity = SEVERITY[exports.DEFAULT_LOG_LEVEL];
129
+ locator = null;
130
+ }
131
+ function appLogsEnabled() {
132
+ return provider !== null;
133
+ }
134
+ function emit(scope, level, allow, message, attributes) {
135
+ const current = provider;
136
+ if (!current || SEVERITY[level] < minSeverity || isOwnScope(scope))
137
+ return;
138
+ try {
139
+ if (!allow())
140
+ return;
141
+ const given = { ...(attributes ?? {}) };
142
+ let body;
143
+ if (message instanceof Error) {
144
+ body = message.message;
145
+ given['exception.type'] = message.name;
146
+ given['exception.message'] = message.message;
147
+ if (message.stack)
148
+ given['exception.stacktrace'] = message.stack;
149
+ }
150
+ else {
151
+ body = String(message);
152
+ }
153
+ const where = locator;
154
+ if (where && given[code_location_1.ATTR_CODE_FILE_PATH] === undefined) {
155
+ const frame = where.findApplicationFrame(captureStack());
156
+ if (frame) {
157
+ if (frame.functionName)
158
+ given[code_location_1.ATTR_CODE_FUNCTION_NAME] = frame.functionName;
159
+ given[code_location_1.ATTR_CODE_FILE_PATH] = frame.filePath;
160
+ given[code_location_1.ATTR_CODE_LINE_NUMBER] = frame.lineNumber;
161
+ }
162
+ }
163
+ const attrs = {};
164
+ for (const [key, value] of Object.entries(given))
165
+ attrs[key] = maskAttribute(key, value);
166
+ // No context is passed: the logs SDK takes the active one, which links the
167
+ // record to the active span's trace and span ids.
168
+ current.getLogger(scope).emit({
169
+ severityNumber: SEVERITY[level],
170
+ severityText: SEVERITY_TEXT[level],
171
+ body: (0, masking_1.maskText)(body, exports.MAX_BODY_LENGTH),
172
+ attributes: attrs,
173
+ });
174
+ }
175
+ catch {
176
+ // Logging never throws into the application.
177
+ }
178
+ }
179
+ /**
180
+ * A logger whose records go to Shield360 when application logs are on
181
+ * (`captureLogs: true` or SHIELD360_CAPTURE_LOGS=true), and nowhere otherwise.
182
+ * `name` becomes the record's instrumentation scope; it defaults to `app`.
183
+ */
184
+ function createLogger(name = exports.DEFAULT_LOGGER_NAME, options = {}) {
185
+ const scope = name || exports.DEFAULT_LOGGER_NAME;
186
+ const allow = createLimiter(options.maxPerSecond);
187
+ return {
188
+ debug: (message, attributes) => emit(scope, 'debug', allow, message, attributes),
189
+ info: (message, attributes) => emit(scope, 'info', allow, message, attributes),
190
+ warn: (message, attributes) => emit(scope, 'warn', allow, message, attributes),
191
+ error: (message, attributes) => emit(scope, 'error', allow, message, attributes),
192
+ fatal: (message, attributes) => emit(scope, 'fatal', allow, message, attributes),
193
+ };
194
+ }
195
+ //# sourceMappingURL=app-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-logs.js","sourceRoot":"","sources":["../../src/otel/app-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Build and VCS resource attributes (service.version, vcs.*), resolved once
3
+ * at init. Per attribute, the first valid value wins from: explicit config
4
+ * (init option, SHIELD360_* env — SHIELD360_SERVICE_VERSION, then its alias
5
+ * SHIELD360_RELEASE, for service.version), OTel env (OTEL_SERVICE_VERSION,
6
+ * OTEL_RESOURCE_ATTRIBUTES), then CI/platform env. CI values come from a
7
+ * single provider and are never mixed across providers.
8
+ * Values are never logged.
9
+ */
10
+ export declare const ATTR_SERVICE_VERSION = "service.version";
11
+ export declare const ATTR_VCS_REVISION = "vcs.ref.head.revision";
12
+ export declare const ATTR_VCS_REPOSITORY_URL = "vcs.repository.url.full";
13
+ export declare const ATTR_VCS_REF_NAME = "vcs.ref.head.name";
14
+ type Env = Record<string, string | undefined>;
15
+ export declare function sanitiseRevision(value: string | undefined): string | undefined;
16
+ export declare function sanitiseText(value: string | undefined): string | undefined;
17
+ /** Normalise to https://host/owner/repo (http stays http), with credentials removed. */
18
+ export declare function sanitiseRepositoryUrl(value: string | undefined): string | undefined;
19
+ export declare function parseOtelResourceAttributes(value: string | undefined): Record<string, string>;
20
+ export declare function resolveBuildAttributes(options?: {
21
+ serviceVersion?: string;
22
+ }, env?: Env): Record<string, string>;
23
+ export {};
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ /**
3
+ * Build and VCS resource attributes (service.version, vcs.*), resolved once
4
+ * at init. Per attribute, the first valid value wins from: explicit config
5
+ * (init option, SHIELD360_* env — SHIELD360_SERVICE_VERSION, then its alias
6
+ * SHIELD360_RELEASE, for service.version), OTel env (OTEL_SERVICE_VERSION,
7
+ * OTEL_RESOURCE_ATTRIBUTES), then CI/platform env. CI values come from a
8
+ * single provider and are never mixed across providers.
9
+ * Values are never logged.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ATTR_VCS_REF_NAME = exports.ATTR_VCS_REPOSITORY_URL = exports.ATTR_VCS_REVISION = exports.ATTR_SERVICE_VERSION = void 0;
13
+ exports.sanitiseRevision = sanitiseRevision;
14
+ exports.sanitiseText = sanitiseText;
15
+ exports.sanitiseRepositoryUrl = sanitiseRepositoryUrl;
16
+ exports.parseOtelResourceAttributes = parseOtelResourceAttributes;
17
+ exports.resolveBuildAttributes = resolveBuildAttributes;
18
+ exports.ATTR_SERVICE_VERSION = 'service.version';
19
+ exports.ATTR_VCS_REVISION = 'vcs.ref.head.revision';
20
+ exports.ATTR_VCS_REPOSITORY_URL = 'vcs.repository.url.full';
21
+ exports.ATTR_VCS_REF_NAME = 'vcs.ref.head.name';
22
+ const MAX_TEXT = 256;
23
+ const HOST_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
24
+ function sanitiseRevision(value) {
25
+ const v = value?.trim();
26
+ return v && /^[0-9a-fA-F]{7,64}$/.test(v) ? v.toLowerCase() : undefined;
27
+ }
28
+ function sanitiseText(value) {
29
+ // eslint-disable-next-line no-control-regex
30
+ const v = value?.replace(/[\u0000-\u001f\u007f-\u009f]/g, '').trim().slice(0, MAX_TEXT);
31
+ return v || undefined;
32
+ }
33
+ /** Normalise to https://host/owner/repo (http stays http), with credentials removed. */
34
+ function sanitiseRepositoryUrl(value) {
35
+ const v = value?.trim();
36
+ if (!v)
37
+ return undefined;
38
+ let scheme = 'https';
39
+ let hostname;
40
+ let port = '';
41
+ let path;
42
+ const scp = /^[^@/\s]+@([^:/\s]+):(?!\/)([^?#]+)/.exec(v);
43
+ if (scp) {
44
+ [, hostname, path] = scp;
45
+ }
46
+ else {
47
+ let url;
48
+ try {
49
+ url = new URL(v);
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ const protocol = url.protocol.slice(0, -1);
55
+ if (!['https', 'http', 'ssh', 'git'].includes(protocol))
56
+ return undefined;
57
+ if (protocol === 'http')
58
+ scheme = 'http';
59
+ // The port is kept for web URLs and dropped for ssh/git transports.
60
+ if (protocol === 'https' || protocol === 'http')
61
+ port = url.port;
62
+ hostname = url.hostname;
63
+ path = url.pathname;
64
+ }
65
+ if (!HOST_RE.test(hostname))
66
+ return undefined;
67
+ path = path.replace(/^\/+|\/+$/g, '').replace(/\.git$/, '').replace(/\/+$/, '');
68
+ if (!path)
69
+ return undefined;
70
+ return `${scheme}://${hostname.toLowerCase()}${port ? `:${port}` : ''}/${path}`;
71
+ }
72
+ function strip(prefix, value) {
73
+ return value?.startsWith(prefix) ? value.slice(prefix.length) : value;
74
+ }
75
+ const VERCEL_HOSTS = {
76
+ github: 'github.com',
77
+ gitlab: 'gitlab.com',
78
+ bitbucket: 'bitbucket.org',
79
+ };
80
+ /** CI providers in priority order; repo and ref come only from the chosen one. */
81
+ const CI_PROVIDERS = [
82
+ (e) => ({
83
+ revision: e.GITHUB_SHA,
84
+ repo: e.GITHUB_REPOSITORY
85
+ ? `${e.GITHUB_SERVER_URL || 'https://github.com'}/${e.GITHUB_REPOSITORY}`
86
+ : undefined,
87
+ ref: e.GITHUB_HEAD_REF || e.GITHUB_REF_NAME,
88
+ }),
89
+ (e) => ({ revision: e.CI_COMMIT_SHA, repo: e.CI_PROJECT_URL, ref: e.CI_COMMIT_REF_NAME }),
90
+ (e) => {
91
+ const host = VERCEL_HOSTS[(e.VERCEL_GIT_PROVIDER || '').toLowerCase()];
92
+ const owner = e.VERCEL_GIT_REPO_OWNER;
93
+ const slug = e.VERCEL_GIT_REPO_SLUG;
94
+ return {
95
+ revision: e.VERCEL_GIT_COMMIT_SHA,
96
+ repo: host && owner && slug ? `https://${host}/${owner}/${slug}` : undefined,
97
+ ref: e.VERCEL_GIT_COMMIT_REF,
98
+ };
99
+ },
100
+ (e) => ({ revision: e.COMMIT_REF, repo: e.REPOSITORY_URL, ref: e.BRANCH }),
101
+ (e) => ({ revision: e.RENDER_GIT_COMMIT, ref: e.RENDER_GIT_BRANCH }),
102
+ (e) => ({
103
+ revision: e.RAILWAY_GIT_COMMIT_SHA,
104
+ repo: e.RAILWAY_GIT_REPO_OWNER && e.RAILWAY_GIT_REPO_NAME
105
+ ? `https://github.com/${e.RAILWAY_GIT_REPO_OWNER}/${e.RAILWAY_GIT_REPO_NAME}`
106
+ : undefined,
107
+ ref: e.RAILWAY_GIT_BRANCH,
108
+ }),
109
+ (e) => ({ revision: e.HEROKU_SLUG_COMMIT || e.SOURCE_VERSION }),
110
+ (e) => ({
111
+ revision: e.CODEBUILD_RESOLVED_SOURCE_VERSION,
112
+ repo: e.CODEBUILD_SOURCE_REPO_URL,
113
+ ref: strip('refs/heads/', e.CODEBUILD_WEBHOOK_HEAD_REF),
114
+ }),
115
+ (e) => ({ revision: e.BUILDKITE_COMMIT, repo: e.BUILDKITE_REPO, ref: e.BUILDKITE_BRANCH }),
116
+ (e) => ({ revision: e.CIRCLE_SHA1, repo: e.CIRCLE_REPOSITORY_URL, ref: e.CIRCLE_BRANCH }),
117
+ (e) => ({
118
+ revision: e.BITBUCKET_COMMIT,
119
+ repo: e.BITBUCKET_GIT_HTTP_ORIGIN,
120
+ ref: e.BITBUCKET_BRANCH,
121
+ }),
122
+ (e) => ({
123
+ revision: e.BUILD_SOURCEVERSION,
124
+ repo: e.BUILD_REPOSITORY_URI,
125
+ ref: e.BUILD_SOURCEBRANCHNAME,
126
+ }),
127
+ (e) => ({ revision: e.GIT_COMMIT, repo: e.GIT_URL, ref: strip('origin/', e.GIT_BRANCH) }),
128
+ ];
129
+ function ciCandidates(env) {
130
+ for (const provider of CI_PROVIDERS) {
131
+ const c = provider(env);
132
+ if (c.revision)
133
+ return c;
134
+ }
135
+ return {};
136
+ }
137
+ function parseOtelResourceAttributes(value) {
138
+ const attrs = {};
139
+ for (const item of (value || '').split(',')) {
140
+ const eq = item.indexOf('=');
141
+ if (eq <= 0)
142
+ continue;
143
+ try {
144
+ attrs[item.slice(0, eq).trim()] = decodeURIComponent(item.slice(eq + 1).trim());
145
+ }
146
+ catch {
147
+ // Skip values that are not valid percent-encoding.
148
+ }
149
+ }
150
+ return attrs;
151
+ }
152
+ function firstValid(sanitise, ...values) {
153
+ for (const value of values) {
154
+ const v = sanitise(value);
155
+ if (v)
156
+ return v;
157
+ }
158
+ return undefined;
159
+ }
160
+ function resolveBuildAttributes(options = {}, env = process.env) {
161
+ const ci = ciCandidates(env);
162
+ const otel = parseOtelResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
163
+ const resolved = {
164
+ [exports.ATTR_SERVICE_VERSION]: firstValid(sanitiseText, options.serviceVersion, env.SHIELD360_SERVICE_VERSION, env.SHIELD360_RELEASE, env.OTEL_SERVICE_VERSION, otel[exports.ATTR_SERVICE_VERSION]),
165
+ [exports.ATTR_VCS_REVISION]: firstValid(sanitiseRevision, env.SHIELD360_GIT_COMMIT, otel[exports.ATTR_VCS_REVISION], ci.revision),
166
+ [exports.ATTR_VCS_REPOSITORY_URL]: firstValid(sanitiseRepositoryUrl, env.SHIELD360_GIT_REPOSITORY_URL, otel[exports.ATTR_VCS_REPOSITORY_URL], ci.repo),
167
+ [exports.ATTR_VCS_REF_NAME]: firstValid(sanitiseText, env.SHIELD360_GIT_BRANCH, otel[exports.ATTR_VCS_REF_NAME], ci.ref),
168
+ };
169
+ const attrs = {};
170
+ for (const [key, value] of Object.entries(resolved)) {
171
+ if (value)
172
+ attrs[key] = value;
173
+ }
174
+ return attrs;
175
+ }
176
+ //# sourceMappingURL=build-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-info.js","sourceRoot":"","sources":["../../src/otel/build-info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { Context } from '@opentelemetry/api';
2
+ import type { ReadableSpan, Span, SpanProcessor } from '@opentelemetry/sdk-trace-node';
3
+ export declare const ATTR_CODE_FUNCTION_NAME = "code.function.name";
4
+ export declare const ATTR_CODE_FILE_PATH = "code.file.path";
5
+ export declare const ATTR_CODE_LINE_NUMBER = "code.line.number";
6
+ export interface CodeLocationOptions {
7
+ codeRoot?: string;
8
+ cwd?: string;
9
+ home?: string;
10
+ }
11
+ interface Frame {
12
+ functionName?: string;
13
+ filePath: string;
14
+ lineNumber: number;
15
+ }
16
+ /** captureCodeLocation option wins; otherwise SHIELD360_CAPTURE_CODE_LOCATION; default on. */
17
+ export declare function resolveCaptureCodeLocation(option?: boolean): boolean;
18
+ /**
19
+ * Drops the first home directory or CI workspace prefix of an absolute path:
20
+ * the last resort for a path under no code root, repository, working directory
21
+ * or the current user's home. Other absolute paths (/srv/app/...) are kept.
22
+ */
23
+ export declare function anonymiseAbsolutePath(path: string): string;
24
+ export declare class PathNormaliser {
25
+ private readonly codeRoot?;
26
+ private readonly cwd;
27
+ private readonly home;
28
+ private readonly gitDirs;
29
+ constructor(options?: CodeLocationOptions);
30
+ /** Repo-relative path for a stack-frame file (path or file:// URL). */
31
+ normalise(file: string): string;
32
+ /** Nearest ancestor containing .git; each directory is probed at most once. */
33
+ private gitRoot;
34
+ }
35
+ export declare class CodeLocationSpanProcessor implements SpanProcessor {
36
+ private readonly normaliser;
37
+ private readonly cache;
38
+ constructor(options?: CodeLocationOptions);
39
+ onStart(span: Span, _parentContext: Context): void;
40
+ /** Visible for tests: number of cached frame lines. */
41
+ get cacheSize(): number;
42
+ /** First application frame in a V8 stack string. */
43
+ findApplicationFrame(stack: string | undefined): Frame | undefined;
44
+ private parseLine;
45
+ onEnd(_span: ReadableSpan): void;
46
+ forceFlush(): Promise<void>;
47
+ shutdown(): Promise<void>;
48
+ }
49
+ export {};