@npm-safe/core-dsh 1.0.5
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/LICENSE +204 -0
- package/dist/index.d.ts +513 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +711 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +47 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +161 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/gemini.d.ts +47 -0
- package/dist/llm/gemini.d.ts.map +1 -0
- package/dist/llm/gemini.js +165 -0
- package/dist/llm/gemini.js.map +1 -0
- package/dist/llm/llm-config.d.ts +97 -0
- package/dist/llm/llm-config.d.ts.map +1 -0
- package/dist/llm/llm-config.js +188 -0
- package/dist/llm/llm-config.js.map +1 -0
- package/dist/llm/parse.d.ts +95 -0
- package/dist/llm/parse.d.ts.map +1 -0
- package/dist/llm/parse.js +158 -0
- package/dist/llm/parse.js.map +1 -0
- package/dist/llm/provider.d.ts +122 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +206 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/registry/client.d.ts +164 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +378 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/types.d.ts +226 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +32 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/validator.d.ts +87 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +214 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/scanner/ci-scan.d.ts +82 -0
- package/dist/scanner/ci-scan.d.ts.map +1 -0
- package/dist/scanner/ci-scan.js +130 -0
- package/dist/scanner/ci-scan.js.map +1 -0
- package/dist/scanner/rule-config.d.ts +61 -0
- package/dist/scanner/rule-config.d.ts.map +1 -0
- package/dist/scanner/rule-config.js +103 -0
- package/dist/scanner/rule-config.js.map +1 -0
- package/dist/scanner/rule-loader.d.ts +28 -0
- package/dist/scanner/rule-loader.d.ts.map +1 -0
- package/dist/scanner/rule-loader.js +67 -0
- package/dist/scanner/rule-loader.js.map +1 -0
- package/dist/scanner/static-rules.d.ts +88 -0
- package/dist/scanner/static-rules.d.ts.map +1 -0
- package/dist/scanner/static-rules.js +723 -0
- package/dist/scanner/static-rules.js.map +1 -0
- package/dist/scanner/types.d.ts +177 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +53 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scheduler/rate-limiter.d.ts +74 -0
- package/dist/scheduler/rate-limiter.d.ts.map +1 -0
- package/dist/scheduler/rate-limiter.js +182 -0
- package/dist/scheduler/rate-limiter.js.map +1 -0
- package/dist/scheduler/refresh-scheduler.d.ts +201 -0
- package/dist/scheduler/refresh-scheduler.d.ts.map +1 -0
- package/dist/scheduler/refresh-scheduler.js +295 -0
- package/dist/scheduler/refresh-scheduler.js.map +1 -0
- package/dist/store/cache-manager.d.ts +166 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +356 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/database.d.ts +81 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +182 -0
- package/dist/store/database.js.map +1 -0
- package/dist/store/schema.d.ts +42 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +126 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/translator/provider.d.ts +152 -0
- package/dist/translator/provider.d.ts.map +1 -0
- package/dist/translator/provider.js +159 -0
- package/dist/translator/provider.js.map +1 -0
- package/dist/translator/types.d.ts +83 -0
- package/dist/translator/types.d.ts.map +1 -0
- package/dist/translator/types.js +58 -0
- package/dist/translator/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-rules.js","sourceRoot":"","sources":["../../src/scanner/static-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for security scanning results.
|
|
3
|
+
*
|
|
4
|
+
* This module is foundational: it contains only TypeScript type definitions
|
|
5
|
+
* (enums, interfaces, and JSDoc) and no runtime code, classes, or logic.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Overall security classification for a scanned package.
|
|
9
|
+
*
|
|
10
|
+
* Usable in `switch` statements as a string enum.
|
|
11
|
+
*/
|
|
12
|
+
export declare enum SecurityLevel {
|
|
13
|
+
Safe = "safe",
|
|
14
|
+
Suspicious = "suspicious",
|
|
15
|
+
Dangerous = "dangerous",
|
|
16
|
+
Unknown = "unknown"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Severity of an individual scan finding.
|
|
20
|
+
*/
|
|
21
|
+
export declare enum Severity {
|
|
22
|
+
Low = "low",
|
|
23
|
+
Medium = "medium",
|
|
24
|
+
High = "high",
|
|
25
|
+
Critical = "critical"
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The kind of scan that produced a report or finding.
|
|
29
|
+
*/
|
|
30
|
+
export declare enum ScanType {
|
|
31
|
+
Static = "static",
|
|
32
|
+
Llm = "llm"
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Categorization of what a finding represents.
|
|
36
|
+
*/
|
|
37
|
+
export declare enum FindingCategory {
|
|
38
|
+
InstallScript = "install-script",
|
|
39
|
+
CodeObfuscation = "code-obfuscation",
|
|
40
|
+
BinaryDownload = "binary-download",
|
|
41
|
+
SensitiveExposure = "sensitive-exposure",
|
|
42
|
+
Typosquatting = "typosquatting",
|
|
43
|
+
SuspiciousDep = "suspicious-dependency",
|
|
44
|
+
HomographAttack = "homograph-attack",
|
|
45
|
+
RegistryMismatch = "registry-mismatch",
|
|
46
|
+
KnownMalicious = "known-malicious",
|
|
47
|
+
Informational = "informational"
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A single issue discovered during a security scan.
|
|
51
|
+
*/
|
|
52
|
+
export interface ScanFinding {
|
|
53
|
+
/** Stable identifier of the rule that produced this finding. */
|
|
54
|
+
readonly ruleId: string;
|
|
55
|
+
/** Human-readable name of the rule. */
|
|
56
|
+
readonly ruleName: string;
|
|
57
|
+
/** How severe this finding is. */
|
|
58
|
+
readonly severity: Severity;
|
|
59
|
+
/** Human-readable description of the issue. */
|
|
60
|
+
readonly message: string;
|
|
61
|
+
/** Optional code snippet that triggered the finding. */
|
|
62
|
+
readonly codeSnippet?: string;
|
|
63
|
+
/** Optional 1-based line number where the issue was detected. */
|
|
64
|
+
readonly lineNumber?: number;
|
|
65
|
+
/** Optional remediation guidance. */
|
|
66
|
+
readonly recommendation?: string;
|
|
67
|
+
/** Category classifying the nature of this finding. */
|
|
68
|
+
readonly category: FindingCategory;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A rule that inspects package metadata and README content to produce findings.
|
|
72
|
+
*/
|
|
73
|
+
export interface ScanRule {
|
|
74
|
+
/** Stable unique identifier for the rule. */
|
|
75
|
+
readonly id: string;
|
|
76
|
+
/** Human-readable name of the rule. */
|
|
77
|
+
readonly name: string;
|
|
78
|
+
/** Description of what the rule detects. */
|
|
79
|
+
readonly description: string;
|
|
80
|
+
/** Default severity assigned to findings produced by this rule. */
|
|
81
|
+
readonly severity: Severity;
|
|
82
|
+
/** Category assigned to findings produced by this rule. */
|
|
83
|
+
readonly category: FindingCategory;
|
|
84
|
+
/** Whether the rule is enabled by default. */
|
|
85
|
+
readonly enabled: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Inspect the given README and/or package.json and return any findings.
|
|
88
|
+
*
|
|
89
|
+
* @param readme - README content as a string.
|
|
90
|
+
* @param packageJson - Parsed package.json as a plain object, if available.
|
|
91
|
+
* @returns Findings produced by this rule.
|
|
92
|
+
*/
|
|
93
|
+
match(readme: string, packageJson?: Record<string, unknown>): ScanFinding[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Report produced by a static (non-LLM) scan of a package.
|
|
97
|
+
*/
|
|
98
|
+
export interface StaticScanReport {
|
|
99
|
+
/** Name of the scanned package. */
|
|
100
|
+
readonly packageName: string;
|
|
101
|
+
/** Version of the scanned package. */
|
|
102
|
+
readonly version: string;
|
|
103
|
+
/** Overall security level derived from static findings. */
|
|
104
|
+
readonly overallLevel: SecurityLevel;
|
|
105
|
+
/** Numeric score from 0 to 100 (higher is safer). */
|
|
106
|
+
readonly score: number;
|
|
107
|
+
/** Findings produced by the static scan. */
|
|
108
|
+
readonly findings: readonly ScanFinding[];
|
|
109
|
+
/** ISO 8601 timestamp of when the scan ran. */
|
|
110
|
+
readonly scannedAt: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Report produced by an LLM-based scan of a package.
|
|
114
|
+
*/
|
|
115
|
+
export interface LlmScanReport {
|
|
116
|
+
/** Whether the LLM scan was actually performed. */
|
|
117
|
+
readonly enabled: boolean;
|
|
118
|
+
/** Reason the LLM scan was skipped or disabled, if applicable. */
|
|
119
|
+
readonly reason?: string;
|
|
120
|
+
/** Natural-language summary of the LLM analysis. */
|
|
121
|
+
readonly summary?: string;
|
|
122
|
+
/** Whether the package matches its declared functionality per the LLM. */
|
|
123
|
+
readonly functionalMatch?: boolean;
|
|
124
|
+
/** Suspiciousness score assigned by the LLM (0-100, higher is more suspicious). */
|
|
125
|
+
readonly suspiciousScore?: number;
|
|
126
|
+
/** Findings produced by the LLM scan. */
|
|
127
|
+
readonly findings?: readonly ScanFinding[];
|
|
128
|
+
/** ISO 8601 timestamp of when the LLM scan ran. */
|
|
129
|
+
readonly scannedAt?: string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Combined report for a package, including static and optional LLM scans.
|
|
133
|
+
*/
|
|
134
|
+
export interface ScanReport {
|
|
135
|
+
/** Name of the scanned package. */
|
|
136
|
+
readonly packageName: string;
|
|
137
|
+
/** Version of the scanned package. */
|
|
138
|
+
readonly version: string;
|
|
139
|
+
/** Results of the static scan. */
|
|
140
|
+
readonly staticScan: StaticScanReport;
|
|
141
|
+
/** Results of the LLM scan, if performed. */
|
|
142
|
+
readonly llmScan?: LlmScanReport;
|
|
143
|
+
/** Overall security level combining static and LLM results. */
|
|
144
|
+
readonly overallLevel: SecurityLevel;
|
|
145
|
+
/** Overall numeric score (0-100, higher is safer). */
|
|
146
|
+
readonly overallScore: number;
|
|
147
|
+
/** ISO 8601 timestamp of when the combined scan ran. */
|
|
148
|
+
readonly scannedAt: string;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Aggregated security summary for a package, suitable for storage and display.
|
|
152
|
+
*/
|
|
153
|
+
export interface SecuritySummary {
|
|
154
|
+
/** Name of the package. */
|
|
155
|
+
readonly packageName: string;
|
|
156
|
+
/** Latest known version of the package. */
|
|
157
|
+
readonly latestVersion: string;
|
|
158
|
+
/** Overall security level for the package. */
|
|
159
|
+
readonly overallLevel: SecurityLevel;
|
|
160
|
+
/** Overall numeric score (0-100, higher is safer). */
|
|
161
|
+
readonly overallScore: number;
|
|
162
|
+
/** Total number of findings across all scans. */
|
|
163
|
+
readonly findingCount: number;
|
|
164
|
+
/** Number of findings with critical severity. */
|
|
165
|
+
readonly criticalCount: number;
|
|
166
|
+
/** Number of findings with high severity. */
|
|
167
|
+
readonly highCount: number;
|
|
168
|
+
/** Number of findings with medium severity. */
|
|
169
|
+
readonly mediumCount: number;
|
|
170
|
+
/** Number of findings with low severity. */
|
|
171
|
+
readonly lowCount: number;
|
|
172
|
+
/** ISO 8601 timestamp of the last scan, or null if never scanned. */
|
|
173
|
+
readonly lastScanned: string | null;
|
|
174
|
+
/** ISO 8601 timestamp of when this summary was cached. */
|
|
175
|
+
readonly cachedAt: string;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for security scanning results.
|
|
3
|
+
*
|
|
4
|
+
* This module is foundational: it contains only TypeScript type definitions
|
|
5
|
+
* (enums, interfaces, and JSDoc) and no runtime code, classes, or logic.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Overall security classification for a scanned package.
|
|
9
|
+
*
|
|
10
|
+
* Usable in `switch` statements as a string enum.
|
|
11
|
+
*/
|
|
12
|
+
export var SecurityLevel;
|
|
13
|
+
(function (SecurityLevel) {
|
|
14
|
+
SecurityLevel["Safe"] = "safe";
|
|
15
|
+
SecurityLevel["Suspicious"] = "suspicious";
|
|
16
|
+
SecurityLevel["Dangerous"] = "dangerous";
|
|
17
|
+
SecurityLevel["Unknown"] = "unknown";
|
|
18
|
+
})(SecurityLevel || (SecurityLevel = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Severity of an individual scan finding.
|
|
21
|
+
*/
|
|
22
|
+
export var Severity;
|
|
23
|
+
(function (Severity) {
|
|
24
|
+
Severity["Low"] = "low";
|
|
25
|
+
Severity["Medium"] = "medium";
|
|
26
|
+
Severity["High"] = "high";
|
|
27
|
+
Severity["Critical"] = "critical";
|
|
28
|
+
})(Severity || (Severity = {}));
|
|
29
|
+
/**
|
|
30
|
+
* The kind of scan that produced a report or finding.
|
|
31
|
+
*/
|
|
32
|
+
export var ScanType;
|
|
33
|
+
(function (ScanType) {
|
|
34
|
+
ScanType["Static"] = "static";
|
|
35
|
+
ScanType["Llm"] = "llm";
|
|
36
|
+
})(ScanType || (ScanType = {}));
|
|
37
|
+
/**
|
|
38
|
+
* Categorization of what a finding represents.
|
|
39
|
+
*/
|
|
40
|
+
export var FindingCategory;
|
|
41
|
+
(function (FindingCategory) {
|
|
42
|
+
FindingCategory["InstallScript"] = "install-script";
|
|
43
|
+
FindingCategory["CodeObfuscation"] = "code-obfuscation";
|
|
44
|
+
FindingCategory["BinaryDownload"] = "binary-download";
|
|
45
|
+
FindingCategory["SensitiveExposure"] = "sensitive-exposure";
|
|
46
|
+
FindingCategory["Typosquatting"] = "typosquatting";
|
|
47
|
+
FindingCategory["SuspiciousDep"] = "suspicious-dependency";
|
|
48
|
+
FindingCategory["HomographAttack"] = "homograph-attack";
|
|
49
|
+
FindingCategory["RegistryMismatch"] = "registry-mismatch";
|
|
50
|
+
FindingCategory["KnownMalicious"] = "known-malicious";
|
|
51
|
+
FindingCategory["Informational"] = "informational";
|
|
52
|
+
})(FindingCategory || (FindingCategory = {}));
|
|
53
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,0CAAyB,CAAA;IACzB,wCAAuB,CAAA;IACvB,oCAAmB,CAAA;AACrB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,iCAAqB,CAAA;AACvB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,uBAAW,CAAA;AACb,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAWX;AAXD,WAAY,eAAe;IACzB,mDAAgC,CAAA;IAChC,uDAAoC,CAAA;IACpC,qDAAkC,CAAA;IAClC,2DAAwC,CAAA;IACxC,kDAA+B,CAAA;IAC/B,0DAAuC,CAAA;IACvC,uDAAoC,CAAA;IACpC,yDAAsC,CAAA;IACtC,qDAAkC,CAAA;IAClC,kDAA+B,CAAA;AACjC,CAAC,EAXW,eAAe,KAAf,eAAe,QAW1B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token bucket rate limiter.
|
|
3
|
+
*
|
|
4
|
+
* Standalone utility — does not import from any other local module.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Token bucket rate limiter using a continuous-refill token bucket.
|
|
8
|
+
*
|
|
9
|
+
* Tokens accumulate at `tokensPerSecond` up to a maximum of `maxBurst`.
|
|
10
|
+
* `consume()` blocks until the requested number of tokens are available,
|
|
11
|
+
* servicing concurrent callers in FIFO order.
|
|
12
|
+
*/
|
|
13
|
+
export declare class TokenBucket {
|
|
14
|
+
private readonly tokensPerSecond;
|
|
15
|
+
private readonly maxBurst;
|
|
16
|
+
/** Current number of available tokens (fractional allowed). */
|
|
17
|
+
private available;
|
|
18
|
+
/** Timestamp (ms) of the last refill computation. */
|
|
19
|
+
private lastRefillTime;
|
|
20
|
+
/** FIFO queue of consumers waiting for tokens. */
|
|
21
|
+
private readonly queue;
|
|
22
|
+
/** Handle to the refill interval, or `null` when disposed. */
|
|
23
|
+
private intervalId;
|
|
24
|
+
/**
|
|
25
|
+
* @param tokensPerSecond - Rate of token refill (default: 5).
|
|
26
|
+
* @param maxBurst - Maximum accumulated tokens (default: 10).
|
|
27
|
+
*/
|
|
28
|
+
constructor(tokensPerSecond?: number, maxBurst?: number);
|
|
29
|
+
/**
|
|
30
|
+
* Refill tokens based on elapsed wall-clock time since the last refill,
|
|
31
|
+
* then service as many queued consumers as possible in FIFO order.
|
|
32
|
+
*/
|
|
33
|
+
private refill;
|
|
34
|
+
/**
|
|
35
|
+
* Fulfill queued consumers in FIFO order while tokens are sufficient.
|
|
36
|
+
* A consumer whose requested `count` exceeds `maxBurst` is auto-allowed
|
|
37
|
+
* (it would otherwise deadlock forever) and drains the bucket to zero.
|
|
38
|
+
*/
|
|
39
|
+
private drainQueue;
|
|
40
|
+
/**
|
|
41
|
+
* Wait until `count` tokens are available, then consume them.
|
|
42
|
+
*
|
|
43
|
+
* Resolves immediately if enough tokens are available, otherwise waits
|
|
44
|
+
* for refill. Concurrent callers are serviced in FIFO order.
|
|
45
|
+
*
|
|
46
|
+
* @param count - Number of tokens to consume (default: 1).
|
|
47
|
+
*/
|
|
48
|
+
consume(count?: number): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Try to consume tokens without waiting. Returns `true` if successful,
|
|
51
|
+
* `false` if insufficient tokens are currently available.
|
|
52
|
+
*
|
|
53
|
+
* @param count - Number of tokens to consume (default: 1).
|
|
54
|
+
*/
|
|
55
|
+
tryConsume(count?: number): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get current bucket state.
|
|
58
|
+
*
|
|
59
|
+
* @returns An object with the current available tokens, the max burst
|
|
60
|
+
* capacity, and the refill rate (tokens per second).
|
|
61
|
+
*/
|
|
62
|
+
getStats(): {
|
|
63
|
+
available: number;
|
|
64
|
+
maxBurst: number;
|
|
65
|
+
rate: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Stop the refill timer and clean up. Any pending consumers are rejected
|
|
69
|
+
* with an Error. Subsequent calls to `consume()` will reject and
|
|
70
|
+
* `tryConsume()` will return `false`.
|
|
71
|
+
*/
|
|
72
|
+
dispose(): void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/scheduler/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,+DAA+D;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,qDAAqD;IACrD,OAAO,CAAC,cAAc,CAAS;IAE/B,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,8DAA8D;IAC9D,OAAO,CAAC,UAAU,CAAwC;IAE1D;;;OAGG;gBACS,eAAe,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW;IAwB9D;;;OAGG;IACH,OAAO,CAAC,MAAM;IAed;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA0BlB;;;;;;;OAOG;IACG,OAAO,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/C;;;;;OAKG;IACH,UAAU,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO;IAyBtC;;;;;OAKG;IACH,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAQjE;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAYhB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token bucket rate limiter.
|
|
3
|
+
*
|
|
4
|
+
* Standalone utility — does not import from any other local module.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Token bucket rate limiter using a continuous-refill token bucket.
|
|
8
|
+
*
|
|
9
|
+
* Tokens accumulate at `tokensPerSecond` up to a maximum of `maxBurst`.
|
|
10
|
+
* `consume()` blocks until the requested number of tokens are available,
|
|
11
|
+
* servicing concurrent callers in FIFO order.
|
|
12
|
+
*/
|
|
13
|
+
export class TokenBucket {
|
|
14
|
+
tokensPerSecond;
|
|
15
|
+
maxBurst;
|
|
16
|
+
/** Current number of available tokens (fractional allowed). */
|
|
17
|
+
available;
|
|
18
|
+
/** Timestamp (ms) of the last refill computation. */
|
|
19
|
+
lastRefillTime;
|
|
20
|
+
/** FIFO queue of consumers waiting for tokens. */
|
|
21
|
+
queue = [];
|
|
22
|
+
/** Handle to the refill interval, or `null` when disposed. */
|
|
23
|
+
intervalId;
|
|
24
|
+
/**
|
|
25
|
+
* @param tokensPerSecond - Rate of token refill (default: 5).
|
|
26
|
+
* @param maxBurst - Maximum accumulated tokens (default: 10).
|
|
27
|
+
*/
|
|
28
|
+
constructor(tokensPerSecond = 5, maxBurst = 10) {
|
|
29
|
+
if (tokensPerSecond <= 0 || !Number.isFinite(tokensPerSecond)) {
|
|
30
|
+
throw new RangeError(`tokensPerSecond must be a positive finite number, got: ${tokensPerSecond}`);
|
|
31
|
+
}
|
|
32
|
+
if (maxBurst <= 0 || !Number.isFinite(maxBurst)) {
|
|
33
|
+
throw new RangeError(`maxBurst must be a positive finite number, got: ${maxBurst}`);
|
|
34
|
+
}
|
|
35
|
+
this.tokensPerSecond = tokensPerSecond;
|
|
36
|
+
this.maxBurst = maxBurst;
|
|
37
|
+
// Bucket starts full (full burst available immediately).
|
|
38
|
+
this.available = maxBurst;
|
|
39
|
+
this.lastRefillTime = Date.now();
|
|
40
|
+
// Refill tick at 100ms granularity. The actual refill amount is computed
|
|
41
|
+
// from elapsed wall-clock time, so tick frequency only affects latency,
|
|
42
|
+
// not the refill rate.
|
|
43
|
+
this.intervalId = setInterval(() => this.refill(), 100);
|
|
44
|
+
// Don't keep the Node.js event loop alive solely for this timer.
|
|
45
|
+
if (typeof this.intervalId === "object" && this.intervalId !== null && "unref" in this.intervalId) {
|
|
46
|
+
this.intervalId.unref();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Refill tokens based on elapsed wall-clock time since the last refill,
|
|
51
|
+
* then service as many queued consumers as possible in FIFO order.
|
|
52
|
+
*/
|
|
53
|
+
refill() {
|
|
54
|
+
if (this.intervalId === null) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
const elapsedSeconds = (now - this.lastRefillTime) / 1000;
|
|
59
|
+
this.lastRefillTime = now;
|
|
60
|
+
// Continuous refill: fractional tokens accumulate based on real time.
|
|
61
|
+
this.available = Math.min(this.maxBurst, this.available + elapsedSeconds * this.tokensPerSecond);
|
|
62
|
+
this.drainQueue();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fulfill queued consumers in FIFO order while tokens are sufficient.
|
|
66
|
+
* A consumer whose requested `count` exceeds `maxBurst` is auto-allowed
|
|
67
|
+
* (it would otherwise deadlock forever) and drains the bucket to zero.
|
|
68
|
+
*/
|
|
69
|
+
drainQueue() {
|
|
70
|
+
while (this.queue.length > 0) {
|
|
71
|
+
const next = this.queue[0];
|
|
72
|
+
if (next.count > this.maxBurst) {
|
|
73
|
+
// Edge case: request larger than capacity can never be satisfied
|
|
74
|
+
// by accumulation. Auto-allow it and drain the bucket to zero.
|
|
75
|
+
this.available = 0;
|
|
76
|
+
this.queue.shift();
|
|
77
|
+
next.resolve();
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (this.available >= next.count) {
|
|
81
|
+
this.available -= next.count;
|
|
82
|
+
this.queue.shift();
|
|
83
|
+
next.resolve();
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Not enough tokens for the head of the queue; stop draining.
|
|
87
|
+
// FIFO fairness: we never skip ahead.
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Wait until `count` tokens are available, then consume them.
|
|
93
|
+
*
|
|
94
|
+
* Resolves immediately if enough tokens are available, otherwise waits
|
|
95
|
+
* for refill. Concurrent callers are serviced in FIFO order.
|
|
96
|
+
*
|
|
97
|
+
* @param count - Number of tokens to consume (default: 1).
|
|
98
|
+
*/
|
|
99
|
+
async consume(count = 1) {
|
|
100
|
+
if (this.intervalId === null) {
|
|
101
|
+
throw new Error("TokenBucket has been disposed");
|
|
102
|
+
}
|
|
103
|
+
if (count < 0 || !Number.isFinite(count)) {
|
|
104
|
+
throw new RangeError(`count must be a non-negative finite number, got: ${count}`);
|
|
105
|
+
}
|
|
106
|
+
if (count === 0) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Fast path: enough tokens available right now.
|
|
110
|
+
if (this.available >= count || count > this.maxBurst) {
|
|
111
|
+
if (count > this.maxBurst) {
|
|
112
|
+
// Auto-allow oversized request; drain bucket to zero.
|
|
113
|
+
this.available = 0;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.available -= count;
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Slow path: enqueue and wait for refill to fulfill the request.
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
this.queue.push({ count, resolve, reject });
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Try to consume tokens without waiting. Returns `true` if successful,
|
|
127
|
+
* `false` if insufficient tokens are currently available.
|
|
128
|
+
*
|
|
129
|
+
* @param count - Number of tokens to consume (default: 1).
|
|
130
|
+
*/
|
|
131
|
+
tryConsume(count = 1) {
|
|
132
|
+
if (this.intervalId === null) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (count < 0 || !Number.isFinite(count)) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
if (count === 0) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// Oversized request: auto-allow, drain bucket to zero.
|
|
142
|
+
if (count > this.maxBurst) {
|
|
143
|
+
this.available = 0;
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
if (this.available >= count) {
|
|
147
|
+
this.available -= count;
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get current bucket state.
|
|
154
|
+
*
|
|
155
|
+
* @returns An object with the current available tokens, the max burst
|
|
156
|
+
* capacity, and the refill rate (tokens per second).
|
|
157
|
+
*/
|
|
158
|
+
getStats() {
|
|
159
|
+
return {
|
|
160
|
+
available: this.available,
|
|
161
|
+
maxBurst: this.maxBurst,
|
|
162
|
+
rate: this.tokensPerSecond,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Stop the refill timer and clean up. Any pending consumers are rejected
|
|
167
|
+
* with an Error. Subsequent calls to `consume()` will reject and
|
|
168
|
+
* `tryConsume()` will return `false`.
|
|
169
|
+
*/
|
|
170
|
+
dispose() {
|
|
171
|
+
if (this.intervalId !== null) {
|
|
172
|
+
clearInterval(this.intervalId);
|
|
173
|
+
this.intervalId = null;
|
|
174
|
+
}
|
|
175
|
+
// Reject all pending consumers in FIFO order.
|
|
176
|
+
while (this.queue.length > 0) {
|
|
177
|
+
const pending = this.queue.shift();
|
|
178
|
+
pending.reject(new Error("TokenBucket has been disposed"));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/scheduler/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACL,eAAe,CAAS;IACxB,QAAQ,CAAS;IAElC,+DAA+D;IACvD,SAAS,CAAS;IAC1B,qDAAqD;IAC7C,cAAc,CAAS;IAE/B,kDAAkD;IACjC,KAAK,GAAsB,EAAE,CAAC;IAC/C,8DAA8D;IACtD,UAAU,CAAwC;IAE1D;;;OAGG;IACH,YAAY,kBAA0B,CAAC,EAAE,WAAmB,EAAE;QAC5D,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,UAAU,CAAC,0DAA0D,eAAe,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,UAAU,CAAC,mDAAmD,QAAQ,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,yDAAyD;QACzD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEjC,yEAAyE;QACzE,wEAAwE;QACxE,uBAAuB;QACvB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,iEAAiE;QACjE,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACjG,IAAI,CAAC,UAAoC,CAAC,KAAK,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM;QACZ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAE1B,sEAAsE;QACtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAEjG,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,UAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,iEAAiE;gBACjE,+DAA+D;gBAC/D,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,8DAA8D;YAC9D,sCAAsC;YACtC,MAAM;QACR,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgB,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,UAAU,CAAC,oDAAoD,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,sDAAsD;gBACtD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;YAC1B,CAAC;YACD,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,QAAgB,CAAC;QAC1B,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uDAAuD;QACvD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,eAAe;SAC3B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,8CAA8C;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}
|