sub-bridge 1.0.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/.cursor/commands/mcp-only.md +1 -0
- package/.github/workflows/npm-publish.yml +33 -0
- package/.github/workflows/pages.yml +40 -0
- package/.github/workflows/release-please.yml +21 -0
- package/.release-please-manifest.json +3 -0
- package/CHANGELOG.md +8 -0
- package/DEVELOPMENT.md +31 -0
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/api/index.ts +12 -0
- package/bun.lock +102 -0
- package/dist/auth/oauth-flow.d.ts +24 -0
- package/dist/auth/oauth-flow.d.ts.map +1 -0
- package/dist/auth/oauth-flow.js +184 -0
- package/dist/auth/oauth-flow.js.map +1 -0
- package/dist/auth/oauth-manager.d.ts +13 -0
- package/dist/auth/oauth-manager.d.ts.map +1 -0
- package/dist/auth/oauth-manager.js +25 -0
- package/dist/auth/oauth-manager.js.map +1 -0
- package/dist/auth/provider.d.ts +42 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +270 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +91 -0
- package/dist/cli.js.map +1 -0
- package/dist/mcp/proxy.d.ts +16 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +85 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +50 -0
- package/dist/mcp.js.map +1 -0
- package/dist/routes/auth.d.ts +6 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +149 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/chat.d.ts +6 -0
- package/dist/routes/chat.d.ts.map +1 -0
- package/dist/routes/chat.js +808 -0
- package/dist/routes/chat.js.map +1 -0
- package/dist/routes/tunnels.d.ts +7 -0
- package/dist/routes/tunnels.d.ts.map +1 -0
- package/dist/routes/tunnels.js +44 -0
- package/dist/routes/tunnels.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +157 -0
- package/dist/server.js.map +1 -0
- package/dist/tunnel/providers/cloudflare.d.ts +9 -0
- package/dist/tunnel/providers/cloudflare.d.ts.map +1 -0
- package/dist/tunnel/providers/cloudflare.js +47 -0
- package/dist/tunnel/providers/cloudflare.js.map +1 -0
- package/dist/tunnel/providers/index.d.ts +4 -0
- package/dist/tunnel/providers/index.d.ts.map +1 -0
- package/dist/tunnel/providers/index.js +13 -0
- package/dist/tunnel/providers/index.js.map +1 -0
- package/dist/tunnel/providers/ngrok.d.ts +10 -0
- package/dist/tunnel/providers/ngrok.d.ts.map +1 -0
- package/dist/tunnel/providers/ngrok.js +52 -0
- package/dist/tunnel/providers/ngrok.js.map +1 -0
- package/dist/tunnel/providers/tailscale.d.ts +10 -0
- package/dist/tunnel/providers/tailscale.d.ts.map +1 -0
- package/dist/tunnel/providers/tailscale.js +48 -0
- package/dist/tunnel/providers/tailscale.js.map +1 -0
- package/dist/tunnel/registry.d.ts +14 -0
- package/dist/tunnel/registry.d.ts.map +1 -0
- package/dist/tunnel/registry.js +86 -0
- package/dist/tunnel/registry.js.map +1 -0
- package/dist/tunnel/types.d.ts +26 -0
- package/dist/tunnel/types.d.ts.map +1 -0
- package/dist/tunnel/types.js +6 -0
- package/dist/tunnel/types.js.map +1 -0
- package/dist/tunnel/utils.d.ts +18 -0
- package/dist/tunnel/utils.d.ts.map +1 -0
- package/dist/tunnel/utils.js +57 -0
- package/dist/tunnel/utils.js.map +1 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/anthropic-to-openai-converter.d.ts +103 -0
- package/dist/utils/anthropic-to-openai-converter.d.ts.map +1 -0
- package/dist/utils/anthropic-to-openai-converter.js +376 -0
- package/dist/utils/anthropic-to-openai-converter.js.map +1 -0
- package/dist/utils/chat-to-responses.d.ts +59 -0
- package/dist/utils/chat-to-responses.d.ts.map +1 -0
- package/dist/utils/chat-to-responses.js +395 -0
- package/dist/utils/chat-to-responses.js.map +1 -0
- package/dist/utils/chatgpt-instructions.d.ts +3 -0
- package/dist/utils/chatgpt-instructions.d.ts.map +1 -0
- package/dist/utils/chatgpt-instructions.js +12 -0
- package/dist/utils/chatgpt-instructions.js.map +1 -0
- package/dist/utils/cli-args.d.ts +3 -0
- package/dist/utils/cli-args.d.ts.map +1 -0
- package/dist/utils/cli-args.js +10 -0
- package/dist/utils/cli-args.js.map +1 -0
- package/dist/utils/cors-bypass.d.ts +4 -0
- package/dist/utils/cors-bypass.d.ts.map +1 -0
- package/dist/utils/cors-bypass.js +30 -0
- package/dist/utils/cors-bypass.js.map +1 -0
- package/dist/utils/cursor-byok-bypass.d.ts +37 -0
- package/dist/utils/cursor-byok-bypass.d.ts.map +1 -0
- package/dist/utils/cursor-byok-bypass.js +53 -0
- package/dist/utils/cursor-byok-bypass.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +192 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/port.d.ts +27 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +78 -0
- package/dist/utils/port.js.map +1 -0
- package/dist/utils/setup-instructions.d.ts +10 -0
- package/dist/utils/setup-instructions.d.ts.map +1 -0
- package/dist/utils/setup-instructions.js +49 -0
- package/dist/utils/setup-instructions.js.map +1 -0
- package/env.example +25 -0
- package/index.html +992 -0
- package/package.json +57 -0
- package/public/.nojekyll +0 -0
- package/public/assets/chat.png +0 -0
- package/public/assets/demo.gif +0 -0
- package/public/assets/demo.mp4 +0 -0
- package/public/assets/setup.png +0 -0
- package/public/assets/ui.png +0 -0
- package/public/index.html +292 -0
- package/release-please-config.json +10 -0
- package/src/auth/provider.ts +412 -0
- package/src/cli.ts +97 -0
- package/src/mcp/proxy.ts +64 -0
- package/src/mcp.ts +56 -0
- package/src/oauth/authorize.ts +270 -0
- package/src/oauth/crypto.ts +198 -0
- package/src/oauth/dcr.ts +129 -0
- package/src/oauth/metadata.ts +40 -0
- package/src/oauth/token.ts +173 -0
- package/src/routes/auth.ts +149 -0
- package/src/routes/chat.ts +983 -0
- package/src/routes/oauth.ts +220 -0
- package/src/routes/tunnels.ts +45 -0
- package/src/server.ts +204 -0
- package/src/tunnel/providers/cloudflare.ts +50 -0
- package/src/tunnel/providers/index.ts +7 -0
- package/src/tunnel/providers/ngrok.ts +56 -0
- package/src/tunnel/providers/tailscale.ts +50 -0
- package/src/tunnel/registry.ts +96 -0
- package/src/tunnel/types.ts +32 -0
- package/src/tunnel/utils.ts +59 -0
- package/src/types.ts +55 -0
- package/src/utils/anthropic-to-openai-converter.ts +578 -0
- package/src/utils/chat-to-responses.ts +512 -0
- package/src/utils/chatgpt-instructions.ts +7 -0
- package/src/utils/cli-args.ts +8 -0
- package/src/utils/cors-bypass.ts +39 -0
- package/src/utils/cursor-byok-bypass.ts +56 -0
- package/src/utils/logger.ts +174 -0
- package/src/utils/port.ts +99 -0
- package/src/utils/setup-instructions.ts +59 -0
- package/tsconfig.json +22 -0
- package/vercel.json +20 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tunnel Registry - Manages providers and active tunnel
|
|
4
|
+
// ============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TunnelRegistry = void 0;
|
|
7
|
+
const providers_1 = require("./providers");
|
|
8
|
+
class TunnelRegistry {
|
|
9
|
+
providers = new Map();
|
|
10
|
+
activeTunnel = null;
|
|
11
|
+
startedAt = null;
|
|
12
|
+
lastError = null;
|
|
13
|
+
constructor() {
|
|
14
|
+
const allProviders = [
|
|
15
|
+
new providers_1.CloudflareTunnelProvider(),
|
|
16
|
+
new providers_1.NgrokTunnelProvider(),
|
|
17
|
+
new providers_1.TailscaleTunnelProvider(),
|
|
18
|
+
];
|
|
19
|
+
for (const provider of allProviders) {
|
|
20
|
+
this.providers.set(provider.id, provider);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async getProviders() {
|
|
24
|
+
const results = [];
|
|
25
|
+
for (const [id, provider] of this.providers) {
|
|
26
|
+
results.push({
|
|
27
|
+
id,
|
|
28
|
+
name: provider.name,
|
|
29
|
+
available: await provider.isAvailable(),
|
|
30
|
+
supportsNamedTunnels: provider.supportsNamedTunnels,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
34
|
+
}
|
|
35
|
+
getStatus() {
|
|
36
|
+
if (this.activeTunnel) {
|
|
37
|
+
return {
|
|
38
|
+
active: true,
|
|
39
|
+
providerId: this.activeTunnel.providerId,
|
|
40
|
+
publicUrl: this.activeTunnel.publicUrl,
|
|
41
|
+
startedAt: this.startedAt || undefined,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
active: false,
|
|
46
|
+
error: this.lastError || undefined,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async start(providerId, localPort, namedUrl) {
|
|
50
|
+
// Stop existing tunnel if any
|
|
51
|
+
if (this.activeTunnel) {
|
|
52
|
+
this.activeTunnel.stop();
|
|
53
|
+
this.activeTunnel = null;
|
|
54
|
+
}
|
|
55
|
+
const provider = this.providers.get(providerId);
|
|
56
|
+
if (!provider) {
|
|
57
|
+
throw new Error(`Unknown tunnel provider: ${providerId}`);
|
|
58
|
+
}
|
|
59
|
+
if (!await provider.isAvailable()) {
|
|
60
|
+
throw new Error(`Tunnel provider ${provider.name} is not available`);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
this.lastError = null;
|
|
64
|
+
this.activeTunnel = await provider.start(localPort, namedUrl);
|
|
65
|
+
this.startedAt = new Date().toISOString();
|
|
66
|
+
return this.getStatus();
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
this.lastError = error instanceof Error ? error.message : String(error);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
stop() {
|
|
74
|
+
if (this.activeTunnel) {
|
|
75
|
+
this.activeTunnel.stop();
|
|
76
|
+
this.activeTunnel = null;
|
|
77
|
+
this.startedAt = null;
|
|
78
|
+
}
|
|
79
|
+
return this.getStatus();
|
|
80
|
+
}
|
|
81
|
+
getPublicUrl() {
|
|
82
|
+
return this.activeTunnel?.publicUrl || null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.TunnelRegistry = TunnelRegistry;
|
|
86
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tunnel/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface TunnelProvider {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
supportsNamedTunnels: boolean;
|
|
5
|
+
isAvailable(): Promise<boolean>;
|
|
6
|
+
start(localPort: number, namedUrl?: string): Promise<TunnelInstance>;
|
|
7
|
+
}
|
|
8
|
+
export interface TunnelInstance {
|
|
9
|
+
providerId: string;
|
|
10
|
+
publicUrl: string;
|
|
11
|
+
stop(): void;
|
|
12
|
+
}
|
|
13
|
+
export interface TunnelStatus {
|
|
14
|
+
active: boolean;
|
|
15
|
+
providerId?: string;
|
|
16
|
+
publicUrl?: string;
|
|
17
|
+
startedAt?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ProviderInfo {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
available: boolean;
|
|
24
|
+
supportsNamedTunnels: boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tunnel/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,EAAE,OAAO,CAAA;IAC7B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CACrE;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,IAAI,IAAI,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,oBAAoB,EAAE,OAAO,CAAA;CAC9B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tunnel Types
|
|
4
|
+
// ============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tunnel/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,eAAe;AACf,+EAA+E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ChildProcess } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a binary exists in PATH
|
|
4
|
+
*/
|
|
5
|
+
export declare function binaryExists(binary: string): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Spawn a tunnel process with standard configuration
|
|
8
|
+
*/
|
|
9
|
+
export declare function spawnTunnelProcess(command: string, args: string[]): ChildProcess;
|
|
10
|
+
/**
|
|
11
|
+
* Poll a function until it returns a value or times out
|
|
12
|
+
*/
|
|
13
|
+
export declare function pollUntil<T>(fn: () => Promise<T | null>, timeout?: number, interval?: number): Promise<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Execute shell command and return parsed JSON output
|
|
16
|
+
*/
|
|
17
|
+
export declare function execJson<T = any>(command: string): Promise<T>;
|
|
18
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tunnel/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,YAAY,EAAE,MAAM,eAAe,CAAA;AAKzD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAEhF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAC3B,OAAO,GAAE,MAAc,EACvB,QAAQ,GAAE,MAAY,GACrB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGnE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tunnel Utilities
|
|
4
|
+
// ============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.binaryExists = binaryExists;
|
|
7
|
+
exports.spawnTunnelProcess = spawnTunnelProcess;
|
|
8
|
+
exports.pollUntil = pollUntil;
|
|
9
|
+
exports.execJson = execJson;
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const util_1 = require("util");
|
|
12
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
13
|
+
/**
|
|
14
|
+
* Check if a binary exists in PATH
|
|
15
|
+
*/
|
|
16
|
+
async function binaryExists(binary) {
|
|
17
|
+
try {
|
|
18
|
+
const cmd = process.platform === 'win32' ? `where ${binary}` : `which ${binary}`;
|
|
19
|
+
await execAsync(cmd);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Spawn a tunnel process with standard configuration
|
|
28
|
+
*/
|
|
29
|
+
function spawnTunnelProcess(command, args) {
|
|
30
|
+
return (0, child_process_1.spawn)(command, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Poll a function until it returns a value or times out
|
|
34
|
+
*/
|
|
35
|
+
async function pollUntil(fn, timeout = 30000, interval = 500) {
|
|
36
|
+
const start = Date.now();
|
|
37
|
+
while (Date.now() - start < timeout) {
|
|
38
|
+
try {
|
|
39
|
+
const result = await fn();
|
|
40
|
+
if (result !== null)
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Continue polling on error
|
|
45
|
+
}
|
|
46
|
+
await new Promise(r => setTimeout(r, interval));
|
|
47
|
+
}
|
|
48
|
+
throw new Error('Polling timeout');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Execute shell command and return parsed JSON output
|
|
52
|
+
*/
|
|
53
|
+
async function execJson(command) {
|
|
54
|
+
const { stdout } = await execAsync(command);
|
|
55
|
+
return JSON.parse(stdout);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tunnel/utils.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;;AAU/E,oCAQC;AAKD,gDAEC;AAKD,8BAkBC;AAKD,4BAGC;AAtDD,iDAAyD;AACzD,+BAAgC;AAEhC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAA;AAEjC;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAA;QAChF,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAe,EAAE,IAAc;IAChE,OAAO,IAAA,qBAAK,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;AACpE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,EAA2B,EAC3B,UAAkB,KAAK,EACvB,WAAmB,GAAG;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAExB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;YACzB,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAU,OAAe;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface AnthropicRequestBody {
|
|
2
|
+
system?: Array<{
|
|
3
|
+
type: string;
|
|
4
|
+
text: string;
|
|
5
|
+
}>;
|
|
6
|
+
messages?: Array<any>;
|
|
7
|
+
metadata?: {
|
|
8
|
+
user_id?: string;
|
|
9
|
+
};
|
|
10
|
+
stream?: boolean;
|
|
11
|
+
model: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface AnthropicResponse {
|
|
15
|
+
id?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
stop_reason?: string | null;
|
|
18
|
+
content?: Array<{
|
|
19
|
+
type: 'text' | 'tool_use';
|
|
20
|
+
text?: string;
|
|
21
|
+
id?: string;
|
|
22
|
+
name?: string;
|
|
23
|
+
input?: unknown;
|
|
24
|
+
}>;
|
|
25
|
+
usage?: {
|
|
26
|
+
input_tokens: number;
|
|
27
|
+
output_tokens: number;
|
|
28
|
+
cache_creation_input_tokens?: number;
|
|
29
|
+
cache_read_input_tokens?: number;
|
|
30
|
+
};
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface ErrorResponse {
|
|
34
|
+
error: string;
|
|
35
|
+
message?: string;
|
|
36
|
+
details?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface SuccessResponse {
|
|
39
|
+
success: boolean;
|
|
40
|
+
message: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ModelInfo {
|
|
43
|
+
id: string;
|
|
44
|
+
object: 'model';
|
|
45
|
+
created: number;
|
|
46
|
+
owned_by: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ModelsListResponse {
|
|
49
|
+
object: 'list';
|
|
50
|
+
data: ModelInfo[];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACrB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;QACzB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAC,CAAA;IACF,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,2BAA2B,CAAC,EAAE,MAAM,CAAA;QACpC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KACjC,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,0BAA0B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { AnthropicResponse } from '../types';
|
|
2
|
+
interface AnthropicContentBlock {
|
|
3
|
+
type: 'text' | 'tool_use';
|
|
4
|
+
id?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
text?: string;
|
|
7
|
+
input?: unknown;
|
|
8
|
+
}
|
|
9
|
+
interface AnthropicFullResponse {
|
|
10
|
+
id: string;
|
|
11
|
+
model: string;
|
|
12
|
+
content: AnthropicContentBlock[];
|
|
13
|
+
stop_reason: string;
|
|
14
|
+
usage?: {
|
|
15
|
+
input_tokens: number;
|
|
16
|
+
output_tokens: number;
|
|
17
|
+
cache_creation_input_tokens?: number;
|
|
18
|
+
cache_read_input_tokens?: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
interface OpenAIStreamChunk {
|
|
22
|
+
id: string;
|
|
23
|
+
object: 'chat.completion.chunk';
|
|
24
|
+
created: number;
|
|
25
|
+
model: string;
|
|
26
|
+
choices: Array<{
|
|
27
|
+
index: number;
|
|
28
|
+
delta: {
|
|
29
|
+
role?: string;
|
|
30
|
+
content?: string;
|
|
31
|
+
tool_calls?: Array<{
|
|
32
|
+
index: number;
|
|
33
|
+
id?: string;
|
|
34
|
+
type?: 'function';
|
|
35
|
+
function?: {
|
|
36
|
+
name?: string;
|
|
37
|
+
arguments?: string;
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
finish_reason: string | null;
|
|
42
|
+
}>;
|
|
43
|
+
usage?: {
|
|
44
|
+
prompt_tokens: number;
|
|
45
|
+
completion_tokens: number;
|
|
46
|
+
total_tokens: number;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
interface OpenAIResponse {
|
|
50
|
+
id: string;
|
|
51
|
+
object: 'chat.completion';
|
|
52
|
+
created: number;
|
|
53
|
+
model: string;
|
|
54
|
+
choices: Array<{
|
|
55
|
+
index: number;
|
|
56
|
+
message: {
|
|
57
|
+
role: string;
|
|
58
|
+
content: string | null;
|
|
59
|
+
tool_calls: Array<{
|
|
60
|
+
id: string;
|
|
61
|
+
type: 'function';
|
|
62
|
+
function: {
|
|
63
|
+
name: string;
|
|
64
|
+
arguments: string;
|
|
65
|
+
};
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
finish_reason: string | null;
|
|
69
|
+
}>;
|
|
70
|
+
usage: {
|
|
71
|
+
prompt_tokens: number;
|
|
72
|
+
completion_tokens: number;
|
|
73
|
+
total_tokens: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
interface ToolCallTracker {
|
|
77
|
+
id: string;
|
|
78
|
+
name: string;
|
|
79
|
+
arguments: string;
|
|
80
|
+
}
|
|
81
|
+
interface MetricsData {
|
|
82
|
+
model: string;
|
|
83
|
+
stop_reason: string | null;
|
|
84
|
+
input_tokens: number;
|
|
85
|
+
cache_creation_input_tokens: number;
|
|
86
|
+
cache_read_input_tokens: number;
|
|
87
|
+
output_tokens: number;
|
|
88
|
+
messageId: string | null;
|
|
89
|
+
openAIId: string | null;
|
|
90
|
+
}
|
|
91
|
+
interface ProcessResult {
|
|
92
|
+
type: 'chunk' | 'done';
|
|
93
|
+
data?: OpenAIStreamChunk;
|
|
94
|
+
}
|
|
95
|
+
export interface ConverterState {
|
|
96
|
+
toolCallsTracker: Map<number, ToolCallTracker>;
|
|
97
|
+
metricsData: MetricsData;
|
|
98
|
+
}
|
|
99
|
+
export declare function createConverterState(): ConverterState;
|
|
100
|
+
export declare function convertNonStreamingResponse(anthropicResponse: AnthropicResponse | AnthropicFullResponse): OpenAIResponse;
|
|
101
|
+
export declare function processChunk(state: ConverterState, chunk: string, enableLogging?: boolean): ProcessResult[];
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=anthropic-to-openai-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-to-openai-converter.d.ts","sourceRoot":"","sources":["../../src/utils/anthropic-to-openai-converter.ts"],"names":[],"mappings":"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"}
|