@skillsmith/core 0.2.0 → 0.4.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/README.md +235 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
- package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/incremental.test.js +515 -0
- package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.js +1059 -0
- package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.js +369 -0
- package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.js +402 -0
- package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
- package/dist/src/analysis/adapters/base.d.ts +83 -0
- package/dist/src/analysis/adapters/base.d.ts.map +1 -0
- package/dist/src/analysis/adapters/base.js +40 -0
- package/dist/src/analysis/adapters/base.js.map +1 -0
- package/dist/src/analysis/adapters/factory.d.ts +150 -0
- package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
- package/dist/src/analysis/adapters/factory.js +244 -0
- package/dist/src/analysis/adapters/factory.js.map +1 -0
- package/dist/src/analysis/adapters/go.d.ts +131 -0
- package/dist/src/analysis/adapters/go.d.ts.map +1 -0
- package/dist/src/analysis/adapters/go.js +414 -0
- package/dist/src/analysis/adapters/go.js.map +1 -0
- package/dist/src/analysis/adapters/index.d.ts +20 -0
- package/dist/src/analysis/adapters/index.d.ts.map +1 -0
- package/dist/src/analysis/adapters/index.js +23 -0
- package/dist/src/analysis/adapters/index.js.map +1 -0
- package/dist/src/analysis/adapters/java.d.ts +154 -0
- package/dist/src/analysis/adapters/java.d.ts.map +1 -0
- package/dist/src/analysis/adapters/java.js +407 -0
- package/dist/src/analysis/adapters/java.js.map +1 -0
- package/dist/src/analysis/adapters/python.d.ts +165 -0
- package/dist/src/analysis/adapters/python.d.ts.map +1 -0
- package/dist/src/analysis/adapters/python.js +475 -0
- package/dist/src/analysis/adapters/python.js.map +1 -0
- package/dist/src/analysis/adapters/rust.d.ts +116 -0
- package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
- package/dist/src/analysis/adapters/rust.js +476 -0
- package/dist/src/analysis/adapters/rust.js.map +1 -0
- package/dist/src/analysis/adapters/typescript.d.ts +68 -0
- package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
- package/dist/src/analysis/adapters/typescript.js +79 -0
- package/dist/src/analysis/adapters/typescript.js.map +1 -0
- package/dist/src/analysis/aggregator.d.ts +193 -0
- package/dist/src/analysis/aggregator.d.ts.map +1 -0
- package/dist/src/analysis/aggregator.js +283 -0
- package/dist/src/analysis/aggregator.js.map +1 -0
- package/dist/src/analysis/cache.d.ts +180 -0
- package/dist/src/analysis/cache.d.ts.map +1 -0
- package/dist/src/analysis/cache.js +279 -0
- package/dist/src/analysis/cache.js.map +1 -0
- package/dist/src/analysis/file-streamer.d.ts +136 -0
- package/dist/src/analysis/file-streamer.d.ts.map +1 -0
- package/dist/src/analysis/file-streamer.js +291 -0
- package/dist/src/analysis/file-streamer.js.map +1 -0
- package/dist/src/analysis/incremental-parser.d.ts +186 -0
- package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
- package/dist/src/analysis/incremental-parser.js +291 -0
- package/dist/src/analysis/incremental-parser.js.map +1 -0
- package/dist/src/analysis/incremental.d.ts +186 -0
- package/dist/src/analysis/incremental.d.ts.map +1 -0
- package/dist/src/analysis/incremental.js +247 -0
- package/dist/src/analysis/incremental.js.map +1 -0
- package/dist/src/analysis/index.d.ts +25 -3
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +45 -3
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/language-detector.d.ts +92 -0
- package/dist/src/analysis/language-detector.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.js +602 -0
- package/dist/src/analysis/language-detector.js.map +1 -0
- package/dist/src/analysis/memory-monitor.d.ts +199 -0
- package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
- package/dist/src/analysis/memory-monitor.js +271 -0
- package/dist/src/analysis/memory-monitor.js.map +1 -0
- package/dist/src/analysis/metrics.d.ts +300 -0
- package/dist/src/analysis/metrics.d.ts.map +1 -0
- package/dist/src/analysis/metrics.js +537 -0
- package/dist/src/analysis/metrics.js.map +1 -0
- package/dist/src/analysis/router.d.ts +264 -0
- package/dist/src/analysis/router.d.ts.map +1 -0
- package/dist/src/analysis/router.js +398 -0
- package/dist/src/analysis/router.js.map +1 -0
- package/dist/src/analysis/tree-cache.d.ts +208 -0
- package/dist/src/analysis/tree-cache.d.ts.map +1 -0
- package/dist/src/analysis/tree-cache.js +288 -0
- package/dist/src/analysis/tree-cache.js.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.js +239 -0
- package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
- package/dist/src/analysis/types.d.ts +71 -6
- package/dist/src/analysis/types.d.ts.map +1 -1
- package/dist/src/analysis/types.js +36 -3
- package/dist/src/analysis/types.js.map +1 -1
- package/dist/src/analysis/worker-pool.d.ts +141 -0
- package/dist/src/analysis/worker-pool.d.ts.map +1 -0
- package/dist/src/analysis/worker-pool.js +418 -0
- package/dist/src/analysis/worker-pool.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts +4 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +26 -44
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/analytics/schema.d.ts +1 -1
- package/dist/src/analytics/schema.d.ts.map +1 -1
- package/dist/src/analytics/schema.js +140 -0
- package/dist/src/analytics/schema.js.map +1 -1
- package/dist/src/api/cache.d.ts +24 -1
- package/dist/src/api/cache.d.ts.map +1 -1
- package/dist/src/api/cache.js +50 -2
- package/dist/src/api/cache.js.map +1 -1
- package/dist/src/api/client.d.ts +140 -6
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +222 -21
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +7 -0
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/types.d.ts +251 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +9 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
- package/dist/src/billing/BillingService.d.ts +139 -0
- package/dist/src/billing/BillingService.d.ts.map +1 -0
- package/dist/src/billing/BillingService.js +393 -0
- package/dist/src/billing/BillingService.js.map +1 -0
- package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
- package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
- package/dist/src/billing/GDPRComplianceService.js +361 -0
- package/dist/src/billing/GDPRComplianceService.js.map +1 -0
- package/dist/src/billing/StripeClient.d.ts +177 -0
- package/dist/src/billing/StripeClient.d.ts.map +1 -0
- package/dist/src/billing/StripeClient.js +462 -0
- package/dist/src/billing/StripeClient.js.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.js +405 -0
- package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts +92 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.js +409 -0
- package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
- package/dist/src/billing/index.d.ts +18 -0
- package/dist/src/billing/index.d.ts.map +1 -0
- package/dist/src/billing/index.js +19 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/billing/types.d.ts +266 -0
- package/dist/src/billing/types.d.ts.map +1 -0
- package/dist/src/billing/types.js +23 -0
- package/dist/src/billing/types.js.map +1 -0
- package/dist/src/db/schema.d.ts +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +41 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/embeddings/hnsw-store.d.ts +568 -0
- package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.js +805 -0
- package/dist/src/embeddings/hnsw-store.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +2 -0
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js +2 -0
- package/dist/src/embeddings/index.js.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +457 -0
- package/dist/src/learning/PatternStore.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.js +893 -0
- package/dist/src/learning/PatternStore.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts +403 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.js +627 -0
- package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
- package/dist/src/learning/index.d.ts +15 -0
- package/dist/src/learning/index.d.ts.map +1 -0
- package/dist/src/learning/index.js +15 -0
- package/dist/src/learning/index.js.map +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +1 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +1 -0
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/repositories/SyncConfigRepository.d.ts +91 -0
- package/dist/src/repositories/SyncConfigRepository.d.ts.map +1 -0
- package/dist/src/repositories/SyncConfigRepository.js +202 -0
- package/dist/src/repositories/SyncConfigRepository.js.map +1 -0
- package/dist/src/repositories/SyncHistoryRepository.d.ts +104 -0
- package/dist/src/repositories/SyncHistoryRepository.d.ts.map +1 -0
- package/dist/src/repositories/SyncHistoryRepository.js +235 -0
- package/dist/src/repositories/SyncHistoryRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.js +1 -1
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
- package/dist/src/routing/SONARouter.d.ts +154 -0
- package/dist/src/routing/SONARouter.d.ts.map +1 -0
- package/dist/src/routing/SONARouter.js +679 -0
- package/dist/src/routing/SONARouter.js.map +1 -0
- package/dist/src/routing/index.d.ts +9 -0
- package/dist/src/routing/index.d.ts.map +1 -0
- package/dist/src/routing/index.js +10 -0
- package/dist/src/routing/index.js.map +1 -0
- package/dist/src/routing/types.d.ts +331 -0
- package/dist/src/routing/types.d.ts.map +1 -0
- package/dist/src/routing/types.js +203 -0
- package/dist/src/routing/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +8 -3
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/github-client.d.ts +30 -2
- package/dist/src/scripts/github-import/github-client.d.ts.map +1 -1
- package/dist/src/scripts/github-import/github-client.js +293 -4
- package/dist/src/scripts/github-import/github-client.js.map +1 -1
- package/dist/src/scripts/github-import/index.js +3 -10
- package/dist/src/scripts/github-import/index.js.map +1 -1
- package/dist/src/scripts/github-import/types.d.ts +6 -0
- package/dist/src/scripts/github-import/types.d.ts.map +1 -1
- package/dist/src/scripts/github-import/types.js +3 -0
- package/dist/src/scripts/github-import/types.js.map +1 -1
- package/dist/src/scripts/import-github-skills.js +10 -5
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/merge-skills.d.ts +56 -0
- package/dist/src/scripts/merge-skills.d.ts.map +1 -0
- package/dist/src/scripts/merge-skills.js +411 -0
- package/dist/src/scripts/merge-skills.js.map +1 -0
- package/dist/src/scripts/skill-scanner/index.d.ts +9 -2
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/index.js +98 -7
- package/dist/src/scripts/skill-scanner/index.js.map +1 -1
- package/dist/src/scripts/skill-scanner/logger.d.ts +51 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/logger.js +255 -1
- package/dist/src/scripts/skill-scanner/logger.js.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.d.ts +1 -1
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.js +67 -15
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.d.ts +5 -2
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.js +156 -39
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
- package/dist/src/scripts/skill-scanner/types.d.ts +44 -0
- package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
- package/dist/src/scripts/validation/index.js +1 -2
- package/dist/src/scripts/validation/index.js.map +1 -1
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
- package/dist/src/scripts/validation/pipeline.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/security/SkillSandbox.d.ts +156 -0
- package/dist/src/security/SkillSandbox.d.ts.map +1 -0
- package/dist/src/security/SkillSandbox.js +303 -0
- package/dist/src/security/SkillSandbox.js.map +1 -0
- package/dist/src/security/index.d.ts +3 -1
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +5 -1
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/presets.d.ts +12 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
- package/dist/src/security/rate-limiter/presets.js +12 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -1
- package/dist/src/security/sanitization.d.ts +85 -0
- package/dist/src/security/sanitization.d.ts.map +1 -1
- package/dist/src/security/sanitization.js +133 -0
- package/dist/src/security/sanitization.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +23 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js +232 -28
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +13 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +51 -0
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +13 -1
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.js +1 -0
- package/dist/src/security/scanner/weights.js.map +1 -1
- package/dist/src/services/SearchService.d.ts.map +1 -1
- package/dist/src/services/SearchService.js +1 -0
- package/dist/src/services/SearchService.js.map +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +1 -1
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/session/SessionManager.d.ts +7 -0
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.js +117 -10
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/sync/BackgroundSyncService.d.ts +90 -0
- package/dist/src/sync/BackgroundSyncService.d.ts.map +1 -0
- package/dist/src/sync/BackgroundSyncService.js +214 -0
- package/dist/src/sync/BackgroundSyncService.js.map +1 -0
- package/dist/src/sync/SyncEngine.d.ts +76 -0
- package/dist/src/sync/SyncEngine.d.ts.map +1 -0
- package/dist/src/sync/SyncEngine.js +292 -0
- package/dist/src/sync/SyncEngine.js.map +1 -0
- package/dist/src/sync/index.d.ts +11 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +14 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +27 -5
- package/dist/src/telemetry/posthog.d.ts.map +1 -1
- package/dist/src/telemetry/posthog.js +20 -5
- package/dist/src/telemetry/posthog.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +374 -0
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.js +720 -0
- package/dist/src/testing/MultiLLMProvider.js.map +1 -0
- package/dist/src/testing/index.d.ts +8 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +9 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/types/skill.d.ts +3 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types.d.ts +5 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +2 -2
- package/dist/src/types.js.map +1 -1
- package/dist/tests/SecurityScanner.test.js +337 -1
- package/dist/tests/SecurityScanner.test.js.map +1 -1
- package/dist/tests/adapters-factory.test.d.ts +13 -0
- package/dist/tests/adapters-factory.test.d.ts.map +1 -0
- package/dist/tests/adapters-factory.test.js +308 -0
- package/dist/tests/adapters-factory.test.js.map +1 -0
- package/dist/tests/adapters-java.test.d.ts +13 -0
- package/dist/tests/adapters-java.test.d.ts.map +1 -0
- package/dist/tests/adapters-java.test.js +925 -0
- package/dist/tests/adapters-java.test.js.map +1 -0
- package/dist/tests/api/client.validation.test.d.ts +7 -0
- package/dist/tests/api/client.validation.test.d.ts.map +1 -0
- package/dist/tests/api/client.validation.test.js +183 -0
- package/dist/tests/api/client.validation.test.js.map +1 -0
- package/dist/tests/billing/BillingService.test.d.ts +7 -0
- package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
- package/dist/tests/billing/BillingService.test.js +168 -0
- package/dist/tests/billing/BillingService.test.js.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.js +195 -0
- package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.js +266 -0
- package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
- package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
- package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
- package/dist/tests/billing/stripe-validators.test.js +107 -0
- package/dist/tests/billing/stripe-validators.test.js.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.js +295 -0
- package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
- package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
- package/dist/tests/integration/neural/helpers.d.ts +132 -0
- package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
- package/dist/tests/integration/neural/helpers.js +287 -0
- package/dist/tests/integration/neural/helpers.js.map +1 -0
- package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
- package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/personalization.test.js +304 -0
- package/dist/tests/integration/neural/personalization.test.js.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.js +289 -0
- package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
- package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
- package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/privacy.test.js +249 -0
- package/dist/tests/integration/neural/privacy.test.js.map +1 -0
- package/dist/tests/integration/neural/setup.d.ts +175 -0
- package/dist/tests/integration/neural/setup.d.ts.map +1 -0
- package/dist/tests/integration/neural/setup.js +487 -0
- package/dist/tests/integration/neural/setup.js.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.js +232 -0
- package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
- package/dist/tests/language-detector.test.d.ts +13 -0
- package/dist/tests/language-detector.test.d.ts.map +1 -0
- package/dist/tests/language-detector.test.js +674 -0
- package/dist/tests/language-detector.test.js.map +1 -0
- package/dist/tests/learning/PatternStore.test.d.ts +8 -0
- package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
- package/dist/tests/learning/PatternStore.test.js +589 -0
- package/dist/tests/learning/PatternStore.test.js.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
- package/dist/tests/routing/SONARouter.test.d.ts +8 -0
- package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
- package/dist/tests/routing/SONARouter.test.js +400 -0
- package/dist/tests/routing/SONARouter.test.js.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.js +10 -12
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
- package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
- package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
- package/dist/tests/security/SkillSandbox.test.js +321 -0
- package/dist/tests/security/SkillSandbox.test.js.map +1 -0
- package/dist/tests/sync/SyncConfigRepository.test.d.ts +7 -0
- package/dist/tests/sync/SyncConfigRepository.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncConfigRepository.test.js +154 -0
- package/dist/tests/sync/SyncConfigRepository.test.js.map +1 -0
- package/dist/tests/sync/SyncEngine.test.d.ts +7 -0
- package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncEngine.test.js +300 -0
- package/dist/tests/sync/SyncEngine.test.js.map +1 -0
- package/dist/tests/sync/SyncHistoryRepository.test.d.ts +7 -0
- package/dist/tests/sync/SyncHistoryRepository.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncHistoryRepository.test.js +220 -0
- package/dist/tests/sync/SyncHistoryRepository.test.js.map +1 -0
- package/dist/tests/telemetry/posthog.test.d.ts +13 -0
- package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
- package/dist/tests/telemetry/posthog.test.js +600 -0
- package/dist/tests/telemetry/posthog.test.js.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
- package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
- package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
- package/package.json +20 -6
- package/dist/src/security/RateLimiter.d.ts +0 -337
- package/dist/src/security/RateLimiter.d.ts.map +0 -1
- package/dist/src/security/RateLimiter.js +0 -782
- package/dist/src/security/RateLimiter.js.map +0 -1
- package/dist/src/security/scanner.d.ts +0 -151
- package/dist/src/security/scanner.d.ts.map +0 -1
- package/dist/src/security/scanner.js +0 -599
- package/dist/src/security/scanner.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/analytics/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/analytics/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,+iWAuP5B,CAAA;AAED;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE9D,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAEhE"}
|
|
@@ -118,6 +118,146 @@ CREATE TABLE IF NOT EXISTS value_attributions (
|
|
|
118
118
|
CREATE INDEX IF NOT EXISTS idx_attributions_event ON value_attributions(usage_event_id);
|
|
119
119
|
CREATE INDEX IF NOT EXISTS idx_attributions_skill ON value_attributions(skill_id);
|
|
120
120
|
CREATE INDEX IF NOT EXISTS idx_attributions_type ON value_attributions(attribution_type);
|
|
121
|
+
|
|
122
|
+
-- ============================================================================
|
|
123
|
+
-- Quota Management Tables (SMI-XXXX)
|
|
124
|
+
-- ============================================================================
|
|
125
|
+
|
|
126
|
+
-- Monthly usage quotas per customer/license
|
|
127
|
+
-- Tracks API call usage against tier limits
|
|
128
|
+
CREATE TABLE IF NOT EXISTS usage_quotas (
|
|
129
|
+
id TEXT PRIMARY KEY,
|
|
130
|
+
customer_id TEXT NOT NULL,
|
|
131
|
+
license_tier TEXT NOT NULL CHECK(license_tier IN ('community', 'individual', 'team', 'enterprise')),
|
|
132
|
+
billing_period_start TEXT NOT NULL,
|
|
133
|
+
billing_period_end TEXT NOT NULL,
|
|
134
|
+
api_calls_limit INTEGER NOT NULL,
|
|
135
|
+
api_calls_used INTEGER DEFAULT 0,
|
|
136
|
+
last_warning_threshold INTEGER DEFAULT 0, -- 0, 80, 90, or 100
|
|
137
|
+
last_warning_sent_at TEXT,
|
|
138
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
139
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
140
|
+
UNIQUE(customer_id, billing_period_start)
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
-- Indexes for quota queries
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_quotas_customer ON usage_quotas(customer_id);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_quotas_period ON usage_quotas(billing_period_start, billing_period_end);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_quotas_tier ON usage_quotas(license_tier);
|
|
147
|
+
|
|
148
|
+
-- Individual API call events for detailed tracking
|
|
149
|
+
-- Used for quota enforcement and analytics
|
|
150
|
+
CREATE TABLE IF NOT EXISTS api_call_events (
|
|
151
|
+
id TEXT PRIMARY KEY,
|
|
152
|
+
customer_id TEXT NOT NULL,
|
|
153
|
+
license_key_hash TEXT, -- SHA256 hash of license key for lookup
|
|
154
|
+
tool_name TEXT NOT NULL,
|
|
155
|
+
endpoint TEXT,
|
|
156
|
+
cost INTEGER DEFAULT 1, -- Some operations may cost multiple quota units
|
|
157
|
+
success INTEGER DEFAULT 1, -- 1 for success, 0 for failure
|
|
158
|
+
latency_ms INTEGER,
|
|
159
|
+
session_id TEXT,
|
|
160
|
+
metadata TEXT, -- JSON for additional context
|
|
161
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
-- Indexes for API call queries
|
|
165
|
+
CREATE INDEX IF NOT EXISTS idx_api_calls_customer ON api_call_events(customer_id);
|
|
166
|
+
CREATE INDEX IF NOT EXISTS idx_api_calls_timestamp ON api_call_events(timestamp);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_api_calls_license ON api_call_events(license_key_hash);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_api_calls_tool ON api_call_events(tool_name);
|
|
169
|
+
|
|
170
|
+
-- User subscriptions for billing integration
|
|
171
|
+
-- Links customers to Stripe subscriptions
|
|
172
|
+
CREATE TABLE IF NOT EXISTS user_subscriptions (
|
|
173
|
+
id TEXT PRIMARY KEY,
|
|
174
|
+
customer_id TEXT NOT NULL UNIQUE,
|
|
175
|
+
email TEXT NOT NULL,
|
|
176
|
+
tier TEXT NOT NULL CHECK(tier IN ('community', 'individual', 'team', 'enterprise')),
|
|
177
|
+
stripe_customer_id TEXT,
|
|
178
|
+
stripe_subscription_id TEXT,
|
|
179
|
+
stripe_price_id TEXT, -- SMI-1062: Stripe price ID for current plan
|
|
180
|
+
status TEXT NOT NULL CHECK(status IN ('active', 'past_due', 'canceled', 'trialing', 'paused')),
|
|
181
|
+
seat_count INTEGER DEFAULT 1, -- SMI-1067: For team/enterprise seat-based billing
|
|
182
|
+
current_period_start TEXT,
|
|
183
|
+
current_period_end TEXT,
|
|
184
|
+
canceled_at TEXT, -- SMI-1062: When subscription was canceled
|
|
185
|
+
last_active_at TEXT,
|
|
186
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
187
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
-- Indexes for subscription queries
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_subs_customer ON user_subscriptions(customer_id);
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_subs_stripe ON user_subscriptions(stripe_customer_id);
|
|
193
|
+
CREATE INDEX IF NOT EXISTS idx_subs_status ON user_subscriptions(status);
|
|
194
|
+
CREATE INDEX IF NOT EXISTS idx_subs_tier ON user_subscriptions(tier);
|
|
195
|
+
CREATE INDEX IF NOT EXISTS idx_subs_last_active ON user_subscriptions(last_active_at);
|
|
196
|
+
|
|
197
|
+
-- ============================================================================
|
|
198
|
+
-- Billing Tables (SMI-1062 to SMI-1070 - Phase 6)
|
|
199
|
+
-- ============================================================================
|
|
200
|
+
|
|
201
|
+
-- Stripe webhook events for idempotent processing
|
|
202
|
+
-- Prevents replay attacks and duplicate event handling
|
|
203
|
+
CREATE TABLE IF NOT EXISTS stripe_webhook_events (
|
|
204
|
+
id TEXT PRIMARY KEY,
|
|
205
|
+
stripe_event_id TEXT UNIQUE NOT NULL,
|
|
206
|
+
event_type TEXT NOT NULL,
|
|
207
|
+
processed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
208
|
+
payload TEXT, -- Store full event for debugging/reconciliation
|
|
209
|
+
success INTEGER DEFAULT 1, -- 1 for success, 0 for failure
|
|
210
|
+
error_message TEXT,
|
|
211
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_events_stripe_id ON stripe_webhook_events(stripe_event_id);
|
|
215
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_events_type ON stripe_webhook_events(event_type);
|
|
216
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_events_processed ON stripe_webhook_events(processed_at);
|
|
217
|
+
|
|
218
|
+
-- License keys linking subscriptions to JWT tokens
|
|
219
|
+
-- Supports key rotation and revocation
|
|
220
|
+
CREATE TABLE IF NOT EXISTS license_keys (
|
|
221
|
+
id TEXT PRIMARY KEY,
|
|
222
|
+
subscription_id TEXT NOT NULL, -- References user_subscriptions.id
|
|
223
|
+
organization_id TEXT NOT NULL,
|
|
224
|
+
key_jwt TEXT NOT NULL,
|
|
225
|
+
key_hash TEXT NOT NULL, -- SHA256 hash for lookup without exposing key
|
|
226
|
+
key_expiry TEXT NOT NULL,
|
|
227
|
+
is_active INTEGER DEFAULT 1,
|
|
228
|
+
generated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
229
|
+
revoked_at TEXT,
|
|
230
|
+
revocation_reason TEXT,
|
|
231
|
+
UNIQUE(key_hash)
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
CREATE INDEX IF NOT EXISTS idx_license_keys_subscription ON license_keys(subscription_id);
|
|
235
|
+
CREATE INDEX IF NOT EXISTS idx_license_keys_org ON license_keys(organization_id);
|
|
236
|
+
CREATE INDEX IF NOT EXISTS idx_license_keys_active ON license_keys(is_active);
|
|
237
|
+
CREATE INDEX IF NOT EXISTS idx_license_keys_hash ON license_keys(key_hash);
|
|
238
|
+
|
|
239
|
+
-- Invoices for customer self-service and billing history
|
|
240
|
+
CREATE TABLE IF NOT EXISTS invoices (
|
|
241
|
+
id TEXT PRIMARY KEY,
|
|
242
|
+
customer_id TEXT NOT NULL, -- References user_subscriptions.customer_id
|
|
243
|
+
stripe_invoice_id TEXT UNIQUE NOT NULL,
|
|
244
|
+
subscription_id TEXT, -- References user_subscriptions.id
|
|
245
|
+
amount_cents INTEGER NOT NULL,
|
|
246
|
+
currency TEXT DEFAULT 'usd',
|
|
247
|
+
status TEXT NOT NULL CHECK(status IN ('draft', 'open', 'paid', 'void', 'uncollectible')),
|
|
248
|
+
pdf_url TEXT,
|
|
249
|
+
hosted_invoice_url TEXT,
|
|
250
|
+
invoice_number TEXT,
|
|
251
|
+
paid_at TEXT,
|
|
252
|
+
period_start TEXT,
|
|
253
|
+
period_end TEXT,
|
|
254
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
CREATE INDEX IF NOT EXISTS idx_invoices_customer ON invoices(customer_id);
|
|
258
|
+
CREATE INDEX IF NOT EXISTS idx_invoices_stripe ON invoices(stripe_invoice_id);
|
|
259
|
+
CREATE INDEX IF NOT EXISTS idx_invoices_status ON invoices(status);
|
|
260
|
+
CREATE INDEX IF NOT EXISTS idx_invoices_subscription ON invoices(subscription_id);
|
|
121
261
|
`;
|
|
122
262
|
export function initializeAnalyticsSchema(db) {
|
|
123
263
|
db.exec(ANALYTICS_SCHEMA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/analytics/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/analytics/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuP/B,CAAA;AAOD,MAAM,UAAU,yBAAyB,CAAC,EAAgB;IACxD,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAC3B,CAAC"}
|
package/dist/src/api/cache.d.ts
CHANGED
|
@@ -54,6 +54,8 @@ export declare class ApiCache {
|
|
|
54
54
|
private hits;
|
|
55
55
|
private misses;
|
|
56
56
|
private evictions;
|
|
57
|
+
private operationCount;
|
|
58
|
+
private readonly PRUNE_INTERVAL;
|
|
57
59
|
constructor(config?: CacheConfig);
|
|
58
60
|
/**
|
|
59
61
|
* Generate cache key from endpoint and parameters
|
|
@@ -84,13 +86,34 @@ export declare class ApiCache {
|
|
|
84
86
|
*/
|
|
85
87
|
prune(): number;
|
|
86
88
|
/**
|
|
87
|
-
* Invalidate entries matching a pattern
|
|
89
|
+
* Invalidate entries matching a pattern.
|
|
90
|
+
*
|
|
91
|
+
* When a string is provided, it is treated as a literal string and
|
|
92
|
+
* special RegExp characters are escaped to prevent RegExp injection.
|
|
93
|
+
* To use regex patterns, pass a RegExp object directly.
|
|
94
|
+
*
|
|
95
|
+
* @param pattern - Literal string to match or RegExp for pattern matching
|
|
96
|
+
* @returns Number of entries invalidated
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* // Literal string matching (special chars are escaped)
|
|
101
|
+
* cache.invalidatePattern('search:user.name') // Matches exactly 'search:user.name'
|
|
102
|
+
*
|
|
103
|
+
* // RegExp for pattern matching
|
|
104
|
+
* cache.invalidatePattern(/^search:/) // Matches all keys starting with 'search:'
|
|
105
|
+
* ```
|
|
88
106
|
*/
|
|
89
107
|
invalidatePattern(pattern: string | RegExp): number;
|
|
90
108
|
/**
|
|
91
109
|
* Get cache statistics
|
|
92
110
|
*/
|
|
93
111
|
getStats(): CacheStats;
|
|
112
|
+
/**
|
|
113
|
+
* Automatically prune expired entries every PRUNE_INTERVAL operations.
|
|
114
|
+
* SMI-1262: Prevents expired entries from accumulating until maxEntries is reached.
|
|
115
|
+
*/
|
|
116
|
+
private maybeAutoPrune;
|
|
94
117
|
/**
|
|
95
118
|
* Evict least recently used entries
|
|
96
119
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/api/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/api/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiCH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI9C,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,SAAS,CAAI;IAGrB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEzB,MAAM,GAAE,WAAgB;IAOpC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAa5E;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAuBlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,OAAO,WAAW,GAAG,IAAI;IAmB3E;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,KAAK,IAAI,MAAM;IAcf;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAcnD;;OAEG;IACH,QAAQ,IAAI,UAAU;IAWtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,cAAc;CAwBvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,QAAQ,CAE1D;AAOD;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAKzC;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/src/api/cache.js
CHANGED
|
@@ -7,6 +7,24 @@
|
|
|
7
7
|
* Provides in-memory caching with TTL for offline support.
|
|
8
8
|
* Uses a simple LRU-like eviction strategy.
|
|
9
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Escape special RegExp characters in a string.
|
|
12
|
+
*
|
|
13
|
+
* This prevents RegExp injection when user-provided strings are
|
|
14
|
+
* used to construct regular expressions.
|
|
15
|
+
*
|
|
16
|
+
* @param str - The string to escape
|
|
17
|
+
* @returns The escaped string safe for use in RegExp constructor
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* escapeRegExp('foo.bar') // Returns 'foo\\.bar'
|
|
22
|
+
* escapeRegExp('a*b+c?') // Returns 'a\\*b\\+c\\?'
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function escapeRegExp(str) {
|
|
26
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
27
|
+
}
|
|
10
28
|
/**
|
|
11
29
|
* TTL configuration for different endpoints
|
|
12
30
|
*/
|
|
@@ -38,6 +56,9 @@ export class ApiCache {
|
|
|
38
56
|
hits = 0;
|
|
39
57
|
misses = 0;
|
|
40
58
|
evictions = 0;
|
|
59
|
+
// Auto-pruning (SMI-1262)
|
|
60
|
+
operationCount = 0;
|
|
61
|
+
PRUNE_INTERVAL = 100;
|
|
41
62
|
constructor(config = {}) {
|
|
42
63
|
this.cache = new Map();
|
|
43
64
|
this.defaultTtl = config.defaultTtl ?? DEFAULT_TTL.search;
|
|
@@ -61,6 +82,7 @@ export class ApiCache {
|
|
|
61
82
|
* Get item from cache
|
|
62
83
|
*/
|
|
63
84
|
get(key) {
|
|
85
|
+
this.maybeAutoPrune();
|
|
64
86
|
const entry = this.cache.get(key);
|
|
65
87
|
if (!entry) {
|
|
66
88
|
if (this.enableStats)
|
|
@@ -84,6 +106,7 @@ export class ApiCache {
|
|
|
84
106
|
* Set item in cache
|
|
85
107
|
*/
|
|
86
108
|
set(key, data, endpointType) {
|
|
109
|
+
this.maybeAutoPrune();
|
|
87
110
|
// Evict if at capacity
|
|
88
111
|
if (this.cache.size >= this.maxEntries) {
|
|
89
112
|
this.evictLeastUsed();
|
|
@@ -140,10 +163,26 @@ export class ApiCache {
|
|
|
140
163
|
return pruned;
|
|
141
164
|
}
|
|
142
165
|
/**
|
|
143
|
-
* Invalidate entries matching a pattern
|
|
166
|
+
* Invalidate entries matching a pattern.
|
|
167
|
+
*
|
|
168
|
+
* When a string is provided, it is treated as a literal string and
|
|
169
|
+
* special RegExp characters are escaped to prevent RegExp injection.
|
|
170
|
+
* To use regex patterns, pass a RegExp object directly.
|
|
171
|
+
*
|
|
172
|
+
* @param pattern - Literal string to match or RegExp for pattern matching
|
|
173
|
+
* @returns Number of entries invalidated
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* // Literal string matching (special chars are escaped)
|
|
178
|
+
* cache.invalidatePattern('search:user.name') // Matches exactly 'search:user.name'
|
|
179
|
+
*
|
|
180
|
+
* // RegExp for pattern matching
|
|
181
|
+
* cache.invalidatePattern(/^search:/) // Matches all keys starting with 'search:'
|
|
182
|
+
* ```
|
|
144
183
|
*/
|
|
145
184
|
invalidatePattern(pattern) {
|
|
146
|
-
const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
|
|
185
|
+
const regex = typeof pattern === 'string' ? new RegExp(escapeRegExp(pattern)) : pattern;
|
|
147
186
|
let invalidated = 0;
|
|
148
187
|
for (const key of this.cache.keys()) {
|
|
149
188
|
if (regex.test(key)) {
|
|
@@ -166,6 +205,15 @@ export class ApiCache {
|
|
|
166
205
|
hitRate: total > 0 ? this.hits / total : 0,
|
|
167
206
|
};
|
|
168
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Automatically prune expired entries every PRUNE_INTERVAL operations.
|
|
210
|
+
* SMI-1262: Prevents expired entries from accumulating until maxEntries is reached.
|
|
211
|
+
*/
|
|
212
|
+
maybeAutoPrune() {
|
|
213
|
+
if (++this.operationCount % this.PRUNE_INTERVAL === 0) {
|
|
214
|
+
this.prune();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
169
217
|
/**
|
|
170
218
|
* Evict least recently used entries
|
|
171
219
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/api/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/api/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/src/api/client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @module api/client
|
|
4
4
|
*
|
|
5
5
|
* SMI-1244: API client for fetching skills from live Supabase endpoints
|
|
6
|
+
* SMI-1258: Runtime validation for API responses using zod
|
|
6
7
|
*
|
|
7
8
|
* Provides methods to interact with the Skillsmith API:
|
|
8
9
|
* - search: Search skills with filters
|
|
@@ -10,7 +11,93 @@
|
|
|
10
11
|
* - getRecommendations: Get skill recommendations based on tech stack
|
|
11
12
|
* - recordEvent: Record telemetry event
|
|
12
13
|
*/
|
|
14
|
+
import { z } from 'zod';
|
|
13
15
|
import type { Skill, TrustTier, SearchOptions } from '../types/skill.js';
|
|
16
|
+
/**
|
|
17
|
+
* Trust tier enum values
|
|
18
|
+
*/
|
|
19
|
+
declare const TrustTierSchema: z.ZodEnum<{
|
|
20
|
+
verified: "verified";
|
|
21
|
+
community: "community";
|
|
22
|
+
experimental: "experimental";
|
|
23
|
+
unknown: "unknown";
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Schema for individual search result from API
|
|
27
|
+
* SMI-1577: Added .optional() and .default() to handle partial API responses
|
|
28
|
+
*/
|
|
29
|
+
declare const ApiSearchResultSchema: z.ZodObject<{
|
|
30
|
+
id: z.ZodString;
|
|
31
|
+
name: z.ZodString;
|
|
32
|
+
description: z.ZodNullable<z.ZodString>;
|
|
33
|
+
author: z.ZodNullable<z.ZodString>;
|
|
34
|
+
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
36
|
+
trust_tier: z.ZodDefault<z.ZodEnum<{
|
|
37
|
+
verified: "verified";
|
|
38
|
+
community: "community";
|
|
39
|
+
experimental: "experimental";
|
|
40
|
+
unknown: "unknown";
|
|
41
|
+
}>>;
|
|
42
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
43
|
+
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
44
|
+
installable: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
45
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
46
|
+
updated_at: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
/**
|
|
49
|
+
* Schema for telemetry response
|
|
50
|
+
*/
|
|
51
|
+
declare const TelemetryResponseSchema: z.ZodObject<{
|
|
52
|
+
data: z.ZodObject<{
|
|
53
|
+
ok: z.ZodBoolean;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
declare const SearchResponseSchema: z.ZodObject<{
|
|
58
|
+
data: z.ZodArray<z.ZodObject<{
|
|
59
|
+
id: z.ZodString;
|
|
60
|
+
name: z.ZodString;
|
|
61
|
+
description: z.ZodNullable<z.ZodString>;
|
|
62
|
+
author: z.ZodNullable<z.ZodString>;
|
|
63
|
+
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
64
|
+
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
65
|
+
trust_tier: z.ZodDefault<z.ZodEnum<{
|
|
66
|
+
verified: "verified";
|
|
67
|
+
community: "community";
|
|
68
|
+
experimental: "experimental";
|
|
69
|
+
unknown: "unknown";
|
|
70
|
+
}>>;
|
|
71
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
72
|
+
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
73
|
+
installable: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
74
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
75
|
+
updated_at: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
78
|
+
}, z.core.$strip>;
|
|
79
|
+
declare const SingleSkillResponseSchema: z.ZodObject<{
|
|
80
|
+
data: z.ZodObject<{
|
|
81
|
+
id: z.ZodString;
|
|
82
|
+
name: z.ZodString;
|
|
83
|
+
description: z.ZodNullable<z.ZodString>;
|
|
84
|
+
author: z.ZodNullable<z.ZodString>;
|
|
85
|
+
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
86
|
+
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
87
|
+
trust_tier: z.ZodDefault<z.ZodEnum<{
|
|
88
|
+
verified: "verified";
|
|
89
|
+
community: "community";
|
|
90
|
+
experimental: "experimental";
|
|
91
|
+
unknown: "unknown";
|
|
92
|
+
}>>;
|
|
93
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
94
|
+
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
95
|
+
installable: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
96
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
97
|
+
updated_at: z.ZodOptional<z.ZodString>;
|
|
98
|
+
}, z.core.$strip>;
|
|
99
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
14
101
|
/**
|
|
15
102
|
* API response wrapper
|
|
16
103
|
*/
|
|
@@ -25,21 +112,32 @@ export interface ApiErrorResponse {
|
|
|
25
112
|
error: string;
|
|
26
113
|
details?: Record<string, unknown>;
|
|
27
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Custom error class for API client errors with retry control
|
|
117
|
+
* SMI-1257: Replace string-based retry skip with custom error class
|
|
118
|
+
*/
|
|
119
|
+
export declare class ApiClientError extends Error {
|
|
120
|
+
readonly retryable: boolean;
|
|
121
|
+
readonly statusCode?: number | undefined;
|
|
122
|
+
constructor(message: string, retryable?: boolean, statusCode?: number | undefined);
|
|
123
|
+
}
|
|
28
124
|
/**
|
|
29
125
|
* Search result from API
|
|
126
|
+
* SMI-1577: Made repo_url, created_at, updated_at optional to match schema
|
|
30
127
|
*/
|
|
31
128
|
export interface ApiSearchResult {
|
|
32
129
|
id: string;
|
|
33
130
|
name: string;
|
|
34
131
|
description: string | null;
|
|
35
132
|
author: string | null;
|
|
36
|
-
repo_url
|
|
133
|
+
repo_url?: string | null;
|
|
37
134
|
quality_score: number | null;
|
|
38
135
|
trust_tier: TrustTier;
|
|
39
136
|
tags: string[];
|
|
40
|
-
stars
|
|
41
|
-
|
|
42
|
-
|
|
137
|
+
stars?: number | null;
|
|
138
|
+
installable?: boolean | null;
|
|
139
|
+
created_at?: string;
|
|
140
|
+
updated_at?: string;
|
|
43
141
|
}
|
|
44
142
|
/**
|
|
45
143
|
* Recommendation request
|
|
@@ -72,9 +170,15 @@ export interface ApiClientConfig {
|
|
|
72
170
|
maxRetries?: number;
|
|
73
171
|
/** Enable debug logging */
|
|
74
172
|
debug?: boolean;
|
|
173
|
+
/** Enable offline mode (disables API calls) */
|
|
174
|
+
offlineMode?: boolean;
|
|
75
175
|
}
|
|
76
176
|
/**
|
|
77
|
-
* Generate anonymous ID for telemetry
|
|
177
|
+
* Generate anonymous ID for telemetry using cryptographic randomness.
|
|
178
|
+
* Returns a UUID v4 format string (e.g., "550e8400-e29b-41d4-a716-446655440000").
|
|
179
|
+
*
|
|
180
|
+
* Note: This generates a fresh ID per session - it is NOT stored persistently.
|
|
181
|
+
* For persistent anonymous IDs, the caller must handle storage.
|
|
78
182
|
*/
|
|
79
183
|
export declare function generateAnonymousId(): string;
|
|
80
184
|
/**
|
|
@@ -96,7 +200,12 @@ export declare class SkillsmithApiClient {
|
|
|
96
200
|
private timeout;
|
|
97
201
|
private maxRetries;
|
|
98
202
|
private debug;
|
|
203
|
+
private offlineMode;
|
|
99
204
|
constructor(config?: ApiClientConfig);
|
|
205
|
+
/**
|
|
206
|
+
* Check if client is running in offline mode
|
|
207
|
+
*/
|
|
208
|
+
isOffline(): boolean;
|
|
100
209
|
/**
|
|
101
210
|
* Log debug message
|
|
102
211
|
*/
|
|
@@ -106,11 +215,17 @@ export declare class SkillsmithApiClient {
|
|
|
106
215
|
*/
|
|
107
216
|
private buildHeaders;
|
|
108
217
|
/**
|
|
109
|
-
* Make API request with retry logic
|
|
218
|
+
* Make API request with retry logic and optional schema validation
|
|
219
|
+
* SMI-1258: Added runtime validation for API responses
|
|
220
|
+
*
|
|
221
|
+
* @param endpoint - API endpoint path
|
|
222
|
+
* @param options - Fetch options
|
|
223
|
+
* @param schema - Optional zod schema for response validation
|
|
110
224
|
*/
|
|
111
225
|
private request;
|
|
112
226
|
/**
|
|
113
227
|
* Search for skills
|
|
228
|
+
* SMI-1258: Validates response against SearchResponseSchema
|
|
114
229
|
*
|
|
115
230
|
* @param options - Search options
|
|
116
231
|
* @returns Search results
|
|
@@ -118,6 +233,7 @@ export declare class SkillsmithApiClient {
|
|
|
118
233
|
search(options: SearchOptions): Promise<ApiResponse<ApiSearchResult[]>>;
|
|
119
234
|
/**
|
|
120
235
|
* Get skill by ID
|
|
236
|
+
* SMI-1258: Validates response against SingleSkillResponseSchema
|
|
121
237
|
*
|
|
122
238
|
* @param id - Skill ID (UUID or author/name format)
|
|
123
239
|
* @returns Skill details
|
|
@@ -125,6 +241,7 @@ export declare class SkillsmithApiClient {
|
|
|
125
241
|
getSkill(id: string): Promise<ApiResponse<ApiSearchResult>>;
|
|
126
242
|
/**
|
|
127
243
|
* Get skill recommendations based on tech stack
|
|
244
|
+
* SMI-1258: Validates response against SearchResponseSchema
|
|
128
245
|
*
|
|
129
246
|
* @param request - Recommendation request
|
|
130
247
|
* @returns Recommended skills
|
|
@@ -132,6 +249,7 @@ export declare class SkillsmithApiClient {
|
|
|
132
249
|
getRecommendations(request: RecommendationRequest): Promise<ApiResponse<ApiSearchResult[]>>;
|
|
133
250
|
/**
|
|
134
251
|
* Record telemetry event
|
|
252
|
+
* SMI-1258: Validates response against TelemetryResponseSchema
|
|
135
253
|
*
|
|
136
254
|
* @param event - Telemetry event
|
|
137
255
|
* @returns Success response
|
|
@@ -139,8 +257,23 @@ export declare class SkillsmithApiClient {
|
|
|
139
257
|
recordEvent(event: TelemetryEvent): Promise<{
|
|
140
258
|
ok: boolean;
|
|
141
259
|
}>;
|
|
260
|
+
/**
|
|
261
|
+
* Check API health status
|
|
262
|
+
*
|
|
263
|
+
* Returns service health information including status, timestamp, and version.
|
|
264
|
+
* In offline mode, returns a synthetic healthy response.
|
|
265
|
+
*
|
|
266
|
+
* @returns Health status object
|
|
267
|
+
*/
|
|
268
|
+
checkHealth(): Promise<{
|
|
269
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
270
|
+
timestamp: string;
|
|
271
|
+
version: string;
|
|
272
|
+
}>;
|
|
142
273
|
/**
|
|
143
274
|
* Convert API result to Skill type
|
|
275
|
+
* SMI-1577: Handle optional fields with sensible defaults
|
|
276
|
+
* Uses epoch timestamp as sentinel for missing dates to avoid data integrity issues
|
|
144
277
|
*/
|
|
145
278
|
static toSkill(result: ApiSearchResult): Skill;
|
|
146
279
|
}
|
|
@@ -148,5 +281,6 @@ export declare class SkillsmithApiClient {
|
|
|
148
281
|
* Create a default API client instance
|
|
149
282
|
*/
|
|
150
283
|
export declare function createApiClient(config?: ApiClientConfig): SkillsmithApiClient;
|
|
284
|
+
export { ApiSearchResultSchema, SearchResponseSchema, SingleSkillResponseSchema, TelemetryResponseSchema, TrustTierSchema, };
|
|
151
285
|
export default SkillsmithApiClient;
|
|
152
286
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|