@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.
Files changed (38) hide show
  1. package/README.md +76 -28
  2. package/dist/commands/testHTTPFunction.d.ts +1 -1
  3. package/dist/commands/testHTTPFunction.js +2 -2
  4. package/dist/commands/testHTTPFunction.js.map +1 -1
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.js +33 -65
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.test.js +10 -0
  9. package/dist/index.test.js.map +1 -0
  10. package/dist/libs/utils.d.ts +3 -2
  11. package/dist/libs/utils.js +2 -2
  12. package/dist/libs/utils.js.map +1 -1
  13. package/dist/services/HANDLER.d.ts +12 -0
  14. package/dist/services/HANDLER.js +21 -0
  15. package/dist/services/HANDLER.js.map +1 -0
  16. package/dist/services/_autoload.d.ts +27 -13
  17. package/dist/services/_autoload.js +79 -31
  18. package/dist/services/_autoload.js.map +1 -1
  19. package/dist/services/log.js +2 -2
  20. package/dist/services/log.js.map +1 -1
  21. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.d.ts +24 -0
  22. package/dist/wrappers/{googleHTTPFunction.js → wrapHandlerForGoogleHTTPFunction.js} +88 -77
  23. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.js.map +1 -0
  24. package/package.json +10 -9
  25. package/src/commands/testHTTPFunction.ts +3 -4
  26. package/src/index.test.ts +11 -0
  27. package/src/index.ts +43 -97
  28. package/src/libs/utils.ts +3 -2
  29. package/src/services/HANDLER.ts +41 -0
  30. package/src/services/_autoload.ts +136 -41
  31. package/src/services/log.ts +2 -2
  32. package/src/wrappers/{googleHTTPFunction.ts → wrapHandlerForGoogleHTTPFunction.ts} +153 -141
  33. package/dist/services/log.test.js +0 -8
  34. package/dist/services/log.test.js.map +0 -1
  35. package/dist/wrappers/googleHTTPFunction.d.ts +0 -22
  36. package/dist/wrappers/googleHTTPFunction.js.map +0 -1
  37. package/src/services/log.test.ts +0 -8
  38. /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
