@mitre/hdf-converters 2.13.0 → 3.0.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 (934) hide show
  1. package/README.md +139 -57
  2. package/dist/converters/aws-config-to-hdf/typescript/converter.d.ts +9 -0
  3. package/dist/converters/aws-config-to-hdf/typescript/converter.d.ts.map +1 -0
  4. package/dist/converters/aws-config-to-hdf/typescript/converter.js +132 -0
  5. package/dist/converters/aws-config-to-hdf/typescript/converter.js.map +1 -0
  6. package/dist/converters/aws-config-to-hdf/typescript/fingerprint.d.ts +10 -0
  7. package/dist/converters/aws-config-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  8. package/dist/converters/aws-config-to-hdf/typescript/fingerprint.js +32 -0
  9. package/dist/converters/aws-config-to-hdf/typescript/fingerprint.js.map +1 -0
  10. package/dist/converters/aws-config-to-hdf/typescript/index.d.ts +2 -0
  11. package/dist/converters/aws-config-to-hdf/typescript/index.d.ts.map +1 -0
  12. package/dist/converters/aws-config-to-hdf/typescript/index.js +2 -0
  13. package/dist/converters/aws-config-to-hdf/typescript/index.js.map +1 -0
  14. package/dist/converters/burpsuite-to-hdf/typescript/converter.d.ts +11 -0
  15. package/dist/converters/burpsuite-to-hdf/typescript/converter.d.ts.map +1 -0
  16. package/dist/converters/burpsuite-to-hdf/typescript/converter.js +169 -0
  17. package/dist/converters/burpsuite-to-hdf/typescript/converter.js.map +1 -0
  18. package/dist/converters/burpsuite-to-hdf/typescript/fingerprint.d.ts +9 -0
  19. package/dist/converters/burpsuite-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  20. package/dist/converters/burpsuite-to-hdf/typescript/fingerprint.js +33 -0
  21. package/dist/converters/burpsuite-to-hdf/typescript/fingerprint.js.map +1 -0
  22. package/dist/converters/burpsuite-to-hdf/typescript/index.d.ts +2 -0
  23. package/dist/converters/burpsuite-to-hdf/typescript/index.d.ts.map +1 -0
  24. package/dist/converters/burpsuite-to-hdf/typescript/index.js +2 -0
  25. package/dist/converters/burpsuite-to-hdf/typescript/index.js.map +1 -0
  26. package/dist/converters/conveyor-to-hdf/typescript/converter.d.ts +9 -0
  27. package/dist/converters/conveyor-to-hdf/typescript/converter.d.ts.map +1 -0
  28. package/dist/converters/conveyor-to-hdf/typescript/converter.js +206 -0
  29. package/dist/converters/conveyor-to-hdf/typescript/converter.js.map +1 -0
  30. package/dist/converters/conveyor-to-hdf/typescript/fingerprint.d.ts +10 -0
  31. package/dist/converters/conveyor-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  32. package/dist/converters/conveyor-to-hdf/typescript/fingerprint.js +37 -0
  33. package/dist/converters/conveyor-to-hdf/typescript/fingerprint.js.map +1 -0
  34. package/dist/converters/conveyor-to-hdf/typescript/index.d.ts +2 -0
  35. package/dist/converters/conveyor-to-hdf/typescript/index.d.ts.map +1 -0
  36. package/dist/converters/conveyor-to-hdf/typescript/index.js +2 -0
  37. package/dist/converters/conveyor-to-hdf/typescript/index.js.map +1 -0
  38. package/dist/converters/cyclonedx-to-hdf/typescript/converter.d.ts +8 -0
  39. package/dist/converters/cyclonedx-to-hdf/typescript/converter.d.ts.map +1 -0
  40. package/dist/converters/cyclonedx-to-hdf/typescript/converter.js +199 -0
  41. package/dist/converters/cyclonedx-to-hdf/typescript/converter.js.map +1 -0
  42. package/dist/converters/cyclonedx-to-hdf/typescript/fingerprint.d.ts +10 -0
  43. package/dist/converters/cyclonedx-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  44. package/dist/converters/cyclonedx-to-hdf/typescript/fingerprint.js +34 -0
  45. package/dist/converters/cyclonedx-to-hdf/typescript/fingerprint.js.map +1 -0
  46. package/dist/converters/cyclonedx-to-hdf/typescript/index.d.ts +2 -0
  47. package/dist/converters/cyclonedx-to-hdf/typescript/index.d.ts.map +1 -0
  48. package/dist/converters/cyclonedx-to-hdf/typescript/index.js +2 -0
  49. package/dist/converters/cyclonedx-to-hdf/typescript/index.js.map +1 -0
  50. package/dist/converters/dbprotect-to-hdf/typescript/converter.d.ts +10 -0
  51. package/dist/converters/dbprotect-to-hdf/typescript/converter.d.ts.map +1 -0
  52. package/dist/converters/dbprotect-to-hdf/typescript/converter.js +171 -0
  53. package/dist/converters/dbprotect-to-hdf/typescript/converter.js.map +1 -0
  54. package/dist/converters/dbprotect-to-hdf/typescript/fingerprint.d.ts +10 -0
  55. package/dist/converters/dbprotect-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  56. package/dist/converters/dbprotect-to-hdf/typescript/fingerprint.js +35 -0
  57. package/dist/converters/dbprotect-to-hdf/typescript/fingerprint.js.map +1 -0
  58. package/dist/converters/dbprotect-to-hdf/typescript/index.d.ts +2 -0
  59. package/dist/converters/dbprotect-to-hdf/typescript/index.d.ts.map +1 -0
  60. package/dist/converters/dbprotect-to-hdf/typescript/index.js +2 -0
  61. package/dist/converters/dbprotect-to-hdf/typescript/index.js.map +1 -0
  62. package/dist/converters/deptrack-to-hdf/typescript/converter.d.ts +8 -0
  63. package/dist/converters/deptrack-to-hdf/typescript/converter.d.ts.map +1 -0
  64. package/dist/converters/deptrack-to-hdf/typescript/converter.js +120 -0
  65. package/dist/converters/deptrack-to-hdf/typescript/converter.js.map +1 -0
  66. package/dist/converters/deptrack-to-hdf/typescript/fingerprint.d.ts +10 -0
  67. package/dist/converters/deptrack-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  68. package/dist/converters/deptrack-to-hdf/typescript/fingerprint.js +46 -0
  69. package/dist/converters/deptrack-to-hdf/typescript/fingerprint.js.map +1 -0
  70. package/dist/converters/deptrack-to-hdf/typescript/index.d.ts +2 -0
  71. package/dist/converters/deptrack-to-hdf/typescript/index.d.ts.map +1 -0
  72. package/dist/converters/deptrack-to-hdf/typescript/index.js +2 -0
  73. package/dist/converters/deptrack-to-hdf/typescript/index.js.map +1 -0
  74. package/dist/converters/fortify-to-hdf/typescript/converter.d.ts +12 -0
  75. package/dist/converters/fortify-to-hdf/typescript/converter.d.ts.map +1 -0
  76. package/dist/converters/fortify-to-hdf/typescript/converter.js +211 -0
  77. package/dist/converters/fortify-to-hdf/typescript/converter.js.map +1 -0
  78. package/dist/converters/fortify-to-hdf/typescript/fingerprint.d.ts +11 -0
  79. package/dist/converters/fortify-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  80. package/dist/converters/fortify-to-hdf/typescript/fingerprint.js +42 -0
  81. package/dist/converters/fortify-to-hdf/typescript/fingerprint.js.map +1 -0
  82. package/dist/converters/fortify-to-hdf/typescript/index.d.ts +2 -0
  83. package/dist/converters/fortify-to-hdf/typescript/index.d.ts.map +1 -0
  84. package/dist/converters/fortify-to-hdf/typescript/index.js +2 -0
  85. package/dist/converters/fortify-to-hdf/typescript/index.js.map +1 -0
  86. package/dist/converters/gitlab-to-hdf/typescript/converter.d.ts +2 -0
  87. package/dist/converters/gitlab-to-hdf/typescript/converter.d.ts.map +1 -0
  88. package/dist/converters/gitlab-to-hdf/typescript/converter.js +222 -0
  89. package/dist/converters/gitlab-to-hdf/typescript/converter.js.map +1 -0
  90. package/dist/converters/gitlab-to-hdf/typescript/fingerprint.d.ts +10 -0
  91. package/dist/converters/gitlab-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  92. package/dist/converters/gitlab-to-hdf/typescript/fingerprint.js +37 -0
  93. package/dist/converters/gitlab-to-hdf/typescript/fingerprint.js.map +1 -0
  94. package/dist/converters/gitlab-to-hdf/typescript/index.d.ts +2 -0
  95. package/dist/converters/gitlab-to-hdf/typescript/index.d.ts.map +1 -0
  96. package/dist/converters/gitlab-to-hdf/typescript/index.js +2 -0
  97. package/dist/converters/gitlab-to-hdf/typescript/index.js.map +1 -0
  98. package/dist/converters/gosec-to-hdf/typescript/converter.d.ts +10 -0
  99. package/dist/converters/gosec-to-hdf/typescript/converter.d.ts.map +1 -0
  100. package/dist/converters/gosec-to-hdf/typescript/converter.js +126 -0
  101. package/dist/converters/gosec-to-hdf/typescript/converter.js.map +1 -0
  102. package/dist/converters/gosec-to-hdf/typescript/fingerprint.d.ts +10 -0
  103. package/dist/converters/gosec-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  104. package/dist/converters/gosec-to-hdf/typescript/fingerprint.js +32 -0
  105. package/dist/converters/gosec-to-hdf/typescript/fingerprint.js.map +1 -0
  106. package/dist/converters/gosec-to-hdf/typescript/index.d.ts +2 -0
  107. package/dist/converters/gosec-to-hdf/typescript/index.d.ts.map +1 -0
  108. package/dist/converters/gosec-to-hdf/typescript/index.js +2 -0
  109. package/dist/converters/gosec-to-hdf/typescript/index.js.map +1 -0
  110. package/dist/converters/grype-to-hdf/typescript/converter.d.ts +2 -0
  111. package/dist/converters/grype-to-hdf/typescript/converter.d.ts.map +1 -0
  112. package/dist/converters/grype-to-hdf/typescript/converter.js +222 -0
  113. package/dist/converters/grype-to-hdf/typescript/converter.js.map +1 -0
  114. package/dist/converters/grype-to-hdf/typescript/fingerprint.d.ts +10 -0
  115. package/dist/converters/grype-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  116. package/dist/converters/grype-to-hdf/typescript/fingerprint.js +38 -0
  117. package/dist/converters/grype-to-hdf/typescript/fingerprint.js.map +1 -0
  118. package/dist/converters/grype-to-hdf/typescript/index.d.ts +2 -0
  119. package/dist/converters/grype-to-hdf/typescript/index.d.ts.map +1 -0
  120. package/dist/converters/grype-to-hdf/typescript/index.js +2 -0
  121. package/dist/converters/grype-to-hdf/typescript/index.js.map +1 -0
  122. package/dist/converters/hdf-to-csv/typescript/converter.d.ts +7 -0
  123. package/dist/converters/hdf-to-csv/typescript/converter.d.ts.map +1 -0
  124. package/dist/converters/hdf-to-csv/typescript/converter.js +108 -0
  125. package/dist/converters/hdf-to-csv/typescript/converter.js.map +1 -0
  126. package/dist/converters/hdf-to-csv/typescript/fingerprint.d.ts +10 -0
  127. package/dist/converters/hdf-to-csv/typescript/fingerprint.d.ts.map +1 -0
  128. package/dist/converters/hdf-to-csv/typescript/fingerprint.js +28 -0
  129. package/dist/converters/hdf-to-csv/typescript/fingerprint.js.map +1 -0
  130. package/dist/converters/hdf-to-csv/typescript/index.d.ts +2 -0
  131. package/dist/converters/hdf-to-csv/typescript/index.d.ts.map +1 -0
  132. package/dist/converters/hdf-to-csv/typescript/index.js +2 -0
  133. package/dist/converters/hdf-to-csv/typescript/index.js.map +1 -0
  134. package/dist/converters/hdf-to-oscal-poam/typescript/converter.d.ts +13 -0
  135. package/dist/converters/hdf-to-oscal-poam/typescript/converter.d.ts.map +1 -0
  136. package/dist/converters/hdf-to-oscal-poam/typescript/converter.js +156 -0
  137. package/dist/converters/hdf-to-oscal-poam/typescript/converter.js.map +1 -0
  138. package/dist/converters/hdf-to-oscal-poam/typescript/fingerprint.d.ts +10 -0
  139. package/dist/converters/hdf-to-oscal-poam/typescript/fingerprint.d.ts.map +1 -0
  140. package/dist/converters/hdf-to-oscal-poam/typescript/fingerprint.js +28 -0
  141. package/dist/converters/hdf-to-oscal-poam/typescript/fingerprint.js.map +1 -0
  142. package/dist/converters/hdf-to-oscal-poam/typescript/index.d.ts +2 -0
  143. package/dist/converters/hdf-to-oscal-poam/typescript/index.d.ts.map +1 -0
  144. package/dist/converters/hdf-to-oscal-poam/typescript/index.js +2 -0
  145. package/dist/converters/hdf-to-oscal-poam/typescript/index.js.map +1 -0
  146. package/dist/converters/hdf-to-oscal-sar/typescript/converter.d.ts +22 -0
  147. package/dist/converters/hdf-to-oscal-sar/typescript/converter.d.ts.map +1 -0
  148. package/dist/converters/hdf-to-oscal-sar/typescript/converter.js +276 -0
  149. package/dist/converters/hdf-to-oscal-sar/typescript/converter.js.map +1 -0
  150. package/dist/converters/hdf-to-oscal-sar/typescript/fingerprint.d.ts +10 -0
  151. package/dist/converters/hdf-to-oscal-sar/typescript/fingerprint.d.ts.map +1 -0
  152. package/dist/converters/hdf-to-oscal-sar/typescript/fingerprint.js +28 -0
  153. package/dist/converters/hdf-to-oscal-sar/typescript/fingerprint.js.map +1 -0
  154. package/dist/converters/hdf-to-oscal-sar/typescript/index.d.ts +2 -0
  155. package/dist/converters/hdf-to-oscal-sar/typescript/index.d.ts.map +1 -0
  156. package/dist/converters/hdf-to-oscal-sar/typescript/index.js +2 -0
  157. package/dist/converters/hdf-to-oscal-sar/typescript/index.js.map +1 -0
  158. package/dist/converters/hdf-to-xccdf/typescript/converter.d.ts +8 -0
  159. package/dist/converters/hdf-to-xccdf/typescript/converter.d.ts.map +1 -0
  160. package/dist/converters/hdf-to-xccdf/typescript/converter.js +186 -0
  161. package/dist/converters/hdf-to-xccdf/typescript/converter.js.map +1 -0
  162. package/dist/converters/hdf-to-xccdf/typescript/index.d.ts +2 -0
  163. package/dist/converters/hdf-to-xccdf/typescript/index.d.ts.map +1 -0
  164. package/dist/converters/hdf-to-xccdf/typescript/index.js +2 -0
  165. package/dist/converters/hdf-to-xccdf/typescript/index.js.map +1 -0
  166. package/dist/converters/hdf-to-xml/typescript/converter.d.ts +7 -0
  167. package/dist/converters/hdf-to-xml/typescript/converter.d.ts.map +1 -0
  168. package/dist/converters/hdf-to-xml/typescript/converter.js +140 -0
  169. package/dist/converters/hdf-to-xml/typescript/converter.js.map +1 -0
  170. package/dist/converters/hdf-to-xml/typescript/fingerprint.d.ts +10 -0
  171. package/dist/converters/hdf-to-xml/typescript/fingerprint.d.ts.map +1 -0
  172. package/dist/converters/hdf-to-xml/typescript/fingerprint.js +28 -0
  173. package/dist/converters/hdf-to-xml/typescript/fingerprint.js.map +1 -0
  174. package/dist/converters/hdf-to-xml/typescript/index.d.ts +2 -0
  175. package/dist/converters/hdf-to-xml/typescript/index.d.ts.map +1 -0
  176. package/dist/converters/hdf-to-xml/typescript/index.js +2 -0
  177. package/dist/converters/hdf-to-xml/typescript/index.js.map +1 -0
  178. package/dist/converters/hdf-v2-passthrough/typescript/fingerprint.d.ts +15 -0
  179. package/dist/converters/hdf-v2-passthrough/typescript/fingerprint.d.ts.map +1 -0
  180. package/dist/converters/hdf-v2-passthrough/typescript/fingerprint.js +33 -0
  181. package/dist/converters/hdf-v2-passthrough/typescript/fingerprint.js.map +1 -0
  182. package/dist/converters/ionchannel-to-hdf/typescript/converter.d.ts +2 -0
  183. package/dist/converters/ionchannel-to-hdf/typescript/converter.d.ts.map +1 -0
  184. package/dist/converters/ionchannel-to-hdf/typescript/converter.js +150 -0
  185. package/dist/converters/ionchannel-to-hdf/typescript/converter.js.map +1 -0
  186. package/dist/converters/ionchannel-to-hdf/typescript/fingerprint.d.ts +11 -0
  187. package/dist/converters/ionchannel-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  188. package/dist/converters/ionchannel-to-hdf/typescript/fingerprint.js +41 -0
  189. package/dist/converters/ionchannel-to-hdf/typescript/fingerprint.js.map +1 -0
  190. package/dist/converters/ionchannel-to-hdf/typescript/index.d.ts +2 -0
  191. package/dist/converters/ionchannel-to-hdf/typescript/index.d.ts.map +1 -0
  192. package/dist/converters/ionchannel-to-hdf/typescript/index.js +2 -0
  193. package/dist/converters/ionchannel-to-hdf/typescript/index.js.map +1 -0
  194. package/dist/converters/jfrog-xray-to-hdf/typescript/converter.d.ts +8 -0
  195. package/dist/converters/jfrog-xray-to-hdf/typescript/converter.d.ts.map +1 -0
  196. package/dist/converters/jfrog-xray-to-hdf/typescript/converter.js +149 -0
  197. package/dist/converters/jfrog-xray-to-hdf/typescript/converter.js.map +1 -0
  198. package/dist/converters/jfrog-xray-to-hdf/typescript/fingerprint.d.ts +10 -0
  199. package/dist/converters/jfrog-xray-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  200. package/dist/converters/jfrog-xray-to-hdf/typescript/fingerprint.js +28 -0
  201. package/dist/converters/jfrog-xray-to-hdf/typescript/fingerprint.js.map +1 -0
  202. package/dist/converters/jfrog-xray-to-hdf/typescript/index.d.ts +2 -0
  203. package/dist/converters/jfrog-xray-to-hdf/typescript/index.d.ts.map +1 -0
  204. package/dist/converters/jfrog-xray-to-hdf/typescript/index.js +2 -0
  205. package/dist/converters/jfrog-xray-to-hdf/typescript/index.js.map +1 -0
  206. package/dist/converters/junit-to-hdf/typescript/converter.d.ts +5 -0
  207. package/dist/converters/junit-to-hdf/typescript/converter.d.ts.map +1 -0
  208. package/dist/converters/junit-to-hdf/typescript/converter.js +142 -0
  209. package/dist/converters/junit-to-hdf/typescript/converter.js.map +1 -0
  210. package/dist/converters/junit-to-hdf/typescript/fingerprint.d.ts +9 -0
  211. package/dist/converters/junit-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  212. package/dist/converters/junit-to-hdf/typescript/fingerprint.js +28 -0
  213. package/dist/converters/junit-to-hdf/typescript/fingerprint.js.map +1 -0
  214. package/dist/converters/junit-to-hdf/typescript/index.d.ts +2 -0
  215. package/dist/converters/junit-to-hdf/typescript/index.d.ts.map +1 -0
  216. package/dist/converters/junit-to-hdf/typescript/index.js +2 -0
  217. package/dist/converters/junit-to-hdf/typescript/index.js.map +1 -0
  218. package/dist/converters/legacyhdf-to-hdf/typescript/converter.d.ts +232 -0
  219. package/dist/converters/legacyhdf-to-hdf/typescript/converter.d.ts.map +1 -0
  220. package/dist/converters/legacyhdf-to-hdf/typescript/converter.js +418 -0
  221. package/dist/converters/legacyhdf-to-hdf/typescript/converter.js.map +1 -0
  222. package/dist/converters/legacyhdf-to-hdf/typescript/fingerprint.d.ts +17 -0
  223. package/dist/converters/legacyhdf-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  224. package/dist/converters/legacyhdf-to-hdf/typescript/fingerprint.js +49 -0
  225. package/dist/converters/legacyhdf-to-hdf/typescript/fingerprint.js.map +1 -0
  226. package/dist/converters/legacyhdf-to-hdf/typescript/index.d.ts +8 -0
  227. package/dist/converters/legacyhdf-to-hdf/typescript/index.d.ts.map +1 -0
  228. package/dist/converters/legacyhdf-to-hdf/typescript/index.js +8 -0
  229. package/dist/converters/legacyhdf-to-hdf/typescript/index.js.map +1 -0
  230. package/dist/converters/msft-defender-cloud-to-hdf/typescript/converter.d.ts +8 -0
  231. package/dist/converters/msft-defender-cloud-to-hdf/typescript/converter.d.ts.map +1 -0
  232. package/dist/converters/msft-defender-cloud-to-hdf/typescript/converter.js +153 -0
  233. package/dist/converters/msft-defender-cloud-to-hdf/typescript/converter.js.map +1 -0
  234. package/dist/converters/msft-defender-cloud-to-hdf/typescript/fingerprint.d.ts +11 -0
  235. package/dist/converters/msft-defender-cloud-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  236. package/dist/converters/msft-defender-cloud-to-hdf/typescript/fingerprint.js +37 -0
  237. package/dist/converters/msft-defender-cloud-to-hdf/typescript/fingerprint.js.map +1 -0
  238. package/dist/converters/msft-defender-cloud-to-hdf/typescript/index.d.ts +2 -0
  239. package/dist/converters/msft-defender-cloud-to-hdf/typescript/index.d.ts.map +1 -0
  240. package/dist/converters/msft-defender-cloud-to-hdf/typescript/index.js +2 -0
  241. package/dist/converters/msft-defender-cloud-to-hdf/typescript/index.js.map +1 -0
  242. package/dist/converters/msft-defender-devops-to-hdf/typescript/converter.d.ts +7 -0
  243. package/dist/converters/msft-defender-devops-to-hdf/typescript/converter.d.ts.map +1 -0
  244. package/dist/converters/msft-defender-devops-to-hdf/typescript/converter.js +126 -0
  245. package/dist/converters/msft-defender-devops-to-hdf/typescript/converter.js.map +1 -0
  246. package/dist/converters/msft-defender-devops-to-hdf/typescript/fingerprint.d.ts +13 -0
  247. package/dist/converters/msft-defender-devops-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  248. package/dist/converters/msft-defender-devops-to-hdf/typescript/fingerprint.js +62 -0
  249. package/dist/converters/msft-defender-devops-to-hdf/typescript/fingerprint.js.map +1 -0
  250. package/dist/converters/msft-defender-devops-to-hdf/typescript/index.d.ts +2 -0
  251. package/dist/converters/msft-defender-devops-to-hdf/typescript/index.d.ts.map +1 -0
  252. package/dist/converters/msft-defender-devops-to-hdf/typescript/index.js +2 -0
  253. package/dist/converters/msft-defender-devops-to-hdf/typescript/index.js.map +1 -0
  254. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/converter.d.ts +9 -0
  255. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/converter.d.ts.map +1 -0
  256. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/converter.js +194 -0
  257. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/converter.js.map +1 -0
  258. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/fingerprint.d.ts +11 -0
  259. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  260. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/fingerprint.js +39 -0
  261. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/fingerprint.js.map +1 -0
  262. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/index.d.ts +2 -0
  263. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/index.d.ts.map +1 -0
  264. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/index.js +2 -0
  265. package/dist/converters/msft-defender-endpoint-to-hdf/typescript/index.js.map +1 -0
  266. package/dist/converters/msft-secure-score-to-hdf/typescript/converter.d.ts +11 -0
  267. package/dist/converters/msft-secure-score-to-hdf/typescript/converter.d.ts.map +1 -0
  268. package/dist/converters/msft-secure-score-to-hdf/typescript/converter.js +160 -0
  269. package/dist/converters/msft-secure-score-to-hdf/typescript/converter.js.map +1 -0
  270. package/dist/converters/msft-secure-score-to-hdf/typescript/fingerprint.d.ts +11 -0
  271. package/dist/converters/msft-secure-score-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  272. package/dist/converters/msft-secure-score-to-hdf/typescript/fingerprint.js +41 -0
  273. package/dist/converters/msft-secure-score-to-hdf/typescript/fingerprint.js.map +1 -0
  274. package/dist/converters/msft-secure-score-to-hdf/typescript/index.d.ts +2 -0
  275. package/dist/converters/msft-secure-score-to-hdf/typescript/index.d.ts.map +1 -0
  276. package/dist/converters/msft-secure-score-to-hdf/typescript/index.js +2 -0
  277. package/dist/converters/msft-secure-score-to-hdf/typescript/index.js.map +1 -0
  278. package/dist/converters/nessus-to-hdf/typescript/converter.d.ts +6 -0
  279. package/dist/converters/nessus-to-hdf/typescript/converter.d.ts.map +1 -0
  280. package/dist/converters/nessus-to-hdf/typescript/converter.js +329 -0
  281. package/dist/converters/nessus-to-hdf/typescript/converter.js.map +1 -0
  282. package/dist/converters/nessus-to-hdf/typescript/fingerprint.d.ts +9 -0
  283. package/dist/converters/nessus-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  284. package/dist/converters/nessus-to-hdf/typescript/fingerprint.js +34 -0
  285. package/dist/converters/nessus-to-hdf/typescript/fingerprint.js.map +1 -0
  286. package/dist/converters/nessus-to-hdf/typescript/index.d.ts +2 -0
  287. package/dist/converters/nessus-to-hdf/typescript/index.d.ts.map +1 -0
  288. package/dist/converters/nessus-to-hdf/typescript/index.js +2 -0
  289. package/dist/converters/nessus-to-hdf/typescript/index.js.map +1 -0
  290. package/dist/converters/netsparker-to-hdf/typescript/converter.d.ts +9 -0
  291. package/dist/converters/netsparker-to-hdf/typescript/converter.d.ts.map +1 -0
  292. package/dist/converters/netsparker-to-hdf/typescript/converter.js +211 -0
  293. package/dist/converters/netsparker-to-hdf/typescript/converter.js.map +1 -0
  294. package/dist/converters/netsparker-to-hdf/typescript/fingerprint.d.ts +10 -0
  295. package/dist/converters/netsparker-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  296. package/dist/converters/netsparker-to-hdf/typescript/fingerprint.js +29 -0
  297. package/dist/converters/netsparker-to-hdf/typescript/fingerprint.js.map +1 -0
  298. package/dist/converters/netsparker-to-hdf/typescript/index.d.ts +2 -0
  299. package/dist/converters/netsparker-to-hdf/typescript/index.d.ts.map +1 -0
  300. package/dist/converters/netsparker-to-hdf/typescript/index.js +2 -0
  301. package/dist/converters/netsparker-to-hdf/typescript/index.js.map +1 -0
  302. package/dist/converters/neuvector-to-hdf/typescript/converter.d.ts +16 -0
  303. package/dist/converters/neuvector-to-hdf/typescript/converter.d.ts.map +1 -0
  304. package/dist/converters/neuvector-to-hdf/typescript/converter.js +148 -0
  305. package/dist/converters/neuvector-to-hdf/typescript/converter.js.map +1 -0
  306. package/dist/converters/neuvector-to-hdf/typescript/fingerprint.d.ts +11 -0
  307. package/dist/converters/neuvector-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  308. package/dist/converters/neuvector-to-hdf/typescript/fingerprint.js +37 -0
  309. package/dist/converters/neuvector-to-hdf/typescript/fingerprint.js.map +1 -0
  310. package/dist/converters/neuvector-to-hdf/typescript/index.d.ts +2 -0
  311. package/dist/converters/neuvector-to-hdf/typescript/index.d.ts.map +1 -0
  312. package/dist/converters/neuvector-to-hdf/typescript/index.js +2 -0
  313. package/dist/converters/neuvector-to-hdf/typescript/index.js.map +1 -0
  314. package/dist/converters/nikto-to-hdf/typescript/converter.d.ts +2 -0
  315. package/dist/converters/nikto-to-hdf/typescript/converter.d.ts.map +1 -0
  316. package/dist/converters/nikto-to-hdf/typescript/converter.js +111 -0
  317. package/dist/converters/nikto-to-hdf/typescript/converter.js.map +1 -0
  318. package/dist/converters/nikto-to-hdf/typescript/fingerprint.d.ts +10 -0
  319. package/dist/converters/nikto-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  320. package/dist/converters/nikto-to-hdf/typescript/fingerprint.js +33 -0
  321. package/dist/converters/nikto-to-hdf/typescript/fingerprint.js.map +1 -0
  322. package/dist/converters/nikto-to-hdf/typescript/index.d.ts +2 -0
  323. package/dist/converters/nikto-to-hdf/typescript/index.d.ts.map +1 -0
  324. package/dist/converters/nikto-to-hdf/typescript/index.js +2 -0
  325. package/dist/converters/nikto-to-hdf/typescript/index.js.map +1 -0
  326. package/dist/converters/oscal-to-hdf/typescript/converter-catalog.d.ts +20 -0
  327. package/dist/converters/oscal-to-hdf/typescript/converter-catalog.d.ts.map +1 -0
  328. package/dist/converters/oscal-to-hdf/typescript/converter-catalog.js +134 -0
  329. package/dist/converters/oscal-to-hdf/typescript/converter-catalog.js.map +1 -0
  330. package/dist/converters/oscal-to-hdf/typescript/converter-component.d.ts +13 -0
  331. package/dist/converters/oscal-to-hdf/typescript/converter-component.d.ts.map +1 -0
  332. package/dist/converters/oscal-to-hdf/typescript/converter-component.js +92 -0
  333. package/dist/converters/oscal-to-hdf/typescript/converter-component.js.map +1 -0
  334. package/dist/converters/oscal-to-hdf/typescript/converter-poam.d.ts +13 -0
  335. package/dist/converters/oscal-to-hdf/typescript/converter-poam.d.ts.map +1 -0
  336. package/dist/converters/oscal-to-hdf/typescript/converter-poam.js +196 -0
  337. package/dist/converters/oscal-to-hdf/typescript/converter-poam.js.map +1 -0
  338. package/dist/converters/oscal-to-hdf/typescript/converter-profile.d.ts +26 -0
  339. package/dist/converters/oscal-to-hdf/typescript/converter-profile.d.ts.map +1 -0
  340. package/dist/converters/oscal-to-hdf/typescript/converter-profile.js +239 -0
  341. package/dist/converters/oscal-to-hdf/typescript/converter-profile.js.map +1 -0
  342. package/dist/converters/oscal-to-hdf/typescript/converter-sap.d.ts +13 -0
  343. package/dist/converters/oscal-to-hdf/typescript/converter-sap.d.ts.map +1 -0
  344. package/dist/converters/oscal-to-hdf/typescript/converter-sap.js +196 -0
  345. package/dist/converters/oscal-to-hdf/typescript/converter-sap.js.map +1 -0
  346. package/dist/converters/oscal-to-hdf/typescript/converter-sar.d.ts +13 -0
  347. package/dist/converters/oscal-to-hdf/typescript/converter-sar.d.ts.map +1 -0
  348. package/dist/converters/oscal-to-hdf/typescript/converter-sar.js +270 -0
  349. package/dist/converters/oscal-to-hdf/typescript/converter-sar.js.map +1 -0
  350. package/dist/converters/oscal-to-hdf/typescript/converter-ssp.d.ts +13 -0
  351. package/dist/converters/oscal-to-hdf/typescript/converter-ssp.d.ts.map +1 -0
  352. package/dist/converters/oscal-to-hdf/typescript/converter-ssp.js +246 -0
  353. package/dist/converters/oscal-to-hdf/typescript/converter-ssp.js.map +1 -0
  354. package/dist/converters/oscal-to-hdf/typescript/detect.d.ts +15 -0
  355. package/dist/converters/oscal-to-hdf/typescript/detect.d.ts.map +1 -0
  356. package/dist/converters/oscal-to-hdf/typescript/detect.js +33 -0
  357. package/dist/converters/oscal-to-hdf/typescript/detect.js.map +1 -0
  358. package/dist/converters/oscal-to-hdf/typescript/fingerprint.d.ts +12 -0
  359. package/dist/converters/oscal-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  360. package/dist/converters/oscal-to-hdf/typescript/fingerprint.js +57 -0
  361. package/dist/converters/oscal-to-hdf/typescript/fingerprint.js.map +1 -0
  362. package/dist/converters/oscal-to-hdf/typescript/index.d.ts +9 -0
  363. package/dist/converters/oscal-to-hdf/typescript/index.d.ts.map +1 -0
  364. package/dist/converters/oscal-to-hdf/typescript/index.js +9 -0
  365. package/dist/converters/oscal-to-hdf/typescript/index.js.map +1 -0
  366. package/dist/converters/oscal-to-hdf/typescript/shared.d.ts +85 -0
  367. package/dist/converters/oscal-to-hdf/typescript/shared.d.ts.map +1 -0
  368. package/dist/converters/oscal-to-hdf/typescript/shared.js +251 -0
  369. package/dist/converters/oscal-to-hdf/typescript/shared.js.map +1 -0
  370. package/dist/converters/oscal-to-hdf/typescript/types.d.ts +5372 -0
  371. package/dist/converters/oscal-to-hdf/typescript/types.d.ts.map +1 -0
  372. package/dist/converters/oscal-to-hdf/typescript/types.js +2340 -0
  373. package/dist/converters/oscal-to-hdf/typescript/types.js.map +1 -0
  374. package/dist/converters/prisma-to-hdf/typescript/converter.d.ts +16 -0
  375. package/dist/converters/prisma-to-hdf/typescript/converter.d.ts.map +1 -0
  376. package/dist/converters/prisma-to-hdf/typescript/converter.js +197 -0
  377. package/dist/converters/prisma-to-hdf/typescript/converter.js.map +1 -0
  378. package/dist/converters/prisma-to-hdf/typescript/fingerprint.d.ts +10 -0
  379. package/dist/converters/prisma-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  380. package/dist/converters/prisma-to-hdf/typescript/fingerprint.js +39 -0
  381. package/dist/converters/prisma-to-hdf/typescript/fingerprint.js.map +1 -0
  382. package/dist/converters/prisma-to-hdf/typescript/index.d.ts +2 -0
  383. package/dist/converters/prisma-to-hdf/typescript/index.d.ts.map +1 -0
  384. package/dist/converters/prisma-to-hdf/typescript/index.js +2 -0
  385. package/dist/converters/prisma-to-hdf/typescript/index.js.map +1 -0
  386. package/dist/converters/sarif-to-hdf/typescript/converter.d.ts +2 -0
  387. package/dist/converters/sarif-to-hdf/typescript/converter.d.ts.map +1 -0
  388. package/dist/converters/sarif-to-hdf/typescript/converter.js +406 -0
  389. package/dist/converters/sarif-to-hdf/typescript/converter.js.map +1 -0
  390. package/dist/converters/sarif-to-hdf/typescript/fingerprint.d.ts +10 -0
  391. package/dist/converters/sarif-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  392. package/dist/converters/sarif-to-hdf/typescript/fingerprint.js +34 -0
  393. package/dist/converters/sarif-to-hdf/typescript/fingerprint.js.map +1 -0
  394. package/dist/converters/sarif-to-hdf/typescript/index.d.ts +2 -0
  395. package/dist/converters/sarif-to-hdf/typescript/index.d.ts.map +1 -0
  396. package/dist/converters/sarif-to-hdf/typescript/index.js +2 -0
  397. package/dist/converters/sarif-to-hdf/typescript/index.js.map +1 -0
  398. package/dist/converters/scoutsuite-to-hdf/typescript/converter.d.ts +9 -0
  399. package/dist/converters/scoutsuite-to-hdf/typescript/converter.d.ts.map +1 -0
  400. package/dist/converters/scoutsuite-to-hdf/typescript/converter.js +173 -0
  401. package/dist/converters/scoutsuite-to-hdf/typescript/converter.js.map +1 -0
  402. package/dist/converters/scoutsuite-to-hdf/typescript/fingerprint.d.ts +10 -0
  403. package/dist/converters/scoutsuite-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  404. package/dist/converters/scoutsuite-to-hdf/typescript/fingerprint.js +29 -0
  405. package/dist/converters/scoutsuite-to-hdf/typescript/fingerprint.js.map +1 -0
  406. package/dist/converters/scoutsuite-to-hdf/typescript/index.d.ts +2 -0
  407. package/dist/converters/scoutsuite-to-hdf/typescript/index.d.ts.map +1 -0
  408. package/dist/converters/scoutsuite-to-hdf/typescript/index.js +2 -0
  409. package/dist/converters/scoutsuite-to-hdf/typescript/index.js.map +1 -0
  410. package/dist/converters/snyk-to-hdf/typescript/converter.d.ts +11 -0
  411. package/dist/converters/snyk-to-hdf/typescript/converter.d.ts.map +1 -0
  412. package/dist/converters/snyk-to-hdf/typescript/converter.js +131 -0
  413. package/dist/converters/snyk-to-hdf/typescript/converter.js.map +1 -0
  414. package/dist/converters/snyk-to-hdf/typescript/fingerprint.d.ts +12 -0
  415. package/dist/converters/snyk-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  416. package/dist/converters/snyk-to-hdf/typescript/fingerprint.js +44 -0
  417. package/dist/converters/snyk-to-hdf/typescript/fingerprint.js.map +1 -0
  418. package/dist/converters/snyk-to-hdf/typescript/index.d.ts +2 -0
  419. package/dist/converters/snyk-to-hdf/typescript/index.d.ts.map +1 -0
  420. package/dist/converters/snyk-to-hdf/typescript/index.js +2 -0
  421. package/dist/converters/snyk-to-hdf/typescript/index.js.map +1 -0
  422. package/dist/converters/sonarqube-to-hdf/typescript/converter.d.ts +8 -0
  423. package/dist/converters/sonarqube-to-hdf/typescript/converter.d.ts.map +1 -0
  424. package/dist/converters/sonarqube-to-hdf/typescript/converter.js +266 -0
  425. package/dist/converters/sonarqube-to-hdf/typescript/converter.js.map +1 -0
  426. package/dist/converters/sonarqube-to-hdf/typescript/fingerprint.d.ts +10 -0
  427. package/dist/converters/sonarqube-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  428. package/dist/converters/sonarqube-to-hdf/typescript/fingerprint.js +35 -0
  429. package/dist/converters/sonarqube-to-hdf/typescript/fingerprint.js.map +1 -0
  430. package/dist/converters/sonarqube-to-hdf/typescript/index.d.ts +2 -0
  431. package/dist/converters/sonarqube-to-hdf/typescript/index.d.ts.map +1 -0
  432. package/dist/converters/sonarqube-to-hdf/typescript/index.js +2 -0
  433. package/dist/converters/sonarqube-to-hdf/typescript/index.js.map +1 -0
  434. package/dist/converters/splunk-to-hdf/typescript/converter.d.ts +13 -0
  435. package/dist/converters/splunk-to-hdf/typescript/converter.d.ts.map +1 -0
  436. package/dist/converters/splunk-to-hdf/typescript/converter.js +165 -0
  437. package/dist/converters/splunk-to-hdf/typescript/converter.js.map +1 -0
  438. package/dist/converters/splunk-to-hdf/typescript/fingerprint.d.ts +11 -0
  439. package/dist/converters/splunk-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  440. package/dist/converters/splunk-to-hdf/typescript/fingerprint.js +36 -0
  441. package/dist/converters/splunk-to-hdf/typescript/fingerprint.js.map +1 -0
  442. package/dist/converters/splunk-to-hdf/typescript/index.d.ts +2 -0
  443. package/dist/converters/splunk-to-hdf/typescript/index.d.ts.map +1 -0
  444. package/dist/converters/splunk-to-hdf/typescript/index.js +2 -0
  445. package/dist/converters/splunk-to-hdf/typescript/index.js.map +1 -0
  446. package/dist/converters/trufflehog-to-hdf/typescript/converter.d.ts +9 -0
  447. package/dist/converters/trufflehog-to-hdf/typescript/converter.d.ts.map +1 -0
  448. package/dist/converters/trufflehog-to-hdf/typescript/converter.js +189 -0
  449. package/dist/converters/trufflehog-to-hdf/typescript/converter.js.map +1 -0
  450. package/dist/converters/trufflehog-to-hdf/typescript/fingerprint.d.ts +18 -0
  451. package/dist/converters/trufflehog-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  452. package/dist/converters/trufflehog-to-hdf/typescript/fingerprint.js +50 -0
  453. package/dist/converters/trufflehog-to-hdf/typescript/fingerprint.js.map +1 -0
  454. package/dist/converters/trufflehog-to-hdf/typescript/index.d.ts +2 -0
  455. package/dist/converters/trufflehog-to-hdf/typescript/index.d.ts.map +1 -0
  456. package/dist/converters/trufflehog-to-hdf/typescript/index.js +2 -0
  457. package/dist/converters/trufflehog-to-hdf/typescript/index.js.map +1 -0
  458. package/dist/converters/twistlock-to-hdf/typescript/converter.d.ts +11 -0
  459. package/dist/converters/twistlock-to-hdf/typescript/converter.d.ts.map +1 -0
  460. package/dist/converters/twistlock-to-hdf/typescript/converter.js +153 -0
  461. package/dist/converters/twistlock-to-hdf/typescript/converter.js.map +1 -0
  462. package/dist/converters/twistlock-to-hdf/typescript/fingerprint.d.ts +18 -0
  463. package/dist/converters/twistlock-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  464. package/dist/converters/twistlock-to-hdf/typescript/fingerprint.js +49 -0
  465. package/dist/converters/twistlock-to-hdf/typescript/fingerprint.js.map +1 -0
  466. package/dist/converters/twistlock-to-hdf/typescript/index.d.ts +2 -0
  467. package/dist/converters/twistlock-to-hdf/typescript/index.d.ts.map +1 -0
  468. package/dist/converters/twistlock-to-hdf/typescript/index.js +2 -0
  469. package/dist/converters/twistlock-to-hdf/typescript/index.js.map +1 -0
  470. package/dist/converters/veracode-to-hdf/typescript/converter.d.ts +20 -0
  471. package/dist/converters/veracode-to-hdf/typescript/converter.d.ts.map +1 -0
  472. package/dist/converters/veracode-to-hdf/typescript/converter.js +350 -0
  473. package/dist/converters/veracode-to-hdf/typescript/converter.js.map +1 -0
  474. package/dist/converters/veracode-to-hdf/typescript/fingerprint.d.ts +16 -0
  475. package/dist/converters/veracode-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  476. package/dist/converters/veracode-to-hdf/typescript/fingerprint.js +35 -0
  477. package/dist/converters/veracode-to-hdf/typescript/fingerprint.js.map +1 -0
  478. package/dist/converters/veracode-to-hdf/typescript/index.d.ts +2 -0
  479. package/dist/converters/veracode-to-hdf/typescript/index.d.ts.map +1 -0
  480. package/dist/converters/veracode-to-hdf/typescript/index.js +2 -0
  481. package/dist/converters/veracode-to-hdf/typescript/index.js.map +1 -0
  482. package/dist/converters/xccdf-results-to-hdf/typescript/converter.d.ts +29 -0
  483. package/dist/converters/xccdf-results-to-hdf/typescript/converter.d.ts.map +1 -0
  484. package/dist/converters/xccdf-results-to-hdf/typescript/converter.js +604 -0
  485. package/dist/converters/xccdf-results-to-hdf/typescript/converter.js.map +1 -0
  486. package/dist/converters/xccdf-results-to-hdf/typescript/fingerprint.d.ts +12 -0
  487. package/dist/converters/xccdf-results-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  488. package/dist/converters/xccdf-results-to-hdf/typescript/fingerprint.js +33 -0
  489. package/dist/converters/xccdf-results-to-hdf/typescript/fingerprint.js.map +1 -0
  490. package/dist/converters/xccdf-results-to-hdf/typescript/index.d.ts +2 -0
  491. package/dist/converters/xccdf-results-to-hdf/typescript/index.d.ts.map +1 -0
  492. package/dist/converters/xccdf-results-to-hdf/typescript/index.js +2 -0
  493. package/dist/converters/xccdf-results-to-hdf/typescript/index.js.map +1 -0
  494. package/dist/converters/zap-to-hdf/typescript/converter.d.ts +2 -0
  495. package/dist/converters/zap-to-hdf/typescript/converter.d.ts.map +1 -0
  496. package/dist/converters/zap-to-hdf/typescript/converter.js +237 -0
  497. package/dist/converters/zap-to-hdf/typescript/converter.js.map +1 -0
  498. package/dist/converters/zap-to-hdf/typescript/fingerprint.d.ts +11 -0
  499. package/dist/converters/zap-to-hdf/typescript/fingerprint.d.ts.map +1 -0
  500. package/dist/converters/zap-to-hdf/typescript/fingerprint.js +34 -0
  501. package/dist/converters/zap-to-hdf/typescript/fingerprint.js.map +1 -0
  502. package/dist/converters/zap-to-hdf/typescript/index.d.ts +2 -0
  503. package/dist/converters/zap-to-hdf/typescript/index.d.ts.map +1 -0
  504. package/dist/converters/zap-to-hdf/typescript/index.js +2 -0
  505. package/dist/converters/zap-to-hdf/typescript/index.js.map +1 -0
  506. package/dist/package.json +71 -0
  507. package/dist/shared/typescript/compare.d.ts +14 -0
  508. package/dist/shared/typescript/compare.d.ts.map +1 -0
  509. package/dist/shared/typescript/compare.js +91 -0
  510. package/dist/shared/typescript/compare.js.map +1 -0
  511. package/dist/shared/typescript/converter-contract.d.ts +20 -0
  512. package/dist/shared/typescript/converter-contract.d.ts.map +1 -0
  513. package/dist/shared/typescript/converter-contract.js +35 -0
  514. package/dist/shared/typescript/converter-contract.js.map +1 -0
  515. package/dist/shared/typescript/converterutil.d.ts +166 -0
  516. package/dist/shared/typescript/converterutil.d.ts.map +1 -0
  517. package/dist/shared/typescript/converterutil.js +230 -0
  518. package/dist/shared/typescript/converterutil.js.map +1 -0
  519. package/dist/shared/typescript/fingerprint.d.ts +17 -0
  520. package/dist/shared/typescript/fingerprint.d.ts.map +1 -0
  521. package/dist/shared/typescript/fingerprint.js +85 -0
  522. package/dist/shared/typescript/fingerprint.js.map +1 -0
  523. package/dist/shared/typescript/fptest.d.ts +40 -0
  524. package/dist/shared/typescript/fptest.d.ts.map +1 -0
  525. package/dist/shared/typescript/fptest.js +70 -0
  526. package/dist/shared/typescript/fptest.js.map +1 -0
  527. package/dist/shared/typescript/hdf-version.d.ts +20 -0
  528. package/dist/shared/typescript/hdf-version.d.ts.map +1 -0
  529. package/dist/shared/typescript/hdf-version.js +206 -0
  530. package/dist/shared/typescript/hdf-version.js.map +1 -0
  531. package/dist/shared/typescript/register-all.d.ts +12 -0
  532. package/dist/shared/typescript/register-all.d.ts.map +1 -0
  533. package/dist/shared/typescript/register-all.js +111 -0
  534. package/dist/shared/typescript/register-all.js.map +1 -0
  535. package/dist/shared/typescript/registry.d.ts +35 -0
  536. package/dist/shared/typescript/registry.d.ts.map +1 -0
  537. package/dist/shared/typescript/registry.js +27 -0
  538. package/dist/shared/typescript/registry.js.map +1 -0
  539. package/dist/shared/typescript/xml-utils.d.ts +16 -0
  540. package/dist/shared/typescript/xml-utils.d.ts.map +1 -0
  541. package/dist/shared/typescript/xml-utils.js +66 -0
  542. package/dist/shared/typescript/xml-utils.js.map +1 -0
  543. package/dist/src/detect.d.ts +15 -0
  544. package/dist/src/detect.d.ts.map +1 -0
  545. package/dist/src/detect.js +15 -0
  546. package/dist/src/detect.js.map +1 -0
  547. package/dist/src/index.d.ts +52 -0
  548. package/dist/src/index.d.ts.map +1 -0
  549. package/dist/src/index.js +91 -0
  550. package/dist/src/index.js.map +1 -0
  551. package/package.json +61 -66
  552. package/LICENSE.md +0 -9
  553. package/lib/data/converters/csv2json.d.ts +0 -2
  554. package/lib/data/converters/csv2json.d.ts.map +0 -1
  555. package/lib/data/converters/csv2json.js +0 -36
  556. package/lib/data/converters/csv2json.js.map +0 -1
  557. package/lib/data/converters/xml2json.d.ts +0 -15
  558. package/lib/data/converters/xml2json.d.ts.map +0 -1
  559. package/lib/data/converters/xml2json.js +0 -46
  560. package/lib/data/converters/xml2json.js.map +0 -1
  561. package/lib/data/reverse-html-mapper/convert-to-embedded-strings.d.ts +0 -2
  562. package/lib/data/reverse-html-mapper/convert-to-embedded-strings.d.ts.map +0 -1
  563. package/lib/data/reverse-html-mapper/convert-to-embedded-strings.js +0 -13
  564. package/lib/data/reverse-html-mapper/convert-to-embedded-strings.js.map +0 -1
  565. package/lib/index.d.ts +0 -54
  566. package/lib/index.d.ts.map +0 -1
  567. package/lib/index.js +0 -94
  568. package/lib/index.js.map +0 -1
  569. package/lib/package.json +0 -76
  570. package/lib/src/anchore-grype-mapper.d.ts +0 -12
  571. package/lib/src/anchore-grype-mapper.d.ts.map +0 -1
  572. package/lib/src/anchore-grype-mapper.js +0 -178
  573. package/lib/src/anchore-grype-mapper.js.map +0 -1
  574. package/lib/src/asff-mapper/asff-mapper.d.ts +0 -112
  575. package/lib/src/asff-mapper/asff-mapper.d.ts.map +0 -1
  576. package/lib/src/asff-mapper/asff-mapper.js +0 -549
  577. package/lib/src/asff-mapper/asff-mapper.js.map +0 -1
  578. package/lib/src/asff-mapper/case-cms-inspec.d.ts +0 -2
  579. package/lib/src/asff-mapper/case-cms-inspec.d.ts.map +0 -1
  580. package/lib/src/asff-mapper/case-cms-inspec.js +0 -83
  581. package/lib/src/asff-mapper/case-cms-inspec.js.map +0 -1
  582. package/lib/src/asff-mapper/case-firewall-manager.d.ts +0 -2
  583. package/lib/src/asff-mapper/case-firewall-manager.d.ts.map +0 -1
  584. package/lib/src/asff-mapper/case-firewall-manager.js +0 -56
  585. package/lib/src/asff-mapper/case-firewall-manager.js.map +0 -1
  586. package/lib/src/asff-mapper/case-guardduty.d.ts +0 -2
  587. package/lib/src/asff-mapper/case-guardduty.d.ts.map +0 -1
  588. package/lib/src/asff-mapper/case-guardduty.js +0 -47
  589. package/lib/src/asff-mapper/case-guardduty.js.map +0 -1
  590. package/lib/src/asff-mapper/case-inspector.d.ts +0 -2
  591. package/lib/src/asff-mapper/case-inspector.d.ts.map +0 -1
  592. package/lib/src/asff-mapper/case-inspector.js +0 -47
  593. package/lib/src/asff-mapper/case-inspector.js.map +0 -1
  594. package/lib/src/asff-mapper/case-previously-hdf.d.ts +0 -2
  595. package/lib/src/asff-mapper/case-previously-hdf.d.ts.map +0 -1
  596. package/lib/src/asff-mapper/case-previously-hdf.js +0 -239
  597. package/lib/src/asff-mapper/case-previously-hdf.js.map +0 -1
  598. package/lib/src/asff-mapper/case-prowler.d.ts +0 -2
  599. package/lib/src/asff-mapper/case-prowler.d.ts.map +0 -1
  600. package/lib/src/asff-mapper/case-prowler.js +0 -69
  601. package/lib/src/asff-mapper/case-prowler.js.map +0 -1
  602. package/lib/src/asff-mapper/case-security-hub.d.ts +0 -2
  603. package/lib/src/asff-mapper/case-security-hub.d.ts.map +0 -1
  604. package/lib/src/asff-mapper/case-security-hub.js +0 -173
  605. package/lib/src/asff-mapper/case-security-hub.js.map +0 -1
  606. package/lib/src/asff-mapper/case-trivy.d.ts +0 -2
  607. package/lib/src/asff-mapper/case-trivy.d.ts.map +0 -1
  608. package/lib/src/asff-mapper/case-trivy.js +0 -101
  609. package/lib/src/asff-mapper/case-trivy.js.map +0 -1
  610. package/lib/src/aws-config-mapper.d.ts +0 -27
  611. package/lib/src/aws-config-mapper.d.ts.map +0 -1
  612. package/lib/src/aws-config-mapper.js +0 -395
  613. package/lib/src/aws-config-mapper.js.map +0 -1
  614. package/lib/src/base-converter.d.ts +0 -40
  615. package/lib/src/base-converter.d.ts.map +0 -1
  616. package/lib/src/base-converter.js +0 -335
  617. package/lib/src/base-converter.js.map +0 -1
  618. package/lib/src/burpsuite-mapper.d.ts +0 -16
  619. package/lib/src/burpsuite-mapper.d.ts.map +0 -1
  620. package/lib/src/burpsuite-mapper.js +0 -195
  621. package/lib/src/burpsuite-mapper.js.map +0 -1
  622. package/lib/src/checkov-mapper.d.ts +0 -67
  623. package/lib/src/checkov-mapper.d.ts.map +0 -1
  624. package/lib/src/checkov-mapper.js +0 -240
  625. package/lib/src/checkov-mapper.js.map +0 -1
  626. package/lib/src/ckl-mapper/checklist-jsonix-converter.d.ts +0 -131
  627. package/lib/src/ckl-mapper/checklist-jsonix-converter.d.ts.map +0 -1
  628. package/lib/src/ckl-mapper/checklist-jsonix-converter.js +0 -604
  629. package/lib/src/ckl-mapper/checklist-jsonix-converter.js.map +0 -1
  630. package/lib/src/ckl-mapper/checklist-mapper.d.ts +0 -57
  631. package/lib/src/ckl-mapper/checklist-mapper.d.ts.map +0 -1
  632. package/lib/src/ckl-mapper/checklist-mapper.js +0 -518
  633. package/lib/src/ckl-mapper/checklist-mapper.js.map +0 -1
  634. package/lib/src/ckl-mapper/checklist-metadata-utils.d.ts +0 -20
  635. package/lib/src/ckl-mapper/checklist-metadata-utils.d.ts.map +0 -1
  636. package/lib/src/ckl-mapper/checklist-metadata-utils.js +0 -181
  637. package/lib/src/ckl-mapper/checklist-metadata-utils.js.map +0 -1
  638. package/lib/src/ckl-mapper/checklistJsonix.d.ts +0 -210
  639. package/lib/src/ckl-mapper/checklistJsonix.d.ts.map +0 -1
  640. package/lib/src/ckl-mapper/checklistJsonix.js +0 -131
  641. package/lib/src/ckl-mapper/checklistJsonix.js.map +0 -1
  642. package/lib/src/ckl-mapper/jsonixMapping.d.ts +0 -115
  643. package/lib/src/ckl-mapper/jsonixMapping.d.ts.map +0 -1
  644. package/lib/src/ckl-mapper/jsonixMapping.js +0 -590
  645. package/lib/src/ckl-mapper/jsonixMapping.js.map +0 -1
  646. package/lib/src/converters-from-hdf/asff/asff-types.d.ts +0 -90
  647. package/lib/src/converters-from-hdf/asff/asff-types.d.ts.map +0 -1
  648. package/lib/src/converters-from-hdf/asff/asff-types.js +0 -4
  649. package/lib/src/converters-from-hdf/asff/asff-types.js.map +0 -1
  650. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.d.ts +0 -39
  651. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.d.ts.map +0 -1
  652. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.js +0 -293
  653. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.js.map +0 -1
  654. package/lib/src/converters-from-hdf/asff/transformers.d.ts +0 -44
  655. package/lib/src/converters-from-hdf/asff/transformers.d.ts.map +0 -1
  656. package/lib/src/converters-from-hdf/asff/transformers.js +0 -513
  657. package/lib/src/converters-from-hdf/asff/transformers.js.map +0 -1
  658. package/lib/src/converters-from-hdf/caat/reverse-caat-mapper.d.ts +0 -32
  659. package/lib/src/converters-from-hdf/caat/reverse-caat-mapper.d.ts.map +0 -1
  660. package/lib/src/converters-from-hdf/caat/reverse-caat-mapper.js +0 -227
  661. package/lib/src/converters-from-hdf/caat/reverse-caat-mapper.js.map +0 -1
  662. package/lib/src/converters-from-hdf/html/embedded-assets.d.ts +0 -4
  663. package/lib/src/converters-from-hdf/html/embedded-assets.d.ts.map +0 -1
  664. package/lib/src/converters-from-hdf/html/embedded-assets.js +0 -8
  665. package/lib/src/converters-from-hdf/html/embedded-assets.js.map +0 -1
  666. package/lib/src/converters-from-hdf/html/html-types.d.ts +0 -75
  667. package/lib/src/converters-from-hdf/html/html-types.d.ts.map +0 -1
  668. package/lib/src/converters-from-hdf/html/html-types.js +0 -4
  669. package/lib/src/converters-from-hdf/html/html-types.js.map +0 -1
  670. package/lib/src/converters-from-hdf/html/reverse-html-mapper.d.ts +0 -42
  671. package/lib/src/converters-from-hdf/html/reverse-html-mapper.d.ts.map +0 -1
  672. package/lib/src/converters-from-hdf/html/reverse-html-mapper.js +0 -438
  673. package/lib/src/converters-from-hdf/html/reverse-html-mapper.js.map +0 -1
  674. package/lib/src/converters-from-hdf/reverse-any-base-converter.d.ts +0 -11
  675. package/lib/src/converters-from-hdf/reverse-any-base-converter.d.ts.map +0 -1
  676. package/lib/src/converters-from-hdf/reverse-any-base-converter.js +0 -20
  677. package/lib/src/converters-from-hdf/reverse-any-base-converter.js.map +0 -1
  678. package/lib/src/converters-from-hdf/reverse-base-converter.d.ts +0 -26
  679. package/lib/src/converters-from-hdf/reverse-base-converter.d.ts.map +0 -1
  680. package/lib/src/converters-from-hdf/reverse-base-converter.js +0 -159
  681. package/lib/src/converters-from-hdf/reverse-base-converter.js.map +0 -1
  682. package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.d.ts +0 -43
  683. package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.d.ts.map +0 -1
  684. package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.js +0 -359
  685. package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.js.map +0 -1
  686. package/lib/src/converters-from-hdf/xccdf/reverse-xccdf-mapper.d.ts +0 -37
  687. package/lib/src/converters-from-hdf/xccdf/reverse-xccdf-mapper.d.ts.map +0 -1
  688. package/lib/src/converters-from-hdf/xccdf/reverse-xccdf-mapper.js +0 -284
  689. package/lib/src/converters-from-hdf/xccdf/reverse-xccdf-mapper.js.map +0 -1
  690. package/lib/src/conveyor-mapper.d.ts +0 -15
  691. package/lib/src/conveyor-mapper.d.ts.map +0 -1
  692. package/lib/src/conveyor-mapper.js +0 -255
  693. package/lib/src/conveyor-mapper.js.map +0 -1
  694. package/lib/src/cyclonedx-sbom-mapper.d.ts +0 -35
  695. package/lib/src/cyclonedx-sbom-mapper.d.ts.map +0 -1
  696. package/lib/src/cyclonedx-sbom-mapper.js +0 -523
  697. package/lib/src/cyclonedx-sbom-mapper.js.map +0 -1
  698. package/lib/src/dbprotect-mapper.d.ts +0 -10
  699. package/lib/src/dbprotect-mapper.d.ts.map +0 -1
  700. package/lib/src/dbprotect-mapper.js +0 -185
  701. package/lib/src/dbprotect-mapper.js.map +0 -1
  702. package/lib/src/dependency-track-mapper.d.ts +0 -10
  703. package/lib/src/dependency-track-mapper.d.ts.map +0 -1
  704. package/lib/src/dependency-track-mapper.js +0 -211
  705. package/lib/src/dependency-track-mapper.js.map +0 -1
  706. package/lib/src/fortify-mapper.d.ts +0 -17
  707. package/lib/src/fortify-mapper.d.ts.map +0 -1
  708. package/lib/src/fortify-mapper.js +0 -235
  709. package/lib/src/fortify-mapper.js.map +0 -1
  710. package/lib/src/gosec-mapper.d.ts +0 -10
  711. package/lib/src/gosec-mapper.d.ts.map +0 -1
  712. package/lib/src/gosec-mapper.js +0 -159
  713. package/lib/src/gosec-mapper.js.map +0 -1
  714. package/lib/src/ionchannel-mapper.d.ts +0 -27
  715. package/lib/src/ionchannel-mapper.d.ts.map +0 -1
  716. package/lib/src/ionchannel-mapper.js +0 -311
  717. package/lib/src/ionchannel-mapper.js.map +0 -1
  718. package/lib/src/jfrog-xray-mapper.d.ts +0 -10
  719. package/lib/src/jfrog-xray-mapper.d.ts.map +0 -1
  720. package/lib/src/jfrog-xray-mapper.js +0 -203
  721. package/lib/src/jfrog-xray-mapper.js.map +0 -1
  722. package/lib/src/jsonix-converter.d.ts +0 -8
  723. package/lib/src/jsonix-converter.d.ts.map +0 -1
  724. package/lib/src/jsonix-converter.js +0 -20
  725. package/lib/src/jsonix-converter.js.map +0 -1
  726. package/lib/src/jsonix-intermediate-converter.d.ts +0 -6
  727. package/lib/src/jsonix-intermediate-converter.d.ts.map +0 -1
  728. package/lib/src/jsonix-intermediate-converter.js +0 -8
  729. package/lib/src/jsonix-intermediate-converter.js.map +0 -1
  730. package/lib/src/mappings/AwsConfigMapping.d.ts +0 -7
  731. package/lib/src/mappings/AwsConfigMapping.d.ts.map +0 -1
  732. package/lib/src/mappings/AwsConfigMapping.js +0 -76
  733. package/lib/src/mappings/AwsConfigMapping.js.map +0 -1
  734. package/lib/src/mappings/AwsConfigMappingData.d.ts +0 -7
  735. package/lib/src/mappings/AwsConfigMappingData.d.ts.map +0 -1
  736. package/lib/src/mappings/AwsConfigMappingData.js +0 -642
  737. package/lib/src/mappings/AwsConfigMappingData.js.map +0 -1
  738. package/lib/src/mappings/CciNistMapping.d.ts +0 -56
  739. package/lib/src/mappings/CciNistMapping.d.ts.map +0 -1
  740. package/lib/src/mappings/CciNistMapping.js +0 -127
  741. package/lib/src/mappings/CciNistMapping.js.map +0 -1
  742. package/lib/src/mappings/CciNistMappingData.d.ts +0 -5101
  743. package/lib/src/mappings/CciNistMappingData.d.ts.map +0 -1
  744. package/lib/src/mappings/CciNistMappingData.js +0 -5104
  745. package/lib/src/mappings/CciNistMappingData.js.map +0 -1
  746. package/lib/src/mappings/CciNistMappingItem.d.ts +0 -6
  747. package/lib/src/mappings/CciNistMappingItem.d.ts.map +0 -1
  748. package/lib/src/mappings/CciNistMappingItem.js +0 -13
  749. package/lib/src/mappings/CciNistMappingItem.js.map +0 -1
  750. package/lib/src/mappings/CheckovToCciAndNistMappingData.d.ts +0 -5
  751. package/lib/src/mappings/CheckovToCciAndNistMappingData.d.ts.map +0 -1
  752. package/lib/src/mappings/CheckovToCciAndNistMappingData.js +0 -2695
  753. package/lib/src/mappings/CheckovToCciAndNistMappingData.js.map +0 -1
  754. package/lib/src/mappings/CweNistMapping.d.ts +0 -14
  755. package/lib/src/mappings/CweNistMapping.d.ts.map +0 -1
  756. package/lib/src/mappings/CweNistMapping.js +0 -49
  757. package/lib/src/mappings/CweNistMapping.js.map +0 -1
  758. package/lib/src/mappings/CweNistMappingData.d.ts +0 -8
  759. package/lib/src/mappings/CweNistMappingData.d.ts.map +0 -1
  760. package/lib/src/mappings/CweNistMappingData.js +0 -1420
  761. package/lib/src/mappings/CweNistMappingData.js.map +0 -1
  762. package/lib/src/mappings/CweNistMappingItem.d.ts +0 -10
  763. package/lib/src/mappings/CweNistMappingItem.d.ts.map +0 -1
  764. package/lib/src/mappings/CweNistMappingItem.js +0 -39
  765. package/lib/src/mappings/CweNistMappingItem.js.map +0 -1
  766. package/lib/src/mappings/NessusPluginNistMappingData.d.ts +0 -10
  767. package/lib/src/mappings/NessusPluginNistMappingData.d.ts.map +0 -1
  768. package/lib/src/mappings/NessusPluginNistMappingData.js +0 -436
  769. package/lib/src/mappings/NessusPluginNistMappingData.js.map +0 -1
  770. package/lib/src/mappings/NessusPluginsNistMapping.d.ts +0 -12
  771. package/lib/src/mappings/NessusPluginsNistMapping.d.ts.map +0 -1
  772. package/lib/src/mappings/NessusPluginsNistMapping.js +0 -39
  773. package/lib/src/mappings/NessusPluginsNistMapping.js.map +0 -1
  774. package/lib/src/mappings/NessusPluginsNistMappingItem.d.ts +0 -8
  775. package/lib/src/mappings/NessusPluginsNistMappingItem.d.ts.map +0 -1
  776. package/lib/src/mappings/NessusPluginsNistMappingItem.js +0 -31
  777. package/lib/src/mappings/NessusPluginsNistMappingItem.js.map +0 -1
  778. package/lib/src/mappings/NiktoNistMapping.d.ts +0 -10
  779. package/lib/src/mappings/NiktoNistMapping.d.ts.map +0 -1
  780. package/lib/src/mappings/NiktoNistMapping.js +0 -22
  781. package/lib/src/mappings/NiktoNistMapping.js.map +0 -1
  782. package/lib/src/mappings/NiktoNistMappingData.d.ts +0 -8944
  783. package/lib/src/mappings/NiktoNistMappingData.d.ts.map +0 -1
  784. package/lib/src/mappings/NiktoNistMappingData.js +0 -8947
  785. package/lib/src/mappings/NiktoNistMappingData.js.map +0 -1
  786. package/lib/src/mappings/NiktoNistMappingItem.d.ts +0 -9
  787. package/lib/src/mappings/NiktoNistMappingItem.d.ts.map +0 -1
  788. package/lib/src/mappings/NiktoNistMappingItem.js +0 -32
  789. package/lib/src/mappings/NiktoNistMappingItem.js.map +0 -1
  790. package/lib/src/mappings/NistCciMappingData.d.ts +0 -2
  791. package/lib/src/mappings/NistCciMappingData.d.ts.map +0 -1
  792. package/lib/src/mappings/NistCciMappingData.js +0 -27
  793. package/lib/src/mappings/NistCciMappingData.js.map +0 -1
  794. package/lib/src/mappings/OwaspNistMapping.d.ts +0 -14
  795. package/lib/src/mappings/OwaspNistMapping.d.ts.map +0 -1
  796. package/lib/src/mappings/OwaspNistMapping.js +0 -57
  797. package/lib/src/mappings/OwaspNistMapping.js.map +0 -1
  798. package/lib/src/mappings/OwaspNistMappingData.d.ts +0 -8
  799. package/lib/src/mappings/OwaspNistMappingData.d.ts.map +0 -1
  800. package/lib/src/mappings/OwaspNistMappingData.js +0 -76
  801. package/lib/src/mappings/OwaspNistMappingData.js.map +0 -1
  802. package/lib/src/mappings/OwaspNistMappingItem.d.ts +0 -10
  803. package/lib/src/mappings/OwaspNistMappingItem.d.ts.map +0 -1
  804. package/lib/src/mappings/OwaspNistMappingItem.js +0 -39
  805. package/lib/src/mappings/OwaspNistMappingItem.js.map +0 -1
  806. package/lib/src/mappings/ScoutsuiteNistMapping.d.ts +0 -11
  807. package/lib/src/mappings/ScoutsuiteNistMapping.d.ts.map +0 -1
  808. package/lib/src/mappings/ScoutsuiteNistMapping.js +0 -31
  809. package/lib/src/mappings/ScoutsuiteNistMapping.js.map +0 -1
  810. package/lib/src/mappings/ScoutsuiteNistMappingData.d.ts +0 -5
  811. package/lib/src/mappings/ScoutsuiteNistMappingData.d.ts.map +0 -1
  812. package/lib/src/mappings/ScoutsuiteNistMappingData.js +0 -562
  813. package/lib/src/mappings/ScoutsuiteNistMappingData.js.map +0 -1
  814. package/lib/src/mappings/ScoutsuiteNistMappingItem.d.ts +0 -7
  815. package/lib/src/mappings/ScoutsuiteNistMappingItem.d.ts.map +0 -1
  816. package/lib/src/mappings/ScoutsuiteNistMappingItem.js +0 -23
  817. package/lib/src/mappings/ScoutsuiteNistMappingItem.js.map +0 -1
  818. package/lib/src/msft-secure-score-mapper.d.ts +0 -34
  819. package/lib/src/msft-secure-score-mapper.d.ts.map +0 -1
  820. package/lib/src/msft-secure-score-mapper.js +0 -271
  821. package/lib/src/msft-secure-score-mapper.js.map +0 -1
  822. package/lib/src/nessus-mapper.d.ts +0 -17
  823. package/lib/src/nessus-mapper.d.ts.map +0 -1
  824. package/lib/src/nessus-mapper.js +0 -370
  825. package/lib/src/nessus-mapper.js.map +0 -1
  826. package/lib/src/netsparker-mapper.d.ts +0 -16
  827. package/lib/src/netsparker-mapper.d.ts.map +0 -1
  828. package/lib/src/netsparker-mapper.js +0 -285
  829. package/lib/src/netsparker-mapper.js.map +0 -1
  830. package/lib/src/neuvector-mapper.d.ts +0 -14
  831. package/lib/src/neuvector-mapper.d.ts.map +0 -1
  832. package/lib/src/neuvector-mapper.js +0 -170
  833. package/lib/src/neuvector-mapper.js.map +0 -1
  834. package/lib/src/nikto-mapper.d.ts +0 -10
  835. package/lib/src/nikto-mapper.d.ts.map +0 -1
  836. package/lib/src/nikto-mapper.js +0 -133
  837. package/lib/src/nikto-mapper.js.map +0 -1
  838. package/lib/src/prisma-mapper.d.ts +0 -25
  839. package/lib/src/prisma-mapper.d.ts.map +0 -1
  840. package/lib/src/prisma-mapper.js +0 -211
  841. package/lib/src/prisma-mapper.js.map +0 -1
  842. package/lib/src/sarif-mapper.d.ts +0 -10
  843. package/lib/src/sarif-mapper.d.ts.map +0 -1
  844. package/lib/src/sarif-mapper.js +0 -190
  845. package/lib/src/sarif-mapper.js.map +0 -1
  846. package/lib/src/scoutsuite-mapper.d.ts +0 -10
  847. package/lib/src/scoutsuite-mapper.d.ts.map +0 -1
  848. package/lib/src/scoutsuite-mapper.js +0 -302
  849. package/lib/src/scoutsuite-mapper.js.map +0 -1
  850. package/lib/src/snyk-mapper.d.ts +0 -15
  851. package/lib/src/snyk-mapper.d.ts.map +0 -1
  852. package/lib/src/snyk-mapper.js +0 -197
  853. package/lib/src/snyk-mapper.js.map +0 -1
  854. package/lib/src/sonarqube-mapper.d.ts +0 -276
  855. package/lib/src/sonarqube-mapper.d.ts.map +0 -1
  856. package/lib/src/sonarqube-mapper.js +0 -826
  857. package/lib/src/sonarqube-mapper.js.map +0 -1
  858. package/lib/src/splunk-mapper.d.ts +0 -49
  859. package/lib/src/splunk-mapper.d.ts.map +0 -1
  860. package/lib/src/splunk-mapper.js +0 -317
  861. package/lib/src/splunk-mapper.js.map +0 -1
  862. package/lib/src/trufflehog-mapper.d.ts +0 -16
  863. package/lib/src/trufflehog-mapper.d.ts.map +0 -1
  864. package/lib/src/trufflehog-mapper.js +0 -115
  865. package/lib/src/trufflehog-mapper.js.map +0 -1
  866. package/lib/src/twistlock-mapper.d.ts +0 -16
  867. package/lib/src/twistlock-mapper.d.ts.map +0 -1
  868. package/lib/src/twistlock-mapper.js +0 -198
  869. package/lib/src/twistlock-mapper.js.map +0 -1
  870. package/lib/src/utils/CCI_List.d.ts +0 -2
  871. package/lib/src/utils/CCI_List.d.ts.map +0 -1
  872. package/lib/src/utils/CCI_List.js +0 -56259
  873. package/lib/src/utils/CCI_List.js.map +0 -1
  874. package/lib/src/utils/attestations.d.ts +0 -12
  875. package/lib/src/utils/attestations.d.ts.map +0 -1
  876. package/lib/src/utils/attestations.js +0 -234
  877. package/lib/src/utils/attestations.js.map +0 -1
  878. package/lib/src/utils/compliance.d.ts +0 -4
  879. package/lib/src/utils/compliance.d.ts.map +0 -1
  880. package/lib/src/utils/compliance.js +0 -35
  881. package/lib/src/utils/compliance.js.map +0 -1
  882. package/lib/src/utils/fingerprinting.d.ts +0 -35
  883. package/lib/src/utils/fingerprinting.d.ts.map +0 -1
  884. package/lib/src/utils/fingerprinting.js +0 -220
  885. package/lib/src/utils/fingerprinting.js.map +0 -1
  886. package/lib/src/utils/global.d.ts +0 -16
  887. package/lib/src/utils/global.d.ts.map +0 -1
  888. package/lib/src/utils/global.js +0 -111
  889. package/lib/src/utils/global.js.map +0 -1
  890. package/lib/src/utils/parseJson.d.ts +0 -6
  891. package/lib/src/utils/parseJson.d.ts.map +0 -1
  892. package/lib/src/utils/parseJson.js +0 -17
  893. package/lib/src/utils/parseJson.js.map +0 -1
  894. package/lib/src/utils/result.d.ts +0 -8
  895. package/lib/src/utils/result.d.ts.map +0 -1
  896. package/lib/src/utils/result.js +0 -3
  897. package/lib/src/utils/result.js.map +0 -1
  898. package/lib/src/utils/splunk-tools.d.ts +0 -6
  899. package/lib/src/utils/splunk-tools.d.ts.map +0 -1
  900. package/lib/src/utils/splunk-tools.js +0 -117
  901. package/lib/src/utils/splunk-tools.js.map +0 -1
  902. package/lib/src/veracode-mapper.d.ts +0 -10
  903. package/lib/src/veracode-mapper.d.ts.map +0 -1
  904. package/lib/src/veracode-mapper.js +0 -491
  905. package/lib/src/veracode-mapper.js.map +0 -1
  906. package/lib/src/xccdf-results-mapper.d.ts +0 -16
  907. package/lib/src/xccdf-results-mapper.d.ts.map +0 -1
  908. package/lib/src/xccdf-results-mapper.js +0 -509
  909. package/lib/src/xccdf-results-mapper.js.map +0 -1
  910. package/lib/src/zap-mapper.d.ts +0 -18
  911. package/lib/src/zap-mapper.d.ts.map +0 -1
  912. package/lib/src/zap-mapper.js +0 -238
  913. package/lib/src/zap-mapper.js.map +0 -1
  914. package/lib/tsconfig.build.tsbuildinfo +0 -1
  915. package/lib/types/neuvector-types.d.ts +0 -105
  916. package/lib/types/neuvector-types.d.ts.map +0 -1
  917. package/lib/types/neuvector-types.js +0 -83
  918. package/lib/types/neuvector-types.js.map +0 -1
  919. package/lib/types/splunk-config-types.d.ts +0 -14
  920. package/lib/types/splunk-config-types.d.ts.map +0 -1
  921. package/lib/types/splunk-config-types.js +0 -3
  922. package/lib/types/splunk-config-types.js.map +0 -1
  923. package/lib/types/splunk-control-types.d.ts +0 -44
  924. package/lib/types/splunk-control-types.d.ts.map +0 -1
  925. package/lib/types/splunk-control-types.js +0 -3
  926. package/lib/types/splunk-control-types.js.map +0 -1
  927. package/lib/types/splunk-profile-types.d.ts +0 -54
  928. package/lib/types/splunk-profile-types.d.ts.map +0 -1
  929. package/lib/types/splunk-profile-types.js +0 -3
  930. package/lib/types/splunk-profile-types.js.map +0 -1
  931. package/lib/types/splunk-report-types.d.ts +0 -21
  932. package/lib/types/splunk-report-types.d.ts.map +0 -1
  933. package/lib/types/splunk-report-types.js +0 -3
  934. package/lib/types/splunk-report-types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"sonarqube-mapper.js","sourceRoot":"","sources":["../../src/sonarqube-mapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAuD;AACvD,iDAAmC;AACnC,0CAA4B;AAC5B,mCAAkC;AAClC,uCAAkC;AAClC,+BAA6B;AAC7B,kDAAgE;AAChE,qDAK0B;AAC1B,8DAAyD;AACzD,kEAA6D;AAC7D,2CAIwB;AAExB,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,eAAe,CAAC,CAAC;AAEpD,6SAA6S;AAC7S,IAAK,gBAKJ;AALD,WAAK,gBAAgB;IACnB,mCAAe,CAAA;IACf,kCAAc,CAAA;IACd,kCAAc,CAAA;IACd,4CAAwB,CAAA;AAC1B,CAAC,EALI,gBAAgB,KAAhB,gBAAgB,QAKpB;AAED,qJAAqJ;AACrJ,SAAS,uBAAuB,CAC9B,OAAe;IAEf,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC;IAChD,MAAM,CAAC,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,0CAA0C,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,WAAE,EAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAe;IAEf,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC;IAC/C,MAAM,CAAC,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,0CAA0C,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,WAAE,EAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAe;IAEf,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CAAC;IACvD,MAAM,CAAC,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,0CAA0C,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,WAAE,EAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,6BAA6B,CACpC,OAAe;IAEf,MAAM,iBAAiB,GAAG,UAAU,CAAC,CAAC,yLAAyL;IAC/N,MAAM,CAAC,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,0CAA0C,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,WAAE,EAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClC,CAAC;AASD,SAAS,wBAAwB,CAC/B,OAAe,EACf,iBAAyB;IAEzB,MAAM,CAAC,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,0CAA0C,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAC;IACrC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,0BAA0B,iBAAiB,0CAA0C,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,WAAE,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnB,CAAC;AAsND,8GAA8G;AAC9G,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,UAAU,EAAE,GAAG,CAAC;IACjB,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,MAAM,EAAE,GAAG,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,+BAAc,EAAE,CAAC;AAC9C,MAAM,kBAAkB,GAAG,IAAI,mCAAgB,EAAE,CAAC;AAElD,SAAS,mBAAmB,CAC1B,KAA+D;IAE/D,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,gCAAgC;AAC7F,CAAC;AAED,SAAS,cAAc,CACrB,KAA+D;IAE/D,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;IACxC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,kBAAkB,GAAG;QACzB,GAAG,WAAW,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACxD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mEAAmE;IACvF,MAAM,aAAa,GAAG,mBAAmB,CAAI,KAAK,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CACnB,KAA+D;IAE/D,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;IACxC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,0CAA0C;IAEpH,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CACpB,KAA+D;IAE/D,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CACvB,CAAC,YAAY,CAAI,KAAK,CAAC,IAAI,EAAE,CAAC;SAC3B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D,MAAM;IACL,uHAAuH;IACvH,CAAC,mBAAmB,CAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAC1C,CACF,CACJ,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,4UAA4U;AAChW,CAAC;AAED,MAAa,eAA4C,SAAQ,8BAEhE;IAuamB;IAtalB,OAAO,CAAU;IAEjB,QAAQ,GAGJ;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,sBAAoB;SAC9B;QACD,OAAO,EAAE,sBAAoB;QAC7B,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE;oBACP,WAAW,EAAE,CAAC,IAAa,EAAU,EAAE,CACrC,cAAc,IAAI,CAAC,gBAAgB,EAAE;iBACxC;gBACD,KAAK,EAAE;oBACL,WAAW,EAAE,CAAC,IAAa,EAAU,EAAE;wBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa;4BACpC,CAAC,CAAC,iBAAiB,IAAI,CAAC,aAAa,EAAE;4BACvC,CAAC,CAAC,EAAE,CAAC;wBACP,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY;4BAC3B,CAAC,CAAC,iBAAiB,IAAI,CAAC,YAAY,EAAE;4BACtC,CAAC,CAAC,EAAE,CAAC;wBACP,OAAO,6BAA6B,IAAI,CAAC,UAAU,OAAO,IAAI,CAAC,aAAa,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrP,CAAC;iBACF;gBACD,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,eAAe;wBACrB,GAAG,EAAE,IAAI;wBACT,IAAI,EAAE;4BACJ,WAAW,EAAE,CACX,KAA+D,EACvD,EAAE;gCACV,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;gCACxC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;oCACvB,OAAO,IAAI,CAAC,QAAQ,CAAC;gCACvB,CAAC;gCACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oCAC9B,OAAO,EAAE,CAAC;gCACZ,CAAC;gCACD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAC3B,CAAC;gCACF,IAAI,GAAG,EAAE,CAAC;oCACR,OAAO,GAAG,CAAC,OAAO,CAAC;gCACrB,CAAC;gCACD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,cAAc,CAChC,CAAC;gCACF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAC9B,CAAC;gCACF,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC;qCAC7B,MAAM,CACL,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,KAAK,SAAS,CAC5D;qCACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;qCACrB,IAAI,CAAC,IAAI,CAAC,CAAC;4BAChB,CAAC;yBACF;wBACD,IAAI,EAAE,EAAE;wBACR,eAAe,EAAE,EAAE;wBACnB,EAAE,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC;wBAClB,KAAK,EAAE,EAAC,IAAI,EAAE,2BAA2B,EAAC;wBAC1C,MAAM,EAAE;4BACN,IAAI,EAAE,UAAU;4BAChB,WAAW,EAAE,IAAA,8BAAa,EAAC,cAAc,CAAC;yBAC3C;wBACD,IAAI,EAAE;4BACJ,GAAG,EAAE;gCACH,WAAW,EAAE,CACX,KACoB,EACV,EAAE,CAAC,IAAA,2BAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;6BAC9D;4BACD,IAAI,EAAE,EAAC,WAAW,EAAE,aAAa,EAAC;4BAClC,KAAK,EAAE,EAAC,WAAW,EAAE,YAAY,EAAC;4BAClC,KAAK,EAAE,EAAC,WAAW,EAAE,cAAc,EAAC;4BACpC,SAAS,EAAE,EAAC,IAAI,EAAE,gCAAgC,EAAC;4BACnD,aAAa,EAAE,EAAC,IAAI,EAAE,oCAAoC,EAAC;4BAC3D,oBAAoB,EAAE;gCACpB,IAAI,EAAE,2CAA2C;6BAClD;4BACD,UAAU,EAAE,EAAC,IAAI,EAAE,iCAAiC,EAAC;4BACrD,UAAU,EAAE,EAAC,IAAI,EAAE,iCAAiC,EAAC;4BACrD,QAAQ,EAAE,EAAC,IAAI,EAAE,+BAA+B,EAAC;4BACjD,eAAe,EAAE,EAAC,IAAI,EAAE,sCAAsC,EAAC;4BAC/D,eAAe,EAAE,EAAC,IAAI,EAAE,sCAAsC,EAAC;4BAC/D,SAAS,EAAE,EAAC,IAAI,EAAE,gCAAgC,EAAC;4BACnD,IAAI,EAAE,EAAC,IAAI,EAAE,2BAA2B,EAAC;4BACzC,KAAK,EAAE,EAAC,IAAI,EAAE,4BAA4B,EAAC;4BAC3C,YAAY,EAAE,EAAC,IAAI,EAAE,+BAA+B,EAAC;4BACrD,MAAM,EAAE,EAAC,IAAI,EAAE,6BAA6B,EAAC;4BAC7C,WAAW,EAAE,CACX,KAA+D,EAC/D,EAAE,CAAC,CAAC;gCACJ,GAAG,IAAA,sCAA6B,EAC9B,SAAS,EACT,KAAK,CAAC,eAAe,CAAC,OAAO,EAC7B,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAC3C;gCACD,GAAG,IAAA,sCAA6B,EAC9B,sBAAsB,EACtB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAC7C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,KAAK,CAAC,CAC5D;gCACD,GAAG,IAAA,sCAA6B,EAC9B,+BAA+B,EAC/B,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,0BAA0B,EACrD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,0BAA0B;oCACnD,EAAE,MAAM,KAAK,CAAC,CACjB;gCACD,GAAG,IAAA,sCAA6B,EAC9B,iBAAiB,EACjB,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCAC5C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAC3C,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCAC5C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAC1D;gCACD,GAAG,IAAA,sCAA6B,EAC9B,mBAAmB,EACnB,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCAC5C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAC3C,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCAC5C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAC1D;gCACD,GAAG,IAAA,sCAA6B,EAC9B,oBAAoB,EACpB,iBAAiB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCAC7C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAC5C,iBAAiB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAChD;gCACD,GAAG,IAAA,sCAA6B,EAC9B,2BAA2B,EAC3B,uBAAuB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACnD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAClD,uBAAuB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACnD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB;wCAC9C,SAAS,CACd;gCACD,GAAG,IAAA,sCAA6B,EAC9B,4BAA4B,EAC5B,wBAAwB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACpD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,EACnD,wBAAwB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CACvD;gCACD,GAAG,IAAA,sCAA6B,EAC9B,sBAAsB,EACtB,qBAAqB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACjD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAChD,qBAAqB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACjD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,KAAK,CAAC,CAC/D;gCACD,GAAG,IAAA,sCAA6B,EAC9B,2BAA2B,EAC3B,wBAAwB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACpD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,EACnD,wBAAwB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACpD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB;wCAC/C,SAAS,CACd;gCACD,GAAG,IAAA,sCAA6B,EAC9B,SAAS,EACT,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAClC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CACjD;gCACD,GAAG,IAAA,sCAA6B,EAC9B,0BAA0B,EAC1B,IAAI,EACJ,KAAK,CAAC,IAAI,KAAK,eAAe,CAC/B;gCACD,GAAG,IAAA,sCAA6B,EAC9B,gBAAgB,EAChB,IAAI,EACJ,KAAK,CAAC,IAAI,KAAK,KAAK,CACrB;gCACD,GAAG,IAAA,sCAA6B,EAC9B,uBAAuB,EACvB,IAAI,EACJ,KAAK,CAAC,IAAI,KAAK,YAAY,CAC5B;gCACD,GAAG,IAAA,sCAA6B,EAC9B,QAAQ,EACR,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EACjC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,CAChD;gCACD,GAAG,IAAA,sCAA6B,EAC9B,oBAAoB,EACpB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAC5C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,KAAK,CAAC,CAC3D;gCACD,GAAG,IAAA,sCAA6B,EAC9B,UAAU,EACV,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAClC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CACjD;gCACD,GAAG,IAAA,sCAA6B,EAC9B,MAAM,EACN,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAC/B,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,CAC9C;gCACD,GAAG,IAAA,sCAA6B,EAC9B,YAAY,EACZ,WAAW,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI;oCACvC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EACtC,WAAW,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAC1C;6BACF,CAAC;yBACH;wBACD,OAAO,EAAE;4BACP;gCACE,MAAM,EAAE,mBAAQ,CAAC,mBAAmB,CAAC,MAAM;gCAC3C,SAAS,EAAE,EAAC,IAAI,EAAE,aAAa,EAAC;gCAChC,UAAU,EAAE,EAAC,IAAI,EAAE,cAAc,EAAC;gCAClC,OAAO,EAAE;oCACP,WAAW,EAAE,CACX,KACoB,EACpB,EAAE,CACF,IAAI,CAAC,SAAS,CACZ;wCACE,+BAA+B;wCAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;wCAEtB,qBAAqB;wCACrB,MAAM,EAAE,KAAK,CAAC,MAAM;wCACpB,eAAe,EAAE,KAAK,CAAC,YAAY;wCACnC,IAAI,EAAE,KAAK,CAAC,IAAI;wCAChB,MAAM,EAAE,KAAK,CAAC,MAAM;wCACpB,GAAG,IAAA,sCAA6B,EAC9B,cAAc,EACd,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,CAChC;wCACD,GAAG,IAAA,sCAA6B,EAC9B,YAAY,EACZ,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,CAC/B;wCACD,MAAM,EAAE,KAAK,CAAC,MAAM;wCACpB,aAAa,EAAE,KAAK,CAAC,UAAU;wCAE/B,eAAe;wCACf,GAAG,IAAA,sCAA6B,EAC9B,SAAS,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAC5B;wCACD,GAAG,IAAA,sCAA6B,EAC9B,MAAM,EACN,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,KAAK,SAAS,CACzB;wCACD,GAAG,IAAA,sCAA6B,EAC9B,eAAe,EACf,cAAc,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,EAC7C,cAAc,IAAI,KAAK;4CACrB,KAAK,CAAC,YAAY,EAAE,MAAM,KAAK,CAAC,CACnC;wCACD,GAAG,IAAA,sCAA6B,EAC9B,UAAU,EACV,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,CAC7B;wCACD,GAAG,IAAA,sCAA6B,EAC9B,OAAO,EACP,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAC1B;wCACD,GAAG,IAAA,sCAA6B,EAC9B,cAAc,EACd,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAC3C,aAAa,IAAI,KAAK;4CACpB,KAAK,CAAC,WAAW,KAAK,SAAS;4CAC/B,KAAK,CAAC,WAAW,KAAK,IAAI,CAC7B;wCACD,IAAI,EAAE,KAAK,CAAC,IAAI;wCAChB,GAAG,EAAE,KAAK,CAAC,GAAG;wCACd,GAAG,IAAA,sCAA6B,EAC9B,qBAAqB,EACrB,KAAK,CAAC,kBAAkB,EACxB,KAAK,CAAC,kBAAkB,EAAE,MAAM,KAAK,CAAC,CACvC;wCACD,GAAG,IAAA,sCAA6B,EAC9B,kBAAkB,EAClB,iBAAiB,IAAI,KAAK,IAAI,KAAK,CAAC,eAAe,EACnD,iBAAiB,IAAI,KAAK,CAC3B;wCACD,GAAG,IAAA,sCAA6B,EAC9B,cAAc,EACd,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,CAChC;wCACD,GAAG,IAAA,sCAA6B,EAC9B,qBAAqB,EACrB,mBAAmB,IAAI,KAAK;4CAC1B,KAAK,CAAC,iBAAiB,EACzB,mBAAmB,IAAI,KAAK;4CAC1B,KAAK,CAAC,iBAAiB,KAAK,SAAS,CACxC;wCACD,GAAG,IAAA,sCAA6B,EAC9B,8BAA8B,EAC9B,2BAA2B,IAAI,KAAK;4CAClC,KAAK,CAAC,yBAAyB,EACjC,2BAA2B,IAAI,KAAK;4CAClC,KAAK,CAAC,yBAAyB,EAAE,MAAM,KAAK,CAAC,CAChD;wCACD,GAAG,IAAA,sCAA6B,EAC9B,MAAM,EACN,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,CACzB;wCACD,GAAG,IAAA,sCAA6B,EAC9B,aAAa,EACb,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,CAChC;qCACF,EACD,IAAI,EACJ,CAAC,CACF;iCACJ;6BACF;yBACF;wBACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;4BAClB,YAAY,EAAE;gCACZ,WAAW,EAAE,CACX,KACoB,EACkB,EAAE;oCACxC,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;oCACxC,IACE,IAAI,CAAC,mBAAmB;wCACxB,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EACnC,CAAC;wCACD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAC3B,CAAC;wCACF,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,cAAc,CAChC,CAAC;wCACF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAC9B,CAAC;wCACF,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,oBAAoB,CACtC,CAAC;wCACF,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAC9B,CAAC;wCACF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC;4CACC,SAAS;4CACT,cAAc;4CACd,YAAY;4CACZ,oBAAoB;4CACpB,YAAY;yCACb,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CACpB,CAAC;wCACF,MAAM,QAAQ,GAAG;4CACf,GAAG;4CACH,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;4CAC9B,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;4CAC3B,KAAK;4CACL,GAAG;4CACH,GAAG,SAAS;yCACb;6CACE,MAAM,CACL,CAAC,CAAC,EAAuC,EAAE,CACzC,CAAC,KAAK,SAAS,CAClB;6CACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4CACX,IAAI,EAAE,CAAC,CAAC,OAAO;4CACf,KAAK,EACH,CAAC,CAAC,GAAG,KAAK,oBAAoB;gDAC5B,CAAC,CAAC,OAAO;gDACT,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY;oDACtB,CAAC,CAAC,KAAK;oDACP,CAAC,CAAC,CAAC,CAAC,GAAG;yCACd,CAAC,CAAC,CAAC;wCACN,IAAI,QAAQ,EAAE,CAAC;4CACb,OAAO,QAAQ,CAAC;wCAClB,CAAC;oCACH,CAAC;oCACD,OAAO,IAAI,CAAC;gCACd,CAAC;6BACF;yBACF,CAAC;qBACH;iBACF;gBACD,MAAM,EAAE,EAAE;aACX;SACF;QACD,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,IAAa,EAA2B,EAAE;gBACtD,OAAO;oBACL,cAAc,EAAE;wBACd;4BACE,IAAI,EAAE,WAAW;4BACjB,IAAI,EAAE;gCACJ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;6BACjC;yBACF;qBACF;oBACD,GAAG,IAAA,sCAA6B,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;iBAC5D,CAAC;YACJ,CAAC;SACF;KACF,CAAC;IAEF,YACkB,IAAa,EAC7B,OAAO,GAAG,KAAK;QAEf,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,SAAI,GAAJ,IAAI,CAAS;QAI7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AA/aD,0CA+aC;AAED,sNAAsN;AACtN,IAAK,oBAGJ;AAHD,WAAK,oBAAoB;IACvB,qFAAe,CAAA;IACf,6EAAW,CAAA;AACb,CAAC,EAHI,oBAAoB,KAApB,oBAAoB,QAGxB;AAED,MAAa,gBAAgB;IAIT;IACA;IACC;IACD;IACA;IACA;IACA;IACA;IAVlB,UAAU,CAAwB;IAClC,WAAW,CAAgB;IAC3B,YACkB,aAAqB,EACrB,UAAkB,EACjB,SAAiB,EAClB,UAAmB,EAAE,yEAAyE;IAC9F,aAAsB,EACtB,YAAqB,EAAE,0KAA0K;IACjM,UAAU,KAAK,EACf,oBAA6B,CAAC,0FAA0F;;QAPxH,kBAAa,GAAb,aAAa,CAAQ;QACrB,eAAU,GAAV,UAAU,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAQ;QAClB,eAAU,GAAV,UAAU,CAAS;QACnB,kBAAa,GAAb,aAAa,CAAS;QACtB,iBAAY,GAAZ,YAAY,CAAS;QACrB,YAAO,GAAP,OAAO,CAAQ;QACf,yBAAoB,GAApB,oBAAoB,CAAS;QAE7C,IAAI,CAAC,WAAW,GAAG,eAAK,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,GAAG;YACpC,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7B,IACE,GAAG,EAAE,mBAAmB,KAAK,IAAI;oBACjC,GAAG,EAAE,mBAAmB,KAAK,SAAS,EACtC,CAAC;oBACD,MAAM,CAAC,KAAK,CACV,kCAAkC,GAAG,EAAE,mBAAmB,IAAI,WAAW,4BAA4B,CACtG,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;SACF,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,CAAa;QACzB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,8FAA8F;IAC9F,8FAA8F;IAC9F,MAAM,CAAU,wBAAwB,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,CAAU,wBAAwB,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAEvE,KAAK,CAAC,qBAAqB,CAAC,gBAAwB;QAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;QAE/D,gFAAgF;QAChF,IAAI,WAAqB,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACzC,GAAG,IAAI,CAAC,aAAa,uBAAuB,EAC5C;gBACE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,eAAe,IAAI;oBAC9D,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAC;iBAC/C,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,WAAW,IAAI;oBAC1D,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,EAAC;iBACrD,CAAC;aACH,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CACnD,CAAC,EAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,CACjD,CAAC;YACF,MAAM,YAAY,GAAG,aAAa,EAAE,OAAO,EAAE,IAAI,CAC/C,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CACzC,CAAC;YACF,MAAM,WAAW,GAAG,YAAY,EAAE,MAAM,EAAE,IAAI,CAC5C,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,cAAc,CAC/C,CAAC;YAEF,IAAI,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;gBACxC,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CACzD,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;gBACF,MAAM,CAAC,IAAI,CACT,yCAAyC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,mDAAmD,cAAc,IAAI;oBACnE,mBAAmB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CACnD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oEAAoE;YACpE,WAAW,GAAG,QAAQ;gBACpB,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;gBACzD,CAAC,CAAC;oBACE,MAAM;oBACN,WAAW;oBACX,gBAAgB;oBAChB,UAAU;oBACV,OAAO;oBACP,YAAY;iBACb,CAAC;YACN,MAAM,CAAC,IAAI,CACT,4DAA4D,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpF,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,2CAA2C;QAC3C,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,gBAAgB,CAAC,wBAAwB;YAC3C,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;QAC9C,IAAI,OAAoB,CAAC;QAEzB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,yDAAyD;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB;iBAC7C,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iBAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/B,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;YAElC,gDAAgD;YAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YAEzE,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CACT,wCAAwC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;oBACpE,qEAAqE,CACxE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CACT,qCAAqC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;oBAC9D,uBAAuB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;oBACrD,4EAA4E;oBAC5E,2CAA2C,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,OAAO,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CACT,oCAAoC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CACT,mFAAmF;gBACjF,cAAc,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC1E,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CACT,iCAAiC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACtF,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,gBAAwB;QAExB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,uOAAuO;QAClQ,MAAM,kBAAkB,GACtB,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAC;QAEtB,MAAM,YAAY,GAAG,KAAK,EACxB,SAAiB,EACjB,IAAY,EACZ,QAAQ,GAAG,SAAS,EACpB,EAAE;YACF,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CACzB,GAAG,IAAI,CAAC,aAAa,oBAAoB,EACzC;gBACE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,eAAe,IAAI;oBAC9D,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAC;iBAC/C,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,WAAW,IAAI;oBAC1D,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,EAAC;iBACrD,CAAC;gBACF,MAAM,EAAE;oBACN,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;wBACnD,CAAC,CAAC,eAAe;wBACjB,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS;oBAC5B,GAAG,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;wBACtD,CAAC,CAAC,EAAC,QAAQ,EAAE,kBAAkB,EAAC;wBAChC,CAAC,CAAC,EAAC,aAAa,EAAE,kBAAkB,EAAC,CAAC;oBACxC,CAAC,EAAE,IAAI;oBACP,EAAE,EAAE,QAAQ;oBACZ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC;oBACjD,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;iBAC7D;aACF,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,qBAAqB,GAAG,KAAK,EACjC,SAAiB,EACjB,IAAY,EACZ,QAAQ,GAAG,SAAS,EACpB,EAAE;YACF,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CACzB,GAAG,IAAI,CAAC,aAAa,sBAAsB,EAC3C;gBACE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,eAAe,IAAI;oBAC9D,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAC;iBAC/C,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,WAAW,IAAI;oBAC1D,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,EAAC;iBACrD,CAAC;gBACF,MAAM,EAAE;oBACN,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,UAAU;oBACpB,CAAC,EAAE,IAAI;oBACP,EAAE,EAAE,QAAQ;oBACZ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC;oBACjD,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;iBAC7D;aACF,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,wHAAwH;QACxH,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;YACxE,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,OAAO,GAAc;gBACzB,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC;aAC9C,CAAC;YACF,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC;qBAChC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE;oBACf,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAChD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;oBACF,uMAAuM;oBACvM,MAAM;wBACJ,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBACpE,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;gBACL,IAAI,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CACT,6BAA6B,WAAW,yCAAyC,SAAS,mDAAmD,CAC9I,CAAC;oBACF,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,gNAAgN;YAC1Q,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,2BAA2B,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC9D,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,OAAO,GAAoB;gBAC/B,MAAM,EAAE,EAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC;gBAC7C,aAAa,EAAE;oBACb,GAAG,EAAE,MAAM;oBACX,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,MAAM;oBACjB,IAAI,EAAE,EAAE;oBACR,UAAU,EAAE,OAAO;iBACpB;gBACD,UAAU,EAAE,EAAE;aACf,CAAC;YACF,OAAO,MAAM,EAAE,CAAC;gBACd,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC;qBACzC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE;oBACf,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAChD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;oBACF,MAAM;wBACJ,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBACpE,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;gBACL,IAAI,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CACT,6BAA6B,WAAW,+CAA+C,SAAS,4DAA4D,CAC7J,CAAC;oBACF,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAc,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,2HAA2H;gBAC3H,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;gBACzC,MAAM,eAAe,GAAG,MAAM,2BAA2B,CAAC,SAAS,CAAC,CAAC;gBACrE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAC5D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAC3D,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CACT,gEAAgE,CACjE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CACT,uEAAuE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,+BAA+B,CACnJ,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAA6C;QAE7C,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;YAC/D,OAAO,IAAI,CAAC,WAAW;iBACpB,GAAG,CAAS,GAAG,IAAI,CAAC,aAAa,kBAAkB,EAAE;gBACpD,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,eAAe,IAAI;oBAC9D,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAC;iBAC/C,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,WAAW,IAAI;oBAC1D,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,EAAC;iBACrD,CAAC;gBACF,MAAM,EAAE;oBACN,GAAG,EAAE,SAAS;oBACd,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC;oBACjD,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;iBAC7D;gBACD,YAAY,EAAE,MAAM;aACrB,CAAC;iBACD,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC;iBACtB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,gDAAgD,SAAS,EAAE,CAC5D,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,OAAe,EAAU,EAAE,CAClD,OAAO;aACJ,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,wBAAwB,GAAG,CAC/B,SAAiC,EACjC,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,GAAY,EACJ,EAAE;YACV,MAAM,gBAAgB,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,gBAAgB;iBAC7B,KAAK,CAAC,IAAI,CAAC;iBACX,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,sQAAsQ;iBACrT,IAAI,CAAC,IAAI,CAAC;iBACV,IAAI,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,SAAS,IAAI,OAAO,IAAI,CAAC;YAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,QAAQ,GAAG,OAAO,UAAU,OAAO,UAAU,CAAC;QAC1D,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CACvB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,KAAK,CAAC,KAAK,CAAC,MAAM;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CACrD;YACH,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CACtB,CACF,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CACtD,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,KAAK;qBACf,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC9B,wBAAwB,CACtB,SAAS,EACT,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,SAAS,CAAC,SAAS,EAC5B,QAAQ,CAAC,SAAS,CAAC,OAAO,EAC1B,QAAQ,CAAC,GAAG,CACb,CACF,CACF;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,wBAAwB,CAC7B,SAAS,EACT,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,OAAO,CACxB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,MAA6C;QAE7C,MAAM,OAAO,GAAG,KAAK,EACnB,IAAY,EACZ,YAAqB,EACH,EAAE,CACpB,IAAI,CAAC,WAAW;aACb,GAAG,CAAU,GAAG,IAAI,CAAC,aAAa,iBAAiB,EAAE;YACpD,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,eAAe,IAAI;gBAC9D,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAC;aAC/C,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAoB,CAAC,WAAW,IAAI;gBAC1D,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,EAAC;aACrD,CAAC;YACF,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI;oBACzC,YAAY,EAAE,YAAY,IAAI,IAAI,CAAC,YAAY;iBAChD,CAAC,CAAC,+CAA+C;aACnD;SACF,CAAC;aACD,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC;aACtB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CACvD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEP,MAAM,YAAY,GAAmC,CAAC,CAAC,QAAQ,CAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EACvD,CAAC,CAAC,OAAO,CACV,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,CACzD,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,CAAC,CAAC,GAAG,CACH,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACvD,gBAAgB,CACjB,CACF,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CACtB,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,WAAW,CACf,gBAAwB;QAExB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAI,gBAAgB,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,MAAM,gBAAgB,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAY;YACpB,gBAAgB;YAChB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE;gBACN,GAAG,aAAa;gBAChB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClD,GAAG,KAAK;oBACR,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC;oBAChC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC;iBAC9B,CAAC,CAAC;aACJ;SACF,CAAC;QACF,OAAO,IAAI,eAAe,CAAI,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW;aAC5C,GAAG,CAAS,GAAG,IAAI,CAAC,aAAa,qBAAqB,CAAC;aACvD,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CACV,sBAAsB,IAAI,CAAC,aAAa,aAAa,gBAAgB,EAAE,CACxE,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,sBAAsB,CAAC,gBAAgB,CAAC;YACxD,CAAC,CAAC,oBAAoB,CAAC,eAAe;YACtC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC;QAErC,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,WAAW,CAAyB,gBAAgB,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,WAAW,CAAwB,gBAAgB,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,WAAW,CAAuB,gBAAgB,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,6BAA6B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC,WAAW,CAA+B,gBAAgB,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CACV,qBAAqB,gBAAgB,0HAA0H,CAChK,CAAC;YACF,OAAO,IAAI,CAAC,WAAW,CAA+B,gBAAgB,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;;AAriBH,4CAsiBC","sourcesContent":["import axios, {AxiosError, AxiosInstance} from 'axios';\nimport * as rax from 'retry-axios';\nimport * as _ from 'lodash';\nimport {coerce, lt} from 'semver';\nimport {ExecJSON} from 'inspecjs';\nimport {inspect} from 'util';\nimport {version as HeimdallToolsVersion} from '../package.json';\nimport {\n BaseConverter,\n ILookupPath,\n impactMapping,\n MappedTransform\n} from './base-converter';\nimport {CweNistMapping} from './mappings/CweNistMapping';\nimport {OwaspNistMapping} from './mappings/OwaspNistMapping';\nimport {\n conditionallyProvideAttribute,\n createWinstonLogger,\n getCCIsForNISTTags\n} from './utils/global';\n\nconst logger = createWinstonLogger('SonarQube2HDF');\n\n// the Sonarqube schema typings are meant to support the four versions out right now (8, 9, 10, and 2025/25). 9 and 25 are supposed to be LTS releases. 8 is currently used by the Sonarcloud deployment though Sonarqube POCs say that it is no longer supported / they do not see many deployments of it.\nenum SonarqubeVersion {\n Eight = '8.0.0',\n Nine = '9.0.0',\n Ten = '10.0.0',\n Twenty_five = '2025.0.0'\n}\n\n// intentionally open ended to support versions less than 8, but it is unlikely that they will be out there based on discussions with Sonar engineers\nfunction isSonarqubeVersionEight(\n version: string\n): version is SonarqubeVersion.Eight {\n const nextHigherVersion = SonarqubeVersion.Nine;\n const v = coerce(version);\n if (v === null) {\n throw new Error(\n `Was not able to coerce ${version} into a semver compatible version string`\n );\n }\n return lt(v, nextHigherVersion);\n}\n\nfunction isSonarqubeVersionNine(\n version: string\n): version is SonarqubeVersion.Nine {\n const nextHigherVersion = SonarqubeVersion.Ten;\n const v = coerce(version);\n if (v === null) {\n throw new Error(\n `Was not able to coerce ${version} into a semver compatible version string`\n );\n }\n return lt(v, nextHigherVersion);\n}\n\nfunction isSonarqubeVersionTen(\n version: string\n): version is SonarqubeVersion.Ten {\n const nextHigherVersion = SonarqubeVersion.Twenty_five;\n const v = coerce(version);\n if (v === null) {\n throw new Error(\n `Was not able to coerce ${version} into a semver compatible version string`\n );\n }\n return lt(v, nextHigherVersion);\n}\n\nfunction isSonarqubeVersionTwenty_five(\n version: string\n): version is SonarqubeVersion.Twenty_five {\n const nextHigherVersion = '2026.0.0'; // using 26 for now, but I am unsure what the actual next major version will be - this function can be changed once we identify the next version that contains impactful breaking changes\n const v = coerce(version);\n if (v === null) {\n throw new Error(\n `Was not able to coerce ${version} into a semver compatible version string`\n );\n }\n return lt(v, nextHigherVersion);\n}\n\ntype SonarqubeVersionMapping = {\n [SonarqubeVersion.Eight]: {issue: Issue_8; ruleInformation: Rule_8};\n [SonarqubeVersion.Nine]: {issue: Issue_9; ruleInformation: Rule_9};\n [SonarqubeVersion.Ten]: {issue: Issue_10; ruleInformation: Rule_10};\n [SonarqubeVersion.Twenty_five]: {issue: Issue_25; ruleInformation: Rule_25};\n};\n\nfunction isBeforeSonarqubeVersion(\n version: string,\n comparisonVersion: string\n): boolean {\n const v = coerce(version);\n if (v === null) {\n throw new Error(\n `Was not able to coerce ${version} into a semver compatible version string`\n );\n }\n const cv = coerce(comparisonVersion);\n if (cv === null) {\n throw new Error(\n `Was not able to coerce ${comparisonVersion} into a semver compatible version string`\n );\n }\n return lt(v, cv);\n}\n\n// many of these attributes show up in the API example responses, but not in our locally generated samples.\n// a few of them are mentioned in the changelog, but do not show up in samples or the examples\n// several of these attributes show up in sonarcloud (which is marked as major version 8) even though the documentation says that they should first only show up in latter versions. to that end, I've marked them as optional for lack of any other action we can take.\ntype Issue_8 = {\n actions?: string[];\n attr?: {'jira-issue-key'?: string};\n author: string;\n cleanCodeAttribute?: string;\n cleanCodeAttributeCategory?: string;\n comments?: {\n key: string;\n login: string;\n htmlText: string;\n markdown: string;\n updatable: boolean;\n createdAt: string;\n }[];\n component: string;\n creationDate: string;\n debt: string;\n effort: string;\n flows: {\n locations: {\n textRange: {\n startLine: number;\n endLine: number;\n startOffset: number;\n endOffset: number;\n };\n msg: string;\n msgFormattings?: {start: number; end: number; type: string}[];\n component: string;\n }[];\n }[];\n fromHotspot?: unknown;\n hash: string;\n impacts?: {severity: string; softwareQuality: string}[];\n issueStatus?: string;\n key: string;\n line: number;\n message: string;\n messageFormattings?: {start: number; end: number; type: string}[];\n organization?: string;\n project: string;\n projectName?: string;\n resolution?: string; // the changelog for the endpoint mentions something about 'resolutions' which might be the same as this endpoint?\n rule: string;\n scope?: string;\n severity: string;\n status: string;\n tags: string[];\n textRange?: {\n endLine: number;\n endOffset: number;\n startLine: number;\n startOffset: number;\n };\n transitions?: string[];\n type: string;\n updateDate: string;\n};\n\ntype Issue_9 = Omit<Issue_8, 'fromHotspot'> & {\n quickFixAvailable?: boolean;\n ruleDescriptionContextKey?: string;\n};\n\ntype Issue_10 = Issue_9 & {\n codeVariants: string[];\n prioritizedRule: boolean;\n};\n\ntype Issue_25 = Issue_10 & {\n fromSonarQubeUpdate: boolean;\n internalTags: unknown[];\n linkedTicketStatus: string;\n};\n\ntype Search<T extends SonarqubeVersion> = {\n components: {\n enabled: boolean;\n key: string;\n longName: string;\n name: string;\n organization?: string;\n path?: string;\n qualifier: string;\n uuid?: string;\n }[];\n effortTotal: number;\n facets: {property: string; values: {val: string; count: number}[]}[];\n issues: SonarqubeVersionMapping[T]['issue'][];\n organizations?: {key: string; name: string}[];\n p?: number; // deprecated as of 9.8\n paging: {pageIndex: number; pageSize: number; total: number};\n ps?: number; // deprecated as of 9.8\n rules?: {\n key: string;\n name: string;\n status: string;\n lang: string;\n langName: string;\n }[];\n total?: number; // deprecated as of 9.8\n users?: {login: string; name: string; active: boolean; avatar: string}[];\n};\n\ntype ComponentSearch = {\n paging: {pageIndex: number; pageSize: number; total: number};\n baseComponent: {\n key: string;\n description: string;\n qualifier: string;\n tags: string[];\n visibility: string;\n organization?: string;\n isAiCodeFixEnabled?: boolean;\n name?: string;\n };\n components: {\n organization?: string;\n key: string;\n name: string;\n qualifier: string;\n path: string;\n language: string;\n }[];\n};\n\ntype Rule_8 = {\n cleanCodeAttribute?: string;\n cleanCodeAttributeCategory?: string;\n createdAt: string;\n debtOverloaded: boolean;\n debtRemFnCoeff?: unknown;\n debtRemFnOffset: string;\n debtRemFnType: string;\n defaultDebtRemFnCoeff?: unknown;\n defaultDebtRemFnOffset: string;\n defaultDebtRemFnType: string;\n defaultRemFnBaseEffort: string;\n defaultRemFnType: string;\n descriptionSections?: {content: string; key: string}[]; // sonarqube changelog says it was added in 9.5 if I'm interpreting \"The field 'descriptionSections' has been added to the payload\" properly, but sonarcloud (which is v8 nominally) has it too\n effortToFixDescription?: unknown;\n htmlDesc: string;\n impacts?: {severity: string; softwareQuality: string}[];\n isExternal: boolean;\n isTemplate: boolean;\n key: string;\n lang: string;\n langName: string;\n mdDesc: string;\n name: string;\n params: {key: string; desc: string; defaultValue: string}[];\n remFnBaseEffort: string;\n remFnOverloaded: boolean;\n remFnType: string;\n repo: string;\n scope: string;\n securityStandards?: unknown[];\n severity: string;\n status: string;\n sysTags: string[];\n tags: unknown[];\n type: string;\n};\n\ntype Rule_9 = Rule_8 & {\n educationPrinciples?: unknown[];\n};\n\ntype Rule_10 = Omit<\n Rule_9,\n | 'debtOverloaded'\n | 'debtRemFnCoeff'\n | 'debtRemFnOffset'\n | 'defaultDebtRemFnCoeff'\n | 'defaultDebtRemFnOffset'\n | 'effortToFixDescription'\n> & {\n updatedAt: string;\n};\n\ntype Rule_25 = Omit<Rule_10, 'htmlDesc' | 'mdDesc'>;\n\ntype Rule<T extends SonarqubeVersion> = {\n actives: {\n qProfile: string;\n inherit: string;\n severity: string;\n params: {key: string; value: string}[];\n }[];\n rule: SonarqubeVersionMapping[T]['ruleInformation'];\n};\n\ntype IssueExtensions<T extends SonarqubeVersion> = {\n codeSnippet: string;\n ruleInformation: Rule<T>;\n};\n\ntype Data<T extends SonarqubeVersion> = {\n search: Omit<Search<T>, 'issues'> & {\n issues: (SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>)[];\n };\n sonarqubeVersion: string;\n sonarqubeHost: string;\n projectKey: string;\n branchName?: string;\n pullRequestID?: string;\n organization?: string;\n};\n\n// https://docs.sonarsource.com/sonarqube-server/latest/user-guide/rules/overview/#how-severities-are-assigned\nconst IMPACT_MAPPING: Map<string, number> = new Map([\n ['blocker', 1.0],\n ['critical', 0.7],\n ['major', 0.5],\n ['minor', 0.3],\n ['info', 0.0]\n]);\n\nconst CWE_NIST_MAPPING = new CweNistMapping();\nconst OWASP_NIST_MAPPING = new OwaspNistMapping();\n\nfunction parseOwaspInSysTags<T extends SonarqubeVersion>(\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n): string[] {\n return issue.ruleInformation.rule.sysTags\n .filter((s) => s.toLowerCase().startsWith('owasp-'))\n .map((t) => t.substring('owasp-'.length).toUpperCase()); // this will just look like 'A3'\n}\n\nfunction parseOwaspTags<T extends SonarqubeVersion>(\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n): string[] | undefined {\n let searchSpace = '';\n const rule = issue.ruleInformation.rule;\n if ('htmlDesc' in rule) {\n searchSpace += rule.htmlDesc;\n }\n if (rule.descriptionSections) {\n searchSpace += rule.descriptionSections.map((s) => s.content).join('');\n }\n const searchSpaceMatches = [\n ...searchSpace.matchAll(/> ?OWASP.*?(Top .*?A\\d\\d?)/gu)\n ].map((m) => m[1]); // get the capture group which looks like 'Top 10 2021 Category A1'\n const sysTagMatches = parseOwaspInSysTags<T>(issue);\n const totalMatches = searchSpaceMatches.concat(sysTagMatches);\n\n if (totalMatches.length) {\n return totalMatches;\n }\n return undefined;\n}\n\nfunction parseCweTags<T extends SonarqubeVersion>(\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n): string[] | undefined {\n let searchSpace = '';\n const rule = issue.ruleInformation.rule;\n if ('htmlDesc' in rule) {\n searchSpace += rule.htmlDesc;\n }\n if (rule.descriptionSections) {\n searchSpace += rule.descriptionSections.map((s) => s.content).join('');\n }\n const uniqueCwes = _.uniq(searchSpace.match(/CWE-\\d\\d\\d?\\d?\\d?\\d?\\d/gi)); // CWE IDs are embedded inside of the HTML\n\n if (uniqueCwes.length) {\n return uniqueCwes;\n }\n return undefined;\n}\n\nfunction parseNistTags<T extends SonarqubeVersion>(\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n): string[] | undefined {\n const uniqueNist = _.uniq(\n (parseCweTags<T>(issue) ?? [])\n .flatMap((t) => CWE_NIST_MAPPING.nistFilter(t.split('-')[1]))\n .concat(\n // adding in the systags' owasp tag since in older sonarqube versions sometimes no other guidance alignment is provided\n (parseOwaspInSysTags<T>(issue) ?? []).flatMap((t) =>\n OWASP_NIST_MAPPING.nistFilterNoDefault(t)\n )\n )\n );\n\n if (uniqueNist.length) {\n return uniqueNist;\n }\n\n return ['SA-11']; // Sonarqube is a static code analysis tool so we'll use SA-11 (DEVELOPER SECURITY TESTING AND EVALUATION) to handle all the bugs and code smells as a default for whenever it doesn't have security guidance to give us. Explicitly not using RA-5 (VULNERABILITY SCANNING) since all of those seem to have guidance associated with them.\n}\n\nexport class SonarqubeMapper<T extends SonarqubeVersion> extends BaseConverter<\n Data<T>\n> {\n withRaw: boolean;\n\n mappings: MappedTransform<\n ExecJSON.Execution & {passthrough: unknown},\n ILookupPath\n > = {\n platform: {\n name: 'Heimdall Tools',\n release: HeimdallToolsVersion\n },\n version: HeimdallToolsVersion,\n statistics: {},\n profiles: [\n {\n name: 'SonarQube Scan',\n version: {\n transformer: (data: Data<T>): string =>\n `SonarQube v${data.sonarqubeVersion}`\n },\n title: {\n transformer: (data: Data<T>): string => {\n const branch = data.branchName ? ` branch ${data.branchName}` : '';\n const pullrequest = data.pullRequestID\n ? ` pull request ${data.pullRequestID}`\n : '';\n const org = data.organization\n ? ` organization ${data.organization}`\n : '';\n return `SonarQube Scan of project ${data.projectKey} on ${data.sonarqubeHost} at ${new Date().toISOString()}${data.branchName || data.pullRequestID || data.organization ? ' using' : ''}${[branch, pullrequest, org].filter((s) => s).join(',')}`;\n }\n },\n supports: [],\n attributes: [],\n groups: [],\n status: 'loaded',\n controls: [\n {\n path: 'search.issues',\n key: 'id',\n desc: {\n transformer: (\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n ): string => {\n const rule = issue.ruleInformation.rule;\n if ('htmlDesc' in rule) {\n return rule.htmlDesc;\n }\n if (!rule.descriptionSections) {\n return '';\n }\n const def = rule.descriptionSections.find(\n (d) => d.key === 'default'\n );\n if (def) {\n return def.content;\n }\n const introduction = rule.descriptionSections.find(\n (d) => d.key === 'introduction'\n );\n const rootcause = rule.descriptionSections.find(\n (d) => d.key === 'root_cause'\n );\n return [introduction, rootcause]\n .filter(\n (s): s is {key: string; content: string} => s !== undefined\n )\n .map((s) => s.content)\n .join('\\n');\n }\n },\n refs: [],\n source_location: {},\n id: {path: 'rule'},\n title: {path: 'ruleInformation.rule.name'},\n impact: {\n path: 'severity',\n transformer: impactMapping(IMPACT_MAPPING)\n },\n tags: {\n cci: {\n transformer: (\n issue: SonarqubeVersionMapping[T]['issue'] &\n IssueExtensions<T>\n ): string[] => getCCIsForNISTTags(parseNistTags(issue) ?? [])\n },\n nist: {transformer: parseNistTags},\n cweid: {transformer: parseCweTags},\n owasp: {transformer: parseOwaspTags},\n createdAt: {path: 'ruleInformation.rule.createdAt'},\n debtRemFnType: {path: 'ruleInformation.rule.debtRemFnType'},\n defaultDebtRemFnType: {\n path: 'ruleInformation.rule.defaultDebtRemFnType'\n },\n isExternal: {path: 'ruleInformation.rule.isExternal'},\n isTemplate: {path: 'ruleInformation.rule.isTemplate'},\n langName: {path: 'ruleInformation.rule.langName'},\n remFnBaseEffort: {path: 'ruleInformation.rule.remFnBaseEffort'},\n remFnOverloaded: {path: 'ruleInformation.rule.remFnOverloaded'},\n remFnType: {path: 'ruleInformation.rule.remFnType'},\n repo: {path: 'ruleInformation.rule.repo'},\n scope: {path: 'ruleInformation.rule.scope'},\n ruleSeverity: {path: 'ruleInformation.rule.severity'},\n status: {path: 'ruleInformation.rule.status'},\n transformer: (\n issue: SonarqubeVersionMapping[T]['issue'] & IssueExtensions<T>\n ) => ({\n ...conditionallyProvideAttribute(\n 'Actives',\n issue.ruleInformation.actives,\n issue.ruleInformation.actives.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Clean Code Attribute',\n issue.ruleInformation.rule.cleanCodeAttribute,\n issue.ruleInformation.rule.cleanCodeAttribute?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Clean Code Attribute Category',\n issue.ruleInformation.rule.cleanCodeAttributeCategory,\n issue.ruleInformation.rule.cleanCodeAttributeCategory\n ?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Debt Overloaded',\n 'debtOverloaded' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.debtOverloaded,\n 'debtOverloaded' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.debtOverloaded !== undefined\n ),\n ...conditionallyProvideAttribute(\n 'Debt Rem Fn Coeff',\n 'debtRemFnCoeff' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.debtRemFnCoeff,\n 'debtRemFnCoeff' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.debtRemFnCoeff !== undefined\n ),\n ...conditionallyProvideAttribute(\n 'Debt Rem Fn Offset',\n 'debtRemFnOffset' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.debtRemFnOffset,\n 'debtRemFnOffset' in issue.ruleInformation.rule\n ),\n ...conditionallyProvideAttribute(\n 'Default Debt Rem Fn Coeff',\n 'defaultDebtRemFnCoeff' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.defaultDebtRemFnCoeff,\n 'defaultDebtRemFnCoeff' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.defaultDebtRemFnCoeff !==\n undefined\n ),\n ...conditionallyProvideAttribute(\n 'Default Debt Rem Fn Offset',\n 'defaultDebtRemFnOffset' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.defaultDebtRemFnOffset,\n 'defaultDebtRemFnOffset' in issue.ruleInformation.rule\n ),\n ...conditionallyProvideAttribute(\n 'Education Principles',\n 'educationPrinciples' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.educationPrinciples,\n 'educationPrinciples' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.educationPrinciples?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Effort To Fix Description',\n 'effortToFixDescription' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.effortToFixDescription,\n 'effortToFixDescription' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.effortToFixDescription !==\n undefined\n ),\n ...conditionallyProvideAttribute(\n 'Impacts',\n issue.ruleInformation.rule.impacts,\n issue.ruleInformation.rule.impacts?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Issue Type Vulnerability',\n true,\n issue.type === 'VULNERABILITY'\n ),\n ...conditionallyProvideAttribute(\n 'Issue Type Bug',\n true,\n issue.type === 'BUG'\n ),\n ...conditionallyProvideAttribute(\n 'Issue Type Code Smell',\n true,\n issue.type === 'CODE_SMELL'\n ),\n ...conditionallyProvideAttribute(\n 'Params',\n issue.ruleInformation.rule.params,\n issue.ruleInformation.rule.params?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Security Standards',\n issue.ruleInformation.rule.securityStandards,\n issue.ruleInformation.rule.securityStandards?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Sys Tags',\n issue.ruleInformation.rule.sysTags,\n issue.ruleInformation.rule.sysTags?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Tags',\n issue.ruleInformation.rule.tags,\n issue.ruleInformation.rule.tags?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Updated At',\n 'updatedAt' in issue.ruleInformation.rule &&\n issue.ruleInformation.rule.updatedAt,\n 'updatedAt' in issue.ruleInformation.rule\n )\n })\n },\n results: [\n {\n status: ExecJSON.ControlResultStatus.Failed,\n code_desc: {path: 'codeSnippet'},\n start_time: {path: 'creationDate'},\n message: {\n transformer: (\n issue: SonarqubeVersionMapping[T]['issue'] &\n IssueExtensions<T>\n ) =>\n JSON.stringify(\n {\n // Explanation of the violation\n Message: issue.message,\n\n // Useful information\n Author: issue.author,\n 'Creation Date': issue.creationDate,\n Debt: issue.debt,\n Effort: issue.effort,\n ...conditionallyProvideAttribute(\n 'Issue Status',\n issue.issueStatus,\n issue.issueStatus?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Resolution',\n issue.resolution,\n issue.resolution?.length !== 0\n ),\n Status: issue.status,\n 'Update Date': issue.updateDate,\n\n // all the rest\n ...conditionallyProvideAttribute(\n 'Actions',\n issue.actions,\n issue.actions?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Attr',\n issue.attr,\n issue.attr !== undefined\n ),\n ...conditionallyProvideAttribute(\n 'Code Variants',\n 'codeVariants' in issue && issue.codeVariants,\n 'codeVariants' in issue &&\n issue.codeVariants?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Comments',\n issue.comments,\n issue.comments?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Flows',\n issue.flows,\n issue.flows?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'From Hotspot',\n 'fromHotspot' in issue && issue.fromHotspot,\n 'fromHotspot' in issue &&\n issue.fromHotspot !== undefined &&\n issue.fromHotspot !== null\n ),\n Hash: issue.hash,\n Key: issue.key,\n ...conditionallyProvideAttribute(\n 'Message Formattings',\n issue.messageFormattings,\n issue.messageFormattings?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Prioritized Rule',\n 'prioritizedRule' in issue && issue.prioritizedRule,\n 'prioritizedRule' in issue\n ),\n ...conditionallyProvideAttribute(\n 'Project Name',\n issue.projectName,\n issue.projectName?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Quick Fix Available',\n 'quickFixAvailable' in issue &&\n issue.quickFixAvailable,\n 'quickFixAvailable' in issue &&\n issue.quickFixAvailable !== undefined\n ),\n ...conditionallyProvideAttribute(\n 'Rule Description Context Key',\n 'ruleDescriptionContextKey' in issue &&\n issue.ruleDescriptionContextKey,\n 'ruleDescriptionContextKey' in issue &&\n issue.ruleDescriptionContextKey?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Tags',\n issue.tags,\n issue.tags?.length !== 0\n ),\n ...conditionallyProvideAttribute(\n 'Transitions',\n issue.transitions,\n issue.transitions?.length !== 0\n )\n },\n null,\n 2\n )\n }\n }\n ],\n transformer: () => ({\n descriptions: {\n transformer: (\n issue: SonarqubeVersionMapping[T]['issue'] &\n IssueExtensions<T>\n ): ExecJSON.ControlDescription[] | null => {\n const rule = issue.ruleInformation.rule;\n if (\n rule.descriptionSections &&\n rule.descriptionSections.length > 0\n ) {\n const def = rule.descriptionSections.find(\n (d) => d.key === 'default'\n );\n const introduction = rule.descriptionSections.find(\n (d) => d.key === 'introduction'\n );\n const rootcause = rule.descriptionSections.find(\n (d) => d.key === 'root_cause'\n );\n const check = rule.descriptionSections.find(\n (d) => d.key === 'assess_the_problem'\n );\n const fix = rule.descriptionSections.find(\n (d) => d.key === 'how_to_fix'\n );\n const remainder = rule.descriptionSections.filter(\n (d) =>\n ![\n 'default',\n 'introduction',\n 'root_cause',\n 'assess_the_problem',\n 'how_to_fix'\n ].includes(d.key)\n );\n const sections = [\n def,\n def ? introduction : undefined,\n def ? rootcause : undefined,\n check,\n fix,\n ...remainder\n ]\n .filter(\n (s): s is {key: string; content: string} =>\n s !== undefined\n )\n .map((s) => ({\n data: s.content,\n label:\n s.key === 'assess_the_problem'\n ? 'check'\n : s.key === 'how_to_fix'\n ? 'fix'\n : s.key\n }));\n if (sections) {\n return sections;\n }\n }\n return null;\n }\n }\n })\n }\n ],\n sha256: ''\n }\n ],\n passthrough: {\n transformer: (data: Data<T>): Record<string, unknown> => {\n return {\n auxiliary_data: [\n {\n name: 'SonarQube',\n data: {\n ..._.omit(data, 'search.issues')\n }\n }\n ],\n ...conditionallyProvideAttribute('raw', data, this.withRaw)\n };\n }\n }\n };\n\n constructor(\n public readonly data: Data<T>,\n withRaw = false\n ) {\n super(data);\n this.withRaw = withRaw;\n }\n}\n\n// Sonarqube used to require using the user token as the username and supplying no password, but added the bearer token method as an option in 10.x. The bearer token method became the only allowed version in 25.x.\nenum AuthenticationMethod {\n TokenAsUsername,\n BearerToken\n}\n\nexport class SonarqubeResults {\n authMethod?: AuthenticationMethod;\n axiosClient: AxiosInstance;\n constructor(\n public readonly sonarqubeHost: string,\n public readonly projectKey: string,\n private readonly userToken: string,\n public readonly branchName?: string, // if branch/pr are not specified, then sonarqube uses the default branch\n public readonly pullRequestID?: string,\n public readonly organization?: string, // sometimes the organization parameter is required for the api/rules/show endpoint - we try to grab it from the issue, but this is here to ensure a fallback if necessary\n public readonly withRaw = false,\n public readonly excludeIssueStatuses?: string // user-supplied comma-separated list of additional issue statuses to EXCLUDE from results\n ) {\n this.axiosClient = axios.create();\n const MAX_RETRIES = 5;\n this.axiosClient.defaults.raxConfig = {\n retry: MAX_RETRIES,\n onError: async (e) => {\n const cfg = rax.getConfig(e);\n if (\n cfg?.currentRetryAttempt !== null &&\n cfg?.currentRetryAttempt !== undefined\n ) {\n logger.debug(\n `Error occurred: retry attempt #${cfg?.currentRetryAttempt}/${MAX_RETRIES} will happen after backoff`\n );\n } else {\n this.logAxiosError(e);\n }\n }\n };\n rax.attach(this.axiosClient);\n }\n\n logAxiosError(e: AxiosError): void {\n if (e.response) {\n logger.debug('response');\n logger.debug(e.response.status);\n logger.debug(inspect(e.response.data, {depth: 3}));\n }\n if (e.request) {\n logger.debug('request');\n logger.debug(inspect(e.request, {depth: 3}));\n }\n if (e.message) {\n logger.debug('message');\n logger.debug('Error', e.message);\n }\n }\n\n // Default statuses to exclude from results (deny-list approach)\n // Pre-10.4 legacy: CLOSED issues are end-of-life (rule deleted/disabled or component removed)\n // 10.4+: FALSE_POSITIVE (user says not real), FIXED (no longer in code, purged after 30 days)\n static readonly DEFAULT_DENY_LIST_LEGACY = ['CLOSED'];\n static readonly DEFAULT_DENY_LIST_MODERN = ['FALSE_POSITIVE', 'FIXED'];\n\n async discoverIssueStatuses(sonarqubeVersion: string): Promise<string> {\n const isLegacy = isBeforeSonarqubeVersion(sonarqubeVersion, '10.4.0');\n const statusParamKey = isLegacy ? 'statuses' : 'issueStatuses';\n\n // Step 1: Discover all valid statuses from the server via /api/webservices/list\n let allStatuses: string[];\n\n try {\n const response = await this.axiosClient.get(\n `${this.sonarqubeHost}/api/webservices/list`,\n {\n ...(this.authMethod === AuthenticationMethod.TokenAsUsername && {\n auth: {username: this.userToken, password: ''}\n }),\n ...(this.authMethod === AuthenticationMethod.BearerToken && {\n headers: {Authorization: `Bearer ${this.userToken}`}\n })\n }\n );\n\n const issuesService = response.data.webServices?.find(\n (ws: {path: string}) => ws.path === 'api/issues'\n );\n const searchAction = issuesService?.actions?.find(\n (a: {key: string}) => a.key === 'search'\n );\n const statusParam = searchAction?.params?.find(\n (p: {key: string}) => p.key === statusParamKey\n );\n\n if (statusParam?.possibleValues?.length) {\n allStatuses = statusParam.possibleValues.map((s: string) =>\n s.toUpperCase()\n );\n logger.info(\n `Available issue statuses from server: ${allStatuses.join(',')}`\n );\n } else {\n throw new Error(\n `Webservices list returned no possibleValues for ${statusParamKey}. ` +\n `Raw param data: ${JSON.stringify(statusParam)}`\n );\n }\n } catch (e) {\n // Step 2: Fallback to hardcoded full status list if discovery fails\n allStatuses = isLegacy\n ? ['OPEN', 'REOPENED', 'CONFIRMED', 'RESOLVED', 'CLOSED']\n : [\n 'OPEN',\n 'CONFIRMED',\n 'FALSE_POSITIVE',\n 'ACCEPTED',\n 'FIXED',\n 'IN_SANDBOX'\n ];\n logger.warn(\n `Could not discover statuses from server, using fallback: ${allStatuses.join(',')}`\n );\n logger.debug(inspect(e, {depth: 3}));\n }\n\n // Step 3: Determine which deny-list to use\n const defaultDenyList = isLegacy\n ? SonarqubeResults.DEFAULT_DENY_LIST_LEGACY\n : SonarqubeResults.DEFAULT_DENY_LIST_MODERN;\n let denySet: Set<string>;\n\n if (this.excludeIssueStatuses) {\n // User-supplied deny-list REPLACES the defaults entirely\n const userExclusions = this.excludeIssueStatuses\n .split(',')\n .map((s) => s.trim().toUpperCase())\n .filter((s) => s.length > 0);\n denySet = new Set(userExclusions);\n\n // Smart nag: compare user list against defaults\n const defaultSet = new Set(defaultDenyList);\n const sameAsDefault = defaultSet.symmetricDifference(denySet).size === 0;\n\n if (sameAsDefault) {\n logger.info(\n `Exclusion list matches the defaults (${[...defaultSet].join(',')}). ` +\n `You can omit --excludeIssueStatuses unless you want to be explicit.`\n );\n } else {\n logger.warn(\n `Custom status exclusions applied: ${userExclusions.join(',')} ` +\n `(replaces defaults: ${defaultDenyList.join(',')}). ` +\n `If this exclusion should be a default, please consider filing an issue at ` +\n `https://github.com/mitre/heimdall2/issues`\n );\n }\n } else {\n // No user override — use defaults\n denySet = new Set(defaultDenyList);\n logger.info(\n `Using default status exclusions: ${defaultDenyList.join(',')}`\n );\n }\n\n // Step 4: Filter statuses and log the result\n const excluded = allStatuses.filter((s) => denySet.has(s));\n const result = allStatuses.filter((s) => !denySet.has(s));\n\n if (result.length === 0) {\n logger.warn(\n `All statuses were excluded by the deny-list. This will likely return no results. ` +\n `Available: ${allStatuses.join(',')} | Excluded: ${excluded.join(',')}`\n );\n }\n\n logger.info(\n `Querying with issue statuses: ${result.join(',')} (excluded: ${excluded.join(',')})`\n );\n return result.join(',');\n }\n\n async getSearchResults<T extends SonarqubeVersion>(\n sonarqubeVersion: string\n ): Promise<Search<T>> {\n const UPPER_LIMIT = 10000; // there is an upper limit of 10000 search results provided for any given search query (i.e. everything aside from the paging information): https://community.sonarsource.com/t/cannot-get-more-than-10000-results-through-web-api/3662\n const discoveredStatuses =\n await this.discoverIssueStatuses(sonarqubeVersion);\n const PAGE_SIZE = 100;\n\n const createSearch = async (\n component: string,\n page: number,\n pageSize = PAGE_SIZE\n ) => {\n return this.axiosClient.get<Search<T>>(\n `${this.sonarqubeHost}/api/issues/search`,\n {\n ...(this.authMethod === AuthenticationMethod.TokenAsUsername && {\n auth: {username: this.userToken, password: ''}\n }),\n ...(this.authMethod === AuthenticationMethod.BearerToken && {\n headers: {Authorization: `Bearer ${this.userToken}`}\n }),\n params: {\n [isBeforeSonarqubeVersion(sonarqubeVersion, '10.2.0')\n ? 'componentKeys'\n : 'components']: component,\n ...(isBeforeSonarqubeVersion(sonarqubeVersion, '10.4.0')\n ? {statuses: discoveredStatuses}\n : {issueStatuses: discoveredStatuses}),\n p: page,\n ps: pageSize,\n ...(this.branchName && {branch: this.branchName}),\n ...(this.pullRequestID && {pullRequest: this.pullRequestID})\n }\n }\n );\n };\n\n const createComponentSearch = async (\n component: string,\n page: number,\n pageSize = PAGE_SIZE\n ) => {\n return this.axiosClient.get<Search<T>>(\n `${this.sonarqubeHost}/api/components/tree`,\n {\n ...(this.authMethod === AuthenticationMethod.TokenAsUsername && {\n auth: {username: this.userToken, password: ''}\n }),\n ...(this.authMethod === AuthenticationMethod.BearerToken && {\n headers: {Authorization: `Bearer ${this.userToken}`}\n }),\n params: {\n component: component,\n strategy: 'children',\n p: page,\n ps: pageSize,\n ...(this.branchName && {branch: this.branchName}),\n ...(this.pullRequestID && {pullRequest: this.pullRequestID})\n }\n }\n );\n };\n\n // intentionally doing the await in a loop so as to slow down requests a tad bit in order to avoid any rate limit issues\n const collectPagedSearch = async (component: string, sizeCheck = false) => {\n let paging = true;\n let page = 1;\n const results: Search<T> = {\n components: [],\n effortTotal: 0,\n facets: [],\n issues: [],\n paging: {pageIndex: 0, pageSize: 0, total: 0}\n };\n while (sizeCheck ? page === 1 : paging) {\n console.log(results);\n await createSearch(component, page)\n .then(({data}) => {\n _.mergeWith(results, data, (objValue, srcValue) =>\n _.isArray(objValue) ? objValue.concat(srcValue) : undefined\n );\n // only need to check if it exceeds the upper limit, if it's less than the upper limit and we request a page that goes past the page total then it just returns fewer results without throwing an error\n paging =\n data.paging.pageIndex * data.paging.pageSize <= data.paging.total;\n page += 1;\n })\n .catch((e) => {\n this.logAxiosError(e);\n throw new Error('Failed at retrieving Sonarqube issues');\n });\n if (page * PAGE_SIZE > UPPER_LIMIT) {\n logger.warn(\n `Exceeded SonarQube cap of ${UPPER_LIMIT} results for findings of or under the ${component} component. Remaining findings may be truncated.`\n );\n paging = false;\n }\n }\n results.components = _.uniqBy(results.components, 'key'); // sometimes components will be duplicated if an issue on one page applies to the same component as an issue on another page. additionally at minimum the top level project will show up in every search result\n return results;\n };\n\n const collectPagedComponentSearch = async (component: string) => {\n let paging = true;\n let page = 1;\n const results: ComponentSearch = {\n paging: {pageIndex: 0, pageSize: 0, total: 0},\n baseComponent: {\n key: 'fake',\n description: 'fake',\n qualifier: 'fake',\n tags: [],\n visibility: 'false'\n },\n components: []\n };\n while (paging) {\n await createComponentSearch(component, page)\n .then(({data}) => {\n _.mergeWith(results, data, (objValue, srcValue) =>\n _.isArray(objValue) ? objValue.concat(srcValue) : undefined\n );\n paging =\n data.paging.pageIndex * data.paging.pageSize <= data.paging.total;\n page += 1;\n })\n .catch((e) => {\n this.logAxiosError(e);\n throw new Error('Failed at retrieving the list of components');\n });\n if (page * PAGE_SIZE > UPPER_LIMIT) {\n logger.warn(\n `Exceeded SonarQube cap of ${UPPER_LIMIT} results for the search for children of the ${component} component. Remaining set of components may be truncated.`\n );\n paging = false;\n }\n }\n return results;\n };\n\n const results: Search<T> = await collectPagedSearch(this.projectKey, true);\n const queue = [this.projectKey];\n while (queue.length > 0) {\n const component = queue.shift(); \n if (component === undefined) {\n // unreachable code since we check that there are items in the queue; however, it helps typescript narrow the type properly\n continue;\n }\n\n const sizeCheck = await collectPagedSearch(component, true);\n if (sizeCheck.paging.total > UPPER_LIMIT) {\n const componentSearch = await collectPagedComponentSearch(component);\n queue.push(...componentSearch.components.map((c) => c.key));\n }\n\n const componentResults = await collectPagedSearch(component);\n _.mergeWith(results, componentResults, (objValue, srcValue) =>\n _.isArray(objValue) ? objValue.concat(srcValue) : objValue\n );\n }\n\n results.components = _.uniqBy(results.components, 'key');\n results.issues = _.uniqBy(results.issues, 'key');\n\n if (results.paging.total === results.issues.length) {\n logger.warn(\n 'Alternative search queries were able to retrieve all findings.'\n );\n } else {\n logger.warn(\n `Alternative search queries were not able to retrieve all findings - ${results.paging.total - results.issues.length} findings were not retrieved.`\n );\n }\n\n return results;\n }\n\n async getCodeSnippets<T extends SonarqubeVersion>(\n issues: SonarqubeVersionMapping[T]['issue'][]\n ): Promise<string[]> {\n const getFullFile = async (component: string): Promise<string> => {\n return this.axiosClient\n .get<string>(`${this.sonarqubeHost}/api/sources/raw`, {\n ...(this.authMethod === AuthenticationMethod.TokenAsUsername && {\n auth: {username: this.userToken, password: ''}\n }),\n ...(this.authMethod === AuthenticationMethod.BearerToken && {\n headers: {Authorization: `Bearer ${this.userToken}`}\n }),\n params: {\n key: component,\n ...(this.branchName && {branch: this.branchName}),\n ...(this.pullRequestID && {pullRequest: this.pullRequestID})\n },\n responseType: 'text'\n })\n .then(({data}) => data)\n .catch((e) => {\n this.logAxiosError(e);\n return Promise.reject(\n new Error(\n `Failed at getting Sonarqube code snippet for ${component}`\n )\n );\n });\n };\n const applyLineNumber = (snippet: string): string =>\n snippet\n .split('\\n')\n .map((l, i) => `${i + 1} ${l}`)\n .join('\\n');\n const getContextualizedSnippet = (\n fullFiles: Record<string, string>,\n component: string,\n startLine: number,\n endLine: number,\n msg?: string\n ): string => {\n const linenumberedFile = applyLineNumber(fullFiles[component]);\n const snippet = linenumberedFile\n .split('\\n')\n .slice(Math.max(startLine - 3, 0), endLine + 3) // slice wraps around if the start is less than 0 so we want to put a bounds check there to ensure we start at the top of the file; however, if the end is past the end of the array then it just goes until the end of the array so no bounds check is required there\n .join('\\n')\n .trim();\n const location = `${component}:${startLine}-${endLine}\\n`;\n const message = msg ? `${msg}\\n` : '';\n return `${location}${message}<pre>\\n${snippet}\\n</pre>`;\n };\n\n const components = _.uniq(\n issues.flatMap((issue) =>\n issue.flows.length\n ? issue.flows.flatMap((flow) =>\n flow.locations.map((location) => location.component)\n )\n : [issue.component]\n )\n );\n const fullFilePromises = await Promise.all(\n components.map((component) => getFullFile(component))\n );\n const fullFiles = Object.fromEntries(_.zip(components, fullFilePromises));\n\n const snippets = issues.map((issue) => {\n if (issue.flows.length) {\n return issue.flows\n .flatMap((flow) =>\n flow.locations.map((location) =>\n getContextualizedSnippet(\n fullFiles,\n location.component,\n location.textRange.startLine,\n location.textRange.endLine,\n location.msg\n )\n )\n )\n .join('\\n');\n } else if (issue.textRange) {\n return getContextualizedSnippet(\n fullFiles,\n issue.component,\n issue.textRange.startLine,\n issue.textRange.endLine\n );\n } else {\n return '';\n }\n });\n return snippets;\n }\n\n async getRules<T extends SonarqubeVersion>(\n issues: SonarqubeVersionMapping[T]['issue'][]\n ): Promise<Rule<T>[]> {\n const getRule = async (\n rule: string,\n organization?: string\n ): Promise<Rule<T>> =>\n this.axiosClient\n .get<Rule<T>>(`${this.sonarqubeHost}/api/rules/show`, {\n ...(this.authMethod === AuthenticationMethod.TokenAsUsername && {\n auth: {username: this.userToken, password: ''}\n }),\n ...(this.authMethod === AuthenticationMethod.BearerToken && {\n headers: {Authorization: `Bearer ${this.userToken}`}\n }),\n params: {\n key: rule,\n ...((organization || this.organization) && {\n organization: organization || this.organization\n }) // seems to be required for sonarcloud at least\n }\n })\n .then(({data}) => data)\n .catch((e) => {\n this.logAxiosError(e);\n return Promise.reject(\n new Error(`Failed at getting Sonarqube rule: ${rule}`)\n );\n });\n\n const rulesAndOrgs: [string, string | undefined][] = _.uniqWith(\n issues.map((issue) => [issue.rule, issue.organization]),\n _.isEqual\n );\n const fullRulePromises = await Promise.all(\n rulesAndOrgs.map((ruleAndOrg) => getRule(...ruleAndOrg))\n );\n const fullRules = Object.fromEntries(\n _.zip(\n rulesAndOrgs.map((ruleAndOrg) => ruleAndOrg.join('\\n')),\n fullRulePromises\n )\n );\n\n const rules = issues.map(\n (issue) => fullRules[[issue.rule, issue.organization].join('\\n')]\n );\n return rules;\n }\n\n async generateHdf<T extends SonarqubeVersion>(\n sonarqubeVersion: string\n ): Promise<ExecJSON.Execution> {\n const searchResults = await this.getSearchResults<T>(sonarqubeVersion);\n logger.debug(`Got ${searchResults.issues.length} issues`);\n const codeSnippets = await this.getCodeSnippets<T>(searchResults.issues);\n logger.debug(`Got ${codeSnippets.length} code snippets`);\n const rules = await this.getRules<T>(searchResults.issues);\n logger.debug(`Got ${rules.length} rules`);\n const data: Data<T> = {\n sonarqubeVersion,\n sonarqubeHost: this.sonarqubeHost,\n projectKey: this.projectKey,\n branchName: this.branchName,\n pullRequestID: this.pullRequestID,\n organization: this.organization,\n search: {\n ...searchResults,\n issues: searchResults.issues.map((issue, index) => ({\n ...issue,\n codeSnippet: codeSnippets[index],\n ruleInformation: rules[index]\n }))\n }\n };\n return new SonarqubeMapper<T>(data, this.withRaw).toHdf();\n }\n\n async toHdf(): Promise<ExecJSON.Execution> {\n const sonarqubeVersion = await this.axiosClient\n .get<string>(`${this.sonarqubeHost}/api/server/version`)\n .then(({data}) => data);\n logger.debug(\n `Generating HDF for ${this.sonarqubeHost} version: ${sonarqubeVersion}`\n );\n\n this.authMethod = isSonarqubeVersionNine(sonarqubeVersion)\n ? AuthenticationMethod.TokenAsUsername\n : AuthenticationMethod.BearerToken;\n\n if (isSonarqubeVersionEight(sonarqubeVersion)) {\n return this.generateHdf<SonarqubeVersion.Eight>(sonarqubeVersion);\n } else if (isSonarqubeVersionNine(sonarqubeVersion)) {\n return this.generateHdf<SonarqubeVersion.Nine>(sonarqubeVersion);\n } else if (isSonarqubeVersionTen(sonarqubeVersion)) {\n return this.generateHdf<SonarqubeVersion.Ten>(sonarqubeVersion);\n } else if (isSonarqubeVersionTwenty_five(sonarqubeVersion)) {\n return this.generateHdf<SonarqubeVersion.Twenty_five>(sonarqubeVersion);\n } else {\n logger.debug(\n `Sonarqube version ${sonarqubeVersion} is not formally supported. Please create an issue at https://github.com/mitre/heimdall2/issues if something is broken.`\n );\n return this.generateHdf<SonarqubeVersion.Twenty_five>(sonarqubeVersion);\n }\n }\n}\n"]}
