@copilotkit/aimock 1.16.4 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +24 -0
  4. package/README.md +10 -10
  5. package/dist/a2a-mock.d.cts +2 -2
  6. package/dist/a2a-mock.d.cts.map +1 -1
  7. package/dist/a2a-mock.d.ts +2 -2
  8. package/dist/a2a-mock.d.ts.map +1 -1
  9. package/dist/a2a-mock.js +2 -2
  10. package/dist/a2a-mock.js.map +1 -1
  11. package/dist/agui-handler.cjs +120 -5
  12. package/dist/agui-handler.cjs.map +1 -1
  13. package/dist/agui-handler.d.cts +41 -5
  14. package/dist/agui-handler.d.cts.map +1 -1
  15. package/dist/agui-handler.d.ts +41 -5
  16. package/dist/agui-handler.d.ts.map +1 -1
  17. package/dist/agui-handler.js +114 -6
  18. package/dist/agui-handler.js.map +1 -1
  19. package/dist/agui-mock.cjs +18 -7
  20. package/dist/agui-mock.cjs.map +1 -1
  21. package/dist/agui-mock.d.cts +2 -2
  22. package/dist/agui-mock.d.cts.map +1 -1
  23. package/dist/agui-mock.d.ts +2 -2
  24. package/dist/agui-mock.d.ts.map +1 -1
  25. package/dist/agui-mock.js +20 -9
  26. package/dist/agui-mock.js.map +1 -1
  27. package/dist/agui-recorder.cjs +43 -22
  28. package/dist/agui-recorder.cjs.map +1 -1
  29. package/dist/agui-recorder.d.cts +4 -3
  30. package/dist/agui-recorder.d.cts.map +1 -1
  31. package/dist/agui-recorder.d.ts +4 -3
  32. package/dist/agui-recorder.d.ts.map +1 -1
  33. package/dist/agui-recorder.js +45 -24
  34. package/dist/agui-recorder.js.map +1 -1
  35. package/dist/agui-stub.cjs +28 -0
  36. package/dist/agui-stub.d.cts +5 -0
  37. package/dist/agui-stub.d.ts +5 -0
  38. package/dist/agui-stub.js +5 -0
  39. package/dist/agui-types.d.cts +33 -6
  40. package/dist/agui-types.d.cts.map +1 -1
  41. package/dist/agui-types.d.ts +33 -6
  42. package/dist/agui-types.d.ts.map +1 -1
  43. package/dist/aimock-cli.cjs +1 -1
  44. package/dist/aimock-cli.js +1 -1
  45. package/dist/aws-event-stream.d.cts +2 -2
  46. package/dist/aws-event-stream.d.cts.map +1 -1
  47. package/dist/aws-event-stream.d.ts +2 -2
  48. package/dist/aws-event-stream.d.ts.map +1 -1
  49. package/dist/bedrock-converse.d.cts +3 -3
  50. package/dist/bedrock-converse.d.cts.map +1 -1
  51. package/dist/bedrock-converse.d.ts +3 -3
  52. package/dist/bedrock-converse.d.ts.map +1 -1
  53. package/dist/bedrock.d.cts +3 -3
  54. package/dist/bedrock.d.cts.map +1 -1
  55. package/dist/bedrock.d.ts +3 -3
  56. package/dist/bedrock.d.ts.map +1 -1
  57. package/dist/chaos.d.cts +3 -3
  58. package/dist/chaos.d.cts.map +1 -1
  59. package/dist/chaos.d.ts +3 -3
  60. package/dist/chaos.d.ts.map +1 -1
  61. package/dist/cli.cjs +6 -5
  62. package/dist/cli.cjs.map +1 -1
  63. package/dist/cli.js +6 -5
  64. package/dist/cli.js.map +1 -1
  65. package/dist/cohere.d.cts +2 -2
  66. package/dist/cohere.d.cts.map +1 -1
  67. package/dist/cohere.d.ts +2 -2
  68. package/dist/cohere.d.ts.map +1 -1
  69. package/dist/config-loader.cjs +3 -3
  70. package/dist/config-loader.d.cts +1 -1
  71. package/dist/config-loader.d.cts.map +1 -1
  72. package/dist/config-loader.d.ts +1 -1
  73. package/dist/config-loader.d.ts.map +1 -1
  74. package/dist/config-loader.js +2 -2
  75. package/dist/convert-vidaimock.cjs +1 -1
  76. package/dist/convert-vidaimock.js +1 -1
  77. package/dist/convert.cjs +1 -1
  78. package/dist/convert.js +1 -1
  79. package/dist/elevenlabs-audio.cjs +209 -0
  80. package/dist/elevenlabs-audio.cjs.map +1 -0
  81. package/dist/elevenlabs-audio.d.cts +11 -0
  82. package/dist/elevenlabs-audio.d.cts.map +1 -0
  83. package/dist/elevenlabs-audio.d.ts +11 -0
  84. package/dist/elevenlabs-audio.d.ts.map +1 -0
  85. package/dist/elevenlabs-audio.js +209 -0
  86. package/dist/elevenlabs-audio.js.map +1 -0
  87. package/dist/embeddings.d.cts +2 -2
  88. package/dist/embeddings.d.cts.map +1 -1
  89. package/dist/embeddings.d.ts +2 -2
  90. package/dist/embeddings.d.ts.map +1 -1
  91. package/dist/fal-audio.cjs +477 -0
  92. package/dist/fal-audio.cjs.map +1 -0
  93. package/dist/fal-audio.d.cts +10 -0
  94. package/dist/fal-audio.d.cts.map +1 -0
  95. package/dist/fal-audio.d.ts +10 -0
  96. package/dist/fal-audio.d.ts.map +1 -0
  97. package/dist/fal-audio.js +474 -0
  98. package/dist/fal-audio.js.map +1 -0
  99. package/dist/fixture-loader.cjs +14 -1
  100. package/dist/fixture-loader.cjs.map +1 -1
  101. package/dist/fixture-loader.js +14 -1
  102. package/dist/fixture-loader.js.map +1 -1
  103. package/dist/fixtures-remote.cjs +1 -1
  104. package/dist/fixtures-remote.js +1 -1
  105. package/dist/gemini-interactions.cjs +617 -0
  106. package/dist/gemini-interactions.cjs.map +1 -0
  107. package/dist/gemini-interactions.d.cts +46 -0
  108. package/dist/gemini-interactions.d.cts.map +1 -0
  109. package/dist/gemini-interactions.d.ts +46 -0
  110. package/dist/gemini-interactions.d.ts.map +1 -0
  111. package/dist/gemini-interactions.js +616 -0
  112. package/dist/gemini-interactions.js.map +1 -0
  113. package/dist/gemini.cjs +76 -0
  114. package/dist/gemini.cjs.map +1 -1
  115. package/dist/gemini.d.cts +2 -2
  116. package/dist/gemini.d.cts.map +1 -1
  117. package/dist/gemini.d.ts +2 -2
  118. package/dist/gemini.d.ts.map +1 -1
  119. package/dist/gemini.js +77 -1
  120. package/dist/gemini.js.map +1 -1
  121. package/dist/helpers.cjs +24 -1
  122. package/dist/helpers.cjs.map +1 -1
  123. package/dist/helpers.d.cts +13 -3
  124. package/dist/helpers.d.cts.map +1 -1
  125. package/dist/helpers.d.ts +13 -3
  126. package/dist/helpers.d.ts.map +1 -1
  127. package/dist/helpers.js +23 -2
  128. package/dist/helpers.js.map +1 -1
  129. package/dist/images.d.cts +2 -2
  130. package/dist/images.d.cts.map +1 -1
  131. package/dist/images.d.ts +2 -2
  132. package/dist/images.d.ts.map +1 -1
  133. package/dist/index.cjs +21 -4
  134. package/dist/index.d.cts +10 -7
  135. package/dist/index.d.ts +10 -7
  136. package/dist/index.js +10 -7
  137. package/dist/jest.cjs +1 -1
  138. package/dist/jest.js +1 -1
  139. package/dist/jsonrpc.d.cts +3 -3
  140. package/dist/jsonrpc.d.cts.map +1 -1
  141. package/dist/jsonrpc.d.ts +3 -3
  142. package/dist/jsonrpc.d.ts.map +1 -1
  143. package/dist/llmock.cjs +38 -2
  144. package/dist/llmock.cjs.map +1 -1
  145. package/dist/llmock.d.cts +4 -0
  146. package/dist/llmock.d.cts.map +1 -1
  147. package/dist/llmock.d.ts +4 -0
  148. package/dist/llmock.d.ts.map +1 -1
  149. package/dist/llmock.js +38 -2
  150. package/dist/llmock.js.map +1 -1
  151. package/dist/logger.cjs +5 -4
  152. package/dist/logger.cjs.map +1 -1
  153. package/dist/logger.d.cts +1 -1
  154. package/dist/logger.d.cts.map +1 -1
  155. package/dist/logger.d.ts +1 -1
  156. package/dist/logger.d.ts.map +1 -1
  157. package/dist/logger.js +5 -4
  158. package/dist/logger.js.map +1 -1
  159. package/dist/mcp-mock.d.cts +2 -2
  160. package/dist/mcp-mock.d.cts.map +1 -1
  161. package/dist/mcp-mock.d.ts +2 -2
  162. package/dist/mcp-mock.d.ts.map +1 -1
  163. package/dist/mcp-mock.js +2 -2
  164. package/dist/mcp-mock.js.map +1 -1
  165. package/dist/messages.d.cts +2 -2
  166. package/dist/messages.d.cts.map +1 -1
  167. package/dist/messages.d.ts +2 -2
  168. package/dist/messages.d.ts.map +1 -1
  169. package/dist/moderation.d.cts +3 -3
  170. package/dist/moderation.d.cts.map +1 -1
  171. package/dist/moderation.d.ts +3 -3
  172. package/dist/moderation.d.ts.map +1 -1
  173. package/dist/ndjson-writer.d.cts +2 -2
  174. package/dist/ndjson-writer.d.cts.map +1 -1
  175. package/dist/ndjson-writer.d.ts +2 -2
  176. package/dist/ndjson-writer.d.ts.map +1 -1
  177. package/dist/ollama.d.cts +3 -3
  178. package/dist/ollama.d.cts.map +1 -1
  179. package/dist/ollama.d.ts +3 -3
  180. package/dist/ollama.d.ts.map +1 -1
  181. package/dist/recorder.cjs +64 -21
  182. package/dist/recorder.cjs.map +1 -1
  183. package/dist/recorder.d.cts +2 -2
  184. package/dist/recorder.d.cts.map +1 -1
  185. package/dist/recorder.d.ts +2 -2
  186. package/dist/recorder.d.ts.map +1 -1
  187. package/dist/recorder.js +66 -23
  188. package/dist/recorder.js.map +1 -1
  189. package/dist/rerank.d.cts +3 -3
  190. package/dist/rerank.d.cts.map +1 -1
  191. package/dist/rerank.d.ts +3 -3
  192. package/dist/rerank.d.ts.map +1 -1
  193. package/dist/responses.d.cts +2 -2
  194. package/dist/responses.d.cts.map +1 -1
  195. package/dist/responses.d.ts +2 -2
  196. package/dist/responses.d.ts.map +1 -1
  197. package/dist/router.cjs +1 -1
  198. package/dist/router.cjs.map +1 -1
  199. package/dist/router.js +1 -1
  200. package/dist/router.js.map +1 -1
  201. package/dist/search.d.cts +3 -3
  202. package/dist/search.d.cts.map +1 -1
  203. package/dist/search.d.ts +3 -3
  204. package/dist/search.d.ts.map +1 -1
  205. package/dist/server.cjs +170 -1
  206. package/dist/server.cjs.map +1 -1
  207. package/dist/server.d.cts +2 -2
  208. package/dist/server.d.cts.map +1 -1
  209. package/dist/server.d.ts +2 -2
  210. package/dist/server.d.ts.map +1 -1
  211. package/dist/server.js +173 -4
  212. package/dist/server.js.map +1 -1
  213. package/dist/speech.cjs +18 -9
  214. package/dist/speech.cjs.map +1 -1
  215. package/dist/speech.d.cts +2 -2
  216. package/dist/speech.d.cts.map +1 -1
  217. package/dist/speech.d.ts +2 -2
  218. package/dist/speech.d.ts.map +1 -1
  219. package/dist/speech.js +18 -9
  220. package/dist/speech.js.map +1 -1
  221. package/dist/sse-writer.d.cts +3 -3
  222. package/dist/sse-writer.d.cts.map +1 -1
  223. package/dist/sse-writer.d.ts +3 -3
  224. package/dist/sse-writer.d.ts.map +1 -1
  225. package/dist/stream-collapse.cjs +80 -9
  226. package/dist/stream-collapse.cjs.map +1 -1
  227. package/dist/stream-collapse.d.cts +11 -1
  228. package/dist/stream-collapse.d.cts.map +1 -1
  229. package/dist/stream-collapse.d.ts +11 -1
  230. package/dist/stream-collapse.d.ts.map +1 -1
  231. package/dist/stream-collapse.js +80 -10
  232. package/dist/stream-collapse.js.map +1 -1
  233. package/dist/suite.cjs +1 -1
  234. package/dist/suite.d.cts +2 -2
  235. package/dist/suite.d.ts +2 -2
  236. package/dist/suite.js +1 -1
  237. package/dist/transcription.d.cts +2 -2
  238. package/dist/transcription.d.cts.map +1 -1
  239. package/dist/transcription.d.ts +2 -2
  240. package/dist/transcription.d.ts.map +1 -1
  241. package/dist/types.d.cts +10 -7
  242. package/dist/types.d.cts.map +1 -1
  243. package/dist/types.d.ts +10 -7
  244. package/dist/types.d.ts.map +1 -1
  245. package/dist/vector-mock.d.cts +2 -2
  246. package/dist/vector-mock.d.cts.map +1 -1
  247. package/dist/vector-mock.d.ts +2 -2
  248. package/dist/vector-mock.d.ts.map +1 -1
  249. package/dist/vector-mock.js +2 -2
  250. package/dist/vector-mock.js.map +1 -1
  251. package/dist/vector-types.d.ts.map +1 -1
  252. package/dist/video.d.cts +3 -3
  253. package/dist/video.d.cts.map +1 -1
  254. package/dist/video.d.ts +3 -3
  255. package/dist/video.d.ts.map +1 -1
  256. package/dist/vitest.cjs +1 -1
  257. package/dist/vitest.js +1 -1
  258. package/dist/ws-framing.d.cts +2 -2
  259. package/dist/ws-framing.d.cts.map +1 -1
  260. package/dist/ws-framing.d.ts +2 -2
  261. package/dist/ws-framing.d.ts.map +1 -1
  262. package/dist/ws-gemini-live.cjs +145 -2
  263. package/dist/ws-gemini-live.cjs.map +1 -1
  264. package/dist/ws-gemini-live.d.cts.map +1 -1
  265. package/dist/ws-gemini-live.d.ts.map +1 -1
  266. package/dist/ws-gemini-live.js +146 -3
  267. package/dist/ws-gemini-live.js.map +1 -1
  268. package/package.json +16 -2
  269. package/skills/write-fixtures/SKILL.md +10 -10