- const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance, log = noop, }, $autoload) => {
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) => serviceName ===
26
+ const OPERATION = OPERATION_APIS.find((operation) => cleanedName ===
17
27
  (((operation['x-whook'] || {}).sourceOperationId &&
18
- 'OPERATION_API_' +
19
- (operation['x-whook'] || {}).sourceOperationId) ||
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 lambda operation definition!');
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
- ...OPERATION_API,
37
- paths: {
38
- [OPERATION.path]: {
39
- [OPERATION.method]: (await dereferenceOpenAPIOperations(OPERATION_API, [
40
- {
41
- path: OPERATION.path,
42
- method: OPERATION.method,
43
- ...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],
44
- parameters: OPERATION.parameters,
45
- },
46
- ]))[0],
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
- // TODO: add initializer map to knifecycle public API
56
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
- const initializer = $instance._initializers.get(serviceName);
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', `Build error while loading "${serviceName}".`);
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 AWS
90
- * Lambda compatible code.
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.NODE_ENV
94
- * The injected NODE_ENV value to add it to the build env
95
- * @param {Object} [services.PROXYED_ENV_VARS={}]
96
- * A list of environment variable names to proxy
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,EAEL,aAAa,EACb,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAe5B,MAAM,kBAAkB,GAGpB,CAAC,KAAK,EACR,EACE,eAAe,GAAG,EAAE,EACpB,SAAS,EACT,SAAS,EACT,GAAG,GAAG,IAAI,GAMX,EACD,SAAyD,EAMzD,EAAE;IACF,IAAI,GAAuB,CAAC;IAC5B,IAAI,cAAuE,CAAC;IAC5E,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;QAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;YAC3B,2BAA2B;YAC3B,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5C,2BAA2B;YAC3B,cAAc;gBACZ,cAAc;oBACd,oBAAoB,CAAqC,GAAG,CAAC,CAAC;YAEhE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CACnC,CAAC,SAAS,EAAE,EAAE,CACZ,WAAW;gBACX,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;oBAC9C,gBAAgB;wBACd,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBACjD,gBAAgB,GAAG,SAAS,CAAC,WAAW,CAAC;oBACzC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAChD,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE;gBACd,GAAG,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAAC;gBACnE,MAAM,IAAI,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;aACxD;YAED,2BAA2B;YAC3B,MAAM,aAAa,GAAG,cAAc,CAAC;gBACnC,GAAG,GAAG;gBACN,KAAK,EAAE;oBACL,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBAChB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;qBAClE;iBACF;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,GAAG,aAAa;gBAChB,KAAK,EAAE;oBACL,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBAChB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAClB,MAAM,4BAA4B,CAAC,aAAa,EAAE;4BAChD;gCACE,IAAI,EAAE,SAAS,CAAC,IAAI;gCACpB,MAAM,EAAE,SAAS,CAAC,MAAM;gCACxB,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;gCAC1D,UAAU,EAAE,SAAS,CAAC,UAAU;6BACjC;yBACF,CAAC,CACH,CAAC,CAAC,CAAC;qBACL;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IAEL,GAAG,CAAC,OAAO,EAAE,kDAAkD,CAAC,CAAC;IAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,IAAI;YACF,qDAAqD;YACrD,8DAA8D;YAC9D,MAAM,WAAW,GAAI,SAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAEtE,IAAI,WAAW,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;gBACjE,GAAG,CACD,OAAO,EACP,+EAA+E,WAAW,IAAI,CAC/F,CAAC;gBACF,OAAO;oBACL,WAAW;oBACX,IAAI,EAAE,cAAc,WAAW,EAAE;iBAClC,CAAC;aACH;YAED,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;gBAC5C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;gBAEzD,OAAO;oBACL,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;oBACjD,IAAI,EAAE,SAAS,WAAW,EAAE;iBAC7B,CAAC;aACH;YAED,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE;gBAChC,OAAO;oBACL,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;oBAChE,IAAI,EAAE,cAAc,WAAW,EAAE;iBAClC,CAAC;aACH;YAED,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,CAAC,OAAO,EAAE,8BAA8B,WAAW,IAAI,CAAC,CAAC;YAC5D,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,GAAY,CAAC,CAAC,CAAC;YAClD,MAAM,GAAG,CAAC;SACX;IACH,CAAC,CAAC;IACF,8DAA8D;AAChE,CAAC,CAAQ,CAAC;AAEV;;;;;;;;;;;;;GAaG;AACH,eAAe,UAAU,CACvB,CAAC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;AACtD,8DAA8D;AAC9D,eAAe,CAAC,kBAAyB,EAAE,YAAY,CAAC,CACzD,CAAC"}
1
+ {"version":3,"file":"_autoload.js","sourceRoot":"","sources":["../../src/services/_autoload.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { service } from 'knifecycle';
2
- // eslint-disable-next-line
3
- export default service(async () => console.log.bind(console), 'log');
2
+ import { log } from 'node:console';
3
+ export default service(async () => log, 'log');
4
4
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/services/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,2BAA2B;AAC3B,eAAe,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,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 { reuseSpecialProps, alsoInject } from 'knifecycle';
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, compose, identity, lowerCaseHeaders } from '@whook/whook';
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
- export default function wrapHandlerForAWSHTTPFunction(initHandler) {
15
- return alsoInject([
16
- 'OPERATION_API',
17
- 'WRAPPERS',
18
- '?DEBUG_NODE_ENVS',
19
- 'NODE_ENV',
20
- '?DECODERS',
21
- '?ENCODERS',
22
- '?PARSERS',
23
- '?STRINGIFYERS',
24
- '?BUFFER_LIMIT',
25
- 'QUERY_PARSER',
26
- 'obfuscator',
27
- '?log',
28
- '?time',
29
- ], reuseSpecialProps(initHandler, initHandlerForAWSHTTPFunction.bind(null, initHandler)));
30
- }
31
- async function initHandlerForAWSHTTPFunction(initHandler, { OPERATION_API, WRAPPERS, NODE_ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, DECODERS = DEFAULT_DECODERS, ENCODERS = DEFAULT_ENCODERS, log = noop, time = Date.now.bind(Date), ...services }) {
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 method = Object.keys(OPERATION_API.paths[path])[0];
34
- const OPERATION = {
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
- ...OPERATION_API.paths[path][method],
60
+ ...operationObject,
38
61
  };
39
62
  const consumableCharsets = Object.keys(DECODERS);
40
63
  const produceableCharsets = Object.keys(ENCODERS);
41
- const consumableMediaTypes = extractConsumableMediaTypes(OPERATION);
42
- const produceableMediaTypes = extractProduceableMediaTypes(OPERATION);
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, OPERATION);
56
- const validators = prepareParametersValidators(ajv, OPERATION.operationId, (OPERATION.parameters || []).concat(ammendedParameters));
57
- const bodyValidator = prepareBodyValidator(ajv, OPERATION);
58
- const applyWrappers = compose(...WRAPPERS);
59
- const handler = await applyWrappers(initHandler)({
60
- OPERATION,
61
- DEBUG_NODE_ENVS,
62
- NODE_ENV,
63
- ...services,
64
- time,
65
- log,
66
- });
67
- return handleForAWSHTTPFunction.bind(null, {
68
- OPERATION,
69
- NODE_ENV,
70
- DEBUG_NODE_ENVS,
71
- DECODERS,
72
- ENCODERS,
73
- log,
74
- time,
75
- ...services,
76
- }, {
77
- consumableMediaTypes,
78
- produceableMediaTypes,
79
- consumableCharsets,
80
- produceableCharsets,
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({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV, ENCODERS, DECODERS, PARSERS = DEFAULT_PARSERS, STRINGIFYERS = DEFAULT_STRINGIFYERS, BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT, QUERY_PARSER, CORS, log, obfuscator, }, { consumableMediaTypes, produceableMediaTypes, consumableCharsets, produceableCharsets, validators, bodyValidator, }, handler, req, res) {
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 = OPERATION.path
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 = (OPERATION.parameters || [])
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
- const castedError = YHTTPError.cast(err);
209
+ response = await errorHandler('none', responseSpec, err);
192
210
  responseLog = {
193
211
  type: 'error',
194
- code: castedError.code,
195
- statusCode: castedError.httpCode,
196
- params: castedError.params || [],
197
- stack: printStackTrace(castedError),
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
- status: castedError.httpCode,
219
+ ...response,
202
220
  headers: {
203
- ...lowerCaseHeaders(CORS),
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
- //# sourceMappingURL=googleHTTPFunction.js.map
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.0.0",
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.0.0",
53
- "@whook/http-router": "^13.0.0",
54
- "@whook/whook": "^13.0.0",
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": "^14.0.0",
59
+ "common-services": "^15.0.0",
59
60
  "cpr": "3.0.1",
60
- "knifecycle": "^16.0.1",
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.6",
81
- "metapak-nfroidure": "15.0.2",
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": "ffdc441236771ec28eff40a2574e5b4327e6fe2f"
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
- NODE_ENV,
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
- NODE_ENV: string;
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
+ });