@whook/gcp-functions 9.0.0 → 10.0.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.
Files changed (39) hide show
  1. package/README.md +14 -11
  2. package/dist/commands/testHTTPFunction.d.ts +1 -1
  3. package/dist/commands/testHTTPFunction.js +119 -150
  4. package/dist/commands/testHTTPFunction.js.map +1 -1
  5. package/dist/index.d.ts +2 -4
  6. package/dist/index.js +182 -269
  7. package/dist/index.js.map +1 -1
  8. package/dist/libs/utils.js +16 -35
  9. package/dist/libs/utils.js.map +1 -1
  10. package/dist/services/_autoload.d.ts +3 -3
  11. package/dist/services/_autoload.js +83 -109
  12. package/dist/services/_autoload.js.map +1 -1
  13. package/dist/services/log.js +2 -12
  14. package/dist/services/log.js.map +1 -1
  15. package/dist/services/log.test.js +4 -9
  16. package/dist/services/log.test.js.map +1 -1
  17. package/dist/wrappers/googleHTTPFunction.js +246 -294
  18. package/dist/wrappers/googleHTTPFunction.js.map +1 -1
  19. package/package.json +49 -90
  20. package/src/commands/testHTTPFunction.ts +6 -13
  21. package/src/index.ts +28 -48
  22. package/src/libs/utils.ts +3 -4
  23. package/src/services/_autoload.ts +4 -3
  24. package/src/services/log.test.ts +1 -1
  25. package/src/wrappers/googleHTTPFunction.ts +6 -6
  26. package/dist/commands/testHTTPFunction.mjs +0 -136
  27. package/dist/commands/testHTTPFunction.mjs.map +0 -1
  28. package/dist/index.mjs +0 -265
  29. package/dist/index.mjs.map +0 -1
  30. package/dist/libs/utils.mjs +0 -27
  31. package/dist/libs/utils.mjs.map +0 -1
  32. package/dist/services/_autoload.mjs +0 -113
  33. package/dist/services/_autoload.mjs.map +0 -1
  34. package/dist/services/log.mjs +0 -4
  35. package/dist/services/log.mjs.map +0 -1
  36. package/dist/services/log.test.mjs +0 -7
  37. package/dist/services/log.test.mjs.map +0 -1
  38. package/dist/wrappers/googleHTTPFunction.mjs +0 -290
  39. package/dist/wrappers/googleHTTPFunction.mjs.map +0 -1
@@ -1,310 +1,262 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = wrapHandlerForAWSHTTPFunction;
7
-
8
- var _httpRouter = require("@whook/http-router");
9
-
10
- var _knifecycle = require("knifecycle");
11
-
12
- var _ajv = _interopRequireDefault(require("ajv"));
13
-
14
- var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
15
-
16
- var _bytes = _interopRequireDefault(require("bytes"));
17
-
18
- var _yhttperror = _interopRequireDefault(require("yhttperror"));
19
-
20
- var _whook = require("@whook/whook");
21
-
22
- var _stream = _interopRequireDefault(require("stream"));
23
-
24
- const _excluded = ["OPERATION_API", "WRAPPERS", "NODE_ENV", "DEBUG_NODE_ENVS", "DECODERS", "ENCODERS", "log", "time"];
25
-
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
-
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
-
32
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
-
34
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
35
-
36
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
37
-
1
+ import { DEFAULT_DEBUG_NODE_ENVS, DEFAULT_BUFFER_LIMIT, DEFAULT_PARSERS, DEFAULT_STRINGIFYERS, DEFAULT_DECODERS, DEFAULT_ENCODERS, extractOperationSecurityParameters, castParameters, } from '@whook/http-router';
2
+ import { reuseSpecialProps, alsoInject } from 'knifecycle';
3
+ import { default as Ajv } from 'ajv';
4
+ import { default as addAJVFormats } from 'ajv-formats';
5
+ import bytes from 'bytes';
6
+ import { YHTTPError } from 'yhttperror';
7
+ import { prepareParametersValidators, prepareBodyValidator, applyValidators, filterHeaders, extractBodySpec, extractResponseSpec, checkResponseCharset, checkResponseMediaType, executeHandler, extractProduceableMediaTypes, extractConsumableMediaTypes, getBody, sendBody, } from '@whook/http-router';
8
+ import { noop, compose, identity, lowerCaseHeaders } from '@whook/whook';
9
+ import stream from 'stream';
38
10
  const SEARCH_SEPARATOR = '?';
39
11
  const PATH_SEPARATOR = '/';
