rehydra 0.5.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/cli/commands/anonymize.d.ts.map +1 -1
- package/dist/cli/commands/anonymize.js +16 -0
- package/dist/cli/commands/anonymize.js.map +1 -1
- package/dist/cli/commands/inspect.d.ts.map +1 -1
- package/dist/cli/commands/inspect.js +7 -0
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +6 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/core/anonymizer.d.ts +8 -1
- package/dist/core/anonymizer.d.ts.map +1 -1
- package/dist/core/anonymizer.js +68 -2
- package/dist/core/anonymizer.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/opencode-plugin/index.d.ts +7 -0
- package/dist/opencode-plugin/index.d.ts.map +1 -0
- package/dist/opencode-plugin/index.js +6 -0
- package/dist/opencode-plugin/index.js.map +1 -0
- package/dist/opencode-plugin/plugin.d.ts +61 -0
- package/dist/opencode-plugin/plugin.d.ts.map +1 -0
- package/dist/opencode-plugin/plugin.js +234 -0
- package/dist/opencode-plugin/plugin.js.map +1 -0
- package/dist/opencode-plugin/types.d.ts +28 -0
- package/dist/opencode-plugin/types.d.ts.map +1 -0
- package/dist/opencode-plugin/types.js +5 -0
- package/dist/opencode-plugin/types.js.map +1 -0
- package/dist/pipeline/tagger.js +1 -1
- package/dist/pipeline/tagger.js.map +1 -1
- package/dist/proxy/providers/anthropic.d.ts +6 -1
- package/dist/proxy/providers/anthropic.d.ts.map +1 -1
- package/dist/proxy/providers/anthropic.js +59 -0
- package/dist/proxy/providers/anthropic.js.map +1 -1
- package/dist/proxy/providers/index.d.ts.map +1 -1
- package/dist/proxy/providers/index.js +1 -0
- package/dist/proxy/providers/index.js.map +1 -1
- package/dist/proxy/providers/openai.d.ts +5 -1
- package/dist/proxy/providers/openai.d.ts.map +1 -1
- package/dist/proxy/providers/openai.js +59 -0
- package/dist/proxy/providers/openai.js.map +1 -1
- package/dist/proxy/providers/types.d.ts +24 -0
- package/dist/proxy/providers/types.d.ts.map +1 -1
- package/dist/proxy/rehydra-fetch.d.ts.map +1 -1
- package/dist/proxy/rehydra-fetch.js +206 -50
- package/dist/proxy/rehydra-fetch.js.map +1 -1
- package/dist/recognizers/index.d.ts +2 -0
- package/dist/recognizers/index.d.ts.map +1 -1
- package/dist/recognizers/index.js +2 -0
- package/dist/recognizers/index.js.map +1 -1
- package/dist/recognizers/secrets/api-key.d.ts +6 -0
- package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/api-key.js +40 -0
- package/dist/recognizers/secrets/api-key.js.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.js +68 -0
- package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
- package/dist/recognizers/secrets/config-secret.d.ts +8 -0
- package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
- package/dist/recognizers/secrets/config-secret.js +59 -0
- package/dist/recognizers/secrets/config-secret.js.map +1 -0
- package/dist/recognizers/secrets/connection-string.d.ts +6 -0
- package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
- package/dist/recognizers/secrets/connection-string.js +40 -0
- package/dist/recognizers/secrets/connection-string.js.map +1 -0
- package/dist/recognizers/secrets/env-var.d.ts +8 -0
- package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
- package/dist/recognizers/secrets/env-var.js +54 -0
- package/dist/recognizers/secrets/env-var.js.map +1 -0
- package/dist/recognizers/secrets/index.d.ts +19 -0
- package/dist/recognizers/secrets/index.d.ts.map +1 -0
- package/dist/recognizers/secrets/index.js +35 -0
- package/dist/recognizers/secrets/index.js.map +1 -0
- package/dist/recognizers/secrets/jwt.d.ts +6 -0
- package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
- package/dist/recognizers/secrets/jwt.js +47 -0
- package/dist/recognizers/secrets/jwt.js.map +1 -0
- package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
- package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
- package/dist/recognizers/secrets/key-patterns.js +15 -0
- package/dist/recognizers/secrets/key-patterns.js.map +1 -0
- package/dist/recognizers/secrets/literal-value.d.ts +10 -0
- package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
- package/dist/recognizers/secrets/literal-value.js +48 -0
- package/dist/recognizers/secrets/literal-value.js.map +1 -0
- package/dist/recognizers/secrets/private-key.d.ts +6 -0
- package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/private-key.js +16 -0
- package/dist/recognizers/secrets/private-key.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/pii-types.d.ts +12 -1
- package/dist/types/pii-types.d.ts.map +1 -1
- package/dist/types/pii-types.js +28 -0
- package/dist/types/pii-types.js.map +1 -1
- package/package.json +5 -1
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* LLM Content Provider Interface
|
|
3
3
|
* Abstracts LLM-specific request/response formats for the proxy middleware.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* A tool call argument fragment from an SSE chunk.
|
|
7
|
+
* Keyed by index to support interleaved multi-tool streaming.
|
|
8
|
+
*/
|
|
9
|
+
export interface ToolCallDelta {
|
|
10
|
+
/** Numeric index identifying which tool call this fragment belongs to */
|
|
11
|
+
index: number;
|
|
12
|
+
/** The partial argument string fragment */
|
|
13
|
+
arguments: string;
|
|
14
|
+
}
|
|
5
15
|
/**
|
|
6
16
|
* Interface for extracting and rebuilding text content from LLM API requests/responses.
|
|
7
17
|
* Each provider handles a specific LLM API format (OpenAI, Anthropic, etc.).
|
|
@@ -25,5 +35,19 @@ export interface LLMContentProvider {
|
|
|
25
35
|
rebuildSSEDelta(data: unknown, rehydratedText: string): unknown;
|
|
26
36
|
/** Check if the request body indicates a streaming response is expected */
|
|
27
37
|
isStreamingRequest(body: unknown): boolean;
|
|
38
|
+
/** Extract tool call argument strings from a non-streaming response body for rehydration */
|
|
39
|
+
extractResponseToolCalls?(body: unknown): string[];
|
|
40
|
+
/** Rebuild the response body with rehydrated tool call arguments (same order as extractResponseToolCalls) */
|
|
41
|
+
rebuildResponseToolCalls?(body: unknown, rehydratedArgs: string[]): unknown;
|
|
42
|
+
/** Extract tool call argument deltas from a parsed SSE data payload */
|
|
43
|
+
extractSSEToolCallDeltas?(data: unknown): ToolCallDelta[] | null;
|
|
44
|
+
/** Rebuild an SSE data payload with rehydrated tool call arguments */
|
|
45
|
+
rebuildSSEToolCallDeltas?(data: unknown, rehydratedArgs: Map<number, string>): unknown;
|
|
46
|
+
/**
|
|
47
|
+
* Detect a "tool call block finished" SSE event and return its block index.
|
|
48
|
+
* Used to flush per-index tag buffers before the stop event is forwarded.
|
|
49
|
+
* Returns null if this event is not a tool call stop signal.
|
|
50
|
+
*/
|
|
51
|
+
extractSSEToolCallStop?(data: unknown): number | null;
|
|
28
52
|
}
|
|
29
53
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/proxy/providers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAEvD,iEAAiE;IACjE,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAE5C,uFAAuF;IACvF,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEtE,8EAA8E;IAC9E,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAE7C,yFAAyF;IACzF,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvE,0FAA0F;IAC1F,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAE9C,uDAAuD;IACvD,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhE,2EAA2E;IAC3E,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/proxy/providers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAEvD,iEAAiE;IACjE,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAE5C,uFAAuF;IACvF,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEtE,8EAA8E;IAC9E,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAE7C,yFAAyF;IACzF,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvE,0FAA0F;IAC1F,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAE9C,uDAAuD;IACvD,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhE,2EAA2E;IAC3E,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAE3C,4FAA4F;IAC5F,wBAAwB,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAEnD,6GAA6G;IAC7G,wBAAwB,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE5E,uEAAuE;IACvE,wBAAwB,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC;IAEjE,sEAAsE;IACtE,wBAAwB,CAAC,CACvB,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC;IAEX;;;;OAIG;IACH,sBAAsB,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;CACvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehydra-fetch.d.ts","sourceRoot":"","sources":["../../src/proxy/rehydra-fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rehydra-fetch.d.ts","sourceRoot":"","sources":["../../src/proxy/rehydra-fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoBrD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GACzB,OAAO,UAAU,CAAC,KAAK,CAuHzB"}
|
|
@@ -13,6 +13,14 @@ let sessionCounter = 0;
|
|
|
13
13
|
function defaultGetSessionId() {
|
|
14
14
|
return `rehydra-proxy-${Date.now()}-${++sessionCounter}`;
|
|
15
15
|
}
|
|
16
|
+
function errorResponse(status, message) {
|
|
17
|
+
return new Response(JSON.stringify({
|
|
18
|
+
error: { message, type: "rehydra_proxy_error" },
|
|
19
|
+
}), {
|
|
20
|
+
status,
|
|
21
|
+
headers: { "Content-Type": "application/json" },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
16
24
|
/**
|
|
17
25
|
* Creates a fetch-compatible function that automatically:
|
|
18
26
|
* 1. Anonymizes text in outgoing LLM API requests
|
|
@@ -56,7 +64,14 @@ export function createRehydraFetch(config) {
|
|
|
56
64
|
}
|
|
57
65
|
}
|
|
58
66
|
return async (input, init) => {
|
|
59
|
-
|
|
67
|
+
try {
|
|
68
|
+
await ensureInitialized();
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
initialized = false; // Allow retry on next request
|
|
72
|
+
const msg = err instanceof Error ? err.message : "Initialization failed";
|
|
73
|
+
return errorResponse(503, `Rehydra proxy not ready: ${msg}`);
|
|
74
|
+
}
|
|
60
75
|
const request = new Request(input, init);
|
|
61
76
|
// Only intercept POST requests with JSON bodies (LLM API calls)
|
|
62
77
|
if (request.method !== "POST") {
|
|
@@ -69,42 +84,74 @@ export function createRehydraFetch(config) {
|
|
|
69
84
|
// Detect the LLM provider
|
|
70
85
|
const provider = detectProvider(request.url, request.headers, config.provider);
|
|
71
86
|
// Parse request body
|
|
72
|
-
|
|
87
|
+
let body;
|
|
88
|
+
try {
|
|
89
|
+
body = await request.json();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return errorResponse(400, "Invalid JSON in request body");
|
|
93
|
+
}
|
|
73
94
|
// Get session ID for PII map persistence
|
|
74
95
|
const sessionId = await getSessionId(request);
|
|
75
96
|
// Create a session for this request
|
|
76
97
|
const session = new AnonymizerSessionImpl(anonymizer, sessionId, config.piiStorageProvider, config.keyProvider);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
98
|
+
try {
|
|
99
|
+
// Extract and anonymize text from the request
|
|
100
|
+
const texts = provider.extractRequestText(body);
|
|
101
|
+
const anonymizedTexts = [];
|
|
102
|
+
for (const text of texts) {
|
|
103
|
+
const result = await session.anonymize(text, config.locale, config.policy);
|
|
104
|
+
anonymizedTexts.push(result.anonymizedText);
|
|
105
|
+
}
|
|
106
|
+
// Rebuild the request body with anonymized text
|
|
107
|
+
const anonymizedBody = provider.rebuildRequestBody(body, anonymizedTexts);
|
|
108
|
+
// Forward the anonymized request
|
|
109
|
+
const upstreamRequest = new Request(request, {
|
|
110
|
+
body: JSON.stringify(anonymizedBody),
|
|
111
|
+
});
|
|
112
|
+
let response;
|
|
113
|
+
try {
|
|
114
|
+
response = await fetch(upstreamRequest);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
const msg = err instanceof Error ? err.message : "Upstream request failed";
|
|
118
|
+
return errorResponse(502, `Upstream LLM unreachable: ${msg}`);
|
|
119
|
+
}
|
|
120
|
+
// Determine if the response is a streaming SSE response
|
|
121
|
+
const responseContentType = response.headers.get("content-type");
|
|
122
|
+
const isSSE = handleStreaming &&
|
|
123
|
+
provider.isStreamingRequest(body) &&
|
|
124
|
+
responseContentType !== null &&
|
|
125
|
+
responseContentType.includes("text/event-stream");
|
|
126
|
+
if (isSSE && response.body !== null) {
|
|
127
|
+
return rehydrateSSEResponse(response, session, provider, config);
|
|
128
|
+
}
|
|
129
|
+
return rehydrateJSONResponse(response, session, provider);
|
|
83
130
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const upstreamRequest = new Request(request, {
|
|
88
|
-
body: JSON.stringify(anonymizedBody),
|
|
89
|
-
});
|
|
90
|
-
const response = await fetch(upstreamRequest);
|
|
91
|
-
// Determine if the response is a streaming SSE response
|
|
92
|
-
const responseContentType = response.headers.get("content-type");
|
|
93
|
-
const isSSE = handleStreaming &&
|
|
94
|
-
provider.isStreamingRequest(body) &&
|
|
95
|
-
responseContentType !== null &&
|
|
96
|
-
responseContentType.includes("text/event-stream");
|
|
97
|
-
if (isSSE && response.body !== null) {
|
|
98
|
-
return rehydrateSSEResponse(response, session, provider, config);
|
|
131
|
+
catch (err) {
|
|
132
|
+
const msg = err instanceof Error ? err.message : "Internal proxy error";
|
|
133
|
+
return errorResponse(500, msg);
|
|
99
134
|
}
|
|
100
|
-
return rehydrateJSONResponse(response, session, provider);
|
|
101
135
|
};
|
|
102
136
|
}
|
|
103
137
|
/**
|
|
104
138
|
* Rehydrate a non-streaming JSON response.
|
|
105
139
|
*/
|
|
106
140
|
async function rehydrateJSONResponse(response, session, provider) {
|
|
107
|
-
|
|
141
|
+
// Read raw text so we can fall back to it if JSON parsing fails
|
|
142
|
+
const rawText = await response.text();
|
|
143
|
+
let body;
|
|
144
|
+
try {
|
|
145
|
+
body = JSON.parse(rawText);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Upstream returned invalid JSON — pass through unchanged
|
|
149
|
+
return new Response(rawText, {
|
|
150
|
+
status: response.status,
|
|
151
|
+
statusText: response.statusText,
|
|
152
|
+
headers: response.headers,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
108
155
|
// Extract response text and rehydrate
|
|
109
156
|
const responseTexts = provider.extractResponseText(body);
|
|
110
157
|
const rehydratedTexts = [];
|
|
@@ -113,7 +160,20 @@ async function rehydrateJSONResponse(response, session, provider) {
|
|
|
113
160
|
rehydratedTexts.push(rehydrated);
|
|
114
161
|
}
|
|
115
162
|
// Rebuild response body
|
|
116
|
-
|
|
163
|
+
let rehydratedBody = provider.rebuildResponseBody(body, rehydratedTexts);
|
|
164
|
+
// Rehydrate tool call arguments
|
|
165
|
+
if (provider.extractResponseToolCalls !== undefined &&
|
|
166
|
+
provider.rebuildResponseToolCalls !== undefined) {
|
|
167
|
+
const toolCallArgs = provider.extractResponseToolCalls(rehydratedBody);
|
|
168
|
+
if (toolCallArgs.length > 0) {
|
|
169
|
+
const rehydratedArgs = [];
|
|
170
|
+
for (const arg of toolCallArgs) {
|
|
171
|
+
const rehydrated = await session.rehydrate(arg);
|
|
172
|
+
rehydratedArgs.push(rehydrated);
|
|
173
|
+
}
|
|
174
|
+
rehydratedBody = provider.rebuildResponseToolCalls(rehydratedBody, rehydratedArgs);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
117
177
|
return new Response(JSON.stringify(rehydratedBody), {
|
|
118
178
|
status: response.status,
|
|
119
179
|
statusText: response.statusText,
|
|
@@ -128,8 +188,12 @@ function rehydrateSSEResponse(response, session, provider, config) {
|
|
|
128
188
|
const sseParser = new SSEParser();
|
|
129
189
|
const decoder = new TextDecoder();
|
|
130
190
|
const encoder = new TextEncoder();
|
|
131
|
-
// Buffer for incomplete PII tags that span SSE chunks
|
|
191
|
+
// Buffer for incomplete PII tags that span SSE chunks (content)
|
|
132
192
|
let tagBuffer = "";
|
|
193
|
+
// Per-index buffers for tool call argument fragments
|
|
194
|
+
const toolCallBuffers = new Map();
|
|
195
|
+
// Last seen SSE event per tool call index (used as template during flush)
|
|
196
|
+
const toolCallLastEvent = new Map();
|
|
133
197
|
// We load the PII map once, lazily
|
|
134
198
|
let piiMapPromise = null;
|
|
135
199
|
function getPiiMap() {
|
|
@@ -162,34 +226,105 @@ function rehydrateSSEResponse(response, session, provider, config) {
|
|
|
162
226
|
controller.enqueue(encoder.encode(serializeSSEEvent(event)));
|
|
163
227
|
continue;
|
|
164
228
|
}
|
|
229
|
+
// Process content delta and tool call deltas from this event.
|
|
230
|
+
// In practice, LLM APIs send one or the other per event, but we
|
|
231
|
+
// handle both defensively by chaining rebuilds on the same parsed data.
|
|
232
|
+
let handled = false;
|
|
233
|
+
let rebuiltData = parsed;
|
|
234
|
+
// Content delta
|
|
165
235
|
const delta = provider.extractSSEDelta(parsed);
|
|
166
|
-
if (delta
|
|
167
|
-
|
|
168
|
-
|
|
236
|
+
if (delta !== null) {
|
|
237
|
+
handled = true;
|
|
238
|
+
const fullText = tagBuffer + delta;
|
|
239
|
+
const incompleteTagIdx = fullText.lastIndexOf("<PII");
|
|
240
|
+
const lastCloseIdx = fullText.lastIndexOf("/>");
|
|
241
|
+
let textToRehydrate;
|
|
242
|
+
if (incompleteTagIdx !== -1 &&
|
|
243
|
+
(lastCloseIdx === -1 || lastCloseIdx < incompleteTagIdx)) {
|
|
244
|
+
textToRehydrate = fullText.slice(0, incompleteTagIdx);
|
|
245
|
+
tagBuffer = fullText.slice(incompleteTagIdx);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
textToRehydrate = fullText;
|
|
249
|
+
tagBuffer = "";
|
|
250
|
+
}
|
|
251
|
+
if (textToRehydrate.length > 0) {
|
|
252
|
+
const piiMap = await getPiiMap();
|
|
253
|
+
const rehydrated = rehydrate(textToRehydrate, piiMap);
|
|
254
|
+
rebuiltData = provider.rebuildSSEDelta(rebuiltData, rehydrated);
|
|
255
|
+
}
|
|
169
256
|
}
|
|
170
|
-
//
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
257
|
+
// Tool call deltas
|
|
258
|
+
if (provider.extractSSEToolCallDeltas !== undefined && provider.rebuildSSEToolCallDeltas !== undefined) {
|
|
259
|
+
const toolDeltas = provider.extractSSEToolCallDeltas(parsed);
|
|
260
|
+
if (toolDeltas !== null && toolDeltas.length > 0) {
|
|
261
|
+
handled = true;
|
|
262
|
+
const rehydratedArgs = new Map();
|
|
263
|
+
for (const td of toolDeltas) {
|
|
264
|
+
toolCallLastEvent.set(td.index, {
|
|
265
|
+
sseEvent: event.event,
|
|
266
|
+
parsed,
|
|
267
|
+
});
|
|
268
|
+
const existing = toolCallBuffers.get(td.index) ?? "";
|
|
269
|
+
const fullText = existing + td.arguments;
|
|
270
|
+
const incompleteTagIdx = fullText.lastIndexOf("<PII");
|
|
271
|
+
const lastCloseIdx = fullText.lastIndexOf("/>");
|
|
272
|
+
let textToRehydrate;
|
|
273
|
+
if (incompleteTagIdx !== -1 &&
|
|
274
|
+
(lastCloseIdx === -1 || lastCloseIdx < incompleteTagIdx)) {
|
|
275
|
+
textToRehydrate = fullText.slice(0, incompleteTagIdx);
|
|
276
|
+
toolCallBuffers.set(td.index, fullText.slice(incompleteTagIdx));
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
textToRehydrate = fullText;
|
|
280
|
+
toolCallBuffers.set(td.index, "");
|
|
281
|
+
}
|
|
282
|
+
if (textToRehydrate.length > 0) {
|
|
283
|
+
const piiMap = await getPiiMap();
|
|
284
|
+
const rehydrated = rehydrate(textToRehydrate, piiMap);
|
|
285
|
+
rehydratedArgs.set(td.index, rehydrated);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (rehydratedArgs.size > 0) {
|
|
289
|
+
rebuiltData = provider.rebuildSSEToolCallDeltas(rebuiltData, rehydratedArgs);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
179
292
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
293
|
+
if (handled) {
|
|
294
|
+
if (rebuiltData !== parsed) {
|
|
295
|
+
controller.enqueue(encoder.encode(serializeSSEEvent({
|
|
296
|
+
event: event.event,
|
|
297
|
+
data: JSON.stringify(rebuiltData),
|
|
298
|
+
})));
|
|
299
|
+
}
|
|
300
|
+
continue;
|
|
183
301
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
302
|
+
// Check for tool call block stop — flush buffer before forwarding
|
|
303
|
+
if (provider.extractSSEToolCallStop !== undefined &&
|
|
304
|
+
provider.rebuildSSEToolCallDeltas !== undefined) {
|
|
305
|
+
const stopIndex = provider.extractSSEToolCallStop(parsed);
|
|
306
|
+
if (stopIndex !== null) {
|
|
307
|
+
const buffer = toolCallBuffers.get(stopIndex) ?? "";
|
|
308
|
+
if (buffer.length > 0) {
|
|
309
|
+
const piiMap = await getPiiMap();
|
|
310
|
+
const rehydrated = rehydrate(buffer, piiMap);
|
|
311
|
+
if (rehydrated.length > 0) {
|
|
312
|
+
const last = toolCallLastEvent.get(stopIndex);
|
|
313
|
+
if (last !== undefined) {
|
|
314
|
+
const rebuilt = provider.rebuildSSEToolCallDeltas(last.parsed, new Map([[stopIndex, rehydrated]]));
|
|
315
|
+
controller.enqueue(encoder.encode(serializeSSEEvent({
|
|
316
|
+
event: last.sseEvent,
|
|
317
|
+
data: JSON.stringify(rebuilt),
|
|
318
|
+
})));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
toolCallBuffers.delete(stopIndex);
|
|
322
|
+
toolCallLastEvent.delete(stopIndex);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
192
325
|
}
|
|
326
|
+
// Pass through as-is
|
|
327
|
+
controller.enqueue(encoder.encode(serializeSSEEvent(event)));
|
|
193
328
|
}
|
|
194
329
|
},
|
|
195
330
|
async flush(controller) {
|
|
@@ -205,6 +340,27 @@ function rehydrateSSEResponse(response, session, provider, config) {
|
|
|
205
340
|
}
|
|
206
341
|
tagBuffer = "";
|
|
207
342
|
}
|
|
343
|
+
// Flush remaining tool call buffers
|
|
344
|
+
if (provider.rebuildSSEToolCallDeltas !== undefined) {
|
|
345
|
+
for (const [index, buffer] of toolCallBuffers) {
|
|
346
|
+
if (buffer.length > 0) {
|
|
347
|
+
const piiMap = await getPiiMap();
|
|
348
|
+
const rehydrated = rehydrate(buffer, piiMap);
|
|
349
|
+
if (rehydrated.length > 0) {
|
|
350
|
+
const last = toolCallLastEvent.get(index);
|
|
351
|
+
if (last !== undefined) {
|
|
352
|
+
const rebuilt = provider.rebuildSSEToolCallDeltas(last.parsed, new Map([[index, rehydrated]]));
|
|
353
|
+
controller.enqueue(encoder.encode(serializeSSEEvent({
|
|
354
|
+
event: last.sseEvent,
|
|
355
|
+
data: JSON.stringify(rebuilt),
|
|
356
|
+
})));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
toolCallBuffers.clear();
|
|
362
|
+
toolCallLastEvent.clear();
|
|
363
|
+
}
|
|
208
364
|
},
|
|
209
365
|
});
|
|
210
366
|
const transformedBody = response.body.pipeThrough(transformStream);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehydra-fetch.js","sourceRoot":"","sources":["../../src/proxy/rehydra-fetch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rehydra-fetch.js","sourceRoot":"","sources":["../../src/proxy/rehydra-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export { creditCardRecognizer, identifyCardType } from './credit-card.js';
|
|
|
12
12
|
export { ipAddressRecognizer, isInternalIPv4 } from './ip-address.js';
|
|
13
13
|
export { urlRecognizer, extractDomain } from './url.js';
|
|
14
14
|
export { createCustomIdRecognizer, createCaseIdRecognizer, createCustomerIdRecognizer, COMMON_ID_PATTERNS, isStructuredId, } from './custom-id.js';
|
|
15
|
+
export { createSecretRecognizers } from './secrets/index.js';
|
|
16
|
+
export * from './secrets/index.js';
|
|
15
17
|
import { RecognizerRegistry } from './registry.js';
|
|
16
18
|
/**
|
|
17
19
|
* Creates a registry with all default recognizers registered
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recognizers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAUnD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAiB1D"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recognizers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAUnD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAiB1D"}
|
|
@@ -12,6 +12,8 @@ export { creditCardRecognizer, identifyCardType } from './credit-card.js';
|
|
|
12
12
|
export { ipAddressRecognizer, isInternalIPv4 } from './ip-address.js';
|
|
13
13
|
export { urlRecognizer, extractDomain } from './url.js';
|
|
14
14
|
export { createCustomIdRecognizer, createCaseIdRecognizer, createCustomerIdRecognizer, COMMON_ID_PATTERNS, isStructuredId, } from './custom-id.js';
|
|
15
|
+
export { createSecretRecognizers } from './secrets/index.js';
|
|
16
|
+
export * from './secrets/index.js';
|
|
15
17
|
import { RecognizerRegistry } from './registry.js';
|
|
16
18
|
import { emailRecognizer } from './email.js';
|
|
17
19
|
import { phoneRecognizer } from './phone.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recognizers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE1C,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEjC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEhD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recognizers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE1C,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEjC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEhD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,gBAAgB,iCA+B3B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Recognizer
|
|
3
|
+
* Detects provider-specific API key patterns
|
|
4
|
+
*/
|
|
5
|
+
import { createRegexRecognizer } from "../base.js";
|
|
6
|
+
import { PIIType } from "../../types/index.js";
|
|
7
|
+
export const apiKeyRecognizer = createRegexRecognizer({
|
|
8
|
+
type: PIIType.API_KEY,
|
|
9
|
+
name: "API Key",
|
|
10
|
+
defaultConfidence: 0.97,
|
|
11
|
+
patterns: [
|
|
12
|
+
// OpenAI
|
|
13
|
+
/\bsk-proj-[A-Za-z0-9_-]{20,}\b/g,
|
|
14
|
+
/\bsk-[A-Za-z0-9]{20,}\b/g,
|
|
15
|
+
// Anthropic
|
|
16
|
+
/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g,
|
|
17
|
+
// GitHub (PAT, OAuth, App, Installation, Refresh)
|
|
18
|
+
/\bgh[pousr]_[A-Za-z0-9]{36,}\b/g,
|
|
19
|
+
// Stripe
|
|
20
|
+
/\b[sr]k_(?:live|test)_[A-Za-z0-9]{24,}\b/g,
|
|
21
|
+
// Slack bot/user tokens
|
|
22
|
+
/\bxox[bpas]-[0-9]{10,}-[A-Za-z0-9-]+/g,
|
|
23
|
+
// SendGrid
|
|
24
|
+
/\bSG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\b/g,
|
|
25
|
+
// Twilio
|
|
26
|
+
/\bSK[a-f0-9]{32}\b/g,
|
|
27
|
+
// Mailgun
|
|
28
|
+
/\bkey-[a-f0-9]{32}\b/g,
|
|
29
|
+
// Heroku
|
|
30
|
+
/\b[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\b/g,
|
|
31
|
+
],
|
|
32
|
+
validate(match) {
|
|
33
|
+
// Heroku-style UUIDs are too generic without context — skip them
|
|
34
|
+
if (/^[a-f0-9]{8}-[a-f0-9]{4}-/.test(match))
|
|
35
|
+
return false;
|
|
36
|
+
// Must be at least 20 chars for non-prefixed patterns
|
|
37
|
+
return match.length >= 20;
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;IACpD,IAAI,EAAE,OAAO,CAAC,OAAO;IACrB,IAAI,EAAE,SAAS;IACf,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE;QACR,SAAS;QACT,iCAAiC;QACjC,0BAA0B;QAC1B,YAAY;QACZ,gCAAgC;QAChC,kDAAkD;QAClD,iCAAiC;QACjC,SAAS;QACT,2CAA2C;QAC3C,wBAAwB;QACxB,uCAAuC;QACvC,WAAW;QACX,+CAA+C;QAC/C,SAAS;QACT,qBAAqB;QACrB,UAAU;QACV,uBAAuB;QACvB,SAAS;QACT,mEAAmE;KACpE;IACD,QAAQ,CAAC,KAAa;QACpB,iEAAiE;QACjE,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,sDAAsD;QACtD,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Credentials Recognizer
|
|
3
|
+
* Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export declare const awsCredentialsRecognizer: Recognizer;
|
|
7
|
+
//# sourceMappingURL=aws-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-credentials.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,eAAO,MAAM,wBAAwB,EAAE,UA2DtC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Credentials Recognizer
|
|
3
|
+
* Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from "../../types/index.js";
|
|
6
|
+
const AWS_ACCESS_KEY_PATTERN = /\bAKIA[A-Z0-9]{16}\b/g;
|
|
7
|
+
const AWS_SECRET_CONTEXT_KEYWORDS = /(?:aws_secret_access_key|secret_access_key|aws_secret|secretaccesskey)/i;
|
|
8
|
+
const AWS_SECRET_KEY_PATTERN = /\b[A-Za-z0-9/+=]{40}\b/g;
|
|
9
|
+
export const awsCredentialsRecognizer = {
|
|
10
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
11
|
+
name: "AWS Credentials",
|
|
12
|
+
defaultConfidence: 0.98,
|
|
13
|
+
find(text) {
|
|
14
|
+
const matches = [];
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
// Always detect AKIA access key IDs (high confidence, distinctive prefix)
|
|
17
|
+
for (const match of text.matchAll(AWS_ACCESS_KEY_PATTERN)) {
|
|
18
|
+
if (match.index === undefined)
|
|
19
|
+
continue;
|
|
20
|
+
const key = `${match.index}:${match.index + match[0].length}`;
|
|
21
|
+
if (seen.has(key))
|
|
22
|
+
continue;
|
|
23
|
+
seen.add(key);
|
|
24
|
+
matches.push({
|
|
25
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
26
|
+
start: match.index,
|
|
27
|
+
end: match.index + match[0].length,
|
|
28
|
+
confidence: 0.98,
|
|
29
|
+
source: DetectionSource.REGEX,
|
|
30
|
+
text: match[0],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Only scan for 40-char secret keys if there's context suggesting AWS secrets
|
|
34
|
+
if (AWS_SECRET_CONTEXT_KEYWORDS.test(text)) {
|
|
35
|
+
for (const match of text.matchAll(AWS_SECRET_KEY_PATTERN)) {
|
|
36
|
+
if (match.index === undefined)
|
|
37
|
+
continue;
|
|
38
|
+
const matchText = match[0];
|
|
39
|
+
const key = `${match.index}:${match.index + matchText.length}`;
|
|
40
|
+
if (seen.has(key))
|
|
41
|
+
continue;
|
|
42
|
+
// Must contain mixed case + digits/special to look like a secret
|
|
43
|
+
if (!/[a-z]/.test(matchText) || !/[A-Z]/.test(matchText))
|
|
44
|
+
continue;
|
|
45
|
+
if (!/[0-9/+=]/.test(matchText))
|
|
46
|
+
continue;
|
|
47
|
+
seen.add(key);
|
|
48
|
+
matches.push({
|
|
49
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
50
|
+
start: match.index,
|
|
51
|
+
end: match.index + matchText.length,
|
|
52
|
+
confidence: 0.85,
|
|
53
|
+
source: DetectionSource.REGEX,
|
|
54
|
+
text: matchText,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return matches;
|
|
59
|
+
},
|
|
60
|
+
validate(match) {
|
|
61
|
+
// AKIA keys are always valid
|
|
62
|
+
if (match.startsWith("AKIA") && match.length === 20)
|
|
63
|
+
return true;
|
|
64
|
+
// Secret keys must be exactly 40 chars
|
|
65
|
+
return match.length === 40;
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=aws-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-credentials.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Secret Recognizer
|
|
3
|
+
* Detects key-value secrets in JSON, YAML, and TOML
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export declare function createConfigSecretRecognizer(minValueLength?: number, extraKeyPatterns?: RegExp[]): Recognizer;
|
|
7
|
+
export declare const configSecretRecognizer: Recognizer;
|
|
8
|
+
//# sourceMappingURL=config-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-secret.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/config-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAc7C,wBAAgB,4BAA4B,CAC1C,cAAc,GAAE,MAA2B,EAC3C,gBAAgB,GAAE,MAAM,EAAO,GAC9B,UAAU,CA8CZ;AAED,eAAO,MAAM,sBAAsB,YAAiC,CAAC"}
|