@trigger.dev/sdk 4.5.13 → 4.5.15

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.
Files changed (128) hide show
  1. package/dist/commonjs/v3/ai-shared.d.ts +7 -0
  2. package/dist/commonjs/v3/ai-shared.js +15 -0
  3. package/dist/commonjs/v3/ai-shared.js.map +1 -1
  4. package/dist/commonjs/v3/ai.d.ts +11 -1
  5. package/dist/commonjs/v3/ai.js +11 -3
  6. package/dist/commonjs/v3/ai.js.map +1 -1
  7. package/dist/commonjs/v3/chat-client.js +1 -1
  8. package/dist/commonjs/v3/chat-client.js.map +1 -1
  9. package/dist/commonjs/v3/chat-server.d.ts +2 -1
  10. package/dist/commonjs/v3/chat-server.js +3 -3
  11. package/dist/commonjs/v3/chat-server.js.map +1 -1
  12. package/dist/commonjs/v3/sessions.d.ts +42 -13
  13. package/dist/commonjs/v3/sessions.js +85 -16
  14. package/dist/commonjs/v3/sessions.js.map +1 -1
  15. package/dist/commonjs/v3/streams.js +1 -0
  16. package/dist/commonjs/v3/streams.js.map +1 -1
  17. package/dist/commonjs/version.js +1 -1
  18. package/dist/esm/v3/ai-shared.d.ts +7 -0
  19. package/dist/esm/v3/ai-shared.js +14 -0
  20. package/dist/esm/v3/ai-shared.js.map +1 -1
  21. package/dist/esm/v3/ai.d.ts +11 -1
  22. package/dist/esm/v3/ai.js +12 -4
  23. package/dist/esm/v3/ai.js.map +1 -1
  24. package/dist/esm/v3/chat-client.js +2 -2
  25. package/dist/esm/v3/chat-client.js.map +1 -1
  26. package/dist/esm/v3/chat-server.d.ts +2 -1
  27. package/dist/esm/v3/chat-server.js +3 -3
  28. package/dist/esm/v3/chat-server.js.map +1 -1
  29. package/dist/esm/v3/sessions.d.ts +42 -13
  30. package/dist/esm/v3/sessions.js +85 -16
  31. package/dist/esm/v3/sessions.js.map +1 -1
  32. package/dist/esm/v3/streams.js +1 -0
  33. package/dist/esm/v3/streams.js.map +1 -1
  34. package/dist/esm/version.js +1 -1
  35. package/docs/ai-chat/reference.mdx +1 -1
  36. package/docs/ai-chat/sessions.mdx +1 -1
  37. package/docs/ai-chat/side-channels.mdx +172 -0
  38. package/docs/mcp-tools.mdx +37 -0
  39. package/docs/realtime/auth.mdx +18 -0
  40. package/docs/realtime/react-hooks/session-stream.mdx +126 -0
  41. package/docs/realtime/react-hooks/streams.mdx +71 -3
  42. package/docs/self-hosting/security.mdx +1 -1
  43. package/docs/tasks/streams.mdx +3 -0
  44. package/package.json +5 -2
  45. package/dist/commonjs/v3/auth.test.d.ts +0 -1
  46. package/dist/commonjs/v3/auth.test.js +0 -149
  47. package/dist/commonjs/v3/auth.test.js.map +0 -1
  48. package/dist/commonjs/v3/batchDebounce.test.d.ts +0 -1
  49. package/dist/commonjs/v3/batchDebounce.test.js +0 -189
  50. package/dist/commonjs/v3/batchDebounce.test.js.map +0 -1
  51. package/dist/commonjs/v3/chat-server.test.d.ts +0 -1
  52. package/dist/commonjs/v3/chat-server.test.js +0 -713
  53. package/dist/commonjs/v3/chat-server.test.js.map +0 -1
  54. package/dist/commonjs/v3/chat-tab-coordinator.test.d.ts +0 -1
  55. package/dist/commonjs/v3/chat-tab-coordinator.test.js +0 -140
  56. package/dist/commonjs/v3/chat-tab-coordinator.test.js.map +0 -1
  57. package/dist/commonjs/v3/chat.test.d.ts +0 -1
  58. package/dist/commonjs/v3/chat.test.js +0 -1838
  59. package/dist/commonjs/v3/chat.test.js.map +0 -1
  60. package/dist/commonjs/v3/createStartSessionAction.test.d.ts +0 -1
  61. package/dist/commonjs/v3/createStartSessionAction.test.js +0 -176
  62. package/dist/commonjs/v3/createStartSessionAction.test.js.map +0 -1
  63. package/dist/commonjs/v3/runs-bulk.test.d.ts +0 -1
  64. package/dist/commonjs/v3/runs-bulk.test.js +0 -141
  65. package/dist/commonjs/v3/runs-bulk.test.js.map +0 -1
  66. package/dist/commonjs/v3/schedules/index.test.d.ts +0 -1
  67. package/dist/commonjs/v3/schedules/index.test.js +0 -49
  68. package/dist/commonjs/v3/schedules/index.test.js.map +0 -1
  69. package/dist/commonjs/v3/schedules/index.types.test.d.ts +0 -1
  70. package/dist/commonjs/v3/schedules/index.types.test.js +0 -93
  71. package/dist/commonjs/v3/schedules/index.types.test.js.map +0 -1
  72. package/dist/commonjs/v3/sessions.test.d.ts +0 -1
  73. package/dist/commonjs/v3/sessions.test.js +0 -154
  74. package/dist/commonjs/v3/sessions.test.js.map +0 -1
  75. package/dist/commonjs/v3/shared.test.d.ts +0 -1
  76. package/dist/commonjs/v3/shared.test.js +0 -236
  77. package/dist/commonjs/v3/shared.test.js.map +0 -1
  78. package/dist/commonjs/v3/streams.test.d.ts +0 -1
  79. package/dist/commonjs/v3/streams.test.js +0 -51
  80. package/dist/commonjs/v3/streams.test.js.map +0 -1
  81. package/dist/commonjs/v3/triggerClient.test.d.ts +0 -1
  82. package/dist/commonjs/v3/triggerClient.test.js +0 -226
  83. package/dist/commonjs/v3/triggerClient.test.js.map +0 -1
  84. package/dist/commonjs/v3/triggerClient.types.test.d.ts +0 -1
  85. package/dist/commonjs/v3/triggerClient.types.test.js +0 -123
  86. package/dist/commonjs/v3/triggerClient.types.test.js.map +0 -1
  87. package/dist/esm/v3/auth.test.d.ts +0 -1
  88. package/dist/esm/v3/auth.test.js +0 -147
  89. package/dist/esm/v3/auth.test.js.map +0 -1
  90. package/dist/esm/v3/batchDebounce.test.d.ts +0 -1
  91. package/dist/esm/v3/batchDebounce.test.js +0 -187
  92. package/dist/esm/v3/batchDebounce.test.js.map +0 -1
  93. package/dist/esm/v3/chat-server.test.d.ts +0 -1
  94. package/dist/esm/v3/chat-server.test.js +0 -711
  95. package/dist/esm/v3/chat-server.test.js.map +0 -1
  96. package/dist/esm/v3/chat-tab-coordinator.test.d.ts +0 -1
  97. package/dist/esm/v3/chat-tab-coordinator.test.js +0 -138
  98. package/dist/esm/v3/chat-tab-coordinator.test.js.map +0 -1
  99. package/dist/esm/v3/chat.test.d.ts +0 -1
  100. package/dist/esm/v3/chat.test.js +0 -1836
  101. package/dist/esm/v3/chat.test.js.map +0 -1
  102. package/dist/esm/v3/createStartSessionAction.test.d.ts +0 -1
  103. package/dist/esm/v3/createStartSessionAction.test.js +0 -174
  104. package/dist/esm/v3/createStartSessionAction.test.js.map +0 -1
  105. package/dist/esm/v3/runs-bulk.test.d.ts +0 -1
  106. package/dist/esm/v3/runs-bulk.test.js +0 -139
  107. package/dist/esm/v3/runs-bulk.test.js.map +0 -1
  108. package/dist/esm/v3/schedules/index.test.d.ts +0 -1
  109. package/dist/esm/v3/schedules/index.test.js +0 -47
  110. package/dist/esm/v3/schedules/index.test.js.map +0 -1
  111. package/dist/esm/v3/schedules/index.types.test.d.ts +0 -1
  112. package/dist/esm/v3/schedules/index.types.test.js +0 -91
  113. package/dist/esm/v3/schedules/index.types.test.js.map +0 -1
  114. package/dist/esm/v3/sessions.test.d.ts +0 -1
  115. package/dist/esm/v3/sessions.test.js +0 -152
  116. package/dist/esm/v3/sessions.test.js.map +0 -1
  117. package/dist/esm/v3/shared.test.d.ts +0 -1
  118. package/dist/esm/v3/shared.test.js +0 -234
  119. package/dist/esm/v3/shared.test.js.map +0 -1
  120. package/dist/esm/v3/streams.test.d.ts +0 -1
  121. package/dist/esm/v3/streams.test.js +0 -49
  122. package/dist/esm/v3/streams.test.js.map +0 -1
  123. package/dist/esm/v3/triggerClient.test.d.ts +0 -1
  124. package/dist/esm/v3/triggerClient.test.js +0 -224
  125. package/dist/esm/v3/triggerClient.test.js.map +0 -1
  126. package/dist/esm/v3/triggerClient.types.test.d.ts +0 -1
  127. package/dist/esm/v3/triggerClient.types.test.js +0 -88
  128. package/dist/esm/v3/triggerClient.types.test.js.map +0 -1
