@whook/gcp-functions 8.5.1 → 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.map +1 -1
- package/dist/commands/testHTTPFunction.mjs.map +1 -1
- package/dist/index.d.ts +1 -2
- 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 -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
|
@@ -15,27 +15,13 @@ var _httpRouter = require("@whook/http-router");
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
18
|
+
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; }
|
|
19
19
|
|
|
20
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
20
|
+
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; }
|
|
21
21
|
|
|
22
22
|
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; }
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
* Wrap the _autoload service in order to build AWS
|
|
26
|
-
* Lambda compatible code.
|
|
27
|
-
* @param {Object} services
|
|
28
|
-
* The services ENV depends on
|
|
29
|
-
* @param {Object} services.NODE_ENV
|
|
30
|
-
* The injected NODE_ENV value to add it to the build env
|
|
31
|
-
* @param {Object} [services.PROXYED_ENV_VARS={}]
|
|
32
|
-
* A list of environment variable names to proxy
|
|
33
|
-
* @param {Object} [services.log=noop]
|
|
34
|
-
* An optional logging service
|
|
35
|
-
* @return {Promise<Object>}
|
|
36
|
-
* A promise of an object containing the reshaped env vars.
|
|
37
|
-
*/
|
|
38
|
-
var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'], (0, _knifecycle.wrapInitializer)(async ({
|
|
24
|
+
const initializerWrapper = async ({
|
|
39
25
|
BUILD_CONSTANTS = {},
|
|
40
26
|
$injector,
|
|
41
27
|
$instance,
|
|
@@ -46,6 +32,8 @@ var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$i
|
|
|
46
32
|
|
|
47
33
|
const getAPIOperation = (() => {
|
|
48
34
|
return async serviceName => {
|
|
35
|
+
var _API$paths$OPERATION$, _OPERATION_API$paths$;
|
|
36
|
+
|
|
49
37
|
// eslint-disable-next-line
|
|
50
38
|
API = API || (await $injector(['API'])).API; // eslint-disable-next-line
|
|
51
39
|
|
|
@@ -61,7 +49,7 @@ var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$i
|
|
|
61
49
|
const OPERATION_API = (0, _whook.cleanupOpenAPI)(_objectSpread(_objectSpread({}, API), {}, {
|
|
62
50
|
paths: {
|
|
63
51
|
[OPERATION.path]: {
|
|
64
|
-
[OPERATION.method]: API.paths[OPERATION.path][OPERATION.method]
|
|
52
|
+
[OPERATION.method]: (_API$paths$OPERATION$ = API.paths[OPERATION.path]) === null || _API$paths$OPERATION$ === void 0 ? void 0 : _API$paths$OPERATION$[OPERATION.method]
|
|
65
53
|
}
|
|
66
54
|
}
|
|
67
55
|
}));
|
|
@@ -71,7 +59,7 @@ var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$i
|
|
|
71
59
|
[OPERATION.method]: (await (0, _httpRouter.dereferenceOpenAPIOperations)(OPERATION_API, [_objectSpread(_objectSpread({
|
|
72
60
|
path: OPERATION.path,
|
|
73
61
|
method: OPERATION.method
|
|
74
|
-
}, OPERATION_API.paths[OPERATION.path][OPERATION.method]), {}, {
|
|
62
|
+
}, (_OPERATION_API$paths$ = OPERATION_API.paths[OPERATION.path]) === null || _OPERATION_API$paths$ === void 0 ? void 0 : _OPERATION_API$paths$[OPERATION.method]), {}, {
|
|
75
63
|
parameters: OPERATION.parameters
|
|
76
64
|
})]))[0]
|
|
77
65
|
}
|
|
@@ -112,10 +100,28 @@ var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$i
|
|
|
112
100
|
return $autoload(serviceName);
|
|
113
101
|
} catch (err) {
|
|
114
102
|
log('error', `Build error while loading "${serviceName}".`);
|
|
115
|
-
log('stack', err.stack);
|
|
103
|
+
log('error-stack', err.stack || 'no_stack_trace');
|
|
104
|
+
throw err;
|
|
116
105
|
}
|
|
117
106
|
};
|
|
118
|
-
}
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Wrap the _autoload service in order to build AWS
|
|
110
|
+
* Lambda compatible code.
|
|
111
|
+
* @param {Object} services
|
|
112
|
+
* The services ENV depends on
|
|
113
|
+
* @param {Object} services.NODE_ENV
|
|
114
|
+
* The injected NODE_ENV value to add it to the build env
|
|
115
|
+
* @param {Object} [services.PROXYED_ENV_VARS={}]
|
|
116
|
+
* A list of environment variable names to proxy
|
|
117
|
+
* @param {Object} [services.log=noop]
|
|
118
|
+
* An optional logging service
|
|
119
|
+
* @return {Promise<Object>}
|
|
120
|
+
* A promise of an object containing the reshaped env vars.
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
var _default = (0, _knifecycle.alsoInject)(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'], (0, _knifecycle.wrapInitializer)(initializerWrapper, _whook.initAutoload));
|
|
119
125
|
|
|
120
126
|
exports.default = _default;
|
|
121
127
|
//# sourceMappingURL=_autoload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"_autoload.js","names":["initializerWrapper","BUILD_CONSTANTS","$injector","$instance","log","noop","$autoload","API","OPERATION_APIS","getAPIOperation","serviceName","getOpenAPIOperations","OPERATION","find","operation","sourceOperationId","operationId","suffix","YError","OPERATION_API","cleanupOpenAPI","paths","path","method","dereferenceOpenAPIOperations","parameters","initializer","_initializers","get","SPECIAL_PROPS","TYPE","startsWith","constant","err","stack","alsoInject","wrapInitializer","initAutoload"],"sources":["../../src/services/_autoload.ts"],"sourcesContent":["import { initAutoload, noop, cleanupOpenAPI } from '@whook/whook';\nimport Knifecycle, {\n SPECIAL_PROPS,\n wrapInitializer,\n constant,\n alsoInject,\n} from 'knifecycle';\nimport YError from 'yerror';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Injector,\n Autoloader,\n Initializer,\n Dependencies,\n Service,\n ServiceInitializerWrapper,\n} from 'knifecycle';\nimport type { WhookBuildConstantsService } from '@whook/whook';\nimport type { WhookRawOperation } from '@whook/http-router';\nimport type { LogService } from 'common-services';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { WhookAPIOperationGCPFunctionConfig } from '..';\n\nconst initializerWrapper: ServiceInitializerWrapper<\n Autoloader<Initializer<Dependencies, Service>>,\n Dependencies\n> = (async (\n {\n BUILD_CONSTANTS = {},\n $injector,\n $instance,\n log = noop,\n }: {\n BUILD_CONSTANTS?: WhookBuildConstantsService;\n $injector: Injector<Service>;\n $instance: Knifecycle;\n log: LogService;\n },\n $autoload: Autoloader<Initializer<Dependencies, Service>>,\n): Promise<\n (serviceName: string) => Promise<{\n initializer: Initializer<Dependencies, Service>;\n path: string;\n }>\n> => {\n let API: OpenAPIV3.Document;\n let OPERATION_APIS: WhookRawOperation<WhookAPIOperationGCPFunctionConfig>[];\n const getAPIOperation = (() => {\n return async (serviceName) => {\n // eslint-disable-next-line\n API = API || (await $injector(['API'])).API;\n // eslint-disable-next-line\n OPERATION_APIS =\n OPERATION_APIS ||\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API);\n\n const OPERATION = OPERATION_APIS.find(\n (operation) =>\n serviceName ===\n (((operation['x-whook'] || {}).sourceOperationId &&\n 'OPERATION_API_' +\n (operation['x-whook'] || {}).sourceOperationId) ||\n 'OPERATION_API_' + operation.operationId) +\n ((operation['x-whook'] || {}).suffix || ''),\n );\n\n if (!OPERATION) {\n log('error', '💥 - Unable to find a lambda operation definition!');\n throw new YError('E_OPERATION_NOT_FOUND', serviceName);\n }\n\n // eslint-disable-next-line\n const OPERATION_API = cleanupOpenAPI({\n ...API,\n paths: {\n [OPERATION.path]: {\n [OPERATION.method]: API.paths[OPERATION.path]?.[OPERATION.method],\n },\n },\n });\n\n return {\n ...OPERATION_API,\n paths: {\n [OPERATION.path]: {\n [OPERATION.method]: (\n await dereferenceOpenAPIOperations(OPERATION_API, [\n {\n path: OPERATION.path,\n method: OPERATION.method,\n ...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],\n parameters: OPERATION.parameters,\n },\n ])\n )[0],\n },\n },\n };\n };\n })();\n\n log('debug', '🤖 - Initializing the `$autoload` build wrapper.');\n\n return async (serviceName) => {\n try {\n // TODO: add initializer map to knifecycle public API\n const initializer = ($instance as any)._initializers.get(serviceName);\n\n if (initializer && initializer[SPECIAL_PROPS.TYPE] === 'constant') {\n log(\n 'debug',\n `🤖 - Reusing a constant initializer directly from the Knifecycle instance: \"${serviceName}\".`,\n );\n return {\n initializer,\n path: `instance://${serviceName}`,\n };\n }\n\n if (serviceName.startsWith('OPERATION_API_')) {\n const OPERATION_API = await getAPIOperation(serviceName);\n\n return {\n initializer: constant(serviceName, OPERATION_API),\n path: `api://${serviceName}`,\n };\n }\n\n if (BUILD_CONSTANTS[serviceName]) {\n return {\n initializer: constant(serviceName, BUILD_CONSTANTS[serviceName]),\n path: `constant://${serviceName}`,\n };\n }\n\n return $autoload(serviceName);\n } catch (err) {\n log('error', `Build error while loading \"${serviceName}\".`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n throw err;\n }\n };\n}) as any;\n\n/**\n * Wrap the _autoload service in order to build AWS\n * Lambda compatible code.\n * @param {Object} services\n * The services ENV depends on\n * @param {Object} services.NODE_ENV\n * The injected NODE_ENV value to add it to the build env\n * @param {Object} [services.PROXYED_ENV_VARS={}]\n * A list of environment variable names to proxy\n * @param {Object} [services.log=noop]\n * An optional logging service\n * @return {Promise<Object>}\n * A promise of an object containing the reshaped env vars.\n */\nexport default alsoInject(\n ['?BUILD_CONSTANTS', '$instance', '$injector', '?log'],\n wrapInitializer(initializerWrapper as any, initAutoload),\n);\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
1
|
+
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; }
|
|
2
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
3
|
+
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; }
|
|
4
4
|
|
|
5
5
|
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; }
|
|
6
6
|
|
|
@@ -9,21 +9,7 @@ import { SPECIAL_PROPS, wrapInitializer, constant, alsoInject } from 'knifecycle
|
|
|
9
9
|
import YError from 'yerror';
|
|
10
10
|
import { dereferenceOpenAPIOperations, getOpenAPIOperations } from '@whook/http-router';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
* Wrap the _autoload service in order to build AWS
|
|
14
|
-
* Lambda compatible code.
|
|
15
|
-
* @param {Object} services
|
|
16
|
-
* The services ENV depends on
|
|
17
|
-
* @param {Object} services.NODE_ENV
|
|
18
|
-
* The injected NODE_ENV value to add it to the build env
|
|
19
|
-
* @param {Object} [services.PROXYED_ENV_VARS={}]
|
|
20
|
-
* A list of environment variable names to proxy
|
|
21
|
-
* @param {Object} [services.log=noop]
|
|
22
|
-
* An optional logging service
|
|
23
|
-
* @return {Promise<Object>}
|
|
24
|
-
* A promise of an object containing the reshaped env vars.
|
|
25
|
-
*/
|
|
26
|
-
export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'], wrapInitializer(async ({
|
|
12
|
+
const initializerWrapper = async ({
|
|
27
13
|
BUILD_CONSTANTS = {},
|
|
28
14
|
$injector,
|
|
29
15
|
$instance,
|
|
@@ -34,6 +20,8 @@ export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log']
|
|
|
34
20
|
|
|
35
21
|
const getAPIOperation = (() => {
|
|
36
22
|
return async serviceName => {
|
|
23
|
+
var _API$paths$OPERATION$, _OPERATION_API$paths$;
|
|
24
|
+
|
|
37
25
|
// eslint-disable-next-line
|
|
38
26
|
API = API || (await $injector(['API'])).API; // eslint-disable-next-line
|
|
39
27
|
|
|
@@ -49,7 +37,7 @@ export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log']
|
|
|
49
37
|
const OPERATION_API = cleanupOpenAPI(_objectSpread(_objectSpread({}, API), {}, {
|
|
50
38
|
paths: {
|
|
51
39
|
[OPERATION.path]: {
|
|
52
|
-
[OPERATION.method]: API.paths[OPERATION.path][OPERATION.method]
|
|
40
|
+
[OPERATION.method]: (_API$paths$OPERATION$ = API.paths[OPERATION.path]) === null || _API$paths$OPERATION$ === void 0 ? void 0 : _API$paths$OPERATION$[OPERATION.method]
|
|
53
41
|
}
|
|
54
42
|
}
|
|
55
43
|
}));
|
|
@@ -59,7 +47,7 @@ export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log']
|
|
|
59
47
|
[OPERATION.method]: (await dereferenceOpenAPIOperations(OPERATION_API, [_objectSpread(_objectSpread({
|
|
60
48
|
path: OPERATION.path,
|
|
61
49
|
method: OPERATION.method
|
|
62
|
-
}, OPERATION_API.paths[OPERATION.path][OPERATION.method]), {}, {
|
|
50
|
+
}, (_OPERATION_API$paths$ = OPERATION_API.paths[OPERATION.path]) === null || _OPERATION_API$paths$ === void 0 ? void 0 : _OPERATION_API$paths$[OPERATION.method]), {}, {
|
|
63
51
|
parameters: OPERATION.parameters
|
|
64
52
|
})]))[0]
|
|
65
53
|
}
|
|
@@ -100,8 +88,26 @@ export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log']
|
|
|
100
88
|
return $autoload(serviceName);
|
|
101
89
|
} catch (err) {
|
|
102
90
|
log('error', `Build error while loading "${serviceName}".`);
|
|
103
|
-
log('stack', err.stack);
|
|
91
|
+
log('error-stack', err.stack || 'no_stack_trace');
|
|
92
|
+
throw err;
|
|
104
93
|
}
|
|
105
94
|
};
|
|
106
|
-
}
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Wrap the _autoload service in order to build AWS
|
|
98
|
+
* Lambda compatible code.
|
|
99
|
+
* @param {Object} services
|
|
100
|
+
* The services ENV depends on
|
|
101
|
+
* @param {Object} services.NODE_ENV
|
|
102
|
+
* The injected NODE_ENV value to add it to the build env
|
|
103
|
+
* @param {Object} [services.PROXYED_ENV_VARS={}]
|
|
104
|
+
* A list of environment variable names to proxy
|
|
105
|
+
* @param {Object} [services.log=noop]
|
|
106
|
+
* An optional logging service
|
|
107
|
+
* @return {Promise<Object>}
|
|
108
|
+
* A promise of an object containing the reshaped env vars.
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'], wrapInitializer(initializerWrapper, initAutoload));
|
|
107
113
|
//# sourceMappingURL=_autoload.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"_autoload.mjs","names":["initAutoload","noop","cleanupOpenAPI","SPECIAL_PROPS","wrapInitializer","constant","alsoInject","YError","dereferenceOpenAPIOperations","getOpenAPIOperations","initializerWrapper","BUILD_CONSTANTS","$injector","$instance","log","$autoload","API","OPERATION_APIS","getAPIOperation","serviceName","OPERATION","find","operation","sourceOperationId","operationId","suffix","OPERATION_API","paths","path","method","parameters","initializer","_initializers","get","TYPE","startsWith","err","stack"],"sources":["../../src/services/_autoload.ts"],"sourcesContent":["import { initAutoload, noop, cleanupOpenAPI } from '@whook/whook';\nimport Knifecycle, {\n SPECIAL_PROPS,\n wrapInitializer,\n constant,\n alsoInject,\n} from 'knifecycle';\nimport YError from 'yerror';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Injector,\n Autoloader,\n Initializer,\n Dependencies,\n Service,\n ServiceInitializerWrapper,\n} from 'knifecycle';\nimport type { WhookBuildConstantsService } from '@whook/whook';\nimport type { WhookRawOperation } from '@whook/http-router';\nimport type { LogService } from 'common-services';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { WhookAPIOperationGCPFunctionConfig } from '..';\n\nconst initializerWrapper: ServiceInitializerWrapper<\n Autoloader<Initializer<Dependencies, Service>>,\n Dependencies\n> = (async (\n {\n BUILD_CONSTANTS = {},\n $injector,\n $instance,\n log = noop,\n }: {\n BUILD_CONSTANTS?: WhookBuildConstantsService;\n $injector: Injector<Service>;\n $instance: Knifecycle;\n log: LogService;\n },\n $autoload: Autoloader<Initializer<Dependencies, Service>>,\n): Promise<\n (serviceName: string) => Promise<{\n initializer: Initializer<Dependencies, Service>;\n path: string;\n }>\n> => {\n let API: OpenAPIV3.Document;\n let OPERATION_APIS: WhookRawOperation<WhookAPIOperationGCPFunctionConfig>[];\n const getAPIOperation = (() => {\n return async (serviceName) => {\n // eslint-disable-next-line\n API = API || (await $injector(['API'])).API;\n // eslint-disable-next-line\n OPERATION_APIS =\n OPERATION_APIS ||\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API);\n\n const OPERATION = OPERATION_APIS.find(\n (operation) =>\n serviceName ===\n (((operation['x-whook'] || {}).sourceOperationId &&\n 'OPERATION_API_' +\n (operation['x-whook'] || {}).sourceOperationId) ||\n 'OPERATION_API_' + operation.operationId) +\n ((operation['x-whook'] || {}).suffix || ''),\n );\n\n if (!OPERATION) {\n log('error', '💥 - Unable to find a lambda operation definition!');\n throw new YError('E_OPERATION_NOT_FOUND', serviceName);\n }\n\n // eslint-disable-next-line\n const OPERATION_API = cleanupOpenAPI({\n ...API,\n paths: {\n [OPERATION.path]: {\n [OPERATION.method]: API.paths[OPERATION.path]?.[OPERATION.method],\n },\n },\n });\n\n return {\n ...OPERATION_API,\n paths: {\n [OPERATION.path]: {\n [OPERATION.method]: (\n await dereferenceOpenAPIOperations(OPERATION_API, [\n {\n path: OPERATION.path,\n method: OPERATION.method,\n ...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],\n parameters: OPERATION.parameters,\n },\n ])\n )[0],\n },\n },\n };\n };\n })();\n\n log('debug', '🤖 - Initializing the `$autoload` build wrapper.');\n\n return async (serviceName) => {\n try {\n // TODO: add initializer map to knifecycle public API\n const initializer = ($instance as any)._initializers.get(serviceName);\n\n if (initializer && initializer[SPECIAL_PROPS.TYPE] === 'constant') {\n log(\n 'debug',\n `🤖 - Reusing a constant initializer directly from the Knifecycle instance: \"${serviceName}\".`,\n );\n return {\n initializer,\n path: `instance://${serviceName}`,\n };\n }\n\n if (serviceName.startsWith('OPERATION_API_')) {\n const OPERATION_API = await getAPIOperation(serviceName);\n\n return {\n initializer: constant(serviceName, OPERATION_API),\n path: `api://${serviceName}`,\n };\n }\n\n if (BUILD_CONSTANTS[serviceName]) {\n return {\n initializer: constant(serviceName, BUILD_CONSTANTS[serviceName]),\n path: `constant://${serviceName}`,\n };\n }\n\n return $autoload(serviceName);\n } catch (err) {\n log('error', `Build error while loading \"${serviceName}\".`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n throw err;\n }\n };\n}) as any;\n\n/**\n * Wrap the _autoload service in order to build AWS\n * Lambda compatible code.\n * @param {Object} services\n * The services ENV depends on\n * @param {Object} services.NODE_ENV\n * The injected NODE_ENV value to add it to the build env\n * @param {Object} [services.PROXYED_ENV_VARS={}]\n * A list of environment variable names to proxy\n * @param {Object} [services.log=noop]\n * An optional logging service\n * @return {Promise<Object>}\n * A promise of an object containing the reshaped env vars.\n */\nexport default alsoInject(\n ['?BUILD_CONSTANTS', '$instance', '$injector', '?log'],\n wrapInitializer(initializerWrapper as any, initAutoload),\n);\n"],"mappings":"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"}
|
package/dist/services/log.d.ts
CHANGED
package/dist/services/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"log.js","names":["service","console","log","bind"],"sources":["../../src/services/log.ts"],"sourcesContent":["import { service } from 'knifecycle';\n\n// eslint-disable-next-line\nexport default service(async () => console.log.bind(console), 'log');\n"],"mappings":";;;;;;;AAAA;;AAEA;eACe,IAAAA,mBAAA,EAAQ,YAAYC,OAAO,CAACC,GAAR,CAAYC,IAAZ,CAAiBF,OAAjB,CAApB,EAA+C,KAA/C,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"log.mjs","names":["service","console","log","bind"],"sources":["../../src/services/log.ts"],"sourcesContent":["import { service } from 'knifecycle';\n\n// eslint-disable-next-line\nexport default service(async () => console.log.bind(console), 'log');\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,YAAxB,C,CAEA;;AACA,eAAeA,OAAO,CAAC,YAAYC,OAAO,CAACC,GAAR,CAAYC,IAAZ,CAAiBF,OAAjB,CAAb,EAAwC,KAAxC,CAAtB"}
|
|
@@ -6,7 +6,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
6
6
|
|
|
7
7
|
describe('initLogService', () => {
|
|
8
8
|
it('should work', async () => {
|
|
9
|
-
await (0, _log.default)();
|
|
9
|
+
await (0, _log.default)({});
|
|
10
10
|
});
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=log.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"log.test.js","names":["describe","it","initLogService"],"sources":["../../src/services/log.test.ts"],"sourcesContent":["import initLogService from './log';\n\ndescribe('initLogService', () => {\n it('should work', async () => {\n await initLogService({});\n });\n});\n"],"mappings":";;AAAA;;;;AAEAA,QAAQ,CAAC,gBAAD,EAAmB,MAAM;EAC/BC,EAAE,CAAC,aAAD,EAAgB,YAAY;IAC5B,MAAM,IAAAC,YAAA,EAAe,EAAf,CAAN;EACD,CAFC,CAAF;AAGD,CAJO,CAAR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"log.test.mjs","names":["initLogService","describe","it"],"sources":["../../src/services/log.test.ts"],"sourcesContent":["import initLogService from './log';\n\ndescribe('initLogService', () => {\n it('should work', async () => {\n await initLogService({});\n });\n});\n"],"mappings":"AAAA,OAAOA,cAAP,MAA2B,OAA3B;AAEAC,QAAQ,CAAC,gBAAD,EAAmB,MAAM;EAC/BC,EAAE,CAAC,aAAD,EAAgB,YAAY;IAC5B,MAAMF,cAAc,CAAC,EAAD,CAApB;EACD,CAFC,CAAF;AAGD,CAJO,CAAR"}
|
|
@@ -25,9 +25,9 @@ const _excluded = ["OPERATION_API", "WRAPPERS", "NODE_ENV", "DEBUG_NODE_ENVS", "
|
|
|
25
25
|
|
|
26
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
27
|
|
|
28
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
29
|
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
30
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
31
31
|
|
|
32
32
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
33
|
|
|
@@ -71,9 +71,9 @@ async function initHandlerForAWSHTTPFunction(initHandler, _ref) {
|
|
|
71
71
|
verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
|
|
72
72
|
strict: true,
|
|
73
73
|
logger: {
|
|
74
|
-
log: (...args) => log('debug', ...args),
|
|
75
|
-
warn: (...args) => log('warning', ...args),
|
|
76
|
-
error: (...args) => log('error', ...args)
|
|
74
|
+
log: (...args) => log === null || log === void 0 ? void 0 : log('debug', ...args),
|
|
75
|
+
warn: (...args) => log === null || log === void 0 ? void 0 : log('warning', ...args),
|
|
76
|
+
error: (...args) => log === null || log === void 0 ? void 0 : log('error', ...args)
|
|
77
77
|
},
|
|
78
78
|
useDefaults: true,
|
|
79
79
|
coerceTypes: true
|
|
@@ -131,11 +131,11 @@ async function handleForAWSHTTPFunction({
|
|
|
131
131
|
validators,
|
|
132
132
|
bodyValidator
|
|
133
133
|
}, handler, req, res) {
|
|
134
|
-
const debugging = DEBUG_NODE_ENVS.includes(NODE_ENV);
|
|
134
|
+
const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
|
|
135
135
|
|
|
136
136
|
const bufferLimit = _bytes.default.parse(BUFFER_LIMIT);
|
|
137
137
|
|
|
138
|
-
log('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
|
|
138
|
+
log === null || log === void 0 ? void 0 : log('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
|
|
139
139
|
url: req.originalUrl,
|
|
140
140
|
method: req.method,
|
|
141
141
|
body: req.body,
|
|
@@ -147,7 +147,7 @@ async function handleForAWSHTTPFunction({
|
|
|
147
147
|
let response;
|
|
148
148
|
let responseLog;
|
|
149
149
|
let responseSpec;
|
|
150
|
-
log('debug', 'REQUEST', JSON.stringify(_objectSpread(_objectSpread({}, request), {}, {
|
|
150
|
+
log === null || log === void 0 ? void 0 : log('debug', 'REQUEST', JSON.stringify(_objectSpread(_objectSpread({}, request), {}, {
|
|
151
151
|
body: request.body ? 'Stream' : undefined,
|
|
152
152
|
headers: obfuscator.obfuscateSensibleHeaders(request.headers)
|
|
153
153
|
})));
|
|
@@ -224,7 +224,7 @@ async function handleForAWSHTTPFunction({
|
|
|
224
224
|
type: 'success',
|
|
225
225
|
status: response.status
|
|
226
226
|
};
|
|
227
|
-
log('debug', JSON.stringify(responseLog));
|
|
227
|
+
log === null || log === void 0 ? void 0 : log('debug', JSON.stringify(responseLog));
|
|
228
228
|
} catch (err) {
|
|
229
229
|
var _castedError$headers;
|
|
230
230
|
|
|
@@ -237,7 +237,7 @@ async function handleForAWSHTTPFunction({
|
|
|
237
237
|
params: castedError.params || [],
|
|
238
238
|
stack: castedError.stack
|
|
239
239
|
};
|
|
240
|
-
log('error', JSON.stringify(responseLog));
|
|
240
|
+
log === null || log === void 0 ? void 0 : log('error', JSON.stringify(responseLog));
|
|
241
241
|
response = {
|
|
242
242
|
status: castedError.httpCode,
|
|
243
243
|
headers: _objectSpread(_objectSpread(_objectSpread({}, (0, _whook.lowerCaseHeaders)(CORS)), (_castedError$headers = castedError.headers) !== null && _castedError$headers !== void 0 ? _castedError$headers : {}), {}, {
|
|
@@ -253,7 +253,7 @@ async function handleForAWSHTTPFunction({
|
|
|
253
253
|
};
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
log('debug', 'RESPONSE', JSON.stringify(_objectSpread(_objectSpread({}, response), {}, {
|
|
256
|
+
log === null || log === void 0 ? void 0 : log('debug', 'RESPONSE', JSON.stringify(_objectSpread(_objectSpread({}, response), {}, {
|
|
257
257
|
body: obfuscateEventBody(obfuscator, response.body),
|
|
258
258
|
headers: obfuscator.obfuscateSensibleHeaders(response.headers)
|
|
259
259
|
})));
|
|
@@ -282,8 +282,10 @@ async function gcpfReqToRequest(req) {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
async function pipeResponseInGCPFResponse(response, res) {
|
|
285
|
-
Object.keys(response.headers).forEach(headerName => {
|
|
286
|
-
|
|
285
|
+
Object.keys(response.headers || {}).forEach(headerName => {
|
|
286
|
+
var _response$headers;
|
|
287
|
+
|
|
288
|
+
res.set(headerName, (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers[headerName]);
|
|
287
289
|
});
|
|
288
290
|
res.status(response.status);
|
|
289
291
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/wrappers/googleHTTPFunction.ts"],"names":["SEARCH_SEPARATOR","PATH_SEPARATOR","wrapHandlerForAWSHTTPFunction","initHandler","initHandlerForAWSHTTPFunction","bind","OPERATION_API","WRAPPERS","NODE_ENV","DEBUG_NODE_ENVS","DEFAULT_DEBUG_NODE_ENVS","DECODERS","DEFAULT_DECODERS","ENCODERS","DEFAULT_ENCODERS","log","noop","time","Date","now","services","path","Object","keys","paths","method","OPERATION","consumableCharsets","produceableCharsets","consumableMediaTypes","produceableMediaTypes","ajv","Ajv","verbose","includes","strict","logger","args","warn","error","useDefaults","coerceTypes","ammendedParameters","validators","operationId","parameters","concat","bodyValidator","applyWrappers","handler","handleForAWSHTTPFunction","PARSERS","DEFAULT_PARSERS","STRINGIFYERS","DEFAULT_STRINGIFYERS","BUFFER_LIMIT","DEFAULT_BUFFER_LIMIT","QUERY_PARSER","CORS","obfuscator","req","res","debugging","bufferLimit","bytes","parse","JSON","stringify","url","originalUrl","body","headers","obfuscateSensibleHeaders","request","gcpfReqToRequest","response","responseLog","responseSpec","undefined","operation","bodySpec","split","parts","filter","identity","search","substr","length","pathParameters","map","part","index","matches","exec","name","value","reduce","accParameters","retroCompatibleQueryParameters","p","in","schema","authorization","contentType","err","HTTPError","cast","contentTypes","responseObject","responses","status","responseSchema","content","responseHasSchema","type","format","castedError","code","statusCode","httpCode","params","stack","obfuscateEventBody","pipeResponseInGCPFResponse","toLowerCase","rawBody","toString","bodyStream","stream","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.js"}
|
|
1
|
+
{"version":3,"file":"googleHTTPFunction.js","names":["SEARCH_SEPARATOR","PATH_SEPARATOR","wrapHandlerForAWSHTTPFunction","initHandler","alsoInject","reuseSpecialProps","initHandlerForAWSHTTPFunction","bind","OPERATION_API","WRAPPERS","NODE_ENV","DEBUG_NODE_ENVS","DEFAULT_DEBUG_NODE_ENVS","DECODERS","DEFAULT_DECODERS","ENCODERS","DEFAULT_ENCODERS","log","noop","time","Date","now","services","path","Object","keys","paths","method","OPERATION","consumableCharsets","produceableCharsets","consumableMediaTypes","extractConsumableMediaTypes","produceableMediaTypes","extractProduceableMediaTypes","ajv","Ajv","verbose","includes","strict","logger","args","warn","error","useDefaults","coerceTypes","addAJVFormats","ammendedParameters","extractOperationSecurityParameters","validators","prepareParametersValidators","operationId","parameters","concat","bodyValidator","prepareBodyValidator","applyWrappers","compose","handler","handleForAWSHTTPFunction","PARSERS","DEFAULT_PARSERS","STRINGIFYERS","DEFAULT_STRINGIFYERS","BUFFER_LIMIT","DEFAULT_BUFFER_LIMIT","QUERY_PARSER","CORS","obfuscator","req","res","debugging","bufferLimit","bytes","parse","JSON","stringify","url","originalUrl","body","headers","obfuscateSensibleHeaders","request","gcpfReqToRequest","response","responseLog","responseSpec","undefined","operation","bodySpec","extractBodySpec","extractResponseSpec","getBody","split","parts","filter","identity","search","substr","length","pathParameters","map","part","index","matches","exec","name","value","reduce","accParameters","retroCompatibleQueryParameters","p","in","schema","filterHeaders","authorization","castParameters","applyValidators","contentType","err","HTTPError","cast","executeHandler","contentTypes","responseObject","responses","status","responseSchema","content","responseHasSchema","type","format","checkResponseMediaType","checkResponseCharset","castedError","code","statusCode","httpCode","params","stack","lowerCaseHeaders","obfuscateEventBody","pipeResponseInGCPFResponse","sendBody","toLowerCase","rawBody","toString","bodyStream","stream","PassThrough","write","end","forEach","headerName","set","pipe","jsonBody","obfuscateSensibleProps"],"sources":["../../src/wrappers/googleHTTPFunction.ts"],"sourcesContent":["import {\n DEFAULT_DEBUG_NODE_ENVS,\n DEFAULT_BUFFER_LIMIT,\n DEFAULT_PARSERS,\n DEFAULT_STRINGIFYERS,\n DEFAULT_DECODERS,\n DEFAULT_ENCODERS,\n extractOperationSecurityParameters,\n castParameters,\n} from '@whook/http-router';\nimport { reuseSpecialProps, alsoInject } from 'knifecycle';\nimport Ajv from 'ajv';\nimport addAJVFormats from 'ajv-formats';\nimport bytes from 'bytes';\nimport HTTPError from 'yhttperror';\nimport {\n prepareParametersValidators,\n prepareBodyValidator,\n applyValidators,\n filterHeaders,\n extractBodySpec,\n extractResponseSpec,\n checkResponseCharset,\n checkResponseMediaType,\n executeHandler,\n extractProduceableMediaTypes,\n extractConsumableMediaTypes,\n getBody,\n sendBody,\n} from '@whook/http-router';\nimport { noop, compose, identity, lowerCaseHeaders } from '@whook/whook';\nimport stream from 'stream';\nimport type { WhookQueryStringParser } from '@whook/http-router';\nimport type { ServiceInitializer, Dependencies, Service } from 'knifecycle';\nimport type {\n WhookRequest,\n WhookResponse,\n WhookHandler,\n ObfuscatorService,\n WhookOperation,\n WhookWrapper,\n} from '@whook/whook';\nimport type { TimeService, LogService } from 'common-services';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { Readable } from 'stream';\nimport type { CORSConfig } from '@whook/cors';\n\ntype HTTPWrapperDependencies = {\n NODE_ENV: string;\n DEBUG_NODE_ENVS?: string[];\n OPERATION: WhookOperation;\n DECODERS?: typeof DEFAULT_DECODERS;\n ENCODERS?: typeof DEFAULT_ENCODERS;\n PARSERS?: typeof DEFAULT_PARSERS;\n STRINGIFYERS?: typeof DEFAULT_STRINGIFYERS;\n QUERY_PARSER: WhookQueryStringParser;\n BUFFER_LIMIT?: string;\n obfuscator: ObfuscatorService;\n time?: TimeService;\n log?: LogService;\n WRAPPERS: WhookWrapper<Dependencies, Service>[];\n};\n\nconst SEARCH_SEPARATOR = '?';\nconst PATH_SEPARATOR = '/';\n\nexport default function wrapHandlerForAWSHTTPFunction<\n D,\n S extends WhookHandler,\n>(\n initHandler: ServiceInitializer<D, S>,\n): ServiceInitializer<D & HTTPWrapperDependencies, S> {\n return alsoInject<HTTPWrapperDependencies, D, S>(\n [\n 'OPERATION_API',\n 'WRAPPERS',\n '?DEBUG_NODE_ENVS',\n 'NODE_ENV',\n '?DECODERS',\n '?ENCODERS',\n '?PARSERS',\n '?STRINGIFYERS',\n '?BUFFER_LIMIT',\n 'QUERY_PARSER',\n 'obfuscator',\n '?log',\n '?time',\n ],\n reuseSpecialProps(\n initHandler,\n (initHandlerForAWSHTTPFunction as any).bind(\n null,\n initHandler,\n ) as ServiceInitializer<D, S>,\n ),\n );\n}\n\nasync function initHandlerForAWSHTTPFunction(\n initHandler: ServiceInitializer<Dependencies<any>, WhookHandler>,\n {\n OPERATION_API,\n WRAPPERS,\n NODE_ENV,\n DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS,\n DECODERS = DEFAULT_DECODERS,\n ENCODERS = DEFAULT_ENCODERS,\n log = noop,\n time = Date.now.bind(Date),\n ...services\n },\n) {\n const path = Object.keys(OPERATION_API.paths)[0];\n const method = Object.keys(OPERATION_API.paths[path])[0];\n const OPERATION: WhookOperation = {\n path,\n method,\n ...OPERATION_API.paths[path][method],\n };\n const consumableCharsets = Object.keys(DECODERS);\n const produceableCharsets = Object.keys(ENCODERS);\n const consumableMediaTypes = extractConsumableMediaTypes(OPERATION);\n const produceableMediaTypes = extractProduceableMediaTypes(OPERATION);\n const ajv = new Ajv({\n verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),\n strict: true,\n logger: {\n log: (...args) => log?.('debug', ...args),\n warn: (...args) => log?.('warning', ...args),\n error: (...args) => log?.('error', ...args),\n },\n useDefaults: true,\n coerceTypes: true,\n });\n addAJVFormats(ajv);\n const ammendedParameters = extractOperationSecurityParameters(\n OPERATION_API,\n OPERATION,\n );\n const validators = prepareParametersValidators(\n ajv,\n OPERATION.operationId,\n ((OPERATION.parameters || []) as OpenAPIV3.ParameterObject[]).concat(\n ammendedParameters,\n ),\n );\n const bodyValidator = prepareBodyValidator(ajv, OPERATION);\n const applyWrappers = compose(...WRAPPERS) as WhookWrapper<\n Dependencies,\n Service\n >;\n\n const handler = await (\n applyWrappers(initHandler) as ServiceInitializer<Dependencies, Service>\n )({\n OPERATION,\n DEBUG_NODE_ENVS,\n NODE_ENV,\n ...services,\n time,\n log,\n });\n\n return handleForAWSHTTPFunction.bind(\n null,\n {\n OPERATION,\n NODE_ENV,\n DEBUG_NODE_ENVS,\n DECODERS,\n ENCODERS,\n log,\n time,\n ...services,\n },\n {\n consumableMediaTypes,\n produceableMediaTypes,\n consumableCharsets,\n produceableCharsets,\n validators,\n bodyValidator,\n ammendedParameters,\n },\n handler,\n );\n}\n\nasync function handleForAWSHTTPFunction(\n {\n OPERATION,\n DEBUG_NODE_ENVS,\n NODE_ENV,\n ENCODERS,\n DECODERS,\n PARSERS = DEFAULT_PARSERS,\n STRINGIFYERS = DEFAULT_STRINGIFYERS,\n BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT,\n QUERY_PARSER,\n CORS,\n log,\n obfuscator,\n }: HTTPWrapperDependencies & { CORS: CORSConfig },\n {\n consumableMediaTypes,\n produceableMediaTypes,\n consumableCharsets,\n produceableCharsets,\n validators,\n bodyValidator,\n },\n handler: WhookHandler,\n req,\n res,\n) {\n const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);\n const bufferLimit = bytes.parse(BUFFER_LIMIT);\n\n log?.(\n 'info',\n 'GCP_FUNCTIONS_REQUEST',\n JSON.stringify({\n url: req.originalUrl,\n method: req.method,\n body: req.body,\n // body: obfuscateEventBody(obfuscator, req.body),\n headers: obfuscator.obfuscateSensibleHeaders(req.headers),\n }),\n );\n\n const request = await gcpfReqToRequest(req);\n let parameters;\n let response;\n let responseLog;\n let responseSpec;\n\n log?.(\n 'debug',\n 'REQUEST',\n JSON.stringify({\n ...request,\n body: request.body ? 'Stream' : undefined,\n headers: obfuscator.obfuscateSensibleHeaders(request.headers),\n }),\n );\n\n try {\n const operation = OPERATION;\n const bodySpec = extractBodySpec(\n request,\n consumableMediaTypes,\n consumableCharsets,\n );\n\n responseSpec = extractResponseSpec(\n operation,\n request,\n produceableMediaTypes,\n produceableCharsets,\n );\n\n try {\n const body = await getBody(\n {\n DECODERS,\n PARSERS,\n bufferLimit,\n },\n operation,\n request.body as Readable,\n bodySpec,\n );\n const path = request.url.split(SEARCH_SEPARATOR)[0];\n const parts = path.split(PATH_SEPARATOR).filter(identity);\n const search = request.url.substr(\n request.url.split(SEARCH_SEPARATOR)[0].length,\n );\n\n const pathParameters = (\n OPERATION.path\n .split(PATH_SEPARATOR)\n .filter(identity)\n .map((part, index) => {\n const matches = /^\\{([\\d\\w]+)\\}$/i.exec(part);\n\n if (matches) {\n return {\n name: matches[1],\n value: parts[index],\n };\n }\n }) as Array<{ name: string; value: string }>\n )\n .filter(identity)\n .reduce(\n (accParameters, { name, value }) => ({\n ...accParameters,\n [name]: value,\n }),\n {},\n );\n\n // TODO: Update strictQS to handle OpenAPI 3\n const retroCompatibleQueryParameters = (OPERATION.parameters || [])\n .filter((p) => p.in === 'query')\n .map((p) => ({ ...p, ...p.schema }));\n\n parameters = {\n ...pathParameters,\n ...QUERY_PARSER(retroCompatibleQueryParameters as any, search),\n ...filterHeaders(operation.parameters, request.headers),\n };\n\n parameters = {\n // TODO: Use the security of the operation to infer\n // authorization parameters, see:\n // https://github.com/nfroidure/whook/blob/06ccae93d1d52d97ff70fd5e19fa826bdabf3968/packages/whook-http-router/src/validation.js#L110\n authorization: parameters.authorization,\n ...castParameters(operation.parameters || [], parameters),\n };\n\n applyValidators(operation, validators, parameters);\n\n bodyValidator(operation, bodySpec.contentType, body);\n\n parameters = {\n ...parameters,\n ...('undefined' !== typeof body ? { body } : {}),\n };\n } catch (err) {\n throw HTTPError.cast(err as Error, 400);\n }\n\n response = await executeHandler(operation, handler, parameters);\n\n if (response.body) {\n response.headers['content-type'] =\n response.headers['content-type'] || responseSpec.contentTypes[0];\n }\n\n // Check the stringifyer only when a schema is\n // specified and it is not a binary one\n const responseObject =\n operation.responses &&\n (operation.responses[response.status] as OpenAPIV3.ResponseObject);\n const responseSchema =\n responseObject &&\n responseObject.content &&\n responseObject.content[response.headers['content-type']] &&\n (responseObject.content[response.headers['content-type']]\n .schema as OpenAPIV3.SchemaObject);\n const responseHasSchema =\n responseSchema &&\n (responseSchema.type !== 'string' || responseSchema.format !== 'binary');\n\n if (responseHasSchema && !STRINGIFYERS[response.headers['content-type']]) {\n throw new HTTPError(\n 500,\n 'E_STRINGIFYER_LACK',\n response.headers['content-type'],\n );\n }\n if (response.body) {\n checkResponseMediaType(request, responseSpec, produceableMediaTypes);\n checkResponseCharset(request, responseSpec, produceableCharsets);\n }\n responseLog = {\n type: 'success',\n status: response.status,\n };\n log?.('debug', JSON.stringify(responseLog));\n } catch (err) {\n const castedError = HTTPError.cast(err as Error);\n\n responseLog = {\n type: 'error',\n code: castedError.code,\n statusCode: castedError.httpCode,\n params: castedError.params || [],\n stack: castedError.stack,\n };\n\n log?.('error', JSON.stringify(responseLog));\n response = {\n status: castedError.httpCode,\n headers: {\n ...lowerCaseHeaders(CORS),\n ...(castedError.headers ?? {}),\n 'content-type': 'application/json',\n },\n body: {\n error: {\n code: castedError.code,\n stack: debugging ? responseLog.stack : undefined,\n params: debugging ? responseLog.params : undefined,\n },\n },\n };\n }\n\n log?.(\n 'debug',\n 'RESPONSE',\n JSON.stringify({\n ...response,\n body: obfuscateEventBody(obfuscator, response.body),\n headers: obfuscator.obfuscateSensibleHeaders(response.headers),\n }),\n );\n\n await pipeResponseInGCPFResponse(\n await sendBody(\n {\n ENCODERS,\n STRINGIFYERS,\n },\n response,\n ),\n res,\n );\n}\n\nasync function gcpfReqToRequest(req): Promise<WhookRequest> {\n const request: WhookRequest = {\n method: req.method.toLowerCase(),\n headers: lowerCaseHeaders(req.headers || {}),\n url: req.originalUrl,\n };\n\n if (req.rawBody) {\n request.headers['content-length'] = req.rawBody.length.toString();\n const bodyStream = new stream.PassThrough();\n\n request.body = bodyStream;\n bodyStream.write(req.rawBody);\n bodyStream.end();\n }\n\n return request;\n}\n\nasync function pipeResponseInGCPFResponse(\n response: WhookResponse,\n res,\n): Promise<void> {\n Object.keys(response.headers || {}).forEach((headerName) => {\n res.set(headerName, response.headers?.[headerName]);\n });\n res.status(response.status);\n\n if (response.body) {\n (response.body as Readable).pipe(res);\n return;\n }\n\n res.end();\n}\n\nfunction obfuscateEventBody(obfuscator, rawBody) {\n if (typeof rawBody === 'string') {\n try {\n const jsonBody = JSON.parse(rawBody);\n\n return JSON.stringify(obfuscator.obfuscateSensibleProps(jsonBody));\n // eslint-disable-next-line\n } catch (err) {}\n }\n return rawBody;\n}\n"],"mappings":"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"}
|