@comicrelief/lambda-wrapper 1.10.1 → 2.0.0-beta.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 (89) hide show
  1. package/README.md +172 -47
  2. package/dist/core/DependencyAwareClass.d.ts +15 -0
  3. package/dist/core/DependencyAwareClass.d.ts.map +1 -0
  4. package/dist/core/DependencyAwareClass.js +20 -0
  5. package/dist/core/DependencyAwareClass.js.map +1 -0
  6. package/dist/core/DependencyInjection.d.ts +62 -0
  7. package/dist/core/DependencyInjection.d.ts.map +1 -0
  8. package/dist/core/DependencyInjection.js +83 -0
  9. package/dist/core/DependencyInjection.js.map +1 -0
  10. package/dist/core/LambdaWrapper.d.ts +61 -0
  11. package/dist/core/LambdaWrapper.d.ts.map +1 -0
  12. package/dist/core/LambdaWrapper.js +126 -0
  13. package/dist/core/LambdaWrapper.js.map +1 -0
  14. package/dist/core/config.d.ts +20 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +21 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/index.d.ts +28 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +59 -162
  21. package/dist/index.js.map +1 -0
  22. package/dist/models/ResponseModel.d.ts +91 -0
  23. package/dist/models/ResponseModel.d.ts.map +1 -0
  24. package/dist/models/ResponseModel.js +100 -0
  25. package/dist/models/ResponseModel.js.map +1 -0
  26. package/dist/models/SQSMessageModel.d.ts +46 -0
  27. package/dist/models/SQSMessageModel.d.ts.map +1 -0
  28. package/dist/models/SQSMessageModel.js +65 -0
  29. package/dist/models/SQSMessageModel.js.map +1 -0
  30. package/dist/models/StatusModel.d.ts +40 -0
  31. package/dist/models/StatusModel.d.ts.map +1 -0
  32. package/dist/models/StatusModel.js +50 -0
  33. package/dist/models/StatusModel.js.map +1 -0
  34. package/dist/services/BaseConfigService.d.ts +101 -0
  35. package/dist/services/BaseConfigService.d.ts.map +1 -0
  36. package/dist/services/BaseConfigService.js +180 -0
  37. package/dist/services/BaseConfigService.js.map +1 -0
  38. package/dist/services/HTTPService.d.ts +29 -0
  39. package/dist/services/HTTPService.d.ts.map +1 -0
  40. package/dist/services/HTTPService.js +55 -0
  41. package/dist/services/HTTPService.js.map +1 -0
  42. package/dist/services/LoggerService.d.ts +102 -0
  43. package/dist/services/LoggerService.d.ts.map +1 -0
  44. package/dist/services/LoggerService.js +258 -0
  45. package/dist/services/LoggerService.js.map +1 -0
  46. package/dist/services/RequestService.d.ts +119 -0
  47. package/dist/services/RequestService.d.ts.map +1 -0
  48. package/dist/services/RequestService.js +293 -0
  49. package/dist/services/RequestService.js.map +1 -0
  50. package/dist/services/SQSService.d.ts +181 -0
  51. package/dist/services/SQSService.d.ts.map +1 -0
  52. package/dist/services/SQSService.js +366 -0
  53. package/dist/services/SQSService.js.map +1 -0
  54. package/dist/services/TimerService.d.ts +22 -0
  55. package/dist/services/TimerService.d.ts.map +1 -0
  56. package/dist/services/TimerService.js +40 -0
  57. package/dist/services/TimerService.js.map +1 -0
  58. package/dist/utils/LambdaTermination.d.ts +14 -0
  59. package/dist/utils/LambdaTermination.d.ts.map +1 -0
  60. package/dist/utils/LambdaTermination.js +23 -0
  61. package/dist/utils/LambdaTermination.js.map +1 -0
  62. package/dist/utils/PromisifiedDelay.d.ts +17 -0
  63. package/dist/utils/PromisifiedDelay.d.ts.map +1 -0
  64. package/dist/utils/PromisifiedDelay.js +48 -0
  65. package/dist/utils/PromisifiedDelay.js.map +1 -0
  66. package/package.json +29 -19
  67. package/.eslintrc.yml +0 -16
  68. package/.github/dependabot.yml +0 -11
  69. package/.github/workflows/main.yml +0 -74
  70. package/babel.config.js +0 -13
  71. package/dist/Config/Dependencies.js +0 -40
  72. package/dist/DependencyInjection/DependencyAware.class.js +0 -47
  73. package/dist/DependencyInjection/DependencyInjection.class.js +0 -131
  74. package/dist/Model/CloudEvent.model.js +0 -156
  75. package/dist/Model/Model.model.js +0 -45
  76. package/dist/Model/Response.model.js +0 -150
  77. package/dist/Model/SQS/MarketingPreference.constraints.json +0 -28
  78. package/dist/Model/SQS/MarketingPreference.model.js +0 -641
  79. package/dist/Model/SQS/Message.model.js +0 -104
  80. package/dist/Model/Status.model.js +0 -82
  81. package/dist/Service/BaseConfig.service.js +0 -225
  82. package/dist/Service/HTTP.service.js +0 -70
  83. package/dist/Service/Logger.service.js +0 -293
  84. package/dist/Service/Request.service.js +0 -341
  85. package/dist/Service/SQS.service.js +0 -420
  86. package/dist/Service/Timer.service.js +0 -55
  87. package/dist/Wrapper/LambdaTermination.js +0 -39
  88. package/dist/Wrapper/LambdaWrapper.js +0 -164
  89. package/dist/Wrapper/PromisifiedDelay.js +0 -59