package/dist/server.js CHANGED
@@ -1,4 +1,5 @@
1
- import { buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, getTestId, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse } from "./helpers.js";
1
+ import { buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, getTestId, isAudioResponse, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse } from "./helpers.js";
2
+ import { Logger } from "./logger.js";
2
3
  import { Journal } from "./journal.js";
3
4
  import { matchFixture } from "./router.js";
4
5
  import { entryToFixture, validateFixtures } from "./fixture-loader.js";
@@ -11,11 +12,14 @@ import { handleMessages } from "./messages.js";
11
12
  import { handleGemini } from "./gemini.js";
12
13
  import { handleBedrock, handleBedrockStream } from "./bedrock.js";
13
14
  import { handleConverse, handleConverseStream } from "./bedrock-converse.js";
15
+ import { handleGeminiInteractions } from "./gemini-interactions.js";
14
16
  import { handleEmbeddings } from "./embeddings.js";
15
17
  import { handleImages } from "./images.js";
16
18
  import { handleSpeech } from "./speech.js";
17
19
  import { handleTranscription } from "./transcription.js";
18
20
  import { VideoStateMap, handleVideoCreate, handleVideoStatus } from "./video.js";
21
+ import { handleElevenLabsAudio } from "./elevenlabs-audio.js";
22
+ import { falJobs, handleFalQueue } from "./fal-audio.js";
19
23
  import { handleOllama, handleOllamaGenerate } from "./ollama.js";
