Skip to content
This repository was archived by the owner on Nov 27, 2019. It is now read-only.

Commit 1b18339

Browse files
authored
Merge pull request #2 from Travelport-Ukraine/dev
Custom status can now be passed into aws response
2 parents 3e5218b + 689f668 commit 1b18339

File tree

5 files changed

+151
-120
lines changed

5 files changed

+151
-120
lines changed

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6.10.0
1+
6.10

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Include to your project as git dependency
1010

1111
Use default exported function in next way
1212

13-
```
13+
```javascript
1414
const R = required('aws-response');
1515

1616
module.exports.lambda = R((data) => {
@@ -40,7 +40,8 @@ Using this fields in post/get params if forbidden.
4040
Also it's possible to pass `handler` as second param and `settings` object as first.
4141

4242
Default `settings` fields:
43-
```
43+
44+
```javascript
4445
const defaultSettings = {
4546
transform: data => data, // called first
4647
validate: data => data, // than validate and after validation handler is called
@@ -51,7 +52,7 @@ const defaultSettings = {
5152

5253
All responses have next shape and returned in compatible format with AWS Lambda proxy integration
5354

54-
```
55+
```javascript
5556
{
5657
statusCode: 200 || 500,
5758
header: { Access-Control-Allow-Origin: '*' },
@@ -61,7 +62,7 @@ All responses have next shape and returned in compatible format with AWS Lambda
6162

6263
### Success body
6364

64-
```
65+
```javascript
6566
{
6667
"data": {
6768
"ok": 1
@@ -79,7 +80,7 @@ All responses have next shape and returned in compatible format with AWS Lambda
7980

8081
### Error body
8182

82-
```
83+
```javascript
8384
{
8485
"dataAvailable": false,
8586
"errorData": null,

lib/index.js

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,25 @@ function R(...params) {
5858
authorizer: event.requestContext && event.requestContext.authorizer,
5959
}))
6060
)
61-
.then(response =>
62-
Promise.resolve(usedSettings.transform(data)).then((transformed) => {
63-
callback(null, {
64-
statusCode: 200,
65-
headers: {
66-
'Access-Control-Allow-Origin': '*',
67-
},
68-
body: JSON.stringify({
69-
status: 'success',
70-
date: new Date(),
71-
requestId: `${context.logStreamName}\\${context.awsRequestId}`,
72-
dataAvailable: !isEmpty(response),
73-
executionTimeInMs: calculateExecution(process.hrtime(startTime)),
74-
originalRequest: transformed,
75-
data: response,
76-
}),
77-
});
78-
})
61+
.then(
62+
({ response, status = 'success' }) => usedSettings.transform(data)
63+
.then((transformed) => {
64+
callback(null, {
65+
statusCode: 200,
66+
headers: {
67+
'Access-Control-Allow-Origin': '*',
68+
},
69+
body: JSON.stringify({
70+
status,
71+
date: new Date(),
72+
requestId: `${context.logStreamName}\\${context.awsRequestId}`,
73+
dataAvailable: !isEmpty(response),
74+
executionTimeInMs: calculateExecution(process.hrtime(startTime)),
75+
originalRequest: transformed,
76+
data: response,
77+
}),
78+
});
79+
})
7980
)
8081
.catch(err =>
8182
Promise.resolve(usedSettings.transform(data)).then((transformed) => {

package.json

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "aws-response",
3-
"version": "1.5.1",
4-
"description": "Aws response handler",
3+
"version": "1.6.0",
4+
"description": "AWS response handler",
55
"main": "lib/index.js",
66
"scripts": {
77
"lint": "eslint .",
@@ -20,8 +20,15 @@
2020
"husky": "^0.13.3",
2121
"mocha": "^3.2.0"
2222
},
23-
"author": "Mark mail.ormark@gmail.com",
24-
"license": "MIT",
23+
"repository": {
24+
"type": "git",
25+
"url": "https://github.com/Travelport-Ukraine/aws-response"
26+
},
27+
"contributors": [
28+
"Mark Orel <mark.orel@travelport.ua>",
29+
"Dmitry Chertousov <d.chertousov@travelport.ua>"
30+
],
31+
"license": "SEE LICENSE IN LICENSE.md",
2532
"dependencies": {
2633
"lowercase-keys": "^1.0.0"
2734
}

test/index.test.js

Lines changed: 114 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ describe('Test handling request', () => {
1414
}
1515
},(data) => {
1616
expect(data.newField).to.be.equal(12134);
17-
return { ok: 1 };
17+
return { response: { ok: 1 }};
1818
});
1919

2020
handler(event, { requestId: 12345 }, (err, result) => {
21-
2221
cb();
2322
});
2423
});
@@ -33,22 +32,25 @@ describe('Test handling request', () => {
3332
throw new Error('VALIDATION');
3433
}
3534
},(data) => {
36-
return { ok: 1 };
35+
return { response: { ok: 1 } };
3736
});
3837

3938
handler(event, { requestId: 12345 }, (err, result) => {
40-
expect(result.body).to.be.a('string');
41-
const body = JSON.parse(result.body);
42-
expect(body.errorMessage).to.be.equal('VALIDATION');
43-
cb();
39+
try {
40+
expect(result.body).to.be.a('string');
41+
const body = JSON.parse(result.body);
42+
expect(body.errorMessage).to.be.equal('VALIDATION');
43+
cb();
44+
} catch (err) {
45+
cb(err);
46+
}
4447
});
4548
});
4649

4750
it('should check if get params parsed correctly', (cb) => {
4851
const event = require('./sample-requests/GET-request-aws.json');
4952

5053
const handler = R((data) => {
51-
console.log(data);
5254
expect(data).to.be.deep.equal(Object.assign(
5355
{},
5456
event.queryStringParameters,
@@ -58,27 +60,31 @@ describe('Test handling request', () => {
5860
context: { logStreamName: '1', awsRequestId: '1' }
5961
}
6062
));
61-
return { ok: 1 };
63+
return { response: { ok: 1 }};
6264
});
6365

6466
handler(event, {logStreamName: '1', awsRequestId: '1'}, (err, result) => {
65-
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
66-
expect(result.headers).to.be.an('object');
67-
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
68-
expect(result.statusCode).to.be.equal(200);
69-
expect(result.body).to.be.a('string');
70-
const response = JSON.parse(result.body);
71-
expect(response).to.be.not.null;
72-
expect(response).to.have.all.keys(['data', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
73-
expect(response.data.ok).to.be.equal(1);
74-
expect(response.originalRequest).to.be.deep.equal(
75-
event.queryStringParameters
76-
);
77-
expect(response.dataAvailable).to.be.equal(true);
78-
expect(response.executionTimeInMs).to.be.a('number');
79-
expect(response.status).to.be.equal('success');
80-
expect(response.requestId).to.be.equal('1\\1');
81-
cb();
67+
try {
68+
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
69+
expect(result.headers).to.be.an('object');
70+
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
71+
expect(result.statusCode).to.be.equal(200);
72+
expect(result.body).to.be.a('string');
73+
const response = JSON.parse(result.body);
74+
expect(response).to.be.not.null;
75+
expect(response).to.have.all.keys(['data', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
76+
expect(response.data.ok).to.be.equal(1);
77+
expect(response.originalRequest).to.be.deep.equal(
78+
event.queryStringParameters
79+
);
80+
expect(response.dataAvailable).to.be.equal(true);
81+
expect(response.executionTimeInMs).to.be.a('number');
82+
expect(response.status).to.be.equal('success');
83+
expect(response.requestId).to.be.equal('1\\1');
84+
cb();
85+
} catch (err) {
86+
cb(err);
87+
}
8288
});
8389
});
8490

@@ -92,27 +98,31 @@ describe('Test handling request', () => {
9298
{ headers: lowercaseKeys(event.headers) },
9399
{ context: { logStreamName: '1', awsRequestId: '1' } }
94100
));
95-
return Promise.resolve({ ok: 1 });
101+
return Promise.resolve({ response: { ok: 1 }});
96102
});
97103

98104
handler(event, {logStreamName: '1', awsRequestId: '1'}, (err, result) => {
99-
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
100-
expect(result.headers).to.be.an('object');
101-
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
102-
expect(result.statusCode).to.be.equal(200);
103-
expect(result.body).to.be.a('string');
104-
const response = JSON.parse(result.body);
105-
expect(response).to.be.not.null;
106-
expect(response).to.have.all.keys(['data', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
107-
expect(response.data.ok).to.be.equal(1);
108-
expect(response.originalRequest).to.be.deep.equal(
109-
JSON.parse(event.body)
110-
);
111-
expect(response.dataAvailable).to.be.equal(true);
112-
expect(response.executionTimeInMs).to.be.a('number');
113-
expect(response.status).to.be.equal('success');
114-
expect(response.requestId).to.be.equal('1\\1');
115-
cb();
105+
try {
106+
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
107+
expect(result.headers).to.be.an('object');
108+
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
109+
expect(result.statusCode).to.be.equal(200);
110+
expect(result.body).to.be.a('string');
111+
const response = JSON.parse(result.body);
112+
expect(response).to.be.not.null;
113+
expect(response).to.have.all.keys(['data', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
114+
expect(response.data.ok).to.be.equal(1);
115+
expect(response.originalRequest).to.be.deep.equal(
116+
JSON.parse(event.body)
117+
);
118+
expect(response.dataAvailable).to.be.equal(true);
119+
expect(response.executionTimeInMs).to.be.a('number');
120+
expect(response.status).to.be.equal('success');
121+
expect(response.requestId).to.be.equal('1\\1');
122+
cb();
123+
} catch (err) {
124+
cb(err);
125+
}
116126
});
117127
});
118128

@@ -124,22 +134,26 @@ describe('Test handling request', () => {
124134
});
125135

126136
handler(event, {logStreamName: '1', awsRequestId: '1'}, (err, result) => {
127-
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
128-
expect(result.headers).to.be.an('object');
129-
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
130-
expect(result.statusCode).to.be.equal(500);
131-
expect(result.body).to.be.a('string');
132-
const response = JSON.parse(result.body);
133-
expect(response).to.be.not.null;
134-
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
135-
expect(response.originalRequest).to.be.deep.equal(
136-
JSON.parse(event.body)
137-
);
138-
expect(response.dataAvailable).to.be.equal(false);
139-
expect(response.executionTimeInMs).to.be.a('number');
140-
expect(response.status).to.be.equal('error');
141-
expect(response.requestId).to.be.equal('1\\1');
142-
cb();
137+
try {
138+
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
139+
expect(result.headers).to.be.an('object');
140+
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
141+
expect(result.statusCode).to.be.equal(500);
142+
expect(result.body).to.be.a('string');
143+
const response = JSON.parse(result.body);
144+
expect(response).to.be.not.null;
145+
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
146+
expect(response.originalRequest).to.be.deep.equal(
147+
JSON.parse(event.body)
148+
);
149+
expect(response.dataAvailable).to.be.equal(false);
150+
expect(response.executionTimeInMs).to.be.a('number');
151+
expect(response.status).to.be.equal('error');
152+
expect(response.requestId).to.be.equal('1\\1');
153+
cb();
154+
} catch (err) {
155+
cb(err);
156+
}
143157
});
144158
});
145159

@@ -151,22 +165,26 @@ describe('Test handling request', () => {
151165
});
152166

153167
handler(event, {logStreamName: '1', awsRequestId: '1'}, (err, result) => {
154-
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
155-
expect(result.headers).to.be.an('object');
156-
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
157-
expect(result.statusCode).to.be.equal(500);
158-
expect(result.body).to.be.a('string');
159-
const response = JSON.parse(result.body);
160-
expect(response).to.be.not.null;
161-
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
162-
expect(response.originalRequest).to.be.deep.equal(
163-
JSON.parse(event.body)
164-
);
165-
expect(response.dataAvailable).to.be.equal(false);
166-
expect(response.executionTimeInMs).to.be.a('number');
167-
expect(response.status).to.be.equal('error');
168-
expect(response.requestId).to.be.equal('1\\1');
169-
cb();
168+
try {
169+
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
170+
expect(result.headers).to.be.an('object');
171+
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
172+
expect(result.statusCode).to.be.equal(500);
173+
expect(result.body).to.be.a('string');
174+
const response = JSON.parse(result.body);
175+
expect(response).to.be.not.null;
176+
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
177+
expect(response.originalRequest).to.be.deep.equal(
178+
JSON.parse(event.body)
179+
);
180+
expect(response.dataAvailable).to.be.equal(false);
181+
expect(response.executionTimeInMs).to.be.a('number');
182+
expect(response.status).to.be.equal('error');
183+
expect(response.requestId).to.be.equal('1\\1');
184+
cb();
185+
} catch (err) {
186+
cb(err);
187+
}
170188
});
171189
});
172190

@@ -179,22 +197,26 @@ describe('Test handling request', () => {
179197
});
180198

181199
handler(event, {logStreamName: '1', awsRequestId: '1'}, (err, result) => {
182-
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
183-
expect(result.headers).to.be.an('object');
184-
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
185-
expect(result.statusCode).to.be.equal(500);
186-
expect(result.body).to.be.a('string');
187-
const response = JSON.parse(result.body);
188-
expect(response).to.be.not.null;
189-
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
190-
expect(response.originalRequest).to.be.deep.equal(
191-
JSON.parse(event.body)
192-
);
193-
expect(response.dataAvailable).to.be.equal(false);
194-
expect(response.executionTimeInMs).to.be.a('number');
195-
expect(response.status).to.be.equal('error');
196-
expect(response.requestId).to.be.equal('1\\1');
197-
cb();
200+
try {
201+
expect(result).to.have.all.keys(['statusCode', 'body', 'headers']);
202+
expect(result.headers).to.be.an('object');
203+
expect(result.headers).to.have.all.keys('Access-Control-Allow-Origin');
204+
expect(result.statusCode).to.be.equal(500);
205+
expect(result.body).to.be.a('string');
206+
const response = JSON.parse(result.body);
207+
expect(response).to.be.not.null;
208+
expect(response).to.have.all.keys(['errorData', 'errorMessage','errorName', 'dataAvailable', 'executionTimeInMs', 'originalRequest', 'status', 'requestId', 'date']);
209+
expect(response.originalRequest).to.be.deep.equal(
210+
JSON.parse(event.body)
211+
);
212+
expect(response.dataAvailable).to.be.equal(false);
213+
expect(response.executionTimeInMs).to.be.a('number');
214+
expect(response.status).to.be.equal('error');
215+
expect(response.requestId).to.be.equal('1\\1');
216+
cb();
217+
} catch (err) {
218+
cb(err);
219+
}
198220
});
199221
});
200222
});

0 commit comments

Comments
 (0)