@copilotkit/aimock 1.45.0 → 1.46.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +7 -1
- package/dist/agui-mock.cjs +25 -25
- package/dist/agui-mock.cjs.map +1 -1
- package/dist/agui-mock.d.cts.map +1 -1
- package/dist/agui-mock.d.ts.map +1 -1
- package/dist/agui-mock.js +25 -25
- package/dist/agui-mock.js.map +1 -1
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +15 -1
- package/dist/aimock-cli.cjs.map +1 -1
- package/dist/aimock-cli.d.cts.map +1 -1
- package/dist/aimock-cli.d.ts.map +1 -1
- package/dist/aimock-cli.js +16 -2
- package/dist/aimock-cli.js.map +1 -1
- package/dist/api-key-auth.cjs +10 -9
- package/dist/api-key-auth.cjs.map +1 -1
- package/dist/api-key-auth.d.cts.map +1 -1
- package/dist/api-key-auth.d.ts.map +1 -1
- package/dist/api-key-auth.js +11 -10
- package/dist/api-key-auth.js.map +1 -1
- package/dist/batches.cjs +2 -4
- package/dist/batches.cjs.map +1 -1
- package/dist/batches.d.cts.map +1 -1
- package/dist/batches.d.ts.map +1 -1
- package/dist/batches.js +2 -4
- package/dist/batches.js.map +1 -1
- package/dist/bedrock-converse.cjs +61 -80
- 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 +58 -77
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +65 -97
- 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 +62 -94
- package/dist/bedrock.js.map +1 -1
- package/dist/byteplus-video.cjs +11 -10
- package/dist/byteplus-video.cjs.map +1 -1
- package/dist/byteplus-video.d.cts.map +1 -1
- package/dist/byteplus-video.d.ts.map +1 -1
- package/dist/byteplus-video.js +5 -4
- package/dist/byteplus-video.js.map +1 -1
- package/dist/chaos.cjs +5 -4
- package/dist/chaos.cjs.map +1 -1
- package/dist/chaos.d.cts.map +1 -1
- package/dist/chaos.d.ts.map +1 -1
- package/dist/chaos.js +5 -4
- package/dist/chaos.js.map +1 -1
- package/dist/cli.cjs +15 -0
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +49 -74
- 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 +47 -72
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.cjs +29 -1
- package/dist/config-loader.cjs.map +1 -1
- package/dist/config-loader.d.cts +7 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts +7 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +29 -2
- package/dist/config-loader.js.map +1 -1
- package/dist/count-tokens.cjs +146 -0
- package/dist/count-tokens.cjs.map +1 -0
- package/dist/count-tokens.js +146 -0
- package/dist/count-tokens.js.map +1 -0
- package/dist/elevenlabs-audio.cjs +36 -34
- 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 +33 -31
- package/dist/elevenlabs-audio.js.map +1 -1
- package/dist/elevenlabs-voice.cjs +38 -37
- package/dist/elevenlabs-voice.cjs.map +1 -1
- package/dist/elevenlabs-voice.d.cts.map +1 -1
- package/dist/elevenlabs-voice.d.ts.map +1 -1
- package/dist/elevenlabs-voice.js +33 -32
- package/dist/elevenlabs-voice.js.map +1 -1
- package/dist/embedding-request.cjs +16 -0
- package/dist/embedding-request.cjs.map +1 -0
- package/dist/embedding-request.js +14 -0
- package/dist/embedding-request.js.map +1 -0
- package/dist/embeddings.cjs +30 -20
- 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 +30 -20
- package/dist/embeddings.js.map +1 -1
- package/dist/fal-audio.cjs +45 -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 +42 -40
- package/dist/fal-audio.js.map +1 -1
- package/dist/fal.cjs +17 -15
- package/dist/fal.cjs.map +1 -1
- package/dist/fal.js +16 -14
- package/dist/fal.js.map +1 -1
- package/dist/files.cjs +2 -4
- package/dist/files.cjs.map +1 -1
- package/dist/files.d.cts.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +2 -4
- package/dist/files.js.map +1 -1
- package/dist/fine-tuning.cjs +2 -4
- package/dist/fine-tuning.cjs.map +1 -1
- package/dist/fine-tuning.d.cts.map +1 -1
- package/dist/fine-tuning.d.ts.map +1 -1
- package/dist/fine-tuning.js +2 -4
- package/dist/fine-tuning.js.map +1 -1
- package/dist/fixture-loader.cjs +37 -42
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +37 -42
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-embeddings.cjs +26 -24
- package/dist/gemini-embeddings.cjs.map +1 -1
- package/dist/gemini-embeddings.js +26 -24
- package/dist/gemini-embeddings.js.map +1 -1
- package/dist/gemini-interactions.cjs +50 -35
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts +0 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts +0 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +49 -34
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +57 -67
- 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 +56 -67
- package/dist/gemini.js.map +1 -1
- package/dist/grok-video.cjs +14 -12
- package/dist/grok-video.cjs.map +1 -1
- package/dist/grok-video.d.cts.map +1 -1
- package/dist/grok-video.d.ts.map +1 -1
- package/dist/grok-video.js +8 -6
- package/dist/grok-video.js.map +1 -1
- package/dist/helpers.cjs +11 -68
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +12 -67
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +30 -28
- 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 -25
- package/dist/images.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/journal.cjs +3 -1
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +2 -1
- package/dist/journal.js.map +1 -1
- package/dist/llmock.cjs +3 -0
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +3 -0
- package/dist/llmock.js.map +1 -1
- package/dist/mcp-fakes.d.cts.map +1 -1
- package/dist/mcp-handler.cjs +14 -4
- package/dist/mcp-handler.cjs.map +1 -1
- package/dist/mcp-handler.js +14 -4
- package/dist/mcp-handler.js.map +1 -1
- package/dist/mcp-recorder.cjs +2 -1
- package/dist/mcp-recorder.cjs.map +1 -1
- package/dist/mcp-recorder.js +3 -2
- package/dist/mcp-recorder.js.map +1 -1
- package/dist/messages.cjs +111 -96
- 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 +109 -95
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +5 -2
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +6 -3
- package/dist/metrics.js.map +1 -1
- package/dist/model-utils.cjs +1 -0
- package/dist/model-utils.cjs.map +1 -1
- package/dist/model-utils.js +1 -1
- package/dist/model-utils.js.map +1 -1
- package/dist/moderation.cjs +15 -12
- package/dist/moderation.cjs.map +1 -1
- package/dist/moderation.js +14 -11
- package/dist/moderation.js.map +1 -1
- package/dist/ollama.cjs +128 -68
- 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 +124 -64
- package/dist/ollama.js.map +1 -1
- package/dist/openapi.cjs +323 -3
- package/dist/openapi.cjs.map +1 -1
- package/dist/openapi.d.cts.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +324 -4
- package/dist/openapi.js.map +1 -1
- package/dist/openrouter-chat.cjs +11 -155
- package/dist/openrouter-chat.cjs.map +1 -1
- package/dist/openrouter-chat.js +11 -155
- package/dist/openrouter-chat.js.map +1 -1
- package/dist/openrouter-video.cjs +76 -71
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.d.cts.map +1 -1
- package/dist/openrouter-video.d.ts.map +1 -1
- package/dist/openrouter-video.js +63 -58
- package/dist/openrouter-video.js.map +1 -1
- package/dist/recorder.cjs +176 -95
- 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 +176 -95
- package/dist/recorder.js.map +1 -1
- package/dist/rerank.cjs +13 -11
- package/dist/rerank.cjs.map +1 -1
- package/dist/rerank.js +12 -10
- package/dist/rerank.js.map +1 -1
- package/dist/response/catalog/anthropic-page.cjs +39 -0
- package/dist/response/catalog/anthropic-page.cjs.map +1 -0
- package/dist/response/catalog/anthropic-page.js +38 -0
- package/dist/response/catalog/anthropic-page.js.map +1 -0
- package/dist/response/catalog/collect.cjs +61 -0
- package/dist/response/catalog/collect.cjs.map +1 -0
- package/dist/response/catalog/collect.js +59 -0
- package/dist/response/catalog/collect.js.map +1 -0
- package/dist/response/catalog/gemini-page.cjs +25 -0
- package/dist/response/catalog/gemini-page.cjs.map +1 -0
- package/dist/response/catalog/gemini-page.js +24 -0
- package/dist/response/catalog/gemini-page.js.map +1 -0
- package/dist/response/catalog/render.cjs +182 -0
- package/dist/response/catalog/render.cjs.map +1 -0
- package/dist/response/catalog/render.js +171 -0
- package/dist/response/catalog/render.js.map +1 -0
- package/dist/response/errors.cjs +225 -0
- package/dist/response/errors.cjs.map +1 -0
- package/dist/response/errors.js +224 -0
- package/dist/response/errors.js.map +1 -0
- package/dist/response/finish.cjs +39 -0
- package/dist/response/finish.cjs.map +1 -0
- package/dist/response/finish.js +35 -0
- package/dist/response/finish.js.map +1 -0
- package/dist/response/policy.cjs +126 -0
- package/dist/response/policy.cjs.map +1 -0
- package/dist/response/policy.js +120 -0
- package/dist/response/policy.js.map +1 -0
- package/dist/response/profiles.cjs +69 -0
- package/dist/response/profiles.cjs.map +1 -0
- package/dist/response/profiles.js +65 -0
- package/dist/response/profiles.js.map +1 -0
- package/dist/response/usage/codecs/anthropic.cjs +52 -0
- package/dist/response/usage/codecs/anthropic.cjs.map +1 -0
- package/dist/response/usage/codecs/anthropic.js +50 -0
- package/dist/response/usage/codecs/anthropic.js.map +1 -0
- package/dist/response/usage/codecs/cohere.cjs +36 -0
- package/dist/response/usage/codecs/cohere.cjs.map +1 -0
- package/dist/response/usage/codecs/cohere.js +35 -0
- package/dist/response/usage/codecs/cohere.js.map +1 -0
- package/dist/response/usage/codecs/converse.cjs +16 -0
- package/dist/response/usage/codecs/converse.cjs.map +1 -0
- package/dist/response/usage/codecs/converse.js +15 -0
- package/dist/response/usage/codecs/converse.js.map +1 -0
- package/dist/response/usage/codecs/gemini.cjs +31 -0
- package/dist/response/usage/codecs/gemini.cjs.map +1 -0
- package/dist/response/usage/codecs/gemini.js +31 -0
- package/dist/response/usage/codecs/gemini.js.map +1 -0
- package/dist/response/usage/codecs/interactions.cjs +22 -0
- package/dist/response/usage/codecs/interactions.cjs.map +1 -0
- package/dist/response/usage/codecs/interactions.js +21 -0
- package/dist/response/usage/codecs/interactions.js.map +1 -0
- package/dist/response/usage/codecs/ollama.cjs +17 -0
- package/dist/response/usage/codecs/ollama.cjs.map +1 -0
- package/dist/response/usage/codecs/ollama.js +17 -0
- package/dist/response/usage/codecs/ollama.js.map +1 -0
- package/dist/response/usage/codecs/openai.cjs +52 -0
- package/dist/response/usage/codecs/openai.cjs.map +1 -0
- package/dist/response/usage/codecs/openai.js +50 -0
- package/dist/response/usage/codecs/openai.js.map +1 -0
- package/dist/response/usage/codecs/openrouter.cjs +68 -0
- package/dist/response/usage/codecs/openrouter.cjs.map +1 -0
- package/dist/response/usage/codecs/openrouter.js +67 -0
- package/dist/response/usage/codecs/openrouter.js.map +1 -0
- package/dist/response/usage/codecs/realtime.cjs +19 -0
- package/dist/response/usage/codecs/realtime.cjs.map +1 -0
- package/dist/response/usage/codecs/realtime.js +18 -0
- package/dist/response/usage/codecs/realtime.js.map +1 -0
- package/dist/response/usage/codecs/responses.cjs +21 -0
- package/dist/response/usage/codecs/responses.cjs.map +1 -0
- package/dist/response/usage/codecs/responses.js +20 -0
- package/dist/response/usage/codecs/responses.js.map +1 -0
- package/dist/response/usage/estimate.cjs +23 -0
- package/dist/response/usage/estimate.cjs.map +1 -0
- package/dist/response/usage/estimate.js +21 -0
- package/dist/response/usage/estimate.js.map +1 -0
- package/dist/response/usage/fields.cjs +72 -0
- package/dist/response/usage/fields.cjs.map +1 -0
- package/dist/response/usage/fields.js +70 -0
- package/dist/response/usage/fields.js.map +1 -0
- package/dist/response/usage/recording.cjs +52 -0
- package/dist/response/usage/recording.cjs.map +1 -0
- package/dist/response/usage/recording.js +52 -0
- package/dist/response/usage/recording.js.map +1 -0
- package/dist/responses.cjs +45 -58
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +44 -57
- package/dist/responses.js.map +1 -1
- package/dist/route-registry.cjs +45 -0
- package/dist/route-registry.cjs.map +1 -1
- package/dist/route-registry.d.cts.map +1 -1
- package/dist/route-registry.d.ts.map +1 -1
- package/dist/route-registry.js +41 -1
- package/dist/route-registry.js.map +1 -1
- package/dist/router.cjs +4 -0
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +3 -0
- package/dist/router.js.map +1 -1
- package/dist/search.cjs +13 -11
- package/dist/search.cjs.map +1 -1
- package/dist/search.js +12 -10
- package/dist/search.js.map +1 -1
- package/dist/server.cjs +222 -146
- 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 +223 -147
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +20 -18
- 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 +19 -17
- package/dist/speech.js.map +1 -1
- package/dist/sse-writer.cjs +7 -0
- package/dist/sse-writer.cjs.map +1 -1
- package/dist/sse-writer.d.cts.map +1 -1
- package/dist/sse-writer.d.ts.map +1 -1
- package/dist/sse-writer.js +7 -1
- package/dist/sse-writer.js.map +1 -1
- package/dist/stream-collapse.cjs +118 -11
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +10 -9
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +10 -9
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +118 -11
- package/dist/stream-collapse.js.map +1 -1
- package/dist/transcription.cjs +12 -10
- 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 +11 -9
- package/dist/transcription.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +62 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +62 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vector-mock.cjs +3 -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 +3 -8
- package/dist/vector-mock.js.map +1 -1
- package/dist/vector-stores.cjs +2 -4
- package/dist/vector-stores.cjs.map +1 -1
- package/dist/vector-stores.d.cts.map +1 -1
- package/dist/vector-stores.d.ts.map +1 -1
- package/dist/vector-stores.js +2 -4
- package/dist/vector-stores.js.map +1 -1
- package/dist/veo-video.cjs +16 -14
- package/dist/veo-video.cjs.map +1 -1
- package/dist/veo-video.js +10 -8
- package/dist/veo-video.js.map +1 -1
- package/dist/video.cjs +21 -19
- package/dist/video.cjs.map +1 -1
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +20 -18
- package/dist/video.js.map +1 -1
- package/dist/ws-gemini-live.cjs +11 -3
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts +0 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts +0 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +10 -2
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-live.cjs +6 -5
- package/dist/ws-live.cjs.map +1 -1
- package/dist/ws-live.js +5 -4
- package/dist/ws-live.js.map +1 -1
- package/dist/ws-realtime.cjs +28 -54
- 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 +25 -51
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +8 -6
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.js +7 -5
- package/dist/ws-responses.js.map +1 -1
- package/package.json +4 -1
- package/skills/write-fixtures/SKILL.md +25 -16
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_errors = require('./response/errors.cjs');
|
|
3
|
+
const require_policy = require('./response/policy.cjs');
|
|
2
4
|
const require_helpers = require('./helpers.cjs');
|
|
3
5
|
const require_sse_writer = require('./sse-writer.cjs');
|
|
4
6
|
const require_chaos = require('./chaos.cjs');
|
|
5
7
|
const require_router = require('./router.cjs');
|
|
6
8
|
const require_url = require('./url.cjs');
|
|
7
9
|
const require_recorder = require('./recorder.cjs');
|
|
10
|
+
const require_collect = require('./response/catalog/collect.cjs');
|
|
11
|
+
const require_render = require('./response/catalog/render.cjs');
|
|
8
12
|
const require_fal = require('./fal.cjs');
|
|
9
13
|
const require_video_proxy_shared = require('./video-proxy-shared.cjs');
|
|
10
14
|
let node_crypto = require("node:crypto");
|
|
11
15
|
node_crypto = require_runtime.__toESM(node_crypto);
|
|
12
16
|
|
|
13
17
|
//#region src/openrouter-video.ts
|
|
14
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Video models OpenRouter has REMOVED (deprecation policy: a removed surface
|
|
20
|
+
* never mocks success — it serves the rejection the real API serves now).
|
|
21
|
+
*
|
|
22
|
+
* openai/sora-2: gone from the live /api/v1/videos/models listing and from
|
|
23
|
+
* /api/v1/models (its /endpoints page is a 404). A live submit observed on
|
|
24
|
+
* 2026-10-10 is rejected with HTTP 400, content-type application/json, body
|
|
25
|
+
* `{"error":{"message":"Model openai/sora-2 does not exist","code":400}}` —
|
|
26
|
+
* the same rejection OpenRouter gives any unknown model id.
|
|
27
|
+
*/
|
|
15
28
|
const OPENROUTER_VIDEO_MAX_ENTRIES = 1e4;
|
|
16
29
|
const OPENROUTER_VIDEO_TTL_MS = 36e5;
|
|
17
30
|
/**
|
|
@@ -217,7 +230,7 @@ async function handleOpenRouterVideoStatus(req, res, jobId, fixtures, journal, d
|
|
|
217
230
|
return;
|
|
218
231
|
}
|
|
219
232
|
if (job.kind === "record") {
|
|
220
|
-
if (
|
|
233
|
+
if (!require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
|
|
221
234
|
defaults.logger.error(`STRICT: video job ${jobId} is proxied live upstream (record mode) — refusing the upstream poll`);
|
|
222
235
|
journal.add({
|
|
223
236
|
method,
|
|
@@ -227,14 +240,14 @@ async function handleOpenRouterVideoStatus(req, res, jobId, fixtures, journal, d
|
|
|
227
240
|
response: {
|
|
228
241
|
status: 503,
|
|
229
242
|
fixture: null,
|
|
230
|
-
...
|
|
243
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
231
244
|
}
|
|
232
245
|
});
|
|
233
|
-
require_sse_writer.writeErrorResponse(res, 503,
|
|
246
|
+
require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
|
|
234
247
|
message: `Strict mode: video job ${jobId} is proxied live upstream (record mode) — nothing reaches an upstream under strict mode`,
|
|
235
248
|
type: "invalid_request_error",
|
|
236
249
|
code: "no_fixture_match"
|
|
237
|
-
}
|
|
250
|
+
}).body);
|
|
238
251
|
return;
|
|
239
252
|
}
|
|
240
253
|
await proxyOpenRouterVideoRecordPoll({
|
|
@@ -375,7 +388,7 @@ async function handleOpenRouterVideoContent(req, res, jobId, journal, defaults,
|
|
|
375
388
|
const queryIdx = path.indexOf("?");
|
|
376
389
|
const indexParam = queryIdx === -1 ? null : new URLSearchParams(path.slice(queryIdx + 1)).get("index");
|
|
377
390
|
if (job.kind === "record") {
|
|
378
|
-
if (
|
|
391
|
+
if (!require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
|
|
379
392
|
defaults.logger.error(`STRICT: video job ${jobId} content is proxied live upstream (record mode) — refusing the upstream fetch`);
|
|
380
393
|
journal.add({
|
|
381
394
|
method,
|
|
@@ -385,14 +398,14 @@ async function handleOpenRouterVideoContent(req, res, jobId, journal, defaults,
|
|
|
385
398
|
response: {
|
|
386
399
|
status: 503,
|
|
387
400
|
fixture: null,
|
|
388
|
-
...
|
|
401
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
389
402
|
}
|
|
390
403
|
});
|
|
391
|
-
require_sse_writer.writeErrorResponse(res, 503,
|
|
404
|
+
require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
|
|
392
405
|
message: `Strict mode: video job ${jobId} is proxied live upstream (record mode) — nothing reaches an upstream under strict mode`,
|
|
393
406
|
type: "invalid_request_error",
|
|
394
407
|
code: "no_fixture_match"
|
|
395
|
-
}
|
|
408
|
+
}).body);
|
|
396
409
|
return;
|
|
397
410
|
}
|
|
398
411
|
await proxyOpenRouterVideoRecordContent({
|
|
@@ -475,13 +488,13 @@ async function proxyOpenRouterVideoRecordContent(args) {
|
|
|
475
488
|
status: 502,
|
|
476
489
|
fixture: null,
|
|
477
490
|
source: "proxy",
|
|
478
|
-
...
|
|
491
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
479
492
|
}
|
|
480
493
|
});
|
|
481
|
-
require_sse_writer.writeErrorResponse(res, 502,
|
|
494
|
+
require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
|
|
482
495
|
message: `Proxy to upstream failed: ${msg}`,
|
|
483
496
|
type: "proxy_error"
|
|
484
|
-
}
|
|
497
|
+
}).body);
|
|
485
498
|
};
|
|
486
499
|
const record = defaults.record;
|
|
487
500
|
if (!record) {
|
|
@@ -562,7 +575,7 @@ async function proxyOpenRouterVideoRecordContent(args) {
|
|
|
562
575
|
status: contentRes.status,
|
|
563
576
|
fixture: null,
|
|
564
577
|
source: "proxy",
|
|
565
|
-
...
|
|
578
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
566
579
|
}
|
|
567
580
|
});
|
|
568
581
|
res.writeHead(contentRes.status, { "Content-Type": contentRes.headers.get("content-type") ?? "application/json" });
|
|
@@ -591,7 +604,7 @@ async function proxyOpenRouterVideoRecordContent(args) {
|
|
|
591
604
|
status: 200,
|
|
592
605
|
fixture: null,
|
|
593
606
|
source: "proxy",
|
|
594
|
-
...
|
|
607
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
595
608
|
}
|
|
596
609
|
});
|
|
597
610
|
if (jobs.get(key) === job) jobs.set(key, job);
|
|
@@ -649,25 +662,6 @@ async function proxyOpenRouterVideoRecordContent(args) {
|
|
|
649
662
|
reader.cancel().catch(() => {});
|
|
650
663
|
}
|
|
651
664
|
}
|
|
652
|
-
const DEFAULT_OPENROUTER_VIDEO_MODELS = [DEFAULT_OPENROUTER_VIDEO_MODEL, "openai/sora-2"];
|
|
653
|
-
function modelEntry(id) {
|
|
654
|
-
return {
|
|
655
|
-
id,
|
|
656
|
-
name: id,
|
|
657
|
-
supported_durations: [4, 8],
|
|
658
|
-
supported_resolutions: ["720p", "1080p"],
|
|
659
|
-
supported_aspect_ratios: [
|
|
660
|
-
"16:9",
|
|
661
|
-
"9:16",
|
|
662
|
-
"1:1"
|
|
663
|
-
],
|
|
664
|
-
supported_frame_images: [],
|
|
665
|
-
supported_sizes: [],
|
|
666
|
-
generate_audio: false,
|
|
667
|
-
seed: true,
|
|
668
|
-
pricing_skus: []
|
|
669
|
-
};
|
|
670
|
-
}
|
|
671
665
|
/**
|
|
672
666
|
* Synthesizes the OpenRouter video model listing from loaded fixtures —
|
|
673
667
|
* video-endpoint fixtures with a string `match.model` (mirrors the Ollama
|
|
@@ -695,7 +689,7 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
|
|
|
695
689
|
const record = defaults.record;
|
|
696
690
|
const upstreamBase = record?.providers.openrouter;
|
|
697
691
|
let proxyAttemptFailed = false;
|
|
698
|
-
if (upstreamBase &&
|
|
692
|
+
if (upstreamBase && require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
|
|
699
693
|
let relay;
|
|
700
694
|
try {
|
|
701
695
|
const target = require_url.resolveUpstreamUrl(upstreamBase, "/api/v1/videos/models");
|
|
@@ -727,7 +721,7 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
|
|
|
727
721
|
status: 200,
|
|
728
722
|
fixture: null,
|
|
729
723
|
source: "proxy",
|
|
730
|
-
...
|
|
724
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
731
725
|
}
|
|
732
726
|
});
|
|
733
727
|
res.writeHead(200, { "Content-Type": relay.contentType });
|
|
@@ -735,14 +729,9 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
|
|
|
735
729
|
return;
|
|
736
730
|
}
|
|
737
731
|
}
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
sawVideoFixture = true;
|
|
742
|
-
if (f.match.model && typeof f.match.model === "string") modelIds.add(f.match.model);
|
|
743
|
-
}
|
|
744
|
-
if (modelIds.size === 0 && sawVideoFixture) defaults.logger.warn("No video fixture contributes a string model — serving the default video model set");
|
|
745
|
-
const ids = modelIds.size > 0 ? [...modelIds] : DEFAULT_OPENROUTER_VIDEO_MODELS;
|
|
732
|
+
const collection = require_collect.collect(fixtures, "video-active");
|
|
733
|
+
if (collection.ids.length === 0 && collection.diagnostics.sawVideoFixture) defaults.logger.warn("No video fixture contributes a string model — serving the default video model set");
|
|
734
|
+
const body = require_render.renderOpenRouterVideoModels(collection.ids);
|
|
746
735
|
if (res.destroyed || res.writableEnded) return;
|
|
747
736
|
journal.add({
|
|
748
737
|
method,
|
|
@@ -753,11 +742,11 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
|
|
|
753
742
|
status: 200,
|
|
754
743
|
fixture: null,
|
|
755
744
|
...proxyAttemptFailed ? { source: "internal" } : {},
|
|
756
|
-
...
|
|
745
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
757
746
|
}
|
|
758
747
|
});
|
|
759
748
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
760
|
-
res.end(JSON.stringify(
|
|
749
|
+
res.end(JSON.stringify(body));
|
|
761
750
|
}
|
|
762
751
|
async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, defaults, setCorsHeaders, jobs) {
|
|
763
752
|
setCorsHeaders(res);
|
|
@@ -778,11 +767,11 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
778
767
|
fixture: null
|
|
779
768
|
}
|
|
780
769
|
});
|
|
781
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
770
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
|
|
782
771
|
message: `Malformed JSON: ${detail}`,
|
|
783
772
|
type: "invalid_request_error",
|
|
784
773
|
code: "invalid_json"
|
|
785
|
-
}
|
|
774
|
+
}).body);
|
|
786
775
|
return;
|
|
787
776
|
}
|
|
788
777
|
if (videoReq === null || typeof videoReq !== "object" || Array.isArray(videoReq)) {
|
|
@@ -796,10 +785,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
796
785
|
fixture: null
|
|
797
786
|
}
|
|
798
787
|
});
|
|
799
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
788
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
|
|
800
789
|
message: "Request body must be a JSON object",
|
|
801
790
|
type: "invalid_request_error"
|
|
802
|
-
}
|
|
791
|
+
}).body);
|
|
803
792
|
return;
|
|
804
793
|
}
|
|
805
794
|
const parsedBody = validationJournalBody(videoReq);
|
|
@@ -814,11 +803,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
814
803
|
fixture: null
|
|
815
804
|
}
|
|
816
805
|
});
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
message,
|
|
806
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
|
|
807
|
+
message: videoReq.prompt === void 0 ? "Missing required parameter: 'prompt'" : "Invalid type for parameter: 'prompt' must be a non-empty string",
|
|
820
808
|
type: "invalid_request_error"
|
|
821
|
-
}
|
|
809
|
+
}).body);
|
|
822
810
|
return;
|
|
823
811
|
}
|
|
824
812
|
if (videoReq.model !== void 0 && (typeof videoReq.model !== "string" || !videoReq.model)) {
|
|
@@ -832,14 +820,31 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
832
820
|
fixture: null
|
|
833
821
|
}
|
|
834
822
|
});
|
|
835
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
823
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
|
|
836
824
|
message: "Invalid type for parameter: 'model' must be a non-empty string",
|
|
837
825
|
type: "invalid_request_error"
|
|
826
|
+
}).body);
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
if (videoReq.model !== void 0 && require_collect.OPENROUTER_VIDEO_SUNSET_MODELS.has(videoReq.model)) {
|
|
830
|
+
journal.add({
|
|
831
|
+
method,
|
|
832
|
+
path,
|
|
833
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
834
|
+
body: parsedBody,
|
|
835
|
+
response: {
|
|
836
|
+
status: 400,
|
|
837
|
+
fixture: null
|
|
838
|
+
}
|
|
839
|
+
});
|
|
840
|
+
require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
|
|
841
|
+
message: `Model ${videoReq.model} does not exist`,
|
|
842
|
+
code: 400
|
|
838
843
|
} }));
|
|
839
844
|
return;
|
|
840
845
|
}
|
|
841
846
|
const syntheticReq = {
|
|
842
|
-
model: videoReq.model ?? DEFAULT_OPENROUTER_VIDEO_MODEL,
|
|
847
|
+
model: videoReq.model ?? require_render.DEFAULT_OPENROUTER_VIDEO_MODEL,
|
|
843
848
|
messages: [{
|
|
844
849
|
role: "user",
|
|
845
850
|
content: videoReq.prompt
|
|
@@ -861,9 +866,9 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
861
866
|
path,
|
|
862
867
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
863
868
|
body: syntheticReq
|
|
864
|
-
}, fixture ? "fixture" :
|
|
869
|
+
}, fixture ? "fixture" : require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss ? "internal" : defaults.record?.providers.openrouter ? "proxy" : "internal", defaults.registry, defaults.logger)) return;
|
|
865
870
|
if (!fixture) {
|
|
866
|
-
if (
|
|
871
|
+
if (require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
867
872
|
const strictMessage = require_helpers.strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
868
873
|
defaults.logger.error(require_helpers.strictNoMatchLogLine(method, path, skippedBySequenceOrTurn));
|
|
869
874
|
journal.add({
|
|
@@ -874,14 +879,14 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
874
879
|
response: {
|
|
875
880
|
status: 503,
|
|
876
881
|
fixture: null,
|
|
877
|
-
...
|
|
882
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
878
883
|
}
|
|
879
884
|
});
|
|
880
|
-
require_sse_writer.writeErrorResponse(res, 503,
|
|
885
|
+
require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
|
|
881
886
|
message: strictMessage,
|
|
882
887
|
type: "invalid_request_error",
|
|
883
888
|
code: "no_fixture_match"
|
|
884
|
-
}
|
|
889
|
+
}).body);
|
|
885
890
|
return;
|
|
886
891
|
}
|
|
887
892
|
if (defaults.record) {
|
|
@@ -906,7 +911,7 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
906
911
|
response: {
|
|
907
912
|
status: 404,
|
|
908
913
|
fixture: null,
|
|
909
|
-
...
|
|
914
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
910
915
|
}
|
|
911
916
|
});
|
|
912
917
|
require_sse_writer.writeErrorResponse(res, 404, JSON.stringify({ error: {
|
|
@@ -945,10 +950,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
|
|
|
945
950
|
fixture
|
|
946
951
|
}
|
|
947
952
|
});
|
|
948
|
-
require_sse_writer.writeErrorResponse(res, 500,
|
|
953
|
+
require_sse_writer.writeErrorResponse(res, 500, require_errors.renderError("openai", "unknown-response", {
|
|
949
954
|
message: "Fixture response is not a video type",
|
|
950
955
|
type: "server_error"
|
|
951
|
-
}
|
|
956
|
+
}).body);
|
|
952
957
|
return;
|
|
953
958
|
}
|
|
954
959
|
if (res.destroyed || res.writableEnded) return;
|
|
@@ -1016,13 +1021,13 @@ async function proxyOpenRouterVideoSubmit(args) {
|
|
|
1016
1021
|
status: 502,
|
|
1017
1022
|
fixture: null,
|
|
1018
1023
|
source: "proxy",
|
|
1019
|
-
...
|
|
1024
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1020
1025
|
}
|
|
1021
1026
|
});
|
|
1022
|
-
require_sse_writer.writeErrorResponse(res, 502,
|
|
1027
|
+
require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
|
|
1023
1028
|
message: `Proxy to upstream failed: ${msg}`,
|
|
1024
1029
|
type: "proxy_error"
|
|
1025
|
-
}
|
|
1030
|
+
}).body);
|
|
1026
1031
|
return "handled";
|
|
1027
1032
|
};
|
|
1028
1033
|
let submitUrl;
|
|
@@ -1065,7 +1070,7 @@ async function proxyOpenRouterVideoSubmit(args) {
|
|
|
1065
1070
|
status: fetched.status,
|
|
1066
1071
|
fixture: null,
|
|
1067
1072
|
source: "proxy",
|
|
1068
|
-
...
|
|
1073
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1069
1074
|
}
|
|
1070
1075
|
});
|
|
1071
1076
|
res.writeHead(fetched.status, { "Content-Type": fetched.contentType ?? "application/json" });
|
|
@@ -1119,7 +1124,7 @@ async function proxyOpenRouterVideoSubmit(args) {
|
|
|
1119
1124
|
status: 202,
|
|
1120
1125
|
fixture: null,
|
|
1121
1126
|
source: "proxy",
|
|
1122
|
-
...
|
|
1127
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1123
1128
|
}
|
|
1124
1129
|
});
|
|
1125
1130
|
res.writeHead(202, { "Content-Type": "application/json" });
|
|
@@ -1179,7 +1184,7 @@ async function proxyOpenRouterVideoRecordPoll(args) {
|
|
|
1179
1184
|
status,
|
|
1180
1185
|
fixture: null,
|
|
1181
1186
|
source: "proxy",
|
|
1182
|
-
...
|
|
1187
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1183
1188
|
}
|
|
1184
1189
|
});
|
|
1185
1190
|
};
|
|
@@ -1187,10 +1192,10 @@ async function proxyOpenRouterVideoRecordPoll(args) {
|
|
|
1187
1192
|
logger.error(`OpenRouter video poll proxy failed: ${msg}`);
|
|
1188
1193
|
if (res.destroyed || res.writableEnded) return;
|
|
1189
1194
|
journalProxy(502);
|
|
1190
|
-
require_sse_writer.writeErrorResponse(res, 502,
|
|
1195
|
+
require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
|
|
1191
1196
|
message: `Proxy to upstream failed: ${msg}`,
|
|
1192
1197
|
type: "proxy_error"
|
|
1193
|
-
}
|
|
1198
|
+
}).body);
|
|
1194
1199
|
};
|
|
1195
1200
|
const record = defaults.record;
|
|
1196
1201
|
if (!record) {
|