@copilotkit/aimock 1.22.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 +15 -0
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +0 -0
- package/dist/aimock-cli.js +0 -0
- package/dist/bedrock-converse.cjs +62 -22
- 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 +62 -22
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +59 -20
- 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 +59 -20
- package/dist/bedrock.js.map +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +29 -9
- 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 +30 -10
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.cts.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 +41 -18
- 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 +42 -19
- package/dist/elevenlabs-audio.js.map +1 -1
- package/dist/embeddings.cjs +19 -17
- 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 +20 -18
- package/dist/embeddings.js.map +1 -1
- package/dist/fal-audio.cjs +128 -39
- 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 +129 -40
- package/dist/fal-audio.js.map +1 -1
- package/dist/fal.cjs +25 -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 +26 -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 +29 -7
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.js +28 -8
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +45 -19
- 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 +45 -19
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +51 -8
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +6 -0
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +6 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +51 -9
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +26 -8
- 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 +27 -9
- 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/messages.cjs +33 -12
- 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 +33 -12
- package/dist/messages.js.map +1 -1
- package/dist/ollama.cjs +59 -18
- 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 +60 -19
- package/dist/ollama.js.map +1 -1
- package/dist/recorder.cjs +11 -7
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +11 -7
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +61 -52
- 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 +62 -53
- package/dist/responses.js.map +1 -1
- package/dist/server.cjs +63 -179
- 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 +39 -155
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +26 -8
- 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 +27 -9
- package/dist/speech.js.map +1 -1
- package/dist/transcription.cjs +57 -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 +58 -20
- package/dist/transcription.js.map +1 -1
- package/dist/types.d.cts +2 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/video.cjs +50 -14
- 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 +51 -15
- package/dist/video.js.map +1 -1
- package/dist/ws-gemini-live.cjs +34 -27
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +34 -27
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +251 -12
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +251 -12
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +48 -12
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +49 -13
- 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}`);
|
|
@@ -279,7 +266,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
279
266
|
setCorsHeaders(res);
|
|
280
267
|
let raw;
|
|
281
268
|
try {
|
|
282
|
-
raw = await readBody(req);
|
|
269
|
+
raw = await require_helpers.readBody(req);
|
|
283
270
|
} catch (err) {
|
|
284
271
|
const msg = err instanceof Error ? err.message : "Failed to read request body";
|
|
285
272
|
journal.add({
|
|
@@ -371,6 +358,29 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
371
358
|
return;
|
|
372
359
|
}
|
|
373
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
|
+
}
|
|
374
384
|
if (defaults.record && providerKey) {
|
|
375
385
|
const hookOptions = chaosAction === "malformed" ? {
|
|
376
386
|
beforeWriteResponse: () => {
|
|
@@ -388,7 +398,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
388
398
|
} : void 0;
|
|
389
399
|
const outcome = await require_recorder.proxyAndRecord(req, res, body, providerKey, req.url ?? COMPLETIONS_PATH, fixtures, defaults, raw, hookOptions);
|
|
390
400
|
if (outcome === "handled_by_hook") return;
|
|
391
|
-
if (outcome
|
|
401
|
+
if (outcome !== "not_configured") {
|
|
392
402
|
journal.add({
|
|
393
403
|
method: req.method ?? "POST",
|
|
394
404
|
path: req.url ?? COMPLETIONS_PATH,
|
|
@@ -403,23 +413,19 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
403
413
|
return;
|
|
404
414
|
}
|
|
405
415
|
}
|
|
406
|
-
const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
|
|
407
|
-
const strictStatus = effectiveStrict ? 503 : 404;
|
|
408
|
-
const strictMessage = effectiveStrict ? "Strict mode: no fixture matched" : "No fixture matched";
|
|
409
|
-
if (effectiveStrict) defaults.logger.error(`STRICT: No fixture matched for ${req.method ?? "POST"} ${req.url ?? COMPLETIONS_PATH}`);
|
|
410
416
|
journal.add({
|
|
411
417
|
method: req.method ?? "POST",
|
|
412
418
|
path: req.url ?? COMPLETIONS_PATH,
|
|
413
419
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
414
420
|
body,
|
|
415
421
|
response: {
|
|
416
|
-
status:
|
|
422
|
+
status: 404,
|
|
417
423
|
fixture: null,
|
|
418
424
|
...require_helpers.strictOverrideField(defaults.strict, req.headers)
|
|
419
425
|
}
|
|
420
426
|
});
|
|
421
|
-
require_sse_writer.writeErrorResponse(res,
|
|
422
|
-
message:
|
|
427
|
+
require_sse_writer.writeErrorResponse(res, 404, JSON.stringify({ error: {
|
|
428
|
+
message: "No fixture matched",
|
|
423
429
|
type: "invalid_request_error",
|
|
424
430
|
param: null,
|
|
425
431
|
code: "no_fixture_match"
|
|
@@ -441,13 +447,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
441
447
|
fixture
|
|
442
448
|
}
|
|
443
449
|
});
|
|
444
|
-
|
|
445
|
-
message: response.error.message,
|
|
446
|
-
type: response.error.type ?? "server_error",
|
|
447
|
-
param: null,
|
|
448
|
-
code: response.error.code ?? null
|
|
449
|
-
} };
|
|
450
|
-
require_sse_writer.writeErrorResponse(res, status, JSON.stringify(errorBody));
|
|
450
|
+
require_sse_writer.writeErrorResponse(res, status, require_helpers.serializeErrorResponse(response));
|
|
451
451
|
return;
|
|
452
452
|
}
|
|
453
453
|
if (require_helpers.isAudioResponse(response)) {
|
|
@@ -536,6 +536,7 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
536
536
|
return;
|
|
537
537
|
}
|
|
538
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");
|
|
539
540
|
const overrides = require_helpers.extractOverrides(response);
|
|
540
541
|
const journalEntry = journal.add({
|
|
541
542
|
method: req.method ?? "POST",
|
|
@@ -778,7 +779,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
778
779
|
}
|
|
779
780
|
if (pathname === RESPONSES_PATH && req.method === "POST") {
|
|
780
781
|
try {
|
|
781
|
-
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);
|
|
782
783
|
} catch (err) {
|
|
783
784
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
784
785
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -796,7 +797,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
796
797
|
}
|
|
797
798
|
if (pathname === MESSAGES_PATH && req.method === "POST") {
|
|
798
799
|
try {
|
|
799
|
-
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);
|
|
800
801
|
} catch (err) {
|
|
801
802
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
802
803
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -814,7 +815,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
814
815
|
}
|
|
815
816
|
if (pathname === COHERE_CHAT_PATH && req.method === "POST") {
|
|
816
817
|
try {
|
|
817
|
-
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);
|
|
818
819
|
} catch (err) {
|
|
819
820
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
820
821
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -834,7 +835,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
834
835
|
try {
|
|
835
836
|
const deploymentId = azureDeploymentId;
|
|
836
837
|
const embeddingsProvider = azureDeploymentId ? "azure" : "openai";
|
|
837
|
-
let raw = await readBody(req);
|
|
838
|
+
let raw = await require_helpers.readBody(req);
|
|
838
839
|
if (deploymentId) try {
|
|
839
840
|
const parsed = JSON.parse(raw);
|
|
840
841
|
if (!parsed.model) {
|
|
@@ -857,7 +858,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
857
858
|
}
|
|
858
859
|
if (pathname === IMAGES_PATH && req.method === "POST") {
|
|
859
860
|
try {
|
|
860
|
-
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);
|
|
861
862
|
} catch (err) {
|
|
862
863
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
863
864
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -870,7 +871,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
870
871
|
}
|
|
871
872
|
if (pathname === SPEECH_PATH && req.method === "POST") {
|
|
872
873
|
try {
|
|
873
|
-
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);
|
|
874
875
|
} catch (err) {
|
|
875
876
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
876
877
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -883,7 +884,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
883
884
|
}
|
|
884
885
|
if (pathname === TRANSCRIPTIONS_PATH && req.method === "POST") {
|
|
885
886
|
try {
|
|
886
|
-
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);
|
|
887
888
|
} catch (err) {
|
|
888
889
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
889
890
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -896,7 +897,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
896
897
|
}
|
|
897
898
|
if (pathname === VIDEOS_PATH && req.method === "POST") {
|
|
898
899
|
try {
|
|
899
|
-
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);
|
|
900
901
|
} catch (err) {
|
|
901
902
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
902
903
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -917,7 +918,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
917
918
|
if (geminiPredictMatch && req.method === "POST") {
|
|
918
919
|
const predictModel = geminiPredictMatch[1];
|
|
919
920
|
try {
|
|
920
|
-
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);
|
|
921
922
|
} catch (err) {
|
|
922
923
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
923
924
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -930,7 +931,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
930
931
|
}
|
|
931
932
|
if (pathname === GEMINI_INTERACTIONS_PATH && req.method === "POST") {
|
|
932
933
|
try {
|
|
933
|
-
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);
|
|
934
935
|
} catch (err) {
|
|
935
936
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
936
937
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -951,7 +952,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
951
952
|
const geminiModel = geminiMatch[1];
|
|
952
953
|
const streaming = geminiMatch[2] === "streamGenerateContent";
|
|
953
954
|
try {
|
|
954
|
-
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);
|
|
955
956
|
} catch (err) {
|
|
956
957
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
957
958
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -972,7 +973,7 @@ 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: {
|
|
@@ -992,7 +993,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
992
993
|
if (bedrockMatch && req.method === "POST") {
|
|
993
994
|
const bedrockModelId = bedrockMatch[1];
|
|
994
995
|
try {
|
|
995
|
-
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);
|
|
996
997
|
} catch (err) {
|
|
997
998
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
998
999
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1007,7 +1008,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1007
1008
|
if (bedrockStreamMatch && req.method === "POST") {
|
|
1008
1009
|
const bedrockModelId = bedrockStreamMatch[1];
|
|
1009
1010
|
try {
|
|
1010
|
-
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);
|
|
1011
1012
|
} catch (err) {
|
|
1012
1013
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1013
1014
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1022,7 +1023,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1022
1023
|
if (converseMatch && req.method === "POST") {
|
|
1023
1024
|
const converseModelId = converseMatch[1];
|
|
1024
1025
|
try {
|
|
1025
|
-
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);
|
|
1026
1027
|
} catch (err) {
|
|
1027
1028
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1028
1029
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1037,7 +1038,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1037
1038
|
if (converseStreamMatch && req.method === "POST") {
|
|
1038
1039
|
const converseStreamModelId = converseStreamMatch[1];
|
|
1039
1040
|
try {
|
|
1040
|
-
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);
|
|
1041
1042
|
} catch (err) {
|
|
1042
1043
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1043
1044
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1050,7 +1051,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1050
1051
|
}
|
|
1051
1052
|
if (pathname === OLLAMA_CHAT_PATH && req.method === "POST") {
|
|
1052
1053
|
try {
|
|
1053
|
-
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);
|
|
1054
1055
|
} catch (err) {
|
|
1055
1056
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1056
1057
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1063,7 +1064,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1063
1064
|
}
|
|
1064
1065
|
if (pathname === OLLAMA_GENERATE_PATH && req.method === "POST") {
|
|
1065
1066
|
try {
|
|
1066
|
-
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);
|
|
1067
1068
|
} catch (err) {
|
|
1068
1069
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1069
1070
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1092,7 +1093,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1092
1093
|
}
|
|
1093
1094
|
if (pathname === SEARCH_PATH && req.method === "POST") {
|
|
1094
1095
|
try {
|
|
1095
|
-
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);
|
|
1096
1097
|
} catch (err) {
|
|
1097
1098
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1098
1099
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1105,7 +1106,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1105
1106
|
}
|
|
1106
1107
|
if (pathname === RERANK_PATH && req.method === "POST") {
|
|
1107
1108
|
try {
|
|
1108
|
-
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);
|
|
1109
1110
|
} catch (err) {
|
|
1110
1111
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1111
1112
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1118,7 +1119,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1118
1119
|
}
|
|
1119
1120
|
if (pathname === MODERATIONS_PATH && req.method === "POST") {
|
|
1120
1121
|
try {
|
|
1121
|
-
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);
|
|
1122
1123
|
} catch (err) {
|
|
1123
1124
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1124
1125
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1132,35 +1133,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1132
1133
|
if (pathname === ELEVENLABS_SOUND_GENERATION_PATH && req.method === "POST") {
|
|
1133
1134
|
setCorsHeaders(res);
|
|
1134
1135
|
try {
|
|
1135
|
-
|
|
1136
|
-
let elSoundFixture = null;
|
|
1137
|
-
try {
|
|
1138
|
-
const parsed = JSON.parse(raw);
|
|
1139
|
-
const syntheticReq = {
|
|
1140
|
-
model: parsed.model_id ?? "eleven_text_to_sound_v2",
|
|
1141
|
-
messages: [{
|
|
1142
|
-
role: "user",
|
|
1143
|
-
content: parsed.text ?? ""
|
|
1144
|
-
}],
|
|
1145
|
-
_endpointType: "audio-gen"
|
|
1146
|
-
};
|
|
1147
|
-
const testId = require_helpers.getTestId(req);
|
|
1148
|
-
elSoundFixture = require_router.matchFixture(fixtures, syntheticReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform);
|
|
1149
|
-
} catch {}
|
|
1150
|
-
const chaosAction = require_chaos.evaluateChaos(elSoundFixture, defaults.chaos, req.headers, defaults.logger);
|
|
1151
|
-
if (chaosAction) {
|
|
1152
|
-
require_chaos.applyChaosAction(chaosAction, res, elSoundFixture, journal, {
|
|
1153
|
-
method: req.method ?? "POST",
|
|
1154
|
-
path: pathname,
|
|
1155
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1156
|
-
body: {
|
|
1157
|
-
model: "",
|
|
1158
|
-
messages: []
|
|
1159
|
-
}
|
|
1160
|
-
}, "fixture", defaults.registry);
|
|
1161
|
-
return;
|
|
1162
|
-
}
|
|
1163
|
-
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");
|
|
1164
1137
|
} catch (err) {
|
|
1165
1138
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1166
1139
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1176,36 +1149,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1176
1149
|
setCorsHeaders(res);
|
|
1177
1150
|
const musicSubType = musicMatch[1] ?? "music";
|
|
1178
1151
|
try {
|
|
1179
|
-
|
|
1180
|
-
let elMusicFixture = null;
|
|
1181
|
-
try {
|
|
1182
|
-
const parsed = JSON.parse(raw);
|
|
1183
|
-
const prompt = (typeof parsed.prompt === "string" ? parsed.prompt : null) ?? (parsed.composition_plan != null ? typeof parsed.composition_plan === "string" ? parsed.composition_plan : JSON.stringify(parsed.composition_plan) : "");
|
|
1184
|
-
const syntheticReq = {
|
|
1185
|
-
model: parsed.model_id ?? "music_v1",
|
|
1186
|
-
messages: [{
|
|
1187
|
-
role: "user",
|
|
1188
|
-
content: prompt
|
|
1189
|
-
}],
|
|
1190
|
-
_endpointType: "audio-gen"
|
|
1191
|
-
};
|
|
1192
|
-
const testId = require_helpers.getTestId(req);
|
|
1193
|
-
elMusicFixture = require_router.matchFixture(fixtures, syntheticReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform);
|
|
1194
|
-
} catch {}
|
|
1195
|
-
const chaosAction = require_chaos.evaluateChaos(elMusicFixture, defaults.chaos, req.headers, defaults.logger);
|
|
1196
|
-
if (chaosAction) {
|
|
1197
|
-
require_chaos.applyChaosAction(chaosAction, res, elMusicFixture, journal, {
|
|
1198
|
-
method: req.method ?? "POST",
|
|
1199
|
-
path: pathname,
|
|
1200
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1201
|
-
body: {
|
|
1202
|
-
model: "",
|
|
1203
|
-
messages: []
|
|
1204
|
-
}
|
|
1205
|
-
}, "fixture", defaults.registry);
|
|
1206
|
-
return;
|
|
1207
|
-
}
|
|
1208
|
-
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);
|
|
1209
1153
|
} catch (err) {
|
|
1210
1154
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1211
1155
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1220,7 +1164,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1220
1164
|
if (FAL_PREFIX_RE.test(pathname) && req.headers["x-fal-target-host"]) {
|
|
1221
1165
|
setCorsHeaders(res);
|
|
1222
1166
|
try {
|
|
1223
|
-
falBody = req.method === "POST" || req.method === "PUT" ? await readBody(req) : "";
|
|
1167
|
+
falBody = req.method === "POST" || req.method === "PUT" ? await require_helpers.readBody(req) : "";
|
|
1224
1168
|
const raw = falBody;
|
|
1225
1169
|
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1226
1170
|
if (chaosAction) {
|
|
@@ -1246,40 +1190,10 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1246
1190
|
return;
|
|
1247
1191
|
}
|
|
1248
1192
|
}
|
|
1249
|
-
|
|
1250
|
-
if (falQueueSubmitMatch && req.method === "POST") {
|
|
1193
|
+
if (pathname.match(FAL_QUEUE_SUBMIT_RE) && req.method === "POST") {
|
|
1251
1194
|
setCorsHeaders(res);
|
|
1252
1195
|
try {
|
|
1253
|
-
|
|
1254
|
-
let falSubmitFixture = null;
|
|
1255
|
-
try {
|
|
1256
|
-
const parsed = raw.trim() ? JSON.parse(raw) : {};
|
|
1257
|
-
const prompt = (typeof parsed.prompt === "string" ? parsed.prompt : null) ?? (typeof parsed.text === "string" ? parsed.text : null) ?? "";
|
|
1258
|
-
const syntheticReq = {
|
|
1259
|
-
model: falQueueSubmitMatch[1],
|
|
1260
|
-
messages: [{
|
|
1261
|
-
role: "user",
|
|
1262
|
-
content: prompt
|
|
1263
|
-
}],
|
|
1264
|
-
_endpointType: "fal-audio"
|
|
1265
|
-
};
|
|
1266
|
-
const testId = require_helpers.getTestId(req);
|
|
1267
|
-
falSubmitFixture = require_router.matchFixture(fixtures, syntheticReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform);
|
|
1268
|
-
} catch {}
|
|
1269
|
-
const chaosAction = require_chaos.evaluateChaos(falSubmitFixture, defaults.chaos, req.headers, defaults.logger);
|
|
1270
|
-
if (chaosAction) {
|
|
1271
|
-
require_chaos.applyChaosAction(chaosAction, res, falSubmitFixture, journal, {
|
|
1272
|
-
method: req.method ?? "POST",
|
|
1273
|
-
path: pathname,
|
|
1274
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1275
|
-
body: {
|
|
1276
|
-
model: "",
|
|
1277
|
-
messages: []
|
|
1278
|
-
}
|
|
1279
|
-
}, "fixture", defaults.registry);
|
|
1280
|
-
return;
|
|
1281
|
-
}
|
|
1282
|
-
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);
|
|
1283
1197
|
} catch (err) {
|
|
1284
1198
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1285
1199
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
@@ -1293,7 +1207,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1293
1207
|
if (pathname.match(FAL_QUEUE_REQUESTS_RE) && (req.method === "GET" || req.method === "POST" || req.method === "PUT")) {
|
|
1294
1208
|
setCorsHeaders(res);
|
|
1295
1209
|
try {
|
|
1296
|
-
const raw = req.method === "POST" || req.method === "PUT" ? falBody ?? await readBody(req) : "{}";
|
|
1210
|
+
const raw = req.method === "POST" || req.method === "PUT" ? falBody ?? await require_helpers.readBody(req) : "{}";
|
|
1297
1211
|
const chaosAction = require_chaos.evaluateChaos(null, defaults.chaos, req.headers, defaults.logger);
|
|
1298
1212
|
if (chaosAction) {
|
|
1299
1213
|
require_chaos.applyChaosAction(chaosAction, res, null, journal, {
|
|
@@ -1318,40 +1232,10 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1318
1232
|
}
|
|
1319
1233
|
return;
|
|
1320
1234
|
}
|
|
1321
|
-
|
|
1322
|
-
if (falRunMatch && req.method === "POST") {
|
|
1235
|
+
if (pathname.match(FAL_RUN_RE) && req.method === "POST") {
|
|
1323
1236
|
setCorsHeaders(res);
|
|
1324
1237
|
try {
|
|
1325
|
-
|
|
1326
|
-
let falRunFixture = null;
|
|
1327
|
-
try {
|
|
1328
|
-
const parsed = raw.trim() ? JSON.parse(raw) : {};
|
|
1329
|
-
const prompt = (typeof parsed.prompt === "string" ? parsed.prompt : null) ?? (typeof parsed.text === "string" ? parsed.text : null) ?? "";
|
|
1330
|
-
const syntheticReq = {
|
|
1331
|
-
model: falRunMatch[1],
|
|
1332
|
-
messages: [{
|
|
1333
|
-
role: "user",
|
|
1334
|
-
content: prompt
|
|
1335
|
-
}],
|
|
1336
|
-
_endpointType: "fal-audio"
|
|
1337
|
-
};
|
|
1338
|
-
const testId = require_helpers.getTestId(req);
|
|
1339
|
-
falRunFixture = require_router.matchFixture(fixtures, syntheticReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform);
|
|
1340
|
-
} catch {}
|
|
1341
|
-
const chaosAction = require_chaos.evaluateChaos(falRunFixture, defaults.chaos, req.headers, defaults.logger);
|
|
1342
|
-
if (chaosAction) {
|
|
1343
|
-
require_chaos.applyChaosAction(chaosAction, res, falRunFixture, journal, {
|
|
1344
|
-
method: req.method ?? "POST",
|
|
1345
|
-
path: pathname,
|
|
1346
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
1347
|
-
body: {
|
|
1348
|
-
model: "",
|
|
1349
|
-
messages: []
|
|
1350
|
-
}
|
|
1351
|
-
}, "fixture", defaults.registry);
|
|
1352
|
-
return;
|
|
1353
|
-
}
|
|
1354
|
-
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);
|
|
1355
1239
|
} catch (err) {
|
|
1356
1240
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1357
1241
|
if (!res.headersSent) require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|