@skillsmith/core 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
  3. package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
  4. package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
  5. package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
  6. package/dist/src/analysis/framework-detector.d.ts +47 -0
  7. package/dist/src/analysis/framework-detector.d.ts.map +1 -0
  8. package/dist/src/analysis/framework-detector.js +151 -0
  9. package/dist/src/analysis/framework-detector.js.map +1 -0
  10. package/dist/src/analysis/index.d.ts +6 -1
  11. package/dist/src/analysis/index.d.ts.map +1 -1
  12. package/dist/src/analysis/index.js +10 -1
  13. package/dist/src/analysis/index.js.map +1 -1
  14. package/dist/src/analysis/parsers.d.ts +43 -0
  15. package/dist/src/analysis/parsers.d.ts.map +1 -0
  16. package/dist/src/analysis/parsers.js +219 -0
  17. package/dist/src/analysis/parsers.js.map +1 -0
  18. package/dist/src/analysis/types.d.ts +138 -0
  19. package/dist/src/analysis/types.d.ts.map +1 -0
  20. package/dist/src/analysis/types.js +25 -0
  21. package/dist/src/analysis/types.js.map +1 -0
  22. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  23. package/dist/src/analytics/AnalyticsRepository.js +4 -4
  24. package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
  25. package/dist/src/api/cache.d.ts +108 -0
  26. package/dist/src/api/cache.d.ts.map +1 -0
  27. package/dist/src/api/cache.js +216 -0
  28. package/dist/src/api/cache.js.map +1 -0
  29. package/dist/src/api/client.d.ts +152 -0
  30. package/dist/src/api/client.d.ts.map +1 -0
  31. package/dist/src/api/client.js +221 -0
  32. package/dist/src/api/client.js.map +1 -0
  33. package/dist/src/api/index.d.ts +10 -0
  34. package/dist/src/api/index.d.ts.map +1 -0
  35. package/dist/src/api/index.js +10 -0
  36. package/dist/src/api/index.js.map +1 -0
  37. package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
  38. package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
  39. package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
  40. package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
  41. package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
  42. package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
  43. package/dist/src/benchmarks/MemoryProfiler.js +4 -400
  44. package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
  45. package/dist/src/benchmarks/comparator.d.ts +38 -0
  46. package/dist/src/benchmarks/comparator.d.ts.map +1 -0
  47. package/dist/src/benchmarks/comparator.js +81 -0
  48. package/dist/src/benchmarks/comparator.js.map +1 -0
  49. package/dist/src/benchmarks/formatters.d.ts +30 -0
  50. package/dist/src/benchmarks/formatters.d.ts.map +1 -0
  51. package/dist/src/benchmarks/formatters.js +88 -0
  52. package/dist/src/benchmarks/formatters.js.map +1 -0
  53. package/dist/src/benchmarks/index.d.ts +5 -1
  54. package/dist/src/benchmarks/index.d.ts.map +1 -1
  55. package/dist/src/benchmarks/index.js +9 -2
  56. package/dist/src/benchmarks/index.js.map +1 -1
  57. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
  58. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
  59. package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
  60. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
  61. package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
  62. package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
  63. package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
  64. package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
  65. package/dist/src/benchmarks/memory/index.d.ts +12 -0
  66. package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
  67. package/dist/src/benchmarks/memory/index.js +12 -0
  68. package/dist/src/benchmarks/memory/index.js.map +1 -0
  69. package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
  70. package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
  71. package/dist/src/benchmarks/memory/leak-detector.js +46 -0
  72. package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
  73. package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
  74. package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
  75. package/dist/src/benchmarks/memory/regression-detector.js +56 -0
  76. package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
  77. package/dist/src/benchmarks/memory/types.d.ts +111 -0
  78. package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
  79. package/dist/src/benchmarks/memory/types.js +7 -0
  80. package/dist/src/benchmarks/memory/types.js.map +1 -0
  81. package/dist/src/benchmarks/memory/utils.d.ts +17 -0
  82. package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
  83. package/dist/src/benchmarks/memory/utils.js +29 -0
  84. package/dist/src/benchmarks/memory/utils.js.map +1 -0
  85. package/dist/src/benchmarks/types.d.ts +175 -0
  86. package/dist/src/benchmarks/types.d.ts.map +1 -0
  87. package/dist/src/benchmarks/types.js +20 -0
  88. package/dist/src/benchmarks/types.js.map +1 -0
  89. package/dist/src/index.d.ts +4 -2
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/index.js +7 -3
  92. package/dist/src/index.js.map +1 -1
  93. package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
  94. package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
  95. package/dist/src/repositories/QuarantineRepository.js +4 -441
  96. package/dist/src/repositories/QuarantineRepository.js.map +1 -1
  97. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
  98. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
  99. package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
  100. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
  101. package/dist/src/repositories/quarantine/index.d.ts +10 -0
  102. package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
  103. package/dist/src/repositories/quarantine/index.js +10 -0
  104. package/dist/src/repositories/quarantine/index.js.map +1 -0
  105. package/dist/src/repositories/quarantine/queries.d.ts +58 -0
  106. package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
  107. package/dist/src/repositories/quarantine/queries.js +88 -0
  108. package/dist/src/repositories/quarantine/queries.js.map +1 -0
  109. package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
  110. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
  111. package/dist/src/repositories/quarantine/query-builder.js +87 -0
  112. package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
  113. package/dist/src/repositories/quarantine/types.d.ts +155 -0
  114. package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
  115. package/dist/src/repositories/quarantine/types.js +13 -0
  116. package/dist/src/repositories/quarantine/types.js.map +1 -0
  117. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
  118. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
  119. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
  120. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  121. package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
  122. package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
  123. package/dist/src/scripts/github-import/checkpoint.js +52 -0
  124. package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
  125. package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
  126. package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
  127. package/dist/src/scripts/github-import/deduplication.js +33 -0
  128. package/dist/src/scripts/github-import/deduplication.js.map +1 -0
  129. package/dist/src/scripts/github-import/github-client.d.ts +29 -0
  130. package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
  131. package/dist/src/scripts/github-import/github-client.js +184 -0
  132. package/dist/src/scripts/github-import/github-client.js.map +1 -0
  133. package/dist/src/scripts/github-import/index.d.ts +29 -0
  134. package/dist/src/scripts/github-import/index.d.ts.map +1 -0
  135. package/dist/src/scripts/github-import/index.js +198 -0
  136. package/dist/src/scripts/github-import/index.js.map +1 -0
  137. package/dist/src/scripts/github-import/output.d.ts +12 -0
  138. package/dist/src/scripts/github-import/output.d.ts.map +1 -0
  139. package/dist/src/scripts/github-import/output.js +34 -0
  140. package/dist/src/scripts/github-import/output.js.map +1 -0
  141. package/dist/src/scripts/github-import/types.d.ts +108 -0
  142. package/dist/src/scripts/github-import/types.d.ts.map +1 -0
  143. package/dist/src/scripts/github-import/types.js +44 -0
  144. package/dist/src/scripts/github-import/types.js.map +1 -0
  145. package/dist/src/scripts/github-import/utils.d.ts +13 -0
  146. package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
  147. package/dist/src/scripts/github-import/utils.js +28 -0
  148. package/dist/src/scripts/github-import/utils.js.map +1 -0
  149. package/dist/src/scripts/import-github-skills.d.ts +3 -12
  150. package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
  151. package/dist/src/scripts/import-github-skills.js +18 -398
  152. package/dist/src/scripts/import-github-skills.js.map +1 -1
  153. package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
  154. package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
  155. package/dist/src/scripts/scan-imported-skills.js +8 -397
  156. package/dist/src/scripts/scan-imported-skills.js.map +1 -1
  157. package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
  158. package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
  159. package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
  160. package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
  161. package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
  162. package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
  163. package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
  164. package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
  165. package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
  166. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
  167. package/dist/src/scripts/skill-scanner/index.js +43 -0
  168. package/dist/src/scripts/skill-scanner/index.js.map +1 -0
  169. package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
  170. package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
  171. package/dist/src/scripts/skill-scanner/logger.js +104 -0
  172. package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
  173. package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
  174. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
  175. package/dist/src/scripts/skill-scanner/reporter.js +166 -0
  176. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
  177. package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
  178. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
  179. package/dist/src/scripts/skill-scanner/scanner.js +140 -0
  180. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
  181. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
  182. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
  183. package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
  184. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
  185. package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
  186. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
  187. package/dist/src/scripts/skill-scanner/types.js +7 -0
  188. package/dist/src/scripts/skill-scanner/types.js.map +1 -0
  189. package/dist/src/scripts/validate-skills.d.ts +3 -172
  190. package/dist/src/scripts/validate-skills.d.ts.map +1 -1
  191. package/dist/src/scripts/validate-skills.js +6 -519
  192. package/dist/src/scripts/validate-skills.js.map +1 -1
  193. package/dist/src/scripts/validation/deduplication.d.ts +23 -0
  194. package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
  195. package/dist/src/scripts/validation/deduplication.js +127 -0
  196. package/dist/src/scripts/validation/deduplication.js.map +1 -0
  197. package/dist/src/scripts/validation/field-validators.d.ts +9 -0
  198. package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
  199. package/dist/src/scripts/validation/field-validators.js +135 -0
  200. package/dist/src/scripts/validation/field-validators.js.map +1 -0
  201. package/dist/src/scripts/validation/index.d.ts +29 -0
  202. package/dist/src/scripts/validation/index.d.ts.map +1 -0
  203. package/dist/src/scripts/validation/index.js +84 -0
  204. package/dist/src/scripts/validation/index.js.map +1 -0
  205. package/dist/src/scripts/validation/normalizers.d.ts +29 -0
  206. package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
  207. package/dist/src/scripts/validation/normalizers.js +79 -0
  208. package/dist/src/scripts/validation/normalizers.js.map +1 -0
  209. package/dist/src/scripts/validation/pipeline.d.ts +13 -0
  210. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
  211. package/dist/src/scripts/validation/pipeline.js +126 -0
  212. package/dist/src/scripts/validation/pipeline.js.map +1 -0
  213. package/dist/src/scripts/validation/types.d.ts +128 -0
  214. package/dist/src/scripts/validation/types.d.ts.map +1 -0
  215. package/dist/src/scripts/validation/types.js +43 -0
  216. package/dist/src/scripts/validation/types.js.map +1 -0
  217. package/dist/src/security/index.d.ts +5 -4
  218. package/dist/src/security/index.d.ts.map +1 -1
  219. package/dist/src/security/index.js +8 -2
  220. package/dist/src/security/index.js.map +1 -1
  221. package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
  222. package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
  223. package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
  224. package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
  225. package/dist/src/security/rate-limiter/constants.d.ts +15 -0
  226. package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
  227. package/dist/src/security/rate-limiter/constants.js +15 -0
  228. package/dist/src/security/rate-limiter/constants.js.map +1 -0
  229. package/dist/src/security/rate-limiter/errors.d.ts +22 -0
  230. package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
  231. package/dist/src/security/rate-limiter/errors.js +32 -0
  232. package/dist/src/security/rate-limiter/errors.js.map +1 -0
  233. package/dist/src/security/rate-limiter/index.d.ts +12 -0
  234. package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
  235. package/dist/src/security/rate-limiter/index.js +16 -0
  236. package/dist/src/security/rate-limiter/index.js.map +1 -0
  237. package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
  238. package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
  239. package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
  240. package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
  241. package/dist/src/security/rate-limiter/presets.d.ts +52 -0
  242. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
  243. package/dist/src/security/rate-limiter/presets.js +53 -0
  244. package/dist/src/security/rate-limiter/presets.js.map +1 -0
  245. package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
  246. package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
  247. package/dist/src/security/rate-limiter/queue-manager.js +189 -0
  248. package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
  249. package/dist/src/security/rate-limiter/storage.d.ts +34 -0
  250. package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
  251. package/dist/src/security/rate-limiter/storage.js +80 -0
  252. package/dist/src/security/rate-limiter/storage.js.map +1 -0
  253. package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
  254. package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
  255. package/dist/src/security/rate-limiter/token-bucket.js +99 -0
  256. package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
  257. package/dist/src/security/rate-limiter/types.d.ts +104 -0
  258. package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
  259. package/dist/src/security/rate-limiter/types.js +7 -0
  260. package/dist/src/security/rate-limiter/types.js.map +1 -0
  261. package/dist/src/security/scanner/SecurityScanner.d.ts +94 -0
  262. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
  263. package/dist/src/security/scanner/SecurityScanner.js +403 -0
  264. package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
  265. package/dist/src/security/scanner/index.d.ts +11 -0
  266. package/dist/src/security/scanner/index.d.ts.map +1 -0
  267. package/dist/src/security/scanner/index.js +14 -0
  268. package/dist/src/security/scanner/index.js.map +1 -0
  269. package/dist/src/security/scanner/patterns.d.ts +14 -0
  270. package/dist/src/security/scanner/patterns.d.ts.map +1 -0
  271. package/dist/src/security/scanner/patterns.js +147 -0
  272. package/dist/src/security/scanner/patterns.js.map +1 -0
  273. package/dist/src/security/scanner/regex-utils.d.ts +33 -0
  274. package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
  275. package/dist/src/security/scanner/regex-utils.js +41 -0
  276. package/dist/src/security/scanner/regex-utils.js.map +1 -0
  277. package/dist/src/security/scanner/types.d.ts +63 -0
  278. package/dist/src/security/scanner/types.d.ts.map +1 -0
  279. package/dist/src/security/scanner/types.js +7 -0
  280. package/dist/src/security/scanner/types.js.map +1 -0
  281. package/dist/src/security/scanner/weights.d.ts +15 -0
  282. package/dist/src/security/scanner/weights.d.ts.map +1 -0
  283. package/dist/src/security/scanner/weights.js +28 -0
  284. package/dist/src/security/scanner/weights.js.map +1 -0
  285. package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
  286. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  287. package/dist/src/session/SessionHealthMonitor.js +22 -91
  288. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  289. package/dist/src/session/health-checks.d.ts +37 -0
  290. package/dist/src/session/health-checks.d.ts.map +1 -0
  291. package/dist/src/session/health-checks.js +64 -0
  292. package/dist/src/session/health-checks.js.map +1 -0
  293. package/dist/src/session/health-types.d.ts +78 -0
  294. package/dist/src/session/health-types.d.ts.map +1 -0
  295. package/dist/src/session/health-types.js +16 -0
  296. package/dist/src/session/health-types.js.map +1 -0
  297. package/dist/src/session/index.d.ts +5 -1
  298. package/dist/src/session/index.d.ts.map +1 -1
  299. package/dist/src/session/index.js +9 -0
  300. package/dist/src/session/index.js.map +1 -1
  301. package/dist/src/session/metrics-collector.d.ts +23 -0
  302. package/dist/src/session/metrics-collector.d.ts.map +1 -0
  303. package/dist/src/session/metrics-collector.js +44 -0
  304. package/dist/src/session/metrics-collector.js.map +1 -0
  305. package/dist/src/session/typed-event-emitter.d.ts +70 -0
  306. package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
  307. package/dist/src/session/typed-event-emitter.js +79 -0
  308. package/dist/src/session/typed-event-emitter.js.map +1 -0
  309. package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
  310. package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
  311. package/dist/src/sources/BaseSourceAdapter.js +2 -2
  312. package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
  313. package/dist/src/telemetry/index.d.ts +1 -0
  314. package/dist/src/telemetry/index.d.ts.map +1 -1
  315. package/dist/src/telemetry/index.js +2 -0
  316. package/dist/src/telemetry/index.js.map +1 -1
  317. package/dist/src/telemetry/posthog.d.ts +125 -0
  318. package/dist/src/telemetry/posthog.d.ts.map +1 -0
  319. package/dist/src/telemetry/posthog.js +198 -0
  320. package/dist/src/telemetry/posthog.js.map +1 -0
  321. package/dist/tests/RateLimiter.test.js +4 -4
  322. package/dist/tests/RateLimiter.test.js.map +1 -1
  323. package/dist/tests/e2e/security/security.e2e.test.js +3 -3
  324. package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
  325. package/package.json +2 -1