@@ -1,104 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _Model = _interopRequireDefault(require("../Model.model"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- /**
13
- * Message Model
14
- */
15
- class Message extends _Model.default {
16
- /**
17
- * Message constructor
18
- *
19
- * @param message
20
- */
21
- constructor(message) {
22
- super();
23
- this.messageId = message.MessageId;
24
- this.receiptHandle = message.ReceiptHandle;
25
- this.body = JSON.parse(message.Body);
26
- this.forDeletion = false;
27
- this.metadata = {};
28
- }
29
- /**
30
- * Get Message ID
31
- *
32
- * @returns {*}
33
- */
34
-
35
-
36
- getMessageId() {
37
- return this.messageId;
38
- }
39
- /**
40
- * Get Receipt Handle
41
- *
42
- * @returns {*}
43
- */
44
-
45
-
46
- getReceiptHandle() {
47
- return this.receiptHandle;
48
- }
49
- /**
50
- * Get Body
51
- *
52
- * @returns {any | *}
53
- */
54
-
55
-
56
- getBody() {
57
- return this.body;
58
- }
59
- /**
60
- * Set for deletion status
61
- *
62
- * @param forDeletion
63
- */
64
-
65
-
66
- setForDeletion(forDeletion) {
67
- this.forDeletion = forDeletion;
68
- }
69
- /**
70
- * Whether message is for deletion
71
- *
72
- * @returns {boolean|*}
73
- */
74
-
75
-
76
- isForDeletion() {
77
- return this.forDeletion;
78
- }
79
- /**
80
- * Get all of the message metadata
81
- *
82
- * @returns {{}}
83
- */
84
-
85
-
86
- getMetaData() {
87
- return this.metadata;
88
- }
89
- /**
90
- * Set message metadata value
91
- *
92
- * @param key
93
- * @param value
94
- */
95
-
96
-
97
- setMetaData(key, value) {
98
- this.metadata[key] = value;
99
- return this;
100
- }
101
-
102
- }
103
-
104
- exports.default = Message;
@@ -1,82 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.STATUS_TYPES = void 0;
7
-
8
- var _Model = _interopRequireDefault(require("./Model.model"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- const STATUS_TYPES = {
13
- OK: 'OK',
14
- ACCEPTABLE_FAILURE: 'ACCEPTABLE_FAILURE',
15
- APPLICATION_FAILURE: 'APPLICATION_FAILURE'
16
- };
17
- /**
18
- * StatusModel Class
19
- */
20
-
21
- exports.STATUS_TYPES = STATUS_TYPES;
22
-
23
- class StatusModel extends _Model.default {
24
- /**
25
- * StatusModel constructor
26
- *
27
- * @param service
28
- * @param status
29
- */
30
- constructor(service, status) {
31
- super();
32
- this.setService(service);
33
- this.setStatus(status);
34
- }
35
- /**
36
- * Get Service
37
- *
38
- * @returns {*}
39
- */
40
-
41
-
42
- getService() {
43
- return this.service;
44
- }
45
- /**
46
- * Set Service
47
- *
48
- * @param service
49
- */
50
-
51
-
52
- setService(service) {
53
- this.service = service;
54
- }
55
- /**
56
- * Set the status
57
- *
58
- * @param status
59
- */
60
-
61
-
62
- setStatus(status) {
63
- if (typeof STATUS_TYPES[status] === 'undefined') {
64
- throw new TypeError(`${StatusModel.name} - ${status} is not a valid status type`);
65
- }
66
-
67
- this.status = status;
68
- }
69
- /**
70
- * Get status
71
- *
72
- * @returns {string|*}
73
- */
74
-
75
-
76
- getStatus() {
77
- return this.status;
78
- }
79
-
80
- }
81
-
82
- exports.default = StatusModel;
@@ -1,225 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.ServiceStatesHttpCodes = exports.ServiceStates = exports.S3_NO_SUCH_KEY_ERROR_CODE = void 0;
7
-
8
- var _awsSdk = require("aws-sdk");
9
-
10
- var _DependencyAware = _interopRequireDefault(require("../DependencyInjection/DependencyAware.class"));
11
-
12
- var _LambdaTermination = _interopRequireDefault(require("../Wrapper/LambdaTermination"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- /**
17
- * Error.code for S3 404 errors
18
- */
19
- const S3_NO_SUCH_KEY_ERROR_CODE = 'NoSuchKey';
20
- /**
21
- * Represents the service states
22
- */
23
-
24
- exports.S3_NO_SUCH_KEY_ERROR_CODE = S3_NO_SUCH_KEY_ERROR_CODE;
25
- const ServiceStates = {
26
- OK: 'OK',
27
- TEMPORARILY_PAUSED: 'TEMPORARILY_PAUSED',
28
- INDEFINITELY_PAUSED: 'INDEFINITELY_PAUSED'
29
- };
30
- /**
31
- * Maps service states to HTTP codes
32
- */
33
-
34
- exports.ServiceStates = ServiceStates;
35
- const ServiceStatesHttpCodes = {
36
- [ServiceStates.OK]: 200,
37
- [ServiceStates.TEMPORARILY_PAUSED]: 409,
38
- [ServiceStates.INDEFINITELY_PAUSED]: 409
39
- };
40
- /**
41
- * BaseConfigService class
42
- *
43
- * This class is to be extended by the implementing services
44
- * so that `defaultConfig` and possibly `s3Config` can be
45
- * overriden / extended.
46
- */
47
-
48
- exports.ServiceStatesHttpCodes = ServiceStatesHttpCodes;
49
-
50
- class BaseConfigService extends _DependencyAware.default {
51
- /**
52
- * Returns the basic config.
53
- * This getter is used to set the default config
54
- * should the service not find any
55
- * on the configured S3 Bucket.
56
- *
57
- * See `getOrCreate` and `patch` methods.
58
- */
59
- static get defaultConfig() {
60
- return {
61
- state: ServiceStates.OK
62
- };
63
- }
64
- /**
65
- * Returns the S3 configuration
66
- * used to retrieve / update the
67
- * service configuration.
68
- */
69
-
70
-
71
- static get s3config() {
72
- return {
73
- Bucket: process.env.SERVICE_CONFIG_S3_BUCKET,
74
- Key: process.env.SERVICE_CONFIG_S3_KEY
75
- };
76
- }
77
- /**
78
- * Returns an S3 client
79
- *
80
- * @returns {S3}
81
- */
82
-
83
-
84
- static get client() {
85
- return new _awsSdk.S3({
86
- region: process.env.REGION
87
- });
88
- }
89
- /**
90
- * Returns an S3 client
91
- *
92
- * @returns {S3}
93
- */
94
-
95
-
96
- get client() {
97
- return this.constructor.client;
98
- }
99
- /**
100
- * Deletes the configuration stored on S3.
101
- * Helpful in feature tests.
102
- */
103
-
104
-
105
- async delete() {
106
- return this.client.deleteObject(this.constructor.s3config).promise();
107
- }
108
- /**
109
- * Puts the given configuration on S3
110
- *
111
- * @param config
112
- */
113
-
114
-
115
- async put(config) {
116
- await this.client.putObject({ ...this.constructor.s3config,
117
- Body: JSON.stringify(config)
118
- }).promise();
119
- return config;
120
- }
121
- /**
122
- * Gets the service configuration.
123
- */
124
-
125
-
126
- async get() {
127
- const response = await this.client.getObject(this.constructor.s3config).promise();
128
- const body = String(response.Body);
129
-
130
- if (!body) {
131
- // Empty strings are not valid configurations
132
- throw new Error('Configuration file is empty');
133
- }
134
-
135
- try {
136
- return JSON.parse(body);
137
- } catch {
138
- throw new Error('Invalid configuration file');
139
- }
140
- }
141
- /**
142
- * Gets or creates the service configuration.
143
- *
144
- * If the configuration is not found on S3
145
- * the default configuration
146
- * is uploaded and returned instead.
147
- */
148
-
149
-
150
- async getOrCreate() {
151
- try {
152
- return await this.get();
153
- } catch (error) {
154
- if (error.code !== S3_NO_SUCH_KEY_ERROR_CODE) {
155
- // Throw directly any other error
156
- throw error;
157
- }
158
-
159
- return this.put(this.constructor.defaultConfig);
160
- }
161
- }
162
- /**
163
- * Patches the existing configuration
164
- * or the default configuration
165
- * with the provided partial configuration
166
- *
167
- * @param partialConfig
168
- */
169
-
170
-
171
- async patch(partialConfig) {
172
- let base = this.constructor.defaultConfig;
173
-
174
- try {
175
- base = await this.get();
176
- } catch (error) {
177
- if (error.code !== S3_NO_SUCH_KEY_ERROR_CODE) {
178
- // Throw directly any other error
179
- throw error;
180
- } // Config doesn't exist
181
- // keep using `this.constructor.defaultConfig`
182
-
183
- }
184
-
185
- return this.put({ ...base,
186
- ...partialConfig
187
- });
188
- }
189
- /**
190
- * Performs a health check
191
- * given the currentConfig.
192
- *
193
- * If currentConfig is not supplied
194
- * it uses `getOrCreate` to fetch it.
195
- *
196
- * @param currentConfig
197
- */
198
-
199
-
200
- async healthCheck(currentConfig = null) {
201
- const config = currentConfig || (await this.getOrCreate());
202
- return ServiceStatesHttpCodes[config.state] || 500;
203
- }
204
- /**
205
- * Ensures that the application is healthy
206
- * or throws a LambdaTermination
207
- *
208
- * @param currentConfig
209
- */
210
-
211
-
212
- async ensureHealthy(currentConfig = null) {
213
- const statusCode = await this.healthCheck(currentConfig);
214
-
215
- if (statusCode < 400) {
216
- return statusCode;
217
- }
218
-
219
- const message = 'Application is not healthy.';
220
- throw new _LambdaTermination.default(message, statusCode, message, message);
221
- }
222
-
223
- }
224
-
225
- exports.default = BaseConfigService;
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.DEFAULT_HTTP_TIMEOUT = exports.COMICRELIEF_TEST_METADATA_HEADER = void 0;
7
-
8
- var _axios = _interopRequireWildcard(require("axios"));
9
-
10
- var _DependencyAware = _interopRequireDefault(require("../DependencyInjection/DependencyAware.class"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
- const COMICRELIEF_TEST_METADATA_HEADER = 'x-comicrelief-test-metadata';
19
- exports.COMICRELIEF_TEST_METADATA_HEADER = COMICRELIEF_TEST_METADATA_HEADER;
20
- const DEFAULT_HTTP_TIMEOUT = 10 * 1000;
21
- /**
22
- * HTTPService class
23
- */
24
-
25
- exports.DEFAULT_HTTP_TIMEOUT = DEFAULT_HTTP_TIMEOUT;
26
-
27
- class HTTPService extends _DependencyAware.default {
28
- constructor(di) {
29
- super(di);
30
- this.config = {
31
- timeout: DEFAULT_HTTP_TIMEOUT
32
- };
33
- }
34
- /**
35
- * Sets the default timeout
36
- *
37
- * @param {number} ms
38
- */
39
-
40
-
41
- setDefaultTimeout(ms) {
42
- this.config.timeout = ms;
43
- }
44
- /**
45
- * Performs and HTTP Request
46
- *
47
- * @param config
48
- */
49
-
50
-
51
- async request(config) {
52
- const mergedConfig = {
53
- timeout: this.config.timeout,
54
- headers: {},
55
- ...config
56
- };
57
- const lambdaRequest = this.getContainer().get(this.definitions.REQUEST);
58
- const testMetadata = lambdaRequest.getHeader(COMICRELIEF_TEST_METADATA_HEADER);
59
-
60
- if (testMetadata) {
61
- mergedConfig.headers = mergedConfig.headers || {};
62
- mergedConfig.headers[COMICRELIEF_TEST_METADATA_HEADER] = testMetadata;
63
- }
64
-
65
- return _axios.default.request(mergedConfig);
66
- }
67
-
68
- }
69
-
70
- exports.default = HTTPService;