130 lines
5.9 KiB
TypeScript
130 lines
5.9 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { DefaultExecutor } from "../../open-sse/executors/default.ts";
|
|
|
|
test("DefaultExecutor.buildHeaders: gemini uses x-goog-api-key header", () => {
|
|
const executor = new DefaultExecutor("gemini");
|
|
const headers = executor.buildHeaders({ apiKey: "gem-key-1" }, true);
|
|
assert.equal(headers["x-goog-api-key"], "gem-key-1");
|
|
assert.equal(headers["Authorization"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: gemini falls back to accessToken when no apiKey", () => {
|
|
const executor = new DefaultExecutor("gemini");
|
|
const headers = executor.buildHeaders({ accessToken: "tok-gem" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer tok-gem");
|
|
assert.equal(headers["x-goog-api-key"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: claude uses x-api-key header", () => {
|
|
const executor = new DefaultExecutor("claude");
|
|
const headers = executor.buildHeaders({ apiKey: "sk-ant-123" }, true);
|
|
assert.equal(headers["x-api-key"], "sk-ant-123");
|
|
assert.equal(headers["Authorization"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: claude falls back to accessToken", () => {
|
|
const executor = new DefaultExecutor("claude");
|
|
const headers = executor.buildHeaders({ accessToken: "tok-claude" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer tok-claude");
|
|
assert.equal(headers["x-api-key"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: anthropic uses x-api-key header", () => {
|
|
const executor = new DefaultExecutor("anthropic");
|
|
const headers = executor.buildHeaders({ apiKey: "sk-ant-456" }, true);
|
|
assert.equal(headers["x-api-key"], "sk-ant-456");
|
|
assert.equal(headers["Authorization"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: azure-ai uses api-key header", () => {
|
|
const executor = new DefaultExecutor("azure-ai");
|
|
const headers = executor.buildHeaders({ apiKey: "az-key-1" }, true);
|
|
assert.equal(headers["api-key"], "az-key-1");
|
|
assert.equal(headers["Authorization"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: azure-ai uses accessToken when no apiKey", () => {
|
|
const executor = new DefaultExecutor("azure-ai");
|
|
const headers = executor.buildHeaders({ accessToken: "tok-az" }, true);
|
|
assert.equal(headers["api-key"], "tok-az");
|
|
assert.equal(headers["Authorization"], undefined);
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: snowflake strips pat/ prefix", () => {
|
|
const executor = new DefaultExecutor("snowflake");
|
|
const headers = executor.buildHeaders({ apiKey: "pat/my-token" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer my-token");
|
|
assert.equal(headers["X-Snowflake-Authorization-Token-Type"], "PROGRAMMATIC_ACCESS_TOKEN");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: snowflake uses KEYPAIR_JWT when no pat/ prefix", () => {
|
|
const executor = new DefaultExecutor("snowflake");
|
|
const headers = executor.buildHeaders({ apiKey: "jwt-token-abc" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer jwt-token-abc");
|
|
assert.equal(headers["X-Snowflake-Authorization-Token-Type"], "KEYPAIR_JWT");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: clarifai uses Key prefix", () => {
|
|
const executor = new DefaultExecutor("clarifai");
|
|
const headers = executor.buildHeaders({ apiKey: "clar-123" }, true);
|
|
assert.equal(headers["Authorization"], "Key clar-123");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: maritalk uses Key prefix", () => {
|
|
const executor = new DefaultExecutor("maritalk");
|
|
const headers = executor.buildHeaders({ apiKey: "mt-key-1" }, true);
|
|
assert.equal(headers["Authorization"], "Key mt-key-1");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: reka sets both Authorization and X-Api-Key", () => {
|
|
const executor = new DefaultExecutor("reka");
|
|
const headers = executor.buildHeaders({ apiKey: "reka-1" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer reka-1");
|
|
assert.equal(headers["X-Api-Key"], "reka-1");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: gigachat uses accessToken preferentially", () => {
|
|
const executor = new DefaultExecutor("gigachat");
|
|
const headers = executor.buildHeaders({ apiKey: "giga-key", accessToken: "giga-tok" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer giga-tok");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: gigachat falls back to apiKey", () => {
|
|
const executor = new DefaultExecutor("gigachat");
|
|
const headers = executor.buildHeaders({ apiKey: "giga-key" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer giga-key");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: generic provider uses Bearer Authorization", () => {
|
|
const executor = new DefaultExecutor("openai");
|
|
const headers = executor.buildHeaders({ apiKey: "sk-openai-1" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer sk-openai-1");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: stream=true sets Accept text/event-stream", () => {
|
|
const executor = new DefaultExecutor("openai");
|
|
const headers = executor.buildHeaders({ apiKey: "key-1" }, true);
|
|
assert.equal(headers["Accept"], "text/event-stream");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: stream=false sets Accept application/json", () => {
|
|
const executor = new DefaultExecutor("openai");
|
|
const headers = executor.buildHeaders({ apiKey: "key-1" }, false);
|
|
assert.equal(headers["Accept"], "application/json");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: OCI adds OpenAI-Project header when projectId present", () => {
|
|
const executor = new DefaultExecutor("oci");
|
|
const headers = executor.buildHeaders({ apiKey: "oci-key", projectId: "proj-123" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer oci-key");
|
|
assert.equal(headers["OpenAI-Project"], "proj-123");
|
|
});
|
|
|
|
test("DefaultExecutor.buildHeaders: OCI omits OpenAI-Project when projectId absent", () => {
|
|
const executor = new DefaultExecutor("oci");
|
|
const headers = executor.buildHeaders({ apiKey: "oci-key" }, true);
|
|
assert.equal(headers["Authorization"], "Bearer oci-key");
|
|
assert.equal(headers["OpenAI-Project"], undefined);
|
|
});
|