@rest-vir/run-service 0.7.0 → 0.8.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.
@@ -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,10 @@ function extractRequestData(body, route) {
112
112
  return undefined;
113
113
  }
114
114
  }
115
- if (!isValidShape(body, dataShape, {
115
+ if (isFormDataShape(dataShape.shape) && headers['content-type'] === 'multipart/form-data') {
116
+ return body;
117
+ }
118
+ else if (!isValidShape(body, dataShape, {
116
119
  /** Allow extra keys for forwards / backwards compatibility. */
117
120
  allowExtraKeys: true,
118
121
  })) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rest-vir/run-service",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
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.7.0",
47
- "@rest-vir/implement-service": "^0.7.0",
46
+ "@rest-vir/define-service": "^0.8.0",
47
+ "@rest-vir/implement-service": "^0.8.0",
48
48
  "cluster-vir": "^0.1.0",
49
49
  "date-vir": "^7.2.1",
50
50
  "fastify": "^5.2.1",