@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
- package/dist/src/analysis/framework-detector.d.ts +47 -0
- package/dist/src/analysis/framework-detector.d.ts.map +1 -0
- package/dist/src/analysis/framework-detector.js +151 -0
- package/dist/src/analysis/framework-detector.js.map +1 -0
- package/dist/src/analysis/index.d.ts +6 -1
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +10 -1
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/parsers.d.ts +43 -0
- package/dist/src/analysis/parsers.d.ts.map +1 -0
- package/dist/src/analysis/parsers.js +219 -0
- package/dist/src/analysis/parsers.js.map +1 -0
- package/dist/src/analysis/types.d.ts +138 -0
- package/dist/src/analysis/types.d.ts.map +1 -0
- package/dist/src/analysis/types.js +25 -0
- package/dist/src/analysis/types.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +4 -4
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/api/cache.d.ts +108 -0
- package/dist/src/api/cache.d.ts.map +1 -0
- package/dist/src/api/cache.js +216 -0
- package/dist/src/api/cache.js.map +1 -0
- package/dist/src/api/client.d.ts +152 -0
- package/dist/src/api/client.d.ts.map +1 -0
- package/dist/src/api/client.js +221 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
- package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.js +4 -400
- package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
- package/dist/src/benchmarks/comparator.d.ts +38 -0
- package/dist/src/benchmarks/comparator.d.ts.map +1 -0
- package/dist/src/benchmarks/comparator.js +81 -0
- package/dist/src/benchmarks/comparator.js.map +1 -0
- package/dist/src/benchmarks/formatters.d.ts +30 -0
- package/dist/src/benchmarks/formatters.d.ts.map +1 -0
- package/dist/src/benchmarks/formatters.js +88 -0
- package/dist/src/benchmarks/formatters.js.map +1 -0
- package/dist/src/benchmarks/index.d.ts +5 -1
- package/dist/src/benchmarks/index.d.ts.map +1 -1
- package/dist/src/benchmarks/index.js +9 -2
- package/dist/src/benchmarks/index.js.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
- package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
- package/dist/src/benchmarks/memory/index.d.ts +12 -0
- package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/index.js +12 -0
- package/dist/src/benchmarks/memory/index.js.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.js +46 -0
- package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.js +56 -0
- package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/types.d.ts +111 -0
- package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/types.js +7 -0
- package/dist/src/benchmarks/memory/types.js.map +1 -0
- package/dist/src/benchmarks/memory/utils.d.ts +17 -0
- package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/utils.js +29 -0
- package/dist/src/benchmarks/memory/utils.js.map +1 -0
- package/dist/src/benchmarks/types.d.ts +175 -0
- package/dist/src/benchmarks/types.d.ts.map +1 -0
- package/dist/src/benchmarks/types.js +20 -0
- package/dist/src/benchmarks/types.js.map +1 -0
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
- package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/QuarantineRepository.js +4 -441
- package/dist/src/repositories/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/index.d.ts +10 -0
- package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/index.js +10 -0
- package/dist/src/repositories/quarantine/index.js.map +1 -0
- package/dist/src/repositories/quarantine/queries.d.ts +58 -0
- package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/queries.js +88 -0
- package/dist/src/repositories/quarantine/queries.js.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.js +87 -0
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
- package/dist/src/repositories/quarantine/types.d.ts +155 -0
- package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/types.js +13 -0
- package/dist/src/repositories/quarantine/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
- package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
- package/dist/src/scripts/github-import/checkpoint.js +52 -0
- package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
- package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
- package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/github-import/deduplication.js +33 -0
- package/dist/src/scripts/github-import/deduplication.js.map +1 -0
- package/dist/src/scripts/github-import/github-client.d.ts +29 -0
- package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
- package/dist/src/scripts/github-import/github-client.js +184 -0
- package/dist/src/scripts/github-import/github-client.js.map +1 -0
- package/dist/src/scripts/github-import/index.d.ts +29 -0
- package/dist/src/scripts/github-import/index.d.ts.map +1 -0
- package/dist/src/scripts/github-import/index.js +198 -0
- package/dist/src/scripts/github-import/index.js.map +1 -0
- package/dist/src/scripts/github-import/output.d.ts +12 -0
- package/dist/src/scripts/github-import/output.d.ts.map +1 -0
- package/dist/src/scripts/github-import/output.js +34 -0
- package/dist/src/scripts/github-import/output.js.map +1 -0
- package/dist/src/scripts/github-import/types.d.ts +108 -0
- package/dist/src/scripts/github-import/types.d.ts.map +1 -0
- package/dist/src/scripts/github-import/types.js +44 -0
- package/dist/src/scripts/github-import/types.js.map +1 -0
- package/dist/src/scripts/github-import/utils.d.ts +13 -0
- package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
- package/dist/src/scripts/github-import/utils.js +28 -0
- package/dist/src/scripts/github-import/utils.js.map +1 -0
- package/dist/src/scripts/import-github-skills.d.ts +3 -12
- package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
- package/dist/src/scripts/import-github-skills.js +18 -398
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
- package/dist/src/scripts/scan-imported-skills.js +8 -397
- package/dist/src/scripts/scan-imported-skills.js.map +1 -1
- package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
- package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/index.js +43 -0
- package/dist/src/scripts/skill-scanner/index.js.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.js +104 -0
- package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.js +166 -0
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.js +140 -0
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
- package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/types.js +7 -0
- package/dist/src/scripts/skill-scanner/types.js.map +1 -0
- package/dist/src/scripts/validate-skills.d.ts +3 -172
- package/dist/src/scripts/validate-skills.d.ts.map +1 -1
- package/dist/src/scripts/validate-skills.js +6 -519
- package/dist/src/scripts/validate-skills.js.map +1 -1
- package/dist/src/scripts/validation/deduplication.d.ts +23 -0
- package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/validation/deduplication.js +127 -0
- package/dist/src/scripts/validation/deduplication.js.map +1 -0
- package/dist/src/scripts/validation/field-validators.d.ts +9 -0
- package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
- package/dist/src/scripts/validation/field-validators.js +135 -0
- package/dist/src/scripts/validation/field-validators.js.map +1 -0
- package/dist/src/scripts/validation/index.d.ts +29 -0
- package/dist/src/scripts/validation/index.d.ts.map +1 -0
- package/dist/src/scripts/validation/index.js +84 -0
- package/dist/src/scripts/validation/index.js.map +1 -0
- package/dist/src/scripts/validation/normalizers.d.ts +29 -0
- package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
- package/dist/src/scripts/validation/normalizers.js +79 -0
- package/dist/src/scripts/validation/normalizers.js.map +1 -0
- package/dist/src/scripts/validation/pipeline.d.ts +13 -0
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
- package/dist/src/scripts/validation/pipeline.js +126 -0
- package/dist/src/scripts/validation/pipeline.js.map +1 -0
- package/dist/src/scripts/validation/types.d.ts +128 -0
- package/dist/src/scripts/validation/types.d.ts.map +1 -0
- package/dist/src/scripts/validation/types.js +43 -0
- package/dist/src/scripts/validation/types.js.map +1 -0
- package/dist/src/security/index.d.ts +5 -4
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +8 -2
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
- package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
- package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
- package/dist/src/security/rate-limiter/constants.d.ts +15 -0
- package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/constants.js +15 -0
- package/dist/src/security/rate-limiter/constants.js.map +1 -0
- package/dist/src/security/rate-limiter/errors.d.ts +22 -0
- package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/errors.js +32 -0
- package/dist/src/security/rate-limiter/errors.js.map +1 -0
- package/dist/src/security/rate-limiter/index.d.ts +12 -0
- package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/index.js +16 -0
- package/dist/src/security/rate-limiter/index.js.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
- package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/presets.d.ts +52 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/presets.js +53 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.js +189 -0
- package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/storage.d.ts +34 -0
- package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/storage.js +80 -0
- package/dist/src/security/rate-limiter/storage.js.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.js +99 -0
- package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
- package/dist/src/security/rate-limiter/types.d.ts +104 -0
- package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/types.js +7 -0
- package/dist/src/security/rate-limiter/types.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts +94 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.js +403 -0
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
- package/dist/src/security/scanner/index.d.ts +11 -0
- package/dist/src/security/scanner/index.d.ts.map +1 -0
- package/dist/src/security/scanner/index.js +14 -0
- package/dist/src/security/scanner/index.js.map +1 -0
- package/dist/src/security/scanner/patterns.d.ts +14 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -0
- package/dist/src/security/scanner/patterns.js +147 -0
- package/dist/src/security/scanner/patterns.js.map +1 -0
- package/dist/src/security/scanner/regex-utils.d.ts +33 -0
- package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
- package/dist/src/security/scanner/regex-utils.js +41 -0
- package/dist/src/security/scanner/regex-utils.js.map +1 -0
- package/dist/src/security/scanner/types.d.ts +63 -0
- package/dist/src/security/scanner/types.d.ts.map +1 -0
- package/dist/src/security/scanner/types.js +7 -0
- package/dist/src/security/scanner/types.js.map +1 -0
- package/dist/src/security/scanner/weights.d.ts +15 -0
- package/dist/src/security/scanner/weights.d.ts.map +1 -0
- package/dist/src/security/scanner/weights.js +28 -0
- package/dist/src/security/scanner/weights.js.map +1 -0
- package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +22 -91
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/session/health-checks.d.ts +37 -0
- package/dist/src/session/health-checks.d.ts.map +1 -0
- package/dist/src/session/health-checks.js +64 -0
- package/dist/src/session/health-checks.js.map +1 -0
- package/dist/src/session/health-types.d.ts +78 -0
- package/dist/src/session/health-types.d.ts.map +1 -0
- package/dist/src/session/health-types.js +16 -0
- package/dist/src/session/health-types.js.map +1 -0
- package/dist/src/session/index.d.ts +5 -1
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +9 -0
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/metrics-collector.d.ts +23 -0
- package/dist/src/session/metrics-collector.d.ts.map +1 -0
- package/dist/src/session/metrics-collector.js +44 -0
- package/dist/src/session/metrics-collector.js.map +1 -0
- package/dist/src/session/typed-event-emitter.d.ts +70 -0
- package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
- package/dist/src/session/typed-event-emitter.js +79 -0
- package/dist/src/session/typed-event-emitter.js.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
- package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
- package/dist/src/sources/BaseSourceAdapter.js +2 -2
- package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +125 -0
- package/dist/src/telemetry/posthog.d.ts.map +1 -0
- package/dist/src/telemetry/posthog.js +198 -0
- package/dist/src/telemetry/posthog.js.map +1 -0
- package/dist/tests/RateLimiter.test.js +4 -4
- package/dist/tests/RateLimiter.test.js.map +1 -1
- package/dist/tests/e2e/security/security.e2e.test.js +3 -3
- package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,445 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SMI-865: Quarantine Repository
|
|
2
|
+
* SMI-865: Quarantine Repository
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
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"}
|