mimo2codex 0.1.2 → 0.1.5
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/AGENTS.md +20 -5
- package/README.md +139 -14
- package/README.zh.md +140 -15
- package/dist/admin/router.js +288 -0
- package/dist/admin/router.js.map +1 -0
- package/dist/cli.js +83 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.js +89 -7
- package/dist/config.js.map +1 -1
- package/dist/db/dataDir.js +14 -0
- package/dist/db/dataDir.js.map +1 -0
- package/dist/db/index.js +110 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/logs.js +94 -0
- package/dist/db/logs.js.map +1 -0
- package/dist/db/models.js +114 -0
- package/dist/db/models.js.map +1 -0
- package/dist/db/schema.js +74 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/settings.js +44 -0
- package/dist/db/settings.js.map +1 -0
- package/dist/providers/deepseek.js +76 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/mimo.js +88 -0
- package/dist/providers/mimo.js.map +1 -0
- package/dist/providers/registry.js +25 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.js +281 -64
- package/dist/server.js.map +1 -1
- package/dist/upstream/{mimoClient.js → openaiCompatClient.js} +21 -32
- package/dist/upstream/openaiCompatClient.js.map +1 -0
- package/dist/web/assets/index-DAJbSznk.css +1 -0
- package/dist/web/assets/index-DwvEnXbj.js +67 -0
- package/dist/web/index.html +13 -0
- package/package.json +9 -3
- package/dist/upstream/mimoClient.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { mimo } from "./mimo.js";
|
|
2
|
+
import { deepseek } from "./deepseek.js";
|
|
3
|
+
export const PROVIDERS = {
|
|
4
|
+
mimo,
|
|
5
|
+
deepseek,
|
|
6
|
+
};
|
|
7
|
+
export const PROVIDER_LIST = [mimo, deepseek];
|
|
8
|
+
export function byShortcut(s) {
|
|
9
|
+
const norm = s.toLowerCase();
|
|
10
|
+
return PROVIDER_LIST.find((p) => p.shortcut === norm || p.id === norm);
|
|
11
|
+
}
|
|
12
|
+
// Find which provider owns a given client-supplied model id (or alias).
|
|
13
|
+
// Used in PR2+ for per-request routing; in PR1 callers fall back to the
|
|
14
|
+
// configured default provider when this returns undefined.
|
|
15
|
+
export function byClientModel(model) {
|
|
16
|
+
for (const p of PROVIDER_LIST) {
|
|
17
|
+
if (p.resolveModel(model))
|
|
18
|
+
return p;
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
export function isProviderId(s) {
|
|
23
|
+
return s === "mimo" || s === "deepseek";
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,SAAS,GAA2C;IAC/D,IAAI;IACJ,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEnE,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
|
package/dist/server.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
|
-
import { reqToChat } from "./translate/reqToChat.js";
|
|
3
2
|
import { respToResponses } from "./translate/respToResponses.js";
|
|
4
3
|
import { pipeChatStreamToResponses } from "./translate/streamToSse.js";
|
|
5
4
|
import { iterChatStreamChunks } from "./upstream/chatStream.js";
|
|
6
|
-
import {
|
|
5
|
+
import { callOpenAICompat, UpstreamError } from "./upstream/openaiCompatClient.js";
|
|
6
|
+
import { byClientModel, PROVIDER_LIST, PROVIDERS } from "./providers/registry.js";
|
|
7
7
|
import { makeServerResponseSink } from "./util/sse.js";
|
|
8
8
|
import { log } from "./util/log.js";
|
|
9
|
+
import { handleAdmin } from "./admin/router.js";
|
|
10
|
+
import { insertLog } from "./db/logs.js";
|
|
9
11
|
const KEEPALIVE_INTERVAL_MS = 15_000;
|
|
10
12
|
async function readJsonBody(req, maxBytes = 16 * 1024 * 1024) {
|
|
11
13
|
return await new Promise((resolve, reject) => {
|
|
@@ -55,6 +57,57 @@ function errorEnvelope(status, code, message) {
|
|
|
55
57
|
},
|
|
56
58
|
};
|
|
57
59
|
}
|
|
60
|
+
function recordLog(cfg, entry) {
|
|
61
|
+
if (!cfg.adminEnabled)
|
|
62
|
+
return;
|
|
63
|
+
const ts = Date.now();
|
|
64
|
+
setImmediate(() => {
|
|
65
|
+
try {
|
|
66
|
+
insertLog({ ...entry, ts });
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
log.warn("chat_logs insert failed", { error: err.message });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function usageFromChatResponse(u) {
|
|
74
|
+
if (!u)
|
|
75
|
+
return { prompt_tokens: null, completion_tokens: null, total_tokens: null };
|
|
76
|
+
return {
|
|
77
|
+
prompt_tokens: u.prompt_tokens ?? null,
|
|
78
|
+
completion_tokens: u.completion_tokens ?? null,
|
|
79
|
+
total_tokens: u.total_tokens ?? null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Route a request to a provider based on the client-supplied model field:
|
|
83
|
+
// 1. If the model matches an enabled non-default provider's catalog → switch.
|
|
84
|
+
// 2. Otherwise use the configured default provider; the body.model is
|
|
85
|
+
// rewritten to the default provider's defaultModel so we never forward
|
|
86
|
+
// an unknown id (which would 400 at the upstream).
|
|
87
|
+
function selectProvider(clientModel, cfg) {
|
|
88
|
+
const matched = byClientModel(clientModel);
|
|
89
|
+
if (matched && cfg.providers[matched.id]) {
|
|
90
|
+
const resolved = matched.resolveModel(clientModel);
|
|
91
|
+
return {
|
|
92
|
+
provider: matched,
|
|
93
|
+
runtime: cfg.providers[matched.id],
|
|
94
|
+
upstreamModel: resolved?.id ?? matched.defaultModel,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const provider = PROVIDERS[cfg.defaultProviderId];
|
|
98
|
+
const runtime = cfg.providers[cfg.defaultProviderId];
|
|
99
|
+
if (!runtime) {
|
|
100
|
+
throw new Error(`provider ${cfg.defaultProviderId} has no runtime (missing api key)`);
|
|
101
|
+
}
|
|
102
|
+
// Unknown model → use the default provider's defaultModel so we don't pass
|
|
103
|
+
// a foreign id to the upstream.
|
|
104
|
+
const resolved = provider.resolveModel(clientModel);
|
|
105
|
+
return {
|
|
106
|
+
provider,
|
|
107
|
+
runtime,
|
|
108
|
+
upstreamModel: resolved?.id ?? provider.defaultModel,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
58
111
|
async function handleResponses(cfg, req, res) {
|
|
59
112
|
let payload;
|
|
60
113
|
try {
|
|
@@ -76,85 +129,148 @@ async function handleResponses(cfg, req, res) {
|
|
|
76
129
|
log.debug("incoming POST /v1/responses raw body", payload);
|
|
77
130
|
// Health-check probe short-circuit. Tools like cc-switch's "test connection"
|
|
78
131
|
// send POST /v1/responses with just `{model, stream}` and no input — our
|
|
79
|
-
// translation would forward `messages: []` to
|
|
80
|
-
// probe shape (no input, no instructions) and answer with a
|
|
81
|
-
// without burning an upstream call.
|
|
132
|
+
// translation would forward `messages: []` to the upstream, which 400s.
|
|
133
|
+
// Detect the probe shape (no input, no instructions) and answer with a
|
|
134
|
+
// synthetic 200 without burning an upstream call.
|
|
82
135
|
const hasInput = Array.isArray(payload.input) && payload.input.length > 0;
|
|
83
136
|
const hasInstructions = typeof payload.instructions === "string" && payload.instructions.length > 0;
|
|
84
137
|
if (!hasInput && !hasInstructions) {
|
|
85
138
|
log.debug("matched probe shape — returning synthetic 200 without upstream call");
|
|
86
139
|
return respondToResponsesProbe(payload, res, !!payload.stream);
|
|
87
140
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// Note on web_search: if the user's MiMo account doesn't have the Web Search
|
|
94
|
-
// Plugin activated, MiMo returns 400 "webSearchEnabled is false". We do NOT
|
|
95
|
-
// silently strip + retry — that hides a real billing/feature issue. Instead
|
|
96
|
-
// we surface the error verbatim with a friendlier message (see mimoClient.ts)
|
|
97
|
-
// so the user activates the plugin (or accepts the limitation) and restarts.
|
|
98
|
-
//
|
|
99
|
-
// Note: we deliberately do NOT set `thinking: {type: "disabled"}` so that
|
|
100
|
-
// MiMo keeps generating `reasoning_content`. The user typically wants to
|
|
101
|
-
// see the thinking in the Codex terminal (use `--no-reasoning` to hide it).
|
|
102
|
-
const chat = reqToChat(payload, {
|
|
103
|
-
forceParallelToolCalls: true,
|
|
104
|
-
enableWebSearch: true,
|
|
141
|
+
const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
|
|
142
|
+
log.debug(`routing to provider=${provider.id}`, {
|
|
143
|
+
baseUrl: runtime.baseUrl,
|
|
144
|
+
clientModel: payload.model,
|
|
145
|
+
upstreamModel,
|
|
105
146
|
});
|
|
147
|
+
const chat = provider.preprocessResponses(payload, {
|
|
148
|
+
runtime,
|
|
149
|
+
exposeReasoning: cfg.exposeReasoning,
|
|
150
|
+
});
|
|
151
|
+
chat.model = upstreamModel;
|
|
106
152
|
chat.stream = !!payload.stream;
|
|
107
153
|
const stream = !!payload.stream;
|
|
108
154
|
const ac = new AbortController();
|
|
109
155
|
req.on("close", () => ac.abort());
|
|
156
|
+
const startedAt = Date.now();
|
|
157
|
+
const baseEntry = {
|
|
158
|
+
request_id: null,
|
|
159
|
+
provider_id: provider.id,
|
|
160
|
+
client_model: payload.model,
|
|
161
|
+
upstream_model: upstreamModel,
|
|
162
|
+
endpoint: "/v1/responses",
|
|
163
|
+
stream,
|
|
164
|
+
};
|
|
110
165
|
if (!stream) {
|
|
111
166
|
try {
|
|
112
|
-
const upstreamRes = await
|
|
167
|
+
const upstreamRes = await callOpenAICompat({
|
|
168
|
+
baseUrl: runtime.baseUrl,
|
|
169
|
+
apiKey: runtime.apiKey,
|
|
170
|
+
userAgent: cfg.userAgent,
|
|
171
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
172
|
+
}, chat, ac.signal);
|
|
113
173
|
const chatJson = (await upstreamRes.json());
|
|
114
174
|
const responses = respToResponses(chatJson, payload, {
|
|
115
175
|
exposeReasoning: cfg.exposeReasoning,
|
|
116
176
|
});
|
|
117
|
-
|
|
177
|
+
sendJson(res, 200, responses);
|
|
178
|
+
recordLog(cfg, {
|
|
179
|
+
...baseEntry,
|
|
180
|
+
request_id: chatJson.id ?? null,
|
|
181
|
+
status_code: 200,
|
|
182
|
+
duration_ms: Date.now() - startedAt,
|
|
183
|
+
...usageFromChatResponse(chatJson.usage),
|
|
184
|
+
error_code: null,
|
|
185
|
+
error_snippet: null,
|
|
186
|
+
});
|
|
187
|
+
return;
|
|
118
188
|
}
|
|
119
189
|
catch (err) {
|
|
120
190
|
if (err instanceof UpstreamError) {
|
|
121
|
-
|
|
191
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
192
|
+
recordLog(cfg, {
|
|
193
|
+
...baseEntry,
|
|
194
|
+
status_code: err.status,
|
|
195
|
+
duration_ms: Date.now() - startedAt,
|
|
196
|
+
prompt_tokens: null,
|
|
197
|
+
completion_tokens: null,
|
|
198
|
+
total_tokens: null,
|
|
199
|
+
error_code: err.code,
|
|
200
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
201
|
+
});
|
|
202
|
+
return;
|
|
122
203
|
}
|
|
123
204
|
log.error("non-stream request failed", { error: err.message });
|
|
124
|
-
|
|
205
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
206
|
+
recordLog(cfg, {
|
|
207
|
+
...baseEntry,
|
|
208
|
+
status_code: 500,
|
|
209
|
+
duration_ms: Date.now() - startedAt,
|
|
210
|
+
prompt_tokens: null,
|
|
211
|
+
completion_tokens: null,
|
|
212
|
+
total_tokens: null,
|
|
213
|
+
error_code: "internal_error",
|
|
214
|
+
error_snippet: err.message,
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
125
217
|
}
|
|
126
218
|
}
|
|
127
|
-
// Streaming path.
|
|
128
|
-
// know the upstream is OK. This way upstream errors map to clean HTTP errors
|
|
129
|
-
// instead of half-opened SSE streams that confuse the Codex client.
|
|
219
|
+
// Streaming path.
|
|
130
220
|
let upstreamRes;
|
|
131
221
|
try {
|
|
132
|
-
upstreamRes = await
|
|
222
|
+
upstreamRes = await callOpenAICompat({
|
|
223
|
+
baseUrl: runtime.baseUrl,
|
|
224
|
+
apiKey: runtime.apiKey,
|
|
225
|
+
userAgent: cfg.userAgent,
|
|
226
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
227
|
+
}, chat, ac.signal);
|
|
133
228
|
}
|
|
134
229
|
catch (err) {
|
|
135
230
|
if (err instanceof UpstreamError) {
|
|
136
|
-
|
|
231
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
232
|
+
recordLog(cfg, {
|
|
233
|
+
...baseEntry,
|
|
234
|
+
status_code: err.status,
|
|
235
|
+
duration_ms: Date.now() - startedAt,
|
|
236
|
+
prompt_tokens: null,
|
|
237
|
+
completion_tokens: null,
|
|
238
|
+
total_tokens: null,
|
|
239
|
+
error_code: err.code,
|
|
240
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
241
|
+
});
|
|
242
|
+
return;
|
|
137
243
|
}
|
|
138
244
|
log.error("stream request failed (pre-stream)", { error: err.message });
|
|
139
|
-
|
|
245
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
246
|
+
recordLog(cfg, {
|
|
247
|
+
...baseEntry,
|
|
248
|
+
status_code: 500,
|
|
249
|
+
duration_ms: Date.now() - startedAt,
|
|
250
|
+
prompt_tokens: null,
|
|
251
|
+
completion_tokens: null,
|
|
252
|
+
total_tokens: null,
|
|
253
|
+
error_code: "internal_error",
|
|
254
|
+
error_snippet: err.message,
|
|
255
|
+
});
|
|
256
|
+
return;
|
|
140
257
|
}
|
|
141
|
-
// Upstream returned 200 — now we can safely open the SSE stream.
|
|
142
258
|
const sink = makeServerResponseSink(res);
|
|
143
259
|
const keepalive = setInterval(() => sink.comment("keepalive"), KEEPALIVE_INTERVAL_MS);
|
|
144
260
|
res.on("close", () => clearInterval(keepalive));
|
|
261
|
+
let streamError = null;
|
|
145
262
|
try {
|
|
146
263
|
const chunks = iterChatStreamChunks(upstreamRes);
|
|
147
264
|
await pipeChatStreamToResponses(sink, { chunks }, payload, { exposeReasoning: cfg.exposeReasoning });
|
|
148
265
|
}
|
|
149
266
|
catch (err) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// so reaching here means something unexpected in our own code.
|
|
267
|
+
streamError = err;
|
|
268
|
+
log.error("stream request failed (mid-stream)", { error: streamError.message });
|
|
153
269
|
if (!sink.closed()) {
|
|
154
270
|
sink.write("error", {
|
|
155
271
|
type: "error",
|
|
156
272
|
code: "server_error",
|
|
157
|
-
message:
|
|
273
|
+
message: streamError.message,
|
|
158
274
|
sequence_number: 9999,
|
|
159
275
|
});
|
|
160
276
|
sink.end();
|
|
@@ -162,11 +278,18 @@ async function handleResponses(cfg, req, res) {
|
|
|
162
278
|
}
|
|
163
279
|
finally {
|
|
164
280
|
clearInterval(keepalive);
|
|
281
|
+
recordLog(cfg, {
|
|
282
|
+
...baseEntry,
|
|
283
|
+
status_code: streamError ? 500 : 200,
|
|
284
|
+
duration_ms: Date.now() - startedAt,
|
|
285
|
+
prompt_tokens: null,
|
|
286
|
+
completion_tokens: null,
|
|
287
|
+
total_tokens: null,
|
|
288
|
+
error_code: streamError ? "stream_error" : null,
|
|
289
|
+
error_snippet: streamError ? streamError.message : null,
|
|
290
|
+
});
|
|
165
291
|
}
|
|
166
292
|
}
|
|
167
|
-
// Build a synthetic Responses object that satisfies probes (cc-switch test
|
|
168
|
-
// connection, etc.) without forwarding to MiMo. Status 200 + minimally-shaped
|
|
169
|
-
// response is enough for connection-test tools, which only check the status.
|
|
170
293
|
function respondToResponsesProbe(payload, res, stream) {
|
|
171
294
|
const id = `resp_probe_${Date.now()}`;
|
|
172
295
|
const created_at = Math.floor(Date.now() / 1000);
|
|
@@ -199,8 +322,6 @@ function respondToResponsesProbe(payload, res, stream) {
|
|
|
199
322
|
res.write(`event: response.completed\ndata: ${JSON.stringify({ type: "response.completed", response: completed, sequence_number: 1 })}\n\n`);
|
|
200
323
|
res.end();
|
|
201
324
|
}
|
|
202
|
-
// Synthetic Chat Completion for probes hitting /v1/chat/completions with empty
|
|
203
|
-
// messages. Mirror of respondToResponsesProbe but in OpenAI Chat shape.
|
|
204
325
|
function respondToChatProbe(payload, res, stream) {
|
|
205
326
|
const id = `chatcmpl_probe_${Date.now()}`;
|
|
206
327
|
const created = Math.floor(Date.now() / 1000);
|
|
@@ -237,12 +358,6 @@ function respondToChatProbe(payload, res, stream) {
|
|
|
237
358
|
res.write(`data: [DONE]\n\n`);
|
|
238
359
|
res.end();
|
|
239
360
|
}
|
|
240
|
-
// Passthrough for POST /v1/chat/completions. mimo2codex's primary surface is
|
|
241
|
-
// the Responses API translation, but plenty of tools (cc-switch's "test
|
|
242
|
-
// connection" probe, Cherry Studio, raw OpenAI SDKs) only speak Chat
|
|
243
|
-
// Completions. Since MiMo is itself Chat Completions–native, the cleanest
|
|
244
|
-
// answer is to forward the body verbatim and stream/return whatever upstream
|
|
245
|
-
// gives back. No translation, no state.
|
|
246
361
|
async function handleChatPassthrough(cfg, req, res) {
|
|
247
362
|
let payload;
|
|
248
363
|
try {
|
|
@@ -261,23 +376,68 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
261
376
|
keys: Object.keys(payload),
|
|
262
377
|
});
|
|
263
378
|
log.debug("incoming POST /v1/chat/completions raw body", payload);
|
|
264
|
-
// Probe short-circuit (mirrors handleResponses): empty messages → synthetic 200.
|
|
265
379
|
if (!Array.isArray(payload.messages) || payload.messages.length === 0) {
|
|
266
380
|
log.debug("matched probe shape — returning synthetic 200 without upstream call");
|
|
267
381
|
return respondToChatProbe(payload, res, !!payload.stream);
|
|
268
382
|
}
|
|
383
|
+
const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
|
|
384
|
+
log.debug(`routing chat passthrough to provider=${provider.id}`, {
|
|
385
|
+
clientModel: payload.model,
|
|
386
|
+
upstreamModel,
|
|
387
|
+
});
|
|
388
|
+
const body = provider.preprocessChat(payload, {
|
|
389
|
+
runtime,
|
|
390
|
+
exposeReasoning: cfg.exposeReasoning,
|
|
391
|
+
});
|
|
392
|
+
body.model = upstreamModel;
|
|
269
393
|
const ac = new AbortController();
|
|
270
394
|
req.on("close", () => ac.abort());
|
|
395
|
+
const startedAt = Date.now();
|
|
396
|
+
const baseEntry = {
|
|
397
|
+
request_id: null,
|
|
398
|
+
provider_id: provider.id,
|
|
399
|
+
client_model: payload.model,
|
|
400
|
+
upstream_model: upstreamModel,
|
|
401
|
+
endpoint: "/v1/chat/completions",
|
|
402
|
+
stream: !!payload.stream,
|
|
403
|
+
};
|
|
271
404
|
let upstreamRes;
|
|
272
405
|
try {
|
|
273
|
-
upstreamRes = await
|
|
406
|
+
upstreamRes = await callOpenAICompat({
|
|
407
|
+
baseUrl: runtime.baseUrl,
|
|
408
|
+
apiKey: runtime.apiKey,
|
|
409
|
+
userAgent: cfg.userAgent,
|
|
410
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
411
|
+
}, body, ac.signal);
|
|
274
412
|
}
|
|
275
413
|
catch (err) {
|
|
276
414
|
if (err instanceof UpstreamError) {
|
|
277
|
-
|
|
415
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
416
|
+
recordLog(cfg, {
|
|
417
|
+
...baseEntry,
|
|
418
|
+
status_code: err.status,
|
|
419
|
+
duration_ms: Date.now() - startedAt,
|
|
420
|
+
prompt_tokens: null,
|
|
421
|
+
completion_tokens: null,
|
|
422
|
+
total_tokens: null,
|
|
423
|
+
error_code: err.code,
|
|
424
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
425
|
+
});
|
|
426
|
+
return;
|
|
278
427
|
}
|
|
279
428
|
log.error("chat passthrough failed", { error: err.message });
|
|
280
|
-
|
|
429
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
430
|
+
recordLog(cfg, {
|
|
431
|
+
...baseEntry,
|
|
432
|
+
status_code: 500,
|
|
433
|
+
duration_ms: Date.now() - startedAt,
|
|
434
|
+
prompt_tokens: null,
|
|
435
|
+
completion_tokens: null,
|
|
436
|
+
total_tokens: null,
|
|
437
|
+
error_code: "internal_error",
|
|
438
|
+
error_snippet: err.message,
|
|
439
|
+
});
|
|
440
|
+
return;
|
|
281
441
|
}
|
|
282
442
|
const contentType = upstreamRes.headers.get("content-type") ?? "application/json";
|
|
283
443
|
res.statusCode = 200;
|
|
@@ -285,9 +445,20 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
285
445
|
if (payload.stream) {
|
|
286
446
|
if (!upstreamRes.body) {
|
|
287
447
|
res.end();
|
|
448
|
+
recordLog(cfg, {
|
|
449
|
+
...baseEntry,
|
|
450
|
+
status_code: 200,
|
|
451
|
+
duration_ms: Date.now() - startedAt,
|
|
452
|
+
prompt_tokens: null,
|
|
453
|
+
completion_tokens: null,
|
|
454
|
+
total_tokens: null,
|
|
455
|
+
error_code: null,
|
|
456
|
+
error_snippet: null,
|
|
457
|
+
});
|
|
288
458
|
return;
|
|
289
459
|
}
|
|
290
460
|
const reader = upstreamRes.body.getReader();
|
|
461
|
+
let streamError = null;
|
|
291
462
|
try {
|
|
292
463
|
// eslint-disable-next-line no-constant-condition
|
|
293
464
|
while (true) {
|
|
@@ -299,35 +470,77 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
299
470
|
}
|
|
300
471
|
}
|
|
301
472
|
catch (err) {
|
|
302
|
-
|
|
473
|
+
streamError = err;
|
|
474
|
+
log.error("chat passthrough stream error", { error: streamError.message });
|
|
303
475
|
}
|
|
304
476
|
finally {
|
|
305
477
|
res.end();
|
|
478
|
+
recordLog(cfg, {
|
|
479
|
+
...baseEntry,
|
|
480
|
+
status_code: streamError ? 500 : 200,
|
|
481
|
+
duration_ms: Date.now() - startedAt,
|
|
482
|
+
prompt_tokens: null,
|
|
483
|
+
completion_tokens: null,
|
|
484
|
+
total_tokens: null,
|
|
485
|
+
error_code: streamError ? "stream_error" : null,
|
|
486
|
+
error_snippet: streamError ? streamError.message : null,
|
|
487
|
+
});
|
|
306
488
|
}
|
|
307
489
|
return;
|
|
308
490
|
}
|
|
309
491
|
const text = await upstreamRes.text();
|
|
310
492
|
res.end(text);
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
493
|
+
// Try to extract token usage from the JSON body so logs reflect cost.
|
|
494
|
+
let usage;
|
|
495
|
+
try {
|
|
496
|
+
const parsed = JSON.parse(text);
|
|
497
|
+
usage = parsed.usage;
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// ignore
|
|
501
|
+
}
|
|
502
|
+
recordLog(cfg, {
|
|
503
|
+
...baseEntry,
|
|
504
|
+
status_code: 200,
|
|
505
|
+
duration_ms: Date.now() - startedAt,
|
|
506
|
+
...usageFromChatResponse(usage),
|
|
507
|
+
error_code: null,
|
|
508
|
+
error_snippet: null,
|
|
320
509
|
});
|
|
321
510
|
}
|
|
511
|
+
function handleModels(cfg, res) {
|
|
512
|
+
// Aggregate the catalogs of every provider whose api key is configured. The
|
|
513
|
+
// default provider's catalog comes first so existing tools that pick the top
|
|
514
|
+
// entry keep their previous behavior.
|
|
515
|
+
const ordered = [
|
|
516
|
+
PROVIDERS[cfg.defaultProviderId],
|
|
517
|
+
...PROVIDER_LIST.filter((p) => p.id !== cfg.defaultProviderId),
|
|
518
|
+
];
|
|
519
|
+
const data = [];
|
|
520
|
+
for (const p of ordered) {
|
|
521
|
+
if (!cfg.providers[p.id])
|
|
522
|
+
continue;
|
|
523
|
+
const ownedBy = p.id === "mimo" ? "xiaomi" : "deepseek";
|
|
524
|
+
for (const m of p.builtinModels) {
|
|
525
|
+
data.push({ id: m.id, object: "model", owned_by: ownedBy });
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
sendJson(res, 200, { object: "list", data });
|
|
529
|
+
}
|
|
322
530
|
export function startServer(cfg) {
|
|
323
531
|
const server = createServer((req, res) => {
|
|
324
532
|
const url = req.url ?? "/";
|
|
325
533
|
if (req.method === "GET" && (url === "/healthz" || url === "/")) {
|
|
326
|
-
sendJson(res, 200, {
|
|
534
|
+
sendJson(res, 200, {
|
|
535
|
+
ok: true,
|
|
536
|
+
name: "mimo2codex",
|
|
537
|
+
provider: cfg.defaultProviderId,
|
|
538
|
+
baseUrl: cfg.baseUrl,
|
|
539
|
+
});
|
|
327
540
|
return;
|
|
328
541
|
}
|
|
329
542
|
if (req.method === "GET" && url.startsWith("/v1/models")) {
|
|
330
|
-
handleModels(res);
|
|
543
|
+
handleModels(cfg, res);
|
|
331
544
|
return;
|
|
332
545
|
}
|
|
333
546
|
if (req.method === "POST" && url.startsWith("/v1/responses")) {
|
|
@@ -338,6 +551,10 @@ export function startServer(cfg) {
|
|
|
338
551
|
void handleChatPassthrough(cfg, req, res);
|
|
339
552
|
return;
|
|
340
553
|
}
|
|
554
|
+
if (cfg.adminEnabled && (url === "/admin" || url.startsWith("/admin/"))) {
|
|
555
|
+
void handleAdmin(cfg, req, res);
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
341
558
|
sendJson(res, 404, errorEnvelope(404, "not_found", `no route for ${req.method} ${url}`));
|
|
342
559
|
});
|
|
343
560
|
server.listen(cfg.port, cfg.host);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAEjG,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,KAAK,UAAU,YAAY,CAAI,GAAoB,EAAE,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;IAC9E,OAAO,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC5C,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI;oBAAE,OAAO,OAAO,CAAC,EAAO,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAClE,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;IACjE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,OAAe;IAGlE,OAAO;QACL,KAAK,EAAE;YACL,IAAI,EACF,MAAM,KAAK,GAAG;gBACZ,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,MAAM,KAAK,GAAG;oBACd,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,MAAM,IAAI,GAAG;wBACb,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,uBAAuB;YACjC,IAAI;YACJ,OAAO;YACP,MAAM;SACP;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAW,EACX,GAAoB,EACpB,GAAmB;IAEnB,IAAI,OAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAmB,GAAG,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,mCAAmC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;QACxB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACrE,eAAe,EAAE,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC;IAE3D,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,oCAAoC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACpG,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACjF,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,yEAAyE;IACzE,6DAA6D;IAC7D,mEAAmE;IACnE,sEAAsE;IACtE,EAAE;IACF,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,8EAA8E;IAC9E,6EAA6E;IAC7E,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE;QAC9B,sBAAsB,EAAE,IAAI;QAC5B,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAEhC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EACtE,IAAI,EACJ,EAAE,CAAC,MAAM,CACV,CAAC;YACF,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAiB,CAAC;YAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE;gBACnD,eAAe,EAAE,GAAG,CAAC,eAAe;aACrC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,oEAAoE;IACpE,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAC1B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EACtE,IAAI,EACJ,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,iEAAiE;IACjE,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACtF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,yBAAyB,CAC7B,IAAI,EACJ,EAAE,MAAM,EAAE,EACV,OAAO,EACP,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAClB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAG,GAAa,CAAC,OAAO;gBAC/B,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,SAAS,uBAAuB,CAC9B,OAAyB,EACzB,GAAmB,EACnB,MAAe;IAEf,MAAM,EAAE,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG;QAChB,EAAE;QACF,MAAM,EAAE,UAAU;QAClB,UAAU;QACV,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;QAC7D,mBAAmB,EAAE,IAAI;QACzB,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAClC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1C,kBAAkB,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAClE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3D,GAAG,CAAC,KAAK,CACP,kCAAkC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAC/H,CAAC;IACF,GAAG,CAAC,KAAK,CACP,oCAAoC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAClI,CAAC;IACF,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,wEAAwE;AACxE,SAAS,kBAAkB,CACzB,OAAoB,EACpB,GAAmB,EACnB,MAAe;IAEf,MAAM,EAAE,GAAG,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,EAAE;YACF,MAAM,EAAE,iBAAiB;YACzB,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC3C,aAAa,EAAE,MAAM;iBACtB;aACF;YACD,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;SACnE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAClE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,MAAqB,EAAU,EAAE,CAC7D,SAAS,IAAI,CAAC,SAAS,CAAC;QACtB,EAAE;QACF,MAAM,EAAE,uBAAuB;QAC/B,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;KACtD,CAAC,MAAM,CAAC;IACX,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,6EAA6E;AAC7E,wEAAwE;AACxE,qEAAqE;AACrE,0EAA0E;AAC1E,6EAA6E;AAC7E,wCAAwC;AACxC,KAAK,UAAU,qBAAqB,CAClC,GAAW,EACX,GAAoB,EACpB,GAAmB;IAEnB,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAc,GAAG,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,mCAAmC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;QACxB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QAC3E,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;IAElE,iFAAiF;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACjF,OAAO,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAElC,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAC1B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EACtE,OAAO,EACP,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC;IAClF,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,iDAAiD;YACjD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,IAAI,KAAK;oBAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,GAAmB;IACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QACjB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;YAC5D,EAAE,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;YAChE,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC7D;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,YAAY,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7D,KAAK,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACpE,KAAK,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|