@@ -1,445 +1,8 @@
1
1
  /**
2
- * SMI-865: Quarantine Repository - CRUD operations for skill quarantine management
2
+ * SMI-865: Quarantine Repository
3
3
  *
4
- * Provides:
5
- * - Create, Read, Update, Delete operations for quarantine entries
6
- * - Review workflow management
7
- * - Integration with AuditLogger for audit trail
8
- * - Query filtering and pagination
9
- *
10
- * Severity Categories:
11
- * - MALICIOUS: Permanent quarantine, security threat detected
12
- * - SUSPICIOUS: Manual review required before import
13
- * - RISKY: Can import with warnings displayed
14
- * - LOW_QUALITY: Can import with reduced quality score
15
- */
16
- import { randomUUID } from 'crypto';
17
- import { initializeQuarantineSchema, QUARANTINE_SEVERITY_POLICIES, } from '../db/quarantine-schema.js';
18
- /**
19
- * Repository for quarantine CRUD operations
20
- *
21
- * @example
22
- * ```typescript
23
- * const repo = new QuarantineRepository(db, auditLogger)
24
- *
25
- * // Quarantine a suspicious skill
26
- * const entry = repo.create({
27
- * skillId: 'community/suspicious-skill',
28
- * source: 'github',
29
- * quarantineReason: 'Obfuscated code detected',
30
- * severity: 'SUSPICIOUS',
31
- * detectedPatterns: ['eval()', 'obfuscated variables']
32
- * })
33
- *
34
- * // Review and approve/reject
35
- * const decision = repo.review(entry.id, {
36
- * reviewedBy: 'security-team',
37
- * reviewStatus: 'approved',
38
- * reviewNotes: 'Manual review confirmed safe after code analysis'
39
- * })
40
- * ```
4
+ * Re-exports from quarantine module for backward compatibility.
5
+ * See quarantine/ subdirectory for implementation.
41
6
  */
