@copilotkit/aimock 1.21.0 → 1.22.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +56 -0
- package/README.md +1 -0
- package/dist/a2a-mock.cjs +1 -1
- package/dist/a2a-mock.cjs.map +1 -1
- package/dist/a2a-mock.d.cts.map +1 -1
- package/dist/a2a-mock.d.ts.map +1 -1
- package/dist/a2a-mock.js +1 -1
- package/dist/a2a-mock.js.map +1 -1
- package/dist/agui-recorder.cjs +25 -12
- package/dist/agui-recorder.cjs.map +1 -1
- package/dist/agui-recorder.js +25 -12
- package/dist/agui-recorder.js.map +1 -1
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/aimock-cli.cjs +0 -0
- package/dist/aimock-cli.js +0 -0
- package/dist/bedrock-converse.cjs +72 -26
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +73 -27
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +69 -24
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +70 -25
- package/dist/bedrock.js.map +1 -1
- package/dist/cli.cjs +2 -2
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +34 -11
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +35 -12
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/constants.cjs +8 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +8 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/elevenlabs-audio.cjs +46 -20
- package/dist/elevenlabs-audio.cjs.map +1 -1
- package/dist/elevenlabs-audio.d.cts.map +1 -1
- package/dist/elevenlabs-audio.d.ts.map +1 -1
- package/dist/elevenlabs-audio.js +47 -21
- package/dist/elevenlabs-audio.js.map +1 -1
- package/dist/embeddings.cjs +25 -21
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +26 -22
- package/dist/embeddings.js.map +1 -1
- package/dist/fal-audio.cjs +138 -43
- package/dist/fal-audio.cjs.map +1 -1
- package/dist/fal-audio.d.cts.map +1 -1
- package/dist/fal-audio.d.ts.map +1 -1
- package/dist/fal-audio.js +139 -44
- package/dist/fal-audio.js.map +1 -1
- package/dist/fal.cjs +27 -8
- package/dist/fal.cjs.map +1 -1
- package/dist/fal.d.cts.map +1 -1
- package/dist/fal.d.ts.map +1 -1
- package/dist/fal.js +28 -9
- package/dist/fal.js.map +1 -1
- package/dist/fixture-loader.cjs +9 -1
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.js +9 -1
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-interactions.cjs +34 -9
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +34 -11
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +50 -21
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +51 -22
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +82 -8
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +7 -0
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +7 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +80 -9
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +31 -10
- package/dist/images.cjs.map +1 -1
- package/dist/images.d.cts.map +1 -1
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +32 -11
- package/dist/images.js.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/journal.cjs +17 -7
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts +2 -3
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts +2 -3
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +15 -4
- package/dist/journal.js.map +1 -1
- package/dist/mcp-mock.cjs +1 -1
- package/dist/mcp-mock.cjs.map +1 -1
- package/dist/mcp-mock.d.cts.map +1 -1
- package/dist/mcp-mock.d.ts.map +1 -1
- package/dist/mcp-mock.js +1 -1
- package/dist/mcp-mock.js.map +1 -1
- package/dist/messages.cjs +38 -14
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +39 -15
- package/dist/messages.js.map +1 -1
- package/dist/moderation.cjs +3 -2
- package/dist/moderation.cjs.map +1 -1
- package/dist/moderation.js +3 -2
- package/dist/moderation.js.map +1 -1
- package/dist/ollama.cjs +69 -22
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +70 -23
- package/dist/ollama.js.map +1 -1
- package/dist/recorder.cjs +89 -41
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts +3 -2
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts +3 -2
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +89 -41
- package/dist/recorder.js.map +1 -1
- package/dist/rerank.cjs +3 -2
- package/dist/rerank.cjs.map +1 -1
- package/dist/rerank.js +3 -2
- package/dist/rerank.js.map +1 -1
- package/dist/responses.cjs +66 -54
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts +1 -1
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +1 -1
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +67 -55
- package/dist/responses.js.map +1 -1
- package/dist/search.cjs +3 -2
- package/dist/search.cjs.map +1 -1
- package/dist/search.js +3 -2
- package/dist/search.js.map +1 -1
- package/dist/server.cjs +117 -171
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -149
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +31 -10
- package/dist/speech.cjs.map +1 -1
- package/dist/speech.d.cts.map +1 -1
- package/dist/speech.d.ts.map +1 -1
- package/dist/speech.js +32 -11
- package/dist/speech.js.map +1 -1
- package/dist/stream-collapse.cjs +51 -21
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +1 -0
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +1 -0
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +51 -21
- package/dist/stream-collapse.js.map +1 -1
- package/dist/transcription.cjs +59 -19
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.d.cts.map +1 -1
- package/dist/transcription.d.ts.map +1 -1
- package/dist/transcription.js +60 -20
- package/dist/transcription.js.map +1 -1
- package/dist/types.d.cts +4 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-mock.cjs +10 -8
- package/dist/vector-mock.cjs.map +1 -1
- package/dist/vector-mock.d.cts.map +1 -1
- package/dist/vector-mock.d.ts.map +1 -1
- package/dist/vector-mock.js +10 -8
- package/dist/vector-mock.js.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/video.cjs +55 -16
- package/dist/video.cjs.map +1 -1
- package/dist/video.d.cts +8 -1
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts +8 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +56 -17
- package/dist/video.js.map +1 -1
- package/dist/ws-gemini-live.cjs +40 -31
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts +2 -0
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts +2 -0
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +40 -31
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +257 -16
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts +2 -0
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts +2 -0
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +257 -16
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +54 -16
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts +2 -0
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts +2 -0
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +55 -17
- package/dist/ws-responses.js.map +1 -1
- package/package.json +2 -2
package/dist/server.cjs
CHANGED
|
@@ -113,21 +113,6 @@ const CORS_HEADERS = {
|
|
|
113
113
|
function setCorsHeaders(res) {
|
|
114
114
|
for (const [key, value] of Object.entries(CORS_HEADERS)) res.setHeader(key, value);
|
|
115
115
|
}
|
|
116
|
-
const DEFAULT_MAX_BODY_BYTES = 10 * 1024 * 1024;
|
|
117
|
-
async function readBody(req, maxBytes = DEFAULT_MAX_BODY_BYTES) {
|
|
118
|
-
const buffers = [];
|
|
119
|
-
let totalBytes = 0;
|
|
120
|
-
for await (const chunk of req) {
|
|
121
|
-
const buf = chunk;
|
|
122
|
-
totalBytes += buf.length;
|
|
123
|
-
if (totalBytes > maxBytes) {
|
|
124
|
-
req.destroy();
|
|
125
|
-
throw new Error(`Request body exceeded size limit of ${maxBytes} bytes`);
|
|
126
|
-
}
|
|
127
|
-
buffers.push(buf);
|
|
128
|
-
}
|
|
129
|
-
return Buffer.concat(buffers).toString();
|
|
130
|
-
}
|
|
131
116
|
function handleOptions(res) {
|
|
132
117
|
setCorsHeaders(res);
|
|
133
118
|
res.writeHead(204);
|
|
@@ -162,7 +147,7 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
162
147
|
if (subPath === "/fixtures" && req.method === "POST") {
|
|
163
148
|
let raw;
|
|
164
149
|
try {
|
|
165
|
-
raw = await readBody(req);
|
|
150
|
+
raw = await require_helpers.readBody(req);
|
|
166
151
|
} catch (err) {
|
|
167
152
|
const msg = err instanceof Error ? err.message : String(err);
|
|
168
153
|
defaults.logger.error(`POST /__aimock/fixtures: failed to read body: ${msg}`);
|
|
@@ -214,6 +199,8 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
214
199
|
videoStates.clear();
|
|
215
200
|
require_fal_audio.falJobs.clear();
|
|
216
201
|
require_fal.falQueueStates.clear();
|
|
202
|
+
require_gemini_interactions.resetInteractionCounter();
|
|
203
|
+
require_gemini_interactions.resetEventIdCounter();
|
|
217
204
|
if (defaults.registry) defaults.registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
|
|
218
205
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
219
206
|
res.end(JSON.stringify({ reset: true }));
|
|
@@ -222,7 +209,7 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
222
209
|
if (subPath === "/error" && req.method === "POST") {
|
|
223
210
|
let raw;
|
|
224
211
|
try {
|
|
225
|
-
raw = await readBody(req);
|
|
212
|
+
raw = await require_helpers.readBody(req);
|
|
226
213
|
} catch (err) {
|
|
227
214
|
const msg = err instanceof Error ? err.message : String(err);
|
|
228
215
|
defaults.logger.error(`POST /__aimock/error: failed to read body: ${msg}`);
|
|
@@ -254,12 +241,17 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
254
241
|
}
|
|
255
242
|
};
|
|
256
243
|
fixtures.unshift(errorFixture);
|
|
244
|
+
let consumed = false;
|
|
257
245
|
const original = errorFixture.match.predicate;
|
|
258
246
|
errorFixture.match.predicate = (req) => {
|
|
247
|
+
if (consumed) return false;
|
|
259
248
|
const result = original(req);
|
|
260
249
|
if (result) {
|
|
261
|
-
|
|
262
|
-
|
|
250
|
+
consumed = true;
|
|
251
|
+
queueMicrotask(() => {
|
|
252
|
+
const idx = fixtures.indexOf(errorFixture);
|
|
253
|
+
if (idx !== -1) fixtures.splice(idx, 1);
|
|
254
|
+
});
|
|
263
255
|
}
|
|
264
256
|
return result;
|
|
265
257
|
};
|
|
@@ -274,7 +266,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
274
266
|
setCorsHeaders(res);
|
|
275
267
|
let raw;
|
|
276
268
|
try {
|
|
277
|
-
raw = await readBody(req);
|
|
269
|
+
raw = await require_helpers.readBody(req);
|
|
278
270
|
} catch (err) {
|
|
279
271
|
const msg = err instanceof Error ? err.message : "Failed to read request body";
|
|
280
272
|
journal.add({
|
|
@@ -297,7 +289,8 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
297
289
|
try {
|
|
298
290
|
body = JSON.parse(raw);
|
|
299
291
|
if (modelFallback && !body.model) body.model = modelFallback;
|
|
300
|
-
} catch {
|
|
292
|
+
} catch (parseErr) {
|
|
293
|
+
const detail = parseErr instanceof Error ? parseErr.message : "unknown parse error";
|
|
301
294
|
journal.add({
|
|
302
295
|
method: req.method ?? "POST",
|
|
303
296
|
path: req.url ?? COMPLETIONS_PATH,
|
|
@@ -309,7 +302,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
309
302
|
}
|
|
310
303
|
});
|
|
311
304
|
require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
|
|
312
|
-
message:
|
|
305
|
+
message: `Malformed JSON: ${detail}`,
|
|
313
306
|
type: "invalid_request_error",
|
|
314
307
|
param: null,
|
|
315
308
|
code: "invalid_json"
|
|
@@ -365,6 +358,29 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
365
358
|
return;
|
|
366
359
|
}
|
|
367
360
|
if (!fixture) {
|
|
361
|
+
if (require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
|
|
362
|
+
const strictStatus = 503;
|
|
363
|
+
const strictMessage = "Strict mode: no fixture matched";
|
|
364
|
+
defaults.logger.error(`STRICT: No fixture matched for ${req.method ?? "POST"} ${req.url ?? COMPLETIONS_PATH}`);
|
|
365
|
+
journal.add({
|
|
366
|
+
method: req.method ?? "POST",
|
|
367
|
+
path: req.url ?? COMPLETIONS_PATH,
|
|
368
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
369
|
+
body,
|
|
370
|
+
response: {
|
|
371
|
+
status: strictStatus,
|
|
372
|
+
fixture: null,
|
|
373
|
+
...require_helpers.strictOverrideField(defaults.strict, req.headers)
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
require_sse_writer.writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
|
|
377
|
+
message: strictMessage,
|
|
378
|
+
type: "invalid_request_error",
|
|
379
|
+
param: null,
|
|
380
|
+
code: "no_fixture_match"
|
|
381
|
+
} }));
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
368
384
|
if (defaults.record && providerKey) {
|
|
369
385
|
const hookOptions = chaosAction === "malformed" ? {
|
|
370
386
|
beforeWriteResponse: () => {
|
|
@@ -372,7 +388,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
372
388
|
return true;
|
|
373
389
|
},
|
|
374
390
|
onHookBypassed: (reason) => {
|
|
375
|
-
defaults.logger.warn(`[chaos] malformed bypassed on proxy: upstream returned
|
|
391
|
+
defaults.logger.warn(`[chaos] malformed bypassed on proxy: upstream returned streaming response (${reason})`);
|
|
376
392
|
defaults.registry?.incrementCounter("aimock_chaos_bypassed_total", {
|
|
377
393
|
action: "malformed",
|
|
378
394
|
source: "proxy",
|
|
@@ -382,7 +398,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
382
398
|
} : void 0;
|
|
383
399
|
const outcome = await require_recorder.proxyAndRecord(req, res, body, providerKey, req.url ?? COMPLETIONS_PATH, fixtures, defaults, raw, hookOptions);
|
|
384
400
|
if (outcome === "handled_by_hook") return;
|
|
385
|
-
if (outcome
|
|
401
|
+
if (outcome !== "not_configured") {
|
|
386
402
|
journal.add({
|
|
387
403
|
method: req.method ?? "POST",
|
|
388
404
|
path: req.url ?? COMPLETIONS_PATH,
|
|
@@ -397,21 +413,19 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
397
413
|
return;
|
|
398
414
|
}
|
|
399
415
|
}
|
|
400
|
-
const strictStatus = defaults.strict ? 503 : 404;
|
|
401
|
-
const strictMessage = defaults.strict ? "Strict mode: no fixture matched" : "No fixture matched";
|
|
402
|
-
if (defaults.strict) defaults.logger.error(`STRICT: No fixture matched for ${req.method ?? "POST"} ${req.url ?? COMPLETIONS_PATH}`);
|
|
403
416
|
journal.add({
|
|
404
417
|
method: req.method ?? "POST",
|
|
405
418
|
path: req.url ?? COMPLETIONS_PATH,
|
|
406
419
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
407
420
|
body,
|
|
408
421
|
response: {
|
|
409
|
-
status:
|
|
410
|
-
fixture: null
|
|
422
|
+
status: 404,
|
|
423
|
+
fixture: null,
|
|
424
|
+
...require_helpers.strictOverrideField(defaults.strict, req.headers)
|
|
411
425
|
}
|
|
412
426
|
});
|
|
413
|
-
require_sse_writer.writeErrorResponse(res,
|
|
414
|
-
message:
|
|
427
|
+
require_sse_writer.writeErrorResponse(res, 404, JSON.stringify({ error: {
|
|
428
|
+
message: "No fixture matched",
|
|
415
429
|
type: "invalid_request_error",
|
|
416
430
|
param: null,
|
|
417
431
|
code: "no_fixture_match"
|
|
@@ -433,13 +447,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
433
447
|
fixture
|
|
434
448
|
}
|
|
435
449
|
});
|
|
436
|
-
|
|
437
|
-
message: response.error.message,
|
|
438
|
-
type: response.error.type ?? "server_error",
|
|
439
|
-
param: null,
|
|
440
|
-
code: response.error.code ?? null
|
|
441
|
-
} };
|
|
442
|
-
require_sse_writer.writeErrorResponse(res, status, JSON.stringify(errorBody));
|
|
450
|
+
require_sse_writer.writeErrorResponse(res, status, require_helpers.serializeErrorResponse(response));
|
|
443
451
|
return;
|
|
444
452
|
}
|
|
445
453
|
if (require_helpers.isAudioResponse(response)) {
|
|
@@ -528,6 +536,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
528
536
|
return;
|
|
529
537
|
}
|
|
530
538
|
if (require_helpers.isToolCallResponse(response)) {
|
|
539
|
+
if (response.webSearches?.length) defaults.logger.warn("webSearches in fixture response are not supported for Chat Completions API — ignoring");
|
|
531
540
|
const overrides = require_helpers.extractOverrides(response);
|
|
532
541
|
const journalEntry = journal.add({
|
|
533
542
|
method: req.method ?? "POST",
|
|
@@ -636,7 +645,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
636
645
|
message: msg,
|
|
637
646
|
type: "server_error"
|
|
638
647
|
} }));
|
|
639
|
-
}
|
|
648
|
+
} else if (!res.writableEnded) res.end();
|
|
640
649
|
});
|
|
641
650
|
});
|
|
642
651
|
async function handleHttpRequest(req, res) {
|
|
@@ -770,60 +779,54 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
770
779
|
}
|
|
771
780
|
if (pathname === RESPONSES_PATH && req.method === "POST") {
|
|
772
781
|
try {
|
|
773
|
-
await require_responses.handleResponses(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
782
|
+
await require_responses.handleResponses(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
774
783
|
} catch (err) {
|
|
775
784
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
776
785
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
777
786
|
message: msg,
|
|
778
787
|
type: "server_error"
|
|
779
788
|
} }));
|
|
780
|
-
else if (!res.writableEnded) {
|
|
781
|
-
|
|
782
|
-
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
783
|
-
} catch (writeErr) {
|
|
784
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
785
|
-
}
|
|
789
|
+
else if (!res.writableEnded) try {
|
|
790
|
+
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
786
791
|
res.end();
|
|
792
|
+
} catch (writeErr) {
|
|
793
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
787
794
|
}
|
|
788
795
|
}
|
|
789
796
|
return;
|
|
790
797
|
}
|
|
791
798
|
if (pathname === MESSAGES_PATH && req.method === "POST") {
|
|
792
799
|
try {
|
|
793
|
-
await require_messages.handleMessages(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
800
|
+
await require_messages.handleMessages(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
794
801
|
} catch (err) {
|
|
795
802
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
796
803
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
797
804
|
message: msg,
|
|
798
805
|
type: "server_error"
|
|
799
806
|
} }));
|
|
800
|
-
else if (!res.writableEnded) {
|
|
801
|
-
|
|
802
|
-
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
803
|
-
} catch (writeErr) {
|
|
804
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
805
|
-
}
|
|
807
|
+
else if (!res.writableEnded) try {
|
|
808
|
+
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
806
809
|
res.end();
|
|
810
|
+
} catch (writeErr) {
|
|
811
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
807
812
|
}
|
|
808
813
|
}
|
|
809
814
|
return;
|
|
810
815
|
}
|
|
811
816
|
if (pathname === COHERE_CHAT_PATH && req.method === "POST") {
|
|
812
817
|
try {
|
|
813
|
-
await require_cohere.handleCohere(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
818
|
+
await require_cohere.handleCohere(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
814
819
|
} catch (err) {
|
|
815
820
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
816
821
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
817
822
|
message: msg,
|
|
818
823
|
type: "server_error"
|
|
819
824
|
} }));
|
|
820
|
-
else if (!res.writableEnded) {
|
|
821
|
-
|
|
822
|
-
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
823
|
-
} catch (writeErr) {
|
|
824
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
825
|
-
}
|
|
825
|
+
else if (!res.writableEnded) try {
|
|
826
|
+
res.write(`event: error\ndata: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
826
827
|
res.end();
|
|
828
|
+
} catch (writeErr) {
|
|
829
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
827
830
|
}
|
|
828
831
|
}
|
|
829
832
|
return;
|
|
@@ -832,14 +835,16 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
832
835
|
try {
|
|
833
836
|
const deploymentId = azureDeploymentId;
|
|
834
837
|
const embeddingsProvider = azureDeploymentId ? "azure" : "openai";
|
|
835
|
-
let raw = await readBody(req);
|
|
838
|
+
let raw = await require_helpers.readBody(req);
|
|
836
839
|
if (deploymentId) try {
|
|
837
840
|
const parsed = JSON.parse(raw);
|
|
838
841
|
if (!parsed.model) {
|
|
839
842
|
parsed.model = deploymentId;
|
|
840
843
|
raw = JSON.stringify(parsed);
|
|
841
844
|
}
|
|
842
|
-
} catch {
|
|
845
|
+
} catch (err) {
|
|
846
|
+
if (!(err instanceof SyntaxError)) defaults.logger.error(`Unexpected error in Azure model injection: ${err instanceof Error ? err.message : String(err)}`);
|
|
847
|
+
}
|
|
843
848
|
await require_embeddings.handleEmbeddings(req, res, raw, fixtures, journal, defaults, setCorsHeaders, embeddingsProvider);
|
|
844
849
|
} catch (err) {
|
|
845
850
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
@@ -853,7 +858,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
853
858
|
}
|
|
854
859
|
if (pathname === IMAGES_PATH && req.method === "POST") {
|
|
855
860
|
try {
|
|
856
|
-
await require_images.handleImages(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
861
|
+
await require_images.handleImages(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
857
862
|
} catch (err) {
|
|
858
863
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
859
864
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -866,7 +871,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
866
871
|
}
|
|
867
872
|
if (pathname === SPEECH_PATH && req.method === "POST") {
|
|
868
873
|
try {
|
|
869
|
-
await require_speech.handleSpeech(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
874
|
+
await require_speech.handleSpeech(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
870
875
|
} catch (err) {
|
|
871
876
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
872
877
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -879,7 +884,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
879
884
|
}
|
|
880
885
|
if (pathname === TRANSCRIPTIONS_PATH && req.method === "POST") {
|
|
881
886
|
try {
|
|
882
|
-
await require_transcription.handleTranscription(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
887
|
+
await require_transcription.handleTranscription(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
883
888
|
} catch (err) {
|
|
884
889
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
885
890
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -892,7 +897,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
892
897
|
}
|
|
893
898
|
if (pathname === VIDEOS_PATH && req.method === "POST") {
|
|
894
899
|
try {
|
|
895
|
-
await require_video.handleVideoCreate(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders, videoStates);
|
|
900
|
+
await require_video.handleVideoCreate(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders, videoStates);
|
|
896
901
|
} catch (err) {
|
|
897
902
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
898
903
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -913,7 +918,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
913
918
|
if (geminiPredictMatch && req.method === "POST") {
|
|
914
919
|
const predictModel = geminiPredictMatch[1];
|
|
915
920
|
try {
|
|
916
|
-
await require_images.handleImages(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders, "gemini", predictModel);
|
|
921
|
+
await require_images.handleImages(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders, "gemini", predictModel);
|
|
917
922
|
} catch (err) {
|
|
918
923
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
919
924
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -926,20 +931,18 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
926
931
|
}
|
|
927
932
|
if (pathname === GEMINI_INTERACTIONS_PATH && req.method === "POST") {
|
|
928
933
|
try {
|
|
929
|
-
await require_gemini_interactions.handleGeminiInteractions(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
934
|
+
await require_gemini_interactions.handleGeminiInteractions(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
930
935
|
} catch (err) {
|
|
931
936
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
932
937
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
933
938
|
message: msg,
|
|
934
939
|
type: "server_error"
|
|
935
940
|
} }));
|
|
936
|
-
else if (!res.writableEnded) {
|
|
937
|
-
|
|
938
|
-
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
939
|
-
} catch (writeErr) {
|
|
940
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
941
|
-
}
|
|
941
|
+
else if (!res.writableEnded) try {
|
|
942
|
+
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
942
943
|
res.end();
|
|
944
|
+
} catch (writeErr) {
|
|
945
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
943
946
|
}
|
|
944
947
|
}
|
|
945
948
|
return;
|
|
@@ -949,20 +952,18 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
949
952
|
const geminiModel = geminiMatch[1];
|
|
950
953
|
const streaming = geminiMatch[2] === "streamGenerateContent";
|
|
951
954
|
try {
|
|
952
|
-
await require_gemini.handleGemini(req, res, await readBody(req), geminiModel, streaming, fixtures, journal, defaults, setCorsHeaders);
|
|
955
|
+
await require_gemini.handleGemini(req, res, await require_helpers.readBody(req), geminiModel, streaming, fixtures, journal, defaults, setCorsHeaders);
|
|
953
956
|
} catch (err) {
|
|
954
957
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
955
958
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
956
959
|
message: msg,
|
|
957
960
|
type: "server_error"
|
|
958
961
|
} }));
|
|
959
|
-
else if (!res.writableEnded) {
|
|
960
|
-
|
|
961
|
-
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
962
|
-
} catch (writeErr) {
|
|
963
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
964
|
-
}
|
|
962
|
+
else if (!res.writableEnded) try {
|
|
963
|
+
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
965
964
|
res.end();
|
|
965
|
+
} catch (writeErr) {
|
|
966
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
966
967
|
}
|
|
967
968
|
}
|
|
968
969
|
return;
|
|
@@ -972,20 +973,18 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
972
973
|
const vertexModel = vertexMatch[1];
|
|
973
974
|
const streaming = vertexMatch[2] === "streamGenerateContent";
|
|
974
975
|
try {
|
|
975
|
-
await require_gemini.handleGemini(req, res, await readBody(req), vertexModel, streaming, fixtures, journal, defaults, setCorsHeaders, "vertexai");
|
|
976
|
+
await require_gemini.handleGemini(req, res, await require_helpers.readBody(req), vertexModel, streaming, fixtures, journal, defaults, setCorsHeaders, "vertexai");
|
|
976
977
|
} catch (err) {
|
|
977
978
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
978
979
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
979
980
|
message: msg,
|
|
980
981
|
type: "server_error"
|
|
981
982
|
} }));
|
|
982
|
-
else if (!res.writableEnded) {
|
|
983
|
-
|
|
984
|
-
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
985
|
-
} catch (writeErr) {
|
|
986
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
987
|
-
}
|
|
983
|
+
else if (!res.writableEnded) try {
|
|
984
|
+
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
988
985
|
res.end();
|
|
986
|
+
} catch (writeErr) {
|
|
987
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
989
988
|
}
|
|
990
989
|
}
|
|
991
990
|
return;
|
|
@@ -994,7 +993,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
994
993
|
if (bedrockMatch && req.method === "POST") {
|
|
995
994
|
const bedrockModelId = bedrockMatch[1];
|
|
996
995
|
try {
|
|
997
|
-
await require_bedrock.handleBedrock(req, res, await readBody(req), bedrockModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
996
|
+
await require_bedrock.handleBedrock(req, res, await require_helpers.readBody(req), bedrockModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
998
997
|
} catch (err) {
|
|
999
998
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1000
999
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1009,7 +1008,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1009
1008
|
if (bedrockStreamMatch && req.method === "POST") {
|
|
1010
1009
|
const bedrockModelId = bedrockStreamMatch[1];
|
|
1011
1010
|
try {
|
|
1012
|
-
await require_bedrock.handleBedrockStream(req, res, await readBody(req), bedrockModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1011
|
+
await require_bedrock.handleBedrockStream(req, res, await require_helpers.readBody(req), bedrockModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1013
1012
|
} catch (err) {
|
|
1014
1013
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1015
1014
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1024,7 +1023,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1024
1023
|
if (converseMatch && req.method === "POST") {
|
|
1025
1024
|
const converseModelId = converseMatch[1];
|
|
1026
1025
|
try {
|
|
1027
|
-
await require_bedrock_converse.handleConverse(req, res, await readBody(req), converseModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1026
|
+
await require_bedrock_converse.handleConverse(req, res, await require_helpers.readBody(req), converseModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1028
1027
|
} catch (err) {
|
|
1029
1028
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1030
1029
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1039,7 +1038,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1039
1038
|
if (converseStreamMatch && req.method === "POST") {
|
|
1040
1039
|
const converseStreamModelId = converseStreamMatch[1];
|
|
1041
1040
|
try {
|
|
1042
|
-
await require_bedrock_converse.handleConverseStream(req, res, await readBody(req), converseStreamModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1041
|
+
await require_bedrock_converse.handleConverseStream(req, res, await require_helpers.readBody(req), converseStreamModelId, fixtures, journal, defaults, setCorsHeaders);
|
|
1043
1042
|
} catch (err) {
|
|
1044
1043
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1045
1044
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1052,7 +1051,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1052
1051
|
}
|
|
1053
1052
|
if (pathname === OLLAMA_CHAT_PATH && req.method === "POST") {
|
|
1054
1053
|
try {
|
|
1055
|
-
await require_ollama.handleOllama(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
1054
|
+
await require_ollama.handleOllama(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
1056
1055
|
} catch (err) {
|
|
1057
1056
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1058
1057
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1065,7 +1064,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1065
1064
|
}
|
|
1066
1065
|
if (pathname === OLLAMA_GENERATE_PATH && req.method === "POST") {
|
|
1067
1066
|
try {
|
|
1068
|
-
await require_ollama.handleOllamaGenerate(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
1067
|
+
await require_ollama.handleOllamaGenerate(req, res, await require_helpers.readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
1069
1068
|
} catch (err) {
|
|
1070
1069
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1071
1070
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1094,7 +1093,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1094
1093
|
}
|
|
1095
1094
|
if (pathname === SEARCH_PATH && req.method === "POST") {
|
|
1096
1095
|
try {
|
|
1097
|
-
await require_search.handleSearch(req, res, await readBody(req), serviceFixtures?.search ?? [], journal, defaults, setCorsHeaders);
|
|
1096
|
+
await require_search.handleSearch(req, res, await require_helpers.readBody(req), serviceFixtures?.search ?? [], journal, defaults, setCorsHeaders);
|
|
1098
1097
|
} catch (err) {
|
|
1099
1098
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1100
1099
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1107,7 +1106,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1107
1106
|
}
|
|
1108
1107
|
if (pathname === RERANK_PATH && req.method === "POST") {
|
|
1109
1108
|
try {
|
|
1110
|
-
await require_rerank.handleRerank(req, res, await readBody(req), serviceFixtures?.rerank ?? [], journal, defaults, setCorsHeaders);
|
|
1109
|
+
await require_rerank.handleRerank(req, res, await require_helpers.readBody(req), serviceFixtures?.rerank ?? [], journal, defaults, setCorsHeaders);
|
|
1111
1110
|
} catch (err) {
|
|
1112
1111
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1113
1112
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1120,7 +1119,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1120
1119
|
}
|
|
1121
1120
|
if (pathname === MODERATIONS_PATH && req.method === "POST") {
|
|
1122
1121
|
try {
|
|
1123
|
-
await require_moderation.handleModeration(req, res, await readBody(req), serviceFixtures?.moderation ?? [], journal, defaults, setCorsHeaders);
|
|
1122
|
+
await require_moderation.handleModeration(req, res, await require_helpers.readBody(req), serviceFixtures?.moderation ?? [], journal, defaults, setCorsHeaders);
|
|
1124
1123
|
} catch (err) {
|
|
1125
1124
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1126
1125
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1134,21 +1133,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1134
1133
|
if (pathname === ELEVENLABS_SOUND_GENERATION_PATH && req.method === "POST") {
|
|
1135
1134
|
setCorsHeaders(res);
|
|
1136
1135
|
try {
|
|
1137
|
-
|
|
1138
|
-
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1139
|
-
if (chaosAction) {
|
|
1140
|
-
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
1141
|
-
method: req.method ?? "POST",
|
|
1142
|
-
path: pathname,
|
|
1143
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1144
|
-
body: {
|
|
1145
|
-
model: "",
|
|
1146
|
-
messages: []
|
|
1147
|
-
}
|
|
1148
|
-
}, "fixture", defaults.registry);
|
|
1149
|
-
return;
|
|
1150
|
-
}
|
|
1151
|
-
await require_elevenlabs_audio.handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, "sound-generation");
|
|
1136
|
+
await require_elevenlabs_audio.handleElevenLabsAudio(req, res, await require_helpers.readBody(req), fixtures, defaults, journal, "sound-generation");
|
|
1152
1137
|
} catch (err) {
|
|
1153
1138
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1154
1139
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1164,21 +1149,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1164
1149
|
setCorsHeaders(res);
|
|
1165
1150
|
const musicSubType = musicMatch[1] ?? "music";
|
|
1166
1151
|
try {
|
|
1167
|
-
|
|
1168
|
-
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1169
|
-
if (chaosAction) {
|
|
1170
|
-
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
1171
|
-
method: req.method ?? "POST",
|
|
1172
|
-
path: pathname,
|
|
1173
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1174
|
-
body: {
|
|
1175
|
-
model: "",
|
|
1176
|
-
messages: []
|
|
1177
|
-
}
|
|
1178
|
-
}, "fixture", defaults.registry);
|
|
1179
|
-
return;
|
|
1180
|
-
}
|
|
1181
|
-
await require_elevenlabs_audio.handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, musicSubType);
|
|
1152
|
+
await require_elevenlabs_audio.handleElevenLabsAudio(req, res, await require_helpers.readBody(req), fixtures, defaults, journal, musicSubType);
|
|
1182
1153
|
} catch (err) {
|
|
1183
1154
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1184
1155
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1189,10 +1160,12 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1189
1160
|
}
|
|
1190
1161
|
return;
|
|
1191
1162
|
}
|
|
1163
|
+
let falBody;
|
|
1192
1164
|
if (FAL_PREFIX_RE.test(pathname) && req.headers["x-fal-target-host"]) {
|
|
1193
1165
|
setCorsHeaders(res);
|
|
1194
1166
|
try {
|
|
1195
|
-
|
|
1167
|
+
falBody = req.method === "POST" || req.method === "PUT" ? await require_helpers.readBody(req) : "";
|
|
1168
|
+
const raw = falBody;
|
|
1196
1169
|
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1197
1170
|
if (chaosAction) {
|
|
1198
1171
|
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
@@ -1220,21 +1193,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1220
1193
|
if (pathname.match(FAL_QUEUE_SUBMIT_RE) && req.method === "POST") {
|
|
1221
1194
|
setCorsHeaders(res);
|
|
1222
1195
|
try {
|
|
1223
|
-
|
|
1224
|
-
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1225
|
-
if (chaosAction) {
|
|
1226
|
-
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
1227
|
-
method: req.method ?? "POST",
|
|
1228
|
-
path: pathname,
|
|
1229
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1230
|
-
body: {
|
|
1231
|
-
model: "",
|
|
1232
|
-
messages: []
|
|
1233
|
-
}
|
|
1234
|
-
}, "fixture", defaults.registry);
|
|
1235
|
-
return;
|
|
1236
|
-
}
|
|
1237
|
-
await require_fal_audio.handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
|
|
1196
|
+
await require_fal_audio.handleFalQueue(req, res, falBody ?? await require_helpers.readBody(req), pathname, fixtures, defaults, journal);
|
|
1238
1197
|
} catch (err) {
|
|
1239
1198
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1240
1199
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1248,7 +1207,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1248
1207
|
if (pathname.match(FAL_QUEUE_REQUESTS_RE) && (req.method === "GET" || req.method === "POST" || req.method === "PUT")) {
|
|
1249
1208
|
setCorsHeaders(res);
|
|
1250
1209
|
try {
|
|
1251
|
-
const raw = req.method === "POST" ? await readBody(req) : "{}";
|
|
1210
|
+
const raw = req.method === "POST" || req.method === "PUT" ? falBody ?? await require_helpers.readBody(req) : "{}";
|
|
1252
1211
|
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1253
1212
|
if (chaosAction) {
|
|
1254
1213
|
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
@@ -1276,21 +1235,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1276
1235
|
if (pathname.match(FAL_RUN_RE) && req.method === "POST") {
|
|
1277
1236
|
setCorsHeaders(res);
|
|
1278
1237
|
try {
|
|
1279
|
-
|
|
1280
|
-
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1281
|
-
if (chaosAction) {
|
|
1282
|
-
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
1283
|
-
method: req.method ?? "POST",
|
|
1284
|
-
path: pathname,
|
|
1285
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1286
|
-
body: {
|
|
1287
|
-
model: "",
|
|
1288
|
-
messages: []
|
|
1289
|
-
}
|
|
1290
|
-
}, "fixture", defaults.registry);
|
|
1291
|
-
return;
|
|
1292
|
-
}
|
|
1293
|
-
await require_fal_audio.handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
|
|
1238
|
+
await require_fal_audio.handleFalQueue(req, res, falBody ?? await require_helpers.readBody(req), pathname, fixtures, defaults, journal);
|
|
1294
1239
|
} catch (err) {
|
|
1295
1240
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1296
1241
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1318,16 +1263,14 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1318
1263
|
message: msg,
|
|
1319
1264
|
type: "server_error"
|
|
1320
1265
|
} }));
|
|
1321
|
-
else if (!res.writableEnded) {
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
} })}\n\n`);
|
|
1327
|
-
} catch (writeErr) {
|
|
1328
|
-
logger.debug("Failed to write error recovery response:", writeErr);
|
|
1329
|
-
}
|
|
1266
|
+
else if (!res.writableEnded) try {
|
|
1267
|
+
res.write(`data: ${JSON.stringify({ error: {
|
|
1268
|
+
message: msg,
|
|
1269
|
+
type: "server_error"
|
|
1270
|
+
} })}\n\n`);
|
|
1330
1271
|
res.end();
|
|
1272
|
+
} catch (writeErr) {
|
|
1273
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
1331
1274
|
}
|
|
1332
1275
|
}
|
|
1333
1276
|
}
|
|
@@ -1376,19 +1319,22 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1376
1319
|
if (pathname === RESPONSES_PATH) require_ws_responses.handleWebSocketResponses(ws, fixtures, journal, {
|
|
1377
1320
|
...defaults,
|
|
1378
1321
|
model: "gpt-4",
|
|
1379
|
-
testId: wsTestId
|
|
1322
|
+
testId: wsTestId,
|
|
1323
|
+
upgradeHeaders: req.headers
|
|
1380
1324
|
});
|
|
1381
1325
|
else if (pathname === REALTIME_PATH) {
|
|
1382
1326
|
const model = parsedUrl.searchParams.get("model") ?? "gpt-4o-realtime";
|
|
1383
1327
|
require_ws_realtime.handleWebSocketRealtime(ws, fixtures, journal, {
|
|
1384
1328
|
...defaults,
|
|
1385
1329
|
model,
|
|
1386
|
-
testId: wsTestId
|
|
1330
|
+
testId: wsTestId,
|
|
1331
|
+
upgradeHeaders: req.headers
|
|
1387
1332
|
});
|
|
1388
1333
|
} else if (pathname === GEMINI_LIVE_PATH) require_ws_gemini_live.handleWebSocketGeminiLive(ws, fixtures, journal, {
|
|
1389
1334
|
...defaults,
|
|
1390
1335
|
model: "gemini-2.0-flash",
|
|
1391
|
-
testId: wsTestId
|
|
1336
|
+
testId: wsTestId,
|
|
1337
|
+
upgradeHeaders: req.headers
|
|
1392
1338
|
});
|
|
1393
1339
|
}
|
|
1394
1340
|
const originalClose = server.close.bind(server);
|