@whook/gcp-functions 8.5.0 → 9.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.
@@ -1,8 +1,8 @@
1
1
  const _excluded = ["OPERATION_API", "WRAPPERS", "NODE_ENV", "DEBUG_NODE_ENVS", "DECODERS", "ENCODERS", "log", "time"];
2
2
 
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
3
+ 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; }
4
4
 
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5
+ 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; }
6
6
 
7
7
  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; }
8
8
 
@@ -54,9 +54,9 @@ async function initHandlerForAWSHTTPFunction(initHandler, _ref) {
54
54
  verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
55
55
  strict: true,
56
56
  logger: {
57
- log: (...args) => log('debug', ...args),
58
- warn: (...args) => log('warning', ...args),
59
- error: (...args) => log('error', ...args)
57
+ log: (...args) => log === null || log === void 0 ? void 0 : log('debug', ...args),
58
+ warn: (...args) => log === null || log === void 0 ? void 0 : log('warning', ...args),
59
+ error: (...args) => log === null || log === void 0 ? void 0 : log('error', ...args)
60
60
  },
61
61
  useDefaults: true,
62
62
  coerceTypes: true
@@ -114,9 +114,9 @@ async function handleForAWSHTTPFunction({
114
114
  validators,
115
115
  bodyValidator
116
116
  }, handler, req, res) {
117
- const debugging = DEBUG_NODE_ENVS.includes(NODE_ENV);
117
+ const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
118
118
  const bufferLimit = bytes.parse(BUFFER_LIMIT);
119
- log('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
119
+ log === null || log === void 0 ? void 0 : log('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
120
120
  url: req.originalUrl,
121
121
  method: req.method,
122
122
  body: req.body,
@@ -128,7 +128,7 @@ async function handleForAWSHTTPFunction({
128
128
  let response;
129
129
  let responseLog;
130
130
  let responseSpec;
131
- log('debug', 'REQUEST', JSON.stringify(_objectSpread(_objectSpread({}, request), {}, {
131
+ log === null || log === void 0 ? void 0 : log('debug', 'REQUEST', JSON.stringify(_objectSpread(_objectSpread({}, request), {}, {
132
132
  body: request.body ? 'Stream' : undefined,
133
133
  headers: obfuscator.obfuscateSensibleHeaders(request.headers)
134
134
  })));
@@ -205,7 +205,7 @@ async function handleForAWSHTTPFunction({
205
205
  type: 'success',
206
206
  status: response.status
207
207
  };
208
- log('debug', JSON.stringify(responseLog));
208
+ log === null || log === void 0 ? void 0 : log('debug', JSON.stringify(responseLog));
209
209
  } catch (err) {
210
210
  var _castedError$headers;
211
211
 
@@ -217,7 +217,7 @@ async function handleForAWSHTTPFunction({
217
217
  params: castedError.params || [],
218
218
  stack: castedError.stack
219
219
  };
220
- log('error', JSON.stringify(responseLog));
220
+ log === null || log === void 0 ? void 0 : log('error', JSON.stringify(responseLog));
221
221
  response = {
222
222
  status: castedError.httpCode,
223
223
  headers: _objectSpread(_objectSpread(_objectSpread({}, lowerCaseHeaders(CORS)), (_castedError$headers = castedError.headers) !== null && _castedError$headers !== void 0 ? _castedError$headers : {}), {}, {
@@ -233,7 +233,7 @@ async function handleForAWSHTTPFunction({
233
233
  };
234
234
  }
235
235
 
236
- log('debug', 'RESPONSE', JSON.stringify(_objectSpread(_objectSpread({}, response), {}, {
236
+ log === null || log === void 0 ? void 0 : log('debug', 'RESPONSE', JSON.stringify(_objectSpread(_objectSpread({}, response), {}, {
237
237
  body: obfuscateEventBody(obfuscator, response.body),
238
238
  headers: obfuscator.obfuscateSensibleHeaders(response.headers)
239
239
  })));
@@ -262,8 +262,10 @@ async function gcpfReqToRequest(req) {
262
262
  }
263
263
 
264
264
  async function pipeResponseInGCPFResponse(response, res) {
265
- Object.keys(response.headers).forEach(headerName => {
266
- res.set(headerName, response.headers[headerName]);
265
+ Object.keys(response.headers || {}).forEach(headerName => {
266
+ var _response$headers;
267
+
268
+ res.set(headerName, (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers[headerName]);
267
269
  });
268
270
  res.status(response.status);
269
271
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/wrappers/googleHTTPFunction.ts"],"names":["DEFAULT_DEBUG_NODE_ENVS","DEFAULT_BUFFER_LIMIT","DEFAULT_PARSERS","DEFAULT_STRINGIFYERS","DEFAULT_DECODERS","DEFAULT_ENCODERS","extractOperationSecurityParameters","castParameters","reuseSpecialProps","alsoInject","Ajv","addAJVFormats","bytes","HTTPError","prepareParametersValidators","prepareBodyValidator","applyValidators","filterHeaders","extractBodySpec","extractResponseSpec","checkResponseCharset","checkResponseMediaType","executeHandler","extractProduceableMediaTypes","extractConsumableMediaTypes","getBody","sendBody","noop","compose","identity","lowerCaseHeaders","stream","SEARCH_SEPARATOR","PATH_SEPARATOR","wrapHandlerForAWSHTTPFunction","initHandler","initHandlerForAWSHTTPFunction","bind","OPERATION_API","WRAPPERS","NODE_ENV","DEBUG_NODE_ENVS","DECODERS","ENCODERS","log","time","Date","now","services","path","Object","keys","paths","method","OPERATION","consumableCharsets","produceableCharsets","consumableMediaTypes","produceableMediaTypes","ajv","verbose","includes","strict","logger","args","warn","error","useDefaults","coerceTypes","ammendedParameters","validators","operationId","parameters","concat","bodyValidator","applyWrappers","handler","handleForAWSHTTPFunction","PARSERS","STRINGIFYERS","BUFFER_LIMIT","QUERY_PARSER","CORS","obfuscator","req","res","debugging","bufferLimit","parse","JSON","stringify","url","originalUrl","body","headers","obfuscateSensibleHeaders","request","gcpfReqToRequest","response","responseLog","responseSpec","undefined","operation","bodySpec","split","parts","filter","search","substr","length","pathParameters","map","part","index","matches","exec","name","value","reduce","accParameters","retroCompatibleQueryParameters","p","in","schema","authorization","contentType","err","cast","contentTypes","responseObject","responses","status","responseSchema","content","responseHasSchema","type","format","castedError","code","statusCode","httpCode","params","stack","obfuscateEventBody","pipeResponseInGCPFResponse","toLowerCase","rawBody","toString","bodyStream","PassThrough","write","end","forEach","headerName","set","pipe","jsonBody","obfuscateSensibleProps"],"mappings":"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","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.bind(\n null,\n initHandler,\n ) as ServiceInitializer<D, S>,\n ),\n );\n}\n\nasync function initHandlerForAWSHTTPFunction(\n initHandler: ServiceInitializer<unknown, 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 = 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 })\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, 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);\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"],"file":"googleHTTPFunction.mjs"}
1
+ {"version":3,"file":"googleHTTPFunction.mjs","names":["DEFAULT_DEBUG_NODE_ENVS","DEFAULT_BUFFER_LIMIT","DEFAULT_PARSERS","DEFAULT_STRINGIFYERS","DEFAULT_DECODERS","DEFAULT_ENCODERS","extractOperationSecurityParameters","castParameters","reuseSpecialProps","alsoInject","Ajv","addAJVFormats","bytes","HTTPError","prepareParametersValidators","prepareBodyValidator","applyValidators","filterHeaders","extractBodySpec","extractResponseSpec","checkResponseCharset","checkResponseMediaType","executeHandler","extractProduceableMediaTypes","extractConsumableMediaTypes","getBody","sendBody","noop","compose","identity","lowerCaseHeaders","stream","SEARCH_SEPARATOR","PATH_SEPARATOR","wrapHandlerForAWSHTTPFunction","initHandler","initHandlerForAWSHTTPFunction","bind","OPERATION_API","WRAPPERS","NODE_ENV","DEBUG_NODE_ENVS","DECODERS","ENCODERS","log","time","Date","now","services","path","Object","keys","paths","method","OPERATION","consumableCharsets","produceableCharsets","consumableMediaTypes","produceableMediaTypes","ajv","verbose","includes","strict","logger","args","warn","error","useDefaults","coerceTypes","ammendedParameters","validators","operationId","parameters","concat","bodyValidator","applyWrappers","handler","handleForAWSHTTPFunction","PARSERS","STRINGIFYERS","BUFFER_LIMIT","QUERY_PARSER","CORS","obfuscator","req","res","debugging","bufferLimit","parse","JSON","stringify","url","originalUrl","body","headers","obfuscateSensibleHeaders","request","gcpfReqToRequest","response","responseLog","responseSpec","undefined","operation","bodySpec","split","parts","filter","search","substr","length","pathParameters","map","part","index","matches","exec","name","value","reduce","accParameters","retroCompatibleQueryParameters","p","in","schema","authorization","contentType","err","cast","contentTypes","responseObject","responses","status","responseSchema","content","responseHasSchema","type","format","castedError","code","statusCode","httpCode","params","stack","obfuscateEventBody","pipeResponseInGCPFResponse","toLowerCase","rawBody","toString","bodyStream","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":";;;;;;;;;;;;AAAA,SACEA,uBADF,EAEEC,oBAFF,EAGEC,eAHF,EAIEC,oBAJF,EAKEC,gBALF,EAMEC,gBANF,EAOEC,kCAPF,EAQEC,cARF,QASO,oBATP;AAUA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,YAA9C;AACA,OAAOC,GAAP,MAAgB,KAAhB;AACA,OAAOC,aAAP,MAA0B,aAA1B;AACA,OAAOC,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SACEC,2BADF,EAEEC,oBAFF,EAGEC,eAHF,EAIEC,aAJF,EAKEC,eALF,EAMEC,mBANF,EAOEC,oBAPF,EAQEC,sBARF,EASEC,cATF,EAUEC,4BAVF,EAWEC,2BAXF,EAYEC,OAZF,EAaEC,QAbF,QAcO,oBAdP;AAeA,SAASC,IAAT,EAAeC,OAAf,EAAwBC,QAAxB,EAAkCC,gBAAlC,QAA0D,cAA1D;AACA,OAAOC,MAAP,MAAmB,QAAnB;AAgCA,MAAMC,gBAAgB,GAAG,GAAzB;AACA,MAAMC,cAAc,GAAG,GAAvB;AAEA,eAAe,SAASC,6BAAT,CAIbC,WAJa,EAKuC;EACpD,OAAO1B,UAAU,CACf,CACE,eADF,EAEE,UAFF,EAGE,kBAHF,EAIE,UAJF,EAKE,WALF,EAME,WANF,EAOE,UAPF,EAQE,eARF,EASE,eATF,EAUE,cAVF,EAWE,YAXF,EAYE,MAZF,EAaE,OAbF,CADe,EAgBfD,iBAAiB,CACf2B,WADe,EAEdC,6BAAD,CAAuCC,IAAvC,CACE,IADF,EAEEF,WAFF,CAFe,CAhBF,CAAjB;AAwBD;;AAED,eAAeC,6BAAf,CACED,WADF,QAaE;EAAA,IAXA;IACEG,aADF;IAEEC,QAFF;IAGEC,QAHF;IAIEC,eAAe,GAAGzC,uBAJpB;IAKE0C,QAAQ,GAAGtC,gBALb;IAMEuC,QAAQ,GAAGtC,gBANb;IAOEuC,GAAG,GAAGjB,IAPR;IAQEkB,IAAI,GAAGC,IAAI,CAACC,GAAL,CAASV,IAAT,CAAcS,IAAd;EART,CAWA;EAAA,IAFKE,QAEL;;EACA,MAAMC,IAAI,GAAGC,MAAM,CAACC,IAAP,CAAYb,aAAa,CAACc,KAA1B,EAAiC,CAAjC,CAAb;EACA,MAAMC,MAAM,GAAGH,MAAM,CAACC,IAAP,CAAYb,aAAa,CAACc,KAAd,CAAoBH,IAApB,CAAZ,EAAuC,CAAvC,CAAf;;EACA,MAAMK,SAAyB;IAC7BL,IAD6B;IAE7BI;EAF6B,GAG1Bf,aAAa,CAACc,KAAd,CAAoBH,IAApB,EAA0BI,MAA1B,CAH0B,CAA/B;;EAKA,MAAME,kBAAkB,GAAGL,MAAM,CAACC,IAAP,CAAYT,QAAZ,CAA3B;EACA,MAAMc,mBAAmB,GAAGN,MAAM,CAACC,IAAP,CAAYR,QAAZ,CAA5B;EACA,MAAMc,oBAAoB,GAAGjC,2BAA2B,CAAC8B,SAAD,CAAxD;EACA,MAAMI,qBAAqB,GAAGnC,4BAA4B,CAAC+B,SAAD,CAA1D;EACA,MAAMK,GAAG,GAAG,IAAIjD,GAAJ,CAAQ;IAClBkD,OAAO,EAAEnB,eAAe,CAACoB,QAAhB,CAAyBrB,QAAzB,CADS;IAElBsB,MAAM,EAAE,IAFU;IAGlBC,MAAM,EAAE;MACNnB,GAAG,EAAE,CAAC,GAAGoB,IAAJ,KAAapB,GAAb,aAAaA,GAAb,uBAAaA,GAAG,CAAG,OAAH,EAAY,GAAGoB,IAAf,CADf;MAENC,IAAI,EAAE,CAAC,GAAGD,IAAJ,KAAapB,GAAb,aAAaA,GAAb,uBAAaA,GAAG,CAAG,SAAH,EAAc,GAAGoB,IAAjB,CAFhB;MAGNE,KAAK,EAAE,CAAC,GAAGF,IAAJ,KAAapB,GAAb,aAAaA,GAAb,uBAAaA,GAAG,CAAG,OAAH,EAAY,GAAGoB,IAAf;IAHjB,CAHU;IAQlBG,WAAW,EAAE,IARK;IASlBC,WAAW,EAAE;EATK,CAAR,CAAZ;EAWAzD,aAAa,CAACgD,GAAD,CAAb;EACA,MAAMU,kBAAkB,GAAG/D,kCAAkC,CAC3DgC,aAD2D,EAE3DgB,SAF2D,CAA7D;EAIA,MAAMgB,UAAU,GAAGxD,2BAA2B,CAC5C6C,GAD4C,EAE5CL,SAAS,CAACiB,WAFkC,EAG5C,CAAEjB,SAAS,CAACkB,UAAV,IAAwB,EAA1B,EAA8DC,MAA9D,CACEJ,kBADF,CAH4C,CAA9C;EAOA,MAAMK,aAAa,GAAG3D,oBAAoB,CAAC4C,GAAD,EAAML,SAAN,CAA1C;EACA,MAAMqB,aAAa,GAAG/C,OAAO,CAAC,GAAGW,QAAJ,CAA7B;EAKA,MAAMqC,OAAO,GAAG,MACdD,aAAa,CAACxC,WAAD,CADO;IAGpBmB,SAHoB;IAIpBb,eAJoB;IAKpBD;EALoB,GAMjBQ,QANiB;IAOpBH,IAPoB;IAQpBD;EARoB,GAAtB;EAWA,OAAOiC,wBAAwB,CAACxC,IAAzB,CACL,IADK;IAGHiB,SAHG;IAIHd,QAJG;IAKHC,eALG;IAMHC,QANG;IAOHC,QAPG;IAQHC,GARG;IASHC;EATG,GAUAG,QAVA,GAYL;IACES,oBADF;IAEEC,qBAFF;IAGEH,kBAHF;IAIEC,mBAJF;IAKEc,UALF;IAMEI,aANF;IAOEL;EAPF,CAZK,EAqBLO,OArBK,CAAP;AAuBD;;AAED,eAAeC,wBAAf,CACE;EACEvB,SADF;EAEEb,eAFF;EAGED,QAHF;EAIEG,QAJF;EAKED,QALF;EAMEoC,OAAO,GAAG5E,eANZ;EAOE6E,YAAY,GAAG5E,oBAPjB;EAQE6E,YAAY,GAAG/E,oBARjB;EASEgF,YATF;EAUEC,IAVF;EAWEtC,GAXF;EAYEuC;AAZF,CADF,EAeE;EACE1B,oBADF;EAEEC,qBAFF;EAGEH,kBAHF;EAIEC,mBAJF;EAKEc,UALF;EAMEI;AANF,CAfF,EAuBEE,OAvBF,EAwBEQ,GAxBF,EAyBEC,GAzBF,EA0BE;EACA,MAAMC,SAAS,GAAG,CAAC7C,eAAe,IAAI,EAApB,EAAwBoB,QAAxB,CAAiCrB,QAAjC,CAAlB;EACA,MAAM+C,WAAW,GAAG3E,KAAK,CAAC4E,KAAN,CAAYR,YAAZ,CAApB;EAEApC,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CACD,MADC,EAED,uBAFC,EAGD6C,IAAI,CAACC,SAAL,CAAe;IACbC,GAAG,EAAEP,GAAG,CAACQ,WADI;IAEbvC,MAAM,EAAE+B,GAAG,CAAC/B,MAFC;IAGbwC,IAAI,EAAET,GAAG,CAACS,IAHG;IAIb;IACAC,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCX,GAAG,CAACU,OAAxC;EALI,CAAf,CAHC,CAAH;EAYA,MAAME,OAAO,GAAG,MAAMC,gBAAgB,CAACb,GAAD,CAAtC;EACA,IAAIZ,UAAJ;EACA,IAAI0B,QAAJ;EACA,IAAIC,WAAJ;EACA,IAAIC,YAAJ;EAEAxD,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CACD,OADC,EAED,SAFC,EAGD6C,IAAI,CAACC,SAAL,iCACKM,OADL;IAEEH,IAAI,EAAEG,OAAO,CAACH,IAAR,GAAe,QAAf,GAA0BQ,SAFlC;IAGEP,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCC,OAAO,CAACF,OAA5C;EAHX,GAHC,CAAH;;EAUA,IAAI;IACF,MAAMQ,SAAS,GAAGhD,SAAlB;IACA,MAAMiD,QAAQ,GAAGrF,eAAe,CAC9B8E,OAD8B,EAE9BvC,oBAF8B,EAG9BF,kBAH8B,CAAhC;IAMA6C,YAAY,GAAGjF,mBAAmB,CAChCmF,SADgC,EAEhCN,OAFgC,EAGhCtC,qBAHgC,EAIhCF,mBAJgC,CAAlC;;IAOA,IAAI;MACF,MAAMqC,IAAI,GAAG,MAAMpE,OAAO,CACxB;QACEiB,QADF;QAEEoC,OAFF;QAGES;MAHF,CADwB,EAMxBe,SANwB,EAOxBN,OAAO,CAACH,IAPgB,EAQxBU,QARwB,CAA1B;MAUA,MAAMtD,IAAI,GAAG+C,OAAO,CAACL,GAAR,CAAYa,KAAZ,CAAkBxE,gBAAlB,EAAoC,CAApC,CAAb;MACA,MAAMyE,KAAK,GAAGxD,IAAI,CAACuD,KAAL,CAAWvE,cAAX,EAA2ByE,MAA3B,CAAkC7E,QAAlC,CAAd;MACA,MAAM8E,MAAM,GAAGX,OAAO,CAACL,GAAR,CAAYiB,MAAZ,CACbZ,OAAO,CAACL,GAAR,CAAYa,KAAZ,CAAkBxE,gBAAlB,EAAoC,CAApC,EAAuC6E,MAD1B,CAAf;MAIA,MAAMC,cAAc,GAClBxD,SAAS,CAACL,IAAV,CACGuD,KADH,CACSvE,cADT,EAEGyE,MAFH,CAEU7E,QAFV,EAGGkF,GAHH,CAGO,CAACC,IAAD,EAAOC,KAAP,KAAiB;QACpB,MAAMC,OAAO,GAAG,mBAAmBC,IAAnB,CAAwBH,IAAxB,CAAhB;;QAEA,IAAIE,OAAJ,EAAa;UACX,OAAO;YACLE,IAAI,EAAEF,OAAO,CAAC,CAAD,CADR;YAELG,KAAK,EAAEZ,KAAK,CAACQ,KAAD;UAFP,CAAP;QAID;MACF,CAZH,CADqB,CAepBP,MAfoB,CAeb7E,QAfa,EAgBpByF,MAhBoB,CAiBnB,CAACC,aAAD,EAAgB;QAAEH,IAAF;QAAQC;MAAR,CAAhB,qCACKE,aADL;QAEE,CAACH,IAAD,GAAQC;MAFV,EAjBmB,EAqBnB,EArBmB,CAAvB,CAjBE,CAyCF;;MACA,MAAMG,8BAA8B,GAAG,CAAClE,SAAS,CAACkB,UAAV,IAAwB,EAAzB,EACpCkC,MADoC,CAC5Be,CAAD,IAAOA,CAAC,CAACC,EAAF,KAAS,OADa,EAEpCX,GAFoC,CAE/BU,CAAD,oCAAaA,CAAb,GAAmBA,CAAC,CAACE,MAArB,CAFgC,CAAvC;MAIAnD,UAAU,iDACLsC,cADK,GAEL7B,YAAY,CAACuC,8BAAD,EAAwCb,MAAxC,CAFP,GAGL1F,aAAa,CAACqF,SAAS,CAAC9B,UAAX,EAAuBwB,OAAO,CAACF,OAA/B,CAHR,CAAV;MAMAtB,UAAU;QACR;QACA;QACA;QACAoD,aAAa,EAAEpD,UAAU,CAACoD;MAJlB,GAKLrH,cAAc,CAAC+F,SAAS,CAAC9B,UAAV,IAAwB,EAAzB,EAA6BA,UAA7B,CALT,CAAV;MAQAxD,eAAe,CAACsF,SAAD,EAAYhC,UAAZ,EAAwBE,UAAxB,CAAf;MAEAE,aAAa,CAAC4B,SAAD,EAAYC,QAAQ,CAACsB,WAArB,EAAkChC,IAAlC,CAAb;MAEArB,UAAU,mCACLA,UADK,GAEJ,gBAAgB,OAAOqB,IAAvB,GAA8B;QAAEA;MAAF,CAA9B,GAAyC,EAFrC,CAAV;IAID,CApED,CAoEE,OAAOiC,GAAP,EAAY;MACZ,MAAMjH,SAAS,CAACkH,IAAV,CAAeD,GAAf,EAA6B,GAA7B,CAAN;IACD;;IAED5B,QAAQ,GAAG,MAAM5E,cAAc,CAACgF,SAAD,EAAY1B,OAAZ,EAAqBJ,UAArB,CAA/B;;IAEA,IAAI0B,QAAQ,CAACL,IAAb,EAAmB;MACjBK,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,IACEI,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,KAAoCM,YAAY,CAAC4B,YAAb,CAA0B,CAA1B,CADtC;IAED,CA5FC,CA8FF;IACA;;;IACA,MAAMC,cAAc,GAClB3B,SAAS,CAAC4B,SAAV,IACC5B,SAAS,CAAC4B,SAAV,CAAoBhC,QAAQ,CAACiC,MAA7B,CAFH;IAGA,MAAMC,cAAc,GAClBH,cAAc,IACdA,cAAc,CAACI,OADf,IAEAJ,cAAc,CAACI,OAAf,CAAuBnC,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAAvB,CAFA,IAGCmC,cAAc,CAACI,OAAf,CAAuBnC,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAAvB,EACE6B,MALL;IAMA,MAAMW,iBAAiB,GACrBF,cAAc,KACbA,cAAc,CAACG,IAAf,KAAwB,QAAxB,IAAoCH,cAAc,CAACI,MAAf,KAA0B,QADjD,CADhB;;IAIA,IAAIF,iBAAiB,IAAI,CAACvD,YAAY,CAACmB,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAAD,CAAtC,EAA0E;MACxE,MAAM,IAAIjF,SAAJ,CACJ,GADI,EAEJ,oBAFI,EAGJqF,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAHI,CAAN;IAKD;;IACD,IAAII,QAAQ,CAACL,IAAb,EAAmB;MACjBxE,sBAAsB,CAAC2E,OAAD,EAAUI,YAAV,EAAwB1C,qBAAxB,CAAtB;MACAtC,oBAAoB,CAAC4E,OAAD,EAAUI,YAAV,EAAwB5C,mBAAxB,CAApB;IACD;;IACD2C,WAAW,GAAG;MACZoC,IAAI,EAAE,SADM;MAEZJ,MAAM,EAAEjC,QAAQ,CAACiC;IAFL,CAAd;IAIAvF,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CAAG,OAAH,EAAY6C,IAAI,CAACC,SAAL,CAAeS,WAAf,CAAZ,CAAH;EACD,CA7HD,CA6HE,OAAO2B,GAAP,EAAY;IAAA;;IACZ,MAAMW,WAAW,GAAG5H,SAAS,CAACkH,IAAV,CAAeD,GAAf,CAApB;IAEA3B,WAAW,GAAG;MACZoC,IAAI,EAAE,OADM;MAEZG,IAAI,EAAED,WAAW,CAACC,IAFN;MAGZC,UAAU,EAAEF,WAAW,CAACG,QAHZ;MAIZC,MAAM,EAAEJ,WAAW,CAACI,MAAZ,IAAsB,EAJlB;MAKZC,KAAK,EAAEL,WAAW,CAACK;IALP,CAAd;IAQAlG,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CAAG,OAAH,EAAY6C,IAAI,CAACC,SAAL,CAAeS,WAAf,CAAZ,CAAH;IACAD,QAAQ,GAAG;MACTiC,MAAM,EAAEM,WAAW,CAACG,QADX;MAET9C,OAAO,gDACFhE,gBAAgB,CAACoD,IAAD,CADd,2BAEDuD,WAAW,CAAC3C,OAFX,uEAEsB,EAFtB;QAGL,gBAAgB;MAHX,EAFE;MAOTD,IAAI,EAAE;QACJ3B,KAAK,EAAE;UACLwE,IAAI,EAAED,WAAW,CAACC,IADb;UAELI,KAAK,EAAExD,SAAS,GAAGa,WAAW,CAAC2C,KAAf,GAAuBzC,SAFlC;UAGLwC,MAAM,EAAEvD,SAAS,GAAGa,WAAW,CAAC0C,MAAf,GAAwBxC;QAHpC;MADH;IAPG,CAAX;EAeD;;EAEDzD,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CACD,OADC,EAED,UAFC,EAGD6C,IAAI,CAACC,SAAL,iCACKQ,QADL;IAEEL,IAAI,EAAEkD,kBAAkB,CAAC5D,UAAD,EAAae,QAAQ,CAACL,IAAtB,CAF1B;IAGEC,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCG,QAAQ,CAACJ,OAA7C;EAHX,GAHC,CAAH;EAUA,MAAMkD,0BAA0B,CAC9B,MAAMtH,QAAQ,CACZ;IACEiB,QADF;IAEEoC;EAFF,CADY,EAKZmB,QALY,CADgB,EAQ9Bb,GAR8B,CAAhC;AAUD;;AAED,eAAeY,gBAAf,CAAgCb,GAAhC,EAA4D;EAC1D,MAAMY,OAAqB,GAAG;IAC5B3C,MAAM,EAAE+B,GAAG,CAAC/B,MAAJ,CAAW4F,WAAX,EADoB;IAE5BnD,OAAO,EAAEhE,gBAAgB,CAACsD,GAAG,CAACU,OAAJ,IAAe,EAAhB,CAFG;IAG5BH,GAAG,EAAEP,GAAG,CAACQ;EAHmB,CAA9B;;EAMA,IAAIR,GAAG,CAAC8D,OAAR,EAAiB;IACflD,OAAO,CAACF,OAAR,CAAgB,gBAAhB,IAAoCV,GAAG,CAAC8D,OAAJ,CAAYrC,MAAZ,CAAmBsC,QAAnB,EAApC;IACA,MAAMC,UAAU,GAAG,IAAIrH,MAAM,CAACsH,WAAX,EAAnB;IAEArD,OAAO,CAACH,IAAR,GAAeuD,UAAf;IACAA,UAAU,CAACE,KAAX,CAAiBlE,GAAG,CAAC8D,OAArB;IACAE,UAAU,CAACG,GAAX;EACD;;EAED,OAAOvD,OAAP;AACD;;AAED,eAAegD,0BAAf,CACE9C,QADF,EAEEb,GAFF,EAGiB;EACfnC,MAAM,CAACC,IAAP,CAAY+C,QAAQ,CAACJ,OAAT,IAAoB,EAAhC,EAAoC0D,OAApC,CAA6CC,UAAD,IAAgB;IAAA;;IAC1DpE,GAAG,CAACqE,GAAJ,CAAQD,UAAR,uBAAoBvD,QAAQ,CAACJ,OAA7B,sDAAoB,kBAAmB2D,UAAnB,CAApB;EACD,CAFD;EAGApE,GAAG,CAAC8C,MAAJ,CAAWjC,QAAQ,CAACiC,MAApB;;EAEA,IAAIjC,QAAQ,CAACL,IAAb,EAAmB;IAChBK,QAAQ,CAACL,IAAV,CAA4B8D,IAA5B,CAAiCtE,GAAjC;IACA;EACD;;EAEDA,GAAG,CAACkE,GAAJ;AACD;;AAED,SAASR,kBAAT,CAA4B5D,UAA5B,EAAwC+D,OAAxC,EAAiD;EAC/C,IAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;IAC/B,IAAI;MACF,MAAMU,QAAQ,GAAGnE,IAAI,CAACD,KAAL,CAAW0D,OAAX,CAAjB;MAEA,OAAOzD,IAAI,CAACC,SAAL,CAAeP,UAAU,CAAC0E,sBAAX,CAAkCD,QAAlC,CAAf,CAAP,CAHE,CAIF;IACD,CALD,CAKE,OAAO9B,GAAP,EAAY,CAAE;EACjB;;EACD,OAAOoB,OAAP;AACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whook/gcp-functions",
3
- "version": "8.5.0",
3
+ "version": "9.0.1",
4
4
  "description": "Build and deploy to GCP Cloud Functions with Whook.",
5
5
  "main": "dist/index",
6
6
  "module": "dist/index.mjs",
@@ -50,47 +50,46 @@
50
50
  },
51
51
  "homepage": "https://github.com/nfroidure/whook",
52
52
  "dependencies": {
53
- "@types/bytes": "^3.1.0",
54
- "@whook/cli": "^8.5.0",
55
- "@whook/cors": "^8.5.0",
56
- "@whook/http-router": "^8.5.0",
57
- "@whook/whook": "^8.5.0",
58
- "ajv": "^8.6.3",
59
- "ajv-formats": "^2.1.0",
60
- "camelcase": "^6.2.0",
61
- "common-services": "^9.0.1",
53
+ "@whook/cli": "^9.0.1",
54
+ "@whook/cors": "^9.0.1",
55
+ "@whook/http-router": "^9.0.1",
56
+ "@whook/whook": "^9.0.1",
57
+ "ajv": "^8.11.0",
58
+ "ajv-formats": "^2.1.1",
59
+ "camelcase": "^6.3.0",
60
+ "common-services": "^10.0.2",
62
61
  "cpr": "3.0.1",
63
- "knifecycle": "^11.1.1",
62
+ "knifecycle": "^12.0.4",
64
63
  "mkdirp": "^1.0.4",
65
- "openapi-types": "^9.3.0",
66
- "qs": "^6.10.1",
67
- "strict-qs": "^6.1.4",
68
- "yerror": "^6.0.1"
64
+ "openapi-types": "^11.0.1",
65
+ "qs": "^6.10.3",
66
+ "strict-qs": "^6.1.5",
67
+ "yerror": "^6.0.2"
69
68
  },
70
69
  "devDependencies": {
71
- "@babel/cli": "^7.13.14",
72
- "@babel/core": "^7.13.15",
73
- "@babel/eslint-parser": "^7.13.14",
74
- "@babel/plugin-proposal-class-properties": "^7.13.0",
75
- "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
70
+ "@babel/cli": "^7.17.10",
71
+ "@babel/core": "^7.18.2",
72
+ "@babel/eslint-parser": "^7.18.2",
73
+ "@babel/plugin-proposal-class-properties": "^7.17.12",
74
+ "@babel/plugin-proposal-object-rest-spread": "^7.18.0",
76
75
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
77
76
  "@babel/plugin-syntax-import-meta": "^7.10.4",
78
- "@babel/preset-env": "^7.13.15",
79
- "@babel/preset-typescript": "^7.13.0",
80
- "@babel/register": "^7.13.14",
81
- "@types/jest": "^26.0.22",
82
- "@typescript-eslint/eslint-plugin": "^4.21.0",
83
- "@typescript-eslint/parser": "^4.21.0",
84
- "babel-plugin-knifecycle": "^5.0.1",
85
- "eslint": "^7.23.0",
86
- "eslint-plugin-prettier": "^3.3.1",
87
- "jest": "^26.6.3",
88
- "jsdoc-to-markdown": "^7.0.1",
89
- "metapak": "^4.0.2",
90
- "metapak-nfroidure": "11.0.7",
91
- "prettier": "^2.2.1",
77
+ "@babel/preset-env": "^7.18.2",
78
+ "@babel/preset-typescript": "^7.17.12",
79
+ "@babel/register": "^7.17.7",
80
+ "@types/jest": "^27.0.2",
81
+ "@typescript-eslint/eslint-plugin": "^5.26.0",
82
+ "@typescript-eslint/parser": "^5.26.0",
83
+ "babel-plugin-knifecycle": "^5.0.3",
84
+ "eslint": "^8.16.0",
85
+ "eslint-plugin-prettier": "^4.0.0",
86
+ "jest": "^28.1.0",
87
+ "jsdoc-to-markdown": "^7.1.1",
88
+ "metapak": "^4.0.4",
89
+ "metapak-nfroidure": "11.2.1",
90
+ "prettier": "^2.6.2",
92
91
  "rimraf": "^3.0.2",
93
- "typescript": "^4.2.4"
92
+ "typescript": "^4.7.2"
94
93
  },
95
94
  "contributors": [],
96
95
  "engines": {
@@ -212,5 +211,5 @@
212
211
  "test": "npm run jest",
213
212
  "types": "rimraf -f 'dist/**/*.d.ts' && tsc --project . --declaration --emitDeclarationOnly --outDir dist"
214
213
  },
215
- "gitHead": "60e3b5f703b9c27728f658ca21d0b7c32751f868"
214
+ "gitHead": "a5620b3eacf3b500a5db59db9997bf7ed60668d5"
216
215
  }
@@ -143,7 +143,7 @@ async function initTestHTTPLambdaCommand({
143
143
  if (hasBody) {
144
144
  gcpfRequest.headers['content-type'] = `${contentType};charset=UTF-8`;
145
145
  }
146
- log('info', 'GCPF_REQUEST:', gcpfRequest);
146
+ log('info', 'GCPF_REQUEST:', gcpfRequest as unknown as string);
147
147
 
148
148
  const response = {
149
149
  status: 0,
@@ -151,18 +151,18 @@ async function initTestHTTPLambdaCommand({
151
151
  data: '',
152
152
  };
153
153
  await new Promise<void>((resolve, reject) => {
154
- const gcpfResponse: any = new stream.PassThrough();
154
+ const gcpfResponse = new stream.PassThrough();
155
155
 
156
- gcpfResponse.set = (name: string, value: string) => {
156
+ (gcpfResponse as any).set = (name: string, value: string): void => {
157
157
  response.headers[name] = value;
158
158
  };
159
- gcpfResponse.status = (code: number) => {
159
+ (gcpfResponse as any).status = (code: number): void => {
160
160
  response.status = code;
161
161
  };
162
162
 
163
163
  handler(gcpfRequest, gcpfResponse).catch(reject);
164
164
 
165
- const chunks = [];
165
+ const chunks = [] as Buffer[];
166
166
 
167
167
  gcpfResponse.once('end', () => {
168
168
  response.data = Buffer.concat(chunks).toString();
@@ -170,7 +170,7 @@ async function initTestHTTPLambdaCommand({
170
170
  });
171
171
  gcpfResponse.once('error', reject);
172
172
  gcpfResponse.on('readable', () => {
173
- let data;
173
+ let data: Buffer;
174
174
  while ((data = gcpfResponse.read())) {
175
175
  chunks.push(data);
176
176
  }
package/src/index.ts CHANGED
@@ -16,21 +16,26 @@ import {
16
16
  dereferenceOpenAPIOperations,
17
17
  getOpenAPIOperations,
18
18
  } from '@whook/http-router';
19
- import type { Autoloader, Dependencies, BuildInitializer } from 'knifecycle';
19
+ import type {
20
+ Autoloader,
21
+ Dependencies,
22
+ BuildInitializer,
23
+ Initializer,
24
+ Service,
25
+ } from 'knifecycle';
20
26
  import type {
21
27
  WhookOperation,
28
+ WhookCompilerConfig,
22
29
  WhookCompilerOptions,
23
30
  WhookCompilerService,
24
31
  } from '@whook/whook';
25
32
  import type { OpenAPIV3 } from 'openapi-types';
26
33
  import type { LogService } from 'common-services';
27
34
  import type { CprOptions } from 'cpr';
28
- import type { BuildOptions } from 'knifecycle/dist/build';
29
35
 
30
36
  export const DEFAULT_BUILD_PARALLELISM = 10;
31
37
 
32
- export type WhookBuildConfig = {
33
- BUILD_OPTIONS?: BuildOptions;
38
+ export type WhookGCPBuildConfig = {
34
39
  BUILD_PARALLELISM?: number;
35
40
  };
36
41
  export type WhookAPIOperationGCPFunctionConfig = {
@@ -57,7 +62,7 @@ const cprAsync = util.promisify(cpr) as (
57
62
  ) => Promise<string[]>;
58
63
 
59
64
  const BUILD_DEFINITIONS: Record<
60
- WhookAPIOperationGCPFunctionConfig['type'],
65
+ NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,
61
66
  {
62
67
  type: string;
63
68
  wrapper: { name: string; path: string };
@@ -74,9 +79,9 @@ const BUILD_DEFINITIONS: Record<
74
79
  },
75
80
  };
76
81
 
77
- export async function prepareBuildEnvironment<
78
- T extends Knifecycle<Dependencies>,
79
- >($: T = new Knifecycle() as T): Promise<T> {
82
+ export async function prepareBuildEnvironment<T extends Knifecycle>(
83
+ $: T = new Knifecycle() as T,
84
+ ): Promise<T> {
80
85
  $.register(
81
86
  constant('INITIALIZER_PATH_MAP', {
82
87
  ENV: '@whook/whook/dist/services/ProxyedENV',
@@ -110,15 +115,16 @@ export async function runBuild(
110
115
  $autoload,
111
116
  API,
112
117
  buildInitializer,
113
- }: WhookBuildConfig & {
114
- NODE_ENV: string;
115
- PROJECT_DIR: string;
116
- compiler: WhookCompilerService;
117
- log: LogService;
118
- $autoload: Autoloader;
119
- API: OpenAPIV3.Document;
120
- buildInitializer: BuildInitializer;
121
- } = await $.run([
118
+ }: WhookGCPBuildConfig &
119
+ Pick<WhookCompilerConfig, 'BUILD_OPTIONS'> & {
120
+ NODE_ENV: string;
121
+ PROJECT_DIR: string;
122
+ compiler: WhookCompilerService;
123
+ log: LogService;
124
+ $autoload: Autoloader<Initializer<Dependencies, Service>>;
125
+ API: OpenAPIV3.Document;
126
+ buildInitializer: BuildInitializer;
127
+ } = await $.run([
122
128
  'NODE_ENV',
123
129
  '?BUILD_PARALLELISM',
124
130
  '?BUILD_OPTIONS',
@@ -131,7 +137,7 @@ export async function runBuild(
131
137
  'buildInitializer',
132
138
  ]);
133
139
 
134
- log('info', 'Environment initialized 🚀🌕');
140
+ log('info', 'GCP Functions build Environment initialized 🚀🌕');
135
141
 
136
142
  const operations = (
137
143
  await dereferenceOpenAPIOperations(
@@ -170,8 +176,8 @@ export async function runBuild(
170
176
  // eslint-disable-next-line
171
177
  console.error(
172
178
  '💀 - Cannot launch the build:',
173
- err.stack,
174
- JSON.stringify(err.params, null, 2),
179
+ (err as YError).stack,
180
+ JSON.stringify((err as YError).params, null, 2),
175
181
  );
176
182
  process.exit(1);
177
183
  }
@@ -187,14 +193,13 @@ async function processOperations(
187
193
  log,
188
194
  $autoload,
189
195
  buildInitializer,
190
- }: {
196
+ }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {
191
197
  NODE_ENV: string;
192
198
  BUILD_PARALLELISM: number;
193
- BUILD_OPTIONS: BuildOptions;
194
199
  PROJECT_DIR: string;
195
200
  compiler: WhookCompilerService;
196
201
  log: LogService;
197
- $autoload: Autoloader;
202
+ $autoload: Autoloader<Initializer<Dependencies, Service>>;
198
203
  buildInitializer: BuildInitializer;
199
204
  },
200
205
  operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],
@@ -246,13 +251,12 @@ async function buildAnyLambda(
246
251
  log,
247
252
  $autoload,
248
253
  buildInitializer,
249
- }: {
254
+ }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {
250
255
  NODE_ENV: string;
251
256
  PROJECT_DIR: string;
252
- BUILD_OPTIONS: BuildOptions;
253
257
  compiler: WhookCompilerService;
254
258
  log: LogService;
255
- $autoload: Autoloader;
259
+ $autoload: Autoloader<Initializer<Dependencies, Service>>;
256
260
  buildInitializer: BuildInitializer;
257
261
  },
258
262
  operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,
@@ -317,16 +321,16 @@ async function buildAnyLambda(
317
321
  await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);
318
322
  } catch (err) {
319
323
  log('error', `Error building "${operationId}"...`);
320
- log('stack', err.stack);
321
- log('debug', JSON.stringify(err.params, null, 2));
322
- throw YError.wrap(err, 'E_LAMBDA_BUILD', operationId);
324
+ log('error-stack', (err as Error).stack || 'no_stack_trace');
325
+ log('debug', JSON.stringify((err as YError).params, null, 2));
326
+ throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);
323
327
  }
324
328
  }
325
329
 
326
330
  async function buildLambdaIndex(
327
331
  rootNode: { path: string },
328
332
  buildWrapper: { name: string; path: string },
329
- options: BuildOptions,
333
+ options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,
330
334
  ): Promise<string> {
331
335
  return `${
332
336
  options.modules === 'commonjs'
package/src/libs/utils.ts CHANGED
@@ -38,6 +38,6 @@ export async function loadLambda(
38
38
 
39
39
  return module.default;
40
40
  } catch (err) {
41
- throw YError.wrap(err, 'E_LAMBDA_LOAD');
41
+ throw YError.wrap(err as Error, 'E_LAMBDA_LOAD');
42
42
  }
43
43
  }