42
- export class QuarantineRepository {
43
- db;
44
- auditLogger;
45
- stmts;
46
- constructor(db, auditLogger) {
47
- this.db = db;
48
- this.auditLogger = auditLogger;
49
- this.ensureTableExists();
50
- this.prepareStatements();
51
- }
52
- /**
53
- * Ensure the quarantine table exists
54
- */
55
- ensureTableExists() {
56
- initializeQuarantineSchema(this.db);
57
- }
58
- /**
59
- * Prepare SQL statements for performance
60
- */
61
- prepareStatements() {
62
- this.stmts = {
63
- insert: this.db.prepare(`
64
- INSERT INTO quarantine (
65
- id, skill_id, source, quarantine_reason, severity,
66
- detected_patterns, quarantine_date, reviewed_by, review_status,
67
- review_notes, review_date, created_at, updated_at
68
- )
69
- VALUES (?, ?, ?, ?, ?, ?, datetime('now'), ?, ?, ?, ?, datetime('now'), datetime('now'))
70
- `),
71
- selectById: this.db.prepare(`
72
- SELECT * FROM quarantine WHERE id = ?
73
- `),
74
- selectBySkillId: this.db.prepare(`
75
- SELECT * FROM quarantine WHERE skill_id = ? ORDER BY quarantine_date DESC
76
- `),
77
- selectAll: this.db.prepare(`
78
- SELECT * FROM quarantine ORDER BY quarantine_date DESC LIMIT ? OFFSET ?
79
- `),
80
- selectCount: this.db.prepare(`
81
- SELECT COUNT(*) as count FROM quarantine
82
- `),
83
- update: this.db.prepare(`
84
- UPDATE quarantine SET
85
- quarantine_reason = COALESCE(?, quarantine_reason),
86
- severity = COALESCE(?, severity),
87
- detected_patterns = COALESCE(?, detected_patterns),
88
- reviewed_by = COALESCE(?, reviewed_by),
89
- review_status = COALESCE(?, review_status),
90
- review_notes = COALESCE(?, review_notes),
91
- review_date = CASE WHEN ? IS NOT NULL THEN datetime('now') ELSE review_date END,
92
- updated_at = datetime('now')
93
- WHERE id = ?
94
- `),
95
- delete: this.db.prepare(`
96
- DELETE FROM quarantine WHERE id = ?
97
- `),
98
- deleteBySkillId: this.db.prepare(`
99
- DELETE FROM quarantine WHERE skill_id = ?
100
- `),
101
- };
102
- }
103
- /**
104
- * Convert a database row to a QuarantineEntry object
105
- */
106
- rowToEntry(row) {
107
- return {
108
- id: row.id,
109
- skillId: row.skill_id,
110
- source: row.source,
111
- quarantineReason: row.quarantine_reason,
112
- severity: row.severity,
113
- detectedPatterns: JSON.parse(row.detected_patterns || '[]'),
114
- quarantineDate: row.quarantine_date,
115
- reviewedBy: row.reviewed_by,
116
- reviewStatus: row.review_status,
117
- reviewNotes: row.review_notes,
118
- reviewDate: row.review_date,
119
- createdAt: row.created_at,
120
- updatedAt: row.updated_at,
121
- };
122
- }
123
- /**
124
- * Log audit event if AuditLogger is available
125
- */
126
- logAudit(action, resource, result, metadata) {
127
- if (this.auditLogger) {
128
- this.auditLogger.log({
129
- event_type: 'security_scan',
130
- actor: 'system',
131
- resource,
132
- action,
133
- result,
134
- metadata,
135
- });
136
- }
137
- }
138
- /**
139
- * Create a new quarantine entry
140
- *
141
- * @param input - Quarantine entry data
142
- * @returns Created quarantine entry
143
- */
144
- create(input) {
145
- const id = input.id || randomUUID();
146
- const patterns = JSON.stringify(input.detectedPatterns || []);
147
- this.stmts.insert.run(id, input.skillId, input.source, input.quarantineReason, input.severity, patterns, null, // reviewed_by
148
- 'pending', // review_status
149
- null, // review_notes
150
- null // review_date
151
- );
152
- this.logAudit('quarantine_create', input.skillId, 'success', {
153
- quarantineId: id,
154
- severity: input.severity,
155
- reason: input.quarantineReason,
156
- patterns: input.detectedPatterns,
157
- });
158
- const row = this.stmts.selectById.get(id);
159
- return this.rowToEntry(row);
160
- }
161
- /**
162
- * Find a quarantine entry by ID
163
- *
164
- * @param id - Quarantine entry ID
165
- * @returns Quarantine entry or null if not found
166
- */
167
- findById(id) {
168
- const row = this.stmts.selectById.get(id);
169
- return row ? this.rowToEntry(row) : null;
170
- }
171
- /**
172
- * Find all quarantine entries for a skill
173
- *
174
- * @param skillId - Skill ID
175
- * @returns Array of quarantine entries
176
- */
177
- findBySkillId(skillId) {
178
- const rows = this.stmts.selectBySkillId.all(skillId);
179
- return rows.map((row) => this.rowToEntry(row));
180
- }
181
- /**
182
- * Check if a skill is quarantined
183
- *
184
- * @param skillId - Skill ID
185
- * @returns True if skill has any pending quarantine entries
186
- */
187
- isQuarantined(skillId) {
188
- const entries = this.findBySkillId(skillId);
189
- return entries.some((e) => e.reviewStatus === 'pending' || e.reviewStatus === 'rejected');
190
- }
191
- /**
192
- * Get the most severe quarantine entry for a skill
193
- *
194
- * @param skillId - Skill ID
195
- * @returns Most severe quarantine entry or null
196
- */
197
- getMostSevere(skillId) {
198
- const entries = this.findBySkillId(skillId).filter((e) => e.reviewStatus !== 'approved');
199
- if (entries.length === 0)
200
- return null;
201
- return entries.sort((a, b) => {
202
- const aLevel = QUARANTINE_SEVERITY_POLICIES[a.severity].level;
203
- const bLevel = QUARANTINE_SEVERITY_POLICIES[b.severity].level;
204
- return bLevel - aLevel;
205
- })[0];
206
- }
207
- /**
208
- * Find all quarantine entries with pagination
209
- *
210
- * @param options - Pagination options
211
- * @returns Paginated quarantine results
212
- */
213
- findAll(options = {}) {
214
- const limit = options.limit ?? 20;
215
- const offset = options.offset ?? 0;
216
- const rows = this.stmts.selectAll.all(limit, offset);
217
- const { count } = this.stmts.selectCount.get();
218
- return {
219
- items: rows.map((row) => this.rowToEntry(row)),
220
- total: count,
221
- limit,
222
- offset,
223
- hasMore: offset + rows.length < count,
224
- };
225
- }
226
- /**
227
- * Query quarantine entries with filters
228
- *
229
- * @param filter - Query filters
230
- * @returns Paginated quarantine results
231
- */
232
- query(filter) {
233
- const { skillId, source, severity, reviewStatus, reviewedBy, since, until, limit = 20, offset = 0, } = filter;
234
- // Build dynamic query
235
- let query = 'SELECT * FROM quarantine WHERE 1=1';
236
- let countQuery = 'SELECT COUNT(*) as count FROM quarantine WHERE 1=1';
237
- const params = [];
238
- const countParams = [];
239
- if (skillId) {
240
- query += ' AND skill_id = ?';
241
- countQuery += ' AND skill_id = ?';
242
- params.push(skillId);
243
- countParams.push(skillId);
244
- }
245
- if (source) {
246
- query += ' AND source = ?';
247
- countQuery += ' AND source = ?';
248
- params.push(source);
249
- countParams.push(source);
250
- }
251
- if (severity) {
252
- query += ' AND severity = ?';
253
- countQuery += ' AND severity = ?';
254
- params.push(severity);
255
- countParams.push(severity);
256
- }
257
- if (reviewStatus) {
258
- query += ' AND review_status = ?';
259
- countQuery += ' AND review_status = ?';
260
- params.push(reviewStatus);
261
- countParams.push(reviewStatus);
262
- }
263
- if (reviewedBy) {
264
- query += ' AND reviewed_by = ?';
265
- countQuery += ' AND reviewed_by = ?';
266
- params.push(reviewedBy);
267
- countParams.push(reviewedBy);
268
- }
269
- if (since) {
270
- query += ' AND quarantine_date >= ?';
271
- countQuery += ' AND quarantine_date >= ?';
272
- params.push(since.toISOString());
273
- countParams.push(since.toISOString());
274
- }
275
- if (until) {
276
- query += ' AND quarantine_date <= ?';
277
- countQuery += ' AND quarantine_date <= ?';
278
- params.push(until.toISOString());
279
- countParams.push(until.toISOString());
280
- }
281
- query += ' ORDER BY quarantine_date DESC LIMIT ? OFFSET ?';
282
- params.push(limit, offset);
283
- const rows = this.db.prepare(query).all(...params);
284
- const { count } = this.db.prepare(countQuery).get(...countParams);
285
- return {
286
- items: rows.map((row) => this.rowToEntry(row)),
287
- total: count,
288
- limit,
289
- offset,
290
- hasMore: offset + rows.length < count,
291
- };
292
- }
293
- /**
294
- * Update a quarantine entry
295
- *
296
- * @param id - Quarantine entry ID
297
- * @param input - Update data
298
- * @returns Updated entry or null if not found
299
- */
300
- update(id, input) {
301
- const patterns = input.detectedPatterns ? JSON.stringify(input.detectedPatterns) : null;
302
- const hasReviewUpdate = input.reviewStatus !== undefined;
303
- const result = this.stmts.update.run(input.quarantineReason ?? null, input.severity ?? null, patterns, input.reviewedBy ?? null, input.reviewStatus ?? null, input.reviewNotes ?? null, hasReviewUpdate ? 'set' : null, // Trigger review_date update
304
- id);
305
- if (result.changes === 0) {
306
- return null;
307
- }
308
- const updated = this.findById(id);
309
- if (updated) {
310
- this.logAudit('quarantine_update', updated.skillId, 'success', {
311
- quarantineId: id,
312
- updates: input,
313
- });
314
- }
315
- return updated;
316
- }
317
- /**
318
- * Review a quarantine entry
319
- *
320
- * @param id - Quarantine entry ID
321
- * @param reviewInput - Review data
322
- * @returns Review decision with import guidance
323
- */
324
- review(id, reviewInput) {
325
- const entry = this.findById(id);
326
- if (!entry)
327
- return null;
328
- const updated = this.update(id, {
329
- reviewedBy: reviewInput.reviewedBy,
330
- reviewStatus: reviewInput.reviewStatus,
331
- reviewNotes: reviewInput.reviewNotes,
332
- });
333
- if (!updated)
334
- return null;
335
- const policy = QUARANTINE_SEVERITY_POLICIES[updated.severity];
336
- const approved = reviewInput.reviewStatus === 'approved';
337
- const warnings = [];
338
- if (approved && updated.severity === 'RISKY') {
339
- warnings.push(`Skill was flagged as RISKY: ${updated.quarantineReason}`);
340
- }
341
- if (approved && updated.severity === 'LOW_QUALITY') {
342
- warnings.push(`Skill has low quality indicators: ${updated.quarantineReason}`);
343
- }
344
- this.logAudit('quarantine_review', updated.skillId, approved ? 'success' : 'blocked', {
345
- quarantineId: id,
346
- reviewStatus: reviewInput.reviewStatus,
347
- reviewedBy: reviewInput.reviewedBy,
348
- severity: updated.severity,
349
- canImport: approved && policy.allowImport,
350
- });
351
- return {
352
- approved,
353
- skillId: updated.skillId,
354
- severity: updated.severity,
355
- canImport: approved || policy.allowImport,
356
- warnings,
357
- };
358
- }
359
- /**
360
- * Delete a quarantine entry
361
- *
362
- * @param id - Quarantine entry ID
363
- * @returns True if entry was deleted
364
- */
365
- delete(id) {
366
- const entry = this.findById(id);
367
- const result = this.stmts.delete.run(id);
368
- if (result.changes > 0 && entry) {
369
- this.logAudit('quarantine_delete', entry.skillId, 'success', {
370
- quarantineId: id,
371
- });
372
- }
373
- return result.changes > 0;
374
- }
375
- /**
376
- * Delete all quarantine entries for a skill
377
- *
378
- * @param skillId - Skill ID
379
- * @returns Number of deleted entries
380
- */
381
- deleteBySkillId(skillId) {
382
- const result = this.stmts.deleteBySkillId.run(skillId);
383
- if (result.changes > 0) {
384
- this.logAudit('quarantine_delete_all', skillId, 'success', {
385
- deletedCount: result.changes,
386
- });
387
- }
388
- return result.changes;
389
- }
390
- /**
391
- * Get quarantine statistics
392
- *
393
- * @returns Quarantine statistics
394
- */
395
- getStats() {
396
- const totalResult = this.db.prepare('SELECT COUNT(*) as count FROM quarantine').get();
397
- const severityResults = this.db
398
- .prepare('SELECT severity, COUNT(*) as count FROM quarantine GROUP BY severity')
399
- .all();
400
- const bySeverity = severityResults.reduce((acc, row) => {
401
- acc[row.severity] = row.count;
402
- return acc;
403
- }, {});
404
- const statusResults = this.db
405
- .prepare('SELECT review_status, COUNT(*) as count FROM quarantine GROUP BY review_status')
406
- .all();
407
- const byStatus = statusResults.reduce((acc, row) => {
408
- acc[row.review_status] = row.count;
409
- return acc;
410
- }, {});
411
- const pendingResult = this.db
412
- .prepare("SELECT COUNT(*) as count FROM quarantine WHERE review_status = 'pending'")
413
- .get();
414
- const rangeResult = this.db
415
- .prepare('SELECT MIN(quarantine_date) as oldest, MAX(quarantine_date) as newest FROM quarantine')
416
- .get();
417
- return {
418
- total: totalResult.count,
419
- bySeverity,
420
- byStatus,
421
- pendingReview: pendingResult.count,
422
- oldestEntry: rangeResult.oldest,
423
- newestEntry: rangeResult.newest,
424
- };
425
- }
426
- /**
427
- * Count all quarantine entries
428
- *
429
- * @returns Total count
430
- */
431
- count() {
432
- const { count } = this.stmts.selectCount.get();
433
- return count;
434
- }
435
- /**
436
- * Execute a function within a transaction
437
- *
438
- * @param fn - Function to execute
439
- * @returns Result of the function
440
- */
441
- transaction(fn) {
442
- return this.db.transaction(fn)();
443
- }
444
- }
7
+ export * from './quarantine/index.js';
445
8
  //# sourceMappingURL=QuarantineRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuarantineRepository.js","sourceRoot":"","sources":["../../../src/repositories/QuarantineRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QuarantineRepository.js","sourceRoot":"","sources":["../../../src/repositories/QuarantineRepository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * SMI-865: Quarantine Repository - CRUD operations for skill quarantine management
