transloadit 5.0.1 → 5.2.0
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/README.md +39 -0
- package/dist/Transloadit.d.ts +10 -0
- package/dist/Transloadit.d.ts.map +1 -1
- package/dist/Transloadit.js +26 -1
- package/dist/Transloadit.js.map +1 -1
- package/dist/apiTypes.d.ts +2 -0
- package/dist/apiTypes.d.ts.map +1 -1
- package/dist/cli/commands/assemblies.d.ts.map +1 -1
- package/dist/cli/commands/assemblies.js +8 -4
- package/dist/cli/commands/assemblies.js.map +1 -1
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +2 -2
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/helpers.d.ts +1 -1
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/helpers.js +1 -1
- package/dist/cli/helpers.js.map +1 -1
- package/dist/cli/stepsInput.d.ts.map +1 -1
- package/dist/cli/stepsInput.js +15 -2
- package/dist/cli/stepsInput.js.map +1 -1
- package/dist/inputFiles.d.ts +9 -0
- package/dist/inputFiles.d.ts.map +1 -1
- package/dist/inputFiles.js +62 -10
- package/dist/inputFiles.js.map +1 -1
- package/package.json +2 -2
- package/src/Transloadit.ts +42 -1
- package/src/apiTypes.ts +2 -0
- package/src/cli/commands/assemblies.ts +9 -4
- package/src/cli/commands/auth.ts +2 -1
- package/src/cli/helpers.ts +1 -1
- package/src/cli/stepsInput.ts +17 -2
- package/src/inputFiles.ts +83 -8
package/dist/inputFiles.js
CHANGED
|
@@ -4,6 +4,7 @@ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
|
4
4
|
import { isIP } from 'node:net';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import { basename, join, parse } from 'node:path';
|
|
7
|
+
import { Transform } from 'node:stream';
|
|
7
8
|
import { pipeline } from 'node:stream/promises';
|
|
8
9
|
import got from 'got';
|
|
9
10
|
import { ensureUniqueCounterValue } from "./ensureUniqueCounter.js";
|
|
@@ -140,16 +141,26 @@ const isPrivateIp = (address) => {
|
|
|
140
141
|
}
|
|
141
142
|
return false;
|
|
142
143
|
};
|
|
144
|
+
/**
|
|
145
|
+
* Names a URL in error messages without its query or fragment: input URLs are often presigned
|
|
146
|
+
* (ChatGPT attachments, S3), and these messages reach logs and model-visible tool results.
|
|
147
|
+
*/
|
|
148
|
+
const describeUrl = (value) => {
|
|
149
|
+
if (!URL.canParse(value))
|
|
150
|
+
return '[unparseable URL]';
|
|
151
|
+
const url = new URL(value);
|
|
152
|
+
return `${url.origin}${url.pathname}`;
|
|
153
|
+
};
|
|
143
154
|
export const resolvePublicDownloadAddresses = async (value) => {
|
|
144
155
|
const parsed = new URL(value);
|
|
145
156
|
const hostname = parsed.hostname.startsWith('[') && parsed.hostname.endsWith(']')
|
|
146
157
|
? parsed.hostname.slice(1, -1)
|
|
147
158
|
: parsed.hostname;
|
|
148
159
|
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
149
|
-
throw new Error(`URL downloads are limited to http/https: ${value}`);
|
|
160
|
+
throw new Error(`URL downloads are limited to http/https: ${describeUrl(value)}`);
|
|
150
161
|
}
|
|
151
162
|
if (isPrivateIp(hostname)) {
|
|
152
|
-
throw new Error(`URL downloads are limited to public hosts: ${value}`);
|
|
163
|
+
throw new Error(`URL downloads are limited to public hosts: ${describeUrl(value)}`);
|
|
153
164
|
}
|
|
154
165
|
const literalFamily = isIP(hostname);
|
|
155
166
|
const resolvedAddresses = literalFamily !== 0
|
|
@@ -159,10 +170,10 @@ export const resolvePublicDownloadAddresses = async (value) => {
|
|
|
159
170
|
verbatim: true,
|
|
160
171
|
});
|
|
161
172
|
if (resolvedAddresses.some((address) => isPrivateIp(address.address))) {
|
|
162
|
-
throw new Error(`URL downloads are limited to public hosts: ${value}`);
|
|
173
|
+
throw new Error(`URL downloads are limited to public hosts: ${describeUrl(value)}`);
|
|
163
174
|
}
|
|
164
175
|
if (resolvedAddresses.length === 0) {
|
|
165
|
-
throw new Error(`Unable to resolve URL hostname: ${value}`);
|
|
176
|
+
throw new Error(`Unable to resolve URL hostname: ${describeUrl(value)}`);
|
|
166
177
|
}
|
|
167
178
|
return resolvedAddresses.map((address) => ({
|
|
168
179
|
address: address.address,
|
|
@@ -213,19 +224,46 @@ export function createPinnedDnsLookup(validatedAddresses) {
|
|
|
213
224
|
}
|
|
214
225
|
return pinnedDnsLookup;
|
|
215
226
|
}
|
|
216
|
-
const
|
|
227
|
+
const budgetExceeded = (budget, url) => new Error(`URL downloads exceed ${budget.totalBytes} bytes: ${describeUrl(url)}`);
|
|
228
|
+
/** Errors once the budget is used up, so temp files stay bounded while they stream in. */
|
|
229
|
+
const limitDownloadBytes = (budget, url) => new Transform({
|
|
230
|
+
transform(chunk, _encoding, callback) {
|
|
231
|
+
budget.remainingBytes -= chunk.length;
|
|
232
|
+
if (budget.remainingBytes < 0) {
|
|
233
|
+
callback(budgetExceeded(budget, url));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
callback(null, chunk);
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
const downloadUrlToFile = async ({ allowPrivateUrls, filePath, url, budget, timeoutMs, }) => {
|
|
217
240
|
let currentUrl = url;
|
|
241
|
+
// One deadline for the whole download, so DNS checks and redirects cannot each restart it.
|
|
242
|
+
const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
|
|
243
|
+
const remainingMs = () => {
|
|
244
|
+
if (deadline === undefined)
|
|
245
|
+
return undefined;
|
|
246
|
+
const remaining = deadline - Date.now();
|
|
247
|
+
if (remaining <= 0) {
|
|
248
|
+
throw new Error(`URL download timed out after ${timeoutMs} ms: ${describeUrl(url)}`);
|
|
249
|
+
}
|
|
250
|
+
return remaining;
|
|
251
|
+
};
|
|
218
252
|
for (let redirectCount = 0; redirectCount <= MAX_URL_REDIRECTS; redirectCount += 1) {
|
|
219
253
|
let validatedAddresses = null;
|
|
220
254
|
if (!allowPrivateUrls) {
|
|
255
|
+
// Not raced against the deadline: the system resolver bounds each lookup with its own
|
|
256
|
+
// short timeout and no bytes are transferred, so checking the clock right after suffices.
|
|
221
257
|
validatedAddresses = await resolvePublicDownloadAddresses(currentUrl);
|
|
222
258
|
}
|
|
259
|
+
const requestTimeoutMs = remainingMs();
|
|
223
260
|
const dnsLookup = validatedAddresses == null ? undefined : createPinnedDnsLookup(validatedAddresses);
|
|
224
261
|
const responseStream = got.stream(currentUrl, {
|
|
225
262
|
dnsLookup,
|
|
226
263
|
followRedirect: false,
|
|
227
264
|
retry: { limit: 0 },
|
|
228
265
|
throwHttpErrors: false,
|
|
266
|
+
...(requestTimeoutMs === undefined ? {} : { timeout: { request: requestTimeoutMs } }),
|
|
229
267
|
});
|
|
230
268
|
const response = await new Promise((resolvePromise, reject) => {
|
|
231
269
|
responseStream.once('response', (incomingResponse) => {
|
|
@@ -238,26 +276,37 @@ const downloadUrlToFile = async ({ allowPrivateUrls, filePath, url, }) => {
|
|
|
238
276
|
responseStream.destroy();
|
|
239
277
|
const location = response.headers.location;
|
|
240
278
|
if (location == null) {
|
|
241
|
-
throw new Error(`Redirect response missing Location header: ${currentUrl}`);
|
|
279
|
+
throw new Error(`Redirect response missing Location header: ${describeUrl(currentUrl)}`);
|
|
242
280
|
}
|
|
243
281
|
currentUrl = new URL(location, currentUrl).toString();
|
|
244
282
|
continue;
|
|
245
283
|
}
|
|
246
284
|
if (statusCode >= 400) {
|
|
247
285
|
responseStream.destroy();
|
|
248
|
-
throw new Error(`Failed to download URL: ${currentUrl} (${statusCode})`);
|
|
286
|
+
throw new Error(`Failed to download URL: ${describeUrl(currentUrl)} (${statusCode})`);
|
|
287
|
+
}
|
|
288
|
+
if (budget === undefined) {
|
|
289
|
+
await pipeline(responseStream, createWriteStream(filePath));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (Number(response.headers['content-length']) > budget.remainingBytes) {
|
|
293
|
+
responseStream.destroy();
|
|
294
|
+
throw budgetExceeded(budget, url);
|
|
249
295
|
}
|
|
250
|
-
await pipeline(responseStream, createWriteStream(filePath));
|
|
296
|
+
await pipeline(responseStream, limitDownloadBytes(budget, url), createWriteStream(filePath));
|
|
251
297
|
return;
|
|
252
298
|
}
|
|
253
|
-
throw new Error(`Too many redirects while downloading URL input: ${url}`);
|
|
299
|
+
throw new Error(`Too many redirects while downloading URL input: ${describeUrl(url)}`);
|
|
254
300
|
};
|
|
255
301
|
export const prepareInputFiles = async (options = {}) => {
|
|
256
|
-
const { inputFiles = [], params = {}, fields, base64Strategy = 'buffer', urlStrategy = 'import', maxBase64Bytes, allowPrivateUrls = true, tempDir, } = options;
|
|
302
|
+
const { inputFiles = [], params = {}, fields, base64Strategy = 'buffer', urlStrategy = 'import', maxBase64Bytes, allowPrivateUrls = true, maxUrlDownloadBytes, urlDownloadTimeoutMs, beforeUrlDownload, tempDir, } = options;
|
|
257
303
|
let nextParams = { ...params };
|
|
258
304
|
const files = {};
|
|
259
305
|
const uploads = {};
|
|
260
306
|
const cleanup = [];
|
|
307
|
+
const downloadBudget = maxUrlDownloadBytes === undefined
|
|
308
|
+
? undefined
|
|
309
|
+
: { totalBytes: maxUrlDownloadBytes, remainingBytes: maxUrlDownloadBytes };
|
|
261
310
|
if (fields && Object.keys(fields).length > 0) {
|
|
262
311
|
nextParams = {
|
|
263
312
|
...nextParams,
|
|
@@ -329,10 +378,13 @@ export const prepareInputFiles = async (options = {}) => {
|
|
|
329
378
|
getFilenameFromUrl(file.url) ??
|
|
330
379
|
`${file.field}.bin`;
|
|
331
380
|
const filePath = await ensureUniqueTempFilePath(root, filename, usedTempPaths);
|
|
381
|
+
await beforeUrlDownload?.();
|
|
332
382
|
await downloadUrlToFile({
|
|
333
383
|
allowPrivateUrls,
|
|
334
384
|
filePath,
|
|
335
385
|
url: file.url,
|
|
386
|
+
budget: downloadBudget,
|
|
387
|
+
timeoutMs: urlDownloadTimeoutMs,
|
|
336
388
|
});
|
|
337
389
|
files[file.field] = filePath;
|
|
338
390
|
}
|
package/dist/inputFiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputFiles.js","sourceRoot":"","sources":["../src/inputFiles.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inputFiles.js","sourceRoot":"","sources":["../src/inputFiles.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "transloadit",
|
|
3
|
-
"version": "5.0
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"description": "Node.js SDK for Transloadit",
|
|
5
5
|
"homepage": "https://github.com/transloadit/node-sdk/tree/main/packages/node",
|
|
6
6
|
"bugs": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@transloadit/sev-logger": "^0.1.9",
|
|
36
|
-
"@transloadit/utils": "^4.
|
|
36
|
+
"@transloadit/utils": "^4.10.0",
|
|
37
37
|
"cacheable-lookup": "^7.0.0",
|
|
38
38
|
"clipanion": "^4.0.0-rc.4",
|
|
39
39
|
"debug": "^4.4.3",
|
package/src/Transloadit.ts
CHANGED
|
@@ -5,7 +5,13 @@ import type {
|
|
|
5
5
|
CompileAssemblyInstructionsResult,
|
|
6
6
|
} from '@transloadit/utils'
|
|
7
7
|
import type { SignatureAlgorithm } from '@transloadit/utils/node'
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
BeforeRedirectHook,
|
|
10
|
+
Delays,
|
|
11
|
+
Headers,
|
|
12
|
+
OptionsOfJSONResponseBody,
|
|
13
|
+
RetryOptions,
|
|
14
|
+
} from 'got'
|
|
9
15
|
import type { Input as IntoStreamInput } from 'into-stream'
|
|
10
16
|
|
|
11
17
|
import type { TransloaditErrorResponseBody } from './ApiError.ts'
|
|
@@ -296,6 +302,11 @@ export interface CreateAssemblyOptions extends AssemblyUploadOptions {
|
|
|
296
302
|
* Expected number of tus uploads when files will be uploaded separately.
|
|
297
303
|
*/
|
|
298
304
|
expectedUploads?: number
|
|
305
|
+
/**
|
|
306
|
+
* Called once API2 has accepted the creation request, before uploads and polling. Callers that
|
|
307
|
+
* must not create an Assembly twice use it to tell later failures apart from rejected creation.
|
|
308
|
+
*/
|
|
309
|
+
onAssemblyCreated?: (assembly: AssemblyStatus) => void
|
|
299
310
|
}
|
|
300
311
|
|
|
301
312
|
export interface ResumeAssemblyUploadsOptions extends AssemblyUploadOptions {
|
|
@@ -459,6 +470,11 @@ type BaseOptions = {
|
|
|
459
470
|
followRedirects?: boolean
|
|
460
471
|
validateResponses?: boolean
|
|
461
472
|
clientName?: string
|
|
473
|
+
/**
|
|
474
|
+
* Fixed headers sent with every API request, for trusted relays such as the Transloadit-hosted
|
|
475
|
+
* MCP service that must identify itself to API2 next to a forwarded bearer token.
|
|
476
|
+
*/
|
|
477
|
+
extraHeaders?: Record<string, string>
|
|
462
478
|
}
|
|
463
479
|
|
|
464
480
|
export type Options = BaseOptions & (AuthKeySecret | AuthToken)
|
|
@@ -482,8 +498,28 @@ export class Transloadit {
|
|
|
482
498
|
|
|
483
499
|
private _clientName: string
|
|
484
500
|
|
|
501
|
+
#extraHeaders: Record<string, string>
|
|
502
|
+
|
|
485
503
|
private _lastUsedAssemblyUrl = ''
|
|
486
504
|
|
|
505
|
+
/**
|
|
506
|
+
* got drops `Authorization` and cookies when a redirect changes origin, but not custom headers,
|
|
507
|
+
* so `extraHeaders` (such as a relay's shared secret) are removed the same way.
|
|
508
|
+
*/
|
|
509
|
+
#dropExtraHeadersOffOrigin(requestUrl: string): BeforeRedirectHook[] {
|
|
510
|
+
const names = Object.keys(this.#extraHeaders).map((name) => name.toLowerCase())
|
|
511
|
+
if (names.length === 0) return []
|
|
512
|
+
// An unparseable request URL counts as a different origin, which drops the headers.
|
|
513
|
+
const requestOrigin = URL.canParse(requestUrl) ? new URL(requestUrl).origin : undefined
|
|
514
|
+
return [
|
|
515
|
+
(redirectOptions) => {
|
|
516
|
+
const redirectUrl = redirectOptions.url
|
|
517
|
+
if (requestOrigin && redirectUrl && new URL(redirectUrl).origin === requestOrigin) return
|
|
518
|
+
for (const name of names) delete redirectOptions.headers[name]
|
|
519
|
+
},
|
|
520
|
+
]
|
|
521
|
+
}
|
|
522
|
+
|
|
487
523
|
private _validateResponses = false
|
|
488
524
|
|
|
489
525
|
/** Create a client; new combined keys require signatureAlgorithm: 'sha256' explicitly. */
|
|
@@ -514,6 +550,7 @@ export class Transloadit {
|
|
|
514
550
|
this._maxRetries = opts.maxRetries != null ? opts.maxRetries : 5
|
|
515
551
|
this._defaultTimeout = opts.timeout != null ? opts.timeout : 60000
|
|
516
552
|
this._clientName = opts.clientName?.trim() || `node-sdk:${version}`
|
|
553
|
+
this.#extraHeaders = { ...opts.extraHeaders }
|
|
517
554
|
|
|
518
555
|
// Passed on to got https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md
|
|
519
556
|
this._gotRetry = opts.gotRetry != null ? opts.gotRetry : { limit: 0 }
|
|
@@ -667,6 +704,7 @@ export class Transloadit {
|
|
|
667
704
|
uploads = {},
|
|
668
705
|
assemblyId,
|
|
669
706
|
expectedUploads,
|
|
707
|
+
onAssemblyCreated,
|
|
670
708
|
signal,
|
|
671
709
|
uploadBehavior = 'await',
|
|
672
710
|
} = opts
|
|
@@ -738,6 +776,7 @@ export class Transloadit {
|
|
|
738
776
|
signal,
|
|
739
777
|
})
|
|
740
778
|
checkResult(result)
|
|
779
|
+
onAssemblyCreated?.(result)
|
|
741
780
|
|
|
742
781
|
if (Object.keys(allStreamsMap).length > 0) {
|
|
743
782
|
const { uploadUrls } = await sendTusRequest({
|
|
@@ -1665,8 +1704,10 @@ export class Transloadit {
|
|
|
1665
1704
|
'Transloadit-Client': this._clientName,
|
|
1666
1705
|
'User-Agent': undefined, // Remove got's user-agent
|
|
1667
1706
|
...(this._authToken ? { Authorization: `Bearer ${this._authToken}` } : {}),
|
|
1707
|
+
...this.#extraHeaders,
|
|
1668
1708
|
...headers,
|
|
1669
1709
|
},
|
|
1710
|
+
hooks: { beforeRedirect: this.#dropExtraHeadersOffOrigin(url) },
|
|
1670
1711
|
responseType: 'json',
|
|
1671
1712
|
signal,
|
|
1672
1713
|
}
|
package/src/apiTypes.ts
CHANGED
|
@@ -100,6 +100,8 @@ export type ListTemplatesParams = OptionalAuthParams & {
|
|
|
100
100
|
todate?: string
|
|
101
101
|
keywords?: string[]
|
|
102
102
|
include_builtin?: 'all' | 'latest' | 'exclusively-all' | 'exclusively-latest'
|
|
103
|
+
/** Template columns to return, such as `['id', 'account_id']`; API2's default omits some. */
|
|
104
|
+
fields?: string[]
|
|
103
105
|
}
|
|
104
106
|
|
|
105
107
|
interface TemplateResponseBase {
|
|
@@ -313,13 +313,18 @@ export async function lint(
|
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
const issues = result.issues
|
|
316
|
+
// Unchanged wrapped instructions may already include their final newline.
|
|
317
|
+
const fixedInstructions =
|
|
318
|
+
result.fixedInstructions != null && !result.fixedInstructions.endsWith('\n')
|
|
319
|
+
? `${result.fixedInstructions}\n`
|
|
320
|
+
: result.fixedInstructions
|
|
316
321
|
|
|
317
322
|
if (fix && isStdin) {
|
|
318
|
-
if (
|
|
323
|
+
if (fixedInstructions == null) {
|
|
319
324
|
output.error('No fixed output available.')
|
|
320
325
|
return 1
|
|
321
326
|
}
|
|
322
|
-
process.stdout.write(
|
|
327
|
+
process.stdout.write(fixedInstructions)
|
|
323
328
|
for (const issue of issues) {
|
|
324
329
|
const line = formatLintIssue(issue)
|
|
325
330
|
if (issue.type === 'warning') output.warn(line)
|
|
@@ -328,8 +333,8 @@ export async function lint(
|
|
|
328
333
|
return result.success ? 0 : 1
|
|
329
334
|
}
|
|
330
335
|
|
|
331
|
-
if (fix && inputPath &&
|
|
332
|
-
await fsp.writeFile(inputPath,
|
|
336
|
+
if (fix && inputPath && fixedInstructions != null) {
|
|
337
|
+
await fsp.writeFile(inputPath, fixedInstructions)
|
|
333
338
|
}
|
|
334
339
|
|
|
335
340
|
if (json) {
|
package/src/cli/commands/auth.ts
CHANGED
|
@@ -17,6 +17,7 @@ import { mintBearerTokenWithCredentials } from '../../bearerToken.ts'
|
|
|
17
17
|
import { Transloadit } from '../../Transloadit.ts'
|
|
18
18
|
import {
|
|
19
19
|
buildMissingCredentialsMessage,
|
|
20
|
+
cliSignatureAlgorithmSchema,
|
|
20
21
|
readCliInput,
|
|
21
22
|
requireCliCredentials,
|
|
22
23
|
resolveCliConfig,
|
|
@@ -337,7 +338,7 @@ export class SignatureCommand extends UnauthenticatedCommand {
|
|
|
337
338
|
})
|
|
338
339
|
|
|
339
340
|
algorithm = Option.String('--algorithm,-a', {
|
|
340
|
-
description:
|
|
341
|
+
description: `Signature algorithm to use (${cliSignatureAlgorithmSchema.options.join(', ')})`,
|
|
341
342
|
})
|
|
342
343
|
|
|
343
344
|
protected async run(): Promise<number | undefined> {
|
package/src/cli/helpers.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { z } from 'zod'
|
|
|
13
13
|
import { isAPIError } from './types.ts'
|
|
14
14
|
|
|
15
15
|
/** API signing algorithms supported by CLI credentials and device authorization. */
|
|
16
|
-
export const cliSignatureAlgorithmSchema = z.enum(['sha1', 'sha256', 'sha384'
|
|
16
|
+
export const cliSignatureAlgorithmSchema = z.enum(['sha1', 'sha256', 'sha384'])
|
|
17
17
|
export type CliKeySecretCredentials = {
|
|
18
18
|
authKey: string
|
|
19
19
|
authSecret: string
|
package/src/cli/stepsInput.ts
CHANGED
|
@@ -2,16 +2,31 @@ import type { StepsInput } from '../alphalib/types/template.ts'
|
|
|
2
2
|
|
|
3
3
|
import fsp from 'node:fs/promises'
|
|
4
4
|
|
|
5
|
+
import { z } from 'zod'
|
|
6
|
+
|
|
5
7
|
import { stepsSchema } from '../alphalib/types/template.ts'
|
|
6
8
|
|
|
9
|
+
const stepsWrapperSchema = z.object({ steps: z.record(z.unknown()) })
|
|
10
|
+
|
|
7
11
|
export function parseStepsInputJson(content: string): StepsInput {
|
|
8
12
|
const parsed: unknown = JSON.parse(content)
|
|
9
|
-
const
|
|
13
|
+
const wrapped = stepsWrapperSchema.safeParse(parsed)
|
|
14
|
+
let stepsInput = parsed
|
|
15
|
+
// A step named “steps” has a robot, unlike the top-level instructions wrapper.
|
|
16
|
+
if (wrapped.success && typeof wrapped.data.steps.robot !== 'string') {
|
|
17
|
+
// --steps only supplies steps; other instructions must not be silently discarded.
|
|
18
|
+
const validatedWrapper = stepsWrapperSchema.strict().safeParse(parsed)
|
|
19
|
+
if (!validatedWrapper.success) {
|
|
20
|
+
throw new Error(`Invalid steps format: ${validatedWrapper.error.message}`)
|
|
21
|
+
}
|
|
22
|
+
stepsInput = validatedWrapper.data.steps
|
|
23
|
+
}
|
|
24
|
+
const validated = stepsSchema.safeParse(stepsInput)
|
|
10
25
|
if (!validated.success) {
|
|
11
26
|
throw new Error(`Invalid steps format: ${validated.error.message}`)
|
|
12
27
|
}
|
|
13
28
|
|
|
14
|
-
const parsedSteps =
|
|
29
|
+
const parsedSteps = stepsInput as Record<string, Record<string, unknown>>
|
|
15
30
|
const validatedSteps = validated.data as Record<string, Record<string, unknown>>
|
|
16
31
|
|
|
17
32
|
return Object.fromEntries(
|
package/src/inputFiles.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { mkdtemp, rm, writeFile } from 'node:fs/promises'
|
|
|
13
13
|
import { isIP } from 'node:net'
|
|
14
14
|
import { tmpdir } from 'node:os'
|
|
15
15
|
import { basename, join, parse } from 'node:path'
|
|
16
|
+
import { Transform } from 'node:stream'
|
|
16
17
|
import { pipeline } from 'node:stream/promises'
|
|
17
18
|
|
|
18
19
|
import got from 'got'
|
|
@@ -53,6 +54,15 @@ export type PrepareInputFilesOptions = {
|
|
|
53
54
|
urlStrategy?: UrlStrategy
|
|
54
55
|
maxBase64Bytes?: number
|
|
55
56
|
allowPrivateUrls?: boolean
|
|
57
|
+
/** Abort once all URL downloads of this call exceed this many bytes together. */
|
|
58
|
+
maxUrlDownloadBytes?: number
|
|
59
|
+
/** Abort a URL download (DNS checks and redirects included) after this many milliseconds. */
|
|
60
|
+
urlDownloadTimeoutMs?: number
|
|
61
|
+
/**
|
|
62
|
+
* Awaited before each URL input is downloaded locally (not for `/http/import`), so a caller can
|
|
63
|
+
* vouch for the requester first; rejecting aborts preparation.
|
|
64
|
+
*/
|
|
65
|
+
beforeUrlDownload?: () => Promise<void>
|
|
56
66
|
tempDir?: string
|
|
57
67
|
}
|
|
58
68
|
|
|
@@ -202,6 +212,16 @@ const isPrivateIp = (address: string): boolean => {
|
|
|
202
212
|
return false
|
|
203
213
|
}
|
|
204
214
|
|
|
215
|
+
/**
|
|
216
|
+
* Names a URL in error messages without its query or fragment: input URLs are often presigned
|
|
217
|
+
* (ChatGPT attachments, S3), and these messages reach logs and model-visible tool results.
|
|
218
|
+
*/
|
|
219
|
+
const describeUrl = (value: string): string => {
|
|
220
|
+
if (!URL.canParse(value)) return '[unparseable URL]'
|
|
221
|
+
const url = new URL(value)
|
|
222
|
+
return `${url.origin}${url.pathname}`
|
|
223
|
+
}
|
|
224
|
+
|
|
205
225
|
export const resolvePublicDownloadAddresses = async (
|
|
206
226
|
value: string,
|
|
207
227
|
): Promise<Array<{ address: string; family: 4 | 6 }>> => {
|
|
@@ -211,10 +231,10 @@ export const resolvePublicDownloadAddresses = async (
|
|
|
211
231
|
? parsed.hostname.slice(1, -1)
|
|
212
232
|
: parsed.hostname
|
|
213
233
|
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
214
|
-
throw new Error(`URL downloads are limited to http/https: ${value}`)
|
|
234
|
+
throw new Error(`URL downloads are limited to http/https: ${describeUrl(value)}`)
|
|
215
235
|
}
|
|
216
236
|
if (isPrivateIp(hostname)) {
|
|
217
|
-
throw new Error(`URL downloads are limited to public hosts: ${value}`)
|
|
237
|
+
throw new Error(`URL downloads are limited to public hosts: ${describeUrl(value)}`)
|
|
218
238
|
}
|
|
219
239
|
|
|
220
240
|
const literalFamily = isIP(hostname)
|
|
@@ -226,11 +246,11 @@ export const resolvePublicDownloadAddresses = async (
|
|
|
226
246
|
verbatim: true,
|
|
227
247
|
})
|
|
228
248
|
if (resolvedAddresses.some((address) => isPrivateIp(address.address))) {
|
|
229
|
-
throw new Error(`URL downloads are limited to public hosts: ${value}`)
|
|
249
|
+
throw new Error(`URL downloads are limited to public hosts: ${describeUrl(value)}`)
|
|
230
250
|
}
|
|
231
251
|
|
|
232
252
|
if (resolvedAddresses.length === 0) {
|
|
233
|
-
throw new Error(`Unable to resolve URL hostname: ${value}`)
|
|
253
|
+
throw new Error(`Unable to resolve URL hostname: ${describeUrl(value)}`)
|
|
234
254
|
}
|
|
235
255
|
|
|
236
256
|
return resolvedAddresses.map((address) => ({
|
|
@@ -370,22 +390,58 @@ export function createPinnedDnsLookup(
|
|
|
370
390
|
return pinnedDnsLookup as PinnedDnsLookup
|
|
371
391
|
}
|
|
372
392
|
|
|
393
|
+
/** A budget shared by every URL download of one `prepareInputFiles` call. */
|
|
394
|
+
type DownloadBudget = { totalBytes: number; remainingBytes: number }
|
|
395
|
+
|
|
396
|
+
const budgetExceeded = (budget: DownloadBudget, url: string): Error =>
|
|
397
|
+
new Error(`URL downloads exceed ${budget.totalBytes} bytes: ${describeUrl(url)}`)
|
|
398
|
+
|
|
399
|
+
/** Errors once the budget is used up, so temp files stay bounded while they stream in. */
|
|
400
|
+
const limitDownloadBytes = (budget: DownloadBudget, url: string): Transform =>
|
|
401
|
+
new Transform({
|
|
402
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
403
|
+
budget.remainingBytes -= chunk.length
|
|
404
|
+
if (budget.remainingBytes < 0) {
|
|
405
|
+
callback(budgetExceeded(budget, url))
|
|
406
|
+
return
|
|
407
|
+
}
|
|
408
|
+
callback(null, chunk)
|
|
409
|
+
},
|
|
410
|
+
})
|
|
411
|
+
|
|
373
412
|
const downloadUrlToFile = async ({
|
|
374
413
|
allowPrivateUrls,
|
|
375
414
|
filePath,
|
|
376
415
|
url,
|
|
416
|
+
budget,
|
|
417
|
+
timeoutMs,
|
|
377
418
|
}: {
|
|
378
419
|
allowPrivateUrls: boolean
|
|
379
420
|
filePath: string
|
|
380
421
|
url: string
|
|
422
|
+
budget?: DownloadBudget
|
|
423
|
+
timeoutMs?: number
|
|
381
424
|
}): Promise<void> => {
|
|
382
425
|
let currentUrl = url
|
|
426
|
+
// One deadline for the whole download, so DNS checks and redirects cannot each restart it.
|
|
427
|
+
const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs
|
|
428
|
+
const remainingMs = (): number | undefined => {
|
|
429
|
+
if (deadline === undefined) return undefined
|
|
430
|
+
const remaining = deadline - Date.now()
|
|
431
|
+
if (remaining <= 0) {
|
|
432
|
+
throw new Error(`URL download timed out after ${timeoutMs} ms: ${describeUrl(url)}`)
|
|
433
|
+
}
|
|
434
|
+
return remaining
|
|
435
|
+
}
|
|
383
436
|
|
|
384
437
|
for (let redirectCount = 0; redirectCount <= MAX_URL_REDIRECTS; redirectCount += 1) {
|
|
385
438
|
let validatedAddresses: Array<{ address: string; family: 4 | 6 }> | null = null
|
|
386
439
|
if (!allowPrivateUrls) {
|
|
440
|
+
// Not raced against the deadline: the system resolver bounds each lookup with its own
|
|
441
|
+
// short timeout and no bytes are transferred, so checking the clock right after suffices.
|
|
387
442
|
validatedAddresses = await resolvePublicDownloadAddresses(currentUrl)
|
|
388
443
|
}
|
|
444
|
+
const requestTimeoutMs = remainingMs()
|
|
389
445
|
|
|
390
446
|
const dnsLookup: LookupFunction | undefined =
|
|
391
447
|
validatedAddresses == null ? undefined : createPinnedDnsLookup(validatedAddresses)
|
|
@@ -395,6 +451,7 @@ const downloadUrlToFile = async ({
|
|
|
395
451
|
followRedirect: false,
|
|
396
452
|
retry: { limit: 0 },
|
|
397
453
|
throwHttpErrors: false,
|
|
454
|
+
...(requestTimeoutMs === undefined ? {} : { timeout: { request: requestTimeoutMs } }),
|
|
398
455
|
})
|
|
399
456
|
|
|
400
457
|
const response = await new Promise<
|
|
@@ -416,7 +473,7 @@ const downloadUrlToFile = async ({
|
|
|
416
473
|
responseStream.destroy()
|
|
417
474
|
const location = response.headers.location
|
|
418
475
|
if (location == null) {
|
|
419
|
-
throw new Error(`Redirect response missing Location header: ${currentUrl}`)
|
|
476
|
+
throw new Error(`Redirect response missing Location header: ${describeUrl(currentUrl)}`)
|
|
420
477
|
}
|
|
421
478
|
currentUrl = new URL(location, currentUrl).toString()
|
|
422
479
|
continue
|
|
@@ -424,14 +481,22 @@ const downloadUrlToFile = async ({
|
|
|
424
481
|
|
|
425
482
|
if (statusCode >= 400) {
|
|
426
483
|
responseStream.destroy()
|
|
427
|
-
throw new Error(`Failed to download URL: ${currentUrl} (${statusCode})`)
|
|
484
|
+
throw new Error(`Failed to download URL: ${describeUrl(currentUrl)} (${statusCode})`)
|
|
428
485
|
}
|
|
429
486
|
|
|
430
|
-
|
|
487
|
+
if (budget === undefined) {
|
|
488
|
+
await pipeline(responseStream, createWriteStream(filePath))
|
|
489
|
+
return
|
|
490
|
+
}
|
|
491
|
+
if (Number(response.headers['content-length']) > budget.remainingBytes) {
|
|
492
|
+
responseStream.destroy()
|
|
493
|
+
throw budgetExceeded(budget, url)
|
|
494
|
+
}
|
|
495
|
+
await pipeline(responseStream, limitDownloadBytes(budget, url), createWriteStream(filePath))
|
|
431
496
|
return
|
|
432
497
|
}
|
|
433
498
|
|
|
434
|
-
throw new Error(`Too many redirects while downloading URL input: ${url}`)
|
|
499
|
+
throw new Error(`Too many redirects while downloading URL input: ${describeUrl(url)}`)
|
|
435
500
|
}
|
|
436
501
|
|
|
437
502
|
export const prepareInputFiles = async (
|
|
@@ -445,6 +510,9 @@ export const prepareInputFiles = async (
|
|
|
445
510
|
urlStrategy = 'import',
|
|
446
511
|
maxBase64Bytes,
|
|
447
512
|
allowPrivateUrls = true,
|
|
513
|
+
maxUrlDownloadBytes,
|
|
514
|
+
urlDownloadTimeoutMs,
|
|
515
|
+
beforeUrlDownload,
|
|
448
516
|
tempDir,
|
|
449
517
|
} = options
|
|
450
518
|
|
|
@@ -452,6 +520,10 @@ export const prepareInputFiles = async (
|
|
|
452
520
|
const files: Record<string, string> = {}
|
|
453
521
|
const uploads: Record<string, UploadInput> = {}
|
|
454
522
|
const cleanup: Array<() => Promise<void>> = []
|
|
523
|
+
const downloadBudget: DownloadBudget | undefined =
|
|
524
|
+
maxUrlDownloadBytes === undefined
|
|
525
|
+
? undefined
|
|
526
|
+
: { totalBytes: maxUrlDownloadBytes, remainingBytes: maxUrlDownloadBytes }
|
|
455
527
|
|
|
456
528
|
if (fields && Object.keys(fields).length > 0) {
|
|
457
529
|
nextParams = {
|
|
@@ -530,10 +602,13 @@ export const prepareInputFiles = async (
|
|
|
530
602
|
getFilenameFromUrl(file.url) ??
|
|
531
603
|
`${file.field}.bin`
|
|
532
604
|
const filePath = await ensureUniqueTempFilePath(root, filename, usedTempPaths)
|
|
605
|
+
await beforeUrlDownload?.()
|
|
533
606
|
await downloadUrlToFile({
|
|
534
607
|
allowPrivateUrls,
|
|
535
608
|
filePath,
|
|
536
609
|
url: file.url,
|
|
610
|
+
budget: downloadBudget,
|
|
611
|
+
timeoutMs: urlDownloadTimeoutMs,
|
|
537
612
|
})
|
|
538
613
|
files[file.field] = filePath
|
|
539
614
|
}
|