@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.
- package/README.md +44 -32
- package/dist/commands/testHTTPFunction.js.map +1 -1
- package/dist/commands/testHTTPFunction.mjs.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.js +2 -2
- 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 +35 -36
- package/src/commands/testHTTPFunction.ts +6 -6
- package/src/index.ts +34 -30
- 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":";;;;;;;;;;;;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;AACpD,SAAO1B,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,EAEfC,6BAA6B,CAACC,IAA9B,CACE,IADF,EAEEF,WAFF,CAFe,CAhBF,CAAjB;AAwBD;;AAED,eAAeC,6BAAf,CACED,WADF,QAaE;AAAA,MAXA;AACEG,IAAAA,aADF;AAEEC,IAAAA,QAFF;AAGEC,IAAAA,QAHF;AAIEC,IAAAA,eAAe,GAAGzC,uBAJpB;AAKE0C,IAAAA,QAAQ,GAAGtC,gBALb;AAMEuC,IAAAA,QAAQ,GAAGtC,gBANb;AAOEuC,IAAAA,GAAG,GAAGjB,IAPR;AAQEkB,IAAAA,IAAI,GAAGC,IAAI,CAACC,GAAL,CAASV,IAAT,CAAcS,IAAd;AART,GAWA;AAAA,MAFKE,QAEL;;AACA,QAAMC,IAAI,GAAGC,MAAM,CAACC,IAAP,CAAYb,aAAa,CAACc,KAA1B,EAAiC,CAAjC,CAAb;AACA,QAAMC,MAAM,GAAGH,MAAM,CAACC,IAAP,CAAYb,aAAa,CAACc,KAAd,CAAoBH,IAApB,CAAZ,EAAuC,CAAvC,CAAf;;AACA,QAAMK,SAAyB;AAC7BL,IAAAA,IAD6B;AAE7BI,IAAAA;AAF6B,KAG1Bf,aAAa,CAACc,KAAd,CAAoBH,IAApB,EAA0BI,MAA1B,CAH0B,CAA/B;;AAKA,QAAME,kBAAkB,GAAGL,MAAM,CAACC,IAAP,CAAYT,QAAZ,CAA3B;AACA,QAAMc,mBAAmB,GAAGN,MAAM,CAACC,IAAP,CAAYR,QAAZ,CAA5B;AACA,QAAMc,oBAAoB,GAAGjC,2BAA2B,CAAC8B,SAAD,CAAxD;AACA,QAAMI,qBAAqB,GAAGnC,4BAA4B,CAAC+B,SAAD,CAA1D;AACA,QAAMK,GAAG,GAAG,IAAIjD,GAAJ,CAAQ;AAClBkD,IAAAA,OAAO,EAAEnB,eAAe,CAACoB,QAAhB,CAAyBrB,QAAzB,CADS;AAElBsB,IAAAA,MAAM,EAAE,IAFU;AAGlBC,IAAAA,MAAM,EAAE;AACNnB,MAAAA,GAAG,EAAE,CAAC,GAAGoB,IAAJ,KAAapB,GAAG,CAAC,OAAD,EAAU,GAAGoB,IAAb,CADf;AAENC,MAAAA,IAAI,EAAE,CAAC,GAAGD,IAAJ,KAAapB,GAAG,CAAC,SAAD,EAAY,GAAGoB,IAAf,CAFhB;AAGNE,MAAAA,KAAK,EAAE,CAAC,GAAGF,IAAJ,KAAapB,GAAG,CAAC,OAAD,EAAU,GAAGoB,IAAb;AAHjB,KAHU;AAQlBG,IAAAA,WAAW,EAAE,IARK;AASlBC,IAAAA,WAAW,EAAE;AATK,GAAR,CAAZ;AAWAzD,EAAAA,aAAa,CAACgD,GAAD,CAAb;AACA,QAAMU,kBAAkB,GAAG/D,kCAAkC,CAC3DgC,aAD2D,EAE3DgB,SAF2D,CAA7D;AAIA,QAAMgB,UAAU,GAAGxD,2BAA2B,CAC5C6C,GAD4C,EAE5CL,SAAS,CAACiB,WAFkC,EAG5C,CAAEjB,SAAS,CAACkB,UAAV,IAAwB,EAA1B,EAA8DC,MAA9D,CACEJ,kBADF,CAH4C,CAA9C;AAOA,QAAMK,aAAa,GAAG3D,oBAAoB,CAAC4C,GAAD,EAAML,SAAN,CAA1C;AACA,QAAMqB,aAAa,GAAG/C,OAAO,CAAC,GAAGW,QAAJ,CAA7B;AAKA,QAAMqC,OAAO,GAAG,MACdD,aAAa,CAACxC,WAAD,CADO;AAGpBmB,IAAAA,SAHoB;AAIpBb,IAAAA,eAJoB;AAKpBD,IAAAA;AALoB,KAMjBQ,QANiB;AAOpBH,IAAAA,IAPoB;AAQpBD,IAAAA;AARoB,KAAtB;AAWA,SAAOiC,wBAAwB,CAACxC,IAAzB,CACL,IADK;AAGHiB,IAAAA,SAHG;AAIHd,IAAAA,QAJG;AAKHC,IAAAA,eALG;AAMHC,IAAAA,QANG;AAOHC,IAAAA,QAPG;AAQHC,IAAAA,GARG;AASHC,IAAAA;AATG,KAUAG,QAVA,GAYL;AACES,IAAAA,oBADF;AAEEC,IAAAA,qBAFF;AAGEH,IAAAA,kBAHF;AAIEC,IAAAA,mBAJF;AAKEc,IAAAA,UALF;AAMEI,IAAAA,aANF;AAOEL,IAAAA;AAPF,GAZK,EAqBLO,OArBK,CAAP;AAuBD;;AAED,eAAeC,wBAAf,CACE;AACEvB,EAAAA,SADF;AAEEb,EAAAA,eAFF;AAGED,EAAAA,QAHF;AAIEG,EAAAA,QAJF;AAKED,EAAAA,QALF;AAMEoC,EAAAA,OAAO,GAAG5E,eANZ;AAOE6E,EAAAA,YAAY,GAAG5E,oBAPjB;AAQE6E,EAAAA,YAAY,GAAG/E,oBARjB;AASEgF,EAAAA,YATF;AAUEC,EAAAA,IAVF;AAWEtC,EAAAA,GAXF;AAYEuC,EAAAA;AAZF,CADF,EAeE;AACE1B,EAAAA,oBADF;AAEEC,EAAAA,qBAFF;AAGEH,EAAAA,kBAHF;AAIEC,EAAAA,mBAJF;AAKEc,EAAAA,UALF;AAMEI,EAAAA;AANF,CAfF,EAuBEE,OAvBF,EAwBEQ,GAxBF,EAyBEC,GAzBF,EA0BE;AACA,QAAMC,SAAS,GAAG7C,eAAe,CAACoB,QAAhB,CAAyBrB,QAAzB,CAAlB;AACA,QAAM+C,WAAW,GAAG3E,KAAK,CAAC4E,KAAN,CAAYR,YAAZ,CAApB;AAEApC,EAAAA,GAAG,CACD,MADC,EAED,uBAFC,EAGD6C,IAAI,CAACC,SAAL,CAAe;AACbC,IAAAA,GAAG,EAAEP,GAAG,CAACQ,WADI;AAEbvC,IAAAA,MAAM,EAAE+B,GAAG,CAAC/B,MAFC;AAGbwC,IAAAA,IAAI,EAAET,GAAG,CAACS,IAHG;AAIb;AACAC,IAAAA,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCX,GAAG,CAACU,OAAxC;AALI,GAAf,CAHC,CAAH;AAYA,QAAME,OAAO,GAAG,MAAMC,gBAAgB,CAACb,GAAD,CAAtC;AACA,MAAIZ,UAAJ;AACA,MAAI0B,QAAJ;AACA,MAAIC,WAAJ;AACA,MAAIC,YAAJ;AAEAxD,EAAAA,GAAG,CACD,OADC,EAED,SAFC,EAGD6C,IAAI,CAACC,SAAL,iCACKM,OADL;AAEEH,IAAAA,IAAI,EAAEG,OAAO,CAACH,IAAR,GAAe,QAAf,GAA0BQ,SAFlC;AAGEP,IAAAA,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCC,OAAO,CAACF,OAA5C;AAHX,KAHC,CAAH;;AAUA,MAAI;AACF,UAAMQ,SAAS,GAAGhD,SAAlB;AACA,UAAMiD,QAAQ,GAAGrF,eAAe,CAC9B8E,OAD8B,EAE9BvC,oBAF8B,EAG9BF,kBAH8B,CAAhC;AAMA6C,IAAAA,YAAY,GAAGjF,mBAAmB,CAChCmF,SADgC,EAEhCN,OAFgC,EAGhCtC,qBAHgC,EAIhCF,mBAJgC,CAAlC;;AAOA,QAAI;AACF,YAAMqC,IAAI,GAAG,MAAMpE,OAAO,CACxB;AACEiB,QAAAA,QADF;AAEEoC,QAAAA,OAFF;AAGES,QAAAA;AAHF,OADwB,EAMxBe,SANwB,EAOxBN,OAAO,CAACH,IAPgB,EAQxBU,QARwB,CAA1B;AAUA,YAAMtD,IAAI,GAAG+C,OAAO,CAACL,GAAR,CAAYa,KAAZ,CAAkBxE,gBAAlB,EAAoC,CAApC,CAAb;AACA,YAAMyE,KAAK,GAAGxD,IAAI,CAACuD,KAAL,CAAWvE,cAAX,EAA2ByE,MAA3B,CAAkC7E,QAAlC,CAAd;AACA,YAAM8E,MAAM,GAAGX,OAAO,CAACL,GAAR,CAAYiB,MAAZ,CACbZ,OAAO,CAACL,GAAR,CAAYa,KAAZ,CAAkBxE,gBAAlB,EAAoC,CAApC,EAAuC6E,MAD1B,CAAf;AAIA,YAAMC,cAAc,GAAGxD,SAAS,CAACL,IAAV,CACpBuD,KADoB,CACdvE,cADc,EAEpByE,MAFoB,CAEb7E,QAFa,EAGpBkF,GAHoB,CAGhB,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACpB,cAAMC,OAAO,GAAG,mBAAmBC,IAAnB,CAAwBH,IAAxB,CAAhB;;AAEA,YAAIE,OAAJ,EAAa;AACX,iBAAO;AACLE,YAAAA,IAAI,EAAEF,OAAO,CAAC,CAAD,CADR;AAELG,YAAAA,KAAK,EAAEZ,KAAK,CAACQ,KAAD;AAFP,WAAP;AAID;AACF,OAZoB,EAapBP,MAboB,CAab7E,QAba,EAcpByF,MAdoB,CAenB,CAACC,aAAD,EAAgB;AAAEH,QAAAA,IAAF;AAAQC,QAAAA;AAAR,OAAhB,qCACKE,aADL;AAEE,SAACH,IAAD,GAAQC;AAFV,QAfmB,EAmBnB,EAnBmB,CAAvB,CAjBE,CAuCF;;AACA,YAAMG,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;AAIAnD,MAAAA,UAAU,iDACLsC,cADK,GAEL7B,YAAY,CAACuC,8BAAD,EAAwCb,MAAxC,CAFP,GAGL1F,aAAa,CAACqF,SAAS,CAAC9B,UAAX,EAAuBwB,OAAO,CAACF,OAA/B,CAHR,CAAV;AAMAtB,MAAAA,UAAU;AACR;AACA;AACA;AACAoD,QAAAA,aAAa,EAAEpD,UAAU,CAACoD;AAJlB,SAKLrH,cAAc,CAAC+F,SAAS,CAAC9B,UAAV,IAAwB,EAAzB,EAA6BA,UAA7B,CALT,CAAV;AAQAxD,MAAAA,eAAe,CAACsF,SAAD,EAAYhC,UAAZ,EAAwBE,UAAxB,CAAf;AAEAE,MAAAA,aAAa,CAAC4B,SAAD,EAAYC,QAAQ,CAACsB,WAArB,EAAkChC,IAAlC,CAAb;AAEArB,MAAAA,UAAU,mCACLA,UADK,GAEJ,gBAAgB,OAAOqB,IAAvB,GAA8B;AAAEA,QAAAA;AAAF,OAA9B,GAAyC,EAFrC,CAAV;AAID,KAlED,CAkEE,OAAOiC,GAAP,EAAY;AACZ,YAAMjH,SAAS,CAACkH,IAAV,CAAeD,GAAf,EAAoB,GAApB,CAAN;AACD;;AAED5B,IAAAA,QAAQ,GAAG,MAAM5E,cAAc,CAACgF,SAAD,EAAY1B,OAAZ,EAAqBJ,UAArB,CAA/B;;AAEA,QAAI0B,QAAQ,CAACL,IAAb,EAAmB;AACjBK,MAAAA,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,IACEI,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,KAAoCM,YAAY,CAAC4B,YAAb,CAA0B,CAA1B,CADtC;AAED,KA1FC,CA4FF;AACA;;;AACA,UAAMC,cAAc,GAClB3B,SAAS,CAAC4B,SAAV,IACC5B,SAAS,CAAC4B,SAAV,CAAoBhC,QAAQ,CAACiC,MAA7B,CAFH;AAGA,UAAMC,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;AAMA,UAAMW,iBAAiB,GACrBF,cAAc,KACbA,cAAc,CAACG,IAAf,KAAwB,QAAxB,IAAoCH,cAAc,CAACI,MAAf,KAA0B,QADjD,CADhB;;AAIA,QAAIF,iBAAiB,IAAI,CAACvD,YAAY,CAACmB,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAAD,CAAtC,EAA0E;AACxE,YAAM,IAAIjF,SAAJ,CACJ,GADI,EAEJ,oBAFI,EAGJqF,QAAQ,CAACJ,OAAT,CAAiB,cAAjB,CAHI,CAAN;AAKD;;AACD,QAAII,QAAQ,CAACL,IAAb,EAAmB;AACjBxE,MAAAA,sBAAsB,CAAC2E,OAAD,EAAUI,YAAV,EAAwB1C,qBAAxB,CAAtB;AACAtC,MAAAA,oBAAoB,CAAC4E,OAAD,EAAUI,YAAV,EAAwB5C,mBAAxB,CAApB;AACD;;AACD2C,IAAAA,WAAW,GAAG;AACZoC,MAAAA,IAAI,EAAE,SADM;AAEZJ,MAAAA,MAAM,EAAEjC,QAAQ,CAACiC;AAFL,KAAd;AAIAvF,IAAAA,GAAG,CAAC,OAAD,EAAU6C,IAAI,CAACC,SAAL,CAAeS,WAAf,CAAV,CAAH;AACD,GA3HD,CA2HE,OAAO2B,GAAP,EAAY;AAAA;;AACZ,UAAMW,WAAW,GAAG5H,SAAS,CAACkH,IAAV,CAAeD,GAAf,CAApB;AAEA3B,IAAAA,WAAW,GAAG;AACZoC,MAAAA,IAAI,EAAE,OADM;AAEZG,MAAAA,IAAI,EAAED,WAAW,CAACC,IAFN;AAGZC,MAAAA,UAAU,EAAEF,WAAW,CAACG,QAHZ;AAIZC,MAAAA,MAAM,EAAEJ,WAAW,CAACI,MAAZ,IAAsB,EAJlB;AAKZC,MAAAA,KAAK,EAAEL,WAAW,CAACK;AALP,KAAd;AAQAlG,IAAAA,GAAG,CAAC,OAAD,EAAU6C,IAAI,CAACC,SAAL,CAAeS,WAAf,CAAV,CAAH;AACAD,IAAAA,QAAQ,GAAG;AACTiC,MAAAA,MAAM,EAAEM,WAAW,CAACG,QADX;AAET9C,MAAAA,OAAO,gDACFhE,gBAAgB,CAACoD,IAAD,CADd,2BAEDuD,WAAW,CAAC3C,OAFX,uEAEsB,EAFtB;AAGL,wBAAgB;AAHX,QAFE;AAOTD,MAAAA,IAAI,EAAE;AACJ3B,QAAAA,KAAK,EAAE;AACLwE,UAAAA,IAAI,EAAED,WAAW,CAACC,IADb;AAELI,UAAAA,KAAK,EAAExD,SAAS,GAAGa,WAAW,CAAC2C,KAAf,GAAuBzC,SAFlC;AAGLwC,UAAAA,MAAM,EAAEvD,SAAS,GAAGa,WAAW,CAAC0C,MAAf,GAAwBxC;AAHpC;AADH;AAPG,KAAX;AAeD;;AAEDzD,EAAAA,GAAG,CACD,OADC,EAED,UAFC,EAGD6C,IAAI,CAACC,SAAL,iCACKQ,QADL;AAEEL,IAAAA,IAAI,EAAEkD,kBAAkB,CAAC5D,UAAD,EAAae,QAAQ,CAACL,IAAtB,CAF1B;AAGEC,IAAAA,OAAO,EAAEX,UAAU,CAACY,wBAAX,CAAoCG,QAAQ,CAACJ,OAA7C;AAHX,KAHC,CAAH;AAUA,QAAMkD,0BAA0B,CAC9B,MAAMtH,QAAQ,CACZ;AACEiB,IAAAA,QADF;AAEEoC,IAAAA;AAFF,GADY,EAKZmB,QALY,CADgB,EAQ9Bb,GAR8B,CAAhC;AAUD;;AAED,eAAeY,gBAAf,CAAgCb,GAAhC,EAA4D;AAC1D,QAAMY,OAAqB,GAAG;AAC5B3C,IAAAA,MAAM,EAAE+B,GAAG,CAAC/B,MAAJ,CAAW4F,WAAX,EADoB;AAE5BnD,IAAAA,OAAO,EAAEhE,gBAAgB,CAACsD,GAAG,CAACU,OAAJ,IAAe,EAAhB,CAFG;AAG5BH,IAAAA,GAAG,EAAEP,GAAG,CAACQ;AAHmB,GAA9B;;AAMA,MAAIR,GAAG,CAAC8D,OAAR,EAAiB;AACflD,IAAAA,OAAO,CAACF,OAAR,CAAgB,gBAAhB,IAAoCV,GAAG,CAAC8D,OAAJ,CAAYrC,MAAZ,CAAmBsC,QAAnB,EAApC;AACA,UAAMC,UAAU,GAAG,IAAIrH,MAAM,CAACsH,WAAX,EAAnB;AAEArD,IAAAA,OAAO,CAACH,IAAR,GAAeuD,UAAf;AACAA,IAAAA,UAAU,CAACE,KAAX,CAAiBlE,GAAG,CAAC8D,OAArB;AACAE,IAAAA,UAAU,CAACG,GAAX;AACD;;AAED,SAAOvD,OAAP;AACD;;AAED,eAAegD,0BAAf,CACE9C,QADF,EAEEb,GAFF,EAGiB;AACfnC,EAAAA,MAAM,CAACC,IAAP,CAAY+C,QAAQ,CAACJ,OAArB,EAA8B0D,OAA9B,CAAuCC,UAAD,IAAgB;AACpDpE,IAAAA,GAAG,CAACqE,GAAJ,CAAQD,UAAR,EAAoBvD,QAAQ,CAACJ,OAAT,CAAiB2D,UAAjB,CAApB;AACD,GAFD;AAGApE,EAAAA,GAAG,CAAC8C,MAAJ,CAAWjC,QAAQ,CAACiC,MAApB;;AAEA,MAAIjC,QAAQ,CAACL,IAAb,EAAmB;AAChBK,IAAAA,QAAQ,CAACL,IAAV,CAA4B8D,IAA5B,CAAiCtE,GAAjC;AACA;AACD;;AAEDA,EAAAA,GAAG,CAACkE,GAAJ;AACD;;AAED,SAASR,kBAAT,CAA4B5D,UAA5B,EAAwC+D,OAAxC,EAAiD;AAC/C,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,QAAI;AACF,YAAMU,QAAQ,GAAGnE,IAAI,CAACD,KAAL,CAAW0D,OAAX,CAAjB;AAEA,aAAOzD,IAAI,CAACC,SAAL,CAAeP,UAAU,CAAC0E,sBAAX,CAAkCD,QAAlC,CAAf,CAAP,CAHE,CAIF;AACD,KALD,CAKE,OAAO9B,GAAP,EAAY,CAAE;AACjB;;AACD,SAAOoB,OAAP;AACD","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.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
|
-
"@
|
|
54
|
-
"@whook/
|
|
55
|
-
"@whook/
|
|
56
|
-
"@whook/
|
|
57
|
-
"
|
|
58
|
-
"ajv": "^
|
|
59
|
-
"
|
|
60
|
-
"
|
|
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": "^
|
|
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.4",
|
|
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": {
|
|
@@ -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": "
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
79
|
-
|
|
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
|
-
}:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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:
|
|
333
|
+
options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,
|
|
330
334
|
): Promise<string> {
|
|
331
335
|
return `${
|
|
332
336
|
options.modules === 'commonjs'
|