@agentplugged/claw 0.1.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/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +94 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/capture.d.ts +13 -0
- package/dist/memory/capture.d.ts.map +1 -0
- package/dist/memory/capture.js +102 -0
- package/dist/memory/capture.js.map +1 -0
- package/dist/memory/db.d.ts +56 -0
- package/dist/memory/db.d.ts.map +1 -0
- package/dist/memory/db.js +206 -0
- package/dist/memory/db.js.map +1 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +42 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/llm-extract.d.ts +13 -0
- package/dist/memory/llm-extract.d.ts.map +1 -0
- package/dist/memory/llm-extract.js +135 -0
- package/dist/memory/llm-extract.js.map +1 -0
- package/dist/memory/recall.d.ts +16 -0
- package/dist/memory/recall.d.ts.map +1 -0
- package/dist/memory/recall.js +131 -0
- package/dist/memory/recall.js.map +1 -0
- package/dist/observability/collector.d.ts +40 -0
- package/dist/observability/collector.d.ts.map +1 -0
- package/dist/observability/collector.js +119 -0
- package/dist/observability/collector.js.map +1 -0
- package/dist/observability/db.d.ts +60 -0
- package/dist/observability/db.d.ts.map +1 -0
- package/dist/observability/db.js +189 -0
- package/dist/observability/db.js.map +1 -0
- package/dist/observability/index.d.ts +7 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +35 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/queries.d.ts +54 -0
- package/dist/observability/queries.d.ts.map +1 -0
- package/dist/observability/queries.js +181 -0
- package/dist/observability/queries.js.map +1 -0
- package/dist/router/classifier.d.ts +8 -0
- package/dist/router/classifier.d.ts.map +1 -0
- package/dist/router/classifier.js +90 -0
- package/dist/router/classifier.js.map +1 -0
- package/dist/router/fallback.d.ts +18 -0
- package/dist/router/fallback.d.ts.map +1 -0
- package/dist/router/fallback.js +102 -0
- package/dist/router/fallback.js.map +1 -0
- package/dist/router/index.d.ts +5 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +214 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/leak-detector.d.ts +33 -0
- package/dist/router/leak-detector.d.ts.map +1 -0
- package/dist/router/leak-detector.js +320 -0
- package/dist/router/leak-detector.js.map +1 -0
- package/dist/router/logger.d.ts +18 -0
- package/dist/router/logger.d.ts.map +1 -0
- package/dist/router/logger.js +130 -0
- package/dist/router/logger.js.map +1 -0
- package/dist/router/models.d.ts +5 -0
- package/dist/router/models.d.ts.map +1 -0
- package/dist/router/models.js +96 -0
- package/dist/router/models.js.map +1 -0
- package/dist/router/providers.d.ts +4 -0
- package/dist/router/providers.d.ts.map +1 -0
- package/dist/router/providers.js +323 -0
- package/dist/router/providers.js.map +1 -0
- package/dist/router/strategy.d.ts +29 -0
- package/dist/router/strategy.d.ts.map +1 -0
- package/dist/router/strategy.js +169 -0
- package/dist/router/strategy.js.map +1 -0
- package/dist/router/types.d.ts +63 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +3 -0
- package/dist/router/types.js.map +1 -0
- package/dist/sidecar/auth.d.ts +7 -0
- package/dist/sidecar/auth.d.ts.map +1 -0
- package/dist/sidecar/auth.js +36 -0
- package/dist/sidecar/auth.js.map +1 -0
- package/dist/sidecar/index.d.ts +2 -0
- package/dist/sidecar/index.d.ts.map +1 -0
- package/dist/sidecar/index.js +336 -0
- package/dist/sidecar/index.js.map +1 -0
- package/dist/sidecar/routes/addons.d.ts +6 -0
- package/dist/sidecar/routes/addons.d.ts.map +1 -0
- package/dist/sidecar/routes/addons.js +332 -0
- package/dist/sidecar/routes/addons.js.map +1 -0
- package/dist/sidecar/routes/backup.d.ts +7 -0
- package/dist/sidecar/routes/backup.d.ts.map +1 -0
- package/dist/sidecar/routes/backup.js +204 -0
- package/dist/sidecar/routes/backup.js.map +1 -0
- package/dist/sidecar/routes/channels.d.ts +4 -0
- package/dist/sidecar/routes/channels.d.ts.map +1 -0
- package/dist/sidecar/routes/channels.js +120 -0
- package/dist/sidecar/routes/channels.js.map +1 -0
- package/dist/sidecar/routes/health.d.ts +5 -0
- package/dist/sidecar/routes/health.d.ts.map +1 -0
- package/dist/sidecar/routes/health.js +28 -0
- package/dist/sidecar/routes/health.js.map +1 -0
- package/dist/sidecar/routes/memory.d.ts +7 -0
- package/dist/sidecar/routes/memory.d.ts.map +1 -0
- package/dist/sidecar/routes/memory.js +234 -0
- package/dist/sidecar/routes/memory.js.map +1 -0
- package/dist/sidecar/routes/metrics.d.ts +5 -0
- package/dist/sidecar/routes/metrics.d.ts.map +1 -0
- package/dist/sidecar/routes/metrics.js +273 -0
- package/dist/sidecar/routes/metrics.js.map +1 -0
- package/dist/sidecar/routes/restart.d.ts +4 -0
- package/dist/sidecar/routes/restart.d.ts.map +1 -0
- package/dist/sidecar/routes/restart.js +81 -0
- package/dist/sidecar/routes/restart.js.map +1 -0
- package/dist/sidecar/routes/router-config.d.ts +5 -0
- package/dist/sidecar/routes/router-config.d.ts.map +1 -0
- package/dist/sidecar/routes/router-config.js +150 -0
- package/dist/sidecar/routes/router-config.js.map +1 -0
- package/dist/sidecar/routes/security.d.ts +8 -0
- package/dist/sidecar/routes/security.d.ts.map +1 -0
- package/dist/sidecar/routes/security.js +308 -0
- package/dist/sidecar/routes/security.js.map +1 -0
- package/dist/sidecar/routes/skills.d.ts +5 -0
- package/dist/sidecar/routes/skills.d.ts.map +1 -0
- package/dist/sidecar/routes/skills.js +146 -0
- package/dist/sidecar/routes/skills.js.map +1 -0
- package/dist/sidecar/routes/soul.d.ts +4 -0
- package/dist/sidecar/routes/soul.d.ts.map +1 -0
- package/dist/sidecar/routes/soul.js +115 -0
- package/dist/sidecar/routes/soul.js.map +1 -0
- package/dist/sidecar/routes/team.d.ts +4 -0
- package/dist/sidecar/routes/team.d.ts.map +1 -0
- package/dist/sidecar/routes/team.js +139 -0
- package/dist/sidecar/routes/team.js.map +1 -0
- package/dist/sidecar/routes/update.d.ts +4 -0
- package/dist/sidecar/routes/update.d.ts.map +1 -0
- package/dist/sidecar/routes/update.js +96 -0
- package/dist/sidecar/routes/update.js.map +1 -0
- package/dist/sidecar/utils.d.ts +9 -0
- package/dist/sidecar/utils.d.ts.map +1 -0
- package/dist/sidecar/utils.js +57 -0
- package/dist/sidecar/utils.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type LeakType = "api_key" | "env_var" | "password" | "token" | "email" | "credit_card" | "ssn" | "private_key" | "aws_key";
|
|
2
|
+
export interface LeakFinding {
|
|
3
|
+
/** Category of the detected leak */
|
|
4
|
+
type: LeakType;
|
|
5
|
+
/** Masked version of the matched text (first 4 chars + ***) */
|
|
6
|
+
match: string;
|
|
7
|
+
/** Character position in the original text where the match starts */
|
|
8
|
+
position: number;
|
|
9
|
+
}
|
|
10
|
+
export interface LeakDetectionResult {
|
|
11
|
+
/** True if at least one leak was detected */
|
|
12
|
+
leaked: boolean;
|
|
13
|
+
/** All individual findings */
|
|
14
|
+
findings: LeakFinding[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Scan a text for potential data leaks.
|
|
18
|
+
*
|
|
19
|
+
* Returns all findings with masked match strings so the result itself
|
|
20
|
+
* does not become a leak vector (CWE-532).
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectLeaks(text: string): LeakDetectionResult;
|
|
23
|
+
/**
|
|
24
|
+
* Replace all detected leaks in the text with [REDACTED].
|
|
25
|
+
*
|
|
26
|
+
* This is the last line of defense before sending a response to the client.
|
|
27
|
+
* Use this after detectLeaks() confirms there are findings.
|
|
28
|
+
*
|
|
29
|
+
* OWASP ASVS V8.3.4: Verify that sensitive data is not sent to
|
|
30
|
+
* untrusted parties.
|
|
31
|
+
*/
|
|
32
|
+
export declare function sanitizeResponse(text: string): string;
|
|
33
|
+
//# sourceMappingURL=leak-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leak-detector.d.ts","sourceRoot":"","sources":["../../src/router/leak-detector.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,aAAa,GACb,KAAK,GACL,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAgQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuC7D;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBrD"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Leak Detector — Scanne les reponses LLM pour detecter les fuites de donnees
|
|
4
|
+
// sensibles AVANT qu'elles ne soient renvoyees au client.
|
|
5
|
+
//
|
|
6
|
+
// References:
|
|
7
|
+
// - OWASP Top 10 2021 — A01:2021 Broken Access Control
|
|
8
|
+
// - OWASP Top 10 2021 — A02:2021 Cryptographic Failures
|
|
9
|
+
// - CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
|
|
10
|
+
// - CWE-532: Insertion of Sensitive Information into Log File
|
|
11
|
+
// - OWASP ASVS v4.0.3 — V8: Data Protection
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.detectLeaks = detectLeaks;
|
|
15
|
+
exports.sanitizeResponse = sanitizeResponse;
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Helpers
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Mask a matched string to avoid logging secrets in clear text.
|
|
21
|
+
* Shows at most the first 4 characters followed by "***".
|
|
22
|
+
*
|
|
23
|
+
* CWE-532: We never expose the full secret in logs or results.
|
|
24
|
+
*/
|
|
25
|
+
function maskMatch(value) {
|
|
26
|
+
if (value.length <= 4) {
|
|
27
|
+
return value[0] + "***";
|
|
28
|
+
}
|
|
29
|
+
return value.slice(0, 4) + "***";
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Luhn algorithm for credit card validation.
|
|
33
|
+
* Reduces false positives by verifying the checksum.
|
|
34
|
+
*/
|
|
35
|
+
function luhnCheck(digits) {
|
|
36
|
+
const nums = digits.split("").map(Number);
|
|
37
|
+
let sum = 0;
|
|
38
|
+
let alternate = false;
|
|
39
|
+
for (let i = nums.length - 1; i >= 0; i--) {
|
|
40
|
+
let n = nums[i];
|
|
41
|
+
if (alternate) {
|
|
42
|
+
n *= 2;
|
|
43
|
+
if (n > 9) {
|
|
44
|
+
n -= 9;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
sum += n;
|
|
48
|
+
alternate = !alternate;
|
|
49
|
+
}
|
|
50
|
+
return sum % 10 === 0;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* All patterns are designed to minimize false positives:
|
|
54
|
+
* - API key patterns require a prefix + minimum length
|
|
55
|
+
* - Word boundaries (\b) prevent matching substrings (e.g. "skeleton" != "sk-eleton")
|
|
56
|
+
* - Credit cards require Luhn validation
|
|
57
|
+
* - Passwords require an assignment context (key=value)
|
|
58
|
+
*/
|
|
59
|
+
const LEAK_PATTERNS = [
|
|
60
|
+
// -- Private keys (PEM format) --
|
|
61
|
+
// CWE-321: Use of Hard-coded Cryptographic Key
|
|
62
|
+
{
|
|
63
|
+
type: "private_key",
|
|
64
|
+
regex: /-----BEGIN\s+(?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END\s+(?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/g,
|
|
65
|
+
},
|
|
66
|
+
// -- AWS Access Keys --
|
|
67
|
+
// Always start with AKIA and are exactly 20 chars
|
|
68
|
+
{
|
|
69
|
+
type: "aws_key",
|
|
70
|
+
regex: /\bAKIA[0-9A-Z]{16}\b/g,
|
|
71
|
+
},
|
|
72
|
+
// -- API Keys with known prefixes --
|
|
73
|
+
// OpenAI: sk-... (min 20 chars after prefix to avoid "skeleton", "sk-ip", etc.)
|
|
74
|
+
{
|
|
75
|
+
type: "api_key",
|
|
76
|
+
regex: /\bsk-[A-Za-z0-9_-]{20,}\b/g,
|
|
77
|
+
},
|
|
78
|
+
// Anthropic: sk-ant-...
|
|
79
|
+
{
|
|
80
|
+
type: "api_key",
|
|
81
|
+
regex: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g,
|
|
82
|
+
},
|
|
83
|
+
// Generic key- prefix (min 20 chars)
|
|
84
|
+
{
|
|
85
|
+
type: "api_key",
|
|
86
|
+
regex: /\bkey-[A-Za-z0-9_-]{20,}\b/g,
|
|
87
|
+
},
|
|
88
|
+
// Google AI: AIzaSy...
|
|
89
|
+
{
|
|
90
|
+
type: "api_key",
|
|
91
|
+
regex: /\bAIzaSy[A-Za-z0-9_-]{30,}\b/g,
|
|
92
|
+
},
|
|
93
|
+
// GitHub personal access tokens
|
|
94
|
+
{
|
|
95
|
+
type: "api_key",
|
|
96
|
+
regex: /\bghp_[A-Za-z0-9]{36,}\b/g,
|
|
97
|
+
},
|
|
98
|
+
// GitHub fine-grained tokens
|
|
99
|
+
{
|
|
100
|
+
type: "api_key",
|
|
101
|
+
regex: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g,
|
|
102
|
+
},
|
|
103
|
+
// GitLab personal access tokens
|
|
104
|
+
{
|
|
105
|
+
type: "api_key",
|
|
106
|
+
regex: /\bglpat-[A-Za-z0-9_-]{20,}\b/g,
|
|
107
|
+
},
|
|
108
|
+
// Slack bot tokens
|
|
109
|
+
{
|
|
110
|
+
type: "api_key",
|
|
111
|
+
regex: /\bxoxb-[0-9]{10,}-[A-Za-z0-9-]+\b/g,
|
|
112
|
+
},
|
|
113
|
+
// Slack user tokens
|
|
114
|
+
{
|
|
115
|
+
type: "api_key",
|
|
116
|
+
regex: /\bxoxp-[0-9]{10,}-[A-Za-z0-9-]+\b/g,
|
|
117
|
+
},
|
|
118
|
+
// Stripe keys
|
|
119
|
+
{
|
|
120
|
+
type: "api_key",
|
|
121
|
+
regex: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{20,}\b/g,
|
|
122
|
+
},
|
|
123
|
+
// Sendgrid
|
|
124
|
+
{
|
|
125
|
+
type: "api_key",
|
|
126
|
+
regex: /\bSG\.[A-Za-z0-9_-]{22,}\.[A-Za-z0-9_-]{22,}\b/g,
|
|
127
|
+
},
|
|
128
|
+
// Twilio
|
|
129
|
+
{
|
|
130
|
+
type: "api_key",
|
|
131
|
+
regex: /\bSK[0-9a-fA-F]{32}\b/g,
|
|
132
|
+
},
|
|
133
|
+
// -- JWT tokens --
|
|
134
|
+
// CWE-200: Must not leak session tokens
|
|
135
|
+
{
|
|
136
|
+
type: "token",
|
|
137
|
+
regex: /\beyJhbGciOi[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
|
|
138
|
+
},
|
|
139
|
+
// -- Environment variable references --
|
|
140
|
+
// process.env.SOMETHING
|
|
141
|
+
{
|
|
142
|
+
type: "env_var",
|
|
143
|
+
regex: /\bprocess\.env\.[A-Z_][A-Z0-9_]{2,}\b/g,
|
|
144
|
+
},
|
|
145
|
+
// os.environ["SOMETHING"] or os.environ.get("SOMETHING")
|
|
146
|
+
{
|
|
147
|
+
type: "env_var",
|
|
148
|
+
regex: /\bos\.environ(?:\[['"][A-Z_][A-Z0-9_]*['"]\]|\.get\(['"][A-Z_][A-Z0-9_]*['"]\))/g,
|
|
149
|
+
},
|
|
150
|
+
// Shell-style $ENV_VAR (min 3 chars in name, preceded by whitespace or line start)
|
|
151
|
+
{
|
|
152
|
+
type: "env_var",
|
|
153
|
+
regex: /(?:^|[\s=:])(\$[A-Z_][A-Z0-9_]{2,})\b/gm,
|
|
154
|
+
},
|
|
155
|
+
// -- Passwords / secrets in assignment context --
|
|
156
|
+
// Matches: password=xxx, secret=xxx, token=xxx, api_key=xxx, etc.
|
|
157
|
+
// Requires value to be at least 8 chars to avoid trivial matches
|
|
158
|
+
{
|
|
159
|
+
type: "password",
|
|
160
|
+
regex: /\b(?:password|passwd|pwd|secret|api_?key|api_?secret|auth_?token|access_?token|private_?key)\s*[:=]\s*['"]?([^\s'"]{8,})['"]?/gi,
|
|
161
|
+
},
|
|
162
|
+
// -- Email addresses --
|
|
163
|
+
// Detected in LLM output context — real emails that could be PII leaks
|
|
164
|
+
// CWE-359: Exposure of Private Personal Information
|
|
165
|
+
{
|
|
166
|
+
type: "email",
|
|
167
|
+
regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,
|
|
168
|
+
validate: (match) => {
|
|
169
|
+
// Exclude obvious placeholder/example emails
|
|
170
|
+
const lowerMatch = match.toLowerCase();
|
|
171
|
+
const excludePatterns = [
|
|
172
|
+
"example.com",
|
|
173
|
+
"example.org",
|
|
174
|
+
"example.net",
|
|
175
|
+
"test.com",
|
|
176
|
+
"test.org",
|
|
177
|
+
"localhost",
|
|
178
|
+
"placeholder",
|
|
179
|
+
"user@",
|
|
180
|
+
"email@",
|
|
181
|
+
"your@",
|
|
182
|
+
"name@",
|
|
183
|
+
"noreply@",
|
|
184
|
+
"no-reply@",
|
|
185
|
+
"support@",
|
|
186
|
+
"info@",
|
|
187
|
+
"hello@",
|
|
188
|
+
"contact@",
|
|
189
|
+
];
|
|
190
|
+
return !excludePatterns.some((p) => lowerMatch.includes(p) || lowerMatch.startsWith(p));
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
// -- Credit card numbers --
|
|
194
|
+
// 13-19 digits, possibly separated by spaces or dashes
|
|
195
|
+
// CWE-311: Missing Encryption of Sensitive Data
|
|
196
|
+
{
|
|
197
|
+
type: "credit_card",
|
|
198
|
+
regex: /\b(?:\d[ -]?){13,19}\b/g,
|
|
199
|
+
validate: (match) => {
|
|
200
|
+
const digits = match.replace(/[\s-]/g, "");
|
|
201
|
+
// Must be between 13 and 19 digits
|
|
202
|
+
if (digits.length < 13 || digits.length > 19)
|
|
203
|
+
return false;
|
|
204
|
+
// Must start with a valid card prefix
|
|
205
|
+
const validPrefixes = [
|
|
206
|
+
"4", // Visa
|
|
207
|
+
"5", // Mastercard
|
|
208
|
+
"34", // Amex
|
|
209
|
+
"37", // Amex
|
|
210
|
+
"6011", // Discover
|
|
211
|
+
"65", // Discover
|
|
212
|
+
"36", // Diners
|
|
213
|
+
"38", // Diners
|
|
214
|
+
"35", // JCB
|
|
215
|
+
];
|
|
216
|
+
const startsValid = validPrefixes.some((p) => digits.startsWith(p));
|
|
217
|
+
if (!startsValid)
|
|
218
|
+
return false;
|
|
219
|
+
return luhnCheck(digits);
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
// -- US Social Security Numbers --
|
|
223
|
+
// CWE-359: Exposure of Private Personal Information
|
|
224
|
+
{
|
|
225
|
+
type: "ssn",
|
|
226
|
+
regex: /\b\d{3}-\d{2}-\d{4}\b/g,
|
|
227
|
+
validate: (match) => {
|
|
228
|
+
// Exclude known invalid SSN prefixes (000, 666, 900-999)
|
|
229
|
+
const area = parseInt(match.slice(0, 3), 10);
|
|
230
|
+
if (area === 0 || area === 666 || area >= 900)
|
|
231
|
+
return false;
|
|
232
|
+
// Group number cannot be 00
|
|
233
|
+
const group = parseInt(match.slice(4, 6), 10);
|
|
234
|
+
if (group === 0)
|
|
235
|
+
return false;
|
|
236
|
+
// Serial cannot be 0000
|
|
237
|
+
const serial = parseInt(match.slice(7, 11), 10);
|
|
238
|
+
if (serial === 0)
|
|
239
|
+
return false;
|
|
240
|
+
return true;
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
];
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
// Core detection
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
/**
|
|
248
|
+
* Scan a text for potential data leaks.
|
|
249
|
+
*
|
|
250
|
+
* Returns all findings with masked match strings so the result itself
|
|
251
|
+
* does not become a leak vector (CWE-532).
|
|
252
|
+
*/
|
|
253
|
+
function detectLeaks(text) {
|
|
254
|
+
const findings = [];
|
|
255
|
+
for (const pattern of LEAK_PATTERNS) {
|
|
256
|
+
// Reset lastIndex for global regexes
|
|
257
|
+
pattern.regex.lastIndex = 0;
|
|
258
|
+
let regexMatch;
|
|
259
|
+
while ((regexMatch = pattern.regex.exec(text)) !== null) {
|
|
260
|
+
// Use captured group if present (e.g., password value), otherwise full match
|
|
261
|
+
const matchedText = regexMatch[1] ?? regexMatch[0];
|
|
262
|
+
const position = regexMatch.index;
|
|
263
|
+
// Run optional validator to reduce false positives
|
|
264
|
+
if (pattern.validate && !pattern.validate(matchedText)) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
findings.push({
|
|
268
|
+
type: pattern.type,
|
|
269
|
+
match: maskMatch(matchedText),
|
|
270
|
+
position,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Deduplicate findings at the same position (overlapping patterns)
|
|
275
|
+
const seen = new Set();
|
|
276
|
+
const deduped = findings.filter((f) => {
|
|
277
|
+
const key = `${f.type}:${f.position}`;
|
|
278
|
+
if (seen.has(key))
|
|
279
|
+
return false;
|
|
280
|
+
seen.add(key);
|
|
281
|
+
return true;
|
|
282
|
+
});
|
|
283
|
+
return {
|
|
284
|
+
leaked: deduped.length > 0,
|
|
285
|
+
findings: deduped,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
// ---------------------------------------------------------------------------
|
|
289
|
+
// Sanitization
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
/**
|
|
292
|
+
* Replace all detected leaks in the text with [REDACTED].
|
|
293
|
+
*
|
|
294
|
+
* This is the last line of defense before sending a response to the client.
|
|
295
|
+
* Use this after detectLeaks() confirms there are findings.
|
|
296
|
+
*
|
|
297
|
+
* OWASP ASVS V8.3.4: Verify that sensitive data is not sent to
|
|
298
|
+
* untrusted parties.
|
|
299
|
+
*/
|
|
300
|
+
function sanitizeResponse(text) {
|
|
301
|
+
let sanitized = text;
|
|
302
|
+
for (const pattern of LEAK_PATTERNS) {
|
|
303
|
+
// Reset lastIndex for global regexes
|
|
304
|
+
pattern.regex.lastIndex = 0;
|
|
305
|
+
sanitized = sanitized.replace(pattern.regex, (fullMatch, ...args) => {
|
|
306
|
+
// For patterns with capture groups, the captured group is the sensitive part
|
|
307
|
+
// but we replace the full match to preserve context
|
|
308
|
+
const capturedGroup = typeof args[0] === "string" ? args[0] : null;
|
|
309
|
+
if (pattern.validate) {
|
|
310
|
+
const toValidate = capturedGroup ?? fullMatch;
|
|
311
|
+
if (!pattern.validate(toValidate)) {
|
|
312
|
+
return fullMatch; // Not a real leak, leave untouched
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return "[REDACTED]";
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return sanitized;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=leak-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leak-detector.js","sourceRoot":"","sources":["../../src/router/leak-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { RouterLogEntry } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Opens (or creates) the SQLite database and ensures the schema exists.
|
|
5
|
+
* The DB file is stored at <dataDir>/router.db.
|
|
6
|
+
*/
|
|
7
|
+
export declare function openDatabase(dataDir: string): Database.Database;
|
|
8
|
+
/**
|
|
9
|
+
* Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
|
|
10
|
+
* Called after every proxied request.
|
|
11
|
+
*/
|
|
12
|
+
export declare function logRouterRequest(db: Database.Database, entry: RouterLogEntry): void;
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the cost in USD for a request given the model prices.
|
|
15
|
+
* inputPrice and outputPrice are expressed per 1M tokens.
|
|
16
|
+
*/
|
|
17
|
+
export declare function calculateCost(inputTokens: number, outputTokens: number, inputPricePerM: number, outputPricePerM: number): number;
|
|
18
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyBzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAa/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,cAAc,GACpB,IAAI,CAmCN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAKR"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.openDatabase = openDatabase;
|
|
40
|
+
exports.logRouterRequest = logRouterRequest;
|
|
41
|
+
exports.calculateCost = calculateCost;
|
|
42
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
// Schema embedded as a constant so we can initialize the DB at runtime
|
|
46
|
+
// without reading from disk (the .sql file is for documentation/migrations).
|
|
47
|
+
const SCHEMA_SQL = `
|
|
48
|
+
CREATE TABLE IF NOT EXISTS router_logs (
|
|
49
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
timestamp TEXT NOT NULL,
|
|
51
|
+
model TEXT NOT NULL,
|
|
52
|
+
provider TEXT NOT NULL,
|
|
53
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
54
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
55
|
+
cost REAL NOT NULL DEFAULT 0,
|
|
56
|
+
latency_ms INTEGER NOT NULL DEFAULT 0,
|
|
57
|
+
complexity TEXT NOT NULL,
|
|
58
|
+
strategy TEXT NOT NULL,
|
|
59
|
+
fallback INTEGER NOT NULL DEFAULT 0,
|
|
60
|
+
success INTEGER NOT NULL DEFAULT 1,
|
|
61
|
+
error TEXT,
|
|
62
|
+
leak_detected INTEGER NOT NULL DEFAULT 0
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_router_logs_timestamp ON router_logs(timestamp);
|
|
66
|
+
`;
|
|
67
|
+
/**
|
|
68
|
+
* Opens (or creates) the SQLite database and ensures the schema exists.
|
|
69
|
+
* The DB file is stored at <dataDir>/router.db.
|
|
70
|
+
*/
|
|
71
|
+
function openDatabase(dataDir) {
|
|
72
|
+
if (!fs.existsSync(dataDir)) {
|
|
73
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
74
|
+
}
|
|
75
|
+
const dbPath = path.join(dataDir, "router.db");
|
|
76
|
+
const db = new better_sqlite3_1.default(dbPath);
|
|
77
|
+
// Enable WAL for better concurrency (read while writing)
|
|
78
|
+
db.pragma("journal_mode = WAL");
|
|
79
|
+
db.exec(SCHEMA_SQL);
|
|
80
|
+
return db;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
|
|
84
|
+
* Called after every proxied request.
|
|
85
|
+
*/
|
|
86
|
+
function logRouterRequest(db, entry) {
|
|
87
|
+
try {
|
|
88
|
+
const stmt = db.prepare(`
|
|
89
|
+
INSERT INTO router_logs (
|
|
90
|
+
timestamp, model, provider,
|
|
91
|
+
input_tokens, output_tokens, cost,
|
|
92
|
+
latency_ms, complexity, strategy,
|
|
93
|
+
fallback, success, error, leak_detected
|
|
94
|
+
) VALUES (
|
|
95
|
+
@timestamp, @model, @provider,
|
|
96
|
+
@inputTokens, @outputTokens, @cost,
|
|
97
|
+
@latencyMs, @complexity, @strategy,
|
|
98
|
+
@fallback, @success, @error, @leakDetected
|
|
99
|
+
)
|
|
100
|
+
`);
|
|
101
|
+
stmt.run({
|
|
102
|
+
timestamp: entry.timestamp,
|
|
103
|
+
model: entry.model,
|
|
104
|
+
provider: entry.provider,
|
|
105
|
+
inputTokens: entry.inputTokens,
|
|
106
|
+
outputTokens: entry.outputTokens,
|
|
107
|
+
cost: entry.cost,
|
|
108
|
+
latencyMs: entry.latencyMs,
|
|
109
|
+
complexity: entry.complexity,
|
|
110
|
+
strategy: entry.strategy,
|
|
111
|
+
fallback: entry.fallback ? 1 : 0,
|
|
112
|
+
success: entry.success ? 1 : 0,
|
|
113
|
+
error: entry.error ?? null,
|
|
114
|
+
leakDetected: entry.leakDetected ? 1 : 0,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
// Logging must never crash the proxy
|
|
119
|
+
console.error("[router/logger] Failed to write log entry:", err);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Calculates the cost in USD for a request given the model prices.
|
|
124
|
+
* inputPrice and outputPrice are expressed per 1M tokens.
|
|
125
|
+
*/
|
|
126
|
+
function calculateCost(inputTokens, outputTokens, inputPricePerM, outputPricePerM) {
|
|
127
|
+
return ((inputTokens / 1_000_000) * inputPricePerM +
|
|
128
|
+
(outputTokens / 1_000_000) * outputPricePerM);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,oCAaC;AAMD,4CAsCC;AAMD,sCAUC;AAzGD,oEAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAG7B,uEAAuE;AACvE,6EAA6E;AAC7E,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;CAmBlB,CAAC;AAEF;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,KAAqB;IAErB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYvB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC;YACP,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qCAAqC;QACrC,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,WAAmB,EACnB,YAAoB,EACpB,cAAsB,EACtB,eAAuB;IAEvB,OAAO,CACL,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,cAAc;QAC1C,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,eAAe,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/router/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,MAAM,EAAE,WAAW,EA4E/B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAEjD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAmBxD,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MODELS_BY_PROVIDER = exports.MODELS_BY_ID = exports.MODELS = void 0;
|
|
4
|
+
exports.MODELS = [
|
|
5
|
+
// Anthropic
|
|
6
|
+
{
|
|
7
|
+
id: "claude-haiku-4-5-20251001",
|
|
8
|
+
displayName: "Claude Haiku 4.5",
|
|
9
|
+
inputPrice: 0.80,
|
|
10
|
+
outputPrice: 4.00,
|
|
11
|
+
maxTokens: 8192,
|
|
12
|
+
tier: "economy",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: "claude-sonnet-4-6",
|
|
16
|
+
displayName: "Claude Sonnet 4.6",
|
|
17
|
+
inputPrice: 3.00,
|
|
18
|
+
outputPrice: 15.00,
|
|
19
|
+
maxTokens: 8192,
|
|
20
|
+
tier: "standard",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: "claude-opus-4-6",
|
|
24
|
+
displayName: "Claude Opus 4.6",
|
|
25
|
+
inputPrice: 15.00,
|
|
26
|
+
outputPrice: 75.00,
|
|
27
|
+
maxTokens: 8192,
|
|
28
|
+
tier: "premium",
|
|
29
|
+
},
|
|
30
|
+
// Google
|
|
31
|
+
{
|
|
32
|
+
id: "gemini-2.0-flash",
|
|
33
|
+
displayName: "Gemini 2.0 Flash",
|
|
34
|
+
inputPrice: 0.10,
|
|
35
|
+
outputPrice: 0.40,
|
|
36
|
+
maxTokens: 8192,
|
|
37
|
+
tier: "economy",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "gemini-2.0-pro",
|
|
41
|
+
displayName: "Gemini 2.0 Pro",
|
|
42
|
+
inputPrice: 1.25,
|
|
43
|
+
outputPrice: 5.00,
|
|
44
|
+
maxTokens: 8192,
|
|
45
|
+
tier: "standard",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "gemini-2.5-pro",
|
|
49
|
+
displayName: "Gemini 2.5 Pro",
|
|
50
|
+
inputPrice: 1.25,
|
|
51
|
+
outputPrice: 10.00,
|
|
52
|
+
maxTokens: 65536,
|
|
53
|
+
tier: "premium",
|
|
54
|
+
},
|
|
55
|
+
// OpenAI
|
|
56
|
+
{
|
|
57
|
+
id: "gpt-4o-mini",
|
|
58
|
+
displayName: "GPT-4o Mini",
|
|
59
|
+
inputPrice: 0.15,
|
|
60
|
+
outputPrice: 0.60,
|
|
61
|
+
maxTokens: 16384,
|
|
62
|
+
tier: "economy",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "gpt-4o",
|
|
66
|
+
displayName: "GPT-4o",
|
|
67
|
+
inputPrice: 2.50,
|
|
68
|
+
outputPrice: 10.00,
|
|
69
|
+
maxTokens: 16384,
|
|
70
|
+
tier: "standard",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: "o3",
|
|
74
|
+
displayName: "o3",
|
|
75
|
+
inputPrice: 10.00,
|
|
76
|
+
outputPrice: 40.00,
|
|
77
|
+
maxTokens: 100000,
|
|
78
|
+
tier: "premium",
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
exports.MODELS_BY_ID = new Map(exports.MODELS.map((m) => [m.id, m]));
|
|
82
|
+
exports.MODELS_BY_PROVIDER = new Map([
|
|
83
|
+
[
|
|
84
|
+
"anthropic",
|
|
85
|
+
exports.MODELS.filter((m) => m.id.startsWith("claude-")),
|
|
86
|
+
],
|
|
87
|
+
[
|
|
88
|
+
"openai",
|
|
89
|
+
exports.MODELS.filter((m) => m.id.startsWith("gpt-") || m.id === "o3"),
|
|
90
|
+
],
|
|
91
|
+
[
|
|
92
|
+
"google",
|
|
93
|
+
exports.MODELS.filter((m) => m.id.startsWith("gemini-")),
|
|
94
|
+
],
|
|
95
|
+
]);
|
|
96
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/router/models.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAkB;IACnC,YAAY;IACZ;QACE,EAAE,EAAE,2BAA2B;QAC/B,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,WAAW,EAAE,iBAAiB;QAC9B,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD,SAAS;IACT;QACE,EAAE,EAAE,kBAAkB;QACtB,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,SAAS;KAChB;IACD,SAAS;IACT;QACE,EAAE,EAAE,aAAa;QACjB,WAAW,EAAE,aAAa;QAC1B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,QAAQ;QACrB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEW,QAAA,YAAY,GAA6B,IAAI,GAAG,CAC3D,cAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC7B,CAAC;AAEW,QAAA,kBAAkB,GAA+B,IAAI,GAAG,CAAC;IACpE;QACE,WAAW;QACX,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B;KACF;IACD;QACE,QAAQ;QACR,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CACzC;KACF;IACD;QACE,QAAQ;QACR,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ModelConfig, ProviderConfig } from "../config";
|
|
2
|
+
import { ChatCompletionRequest, ChatCompletionResponse } from "./types";
|
|
3
|
+
export declare function forwardToProvider(provider: ProviderConfig, model: ModelConfig, request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
|
|
4
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/router/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAqejB,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAajC"}
|