@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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1189: Typed Event Emitter
|
|
3
|
+
*
|
|
4
|
+
* Generic TypedEventEmitter that provides type-safe event handling.
|
|
5
|
+
* Replaces ~182 lines of repetitive type overloads with a single generic class.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'node:events';
|
|
8
|
+
/**
|
|
9
|
+
* Type-safe EventEmitter wrapper.
|
|
10
|
+
*
|
|
11
|
+
* @typeParam Events - Object mapping event names to their argument tuples
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* interface MyEvents {
|
|
16
|
+
* data: [payload: string];
|
|
17
|
+
* error: [error: Error, code: number];
|
|
18
|
+
* complete: [];
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* class MyEmitter extends TypedEventEmitter<MyEvents> {
|
|
22
|
+
* doSomething() {
|
|
23
|
+
* this.emit('data', 'hello'); // Type-checked!
|
|
24
|
+
* this.emit('error', new Error('oops'), 500);
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class TypedEventEmitter extends EventEmitter {
|
|
30
|
+
/**
|
|
31
|
+
* Adds a listener function to the end of the listeners array for the specified event.
|
|
32
|
+
*/
|
|
33
|
+
on(event, listener) {
|
|
34
|
+
return super.on(event, listener);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Synchronously calls each of the listeners registered for the event.
|
|
38
|
+
*/
|
|
39
|
+
emit(event, ...args) {
|
|
40
|
+
return super.emit(event, ...args);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Removes the specified listener from the listener array for the specified event.
|
|
44
|
+
*/
|
|
45
|
+
off(event, listener) {
|
|
46
|
+
return super.off(event, listener);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Adds a one-time listener function for the specified event.
|
|
50
|
+
*/
|
|
51
|
+
once(event, listener) {
|
|
52
|
+
return super.once(event, listener);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Alias for on().
|
|
56
|
+
*/
|
|
57
|
+
addListener(event, listener) {
|
|
58
|
+
return super.addListener(event, listener);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Alias for off().
|
|
62
|
+
*/
|
|
63
|
+
removeListener(event, listener) {
|
|
64
|
+
return super.removeListener(event, listener);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Adds a listener to the beginning of the listeners array.
|
|
68
|
+
*/
|
|
69
|
+
prependListener(event, listener) {
|
|
70
|
+
return super.prependListener(event, listener);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Adds a one-time listener to the beginning of the listeners array.
|
|
74
|
+
*/
|
|
75
|
+
prependOnceListener(event, listener) {
|
|
76
|
+
return super.prependOnceListener(event, listener);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=typed-event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-event-emitter.js","sourceRoot":"","sources":["../../../src/session/typed-event-emitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,iBAA2C,SAAQ,YAAY;IAC1E;;OAEG;IACM,EAAE,CACT,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACM,IAAI,CAAkC,KAAQ,EAAE,GAAG,IAAe;QACzE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACM,GAAG,CACV,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IACnE,CAAC;IAED;;OAEG;IACM,IAAI,CACX,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IACpE,CAAC;IAED;;OAEG;IACM,WAAW,CAClB,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IAC3E,CAAC;IAED;;OAEG;IACM,cAAc,CACrB,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IAC9E,CAAC;IAED;;OAEG;IACM,eAAe,CACtB,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IAC/E,CAAC;IAED;;OAEG;IACM,mBAAmB,CAC1B,KAAQ,EACR,QAAsC;QAEtC,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAA;IACnF,CAAC;CACF"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* SMI-1013: Enhanced with token bucket rate limiting and request queuing
|
|
6
6
|
*/
|
|
7
7
|
import type { ISourceAdapter } from './ISourceAdapter.js';
|
|
8
|
-
import { RateLimiter, type RateLimitConfig as TokenBucketConfig } from '../security/
|
|
8
|
+
import { RateLimiter, type RateLimitConfig as TokenBucketConfig } from '../security/index.js';
|
|
9
9
|
import { type RetryConfig } from '../utils/retry.js';
|
|
10
10
|
import type { SourceConfig, SourceLocation, SourceRepository, SourceSearchOptions, SourceSearchResult, SkillContent, SourceHealth } from './types.js';
|
|
11
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSourceAdapter.d.ts","sourceRoot":"","sources":["../../../src/sources/BaseSourceAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EACL,WAAW,EAGX,KAAK,eAAe,IAAI,iBAAiB,EAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"BaseSourceAdapter.d.ts","sourceRoot":"","sources":["../../../src/sources/BaseSourceAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EACL,WAAW,EAGX,KAAK,eAAe,IAAI,iBAAiB,EAC1C,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EAEb,MAAM,YAAY,CAAA;AAWnB;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,iBAAkB,YAAW,cAAc;IAC/D,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,eAAe,SAAI;IAC7B,SAAS,CAAC,YAAY,SAAI;IAC1B,SAAS,CAAC,WAAW,SAAI;IAEzB,2CAA2C;IAC3C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAO;gBAEpC,MAAM,EAAE,YAAY,GAAG,oBAAoB;IAuBvD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IAsB1C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE3E;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAE3E;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7D;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASnE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;OAEG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjD;;;;;;;;OAQG;cACa,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2CzF;;;;;OAKG;IACH,oBAAoB,IAAI;QACtB,gBAAgB,EAAE,OAAO,CAAA;QACzB,WAAW,CAAC,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,GAAG,MAAM,CAAA;KAC5E;IAWD;;OAEG;IACH,SAAS,CAAC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAgB/D;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAI/D;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAI5D;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;CAWjC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* SMI-1013: Enhanced with token bucket rate limiting and request queuing
|
|
6
6
|
*/
|
|
7
7
|
import { validateUrl } from '../validation/index.js';
|
|
8
|
-
import { RateLimiter, InMemoryRateLimitStorage, RATE_LIMIT_PRESETS, } from '../security/
|
|
8
|
+
import { RateLimiter, InMemoryRateLimitStorage, RATE_LIMIT_PRESETS, } from '../security/index.js';
|
|
9
9
|
import { fetchWithRetry } from '../utils/retry.js';
|
|
10
10
|
/**
|
|
11
11
|
* Default rate limit configuration (legacy window-based)
|
|
@@ -245,7 +245,7 @@ export class BaseSourceAdapter {
|
|
|
245
245
|
const remainingNum = parseInt(remaining, 10);
|
|
246
246
|
if (remainingNum <= 0 && reset) {
|
|
247
247
|
// We've hit the rate limit, update window
|
|
248
|
-
const
|
|
248
|
+
const _resetTime = parseInt(reset, 10) * 1000;
|
|
249
249
|
this.windowStart = Date.now();
|
|
250
250
|
this.requestCount = this.config.rateLimit?.maxRequests ?? DEFAULT_RATE_LIMIT.maxRequests;
|
|
251
251
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSourceAdapter.js","sourceRoot":"","sources":["../../../src/sources/BaseSourceAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,
|
|
1
|
+
{"version":3,"file":"BaseSourceAdapter.js","sourceRoot":"","sources":["../../../src/sources/BaseSourceAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export { SkillsmithTracer, getTracer, initializeTracing, shutdownTracing, traced, type TracerConfig, type SpanAttributes, type SpanWrapper, } from './tracer.js';
|
|
10
10
|
export { MetricsRegistry, getMetrics, initializeMetrics, timeAsync, timeSync, LATENCY_BUCKETS, type MetricsConfig, type MetricLabels, type Counter, type Histogram, type Gauge, type MetricsSnapshot, } from './metrics.js';
|
|
11
11
|
export { exportToPrometheus, getPrometheusMetrics, createPrometheusHandler, type PrometheusExportOptions, } from './prometheus.js';
|
|
12
|
+
export { initializePostHog, getPostHog, isPostHogEnabled, trackEvent, identifyUser, isFeatureFlagEnabled, flushPostHog, shutdownPostHog, trackSkillSearch, trackSkillView, trackSkillInstall, trackApiError, type PostHogConfig, type SkillsmithEventType, type SkillEventProperties, } from './posthog.js';
|
|
12
13
|
/**
|
|
13
14
|
* Initialize all telemetry (tracing + metrics)
|
|
14
15
|
* Call this at application startup
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAA;AAErB;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE;IACjD,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAA;IAC5C,OAAO,CAAC,EAAE,OAAO,cAAc,EAAE,aAAa,CAAA;CAC/C,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvD"}
|
|
@@ -12,6 +12,8 @@ export { SkillsmithTracer, getTracer, initializeTracing, shutdownTracing, traced
|
|
|
12
12
|
export { MetricsRegistry, getMetrics, initializeMetrics, timeAsync, timeSync, LATENCY_BUCKETS, } from './metrics.js';
|
|
13
13
|
// Prometheus exports (SMI-1018)
|
|
14
14
|
export { exportToPrometheus, getPrometheusMetrics, createPrometheusHandler, } from './prometheus.js';
|
|
15
|
+
// PostHog exports (SMI-1246)
|
|
16
|
+
export { initializePostHog, getPostHog, isPostHogEnabled, trackEvent, identifyUser, isFeatureFlagEnabled, flushPostHog, shutdownPostHog, trackSkillSearch, trackSkillView, trackSkillInstall, trackApiError, } from './posthog.js';
|
|
15
17
|
/**
|
|
16
18
|
* Initialize all telemetry (tracing + metrics)
|
|
17
19
|
* Call this at application startup
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,MAAM,GAIP,MAAM,aAAa,CAAA;AAEpB,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,eAAe,GAOhB,MAAM,cAAc,CAAA;AAErB,gCAAgC;AAChC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,iBAAiB,CAAA;AAExB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAGzC;IACC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACzD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;IAE1D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACvD,MAAM,eAAe,EAAE,CAAA;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,MAAM,GAIP,MAAM,aAAa,CAAA;AAEpB,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,eAAe,GAOhB,MAAM,cAAc,CAAA;AAErB,gCAAgC;AAChC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,iBAAiB,CAAA;AAExB,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,GAId,MAAM,cAAc,CAAA;AAErB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAGzC;IACC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACzD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;IAE1D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACvD,MAAM,eAAe,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1246: PostHog Telemetry Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides product analytics and event tracking via PostHog:
|
|
5
|
+
* - Skill searches and views
|
|
6
|
+
* - Installation events
|
|
7
|
+
* - User engagement metrics
|
|
8
|
+
* - Feature usage tracking
|
|
9
|
+
*
|
|
10
|
+
* Privacy-first: All user IDs are anonymized, no PII collected.
|
|
11
|
+
*/
|
|
12
|
+
import { PostHog } from 'posthog-node';
|
|
13
|
+
/**
|
|
14
|
+
* PostHog configuration options
|
|
15
|
+
*/
|
|
16
|
+
export interface PostHogConfig {
|
|
17
|
+
/** PostHog API key (starts with phc_) */
|
|
18
|
+
apiKey: string;
|
|
19
|
+
/** PostHog host URL (default: https://app.posthog.com) */
|
|
20
|
+
host?: string;
|
|
21
|
+
/** Flush interval in milliseconds (default: 10000) */
|
|
22
|
+
flushInterval?: number;
|
|
23
|
+
/** Enable debug logging (default: false) */
|
|
24
|
+
debug?: boolean;
|
|
25
|
+
/** Disable telemetry entirely (default: false) */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Event types for Skillsmith analytics
|
|
30
|
+
*/
|
|
31
|
+
export type SkillsmithEventType = 'skill_search' | 'skill_view' | 'skill_install' | 'skill_uninstall' | 'skill_compare' | 'skill_recommend' | 'api_error' | 'feature_flag_evaluated';
|
|
32
|
+
/**
|
|
33
|
+
* Event properties for skill-related events
|
|
34
|
+
*/
|
|
35
|
+
export interface SkillEventProperties {
|
|
36
|
+
/** Skill ID (author/name format) */
|
|
37
|
+
skill_id?: string;
|
|
38
|
+
/** Search query */
|
|
39
|
+
query?: string;
|
|
40
|
+
/** Number of results returned */
|
|
41
|
+
result_count?: number;
|
|
42
|
+
/** Trust tier filter applied */
|
|
43
|
+
trust_tier?: string;
|
|
44
|
+
/** Category filter applied */
|
|
45
|
+
category?: string;
|
|
46
|
+
/** Response time in milliseconds */
|
|
47
|
+
duration_ms?: number;
|
|
48
|
+
/** Error code if applicable */
|
|
49
|
+
error_code?: string;
|
|
50
|
+
/** Source of the event (cli, mcp, api) */
|
|
51
|
+
source?: 'cli' | 'mcp' | 'api';
|
|
52
|
+
/** Additional custom properties */
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Initialize PostHog client
|
|
57
|
+
* Call this at application startup
|
|
58
|
+
*
|
|
59
|
+
* @param config - PostHog configuration
|
|
60
|
+
*/
|
|
61
|
+
export declare function initializePostHog(config: PostHogConfig): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get the PostHog client instance
|
|
64
|
+
* Returns null if not initialized or disabled
|
|
65
|
+
*/
|
|
66
|
+
export declare function getPostHog(): PostHog | null;
|
|
67
|
+
/**
|
|
68
|
+
* Check if PostHog is enabled and initialized
|
|
69
|
+
*/
|
|
70
|
+
export declare function isPostHogEnabled(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Track an event with PostHog
|
|
73
|
+
* Silently no-ops if PostHog is disabled or not initialized
|
|
74
|
+
*
|
|
75
|
+
* @param distinctId - Anonymous user identifier
|
|
76
|
+
* @param event - Event name
|
|
77
|
+
* @param properties - Event properties
|
|
78
|
+
*/
|
|
79
|
+
export declare function trackEvent(distinctId: string, event: SkillsmithEventType | string, properties?: SkillEventProperties): void;
|
|
80
|
+
/**
|
|
81
|
+
* Identify a user with traits
|
|
82
|
+
* Used to associate properties with an anonymous ID
|
|
83
|
+
*
|
|
84
|
+
* @param distinctId - Anonymous user identifier
|
|
85
|
+
* @param traits - User properties
|
|
86
|
+
*/
|
|
87
|
+
export declare function identifyUser(distinctId: string, traits: Record<string, unknown>): void;
|
|
88
|
+
/**
|
|
89
|
+
* Check if a feature flag is enabled for a user
|
|
90
|
+
*
|
|
91
|
+
* @param distinctId - Anonymous user identifier
|
|
92
|
+
* @param flagKey - Feature flag key
|
|
93
|
+
* @returns true if enabled, false otherwise
|
|
94
|
+
*/
|
|
95
|
+
export declare function isFeatureFlagEnabled(distinctId: string, flagKey: string): Promise<boolean>;
|
|
96
|
+
/**
|
|
97
|
+
* Flush all pending events immediately
|
|
98
|
+
* Call this before application shutdown
|
|
99
|
+
*/
|
|
100
|
+
export declare function flushPostHog(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Shutdown PostHog client
|
|
103
|
+
* Call this at application shutdown
|
|
104
|
+
*/
|
|
105
|
+
export declare function shutdownPostHog(): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Convenience function to track skill search events
|
|
108
|
+
*/
|
|
109
|
+
export declare function trackSkillSearch(distinctId: string, query: string, resultCount: number, durationMs: number, filters?: {
|
|
110
|
+
trustTier?: string;
|
|
111
|
+
category?: string;
|
|
112
|
+
}): void;
|
|
113
|
+
/**
|
|
114
|
+
* Convenience function to track skill view events
|
|
115
|
+
*/
|
|
116
|
+
export declare function trackSkillView(distinctId: string, skillId: string, source: 'cli' | 'mcp' | 'api'): void;
|
|
117
|
+
/**
|
|
118
|
+
* Convenience function to track skill install events
|
|
119
|
+
*/
|
|
120
|
+
export declare function trackSkillInstall(distinctId: string, skillId: string, source: 'cli' | 'mcp' | 'api'): void;
|
|
121
|
+
/**
|
|
122
|
+
* Convenience function to track API errors
|
|
123
|
+
*/
|
|
124
|
+
export declare function trackApiError(distinctId: string, errorCode: string, endpoint: string, durationMs?: number): void;
|
|
125
|
+
//# sourceMappingURL=posthog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../src/telemetry/posthog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1246: PostHog Telemetry Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides product analytics and event tracking via PostHog:
|
|
5
|
+
* - Skill searches and views
|
|
6
|
+
* - Installation events
|
|
7
|
+
* - User engagement metrics
|
|
8
|
+
* - Feature usage tracking
|
|
9
|
+
*
|
|
10
|
+
* Privacy-first: All user IDs are anonymized, no PII collected.
|
|
11
|
+
*/
|
|
12
|
+
import { PostHog } from 'posthog-node';
|
|
13
|
+
// Singleton instance
|
|
14
|
+
let posthogInstance = null;
|
|
15
|
+
let isDisabled = false;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize PostHog client
|
|
18
|
+
* Call this at application startup
|
|
19
|
+
*
|
|
20
|
+
* @param config - PostHog configuration
|
|
21
|
+
*/
|
|
22
|
+
export function initializePostHog(config) {
|
|
23
|
+
if (config.disabled) {
|
|
24
|
+
isDisabled = true;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!config.apiKey) {
|
|
28
|
+
console.warn('[PostHog] No API key provided, telemetry disabled');
|
|
29
|
+
isDisabled = true;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
posthogInstance = new PostHog(config.apiKey, {
|
|
33
|
+
host: config.host || 'https://app.posthog.com',
|
|
34
|
+
flushInterval: config.flushInterval || 10000,
|
|
35
|
+
});
|
|
36
|
+
if (config.debug) {
|
|
37
|
+
posthogInstance.debug();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the PostHog client instance
|
|
42
|
+
* Returns null if not initialized or disabled
|
|
43
|
+
*/
|
|
44
|
+
export function getPostHog() {
|
|
45
|
+
return posthogInstance;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if PostHog is enabled and initialized
|
|
49
|
+
*/
|
|
50
|
+
export function isPostHogEnabled() {
|
|
51
|
+
return !isDisabled && posthogInstance !== null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Track an event with PostHog
|
|
55
|
+
* Silently no-ops if PostHog is disabled or not initialized
|
|
56
|
+
*
|
|
57
|
+
* @param distinctId - Anonymous user identifier
|
|
58
|
+
* @param event - Event name
|
|
59
|
+
* @param properties - Event properties
|
|
60
|
+
*/
|
|
61
|
+
export function trackEvent(distinctId, event, properties) {
|
|
62
|
+
if (!isPostHogEnabled() || !posthogInstance) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
posthogInstance.capture({
|
|
67
|
+
distinctId,
|
|
68
|
+
event,
|
|
69
|
+
properties: {
|
|
70
|
+
...properties,
|
|
71
|
+
$lib: 'skillsmith',
|
|
72
|
+
$lib_version: process.env.npm_package_version || 'unknown',
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// Silently fail - telemetry should never break the app
|
|
78
|
+
console.debug('[PostHog] Failed to track event:', error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Identify a user with traits
|
|
83
|
+
* Used to associate properties with an anonymous ID
|
|
84
|
+
*
|
|
85
|
+
* @param distinctId - Anonymous user identifier
|
|
86
|
+
* @param traits - User properties
|
|
87
|
+
*/
|
|
88
|
+
export function identifyUser(distinctId, traits) {
|
|
89
|
+
if (!isPostHogEnabled() || !posthogInstance) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
posthogInstance.identify({
|
|
94
|
+
distinctId,
|
|
95
|
+
properties: traits,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.debug('[PostHog] Failed to identify user:', error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if a feature flag is enabled for a user
|
|
104
|
+
*
|
|
105
|
+
* @param distinctId - Anonymous user identifier
|
|
106
|
+
* @param flagKey - Feature flag key
|
|
107
|
+
* @returns true if enabled, false otherwise
|
|
108
|
+
*/
|
|
109
|
+
export async function isFeatureFlagEnabled(distinctId, flagKey) {
|
|
110
|
+
if (!isPostHogEnabled() || !posthogInstance) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const result = await posthogInstance.isFeatureEnabled(flagKey, distinctId);
|
|
115
|
+
trackEvent(distinctId, 'feature_flag_evaluated', {
|
|
116
|
+
flag_key: flagKey,
|
|
117
|
+
flag_value: result,
|
|
118
|
+
});
|
|
119
|
+
return result ?? false;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.debug('[PostHog] Failed to check feature flag:', error);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Flush all pending events immediately
|
|
128
|
+
* Call this before application shutdown
|
|
129
|
+
*/
|
|
130
|
+
export async function flushPostHog() {
|
|
131
|
+
if (!posthogInstance) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
await posthogInstance.flush();
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.debug('[PostHog] Failed to flush events:', error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Shutdown PostHog client
|
|
143
|
+
* Call this at application shutdown
|
|
144
|
+
*/
|
|
145
|
+
export async function shutdownPostHog() {
|
|
146
|
+
if (!posthogInstance) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
await posthogInstance.shutdown();
|
|
151
|
+
posthogInstance = null;
|
|
152
|
+
isDisabled = false;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.debug('[PostHog] Failed to shutdown:', error);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convenience function to track skill search events
|
|
160
|
+
*/
|
|
161
|
+
export function trackSkillSearch(distinctId, query, resultCount, durationMs, filters) {
|
|
162
|
+
trackEvent(distinctId, 'skill_search', {
|
|
163
|
+
query,
|
|
164
|
+
result_count: resultCount,
|
|
165
|
+
duration_ms: durationMs,
|
|
166
|
+
trust_tier: filters?.trustTier,
|
|
167
|
+
category: filters?.category,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Convenience function to track skill view events
|
|
172
|
+
*/
|
|
173
|
+
export function trackSkillView(distinctId, skillId, source) {
|
|
174
|
+
trackEvent(distinctId, 'skill_view', {
|
|
175
|
+
skill_id: skillId,
|
|
176
|
+
source,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Convenience function to track skill install events
|
|
181
|
+
*/
|
|
182
|
+
export function trackSkillInstall(distinctId, skillId, source) {
|
|
183
|
+
trackEvent(distinctId, 'skill_install', {
|
|
184
|
+
skill_id: skillId,
|
|
185
|
+
source,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Convenience function to track API errors
|
|
190
|
+
*/
|
|
191
|
+
export function trackApiError(distinctId, errorCode, endpoint, durationMs) {
|
|
192
|
+
trackEvent(distinctId, 'api_error', {
|
|
193
|
+
error_code: errorCode,
|
|
194
|
+
endpoint,
|
|
195
|
+
duration_ms: durationMs,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=posthog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/posthog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAuDtC,qBAAqB;AACrB,IAAI,eAAe,GAAmB,IAAI,CAAA;AAC1C,IAAI,UAAU,GAAG,KAAK,CAAA;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,UAAU,GAAG,IAAI,CAAA;QACjB,OAAM;IACR,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;QACjE,UAAU,GAAG,IAAI,CAAA;QACjB,OAAM;IACR,CAAC;IAED,eAAe,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3C,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,yBAAyB;QAC9C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;KAC7C,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,eAAe,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,eAAe,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,UAAU,IAAI,eAAe,KAAK,IAAI,CAAA;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,KAAmC,EACnC,UAAiC;IAEjC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,eAAe,CAAC,OAAO,CAAC;YACtB,UAAU;YACV,KAAK;YACL,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;aAC3D;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,MAA+B;IAE/B,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,eAAe,CAAC,QAAQ,CAAC;YACvB,UAAU;YACV,UAAU,EAAE,MAAM;SACnB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,OAAe;IAEf,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC1E,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,MAAM;SACnB,CAAC,CAAA;QACF,OAAO,MAAM,IAAI,KAAK,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAA;QAC/D,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,KAAK,EAAE,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,CAAA;QAChC,eAAe,GAAG,IAAI,CAAA;QACtB,UAAU,GAAG,KAAK,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,KAAa,EACb,WAAmB,EACnB,UAAkB,EAClB,OAAmD;IAEnD,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE;QACrC,KAAK;QACL,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,OAAO,EAAE,SAAS;QAC9B,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,OAAe,EACf,MAA6B;IAE7B,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE;QACnC,QAAQ,EAAE,OAAO;QACjB,MAAM;KACP,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,OAAe,EACf,MAA6B;IAE7B,UAAU,CAAC,UAAU,EAAE,eAAe,EAAE;QACtC,QAAQ,EAAE,OAAO;QACjB,MAAM;KACP,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,SAAiB,EACjB,QAAgB,EAChB,UAAmB;IAEnB,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE;QAClC,UAAU,EAAE,SAAS;QACrB,QAAQ;QACR,WAAW,EAAE,UAAU;KACxB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Comprehensive tests for token bucket rate limiting.
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
7
|
-
import { RateLimiter, InMemoryRateLimitStorage, RATE_LIMIT_PRESETS, createRateLimiterFromPreset, RateLimitQueueTimeoutError, RateLimitQueueFullError, } from '../src/security/
|
|
7
|
+
import { RateLimiter, InMemoryRateLimitStorage, RATE_LIMIT_PRESETS, createRateLimiterFromPreset, RateLimitQueueTimeoutError, RateLimitQueueFullError, } from '../src/security/index.js';
|
|
8
8
|
describe('RateLimiter - Token Bucket Algorithm', () => {
|
|
9
9
|
let limiter;
|
|
10
10
|
let storage;
|
|
@@ -780,8 +780,8 @@ describe('RateLimiter - Queue Support (SMI-1013)', () => {
|
|
|
780
780
|
// Use the only token
|
|
781
781
|
await limiter.waitForToken('test-key');
|
|
782
782
|
// Queue 2 requests (max queue size) - add catch to prevent unhandled rejections
|
|
783
|
-
const
|
|
784
|
-
const
|
|
783
|
+
const _p1 = limiter.waitForToken('test-key').catch(() => { });
|
|
784
|
+
const _p2 = limiter.waitForToken('test-key').catch(() => { });
|
|
785
785
|
// Third queued request should fail immediately
|
|
786
786
|
await expect(limiter.waitForToken('test-key')).rejects.toThrow(RateLimitQueueFullError);
|
|
787
787
|
// Cleanup happens in afterEach
|
|
@@ -939,7 +939,7 @@ describe('RateLimiter - Memory Bounds (Wave 3 Fixes)', () => {
|
|
|
939
939
|
// Use token for first key
|
|
940
940
|
await limiter.waitForToken('key-1');
|
|
941
941
|
// Queue one request for key-1
|
|
942
|
-
const
|
|
942
|
+
const _p1 = limiter.waitForToken('key-1').catch(() => { });
|
|
943
943
|
// Trying to add another request should fail (queue full for this key)
|
|
944
944
|
await expect(limiter.waitForToken('key-1')).rejects.toThrow(RateLimitQueueFullError);
|
|
945
945
|
// Cleanup
|