@rest-vir/run-service 0.7.0 → 0.8.1
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assertWrap } from '@augment-vir/assert';
|
|
2
2
|
import { ensureErrorAndPrependMessage, extractErrorMessage, HttpStatus, stringify, wrapInTry, } from '@augment-vir/common';
|
|
3
|
-
import { matchUrlToService, restVirServiceNameHeader, } from '@rest-vir/define-service';
|
|
3
|
+
import { isFormDataShape, matchUrlToService, restVirServiceNameHeader, } from '@rest-vir/define-service';
|
|
4
4
|
import { HttpMethod, RestVirHandlerError, } from '@rest-vir/implement-service';
|
|
5
5
|
import { assertValidShape, isValidShape } from 'object-shape-tester';
|
|
6
6
|
import { handleHandlerResult } from './endpoint-handler.js';
|
|
@@ -55,7 +55,7 @@ export async function preHandler(request, response, service, attachId) {
|
|
|
55
55
|
}), response).responseSent) {
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
const requestData = wrapInTry(() => extractRequestData(request.body, route));
|
|
58
|
+
const requestData = wrapInTry(() => extractRequestData(request.body, request.headers, route));
|
|
59
59
|
if (requestData instanceof Error) {
|
|
60
60
|
service.logger.error(new RestVirHandlerError(route, `Rejected request body from '${request.originalUrl}': ${stringify(requestData)}`));
|
|
61
61
|
response.statusCode = HttpStatus.BadRequest;
|
|
@@ -102,7 +102,7 @@ export async function preHandler(request, response, service, attachId) {
|
|
|
102
102
|
throw ensureErrorAndPrependMessage(error, 'Failed to generate request context.');
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
-
function extractRequestData(body, route) {
|
|
105
|
+
function extractRequestData(body, headers, route) {
|
|
106
106
|
const dataShape = 'requestDataShape' in route ? route.requestDataShape : undefined;
|
|
107
107
|
if (!dataShape) {
|
|
108
108
|
if (body) {
|
|
@@ -112,7 +112,11 @@ function extractRequestData(body, route) {
|
|
|
112
112
|
return undefined;
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
if (
|
|
115
|
+
if (isFormDataShape(dataShape.shape) &&
|
|
116
|
+
headers['content-type']?.includes('multipart/form-data')) {
|
|
117
|
+
return body;
|
|
118
|
+
}
|
|
119
|
+
else if (!isValidShape(body, dataShape, {
|
|
116
120
|
/** Allow extra keys for forwards / backwards compatibility. */
|
|
117
121
|
allowExtraKeys: true,
|
|
118
122
|
})) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rest-vir/run-service",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Run a service defined by @rest-vir/define-service and implemented by @rest-vir/implement-service.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rest",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"@augment-vir/common": "^31.9.4",
|
|
44
44
|
"@augment-vir/node": "^31.9.4",
|
|
45
45
|
"@fastify/websocket": "^11.0.2",
|
|
46
|
-
"@rest-vir/define-service": "^0.
|
|
47
|
-
"@rest-vir/implement-service": "^0.
|
|
46
|
+
"@rest-vir/define-service": "^0.8.1",
|
|
47
|
+
"@rest-vir/implement-service": "^0.8.1",
|
|
48
48
|
"cluster-vir": "^0.1.0",
|
|
49
49
|
"date-vir": "^7.2.1",
|
|
50
50
|
"fastify": "^5.2.1",
|