kimi-proxy 0.0.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/LICENSE +24 -0
- package/README.md +177 -0
- package/dist/adapters/anthropicAdapter.d.ts +138 -0
- package/dist/adapters/anthropicAdapter.js +184 -0
- package/dist/adapters/anthropicAdapter.js.map +1 -0
- package/dist/config.d.ts +27 -0
- package/dist/config.js +228 -0
- package/dist/config.js.map +1 -0
- package/dist/core/converters/anthropicToOpenAI.d.ts +11 -0
- package/dist/core/converters/anthropicToOpenAI.js +18 -0
- package/dist/core/converters/anthropicToOpenAI.js.map +1 -0
- package/dist/core/converters/openaiPassthrough.d.ts +18 -0
- package/dist/core/converters/openaiPassthrough.js +794 -0
- package/dist/core/converters/openaiPassthrough.js.map +1 -0
- package/dist/core/converters/types.d.ts +14 -0
- package/dist/core/converters/types.js +16 -0
- package/dist/core/converters/types.js.map +1 -0
- package/dist/core/ensureToolCall.d.ts +24 -0
- package/dist/core/ensureToolCall.js +93 -0
- package/dist/core/ensureToolCall.js.map +1 -0
- package/dist/core/modelRegistry.d.ts +46 -0
- package/dist/core/modelRegistry.js +92 -0
- package/dist/core/modelRegistry.js.map +1 -0
- package/dist/core/pipeline.d.ts +17 -0
- package/dist/core/pipeline.js +109 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/pipelineControl.d.ts +12 -0
- package/dist/core/pipelineControl.js +51 -0
- package/dist/core/pipelineControl.js.map +1 -0
- package/dist/core/providers/openRouterProvider.d.ts +52 -0
- package/dist/core/providers/openRouterProvider.js +158 -0
- package/dist/core/providers/openRouterProvider.js.map +1 -0
- package/dist/core/providers/openaiProvider.d.ts +22 -0
- package/dist/core/providers/openaiProvider.js +79 -0
- package/dist/core/providers/openaiProvider.js.map +1 -0
- package/dist/core/providers/types.d.ts +24 -0
- package/dist/core/providers/types.js +14 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/providers/vertexProvider.d.ts +37 -0
- package/dist/core/providers/vertexProvider.js +167 -0
- package/dist/core/providers/vertexProvider.js.map +1 -0
- package/dist/core/syntheticResponse.d.ts +6 -0
- package/dist/core/syntheticResponse.js +36 -0
- package/dist/core/syntheticResponse.js.map +1 -0
- package/dist/core/transforms/request/ClampMaxTokensTransform.d.ts +7 -0
- package/dist/core/transforms/request/ClampMaxTokensTransform.js +29 -0
- package/dist/core/transforms/request/ClampMaxTokensTransform.js.map +1 -0
- package/dist/core/transforms/request/DisableStreamingTransform.d.ts +7 -0
- package/dist/core/transforms/request/DisableStreamingTransform.js +15 -0
- package/dist/core/transforms/request/DisableStreamingTransform.js.map +1 -0
- package/dist/core/transforms/request/EnsureToolCallRequestTransform.d.ts +12 -0
- package/dist/core/transforms/request/EnsureToolCallRequestTransform.js +120 -0
- package/dist/core/transforms/request/EnsureToolCallRequestTransform.js.map +1 -0
- package/dist/core/transforms/response/EnsureToolCallResponseTransform.d.ts +9 -0
- package/dist/core/transforms/response/EnsureToolCallResponseTransform.js +223 -0
- package/dist/core/transforms/response/EnsureToolCallResponseTransform.js.map +1 -0
- package/dist/core/transforms/response/KimiResponseTransform.d.ts +7 -0
- package/dist/core/transforms/response/KimiResponseTransform.js +32 -0
- package/dist/core/transforms/response/KimiResponseTransform.js.map +1 -0
- package/dist/core/types.d.ts +80 -0
- package/dist/core/types.js +18 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/logStore.d.ts +43 -0
- package/dist/persistence/logStore.js +115 -0
- package/dist/persistence/logStore.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.js +385 -0
- package/dist/server.js.map +1 -0
- package/dist/services/kimiFixer.d.ts +13 -0
- package/dist/services/kimiFixer.js +160 -0
- package/dist/services/kimiFixer.js.map +1 -0
- package/dist/services/streaming.d.ts +9 -0
- package/dist/services/streaming.js +513 -0
- package/dist/services/streaming.js.map +1 -0
- package/dist/utils/envResolver.d.ts +26 -0
- package/dist/utils/envResolver.js +64 -0
- package/dist/utils/envResolver.js.map +1 -0
- package/dist/utils/ids.d.ts +1 -0
- package/dist/utils/ids.js +7 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +12 -0
- package/dist/utils/logger.js.map +1 -0
- package/frontend/dist/assets/JSONViewer-97138fd7.js +3 -0
- package/frontend/dist/assets/index-0e7c091b.css +1 -0
- package/frontend/dist/assets/index-4b354ce2.js +40 -0
- package/frontend/dist/index.html +22 -0
- package/package.json +60 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import dotenv from "dotenv";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import YAML from "yaml";
|
|
6
|
+
dotenv.config();
|
|
7
|
+
function resolveOpenAI() {
|
|
8
|
+
const baseUrl = process.env.OPENAI_BASE_URL;
|
|
9
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
10
|
+
if (baseUrl && apiKey) {
|
|
11
|
+
return { baseUrl, apiKey };
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
function resolveOpenRouter() {
|
|
16
|
+
const baseUrl = process.env.OPENROUTER_BASE_URL;
|
|
17
|
+
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
18
|
+
// Only configure OpenRouter if API key is provided
|
|
19
|
+
if (!apiKey) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const config = {
|
|
23
|
+
// For baseUrl, use explicit value if provided, otherwise use OpenRouter's default
|
|
24
|
+
baseUrl: baseUrl || "https://openrouter.ai/api",
|
|
25
|
+
apiKey,
|
|
26
|
+
};
|
|
27
|
+
// Only include parameters if explicitly set via env vars
|
|
28
|
+
// (no fallbacks for these - they must be explicitly defined)
|
|
29
|
+
const providers = process.env.OPENROUTER_PROVIDERS;
|
|
30
|
+
if (providers) {
|
|
31
|
+
config.providers = providers;
|
|
32
|
+
}
|
|
33
|
+
const order = process.env.OPENROUTER_ORDER;
|
|
34
|
+
if (order) {
|
|
35
|
+
config.order = order
|
|
36
|
+
.split(",")
|
|
37
|
+
.map((p) => p.trim())
|
|
38
|
+
.filter((p) => p.length > 0);
|
|
39
|
+
}
|
|
40
|
+
const sort = process.env.OPENROUTER_SORT;
|
|
41
|
+
if (sort) {
|
|
42
|
+
config.sort = sort;
|
|
43
|
+
}
|
|
44
|
+
const allowFallbacks = process.env.OPENROUTER_ALLOW_FALLBACKS;
|
|
45
|
+
if (allowFallbacks) {
|
|
46
|
+
config.allowFallbacks = allowFallbacks.toLowerCase() === "true";
|
|
47
|
+
}
|
|
48
|
+
const modelShortcut = process.env.OPENROUTER_MODEL_SHORTCUT;
|
|
49
|
+
if (modelShortcut) {
|
|
50
|
+
config.modelShortcut = modelShortcut;
|
|
51
|
+
}
|
|
52
|
+
return config;
|
|
53
|
+
}
|
|
54
|
+
function resolveVertex() {
|
|
55
|
+
const projectId = process.env.VERTEX_PROJECT_ID;
|
|
56
|
+
const location = process.env.VERTEX_LOCATION;
|
|
57
|
+
const rawCredentials = process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
|
58
|
+
if (!projectId || !location || !rawCredentials) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const credentialInfo = parseGoogleCredentials(rawCredentials);
|
|
62
|
+
return {
|
|
63
|
+
projectId,
|
|
64
|
+
location,
|
|
65
|
+
endpointOverride: process.env.VERTEX_CHAT_ENDPOINT,
|
|
66
|
+
...credentialInfo,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function parseGoogleCredentials(value) {
|
|
70
|
+
const trimmed = value.trim();
|
|
71
|
+
if (!trimmed) {
|
|
72
|
+
throw new Error("GOOGLE_APPLICATION_CREDENTIALS is set but empty");
|
|
73
|
+
}
|
|
74
|
+
if (trimmed.startsWith("{")) {
|
|
75
|
+
try {
|
|
76
|
+
const parsed = JSON.parse(trimmed);
|
|
77
|
+
return { credentials: parsed };
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error(`Failed to parse GOOGLE_APPLICATION_CREDENTIALS JSON: ${error.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { credentialsPath: trimmed };
|
|
84
|
+
}
|
|
85
|
+
export function loadConfig() {
|
|
86
|
+
const host = process.env.HOST ?? "0.0.0.0";
|
|
87
|
+
const port = Number(process.env.PORT ?? "8000");
|
|
88
|
+
const dbPath = process.env.LOG_DB_PATH ?? path.resolve(process.cwd(), "data", "logs.db");
|
|
89
|
+
const streamDelay = Number(process.env.STREAM_DELAY ?? "10");
|
|
90
|
+
const streamChunkSize = Number(process.env.STREAM_CHUNK_SIZE ?? "5");
|
|
91
|
+
const openai = resolveOpenAI();
|
|
92
|
+
const openrouter = resolveOpenRouter();
|
|
93
|
+
const vertex = resolveVertex();
|
|
94
|
+
if (!openai && !openrouter && !vertex) {
|
|
95
|
+
throw new Error("At least one provider (OpenAI, OpenRouter, or Vertex) must be configured");
|
|
96
|
+
}
|
|
97
|
+
const configuredProviders = new Set();
|
|
98
|
+
if (openai) {
|
|
99
|
+
configuredProviders.add("openai");
|
|
100
|
+
}
|
|
101
|
+
if (openrouter) {
|
|
102
|
+
configuredProviders.add("openrouter");
|
|
103
|
+
}
|
|
104
|
+
if (vertex) {
|
|
105
|
+
configuredProviders.add("vertex");
|
|
106
|
+
}
|
|
107
|
+
const modelRegistry = parseModelRegistryConfig();
|
|
108
|
+
return {
|
|
109
|
+
server: { host, port },
|
|
110
|
+
logging: { dbPath },
|
|
111
|
+
streaming: { delay: streamDelay, chunkSize: streamChunkSize },
|
|
112
|
+
providers: { openai, openrouter, vertex },
|
|
113
|
+
models: modelRegistry,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const loadBalancingStrategySchema = z
|
|
117
|
+
.enum(["first", "round_robin", "random", "weighted_random"])
|
|
118
|
+
.default("first");
|
|
119
|
+
const modelDefinitionSchema = z.object({
|
|
120
|
+
name: z.string().min(1),
|
|
121
|
+
provider: z.string().min(1),
|
|
122
|
+
model: z.string().min(1),
|
|
123
|
+
weight: z.number().optional(),
|
|
124
|
+
strategy: loadBalancingStrategySchema.optional(),
|
|
125
|
+
ensure_tool_call: z.boolean().optional(),
|
|
126
|
+
provider_config: z.record(z.unknown()).optional(),
|
|
127
|
+
});
|
|
128
|
+
const modelRegistrySchema = z.object({
|
|
129
|
+
default_strategy: loadBalancingStrategySchema.optional(),
|
|
130
|
+
models: z.array(modelDefinitionSchema).min(1),
|
|
131
|
+
});
|
|
132
|
+
function parseModelRegistryConfig() {
|
|
133
|
+
const rawConfig = loadModelConfigText();
|
|
134
|
+
let rawParsed;
|
|
135
|
+
try {
|
|
136
|
+
rawParsed = YAML.parse(rawConfig);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new Error(`Failed to parse model configuration YAML: ${error.message}`);
|
|
140
|
+
}
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = modelRegistrySchema.parse(rawParsed);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
throw new Error(`Invalid model registry config: ${error.message}`);
|
|
147
|
+
}
|
|
148
|
+
const definitions = parsed.models.map((entry) => ({
|
|
149
|
+
name: entry.name,
|
|
150
|
+
provider: entry.provider,
|
|
151
|
+
upstreamModel: entry.model,
|
|
152
|
+
weight: entry.weight,
|
|
153
|
+
strategy: entry.strategy,
|
|
154
|
+
ensureToolCall: entry.ensure_tool_call,
|
|
155
|
+
providerConfig: entry.provider_config,
|
|
156
|
+
}));
|
|
157
|
+
for (const def of definitions) {
|
|
158
|
+
validateModelProviderConfig(def);
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
definitions,
|
|
162
|
+
defaultStrategy: parsed.default_strategy ?? "first",
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function loadModelConfigText() {
|
|
166
|
+
const inline = process.env.MODEL_CONFIG;
|
|
167
|
+
if (inline && inline.trim()) {
|
|
168
|
+
return inline;
|
|
169
|
+
}
|
|
170
|
+
const configPath = process.env.MODEL_CONFIG_PATH ??
|
|
171
|
+
path.resolve(process.cwd(), "model-config.yaml");
|
|
172
|
+
if (!fs.existsSync(configPath)) {
|
|
173
|
+
throw new Error("Model configuration is missing. Provide MODEL_CONFIG (YAML string) or MODEL_CONFIG_PATH pointing to a YAML file.");
|
|
174
|
+
}
|
|
175
|
+
return fs.readFileSync(configPath, "utf-8");
|
|
176
|
+
}
|
|
177
|
+
function validateModelProviderConfig(definition) {
|
|
178
|
+
const { name, provider, providerConfig } = definition;
|
|
179
|
+
if (provider === "openai") {
|
|
180
|
+
const cfg = (providerConfig || {});
|
|
181
|
+
const hasApiKey = Boolean(cfg.apiKey || process.env.OPENAI_API_KEY);
|
|
182
|
+
const hasBaseUrl = Boolean(cfg.baseUrl || process.env.OPENAI_BASE_URL);
|
|
183
|
+
if (!hasApiKey || !hasBaseUrl) {
|
|
184
|
+
const missing = [];
|
|
185
|
+
if (!hasApiKey)
|
|
186
|
+
missing.push("apiKey");
|
|
187
|
+
if (!hasBaseUrl)
|
|
188
|
+
missing.push("baseUrl");
|
|
189
|
+
throw new Error(`Model "${name}" (provider: ${provider}) is missing required configuration: ${missing.join(", ")}. ` +
|
|
190
|
+
`Set ${missing
|
|
191
|
+
.map((k) => k === "apiKey"
|
|
192
|
+
? "provider_config.apiKey or env OPENAI_API_KEY"
|
|
193
|
+
: "provider_config.baseUrl or env OPENAI_BASE_URL")
|
|
194
|
+
.join(", ")}.`);
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (provider === "openrouter") {
|
|
199
|
+
const cfg = (providerConfig || {});
|
|
200
|
+
const hasApiKey = Boolean(cfg.apiKey || process.env.OPENROUTER_API_KEY);
|
|
201
|
+
if (!hasApiKey) {
|
|
202
|
+
throw new Error(`Model "${name}" (provider: ${provider}) is missing required configuration: apiKey. ` +
|
|
203
|
+
`Set provider_config.apiKey or env OPENROUTER_API_KEY.`);
|
|
204
|
+
}
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (provider === "vertex") {
|
|
208
|
+
const cfg = (providerConfig || {});
|
|
209
|
+
const hasProject = Boolean(process.env.VERTEX_PROJECT_ID || cfg.projectId);
|
|
210
|
+
const hasLocation = Boolean(process.env.VERTEX_LOCATION || cfg.location);
|
|
211
|
+
// Credentials can be via env var, credentialsPath, or inline credentials
|
|
212
|
+
const hasCreds = Boolean(process.env.GOOGLE_APPLICATION_CREDENTIALS ||
|
|
213
|
+
cfg.credentialsPath ||
|
|
214
|
+
cfg.credentials);
|
|
215
|
+
const missing = [];
|
|
216
|
+
if (!hasProject)
|
|
217
|
+
missing.push("provider_config.projectId or env VERTEX_PROJECT_ID");
|
|
218
|
+
if (!hasLocation)
|
|
219
|
+
missing.push("provider_config.location or env VERTEX_LOCATION");
|
|
220
|
+
if (!hasCreds)
|
|
221
|
+
missing.push("provider_config.credentialsPath or provider_config.credentials or env GOOGLE_APPLICATION_CREDENTIALS");
|
|
222
|
+
if (missing.length) {
|
|
223
|
+
throw new Error(`Model "${name}" (provider: ${provider}) is missing required configuration: ${missing.join("; ")}.`);
|
|
224
|
+
}
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AnthropicMessageRequest, type AnthropicMessageResponse, type OpenAIChatRequest, type OpenAIChatResponse } from "../../adapters/anthropicAdapter.js";
|
|
2
|
+
import { ClientFormat, ProviderFormat, ProxyOperation, ConversionContext, ConvertedRequest } from "../types.js";
|
|
3
|
+
import { Converter } from "./types.js";
|
|
4
|
+
export declare class AnthropicToOpenAIConverter implements Converter<AnthropicMessageRequest, OpenAIChatRequest, OpenAIChatResponse, AnthropicMessageResponse> {
|
|
5
|
+
name: string;
|
|
6
|
+
sourceFormat: ClientFormat;
|
|
7
|
+
targetFormat: ProviderFormat;
|
|
8
|
+
operations: ProxyOperation[];
|
|
9
|
+
convertRequest(body: AnthropicMessageRequest, _context: ConversionContext<AnthropicMessageRequest>): ConvertedRequest<OpenAIChatRequest>;
|
|
10
|
+
convertResponse(body: OpenAIChatResponse, _context: ConversionContext<AnthropicMessageRequest>): AnthropicMessageResponse;
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { anthropicToOpenAIRequest, openaiToAnthropicResponse, } from "../../adapters/anthropicAdapter.js";
|
|
2
|
+
import { ClientFormat, ProviderFormat, ProxyOperation, } from "../types.js";
|
|
3
|
+
export class AnthropicToOpenAIConverter {
|
|
4
|
+
name = "anthropic-to-openai";
|
|
5
|
+
sourceFormat = ClientFormat.AnthropicMessages;
|
|
6
|
+
targetFormat = ProviderFormat.OpenAIChatCompletions;
|
|
7
|
+
operations = [ProxyOperation.Messages];
|
|
8
|
+
convertRequest(body, _context) {
|
|
9
|
+
void _context;
|
|
10
|
+
const converted = anthropicToOpenAIRequest(body);
|
|
11
|
+
return { body: converted };
|
|
12
|
+
}
|
|
13
|
+
convertResponse(body, _context) {
|
|
14
|
+
void _context;
|
|
15
|
+
return openaiToAnthropicResponse(body);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=anthropicToOpenAI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropicToOpenAI.js","sourceRoot":"","sources":["../../../src/core/converters/anthropicToOpenAI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAK1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,GAGf,MAAM,aAAa,CAAC;AAGrB,MAAM,OAAO,0BAA0B;IASrC,IAAI,GAAG,qBAAqB,CAAC;IAC7B,YAAY,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAC9C,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC;IACpD,UAAU,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEvC,cAAc,CACZ,IAA6B,EAC7B,QAAoD;QAEpD,KAAK,QAAQ,CAAC;QACd,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,eAAe,CACb,IAAwB,EACxB,QAAoD;QAEpD,KAAK,QAAQ,CAAC;QACd,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ClientFormat, ProviderFormat, ProxyOperation, ConversionContext, ConvertedRequest, JsonValue } from "../types.js";
|
|
2
|
+
import { Converter } from "./types.js";
|
|
3
|
+
export declare class OpenAIChatPassthroughConverter implements Converter<JsonValue, JsonValue, JsonValue, JsonValue> {
|
|
4
|
+
name: string;
|
|
5
|
+
sourceFormat: ClientFormat;
|
|
6
|
+
targetFormat: ProviderFormat;
|
|
7
|
+
operations: ProxyOperation[];
|
|
8
|
+
convertRequest(body: JsonValue, _context: ConversionContext<JsonValue>): ConvertedRequest<JsonValue>;
|
|
9
|
+
convertResponse(body: JsonValue, _context: ConversionContext<JsonValue>): JsonValue;
|
|
10
|
+
}
|
|
11
|
+
export declare class OpenAIResponsesPassthroughConverter implements Converter {
|
|
12
|
+
name: string;
|
|
13
|
+
sourceFormat: ClientFormat;
|
|
14
|
+
targetFormat: ProviderFormat;
|
|
15
|
+
operations: ProxyOperation[];
|
|
16
|
+
convertRequest(body: JsonValue, _context: ConversionContext<JsonValue>): ConvertedRequest<JsonValue>;
|
|
17
|
+
convertResponse(body: JsonValue): JsonValue;
|
|
18
|
+
}
|