3
+ *
4
+ * Provides:
5
+ * - Create, Read, Update, Delete operations for quarantine entries
6
+ * - Review workflow management
7
+ * - Integration with AuditLogger for audit trail
8
+ * - Query filtering and pagination
9
+ *
10
+ * Severity Categories:
11
+ * - MALICIOUS: Permanent quarantine, security threat detected
12
+ * - SUSPICIOUS: Manual review required before import
13
+ * - RISKY: Can import with warnings displayed
14
+ * - LOW_QUALITY: Can import with reduced quality score
15
+ */
16
+ import type { Database as DatabaseType } from 'better-sqlite3';
17
+ import type { QuarantineReviewStatus } from '../../db/quarantine-schema.js';
18
+ import type { AuditLogger } from '../../security/AuditLogger.js';
19
+ import type { QuarantineEntry, QuarantineCreateInput, QuarantineUpdateInput, QuarantineQueryFilter, PaginatedQuarantineResults, QuarantineStats, ReviewDecision } from './types.js';
20
+ export type { QuarantineEntry, QuarantineCreateInput, QuarantineUpdateInput, QuarantineQueryFilter, PaginatedQuarantineResults, QuarantineStats, ReviewDecision, } from './types.js';
21
+ /**
22
+ * Repository for quarantine CRUD operations
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const repo = new QuarantineRepository(db, auditLogger)
27
+ *
28
+ * // Quarantine a suspicious skill
29
+ * const entry = repo.create({
30
+ * skillId: 'community/suspicious-skill',
31
+ * source: 'github',
32
+ * quarantineReason: 'Obfuscated code detected',
33
+ * severity: 'SUSPICIOUS',
34
+ * detectedPatterns: ['eval()', 'obfuscated variables']
35
+ * })
36
+ *
37
+ * // Review and approve/reject
38
+ * const decision = repo.review(entry.id, {
39
+ * reviewedBy: 'security-team',
40
+ * reviewStatus: 'approved',
41
+ * reviewNotes: 'Manual review confirmed safe after code analysis'
42
+ * })
43
+ * ```
44
+ */
45
+ export declare class QuarantineRepository {
46
+ private db;
47
+ private auditLogger?;
48
+ private stmts;
49
+ constructor(db: DatabaseType, auditLogger?: AuditLogger);
50
+ /**
51
+ * Ensure the quarantine table exists
52
+ */
53
+ private ensureTableExists;
54
+ /**
55
+ * Prepare SQL statements for performance
56
+ */
57
+ private prepareStatements;
58
+ /**
59
+ * Log audit event if AuditLogger is available
60
+ */
61
+ private logAudit;
62
+ /**
63
+ * Create a new quarantine entry
64
+ *
65
+ * @param input - Quarantine entry data
66
+ * @returns Created quarantine entry
67
+ */
68
+ create(input: QuarantineCreateInput): QuarantineEntry;
69
+ /**
70
+ * Find a quarantine entry by ID
71
+ *
72
+ * @param id - Quarantine entry ID
73
+ * @returns Quarantine entry or null if not found
74
+ */
75
+ findById(id: string): QuarantineEntry | null;
76
+ /**
77
+ * Find all quarantine entries for a skill
78
+ *
79
+ * @param skillId - Skill ID
80
+ * @returns Array of quarantine entries
81
+ */
82
+ findBySkillId(skillId: string): QuarantineEntry[];
83
+ /**
84
+ * Check if a skill is quarantined
85
+ *
86
+ * @param skillId - Skill ID
87
+ * @returns True if skill has any pending quarantine entries
88
+ */
89
+ isQuarantined(skillId: string): boolean;
90
+ /**
91
+ * Get the most severe quarantine entry for a skill
92
+ *
93
+ * @param skillId - Skill ID
94
+ * @returns Most severe quarantine entry or null
95
+ */
96
+ getMostSevere(skillId: string): QuarantineEntry | null;
97
+ /**
98
+ * Find all quarantine entries with pagination
99
+ *
100
+ * @param options - Pagination options
101
+ * @returns Paginated quarantine results
102
+ */
103
+ findAll(options?: {
104
+ limit?: number;
105
+ offset?: number;
106
+ }): PaginatedQuarantineResults;
107
+ /**
108
+ * Query quarantine entries with filters
109
+ *
110
+ * @param filter - Query filters
111
+ * @returns Paginated quarantine results
112
+ */
113
+ query(filter: QuarantineQueryFilter): PaginatedQuarantineResults;
114
+ /**
115
+ * Update a quarantine entry
116
+ *
117
+ * @param id - Quarantine entry ID
118
+ * @param input - Update data
119
+ * @returns Updated entry or null if not found
120
+ */
121
+ update(id: string, input: QuarantineUpdateInput): QuarantineEntry | null;
122
+ /**
123
+ * Review a quarantine entry
124
+ *
125
+ * @param id - Quarantine entry ID
126
+ * @param reviewInput - Review data
127
+ * @returns Review decision with import guidance
128
+ */
129
+ review(id: string, reviewInput: {
130
+ reviewedBy: string;
131
+ reviewStatus: QuarantineReviewStatus;
132
+ reviewNotes?: string;
133
+ }): ReviewDecision | null;
134
+ /**
135
+ * Delete a quarantine entry
136
+ *
137
+ * @param id - Quarantine entry ID
138
+ * @returns True if entry was deleted
139
+ */
140
+ delete(id: string): boolean;
141
+ /**
142
+ * Delete all quarantine entries for a skill
143
+ *
144
+ * @param skillId - Skill ID
145
+ * @returns Number of deleted entries
146
+ */
147
+ deleteBySkillId(skillId: string): number;
148
+ /**
149
+ * Get quarantine statistics
150
+ *
151
+ * @returns Quarantine statistics
152
+ */
153
+ getStats(): QuarantineStats;
154
+ /**
155
+ * Count all quarantine entries
156
+ *
157
+ * @returns Total count
158
+ */
159
+ count(): number;
160
+ /**
161
+ * Execute a function within a transaction
162
+ *
163
+ * @param fn - Function to execute
164
+ * @returns Result of the function
165
+ */
166
+ transaction<T>(fn: () => T): T;
167
+ }
168
+ //# sourceMappingURL=QuarantineRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuarantineRepository.d.ts","sourceRoot":"","sources":["../../../../src/repositories/quarantine/QuarantineRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,KAAK,EAAsB,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAK/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,KAAK,EAEV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,cAAc,EAEf,MAAM,YAAY,CAAA;AAmBnB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW;IAOvD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe;IA4BrD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAK5C;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE;IAKjD;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKvC;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAWtD;;;;;OAKG;IACH,OAAO,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,0BAA0B;IAgBtF;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,qBAAqB,GAAG,0BAA0B;IAgBhE;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IA8BxE;;;;;;OAMG;IACH,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,EAAE,sBAAsB,CAAA;QACpC,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,GACA,cAAc,GAAG,IAAI;IAwCxB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAa3B;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYxC;;;;OAIG;IACH,QAAQ,IAAI,eAAe;IA6C3B;;;;OAIG;IACH,KAAK,IAAI,MAAM;IAKf;;;;;OAKG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;CAG/B"}