20
24
  import { handleCohere } from "./cohere.js";
21
25
  import { handleSearch } from "./search.js";
@@ -25,9 +29,8 @@ import { upgradeToWebSocket } from "./ws-framing.js";
25
29
  import { handleWebSocketResponses } from "./ws-responses.js";
26
30
  import { handleWebSocketRealtime } from "./ws-realtime.js";
27
31
  import { handleWebSocketGeminiLive } from "./ws-gemini-live.js";
28
- import { Logger } from "./logger.js";
29
32
  import { createMetricsRegistry, normalizePathLabel } from "./metrics.js";
30
- import * as http from "node:http";
33
+ import * as http$1 from "node:http";
31
34
 
32
35
  //#region src/server.ts
33
36
  const COMPLETIONS_PATH = "/v1/chat/completions";
@@ -46,6 +49,11 @@ const TRANSCRIPTIONS_PATH = "/v1/audio/transcriptions";
46
49
  const VIDEOS_PATH = "/v1/videos";
47
50
  const VIDEOS_STATUS_RE = /^\/v1\/videos\/([^/]+)$/;
48
51
  const GEMINI_PREDICT_RE = /^\/v1beta\/models\/([^:]+):predict$/;
52
+ const ELEVENLABS_SOUND_GENERATION_PATH = "/v1/sound-generation";
53
+ const ELEVENLABS_MUSIC_RE = /^\/v1\/music(?:\/(.+))?$/;
54
+ const FAL_QUEUE_SUBMIT_RE = /^\/fal\/queue\/submit\/(.+)$/;
55
+ const FAL_QUEUE_REQUESTS_RE = /^\/fal\/queue\/requests\/(.+)$/;
56
+ const FAL_RUN_RE = /^\/fal\/run\/(.+)$/;
49
57
  const DEFAULT_CHUNK_SIZE = 20;