40
-
41
- function wrapHandlerForAWSHTTPFunction(initHandler) {
42
- return (0, _knifecycle.alsoInject)(['OPERATION_API', 'WRAPPERS', '?DEBUG_NODE_ENVS', 'NODE_ENV', '?DECODERS', '?ENCODERS', '?PARSERS', '?STRINGIFYERS', '?BUFFER_LIMIT', 'QUERY_PARSER', 'obfuscator', '?log', '?time'], (0, _knifecycle.reuseSpecialProps)(initHandler, initHandlerForAWSHTTPFunction.bind(null, initHandler)));
12
+ export default function wrapHandlerForAWSHTTPFunction(initHandler) {
13
+ return alsoInject([
14
+ 'OPERATION_API',
15
+ 'WRAPPERS',
16
+ '?DEBUG_NODE_ENVS',
17
+ 'NODE_ENV',
18
+ '?DECODERS',
19
+ '?ENCODERS',
20
+ '?PARSERS',
21
+ '?STRINGIFYERS',
22
+ '?BUFFER_LIMIT',
23
+ 'QUERY_PARSER',
24
+ 'obfuscator',
25
+ '?log',
26
+ '?time',
27
+ ], reuseSpecialProps(initHandler, initHandlerForAWSHTTPFunction.bind(null, initHandler)));
43
28
  }
44
-
45
- async function initHandlerForAWSHTTPFunction(initHandler, _ref) {
46
- let {
47
- OPERATION_API,
48
- WRAPPERS,
49
- NODE_ENV,
50
- DEBUG_NODE_ENVS = _httpRouter.DEFAULT_DEBUG_NODE_ENVS,
51
- DECODERS = _httpRouter.DEFAULT_DECODERS,
52
- ENCODERS = _httpRouter.DEFAULT_ENCODERS,
53
- log = _whook.noop,
54
- time = Date.now.bind(Date)
55
- } = _ref,
56
- services = _objectWithoutProperties(_ref, _excluded);
57
-
58
- const path = Object.keys(OPERATION_API.paths)[0];
59
- const method = Object.keys(OPERATION_API.paths[path])[0];
60
-
61
- const OPERATION = _objectSpread({
62
- path,
63
- method
64
- }, OPERATION_API.paths[path][method]);
65
-
66
- const consumableCharsets = Object.keys(DECODERS);
67
- const produceableCharsets = Object.keys(ENCODERS);
68
- const consumableMediaTypes = (0, _httpRouter.extractConsumableMediaTypes)(OPERATION);
69
- const produceableMediaTypes = (0, _httpRouter.extractProduceableMediaTypes)(OPERATION);
70
- const ajv = new _ajv.default({
71
- verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
72
- strict: true,
73
- logger: {
74
- log: (...args) => log === null || log === void 0 ? void 0 : log('debug', ...args),
75
- warn: (...args) => log === null || log === void 0 ? void 0 : log('warning', ...args),
76
- error: (...args) => log === null || log === void 0 ? void 0 : log('error', ...args)
77
- },
78
- useDefaults: true,
79
- coerceTypes: true
80
- });
81
- (0, _ajvFormats.default)(ajv);
82
- const ammendedParameters = (0, _httpRouter.extractOperationSecurityParameters)(OPERATION_API, OPERATION);
83
- const validators = (0, _httpRouter.prepareParametersValidators)(ajv, OPERATION.operationId, (OPERATION.parameters || []).concat(ammendedParameters));
84
- const bodyValidator = (0, _httpRouter.prepareBodyValidator)(ajv, OPERATION);
85
- const applyWrappers = (0, _whook.compose)(...WRAPPERS);
86
- const handler = await applyWrappers(initHandler)(_objectSpread(_objectSpread({
87
- OPERATION,
88
- DEBUG_NODE_ENVS,
89
- NODE_ENV
90
- }, services), {}, {
91
- time,
92
- log
93
- }));
94
- return handleForAWSHTTPFunction.bind(null, _objectSpread({
95
- OPERATION,
96
- NODE_ENV,
97
- DEBUG_NODE_ENVS,
98
- DECODERS,
99
- ENCODERS,
100
- log,
101
- time
102
- }, services), {
103
- consumableMediaTypes,
104
- produceableMediaTypes,
105
- consumableCharsets,
106
- produceableCharsets,
107
- validators,
108
- bodyValidator,
109
- ammendedParameters
110
- }, handler);
29
+ async function initHandlerForAWSHTTPFunction(initHandler, { OPERATION_API, WRAPPERS, NODE_ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, DECODERS = DEFAULT_DECODERS, ENCODERS = DEFAULT_ENCODERS, log = noop, time = Date.now.bind(Date), ...services }) {
30
+ const path = Object.keys(OPERATION_API.paths)[0];
31
+ const method = Object.keys(OPERATION_API.paths[path])[0];
32
+ const OPERATION = {
33
+ path,
34
+ method,
35
+ ...OPERATION_API.paths[path][method],
36
+ };
37
+ const consumableCharsets = Object.keys(DECODERS);
38
+ const produceableCharsets = Object.keys(ENCODERS);
39
+ const consumableMediaTypes = extractConsumableMediaTypes(OPERATION);
40
+ const produceableMediaTypes = extractProduceableMediaTypes(OPERATION);
41
+ const ajv = new Ajv({
42
+ verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
43
+ strict: true,
44
+ logger: {
45
+ log: (...args) => log?.('debug', ...args),
46
+ warn: (...args) => log?.('warning', ...args),
47
+ error: (...args) => log?.('error', ...args),
48
+ },
49
+ useDefaults: true,
50
+ coerceTypes: true,
51
+ });
52
+ addAJVFormats(ajv);
53
+ const ammendedParameters = extractOperationSecurityParameters(OPERATION_API, OPERATION);
54
+ const validators = prepareParametersValidators(ajv, OPERATION.operationId, (OPERATION.parameters || []).concat(ammendedParameters));
55
+ const bodyValidator = prepareBodyValidator(ajv, OPERATION);
56
+ const applyWrappers = compose(...WRAPPERS);
57
+ const handler = await applyWrappers(initHandler)({
58
+ OPERATION,
59
+ DEBUG_NODE_ENVS,
60
+ NODE_ENV,
61
+ ...services,
62
+ time,
63
+ log,
64
+ });
65
+ return handleForAWSHTTPFunction.bind(null, {
66
+ OPERATION,
67
+ NODE_ENV,
68
+ DEBUG_NODE_ENVS,
69
+ DECODERS,
70
+ ENCODERS,
71
+ log,
72
+ time,
73
+ ...services,
74
+ }, {
75
+ consumableMediaTypes,
76
+ produceableMediaTypes,
77
+ consumableCharsets,
78
+ produceableCharsets,
79
+ validators,
80
+ bodyValidator,
81
+ ammendedParameters,
82
+ }, handler);
111
83
  }
112
-
113
- async function handleForAWSHTTPFunction({
114
- OPERATION,
115
- DEBUG_NODE_ENVS,
116
- NODE_ENV,
117
- ENCODERS,
118
- DECODERS,
119
- PARSERS = _httpRouter.DEFAULT_PARSERS,
120
- STRINGIFYERS = _httpRouter.DEFAULT_STRINGIFYERS,
121
- BUFFER_LIMIT = _httpRouter.DEFAULT_BUFFER_LIMIT,
122
- QUERY_PARSER,
123
- CORS,
124
- log,
125
- obfuscator
126
- }, {
127
- consumableMediaTypes,
128
- produceableMediaTypes,
129
- consumableCharsets,
130
- produceableCharsets,
131
- validators,
132
- bodyValidator
133
- }, handler, req, res) {
134
- const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
135
-
136
- const bufferLimit = _bytes.default.parse(BUFFER_LIMIT);
137
-
138
- log === null || log === void 0 ? void 0 : log('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
139
- url: req.originalUrl,
140
- method: req.method,
141
- body: req.body,
142
- // body: obfuscateEventBody(obfuscator, req.body),
143
- headers: obfuscator.obfuscateSensibleHeaders(req.headers)
144
- }));
145
- const request = await gcpfReqToRequest(req);
146
- let parameters;
147
- let response;
148
- let responseLog;
149
- let responseSpec;
150
- log === null || log === void 0 ? void 0 : log('debug', 'REQUEST', JSON.stringify(_objectSpread(_objectSpread({}, request), {}, {
151
- body: request.body ? 'Stream' : undefined,
152
- headers: obfuscator.obfuscateSensibleHeaders(request.headers)
153
- })));
154
-
155
- try {
156
- const operation = OPERATION;
157
- const bodySpec = (0, _httpRouter.extractBodySpec)(request, consumableMediaTypes, consumableCharsets);
158
- responseSpec = (0, _httpRouter.extractResponseSpec)(operation, request, produceableMediaTypes, produceableCharsets);
159
-
84
+ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV, ENCODERS, DECODERS, PARSERS = DEFAULT_PARSERS, STRINGIFYERS = DEFAULT_STRINGIFYERS, BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT, QUERY_PARSER, CORS, log, obfuscator, }, { consumableMediaTypes, produceableMediaTypes, consumableCharsets, produceableCharsets, validators, bodyValidator, }, handler, req, res) {
85
+ const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
86
+ const bufferLimit = bytes.parse(BUFFER_LIMIT);
87
+ log?.('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
88
+ url: req.originalUrl,
89
+ method: req.method,
90
+ body: req.body,
91
+ // body: obfuscateEventBody(obfuscator, req.body),
92
+ headers: obfuscator.obfuscateSensibleHeaders(req.headers),
93
+ }));
94
+ const request = await gcpfReqToRequest(req);
95
+ let parameters;
96
+ let response;
97
+ let responseLog;
98
+ let responseSpec;
99
+ log?.('debug', 'REQUEST', JSON.stringify({
100
+ ...request,
101
+ body: request.body ? 'Stream' : undefined,
102
+ headers: obfuscator.obfuscateSensibleHeaders(request.headers),
103
+ }));
160
104
  try {
161
- const body = await (0, _httpRouter.getBody)({
162
- DECODERS,
163
- PARSERS,
164
- bufferLimit
165
- }, operation, request.body, bodySpec);
166
- const path = request.url.split(SEARCH_SEPARATOR)[0];
167
- const parts = path.split(PATH_SEPARATOR).filter(_whook.identity);
168
- const search = request.url.substr(request.url.split(SEARCH_SEPARATOR)[0].length);
169
- const pathParameters = OPERATION.path.split(PATH_SEPARATOR).filter(_whook.identity).map((part, index) => {
170
- const matches = /^\{([\d\w]+)\}$/i.exec(part);
171
-
172
- if (matches) {
173
- return {
174
- name: matches[1],
175
- value: parts[index]
176
- };
105
+ const operation = OPERATION;
106
+ const bodySpec = extractBodySpec(request, consumableMediaTypes, consumableCharsets);
107
+ responseSpec = extractResponseSpec(operation, request, produceableMediaTypes, produceableCharsets);
108
+ try {
109
+ const body = await getBody({
110
+ DECODERS,
111
+ PARSERS,
112
+ bufferLimit,
113
+ }, operation, request.body, bodySpec);
114
+ const path = request.url.split(SEARCH_SEPARATOR)[0];
115
+ const parts = path.split(PATH_SEPARATOR).filter(identity);
116
+ const search = request.url.substr(request.url.split(SEARCH_SEPARATOR)[0].length);
117
+ const pathParameters = OPERATION.path
118
+ .split(PATH_SEPARATOR)
119
+ .filter(identity)
120
+ .map((part, index) => {
121
+ const matches = /^\{([\d\w]+)\}$/i.exec(part);
122
+ if (matches) {
123
+ return {
124
+ name: matches[1],
125
+ value: parts[index],
126
+ };
127
+ }
128
+ })
129
+ .filter(identity)
130
+ .reduce((accParameters, { name, value }) => ({
131
+ ...accParameters,
132
+ [name]: value,
133
+ }), {});
134
+ // TODO: Update strictQS to handle OpenAPI 3
135
+ const retroCompatibleQueryParameters = (OPERATION.parameters || [])
136
+ .filter((p) => p.in === 'query')
137
+ .map((p) => ({ ...p, ...p.schema }));
138
+ parameters = {
139
+ ...pathParameters,
140
+ ...QUERY_PARSER(retroCompatibleQueryParameters, search),
141
+ ...filterHeaders(operation.parameters, request.headers),
142
+ };
143
+ parameters = {
144
+ // TODO: Use the security of the operation to infer
145
+ // authorization parameters, see:
146
+ // https://github.com/nfroidure/whook/blob/06ccae93d1d52d97ff70fd5e19fa826bdabf3968/packages/whook-http-router/src/validation.js#L110
147
+ authorization: parameters.authorization,
148
+ ...castParameters(operation.parameters || [], parameters),
149
+ };
150
+ applyValidators(operation, validators, parameters);
151
+ bodyValidator(operation, bodySpec.contentType, body);
152
+ parameters = {
153
+ ...parameters,
154
+ ...('undefined' !== typeof body ? { body } : {}),
155
+ };
177
156
  }
178
- }).filter(_whook.identity).reduce((accParameters, {
179
- name,
180
- value
181
- }) => _objectSpread(_objectSpread({}, accParameters), {}, {
182
- [name]: value
183
- }), {}); // TODO: Update strictQS to handle OpenAPI 3
184
-
185
- const retroCompatibleQueryParameters = (OPERATION.parameters || []).filter(p => p.in === 'query').map(p => _objectSpread(_objectSpread({}, p), p.schema));
186
- parameters = _objectSpread(_objectSpread(_objectSpread({}, pathParameters), QUERY_PARSER(retroCompatibleQueryParameters, search)), (0, _httpRouter.filterHeaders)(operation.parameters, request.headers));
187
- parameters = _objectSpread({
188
- // TODO: Use the security of the operation to infer
189
- // authorization parameters, see:
190
- // https://github.com/nfroidure/whook/blob/06ccae93d1d52d97ff70fd5e19fa826bdabf3968/packages/whook-http-router/src/validation.js#L110
191
- authorization: parameters.authorization
192
- }, (0, _httpRouter.castParameters)(operation.parameters || [], parameters));
193
- (0, _httpRouter.applyValidators)(operation, validators, parameters);
194
- bodyValidator(operation, bodySpec.contentType, body);
195
- parameters = _objectSpread(_objectSpread({}, parameters), 'undefined' !== typeof body ? {
196
- body
197
- } : {});
198
- } catch (err) {
199
- throw _yhttperror.default.cast(err, 400);
200
- }
201
-
202
- response = await (0, _httpRouter.executeHandler)(operation, handler, parameters);
203
-
204
- if (response.body) {
205
- response.headers['content-type'] = response.headers['content-type'] || responseSpec.contentTypes[0];
206
- } // Check the stringifyer only when a schema is
207
- // specified and it is not a binary one
208
-
209
-
210
- const responseObject = operation.responses && operation.responses[response.status];
211
- const responseSchema = responseObject && responseObject.content && responseObject.content[response.headers['content-type']] && responseObject.content[response.headers['content-type']].schema;
212
- const responseHasSchema = responseSchema && (responseSchema.type !== 'string' || responseSchema.format !== 'binary');
213
-
214
- if (responseHasSchema && !STRINGIFYERS[response.headers['content-type']]) {
215
- throw new _yhttperror.default(500, 'E_STRINGIFYER_LACK', response.headers['content-type']);
157
+ catch (err) {
158
+ throw YHTTPError.cast(err, 400);
159
+ }
160
+ response = await executeHandler(operation, handler, parameters);
161
+ if (response.body) {
162
+ response.headers['content-type'] =
163
+ response.headers['content-type'] || responseSpec.contentTypes[0];
164
+ }
165
+ // Check the stringifyer only when a schema is
166
+ // specified and it is not a binary one
167
+ const responseObject = operation.responses &&
168
+ operation.responses[response.status];
169
+ const responseSchema = responseObject &&
170
+ responseObject.content &&
171
+ responseObject.content[response.headers['content-type']] &&
172
+ responseObject.content[response.headers['content-type']]
173
+ .schema;
174
+ const responseHasSchema = responseSchema &&
175
+ (responseSchema.type !== 'string' || responseSchema.format !== 'binary');
176
+ if (responseHasSchema && !STRINGIFYERS[response.headers['content-type']]) {
177
+ throw new YHTTPError(500, 'E_STRINGIFYER_LACK', response.headers['content-type']);
178
+ }
179
+ if (response.body) {
180
+ checkResponseMediaType(request, responseSpec, produceableMediaTypes);
181
+ checkResponseCharset(request, responseSpec, produceableCharsets);
182
+ }
183
+ responseLog = {
184
+ type: 'success',
185
+ status: response.status,
186
+ };
187
+ log?.('debug', JSON.stringify(responseLog));
216
188
  }
217
-
218
- if (response.body) {
219
- (0, _httpRouter.checkResponseMediaType)(request, responseSpec, produceableMediaTypes);
220
- (0, _httpRouter.checkResponseCharset)(request, responseSpec, produceableCharsets);
189
+ catch (err) {
190
+ const castedError = YHTTPError.cast(err);
191
+ responseLog = {
192
+ type: 'error',
193
+ code: castedError.code,
194
+ statusCode: castedError.httpCode,
195
+ params: castedError.params || [],
196
+ stack: castedError.stack,
197
+ };
198
+ log?.('error', JSON.stringify(responseLog));
199
+ response = {
200
+ status: castedError.httpCode,
201
+ headers: {
202
+ ...lowerCaseHeaders(CORS),
203
+ ...(castedError.headers ?? {}),
204
+ 'content-type': 'application/json',
205
+ },
206
+ body: {
207
+ error: {
208
+ code: castedError.code,
209
+ stack: debugging ? responseLog.stack : undefined,
210
+ params: debugging ? responseLog.params : undefined,
211
+ },
212
+ },
213
+ };
221
214
  }
222
-
223
- responseLog = {
224
- type: 'success',
225
- status: response.status
226
- };
227
- log === null || log === void 0 ? void 0 : log('debug', JSON.stringify(responseLog));
228
- } catch (err) {
229
- var _castedError$headers;
230
-
231
- const castedError = _yhttperror.default.cast(err);
232
-
233
- responseLog = {
234
- type: 'error',
235
- code: castedError.code,
236
- statusCode: castedError.httpCode,
237
- params: castedError.params || [],
238
- stack: castedError.stack
239
- };
240
- log === null || log === void 0 ? void 0 : log('error', JSON.stringify(responseLog));
241
- response = {
242
- status: castedError.httpCode,
243
- headers: _objectSpread(_objectSpread(_objectSpread({}, (0, _whook.lowerCaseHeaders)(CORS)), (_castedError$headers = castedError.headers) !== null && _castedError$headers !== void 0 ? _castedError$headers : {}), {}, {
244
- 'content-type': 'application/json'
245
- }),
246
- body: {
247
- error: {
248
- code: castedError.code,
249
- stack: debugging ? responseLog.stack : undefined,
250
- params: debugging ? responseLog.params : undefined
251
- }
252
- }
253
- };
254
- }
255
-
256
- log === null || log === void 0 ? void 0 : log('debug', 'RESPONSE', JSON.stringify(_objectSpread(_objectSpread({}, response), {}, {
257
- body: obfuscateEventBody(obfuscator, response.body),
258
- headers: obfuscator.obfuscateSensibleHeaders(response.headers)
259
- })));
260
- await pipeResponseInGCPFResponse(await (0, _httpRouter.sendBody)({
261
- ENCODERS,
262
- STRINGIFYERS
263
- }, response), res);
215
+ log?.('debug', 'RESPONSE', JSON.stringify({
216
+ ...response,
217
+ body: obfuscateEventBody(obfuscator, response.body),
218
+ headers: obfuscator.obfuscateSensibleHeaders(response.headers),
219
+ }));
220
+ await pipeResponseInGCPFResponse(await sendBody({
221
+ ENCODERS,
222
+ STRINGIFYERS,
223
+ }, response), res);
264
224
  }