@@ -1,49 +0,0 @@
1
- import { AxiosInstance } from 'axios';
2
- import { ExecJSON } from 'inspecjs';
3
- import { Logger } from 'winston';
4
- import { SplunkConfig } from '../types/splunk-config-types';
5
- import { SplunkReport } from '../types/splunk-report-types';
6
- export type Hash<T> = {
7
- [key: string]: T;
8
- };
9
- export type SplunkConfigNoIndex = Omit<SplunkConfig, 'index'>;
10
- export type GenericPayloadWithMetaData = {
11
- meta: FileMetaData;
12
- [key: string]: never[] | Record<string, unknown>;
13
- };
14
- export type FileMetaData = {
15
- guid: string;
16
- subtype: string;
17
- hdf_splunk_schema: string;
18
- filetype: string;
19
- filename: string;
20
- profile_sha256: string;
21
- [key: string]: never[] | unknown;
22
- };
23
- export declare function groupBy<T>(items: Array<T>, keyGetter: (v: T) => string): Hash<Array<T>>;
24
- export declare function mapHash<T, G>(old: Hash<T>, mapFunction: (v: T) => G): Hash<G>;
25
- export declare function consolidatePayloads(payloads: SplunkReport[]): ExecJSON.Execution[];
26
- export declare function replaceKeyValueDescriptions(controls: (ExecJSON.Control & GenericPayloadWithMetaData & {
27
- descriptions?: {
28
- [key: string]: string;
29
- } | ExecJSON.ControlDescription[];
30
- })[]): (ExecJSON.Control & GenericPayloadWithMetaData & {
31
- descriptions?: {
32
- [key: string]: string;
33
- } | ExecJSON.ControlDescription[];
34
- })[];
35
- export declare class SplunkMapper {
36
- config: SplunkConfig;
37
- axiosInstance: AxiosInstance;
38
- hostname: string;
39
- constructor(config: SplunkConfig, logService?: Logger, loggingLevel?: string);
40
- createJob(query: string): Promise<string>;
41
- trackJob(job: string): Promise<void>;
42
- parseSplunkResponse(query: string, results: {
43
- fields: string[];
44
- rows: string[];
45
- }): SplunkReport[];
46
- queryData(query: string): Promise<SplunkReport[]>;
47
- toHdf(guid: string): Promise<ExecJSON.Execution>;
48
- }
49
- //# sourceMappingURL=splunk-mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"splunk-mapper.d.ts","sourceRoot":"","sources":["../../src/splunk-mapper.ts"],"names":[],"mappings":"AAAA,OAAc,EAAC,aAAa,EAAgB,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAElC,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAQ1D,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAA;CAAC,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAE9D,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;CAClC,CAAC;AAOF,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAiBhB;AAGD,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAM7E;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EAAE,GACvB,QAAQ,CAAC,SAAS,EAAE,CAMtB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,GACzB,0BAA0B,GAAG;IAC3B,YAAY,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;CACxE,CAAC,EAAE;mBADa;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE;KAa3E;AAkED,qBAAa,YAAY;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;gBAGf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM;IAajB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBzC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmF1C,mBAAmB,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAC,GAC1C,YAAY,EAAE;IAyDX,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0CjD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;CAgBvD"}
@@ -1,317 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.SplunkMapper = void 0;
40
- exports.groupBy = groupBy;
41
- exports.mapHash = mapHash;
42
- exports.consolidatePayloads = consolidatePayloads;
43
- exports.replaceKeyValueDescriptions = replaceKeyValueDescriptions;
44
- const axios_1 = __importDefault(require("axios"));
45
- const _ = __importStar(require("lodash"));
46
- const global_1 = require("./utils/global");
47
- const splunk_tools_1 = require("./utils/splunk-tools");
48
- const MAPPER_NAME = 'Splunk2HDF';
49
- let logger = (0, global_1.createWinstonLogger)('Splunk2HDF');
50
- // Groups items by using the provided key function
51
- function groupBy(items, keyGetter) {
52
- const result = {};
53
- for (const i of items) {
54
- // Get the items key
55
- const key = keyGetter(i);
56
- // Get the list it should go in
57
- const corrList = result[key];
58
- if (corrList) {
59
- // If list exists, place
60
- corrList.push(i);
61
- }
62
- else {
63
- // List does not exist; create and put
64
- result[key] = [i];
65
- }
66
- }
67
- return result;
68
- }
69
- // Maps a hash to a new hash, with the same keys but each value replaced with a new (mapped) value
70
- function mapHash(old, mapFunction) {
71
- const result = {};
72
- for (const key in old) {
73
- result[key] = mapFunction(old[key]);
74
- }
75
- return result;
76
- }
77
- function consolidatePayloads(payloads) {
78
- // Group by exec id
79
- const grouped = groupBy(payloads, (pl) => pl.meta.guid);
80
- const built = mapHash(grouped, consolidateFilePayloads);
81
- return Object.values(built);
82
- }
83
- function replaceKeyValueDescriptions(controls) {
84
- return controls.map((control) => {
85
- if (control.descriptions && !Array.isArray(control.descriptions)) {
86
- const extractedDescriptions = [];
87
- for (const [key, value] of Object.entries(control.descriptions)) {
88
- extractedDescriptions.push({ label: key, data: value });
89
- }
90
- control.descriptions = extractedDescriptions;
91
- }
92
- return control;
93
- });
94
- }
95
- function consolidateFilePayloads(filePayloads) {
96
- // In the end we wish to produce a single evaluation EventPayload which in fact contains all data for the guid
97
- // Group by subtype
98
- const subtypes = groupBy(filePayloads, (event) => event.meta.subtype);
99
- const execEvents = (subtypes['header'] ||
100
- []);
101
- const profileEvents = (subtypes['profile'] ||
102
- []);
103
- const controlEvents = (subtypes['control'] ||
104
- []);
105
- logger.debug(`Have ${execEvents.length} execution events`);
106
- logger.debug(`Have ${profileEvents.length} profile events`);
107
- logger.debug(`Have ${controlEvents.length} control events`);
108
- // Verify we only have one exec event
109
- if (execEvents.length !== 1) {
110
- throw new Error(`Incorrect # of Evaluation events. Expected 1, got ${execEvents.length}`);
111
- }
112
- // Pull out the first (and only) execution event
113
- const exec = execEvents[0];
114
- // Put all the profiles into the exec
115
- exec.profiles?.push(...profileEvents);
116
- // Group controls, and then put them into the profiles
117
- const shaGroupedControls = groupBy(controlEvents, (ctrl) => ctrl.meta.profile_sha256);
118
- for (const profile of profileEvents) {
119
- profile.controls = [];
120
- // Get the corresponding controls, and put them into the profile
121
- const sha = profile.meta.profile_sha256;
122
- logger.debug(`Adding controls for profile with SHA256: ${sha}`);
123
- const corrControls = shaGroupedControls[sha] || [];
124
- profile.controls.push(...replaceKeyValueDescriptions(corrControls));
125
- logger.debug(`Added ${profile.controls.length} controls to profile with SHA256 ${sha}`);
126
- }
127
- return exec;
128
- }
129
- function unixTimeToDate(unixTime) {
130
- // Splunk only currently returns ints but this could be a decimal for more precision
131
- return new Date(parseFloat(unixTime) * 1000);
132
- }
133
- class SplunkMapper {
134
- config;
135
- axiosInstance;
136
- hostname;
137
- constructor(config, logService, loggingLevel) {
138
- this.config = config;
139
- this.axiosInstance = axios_1.default.create({ params: { output_mode: 'json' } });
140
- this.hostname = (0, splunk_tools_1.generateHostname)(config);
141
- if (logService) {
142
- logger = logService;
143
- }
144
- else {
145
- logger = (0, global_1.createWinstonLogger)(MAPPER_NAME, loggingLevel || 'debug');
146
- }
147
- logger.debug(`Initialized ${this.constructor.name} successfully`);
148
- }
149
- async createJob(query) {
150
- logger.debug(`Creating job for query: ${query}`);
151
- // Post to {host}/services/search/jobs endpoint to queue search job for given query
152
- let jobSID;
153
- try {
154
- jobSID = await this.axiosInstance.post(`${this.hostname}/services/search/jobs`, `exec_mode=blocking&search=${query}`);
155
- }
156
- catch (error) {
157
- const errorCode = (0, splunk_tools_1.handleSplunkErrorResponse)(error);
158
- throw new Error(`Failed to create search job - ${errorCode}`);
159
- }
160
- // Return unique search ID (SID) assigned to that search job for future reference
161
- if (_.has(jobSID, ['data', 'sid'])) {
162
- return jobSID.data.sid;
163
- }
164
- else {
165
- throw new Error('Failed to create search job - Malformed search job creation response received');
166
- }
167
- }
168
- async trackJob(job) {
169
- // All documented potential error states for a search job
170
- // Per https://docs.splunk.com/Documentation/Splunk/latest/RESTTUT/RESTsearches#Tips_on_accessing_searches
171
- const badState = new Set([
172
- 'PAUSE',
173
- 'INTERNAL_CANCEL',
174
- 'USER_CANCEL',
175
- 'BAD_INPUT_CANCEL',
176
- 'QUIT',
177
- 'FAILED'
178
- ]);
179
- // Arbitrary time values for waiting (in ms), change as necessary
180
- // Time to wait until killing search job
181
- const searchJobTimeout = 120000;
182
- // Time interval between checking on status of search job
183
- const searchJobPing = 50;
184
- let queryStatus;
185
- let continuePing = true;
186
- // Kill query after 2 minute of waiting
187
- // Arbitrary time used, change as needed
188
- const queryTimer = setTimeout(() => {
189
- continuePing = false;
190
- clearTimeout(queryTimer);
191
- throw new Error('Search job timed out - Unable to retrieve query');
192
- }, searchJobTimeout);
193
- // Ping Splunk instance every 50 ms on status of search job
194
- const awaitJob = setInterval(async () => {
195
- try {
196
- queryStatus = await this.axiosInstance.get(`${this.hostname}/services/search/jobs/${job}`);
197
- }
198
- catch (error) {
199
- clearTimeout(queryTimer);
200
- clearInterval(awaitJob);
201
- throw new Error(`Failed search job - ${(0, splunk_tools_1.handleSplunkErrorResponse)(error)}`);
202
- }
203
- // Check if response schema is malformed
204
- if (_.has(queryStatus, 'data.entry[0].content')) {
205
- if (queryStatus.data.entry.length !== 1) {
206
- clearTimeout(queryTimer);
207
- clearInterval(awaitJob);
208
- throw new Error(`Failed search job - Detected malformed entry field length ${queryStatus.data.entry.length}`);
209
- }
210
- // If search job is complete, kill interval loop and exit
211
- if (queryStatus.data.entry[0].content.dispatchState === 'DONE' &&
212
- queryStatus.data.entry[0].content.isDone) {
213
- clearTimeout(queryTimer);
214
- clearInterval(awaitJob);
215
- }
216
- else if (badState.has(queryStatus.data.entry[0].content.dispatchState)) {
217
- // If search job returns a bad state result, kill interval loop and fail the query
218
- clearTimeout(queryTimer);
219
- clearInterval(awaitJob);
220
- throw new Error(`Failed search job - Detected dispatch state ${queryStatus.data.entry[0].content.dispatchState}`);
221
- }
222
- }
223
- else {
224
- clearTimeout(queryTimer);
225
- clearInterval(awaitJob);
226
- throw new Error('Failed search job - Malformed search job response received');
227
- }
228
- // Kill loop if search job times out
229
- if (!continuePing) {
230
- clearInterval(awaitJob);
231
- }
232
- }, searchJobPing);
233
- }
234
- parseSplunkResponse(query, results) {
235
- logger.info(`Got results for query: ${query}`);
236
- // Our data parsed as Key/Value pairs
237
- const objects = [];
238
- // Find _raw field, this contains our data
239
- let rawDataIndex = results?.fields.findIndex((field) => field.toLowerCase() === '_raw');
240
- if (rawDataIndex === -1) {
241
- logger.error(`Field _raw not found, using default index 3`);
242
- rawDataIndex = 3;
243
- }
244
- logger.debug(`Got field _raw at index ${rawDataIndex}`);
245
- // Find _indextime, this is when the data was imported into splunk
246
- let indexTimeIndex = results?.fields.findIndex((field) => field.toLowerCase() === '_indextime');
247
- if (indexTimeIndex === -1) {
248
- logger.error(`Field _indextime not found, using default index 2`);
249
- indexTimeIndex = 2;
250
- }
251
- logger.debug(`Got field _indextime at index ${indexTimeIndex}`);
252
- logger.verbose(`Parsing data returned by Splunk and appending timestamps`);
253
- for (const value of results.rows) {
254
- let object;
255
- try {
256
- object = JSON.parse(value[rawDataIndex]);
257
- }
258
- catch {
259
- throw new Error('Unable to parse file. Have you configured EVENT_BREAKER? See https://github.com/mitre/saf/wiki/Splunk-Configuration');
260
- }
261
- // Set the date from the _indextime
262
- try {
263
- _.set(object, 'meta.parse_time', unixTimeToDate(value[indexTimeIndex]).toISOString());
264
- }
265
- catch {
266
- // Parsing dates can be tricky sometimes
267
- _.set(object, 'meta.parse_time', new Date().toISOString());
268
- }
269
- objects.push(object);
270
- }
271
- logger.debug('Successfully parsed and added timestamps');
272
- return objects;
273
- }
274
- async queryData(query) {
275
- let queryJob;
276
- // Request session key for Axios instance
277
- const authToken = await (0, splunk_tools_1.checkSplunkCredentials)(this.config);
278
- this.axiosInstance.defaults.headers.common['Authorization'] =
279
- `Bearer ${authToken}`;
280
- // Create new search job from given query
281
- const job = await this.createJob(query);
282
- // Track status of search job
283
- await this.trackJob(job);
284
- // Ping Splunk for search job results
285
- try {
286
- // returnCount specifies the number of found results to return, if set to 0 returns all
287
- // Per https://docs.splunk.com/Documentation/Splunk/9.0.5/RESTREF/RESTsearch#search.2Fv2.2Fjobs.2F.7Bsearch_id.7D.2Fresults
288
- const returnCount = 0;
289
- queryJob = await this.axiosInstance.get(`${this.hostname}/services/search/v2/jobs/${job}/results`, {
290
- params: { count: returnCount, output_mode: 'json_rows' }
291
- });
292
- }
293
- catch (error) {
294
- throw new Error(`Failed search job - ${(0, splunk_tools_1.handleSplunkErrorResponse)(error)}`);
295
- }
296
- // Return search job results
297
- if (_.has(queryJob, ['data'])) {
298
- return this.parseSplunkResponse(query, queryJob.data);
299
- }
300
- else {
301
- throw new Error('Failed search job - Malformed search job results response received');
302
- }
303
- }
304
- async toHdf(guid) {
305
- logger.info(`Starting conversion of GUID ${guid}`);
306
- // Preliminary check of credentials
307
- // Not used for later logins
308
- await (0, splunk_tools_1.checkSplunkCredentials)(this.config);
309
- logger.info(`Credentials valid, querying data for ${guid}`);
310
- // Start search job for query
311
- const executionData = await this.queryData(`search index="*" meta.guid="${guid}"`);
312
- logger.info(`Data received, consolidating payloads for ${executionData.length} items`);
313
- return consolidatePayloads(executionData)[0];
314
- }
315
- }
316
- exports.SplunkMapper = SplunkMapper;
317
- //# sourceMappingURL=splunk-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"splunk-mapper.js","sourceRoot":"","sources":["../../src/splunk-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, {AxiosInstance, AxiosResponse} from 'axios';\nimport {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport {Logger} from 'winston';\nimport {SplunkConfig} from '../types/splunk-config-types';\nimport {SplunkReport} from '../types/splunk-report-types';\nimport {createWinstonLogger} from './utils/global';\nimport {\n checkSplunkCredentials,\n generateHostname,\n handleSplunkErrorResponse\n} from './utils/splunk-tools';\n\nexport type Hash<T> = {[key: string]: T};\n\nexport type SplunkConfigNoIndex = Omit<SplunkConfig, 'index'>;\n\nexport type GenericPayloadWithMetaData = {\n meta: FileMetaData;\n [key: string]: never[] | Record<string, unknown>;\n};\n\nexport type FileMetaData = {\n guid: string;\n subtype: string;\n hdf_splunk_schema: string;\n filetype: string;\n filename: string;\n profile_sha256: string;\n [key: string]: never[] | unknown;\n};\n\nconst MAPPER_NAME = 'Splunk2HDF';\n\nlet logger = createWinstonLogger('Splunk2HDF');\n\n// Groups items by using the provided key function\nexport function groupBy<T>(\n items: Array<T>,\n keyGetter: (v: T) => string\n): Hash<Array<T>> {\n const result: Hash<Array<T>> = {};\n for (const i of items) {\n // Get the items key\n const key = keyGetter(i);\n\n // Get the list it should go in\n const corrList = result[key];\n if (corrList) {\n // If list exists, place\n corrList.push(i);\n } else {\n // List does not exist; create and put\n result[key] = [i];\n }\n }\n return result;\n}\n\n// Maps a hash to a new hash, with the same keys but each value replaced with a new (mapped) value\nexport function mapHash<T, G>(old: Hash<T>, mapFunction: (v: T) => G): Hash<G> {\n const result: Hash<G> = {};\n for (const key in old) {\n result[key] = mapFunction(old[key]);\n }\n return result;\n}\n\nexport function consolidatePayloads(\n payloads: SplunkReport[]\n): ExecJSON.Execution[] {\n // Group by exec id\n const grouped = groupBy(payloads, (pl) => pl.meta.guid);\n\n const built = mapHash(grouped, consolidateFilePayloads);\n return Object.values(built);\n}\n\nexport function replaceKeyValueDescriptions(\n controls: (ExecJSON.Control &\n GenericPayloadWithMetaData & {\n descriptions?: {[key: string]: string} | ExecJSON.ControlDescription[];\n })[]\n) {\n return controls.map((control) => {\n if (control.descriptions && !Array.isArray(control.descriptions)) {\n const extractedDescriptions: ExecJSON.ControlDescription[] = [];\n for (const [key, value] of Object.entries(control.descriptions)) {\n extractedDescriptions.push({label: key, data: value as string});\n }\n control.descriptions = extractedDescriptions;\n }\n return control;\n });\n}\n\nfunction consolidateFilePayloads(\n filePayloads: SplunkReport[]\n): ExecJSON.Execution {\n // In the end we wish to produce a single evaluation EventPayload which in fact contains all data for the guid\n // Group by subtype\n const subtypes = groupBy(filePayloads, (event) => event.meta.subtype);\n const execEvents = (subtypes['header'] ||\n []) as Partial<ExecJSON.Execution>[];\n const profileEvents = (subtypes['profile'] ||\n []) as unknown as (ExecJSON.Profile & GenericPayloadWithMetaData)[];\n const controlEvents = (subtypes['control'] ||\n []) as unknown as (ExecJSON.Control & GenericPayloadWithMetaData)[];\n\n logger.debug(`Have ${execEvents.length} execution events`);\n logger.debug(`Have ${profileEvents.length} profile events`);\n logger.debug(`Have ${controlEvents.length} control events`);\n\n // Verify we only have one exec event\n if (execEvents.length !== 1) {\n throw new Error(\n `Incorrect # of Evaluation events. Expected 1, got ${execEvents.length}`\n );\n }\n\n // Pull out the first (and only) execution event\n const exec = execEvents[0];\n\n // Put all the profiles into the exec\n exec.profiles?.push(...profileEvents);\n\n // Group controls, and then put them into the profiles\n const shaGroupedControls = groupBy(\n controlEvents,\n (ctrl) => ctrl.meta.profile_sha256\n );\n for (const profile of profileEvents) {\n profile.controls = [];\n // Get the corresponding controls, and put them into the profile\n const sha = profile.meta.profile_sha256;\n logger.debug(`Adding controls for profile with SHA256: ${sha}`);\n const corrControls = shaGroupedControls[sha] || [];\n profile.controls.push(\n ...replaceKeyValueDescriptions(\n corrControls as unknown as (ExecJSON.Control &\n GenericPayloadWithMetaData & {\n descriptions?:\n | {[key: string]: string}\n | ExecJSON.ControlDescription[];\n })[]\n )\n );\n logger.debug(\n `Added ${profile.controls.length} controls to profile with SHA256 ${sha}`\n );\n }\n\n return exec as unknown as ExecJSON.Execution;\n}\n\nfunction unixTimeToDate(unixTime: string): Date {\n // Splunk only currently returns ints but this could be a decimal for more precision\n return new Date(parseFloat(unixTime) * 1000);\n}\n\nexport class SplunkMapper {\n config: SplunkConfig;\n axiosInstance: AxiosInstance;\n hostname: string;\n\n constructor(\n config: SplunkConfig,\n logService?: Logger,\n loggingLevel?: string\n ) {\n this.config = config;\n this.axiosInstance = axios.create({params: {output_mode: 'json'}});\n this.hostname = generateHostname(config);\n if (logService) {\n logger = logService;\n } else {\n logger = createWinstonLogger(MAPPER_NAME, loggingLevel || 'debug');\n }\n logger.debug(`Initialized ${this.constructor.name} successfully`);\n }\n\n async createJob(query: string): Promise<string> {\n logger.debug(`Creating job for query: ${query}`);\n // Post to {host}/services/search/jobs endpoint to queue search job for given query\n let jobSID: AxiosResponse;\n try {\n jobSID = await this.axiosInstance.post(\n `${this.hostname}/services/search/jobs`,\n `exec_mode=blocking&search=${query}`\n );\n } catch (error) {\n const errorCode = handleSplunkErrorResponse(error);\n throw new Error(`Failed to create search job - ${errorCode}`);\n }\n\n // Return unique search ID (SID) assigned to that search job for future reference\n if (_.has(jobSID, ['data', 'sid'])) {\n return jobSID.data.sid;\n } else {\n throw new Error(\n 'Failed to create search job - Malformed search job creation response received'\n );\n }\n }\n\n async trackJob(job: string): Promise<void> {\n // All documented potential error states for a search job\n // Per https://docs.splunk.com/Documentation/Splunk/latest/RESTTUT/RESTsearches#Tips_on_accessing_searches\n const badState = new Set([\n 'PAUSE',\n 'INTERNAL_CANCEL',\n 'USER_CANCEL',\n 'BAD_INPUT_CANCEL',\n 'QUIT',\n 'FAILED'\n ]);\n // Arbitrary time values for waiting (in ms), change as necessary\n // Time to wait until killing search job\n const searchJobTimeout = 120000;\n // Time interval between checking on status of search job\n const searchJobPing = 50;\n let queryStatus: AxiosResponse;\n let continuePing = true;\n\n // Kill query after 2 minute of waiting\n // Arbitrary time used, change as needed\n const queryTimer = setTimeout(() => {\n continuePing = false;\n clearTimeout(queryTimer);\n throw new Error('Search job timed out - Unable to retrieve query');\n }, searchJobTimeout);\n\n // Ping Splunk instance every 50 ms on status of search job\n const awaitJob = setInterval(async () => {\n try {\n queryStatus = await this.axiosInstance.get(\n `${this.hostname}/services/search/jobs/${job}`\n );\n } catch (error) {\n clearTimeout(queryTimer);\n clearInterval(awaitJob);\n throw new Error(\n `Failed search job - ${handleSplunkErrorResponse(error)}`\n );\n }\n\n // Check if response schema is malformed\n if (_.has(queryStatus, 'data.entry[0].content')) {\n if (queryStatus.data.entry.length !== 1) {\n clearTimeout(queryTimer);\n clearInterval(awaitJob);\n throw new Error(\n `Failed search job - Detected malformed entry field length ${queryStatus.data.entry.length}`\n );\n }\n\n // If search job is complete, kill interval loop and exit\n if (\n queryStatus.data.entry[0].content.dispatchState === 'DONE' &&\n queryStatus.data.entry[0].content.isDone\n ) {\n clearTimeout(queryTimer);\n clearInterval(awaitJob);\n } else if (\n badState.has(queryStatus.data.entry[0].content.dispatchState)\n ) {\n // If search job returns a bad state result, kill interval loop and fail the query\n clearTimeout(queryTimer);\n clearInterval(awaitJob);\n throw new Error(\n `Failed search job - Detected dispatch state ${queryStatus.data.entry[0].content.dispatchState}`\n );\n }\n } else {\n clearTimeout(queryTimer);\n clearInterval(awaitJob);\n throw new Error(\n 'Failed search job - Malformed search job response received'\n );\n }\n\n // Kill loop if search job times out\n if (!continuePing) {\n clearInterval(awaitJob);\n }\n }, searchJobPing);\n }\n\n parseSplunkResponse(\n query: string,\n results: {fields: string[]; rows: string[]}\n ): SplunkReport[] {\n logger.info(`Got results for query: ${query}`);\n\n // Our data parsed as Key/Value pairs\n const objects: SplunkReport[] = [];\n // Find _raw field, this contains our data\n let rawDataIndex = results?.fields.findIndex(\n (field) => field.toLowerCase() === '_raw'\n );\n\n if (rawDataIndex === -1) {\n logger.error(`Field _raw not found, using default index 3`);\n rawDataIndex = 3;\n }\n\n logger.debug(`Got field _raw at index ${rawDataIndex}`);\n\n // Find _indextime, this is when the data was imported into splunk\n let indexTimeIndex = results?.fields.findIndex(\n (field) => field.toLowerCase() === '_indextime'\n );\n\n if (indexTimeIndex === -1) {\n logger.error(`Field _indextime not found, using default index 2`);\n indexTimeIndex = 2;\n }\n\n logger.debug(`Got field _indextime at index ${indexTimeIndex}`);\n logger.verbose(`Parsing data returned by Splunk and appending timestamps`);\n for (const value of results.rows) {\n let object;\n try {\n object = JSON.parse(value[rawDataIndex]);\n } catch {\n throw new Error(\n 'Unable to parse file. Have you configured EVENT_BREAKER? See https://github.com/mitre/saf/wiki/Splunk-Configuration'\n );\n }\n\n // Set the date from the _indextime\n try {\n _.set(\n object,\n 'meta.parse_time',\n unixTimeToDate(value[indexTimeIndex]).toISOString()\n );\n } catch {\n // Parsing dates can be tricky sometimes\n _.set(object, 'meta.parse_time', new Date().toISOString());\n }\n\n objects.push(object);\n }\n logger.debug('Successfully parsed and added timestamps');\n return objects;\n }\n\n async queryData(query: string): Promise<SplunkReport[]> {\n let queryJob: AxiosResponse;\n\n // Request session key for Axios instance\n const authToken = await checkSplunkCredentials(this.config);\n this.axiosInstance.defaults.headers.common['Authorization'] =\n `Bearer ${authToken}`;\n\n // Create new search job from given query\n const job = await this.createJob(query);\n\n // Track status of search job\n await this.trackJob(job);\n\n // Ping Splunk for search job results\n try {\n // returnCount specifies the number of found results to return, if set to 0 returns all\n // Per https://docs.splunk.com/Documentation/Splunk/9.0.5/RESTREF/RESTsearch#search.2Fv2.2Fjobs.2F.7Bsearch_id.7D.2Fresults\n const returnCount = 0;\n\n queryJob = await this.axiosInstance.get(\n `${this.hostname}/services/search/v2/jobs/${job}/results`,\n {\n params: {count: returnCount, output_mode: 'json_rows'}\n }\n );\n } catch (error) {\n throw new Error(\n `Failed search job - ${handleSplunkErrorResponse(error)}`\n );\n }\n\n // Return search job results\n if (_.has(queryJob, ['data'])) {\n return this.parseSplunkResponse(query, queryJob.data);\n } else {\n throw new Error(\n 'Failed search job - Malformed search job results response received'\n );\n }\n }\n\n async toHdf(guid: string): Promise<ExecJSON.Execution> {\n logger.info(`Starting conversion of GUID ${guid}`);\n // Preliminary check of credentials\n // Not used for later logins\n await checkSplunkCredentials(this.config);\n logger.info(`Credentials valid, querying data for ${guid}`);\n\n // Start search job for query\n const executionData = await this.queryData(\n `search index=\"*\" meta.guid=\"${guid}\"`\n );\n logger.info(\n `Data received, consolidating payloads for ${executionData.length} items`\n );\n return consolidatePayloads(executionData)[0];\n }\n}\n"]}