@@ -130,16 +130,84 @@ export function AIStreamViewer({
130
130
  The `useRealtimeStream` hook accepts the following options:
131
131
 
132
132
  ```tsx
133
- const { parts, error } = useRealtimeStream(streamOrRunId, streamKeyOrOptions, {
133
+ const { parts, lastEventId, error } = useRealtimeStream(streamOrRunId, streamKeyOrOptions, {
134
134
  accessToken: "pk_...", // Required: Public access token
135
135
  baseURL: "https://api.trigger.dev", // Optional: Custom API URL
136
136
  timeoutInSeconds: 60, // Optional: Timeout (default: 60)
137
- startIndex: 0, // Optional: Start from specific chunk
137
+ from: "beginning", // Optional: "beginning" (default) or "latest"
138
+ maxParts: 100, // Optional: keep only the most recent N parts (default: unbounded)
139
+ lastEventId: undefined, // Optional: resume cursor (takes precedence over startIndex)
140
+ startIndex: 0, // Optional: start from a specific chunk index
138
141
  throttleInMs: 16, // Optional: Throttle updates (default: 16ms)
139
- onData: (chunk) => {}, // Optional: Callback for each chunk
142
+ onData: (chunk) => {}, // Optional: callback for each chunk
143
+ onParts: (batch) => {}, // Optional: callback per throttled batch, each with its event id
144
+ refreshAccessToken: async () => "pk_...", // Optional: mint a fresh token on expiry
140
145
  });
141
146
  ```
142
147
 
148
+ The hook returns `lastEventId`, the cursor of the last part it received. Persist it and pass it back as the `lastEventId` option to resume later.
149
+
150
+ ### Live view: start from the latest record
151
+
152
+ By default a subscriber replays the whole stream history, then live-tails. Pass `from: "latest"` to start at the current tail (the latest record, then live updates) instead of replaying, and `maxParts` to keep memory bounded. Together they give a last-value view:
153
+
154
+ ```tsx
155
+ "use client";
156
+
157
+ import { useRealtimeStream } from "@trigger.dev/react-hooks";
158
+
159
+ export function LatestFrame({ runId, accessToken }: { runId: string; accessToken: string }) {
160
+ const { parts } = useRealtimeStream<{ url: string }>(runId, "frames", {
161
+ accessToken,
162
+ from: "latest", // start at the latest frame, then live updates
163
+ maxParts: 1, // keep just the most recent frame
164
+ });
165
+
166
+ const frame = parts.at(-1);
167
+ return frame ? <img src={frame.url} alt="latest frame" /> : null;
168
+ }
169
+ ```
170
+
171
+ <Note>
172
+ `from: "latest"` requires a server that supports it. Against an older server a client that passes
173
+ it degrades safely to a full replay.
174
+ </Note>
175
+
176
+ ### Resume across a page reload
177
+
178
+ The hook resumes automatically across a component remount. A full page reload clears in-memory
179
+ state, so to resume there, persist the returned `lastEventId` and pass it back on the next load. The
180
+ subscription then continues after that record with no replay and no gap:
181
+
182
+ ```tsx
183
+ const cursorKey = `frames-cursor:${runId}`; // scope the key to this stream
184
+ const saved = localStorage.getItem(cursorKey) ?? undefined;
185
+
186
+ const { parts, lastEventId } = useRealtimeStream<{ url: string }>(runId, "frames", {
187
+ accessToken,
188
+ lastEventId: saved, // resume where the previous session left off
189
+ onParts: (batch) => localStorage.setItem(cursorKey, batch.at(-1)!.id),
190
+ });
191
+ ```
192
+
193
+ ### Refresh an expired access token
194
+
195
+ Public access tokens are short-lived. For a long-running subscription, pass `refreshAccessToken` to
196
+ mint a fresh token when the server rejects the connection with a 401/403. The subscription re-mints
197
+ once and reconnects; with no refresher, auth errors stay terminal:
198
+
199
+ ```tsx
200
+ const { parts } = useRealtimeStream<{ url: string }>(runId, "frames", {
201
+ accessToken,
202
+ refreshAccessToken: async () => {
203
+ const res = await fetch("/api/realtime-token"); // your backend mints a fresh public token
204
+ return (await res.json()).token;
205
+ },
206
+ });
207
+ ```
208
+
209
+ `refreshAccessToken` is also available on [`useApiClient` and `TriggerAuthContext`](/realtime/auth), so every hook under a provider shares one refresher.
210
+
143
211
  ### Using Default Stream
144
212
 
145
213
  You can omit the stream key to use the default stream:
@@ -15,7 +15,7 @@ We take the security of Trigger.dev seriously, for both Cloud and self-hosted de
15
15
  <Steps>
16
16
  <Step title="Choose a private channel">
17
17
  - **GitHub (preferred):** open a private report from the repository's **Security** tab using **"Report a vulnerability"** ([direct link](https://github.com/triggerdotdev/trigger.dev/security/advisories/new)).
18
- - **Email:** `security-advisories@trigger.dev`
18
+ - **Email:** `security@trigger.dev`
19
19
  </Step>
20
20
  <Step title="Include the details">
21
21
  A description and impact, steps to reproduce (a proof of concept helps), affected versions/components, and any suggested fix.
@@ -144,9 +144,12 @@ With options:
144
144
  const stream = await aiStream.read(runId, {
145
145
  timeoutInSeconds: 60, // Stop if no data for 60 seconds
146
146
  startIndex: 10, // Start from the 10th chunk
147
+ from: "latest", // Or skip history and read only new records from now
147
148
  });
148
149
  ```
149
150
 
151
+ Pass `from: "latest"` to start at the current tail and receive only records appended after the read connects, instead of replaying from the beginning.
152
+
150
153
  #### Appending to a Stream
151
154
 
152
155
  Use the defined stream's `append()` method to add a single chunk:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trigger.dev/sdk",
3
- "version": "4.5.13",
3
+ "version": "4.5.15",
4
4
  "description": "trigger.dev Node.JS SDK",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -20,6 +20,9 @@
20
20
  ],
21
21
  "tshy": {
22
22
  "selfLink": false,
23
+ "exclude": [
24
+ "src/**/*.test.ts"
25
+ ],
23
26
  "main": true,
24
27
  "module": true,
25
28
  "project": "./tsconfig.build.json",
@@ -66,7 +69,7 @@
66
69
  "dependencies": {
67
70
  "@opentelemetry/api": "1.9.1",
68
71
  "@opentelemetry/semantic-conventions": "1.41.1",
69
- "@trigger.dev/core": "4.5.13",
72
+ "@trigger.dev/core": "4.5.15",
70
73
  "uncrypto": "^0.1.3"
71
74
  },
72
75
  "devDependencies": {
@@ -1 +0,0 @@
1
- export {};
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_http_1 = require("node:http");
4
- const v3_1 = require("@trigger.dev/core/v3");
5
- const jwt_1 = require("@trigger.dev/core/v3/jwt");
6
- const vitest_1 = require("vitest");
7
- const auth_js_1 = require("./auth.js");
8
- (0, vitest_1.describe)("public token API key routing", () => {
9
- let server;
10
- let baseUrl;
11
- let requests;
12
- let publicTokenStatus;
13
- (0, vitest_1.beforeEach)(async () => {
14
- requests = [];
15
- publicTokenStatus = 200;
16
- server = (0, node_http_1.createServer)((request, response) => {
17
- void handleRequest(request, response, requests, () => publicTokenStatus);
18
- });
19
- await new Promise((resolve) => {
20
- server.listen(0, "127.0.0.1", () => {
21
- const address = server.address();
22
- baseUrl = `http://127.0.0.1:${address.port}`;
23
- resolve();
24
- });
25
- });
26
- });
27
- (0, vitest_1.afterEach)(async () => {
28
- await new Promise((resolve) => server.close(() => resolve()));
29
- });
30
- (0, vitest_1.it)("uses server minting for additional keys", async () => {
31
- const key = "tr_prod_sk_0123456789abcdefghijklmn";
32
- const token = await v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createPublicToken({
33
- scopes: { read: { runs: ["run_123"] } },
34
- expirationTime: new Date("2030-01-01T00:00:00.000Z"),
35
- realtime: { skipColumns: ["payload"] },
36
- }));
37
- (0, vitest_1.expect)(token).toBe("server-minted-token");
38
- (0, vitest_1.expect)(requests).toEqual([
39
- {
40
- method: "POST",
41
- url: "/api/v1/auth/public-tokens",
42
- authorization: `Bearer ${key}`,
43
- body: {
44
- scopes: ["read:runs:run_123"],
45
- expirationTime: 1893456000,
46
- realtime: { skipColumns: ["payload"] },
47
- },
48
- },
49
- ]);
50
- });
51
- (0, vitest_1.it)("server-mints trigger tokens with one-time-use semantics", async () => {
52
- const key = "tr_dev_sk_0123456789abcdefghijklmn";
53
- await v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createTriggerPublicToken(["task-one", "task-two"], { multipleUse: true }));
54
- (0, vitest_1.expect)(requests[0]?.body).toEqual({
55
- scopes: ["trigger:tasks:task-one", "trigger:tasks:task-two"],
56
- oneTimeUse: false,
57
- });
58
- });
59
- (0, vitest_1.it)("server-mints batch trigger tokens for additional keys", async () => {
60
- const key = "tr_stg_sk_0123456789abcdefghijklmn";
61
- await v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createBatchTriggerPublicToken("batch-task", {
62
- expirationTime: "2h",
63
- multipleUse: false,
64
- realtime: { skipColumns: ["payload"] },
65
- }));
66
- (0, vitest_1.expect)(requests).toEqual([
67
- {
68
- method: "POST",
69
- url: "/api/v1/auth/public-tokens",
70
- authorization: `Bearer ${key}`,
71
- body: {
72
- scopes: ["batchTrigger:tasks:batch-task"],
73
- expirationTime: "2h",
74
- oneTimeUse: true,
75
- realtime: { skipColumns: ["payload"] },
76
- },
77
- },
78
- ]);
79
- });
80
- (0, vitest_1.it)("keeps root key self-minting unchanged", async () => {
81
- const key = "tr_prod_0123456789abcdefghijklmn";
82
- const token = await v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createPublicToken({ scopes: { read: { runs: true } } }));
83
- (0, vitest_1.expect)(requests.map((request) => request.url)).toEqual(["/api/v1/auth/jwt/claims"]);
84
- const validation = await (0, jwt_1.validateJWT)(token, key);
85
- (0, vitest_1.expect)(validation.ok).toBe(true);
86
- if (!validation.ok)
87
- return;
88
- (0, vitest_1.expect)(validation.payload).toMatchObject({
89
- sub: "env_test",
90
- pub: true,
91
- scopes: ["read:runs"],
92
- });
93
- });
94
- vitest_1.it.each([
95
- ["no options at all", undefined],
96
- ["an empty scopes object", {}],
97
- ["a scope group with nothing selected", { read: {} }],
98
- ])("keeps root-key behavior unchanged for %s", async (_label, scopes) => {
99
- const key = "tr_prod_0123456789abcdefghijklmn";
100
- const token = await v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createPublicToken(scopes === undefined ? undefined : { scopes }));
101
- (0, vitest_1.expect)(requests.map((request) => request.url)).toEqual(["/api/v1/auth/jwt/claims"]);
102
- const validation = await (0, jwt_1.validateJWT)(token, key);
103
- (0, vitest_1.expect)(validation.ok).toBe(true);
104
- });
105
- vitest_1.it.each([
106
- ["no options at all", undefined],
107
- ["an empty scopes object", {}],
108
- ["a scope group with nothing selected", { read: {} }],
109
- ])("rejects %s clearly for additional keys", async (_label, scopes) => {
110
- const key = "tr_prod_sk_0123456789abcdefghijklmn";
111
- const promise = v3_1.apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth_js_1.auth.createPublicToken(scopes === undefined ? undefined : { scopes }));
112
- await (0, vitest_1.expect)(promise).rejects.toThrow("requires at least one scope when using an additional API key");
113
- (0, vitest_1.expect)(requests).toEqual([]);
114
- });
115
- (0, vitest_1.it)("explains how to recover when the server lacks the mint endpoint", async () => {
116
- publicTokenStatus = 404;
117
- const promise = v3_1.apiClientManager.runWithConfig({
118
- baseURL: baseUrl,
119
- accessToken: "tr_prod_sk_0123456789abcdefghijklmn",
120
- }, () => auth_js_1.auth.createPublicToken({ scopes: { read: { runs: true } } }));
121
- await (0, vitest_1.expect)(promise).rejects.toThrow("Upgrade the server or use the root API key");
122
- });
123
- });
124
- async function handleRequest(request, response, requests, publicTokenStatus) {
125
- const chunks = [];
126
- for await (const chunk of request) {
127
- chunks.push(Buffer.from(chunk));
128
- }
129
- const rawBody = Buffer.concat(chunks).toString();
130
- requests.push({
131
- method: request.method ?? "",
132
- url: request.url ?? "",
133
- authorization: request.headers.authorization,
134
- body: rawBody ? JSON.parse(rawBody) : undefined,
135
- });
136
- if (request.url === "/api/v1/auth/jwt/claims") {
137
- return json(response, { sub: "env_test", pub: true });
138
- }
139
- if (request.url === "/api/v1/auth/public-tokens") {
140
- const status = publicTokenStatus();
141
- return json(response, status === 200 ? { token: "server-minted-token" } : { error: "Not found" }, status);
142
- }
143
- return json(response, { error: "Not found" }, 404);
144
- }
145
- function json(response, body, status = 200) {
146
- response.writeHead(status, { "content-type": "application/json" });
147
- response.end(JSON.stringify(body));
148
- }
149
- //# sourceMappingURL=auth.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../src/v3/auth.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,189 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const v3_1 = require("@trigger.dev/core/v3");
4
- const test_1 = require("@trigger.dev/core/v3/test");
5
- const vitest_1 = require("vitest");
6
- const batch_js_1 = require("./batch.js");
7
- const shared_js_1 = require("./shared.js");
8
- const tasks_js_1 = require("./tasks.js");
9
- const debounceFor = (i) => ({
10
- key: `warm-conn-notify:${i}`,
11
- delay: "12h",
12
- maxDelay: "24h",
13
- mode: "trailing",
14
- });
15
- const EXPECTED = [debounceFor(0), debounceFor(1)];
16
- const taskA = (0, shared_js_1.createTask)({
17
- id: "task-a",
18
- run: async (_payload) => ({ ok: true }),
19
- });
20
- const taskB = (0, shared_js_1.createTask)({
21
- id: "task-b",
22
- run: async (_payload) => ({ ok: true }),
23
- });
24
- /**
25
- * Captures the NDJSON item stream the SDK sends in phase 2 of a batch trigger,
26
- * answering the only question these tests care about: what actually reached the
27
- * wire. Phase 1 (create) and the item stream get canned success responses.
28
- */
29
- function installBatchCapture() {
30
- const sent = [];
31
- const originalFetch = globalThis.fetch;
32
- globalThis.fetch = (async (input, init) => {
33
- const url = typeof input === "string" ? input : (input?.url ?? String(input));
34
- if (url.endsWith("/api/v3/batches")) {
35
- const body = JSON.parse(String(init?.body));
36
- return Response.json({ id: "batch_test", runCount: body.runCount, isCached: false });
37
- }
38
- if (url.includes("/api/v3/batches/") && url.endsWith("/items")) {
39
- const ndjson = await new Response(init?.body).text();
40
- const lines = ndjson.split("\n").filter((line) => line.trim().length > 0);
41
- sent.push(...lines.map((line) => JSON.parse(line)));
42
- return Response.json({
43
- id: "batch_test",
44
- itemsAccepted: lines.length,
45
- itemsDeduplicated: 0,
46
- sealed: true,
47
- });
48
- }
49
- throw new Error(`Unexpected request during batch trigger: ${url}`);
50
- });
51
- return {
52
- debounceOptions: () => [...sent].sort((a, b) => a.index - b.index).map((item) => item.options?.debounce),
53
- restore: () => {
54
- globalThis.fetch = originalFetch;
55
- },
56
- };
57
- }
58
- async function* asAsyncIterable(items) {
59
- for (const item of items) {
60
- yield item;
61
- }
62
- }
63
- (0, vitest_1.describe)("batch trigger debounce forwarding", () => {
64
- let capture;
65
- (0, vitest_1.beforeEach)(() => {
66
- v3_1.apiClientManager.setGlobalAPIClientConfiguration({
67
- baseURL: "http://localhost:3030",
68
- accessToken: "tr_dev_test",
69
- });
70
- capture = installBatchCapture();
71
- });
72
- (0, vitest_1.afterEach)(() => {
73
- capture.restore();
74
- v3_1.apiClientManager.disable();
75
- });
76
- const surfaces = [
77
- {
78
- name: "task.batchTrigger(array)",
79
- call: () => taskA.batchTrigger([
80
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
81
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
82
- ]),
83
- },
84
- {
85
- name: "task.batchTrigger(asyncIterable)",
86
- call: () => taskA.batchTrigger(asAsyncIterable([
87
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
88
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
89
- ])),
90
- },
91
- {
92
- name: "tasks.batchTrigger(array)",
93
- call: () => tasks_js_1.tasks.batchTrigger("task-a", [
94
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
95
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
96
- ]),
97
- },
98
- {
99
- name: "batch.trigger(array)",
100
- call: () => batch_js_1.batch.trigger([
101
- { id: "task-a", payload: { i: 0 }, options: { debounce: debounceFor(0) } },
102
- { id: "task-b", payload: { i: 1 }, options: { debounce: debounceFor(1) } },
103
- ]),
104
- },
105
- {
106
- name: "batch.trigger(asyncIterable)",
107
- call: () => batch_js_1.batch.trigger(asAsyncIterable([
108
- { id: "task-a", payload: { i: 0 }, options: { debounce: debounceFor(0) } },
109
- { id: "task-b", payload: { i: 1 }, options: { debounce: debounceFor(1) } },
110
- ])),
111
- },
112
- {
113
- name: "batch.triggerByTask(array)",
114
- call: () => batch_js_1.batch.triggerByTask([
115
- { task: taskA, payload: { i: 0 }, options: { debounce: debounceFor(0) } },
116
- { task: taskB, payload: { i: 1 }, options: { debounce: debounceFor(1) } },
117
- ]),
118
- },
119
- {
120
- name: "batch.triggerByTask(asyncIterable)",
121
- call: () => batch_js_1.batch.triggerByTask(asAsyncIterable([
122
- { task: taskA, payload: { i: 0 }, options: { debounce: debounceFor(0) } },
123
- { task: taskB, payload: { i: 1 }, options: { debounce: debounceFor(1) } },
124
- ])),
125
- },
126
- ];
127
- vitest_1.it.each(surfaces)("$name forwards debounce for every item", async ({ call }) => {
128
- await call();
129
- (0, vitest_1.expect)(capture.debounceOptions()).toEqual(EXPECTED);
130
- });
131
- const waitSurfaces = [
132
- {
133
- name: "task.batchTriggerAndWait(array)",
134
- call: () => taskA.batchTriggerAndWait([
135
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
136
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
137
- ]),
138
- },
139
- {
140
- name: "task.batchTriggerAndWait(asyncIterable)",
141
- call: () => taskA.batchTriggerAndWait(asAsyncIterable([
142
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
143
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
144
- ])),
145
- },
146
- {
147
- name: "tasks.batchTriggerAndWait(array)",
148
- call: () => tasks_js_1.tasks.batchTriggerAndWait("task-a", [
149
- { payload: { i: 0 }, options: { debounce: debounceFor(0) } },
150
- { payload: { i: 1 }, options: { debounce: debounceFor(1) } },
151
- ]),
152
- },
153
- {
154
- name: "batch.triggerAndWait(array)",
155
- call: () => batch_js_1.batch.triggerAndWait([
156
- { id: "task-a", payload: { i: 0 }, options: { debounce: debounceFor(0) } },
157
- { id: "task-b", payload: { i: 1 }, options: { debounce: debounceFor(1) } },
158
- ]),
159
- },
160
- {
161
- name: "batch.triggerAndWait(asyncIterable)",
162
- call: () => batch_js_1.batch.triggerAndWait(asAsyncIterable([
163
- { id: "task-a", payload: { i: 0 }, options: { debounce: debounceFor(0) } },
164
- { id: "task-b", payload: { i: 1 }, options: { debounce: debounceFor(1) } },
165
- ])),
166
- },
167
- {
168
- name: "batch.triggerByTaskAndWait(array)",
169
- call: () => batch_js_1.batch.triggerByTaskAndWait([
170
- { task: taskA, payload: { i: 0 }, options: { debounce: debounceFor(0) } },
171
- { task: taskB, payload: { i: 1 }, options: { debounce: debounceFor(1) } },
172
- ]),
173
- },
174
- {
175
- name: "batch.triggerByTaskAndWait(asyncIterable)",
176
- call: () => batch_js_1.batch.triggerByTaskAndWait(asAsyncIterable([
177
- { task: taskA, payload: { i: 0 }, options: { debounce: debounceFor(0) } },
178
- { task: taskB, payload: { i: 1 }, options: { debounce: debounceFor(1) } },
179
- ])),
180
- },
181
- ];
182
- vitest_1.it.each(waitSurfaces)("$name forwards debounce for every item", async ({ call }) => {
183
- await (0, test_1.runInMockTaskContext)(async () => {
184
- await call();
185
- });
186
- (0, vitest_1.expect)(capture.debounceOptions()).toEqual(EXPECTED);
187
- });
188
- });
189
- //# sourceMappingURL=batchDebounce.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchDebounce.test.js","sourceRoot":"","sources":["../../../src/v3/batchDebounce.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};