265
-
266
225
  async function gcpfReqToRequest(req) {
267
- const request = {
268
- method: req.method.toLowerCase(),
269
- headers: (0, _whook.lowerCaseHeaders)(req.headers || {}),
270
- url: req.originalUrl
271
- };
272
-
273
- if (req.rawBody) {
274
- request.headers['content-length'] = req.rawBody.length.toString();
275
- const bodyStream = new _stream.default.PassThrough();
276
- request.body = bodyStream;
277
- bodyStream.write(req.rawBody);
278
- bodyStream.end();
279
- }
280
-
281
- return request;
226
+ const request = {
227
+ method: req.method.toLowerCase(),
228
+ headers: lowerCaseHeaders(req.headers || {}),
229
+ url: req.originalUrl,
230
+ };
231
+ if (req.rawBody) {
232
+ request.headers['content-length'] = req.rawBody.length.toString();
233
+ const bodyStream = new stream.PassThrough();
234
+ request.body = bodyStream;
235
+ bodyStream.write(req.rawBody);
236
+ bodyStream.end();
237
+ }
238
+ return request;
282
239
  }
283
-
284
240
  async function pipeResponseInGCPFResponse(response, res) {
285
- Object.keys(response.headers || {}).forEach(headerName => {
286
- var _response$headers;
287
-
288
- res.set(headerName, (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers[headerName]);
289
- });
290
- res.status(response.status);
291
-
292
- if (response.body) {
293
- response.body.pipe(res);
294
- return;
295
- }
296
-
297
- res.end();
241
+ Object.keys(response.headers || {}).forEach((headerName) => {
242
+ res.set(headerName, response.headers?.[headerName]);
243
+ });
244
+ res.status(response.status);
245
+ if (response.body) {
246
+ response.body.pipe(res);
247
+ return;
248
+ }
249
+ res.end();
298
250
  }
299
-
300
251
  function obfuscateEventBody(obfuscator, rawBody) {
301
- if (typeof rawBody === 'string') {
302
- try {
303
- const jsonBody = JSON.parse(rawBody);
304
- return JSON.stringify(obfuscator.obfuscateSensibleProps(jsonBody)); // eslint-disable-next-line
305
- } catch (err) {}
306
- }
307
-
308
- return rawBody;
252
+ if (typeof rawBody === 'string') {
253
+ try {
254
+ const jsonBody = JSON.parse(rawBody);
255
+ return JSON.stringify(obfuscator.obfuscateSensibleProps(jsonBody));
256
+ // eslint-disable-next-line
257
+ }
258
+ catch (err) { }
259
+ }
260
+ return rawBody;
309
261
  }
310
262
  //# sourceMappingURL=googleHTTPFunction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"googleHTTPFunction.js","names":["SEARCH_SEPARATOR","PATH_SEPARATOR","wrapHandlerForAWSHTTPFunction","initHandler","alsoInject","reuseSpecialProps","initHandlerForAWSHTTPFunction","bind","OPERATION_API","WRAPPERS","NODE_ENV","DEBUG_NODE_ENVS","DEFAULT_DEBUG_NODE_ENVS","DECODERS","DEFAULT_DECODERS","ENCODERS","DEFAULT_ENCODERS","log","noop","time","Date","now","services","path","Object","keys","paths","method","OPERATION","consumableCharsets","produceableCharsets","consumableMediaTypes","extractConsumableMediaTypes","produceableMediaTypes","extractProduceableMediaTypes","ajv","Ajv","verbose","includes","strict","logger","args","warn","error","useDefaults","coerceTypes","addAJVFormats","ammendedParameters","extractOperationSecurityParameters","validators","prepareParametersValidators","operationId","parameters","concat","bodyValidator","prepareBodyValidator","applyWrappers","compose","handler","handleForAWSHTTPFunction","PARSERS","DEFAULT_PARSERS","STRINGIFYERS","DEFAULT_STRINGIFYERS","BUFFER_LIMIT","DEFAULT_BUFFER_LIMIT","QUERY_PARSER","CORS","obfuscator","req","res","debugging","bufferLimit","bytes","parse","JSON","stringify","url","originalUrl","body","headers","obfuscateSensibleHeaders","request","gcpfReqToRequest","response","responseLog","responseSpec","undefined","operation","bodySpec","extractBodySpec","extractResponseSpec","getBody","split","parts","filter","identity","search","substr","length","pathParameters","map","part","index","matches","exec","name","value","reduce","accParameters","retroCompatibleQueryParameters","p","in","schema","filterHeaders","authorization","castParameters","applyValidators","contentType","err","HTTPError","cast","executeHandler","contentTypes","responseObject","responses","status","responseSchema","content","responseHasSchema","type","format","checkResponseMediaType","checkResponseCharset","castedError","code","statusCode","httpCode","params","stack","lowerCaseHeaders","obfuscateEventBody","pipeResponseInGCPFResponse","sendBody","toLowerCase","rawBody","toString","bodyStream","stream","PassThrough","write","end","forEach","headerName","set","pipe","jsonBody","obfuscateSensibleProps"],"sources":["../../src/wrappers/googleHTTPFunction.ts"],"sourcesContent":["import {\n DEFAULT_DEBUG_NODE_ENVS,\n DEFAULT_BUFFER_LIMIT,\n DEFAULT_PARSERS,\n DEFAULT_STRINGIFYERS,\n DEFAULT_DECODERS,\n DEFAULT_ENCODERS,\n extractOperationSecurityParameters,\n castParameters,\n} from '@whook/http-router';\nimport { reuseSpecialProps, alsoInject } from 'knifecycle';\nimport Ajv from 'ajv';\nimport addAJVFormats from 'ajv-formats';\nimport bytes from 'bytes';\nimport HTTPError from 'yhttperror';\nimport {\n prepareParametersValidators,\n prepareBodyValidator,\n applyValidators,\n filterHeaders,\n extractBodySpec,\n extractResponseSpec,\n checkResponseCharset,\n checkResponseMediaType,\n executeHandler,\n extractProduceableMediaTypes,\n extractConsumableMediaTypes,\n getBody,\n sendBody,\n} from '@whook/http-router';\nimport { noop, compose, identity, lowerCaseHeaders } from '@whook/whook';\nimport stream from 'stream';\nimport type { WhookQueryStringParser } from '@whook/http-router';\nimport type { ServiceInitializer, Dependencies, Service } from 'knifecycle';\nimport type {\n WhookRequest,\n WhookResponse,\n WhookHandler,\n ObfuscatorService,\n WhookOperation,\n WhookWrapper,\n} from '@whook/whook';\nimport type { TimeService, LogService } from 'common-services';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { Readable } from 'stream';\nimport type { CORSConfig } from '@whook/cors';\n\ntype HTTPWrapperDependencies = {\n NODE_ENV: string;\n DEBUG_NODE_ENVS?: string[];\n OPERATION: WhookOperation;\n DECODERS?: typeof DEFAULT_DECODERS;\n ENCODERS?: typeof DEFAULT_ENCODERS;\n PARSERS?: typeof DEFAULT_PARSERS;\n STRINGIFYERS?: typeof DEFAULT_STRINGIFYERS;\n QUERY_PARSER: WhookQueryStringParser;\n BUFFER_LIMIT?: string;\n obfuscator: ObfuscatorService;\n time?: TimeService;\n log?: LogService;\n WRAPPERS: WhookWrapper<Dependencies, Service>[];\n};\n\nconst SEARCH_SEPARATOR = '?';\nconst PATH_SEPARATOR = '/';\n\nexport default function wrapHandlerForAWSHTTPFunction<\n D,\n S extends WhookHandler,\n>(\n initHandler: ServiceInitializer<D, S>,\n): ServiceInitializer<D & HTTPWrapperDependencies, S> {\n return alsoInject<HTTPWrapperDependencies, D, S>(\n [\n 'OPERATION_API',\n 'WRAPPERS',\n '?DEBUG_NODE_ENVS',\n 'NODE_ENV',\n '?DECODERS',\n '?ENCODERS',\n '?PARSERS',\n '?STRINGIFYERS',\n '?BUFFER_LIMIT',\n 'QUERY_PARSER',\n 'obfuscator',\n '?log',\n '?time',\n ],\n reuseSpecialProps(\n initHandler,\n (initHandlerForAWSHTTPFunction as any).bind(\n null,\n initHandler,\n ) as ServiceInitializer<D, S>,\n ),\n );\n}\n\nasync function initHandlerForAWSHTTPFunction(\n initHandler: ServiceInitializer<Dependencies<any>, WhookHandler>,\n {\n OPERATION_API,\n WRAPPERS,\n NODE_ENV,\n DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS,\n DECODERS = DEFAULT_DECODERS,\n ENCODERS = DEFAULT_ENCODERS,\n log = noop,\n time = Date.now.bind(Date),\n ...services\n },\n) {\n const path = Object.keys(OPERATION_API.paths)[0];\n const method = Object.keys(OPERATION_API.paths[path])[0];\n const OPERATION: WhookOperation = {\n path,\n method,\n ...OPERATION_API.paths[path][method],\n };\n const consumableCharsets = Object.keys(DECODERS);\n const produceableCharsets = Object.keys(ENCODERS);\n const consumableMediaTypes = extractConsumableMediaTypes(OPERATION);\n const produceableMediaTypes = extractProduceableMediaTypes(OPERATION);\n const ajv = new Ajv({\n verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),\n strict: true,\n logger: {\n log: (...args) => log?.('debug', ...args),\n warn: (...args) => log?.('warning', ...args),\n error: (...args) => log?.('error', ...args),\n },\n useDefaults: true,\n coerceTypes: true,\n });\n addAJVFormats(ajv);\n const ammendedParameters = extractOperationSecurityParameters(\n OPERATION_API,\n OPERATION,\n );\n const validators = prepareParametersValidators(\n ajv,\n OPERATION.operationId,\n ((OPERATION.parameters || []) as OpenAPIV3.ParameterObject[]).concat(\n ammendedParameters,\n ),\n );\n const bodyValidator = prepareBodyValidator(ajv, OPERATION);\n const applyWrappers = compose(...WRAPPERS) as WhookWrapper<\n Dependencies,\n Service\n >;\n\n const handler = await (\n applyWrappers(initHandler) as ServiceInitializer<Dependencies, Service>\n )({\n OPERATION,\n DEBUG_NODE_ENVS,\n NODE_ENV,\n ...services,\n time,\n log,\n });\n\n return handleForAWSHTTPFunction.bind(\n null,\n {\n OPERATION,\n NODE_ENV,\n DEBUG_NODE_ENVS,\n DECODERS,\n ENCODERS,\n log,\n time,\n ...services,\n },\n {\n consumableMediaTypes,\n produceableMediaTypes,\n consumableCharsets,\n produceableCharsets,\n validators,\n bodyValidator,\n ammendedParameters,\n },\n handler,\n );\n}\n\nasync function handleForAWSHTTPFunction(\n {\n OPERATION,\n DEBUG_NODE_ENVS,\n NODE_ENV,\n ENCODERS,\n DECODERS,\n PARSERS = DEFAULT_PARSERS,\n STRINGIFYERS = DEFAULT_STRINGIFYERS,\n BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT,\n QUERY_PARSER,\n CORS,\n log,\n obfuscator,\n }: HTTPWrapperDependencies & { CORS: CORSConfig },\n {\n consumableMediaTypes,\n produceableMediaTypes,\n consumableCharsets,\n produceableCharsets,\n validators,\n bodyValidator,\n },\n handler: WhookHandler,\n req,\n res,\n) {\n const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);\n const bufferLimit = bytes.parse(BUFFER_LIMIT);\n\n log?.(\n 'info',\n 'GCP_FUNCTIONS_REQUEST',\n JSON.stringify({\n url: req.originalUrl,\n method: req.method,\n body: req.body,\n // body: obfuscateEventBody(obfuscator, req.body),\n headers: obfuscator.obfuscateSensibleHeaders(req.headers),\n }),\n );\n\n const request = await gcpfReqToRequest(req);\n let parameters;\n let response;\n let responseLog;\n let responseSpec;\n\n log?.(\n 'debug',\n 'REQUEST',\n JSON.stringify({\n ...request,\n body: request.body ? 'Stream' : undefined,\n headers: obfuscator.obfuscateSensibleHeaders(request.headers),\n }),\n );\n\n try {\n const operation = OPERATION;\n const bodySpec = extractBodySpec(\n request,\n consumableMediaTypes,\n consumableCharsets,\n );\n\n responseSpec = extractResponseSpec(\n operation,\n request,\n produceableMediaTypes,\n produceableCharsets,\n );\n\n try {\n const body = await getBody(\n {\n DECODERS,\n PARSERS,\n bufferLimit,\n },\n operation,\n request.body as Readable,\n bodySpec,\n );\n const path = request.url.split(SEARCH_SEPARATOR)[0];\n const parts = path.split(PATH_SEPARATOR).filter(identity);\n const search = request.url.substr(\n request.url.split(SEARCH_SEPARATOR)[0].length,\n );\n\n const pathParameters = (\n OPERATION.path\n .split(PATH_SEPARATOR)\n .filter(identity)\n .map((part, index) => {\n const matches = /^\\{([\\d\\w]+)\\}$/i.exec(part);\n\n if (matches) {\n return {\n name: matches[1],\n value: parts[index],\n };\n }\n }) as Array<{ name: string; value: string }>\n )\n .filter(identity)\n .reduce(\n (accParameters, { name, value }) => ({\n ...accParameters,\n [name]: value,\n }),\n {},\n );\n\n // TODO: Update strictQS to handle OpenAPI 3\n const retroCompatibleQueryParameters = (OPERATION.parameters || [])\n .filter((p) => p.in === 'query')\n .map((p) => ({ ...p, ...p.schema }));\n\n parameters = {\n ...pathParameters,\n ...QUERY_PARSER(retroCompatibleQueryParameters as any, search),\n ...filterHeaders(operation.parameters, request.headers),\n };\n\n parameters = {\n // TODO: Use the security of the operation to infer\n // authorization parameters, see:\n // https://github.com/nfroidure/whook/blob/06ccae93d1d52d97ff70fd5e19fa826bdabf3968/packages/whook-http-router/src/validation.js#L110\n authorization: parameters.authorization,\n ...castParameters(operation.parameters || [], parameters),\n };\n\n applyValidators(operation, validators, parameters);\n\n bodyValidator(operation, bodySpec.contentType, body);\n\n parameters = {\n ...parameters,\n ...('undefined' !== typeof body ? { body } : {}),\n };\n } catch (err) {\n throw HTTPError.cast(err as Error, 400);\n }\n\n response = await executeHandler(operation, handler, parameters);\n\n if (response.body) {\n response.headers['content-type'] =\n response.headers['content-type'] || responseSpec.contentTypes[0];\n }\n\n // Check the stringifyer only when a schema is\n // specified and it is not a binary one\n const responseObject =\n operation.responses &&\n (operation.responses[response.status] as OpenAPIV3.ResponseObject);\n const responseSchema =\n responseObject &&\n responseObject.content &&\n responseObject.content[response.headers['content-type']] &&\n (responseObject.content[response.headers['content-type']]\n .schema as OpenAPIV3.SchemaObject);\n const responseHasSchema =\n responseSchema &&\n (responseSchema.type !== 'string' || responseSchema.format !== 'binary');\n\n if (responseHasSchema && !STRINGIFYERS[response.headers['content-type']]) {\n throw new HTTPError(\n 500,\n 'E_STRINGIFYER_LACK',\n response.headers['content-type'],\n );\n }\n if (response.body) {\n checkResponseMediaType(request, responseSpec, produceableMediaTypes);\n checkResponseCharset(request, responseSpec, produceableCharsets);\n }\n responseLog = {\n type: 'success',\n status: response.status,\n };\n log?.('debug', JSON.stringify(responseLog));\n } catch (err) {\n const castedError = HTTPError.cast(err as Error);\n\n responseLog = {\n type: 'error',\n code: castedError.code,\n statusCode: castedError.httpCode,\n params: castedError.params || [],\n stack: castedError.stack,\n };\n\n log?.('error', JSON.stringify(responseLog));\n response = {\n status: castedError.httpCode,\n headers: {\n ...lowerCaseHeaders(CORS),\n ...(castedError.headers ?? {}),\n 'content-type': 'application/json',\n },\n body: {\n error: {\n code: castedError.code,\n stack: debugging ? responseLog.stack : undefined,\n params: debugging ? responseLog.params : undefined,\n },\n },\n };\n }\n\n log?.(\n 'debug',\n 'RESPONSE',\n JSON.stringify({\n ...response,\n body: obfuscateEventBody(obfuscator, response.body),\n headers: obfuscator.obfuscateSensibleHeaders(response.headers),\n }),\n );\n\n await pipeResponseInGCPFResponse(\n await sendBody(\n {\n ENCODERS,\n STRINGIFYERS,\n },\n response,\n ),\n res,\n );\n}\n\nasync function gcpfReqToRequest(req): Promise<WhookRequest> {\n const request: WhookRequest = {\n method: req.method.toLowerCase(),\n headers: lowerCaseHeaders(req.headers || {}),\n url: req.originalUrl,\n };\n\n if (req.rawBody) {\n request.headers['content-length'] = req.rawBody.length.toString();\n const bodyStream = new stream.PassThrough();\n\n request.body = bodyStream;\n bodyStream.write(req.rawBody);\n bodyStream.end();\n }\n\n return request;\n}\n\nasync function pipeResponseInGCPFResponse(\n response: WhookResponse,\n res,\n): Promise<void> {\n Object.keys(response.headers || {}).forEach((headerName) => {\n res.set(headerName, response.headers?.[headerName]);\n });\n res.status(response.status);\n\n if (response.body) {\n (response.body as Readable).pipe(res);\n return;\n }\n\n res.end();\n}\n\nfunction obfuscateEventBody(obfuscator, rawBody) {\n if (typeof rawBody === 'string') {\n try {\n const jsonBody = JSON.parse(rawBody);\n\n return JSON.stringify(obfuscator.obfuscateSensibleProps(jsonBody));\n // eslint-disable-next-line\n } catch (err) {}\n }\n return rawBody;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"googleHTTPFunction.js","sourceRoot":"","sources":["../../src/wrappers/googleHTTPFunction.ts"],"names":[],"mappings":"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"}