rehydra 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +170 -760
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/proxy/index.d.ts +12 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +11 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/providers/anthropic.d.ts +17 -0
- package/dist/proxy/providers/anthropic.d.ts.map +1 -0
- package/dist/proxy/providers/anthropic.js +117 -0
- package/dist/proxy/providers/anthropic.js.map +1 -0
- package/dist/proxy/providers/index.d.ts +19 -0
- package/dist/proxy/providers/index.d.ts.map +1 -0
- package/dist/proxy/providers/index.js +40 -0
- package/dist/proxy/providers/index.js.map +1 -0
- package/dist/proxy/providers/openai.d.ts +17 -0
- package/dist/proxy/providers/openai.d.ts.map +1 -0
- package/dist/proxy/providers/openai.js +92 -0
- package/dist/proxy/providers/openai.js.map +1 -0
- package/dist/proxy/providers/types.d.ts +29 -0
- package/dist/proxy/providers/types.d.ts.map +1 -0
- package/dist/proxy/providers/types.js +6 -0
- package/dist/proxy/providers/types.js.map +1 -0
- package/dist/proxy/proxy-server.d.ts +53 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -0
- package/dist/proxy/proxy-server.js +146 -0
- package/dist/proxy/proxy-server.js.map +1 -0
- package/dist/proxy/rehydra-fetch.d.ts +35 -0
- package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
- package/dist/proxy/rehydra-fetch.js +217 -0
- package/dist/proxy/rehydra-fetch.js.map +1 -0
- package/dist/proxy/rehydra-proxy.d.ts +40 -0
- package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
- package/dist/proxy/rehydra-proxy.js +82 -0
- package/dist/proxy/rehydra-proxy.js.map +1 -0
- package/dist/proxy/sse-parser.d.ts +59 -0
- package/dist/proxy/sse-parser.d.ts.map +1 -0
- package/dist/proxy/sse-parser.js +112 -0
- package/dist/proxy/sse-parser.js.map +1 -0
- package/dist/proxy/types.d.ts +49 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +5 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/proxy/wrap-client.d.ts +47 -0
- package/dist/proxy/wrap-client.d.ts.map +1 -0
- package/dist/proxy/wrap-client.js +70 -0
- package/dist/proxy/wrap-client.js.map +1 -0
- package/dist/storage/session.d.ts +3 -0
- package/dist/storage/session.d.ts.map +1 -1
- package/dist/storage/session.js +16 -0
- package/dist/storage/session.js.map +1 -1
- package/dist/storage/types.d.ts +16 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/streaming/anonymizer-stream.d.ts +63 -0
- package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
- package/dist/streaming/anonymizer-stream.js +184 -0
- package/dist/streaming/anonymizer-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +9 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +8 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/sentence-buffer.d.ts +78 -0
- package/dist/streaming/sentence-buffer.d.ts.map +1 -0
- package/dist/streaming/sentence-buffer.js +238 -0
- package/dist/streaming/sentence-buffer.js.map +1 -0
- package/dist/streaming/stream-factory.d.ts +38 -0
- package/dist/streaming/stream-factory.d.ts.map +1 -0
- package/dist/streaming/stream-factory.js +69 -0
- package/dist/streaming/stream-factory.js.map +1 -0
- package/dist/streaming/types.d.ts +121 -0
- package/dist/streaming/types.d.ts.map +1 -0
- package/dist/streaming/types.js +5 -0
- package/dist/streaming/types.js.map +1 -0
- package/package.json +18 -1
package/dist/index.d.ts
CHANGED
|
@@ -48,4 +48,6 @@ export declare function createAnonymizer(config?: AnonymizerConfig): Anonymizer;
|
|
|
48
48
|
export declare const anonymize: typeof anonymizeCore;
|
|
49
49
|
export declare const anonymizeRegexOnly: typeof anonymizeRegexOnlyCore;
|
|
50
50
|
export declare const anonymizeWithNER: typeof anonymizeWithNERCore;
|
|
51
|
+
export { AnonymizerStream, createAnonymizerStream, SentenceBuffer, type StreamConfig, type SentenceBufferConfig, type StreamChunkEvent, type StreamFinishEvent, } from "./streaming/index.js";
|
|
52
|
+
export { createRehydraFetch, createRehydraProxy, createRehydraProxyServer, wrapLLMClient, SSEParser, detectProvider, OpenAIProvider, AnthropicProvider, type RehydraFetchConfig, type RehydraProxyConfig, type RehydraProxyServerConfig, type RehydraProxyServer, type LLMContentProvider, type SSEEvent, } from "./proxy/index.js";
|
|
51
53
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -66,4 +66,8 @@ export function createAnonymizer(config) {
|
|
|
66
66
|
export const anonymize = anonymizeCore;
|
|
67
67
|
export const anonymizeRegexOnly = anonymizeRegexOnlyCore;
|
|
68
68
|
export const anonymizeWithNER = anonymizeWithNERCore;
|
|
69
|
+
// Re-export streaming module (Node.js/Bun only)
|
|
70
|
+
export { AnonymizerStream, createAnonymizerStream, SentenceBuffer, } from "./streaming/index.js";
|
|
71
|
+
// Re-export proxy module (Node.js/Bun only)
|
|
72
|
+
export { createRehydraFetch, createRehydraProxy, createRehydraProxyServer, wrapLLMClient, SSEParser, detectProvider, OpenAIProvider, AnthropicProvider, } from "./proxy/index.js";
|
|
69
73
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Middleware Module
|
|
3
|
+
* Node.js/Bun only — not available in browser builds.
|
|
4
|
+
*/
|
|
5
|
+
export { createRehydraFetch } from "./rehydra-fetch.js";
|
|
6
|
+
export { createRehydraProxy } from "./rehydra-proxy.js";
|
|
7
|
+
export { wrapLLMClient } from "./wrap-client.js";
|
|
8
|
+
export { createRehydraProxyServer, type RehydraProxyServerConfig, type RehydraProxyServer, } from "./proxy-server.js";
|
|
9
|
+
export { SSEParser, isSSEDone, serializeSSEEvent, type SSEEvent } from "./sse-parser.js";
|
|
10
|
+
export { detectProvider, OpenAIProvider, AnthropicProvider, type LLMContentProvider, } from "./providers/index.js";
|
|
11
|
+
export type { RehydraFetchConfig, RehydraProxyConfig } from "./types.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Middleware Module
|
|
3
|
+
* Node.js/Bun only — not available in browser builds.
|
|
4
|
+
*/
|
|
5
|
+
export { createRehydraFetch } from "./rehydra-fetch.js";
|
|
6
|
+
export { createRehydraProxy } from "./rehydra-proxy.js";
|
|
7
|
+
export { wrapLLMClient } from "./wrap-client.js";
|
|
8
|
+
export { createRehydraProxyServer, } from "./proxy-server.js";
|
|
9
|
+
export { SSEParser, isSSEDone, serializeSSEEvent } from "./sse-parser.js";
|
|
10
|
+
export { detectProvider, OpenAIProvider, AnthropicProvider, } from "./providers/index.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,wBAAwB,GAGzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACzF,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAElB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Content Provider
|
|
3
|
+
* Handles Anthropic Messages API format.
|
|
4
|
+
*/
|
|
5
|
+
import type { LLMContentProvider } from "./types.js";
|
|
6
|
+
export declare class AnthropicProvider implements LLMContentProvider {
|
|
7
|
+
readonly name = "anthropic";
|
|
8
|
+
matchesRequest(url: string, headers: Headers): boolean;
|
|
9
|
+
extractRequestText(body: unknown): string[];
|
|
10
|
+
rebuildRequestBody(body: unknown, anonymizedTexts: string[]): unknown;
|
|
11
|
+
extractResponseText(body: unknown): string[];
|
|
12
|
+
rebuildResponseBody(body: unknown, rehydratedTexts: string[]): unknown;
|
|
13
|
+
extractSSEDelta(data: unknown): string | null;
|
|
14
|
+
rebuildSSEDelta(data: unknown, rehydratedText: string): unknown;
|
|
15
|
+
isStreamingRequest(body: unknown): boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/proxy/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAqCrD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,QAAQ,CAAC,IAAI,eAAe;IAE5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAOtD,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE;IAgC3C,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO;IA8BrE,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE;IAa5C,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO;IAYtE,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAQ7C,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO;IAQ/D,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAI3C"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Content Provider
|
|
3
|
+
* Handles Anthropic Messages API format.
|
|
4
|
+
*/
|
|
5
|
+
export class AnthropicProvider {
|
|
6
|
+
name = "anthropic";
|
|
7
|
+
matchesRequest(url, headers) {
|
|
8
|
+
if (url.includes("api.anthropic.com"))
|
|
9
|
+
return true;
|
|
10
|
+
if (headers.has("x-api-key"))
|
|
11
|
+
return true;
|
|
12
|
+
if (headers.has("anthropic-version"))
|
|
13
|
+
return true;
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
extractRequestText(body) {
|
|
17
|
+
const req = body;
|
|
18
|
+
const texts = [];
|
|
19
|
+
// Extract system prompt
|
|
20
|
+
if (typeof req.system === "string") {
|
|
21
|
+
texts.push(req.system);
|
|
22
|
+
}
|
|
23
|
+
else if (Array.isArray(req.system)) {
|
|
24
|
+
for (const block of req.system) {
|
|
25
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
26
|
+
texts.push(block.text);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Extract messages
|
|
31
|
+
if (req.messages === undefined || !Array.isArray(req.messages))
|
|
32
|
+
return texts;
|
|
33
|
+
for (const message of req.messages) {
|
|
34
|
+
if (typeof message.content === "string") {
|
|
35
|
+
texts.push(message.content);
|
|
36
|
+
}
|
|
37
|
+
else if (Array.isArray(message.content)) {
|
|
38
|
+
for (const block of message.content) {
|
|
39
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
40
|
+
texts.push(block.text);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return texts;
|
|
46
|
+
}
|
|
47
|
+
rebuildRequestBody(body, anonymizedTexts) {
|
|
48
|
+
const req = structuredClone(body);
|
|
49
|
+
let idx = 0;
|
|
50
|
+
// Rebuild system prompt
|
|
51
|
+
if (typeof req.system === "string") {
|
|
52
|
+
req.system = anonymizedTexts[idx++];
|
|
53
|
+
}
|
|
54
|
+
else if (Array.isArray(req.system)) {
|
|
55
|
+
for (const block of req.system) {
|
|
56
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
57
|
+
block.text = anonymizedTexts[idx++];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Rebuild messages
|
|
62
|
+
for (const message of req.messages) {
|
|
63
|
+
if (typeof message.content === "string") {
|
|
64
|
+
message.content = anonymizedTexts[idx++];
|
|
65
|
+
}
|
|
66
|
+
else if (Array.isArray(message.content)) {
|
|
67
|
+
for (const block of message.content) {
|
|
68
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
69
|
+
block.text = anonymizedTexts[idx++];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return req;
|
|
75
|
+
}
|
|
76
|
+
extractResponseText(body) {
|
|
77
|
+
const res = body;
|
|
78
|
+
if (res.content === undefined || !Array.isArray(res.content))
|
|
79
|
+
return [];
|
|
80
|
+
const texts = [];
|
|
81
|
+
for (const block of res.content) {
|
|
82
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
83
|
+
texts.push(block.text);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return texts;
|
|
87
|
+
}
|
|
88
|
+
rebuildResponseBody(body, rehydratedTexts) {
|
|
89
|
+
const res = structuredClone(body);
|
|
90
|
+
let idx = 0;
|
|
91
|
+
for (const block of res.content) {
|
|
92
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
93
|
+
block.text = rehydratedTexts[idx++];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return res;
|
|
97
|
+
}
|
|
98
|
+
extractSSEDelta(data) {
|
|
99
|
+
const event = data;
|
|
100
|
+
if (event.type === "content_block_delta" && event.delta?.type === "text_delta") {
|
|
101
|
+
return typeof event.delta.text === "string" ? event.delta.text : null;
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
rebuildSSEDelta(data, rehydratedText) {
|
|
106
|
+
const event = structuredClone(data);
|
|
107
|
+
if (event.delta !== undefined) {
|
|
108
|
+
event.delta.text = rehydratedText;
|
|
109
|
+
}
|
|
110
|
+
return event;
|
|
111
|
+
}
|
|
112
|
+
isStreamingRequest(body) {
|
|
113
|
+
const req = body;
|
|
114
|
+
return req.stream === true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/proxy/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Content Provider Registry
|
|
3
|
+
* Auto-detects the appropriate provider based on request URL/headers.
|
|
4
|
+
*/
|
|
5
|
+
import type { LLMContentProvider } from "./types.js";
|
|
6
|
+
export type { LLMContentProvider } from "./types.js";
|
|
7
|
+
export { OpenAIProvider } from "./openai.js";
|
|
8
|
+
export { AnthropicProvider } from "./anthropic.js";
|
|
9
|
+
/**
|
|
10
|
+
* Detect the appropriate LLM content provider for a request.
|
|
11
|
+
*
|
|
12
|
+
* @param url - The request URL
|
|
13
|
+
* @param headers - The request headers
|
|
14
|
+
* @param hint - Optional provider name hint (skips auto-detection)
|
|
15
|
+
* @returns The matching provider
|
|
16
|
+
* @throws Error if no provider matches and no hint given
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectProvider(url: string, headers: Headers, hint?: "openai" | "anthropic" | "auto"): LLMContentProvider;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proxy/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GACrC,kBAAkB,CAiBpB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Content Provider Registry
|
|
3
|
+
* Auto-detects the appropriate provider based on request URL/headers.
|
|
4
|
+
*/
|
|
5
|
+
import { OpenAIProvider } from "./openai.js";
|
|
6
|
+
import { AnthropicProvider } from "./anthropic.js";
|
|
7
|
+
export { OpenAIProvider } from "./openai.js";
|
|
8
|
+
export { AnthropicProvider } from "./anthropic.js";
|
|
9
|
+
/** Built-in providers */
|
|
10
|
+
const PROVIDERS = [
|
|
11
|
+
new OpenAIProvider(),
|
|
12
|
+
new AnthropicProvider(),
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Detect the appropriate LLM content provider for a request.
|
|
16
|
+
*
|
|
17
|
+
* @param url - The request URL
|
|
18
|
+
* @param headers - The request headers
|
|
19
|
+
* @param hint - Optional provider name hint (skips auto-detection)
|
|
20
|
+
* @returns The matching provider
|
|
21
|
+
* @throws Error if no provider matches and no hint given
|
|
22
|
+
*/
|
|
23
|
+
export function detectProvider(url, headers, hint) {
|
|
24
|
+
// If a specific provider is requested, return it directly
|
|
25
|
+
if (hint && hint !== "auto") {
|
|
26
|
+
const provider = PROVIDERS.find((p) => p.name === hint);
|
|
27
|
+
if (provider)
|
|
28
|
+
return provider;
|
|
29
|
+
throw new Error(`Unknown LLM provider: ${hint}`);
|
|
30
|
+
}
|
|
31
|
+
// Auto-detect from URL and headers
|
|
32
|
+
for (const provider of PROVIDERS) {
|
|
33
|
+
if (provider.matchesRequest(url, headers)) {
|
|
34
|
+
return provider;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Default to OpenAI format (most common / compatible)
|
|
38
|
+
return PROVIDERS[0];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/proxy/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,yBAAyB;AACzB,MAAM,SAAS,GAAyB;IACtC,IAAI,cAAc,EAAE;IACpB,IAAI,iBAAiB,EAAE;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,OAAgB,EAChB,IAAsC;IAEtC,0DAA0D;IAC1D,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACxD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,OAAO,SAAS,CAAC,CAAC,CAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Content Provider
|
|
3
|
+
* Handles OpenAI Chat Completions API format.
|
|
4
|
+
*/
|
|
5
|
+
import type { LLMContentProvider } from "./types.js";
|
|
6
|
+
export declare class OpenAIProvider implements LLMContentProvider {
|
|
7
|
+
readonly name = "openai";
|
|
8
|
+
matchesRequest(url: string, headers: Headers): boolean;
|
|
9
|
+
extractRequestText(body: unknown): string[];
|
|
10
|
+
rebuildRequestBody(body: unknown, anonymizedTexts: string[]): unknown;
|
|
11
|
+
extractResponseText(body: unknown): string[];
|
|
12
|
+
rebuildResponseBody(body: unknown, rehydratedTexts: string[]): unknown;
|
|
13
|
+
extractSSEDelta(data: unknown): string | null;
|
|
14
|
+
rebuildSSEDelta(data: unknown, rehydratedText: string): unknown;
|
|
15
|
+
isStreamingRequest(body: unknown): boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/proxy/providers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2CrD,qBAAa,cAAe,YAAW,kBAAkB;IACvD,QAAQ,CAAC,IAAI,YAAY;IAEzB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAOtD,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE;IAmB3C,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO;IAkBrE,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE;IAa5C,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO;IAYtE,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAO7C,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO;IAQ/D,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAI3C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Content Provider
|
|
3
|
+
* Handles OpenAI Chat Completions API format.
|
|
4
|
+
*/
|
|
5
|
+
export class OpenAIProvider {
|
|
6
|
+
name = "openai";
|
|
7
|
+
matchesRequest(url, headers) {
|
|
8
|
+
if (url.includes("api.openai.com"))
|
|
9
|
+
return true;
|
|
10
|
+
const auth = headers.get("authorization");
|
|
11
|
+
if (auth !== null && auth.startsWith("Bearer sk-"))
|
|
12
|
+
return true;
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
extractRequestText(body) {
|
|
16
|
+
const req = body;
|
|
17
|
+
if (req.messages === undefined || !Array.isArray(req.messages))
|
|
18
|
+
return [];
|
|
19
|
+
const texts = [];
|
|
20
|
+
for (const message of req.messages) {
|
|
21
|
+
if (typeof message.content === "string") {
|
|
22
|
+
texts.push(message.content);
|
|
23
|
+
}
|
|
24
|
+
else if (Array.isArray(message.content)) {
|
|
25
|
+
for (const part of message.content) {
|
|
26
|
+
if (part.type === "text" && typeof part.text === "string") {
|
|
27
|
+
texts.push(part.text);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return texts;
|
|
33
|
+
}
|
|
34
|
+
rebuildRequestBody(body, anonymizedTexts) {
|
|
35
|
+
const req = structuredClone(body);
|
|
36
|
+
let idx = 0;
|
|
37
|
+
for (const message of req.messages) {
|
|
38
|
+
if (typeof message.content === "string") {
|
|
39
|
+
message.content = anonymizedTexts[idx++];
|
|
40
|
+
}
|
|
41
|
+
else if (Array.isArray(message.content)) {
|
|
42
|
+
for (const part of message.content) {
|
|
43
|
+
if (part.type === "text" && typeof part.text === "string") {
|
|
44
|
+
part.text = anonymizedTexts[idx++];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return req;
|
|
50
|
+
}
|
|
51
|
+
extractResponseText(body) {
|
|
52
|
+
const res = body;
|
|
53
|
+
if (res.choices === undefined || !Array.isArray(res.choices))
|
|
54
|
+
return [];
|
|
55
|
+
const texts = [];
|
|
56
|
+
for (const choice of res.choices) {
|
|
57
|
+
if (typeof choice.message?.content === "string") {
|
|
58
|
+
texts.push(choice.message.content);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return texts;
|
|
62
|
+
}
|
|
63
|
+
rebuildResponseBody(body, rehydratedTexts) {
|
|
64
|
+
const res = structuredClone(body);
|
|
65
|
+
let idx = 0;
|
|
66
|
+
for (const choice of res.choices) {
|
|
67
|
+
if (typeof choice.message?.content === "string") {
|
|
68
|
+
choice.message.content = rehydratedTexts[idx++];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return res;
|
|
72
|
+
}
|
|
73
|
+
extractSSEDelta(data) {
|
|
74
|
+
const chunk = data;
|
|
75
|
+
const content = chunk.choices?.[0]?.delta?.content;
|
|
76
|
+
if (content === undefined || content === null)
|
|
77
|
+
return null;
|
|
78
|
+
return typeof content === "string" ? content : null;
|
|
79
|
+
}
|
|
80
|
+
rebuildSSEDelta(data, rehydratedText) {
|
|
81
|
+
const chunk = structuredClone(data);
|
|
82
|
+
if (chunk.choices?.[0]?.delta !== undefined) {
|
|
83
|
+
chunk.choices[0].delta.content = rehydratedText;
|
|
84
|
+
}
|
|
85
|
+
return chunk;
|
|
86
|
+
}
|
|
87
|
+
isStreamingRequest(body) {
|
|
88
|
+
const req = body;
|
|
89
|
+
return req.stream === true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/proxy/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Content Provider Interface
|
|
3
|
+
* Abstracts LLM-specific request/response formats for the proxy middleware.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Interface for extracting and rebuilding text content from LLM API requests/responses.
|
|
7
|
+
* Each provider handles a specific LLM API format (OpenAI, Anthropic, etc.).
|
|
8
|
+
*/
|
|
9
|
+
export interface LLMContentProvider {
|
|
10
|
+
/** Provider name (e.g., "openai", "anthropic") */
|
|
11
|
+
readonly name: string;
|
|
12
|
+
/** Detect if a request matches this provider based on URL/headers */
|
|
13
|
+
matchesRequest(url: string, headers: Headers): boolean;
|
|
14
|
+
/** Extract text strings from a request body for anonymization */
|
|
15
|
+
extractRequestText(body: unknown): string[];
|
|
16
|
+
/** Rebuild the request body with anonymized text (same order as extractRequestText) */
|
|
17
|
+
rebuildRequestBody(body: unknown, anonymizedTexts: string[]): unknown;
|
|
18
|
+
/** Extract text strings from a non-streaming response body for rehydration */
|
|
19
|
+
extractResponseText(body: unknown): string[];
|
|
20
|
+
/** Rebuild the response body with rehydrated text (same order as extractResponseText) */
|
|
21
|
+
rebuildResponseBody(body: unknown, rehydratedTexts: string[]): unknown;
|
|
22
|
+
/** Extract text delta from a parsed SSE data payload (returns null if no text content) */
|
|
23
|
+
extractSSEDelta(data: unknown): string | null;
|
|
24
|
+
/** Rebuild an SSE data payload with rehydrated text */
|
|
25
|
+
rebuildSSEDelta(data: unknown, rehydratedText: string): unknown;
|
|
26
|
+
/** Check if the request body indicates a streaming response is expected */
|
|
27
|
+
isStreamingRequest(body: unknown): boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/proxy/providers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rehydra Proxy Server
|
|
3
|
+
* Standalone HTTP server that proxies LLM API requests with
|
|
4
|
+
* automatic PII anonymization and rehydration.
|
|
5
|
+
*/
|
|
6
|
+
import { type Server } from "node:http";
|
|
7
|
+
import type { RehydraProxyConfig } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for the standalone proxy server
|
|
10
|
+
*/
|
|
11
|
+
export interface RehydraProxyServerConfig extends RehydraProxyConfig {
|
|
12
|
+
/** Port to listen on */
|
|
13
|
+
port: number;
|
|
14
|
+
/** Host to bind to (default: "127.0.0.1") */
|
|
15
|
+
host?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A running Rehydra proxy server
|
|
19
|
+
*/
|
|
20
|
+
export interface RehydraProxyServer {
|
|
21
|
+
/** The underlying HTTP server */
|
|
22
|
+
server: Server;
|
|
23
|
+
/** The port the server is listening on */
|
|
24
|
+
port: number;
|
|
25
|
+
/** The host the server is bound to */
|
|
26
|
+
host: string;
|
|
27
|
+
/** Gracefully close the server */
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates and starts a standalone HTTP proxy server that anonymizes
|
|
32
|
+
* LLM API requests and rehydrates responses.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const proxy = await createRehydraProxyServer({
|
|
37
|
+
* port: 8080,
|
|
38
|
+
* upstream: 'https://api.openai.com',
|
|
39
|
+
* keyProvider: new ConfigKeyProvider(process.env.PII_KEY!),
|
|
40
|
+
* piiStorageProvider: new SQLitePIIStorageProvider('proxy.db'),
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* console.log(`Proxy running on http://${proxy.host}:${proxy.port}`);
|
|
44
|
+
*
|
|
45
|
+
* // Point your OpenAI client at the proxy:
|
|
46
|
+
* const openai = new OpenAI({ baseURL: `http://localhost:${proxy.port}/v1` });
|
|
47
|
+
*
|
|
48
|
+
* // Stop the server
|
|
49
|
+
* await proxy.close();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function createRehydraProxyServer(config: RehydraProxyServerConfig): Promise<RehydraProxyServer>;
|
|
53
|
+
//# sourceMappingURL=proxy-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-server.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAA6C,MAAM,WAAW,CAAC;AAEjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAwC7B"}
|