50
58
  const COMPAT_SUFFIXES = [
51
59
  "/chat/completions",
@@ -71,6 +79,7 @@ function normalizeCompatPath(pathname, logger) {
71
79
  }
72
80
  return pathname;
73
81
  }
82
+ const GEMINI_INTERACTIONS_PATH = "/v1beta/interactions";
74
83
  const GEMINI_PATH_RE = /^\/v1beta\/models\/([^:]+):(generateContent|streamGenerateContent)$/;
75
84
  const AZURE_DEPLOYMENT_RE = /^\/openai\/deployments\/([^/]+)\/(chat\/completions|embeddings)$/;
76
85
  const BEDROCK_INVOKE_RE = /^\/model\/([^/]+)\/invoke$/;
@@ -199,6 +208,7 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
199
208
  fixtures.length = 0;
200
209
  journal.clear();
201
210
  videoStates.clear();
211
+ falJobs.clear();
202
212
  if (defaults.registry) defaults.registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
203
213
  res.writeHead(200, { "Content-Type": "application/json" });
204
214
  res.end(JSON.stringify({ reset: true }));
@@ -392,6 +402,23 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
392
402
  writeErrorResponse(res, status, JSON.stringify(response));
393
403
  return;
394
404
  }
405
+ if (isAudioResponse(response)) {
406
+ journal.add({
407
+ method: req.method ?? "POST",
408
+ path: req.url ?? COMPLETIONS_PATH,
409
+ headers: flattenHeaders(req.headers),
410
+ body,
411
+ response: {
412
+ status: 422,
413
+ fixture
414
+ }
415
+ });
416
+ writeErrorResponse(res, 422, JSON.stringify({ error: {
417
+ message: "Audio responses are not supported on the chat completions endpoint. Use Gemini generateContent or a dedicated audio endpoint.",
418
+ type: "invalid_request_error"
419
+ } }));
420
+ return;
421
+ }
395
422
  if (isContentWithToolCallsResponse(response)) {
396
423
  if (response.webSearches?.length) defaults.logger.warn("webSearches in fixture response are not supported for Chat Completions API — ignoring");
397
424
  const overrides = extractOverrides(response);
@@ -559,7 +586,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
559
586
  if (registry && handler.setRegistry) handler.setRegistry(registry);
560
587
  }
