pipework 0.65.0 → 0.67.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/CHANGELOG.md +9 -0
- package/REFERENCE.md +43 -2
- package/dist/core/errors/http.d.ts +10 -0
- package/dist/core/errors/http.d.ts.map +1 -1
- package/dist/core/errors/http.js +14 -0
- package/dist/core/errors/http.js.map +1 -1
- package/dist/core/errors/index.d.ts +1 -1
- package/dist/core/errors/index.d.ts.map +1 -1
- package/dist/core/errors/index.js +1 -1
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/namespace.d.ts +5 -1
- package/dist/core/errors/namespace.d.ts.map +1 -1
- package/dist/core/errors/namespace.js +5 -1
- package/dist/core/errors/namespace.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/request/di/builder.d.ts +70 -1
- package/dist/request/di/builder.d.ts.map +1 -1
- package/dist/request/di/builder.js +75 -0
- package/dist/request/di/builder.js.map +1 -1
- package/dist/request/di/index.d.ts +1 -1
- package/dist/request/di/index.d.ts.map +1 -1
- package/dist/request/di/resolve.d.ts +2 -1
- package/dist/request/di/resolve.d.ts.map +1 -1
- package/dist/request/di/resolve.js +8 -0
- package/dist/request/di/resolve.js.map +1 -1
- package/dist/request/di/types.d.ts +46 -0
- package/dist/request/di/types.d.ts.map +1 -1
- package/dist/request/di/types.js.map +1 -1
- package/dist/request/http/file.d.ts +62 -0
- package/dist/request/http/file.d.ts.map +1 -0
- package/dist/request/http/file.js +120 -0
- package/dist/request/http/file.js.map +1 -0
- package/dist/request/http/index.d.ts +1 -0
- package/dist/request/http/index.d.ts.map +1 -1
- package/dist/request/http/index.js.map +1 -1
- package/dist/request/http/namespace.d.ts +5 -2
- package/dist/request/http/namespace.d.ts.map +1 -1
- package/dist/request/http/namespace.js +3 -2
- package/dist/request/http/namespace.js.map +1 -1
- package/dist/request/http/server.d.ts.map +1 -1
- package/dist/request/http/server.js +111 -6
- package/dist/request/http/server.js.map +1 -1
- package/dist/request/http/types.d.ts +3 -1
- package/dist/request/http/types.d.ts.map +1 -1
- package/dist/request/http/upload.d.ts +39 -0
- package/dist/request/http/upload.d.ts.map +1 -0
- package/dist/request/http/upload.js +140 -0
- package/dist/request/http/upload.js.map +1 -0
- package/dist/request/openapi/generate.d.ts.map +1 -1
- package/dist/request/openapi/generate.js +30 -1
- package/dist/request/openapi/generate.js.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.67.0
|
|
4
|
+
|
|
5
|
+
- **New: `.file({ mediaTypes, status? })` and `http.file({ body, mediaType, filename?, disposition?, length? })` make a route answer with a file.** The handler returns a Buffer or a Readable; a stream is sent as it is read, never held whole. The response carries Content-Type, Content-Length (a Buffer, or a stream given `length`), `Content-Disposition` with an ASCII `filename=` fallback and the exact name in `filename*` (`disposition: 'inline'` to display instead of download), and `X-Content-Type-Options: nosniff`. A stream that fails after sending begins destroys the connection and logs the error, so the client sees an aborted download; one that fails first gets a 500. OpenAPI shows `responses.200.content.<type>` as `{ type: 'string', format: 'binary' }`. A `.file()` route that returns anything but `http.file(...)`, or a media type outside its list, gets a 500 naming the reason; `.file()` with `.output()` for the same status, or with `.job()`, throws at build. The request transaction has committed before the body streams. Range requests and redirects are not supported.
|
|
6
|
+
- **New: `inject()` responses carry `rawPayload`**, the exact bytes of the body, so a test can compare a binary response (`body` stays the text decoding).
|
|
7
|
+
|
|
8
|
+
## 0.66.0
|
|
9
|
+
|
|
10
|
+
- **New: `.upload({...})` makes a route accept a file as a stream.** `{ kind: 'binary', mediaTypes, maxBytes }` takes the request body itself (any media type, `type/*` wildcards allowed); `{ kind: 'multipart', file, mediaTypes, maxBytes, fields? }` takes the file part of a `multipart/form-data` form, with the text fields that precede it. The handler gets `upload.stream` (never buffered whole), `mediaType`, and `length` or `filename` and `fields`. A body over `maxBytes` gets 413 (before reading when Content-Length says so, otherwise while streaming); a media type outside the list gets 415; a missing file part or unknown form field gets 422. Both appear in the OpenAPI document as the request body (`format: binary`). New `errors.PayloadTooLarge` and `errors.UnsupportedMediaType`. In `'auto'` transaction mode the request transaction is held for the whole upload; use `.transaction('manual')` for large files. Adds the `@fastify/multipart` dependency.
|
|
11
|
+
|
|
3
12
|
## 0.65.0
|
|
4
13
|
|
|
5
14
|
**Schema note: blueprint `credits: {}` adds `credit_grant`, `credit_reservation`, `credit_draw` and `credit_ledger` to generated migrations; all tenant-scoped with forced row-level security. Run `pipework generate` and `pipework migrate` to add them.**
|
package/REFERENCE.md
CHANGED
|
@@ -620,6 +620,14 @@ Base error class with code, statusCode, and suggestion fields.
|
|
|
620
620
|
|
|
621
621
|
429 — too many attempts; carries `retryAfterSeconds`, sent as a `Retry-After` header.
|
|
622
622
|
|
|
623
|
+
### `errors.PayloadTooLarge`
|
|
624
|
+
|
|
625
|
+
413 — request body over the route's size limit.
|
|
626
|
+
|
|
627
|
+
### `errors.UnsupportedMediaType`
|
|
628
|
+
|
|
629
|
+
415 — request body media type not accepted by the route.
|
|
630
|
+
|
|
623
631
|
## lifecycle — Startup & Shutdown
|
|
624
632
|
|
|
625
633
|
Application lifecycle namespace — startup orchestration with hooks and timeouts.
|
|
@@ -1399,10 +1407,41 @@ Creates a Flow for test isolation with optional auth and tenant overrides.
|
|
|
1399
1407
|
|
|
1400
1408
|
## http — Server
|
|
1401
1409
|
|
|
1402
|
-
HTTP server
|
|
1410
|
+
HTTP namespace: `http.file()` builds a file response; the server itself is managed by manifold.start().
|
|
1411
|
+
|
|
1412
|
+
### `http.file`
|
|
1413
|
+
|
|
1414
|
+
Builds the value a handler returns to answer with a file: `body` (Buffer,
|
|
1415
|
+
Uint8Array or Readable), `mediaType`, and optionally `filename`,
|
|
1416
|
+
`disposition` (`'attachment'` default, or `'inline'`) and `length` (the byte
|
|
1417
|
+
length of a stream, sent as Content-Length; without it a stream is sent
|
|
1418
|
+
chunked).
|
|
1419
|
+
|
|
1420
|
+
Declare the route with `.file({ mediaTypes })` so OpenAPI describes it. The
|
|
1421
|
+
response carries Content-Type, Content-Length (Buffer, or stream with
|
|
1422
|
+
`length`), Content-Disposition with an ASCII `filename=` fallback and the
|
|
1423
|
+
exact name in `filename*=UTF-8''...`, and `X-Content-Type-Options: nosniff`.
|
|
1424
|
+
|
|
1425
|
+
The request transaction (auto mode) has committed before the first byte is
|
|
1426
|
+
sent, so a stream must not need it. A stream that fails before its first
|
|
1427
|
+
byte gets a 500; one that fails after destroys the connection and logs the
|
|
1428
|
+
error, so the client sees an aborted download, never a complete-looking
|
|
1429
|
+
short one. Range requests and redirects are not supported.
|
|
1403
1430
|
|
|
1404
1431
|
### Types
|
|
1405
1432
|
|
|
1433
|
+
**`FileResponse`** — A file for a route to answer with, made by `http.file()`. Return it from a handler declared with `.file()`; it is sent as the response body, streamed when `body` is a Readable.
|
|
1434
|
+
|
|
1435
|
+
```typescript
|
|
1436
|
+
interface FileResponse
|
|
1437
|
+
```
|
|
1438
|
+
|
|
1439
|
+
**`FileResponseInit`** — What `http.file()` takes.
|
|
1440
|
+
|
|
1441
|
+
```typescript
|
|
1442
|
+
interface FileResponseInit
|
|
1443
|
+
```
|
|
1444
|
+
|
|
1406
1445
|
**`CorsConfig`** — CORS configuration — origin, methods, headers, credentials, maxAge.
|
|
1407
1446
|
|
|
1408
1447
|
```typescript
|
|
@@ -1429,7 +1468,9 @@ interface RateLimitConfig
|
|
|
1429
1468
|
interface InjectOptions
|
|
1430
1469
|
```
|
|
1431
1470
|
|
|
1432
|
-
**`InjectResponse`** — Response from server.inject() — statusCode, headers, body, json() helper.
|
|
1471
|
+
**`InjectResponse`** — Response from server.inject() — statusCode, headers, body, rawPayload, json() helper.
|
|
1472
|
+
|
|
1473
|
+
- `rawPayload` — the exact bytes of the response body; use it for binary responses, where `body` is decoded as text.
|
|
1433
1474
|
|
|
1434
1475
|
```typescript
|
|
1435
1476
|
interface InjectResponse
|
|
@@ -32,4 +32,14 @@ export declare class ConflictError extends PipeworkError {
|
|
|
32
32
|
readonly httpStatus: 409;
|
|
33
33
|
constructor(message: string, details?: Record<string, unknown>);
|
|
34
34
|
}
|
|
35
|
+
export declare class PayloadTooLargeError extends PipeworkError {
|
|
36
|
+
readonly code: "PAYLOAD_TOO_LARGE";
|
|
37
|
+
readonly httpStatus: 413;
|
|
38
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
39
|
+
}
|
|
40
|
+
export declare class UnsupportedMediaTypeError extends PipeworkError {
|
|
41
|
+
readonly code: "UNSUPPORTED_MEDIA_TYPE";
|
|
42
|
+
readonly httpStatus: 415;
|
|
43
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
44
|
+
}
|
|
35
45
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;IACpC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGpE;AAED,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAS;IACvC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAkC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAG/F;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;IACpC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAmC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGhG;AAED,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAS;IAC3C,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;IAClC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;gBAErD,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;CAWpE;AAED,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;IAC5C,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;gBAEtB,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAE,MAA8C;CAI/F;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAS;IACnC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGnE"}
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;IACpC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGpE;AAED,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAS;IACvC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAkC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAG/F;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;IACpC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAmC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGhG;AAED,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAS;IAC3C,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;IAClC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;gBAErD,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;CAWpE;AAED,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;IAC5C,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;gBAEtB,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAE,MAA8C;CAI/F;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAS;IACnC,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGnE;AAGD,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;IAC5C,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAiC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAG9F;AAED,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,QAAQ,CAAC,IAAI,EAAG,wBAAwB,CAAS;IACjD,QAAQ,CAAC,UAAU,EAAG,GAAG,CAAS;gBAEtB,OAAO,GAAE,MAAiC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAG9F"}
|
package/dist/core/errors/http.js
CHANGED
|
@@ -52,4 +52,18 @@ export class ConflictError extends PipeworkError {
|
|
|
52
52
|
super(message, details);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
export class PayloadTooLargeError extends PipeworkError {
|
|
56
|
+
code = 'PAYLOAD_TOO_LARGE';
|
|
57
|
+
httpStatus = 413;
|
|
58
|
+
constructor(message = 'Request body too large', details = {}) {
|
|
59
|
+
super(message, details);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class UnsupportedMediaTypeError extends PipeworkError {
|
|
63
|
+
code = 'UNSUPPORTED_MEDIA_TYPE';
|
|
64
|
+
httpStatus = 415;
|
|
65
|
+
constructor(message = 'Unsupported media type', details = {}) {
|
|
66
|
+
super(message, details);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
55
69
|
//# sourceMappingURL=http.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,WAAoB,CAAA;IAC3B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,QAAgB,EAAE,UAAmC,EAAE;QACjE,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACzC,IAAI,GAAG,cAAuB,CAAA;IAC9B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,yBAAyB,EAAE,UAAmC,EAAE;QAC5F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;IACtC,IAAI,GAAG,WAAoB,CAAA;IAC3B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,0BAA0B,EAAE,UAAmC,EAAE;QAC7F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACvC,IAAI,GAAG,kBAA2B,CAAA;IAClC,UAAU,GAAG,GAAY,CAAA;IACzB,WAAW,CAA6C;IAIjE,YAAY,oBAAuD,EAAE,OAAgB;QACnF,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YAC7C,KAAK,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAA;YAChD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,OAAO,IAAI,eAAe,CAAA;YACtC,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACjD,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAA;QACzC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAC5C,IAAI,GAAG,mBAA4B,CAAA;IACnC,UAAU,GAAG,GAAY,CAAA;IACzB,iBAAiB,CAAQ;IAElC,YAAY,iBAAyB,EAAE,UAAkB,qCAAqC;QAC5F,KAAK,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,UAAmB,CAAA;IAC1B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,WAAoB,CAAA;IAC3B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,QAAgB,EAAE,UAAmC,EAAE;QACjE,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACzC,IAAI,GAAG,cAAuB,CAAA;IAC9B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,yBAAyB,EAAE,UAAmC,EAAE;QAC5F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;IACtC,IAAI,GAAG,WAAoB,CAAA;IAC3B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,0BAA0B,EAAE,UAAmC,EAAE;QAC7F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACvC,IAAI,GAAG,kBAA2B,CAAA;IAClC,UAAU,GAAG,GAAY,CAAA;IACzB,WAAW,CAA6C;IAIjE,YAAY,oBAAuD,EAAE,OAAgB;QACnF,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YAC7C,KAAK,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAA;YAChD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,OAAO,IAAI,eAAe,CAAA;YACtC,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACjD,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAA;QACzC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAC5C,IAAI,GAAG,mBAA4B,CAAA;IACnC,UAAU,GAAG,GAAY,CAAA;IACzB,iBAAiB,CAAQ;IAElC,YAAY,iBAAyB,EAAE,UAAkB,qCAAqC;QAC5F,KAAK,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,UAAmB,CAAA;IAC1B,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAGD,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAC5C,IAAI,GAAG,mBAA4B,CAAA;IACnC,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,wBAAwB,EAAE,UAAmC,EAAE;QAC3F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IACjD,IAAI,GAAG,wBAAiC,CAAA;IACxC,UAAU,GAAG,GAAY,CAAA;IAElC,YAAY,UAAkB,wBAAwB,EAAE,UAAmC,EAAE;QAC3F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { PipeworkError, isPipeworkError } from './base.js';
|
|
2
|
-
export { NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './http.js';
|
|
2
|
+
export { NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './http.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { PipeworkError, isPipeworkError } from './base.js';
|
|
2
|
-
export { NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './http.js';
|
|
2
|
+
export { NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './http.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './index.js';
|
|
1
|
+
import { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './index.js';
|
|
2
2
|
/** Standard error classes — all extend PipeworkError with structured error codes and actionable messages. */
|
|
3
3
|
export declare const errors: {
|
|
4
4
|
/** Base error class with code, statusCode, and suggestion fields. */
|
|
@@ -15,5 +15,9 @@ export declare const errors: {
|
|
|
15
15
|
Conflict: typeof ConflictError;
|
|
16
16
|
/** 429 — too many attempts; carries `retryAfterSeconds`, sent as a `Retry-After` header. */
|
|
17
17
|
TooManyRequests: typeof TooManyRequestsError;
|
|
18
|
+
/** 413 — request body over the route's size limit. */
|
|
19
|
+
PayloadTooLarge: typeof PayloadTooLargeError;
|
|
20
|
+
/** 415 — request body media type not accepted by the route. */
|
|
21
|
+
UnsupportedMediaType: typeof UnsupportedMediaTypeError;
|
|
18
22
|
};
|
|
19
23
|
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/core/errors/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/core/errors/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEnM,6GAA6G;AAC7G,eAAO,MAAM,MAAM;IACjB,qEAAqE;;IAErE,gCAAgC;;IAEhC,+CAA+C;;IAE/C,wDAAwD;;IAExD,kEAAkE;;IAElE,mEAAmE;;IAEnE,4FAA4F;;IAE5F,sDAAsD;;IAEtD,+DAA+D;;CAEhE,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './index.js';
|
|
1
|
+
import { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './index.js';
|
|
2
2
|
/** Standard error classes — all extend PipeworkError with structured error codes and actionable messages. */
|
|
3
3
|
export const errors = {
|
|
4
4
|
/** Base error class with code, statusCode, and suggestion fields. */
|
|
@@ -15,5 +15,9 @@ export const errors = {
|
|
|
15
15
|
Conflict: ConflictError,
|
|
16
16
|
/** 429 — too many attempts; carries `retryAfterSeconds`, sent as a `Retry-After` header. */
|
|
17
17
|
TooManyRequests: TooManyRequestsError,
|
|
18
|
+
/** 413 — request body over the route's size limit. */
|
|
19
|
+
PayloadTooLarge: PayloadTooLargeError,
|
|
20
|
+
/** 415 — request body media type not accepted by the route. */
|
|
21
|
+
UnsupportedMediaType: UnsupportedMediaTypeError,
|
|
18
22
|
};
|
|
19
23
|
//# sourceMappingURL=namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/core/errors/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/core/errors/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEnM,6GAA6G;AAC7G,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,qEAAqE;IACrE,IAAI,EAAE,aAAa;IACnB,gCAAgC;IAChC,QAAQ,EAAE,aAAa;IACvB,+CAA+C;IAC/C,YAAY,EAAE,iBAAiB;IAC/B,wDAAwD;IACxD,SAAS,EAAE,cAAc;IACzB,kEAAkE;IAClE,UAAU,EAAE,eAAe;IAC3B,mEAAmE;IACnE,QAAQ,EAAE,aAAa;IACvB,4FAA4F;IAC5F,eAAe,EAAE,oBAAoB;IACrC,sDAAsD;IACtD,eAAe,EAAE,oBAAoB;IACrC,+DAA+D;IAC/D,oBAAoB,EAAE,yBAAyB;CAChD,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,13 +14,14 @@ export { schema } from './data/schema/namespace.js';
|
|
|
14
14
|
export type { JsonSchema } from './data/schema/namespace.js';
|
|
15
15
|
export type { Schema, Infer } from './data/schema/types.js';
|
|
16
16
|
export { fitting } from './request/fitting/namespace.js';
|
|
17
|
-
export type { Handler, HandlerMeta, RouteMeta, HttpMethod, InferDeps, InferReturn, DatabaseDeps } from './request/di/types.js';
|
|
17
|
+
export type { Handler, HandlerMeta, RouteMeta, HttpMethod, InferDeps, InferReturn, DatabaseDeps, UploadConfig, BinaryUploadConfig, MultipartUploadConfig, BinaryUpload, MultipartUpload, FileConfig } from './request/di/types.js';
|
|
18
18
|
export type { PermissionMeta, JobRetryConfig, JobTransactionMode, Checkpoint } from './request/di/types.js';
|
|
19
19
|
export type { RouteScreen, ScreenedRequest, ScreenRefusal } from './request/di/types.js';
|
|
20
20
|
export { http } from './request/http/namespace.js';
|
|
21
21
|
export { createServer } from './request/http/server.js';
|
|
22
22
|
export type { ServerConfig, CorsConfig, SecurityConfig, RateLimitConfig, ErrorResponse, HandlerResponse, InjectOptions, InjectResponse } from './request/http/types.js';
|
|
23
23
|
export type { PipeworkServer } from './request/http/server.js';
|
|
24
|
+
export type { FileResponse, FileResponseInit } from './request/http/file.js';
|
|
24
25
|
export type { HttpRequest, HttpResponse } from './request/http/types.js';
|
|
25
26
|
export { auth } from './auth/auth/namespace.js';
|
|
26
27
|
export type { AuthStrategy, AuthRequest, AuthContext, BaseAuth } from './auth/auth/types.js';
|
|
@@ -78,7 +79,7 @@ export type { AccessLinks, AccessLinksConfig, AccessLink, PublicLink, AccessLink
|
|
|
78
79
|
export { surface } from './core/surface/namespace.js';
|
|
79
80
|
export type { Surface, SurfaceKind, SurfaceHandle, SurfaceManifest, SurfaceContext, SurfaceMap, HttpSurfaceConfig, HttpSurfaceBuilder, TestClient, WorkerSurfaceConfig, ScriptSurfaceConfig, ScriptContext, RetryConfig } from './core/surface/index.js';
|
|
80
81
|
export { errors } from './core/errors/namespace.js';
|
|
81
|
-
export { PipeworkError, isPipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './core/errors/index.js';
|
|
82
|
+
export { PipeworkError, isPipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './core/errors/index.js';
|
|
82
83
|
export { config } from './core/config/namespace.js';
|
|
83
84
|
export type { ResolvedConfig, ResolvedDatabase, ResolvedObservability, Blueprint, DatabaseConfig, TestConfig, Environment, IsolationStrategy, ObservabilityConfig, ModuleConfig, EnvVarDef, EnvDefs, ResolveEnvDefs } from './core/config/index.js';
|
|
84
85
|
export { ConfigError } from './core/config/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAE7G,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACvF,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAKpE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC1E,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAE5F,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EACxH,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAC9E,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EACtD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,7 @@ export { credits } from './infra/credits/namespace.js';
|
|
|
35
35
|
export { accessLinks } from './infra/access-links/namespace.js';
|
|
36
36
|
export { surface } from './core/surface/namespace.js';
|
|
37
37
|
export { errors } from './core/errors/namespace.js';
|
|
38
|
-
export { PipeworkError, isPipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError } from './core/errors/index.js';
|
|
38
|
+
export { PipeworkError, isPipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError, TooManyRequestsError, PayloadTooLargeError, UnsupportedMediaTypeError } from './core/errors/index.js';
|
|
39
39
|
export { config } from './core/config/namespace.js';
|
|
40
40
|
export { ConfigError } from './core/config/index.js';
|
|
41
41
|
export { log } from './core/logging/namespace.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAM/D,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AASvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAM/D,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AASvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAQvD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAU/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAKvD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAI1D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAKtF,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAIjD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAK/D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAMrD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EACvF,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAEvI,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Schema, Infer } from '../../data/schema/types.js';
|
|
2
2
|
import type { DB } from '../../data/db/index.js';
|
|
3
|
-
import type { Handler, HttpMethod, RouteMeta, AuthRequirement, PermissionMeta, JobRetryConfig, JobTransactionMode, Checkpoint, RouteScreen } from './types.js';
|
|
3
|
+
import type { Handler, HttpMethod, RouteMeta, AuthRequirement, PermissionMeta, JobRetryConfig, JobTransactionMode, Checkpoint, RouteScreen, UploadConfig, BinaryUploadConfig, MultipartUploadConfig, BinaryUpload, MultipartUpload, FileConfig } from './types.js';
|
|
4
4
|
import type { ResourceOperations, Resource, PaginationConfig } from '../fixture/types.js';
|
|
5
5
|
import type { HttpRequest, HttpResponse } from '../http/types.js';
|
|
6
6
|
interface BuilderState {
|
|
@@ -22,6 +22,8 @@ interface BuilderState {
|
|
|
22
22
|
wantsRequest: boolean;
|
|
23
23
|
wantsResponse: boolean;
|
|
24
24
|
wantsRawBody: boolean;
|
|
25
|
+
upload: UploadConfig | null;
|
|
26
|
+
file: FileConfig | null;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Deps shape after `.transaction('manual')`: the databases the handler declared
|
|
@@ -117,6 +119,73 @@ export declare class Builder<TDeps extends Record<string, unknown>, TDb extends
|
|
|
117
119
|
rawBody(): Builder<TDeps & {
|
|
118
120
|
rawBody: Buffer;
|
|
119
121
|
}, TDb>;
|
|
122
|
+
/**
|
|
123
|
+
* Makes this route accept a file upload and hands the handler the file as a
|
|
124
|
+
* stream in the `upload` dep. The body is never buffered whole.
|
|
125
|
+
*
|
|
126
|
+
* `{ kind: 'binary', mediaTypes, maxBytes }` takes the request body itself as
|
|
127
|
+
* the file: `upload` is `{ stream, mediaType, length }` (`length` is the
|
|
128
|
+
* declared Content-Length, null when chunked). `{ kind: 'multipart', file,
|
|
129
|
+
* mediaTypes, maxBytes, fields? }` takes the part named `file` of a
|
|
130
|
+
* `multipart/form-data` body: `upload` is `{ stream, mediaType, filename,
|
|
131
|
+
* fields }`. `mediaTypes` entries may be `type/*` wildcards.
|
|
132
|
+
*
|
|
133
|
+
* A body (binary) or file (multipart) over `maxBytes` gets 413: refused before
|
|
134
|
+
* reading when the declared Content-Length is over, and while streaming
|
|
135
|
+
* otherwise (the handler's read of `upload.stream` rejects with
|
|
136
|
+
* `errors.PayloadTooLarge`). A media type outside `mediaTypes` gets 415. The
|
|
137
|
+
* route's `screen`, when set, still runs first, and auth runs before any body
|
|
138
|
+
* is read.
|
|
139
|
+
*
|
|
140
|
+
* Multipart: text fields must come before the file part, only names listed in
|
|
141
|
+
* `fields` are accepted (another name gets 422), each at most 64 KiB; fields
|
|
142
|
+
* after the file part are not read, and only the first file part is handed
|
|
143
|
+
* over. A missing file part gets 422.
|
|
144
|
+
*
|
|
145
|
+
* The handler must consume or destroy `upload.stream`. If it returns with the
|
|
146
|
+
* stream unfinished the framework destroys it and closes the connection after
|
|
147
|
+
* the response. Errors from the stream reach the handler as rejected reads and
|
|
148
|
+
* become the response when the handler lets them propagate.
|
|
149
|
+
*
|
|
150
|
+
* In `'auto'` transaction mode the request transaction, and its pool
|
|
151
|
+
* connection, is held for the whole upload: for large files use
|
|
152
|
+
* `.transaction('manual')` and write to the database in a `checkpoint` after
|
|
153
|
+
* the bytes are stored.
|
|
154
|
+
*
|
|
155
|
+
* Cannot be combined with `.input()`, `.rawBody()` or `.job()`; each throws.
|
|
156
|
+
*/
|
|
157
|
+
upload(config: BinaryUploadConfig): Builder<TDeps & {
|
|
158
|
+
upload: BinaryUpload;
|
|
159
|
+
}, TDb>;
|
|
160
|
+
upload(config: MultipartUploadConfig): Builder<TDeps & {
|
|
161
|
+
upload: MultipartUpload;
|
|
162
|
+
}, TDb>;
|
|
163
|
+
/**
|
|
164
|
+
* Declares that this route answers with a file, returned from the handler as
|
|
165
|
+
* `http.file({ body, mediaType, filename? ... })`. `mediaTypes` lists what the
|
|
166
|
+
* route may send (`type/*` wildcards allowed) and `status` (default 200) is the
|
|
167
|
+
* status of the file response. OpenAPI gets `responses.<status>.content.<type>`
|
|
168
|
+
* as `{ type: 'string', format: 'binary' }` for each media type.
|
|
169
|
+
*
|
|
170
|
+
* A route declared with `.file()` must return `http.file(...)`: anything else,
|
|
171
|
+
* or a file whose `mediaType` is outside `mediaTypes`, is a 500 with the reason
|
|
172
|
+
* in the body. A Buffer is sent whole with Content-Length; a Readable is
|
|
173
|
+
* streamed (add `length` for Content-Length, else it is chunked). Content-
|
|
174
|
+
* Disposition carries an ASCII `filename=` fallback and the exact name in
|
|
175
|
+
* `filename*`, and the response sets `X-Content-Type-Options: nosniff`.
|
|
176
|
+
*
|
|
177
|
+
* The request transaction (auto mode) has committed before the body streams,
|
|
178
|
+
* so the stream must not need it. A stream that fails after the first byte
|
|
179
|
+
* destroys the connection and logs the error. Range requests and redirects are
|
|
180
|
+
* not supported.
|
|
181
|
+
*
|
|
182
|
+
* Cannot be combined with `.output()` for the same status, or with `.job()`;
|
|
183
|
+
* `fit()` throws.
|
|
184
|
+
*/
|
|
185
|
+
file(config: {
|
|
186
|
+
mediaTypes: readonly string[];
|
|
187
|
+
status?: number;
|
|
188
|
+
}): Builder<TDeps, TDb>;
|
|
120
189
|
fixture<TAuth>(name: string, operations: ResourceOperations<TAuth>): Resource<TAuth>;
|
|
121
190
|
fit<TReturn>(fn: (deps: TDeps) => Promise<TReturn>): Handler<TDeps, TReturn>;
|
|
122
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/request/di/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAe,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/request/di/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export class Builder {
|
|
|
22
22
|
wantsRequest: state?.wantsRequest ?? false,
|
|
23
23
|
wantsResponse: state?.wantsResponse ?? false,
|
|
24
24
|
wantsRawBody: state?.wantsRawBody ?? false,
|
|
25
|
+
upload: state?.upload ?? null,
|
|
26
|
+
file: state?.file ?? null,
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
29
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -157,6 +159,57 @@ export class Builder {
|
|
|
157
159
|
wantsRawBody: true,
|
|
158
160
|
});
|
|
159
161
|
}
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
163
|
+
upload(config) {
|
|
164
|
+
if (config.mediaTypes.length === 0) {
|
|
165
|
+
throw new Error('[pipework] .upload() needs at least one entry in mediaTypes (e.g. ["application/pdf"] or ["image/*"]).');
|
|
166
|
+
}
|
|
167
|
+
if (!Number.isInteger(config.maxBytes) || config.maxBytes <= 0) {
|
|
168
|
+
throw new Error(`[pipework] .upload() maxBytes must be a positive integer number of bytes, got ${String(config.maxBytes)}.`);
|
|
169
|
+
}
|
|
170
|
+
if (config.kind === 'multipart' && config.file === '') {
|
|
171
|
+
throw new Error('[pipework] .upload({ kind: "multipart" }) needs the form field name of the file in `file`.');
|
|
172
|
+
}
|
|
173
|
+
return new Builder({
|
|
174
|
+
...this.state,
|
|
175
|
+
upload: config,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Declares that this route answers with a file, returned from the handler as
|
|
180
|
+
* `http.file({ body, mediaType, filename? ... })`. `mediaTypes` lists what the
|
|
181
|
+
* route may send (`type/*` wildcards allowed) and `status` (default 200) is the
|
|
182
|
+
* status of the file response. OpenAPI gets `responses.<status>.content.<type>`
|
|
183
|
+
* as `{ type: 'string', format: 'binary' }` for each media type.
|
|
184
|
+
*
|
|
185
|
+
* A route declared with `.file()` must return `http.file(...)`: anything else,
|
|
186
|
+
* or a file whose `mediaType` is outside `mediaTypes`, is a 500 with the reason
|
|
187
|
+
* in the body. A Buffer is sent whole with Content-Length; a Readable is
|
|
188
|
+
* streamed (add `length` for Content-Length, else it is chunked). Content-
|
|
189
|
+
* Disposition carries an ASCII `filename=` fallback and the exact name in
|
|
190
|
+
* `filename*`, and the response sets `X-Content-Type-Options: nosniff`.
|
|
191
|
+
*
|
|
192
|
+
* The request transaction (auto mode) has committed before the body streams,
|
|
193
|
+
* so the stream must not need it. A stream that fails after the first byte
|
|
194
|
+
* destroys the connection and logs the error. Range requests and redirects are
|
|
195
|
+
* not supported.
|
|
196
|
+
*
|
|
197
|
+
* Cannot be combined with `.output()` for the same status, or with `.job()`;
|
|
198
|
+
* `fit()` throws.
|
|
199
|
+
*/
|
|
200
|
+
file(config) {
|
|
201
|
+
if (config.mediaTypes.length === 0) {
|
|
202
|
+
throw new Error('[pipework] .file() needs at least one entry in mediaTypes (e.g. ["application/pdf"] or ["image/*"]).');
|
|
203
|
+
}
|
|
204
|
+
const status = config.status ?? 200;
|
|
205
|
+
if (!Number.isInteger(status) || status < 200 || status > 599) {
|
|
206
|
+
throw new Error(`[pipework] .file() status must be an HTTP status code, got ${String(config.status)}.`);
|
|
207
|
+
}
|
|
208
|
+
return new Builder({
|
|
209
|
+
...this.state,
|
|
210
|
+
file: { mediaTypes: [...config.mediaTypes], status },
|
|
211
|
+
});
|
|
212
|
+
}
|
|
160
213
|
fixture(name, operations) {
|
|
161
214
|
const dbName = this.state.databases[0];
|
|
162
215
|
if (dbName === undefined) {
|
|
@@ -176,6 +229,26 @@ export class Builder {
|
|
|
176
229
|
' declare which database(s) participate. Call .use("dbName") before\n' +
|
|
177
230
|
' .transaction("manual").\n');
|
|
178
231
|
}
|
|
232
|
+
if (this.state.upload !== null) {
|
|
233
|
+
const what = this.state.isJob ? '.job()' : this.state.inputSchema !== null ? '.input()' : this.state.wantsRawBody ? '.rawBody()' : null;
|
|
234
|
+
if (what !== null) {
|
|
235
|
+
throw new Error(`[pipework] .upload() cannot be combined with ${what}.\n\n` +
|
|
236
|
+
' An upload route\'s body is the file, delivered as a stream in the `upload` dep.\n' +
|
|
237
|
+
' Remove ' + what + (what === '.job()' ? ': a job has no request body to stream.' : ', or take the text fields from a multipart form (`fields`).') + '\n');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (this.state.file !== null) {
|
|
241
|
+
if (this.state.isJob) {
|
|
242
|
+
throw new Error('[pipework] .file() cannot be combined with .job().\n\n' +
|
|
243
|
+
' A file response is sent to an HTTP client; a job has no response to send.\n' +
|
|
244
|
+
' Remove .file(), or remove .job().\n');
|
|
245
|
+
}
|
|
246
|
+
if (this.state.outputSchemas.has(this.state.file.status)) {
|
|
247
|
+
throw new Error(`[pipework] .file() and .output(${this.state.file.status}, ...) both declare the ${this.state.file.status} response.\n\n` +
|
|
248
|
+
' A route answers each status with one body: a file or a JSON schema.\n' +
|
|
249
|
+
' Remove .output() for that status, or give .file({ status }) another one.\n');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
179
252
|
const meta = {
|
|
180
253
|
databases: this.state.databases,
|
|
181
254
|
requiresAuth: this.state.requiresAuth,
|
|
@@ -194,6 +267,8 @@ export class Builder {
|
|
|
194
267
|
wantsRequest: this.state.wantsRequest,
|
|
195
268
|
wantsResponse: this.state.wantsResponse,
|
|
196
269
|
wantsRawBody: this.state.wantsRawBody,
|
|
270
|
+
upload: this.state.upload,
|
|
271
|
+
file: this.state.file,
|
|
197
272
|
};
|
|
198
273
|
return {
|
|
199
274
|
async execute(deps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/request/di/builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/request/di/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@ export declare const fitting: import("./builder.js").Builder<Record<never, never
|
|
|
2
2
|
export { createBuilder, Builder } from './builder.js';
|
|
3
3
|
export { resolveAndExecute, type ResolveOptions } from './resolve.js';
|
|
4
4
|
export { DEFAULT_DB } from './types.js';
|
|
5
|
-
export type { Handler, HandlerMeta, RouteMeta, HttpMethod, InferDeps, InferReturn, DatabaseDeps, JobTransactionMode, Checkpoint } from './types.js';
|
|
5
|
+
export type { Handler, HandlerMeta, RouteMeta, HttpMethod, InferDeps, InferReturn, DatabaseDeps, JobTransactionMode, Checkpoint, UploadConfig, BinaryUploadConfig, MultipartUploadConfig, BinaryUpload, MultipartUpload, FileConfig } from './types.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/request/di/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,yHAAkB,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/request/di/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,yHAAkB,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Handler, CheckpointFn } from './types.js';
|
|
1
|
+
import type { Handler, CheckpointFn, BinaryUpload, MultipartUpload } from './types.js';
|
|
2
2
|
import type { DB } from '../../data/db/types.js';
|
|
3
3
|
import type { Flow } from '../context/types.js';
|
|
4
4
|
import type { Manifold } from '../../core/pipework.js';
|
|
@@ -8,6 +8,7 @@ export interface ResolveOptions {
|
|
|
8
8
|
readonly request?: HttpRequest;
|
|
9
9
|
readonly response?: HttpResponse;
|
|
10
10
|
readonly rawBody?: Buffer;
|
|
11
|
+
readonly upload?: BinaryUpload | MultipartUpload;
|
|
11
12
|
/**
|
|
12
13
|
* The `checkpoint` primitive for a manual-transaction handler — a job or a
|
|
13
14
|
* route. Injected as the `checkpoint` dep; the top-level database deps are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/request/di/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/request/di/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACtF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAOjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,eAAe,CAAA;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAA;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,GAAG,EAAE,IAAI,EACT,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAyBpB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EACpF,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAChC,QAAQ,CAAC,EAAE,OAAO,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAyGlB;AAOD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EACpF,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,QAAQ,GACjB,MAAM,EAAE,CAMV;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,YAAY,CAUd"}
|
|
@@ -107,6 +107,14 @@ export async function resolveAndExecute(handler, rawInput, rawQuery, rawParams,
|
|
|
107
107
|
}
|
|
108
108
|
deps['rawBody'] = options.rawBody;
|
|
109
109
|
}
|
|
110
|
+
if (handler.meta.upload) {
|
|
111
|
+
if (options?.upload === undefined) {
|
|
112
|
+
throw new ValidationError('Handler declared .upload() but no uploaded file is available.\n\n' +
|
|
113
|
+
' An upload is supplied by the HTTP server for a route. This handler cannot be\n' +
|
|
114
|
+
' invoked as a background job or via direct resolveAndExecute() without one.\n');
|
|
115
|
+
}
|
|
116
|
+
deps['upload'] = options.upload;
|
|
117
|
+
}
|
|
110
118
|
const result = await handler.execute(deps);
|
|
111
119
|
if (handler.meta.outputSchemas.size > 0) {
|
|
112
120
|
if (isHandlerResponse(result)) {
|