Skip to content

Commit 677debc

Browse files
Export header normalization helper for advanced integrations
Co-authored-by: Eric Allam <eric@trigger.dev>
1 parent d870c19 commit 677debc

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

packages/ai/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Typed request option helper aliases are exported:
6161
- `TriggerChatReconnectOptions`
6262
- `TriggerChatHeadersInput`
6363
- `TriggerChatTransportError` / `TriggerChatOnError`
64+
- `normalizeTriggerChatHeaders(...)`
6465

6566
```ts
6667
import type { TriggerChatTransportPayload } from "@trigger.dev/ai";

packages/ai/src/chatTransport.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { afterEach, describe, expect, it } from "vitest";
44
import {
55
InMemoryTriggerChatRunStore,
66
createTriggerChatTransport,
7+
normalizeTriggerChatHeaders,
78
TriggerChatTransport,
89
} from "./chatTransport.js";
910
import type { TriggerChatStream } from "./types.js";
@@ -462,6 +463,20 @@ describe("TriggerChatTransport", function () {
462463
});
463464
});
464465

466+
it("normalizes header helper input values consistently", function () {
467+
expect(normalizeTriggerChatHeaders(undefined)).toBeUndefined();
468+
expect(
469+
normalizeTriggerChatHeaders([["x-array", "array-value"]])
470+
).toEqual({
471+
"x-array": "array-value",
472+
});
473+
expect(
474+
normalizeTriggerChatHeaders(new Headers([["x-headers", "headers-value"]]))
475+
).toEqual({
476+
"x-headers": "headers-value",
477+
});
478+
});
479+
465480
it("returns null on reconnect when no active run exists", async function () {
466481
const transport = new TriggerChatTransport({
467482
task: "chat-task",

packages/ai/src/chatTransport.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,18 @@ function normalizeHeaders(
459459
return result;
460460
}
461461

462+
/**
463+
* Converts supported header input shapes into a normalized plain object.
464+
*
465+
* @deprecated This helper is primarily exposed for advanced integrations and tests.
466+
* Most users should rely on `TriggerChatTransport` internals to normalize request headers.
467+
*/
468+
export function normalizeTriggerChatHeaders(
469+
headers: TriggerChatHeadersInput | undefined
470+
): Record<string, string> | undefined {
471+
return normalizeHeaders(headers);
472+
}
473+
462474
function isHeadersInstance(headers: unknown): headers is Headers {
463475
if (typeof Headers === "undefined") {
464476
return false;

packages/ai/src/chatTransport.types.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
createTriggerChatTransport,
55
TriggerChatTransport,
66
InMemoryTriggerChatRunStore,
7+
normalizeTriggerChatHeaders,
78
TriggerChatTransportOptions,
89
type TriggerChatOnError,
910
type TriggerChatTransportError,
@@ -188,3 +189,11 @@ it("accepts custom run store implementations via options typing", function () {
188189

189190
expectTypeOf(transport).toBeObject();
190191
});
192+
193+
it("exports typed header normalization helper", function () {
194+
const normalizedHeaders = normalizeTriggerChatHeaders({
195+
"x-header": "value",
196+
});
197+
198+
expectTypeOf(normalizedHeaders).toEqualTypeOf<Record<string, string> | undefined>();
199+
});

packages/ai/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export { ai, type ToolCallExecutionOptions, type ToolOptions } from "./ai.js";
22
export {
33
createTriggerChatTransport,
44
InMemoryTriggerChatRunStore,
5+
normalizeTriggerChatHeaders,
56
TriggerChatTransport,
67
type TriggerChatTransportOptions,
78
} from "./chatTransport.js";

0 commit comments

Comments
 (0)