@whook/gcp-functions 13.0.0 → 13.1.2
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 +76 -28
- package/dist/commands/testHTTPFunction.d.ts +1 -1
- package/dist/commands/testHTTPFunction.js +2 -2
- package/dist/commands/testHTTPFunction.js.map +1 -1
- package/dist/index.d.ts +27 -0
- package/dist/index.js +33 -65
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +10 -0
- package/dist/index.test.js.map +1 -0
- package/dist/libs/utils.d.ts +3 -2
- package/dist/libs/utils.js +2 -2
- package/dist/libs/utils.js.map +1 -1
- package/dist/services/HANDLER.d.ts +12 -0
- package/dist/services/HANDLER.js +21 -0
- package/dist/services/HANDLER.js.map +1 -0
- package/dist/services/_autoload.d.ts +27 -13
- package/dist/services/_autoload.js +79 -31
- package/dist/services/_autoload.js.map +1 -1
- package/dist/services/log.js +2 -2
- package/dist/services/log.js.map +1 -1
- package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.d.ts +24 -0
- package/dist/wrappers/{googleHTTPFunction.js → wrapHandlerForGoogleHTTPFunction.js} +88 -77
- package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.js.map +1 -0
- package/package.json +10 -9
- package/src/commands/testHTTPFunction.ts +3 -4
- package/src/index.test.ts +11 -0
- package/src/index.ts +43 -97
- package/src/libs/utils.ts +3 -2
- package/src/services/HANDLER.ts +41 -0
- package/src/services/_autoload.ts +136 -41
- package/src/services/log.ts +2 -2
- package/src/wrappers/{googleHTTPFunction.ts → wrapHandlerForGoogleHTTPFunction.ts} +153 -141
- package/dist/services/log.test.js +0 -8
- package/dist/services/log.test.js.map +0 -1
- package/dist/wrappers/googleHTTPFunction.d.ts +0 -22
- package/dist/wrappers/googleHTTPFunction.js.map +0 -1
- package/src/services/log.test.ts +0 -8
- /package/dist/{services/log.test.d.ts → index.test.d.ts} +0 -0
|
@@ -1,26 +1,35 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1
2
|
import { initAutoload, noop, cleanupOpenAPI } from '@whook/whook';
|
|
2
|
-
import { SPECIAL_PROPS, wrapInitializer, constant, alsoInject, } from 'knifecycle';
|
|
3
|
+
import { SPECIAL_PROPS, UNBUILDABLE_SERVICES, wrapInitializer, constant, alsoInject, } from 'knifecycle';
|
|
3
4
|
import { printStackTrace, YError } from 'yerror';
|
|
4
5
|
import { dereferenceOpenAPIOperations, getOpenAPIOperations, } from '@whook/http-router';
|
|
5
|
-
|
|
6
|
+
import initHandler from './HANDLER.js';
|
|
7
|
+
import initWrapHandlerForGoogleHTTPFunction from '../wrappers/wrapHandlerForGoogleHTTPFunction.js';
|
|
8
|
+
export const GCP_WRAPPERS = {
|
|
9
|
+
http: {
|
|
10
|
+
name: 'wrapHandlerForGoogleHTTPFunction',
|
|
11
|
+
initializer: initWrapHandlerForGoogleHTTPFunction,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance, resolve, log = noop, }, $autoload) => {
|
|
6
15
|
let API;
|
|
7
16
|
let OPERATION_APIS;
|
|
8
17
|
const getAPIOperation = (() => {
|
|
9
18
|
return async (serviceName) => {
|
|
19
|
+
const cleanedName = serviceName.split('_').pop();
|
|
10
20
|
// eslint-disable-next-line
|
|
11
21
|
API = API || (await $injector(['API'])).API;
|
|
12
22
|
// eslint-disable-next-line
|
|
13
23
|
OPERATION_APIS =
|
|
14
24
|
OPERATION_APIS ||
|
|
15
25
|
getOpenAPIOperations(API);
|
|
16
|
-
const OPERATION = OPERATION_APIS.find((operation) =>
|
|
26
|
+
const OPERATION = OPERATION_APIS.find((operation) => cleanedName ===
|
|
17
27
|
(((operation['x-whook'] || {}).sourceOperationId &&
|
|
18
|
-
'
|
|
19
|
-
|
|
20
|
-
'OPERATION_API_' + operation.operationId) +
|
|
28
|
+
(operation['x-whook'] || {}).sourceOperationId) ||
|
|
29
|
+
operation.operationId) +
|
|
21
30
|
((operation['x-whook'] || {}).suffix || ''));
|
|
22
31
|
if (!OPERATION) {
|
|
23
|
-
log('error', '💥 - Unable to find a
|
|
32
|
+
log('error', '💥 - Unable to find a function operation definition!');
|
|
24
33
|
throw new YError('E_OPERATION_NOT_FOUND', serviceName);
|
|
25
34
|
}
|
|
26
35
|
// eslint-disable-next-line
|
|
@@ -32,29 +41,45 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
|
|
|
32
41
|
},
|
|
33
42
|
},
|
|
34
43
|
});
|
|
35
|
-
return
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
return [
|
|
45
|
+
OPERATION['x-whook']?.type || 'http',
|
|
46
|
+
OPERATION.operationId,
|
|
47
|
+
{
|
|
48
|
+
...OPERATION_API,
|
|
49
|
+
paths: {
|
|
50
|
+
[OPERATION.path]: {
|
|
51
|
+
[OPERATION.method]: (await dereferenceOpenAPIOperations(OPERATION_API, [
|
|
52
|
+
{
|
|
53
|
+
path: OPERATION.path,
|
|
54
|
+
method: OPERATION.method,
|
|
55
|
+
...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],
|
|
56
|
+
parameters: OPERATION.parameters,
|
|
57
|
+
},
|
|
58
|
+
]))[0],
|
|
59
|
+
},
|
|
47
60
|
},
|
|
48
61
|
},
|
|
49
|
-
|
|
62
|
+
];
|
|
50
63
|
};
|
|
51
64
|
})();
|
|
52
65
|
log('debug', '🤖 - Initializing the `$autoload` build wrapper.');
|
|
53
66
|
return async (serviceName) => {
|
|
67
|
+
if (UNBUILDABLE_SERVICES.includes(serviceName)) {
|
|
68
|
+
log('warning', `🤷 - Building a project with the "${serviceName}" unbuildable service (ie Knifecycle ones: ${UNBUILDABLE_SERVICES.join(', ')}) can give unpredictable results!`);
|
|
69
|
+
return {
|
|
70
|
+
initializer: constant(serviceName, undefined),
|
|
71
|
+
path: `constant://${serviceName}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
54
74
|
try {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
75
|
+
let initializer;
|
|
76
|
+
try {
|
|
77
|
+
initializer = $instance._getInitializer(serviceName);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
log('debug', `🤖 - Direct initializer access failure from the Knifecycle instance: "${serviceName}".`);
|
|
81
|
+
log('debug-stack', printStackTrace(err));
|
|
82
|
+
}
|
|
58
83
|
if (initializer && initializer[SPECIAL_PROPS.TYPE] === 'constant') {
|
|
59
84
|
log('debug', `🤖 - Reusing a constant initializer directly from the Knifecycle instance: "${serviceName}".`);
|
|
60
85
|
return {
|
|
@@ -63,12 +88,33 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
|
|
|
63
88
|
};
|
|
64
89
|
}
|
|
65
90
|
if (serviceName.startsWith('OPERATION_API_')) {
|
|
66
|
-
const OPERATION_API = await getAPIOperation(serviceName);
|
|
91
|
+
const [, , OPERATION_API] = await getAPIOperation(serviceName);
|
|
67
92
|
return {
|
|
68
93
|
initializer: constant(serviceName, OPERATION_API),
|
|
69
94
|
path: `api://${serviceName}`,
|
|
70
95
|
};
|
|
71
96
|
}
|
|
97
|
+
if (serviceName.startsWith('OPERATION_WRAPPER_')) {
|
|
98
|
+
const [type] = await getAPIOperation(serviceName);
|
|
99
|
+
return {
|
|
100
|
+
initializer: alsoInject([
|
|
101
|
+
`OPERATION_API>${serviceName.replace('OPERATION_WRAPPER_', 'OPERATION_API_')}`,
|
|
102
|
+
], GCP_WRAPPERS[type].initializer),
|
|
103
|
+
path: resolve(`@whook/gcp-functions/dist/wrappers/${GCP_WRAPPERS[type].name}`),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (serviceName.startsWith('OPERATION_HANDLER_')) {
|
|
107
|
+
const [, operationId] = await getAPIOperation(serviceName);
|
|
108
|
+
return {
|
|
109
|
+
name: serviceName,
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
+
initializer: alsoInject([
|
|
112
|
+
`mainWrapper>OPERATION_WRAPPER_${serviceName.replace('OPERATION_HANDLER_', '')}`,
|
|
113
|
+
`baseHandler>${operationId}`,
|
|
114
|
+
], initHandler),
|
|
115
|
+
path: resolve('@whook/gcp-functions/dist/services/HANDLER'),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
72
118
|
if (BUILD_CONSTANTS[serviceName]) {
|
|
73
119
|
return {
|
|
74
120
|
initializer: constant(serviceName, BUILD_CONSTANTS[serviceName]),
|
|
@@ -78,7 +124,7 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
|
|
|
78
124
|
return $autoload(serviceName);
|
|
79
125
|
}
|
|
80
126
|
catch (err) {
|
|
81
|
-
log('error',
|
|
127
|
+
log('error', `💥 - Build error while loading "${serviceName}".`);
|
|
82
128
|
log('error-stack', printStackTrace(err));
|
|
83
129
|
throw err;
|
|
84
130
|
}
|
|
@@ -86,14 +132,16 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
|
|
|
86
132
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
87
133
|
});
|
|
88
134
|
/**
|
|
89
|
-
* Wrap the _autoload service in order to build
|
|
90
|
-
*
|
|
135
|
+
* Wrap the _autoload service in order to build for GCP
|
|
136
|
+
* Functions compatible code.
|
|
91
137
|
* @param {Object} services
|
|
92
138
|
* The services ENV depends on
|
|
93
|
-
* @param {Object} services.
|
|
94
|
-
*
|
|
95
|
-
* @param {Object}
|
|
96
|
-
* A
|
|
139
|
+
* @param {Object} [services.BUILD_CONSTANTS]
|
|
140
|
+
* Service whose contents should be considered as constants
|
|
141
|
+
* @param {Object} $instance
|
|
142
|
+
* A Knifecycle instance
|
|
143
|
+
* @param {Object} $injector
|
|
144
|
+
* The Knifecycle injector
|
|
97
145
|
* @param {Object} [services.log=noop]
|
|
98
146
|
* An optional logging service
|
|
99
147
|
* @return {Promise<Object>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_autoload.js","sourceRoot":"","sources":["../../src/services/_autoload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"_autoload.js","sourceRoot":"","sources":["../../src/services/_autoload.ts"],"names":[],"mappings":"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"}
|
package/dist/services/log.js
CHANGED
package/dist/services/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/services/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/services/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,eAAe,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { DEFAULT_PARSERS, DEFAULT_STRINGIFYERS, DEFAULT_DECODERS, DEFAULT_ENCODERS } from '@whook/http-router';
|
|
3
|
+
import stream from 'stream';
|
|
4
|
+
import type { WhookQueryStringParser } from '@whook/http-router';
|
|
5
|
+
import type { WhookResponse, WhookHandler, WhookObfuscatorService, WhookOperation, WhookWrapper, WhookErrorHandler } from '@whook/whook';
|
|
6
|
+
import type { LogService } from 'common-services';
|
|
7
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
8
|
+
import type { AppEnvVars } from 'application-services';
|
|
9
|
+
export type WhookWrapHTTPFunctionDependencies = {
|
|
10
|
+
OPERATION_API: OpenAPIV3.Document;
|
|
11
|
+
ENV: AppEnvVars;
|
|
12
|
+
DEBUG_NODE_ENVS?: string[];
|
|
13
|
+
DECODERS?: typeof DEFAULT_DECODERS;
|
|
14
|
+
ENCODERS?: typeof DEFAULT_ENCODERS;
|
|
15
|
+
PARSERS?: typeof DEFAULT_PARSERS;
|
|
16
|
+
STRINGIFYERS?: typeof DEFAULT_STRINGIFYERS;
|
|
17
|
+
QUERY_PARSER: WhookQueryStringParser;
|
|
18
|
+
BUFFER_LIMIT?: string;
|
|
19
|
+
obfuscator: WhookObfuscatorService;
|
|
20
|
+
errorHandler: WhookErrorHandler;
|
|
21
|
+
log?: LogService;
|
|
22
|
+
};
|
|
23
|
+
declare const _default: import("knifecycle").ServiceInitializer<WhookWrapHTTPFunctionDependencies, WhookWrapper<WhookHandler<import("knifecycle").Parameters, WhookResponse<number, void | import("@whook/http-transaction").WhookHeaders, void | stream.Readable | import("type-fest").JsonValue>, WhookOperation<Record<string, unknown>>>>>;
|
|
24
|
+
export default _default;
|
|
@@ -1,47 +1,70 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { printStackTrace } from 'yerror';
|
|
2
|
+
import { YError, printStackTrace } from 'yerror';
|
|
3
3
|
import { DEFAULT_DEBUG_NODE_ENVS, DEFAULT_BUFFER_LIMIT, DEFAULT_PARSERS, DEFAULT_STRINGIFYERS, DEFAULT_DECODERS, DEFAULT_ENCODERS, extractOperationSecurityParameters, castParameters, } from '@whook/http-router';
|
|
4
|
-
import {
|
|
4
|
+
import { autoService } from 'knifecycle';
|
|
5
5
|
import Ajv from 'ajv';
|
|
6
6
|
import addAJVFormats from 'ajv-formats';
|
|
7
7
|
import bytes from 'bytes';
|
|
8
8
|
import { YHTTPError } from 'yhttperror';
|
|
9
9
|
import { prepareParametersValidators, prepareBodyValidator, applyValidators, filterHeaders, extractBodySpec, extractResponseSpec, checkResponseCharset, checkResponseMediaType, executeHandler, extractProduceableMediaTypes, extractConsumableMediaTypes, getBody, sendBody, } from '@whook/http-router';
|
|
10
|
-
import { noop,
|
|
10
|
+
import { noop, identity, lowerCaseHeaders } from '@whook/whook';
|
|
11
11
|
import stream from 'stream';
|
|
12
12
|
const SEARCH_SEPARATOR = '?';
|
|
13
13
|
const PATH_SEPARATOR = '/';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Wrap an handler to make it work with GCP Functions.
|
|
16
|
+
* @param {Object} services
|
|
17
|
+
* The services the wrapper depends on
|
|
18
|
+
* @param {Object} services.OPERATION_API
|
|
19
|
+
* An OpenAPI definitition for that handler
|
|
20
|
+
* @param {Object} services.ENV
|
|
21
|
+
* The process environment
|
|
22
|
+
* @param {Object} services.DEBUG_NODE_ENVS
|
|
23
|
+
* The NODE_ENV values that trigger debugging
|
|
24
|
+
* @param {Object} services.DECODERS
|
|
25
|
+
* Request body decoders available
|
|
26
|
+
* @param {Object} services.ENCODERS
|
|
27
|
+
* Response body encoders available
|
|
28
|
+
* @param {Object} services.PARSERS
|
|
29
|
+
* Request body parsers available
|
|
30
|
+
* @param {Object} services.STRINGIFYERS
|
|
31
|
+
* Response body stringifyers available
|
|
32
|
+
* @param {Object} services.BUFFER_LIMIT
|
|
33
|
+
* The buffer size limit
|
|
34
|
+
* @param {Object} services.QUERY_PARSER
|
|
35
|
+
* The query parser to use
|
|
36
|
+
* @param {Object} services.obfuscator
|
|
37
|
+
* A service to hide sensible values
|
|
38
|
+
* @param {Object} services.errorHandler
|
|
39
|
+
* A service that changes any error to Whook response
|
|
40
|
+
* @param {Object} [services.log=noop]
|
|
41
|
+
* An optional logging service
|
|
42
|
+
* @return {Promise<Object>}
|
|
43
|
+
* A promise of an object containing the reshaped env vars.
|
|
44
|
+
*/
|
|
45
|
+
async function initWrapHandlerForGoogleHTTPFunction({ OPERATION_API, ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, DECODERS = DEFAULT_DECODERS, ENCODERS = DEFAULT_ENCODERS, PARSERS = DEFAULT_PARSERS, STRINGIFYERS = DEFAULT_STRINGIFYERS, BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT, QUERY_PARSER, obfuscator, errorHandler, log = noop, }) {
|
|
46
|
+
log('debug', '📥 - Initializing the AWS Lambda cron wrapper.');
|
|
32
47
|
const path = Object.keys(OPERATION_API.paths)[0];
|
|
33
|
-
const
|
|
34
|
-
|
|
48
|
+
const pathObject = OPERATION_API.paths[path];
|
|
49
|
+
if (typeof pathObject === 'undefined' || '$ref' in pathObject) {
|
|
50
|
+
throw new YError('E_BAD_OPERATION', 'pathObject', pathObject);
|
|
51
|
+
}
|
|
52
|
+
const method = Object.keys(pathObject)[0];
|
|
53
|
+
const operationObject = pathObject[method];
|
|
54
|
+
if (typeof operationObject === 'undefined' || '$ref' in operationObject) {
|
|
55
|
+
throw new YError('E_BAD_OPERATION', 'operationObject', operationObject);
|
|
56
|
+
}
|
|
57
|
+
const operation = {
|
|
35
58
|
path,
|
|
36
59
|
method,
|
|
37
|
-
...
|
|
60
|
+
...operationObject,
|
|
38
61
|
};
|
|
39
62
|
const consumableCharsets = Object.keys(DECODERS);
|
|
40
63
|
const produceableCharsets = Object.keys(ENCODERS);
|
|
41
|
-
const consumableMediaTypes = extractConsumableMediaTypes(
|
|
42
|
-
const produceableMediaTypes = extractProduceableMediaTypes(
|
|
64
|
+
const consumableMediaTypes = extractConsumableMediaTypes(operation);
|
|
65
|
+
const produceableMediaTypes = extractProduceableMediaTypes(operation);
|
|
43
66
|
const ajv = new Ajv.default({
|
|
44
|
-
verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
|
|
67
|
+
verbose: DEBUG_NODE_ENVS.includes(ENV.NODE_ENV),
|
|
45
68
|
strict: true,
|
|
46
69
|
logger: {
|
|
47
70
|
log: (...args) => log?.('debug', ...args),
|
|
@@ -52,38 +75,34 @@ async function initHandlerForAWSHTTPFunction(initHandler, { OPERATION_API, WRAPP
|
|
|
52
75
|
coerceTypes: true,
|
|
53
76
|
});
|
|
54
77
|
addAJVFormats.default(ajv);
|
|
55
|
-
const ammendedParameters = extractOperationSecurityParameters(OPERATION_API,
|
|
56
|
-
const validators = prepareParametersValidators(ajv,
|
|
57
|
-
const bodyValidator = prepareBodyValidator(ajv,
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
validators,
|
|
82
|
-
bodyValidator,
|
|
83
|
-
}, handler);
|
|
78
|
+
const ammendedParameters = extractOperationSecurityParameters(OPERATION_API, operation);
|
|
79
|
+
const validators = prepareParametersValidators(ajv, operation.operationId, (operation.parameters || []).concat(ammendedParameters));
|
|
80
|
+
const bodyValidator = prepareBodyValidator(ajv, operation);
|
|
81
|
+
const wrapper = async (handler) => {
|
|
82
|
+
const wrappedHandler = handleForAWSHTTPFunction.bind(null, {
|
|
83
|
+
DECODERS,
|
|
84
|
+
ENCODERS,
|
|
85
|
+
PARSERS,
|
|
86
|
+
STRINGIFYERS,
|
|
87
|
+
BUFFER_LIMIT,
|
|
88
|
+
QUERY_PARSER,
|
|
89
|
+
obfuscator,
|
|
90
|
+
errorHandler,
|
|
91
|
+
log,
|
|
92
|
+
}, {
|
|
93
|
+
consumableMediaTypes,
|
|
94
|
+
produceableMediaTypes,
|
|
95
|
+
consumableCharsets,
|
|
96
|
+
produceableCharsets,
|
|
97
|
+
validators,
|
|
98
|
+
bodyValidator,
|
|
99
|
+
operation,
|
|
100
|
+
}, handler);
|
|
101
|
+
return wrappedHandler;
|
|
102
|
+
};
|
|
103
|
+
return wrapper;
|
|
84
104
|
}
|
|
85
|
-
async function handleForAWSHTTPFunction({
|
|
86
|
-
const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
|
|
105
|
+
async function handleForAWSHTTPFunction({ DECODERS, ENCODERS, PARSERS, STRINGIFYERS, BUFFER_LIMIT, QUERY_PARSER, obfuscator, errorHandler, log, }, { consumableMediaTypes, produceableMediaTypes, consumableCharsets, produceableCharsets, validators, bodyValidator, operation, }, handler, req, res) {
|
|
87
106
|
const bufferLimit = bytes.parse(BUFFER_LIMIT);
|
|
88
107
|
log?.('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
|
|
89
108
|
url: req.originalUrl,
|
|
@@ -103,7 +122,6 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
|
|
|
103
122
|
headers: obfuscator.obfuscateSensibleHeaders(request.headers),
|
|
104
123
|
}));
|
|
105
124
|
try {
|
|
106
|
-
const operation = OPERATION;
|
|
107
125
|
const bodySpec = extractBodySpec(request, consumableMediaTypes, consumableCharsets);
|
|
108
126
|
responseSpec = extractResponseSpec(operation, request, produceableMediaTypes, produceableCharsets);
|
|
109
127
|
try {
|
|
@@ -115,7 +133,7 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
|
|
|
115
133
|
const path = request.url.split(SEARCH_SEPARATOR)[0];
|
|
116
134
|
const parts = path.split(PATH_SEPARATOR).filter(identity);
|
|
117
135
|
const search = request.url.substr(request.url.split(SEARCH_SEPARATOR)[0].length);
|
|
118
|
-
const pathParameters =
|
|
136
|
+
const pathParameters = operation.path
|
|
119
137
|
.split(PATH_SEPARATOR)
|
|
120
138
|
.filter(identity)
|
|
121
139
|
.map((part, index) => {
|
|
@@ -133,7 +151,7 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
|
|
|
133
151
|
[name]: value,
|
|
134
152
|
}), {});
|
|
135
153
|
// TODO: Update strictQS to handle OpenAPI 3
|
|
136
|
-
const retroCompatibleQueryParameters = (
|
|
154
|
+
const retroCompatibleQueryParameters = (operation.parameters || [])
|
|
137
155
|
.filter((p) => p.in === 'query')
|
|
138
156
|
.map((p) => ({ ...p, ...p.schema }));
|
|
139
157
|
parameters = {
|
|
@@ -188,29 +206,21 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
|
|
|
188
206
|
log?.('debug', JSON.stringify(responseLog));
|
|
189
207
|
}
|
|
190
208
|
catch (err) {
|
|
191
|
-
|
|
209
|
+
response = await errorHandler('none', responseSpec, err);
|
|
192
210
|
responseLog = {
|
|
193
211
|
type: 'error',
|
|
194
|
-
code:
|
|
195
|
-
statusCode:
|
|
196
|
-
params:
|
|
197
|
-
stack: printStackTrace(
|
|
212
|
+
code: err?.code || 'E_UNEXPECTED',
|
|
213
|
+
statusCode: response.status,
|
|
214
|
+
params: err?.params || [],
|
|
215
|
+
stack: printStackTrace(err),
|
|
198
216
|
};
|
|
199
217
|
log?.('error', JSON.stringify(responseLog));
|
|
200
218
|
response = {
|
|
201
|
-
|
|
219
|
+
...response,
|
|
202
220
|
headers: {
|
|
203
|
-
...
|
|
204
|
-
...(castedError.headers ?? {}),
|
|
221
|
+
...response.headers,
|
|
205
222
|
'content-type': 'application/json',
|
|
206
223
|
},
|
|
207
|
-
body: {
|
|
208
|
-
error: {
|
|
209
|
-
code: castedError.code,
|
|
210
|
-
stack: debugging ? responseLog.stack : undefined,
|
|
211
|
-
params: debugging ? responseLog.params : undefined,
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
224
|
};
|
|
215
225
|
}
|
|
216
226
|
log?.('debug', 'RESPONSE', JSON.stringify({
|
|
@@ -260,4 +270,5 @@ function obfuscateEventBody(obfuscator, rawBody) {
|
|
|
260
270
|
}
|
|
261
271
|
return rawBody;
|
|
262
272
|
}
|
|
263
|
-
|
|
273
|
+
export default autoService(initWrapHandlerForGoogleHTTPFunction);
|
|
274
|
+
//# sourceMappingURL=wrapHandlerForGoogleHTTPFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapHandlerForGoogleHTTPFunction.js","sourceRoot":"","sources":["../../src/wrappers/wrapHandlerForGoogleHTTPFunction.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"name": "@whook/gcp-functions",
|
|
32
|
-
"version": "13.
|
|
32
|
+
"version": "13.1.2",
|
|
33
33
|
"description": "Build and deploy to GCP Cloud Functions with Whook.",
|
|
34
34
|
"type": "module",
|
|
35
35
|
"main": "dist/index.js",
|
|
@@ -49,15 +49,16 @@
|
|
|
49
49
|
},
|
|
50
50
|
"homepage": "https://github.com/nfroidure/whook",
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@whook/cors": "^13.
|
|
53
|
-
"@whook/http-router": "^13.
|
|
54
|
-
"@whook/whook": "^13.
|
|
52
|
+
"@whook/cors": "^13.1.2",
|
|
53
|
+
"@whook/http-router": "^13.1.0",
|
|
54
|
+
"@whook/whook": "^13.1.0",
|
|
55
55
|
"ajv": "^8.12.0",
|
|
56
56
|
"ajv-formats": "^2.1.1",
|
|
57
|
+
"application-services": "^4.0.0",
|
|
57
58
|
"camelcase": "^8.0.0",
|
|
58
|
-
"common-services": "^
|
|
59
|
+
"common-services": "^15.0.0",
|
|
59
60
|
"cpr": "3.0.1",
|
|
60
|
-
"knifecycle": "^
|
|
61
|
+
"knifecycle": "^17.0.1",
|
|
61
62
|
"mkdirp": "^3.0.1",
|
|
62
63
|
"openapi-types": "^12.1.3",
|
|
63
64
|
"qs": "^6.11.2",
|
|
@@ -77,8 +78,8 @@
|
|
|
77
78
|
"eslint-plugin-prettier": "^5.0.0",
|
|
78
79
|
"jest": "^29.6.2",
|
|
79
80
|
"jsdoc-to-markdown": "^8.0.0",
|
|
80
|
-
"metapak": "^5.1.
|
|
81
|
-
"metapak-nfroidure": "15.0.
|
|
81
|
+
"metapak": "^5.1.7",
|
|
82
|
+
"metapak-nfroidure": "15.0.3",
|
|
82
83
|
"prettier": "^3.0.2",
|
|
83
84
|
"rimraf": "^5.0.1",
|
|
84
85
|
"typescript": "^5.1.6"
|
|
@@ -170,5 +171,5 @@
|
|
|
170
171
|
"test": "npm run jest",
|
|
171
172
|
"type-check": "tsc --pretty --noEmit"
|
|
172
173
|
},
|
|
173
|
-
"gitHead": "
|
|
174
|
+
"gitHead": "3d0b9334beef4cc3a23e2b82cf94b036658b7e59"
|
|
174
175
|
}
|
|
@@ -54,14 +54,14 @@ export const definition: WhookCommandDefinition = {
|
|
|
54
54
|
export default extra(definition, autoService(initTestHTTPFunctionCommand));
|
|
55
55
|
|
|
56
56
|
async function initTestHTTPFunctionCommand({
|
|
57
|
-
|
|
57
|
+
APP_ENV,
|
|
58
58
|
PROJECT_DIR,
|
|
59
59
|
COMPILER_OPTIONS = DEFAULT_COMPILER_OPTIONS,
|
|
60
60
|
API,
|
|
61
61
|
log,
|
|
62
62
|
args,
|
|
63
63
|
}: {
|
|
64
|
-
|
|
64
|
+
APP_ENV: string;
|
|
65
65
|
PROJECT_DIR: string;
|
|
66
66
|
COMPILER_OPTIONS?: WhookCompilerOptions;
|
|
67
67
|
API: OpenAPIV3.Document;
|
|
@@ -79,8 +79,7 @@ async function initTestHTTPFunctionCommand({
|
|
|
79
79
|
}>(definition.arguments, args);
|
|
80
80
|
const extension = COMPILER_OPTIONS.format === 'cjs' ? '.cjs' : '.mjs';
|
|
81
81
|
const handler = await loadFunction(
|
|
82
|
-
{ PROJECT_DIR, log },
|
|
83
|
-
NODE_ENV,
|
|
82
|
+
{ APP_ENV, PROJECT_DIR, log },
|
|
84
83
|
name,
|
|
85
84
|
type,
|
|
86
85
|
extension,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Knifecycle } from 'knifecycle';
|
|
2
|
+
import { describe, test, expect } from '@jest/globals';
|
|
3
|
+
import { prepareBuildEnvironment } from './index.js';
|
|
4
|
+
|
|
5
|
+
describe('prepareBuildEnvironment', () => {
|
|
6
|
+
test('should work', async () => {
|
|
7
|
+
const $ = await prepareBuildEnvironment(new Knifecycle());
|
|
8
|
+
|
|
9
|
+
expect($).toBeDefined();
|
|
10
|
+
});
|
|
11
|
+
});
|