@whook/gcp-functions 8.4.2 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -31
- package/dist/commands/testHTTPFunction.js +1 -1
- package/dist/commands/testHTTPFunction.js.map +1 -1
- package/dist/commands/testHTTPFunction.mjs.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/libs/utils.js.map +1 -1
- package/dist/libs/utils.mjs.map +1 -1
- package/dist/services/_autoload.d.ts +14 -2
- package/dist/services/_autoload.js +27 -21
- package/dist/services/_autoload.js.map +1 -1
- package/dist/services/_autoload.mjs +27 -21
- package/dist/services/_autoload.mjs.map +1 -1
- package/dist/services/log.d.ts +4 -1
- package/dist/services/log.js.map +1 -1
- package/dist/services/log.mjs.map +1 -1
- package/dist/services/log.test.js +1 -1
- package/dist/services/log.test.js.map +1 -1
- package/dist/services/log.test.mjs +1 -1
- package/dist/services/log.test.mjs.map +1 -1
- package/dist/wrappers/googleHTTPFunction.js +15 -13
- package/dist/wrappers/googleHTTPFunction.js.map +1 -1
- package/dist/wrappers/googleHTTPFunction.mjs +15 -13
- package/dist/wrappers/googleHTTPFunction.mjs.map +1 -1
- package/package.json +36 -37
- package/src/commands/testHTTPFunction.ts +6 -6
- package/src/index.ts +20 -14
- package/src/libs/utils.ts +1 -1
- package/src/services/_autoload.ts +123 -119
- package/src/services/log.test.ts +1 -1
- package/src/wrappers/googleHTTPFunction.ts +30 -28
|
@@ -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);
|
|
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]
|
|
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
|
-
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whook/gcp-functions",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
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
|
-
"@
|
|
54
|
-
"@whook/
|
|
55
|
-
"@whook/
|
|
56
|
-
"@whook/
|
|
57
|
-
"
|
|
58
|
-
"ajv": "^
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"common-services": "^9.0.1",
|
|
53
|
+
"@whook/cli": "^9.0.0",
|
|
54
|
+
"@whook/cors": "^9.0.0",
|
|
55
|
+
"@whook/http-router": "^9.0.0",
|
|
56
|
+
"@whook/whook": "^9.0.0",
|
|
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": "^
|
|
62
|
+
"knifecycle": "^12.0.4",
|
|
64
63
|
"mkdirp": "^1.0.4",
|
|
65
|
-
"openapi-types": "^
|
|
66
|
-
"qs": "^6.10.
|
|
67
|
-
"strict-qs": "^6.1.
|
|
68
|
-
"yerror": "^6.0.
|
|
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.
|
|
72
|
-
"@babel/core": "^7.
|
|
73
|
-
"@babel/eslint-parser": "^7.
|
|
74
|
-
"@babel/plugin-proposal-class-properties": "^7.
|
|
75
|
-
"@babel/plugin-proposal-object-rest-spread": "^7.
|
|
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.
|
|
79
|
-
"@babel/preset-typescript": "^7.
|
|
80
|
-
"@babel/register": "^7.
|
|
81
|
-
"@types/jest": "^
|
|
82
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
83
|
-
"@typescript-eslint/parser": "^
|
|
84
|
-
"babel-plugin-knifecycle": "^5.0.
|
|
85
|
-
"eslint": "^
|
|
86
|
-
"eslint-plugin-prettier": "^
|
|
87
|
-
"jest": "^
|
|
88
|
-
"jsdoc-to-markdown": "^7.
|
|
89
|
-
"metapak": "^4.0.
|
|
90
|
-
"metapak-nfroidure": "11.
|
|
91
|
-
"prettier": "^2.2
|
|
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.3",
|
|
89
|
+
"metapak-nfroidure": "11.2.1",
|
|
90
|
+
"prettier": "^2.6.2",
|
|
92
91
|
"rimraf": "^3.0.2",
|
|
93
|
-
"typescript": "^4.2
|
|
92
|
+
"typescript": "^4.7.2"
|
|
94
93
|
},
|
|
95
94
|
"contributors": [],
|
|
96
95
|
"engines": {
|
|
@@ -204,12 +203,12 @@
|
|
|
204
203
|
"compile:mjs": "babel --env-name=mjs --out-file-extension=.mjs --out-dir=dist --extensions '.ts,.js' --source-maps=true src",
|
|
205
204
|
"cover": "npm run jest -- --coverage",
|
|
206
205
|
"doc": "echo \"# API\" > API.md; jsdoc2md 'dist/**/*.js' >> API.md && git add API.md",
|
|
206
|
+
"genPackagelock": "npm i --package-lock-only",
|
|
207
207
|
"jest": "NODE_ENV=test jest",
|
|
208
208
|
"lint": "eslint 'src/**/*.ts'",
|
|
209
209
|
"metapak": "metapak",
|
|
210
210
|
"prettier": "prettier --write 'src/**/*.ts'",
|
|
211
211
|
"test": "npm run jest",
|
|
212
212
|
"types": "rimraf -f 'dist/**/*.d.ts' && tsc --project . --declaration --emitDeclarationOnly --outDir dist"
|
|
213
|
-
}
|
|
214
|
-
"gitHead": "da55737a566346baefed47764fec85f6984ed69d"
|
|
213
|
+
}
|
|
215
214
|
}
|
|
@@ -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
|
|
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,7 +16,13 @@ import {
|
|
|
16
16
|
dereferenceOpenAPIOperations,
|
|
17
17
|
getOpenAPIOperations,
|
|
18
18
|
} from '@whook/http-router';
|
|
19
|
-
import type {
|
|
19
|
+
import type {
|
|
20
|
+
Autoloader,
|
|
21
|
+
Dependencies,
|
|
22
|
+
BuildInitializer,
|
|
23
|
+
Initializer,
|
|
24
|
+
Service,
|
|
25
|
+
} from 'knifecycle';
|
|
20
26
|
import type {
|
|
21
27
|
WhookOperation,
|
|
22
28
|
WhookCompilerOptions,
|
|
@@ -57,7 +63,7 @@ const cprAsync = util.promisify(cpr) as (
|
|
|
57
63
|
) => Promise<string[]>;
|
|
58
64
|
|
|
59
65
|
const BUILD_DEFINITIONS: Record<
|
|
60
|
-
WhookAPIOperationGCPFunctionConfig['type']
|
|
66
|
+
NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,
|
|
61
67
|
{
|
|
62
68
|
type: string;
|
|
63
69
|
wrapper: { name: string; path: string };
|
|
@@ -74,9 +80,9 @@ const BUILD_DEFINITIONS: Record<
|
|
|
74
80
|
},
|
|
75
81
|
};
|
|
76
82
|
|
|
77
|
-
export async function prepareBuildEnvironment<
|
|
78
|
-
T
|
|
79
|
-
|
|
83
|
+
export async function prepareBuildEnvironment<T extends Knifecycle>(
|
|
84
|
+
$: T = new Knifecycle() as T,
|
|
85
|
+
): Promise<T> {
|
|
80
86
|
$.register(
|
|
81
87
|
constant('INITIALIZER_PATH_MAP', {
|
|
82
88
|
ENV: '@whook/whook/dist/services/ProxyedENV',
|
|
@@ -115,7 +121,7 @@ export async function runBuild(
|
|
|
115
121
|
PROJECT_DIR: string;
|
|
116
122
|
compiler: WhookCompilerService;
|
|
117
123
|
log: LogService;
|
|
118
|
-
$autoload: Autoloader
|
|
124
|
+
$autoload: Autoloader<Initializer<Dependencies, Service>>;
|
|
119
125
|
API: OpenAPIV3.Document;
|
|
120
126
|
buildInitializer: BuildInitializer;
|
|
121
127
|
} = await $.run([
|
|
@@ -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
|
}
|
|
@@ -194,7 +200,7 @@ async function processOperations(
|
|
|
194
200
|
PROJECT_DIR: string;
|
|
195
201
|
compiler: WhookCompilerService;
|
|
196
202
|
log: LogService;
|
|
197
|
-
$autoload: Autoloader
|
|
203
|
+
$autoload: Autoloader<Initializer<Dependencies, Service>>;
|
|
198
204
|
buildInitializer: BuildInitializer;
|
|
199
205
|
},
|
|
200
206
|
operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],
|
|
@@ -252,7 +258,7 @@ async function buildAnyLambda(
|
|
|
252
258
|
BUILD_OPTIONS: BuildOptions;
|
|
253
259
|
compiler: WhookCompilerService;
|
|
254
260
|
log: LogService;
|
|
255
|
-
$autoload: Autoloader
|
|
261
|
+
$autoload: Autoloader<Initializer<Dependencies, Service>>;
|
|
256
262
|
buildInitializer: BuildInitializer;
|
|
257
263
|
},
|
|
258
264
|
operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,
|
|
@@ -317,9 +323,9 @@ async function buildAnyLambda(
|
|
|
317
323
|
await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);
|
|
318
324
|
} catch (err) {
|
|
319
325
|
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);
|
|
326
|
+
log('error-stack', (err as Error).stack || 'no_stack_trace');
|
|
327
|
+
log('debug', JSON.stringify((err as YError).params, null, 2));
|
|
328
|
+
throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);
|
|
323
329
|
}
|
|
324
330
|
}
|
|
325
331
|
|