@trigger.dev/sdk 4.5.14 → 4.5.16
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/dist/commonjs/v3/ai-shared.d.ts +7 -0
- package/dist/commonjs/v3/ai-shared.js +15 -0
- package/dist/commonjs/v3/ai-shared.js.map +1 -1
- package/dist/commonjs/v3/ai.d.ts +11 -1
- package/dist/commonjs/v3/ai.js +11 -3
- package/dist/commonjs/v3/ai.js.map +1 -1
- package/dist/commonjs/v3/chat-client.js +1 -1
- package/dist/commonjs/v3/chat-client.js.map +1 -1
- package/dist/commonjs/v3/chat-server.d.ts +2 -1
- package/dist/commonjs/v3/chat-server.js +3 -3
- package/dist/commonjs/v3/chat-server.js.map +1 -1
- package/dist/commonjs/v3/sessions.d.ts +42 -13
- package/dist/commonjs/v3/sessions.js +85 -16
- package/dist/commonjs/v3/sessions.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/ai-shared.d.ts +7 -0
- package/dist/esm/v3/ai-shared.js +14 -0
- package/dist/esm/v3/ai-shared.js.map +1 -1
- package/dist/esm/v3/ai.d.ts +11 -1
- package/dist/esm/v3/ai.js +12 -4
- package/dist/esm/v3/ai.js.map +1 -1
- package/dist/esm/v3/chat-client.js +2 -2
- package/dist/esm/v3/chat-client.js.map +1 -1
- package/dist/esm/v3/chat-server.d.ts +2 -1
- package/dist/esm/v3/chat-server.js +3 -3
- package/dist/esm/v3/chat-server.js.map +1 -1
- package/dist/esm/v3/sessions.d.ts +42 -13
- package/dist/esm/v3/sessions.js +85 -16
- package/dist/esm/v3/sessions.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/docs/ai-chat/reference.mdx +1 -1
- package/docs/ai-chat/sessions.mdx +1 -1
- package/docs/ai-chat/side-channels.mdx +172 -0
- package/docs/config/extensions/custom.mdx +14 -1
- package/docs/github-integration.mdx +1 -1
- package/docs/mcp-tools.mdx +37 -0
- package/docs/realtime/react-hooks/session-stream.mdx +17 -0
- package/docs/troubleshooting.mdx +1 -1
- package/package.json +5 -2
- package/dist/commonjs/v3/auth.test.d.ts +0 -1
- package/dist/commonjs/v3/auth.test.js +0 -149
- package/dist/commonjs/v3/auth.test.js.map +0 -1
- package/dist/commonjs/v3/batchDebounce.test.d.ts +0 -1
- package/dist/commonjs/v3/batchDebounce.test.js +0 -189
- package/dist/commonjs/v3/batchDebounce.test.js.map +0 -1
- package/dist/commonjs/v3/chat-server.test.d.ts +0 -1
- package/dist/commonjs/v3/chat-server.test.js +0 -713
- package/dist/commonjs/v3/chat-server.test.js.map +0 -1
- package/dist/commonjs/v3/chat-tab-coordinator.test.d.ts +0 -1
- package/dist/commonjs/v3/chat-tab-coordinator.test.js +0 -140
- package/dist/commonjs/v3/chat-tab-coordinator.test.js.map +0 -1
- package/dist/commonjs/v3/chat.test.d.ts +0 -1
- package/dist/commonjs/v3/chat.test.js +0 -1838
- package/dist/commonjs/v3/chat.test.js.map +0 -1
- package/dist/commonjs/v3/createStartSessionAction.test.d.ts +0 -1
- package/dist/commonjs/v3/createStartSessionAction.test.js +0 -176
- package/dist/commonjs/v3/createStartSessionAction.test.js.map +0 -1
- package/dist/commonjs/v3/runs-bulk.test.d.ts +0 -1
- package/dist/commonjs/v3/runs-bulk.test.js +0 -141
- package/dist/commonjs/v3/runs-bulk.test.js.map +0 -1
- package/dist/commonjs/v3/schedules/index.test.d.ts +0 -1
- package/dist/commonjs/v3/schedules/index.test.js +0 -49
- package/dist/commonjs/v3/schedules/index.test.js.map +0 -1
- package/dist/commonjs/v3/schedules/index.types.test.d.ts +0 -1
- package/dist/commonjs/v3/schedules/index.types.test.js +0 -93
- package/dist/commonjs/v3/schedules/index.types.test.js.map +0 -1
- package/dist/commonjs/v3/sessions.test.d.ts +0 -1
- package/dist/commonjs/v3/sessions.test.js +0 -154
- package/dist/commonjs/v3/sessions.test.js.map +0 -1
- package/dist/commonjs/v3/shared.test.d.ts +0 -1
- package/dist/commonjs/v3/shared.test.js +0 -236
- package/dist/commonjs/v3/shared.test.js.map +0 -1
- package/dist/commonjs/v3/streams.test.d.ts +0 -1
- package/dist/commonjs/v3/streams.test.js +0 -51
- package/dist/commonjs/v3/streams.test.js.map +0 -1
- package/dist/commonjs/v3/triggerClient.test.d.ts +0 -1
- package/dist/commonjs/v3/triggerClient.test.js +0 -226
- package/dist/commonjs/v3/triggerClient.test.js.map +0 -1
- package/dist/commonjs/v3/triggerClient.types.test.d.ts +0 -1
- package/dist/commonjs/v3/triggerClient.types.test.js +0 -123
- package/dist/commonjs/v3/triggerClient.types.test.js.map +0 -1
- package/dist/esm/v3/auth.test.d.ts +0 -1
- package/dist/esm/v3/auth.test.js +0 -147
- package/dist/esm/v3/auth.test.js.map +0 -1
- package/dist/esm/v3/batchDebounce.test.d.ts +0 -1
- package/dist/esm/v3/batchDebounce.test.js +0 -187
- package/dist/esm/v3/batchDebounce.test.js.map +0 -1
- package/dist/esm/v3/chat-server.test.d.ts +0 -1
- package/dist/esm/v3/chat-server.test.js +0 -711
- package/dist/esm/v3/chat-server.test.js.map +0 -1
- package/dist/esm/v3/chat-tab-coordinator.test.d.ts +0 -1
- package/dist/esm/v3/chat-tab-coordinator.test.js +0 -138
- package/dist/esm/v3/chat-tab-coordinator.test.js.map +0 -1
- package/dist/esm/v3/chat.test.d.ts +0 -1
- package/dist/esm/v3/chat.test.js +0 -1836
- package/dist/esm/v3/chat.test.js.map +0 -1
- package/dist/esm/v3/createStartSessionAction.test.d.ts +0 -1
- package/dist/esm/v3/createStartSessionAction.test.js +0 -174
- package/dist/esm/v3/createStartSessionAction.test.js.map +0 -1
- package/dist/esm/v3/runs-bulk.test.d.ts +0 -1
- package/dist/esm/v3/runs-bulk.test.js +0 -139
- package/dist/esm/v3/runs-bulk.test.js.map +0 -1
- package/dist/esm/v3/schedules/index.test.d.ts +0 -1
- package/dist/esm/v3/schedules/index.test.js +0 -47
- package/dist/esm/v3/schedules/index.test.js.map +0 -1
- package/dist/esm/v3/schedules/index.types.test.d.ts +0 -1
- package/dist/esm/v3/schedules/index.types.test.js +0 -91
- package/dist/esm/v3/schedules/index.types.test.js.map +0 -1
- package/dist/esm/v3/sessions.test.d.ts +0 -1
- package/dist/esm/v3/sessions.test.js +0 -152
- package/dist/esm/v3/sessions.test.js.map +0 -1
- package/dist/esm/v3/shared.test.d.ts +0 -1
- package/dist/esm/v3/shared.test.js +0 -234
- package/dist/esm/v3/shared.test.js.map +0 -1
- package/dist/esm/v3/streams.test.d.ts +0 -1
- package/dist/esm/v3/streams.test.js +0 -49
- package/dist/esm/v3/streams.test.js.map +0 -1
- package/dist/esm/v3/triggerClient.test.d.ts +0 -1
- package/dist/esm/v3/triggerClient.test.js +0 -224
- package/dist/esm/v3/triggerClient.test.js.map +0 -1
- package/dist/esm/v3/triggerClient.types.test.d.ts +0 -1
- package/dist/esm/v3/triggerClient.types.test.js +0 -88
- package/dist/esm/v3/triggerClient.types.test.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import { create, task, update } from "./index.js";
|
|
3
|
-
function assertDeclarativeScheduleWindowTypes() {
|
|
4
|
-
task({
|
|
5
|
-
id: "valid-window",
|
|
6
|
-
cron: { pattern: "*/5 * * * *", window: "30m" },
|
|
7
|
-
run: async () => undefined,
|
|
8
|
-
});
|
|
9
|
-
task({
|
|
10
|
-
id: "runtime-window",
|
|
11
|
-
cron: { pattern: "*/5 * * * *", window: runtimeWindow },
|
|
12
|
-
run: async () => undefined,
|
|
13
|
-
});
|
|
14
|
-
task({
|
|
15
|
-
id: "duration-too-large",
|
|
16
|
-
// @ts-expect-error Schedule windows cannot exceed 24 hours.
|
|
17
|
-
cron: { pattern: "*/5 * * * *", window: "25h" },
|
|
18
|
-
run: async () => undefined,
|
|
19
|
-
});
|
|
20
|
-
task({
|
|
21
|
-
id: "percentage-too-large",
|
|
22
|
-
// @ts-expect-error Schedule window percentages cannot exceed 100%.
|
|
23
|
-
cron: { pattern: "*/5 * * * *", window: "101%" },
|
|
24
|
-
run: async () => undefined,
|
|
25
|
-
});
|
|
26
|
-
task({
|
|
27
|
-
id: "unsupported-unit",
|
|
28
|
-
// @ts-expect-error Days are not a supported schedule-window unit.
|
|
29
|
-
cron: { pattern: "*/5 * * * *", window: "1d" },
|
|
30
|
-
run: async () => undefined,
|
|
31
|
-
});
|
|
32
|
-
task({
|
|
33
|
-
id: "fractional-window",
|
|
34
|
-
// @ts-expect-error Schedule windows must use whole numbers.
|
|
35
|
-
cron: { pattern: "*/5 * * * *", window: "1.5m" },
|
|
36
|
-
run: async () => undefined,
|
|
37
|
-
});
|
|
38
|
-
task({
|
|
39
|
-
id: "negative-window",
|
|
40
|
-
// @ts-expect-error Schedule windows must be non-negative.
|
|
41
|
-
cron: { pattern: "*/5 * * * *", window: "-1m" },
|
|
42
|
-
run: async () => undefined,
|
|
43
|
-
});
|
|
44
|
-
task({
|
|
45
|
-
id: "leading-zero-window",
|
|
46
|
-
// @ts-expect-error Schedule windows must use canonical whole numbers.
|
|
47
|
-
cron: { pattern: "*/5 * * * *", window: "01m" },
|
|
48
|
-
run: async () => undefined,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
function assertImperativeScheduleWindowTypes() {
|
|
52
|
-
create({
|
|
53
|
-
task: "scheduled-task",
|
|
54
|
-
cron: "*/5 * * * *",
|
|
55
|
-
deduplicationKey: "valid",
|
|
56
|
-
window: "50%",
|
|
57
|
-
});
|
|
58
|
-
create({
|
|
59
|
-
task: "scheduled-task",
|
|
60
|
-
cron: "*/5 * * * *",
|
|
61
|
-
deduplicationKey: "runtime",
|
|
62
|
-
window: runtimeWindow,
|
|
63
|
-
});
|
|
64
|
-
update("schedule_123", {
|
|
65
|
-
task: "scheduled-task",
|
|
66
|
-
cron: "*/5 * * * *",
|
|
67
|
-
window: "1440m",
|
|
68
|
-
});
|
|
69
|
-
create({
|
|
70
|
-
task: "scheduled-task",
|
|
71
|
-
cron: "*/5 * * * *",
|
|
72
|
-
deduplicationKey: "invalid",
|
|
73
|
-
// @ts-expect-error Schedule windows cannot exceed 24 hours.
|
|
74
|
-
window: "1441m",
|
|
75
|
-
});
|
|
76
|
-
update("schedule_123", {
|
|
77
|
-
task: "scheduled-task",
|
|
78
|
-
cron: "*/5 * * * *",
|
|
79
|
-
// @ts-expect-error Schedule windows must use a supported unit.
|
|
80
|
-
window: "30s",
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
describe("schedule window types", () => {
|
|
84
|
-
it("validates declarative schedule literals", () => {
|
|
85
|
-
void assertDeclarativeScheduleWindowTypes;
|
|
86
|
-
});
|
|
87
|
-
it("validates imperative schedule literals", () => {
|
|
88
|
-
void assertImperativeScheduleWindowTypes;
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
//# sourceMappingURL=index.types.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.types.test.js","sourceRoot":"","sources":["../../../../src/v3/schedules/index.types.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
// Per-test override for the stubbed SessionStreamInstance's wait() so a
|
|
3
|
-
// test can simulate downstream writer failures (e.g. S2 auth error after
|
|
4
|
-
// initializeSessionStream returned a stale token). Reset at the top of
|
|
5
|
-
// each test that touches it.
|
|
6
|
-
let stubWaitImpl;
|
|
7
|
-
// Stub `SessionStreamInstance` so constructing a channel writer doesn't try
|
|
8
|
-
// to reach S2. The stub still invokes the `initializeSession` callback the
|
|
9
|
-
// channel passes in, which is the whole point: that's how the cache gets
|
|
10
|
-
// exercised. wait() resolves immediately by default; tests can override it
|
|
11
|
-
// via `stubWaitImpl` to verify reactive invalidation on writer failure.
|
|
12
|
-
vi.mock("@trigger.dev/core/v3", async (importActual) => {
|
|
13
|
-
const actual = (await importActual());
|
|
14
|
-
class StubSessionStreamInstance {
|
|
15
|
-
waitPromise;
|
|
16
|
-
constructor(opts) {
|
|
17
|
-
// Drain the source so the upstream tee doesn't backpressure-stall.
|
|
18
|
-
void (async () => {
|
|
19
|
-
const reader = opts.source.getReader();
|
|
20
|
-
try {
|
|
21
|
-
while (true) {
|
|
22
|
-
const { done } = await reader.read();
|
|
23
|
-
if (done)
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
finally {
|
|
28
|
-
reader.releaseLock();
|
|
29
|
-
}
|
|
30
|
-
})();
|
|
31
|
-
// Trigger the initializeSession callback so the cache path runs.
|
|
32
|
-
opts.initializeSession?.().catch(() => {
|
|
33
|
-
// Failures are observed via the spy; swallow here so unhandled
|
|
34
|
-
// rejection warnings don't leak through the stub.
|
|
35
|
-
});
|
|
36
|
-
// Capture the wait outcome once at construction (mirrors real
|
|
37
|
-
// SessionStreamInstance which kicks off initializeWriter from the
|
|
38
|
-
// ctor). All subsequent wait() calls return the same promise so
|
|
39
|
-
// a single failure is observable by every consumer in the channel
|
|
40
|
-
// (`.finally`, reactive `.catch`, and customer `waitUntilComplete`).
|
|
41
|
-
this.waitPromise = stubWaitImpl
|
|
42
|
-
? stubWaitImpl()
|
|
43
|
-
: Promise.resolve({ lastEventId: undefined });
|
|
44
|
-
// Claim any rejection so test runs don't surface as unhandled.
|
|
45
|
-
// Real awaiters still observe the rejection when they `await` it.
|
|
46
|
-
this.waitPromise.catch(() => { });
|
|
47
|
-
}
|
|
48
|
-
async wait() {
|
|
49
|
-
return this.waitPromise;
|
|
50
|
-
}
|
|
51
|
-
get stream() {
|
|
52
|
-
return new ReadableStream({ start: (c) => c.close() });
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return { ...actual, SessionStreamInstance: StubSessionStreamInstance };
|
|
56
|
-
});
|
|
57
|
-
import { SessionOutputChannel } from "./sessions.js";
|
|
58
|
-
import { apiClientManager } from "@trigger.dev/core/v3";
|
|
59
|
-
function installStubApiClient(impl) {
|
|
60
|
-
const stub = { initializeSessionStream: impl };
|
|
61
|
-
// `apiClientManager.clientOrThrow()` is what `#pipeInternal` reaches for.
|
|
62
|
-
vi.spyOn(apiClientManager, "clientOrThrow").mockReturnValue(stub);
|
|
63
|
-
return stub;
|
|
64
|
-
}
|
|
65
|
-
function emptyStream() {
|
|
66
|
-
return new ReadableStream({ start: (c) => c.close() });
|
|
67
|
-
}
|
|
68
|
-
describe("SessionOutputChannel initializeSessionStream cache", () => {
|
|
69
|
-
it("dedupes repeated pipe()/writer() calls for the same channel", async () => {
|
|
70
|
-
stubWaitImpl = undefined;
|
|
71
|
-
const spy = vi.fn(async () => ({ version: "v2", headers: {} }));
|
|
72
|
-
installStubApiClient(spy);
|
|
73
|
-
const channel = new SessionOutputChannel("session-1");
|
|
74
|
-
const p1 = channel.pipe(emptyStream());
|
|
75
|
-
const p2 = channel.pipe(emptyStream());
|
|
76
|
-
const p3 = channel.writer({
|
|
77
|
-
execute: ({ write }) => {
|
|
78
|
-
write({ chunk: 1 });
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
await Promise.all([p1.waitUntilComplete(), p2.waitUntilComplete(), p3.waitUntilComplete()]);
|
|
82
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
83
|
-
expect(spy).toHaveBeenCalledWith("session-1", "out", undefined);
|
|
84
|
-
});
|
|
85
|
-
it("evicts on initialize failure so the next call retries instead of returning a poisoned entry", async () => {
|
|
86
|
-
stubWaitImpl = undefined;
|
|
87
|
-
const spy = vi
|
|
88
|
-
.fn()
|
|
89
|
-
.mockRejectedValueOnce(new Error("boom"))
|
|
90
|
-
.mockResolvedValueOnce({ version: "v2", headers: {} });
|
|
91
|
-
installStubApiClient(spy);
|
|
92
|
-
const channel = new SessionOutputChannel("session-1");
|
|
93
|
-
const firstAttempt = channel.pipe(emptyStream());
|
|
94
|
-
// First call fails — the stub swallows the rejection on the
|
|
95
|
-
// initializeSession callback, but the cache eviction handler still runs.
|
|
96
|
-
await firstAttempt.waitUntilComplete();
|
|
97
|
-
// Settle pending microtasks so the .catch() eviction fires.
|
|
98
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
99
|
-
const retried = channel.pipe(emptyStream());
|
|
100
|
-
await retried.waitUntilComplete();
|
|
101
|
-
expect(spy).toHaveBeenCalledTimes(2);
|
|
102
|
-
});
|
|
103
|
-
it("reset() clears cached entries so the next call re-PUTs", async () => {
|
|
104
|
-
stubWaitImpl = undefined;
|
|
105
|
-
const spy = vi.fn(async () => ({ version: "v2", headers: {} }));
|
|
106
|
-
installStubApiClient(spy);
|
|
107
|
-
const channel = new SessionOutputChannel("session-1");
|
|
108
|
-
await channel.pipe(emptyStream()).waitUntilComplete();
|
|
109
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
110
|
-
channel.reset();
|
|
111
|
-
await channel.pipe(emptyStream()).waitUntilComplete();
|
|
112
|
-
expect(spy).toHaveBeenCalledTimes(2);
|
|
113
|
-
});
|
|
114
|
-
it("scopes the cache per channel instance", async () => {
|
|
115
|
-
stubWaitImpl = undefined;
|
|
116
|
-
const spy = vi.fn(async () => ({ version: "v2", headers: {} }));
|
|
117
|
-
installStubApiClient(spy);
|
|
118
|
-
const channelA = new SessionOutputChannel("session-a");
|
|
119
|
-
const channelB = new SessionOutputChannel("session-b");
|
|
120
|
-
await Promise.all([
|
|
121
|
-
channelA.pipe(emptyStream()).waitUntilComplete(),
|
|
122
|
-
channelB.pipe(emptyStream()).waitUntilComplete(),
|
|
123
|
-
]);
|
|
124
|
-
expect(spy).toHaveBeenCalledTimes(2);
|
|
125
|
-
expect(spy).toHaveBeenCalledWith("session-a", "out", undefined);
|
|
126
|
-
expect(spy).toHaveBeenCalledWith("session-b", "out", undefined);
|
|
127
|
-
});
|
|
128
|
-
it("evicts the cache when a writer's wait() rejects (simulated stale-token failure)", async () => {
|
|
129
|
-
const spy = vi.fn(async () => ({ version: "v2", headers: {} }));
|
|
130
|
-
installStubApiClient(spy);
|
|
131
|
-
// First writer's wait() rejects (e.g. S2 returned 401 after the cached
|
|
132
|
-
// token expired mid-process); subsequent writers' wait() resolve cleanly.
|
|
133
|
-
let waitCallCount = 0;
|
|
134
|
-
stubWaitImpl = async () => {
|
|
135
|
-
waitCallCount++;
|
|
136
|
-
if (waitCallCount === 1)
|
|
137
|
-
throw new Error("S2 auth failed: token expired");
|
|
138
|
-
return { lastEventId: undefined };
|
|
139
|
-
};
|
|
140
|
-
const channel = new SessionOutputChannel("session-1");
|
|
141
|
-
const failed = channel.pipe(emptyStream());
|
|
142
|
-
await expect(failed.waitUntilComplete()).rejects.toThrow(/token expired/);
|
|
143
|
-
// Settle microtasks so the reactive .catch eviction handler fires.
|
|
144
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
145
|
-
const recovered = channel.pipe(emptyStream());
|
|
146
|
-
await recovered.waitUntilComplete();
|
|
147
|
-
// Cache evicted ⇒ second pipe() re-PUT ⇒ two distinct initialize calls.
|
|
148
|
-
expect(spy).toHaveBeenCalledTimes(2);
|
|
149
|
-
stubWaitImpl = undefined;
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
//# sourceMappingURL=sessions.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.test.js","sourceRoot":"","sources":["../../../src/v3/sessions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import { ApiClient } from "@trigger.dev/core/v3";
|
|
2
|
-
import { describe, it, expect } from "vitest";
|
|
3
|
-
import { offloadBatchItemPayloads, readableStreamToAsyncIterable, uniqueBatchTaskIdentifiers, } from "./shared.js";
|
|
4
|
-
describe("uniqueBatchTaskIdentifiers", () => {
|
|
5
|
-
it("returns a stable, deduplicated declaration for batch creation", () => {
|
|
6
|
-
expect(uniqueBatchTaskIdentifiers([
|
|
7
|
-
{ index: 0, task: "task-b", payload: "{}" },
|
|
8
|
-
{ index: 1, task: "task-a", payload: "{}" },
|
|
9
|
-
{ index: 2, task: "task-b", payload: "{}" },
|
|
10
|
-
])).toEqual(["task-a", "task-b"]);
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
describe("offloadBatchItemPayloads", () => {
|
|
14
|
-
// A real client is required for conditionallyExportPacket's truthy check; small payloads
|
|
15
|
-
// short-circuit before any network call, so this never actually reaches the server.
|
|
16
|
-
const apiClient = new ApiClient("http://localhost:3030", "tr_dev_test");
|
|
17
|
-
it("returns an empty array unchanged", async () => {
|
|
18
|
-
expect(await offloadBatchItemPayloads([], apiClient)).toEqual([]);
|
|
19
|
-
});
|
|
20
|
-
it("passes small payloads through and records their pre-offload byte size", async () => {
|
|
21
|
-
const payload = JSON.stringify({ hello: "world" });
|
|
22
|
-
const result = await offloadBatchItemPayloads([{ index: 0, task: "my-task", payload, options: { payloadType: "application/json" } }], apiClient);
|
|
23
|
-
const item = result[0];
|
|
24
|
-
expect(item.payload).toBe(payload);
|
|
25
|
-
expect(item.options?.payloadType).toBe("application/json");
|
|
26
|
-
expect(item.options?.payloadSize).toBe(Buffer.byteLength(payload, "utf8"));
|
|
27
|
-
});
|
|
28
|
-
it("measures multi-byte payloads by byte length, not character count", async () => {
|
|
29
|
-
const payload = "€€€"; // 3 chars, 9 bytes in UTF-8
|
|
30
|
-
const result = await offloadBatchItemPayloads([{ index: 0, task: "my-task", payload, options: { payloadType: "application/json" } }], apiClient);
|
|
31
|
-
expect(result[0].options?.payloadSize).toBe(9);
|
|
32
|
-
});
|
|
33
|
-
it("leaves an already-offloaded (application/store) item untouched", async () => {
|
|
34
|
-
const item = {
|
|
35
|
-
index: 0,
|
|
36
|
-
task: "my-task",
|
|
37
|
-
payload: "trigger/my-task/123/payload.json",
|
|
38
|
-
options: { payloadType: "application/store" },
|
|
39
|
-
};
|
|
40
|
-
const result = await offloadBatchItemPayloads([item], apiClient);
|
|
41
|
-
expect(result[0]).toEqual(item);
|
|
42
|
-
});
|
|
43
|
-
it("leaves items without a string payload untouched", async () => {
|
|
44
|
-
const item = { index: 0, task: "my-task", options: {} };
|
|
45
|
-
const result = await offloadBatchItemPayloads([item], apiClient);
|
|
46
|
-
expect(result[0]).toEqual(item);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
describe("readableStreamToAsyncIterable", () => {
|
|
50
|
-
it("yields all values from the stream", async () => {
|
|
51
|
-
const values = [1, 2, 3, 4, 5];
|
|
52
|
-
const stream = new ReadableStream({
|
|
53
|
-
start(controller) {
|
|
54
|
-
for (const value of values) {
|
|
55
|
-
controller.enqueue(value);
|
|
56
|
-
}
|
|
57
|
-
controller.close();
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
const result = [];
|
|
61
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
62
|
-
result.push(value);
|
|
63
|
-
}
|
|
64
|
-
expect(result).toEqual(values);
|
|
65
|
-
});
|
|
66
|
-
it("cancels the stream when consumer breaks early", async () => {
|
|
67
|
-
let cancelCalled = false;
|
|
68
|
-
const stream = new ReadableStream({
|
|
69
|
-
start(controller) {
|
|
70
|
-
controller.enqueue(1);
|
|
71
|
-
controller.enqueue(2);
|
|
72
|
-
controller.enqueue(3);
|
|
73
|
-
controller.enqueue(4);
|
|
74
|
-
controller.enqueue(5);
|
|
75
|
-
controller.close();
|
|
76
|
-
},
|
|
77
|
-
cancel() {
|
|
78
|
-
cancelCalled = true;
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
const result = [];
|
|
82
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
83
|
-
result.push(value);
|
|
84
|
-
if (value === 2) {
|
|
85
|
-
break; // Early termination
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
expect(result).toEqual([1, 2]);
|
|
89
|
-
expect(cancelCalled).toBe(true);
|
|
90
|
-
});
|
|
91
|
-
it("cancels the stream when consumer throws an error", async () => {
|
|
92
|
-
let cancelCalled = false;
|
|
93
|
-
const stream = new ReadableStream({
|
|
94
|
-
start(controller) {
|
|
95
|
-
controller.enqueue(1);
|
|
96
|
-
controller.enqueue(2);
|
|
97
|
-
controller.enqueue(3);
|
|
98
|
-
controller.close();
|
|
99
|
-
},
|
|
100
|
-
cancel() {
|
|
101
|
-
cancelCalled = true;
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
const result = [];
|
|
105
|
-
const testError = new Error("Test error");
|
|
106
|
-
await expect(async () => {
|
|
107
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
108
|
-
result.push(value);
|
|
109
|
-
if (value === 2) {
|
|
110
|
-
throw testError;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}).rejects.toThrow(testError);
|
|
114
|
-
expect(result).toEqual([1, 2]);
|
|
115
|
-
expect(cancelCalled).toBe(true);
|
|
116
|
-
});
|
|
117
|
-
it("handles stream that produces values asynchronously", async () => {
|
|
118
|
-
const values = ["a", "b", "c"];
|
|
119
|
-
let index = 0;
|
|
120
|
-
const stream = new ReadableStream({
|
|
121
|
-
async pull(controller) {
|
|
122
|
-
if (index < values.length) {
|
|
123
|
-
// Simulate async data production
|
|
124
|
-
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
125
|
-
controller.enqueue(values[index]);
|
|
126
|
-
index++;
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
controller.close();
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
});
|
|
133
|
-
const result = [];
|
|
134
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
135
|
-
result.push(value);
|
|
136
|
-
}
|
|
137
|
-
expect(result).toEqual(values);
|
|
138
|
-
});
|
|
139
|
-
it("cancels async stream when consumer breaks early", async () => {
|
|
140
|
-
let cancelCalled = false;
|
|
141
|
-
let producedCount = 0;
|
|
142
|
-
const stream = new ReadableStream({
|
|
143
|
-
async pull(controller) {
|
|
144
|
-
// Simulate async data production
|
|
145
|
-
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
146
|
-
producedCount++;
|
|
147
|
-
controller.enqueue(producedCount);
|
|
148
|
-
// Never close - infinite stream
|
|
149
|
-
},
|
|
150
|
-
cancel() {
|
|
151
|
-
cancelCalled = true;
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
const result = [];
|
|
155
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
156
|
-
result.push(value);
|
|
157
|
-
if (value >= 3) {
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
expect(result).toEqual([1, 2, 3]);
|
|
162
|
-
expect(cancelCalled).toBe(true);
|
|
163
|
-
});
|
|
164
|
-
it("does not throw when cancelling an already-closed stream", async () => {
|
|
165
|
-
const stream = new ReadableStream({
|
|
166
|
-
start(controller) {
|
|
167
|
-
controller.enqueue(1);
|
|
168
|
-
controller.close();
|
|
169
|
-
},
|
|
170
|
-
});
|
|
171
|
-
// Normal iteration should complete without errors
|
|
172
|
-
const result = [];
|
|
173
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
174
|
-
result.push(value);
|
|
175
|
-
}
|
|
176
|
-
expect(result).toEqual([1]);
|
|
177
|
-
});
|
|
178
|
-
it("does not throw when cancelling an errored stream", async () => {
|
|
179
|
-
const streamError = new Error("Stream error");
|
|
180
|
-
let errorIndex = 0;
|
|
181
|
-
const stream = new ReadableStream({
|
|
182
|
-
pull(controller) {
|
|
183
|
-
errorIndex++;
|
|
184
|
-
if (errorIndex <= 2) {
|
|
185
|
-
controller.enqueue(errorIndex);
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
controller.error(streamError);
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
const result = [];
|
|
193
|
-
// The stream error should propagate
|
|
194
|
-
await expect(async () => {
|
|
195
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
196
|
-
result.push(value);
|
|
197
|
-
}
|
|
198
|
-
}).rejects.toThrow(streamError);
|
|
199
|
-
// We should have gotten the values before the error
|
|
200
|
-
expect(result).toEqual([1, 2]);
|
|
201
|
-
});
|
|
202
|
-
it("signals upstream producer to stop via cancel", async () => {
|
|
203
|
-
const producedValues = [];
|
|
204
|
-
let isProducing = true;
|
|
205
|
-
const stream = new ReadableStream({
|
|
206
|
-
async pull(controller) {
|
|
207
|
-
if (!isProducing)
|
|
208
|
-
return;
|
|
209
|
-
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
210
|
-
const value = producedValues.length + 1;
|
|
211
|
-
producedValues.push(value);
|
|
212
|
-
controller.enqueue(value);
|
|
213
|
-
},
|
|
214
|
-
cancel() {
|
|
215
|
-
isProducing = false;
|
|
216
|
-
},
|
|
217
|
-
});
|
|
218
|
-
const consumed = [];
|
|
219
|
-
for await (const value of readableStreamToAsyncIterable(stream)) {
|
|
220
|
-
consumed.push(value);
|
|
221
|
-
if (value >= 2) {
|
|
222
|
-
break;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Wait a bit to ensure no more values are produced
|
|
226
|
-
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
227
|
-
expect(consumed).toEqual([1, 2]);
|
|
228
|
-
// Producer should have stopped after cancel
|
|
229
|
-
expect(isProducing).toBe(false);
|
|
230
|
-
// No more values should have been produced after breaking
|
|
231
|
-
expect(producedValues.length).toBeLessThanOrEqual(3);
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
//# sourceMappingURL=shared.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../../src/v3/shared.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { realtimeStreams } from "@trigger.dev/core/v3";
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
-
import { streams } from "./streams.js";
|
|
4
|
-
vi.mock("@trigger.dev/core/v3", async (importOriginal) => {
|
|
5
|
-
const original = await importOriginal();
|
|
6
|
-
return {
|
|
7
|
-
...original,
|
|
8
|
-
taskContext: {
|
|
9
|
-
ctx: {
|
|
10
|
-
run: {
|
|
11
|
-
id: "run_123",
|
|
12
|
-
// parentTaskRunId and rootTaskRunId are undefined for root tasks
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
realtimeStreams: {
|
|
17
|
-
pipe: vi.fn().mockReturnValue({
|
|
18
|
-
wait: () => Promise.resolve(),
|
|
19
|
-
stream: new ReadableStream(),
|
|
20
|
-
}),
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
describe("streams.pipe consistency", () => {
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
vi.clearAllMocks();
|
|
27
|
-
});
|
|
28
|
-
it("should not throw and should use self runId when target is 'root' in a root task", async () => {
|
|
29
|
-
const mockStream = new ReadableStream();
|
|
30
|
-
// This should not throw anymore
|
|
31
|
-
const { waitUntilComplete: _waitUntilComplete } = streams.pipe("test-key", mockStream, {
|
|
32
|
-
target: "root",
|
|
33
|
-
});
|
|
34
|
-
expect(realtimeStreams.pipe).toHaveBeenCalledWith("test-key", mockStream, expect.objectContaining({
|
|
35
|
-
target: "run_123",
|
|
36
|
-
}));
|
|
37
|
-
});
|
|
38
|
-
it("should not throw and should use self runId when target is 'parent' in a root task", async () => {
|
|
39
|
-
const mockStream = new ReadableStream();
|
|
40
|
-
// This should not throw anymore
|
|
41
|
-
const { waitUntilComplete: _waitUntilComplete } = streams.pipe("test-key", mockStream, {
|
|
42
|
-
target: "parent",
|
|
43
|
-
});
|
|
44
|
-
expect(realtimeStreams.pipe).toHaveBeenCalledWith("test-key", mockStream, expect.objectContaining({
|
|
45
|
-
target: "run_123",
|
|
46
|
-
}));
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
//# sourceMappingURL=streams.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streams.test.js","sourceRoot":"","sources":["../../../src/v3/streams.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACvD,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAe,CAAC;IACrD,OAAO;QACL,GAAG,QAAQ;QACX,WAAW,EAAE;YACX,GAAG,EAAE;gBACH,GAAG,EAAE;oBACH,EAAE,EAAE,SAAS;oBACb,iEAAiE;iBAClE;aACF;SACF;QACD,eAAe,EAAE;YACf,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC7B,MAAM,EAAE,IAAI,cAAc,EAAE;aAC7B,CAAC;SACH;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;QAExC,gCAAgC;QAChC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE;YACrF,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC/C,UAAU,EACV,UAAU,EACV,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,SAAS;SAClB,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;QAExC,gCAAgC;QAChC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE;YACrF,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC/C,UAAU,EACV,UAAU,EACV,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,SAAS;SAClB,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|