39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
// OpenRouter video jobs — https://openrouter.ai/docs/api/api-reference/videos
|
|||
|
|
//
|
||
|
|
// Same async shape as xAI (POST → { id, status }, GET → status/unsigned_urls),
|
||
|
|
// two differences only: creation POSTs to the collection root (no `/generations`
|
||
|
|
// suffix) and the account headers come from the registry entry.
|
||
|
|
// Response bodies are passed through verbatim.
|
||
|
|
|
||
|
|
// ponytail: generations only — OpenRouter has no edits/extensions endpoint today.
|
||
|
|
const SUPPORTED_ACTIONS = new Set(["generations"]);
|
||
|
|
|
||
|
|
function headers(config, token) {
|
||
|
|
return {
|
||
|
|
Accept: "application/json",
|
||
|
|
...(config.headers || {}),
|
||
|
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export default {
|
||
|
|
buildRequest({ config, action, requestId, rawBody, contentType, token }) {
|
||
|
|
const base = config.baseUrl.replace(/\/$/, "");
|
||
|
|
|
||
|
|
if (requestId) {
|
||
|
|
return { method: "GET", url: `${base}/${encodeURIComponent(requestId)}`, headers: headers(config, token) };
|
||
|
|
}
|
||
|
|
if (!SUPPORTED_ACTIONS.has(action)) {
|
||
|
|
return { error: `OpenRouter video supports 'generations' only (got '${action}')` };
|
||
|
|
}
|
||
|
|
if (contentType && !contentType.includes("application/json")) {
|
||
|
|
return { error: "OpenRouter video requires an application/json body" };
|
||
|
|
}
|
||
|
|
return {
|
||
|
|
method: "POST",
|
||
|
|
url: base,
|
||
|
|
headers: { ...headers(config, token), "Content-Type": "application/json" },
|
||
|
|
body: rawBody,
|
||
|
|
};
|
||
|
|
},
|
||
|
|
};
|