@trigger.dev/core 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/logger.d.ts +1 -0
- package/dist/commonjs/logger.js +101 -29
- package/dist/commonjs/logger.js.map +1 -1
- package/dist/commonjs/v3/apiClient/index.d.ts +22 -3
- package/dist/commonjs/v3/apiClient/index.js +73 -4
- package/dist/commonjs/v3/apiClient/index.js.map +1 -1
- package/dist/commonjs/v3/apiKeys.d.ts +7 -0
- package/dist/commonjs/v3/apiKeys.js +14 -0
- package/dist/commonjs/v3/apiKeys.js.map +1 -0
- package/dist/commonjs/v3/apiKeys.test.d.ts +1 -0
- package/dist/commonjs/v3/apiKeys.test.js +19 -0
- package/dist/commonjs/v3/apiKeys.test.js.map +1 -0
- package/dist/commonjs/v3/index.d.ts +1 -0
- package/dist/commonjs/v3/index.js +1 -0
- package/dist/commonjs/v3/index.js.map +1 -1
- package/dist/commonjs/v3/jwt.d.ts +2 -0
- package/dist/commonjs/v3/jwt.js +32 -0
- package/dist/commonjs/v3/jwt.js.map +1 -1
- package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +18 -15
- package/dist/commonjs/v3/runEngineWorker/supervisor/http.js +53 -12
- package/dist/commonjs/v3/runEngineWorker/supervisor/http.js.map +1 -1
- package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +24 -24
- package/dist/commonjs/v3/runEngineWorker/supervisor/types.d.ts +8 -0
- package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +2 -2
- package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +20 -20
- package/dist/commonjs/v3/schemas/api.d.ts +18 -18
- package/dist/commonjs/v3/schemas/checkpoints.d.ts +4 -4
- package/dist/commonjs/v3/schemas/common.d.ts +8 -8
- package/dist/commonjs/v3/schemas/messages.d.ts +8 -8
- package/dist/commonjs/v3/schemas/runEngine.d.ts +10 -10
- package/dist/commonjs/v3/utils/structuredLogger.js +3 -2
- package/dist/commonjs/v3/utils/structuredLogger.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/logger.d.ts +1 -0
- package/dist/esm/logger.js +100 -29
- package/dist/esm/logger.js.map +1 -1
- package/dist/esm/v3/apiClient/index.d.ts +22 -3
- package/dist/esm/v3/apiClient/index.js +73 -4
- package/dist/esm/v3/apiClient/index.js.map +1 -1
- package/dist/esm/v3/apiKeys.d.ts +7 -0
- package/dist/esm/v3/apiKeys.js +11 -0
- package/dist/esm/v3/apiKeys.js.map +1 -0
- package/dist/esm/v3/apiKeys.test.d.ts +1 -0
- package/dist/esm/v3/apiKeys.test.js +17 -0
- package/dist/esm/v3/apiKeys.test.js.map +1 -0
- package/dist/esm/v3/index.d.ts +1 -0
- package/dist/esm/v3/index.js +1 -0
- package/dist/esm/v3/index.js.map +1 -1
- package/dist/esm/v3/jwt.d.ts +2 -0
- package/dist/esm/v3/jwt.js +30 -0
- package/dist/esm/v3/jwt.js.map +1 -1
- package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +18 -15
- package/dist/esm/v3/runEngineWorker/supervisor/http.js +53 -12
- package/dist/esm/v3/runEngineWorker/supervisor/http.js.map +1 -1
- package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +24 -24
- package/dist/esm/v3/runEngineWorker/supervisor/types.d.ts +8 -0
- package/dist/esm/v3/runEngineWorker/workload/http.d.ts +2 -2
- package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +20 -20
- package/dist/esm/v3/schemas/api.d.ts +18 -18
- package/dist/esm/v3/schemas/checkpoints.d.ts +4 -4
- package/dist/esm/v3/schemas/common.d.ts +8 -8
- package/dist/esm/v3/schemas/messages.d.ts +8 -8
- package/dist/esm/v3/schemas/runEngine.d.ts +10 -10
- package/dist/esm/v3/utils/structuredLogger.js +3 -2
- package/dist/esm/v3/utils/structuredLogger.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
|
@@ -137,8 +137,8 @@ export declare const CompletedWaitpoint: z.ZodObject<{
|
|
|
137
137
|
friendlyId: string;
|
|
138
138
|
completedAt: Date;
|
|
139
139
|
outputIsError: boolean;
|
|
140
|
-
idempotencyKey?: string | undefined;
|
|
141
140
|
output?: string | undefined;
|
|
141
|
+
idempotencyKey?: string | undefined;
|
|
142
142
|
outputType?: string | undefined;
|
|
143
143
|
index?: number | undefined;
|
|
144
144
|
completedByTaskRun?: {
|
|
@@ -160,8 +160,8 @@ export declare const CompletedWaitpoint: z.ZodObject<{
|
|
|
160
160
|
friendlyId: string;
|
|
161
161
|
completedAt: Date;
|
|
162
162
|
outputIsError: boolean;
|
|
163
|
-
idempotencyKey?: string | undefined;
|
|
164
163
|
output?: string | undefined;
|
|
164
|
+
idempotencyKey?: string | undefined;
|
|
165
165
|
outputType?: string | undefined;
|
|
166
166
|
index?: number | undefined;
|
|
167
167
|
completedByTaskRun?: {
|
|
@@ -1354,8 +1354,8 @@ export declare const RunExecutionData: z.ZodObject<{
|
|
|
1354
1354
|
friendlyId: string;
|
|
1355
1355
|
completedAt: Date;
|
|
1356
1356
|
outputIsError: boolean;
|
|
1357
|
-
idempotencyKey?: string | undefined;
|
|
1358
1357
|
output?: string | undefined;
|
|
1358
|
+
idempotencyKey?: string | undefined;
|
|
1359
1359
|
outputType?: string | undefined;
|
|
1360
1360
|
index?: number | undefined;
|
|
1361
1361
|
completedByTaskRun?: {
|
|
@@ -1377,8 +1377,8 @@ export declare const RunExecutionData: z.ZodObject<{
|
|
|
1377
1377
|
friendlyId: string;
|
|
1378
1378
|
completedAt: Date;
|
|
1379
1379
|
outputIsError: boolean;
|
|
1380
|
-
idempotencyKey?: string | undefined;
|
|
1381
1380
|
output?: string | undefined;
|
|
1381
|
+
idempotencyKey?: string | undefined;
|
|
1382
1382
|
outputType?: string | undefined;
|
|
1383
1383
|
index?: number | undefined;
|
|
1384
1384
|
completedByTaskRun?: {
|
|
@@ -1417,8 +1417,8 @@ export declare const RunExecutionData: z.ZodObject<{
|
|
|
1417
1417
|
friendlyId: string;
|
|
1418
1418
|
completedAt: Date;
|
|
1419
1419
|
outputIsError: boolean;
|
|
1420
|
-
idempotencyKey?: string | undefined;
|
|
1421
1420
|
output?: string | undefined;
|
|
1421
|
+
idempotencyKey?: string | undefined;
|
|
1422
1422
|
outputType?: string | undefined;
|
|
1423
1423
|
index?: number | undefined;
|
|
1424
1424
|
completedByTaskRun?: {
|
|
@@ -1469,8 +1469,8 @@ export declare const RunExecutionData: z.ZodObject<{
|
|
|
1469
1469
|
friendlyId: string;
|
|
1470
1470
|
completedAt: Date;
|
|
1471
1471
|
outputIsError: boolean;
|
|
1472
|
-
idempotencyKey?: string | undefined;
|
|
1473
1472
|
output?: string | undefined;
|
|
1473
|
+
idempotencyKey?: string | undefined;
|
|
1474
1474
|
outputType?: string | undefined;
|
|
1475
1475
|
index?: number | undefined;
|
|
1476
1476
|
completedByTaskRun?: {
|
|
@@ -1769,8 +1769,8 @@ export declare const DequeuedMessage: z.ZodObject<{
|
|
|
1769
1769
|
friendlyId: string;
|
|
1770
1770
|
completedAt: Date;
|
|
1771
1771
|
outputIsError: boolean;
|
|
1772
|
-
idempotencyKey?: string | undefined;
|
|
1773
1772
|
output?: string | undefined;
|
|
1773
|
+
idempotencyKey?: string | undefined;
|
|
1774
1774
|
outputType?: string | undefined;
|
|
1775
1775
|
index?: number | undefined;
|
|
1776
1776
|
completedByTaskRun?: {
|
|
@@ -1792,8 +1792,8 @@ export declare const DequeuedMessage: z.ZodObject<{
|
|
|
1792
1792
|
friendlyId: string;
|
|
1793
1793
|
completedAt: Date;
|
|
1794
1794
|
outputIsError: boolean;
|
|
1795
|
-
idempotencyKey?: string | undefined;
|
|
1796
1795
|
output?: string | undefined;
|
|
1796
|
+
idempotencyKey?: string | undefined;
|
|
1797
1797
|
outputType?: string | undefined;
|
|
1798
1798
|
index?: number | undefined;
|
|
1799
1799
|
completedByTaskRun?: {
|
|
@@ -2015,8 +2015,8 @@ export declare const DequeuedMessage: z.ZodObject<{
|
|
|
2015
2015
|
friendlyId: string;
|
|
2016
2016
|
completedAt: Date;
|
|
2017
2017
|
outputIsError: boolean;
|
|
2018
|
-
idempotencyKey?: string | undefined;
|
|
2019
2018
|
output?: string | undefined;
|
|
2019
|
+
idempotencyKey?: string | undefined;
|
|
2020
2020
|
outputType?: string | undefined;
|
|
2021
2021
|
index?: number | undefined;
|
|
2022
2022
|
completedByTaskRun?: {
|
|
@@ -2106,8 +2106,8 @@ export declare const DequeuedMessage: z.ZodObject<{
|
|
|
2106
2106
|
friendlyId: string;
|
|
2107
2107
|
completedAt: Date;
|
|
2108
2108
|
outputIsError: boolean;
|
|
2109
|
-
idempotencyKey?: string | undefined;
|
|
2110
2109
|
output?: string | undefined;
|
|
2110
|
+
idempotencyKey?: string | undefined;
|
|
2111
2111
|
outputType?: string | undefined;
|
|
2112
2112
|
index?: number | undefined;
|
|
2113
2113
|
completedByTaskRun?: {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.SimpleStructuredLogger = exports.LogLevel = void 0;
|
|
5
|
+
const logger_js_1 = require("../../logger.js");
|
|
5
6
|
var LogLevel;
|
|
6
7
|
(function (LogLevel) {
|
|
7
8
|
LogLevel[LogLevel["log"] = 0] = "log";
|
|
@@ -68,14 +69,14 @@ class SimpleStructuredLogger {
|
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
71
|
#structuredLog(loggerFunction, message, level, ...args) {
|
|
71
|
-
const structuredLog = {
|
|
72
|
+
const structuredLog = (0, logger_js_1.redact)({
|
|
72
73
|
timestamp: new Date(),
|
|
73
74
|
message,
|
|
74
75
|
$name: this.name,
|
|
75
76
|
$level: level,
|
|
76
77
|
...this.fields,
|
|
77
78
|
...(args.length === 1 ? args[0] : args),
|
|
78
|
-
};
|
|
79
|
+
});
|
|
79
80
|
if (_a.onLog) {
|
|
80
81
|
try {
|
|
81
82
|
_a.onLog(structuredLog);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredLogger.js","sourceRoot":"","sources":["../../../../src/v3/utils/structuredLogger.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"structuredLogger.js","sourceRoot":"","sources":["../../../../src/v3/utils/structuredLogger.ts"],"names":[],"mappings":"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"}
|
package/dist/commonjs/version.js
CHANGED
package/dist/esm/logger.d.ts
CHANGED
|
@@ -14,3 +14,4 @@ export declare class Logger {
|
|
|
14
14
|
debug(message: string, ...args: Array<Record<string, unknown> | undefined>): void;
|
|
15
15
|
verbose(message: string, ...args: Array<Record<string, unknown> | undefined>): void;
|
|
16
16
|
}
|
|
17
|
+
export declare function redact(value: unknown, filteredKeys?: string[]): unknown;
|
package/dist/esm/logger.js
CHANGED
|
@@ -12,10 +12,47 @@ import { env } from "node:process";
|
|
|
12
12
|
import { Buffer } from "node:buffer";
|
|
13
13
|
import { trace, context } from "@opentelemetry/api";
|
|
14
14
|
const logLevels = ["log", "error", "warn", "info", "debug", "verbose"];
|
|
15
|
+
// Applied to every Logger instance, on top of whatever a caller passes in as `filteredKeys`.
|
|
16
|
+
// Keeps the previous "opt-in, per-instance" list from being the only thing standing between a
|
|
17
|
+
// logged object and a credential or piece of customer content that happens to share its name.
|
|
18
|
+
const DEFAULT_FILTERED_KEYS = [
|
|
19
|
+
"authorization",
|
|
20
|
+
"token",
|
|
21
|
+
"apikey",
|
|
22
|
+
"secretkey",
|
|
23
|
+
"accesstoken",
|
|
24
|
+
"refreshtoken",
|
|
25
|
+
"password",
|
|
26
|
+
"jwt",
|
|
27
|
+
"payload",
|
|
28
|
+
"output",
|
|
29
|
+
"metadata",
|
|
30
|
+
"seedmetadata",
|
|
31
|
+
"input",
|
|
32
|
+
"email",
|
|
33
|
+
"headers",
|
|
34
|
+
"completedwaitpoints",
|
|
35
|
+
];
|
|
36
|
+
// Belt-and-braces value-shape check: catches secrets anywhere in values that land under a field
|
|
37
|
+
// name we didn't think to deny-list (a trigger.dev API key, bearer token, or OpenAI-style key).
|
|
38
|
+
const SECRET_VALUE_PATTERN = /(tr_[a-zA-Z0-9_-]{4,}|sk-[a-zA-Z0-9_-]{4,}|Bearer\s+\S+)/;
|
|
39
|
+
// Per-field and per-structure caps so a single unbounded object (a run payload, a batch of
|
|
40
|
+
// items, a DB row) can't blow up log line size or CPU. Truncation keeps the field present and
|
|
41
|
+
// queryable rather than dropping it.
|
|
42
|
+
const MAX_STRING_LENGTH = 8192;
|
|
43
|
+
const MAX_ARRAY_LENGTH = 100;
|
|
44
|
+
const MAX_DEPTH = 10;
|
|
45
|
+
function buildFilteredKeySet(filteredKeys) {
|
|
46
|
+
const set = new Set(DEFAULT_FILTERED_KEYS);
|
|
47
|
+
for (const key of filteredKeys) {
|
|
48
|
+
set.add(key.toLowerCase());
|
|
49
|
+
}
|
|
50
|
+
return set;
|
|
51
|
+
}
|
|
15
52
|
export class Logger {
|
|
16
53
|
#name;
|
|
17
54
|
#level;
|
|
18
|
-
#filteredKeys =
|
|
55
|
+
#filteredKeys = new Set(DEFAULT_FILTERED_KEYS);
|
|
19
56
|
#jsonReplacer;
|
|
20
57
|
#additionalFields;
|
|
21
58
|
// Add a static "onError" method that will be called when an error is logged
|
|
@@ -26,12 +63,12 @@ export class Logger {
|
|
|
26
63
|
constructor(name, level = "info", filteredKeys = [], jsonReplacer, additionalFields) {
|
|
27
64
|
this.#name = name;
|
|
28
65
|
this.#level = logLevels.indexOf((env.TRIGGER_LOG_LEVEL ?? level));
|
|
29
|
-
this.#filteredKeys = filteredKeys;
|
|
66
|
+
this.#filteredKeys = buildFilteredKeySet(filteredKeys);
|
|
30
67
|
this.#jsonReplacer = createReplacer(jsonReplacer);
|
|
31
68
|
this.#additionalFields = additionalFields ?? (() => ({}));
|
|
32
69
|
}
|
|
33
70
|
child(fields) {
|
|
34
|
-
return new _a(this.#name, logLevels[this.#level], this.#filteredKeys, this.#jsonReplacer, () => ({ ...this.#additionalFields(), ...fields }));
|
|
71
|
+
return new _a(this.#name, logLevels[this.#level], Array.from(this.#filteredKeys), this.#jsonReplacer, () => ({ ...this.#additionalFields(), ...fields }));
|
|
35
72
|
}
|
|
36
73
|
// Return a new Logger instance with the same name and a new log level
|
|
37
74
|
// but filter out the keys from the log messages (at any level)
|
|
@@ -78,8 +115,8 @@ export class Logger {
|
|
|
78
115
|
#structuredLog(loggerFunction, message, level, ...args) {
|
|
79
116
|
// Get the current context from trace if it exists
|
|
80
117
|
const currentSpan = trace.getSpan(context.active());
|
|
81
|
-
const structuredError = extractStructuredErrorFromArgs(...args);
|
|
82
|
-
const structuredMessage = extractStructuredMessageFromArgs(...args);
|
|
118
|
+
const structuredError = extractStructuredErrorFromArgs(this.#filteredKeys, ...args);
|
|
119
|
+
const structuredMessage = extractStructuredMessageFromArgs(this.#filteredKeys, ...args);
|
|
83
120
|
const structuredLog = {
|
|
84
121
|
...structureArgs(safeJsonClone(args), this.#filteredKeys),
|
|
85
122
|
...this.#additionalFields(),
|
|
@@ -111,32 +148,36 @@ _a = Logger;
|
|
|
111
148
|
// Detect if args is an error object
|
|
112
149
|
// Or if args contains an error object at the "error" key
|
|
113
150
|
// In both cases, return the error object as a structured error
|
|
114
|
-
|
|
151
|
+
// Run every field through the same filter/truncation used for the rest of the log line, so an
|
|
152
|
+
// error's message/stack/metadata (which can embed request or row data verbatim) gets the same
|
|
153
|
+
// treatment as everything else, instead of bypassing it.
|
|
154
|
+
function extractStructuredErrorFromArgs(filteredKeys, ...args) {
|
|
115
155
|
const error = args.find((arg) => arg instanceof Error);
|
|
116
156
|
if (error) {
|
|
117
157
|
return {
|
|
118
|
-
message: error.message,
|
|
119
|
-
stack: error.stack,
|
|
158
|
+
message: filterKeys(error.message, filteredKeys),
|
|
159
|
+
stack: filterKeys(error.stack, filteredKeys),
|
|
120
160
|
name: error.name,
|
|
121
|
-
metadata: "metadata" in error ? error.metadata : undefined,
|
|
161
|
+
metadata: "metadata" in error ? filterKeys(error.metadata, filteredKeys) : undefined,
|
|
122
162
|
};
|
|
123
163
|
}
|
|
124
164
|
const structuredError = args.find((arg) => arg?.error);
|
|
125
165
|
if (structuredError && structuredError.error instanceof Error) {
|
|
166
|
+
const nestedError = structuredError.error;
|
|
126
167
|
return {
|
|
127
|
-
message:
|
|
128
|
-
stack:
|
|
129
|
-
name:
|
|
130
|
-
metadata: "metadata" in
|
|
168
|
+
message: filterKeys(nestedError.message, filteredKeys),
|
|
169
|
+
stack: filterKeys(nestedError.stack, filteredKeys),
|
|
170
|
+
name: nestedError.name,
|
|
171
|
+
metadata: "metadata" in nestedError ? filterKeys(nestedError.metadata, filteredKeys) : undefined,
|
|
131
172
|
};
|
|
132
173
|
}
|
|
133
174
|
return;
|
|
134
175
|
}
|
|
135
|
-
function extractStructuredMessageFromArgs(...args) {
|
|
176
|
+
function extractStructuredMessageFromArgs(filteredKeys, ...args) {
|
|
136
177
|
// Check to see if there is a `message` key in the args, and if so, return it
|
|
137
178
|
const structuredMessage = args.find((arg) => arg?.message);
|
|
138
179
|
if (structuredMessage) {
|
|
139
|
-
return structuredMessage.message;
|
|
180
|
+
return filterKeys(structuredMessage.message, filteredKeys);
|
|
140
181
|
}
|
|
141
182
|
return;
|
|
142
183
|
}
|
|
@@ -166,30 +207,48 @@ function safeJsonClone(obj) {
|
|
|
166
207
|
return;
|
|
167
208
|
}
|
|
168
209
|
}
|
|
169
|
-
//
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
210
|
+
// `args` has already been through safeJsonClone, so this only has to filter/truncate it, not
|
|
211
|
+
// clone it again. If there's exactly one arg, return it directly (unwrapped) so it can be spread
|
|
212
|
+
// onto the structured log; otherwise filter every arg and return the array. Filtering runs
|
|
213
|
+
// regardless of arg count, so a multi-arg call gets the same redaction as the common single-arg
|
|
214
|
+
// case.
|
|
215
|
+
function structureArgs(args, filteredKeys = new Set()) {
|
|
216
|
+
if (!args || args.length === 0) {
|
|
175
217
|
return;
|
|
176
218
|
}
|
|
177
|
-
|
|
178
|
-
|
|
219
|
+
const filteredArgs = args.map((arg) => filterKeys(arg, filteredKeys));
|
|
220
|
+
if (filteredArgs.length === 1) {
|
|
221
|
+
return filteredArgs[0];
|
|
179
222
|
}
|
|
180
|
-
return
|
|
223
|
+
return filteredArgs;
|
|
181
224
|
}
|
|
182
|
-
// Recursively filter out keys from an object, including nested objects
|
|
183
|
-
|
|
225
|
+
// Recursively filter out keys from an object, including nested objects and arrays. Also caps
|
|
226
|
+
// string length, array length and recursion depth, and redacts string values that look like a
|
|
227
|
+
// secret regardless of which key they were found under.
|
|
228
|
+
function filterKeys(obj, keys, depth = 0) {
|
|
229
|
+
if (typeof obj === "string") {
|
|
230
|
+
if (SECRET_VALUE_PATTERN.test(obj)) {
|
|
231
|
+
return `[filtered ${prettyPrintBytes(obj)}]`;
|
|
232
|
+
}
|
|
233
|
+
return truncateString(obj);
|
|
234
|
+
}
|
|
184
235
|
if (typeof obj !== "object" || obj === null) {
|
|
185
236
|
return obj;
|
|
186
237
|
}
|
|
238
|
+
if (depth >= MAX_DEPTH) {
|
|
239
|
+
return "[max depth exceeded]";
|
|
240
|
+
}
|
|
187
241
|
if (Array.isArray(obj)) {
|
|
188
|
-
|
|
242
|
+
const isTruncated = obj.length > MAX_ARRAY_LENGTH;
|
|
243
|
+
const items = (isTruncated ? obj.slice(0, MAX_ARRAY_LENGTH) : obj).map((item) => filterKeys(item, keys, depth + 1));
|
|
244
|
+
if (isTruncated) {
|
|
245
|
+
items.push(`[truncated ${obj.length - MAX_ARRAY_LENGTH} more items]`);
|
|
246
|
+
}
|
|
247
|
+
return items;
|
|
189
248
|
}
|
|
190
249
|
const filteredObj = {};
|
|
191
250
|
for (const [key, value] of Object.entries(obj)) {
|
|
192
|
-
if (keys.
|
|
251
|
+
if (keys.has(key.toLowerCase())) {
|
|
193
252
|
if (value) {
|
|
194
253
|
filteredObj[key] = `[filtered ${prettyPrintBytes(value)}]`;
|
|
195
254
|
}
|
|
@@ -198,10 +257,22 @@ function filterKeys(obj, keys) {
|
|
|
198
257
|
}
|
|
199
258
|
continue;
|
|
200
259
|
}
|
|
201
|
-
filteredObj[key] = filterKeys(value, keys);
|
|
260
|
+
filteredObj[key] = filterKeys(value, keys, depth + 1);
|
|
202
261
|
}
|
|
203
262
|
return filteredObj;
|
|
204
263
|
}
|
|
264
|
+
function truncateString(value) {
|
|
265
|
+
if (value.length <= MAX_STRING_LENGTH) {
|
|
266
|
+
return value;
|
|
267
|
+
}
|
|
268
|
+
return `${value.slice(0, MAX_STRING_LENGTH)}...[truncated ${value.length - MAX_STRING_LENGTH} chars]`;
|
|
269
|
+
}
|
|
270
|
+
// Runs a value through the same default-deny-list + truncation pipeline every Logger applies to
|
|
271
|
+
// its own log lines. For destinations that receive log arguments through a side channel (e.g. an
|
|
272
|
+
// error reporting `onError` hook) rather than through `Logger#structuredLog` itself.
|
|
273
|
+
export function redact(value, filteredKeys = []) {
|
|
274
|
+
return filterKeys(value, buildFilteredKeySet(filteredKeys));
|
|
275
|
+
}
|
|
205
276
|
function prettyPrintBytes(value) {
|
|
206
277
|
if (env.NODE_ENV === "production") {
|
|
207
278
|
return "skipped size";
|
package/dist/esm/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,+DAA+D;;AAE/D;;;;;;;GAOG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIpD,MAAM,SAAS,GAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAExF,MAAM,OAAO,MAAM;IACjB,KAAK,CAAS;IACL,MAAM,CAAS;IACxB,aAAa,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,14 @@ export type ApiClientFutureFlags = {
|
|
|
34
34
|
export { SSEStreamSubscription, isRequestOptions };
|
|
35
35
|
export type { AnyRealtimeRun, AnyRunShape, ApiRequestOptions, RealtimeRun, RunShape, RunStreamCallback, RunSubscription, SSEStreamPart, TaskRunShape, };
|
|
36
36
|
export * from "./getBranch.js";
|
|
37
|
+
export type CreatePublicTokenRequestBody = {
|
|
38
|
+
scopes: string[];
|
|
39
|
+
expirationTime?: string | number;
|
|
40
|
+
oneTimeUse?: boolean;
|
|
41
|
+
realtime?: {
|
|
42
|
+
skipColumns?: string[];
|
|
43
|
+
};
|
|
44
|
+
};
|
|
37
45
|
/**
|
|
38
46
|
* Trigger.dev v3 API client
|
|
39
47
|
*/
|
|
@@ -240,12 +248,12 @@ export declare class ApiClient {
|
|
|
240
248
|
name?: string | undefined;
|
|
241
249
|
stackTrace?: string | undefined;
|
|
242
250
|
} | undefined;
|
|
251
|
+
output?: any;
|
|
243
252
|
metadata?: Record<string, any> | undefined;
|
|
244
253
|
startedAt?: Date | undefined;
|
|
245
254
|
idempotencyKey?: string | undefined;
|
|
246
255
|
version?: string | undefined;
|
|
247
256
|
region?: string | undefined;
|
|
248
|
-
output?: any;
|
|
249
257
|
ttl?: string | undefined;
|
|
250
258
|
schedule?: {
|
|
251
259
|
id: string;
|
|
@@ -491,12 +499,12 @@ export declare class ApiClient {
|
|
|
491
499
|
name?: string | undefined;
|
|
492
500
|
stackTrace?: string | undefined;
|
|
493
501
|
} | undefined;
|
|
502
|
+
output?: any;
|
|
494
503
|
metadata?: Record<string, any> | undefined;
|
|
495
504
|
startedAt?: Date | undefined;
|
|
496
505
|
idempotencyKey?: string | undefined;
|
|
497
506
|
version?: string | undefined;
|
|
498
507
|
region?: string | undefined;
|
|
499
|
-
output?: any;
|
|
500
508
|
ttl?: string | undefined;
|
|
501
509
|
schedule?: {
|
|
502
510
|
id: string;
|
|
@@ -887,8 +895,8 @@ export declare class ApiClient {
|
|
|
887
895
|
records: {
|
|
888
896
|
id: string;
|
|
889
897
|
seqNum: number;
|
|
890
|
-
data?: unknown;
|
|
891
898
|
headers?: [string, string][] | undefined;
|
|
899
|
+
data?: unknown;
|
|
892
900
|
}[];
|
|
893
901
|
}>;
|
|
894
902
|
/**
|
|
@@ -1165,6 +1173,9 @@ export declare class ApiClient {
|
|
|
1165
1173
|
waitpointId: string;
|
|
1166
1174
|
}>;
|
|
1167
1175
|
generateJWTClaims(requestOptions?: ZodFetchOptions): Promise<Record<string, any>>;
|
|
1176
|
+
createPublicToken(body: CreatePublicTokenRequestBody, requestOptions?: ZodFetchOptions): Promise<{
|
|
1177
|
+
token: string;
|
|
1178
|
+
}>;
|
|
1168
1179
|
retrieveBatch(batchId: string, requestOptions?: ZodFetchOptions): ApiPromise<{
|
|
1169
1180
|
status: "COMPLETED" | "PENDING" | "ABORTED" | "PROCESSING" | "PARTIAL_FAILED";
|
|
1170
1181
|
id: string;
|
|
@@ -1192,6 +1203,14 @@ export declare class ApiClient {
|
|
|
1192
1203
|
}, requestOptions?: ZodFetchOptions): Promise<QueryExecuteResponseBody>;
|
|
1193
1204
|
getQuerySchema(requestOptions?: ZodFetchOptions): Promise<QuerySchemaResponseBody>;
|
|
1194
1205
|
listDashboards(requestOptions?: ZodFetchOptions): Promise<ListDashboardsResponseBody>;
|
|
1206
|
+
/**
|
|
1207
|
+
* Fetch a server-rendered report (text + sparkline). Thin pass-through — the string
|
|
1208
|
+
* is ready to display. `format`: "markdown" (default, agents/chat) or "ansi" (terminal).
|
|
1209
|
+
*/
|
|
1210
|
+
getReport(key: string, options?: {
|
|
1211
|
+
period?: string;
|
|
1212
|
+
format?: "markdown" | "ansi";
|
|
1213
|
+
}): Promise<string>;
|
|
1195
1214
|
resolvePrompt(slug: string, body: ResolvePromptRequestBody, requestOptions?: ZodFetchOptions): ApiPromise<{
|
|
1196
1215
|
data: {
|
|
1197
1216
|
version: number;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { nanoid } from "nanoid";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { VERSION } from "../../version.js";
|
|
4
|
+
import { isAdditionalApiKey } from "../apiKeys.js";
|
|
4
5
|
import { generateJWT } from "../jwt.js";
|
|
5
6
|
import { AbortBulkActionResponseBody, ApiDeploymentListResponseItem, BulkActionObject, CreateBulkActionResponseBody, AppendToStreamResponseBody, BatchTaskRunExecutionResult, BatchTriggerTaskV3Response, CanceledRunResponse, CompleteWaitpointTokenResponseBody, CreateBatchResponse, CreateInputStreamWaitpointResponseBody, CreateSessionStreamWaitpointResponseBody, CreateStreamResponseBody, CreateUploadPayloadUrlResponseBody, CreateWaitpointTokenResponseBody, CreatedSessionResponseBody, DeletedScheduleObject, EndAndContinueSessionResponseBody, EnvironmentVariableResponseBody, EnvironmentVariableWithSecret, ListDashboardsResponseBody, ListPromptVersionsResponseBody, ListPromptsResponseBody, ListRunResponseItem, ListedSessionItem, PromptOkResponseBody, PromptOverrideCreatedResponseBody, QueryExecuteResponseBody, QuerySchemaResponseBody, QueueItem, ReadSessionStreamRecordsResponseBody, ReplayRunResponse, ResetIdempotencyKeyResponse, ResolvePromptResponseBody, RetrieveBatchV2Response, RetrieveCurrentDeploymentResponseBody, RetrieveRunResponse, RetrieveRunTraceResponseBody, RetrieveSessionResponseBody, RetrieveSpanDetailResponseBody, ScheduleObject, SendInputStreamResponseBody, StreamBatchItemsResponse, TaskRunExecutionResult, TriggerTaskResponse, UpdateMetadataResponseBody, WaitForDurationResponseBody, WaitForWaitpointTokenResponseBody, WaitpointRetrieveTokenResponse, WaitpointTokenItem, } from "../schemas/index.js";
|
|
6
7
|
import { controlSubtype } from "../sessionStreams/wireProtocol.js";
|
|
@@ -22,6 +23,7 @@ const DEFAULT_ZOD_FETCH_OPTIONS = {
|
|
|
22
23
|
};
|
|
23
24
|
export { SSEStreamSubscription, isRequestOptions };
|
|
24
25
|
export * from "./getBranch.js";
|
|
26
|
+
const CreatePublicTokenResponseBody = z.object({ token: z.string() });
|
|
25
27
|
/**
|
|
26
28
|
* Trigger.dev v3 API client
|
|
27
29
|
*/
|
|
@@ -44,6 +46,17 @@ export class ApiClient {
|
|
|
44
46
|
this.defaultRequestOptions = mergeRequestOptions(DEFAULT_ZOD_FETCH_OPTIONS, restRequestOptions);
|
|
45
47
|
this.futureFlags = futureFlags;
|
|
46
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Key for signing a public access token locally. Only root keys can do this —
|
|
51
|
+
* an additional key isn't the environment's signing material, so a token
|
|
52
|
+
* signed with one would never verify. Throw rather than return a dead token.
|
|
53
|
+
*/
|
|
54
|
+
get #selfSigningKey() {
|
|
55
|
+
if (isAdditionalApiKey(this.accessToken)) {
|
|
56
|
+
throw new Error("This additional API key cannot self-sign public tokens, and the server did not return one. Upgrade the server or use the root API key.");
|
|
57
|
+
}
|
|
58
|
+
return this.accessToken;
|
|
59
|
+
}
|
|
47
60
|
get fetchClient() {
|
|
48
61
|
const headers = this.#getHeaders(false);
|
|
49
62
|
const fetchClient = (input, requestInit) => {
|
|
@@ -102,7 +115,7 @@ export class ApiClient {
|
|
|
102
115
|
const claimsHeader = response.headers.get("x-trigger-jwt-claims");
|
|
103
116
|
const claims = claimsHeader ? JSON.parse(claimsHeader) : undefined;
|
|
104
117
|
const jwt = await generateJWT({
|
|
105
|
-
secretKey: this
|
|
118
|
+
secretKey: this.#selfSigningKey,
|
|
106
119
|
payload: {
|
|
107
120
|
...claims,
|
|
108
121
|
scopes: [`read:runs:${data.id}`],
|
|
@@ -125,10 +138,17 @@ export class ApiClient {
|
|
|
125
138
|
}, mergeRequestOptions(this.defaultRequestOptions, requestOptions))
|
|
126
139
|
.withResponse()
|
|
127
140
|
.then(async ({ data, response }) => {
|
|
141
|
+
const jwtHeader = response.headers.get("x-trigger-jwt");
|
|
142
|
+
if (typeof jwtHeader === "string") {
|
|
143
|
+
return {
|
|
144
|
+
...data,
|
|
145
|
+
publicAccessToken: jwtHeader,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
128
148
|
const claimsHeader = response.headers.get("x-trigger-jwt-claims");
|
|
129
149
|
const claims = claimsHeader ? JSON.parse(claimsHeader) : undefined;
|
|
130
150
|
const jwt = await generateJWT({
|
|
131
|
-
secretKey: this
|
|
151
|
+
secretKey: this.#selfSigningKey,
|
|
132
152
|
payload: {
|
|
133
153
|
...claims,
|
|
134
154
|
scopes: [`read:batch:${data.id}`],
|
|
@@ -161,10 +181,17 @@ export class ApiClient {
|
|
|
161
181
|
}, mergeRequestOptions(this.defaultRequestOptions, requestOptions))
|
|
162
182
|
.withResponse()
|
|
163
183
|
.then(async ({ data, response }) => {
|
|
184
|
+
const jwtHeader = response.headers.get("x-trigger-jwt");
|
|
185
|
+
if (typeof jwtHeader === "string") {
|
|
186
|
+
return {
|
|
187
|
+
...data,
|
|
188
|
+
publicAccessToken: jwtHeader,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
164
191
|
const claimsHeader = response.headers.get("x-trigger-jwt-claims");
|
|
165
192
|
const claims = claimsHeader ? JSON.parse(claimsHeader) : undefined;
|
|
166
193
|
const jwt = await generateJWT({
|
|
167
|
-
secretKey: this
|
|
194
|
+
secretKey: this.#selfSigningKey,
|
|
168
195
|
payload: {
|
|
169
196
|
...claims,
|
|
170
197
|
scopes: [`read:batch:${data.id}`],
|
|
@@ -567,7 +594,7 @@ export class ApiClient {
|
|
|
567
594
|
const claimsHeader = response.headers.get("x-trigger-jwt-claims");
|
|
568
595
|
const claims = claimsHeader ? JSON.parse(claimsHeader) : undefined;
|
|
569
596
|
const jwt = await generateJWT({
|
|
570
|
-
secretKey: this
|
|
597
|
+
secretKey: this.#selfSigningKey,
|
|
571
598
|
payload: {
|
|
572
599
|
...claims,
|
|
573
600
|
scopes: [`write:waitpoints:${data.id}`],
|
|
@@ -976,6 +1003,13 @@ export class ApiClient {
|
|
|
976
1003
|
headers: this.#getHeaders(false),
|
|
977
1004
|
}, mergeRequestOptions(this.defaultRequestOptions, requestOptions));
|
|
978
1005
|
}
|
|
1006
|
+
async createPublicToken(body, requestOptions) {
|
|
1007
|
+
return zodfetch(CreatePublicTokenResponseBody, `${this.baseUrl}/api/v1/auth/public-tokens`, {
|
|
1008
|
+
method: "POST",
|
|
1009
|
+
headers: this.#getHeaders(false),
|
|
1010
|
+
body: JSON.stringify(body),
|
|
1011
|
+
}, mergeRequestOptions(this.defaultRequestOptions, requestOptions));
|
|
1012
|
+
}
|
|
979
1013
|
retrieveBatch(batchId, requestOptions) {
|
|
980
1014
|
return zodfetch(RetrieveBatchV2Response, `${this.baseUrl}/api/v2/batches/${batchId}`, {
|
|
981
1015
|
method: "GET",
|
|
@@ -1009,6 +1043,25 @@ export class ApiClient {
|
|
|
1009
1043
|
headers: this.#getHeaders(false),
|
|
1010
1044
|
}, mergeRequestOptions(this.defaultRequestOptions, requestOptions));
|
|
1011
1045
|
}
|
|
1046
|
+
/**
|
|
1047
|
+
* Fetch a server-rendered report (text + sparkline). Thin pass-through — the string
|
|
1048
|
+
* is ready to display. `format`: "markdown" (default, agents/chat) or "ansi" (terminal).
|
|
1049
|
+
*/
|
|
1050
|
+
async getReport(key, options) {
|
|
1051
|
+
const searchParams = new URLSearchParams({ format: options?.format ?? "markdown" });
|
|
1052
|
+
if (options?.period) {
|
|
1053
|
+
searchParams.set("period", options.period);
|
|
1054
|
+
}
|
|
1055
|
+
const response = await fetch(`${this.baseUrl}/api/v1/reports/${encodeURIComponent(key)}?${searchParams.toString()}`, {
|
|
1056
|
+
method: "GET",
|
|
1057
|
+
headers: this.#getHeaders(false),
|
|
1058
|
+
});
|
|
1059
|
+
if (!response.ok) {
|
|
1060
|
+
const bodySnippet = await readBodySnippet(response);
|
|
1061
|
+
throw new Error(`Failed to fetch report "${key}": ${response.status} ${response.statusText}${bodySnippet ? ` — ${bodySnippet}` : ""}`);
|
|
1062
|
+
}
|
|
1063
|
+
return response.text();
|
|
1064
|
+
}
|
|
1012
1065
|
#getHeaders(spanParentAsLink, additionalHeaders) {
|
|
1013
1066
|
const headers = {
|
|
1014
1067
|
"Content-Type": "application/json",
|
|
@@ -1299,6 +1352,22 @@ function shouldRetryStreamBatchItems(response, attempt, retryOptions) {
|
|
|
1299
1352
|
function sleep(ms) {
|
|
1300
1353
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
1301
1354
|
}
|
|
1355
|
+
/**
|
|
1356
|
+
* Best-effort read of a (likely error) response body for inclusion in a thrown Error.
|
|
1357
|
+
* Never throws, and truncates so we don't dump a huge HTML page into an error message.
|
|
1358
|
+
*/
|
|
1359
|
+
async function readBodySnippet(response, maxLength = 500) {
|
|
1360
|
+
try {
|
|
1361
|
+
const text = (await response.text()).trim();
|
|
1362
|
+
if (!text) {
|
|
1363
|
+
return "";
|
|
1364
|
+
}
|
|
1365
|
+
return text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;
|
|
1366
|
+
}
|
|
1367
|
+
catch {
|
|
1368
|
+
return "";
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1302
1371
|
/**
|
|
1303
1372
|
* Safely cancels a ReadableStream, handling the case where it might be locked.
|
|
1304
1373
|
*
|