561
588
  if (registry) registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
562
- const server = http.createServer((req, res) => {
589
+ const server = http$1.createServer((req, res) => {
563
590
  handleHttpRequest(req, res).catch((err) => {
564
591
  const msg = err instanceof Error ? err.message : "Internal error";
565
592
  defaults.logger.warn(`Unhandled request error: ${msg}`);
@@ -857,6 +884,26 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
857
884
  }
858
885
  return;
859
886
  }
887
+ if (pathname === GEMINI_INTERACTIONS_PATH && req.method === "POST") {
888
+ try {
889
+ await handleGeminiInteractions(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
890
+ } catch (err) {
891
+ const msg = err instanceof Error ? err.message : "Internal error";
892
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
893
+ message: msg,
894
+ type: "server_error"
895
+ } }));
896
+ else if (!res.writableEnded) {
897
+ try {
898
+ res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
899
+ } catch (writeErr) {
900
+ logger.debug("Failed to write error recovery response:", writeErr);
901
+ }
902
+ res.end();
903
+ }
904
+ }
905
+ return;
906
+ }
860
907
  const geminiMatch = pathname.match(GEMINI_PATH_RE);
861
908
  if (geminiMatch && req.method === "POST") {
862
909
  const geminiModel = geminiMatch[1];
@@ -1044,6 +1091,128 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
1044
1091
  }
1045
1092
  return;
1046
1093
  }
