@trigger.dev/sdk 4.5.7 → 4.5.9
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.js +123 -31
- package/dist/commonjs/v3/ai.js.map +1 -1
- package/dist/commonjs/v3/auth.d.ts +7 -3
- package/dist/commonjs/v3/auth.js +68 -13
- package/dist/commonjs/v3/auth.js.map +1 -1
- package/dist/commonjs/v3/auth.test.d.ts +1 -0
- package/dist/commonjs/v3/auth.test.js +149 -0
- package/dist/commonjs/v3/auth.test.js.map +1 -0
- package/dist/commonjs/v3/createStartSessionAction.test.js +33 -0
- package/dist/commonjs/v3/createStartSessionAction.test.js.map +1 -1
- package/dist/commonjs/v3/runs.d.ts +6 -6
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/ai.js +124 -32
- package/dist/esm/v3/ai.js.map +1 -1
- package/dist/esm/v3/auth.d.ts +7 -3
- package/dist/esm/v3/auth.js +69 -14
- package/dist/esm/v3/auth.js.map +1 -1
- package/dist/esm/v3/auth.test.d.ts +1 -0
- package/dist/esm/v3/auth.test.js +147 -0
- package/dist/esm/v3/auth.test.js.map +1 -0
- package/dist/esm/v3/createStartSessionAction.test.js +33 -0
- package/dist/esm/v3/createStartSessionAction.test.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/docs/ai-chat/changelog.mdx +1 -1
- package/docs/ai-chat/how-it-works.mdx +1 -1
- package/docs/bulk-actions.mdx +2 -1
- package/docs/config/extensions/lightpanda.mdx +1 -1
- package/docs/config/extensions/puppeteer.mdx +1 -1
- package/docs/how-it-works.mdx +4 -4
- package/docs/how-to-reduce-your-spend.mdx +4 -4
- package/docs/queue-concurrency.mdx +4 -0
- package/docs/runs/bulk-actions.mdx +2 -1
- package/package.json +2 -2
package/dist/esm/v3/auth.d.ts
CHANGED
|
@@ -81,7 +81,9 @@ export type PublicTokenPermissions = {
|
|
|
81
81
|
};
|
|
82
82
|
export type CreatePublicTokenOptions = {
|
|
83
83
|
/**
|
|
84
|
-
* A collection of permission scopes to be granted to the token.
|
|
84
|
+
* A collection of permission scopes to be granted to the token. This remains
|
|
85
|
+
* optional for root API key compatibility; additional API keys require at
|
|
86
|
+
* least one scope.
|
|
85
87
|
*
|
|
86
88
|
* @example
|
|
87
89
|
*
|
|
@@ -95,7 +97,8 @@ export type CreatePublicTokenOptions = {
|
|
|
95
97
|
*/
|
|
96
98
|
scopes?: PublicTokenPermissions;
|
|
97
99
|
/**
|
|
98
|
-
* The expiration time for the token
|
|
100
|
+
* The expiration time for the token: a duration string, a `Date`, or a Unix
|
|
101
|
+
* timestamp in **seconds**.
|
|
99
102
|
*
|
|
100
103
|
* @example
|
|
101
104
|
*
|
|
@@ -155,7 +158,8 @@ declare function createPublicToken(options?: CreatePublicTokenOptions): Promise<
|
|
|
155
158
|
declare function withPublicToken(options: CreatePublicTokenOptions, fn: () => Promise<void>): Promise<void>;
|
|
156
159
|
export type CreateTriggerTokenOptions = {
|
|
157
160
|
/**
|
|
158
|
-
* The expiration time for the token
|
|
161
|
+
* The expiration time for the token: a duration string, a `Date`, or a Unix
|
|
162
|
+
* timestamp in **seconds**.
|
|
159
163
|
*
|
|
160
164
|
* @example
|
|
161
165
|
*
|
package/dist/esm/v3/auth.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { apiClientManager, generateJWT as internal_generateJWT, } from "@trigger.dev/core/v3";
|
|
1
|
+
import { apiClientManager, generateJWT as internal_generateJWT, isAdditionalApiKey, } from "@trigger.dev/core/v3";
|
|
2
2
|
import "@trigger.dev/core/v3/sdk-scope-storage";
|
|
3
3
|
/**
|
|
4
4
|
* Register the global API client configuration. Alternatively, you can set the `TRIGGER_SECRET_KEY` and `TRIGGER_API_URL` environment variables.
|
|
@@ -30,6 +30,26 @@ export const auth = {
|
|
|
30
30
|
withTriggerPublicToken,
|
|
31
31
|
withBatchTriggerPublicToken,
|
|
32
32
|
};
|
|
33
|
+
// A `Date` becomes Unix seconds; duration strings and numbers pass through. A
|
|
34
|
+
// bare number is already Unix seconds, matching how the local signing path
|
|
35
|
+
// reads it, so both key types treat the option the same.
|
|
36
|
+
function serverExpirationTime(expirationTime) {
|
|
37
|
+
return expirationTime instanceof Date
|
|
38
|
+
? Math.floor(expirationTime.getTime() / 1000)
|
|
39
|
+
: expirationTime;
|
|
40
|
+
}
|
|
41
|
+
async function createServerPublicToken(apiClient, body) {
|
|
42
|
+
try {
|
|
43
|
+
const result = await apiClient.createPublicToken(body);
|
|
44
|
+
return result.token;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error !== null && typeof error === "object" && "status" in error && error.status === 404) {
|
|
48
|
+
throw new Error("This additional API key cannot self-sign public tokens, and the server does not support public-token minting. Upgrade the server or use the root API key.");
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
33
53
|
/**
|
|
34
54
|
* Creates a public token using the provided options.
|
|
35
55
|
*
|
|
@@ -54,13 +74,28 @@ export const auth = {
|
|
|
54
74
|
* ```
|
|
55
75
|
*/
|
|
56
76
|
async function createPublicToken(options) {
|
|
77
|
+
const scopes = options?.scopes ? flattenScopes(options.scopes) : [];
|
|
57
78
|
const apiClient = apiClientManager.clientOrThrow();
|
|
79
|
+
if (isAdditionalApiKey(apiClient.accessToken)) {
|
|
80
|
+
// Additional keys cannot self-sign, and the server rejects empty scope
|
|
81
|
+
// lists because they cannot authorize anything. Keep the legacy root-key
|
|
82
|
+
// behaviour unchanged while failing clearly for this new credential type.
|
|
83
|
+
if (scopes.length === 0) {
|
|
84
|
+
throw new Error("auth.createPublicToken() requires at least one scope when using an additional API key. " +
|
|
85
|
+
'For example: auth.createPublicToken({ scopes: { read: { runs: ["run_1234"] } } })');
|
|
86
|
+
}
|
|
87
|
+
return createServerPublicToken(apiClient, {
|
|
88
|
+
scopes,
|
|
89
|
+
expirationTime: serverExpirationTime(options?.expirationTime),
|
|
90
|
+
realtime: options?.realtime,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
58
93
|
const claims = await apiClient.generateJWTClaims();
|
|
59
94
|
return await internal_generateJWT({
|
|
60
95
|
secretKey: apiClient.accessToken,
|
|
61
96
|
payload: {
|
|
62
97
|
...claims,
|
|
63
|
-
scopes: options?.scopes ?
|
|
98
|
+
scopes: options?.scopes ? scopes : undefined,
|
|
64
99
|
realtime: options?.realtime,
|
|
65
100
|
},
|
|
66
101
|
expirationTime: options?.expirationTime,
|
|
@@ -110,18 +145,28 @@ async function withPublicToken(options, fn) {
|
|
|
110
145
|
*/
|
|
111
146
|
async function createTriggerPublicToken(task, options) {
|
|
112
147
|
const apiClient = apiClientManager.clientOrThrow();
|
|
148
|
+
const scopes = flattenScopes({
|
|
149
|
+
trigger: {
|
|
150
|
+
tasks: task,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
const oneTimeUse = typeof options?.multipleUse === "boolean" ? !options.multipleUse : true;
|
|
154
|
+
if (isAdditionalApiKey(apiClient.accessToken)) {
|
|
155
|
+
return createServerPublicToken(apiClient, {
|
|
156
|
+
scopes,
|
|
157
|
+
expirationTime: serverExpirationTime(options?.expirationTime),
|
|
158
|
+
oneTimeUse,
|
|
159
|
+
realtime: options?.realtime,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
113
162
|
const claims = await apiClient.generateJWTClaims();
|
|
114
163
|
return await internal_generateJWT({
|
|
115
164
|
secretKey: apiClient.accessToken,
|
|
116
165
|
payload: {
|
|
117
166
|
...claims,
|
|
118
|
-
otu:
|
|
167
|
+
otu: oneTimeUse,
|
|
119
168
|
realtime: options?.realtime,
|
|
120
|
-
scopes
|
|
121
|
-
trigger: {
|
|
122
|
-
tasks: task,
|
|
123
|
-
},
|
|
124
|
-
}),
|
|
169
|
+
scopes,
|
|
125
170
|
},
|
|
126
171
|
expirationTime: options?.expirationTime,
|
|
127
172
|
});
|
|
@@ -170,18 +215,28 @@ async function withTriggerPublicToken(task, options = {}, fn) {
|
|
|
170
215
|
*/
|
|
171
216
|
async function createBatchTriggerPublicToken(task, options) {
|
|
172
217
|
const apiClient = apiClientManager.clientOrThrow();
|
|
218
|
+
const scopes = flattenScopes({
|
|
219
|
+
batchTrigger: {
|
|
220
|
+
tasks: task,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
const oneTimeUse = typeof options?.multipleUse === "boolean" ? !options.multipleUse : true;
|
|
224
|
+
if (isAdditionalApiKey(apiClient.accessToken)) {
|
|
225
|
+
return createServerPublicToken(apiClient, {
|
|
226
|
+
scopes,
|
|
227
|
+
expirationTime: serverExpirationTime(options?.expirationTime),
|
|
228
|
+
oneTimeUse,
|
|
229
|
+
realtime: options?.realtime,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
173
232
|
const claims = await apiClient.generateJWTClaims();
|
|
174
233
|
return await internal_generateJWT({
|
|
175
234
|
secretKey: apiClient.accessToken,
|
|
176
235
|
payload: {
|
|
177
236
|
...claims,
|
|
178
|
-
otu:
|
|
237
|
+
otu: oneTimeUse,
|
|
179
238
|
realtime: options?.realtime,
|
|
180
|
-
scopes
|
|
181
|
-
batchTrigger: {
|
|
182
|
-
tasks: task,
|
|
183
|
-
},
|
|
184
|
-
}),
|
|
239
|
+
scopes,
|
|
185
240
|
},
|
|
186
241
|
expirationTime: options?.expirationTime,
|
|
187
242
|
});
|
package/dist/esm/v3/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/v3/auth.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/v3/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { apiClientManager } from "@trigger.dev/core/v3";
|
|
3
|
+
import { validateJWT } from "@trigger.dev/core/v3/jwt";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { auth } from "./auth.js";
|
|
6
|
+
describe("public token API key routing", () => {
|
|
7
|
+
let server;
|
|
8
|
+
let baseUrl;
|
|
9
|
+
let requests;
|
|
10
|
+
let publicTokenStatus;
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
requests = [];
|
|
13
|
+
publicTokenStatus = 200;
|
|
14
|
+
server = createServer((request, response) => {
|
|
15
|
+
void handleRequest(request, response, requests, () => publicTokenStatus);
|
|
16
|
+
});
|
|
17
|
+
await new Promise((resolve) => {
|
|
18
|
+
server.listen(0, "127.0.0.1", () => {
|
|
19
|
+
const address = server.address();
|
|
20
|
+
baseUrl = `http://127.0.0.1:${address.port}`;
|
|
21
|
+
resolve();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
afterEach(async () => {
|
|
26
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
27
|
+
});
|
|
28
|
+
it("uses server minting for additional keys", async () => {
|
|
29
|
+
const key = "tr_prod_sk_0123456789abcdefghijklmn";
|
|
30
|
+
const token = await apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createPublicToken({
|
|
31
|
+
scopes: { read: { runs: ["run_123"] } },
|
|
32
|
+
expirationTime: new Date("2030-01-01T00:00:00.000Z"),
|
|
33
|
+
realtime: { skipColumns: ["payload"] },
|
|
34
|
+
}));
|
|
35
|
+
expect(token).toBe("server-minted-token");
|
|
36
|
+
expect(requests).toEqual([
|
|
37
|
+
{
|
|
38
|
+
method: "POST",
|
|
39
|
+
url: "/api/v1/auth/public-tokens",
|
|
40
|
+
authorization: `Bearer ${key}`,
|
|
41
|
+
body: {
|
|
42
|
+
scopes: ["read:runs:run_123"],
|
|
43
|
+
expirationTime: 1893456000,
|
|
44
|
+
realtime: { skipColumns: ["payload"] },
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
it("server-mints trigger tokens with one-time-use semantics", async () => {
|
|
50
|
+
const key = "tr_dev_sk_0123456789abcdefghijklmn";
|
|
51
|
+
await apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createTriggerPublicToken(["task-one", "task-two"], { multipleUse: true }));
|
|
52
|
+
expect(requests[0]?.body).toEqual({
|
|
53
|
+
scopes: ["trigger:tasks:task-one", "trigger:tasks:task-two"],
|
|
54
|
+
oneTimeUse: false,
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
it("server-mints batch trigger tokens for additional keys", async () => {
|
|
58
|
+
const key = "tr_stg_sk_0123456789abcdefghijklmn";
|
|
59
|
+
await apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createBatchTriggerPublicToken("batch-task", {
|
|
60
|
+
expirationTime: "2h",
|
|
61
|
+
multipleUse: false,
|
|
62
|
+
realtime: { skipColumns: ["payload"] },
|
|
63
|
+
}));
|
|
64
|
+
expect(requests).toEqual([
|
|
65
|
+
{
|
|
66
|
+
method: "POST",
|
|
67
|
+
url: "/api/v1/auth/public-tokens",
|
|
68
|
+
authorization: `Bearer ${key}`,
|
|
69
|
+
body: {
|
|
70
|
+
scopes: ["batchTrigger:tasks:batch-task"],
|
|
71
|
+
expirationTime: "2h",
|
|
72
|
+
oneTimeUse: true,
|
|
73
|
+
realtime: { skipColumns: ["payload"] },
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
]);
|
|
77
|
+
});
|
|
78
|
+
it("keeps root key self-minting unchanged", async () => {
|
|
79
|
+
const key = "tr_prod_0123456789abcdefghijklmn";
|
|
80
|
+
const token = await apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createPublicToken({ scopes: { read: { runs: true } } }));
|
|
81
|
+
expect(requests.map((request) => request.url)).toEqual(["/api/v1/auth/jwt/claims"]);
|
|
82
|
+
const validation = await validateJWT(token, key);
|
|
83
|
+
expect(validation.ok).toBe(true);
|
|
84
|
+
if (!validation.ok)
|
|
85
|
+
return;
|
|
86
|
+
expect(validation.payload).toMatchObject({
|
|
87
|
+
sub: "env_test",
|
|
88
|
+
pub: true,
|
|
89
|
+
scopes: ["read:runs"],
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
it.each([
|
|
93
|
+
["no options at all", undefined],
|
|
94
|
+
["an empty scopes object", {}],
|
|
95
|
+
["a scope group with nothing selected", { read: {} }],
|
|
96
|
+
])("keeps root-key behavior unchanged for %s", async (_label, scopes) => {
|
|
97
|
+
const key = "tr_prod_0123456789abcdefghijklmn";
|
|
98
|
+
const token = await apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createPublicToken(scopes === undefined ? undefined : { scopes }));
|
|
99
|
+
expect(requests.map((request) => request.url)).toEqual(["/api/v1/auth/jwt/claims"]);
|
|
100
|
+
const validation = await validateJWT(token, key);
|
|
101
|
+
expect(validation.ok).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
it.each([
|
|
104
|
+
["no options at all", undefined],
|
|
105
|
+
["an empty scopes object", {}],
|
|
106
|
+
["a scope group with nothing selected", { read: {} }],
|
|
107
|
+
])("rejects %s clearly for additional keys", async (_label, scopes) => {
|
|
108
|
+
const key = "tr_prod_sk_0123456789abcdefghijklmn";
|
|
109
|
+
const promise = apiClientManager.runWithConfig({ baseURL: baseUrl, accessToken: key }, () => auth.createPublicToken(scopes === undefined ? undefined : { scopes }));
|
|
110
|
+
await expect(promise).rejects.toThrow("requires at least one scope when using an additional API key");
|
|
111
|
+
expect(requests).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
it("explains how to recover when the server lacks the mint endpoint", async () => {
|
|
114
|
+
publicTokenStatus = 404;
|
|
115
|
+
const promise = apiClientManager.runWithConfig({
|
|
116
|
+
baseURL: baseUrl,
|
|
117
|
+
accessToken: "tr_prod_sk_0123456789abcdefghijklmn",
|
|
118
|
+
}, () => auth.createPublicToken({ scopes: { read: { runs: true } } }));
|
|
119
|
+
await expect(promise).rejects.toThrow("Upgrade the server or use the root API key");
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
async function handleRequest(request, response, requests, publicTokenStatus) {
|
|
123
|
+
const chunks = [];
|
|
124
|
+
for await (const chunk of request) {
|
|
125
|
+
chunks.push(Buffer.from(chunk));
|
|
126
|
+
}
|
|
127
|
+
const rawBody = Buffer.concat(chunks).toString();
|
|
128
|
+
requests.push({
|
|
129
|
+
method: request.method ?? "",
|
|
130
|
+
url: request.url ?? "",
|
|
131
|
+
authorization: request.headers.authorization,
|
|
132
|
+
body: rawBody ? JSON.parse(rawBody) : undefined,
|
|
133
|
+
});
|
|
134
|
+
if (request.url === "/api/v1/auth/jwt/claims") {
|
|
135
|
+
return json(response, { sub: "env_test", pub: true });
|
|
136
|
+
}
|
|
137
|
+
if (request.url === "/api/v1/auth/public-tokens") {
|
|
138
|
+
const status = publicTokenStatus();
|
|
139
|
+
return json(response, status === 200 ? { token: "server-minted-token" } : { error: "Not found" }, status);
|
|
140
|
+
}
|
|
141
|
+
return json(response, { error: "Not found" }, 404);
|
|
142
|
+
}
|
|
143
|
+
function json(response, body, status = 200) {
|
|
144
|
+
response.writeHead(status, { "content-type": "application/json" });
|
|
145
|
+
response.end(JSON.stringify(body));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=auth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../src/v3/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,6 +107,39 @@ describe("chat.createStartSessionAction — runtime", () => {
|
|
|
107
107
|
expect(lastStartBody?.triggerConfig.region).toBe("us-east-1");
|
|
108
108
|
expect(lastStartBody?.triggerConfig.lockToVersion).toBe("20260101.1");
|
|
109
109
|
});
|
|
110
|
+
it("server-mints override tokens for additional API keys", async () => {
|
|
111
|
+
const requests = [];
|
|
112
|
+
const start = chat.createStartSessionAction("fake-chat", {
|
|
113
|
+
apiClient: {
|
|
114
|
+
baseURL: "https://example.invalid",
|
|
115
|
+
accessToken: "tr_prod_sk_0123456789abcdefghijklmn",
|
|
116
|
+
},
|
|
117
|
+
tokenTTL: "30m",
|
|
118
|
+
fetch: async (url, init, context) => {
|
|
119
|
+
requests.push({
|
|
120
|
+
url,
|
|
121
|
+
body: typeof init.body === "string" ? JSON.parse(init.body) : undefined,
|
|
122
|
+
});
|
|
123
|
+
if (context.endpoint === "sessions") {
|
|
124
|
+
return Response.json({
|
|
125
|
+
id: "session_fixture",
|
|
126
|
+
runId: "run_fixture",
|
|
127
|
+
publicAccessToken: "session-token",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return Response.json({ token: "server-minted-token" });
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
const result = await start({ chatId: "chat-additional-key" });
|
|
134
|
+
expect(result.publicAccessToken).toBe("server-minted-token");
|
|
135
|
+
expect(requests[1]).toEqual({
|
|
136
|
+
url: "https://example.invalid/api/v1/auth/public-tokens",
|
|
137
|
+
body: {
|
|
138
|
+
scopes: ["read:sessions:chat-additional-key", "write:sessions:chat-additional-key"],
|
|
139
|
+
expirationTime: "30m",
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
});
|
|
110
143
|
it("keeps session-level metadata distinct from per-turn clientData", async () => {
|
|
111
144
|
installStartFixture();
|
|
112
145
|
const start = chat.createStartSessionAction("fake-chat");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStartSessionAction.test.js","sourceRoot":"","sources":["../../../src/v3/createStartSessionAction.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,0EAA0E;AAC1E,yEAAyE;AACzE,2DAA2D;AAC3D,gBAAgB,CAAC,+BAA+B,CAAC;IAC/C,OAAO,EAAE,yBAAyB;IAClC,WAAW,EAAE,gBAAgB;CAC9B,CAAC,CAAC;AAEH,wEAAwE;AACxE,IAAI,aAAmD,CAAC;AAExD,SAAS,mBAAmB;IAC1B,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAuC,EAAE;QAChF,aAAa,GAAG,IAAI,CAAC;QACrB,OAAO;YACL,EAAE,EAAE,iBAAiB;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK,EAAE,aAAa;YACpB,iBAAiB,EAAE,gBAAgB;YACnC,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,4BAA4B,CAAC,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACzC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,aAAa,GAAG,SAAS,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAC1E,6EAA6E;AAC7E,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,IAAI;KAClB,cAAc,CAAC;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC9B,CAAC;CACH,CAAC;KACD,KAAK,CAAC;IACL,EAAE,EAAE,WAAW;IACf,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,SAAgB;CAClC,CAAC,CAAC;AAEL,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,mBAAmB,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAkB,WAAW,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxD,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC;YAC7D,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;YACxC,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,mBAAmB,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,mBAAmB,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;YACvD,aAAa,EAAE;gBACb,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC5C;SACF,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAErC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAChD,gBAAgB;YAChB,UAAU;YACV,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,mBAAmB,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;YACvD,aAAa,EAAE;gBACb,WAAW,EAAE,GAAG;gBAChB,MAAM,EAAE,WAAW;gBACnB,aAAa,EAAE,YAAY;aAC5B;SACF,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEvC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,mBAAmB,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAkB,WAAW,CAAC,CAAC;QAC1E,MAAM,KAAK,CAAC;YACV,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,QAAQ,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;SACvC,CAAC,CAAC;QAEH,uDAAuD;QACvD,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC;YAC7D,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;SAC1C,CAAC,CAAC;QACH,mEAAmE;QACnE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAkB,WAAW,CAAC,CAAC;QAE1E,wDAAwD;QACxD,YAAY,EAA6C,CAAC,aAAa,EAEpE,CAAC;QACJ,oEAAoE;QACpE,YAAY,EAA6C,CAAC,GAAG,CAAC,aAAa,EAAW,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACzD,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC9D,6CAA6C;QAC7C,YAAY,EAA6C,CAAC,aAAa,EAAW,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"createStartSessionAction.test.js","sourceRoot":"","sources":["../../../src/v3/createStartSessionAction.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "4.5.
|
|
1
|
+
export const VERSION = "4.5.9";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "How
|
|
2
|
+
title: "How the AI Agents SDK works"
|
|
3
3
|
sidebarTitle: "How it works"
|
|
4
4
|
description: "End-to-end mechanics of a chat.agent turn: the two durable channels per session, the long-lived task that reads and writes them, and how a chat survives refreshes, deploys, and idle gaps."
|
|
5
5
|
---
|
package/docs/bulk-actions.mdx
CHANGED
package/docs/how-it-works.mdx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "How
|
|
2
|
+
title: "How Trigger.dev works"
|
|
3
3
|
sidebarTitle: "How it works"
|
|
4
4
|
description: "Understand how Trigger.dev works and how it can help you."
|
|
5
5
|
---
|
|
@@ -148,7 +148,7 @@ Here's how the Checkpoint-Resume System works:
|
|
|
148
148
|
|
|
149
149
|
2. **Subtask Handling**: If a task needs to trigger a subtask, it can do so and wait for its completion using `triggerAndWait`
|
|
150
150
|
|
|
151
|
-
3. **State Checkpointing**: While waiting for a subtask or during a programmed pause (e.g., `wait.for({
|
|
151
|
+
3. **State Checkpointing**: While waiting for a subtask or during a long programmed pause (e.g., `wait.for({ minutes: 5 })`), the system uses CRIU (Checkpoint/Restore In Userspace) to create a checkpoint of the task's entire state, including memory, CPU registers, and open file descriptors. A `wait.for()` or `wait.until()` shorter than 60 seconds doesn't checkpoint — see [Wait](/wait).
|
|
152
152
|
|
|
153
153
|
4. **Resource Release**: After checkpointing, the parent task's resources are released, freeing up the execution environment.
|
|
154
154
|
|
|
@@ -178,9 +178,9 @@ export const parentTask = task({
|
|
|
178
178
|
console.log("Child task result:", result);
|
|
179
179
|
|
|
180
180
|
// This will also cause the task to be checkpointed and suspended
|
|
181
|
-
await wait.for({
|
|
181
|
+
await wait.for({ minutes: 5 });
|
|
182
182
|
|
|
183
|
-
console.log("Resumed after
|
|
183
|
+
console.log("Resumed after 5 minutes");
|
|
184
184
|
|
|
185
185
|
return "Parent task completed";
|
|
186
186
|
},
|
|
@@ -170,7 +170,7 @@ export const boundedTask = task({
|
|
|
170
170
|
|
|
171
171
|
## Use waitpoints instead of polling
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
You don't pay for compute during any wait longer than 5 seconds. Use `wait.for()`, `wait.until()`, or `triggerAndWait()` instead of polling loops.
|
|
174
174
|
|
|
175
175
|
```ts
|
|
176
176
|
import { task, wait } from "@trigger.dev/sdk";
|
|
@@ -178,17 +178,17 @@ import { task, wait } from "@trigger.dev/sdk";
|
|
|
178
178
|
export const waitpointTask = task({
|
|
179
179
|
id: "waitpoint-task",
|
|
180
180
|
run: async (payload) => {
|
|
181
|
-
//
|
|
181
|
+
// You aren't charged for compute during this wait
|
|
182
182
|
await wait.for({ minutes: 5 });
|
|
183
183
|
|
|
184
|
-
//
|
|
184
|
+
// The parent isn't charged either while it waits for a child task
|
|
185
185
|
const result = await childTask.triggerAndWait({ data: payload });
|
|
186
186
|
return result;
|
|
187
187
|
},
|
|
188
188
|
});
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
Waiting saves you compute, but it doesn't always free up concurrency — see [Wait](/wait).
|
|
192
192
|
|
|
193
193
|
## Use debounce to consolidate multiple triggers
|
|
194
194
|
|
|
@@ -199,6 +199,10 @@ For example, if you have a queue with a `concurrencyLimit` of 1:
|
|
|
199
199
|
- When the executing run reaches a waitpoint and checkpoints, it releases its slot
|
|
200
200
|
- The next queued run can then begin execution
|
|
201
201
|
|
|
202
|
+
### Short time-based waits keep their slot
|
|
203
|
+
|
|
204
|
+
Checkpointing takes time, so a run doesn't checkpoint the moment it reaches a waitpoint. For [`wait.for()`](/wait-for) and [`wait.until()`](/wait-until) it happens 60 seconds into the wait, so anything shorter stays `EXECUTING` and holds its slot for the whole wait. If you're polling in a loop, use an interval comfortably above 60 seconds so the slot is actually released between polls.
|
|
205
|
+
|
|
202
206
|
### Waiting for a subtask on a different queue
|
|
203
207
|
|
|
204
208
|
When a parent task triggers and waits for a subtask on a different queue, the parent task will checkpoint and release its concurrency slot once it reaches the wait point. This prevents environment deadlocks where all concurrency slots would be occupied by waiting tasks.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trigger.dev/sdk",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.9",
|
|
4
4
|
"description": "trigger.dev Node.JS SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@opentelemetry/api": "1.9.1",
|
|
68
68
|
"@opentelemetry/semantic-conventions": "1.41.1",
|
|
69
|
-
"@trigger.dev/core": "4.5.
|
|
69
|
+
"@trigger.dev/core": "4.5.9",
|
|
70
70
|
"chalk": "^5.2.0",
|
|
71
71
|
"cronstrue": "^2.21.0",
|
|
72
72
|
"debug": "^4.3.4",
|