Skip to content

Commit ac8eb74

Browse files
authored
Merge branch 'master' into develop
2 parents b3f2ce5 + a77150e commit ac8eb74

3 files changed

Lines changed: 99 additions & 91 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ostro/serverless",
3-
"version": "1.2.5",
3+
"version": "1.3.11",
44
"description": "Serverless module for OstroJS",
55
"main": "serverless.js",
66
"scripts": {

stream/request.js

Lines changed: 89 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class MockSocket extends Duplex {
2525
}
2626

2727
class Request extends IncomingMessage {
28-
constructor(event, context = {}, platform) {
28+
constructor(event, context = {}, platform, getwayType) {
2929
const {
3030
method,
3131
url,
@@ -35,8 +35,7 @@ class Request extends IncomingMessage {
3535
rawBodyBuf,
3636
remoteAddress,
3737
isEncrypted
38-
} = Request._normalize(event, context, platform);
39-
38+
} = Request._normalize(event, context, platform, getwayType);
4039
const mockSocket = new MockSocket({
4140
remoteAddress,
4241
encrypted: isEncrypted
@@ -46,8 +45,6 @@ class Request extends IncomingMessage {
4645

4746
this.event = event;
4847
this.context = context;
49-
this._platform = platform;
50-
5148
this.method = method || 'GET';
5249
this.url = url || '/';
5350
this.headers = headers || {};
@@ -62,111 +59,122 @@ class Request extends IncomingMessage {
6259

6360
this.push(rawBodyBuf);
6461
}
65-
this.push(null); // always end the stream
62+
this.push(null);
6663

6764
this.body = rawBodyBuf;
6865

6966
}
7067

71-
static _normalize(event, context, platform) {
72-
let method = 'GET',
73-
url = '/',
74-
headers = {},
75-
query = {},
76-
pathParams = {},
77-
cookies = [],
78-
rawBodyBuf = event.body ? (event.isBase64Encoded
68+
static _normalize(event, context, platform, getwayType) {
69+
const request = {
70+
method: 'GET',
71+
url: '/',
72+
headers: {},
73+
query: {},
74+
pathParams: {},
75+
cookies: [],
76+
rawBodyBuf: event.body ? (event.isBase64Encoded
7977
? Buffer.from(event.body, 'base64')
8078
: Buffer.from(event.body)) : Buffer.alloc(0),
81-
remoteAddress = '',
82-
isEncrypted = false;
79+
remoteAddress: '',
80+
isEncrypted: false
81+
}
8382

8483
switch (platform) {
85-
case 'aws_http':
86-
method = event.requestContext.http.method;
87-
url = event.rawPath + (event.rawQueryString ? `?${event.rawQueryString}` : '');
88-
headers = event.headers || {};
89-
query = event.rawQueryString
90-
? Object.fromEntries(new URLSearchParams(event.rawQueryString))
91-
: {};
92-
pathParams = event.pathParameters || {};
93-
cookies = event.cookies || [];
94-
remoteAddress = event.requestContext?.http?.sourceIp ||
95-
headers['x-forwarded-for']?.split(',')[0] || '';
96-
isEncrypted = headers['x-forwarded-proto'] === 'https';
84+
case 'aws':
85+
switch (getwayType) {
86+
case 'http':
87+
request.method = event.requestContext.http.method;
88+
request.url = event.rawPath + (event.rawQueryString ? `?${event.rawQueryString}` : '');
89+
request.headers = event.headers || {};
90+
request.query = event.rawQueryString
91+
? Object.fromEntries(new URLSearchParams(event.rawQueryString))
92+
: {};
93+
request.pathParams = event.pathParameters || {};
94+
request.cookies = event.cookies || [];
95+
request.remoteAddress = event.requestContext?.http?.sourceIp ||
96+
request.headers['x-forwarded-for']?.split(',')[0] || '';
97+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
98+
99+
break;
100+
case 'lambda-url':
101+
request.method = event.requestContext?.http?.method || 'GET';
102+
request.url = event.rawPath + (event.rawQueryString ? `?${event.rawQueryString}` : '');
103+
request.headers = event.headers || {};
104+
request.query = event.rawQueryString
105+
? Object.fromEntries(new URLSearchParams(event.rawQueryString))
106+
: {};
107+
request.pathParams = event.pathParameters || {};
108+
request.cookies = event.cookies || [];
109+
request.remoteAddress = event.requestContext?.http?.sourceIp ||
110+
request.headers['x-forwarded-for']?.split(',')[0] || '';
111+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
112+
break;
113+
114+
case 'rest':
115+
request.method = event.httpMethod;
116+
request.url = event.path;
117+
request.headers = event.headers || {};
118+
request.query = event.queryStringParameters || {};
119+
request.pathParams = event.pathParameters || {};
120+
request.cookies = request.headers.Cookie
121+
? request.headers.Cookie.split(';').map(c => c.trim())
122+
: [];
123+
request.remoteAddress = request.headers['x-forwarded-for']?.split(',')[0] || '';
124+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
125+
break;
126+
}
97127
break;
98128

99-
case 'aws_rest':
100-
method = event.httpMethod;
101-
url = event.path;
102-
headers = event.headers || {};
103-
query = event.queryStringParameters || {};
104-
pathParams = event.pathParameters || {};
105-
cookies = headers.Cookie
106-
? headers.Cookie.split(';').map(c => c.trim())
107-
: [];
108-
remoteAddress = headers['x-forwarded-for']?.split(',')[0] || '';
109-
isEncrypted = headers['x-forwarded-proto'] === 'https';
110-
break;
111129

112130
case 'azure':
113131
const req = context.req || event;
114-
method = req.method;
115-
url = req.url;
116-
headers = req.headers || {};
117-
query = req.query || {};
118-
pathParams = req.params || {};
119-
cookies = headers.cookie
120-
? headers.cookie.split(';').map(c => c.trim())
132+
request.method = req.method;
133+
request.url = req.url;
134+
request.headers = req.headers || {};
135+
request.query = req.query || {};
136+
request.pathParams = req.params || {};
137+
request.cookies = request.headers.cookie
138+
? request.headers.cookie.split(';').map(c => c.trim())
121139
: [];
122-
remoteAddress = headers['x-forwarded-for']?.split(',')[0] || '';
123-
isEncrypted = headers['x-forwarded-proto'] === 'https';
140+
request.remoteAddress = request.headers['x-forwarded-for']?.split(',')[0] || '';
141+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
124142
if (req.rawBody instanceof Buffer) rawBodyBuf = req.rawBody;
125143
else if (req.rawBody) rawBodyBuf = Buffer.from(req.rawBody);
126144
break;
127145

128146
case 'gcp':
129-
method = event.method || event.httpMethod;
130-
url = event.url ||
147+
request.method = event.method || event.httpMethod;
148+
request.url = event.url ||
131149
(event.path + (event.query ? '?' + new URLSearchParams(event.query).toString() : ''));
132-
headers = event.headers || {};
133-
query = event.query || {};
134-
pathParams = event.params || {};
135-
cookies = headers.cookie
136-
? headers.cookie.split(';').map(c => c.trim())
150+
request.headers = event.headers || {};
151+
request.query = event.query || {};
152+
request.pathParams = event.params || {};
153+
request.cookies = request.headers.cookie
154+
? request.headers.cookie.split(';').map(c => c.trim())
137155
: [];
138-
remoteAddress = headers['x-forwarded-for']?.split(',')[0] || '';
139-
isEncrypted = headers['x-forwarded-proto'] === 'https';
156+
request.remoteAddress = request.headers['x-forwarded-for']?.split(',')[0] || '';
157+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
140158
break;
141159

142160
default:
143-
method = event.method || 'GET';
144-
url = event.url || '/';
145-
headers = event.headers || {};
146-
query = event.rawQueryString || {};
147-
pathParams = event.params || {};
148-
cookies = headers.cookie
149-
? headers.cookie.split(';').map(c => c.trim())
161+
request.method = event.method || 'GET';
162+
request.url = event.url || '/';
163+
request.headers = event.headers || {};
164+
request.query = event.rawQueryString || {};
165+
request.pathParams = event.params || {};
166+
request.cookies = request.headers.cookie
167+
? request.headers.cookie.split(';').map(c => c.trim())
150168
: [];
151-
remoteAddress = headers['x-forwarded-for']?.split(',')[0] || '127.0.0.1';
152-
isEncrypted = headers['x-forwarded-proto'] === 'https';
169+
request.remoteAddress = request.headers['x-forwarded-for']?.split(',')[0] || '127.0.0.1';
170+
request.isEncrypted = request.headers['x-forwarded-proto'] === 'https';
153171
}
154172

155-
if (!headers.cookie && cookies.length > 0) {
156-
headers.cookie = cookies.join('; ');
157-
}
158173

159-
return {
160-
method,
161-
url,
162-
headers,
163-
query,
164-
pathParams,
165-
cookies,
166-
rawBodyBuf,
167-
remoteAddress,
168-
isEncrypted
169-
};
174+
if (!request.headers.cookie && request.cookies.length > 0) {
175+
request.headers.cookie = request.cookies.join('; ');
176+
}
177+
return request;
170178
}
171179
}
172180

stream/response.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class Response extends ServerResponse {
2626
end(chunk, ...args) {
2727
if (chunk) this.write(chunk);
2828

29-
const result = this.toJSON(); // Automatically uses detected platform
29+
const result = this.toJSON();
30+
3031
this._resolve(result);
3132

3233
return super.end(...args);
@@ -40,31 +41,31 @@ class Response extends ServerResponse {
4041
isBase64Encoded() {
4142
return this.$isBase64Encoded;
4243
}
43-
isPlatform(platform){
44+
45+
isPlatform(platform) {
4446
platform = typeof platform === 'string' ? [platform] : platform;
45-
return platform.includes(this._platform);
47+
return platform && platform.includes(this._platform);
4648
}
4749

4850
toJSON() {
4951
const buffer = Buffer.concat(this._chunks);
5052
const isBase64Encoded = this.isBase64Encoded();
5153
const body = isBase64Encoded ? buffer.toString('base64') : buffer.toString('utf8');
5254

53-
const headers =normalizeHeaders(this.getHeaders(),this._platform,this._getwayType )
54-
const cookies = '';
55-
if(this.isPlatform('aws')) {
55+
const headers = normalizeHeaders(this.getHeaders(), this._platform, this._getwayType)
56+
let cookies = '';
57+
if (this.isPlatform('aws')) {
5658
const setCookieKey = Object.keys(headers).find(
5759
key => key.toLowerCase() === 'set-cookie'
5860
);
59-
cookies = setCookieKey ? headers[setCookieKey] : undefined;
61+
cookies = setCookieKey ? headers[setCookieKey] : undefined;
6062
if (setCookieKey) {
6163
delete headers[setCookieKey];
6264
}
6365
}
6466

6567
const platform = this._platform;
6668
const statusCode = this.statusCode || 200;
67-
// Per-platform output format adjustment
6869
switch (platform) {
6970
case 'azure':
7071
return {
@@ -73,7 +74,6 @@ class Response extends ServerResponse {
7374
body,
7475
};
7576
case 'gcp':
76-
// GCP doesn't use the return value; it's streamed via `res`
7777
return {
7878
statusCode,
7979
headers,

0 commit comments

Comments
 (0)