parse-server 5.4.0-beta.1 → 6.0.0-alpha.10
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 +7 -7
- package/lib/Adapters/Auth/AuthAdapter.js +92 -11
- package/lib/Adapters/Auth/index.js +81 -23
- package/lib/Adapters/Cache/LRUCache.js +3 -3
- package/lib/Adapters/Cache/RedisCacheAdapter.js +49 -63
- package/lib/Adapters/PubSub/RedisPubSub.js +4 -6
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +7 -2
- package/lib/Auth.js +214 -6
- package/lib/Config.js +16 -4
- package/lib/Controllers/DatabaseController.js +4 -3
- package/lib/Deprecator/Deprecations.js +4 -8
- package/lib/GraphQL/loaders/parseClassTypes.js +9 -4
- package/lib/GraphQL/loaders/usersMutations.js +75 -9
- package/lib/Options/Definitions.js +11 -5
- package/lib/Options/docs.js +3 -2
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +10 -2
- package/lib/RestQuery.js +3 -3
- package/lib/RestWrite.js +180 -175
- package/lib/Routers/FilesRouter.js +16 -1
- package/lib/Routers/UsersRouter.js +178 -24
- package/lib/cloud-code/Parse.Cloud.js +2 -12
- package/lib/middlewares.js +6 -5
- package/lib/request.js +207 -2
- package/package.json +17 -17
- package/lib/cloud-code/HTTPResponse.js +0 -73
- package/lib/cloud-code/httpRequest.js +0 -192
package/lib/request.js
CHANGED
|
@@ -1,4 +1,209 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
var _querystring = _interopRequireDefault(require("querystring"));
|
|
4
|
+
|
|
5
|
+
var _logger = _interopRequireDefault(require("./logger"));
|
|
6
|
+
|
|
7
|
+
var _followRedirects = require("follow-redirects");
|
|
8
|
+
|
|
9
|
+
var _url = require("url");
|
|
10
|
+
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
|
|
13
|
+
class HTTPResponse {
|
|
14
|
+
constructor(response, body) {
|
|
15
|
+
let _text, _data;
|
|
16
|
+
|
|
17
|
+
this.status = response.statusCode;
|
|
18
|
+
this.headers = response.headers || {};
|
|
19
|
+
this.cookies = this.headers['set-cookie'];
|
|
20
|
+
|
|
21
|
+
if (typeof body == 'string') {
|
|
22
|
+
_text = body;
|
|
23
|
+
} else if (Buffer.isBuffer(body)) {
|
|
24
|
+
this.buffer = body;
|
|
25
|
+
} else if (typeof body == 'object') {
|
|
26
|
+
_data = body;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const getText = () => {
|
|
30
|
+
if (!_text && this.buffer) {
|
|
31
|
+
_text = this.buffer.toString('utf-8');
|
|
32
|
+
} else if (!_text && _data) {
|
|
33
|
+
_text = JSON.stringify(_data);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return _text;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const getData = () => {
|
|
40
|
+
if (!_data) {
|
|
41
|
+
try {
|
|
42
|
+
_data = JSON.parse(getText());
|
|
43
|
+
} catch (e) {
|
|
44
|
+
/* */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return _data;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
Object.defineProperty(this, 'body', {
|
|
52
|
+
get: () => {
|
|
53
|
+
return body;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
Object.defineProperty(this, 'text', {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
get: getText
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(this, 'data', {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: getData
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const clients = {
|
|
69
|
+
'http:': _followRedirects.http,
|
|
70
|
+
'https:': _followRedirects.https
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
function makeCallback(resolve, reject) {
|
|
74
|
+
return function (response) {
|
|
75
|
+
const chunks = [];
|
|
76
|
+
response.on('data', chunk => {
|
|
77
|
+
chunks.push(chunk);
|
|
78
|
+
});
|
|
79
|
+
response.on('end', () => {
|
|
80
|
+
const body = Buffer.concat(chunks);
|
|
81
|
+
const httpResponse = new HTTPResponse(response, body); // Consider <200 && >= 400 as errors
|
|
82
|
+
|
|
83
|
+
if (httpResponse.status < 200 || httpResponse.status >= 400) {
|
|
84
|
+
return reject(httpResponse);
|
|
85
|
+
} else {
|
|
86
|
+
return resolve(httpResponse);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
response.on('error', reject);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const encodeBody = function ({
|
|
94
|
+
body,
|
|
95
|
+
headers = {}
|
|
96
|
+
}) {
|
|
97
|
+
if (typeof body !== 'object') {
|
|
98
|
+
return {
|
|
99
|
+
body,
|
|
100
|
+
headers
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
var contentTypeKeys = Object.keys(headers).filter(key => {
|
|
105
|
+
return key.match(/content-type/i) != null;
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
if (contentTypeKeys.length == 0) {
|
|
109
|
+
// no content type
|
|
110
|
+
// As per https://parse.com/docs/cloudcode/guide#cloud-code-advanced-sending-a-post-request the default encoding is supposedly x-www-form-urlencoded
|
|
111
|
+
body = _querystring.default.stringify(body);
|
|
112
|
+
headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
113
|
+
} else {
|
|
114
|
+
/* istanbul ignore next */
|
|
115
|
+
if (contentTypeKeys.length > 1) {
|
|
116
|
+
_logger.default.error('Parse.Cloud.httpRequest', 'multiple content-type headers are set.');
|
|
117
|
+
} // There maybe many, we'll just take the 1st one
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
var contentType = contentTypeKeys[0];
|
|
121
|
+
|
|
122
|
+
if (headers[contentType].match(/application\/json/i)) {
|
|
123
|
+
body = JSON.stringify(body);
|
|
124
|
+
} else if (headers[contentType].match(/application\/x-www-form-urlencoded/i)) {
|
|
125
|
+
body = _querystring.default.stringify(body);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
body,
|
|
131
|
+
headers
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
function httpRequest(options) {
|
|
136
|
+
let url;
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
url = (0, _url.parse)(options.url);
|
|
140
|
+
} catch (e) {
|
|
141
|
+
return Promise.reject(e);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
options = Object.assign(options, encodeBody(options)); // support params options
|
|
145
|
+
|
|
146
|
+
if (typeof options.params === 'object') {
|
|
147
|
+
options.qs = options.params;
|
|
148
|
+
} else if (typeof options.params === 'string') {
|
|
149
|
+
options.qs = _querystring.default.parse(options.params);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const client = clients[url.protocol];
|
|
153
|
+
|
|
154
|
+
if (!client) {
|
|
155
|
+
return Promise.reject(`Unsupported protocol ${url.protocol}`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const requestOptions = {
|
|
159
|
+
method: options.method,
|
|
160
|
+
port: Number(url.port),
|
|
161
|
+
path: url.pathname,
|
|
162
|
+
hostname: url.hostname,
|
|
163
|
+
headers: options.headers,
|
|
164
|
+
encoding: null,
|
|
165
|
+
followRedirects: options.followRedirects === true
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
if (requestOptions.headers) {
|
|
169
|
+
Object.keys(requestOptions.headers).forEach(key => {
|
|
170
|
+
if (typeof requestOptions.headers[key] === 'undefined') {
|
|
171
|
+
delete requestOptions.headers[key];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (url.search) {
|
|
177
|
+
options.qs = Object.assign({}, options.qs, _querystring.default.parse(url.query));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (url.auth) {
|
|
181
|
+
requestOptions.auth = url.auth;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (options.qs) {
|
|
185
|
+
requestOptions.path += `?${_querystring.default.stringify(options.qs)}`;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (options.agent) {
|
|
189
|
+
requestOptions.agent = options.agent;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return new Promise((resolve, reject) => {
|
|
193
|
+
const req = client.request(requestOptions, makeCallback(resolve, reject, options));
|
|
194
|
+
|
|
195
|
+
if (options.body) {
|
|
196
|
+
req.write(options.body);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
req.on('error', error => {
|
|
200
|
+
reject(error);
|
|
201
|
+
});
|
|
202
|
+
req.end();
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
module.exports = httpRequest;
|
|
207
|
+
module.exports.encodeBody = encodeBody;
|
|
208
|
+
module.exports.HTTPResponse = HTTPResponse;
|
|
209
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LmpzIl0sIm5hbWVzIjpbIkhUVFBSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJib2R5IiwiX3RleHQiLCJfZGF0YSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJoZWFkZXJzIiwiY29va2llcyIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiYnVmZmVyIiwiZ2V0VGV4dCIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldERhdGEiLCJwYXJzZSIsImUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImVudW1lcmFibGUiLCJjbGllbnRzIiwiaHR0cCIsImh0dHBzIiwibWFrZUNhbGxiYWNrIiwicmVzb2x2ZSIsInJlamVjdCIsImNodW5rcyIsIm9uIiwiY2h1bmsiLCJwdXNoIiwiY29uY2F0IiwiaHR0cFJlc3BvbnNlIiwiZW5jb2RlQm9keSIsImNvbnRlbnRUeXBlS2V5cyIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJtYXRjaCIsImxlbmd0aCIsInF1ZXJ5c3RyaW5nIiwibG9nIiwiZXJyb3IiLCJjb250ZW50VHlwZSIsImh0dHBSZXF1ZXN0Iiwib3B0aW9ucyIsInVybCIsIlByb21pc2UiLCJhc3NpZ24iLCJwYXJhbXMiLCJxcyIsImNsaWVudCIsInByb3RvY29sIiwicmVxdWVzdE9wdGlvbnMiLCJtZXRob2QiLCJwb3J0IiwiTnVtYmVyIiwicGF0aCIsInBhdGhuYW1lIiwiaG9zdG5hbWUiLCJlbmNvZGluZyIsImZvbGxvd1JlZGlyZWN0cyIsImZvckVhY2giLCJzZWFyY2giLCJxdWVyeSIsImF1dGgiLCJhZ2VudCIsInJlcSIsInJlcXVlc3QiLCJ3cml0ZSIsImVuZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLENBQW1CO0FBQ2pCQyxFQUFBQSxXQUFXLENBQUNDLFFBQUQsRUFBV0MsSUFBWCxFQUFp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QUNZLElBQWYsR0FBc0JuQixHQUFHLENBQUNtQixJQUExQjtBQUNEOztBQUNELE1BQUlwQixPQUFPLENBQUNLLEVBQVosRUFBZ0I7QUFDZEcsSUFBQUEsY0FBYyxDQUFDSSxJQUFmLElBQXdCLElBQUdqQixxQkFBWTNCLFNBQVosQ0FBc0JnQyxPQUFPLENBQUNLLEVBQTlCLENBQWtDLEVBQTdEO0FBQ0Q7O0FBQ0QsTUFBSUwsT0FBTyxDQUFDcUIsS0FBWixFQUFtQjtBQUNqQmIsSUFBQUEsY0FBYyxDQUFDYSxLQUFmLEdBQXVCckIsT0FBTyxDQUFDcUIsS0FBL0I7QUFDRDs7QUFDRCxTQUFPLElBQUluQixPQUFKLENBQVksQ0FBQ3RCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0QyxVQUFNeUMsR0FBRyxHQUFHaEIsTUFBTSxDQUFDaUIsT0FBUCxDQUFlZixjQUFmLEVBQStCN0IsWUFBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBa0JtQixPQUFsQixDQUEzQyxDQUFaOztBQUNBLFFBQUlBLE9BQU8sQ0FBQzdDLElBQVosRUFBa0I7QUFDaEJtRSxNQUFBQSxHQUFHLENBQUNFLEtBQUosQ0FBVXhCLE9BQU8sQ0FBQzdDLElBQWxCO0FBQ0Q7O0FBQ0RtRSxJQUFBQSxHQUFHLENBQUN2QyxFQUFKLENBQU8sT0FBUCxFQUFnQmMsS0FBSyxJQUFJO0FBQ3ZCaEIsTUFBQUEsTUFBTSxDQUFDZ0IsS0FBRCxDQUFOO0FBQ0QsS0FGRDtBQUdBeUIsSUFBQUEsR0FBRyxDQUFDRyxHQUFKO0FBQ0QsR0FUTSxDQUFQO0FBVUQ7O0FBQ0RDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVCLFdBQWpCO0FBQ0EyQixNQUFNLENBQUNDLE9BQVAsQ0FBZXZDLFVBQWYsR0FBNEJBLFVBQTVCO0FBQ0FzQyxNQUFNLENBQUNDLE9BQVAsQ0FBZTNFLFlBQWYsR0FBOEJBLFlBQTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaHR0cCwgaHR0cHMgfSBmcm9tICdmb2xsb3ctcmVkaXJlY3RzJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAndXJsJztcblxuY2xhc3MgSFRUUFJlc3BvbnNlIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UsIGJvZHkpIHtcbiAgICBsZXQgX3RleHQsIF9kYXRhO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgICB0aGlzLmhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuY29va2llcyA9IHRoaXMuaGVhZGVyc1snc2V0LWNvb2tpZSddO1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ID09ICdzdHJpbmcnKSB7XG4gICAgICBfdGV4dCA9IGJvZHk7XG4gICAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gYm9keTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09ICdvYmplY3QnKSB7XG4gICAgICBfZGF0YSA9IGJvZHk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VGV4dCA9ICgpID0+IHtcbiAgICAgIGlmICghX3RleHQgJiYgdGhpcy5idWZmZXIpIHtcbiAgICAgICAgX3RleHQgPSB0aGlzLmJ1ZmZlci50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90ZXh0ICYmIF9kYXRhKSB7XG4gICAgICAgIF90ZXh0ID0gSlNPTi5zdHJpbmdpZnkoX2RhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90ZXh0O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXREYXRhID0gKCkgPT4ge1xuICAgICAgaWYgKCFfZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIF9kYXRhID0gSlNPTi5wYXJzZShnZXRUZXh0KCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF9kYXRhO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2JvZHknLCB7XG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0ZXh0Jywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZ2V0VGV4dCxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZGF0YScsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGdldERhdGEsXG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgY2xpZW50cyA9IHtcbiAgJ2h0dHA6JzogaHR0cCxcbiAgJ2h0dHBzOic6IGh0dHBzLFxufTtcblxuZnVuY3Rpb24gbWFrZUNhbGxiYWNrKHJlc29sdmUsIHJlamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgfSk7XG4gICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICBjb25zdCBodHRwUmVzcG9uc2UgPSBuZXcgSFRUUFJlc3BvbnNlKHJlc3BvbnNlLCBib2R5KTtcblxuICAgICAgLy8gQ29uc2lkZXIgPDIwMCAmJiA+PSA0MDAgYXMgZXJyb3JzXG4gICAgICBpZiAoaHR0cFJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCBodHRwUmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGh0dHBSZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShodHRwUmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3BvbnNlLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH07XG59XG5cbmNvbnN0IGVuY29kZUJvZHkgPSBmdW5jdGlvbiAoeyBib2R5LCBoZWFkZXJzID0ge30gfSkge1xuICBpZiAodHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHsgYm9keSwgaGVhZGVycyB9O1xuICB9XG4gIHZhciBjb250ZW50VHlwZUtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICByZXR1cm4ga2V5Lm1hdGNoKC9jb250ZW50LXR5cGUvaSkgIT0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlS2V5cy5sZW5ndGggPT0gMCkge1xuICAgIC8vIG5vIGNvbnRlbnQgdHlwZVxuICAgIC8vICBBcyBwZXIgaHR0cHM6Ly9wYXJzZS5jb20vZG9jcy9jbG91ZGNvZGUvZ3VpZGUjY2xvdWQtY29kZS1hZHZhbmNlZC1zZW5kaW5nLWEtcG9zdC1yZXF1ZXN0IHRoZSBkZWZhdWx0IGVuY29kaW5nIGlzIHN1cHBvc2VkbHkgeC13d3ctZm9ybS11cmxlbmNvZGVkXG5cbiAgICBib2R5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KGJvZHkpO1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoY29udGVudFR5cGVLZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxvZy5lcnJvcignUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3QnLCAnbXVsdGlwbGUgY29udGVudC10eXBlIGhlYWRlcnMgYXJlIHNldC4nKTtcbiAgICB9XG4gICAgLy8gVGhlcmUgbWF5YmUgbWFueSwgd2UnbGwganVzdCB0YWtlIHRoZSAxc3Qgb25lXG4gICAgdmFyIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVLZXlzWzBdO1xuICAgIGlmIChoZWFkZXJzW2NvbnRlbnRUeXBlXS5tYXRjaCgvYXBwbGljYXRpb25cXC9qc29uL2kpKSB7XG4gICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzW2NvbnRlbnRUeXBlXS5tYXRjaCgvYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvaSkpIHtcbiAgICAgIGJvZHkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoYm9keSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGJvZHksIGhlYWRlcnMgfTtcbn07XG5cbmZ1bmN0aW9uIGh0dHBSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgbGV0IHVybDtcbiAgdHJ5IHtcbiAgICB1cmwgPSBwYXJzZShvcHRpb25zLnVybCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gIH1cbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgZW5jb2RlQm9keShvcHRpb25zKSk7XG4gIC8vIHN1cHBvcnQgcGFyYW1zIG9wdGlvbnNcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zLnFzID0gb3B0aW9ucy5wYXJhbXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMucXMgPSBxdWVyeXN0cmluZy5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gY2xpZW50c1t1cmwucHJvdG9jb2xdO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9YCk7XG4gIH1cbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICBwb3J0OiBOdW1iZXIodXJsLnBvcnQpLFxuICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBmb2xsb3dSZWRpcmVjdHM6IG9wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSB0cnVlLFxuICB9O1xuICBpZiAocmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh1cmwuc2VhcmNoKSB7XG4gICAgb3B0aW9ucy5xcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucXMsIHF1ZXJ5c3RyaW5nLnBhcnNlKHVybC5xdWVyeSkpO1xuICB9XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIHJlcXVlc3RPcHRpb25zLmF1dGggPSB1cmwuYXV0aDtcbiAgfVxuICBpZiAob3B0aW9ucy5xcykge1xuICAgIHJlcXVlc3RPcHRpb25zLnBhdGggKz0gYD8ke3F1ZXJ5c3RyaW5nLnN0cmluZ2lmeShvcHRpb25zLnFzKX1gO1xuICB9XG4gIGlmIChvcHRpb25zLmFnZW50KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYWdlbnQgPSBvcHRpb25zLmFnZW50O1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gY2xpZW50LnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG1ha2VDYWxsYmFjayhyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICByZXEud3JpdGUob3B0aW9ucy5ib2R5KTtcbiAgICB9XG4gICAgcmVxLm9uKCdlcnJvcicsIGVycm9yID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gICAgcmVxLmVuZCgpO1xuICB9KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaHR0cFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cy5lbmNvZGVCb2R5ID0gZW5jb2RlQm9keTtcbm1vZHVsZS5leHBvcnRzLkhUVFBSZXNwb25zZSA9IEhUVFBSZXNwb25zZTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0-alpha.10",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
],
|
|
20
20
|
"license": "BSD-3-Clause",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@graphql-yoga/node": "2.6.0",
|
|
23
|
-
"@graphql-tools/utils": "8.12.0",
|
|
24
22
|
"@graphql-tools/merge": "8.3.6",
|
|
25
23
|
"@graphql-tools/schema": "9.0.4",
|
|
24
|
+
"@graphql-tools/utils": "8.12.0",
|
|
25
|
+
"@graphql-yoga/node": "2.6.0",
|
|
26
26
|
"@parse/fs-files-adapter": "1.2.2",
|
|
27
27
|
"@parse/push-adapter": "4.1.2",
|
|
28
28
|
"bcryptjs": "2.4.3",
|
|
@@ -30,15 +30,16 @@
|
|
|
30
30
|
"commander": "5.1.0",
|
|
31
31
|
"cors": "2.8.5",
|
|
32
32
|
"deepcopy": "2.1.0",
|
|
33
|
-
"express": "4.18.
|
|
33
|
+
"express": "4.18.2",
|
|
34
34
|
"follow-redirects": "1.15.2",
|
|
35
35
|
"graphql": "16.6.0",
|
|
36
36
|
"graphql-list-fields": "2.0.2",
|
|
37
|
-
"graphql-tag": "2.12.6",
|
|
38
37
|
"graphql-relay": "0.10.0",
|
|
38
|
+
"graphql-tag": "2.12.6",
|
|
39
39
|
"intersect": "1.0.1",
|
|
40
|
+
"ip-range-check": "0.2.0",
|
|
40
41
|
"jsonwebtoken": "8.5.1",
|
|
41
|
-
"jwks-rsa": "2.1.
|
|
42
|
+
"jwks-rsa": "2.1.5",
|
|
42
43
|
"ldapjs": "2.3.3",
|
|
43
44
|
"lodash": "4.17.21",
|
|
44
45
|
"lru-cache": "7.12.0",
|
|
@@ -47,9 +48,9 @@
|
|
|
47
48
|
"mustache": "4.2.0",
|
|
48
49
|
"parse": "3.4.2",
|
|
49
50
|
"pg-monitor": "1.5.0",
|
|
50
|
-
"pg-promise": "10.12.
|
|
51
|
+
"pg-promise": "10.12.1",
|
|
51
52
|
"pluralize": "8.0.0",
|
|
52
|
-
"redis": "
|
|
53
|
+
"redis": "4.0.6",
|
|
53
54
|
"semver": "7.3.8",
|
|
54
55
|
"subscriptions-transport-ws": "0.11.0",
|
|
55
56
|
"tv4": "1.3.0",
|
|
@@ -59,7 +60,6 @@
|
|
|
59
60
|
"ws": "8.9.0"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
62
|
-
"graphql-tag": "2.12.6",
|
|
63
63
|
"@actions/core": "1.9.1",
|
|
64
64
|
"@apollo/client": "3.6.1",
|
|
65
65
|
"@babel/cli": "7.10.0",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"eslint-plugin-flowtype": "5.1.3",
|
|
87
87
|
"flow-bin": "0.119.1",
|
|
88
88
|
"form-data": "3.0.0",
|
|
89
|
+
"graphql-tag": "2.12.6",
|
|
89
90
|
"husky": "4.3.8",
|
|
90
91
|
"jasmine": "3.5.0",
|
|
91
92
|
"jasmine-spec-reporter": "7.0.0",
|
|
@@ -112,20 +113,19 @@
|
|
|
112
113
|
"lint-fix": "eslint --fix --cache ./",
|
|
113
114
|
"build": "babel src/ -d lib/ --copy-files",
|
|
114
115
|
"watch": "babel --watch src/ -d lib/ --copy-files",
|
|
115
|
-
"test:mongodb:runnerstart": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=$npm_config_dbversion} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
116
|
-
"test:mongodb:testonly": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=$npm_config_dbversion} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
116
|
+
"test:mongodb:runnerstart": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=$npm_config_dbversion} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} mongodb-runner start",
|
|
117
|
+
"test:mongodb:testonly": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=$npm_config_dbversion} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} TESTING=1 jasmine",
|
|
117
118
|
"test:mongodb": "npm run test:mongodb:runnerstart --dbversion=$npm_config_dbversion && npm run test:mongodb:testonly --dbversion=$npm_config_dbversion",
|
|
118
|
-
"test:mongodb:4.0.28": "npm run test:mongodb --dbversion=4.0.28",
|
|
119
119
|
"test:mongodb:4.2.19": "npm run test:mongodb --dbversion=4.2.19",
|
|
120
120
|
"test:mongodb:4.4.13": "npm run test:mongodb --dbversion=4.4.13",
|
|
121
121
|
"test:mongodb:5.3.2": "npm run test:mongodb --dbversion=5.3.2",
|
|
122
122
|
"test:mongodb:6.0.2": "npm run test:mongodb --dbversion=6.0.2",
|
|
123
123
|
"posttest:mongodb": "mongodb-runner stop",
|
|
124
|
-
"pretest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
125
|
-
"testonly": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
124
|
+
"pretest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} mongodb-runner start",
|
|
125
|
+
"testonly": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} TESTING=1 jasmine",
|
|
126
126
|
"test": "npm run testonly",
|
|
127
|
-
"posttest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
128
|
-
"coverage": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone}
|
|
127
|
+
"posttest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} mongodb-runner stop",
|
|
128
|
+
"coverage": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=5.3.2} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} TESTING=1 nyc jasmine",
|
|
129
129
|
"start": "node ./bin/parse-server",
|
|
130
130
|
"prettier": "prettier --write {src,spec}/{**/*,*}.js",
|
|
131
131
|
"prepare": "npm run build",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"madge:circular": "node_modules/.bin/madge ./src --circular"
|
|
134
134
|
},
|
|
135
135
|
"engines": {
|
|
136
|
-
"node": ">=
|
|
136
|
+
"node": ">=14.21.0 <17 || >=18 <19"
|
|
137
137
|
},
|
|
138
138
|
"bin": {
|
|
139
139
|
"parse-server": "bin/parse-server"
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @typedef Parse.Cloud.HTTPResponse
|
|
10
|
-
* @property {Buffer} buffer The raw byte representation of the response body. Use this to receive binary data. See Buffer for more details.
|
|
11
|
-
* @property {Object} cookies The cookies sent by the server. The keys in this object are the names of the cookies. The values are Parse.Cloud.Cookie objects.
|
|
12
|
-
* @property {Object} data The parsed response body as a JavaScript object. This is only available when the response Content-Type is application/x-www-form-urlencoded or application/json.
|
|
13
|
-
* @property {Object} headers The headers sent by the server. The keys in this object are the names of the headers. We do not support multiple response headers with the same name. In the common case of Set-Cookie headers, please use the cookies field instead.
|
|
14
|
-
* @property {Number} status The status code.
|
|
15
|
-
* @property {String} text The raw text representation of the response body.
|
|
16
|
-
*/
|
|
17
|
-
class HTTPResponse {
|
|
18
|
-
constructor(response, body) {
|
|
19
|
-
let _text, _data;
|
|
20
|
-
|
|
21
|
-
this.status = response.statusCode;
|
|
22
|
-
this.headers = response.headers || {};
|
|
23
|
-
this.cookies = this.headers['set-cookie'];
|
|
24
|
-
|
|
25
|
-
if (typeof body == 'string') {
|
|
26
|
-
_text = body;
|
|
27
|
-
} else if (Buffer.isBuffer(body)) {
|
|
28
|
-
this.buffer = body;
|
|
29
|
-
} else if (typeof body == 'object') {
|
|
30
|
-
_data = body;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const getText = () => {
|
|
34
|
-
if (!_text && this.buffer) {
|
|
35
|
-
_text = this.buffer.toString('utf-8');
|
|
36
|
-
} else if (!_text && _data) {
|
|
37
|
-
_text = JSON.stringify(_data);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return _text;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const getData = () => {
|
|
44
|
-
if (!_data) {
|
|
45
|
-
try {
|
|
46
|
-
_data = JSON.parse(getText());
|
|
47
|
-
} catch (e) {
|
|
48
|
-
/* */
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return _data;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
Object.defineProperty(this, 'body', {
|
|
56
|
-
get: () => {
|
|
57
|
-
return body;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
Object.defineProperty(this, 'text', {
|
|
61
|
-
enumerable: true,
|
|
62
|
-
get: getText
|
|
63
|
-
});
|
|
64
|
-
Object.defineProperty(this, 'data', {
|
|
65
|
-
enumerable: true,
|
|
66
|
-
get: getData
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
exports.default = HTTPResponse;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbG91ZC1jb2RlL0hUVFBSZXNwb25zZS5qcyJdLCJuYW1lcyI6WyJIVFRQUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsInJlc3BvbnNlIiwiYm9keSIsIl90ZXh0IiwiX2RhdGEiLCJzdGF0dXMiLCJzdGF0dXNDb2RlIiwiaGVhZGVycyIsImNvb2tpZXMiLCJCdWZmZXIiLCJpc0J1ZmZlciIsImJ1ZmZlciIsImdldFRleHQiLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREYXRhIiwicGFyc2UiLCJlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJlbnVtZXJhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTUEsWUFBTixDQUFtQjtBQUNoQ0MsRUFBQUEsV0FBVyxDQUFDQyxRQUFELEVBQVdDLElBQVgsRUFBaUI7QUFDMUIsUUFBSUMsS0FBSixFQUFXQyxLQUFYOztBQUNBLFNBQUtDLE1BQUwsR0FBY0osUUFBUSxDQUFDSyxVQUF2QjtBQUNBLFNBQUtDLE9BQUwsR0FBZU4sUUFBUSxDQUFDTSxPQUFULElBQW9CLEVBQW5DO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtELE9BQUwsQ0FBYSxZQUFiLENBQWY7O0FBRUEsUUFBSSxPQUFPTCxJQUFQLElBQWUsUUFBbkIsRUFBNkI7QUFDM0JDLE1BQUFBLEtBQUssR0FBR0QsSUFBUjtBQUNELEtBRkQsTUFFTyxJQUFJTyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JSLElBQWhCLENBQUosRUFBMkI7QUFDaEMsV0FBS1MsTUFBTCxHQUFjVCxJQUFkO0FBQ0QsS0FGTSxNQUVBLElBQUksT0FBT0EsSUFBUCxJQUFlLFFBQW5CLEVBQTZCO0FBQ2xDRSxNQUFBQSxLQUFLLEdBQUdGLElBQVI7QUFDRDs7QUFFRCxVQUFNVSxPQUFPLEdBQUcsTUFBTTtBQUNwQixVQUFJLENBQUNULEtBQUQsSUFBVSxLQUFLUSxNQUFuQixFQUEyQjtBQUN6QlIsUUFBQUEsS0FBSyxHQUFHLEtBQUtRLE1BQUwsQ0FBWUUsUUFBWixDQUFxQixPQUFyQixDQUFSO0FBQ0QsT0FGRCxNQUVPLElBQUksQ0FBQ1YsS0FBRCxJQUFVQyxLQUFkLEVBQXFCO0FBQzFCRCxRQUFBQSxLQUFLLEdBQUdXLElBQUksQ0FBQ0MsU0FBTCxDQUFlWCxLQUFmLENBQVI7QUFDRDs7QUFDRCxhQUFPRCxLQUFQO0FBQ0QsS0FQRDs7QUFTQSxVQUFNYSxPQUFPLEdBQUcsTUFBTTtBQUNwQixVQUFJLENBQUNaLEtBQUwsRUFBWTtBQUNWLFlBQUk7QUFDRkEsVUFBQUEsS0FBSyxHQUFHVSxJQUFJLENBQUNHLEtBQUwsQ0FBV0wsT0FBTyxFQUFsQixDQUFSO0FBQ0QsU0FGRCxDQUVFLE9BQU9NLENBQVAsRUFBVTtBQUNWO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPZCxLQUFQO0FBQ0QsS0FURDs7QUFXQWUsSUFBQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLE1BQTVCLEVBQW9DO0FBQ2xDQyxNQUFBQSxHQUFHLEVBQUUsTUFBTTtBQUNULGVBQU9uQixJQUFQO0FBQ0Q7QUFIaUMsS0FBcEM7QUFNQWlCLElBQUFBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixNQUE1QixFQUFvQztBQUNsQ0UsTUFBQUEsVUFBVSxFQUFFLElBRHNCO0FBRWxDRCxNQUFBQSxHQUFHLEVBQUVUO0FBRjZCLEtBQXBDO0FBS0FPLElBQUFBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixNQUE1QixFQUFvQztBQUNsQ0UsTUFBQUEsVUFBVSxFQUFFLElBRHNCO0FBRWxDRCxNQUFBQSxHQUFHLEVBQUVMO0FBRjZCLEtBQXBDO0FBSUQ7O0FBbEQrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYgUGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge0J1ZmZlcn0gYnVmZmVyIFRoZSByYXcgYnl0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzcG9uc2UgYm9keS4gVXNlIHRoaXMgdG8gcmVjZWl2ZSBiaW5hcnkgZGF0YS4gU2VlIEJ1ZmZlciBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGNvb2tpZXMgVGhlIGNvb2tpZXMgc2VudCBieSB0aGUgc2VydmVyLiBUaGUga2V5cyBpbiB0aGlzIG9iamVjdCBhcmUgdGhlIG5hbWVzIG9mIHRoZSBjb29raWVzLiBUaGUgdmFsdWVzIGFyZSBQYXJzZS5DbG91ZC5Db29raWUgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhIFRoZSBwYXJzZWQgcmVzcG9uc2UgYm9keSBhcyBhIEphdmFTY3JpcHQgb2JqZWN0LiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIHJlc3BvbnNlIENvbnRlbnQtVHlwZSBpcyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb3IgYXBwbGljYXRpb24vanNvbi5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWFkZXJzIFRoZSBoZWFkZXJzIHNlbnQgYnkgdGhlIHNlcnZlci4gVGhlIGtleXMgaW4gdGhpcyBvYmplY3QgYXJlIHRoZSBuYW1lcyBvZiB0aGUgaGVhZGVycy4gV2UgZG8gbm90IHN1cHBvcnQgbXVsdGlwbGUgcmVzcG9uc2UgaGVhZGVycyB3aXRoIHRoZSBzYW1lIG5hbWUuIEluIHRoZSBjb21tb24gY2FzZSBvZiBTZXQtQ29va2llIGhlYWRlcnMsIHBsZWFzZSB1c2UgdGhlIGNvb2tpZXMgZmllbGQgaW5zdGVhZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBzdGF0dXMgVGhlIHN0YXR1cyBjb2RlLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHRleHQgVGhlIHJhdyB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXNwb25zZSBib2R5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIVFRQUmVzcG9uc2Uge1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSwgYm9keSkge1xuICAgIGxldCBfdGV4dCwgX2RhdGE7XG4gICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICAgIHRoaXMuaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy5jb29raWVzID0gdGhpcy5oZWFkZXJzWydzZXQtY29va2llJ107XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgPT0gJ3N0cmluZycpIHtcbiAgICAgIF90ZXh0ID0gYm9keTtcbiAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgdGhpcy5idWZmZXIgPSBib2R5O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT0gJ29iamVjdCcpIHtcbiAgICAgIF9kYXRhID0gYm9keTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRUZXh0ID0gKCkgPT4ge1xuICAgICAgaWYgKCFfdGV4dCAmJiB0aGlzLmJ1ZmZlcikge1xuICAgICAgICBfdGV4dCA9IHRoaXMuYnVmZmVyLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgfSBlbHNlIGlmICghX3RleHQgJiYgX2RhdGEpIHtcbiAgICAgICAgX3RleHQgPSBKU09OLnN0cmluZ2lmeShfZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3RleHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgICBpZiAoIV9kYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgX2RhdGEgPSBKU09OLnBhcnNlKGdldFRleHQoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gX2RhdGE7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYm9keScsIHtcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3RleHQnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBnZXRUZXh0LFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkYXRhJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZ2V0RGF0YSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _HTTPResponse = _interopRequireDefault(require("./HTTPResponse"));
|
|
4
|
-
|
|
5
|
-
var _querystring = _interopRequireDefault(require("querystring"));
|
|
6
|
-
|
|
7
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
8
|
-
|
|
9
|
-
var _followRedirects = require("follow-redirects");
|
|
10
|
-
|
|
11
|
-
var _url = require("url");
|
|
12
|
-
|
|
13
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
|
|
15
|
-
const clients = {
|
|
16
|
-
'http:': _followRedirects.http,
|
|
17
|
-
'https:': _followRedirects.https
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
function makeCallback(resolve, reject) {
|
|
21
|
-
return function (response) {
|
|
22
|
-
const chunks = [];
|
|
23
|
-
response.on('data', chunk => {
|
|
24
|
-
chunks.push(chunk);
|
|
25
|
-
});
|
|
26
|
-
response.on('end', () => {
|
|
27
|
-
const body = Buffer.concat(chunks);
|
|
28
|
-
const httpResponse = new _HTTPResponse.default(response, body); // Consider <200 && >= 400 as errors
|
|
29
|
-
|
|
30
|
-
if (httpResponse.status < 200 || httpResponse.status >= 400) {
|
|
31
|
-
return reject(httpResponse);
|
|
32
|
-
} else {
|
|
33
|
-
return resolve(httpResponse);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
response.on('error', reject);
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const encodeBody = function ({
|
|
41
|
-
body,
|
|
42
|
-
headers = {}
|
|
43
|
-
}) {
|
|
44
|
-
if (typeof body !== 'object') {
|
|
45
|
-
return {
|
|
46
|
-
body,
|
|
47
|
-
headers
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
var contentTypeKeys = Object.keys(headers).filter(key => {
|
|
52
|
-
return key.match(/content-type/i) != null;
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
if (contentTypeKeys.length == 0) {
|
|
56
|
-
// no content type
|
|
57
|
-
// As per https://parse.com/docs/cloudcode/guide#cloud-code-advanced-sending-a-post-request the default encoding is supposedly x-www-form-urlencoded
|
|
58
|
-
body = _querystring.default.stringify(body);
|
|
59
|
-
headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
60
|
-
} else {
|
|
61
|
-
/* istanbul ignore next */
|
|
62
|
-
if (contentTypeKeys.length > 1) {
|
|
63
|
-
_logger.default.error('Parse.Cloud.httpRequest', 'multiple content-type headers are set.');
|
|
64
|
-
} // There maybe many, we'll just take the 1st one
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var contentType = contentTypeKeys[0];
|
|
68
|
-
|
|
69
|
-
if (headers[contentType].match(/application\/json/i)) {
|
|
70
|
-
body = JSON.stringify(body);
|
|
71
|
-
} else if (headers[contentType].match(/application\/x-www-form-urlencoded/i)) {
|
|
72
|
-
body = _querystring.default.stringify(body);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
body,
|
|
78
|
-
headers
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Makes an HTTP Request.
|
|
83
|
-
*
|
|
84
|
-
* **Available in Cloud Code only.**
|
|
85
|
-
*
|
|
86
|
-
* By default, Parse.Cloud.httpRequest does not follow redirects caused by HTTP 3xx response codes. You can use the followRedirects option in the {@link Parse.Cloud.HTTPOptions} object to change this behavior.
|
|
87
|
-
*
|
|
88
|
-
* Sample request:
|
|
89
|
-
* ```
|
|
90
|
-
* Parse.Cloud.httpRequest({
|
|
91
|
-
* url: 'http://www.parse.com/'
|
|
92
|
-
* }).then(function(httpResponse) {
|
|
93
|
-
* // success
|
|
94
|
-
* console.log(httpResponse.text);
|
|
95
|
-
* },function(httpResponse) {
|
|
96
|
-
* // error
|
|
97
|
-
* console.error('Request failed with response code ' + httpResponse.status);
|
|
98
|
-
* });
|
|
99
|
-
* ```
|
|
100
|
-
*
|
|
101
|
-
* @method httpRequest
|
|
102
|
-
* @name Parse.Cloud.httpRequest
|
|
103
|
-
* @param {Parse.Cloud.HTTPOptions} options The Parse.Cloud.HTTPOptions object that makes the request.
|
|
104
|
-
* @return {Promise<Parse.Cloud.HTTPResponse>} A promise that will be resolved with a {@link Parse.Cloud.HTTPResponse} object when the request completes.
|
|
105
|
-
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
module.exports = function httpRequest(options) {
|
|
109
|
-
let url;
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
url = (0, _url.parse)(options.url);
|
|
113
|
-
} catch (e) {
|
|
114
|
-
return Promise.reject(e);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
options = Object.assign(options, encodeBody(options)); // support params options
|
|
118
|
-
|
|
119
|
-
if (typeof options.params === 'object') {
|
|
120
|
-
options.qs = options.params;
|
|
121
|
-
} else if (typeof options.params === 'string') {
|
|
122
|
-
options.qs = _querystring.default.parse(options.params);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const client = clients[url.protocol];
|
|
126
|
-
|
|
127
|
-
if (!client) {
|
|
128
|
-
return Promise.reject(`Unsupported protocol ${url.protocol}`);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const requestOptions = {
|
|
132
|
-
method: options.method,
|
|
133
|
-
port: Number(url.port),
|
|
134
|
-
path: url.pathname,
|
|
135
|
-
hostname: url.hostname,
|
|
136
|
-
headers: options.headers,
|
|
137
|
-
encoding: null,
|
|
138
|
-
followRedirects: options.followRedirects === true
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
if (requestOptions.headers) {
|
|
142
|
-
Object.keys(requestOptions.headers).forEach(key => {
|
|
143
|
-
if (typeof requestOptions.headers[key] === 'undefined') {
|
|
144
|
-
delete requestOptions.headers[key];
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (url.search) {
|
|
150
|
-
options.qs = Object.assign({}, options.qs, _querystring.default.parse(url.query));
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (url.auth) {
|
|
154
|
-
requestOptions.auth = url.auth;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (options.qs) {
|
|
158
|
-
requestOptions.path += `?${_querystring.default.stringify(options.qs)}`;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
if (options.agent) {
|
|
162
|
-
requestOptions.agent = options.agent;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return new Promise((resolve, reject) => {
|
|
166
|
-
const req = client.request(requestOptions, makeCallback(resolve, reject, options));
|
|
167
|
-
|
|
168
|
-
if (options.body) {
|
|
169
|
-
req.write(options.body);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
req.on('error', error => {
|
|
173
|
-
reject(error);
|
|
174
|
-
});
|
|
175
|
-
req.end();
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
/**
|
|
179
|
-
* @typedef Parse.Cloud.HTTPOptions
|
|
180
|
-
* @property {String|Object} body The body of the request. If it is a JSON object, then the Content-Type set in the headers must be application/x-www-form-urlencoded or application/json. You can also set this to a {@link Buffer} object to send raw bytes. If you use a Buffer, you should also set the Content-Type header explicitly to describe what these bytes represent.
|
|
181
|
-
* @property {function} error The function that is called when the request fails. It will be passed a Parse.Cloud.HTTPResponse object.
|
|
182
|
-
* @property {Boolean} followRedirects Whether to follow redirects caused by HTTP 3xx responses. Defaults to false.
|
|
183
|
-
* @property {Object} headers The headers for the request.
|
|
184
|
-
* @property {String} method The method of the request. GET, POST, PUT, DELETE, HEAD, and OPTIONS are supported. Will default to GET if not specified.
|
|
185
|
-
* @property {String|Object} params The query portion of the url. You can pass a JSON object of key value pairs like params: {q : 'Sean Plott'} or a raw string like params:q=Sean Plott.
|
|
186
|
-
* @property {function} success The function that is called when the request successfully completes. It will be passed a Parse.Cloud.HTTPResponse object.
|
|
187
|
-
* @property {string} url The url to send the request to.
|
|
188
|
-
*/
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
module.exports.encodeBody = encodeBody;
|
|
192
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbG91ZC1jb2RlL2h0dHBSZXF1ZXN0LmpzIl0sIm5hbWVzIjpbImNsaWVudHMiLCJodHRwIiwiaHR0cHMiLCJtYWtlQ2FsbGJhY2siLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzcG9uc2UiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsImJvZHkiLCJCdWZmZXIiLCJjb25jYXQiLCJodHRwUmVzcG9uc2UiLCJIVFRQUmVzcG9uc2UiLCJzdGF0dXMiLCJlbmNvZGVCb2R5IiwiaGVhZGVycyIsImNvbnRlbnRUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJtYXRjaCIsImxlbmd0aCIsInF1ZXJ5c3RyaW5nIiwic3RyaW5naWZ5IiwibG9nIiwiZXJyb3IiLCJjb250ZW50VHlwZSIsIkpTT04iLCJtb2R1bGUiLCJleHBvcnRzIiwiaHR0cFJlcXVlc3QiLCJvcHRpb25zIiwidXJsIiwiZSIsIlByb21pc2UiLCJhc3NpZ24iLCJwYXJhbXMiLCJxcyIsInBhcnNlIiwiY2xpZW50IiwicHJvdG9jb2wiLCJyZXF1ZXN0T3B0aW9ucyIsIm1ldGhvZCIsInBvcnQiLCJOdW1iZXIiLCJwYXRoIiwicGF0aG5hbWUiLCJob3N0bmFtZSIsImVuY29kaW5nIiwiZm9sbG93UmVkaXJlY3RzIiwiZm9yRWFjaCIsInNlYXJjaCIsInF1ZXJ5IiwiYXV0aCIsImFnZW50IiwicmVxIiwicmVxdWVzdCIsIndyaXRlIiwiZW5kIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsT0FBTyxHQUFHO0FBQ2QsV0FBU0MscUJBREs7QUFFZCxZQUFVQztBQUZJLENBQWhCOztBQUtBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCQyxNQUEvQixFQUF1QztBQUNyQyxTQUFPLFVBQVVDLFFBQVYsRUFBb0I7QUFDekIsVUFBTUMsTUFBTSxHQUFHLEVBQWY7QUFDQUQsSUFBQUEsUUFBUSxD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M0MsQ0FBWjs7QUFDQSxRQUFJQSxPQUFPLENBQUN4QixJQUFaLEVBQWtCO0FBQ2hCZ0QsTUFBQUEsR0FBRyxDQUFDRSxLQUFKLENBQVUxQixPQUFPLENBQUN4QixJQUFsQjtBQUNEOztBQUNEZ0QsSUFBQUEsR0FBRyxDQUFDbkQsRUFBSixDQUFPLE9BQVAsRUFBZ0JxQixLQUFLLElBQUk7QUFDdkJ4QixNQUFBQSxNQUFNLENBQUN3QixLQUFELENBQU47QUFDRCxLQUZEO0FBR0E4QixJQUFBQSxHQUFHLENBQUNHLEdBQUo7QUFDRCxHQVRNLENBQVA7QUFVRCxDQXhERDtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTlCLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEIsVUFBZixHQUE0QkEsVUFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSFRUUFJlc3BvbnNlIGZyb20gJy4vSFRUUFJlc3BvbnNlJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBodHRwLCBodHRwcyB9IGZyb20gJ2ZvbGxvdy1yZWRpcmVjdHMnO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICd1cmwnO1xuXG5jb25zdCBjbGllbnRzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG59O1xuXG5mdW5jdGlvbiBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICByZXNwb25zZS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9KTtcbiAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBIVFRQUmVzcG9uc2UocmVzcG9uc2UsIGJvZHkpO1xuXG4gICAgICAvLyBDb25zaWRlciA8MjAwICYmID49IDQwMCBhcyBlcnJvcnNcbiAgICAgIGlmIChodHRwUmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IGh0dHBSZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoaHR0cFJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGh0dHBSZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzcG9uc2Uub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfTtcbn1cblxuY29uc3QgZW5jb2RlQm9keSA9IGZ1bmN0aW9uICh7IGJvZHksIGhlYWRlcnMgPSB7fSB9KSB7XG4gIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4geyBib2R5LCBoZWFkZXJzIH07XG4gIH1cbiAgdmFyIGNvbnRlbnRUeXBlS2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLmZpbHRlcihrZXkgPT4ge1xuICAgIHJldHVybiBrZXkubWF0Y2goL2NvbnRlbnQtdHlwZS9pKSAhPSBudWxsO1xuICB9KTtcblxuICBpZiAoY29udGVudFR5cGVLZXlzLmxlbmd0aCA9PSAwKSB7XG4gICAgLy8gbm8gY29udGVudCB0eXBlXG4gICAgLy8gIEFzIHBlciBodHRwczovL3BhcnNlLmNvbS9kb2NzL2Nsb3VkY29kZS9ndWlkZSNjbG91ZC1jb2RlLWFkdmFuY2VkLXNlbmRpbmctYS1wb3N0LXJlcXVlc3QgdGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMgc3VwcG9zZWRseSB4LXd3dy1mb3JtLXVybGVuY29kZWRcblxuICAgIGJvZHkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoYm9keSk7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChjb250ZW50VHlwZUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZS5DbG91ZC5odHRwUmVxdWVzdCcsICdtdWx0aXBsZSBjb250ZW50LXR5cGUgaGVhZGVycyBhcmUgc2V0LicpO1xuICAgIH1cbiAgICAvLyBUaGVyZSBtYXliZSBtYW55LCB3ZSdsbCBqdXN0IHRha2UgdGhlIDFzdCBvbmVcbiAgICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50VHlwZUtleXNbMF07XG4gICAgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL2pzb24vaSkpIHtcbiAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pKSkge1xuICAgICAgYm9keSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYm9keSwgaGVhZGVycyB9O1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbiBIVFRQIFJlcXVlc3QuXG4gKlxuICogKipBdmFpbGFibGUgaW4gQ2xvdWQgQ29kZSBvbmx5LioqXG4gKlxuICogQnkgZGVmYXVsdCwgUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3QgZG9lcyBub3QgZm9sbG93IHJlZGlyZWN0cyBjYXVzZWQgYnkgSFRUUCAzeHggcmVzcG9uc2UgY29kZXMuIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dSZWRpcmVjdHMgb3B0aW9uIGluIHRoZSB7QGxpbmsgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnN9IG9iamVjdCB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvci5cbiAqXG4gKiBTYW1wbGUgcmVxdWVzdDpcbiAqIGBgYFxuICogUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3Qoe1xuICogICB1cmw6ICdodHRwOi8vd3d3LnBhcnNlLmNvbS8nXG4gKiB9KS50aGVuKGZ1bmN0aW9uKGh0dHBSZXNwb25zZSkge1xuICogICAvLyBzdWNjZXNzXG4gKiAgIGNvbnNvbGUubG9nKGh0dHBSZXNwb25zZS50ZXh0KTtcbiAqIH0sZnVuY3Rpb24oaHR0cFJlc3BvbnNlKSB7XG4gKiAgIC8vIGVycm9yXG4gKiAgIGNvbnNvbGUuZXJyb3IoJ1JlcXVlc3QgZmFpbGVkIHdpdGggcmVzcG9uc2UgY29kZSAnICsgaHR0cFJlc3BvbnNlLnN0YXR1cyk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBtZXRob2QgaHR0cFJlcXVlc3RcbiAqIEBuYW1lIFBhcnNlLkNsb3VkLmh0dHBSZXF1ZXN0XG4gKiBAcGFyYW0ge1BhcnNlLkNsb3VkLkhUVFBPcHRpb25zfSBvcHRpb25zIFRoZSBQYXJzZS5DbG91ZC5IVFRQT3B0aW9ucyBvYmplY3QgdGhhdCBtYWtlcyB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8UGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIGEge0BsaW5rIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZX0gb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgbGV0IHVybDtcbiAgdHJ5IHtcbiAgICB1cmwgPSBwYXJzZShvcHRpb25zLnVybCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gIH1cbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgZW5jb2RlQm9keShvcHRpb25zKSk7XG4gIC8vIHN1cHBvcnQgcGFyYW1zIG9wdGlvbnNcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zLnFzID0gb3B0aW9ucy5wYXJhbXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMucXMgPSBxdWVyeXN0cmluZy5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gY2xpZW50c1t1cmwucHJvdG9jb2xdO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9YCk7XG4gIH1cbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICBwb3J0OiBOdW1iZXIodXJsLnBvcnQpLFxuICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBmb2xsb3dSZWRpcmVjdHM6IG9wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSB0cnVlLFxuICB9O1xuICBpZiAocmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh1cmwuc2VhcmNoKSB7XG4gICAgb3B0aW9ucy5xcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucXMsIHF1ZXJ5c3RyaW5nLnBhcnNlKHVybC5xdWVyeSkpO1xuICB9XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIHJlcXVlc3RPcHRpb25zLmF1dGggPSB1cmwuYXV0aDtcbiAgfVxuICBpZiAob3B0aW9ucy5xcykge1xuICAgIHJlcXVlc3RPcHRpb25zLnBhdGggKz0gYD8ke3F1ZXJ5c3RyaW5nLnN0cmluZ2lmeShvcHRpb25zLnFzKX1gO1xuICB9XG4gIGlmIChvcHRpb25zLmFnZW50KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYWdlbnQgPSBvcHRpb25zLmFnZW50O1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gY2xpZW50LnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG1ha2VDYWxsYmFjayhyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICByZXEud3JpdGUob3B0aW9ucy5ib2R5KTtcbiAgICB9XG4gICAgcmVxLm9uKCdlcnJvcicsIGVycm9yID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gICAgcmVxLmVuZCgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gYm9keSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC4gSWYgaXQgaXMgYSBKU09OIG9iamVjdCwgdGhlbiB0aGUgQ29udGVudC1UeXBlIHNldCBpbiB0aGUgaGVhZGVycyBtdXN0IGJlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvciBhcHBsaWNhdGlvbi9qc29uLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgdG8gYSB7QGxpbmsgQnVmZmVyfSBvYmplY3QgdG8gc2VuZCByYXcgYnl0ZXMuIElmIHlvdSB1c2UgYSBCdWZmZXIsIHlvdSBzaG91bGQgYWxzbyBzZXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgZXhwbGljaXRseSB0byBkZXNjcmliZSB3aGF0IHRoZXNlIGJ5dGVzIHJlcHJlc2VudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGVycm9yIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZhaWxzLiBJdCB3aWxsIGJlIHBhc3NlZCBhIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZSBvYmplY3QuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGZvbGxvd1JlZGlyZWN0cyBXaGV0aGVyIHRvIGZvbGxvdyByZWRpcmVjdHMgY2F1c2VkIGJ5IEhUVFAgM3h4IHJlc3BvbnNlcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWV0aG9kIFRoZSBtZXRob2Qgb2YgdGhlIHJlcXVlc3QuIEdFVCwgUE9TVCwgUFVULCBERUxFVEUsIEhFQUQsIGFuZCBPUFRJT05TIGFyZSBzdXBwb3J0ZWQuIFdpbGwgZGVmYXVsdCB0byBHRVQgaWYgbm90IHNwZWNpZmllZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gcGFyYW1zIFRoZSBxdWVyeSBwb3J0aW9uIG9mIHRoZSB1cmwuIFlvdSBjYW4gcGFzcyBhIEpTT04gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBsaWtlIHBhcmFtczoge3EgOiAnU2VhbiBQbG90dCd9IG9yIGEgcmF3IHN0cmluZyBsaWtlIHBhcmFtczpxPVNlYW4gUGxvdHQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuIEl0IHdpbGwgYmUgcGFzc2VkIGEgUGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgVGhlIHVybCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLlxuICovXG5cbm1vZHVsZS5leHBvcnRzLmVuY29kZUJvZHkgPSBlbmNvZGVCb2R5O1xuIl19
|