1094
+ if (pathname === ELEVENLABS_SOUND_GENERATION_PATH && req.method === "POST") {
1095
+ setCorsHeaders(res);
1096
+ try {
1097
+ const raw = await readBody(req);
1098
+ if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
1099
+ method: req.method ?? "POST",
1100
+ path: pathname,
1101
+ headers: flattenHeaders(req.headers),
1102
+ body: {
1103
+ model: "",
1104
+ messages: []
1105
+ }
1106
+ }, defaults.registry, defaults.logger)) return;
1107
+ await handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, "sound-generation");
1108
+ } catch (err) {
1109
+ const msg = err instanceof Error ? err.message : "Internal error";
1110
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
1111
+ message: msg,
1112
+ type: "server_error"
1113
+ } }));
1114
+ else if (!res.writableEnded) res.destroy();
1115
+ }
1116
+ return;
1117
+ }
1118
+ const musicMatch = pathname.match(ELEVENLABS_MUSIC_RE);
1119
+ if (musicMatch && req.method === "POST") {
1120
+ setCorsHeaders(res);
1121
+ const musicSubType = musicMatch[1] ?? "music";
1122
+ try {
1123
+ const raw = await readBody(req);
1124
+ if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
1125
+ method: req.method ?? "POST",
1126
+ path: pathname,
1127
+ headers: flattenHeaders(req.headers),
1128
+ body: {
1129
+ model: "",
1130
+ messages: []
1131
+ }
1132
+ }, defaults.registry, defaults.logger)) return;
1133
+ await handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, musicSubType);
1134
+ } catch (err) {
1135
+ const msg = err instanceof Error ? err.message : "Internal error";
1136
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
1137
+ message: msg,
1138
+ type: "server_error"
1139
+ } }));
1140
+ else if (!res.writableEnded) res.destroy();
1141
+ }
1142
+ return;
1143
+ }
1144
+ if (pathname.match(FAL_QUEUE_SUBMIT_RE) && req.method === "POST") {
1145
+ setCorsHeaders(res);
1146
+ try {
1147
+ const raw = await readBody(req);
1148
+ if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
1149
+ method: req.method ?? "POST",
1150
+ path: pathname,
1151
+ headers: flattenHeaders(req.headers),
1152
+ body: {
1153
+ model: "",
1154
+ messages: []
1155
+ }
1156
+ }, defaults.registry, defaults.logger)) return;
1157
+ await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
1158
+ } catch (err) {
1159
+ const msg = err instanceof Error ? err.message : "Internal error";
1160
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
1161
+ message: msg,
1162
+ type: "server_error"
1163
+ } }));
1164
+ else if (!res.writableEnded) res.destroy();
1165
+ }
1166
+ return;
1167
+ }
1168
+ if (pathname.match(FAL_QUEUE_REQUESTS_RE) && (req.method === "GET" || req.method === "POST" || req.method === "PUT")) {
1169
+ setCorsHeaders(res);
1170
+ try {
1171
+ const raw = req.method === "POST" ? await readBody(req) : "{}";
1172
+ if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
1173
+ method: req.method ?? "GET",
1174
+ path: pathname,
1175
+ headers: flattenHeaders(req.headers),
1176
+ body: {
1177
+ model: "",
1178
+ messages: []
1179
+ }
1180
+ }, defaults.registry, defaults.logger)) return;
1181
+ await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
1182
+ } catch (err) {
1183
+ const msg = err instanceof Error ? err.message : "Internal error";
1184
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
1185
+ message: msg,
1186
+ type: "server_error"
1187
+ } }));
1188
+ else if (!res.writableEnded) res.destroy();
1189
+ }
1190
+ return;
1191
+ }
1192
+ if (pathname.match(FAL_RUN_RE) && req.method === "POST") {
1193
+ setCorsHeaders(res);
1194
+ try {
1195
+ const raw = await readBody(req);
1196
+ if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
1197
+ method: req.method ?? "POST",
1198
+ path: pathname,
1199
+ headers: flattenHeaders(req.headers),
1200
+ body: {
1201
+ model: "",
1202
+ messages: []
1203
+ }
1204
+ }, defaults.registry, defaults.logger)) return;
1205
+ await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
1206
+ } catch (err) {
1207
+ const msg = err instanceof Error ? err.message : "Internal error";
1208
+ if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
1209
+ message: msg,
1210
+ type: "server_error"
1211
+ } }));
1212
+ else if (!res.writableEnded) res.destroy();
1213
+ }
1214
+ return;
1215
+ }
1047
1216
  if (pathname !== COMPLETIONS_PATH) {
1048
1217
  handleNotFound(res, "Not found");
1049
1218
  return;