@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.
- package/README.md +172 -47
- package/dist/core/DependencyAwareClass.d.ts +15 -0
- package/dist/core/DependencyAwareClass.d.ts.map +1 -0
- package/dist/core/DependencyAwareClass.js +20 -0
- package/dist/core/DependencyAwareClass.js.map +1 -0
- package/dist/core/DependencyInjection.d.ts +62 -0
- package/dist/core/DependencyInjection.d.ts.map +1 -0
- package/dist/core/DependencyInjection.js +83 -0
- package/dist/core/DependencyInjection.js.map +1 -0
- package/dist/core/LambdaWrapper.d.ts +61 -0
- package/dist/core/LambdaWrapper.d.ts.map +1 -0
- package/dist/core/LambdaWrapper.js +126 -0
- package/dist/core/LambdaWrapper.js.map +1 -0
- package/dist/core/config.d.ts +20 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +21 -0
- package/dist/core/config.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -162
- package/dist/index.js.map +1 -0
- package/dist/models/ResponseModel.d.ts +91 -0
- package/dist/models/ResponseModel.d.ts.map +1 -0
- package/dist/models/ResponseModel.js +100 -0
- package/dist/models/ResponseModel.js.map +1 -0
- package/dist/models/SQSMessageModel.d.ts +46 -0
- package/dist/models/SQSMessageModel.d.ts.map +1 -0
- package/dist/models/SQSMessageModel.js +65 -0
- package/dist/models/SQSMessageModel.js.map +1 -0
- package/dist/models/StatusModel.d.ts +40 -0
- package/dist/models/StatusModel.d.ts.map +1 -0
- package/dist/models/StatusModel.js +50 -0
- package/dist/models/StatusModel.js.map +1 -0
- package/dist/services/BaseConfigService.d.ts +101 -0
- package/dist/services/BaseConfigService.d.ts.map +1 -0
- package/dist/services/BaseConfigService.js +180 -0
- package/dist/services/BaseConfigService.js.map +1 -0
- package/dist/services/HTTPService.d.ts +29 -0
- package/dist/services/HTTPService.d.ts.map +1 -0
- package/dist/services/HTTPService.js +55 -0
- package/dist/services/HTTPService.js.map +1 -0
- package/dist/services/LoggerService.d.ts +102 -0
- package/dist/services/LoggerService.d.ts.map +1 -0
- package/dist/services/LoggerService.js +258 -0
- package/dist/services/LoggerService.js.map +1 -0
- package/dist/services/RequestService.d.ts +119 -0
- package/dist/services/RequestService.d.ts.map +1 -0
- package/dist/services/RequestService.js +293 -0
- package/dist/services/RequestService.js.map +1 -0
- package/dist/services/SQSService.d.ts +181 -0
- package/dist/services/SQSService.d.ts.map +1 -0
- package/dist/services/SQSService.js +366 -0
- package/dist/services/SQSService.js.map +1 -0
- package/dist/services/TimerService.d.ts +22 -0
- package/dist/services/TimerService.d.ts.map +1 -0
- package/dist/services/TimerService.js +40 -0
- package/dist/services/TimerService.js.map +1 -0
- package/dist/utils/LambdaTermination.d.ts +14 -0
- package/dist/utils/LambdaTermination.d.ts.map +1 -0
- package/dist/utils/LambdaTermination.js +23 -0
- package/dist/utils/LambdaTermination.js.map +1 -0
- package/dist/utils/PromisifiedDelay.d.ts +17 -0
- package/dist/utils/PromisifiedDelay.d.ts.map +1 -0
- package/dist/utils/PromisifiedDelay.js +48 -0
- package/dist/utils/PromisifiedDelay.js.map +1 -0
- package/package.json +29 -19
- package/.eslintrc.yml +0 -16
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/main.yml +0 -74
- package/babel.config.js +0 -13
- package/dist/Config/Dependencies.js +0 -40
- package/dist/DependencyInjection/DependencyAware.class.js +0 -47
- package/dist/DependencyInjection/DependencyInjection.class.js +0 -131
- package/dist/Model/CloudEvent.model.js +0 -156
- package/dist/Model/Model.model.js +0 -45
- package/dist/Model/Response.model.js +0 -150
- package/dist/Model/SQS/MarketingPreference.constraints.json +0 -28
- package/dist/Model/SQS/MarketingPreference.model.js +0 -641
- package/dist/Model/SQS/Message.model.js +0 -104
- package/dist/Model/Status.model.js +0 -82
- package/dist/Service/BaseConfig.service.js +0 -225
- package/dist/Service/HTTP.service.js +0 -70
- package/dist/Service/Logger.service.js +0 -293
- package/dist/Service/Request.service.js +0 -341
- package/dist/Service/SQS.service.js +0 -420
- package/dist/Service/Timer.service.js +0 -55
- package/dist/Wrapper/LambdaTermination.js +0 -39
- package/dist/Wrapper/LambdaWrapper.js +0 -164
- 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;
|